From 526c3b5c779fc5cca98c699a664c2a4bc0799d4c Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 5 Mar 2020 17:22:07 -0400 Subject: [PATCH 01/32] add readme --- README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.MD diff --git a/README.MD b/README.MD new file mode 100644 index 00000000..97cb5d90 --- /dev/null +++ b/README.MD @@ -0,0 +1 @@ +# BATALHA NAVAL MULTIPLAYER \ No newline at end of file From a63ae0df049dcf6034e72dbd533019f95cedfa10 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 12 Mar 2020 21:34:20 -0400 Subject: [PATCH 02/32] feat: cria rascunho do board do game --- index.html | 13 +++++++++++++ script.js | 16 ++++++++++++++++ style.css | 21 +++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 index.html create mode 100644 script.js create mode 100644 style.css diff --git a/index.html b/index.html new file mode 100644 index 00000000..69e3e84e --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Batalha Naval + + +
+ + + diff --git a/script.js b/script.js new file mode 100644 index 00000000..726e3adf --- /dev/null +++ b/script.js @@ -0,0 +1,16 @@ +function createSquare() { + let square = document.createElement("div"); + square.innerText = ""; + square.className = "square"; + return square; +} + +function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare()); + } + } +} + +window.onload = createBoard(); diff --git a/style.css b/style.css new file mode 100644 index 00000000..db5512be --- /dev/null +++ b/style.css @@ -0,0 +1,21 @@ +.container { + display: flex; + justify-content: center; + margin: 0 auto; +} + +.board { + display: grid; + grid-template-columns: repeat(10, 0.5fr); + grid-template-rows: repeat(10, 1fr); + width: 0%; +} +.square { + border-top: 1px solid black; + border-bottom: 1px solid black; + border-left: 1px solid black; + border-right: 1px solid black; + + width: 48px; + height: 48px; +} From 1b0af375885915f966cdf4a129fbdc533bae1096 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 12 Mar 2020 21:35:46 -0400 Subject: [PATCH 03/32] update reamde --- README.MD | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 97cb5d90..3cc30797 100644 --- a/README.MD +++ b/README.MD @@ -1 +1,5 @@ -# BATALHA NAVAL MULTIPLAYER \ No newline at end of file +# BATALHA NAVAL MULTIPLAYER + +### Rodando o projeto + +Abrir o index.html no seu browser favorito. From c9690a8823eb2d695b7f4631e9335308f5d46711 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Sun, 15 Mar 2020 19:08:42 -0400 Subject: [PATCH 04/32] update readme --- README.MD | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- script.js | 6 ++++- style.css | 8 +++++-- 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/README.MD b/README.MD index 3cc30797..003a508c 100644 --- a/README.MD +++ b/README.MD @@ -1,5 +1,66 @@ -# BATALHA NAVAL MULTIPLAYER +# Batalha Naval Multiplayer -### Rodando o projeto + -Abrir o index.html no seu browser favorito. +![GitHub repo size](https://img.shields.io/github/repo-size/hsborges/progweb-template) +![GitHub contributors](https://img.shields.io/github/contributors/hsborges/progweb-template) + +Nome_da_Aplicação é um/uma ... que permite/tem por objetivo/visa/etc .... + +Coloque aqui linhas adicionais com informações sobre o que a aplicação faz. Sua introdução deve ser de no máximo 3 parágrafos, seja simples e objetivo para não sobrecarregar de detalhes desnecessários este espaço. Se necessário, crie novas seções abaixo. + +## Pré-requisitos + +Antes de iniciar, certifique-se de cumprir os seguintes requisitos: + + + +- Você deve possuir a última versão do `` instalado. +- Você deve possuir uma máquina ``. (Deixe claro qual SO é possível rodar a aplicação, Linux é obrigatório). +- Você deve ler o `` dos termos de uso. +- (outros ...) + +## Como executar + +Para fazer o deploy da aplicação siga os seguintes passos: + +Linux e/ou macOS: + +``` + + +.... + +``` + +Windows (opcional): + +``` + +``` + +## Usando Nome_da_Aplicação + +Para usar Nome_da_Aplicação, siga os seguintes passos (exemplos): + +- Abra o navegador e digite o seguinte endereço: `http://localhost/....` +- Ao abrir a aplicação você poderá: + - Navegar pelo conteúdo público, ou + - Entrar com usuário e senha para .... +- _Continua ..._ + +_Descreva as principais atividades, e/ou fluxos, que são possíveis de serem realizadas na aplicação._ + +## Contribuidores + +As seguintes pessoas contribuiram para este projeto: + +- [Meu nome](https://github.com/meu_nome) +- _.... (liste todos os membros da equipe)_ + +## Licença de uso + + + +Este projeto usa a seguinte licença: [](link). +_Você também deve criar um arquivo chamado LICENSE no projeto_ diff --git a/script.js b/script.js index 726e3adf..c76074e6 100644 --- a/script.js +++ b/script.js @@ -1,7 +1,7 @@ function createSquare() { let square = document.createElement("div"); square.innerText = ""; - square.className = "square"; + square.className = `square`; return square; } @@ -13,4 +13,8 @@ function createBoard() { } } +function handleClick(e) { + alert(e); +} + window.onload = createBoard(); diff --git a/style.css b/style.css index db5512be..b3d40bb3 100644 --- a/style.css +++ b/style.css @@ -1,7 +1,11 @@ +.root { + width: 50%; + margin: 0 auto; + text-align: center; +} .container { display: flex; justify-content: center; - margin: 0 auto; } .board { @@ -15,7 +19,7 @@ border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; - + cursor: pointer; width: 48px; height: 48px; } From b1788f49bb6f8dab6f22b0758d4f1bdb01be7ee4 Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Fri, 13 Mar 2020 12:57:31 -0400 Subject: [PATCH 05/32] feat: add event listener em square --- script.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/script.js b/script.js index c76074e6..8ad6db0b 100644 --- a/script.js +++ b/script.js @@ -1,7 +1,12 @@ +let counter = 0; + function createSquare() { let square = document.createElement("div"); square.innerText = ""; - square.className = `square`; + square.className = "square"; + square.addEventListener('click', squareClicked) + square.id = counter++ + return square; } @@ -13,8 +18,7 @@ function createBoard() { } } -function handleClick(e) { - alert(e); +function squareClicked(e) { + console.log(e.target.id) } - window.onload = createBoard(); From 66ea8ee9859720119c91bd20d0cb2b7634aa710f Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Fri, 13 Mar 2020 13:34:50 -0400 Subject: [PATCH 06/32] inicia algoritmo para preencher posicoes --- script.js | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/script.js b/script.js index 8ad6db0b..46affd94 100644 --- a/script.js +++ b/script.js @@ -1,18 +1,53 @@ let counter = 0; -function createSquare() { +function createSquare(filled) { let square = document.createElement("div"); + square.innerText = ""; + + if (filled) { + square.innerText = "x"; + } square.className = "square"; - square.addEventListener('click', squareClicked) - square.id = counter++ + square.addEventListener("click", squareClicked); + square.id = counter++; return square; } +function populateSquares() { + let start = { + row: Math.floor(Math.random() * Math.floor(100)), + col: Math.floor(Math.random() * Math.floor(100)) + }; + + let end = { + row: Math.floor(Math.random() * Math.floor(100)), + col: Math.floor(Math.random() * Math.floor(100)) + }; + + /** Posição inválida: Mesmas coordenadas */ + if (start.row === end.row && start.col === end.row) { + return false; + } + /** Posição inválida: Coordenada diagonal*/ + if (start.row !== end.row && start.col !== end.row) { + return false; + } + + return [start, end]; +} + function createBoard() { for (let i = 0; i < 10; i++) { for (let j = 0; j < 10; j++) { + let populate = populateSquares() + if(populate && populate[0].row === i && populate[0].col === j) { + root.appendChild(createSquare(true)); + console.log('filled'); + + continue; + } root.appendChild(createSquare()); } } @@ -21,4 +56,5 @@ function createBoard() { function squareClicked(e) { console.log(e.target.id) } + window.onload = createBoard(); From 8899ef51522bb628ffa7ba087672393b54a5da63 Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Thu, 26 Mar 2020 19:56:58 -0400 Subject: [PATCH 07/32] initial commit --- script.js | 102 ++++++++++++++++++++++++++++++++++-------------------- style.css | 9 ++--- 2 files changed, 70 insertions(+), 41 deletions(-) diff --git a/script.js b/script.js index 46affd94..5812fb29 100644 --- a/script.js +++ b/script.js @@ -1,60 +1,88 @@ -let counter = 0; +let coordinates +let ships = [] -function createSquare(filled) { +function createSquare(i, j) { let square = document.createElement("div"); square.innerText = ""; - if (filled) { - square.innerText = "x"; - } square.className = "square"; square.addEventListener("click", squareClicked); - square.id = counter++; + square.id = String.fromCharCode(65 + i) + j; return square; } -function populateSquares() { - let start = { - row: Math.floor(Math.random() * Math.floor(100)), - col: Math.floor(Math.random() * Math.floor(100)) - }; +function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare(i, j)); + } + } +} + +function squareClicked(e) { + let { id } = e.target + console.log(ships); + + // if(coordinates.includes(id)) { + // let node = document.getElementById(id) + // node.style.backgroundColor = 'black' + // } +} - let end = { - row: Math.floor(Math.random() * Math.floor(100)), - col: Math.floor(Math.random() * Math.floor(100)) - }; +function getStartingPoints() { + const startingPoints = [] + const shipsNumber = random(6, 4) - /** Posição inválida: Mesmas coordenadas */ - if (start.row === end.row && start.col === end.row) { - return false; - } - /** Posição inválida: Coordenada diagonal*/ - if (start.row !== end.row && start.col !== end.row) { - return false; + for(let i = 0; i < shipsNumber; i++){ + let y = random(10, 0) + let x = String.fromCharCode(random(74, 65)) + + startingPoints.push(x + y) } - return [start, end]; + return startingPoints } -function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - let populate = populateSquares() - if(populate && populate[0].row === i && populate[0].col === j) { - root.appendChild(createSquare(true)); - console.log('filled'); +function setShipsPosition() { + const startingPoints = getStartingPoints() + console.log(startingPoints); + + startingPoints.map(point => { + let direction = Math.random() // 0 - Vertical, 1 - Horizontal + let ship = [] + let x = point[0] + let y = point[1] + + let size = 0 - continue; + if(direction === 0) { + size = random(y, 1) + } else { + size = random(10 -(x.charCodeAt(0) - 65), 1) + } + + for(let i = 0; i < size; i++) { + if(direction === 0) { + ship.push(x + (y += i)) + } else { + ship.push((x += i), y) } - root.appendChild(createSquare()); } - } + ships.push(ship) + }) } -function squareClicked(e) { - console.log(e.target.id) +/** + * + * @param {number} max Inclusive max value + * @param {number} min + */ +function random(max, min) { + return Math.floor(Math.random() * (max - min + 1)) + min } - -window.onload = createBoard(); +window.onload = (function() { + createBoard(); + setShipsPosition() +})() diff --git a/style.css b/style.css index b3d40bb3..a5dc2695 100644 --- a/style.css +++ b/style.css @@ -15,11 +15,12 @@ width: 0%; } .square { - border-top: 1px solid black; - border-bottom: 1px solid black; - border-left: 1px solid black; - border-right: 1px solid black; + border-top: 1px solid white; + border-bottom: 1px solid white; + border-left: 1px solid white; + border-right: 1px solid white; cursor: pointer; width: 48px; height: 48px; + background-color: blue; } From 7f37ad0eac5f4151db2321c51e20b1b8b563c4d6 Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Thu, 26 Mar 2020 20:07:54 -0400 Subject: [PATCH 08/32] remove readme duplicado --- README.md | 60 ------------------------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index be58e6da..00000000 --- a/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Nome_da_Aplicação - - -![GitHub repo size](https://img.shields.io/github/repo-size/hsborges/progweb-template) -![GitHub contributors](https://img.shields.io/github/contributors/hsborges/progweb-template) - -Nome_da_Aplicação é um/uma ... que permite/tem por objetivo/visa/etc .... - -Coloque aqui linhas adicionais com informações sobre o que a aplicação faz. Sua introdução deve ser de no máximo 3 parágrafos, seja simples e objetivo para não sobrecarregar de detalhes desnecessários este espaço. Se necessário, crie novas seções abaixo. - -## Pré-requisitos - -Antes de iniciar, certifique-se de cumprir os seguintes requisitos: - -* Você deve possuir a última versão do `` instalado. -* Você deve possuir uma máquina ``. (Deixe claro qual SO é possível rodar a aplicação, Linux é obrigatório). -* Você deve ler o `` dos termos de uso. -* (outros ...) - -## Como executar - -Para fazer o deploy da aplicação siga os seguintes passos: - -Linux e/ou macOS: -``` - - -.... - -``` - -Windows (opcional): -``` - -``` - -## Usando Nome_da_Aplicação - -Para usar Nome_da_Aplicação, siga os seguintes passos (exemplos): - -* Abra o navegador e digite o seguinte endereço: `http://localhost/....` -* Ao abrir a aplicação você poderá: - * Navegar pelo conteúdo público, ou - * Entrar com usuário e senha para .... -* *Continua ...* - -*Descreva as principais atividades, e/ou fluxos, que são possíveis de serem realizadas na aplicação.* - -## Contribuidores - -As seguintes pessoas contribuiram para este projeto: - -* [Meu nome](https://github.com/meu_nome) -* *.... (liste todos os membros da equipe)* - -## Licença de uso - - -Este projeto usa a seguinte licença: [](). -*Você também deve criar um arquivo chamado LICENSE no projeto* From 84473833523fd68183e9cc93576d0a9bab52d773 Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Thu, 26 Mar 2020 20:38:21 -0400 Subject: [PATCH 09/32] update readme --- README.MD | 50 ++++++++++++-------------------------------------- 1 file changed, 12 insertions(+), 38 deletions(-) diff --git a/README.MD b/README.MD index 003a508c..44c05069 100644 --- a/README.MD +++ b/README.MD @@ -5,62 +5,36 @@ ![GitHub repo size](https://img.shields.io/github/repo-size/hsborges/progweb-template) ![GitHub contributors](https://img.shields.io/github/contributors/hsborges/progweb-template) -Nome_da_Aplicação é um/uma ... que permite/tem por objetivo/visa/etc .... +Batalha Naval é um jogo de estratégia popular no mundo todo, conhecido pela possibilidade de jogá-lo somente com papel e caneta (e um oponente). Agora em sua versão século XXI. [Saiba mais sobre a história deste jogo](https://en.wikipedia.org/wiki/Battleship_(game)). -Coloque aqui linhas adicionais com informações sobre o que a aplicação faz. Sua introdução deve ser de no máximo 3 parágrafos, seja simples e objetivo para não sobrecarregar de detalhes desnecessários este espaço. Se necessário, crie novas seções abaixo. +## Planning + +- Você pode ver nosso projeto no [Trello](https://trello.com/b/H6AJ4LP3/batalha-naval-multiplayer) ## Pré-requisitos Antes de iniciar, certifique-se de cumprir os seguintes requisitos: - - -- Você deve possuir a última versão do `` instalado. -- Você deve possuir uma máquina ``. (Deixe claro qual SO é possível rodar a aplicação, Linux é obrigatório). -- Você deve ler o `` dos termos de uso. -- (outros ...) +- Um web browser atualizado, como Google Chrome ou Mozilla Firefox. ## Como executar -Para fazer o deploy da aplicação siga os seguintes passos: - -Linux e/ou macOS: - -``` - - -.... - -``` +- Abra o arquivo `index.html` no seu browser. -Windows (opcional): +## Usando Batalha Naval -``` - -``` +Para usar Batalha Naval, siga os seguintes passos: -## Usando Nome_da_Aplicação - -Para usar Nome_da_Aplicação, siga os seguintes passos (exemplos): - -- Abra o navegador e digite o seguinte endereço: `http://localhost/....` -- Ao abrir a aplicação você poderá: - - Navegar pelo conteúdo público, ou - - Entrar com usuário e senha para .... -- _Continua ..._ - -_Descreva as principais atividades, e/ou fluxos, que são possíveis de serem realizadas na aplicação._ +- Clique em qualquer célula disponível na tela. +- Procure acertar posições ocupadas por navios ## Contribuidores As seguintes pessoas contribuiram para este projeto: -- [Meu nome](https://github.com/meu_nome) +- [Gabriel Costa](https://github.com/gabcostasilva) - _.... (liste todos os membros da equipe)_ ## Licença de uso - - -Este projeto usa a seguinte licença: [](link). -_Você também deve criar um arquivo chamado LICENSE no projeto_ +todo From 27fa66158b4f59afbccacd351d61d6daacef2b46 Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Thu, 26 Mar 2020 20:44:59 -0400 Subject: [PATCH 10/32] update readme --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 44c05069..cb29ad56 100644 --- a/README.MD +++ b/README.MD @@ -33,7 +33,7 @@ Para usar Batalha Naval, siga os seguintes passos: As seguintes pessoas contribuiram para este projeto: - [Gabriel Costa](https://github.com/gabcostasilva) -- _.... (liste todos os membros da equipe)_ +- [Altair Aquino Alves Junior](https://github.com/Zaltair-alves) ## Licença de uso From badddef474f283f53d88e94c19b4971ff07cfce0 Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Sun, 29 Mar 2020 08:00:28 -0400 Subject: [PATCH 11/32] Update readme --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index cb29ad56..e561cf1b 100644 --- a/README.MD +++ b/README.MD @@ -34,6 +34,7 @@ As seguintes pessoas contribuiram para este projeto: - [Gabriel Costa](https://github.com/gabcostasilva) - [Altair Aquino Alves Junior](https://github.com/Zaltair-alves) +- [Cleriston Nantes Petrikic](http://github.com/petrikic) ## Licença de uso From 887dcb6f82c8406d7ea8870df27095986632c0f8 Mon Sep 17 00:00:00 2001 From: MoshGirl Date: Sun, 29 Mar 2020 13:10:25 -0300 Subject: [PATCH 12/32] Update readme --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index e561cf1b..a8ef05f7 100644 --- a/README.MD +++ b/README.MD @@ -35,6 +35,7 @@ As seguintes pessoas contribuiram para este projeto: - [Gabriel Costa](https://github.com/gabcostasilva) - [Altair Aquino Alves Junior](https://github.com/Zaltair-alves) - [Cleriston Nantes Petrikic](http://github.com/petrikic) +- [Anna Carollyne Pereira da Silva](http://github.com/MoshGirl) ## Licença de uso From 6c75d606bfdc329d9a5cd0ab8fc3cb01959d553f Mon Sep 17 00:00:00 2001 From: gabcostab4 Date: Sun, 29 Mar 2020 13:18:00 -0400 Subject: [PATCH 13/32] add license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..1697baae --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Gabriel Costa Silva Altair Aquino Alves Junior Cleriston Nantes Petrikic Anna Carollyne Pereira da Silva + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 1f4aa59c9d49f618423c5b8b4a685cfe3bfa0030 Mon Sep 17 00:00:00 2001 From: Gabriel Costa Date: Sun, 29 Mar 2020 13:20:43 -0400 Subject: [PATCH 14/32] Update README.MD --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index a8ef05f7..83bd4cb3 100644 --- a/README.MD +++ b/README.MD @@ -39,4 +39,4 @@ As seguintes pessoas contribuiram para este projeto: ## Licença de uso -todo +[MIT](https://github.com/GabCostaSilva/batalha-naval/blob/master/LICENSE) From 233bc2f1807bec449bb3c18026399c3b1c3a41dc Mon Sep 17 00:00:00 2001 From: Kemer-Souza <61856136+Kemer-Souza@users.noreply.github.com> Date: Fri, 3 Apr 2020 21:45:44 -0300 Subject: [PATCH 15/32] Add files via upload --- README.MD | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 83bd4cb3..217e9100 100644 --- a/README.MD +++ b/README.MD @@ -1,4 +1,4 @@ -# Batalha Naval Multiplayer +# Batalha Naval Multiplayer @@ -37,6 +37,9 @@ As seguintes pessoas contribuiram para este projeto: - [Cleriston Nantes Petrikic](http://github.com/petrikic) - [Anna Carollyne Pereira da Silva](http://github.com/MoshGirl) +- [Kemer Wander Souza Tomas](https://github.com/Kemer-Souza) + + ## Licença de uso [MIT](https://github.com/GabCostaSilva/batalha-naval/blob/master/LICENSE) From 2c1e124a52c1d20f754a8f8e43d045a71985b607 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 9 Apr 2020 19:33:03 -0400 Subject: [PATCH 16/32] feat: navios sao criados aleatoriamente no board --- script.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/script.js b/script.js index 5812fb29..a593a950 100644 --- a/script.js +++ b/script.js @@ -1,4 +1,3 @@ -let coordinates let ships = [] function createSquare(i, j) { @@ -23,12 +22,12 @@ function createBoard() { function squareClicked(e) { let { id } = e.target - console.log(ships); - - // if(coordinates.includes(id)) { - // let node = document.getElementById(id) - // node.style.backgroundColor = 'black' - // } + ships.map((ship) => { + if (ship.includes(id)) { + let node = document.getElementById(id) + node.style.backgroundColor = 'black' + } + }) } function getStartingPoints() { @@ -45,15 +44,14 @@ function getStartingPoints() { return startingPoints } -function setShipsPosition() { +function setShipsPositions() { const startingPoints = getStartingPoints() - console.log(startingPoints); startingPoints.map(point => { - let direction = Math.random() // 0 - Vertical, 1 - Horizontal + let direction = Math.round(Math.random()) // 0 - Vertical, 1 - Horizontal let ship = [] let x = point[0] - let y = point[1] + let y = Number(point[1]) let size = 0 @@ -65,9 +63,11 @@ function setShipsPosition() { for(let i = 0; i < size; i++) { if(direction === 0) { - ship.push(x + (y += i)) + y = (y + 1) % 10 + ship.push([x, y].join('')) } else { - ship.push((x += i), y) + let asciiCodeX = String.fromCharCode(x.charCodeAt(0) + i) + ship.push([asciiCodeX, y].join('')) } } ships.push(ship) @@ -84,5 +84,5 @@ function random(max, min) { } window.onload = (function() { createBoard(); - setShipsPosition() + setShipsPositions() })() From 260a3d46185dad2fa8b897875a2d033b62c827a2 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Fri, 10 Apr 2020 21:57:34 -0400 Subject: [PATCH 17/32] feat: add NodeJS to project --- .env.example | 2 + .gitignore | 3 + README.MD | 12 +- index.js | 17 ++ package.json | 17 ++ index.html => public/index.html | 0 public/script.js | 117 ++++++++++ style.css => public/style.css | 0 script.js | 88 -------- yarn.lock | 373 ++++++++++++++++++++++++++++++++ 10 files changed, 540 insertions(+), 89 deletions(-) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 index.js create mode 100644 package.json rename index.html => public/index.html (100%) create mode 100644 public/script.js rename style.css => public/style.css (100%) delete mode 100644 script.js create mode 100644 yarn.lock diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..64f3602c --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +NODE_ENV=development +PORT=8080 diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2c4bae52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/.vscode +.env diff --git a/README.MD b/README.MD index 217e9100..992b8def 100644 --- a/README.MD +++ b/README.MD @@ -17,9 +17,19 @@ Antes de iniciar, certifique-se de cumprir os seguintes requisitos: - Um web browser atualizado, como Google Chrome ou Mozilla Firefox. +- yarn ou npm + ## Como executar -- Abra o arquivo `index.html` no seu browser. +Execute os comandos
+ +`yarn`
+`yarn start`
+ +ou
+ +`npm install`
+`npm run start` ## Usando Batalha Naval diff --git a/index.js b/index.js new file mode 100644 index 00000000..cd8d593f --- /dev/null +++ b/index.js @@ -0,0 +1,17 @@ +require('dotenv').config() + +const path = require('path') +const express = require('express') +const app = require('express')() + +const PORT = process.env.PORT || '8080' + +app.use(express.static(path.join(__dirname, 'public'))) + +app.get('/', (req, res) => { + res.render('index.html') +}) + +app.listen(PORT, () => { + console.log(`listening at http://localhost:${PORT}`) +}) diff --git a/package.json b/package.json new file mode 100644 index 00000000..b778e4ba --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "batalha-naval", + "version": "1.0.0", + "description": "A simple Sea Battleships multiplayer and AI game", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "repository": "https://github.com/GabCostaSilva/batalha-naval.git", + "author": "gabcostasilva ", + "license": "MIT", + "private": false, + "dependencies": { + "dotenv": "^8.2.0", + "express": "^4.17.1" + } +} diff --git a/index.html b/public/index.html similarity index 100% rename from index.html rename to public/index.html diff --git a/public/script.js b/public/script.js new file mode 100644 index 00000000..5cef0bb8 --- /dev/null +++ b/public/script.js @@ -0,0 +1,117 @@ +let ships = [ + { + title: 'submarino', + size: 2, + quantity: 4, + coordinates: [] + }, + + { + title: 'contra-torpedos', + size: 3, + quantity: 3, + coordinates: [] + }, + + { + title: 'navio-tanque', + size: 4, + quantity: 2, + coordinates: [] + }, + + { + title: 'porta-avioes', + size: 5, + quantity: 1, + coordinates: [] + }, +] + +function createSquare(i, j) { + let square = document.createElement("div"); + + square.innerText = ""; + + square.className = "square"; + square.addEventListener("click", squareClicked); + square.id = [i, j].join(''); + + return square; +} + +function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare(i, j)); + } + } +} + +function squareClicked(e) { + let { id } = e.target; + ships.map((ship) => { + for(const coord of ship.coordinates){ + try { + let node = document.getElementById(coord.join('')); + node.style.backgroundColor = "black"; + } + catch(e) { + console.error(e.message) + } + } + }); +} + +/* Dont need this */ +function getStartingPoint(previous = ['', '']) { + return new Promise((resolve, reject) => { + let y = random(9, 0); + let x = random(9, 0); + + while (x === previous[0] && y === previous[1]) { + y = random(9, 0); + x = random(9, 0); + } + + resolve([x, y]) + }) +} + +function setShipsPositions() { + let prevStartingPoints = [0, 0] + for (let ship of ships) { + for(let i = 0; i < ship.quantity; i++) { + let direction = Math.round(Math.random()) === 0 ? "vertical" : "horizontal"; // 0 - Vertical, 1 - Horizontal + getStartingPoint(prevStartingPoints).then((startPoint) => { + prevStartingPoints.push(startPoint) + x = startPoint[0] + y = startPoint[1] + + for (let j = 0; j < ship.size; j++) { + if (direction === "vertical") { + y = (y + 1) % 10; + ship.coordinates.push([x, y]); + } else { + x = (x + 1) % 10 + ship.coordinates.push([x, y]); + } + } + }) + } + } +} + +/** + * + * @param {number} max Inclusive max value + * @param {number} min + */ +function random(max, min) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +window.onload = (function () { + createBoard(); + setShipsPositions(); +})(); diff --git a/style.css b/public/style.css similarity index 100% rename from style.css rename to public/style.css diff --git a/script.js b/script.js deleted file mode 100644 index a593a950..00000000 --- a/script.js +++ /dev/null @@ -1,88 +0,0 @@ -let ships = [] - -function createSquare(i, j) { - let square = document.createElement("div"); - - square.innerText = ""; - - square.className = "square"; - square.addEventListener("click", squareClicked); - square.id = String.fromCharCode(65 + i) + j; - - return square; -} - -function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - root.appendChild(createSquare(i, j)); - } - } -} - -function squareClicked(e) { - let { id } = e.target - ships.map((ship) => { - if (ship.includes(id)) { - let node = document.getElementById(id) - node.style.backgroundColor = 'black' - } - }) -} - -function getStartingPoints() { - const startingPoints = [] - const shipsNumber = random(6, 4) - - for(let i = 0; i < shipsNumber; i++){ - let y = random(10, 0) - let x = String.fromCharCode(random(74, 65)) - - startingPoints.push(x + y) - } - - return startingPoints -} - -function setShipsPositions() { - const startingPoints = getStartingPoints() - - startingPoints.map(point => { - let direction = Math.round(Math.random()) // 0 - Vertical, 1 - Horizontal - let ship = [] - let x = point[0] - let y = Number(point[1]) - - let size = 0 - - if(direction === 0) { - size = random(y, 1) - } else { - size = random(10 -(x.charCodeAt(0) - 65), 1) - } - - for(let i = 0; i < size; i++) { - if(direction === 0) { - y = (y + 1) % 10 - ship.push([x, y].join('')) - } else { - let asciiCodeX = String.fromCharCode(x.charCodeAt(0) + i) - ship.push([asciiCodeX, y].join('')) - } - } - ships.push(ship) - }) -} - -/** - * - * @param {number} max Inclusive max value - * @param {number} min - */ -function random(max, min) { - return Math.floor(Math.random() * (max - min + 1)) + min -} -window.onload = (function() { - createBoard(); - setShipsPositions() -})() diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..a5e708db --- /dev/null +++ b/yarn.lock @@ -0,0 +1,373 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= From 9b50d6e65a72bfd2e9d2dd4952b12e1a9e0c4ca1 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Sat, 11 Apr 2020 10:49:16 -0400 Subject: [PATCH 18/32] update readme --- README.MD | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 992b8def..9ebb545c 100644 --- a/README.MD +++ b/README.MD @@ -29,8 +29,10 @@ Execute os comandos
ou
`npm install`
-`npm run start` +`npm run start`
+Após instalar as dependências e rodar o server, game estará rodando em

+[http://localhost:8080](http://localhost:8080) ## Usando Batalha Naval Para usar Batalha Naval, siga os seguintes passos: From e80f35b028d688d91361aa142e65ac5cb627ce4d Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Mon, 20 Apr 2020 05:55:47 -0400 Subject: [PATCH 19/32] Inserindo navios de forma aleatoria --- public/script.js | 382 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 296 insertions(+), 86 deletions(-) diff --git a/public/script.js b/public/script.js index 5cef0bb8..e9fe9015 100644 --- a/public/script.js +++ b/public/script.js @@ -1,117 +1,327 @@ -let ships = [ +let forbidden = { + type: 'forbidden' +}; + +let field = createField(); + +let shipStruct = [ { - title: 'submarino', - size: 2, - quantity: 4, - coordinates: [] + part: [ + { + type: 'porta-avioes', + position: '0', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '1', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '2', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '3', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '4', + status: 'ok' + } + ] }, - { - title: 'contra-torpedos', - size: 3, - quantity: 3, - coordinates: [] + part: [ + { + type: 'navio-tanque', + position: '0', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '1', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '2', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '3', + status: 'ok' + } + ] }, - { - title: 'navio-tanque', - size: 4, - quantity: 2, - coordinates: [] + part: [ + { + type: 'navio-tanque', + position: '0', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '1', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '2', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '3', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] }, - { - title: 'porta-avioes', - size: 5, - quantity: 1, - coordinates: [] + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + } ] -function createSquare(i, j) { - let square = document.createElement("div"); - - square.innerText = ""; +function createField(){ + let arr = new Array(10); - square.className = "square"; - square.addEventListener("click", squareClicked); - square.id = [i, j].join(''); + for (let i = 0; i < 10; i++){ + arr[i] = new Array(10); + } - return square; + return arr; } -function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - root.appendChild(createSquare(i, j)); +function createSquare(i, j) { + let square = document.createElement('div'); + + square.innerText = ''; + + square.className = 'square'; + square.addEventListener('click', squareClicked); + square.id = [i, j].join(''); + + return square; + } + + function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare(i, j)); + } } } -} + + function squareClicked(e) { + let node = document.getElementById(this.id); + //node.style.backgroundColor = 'black'; + + } -function squareClicked(e) { - let { id } = e.target; - ships.map((ship) => { - for(const coord of ship.coordinates){ - try { - let node = document.getElementById(coord.join('')); - node.style.backgroundColor = "black"; + function validatePosition(i, j, orientation, size){ // checks if the position is valid. + let isValid = true; + if(orientation){ + for(i; i < size && isValid; i++){ + if(field[i][j]!= undefined){ + isValid = false; + } } - catch(e) { - console.error(e.message) + } + else{ + for(i; i < size && isValid; i++){ + if(field[j][i]!= undefined){ + isValid = false; + } } } - }); -} + + return isValid; + } -/* Dont need this */ -function getStartingPoint(previous = ['', '']) { - return new Promise((resolve, reject) => { - let y = random(9, 0); - let x = random(9, 0); + function setShipsPositions(){ + for(let ship of shipStruct){ + let x, y, orientation; + do{ + x = random(0, 9 - ship.part.length); + y = random(0, 9); + orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. + }while(!validatePosition(x, y, orientation, ship.part.length + x)); - while (x === previous[0] && y === previous[1]) { - y = random(9, 0); - x = random(9, 0); + if(orientation){ + if(x > 0){ + field[x-1][y] = forbidden; + } + if(x+ship.part.length < 10){ + field[x + ship.part.length][y] = forbidden; + } + for(let i = 0; i < ship.part.length; i++){ + field[x+i][y] = ship.part[i]; + if(y > 0){ + field[x+i][y-1] = forbidden; + } + if(y < 9){ + field[x+i][y+1] = forbidden; + } + } + } + else{ + if(x > 0){ + field[y][x-1] = forbidden; + } + if(x+ship.part.length < 10){ + field[y][x + ship.part.length] = forbidden; + } + for(let i = 0; i < ship.part.length; i++){ + field[y][x+i] = ship.part[i]; + if(y > 0){ + field[y-1][x+i] = forbidden; + } + if(y < 9){ + field[y+1][x+i] = forbidden; + } + } + } + for(let i = 0; i < ship.part.length; i++){ + console.log(ship.part[i]); + } } + } - resolve([x, y]) - }) -} - -function setShipsPositions() { - let prevStartingPoints = [0, 0] - for (let ship of ships) { - for(let i = 0; i < ship.quantity; i++) { - let direction = Math.round(Math.random()) === 0 ? "vertical" : "horizontal"; // 0 - Vertical, 1 - Horizontal - getStartingPoint(prevStartingPoints).then((startPoint) => { - prevStartingPoints.push(startPoint) - x = startPoint[0] - y = startPoint[1] - - for (let j = 0; j < ship.size; j++) { - if (direction === "vertical") { - y = (y + 1) % 10; - ship.coordinates.push([x, y]); - } else { - x = (x + 1) % 10 - ship.coordinates.push([x, y]); - } + function mapShips(){ + for(let i = 0; i < field.length; i++){ + for(let j = 0; j < field[i].length; j++){ + if(field[i][j] != undefined){ + let sqr = document.getElementById([i, j].join('')); + sqr.style.backgroundColor = 'black'; } - }) + if(field[i][j] == forbidden){ + let sqr = document.getElementById([i, j].join('')); + sqr.style.backgroundColor = 'gray'; + } + } } } -} -/** - * - * @param {number} max Inclusive max value - * @param {number} min - */ -function random(max, min) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} -window.onload = (function () { + function random(min, max) { + return Math.floor(Math.random() * (min + max + 1) - min); + } + createBoard(); setShipsPositions(); -})(); + mapShips(); \ No newline at end of file From ac8557b1fdeaaa336391a7cbc33862c29e99337e Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Tue, 21 Apr 2020 18:54:40 -0400 Subject: [PATCH 20/32] feat: add game logic to server side --- game/mapShips.js | 101 ++++++++ game/ships.js | 192 +++++++++++++++ index.js | 22 +- package.json | 3 +- public/script.js | 340 ++------------------------- public/style.css | 14 +- public/index.html => views/index.ejs | 8 +- yarn.lock | 251 +++++++++++++++++++- 8 files changed, 609 insertions(+), 322 deletions(-) create mode 100644 game/mapShips.js create mode 100644 game/ships.js rename public/index.html => views/index.ejs (62%) diff --git a/game/mapShips.js b/game/mapShips.js new file mode 100644 index 00000000..152b405f --- /dev/null +++ b/game/mapShips.js @@ -0,0 +1,101 @@ +let shipStruct = require('./ships') + +let forbidden = { + type: 'forbidden' +}; + +let field = createField(); + +function createField(){ + let arr = new Array(10); + + for (let i = 0; i < 10; i++){ + arr[i] = new Array(10); + } + + return arr; +} + +function validatePosition(i, j, orientation, size){ // checks if the position is valid. + let isValid = true; + if(orientation){ + for(i; i < size && isValid; i++){ + if(field[i][j]!= undefined){ + isValid = false; + } + } + } + else{ + for(i; i < size && isValid; i++){ + if(field[j][i]!= undefined){ + isValid = false; + } + } + } + + return isValid; +} + +function setShipsPositions(){ + for(let ship of shipStruct){ + let x, y, orientation; + do{ + x = random(0, 9 - ship.part.length); + y = random(0, 9); + orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. + }while(!validatePosition(x, y, orientation, ship.part.length + x)); + + if(orientation){ + if(x > 0){ + field[x-1][y] = forbidden; + } + if(x+ship.part.length < 10){ + field[x + ship.part.length][y] = forbidden; + } + for(let i = 0; i < ship.part.length; i++){ + field[x+i][y] = ship.part[i]; + if(y > 0){ + field[x+i][y-1] = forbidden; + } + if(y < 9){ + field[x+i][y+1] = forbidden; + } + } + } + else{ + if(x > 0){ + field[y][x-1] = forbidden; + } + if(x+ship.part.length < 10){ + field[y][x + ship.part.length] = forbidden; + } + for(let i = 0; i < ship.part.length; i++){ + field[y][x+i] = ship.part[i]; + if(y > 0){ + field[y-1][x+i] = forbidden; + } + if(y < 9){ + field[y+1][x+i] = forbidden; + } + } + } + } +} + +function random(min, max) { + return Math.floor(Math.random() * (min + max + 1) - min); +} + +exports.mapShips = function() { + let shipsMap = [] + setShipsPositions() + for(let i = 0; i < field.length; i++){ + for(let j = 0; j < field[i].length; j++){ + if(field[i][j] != undefined && field[i][j] !== forbidden){ + shipsMap.push([i, j].join('')) + } + } + } + + return shipsMap +} diff --git a/game/ships.js b/game/ships.js new file mode 100644 index 00000000..7895aa0b --- /dev/null +++ b/game/ships.js @@ -0,0 +1,192 @@ +module.exports = [ + { + part: [ + { + type: 'porta-avioes', + position: '0', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '1', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '2', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '3', + status: 'ok' + }, + { + type: 'porta-avioes', + position: '4', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'navio-tanque', + position: '0', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '1', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '2', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '3', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'navio-tanque', + position: '0', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '1', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '2', + status: 'ok' + }, + { + type: 'navio-tanque', + position: '3', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'contra-torpedos', + position: '0', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '1', + status: 'ok' + }, + { + type: 'contra-torpedos', + position: '2', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + }, + { + part: [ + { + type: 'submarino', + position: '0', + status: 'ok' + }, + { + type: 'submarino', + position: '1', + status: 'ok' + } + ] + } +] diff --git a/index.js b/index.js index cd8d593f..17513767 100644 --- a/index.js +++ b/index.js @@ -1,17 +1,33 @@ require('dotenv').config() - const path = require('path') const express = require('express') const app = require('express')() +const http = require('http').createServer(app); +const io = require('socket.io')(http); + +const {mapShips} = require('./game/mapShips') +const shipsMap = mapShips() const PORT = process.env.PORT || '8080' app.use(express.static(path.join(__dirname, 'public'))) +app.set('view engine', 'ejs'); + app.get('/', (req, res) => { - res.render('index.html') + res.render('index') }) -app.listen(PORT, () => { +io.on('connection', (socket) => { + socket.on('click', (id) => { + if(shipsMap.includes(id)) { + io.emit('hit', id); + } else { + io.emit('miss', id); + } + }) +}); + +http.listen(PORT, () => { console.log(`listening at http://localhost:${PORT}`) }) diff --git a/package.json b/package.json index b778e4ba..27330c10 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "private": false, "dependencies": { "dotenv": "^8.2.0", - "express": "^4.17.1" + "express": "^4.17.1", + "socket.io": "^2.3.0" } } diff --git a/public/script.js b/public/script.js index e9fe9015..749c82f6 100644 --- a/public/script.js +++ b/public/script.js @@ -1,327 +1,39 @@ -let forbidden = { - type: 'forbidden' -}; - -let field = createField(); - -let shipStruct = [ - { - part: [ - { - type: 'porta-avioes', - position: '0', - status: 'ok' - }, - { - type: 'porta-avioes', - position: '1', - status: 'ok' - }, - { - type: 'porta-avioes', - position: '2', - status: 'ok' - }, - { - type: 'porta-avioes', - position: '3', - status: 'ok' - }, - { - type: 'porta-avioes', - position: '4', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'navio-tanque', - position: '0', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '1', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '2', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '3', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'navio-tanque', - position: '0', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '1', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '2', - status: 'ok' - }, - { - type: 'navio-tanque', - position: '3', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'contra-torpedos', - position: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '2', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'contra-torpedos', - position: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '2', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'contra-torpedos', - position: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - position: '2', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'submarino', - position: '0', - status: 'ok' - }, - { - type: 'submarino', - position: '1', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'submarino', - position: '0', - status: 'ok' - }, - { - type: 'submarino', - position: '1', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'submarino', - position: '0', - status: 'ok' - }, - { - type: 'submarino', - position: '1', - status: 'ok' - } - ] - }, - { - part: [ - { - type: 'submarino', - position: '0', - status: 'ok' - }, - { - type: 'submarino', - position: '1', - status: 'ok' - } - ] - } -] - -function createField(){ - let arr = new Array(10); - - for (let i = 0; i < 10; i++){ - arr[i] = new Array(10); - } - - return arr; -} +const socket = io(); function createSquare(i, j) { let square = document.createElement('div'); - + square.innerText = ''; - - square.className = 'square'; - square.addEventListener('click', squareClicked); - square.id = [i, j].join(''); - - return square; - } - - function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - root.appendChild(createSquare(i, j)); - } - } - } - - function squareClicked(e) { - let node = document.getElementById(this.id); - //node.style.backgroundColor = 'black'; - - } - function validatePosition(i, j, orientation, size){ // checks if the position is valid. - let isValid = true; - if(orientation){ - for(i; i < size && isValid; i++){ - if(field[i][j]!= undefined){ - isValid = false; - } - } - } - else{ - for(i; i < size && isValid; i++){ - if(field[j][i]!= undefined){ - isValid = false; - } - } - } - - return isValid; - } + square.className = 'square sea'; + square.addEventListener('click', onClick) + square.id = [i, j].join(''); - function setShipsPositions(){ - for(let ship of shipStruct){ - let x, y, orientation; - do{ - x = random(0, 9 - ship.part.length); - y = random(0, 9); - orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. - }while(!validatePosition(x, y, orientation, ship.part.length + x)); + return square; +} - if(orientation){ - if(x > 0){ - field[x-1][y] = forbidden; - } - if(x+ship.part.length < 10){ - field[x + ship.part.length][y] = forbidden; - } - for(let i = 0; i < ship.part.length; i++){ - field[x+i][y] = ship.part[i]; - if(y > 0){ - field[x+i][y-1] = forbidden; - } - if(y < 9){ - field[x+i][y+1] = forbidden; - } - } - } - else{ - if(x > 0){ - field[y][x-1] = forbidden; - } - if(x+ship.part.length < 10){ - field[y][x + ship.part.length] = forbidden; - } - for(let i = 0; i < ship.part.length; i++){ - field[y][x+i] = ship.part[i]; - if(y > 0){ - field[y-1][x+i] = forbidden; - } - if(y < 9){ - field[y+1][x+i] = forbidden; - } - } - } - for(let i = 0; i < ship.part.length; i++){ - console.log(ship.part[i]); - } - } - } - function mapShips(){ - for(let i = 0; i < field.length; i++){ - for(let j = 0; j < field[i].length; j++){ - if(field[i][j] != undefined){ - let sqr = document.getElementById([i, j].join('')); - sqr.style.backgroundColor = 'black'; - } - if(field[i][j] == forbidden){ - let sqr = document.getElementById([i, j].join('')); - sqr.style.backgroundColor = 'gray'; - } - } +function onClick(event) { + event.preventDefault() + socket.emit('click', event.target.id) +} +(function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare(i, j)); } } +})() +function handleHit(id) { + let sqr = document.getElementById(id) + sqr.classList.add('hit') +} - function random(min, max) { - return Math.floor(Math.random() * (min + max + 1) - min); - } +function handleMiss(id) { + let sqr = document.getElementById(id) + sqr.classList.add('miss') +} - createBoard(); - setShipsPositions(); - mapShips(); \ No newline at end of file +socket.on('hit', handleHit) +socket.on('miss', handleMiss) diff --git a/public/style.css b/public/style.css index a5dc2695..b707c7b0 100644 --- a/public/style.css +++ b/public/style.css @@ -22,5 +22,17 @@ cursor: pointer; width: 48px; height: 48px; - background-color: blue; + background-color: rgba(71, 105, 255, .75) +} + +.sea { + background-color: rgba(71, 105, 255, .75) +} + +.hit { + background-color: black; +} + +.miss { + background-color: grey; } diff --git a/public/index.html b/views/index.ejs similarity index 62% rename from public/index.html rename to views/index.ejs index 69e3e84e..5d1d24c3 100644 --- a/public/index.html +++ b/views/index.ejs @@ -7,7 +7,11 @@ Batalha Naval -
- +
+
+ + + diff --git a/yarn.lock b/yarn.lock index a5e708db..219031de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -accepts@~1.3.7: +accepts@~1.3.4, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -10,11 +10,53 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -36,6 +78,26 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -53,6 +115,11 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" @@ -65,6 +132,20 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -90,6 +171,46 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +engine.io-client@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.1.tgz#922ddb47eecdcb541136a93aeead24718fd05461" + integrity sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~4.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" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" + integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.1.tgz#a61cbc13fa0cb27d9453fd079a29ee980564b069" + integrity sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "0.3.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -159,6 +280,18 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -188,6 +321,11 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -203,6 +341,11 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -245,11 +388,21 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -257,6 +410,20 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -339,11 +506,71 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== + dependencies: + 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" + 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" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" + integrity sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== + dependencies: + debug "~4.1.0" + engine.io "~3.4.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -371,3 +598,25 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +ws@^7.1.2: + version "7.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" + integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== + +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + dependencies: + async-limiter "~1.0.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= From d3d29bc1e337705e0e3a15487800cc3f5facfb56 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Wed, 22 Apr 2020 19:47:37 -0400 Subject: [PATCH 21/32] feat: add sidebar with score --- package.json | 2 +- public/script.js | 39 ---------------- public/style.css | 38 --------------- {game => src/game}/mapShips.js | 0 {game => src/game}/ships.js | 0 index.js => src/index.js | 24 ++++++++-- src/public/script.js | 42 +++++++++++++++++ src/public/socket.js | 21 +++++++++ src/public/style.css | 85 ++++++++++++++++++++++++++++++++++ src/views/index.ejs | 25 ++++++++++ views/index.ejs | 17 ------- 11 files changed, 194 insertions(+), 99 deletions(-) delete mode 100644 public/script.js delete mode 100644 public/style.css rename {game => src/game}/mapShips.js (100%) rename {game => src/game}/ships.js (100%) rename index.js => src/index.js (60%) create mode 100644 src/public/script.js create mode 100644 src/public/socket.js create mode 100644 src/public/style.css create mode 100644 src/views/index.ejs delete mode 100644 views/index.ejs diff --git a/package.json b/package.json index 27330c10..f179ef54 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A simple Sea Battleships multiplayer and AI game", "main": "index.js", "scripts": { - "start": "node index.js" + "start": "node src/index.js" }, "repository": "https://github.com/GabCostaSilva/batalha-naval.git", "author": "gabcostasilva ", diff --git a/public/script.js b/public/script.js deleted file mode 100644 index 749c82f6..00000000 --- a/public/script.js +++ /dev/null @@ -1,39 +0,0 @@ -const socket = io(); - -function createSquare(i, j) { - let square = document.createElement('div'); - - square.innerText = ''; - - square.className = 'square sea'; - square.addEventListener('click', onClick) - square.id = [i, j].join(''); - - return square; -} - - -function onClick(event) { - event.preventDefault() - socket.emit('click', event.target.id) -} -(function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - root.appendChild(createSquare(i, j)); - } - } -})() - -function handleHit(id) { - let sqr = document.getElementById(id) - sqr.classList.add('hit') -} - -function handleMiss(id) { - let sqr = document.getElementById(id) - sqr.classList.add('miss') -} - -socket.on('hit', handleHit) -socket.on('miss', handleMiss) diff --git a/public/style.css b/public/style.css deleted file mode 100644 index b707c7b0..00000000 --- a/public/style.css +++ /dev/null @@ -1,38 +0,0 @@ -.root { - width: 50%; - margin: 0 auto; - text-align: center; -} -.container { - display: flex; - justify-content: center; -} - -.board { - display: grid; - grid-template-columns: repeat(10, 0.5fr); - grid-template-rows: repeat(10, 1fr); - width: 0%; -} -.square { - border-top: 1px solid white; - border-bottom: 1px solid white; - border-left: 1px solid white; - border-right: 1px solid white; - cursor: pointer; - width: 48px; - height: 48px; - background-color: rgba(71, 105, 255, .75) -} - -.sea { - background-color: rgba(71, 105, 255, .75) -} - -.hit { - background-color: black; -} - -.miss { - background-color: grey; -} diff --git a/game/mapShips.js b/src/game/mapShips.js similarity index 100% rename from game/mapShips.js rename to src/game/mapShips.js diff --git a/game/ships.js b/src/game/ships.js similarity index 100% rename from game/ships.js rename to src/game/ships.js diff --git a/index.js b/src/index.js similarity index 60% rename from index.js rename to src/index.js index 17513767..5a53333a 100644 --- a/index.js +++ b/src/index.js @@ -1,27 +1,43 @@ require('dotenv').config() + const path = require('path') const express = require('express') const app = require('express')() const http = require('http').createServer(app); -const io = require('socket.io')(http); - +const io = require('socket.io')(http) const {mapShips} = require('./game/mapShips') + const shipsMap = mapShips() +const destroyed = [] + const PORT = process.env.PORT || '8080' +let score = 0 + app.use(express.static(path.join(__dirname, 'public'))) +app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.get('/', (req, res) => { - res.render('index') + res.render('index', {title: 'Batalha Naval', score: score}) }) +/* Socket */ io.on('connection', (socket) => { socket.on('click', (id) => { if(shipsMap.includes(id)) { - io.emit('hit', id); + if(!destroyed.includes(id)) { + destroyed.push(id) + score++ + if(score === 30) { + score = 0 + io.emit('won') + return + } + io.emit('hit', id, score); + } } else { io.emit('miss', id); } diff --git a/src/public/script.js b/src/public/script.js new file mode 100644 index 00000000..c2a3b4c1 --- /dev/null +++ b/src/public/script.js @@ -0,0 +1,42 @@ +const socket = io(); + +function createSquare(i, j) { + let square = document.createElement('div'); + + square.innerText = ''; + + square.className = 'square sea'; + square.addEventListener('click', onClick) + square.id = [i, j].join(''); + + return square; +} + +function onClick(event) { + event.preventDefault() + socket.emit('click', event.target.id) +} +(function createBoard() { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + root.appendChild(createSquare(i, j)); + } + } +})() + +// Catch all the `[data-toggle-sidebar]` elements on the document. +document.querySelectorAll('[data-toggle-sidebar]').forEach(toggle => { + // Add an event listener on those elements "click" event + toggle.addEventListener('click', e => { + // get the sidebar ID from the current element data attribute + const sidebarID = toggle.dataset.toggleSidebar; + // check if there is an element on the doc with the id + const sidebarElement = sidebarID ? document.getElementById(sidebarID) : undefined; + // if there is a sidebar with the passed id (data-toggle-sidebar) + if (sidebarElement) { + // toggle the aria-hidden state of the given sidebar + let sidebarState = sidebarElement.getAttribute('aria-hidden'); + sidebarElement.setAttribute('aria-hidden', sidebarState == 'true' ? false : true); + } + }); +}); diff --git a/src/public/socket.js b/src/public/socket.js new file mode 100644 index 00000000..4d069026 --- /dev/null +++ b/src/public/socket.js @@ -0,0 +1,21 @@ +/** SOCKET */ +function handleHit(id, score) { + let sqr = document.getElementById(id) + let scr = document.getElementById('score') + + scr.innerText = score + sqr.classList.add('hit') +} + +function handleMiss(id) { + let sqr = document.getElementById(id) + sqr.classList.add('miss') +} + +function handleVictory() { + alert('You Win!!!') +} + +socket.on('hit', handleHit) +socket.on('miss', handleMiss) +socket.on('won', handleVictory) diff --git a/src/public/style.css b/src/public/style.css new file mode 100644 index 00000000..96ac23b2 --- /dev/null +++ b/src/public/style.css @@ -0,0 +1,85 @@ +body { + height: 100vh; +} +.root { + width: 50%; + margin: 0 auto; + text-align: center; +} +.container { + display: flex; + justify-content: center; +} + +.board { + display: grid; + grid-template-columns: repeat(10, 0.5fr); + grid-template-rows: repeat(10, 1fr); + width: 0%; +} +.square { + border-top: 1px solid white; + border-bottom: 1px solid white; + border-left: 1px solid white; + border-right: 1px solid white; + cursor: pointer; + width: 48px; + height: 48px; + background-color: rgba(71, 105, 255, .75) +} + +.main { +display: flex; +} +.content { + position: relative; +} + +/**** SIDEBAR ****/ +.sidebar { + background-color: #f1f1f1; + height: 100vh; + position: fixed; + top: 0; + right: 0; + min-width: 300px; +} + +.sidebar_content { + padding: 8px; + overflow-y: scroll; + overflow-x: hidden; +} + +.sidebar[aria-hidden="true"] { + transition: 200ms; + transform: translateX(100%); +} +/* SIDEBAR VISIBLE STATE */ +.sidebar:not([aria-hidden]), +.sidebar[aria-hidden="false"] { + transition: 200ms; + transform: translateX(0); +} +/****************************/ + +#score { + padding: 5px 0px 5px 0px; + width: 64px; + text-align: center; + /* height: 24px; */ + border: 1px black solid; + border-radius: 8px; +} + +.sea { + background-color: rgba(71, 105, 255, .75) +} + +.hit { + background-color: black; +} + +.miss { + background-color: grey; +} diff --git a/src/views/index.ejs b/src/views/index.ejs new file mode 100644 index 00000000..68815cb2 --- /dev/null +++ b/src/views/index.ejs @@ -0,0 +1,25 @@ + + + + + + + <%= title %> + + +
+
+
+ + + + + + + diff --git a/views/index.ejs b/views/index.ejs deleted file mode 100644 index 5d1d24c3..00000000 --- a/views/index.ejs +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - Batalha Naval - - -
-
- - - - - From 6949dcb5217dc0b99eb364b10aa5f88c97b2d62c Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Mon, 27 Apr 2020 16:16:54 -0400 Subject: [PATCH 22/32] Verificando se todos os navios foram destruidos --- package.json | 1 + src/game/mapShips.js | 127 ++++++++++++---------- src/game/ships.js | 252 +++++++++++++++++++++---------------------- src/index.js | 78 ++++++++++---- src/public/script.js | 1 + src/public/socket.js | 32 ++++-- src/public/style.css | 4 + yarn.lock | 99 +++++++++++++++++ 8 files changed, 378 insertions(+), 216 deletions(-) diff --git a/package.json b/package.json index f179ef54..22d8e8c5 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "private": false, "dependencies": { "dotenv": "^8.2.0", + "ejs": "^3.1.2", "express": "^4.17.1", "socket.io": "^2.3.0" } diff --git a/src/game/mapShips.js b/src/game/mapShips.js index 152b405f..b8088d3f 100644 --- a/src/game/mapShips.js +++ b/src/game/mapShips.js @@ -1,10 +1,9 @@ let shipStruct = require('./ships') -let forbidden = { - type: 'forbidden' -}; +let forbidden = {type: 'forbidden'}; let field = createField(); +let limit = createField(); function createField(){ let arr = new Array(10); @@ -16,69 +15,92 @@ function createField(){ return arr; } -function validatePosition(i, j, orientation, size){ // checks if the position is valid. +function validatePosition(x, y, orientation, size){ // checks if the position is valid. let isValid = true; if(orientation){ - for(i; i < size && isValid; i++){ - if(field[i][j]!= undefined){ + for(let i = 0; i < size && isValid; i++){ + if(limit[x + i][y]!= undefined){ isValid = false; } } } else{ - for(i; i < size && isValid; i++){ - if(field[j][i]!= undefined){ + for(let i = 0; i < size && isValid; i++){ + if(limit[y][x + i]!= undefined){ isValid = false; } } } - + return isValid; } +function setLimit(x, y, orientation, size){ + if(orientation){ + for(let i = 0; i < size; i++){ + limit[x +i][y] = forbidden; + if(y > 0){ + limit[x +i][y -1] = forbidden; + } + if(y < 9){ + limit[x +i][y +1] = forbidden; + } + } + if(x > 0){ + limit[x-1][y] = forbidden; + } + if(x + size < 10){ + limit[x + size][y] = forbidden; + } + } + else{ + for(let i = 0; i < size; i++){ + limit[y][x +i] = forbidden; + if(y > 0){ + limit[y -1][x +i] = forbidden; + } + if(y < 9){ + limit[y +1][x +i] = forbidden; + } + } + if(x > 0){ + limit[y][x-1] = forbidden; + } + if(x + size < 10){ + limit[y][x + size] = forbidden; + } + } +} + +function insertShip(x, y, orientation, size, ship){ + if(orientation){ + for(let i = 0; i < size; i++){ + field[x + i][y] = ship[i]; + ship[i].position = [(x+i), y].join(''); + ship[i].orientation = orientation; + } + } + else{ + for(let i = 0; i < size; i++){ + field[y][x + i] = ship[i]; + ship[i].position = [y, (x+i)].join(''); + ship[i].orientation = orientation; + } + } + setLimit(x, y, orientation, size); +} + function setShipsPositions(){ for(let ship of shipStruct){ let x, y, orientation; do{ - x = random(0, 9 - ship.part.length); + x = random(0, 9 - ship.length); y = random(0, 9); orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. - }while(!validatePosition(x, y, orientation, ship.part.length + x)); + }while(!validatePosition(x, y, orientation, ship.length)); + + insertShip(x, y, orientation, ship.length, ship); - if(orientation){ - if(x > 0){ - field[x-1][y] = forbidden; - } - if(x+ship.part.length < 10){ - field[x + ship.part.length][y] = forbidden; - } - for(let i = 0; i < ship.part.length; i++){ - field[x+i][y] = ship.part[i]; - if(y > 0){ - field[x+i][y-1] = forbidden; - } - if(y < 9){ - field[x+i][y+1] = forbidden; - } - } - } - else{ - if(x > 0){ - field[y][x-1] = forbidden; - } - if(x+ship.part.length < 10){ - field[y][x + ship.part.length] = forbidden; - } - for(let i = 0; i < ship.part.length; i++){ - field[y][x+i] = ship.part[i]; - if(y > 0){ - field[y-1][x+i] = forbidden; - } - if(y < 9){ - field[y+1][x+i] = forbidden; - } - } - } } } @@ -87,15 +109,10 @@ function random(min, max) { } exports.mapShips = function() { - let shipsMap = [] - setShipsPositions() - for(let i = 0; i < field.length; i++){ - for(let j = 0; j < field[i].length; j++){ - if(field[i][j] != undefined && field[i][j] !== forbidden){ - shipsMap.push([i, j].join('')) - } - } - } + setShipsPositions(); + return field +} - return shipsMap +exports.struct = function() { + return shipStruct; } diff --git a/src/game/ships.js b/src/game/ships.js index 7895aa0b..18f3db6f 100644 --- a/src/game/ships.js +++ b/src/game/ships.js @@ -1,192 +1,182 @@ module.exports = [ - { - part: [ + [ { - type: 'porta-avioes', - position: '0', - status: 'ok' + type: 'porta-avioes', + part: '0', + status: 'ok' }, { - type: 'porta-avioes', - position: '1', - status: 'ok' + type: 'porta-avioes', + part: '1', + status: 'ok' }, { - type: 'porta-avioes', - position: '2', - status: 'ok' + type: 'porta-avioes', + part: '2', + status: 'ok' }, { - type: 'porta-avioes', - position: '3', - status: 'ok' + type: 'porta-avioes', + part: '3', + status: 'ok' }, { - type: 'porta-avioes', - position: '4', - status: 'ok' + type: 'porta-avioes', + part: '4', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'navio-tanque', - position: '0', - status: 'ok' + type: 'navio-tanque', + part: '0', + status: 'ok' }, { - type: 'navio-tanque', - position: '1', - status: 'ok' + type: 'navio-tanque', + part: '1', + status: 'ok' }, { - type: 'navio-tanque', - position: '2', - status: 'ok' + type: 'navio-tanque', + part: '2', + status: 'ok' }, { - type: 'navio-tanque', - position: '3', - status: 'ok' + type: 'navio-tanque', + part: '3', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'navio-tanque', - position: '0', - status: 'ok' + type: 'navio-tanque', + part: '0', + status: 'ok' }, { - type: 'navio-tanque', - position: '1', - status: 'ok' + type: 'navio-tanque', + part: '1', + status: 'ok' }, { - type: 'navio-tanque', - position: '2', - status: 'ok' + type: 'navio-tanque', + part: '2', + status: 'ok' }, { - type: 'navio-tanque', - position: '3', - status: 'ok' + type: 'navio-tanque', + part: '3', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'contra-torpedos', - position: '0', - status: 'ok' + type: 'contra-torpedos', + part: '0', + status: 'ok' }, { - type: 'contra-torpedos', - position: '1', - status: 'ok' + type: 'contra-torpedos', + part: '1', + status: 'ok' }, { - type: 'contra-torpedos', - position: '2', - status: 'ok' + type: 'contra-torpedos', + part: '2', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'contra-torpedos', - position: '0', - status: 'ok' + type: 'contra-torpedos', + part: '0', + status: 'ok' }, { - type: 'contra-torpedos', - position: '1', - status: 'ok' + type: 'contra-torpedos', + part: '1', + status: 'ok' }, { - type: 'contra-torpedos', - position: '2', - status: 'ok' + type: 'contra-torpedos', + part: '2', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'contra-torpedos', - position: '0', - status: 'ok' + type: 'contra-torpedos', + part: '0', + status: 'ok' }, { - type: 'contra-torpedos', - position: '1', - status: 'ok' + type: 'contra-torpedos', + part: '1', + status: 'ok' }, { - type: 'contra-torpedos', - position: '2', - status: 'ok' + type: 'contra-torpedos', + part: '2', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'submarino', - position: '0', - status: 'ok' + type: 'submarino', + part: '0', + status: 'ok' }, { - type: 'submarino', - position: '1', - status: 'ok' + type: 'submarino', + part: '1', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'submarino', - position: '0', - status: 'ok' + type: 'submarino', + part: '0', + status: 'ok' }, { - type: 'submarino', - position: '1', - status: 'ok' + type: 'submarino', + part: '1', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'submarino', - position: '0', - status: 'ok' + type: 'submarino', + part: '0', + status: 'ok' }, { - type: 'submarino', - position: '1', - status: 'ok' + type: 'submarino', + part: '1', + status: 'ok' } - ] - }, - { - part: [ + ], + + [ { - type: 'submarino', - position: '0', - status: 'ok' + type: 'submarino', + part: '0', + status: 'ok' }, { - type: 'submarino', - position: '1', - status: 'ok' + type: 'submarino', + part: '1', + status: 'ok' } - ] - } -] + ] + +] \ No newline at end of file diff --git a/src/index.js b/src/index.js index 5a53333a..afae4c83 100644 --- a/src/index.js +++ b/src/index.js @@ -1,20 +1,57 @@ require('dotenv').config() -const path = require('path') -const express = require('express') -const app = require('express')() +const path = require('path'); +const express = require('express'); +const app = require('express')(); const http = require('http').createServer(app); -const io = require('socket.io')(http) -const {mapShips} = require('./game/mapShips') +const io = require('socket.io')(http); +const {mapShips} = require('./game/mapShips'); +const {struct} = require('./game/mapShips'); const shipsMap = mapShips() - -const destroyed = [] +const shipStruct = struct(); const PORT = process.env.PORT || '8080' let score = 0 +function shot(id){ + let wasHit = false; + let i = (id/10)|0; + let j = id % 10; + if(shipsMap[i][j] != undefined){ + wasHit = true; + shipsMap[i][j].status = 'destroyed'; + } + return wasHit; +} + +function sink(ship){ + for(let i = 0; i < ship.length; i++){ + io.emit('sink', ship[i].position); + } +} + +function destroyed(ship){ + isDestroyed = true; + for(let i = 0; i < ship.length; i++){ + if(ship[i].status == 'ok'){ + isDestroyed = false; + } + } + return isDestroyed; +} + +function verifyShips(){ + for(let i = 0; i < shipStruct.length; i++){ + let ship = shipStruct[i]; + if(destroyed(ship)){ + sink(ship); + shipStruct.splice(i, 1); + } + } +} + app.use(express.static(path.join(__dirname, 'public'))) app.set('views', path.join(__dirname, 'views')); @@ -27,23 +64,24 @@ app.get('/', (req, res) => { /* Socket */ io.on('connection', (socket) => { socket.on('click', (id) => { - if(shipsMap.includes(id)) { - if(!destroyed.includes(id)) { - destroyed.push(id) - score++ - if(score === 30) { - score = 0 - io.emit('won') - return - } - io.emit('hit', id, score); - } + if(shot(id)) { + score++ + io.emit('hit', id, score); + verifyShips(); } else { io.emit('miss', id); } - }) + if(shipStruct.length == 0){ + score = 0; + io.emit('won'); + setTimeout(function(){ + process.exit(0) + }, 100); + } + }); }); + http.listen(PORT, () => { console.log(`listening at http://localhost:${PORT}`) -}) +}) \ No newline at end of file diff --git a/src/public/script.js b/src/public/script.js index c2a3b4c1..fb0b0640 100644 --- a/src/public/script.js +++ b/src/public/script.js @@ -24,6 +24,7 @@ function onClick(event) { } })() + // Catch all the `[data-toggle-sidebar]` elements on the document. document.querySelectorAll('[data-toggle-sidebar]').forEach(toggle => { // Add an event listener on those elements "click" event diff --git a/src/public/socket.js b/src/public/socket.js index 4d069026..acff6898 100644 --- a/src/public/socket.js +++ b/src/public/socket.js @@ -1,21 +1,33 @@ /** SOCKET */ function handleHit(id, score) { - let sqr = document.getElementById(id) - let scr = document.getElementById('score') + let sqr = document.getElementById(id); + let scr = document.getElementById('score'); - scr.innerText = score - sqr.classList.add('hit') + scr.innerText = score; + sqr.classList.add('hit'); } function handleMiss(id) { - let sqr = document.getElementById(id) - sqr.classList.add('miss') + let sqr = document.getElementById(id); + sqr.classList.add('miss'); +} + +function handleSink(id){ + let sqr = document.getElementById(id); + sqr.classList.add('sink') +} + +function delayAlert(m, time){ + setTimeout(function(){ + alert(m) + }, time); } function handleVictory() { - alert('You Win!!!') + delayAlert('You Win!!!', 100); } -socket.on('hit', handleHit) -socket.on('miss', handleMiss) -socket.on('won', handleVictory) +socket.on('hit', handleHit); +socket.on('miss', handleMiss); +socket.on('sink', handleSink); +socket.on('won', handleVictory); \ No newline at end of file diff --git a/src/public/style.css b/src/public/style.css index 96ac23b2..58e0ed73 100644 --- a/src/public/style.css +++ b/src/public/style.css @@ -83,3 +83,7 @@ display: flex; .miss { background-color: grey; } + +.sink { + background-color: red; +} diff --git a/yarn.lock b/yarn.lock index 219031de..47dad3cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,13 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -30,11 +37,21 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" @@ -73,6 +90,14 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -83,6 +108,27 @@ callsite@1.0.0: resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -98,6 +144,11 @@ component-inherit@0.0.3: resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -166,6 +217,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.2.tgz#a9986e6920a60f2a3229e87d4f0f3c073209874c" + integrity sha512-zFuywxrAWtX5Mk2KAuoJNkXXbfezpNA0v7i+YC971QORguPekpjpAgeOv99YWSdKXwj7JxI2QAWDeDkE8fWtXw== + dependencies: + jake "^10.6.1" + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -216,6 +274,11 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -257,6 +320,13 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +filelist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" + integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== + dependencies: + minimatch "^3.0.4" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -292,6 +362,11 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -346,6 +421,16 @@ isarray@2.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= +jake@^10.6.1: + version "10.6.1" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.6.1.tgz#c9c476cfd6e726ef600ee9bb2b880d5425ff8c79" + integrity sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -378,6 +463,13 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -566,6 +658,13 @@ socket.io@^2.3.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" From b559c8844c83d3c75036462f1acaac2ca7997ecd Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Sun, 3 May 2020 00:50:27 -0400 Subject: [PATCH 23/32] Servidor funcionando de forma concorrente --- src/game/mapShips.js | 205 +++++++++++++++++++++++++------------------ src/index.js | 60 ++++--------- 2 files changed, 139 insertions(+), 126 deletions(-) diff --git a/src/game/mapShips.js b/src/game/mapShips.js index b8088d3f..d62cfdbd 100644 --- a/src/game/mapShips.js +++ b/src/game/mapShips.js @@ -1,118 +1,155 @@ -let shipStruct = require('./ships') +function ShipStruct(){ + const ships = require("./ships"); + let shipStruct = JSON.parse(JSON.stringify(ships)); + let forbidden = {type: 'forbidden'}; -let forbidden = {type: 'forbidden'}; + let field = createField(); + let limit = createField(); + this.verifyShips = verifyShips; + this.shot = shot; + this.field = field; + this.shipStruct = shipStruct; + this.allDestroyed = allDestroyed; -let field = createField(); -let limit = createField(); + function createField(){ + let arr = new Array(10); -function createField(){ - let arr = new Array(10); + for (let i = 0; i < 10; i++){ + arr[i] = new Array(10); + } - for (let i = 0; i < 10; i++){ - arr[i] = new Array(10); + return arr; } - return arr; -} - -function validatePosition(x, y, orientation, size){ // checks if the position is valid. - let isValid = true; - if(orientation){ - for(let i = 0; i < size && isValid; i++){ - if(limit[x + i][y]!= undefined){ - isValid = false; + function validatePosition(x, y, orientation, size){ // checks if the position is valid. + let isValid = true; + if(orientation){ + for(let i = 0; i < size && isValid; i++){ + if(limit[x + i][y]!= undefined){ + isValid = false; + } } } - } - else{ - for(let i = 0; i < size && isValid; i++){ - if(limit[y][x + i]!= undefined){ - isValid = false; + else{ + for(let i = 0; i < size && isValid; i++){ + if(limit[y][x + i]!= undefined){ + isValid = false; + } } } + + return isValid; } - - return isValid; -} -function setLimit(x, y, orientation, size){ - if(orientation){ - for(let i = 0; i < size; i++){ - limit[x +i][y] = forbidden; - if(y > 0){ - limit[x +i][y -1] = forbidden; + function setLimit(x, y, orientation, size){ + if(orientation){ + for(let i = 0; i < size; i++){ + limit[x +i][y] = forbidden; + if(y > 0){ + limit[x +i][y -1] = forbidden; + } + if(y < 9){ + limit[x +i][y +1] = forbidden; + } } - if(y < 9){ - limit[x +i][y +1] = forbidden; + if(x > 0){ + limit[x-1][y] = forbidden; + } + if(x + size < 10){ + limit[x + size][y] = forbidden; } } - if(x > 0){ - limit[x-1][y] = forbidden; - } - if(x + size < 10){ - limit[x + size][y] = forbidden; + else{ + for(let i = 0; i < size; i++){ + limit[y][x +i] = forbidden; + if(y > 0){ + limit[y -1][x +i] = forbidden; + } + if(y < 9){ + limit[y +1][x +i] = forbidden; + } + } + if(x > 0){ + limit[y][x-1] = forbidden; + } + if(x + size < 10){ + limit[y][x + size] = forbidden; + } } } - else{ - for(let i = 0; i < size; i++){ - limit[y][x +i] = forbidden; - if(y > 0){ - limit[y -1][x +i] = forbidden; - } - if(y < 9){ - limit[y +1][x +i] = forbidden; + + function insertShip(x, y, orientation, size, ship){ + if(orientation){ + for(let i = 0; i < size; i++){ + field[x + i][y] = ship[i]; + ship[i].position = [(x+i), y].join(''); + ship[i].orientation = orientation; } } - if(x > 0){ - limit[y][x-1] = forbidden; + else{ + for(let i = 0; i < size; i++){ + field[y][x + i] = ship[i]; + ship[i].position = [y, (x+i)].join(''); + ship[i].orientation = orientation; + } } - if(x + size < 10){ - limit[y][x + size] = forbidden; + setLimit(x, y, orientation, size); + } + + function setShipsPositions(){ + for(let ship of shipStruct){ + let x, y, orientation; + do{ + x = random(0, 9 - ship.length); + y = random(0, 9); + orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. + }while(!validatePosition(x, y, orientation, ship.length)); + + insertShip(x, y, orientation, ship.length, ship); + } } -} -function insertShip(x, y, orientation, size, ship){ - if(orientation){ - for(let i = 0; i < size; i++){ - field[x + i][y] = ship[i]; - ship[i].position = [(x+i), y].join(''); - ship[i].orientation = orientation; + function destroyed(ship){ + isDestroyed = true; + for(let i = 0; i < ship.length; i++){ + if(ship[i].status == 'ok'){ + isDestroyed = false; + } } + return isDestroyed; } - else{ - for(let i = 0; i < size; i++){ - field[y][x + i] = ship[i]; - ship[i].position = [y, (x+i)].join(''); - ship[i].orientation = orientation; + + function verifyShips(){ + for(let i = 0; i < shipStruct.length; i++){ + let ship = shipStruct[i]; + if(destroyed(ship)){ + shipStruct.splice(i, 1); + return ship; + } } } - setLimit(x, y, orientation, size); -} - -function setShipsPositions(){ - for(let ship of shipStruct){ - let x, y, orientation; - do{ - x = random(0, 9 - ship.length); - y = random(0, 9); - orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. - }while(!validatePosition(x, y, orientation, ship.length)); - - insertShip(x, y, orientation, ship.length, ship); + function shot(id){ + let wasHit = false; + let i = (id/10)|0; + let j = id % 10; + if(field[i][j] != undefined){ + wasHit = true; + field[i][j].status = 'destroyed'; + } + return wasHit; } -} -function random(min, max) { - return Math.floor(Math.random() * (min + max + 1) - min); -} + function allDestroyed(){ + return (shipStruct.length == 0); + } -exports.mapShips = function() { + function random(min, max) { + return Math.floor(Math.random() * (min + max + 1) - min); + } setShipsPositions(); - return field } -exports.struct = function() { - return shipStruct; -} + +exports.ShipStruct = ShipStruct; diff --git a/src/index.js b/src/index.js index afae4c83..f6100b95 100644 --- a/src/index.js +++ b/src/index.js @@ -5,50 +5,24 @@ const express = require('express'); const app = require('express')(); const http = require('http').createServer(app); const io = require('socket.io')(http); -const {mapShips} = require('./game/mapShips'); -const {struct} = require('./game/mapShips'); - -const shipsMap = mapShips() -const shipStruct = struct(); +const {ShipStruct} = require('./game/mapShips'); const PORT = process.env.PORT || '8080' -let score = 0 - -function shot(id){ - let wasHit = false; - let i = (id/10)|0; - let j = id % 10; - if(shipsMap[i][j] != undefined){ - wasHit = true; - shipsMap[i][j].status = 'destroyed'; - } - return wasHit; -} +let struct = new Map(); -function sink(ship){ - for(let i = 0; i < ship.length; i++){ - io.emit('sink', ship[i].position); - } -} +let score = 0 -function destroyed(ship){ - isDestroyed = true; +function sink(ship, socket){ for(let i = 0; i < ship.length; i++){ - if(ship[i].status == 'ok'){ - isDestroyed = false; - } + socket.emit('sink', ship[i].position); } - return isDestroyed; } -function verifyShips(){ - for(let i = 0; i < shipStruct.length; i++){ - let ship = shipStruct[i]; - if(destroyed(ship)){ - sink(ship); - shipStruct.splice(i, 1); - } +function verifyShips(id, socket){ + let ship = struct.get(id).verifyShips() + if(ship){ + sink(ship, socket); } } @@ -63,19 +37,21 @@ app.get('/', (req, res) => { /* Socket */ io.on('connection', (socket) => { + struct.set(socket.id, new ShipStruct()); + console.log(`Usuário conectado: ${socket.id}`); socket.on('click', (id) => { - if(shot(id)) { + if(struct.get(socket.id).shot(id)) { score++ - io.emit('hit', id, score); - verifyShips(); + socket.emit('hit', id, score); + verifyShips(socket.id, socket); } else { - io.emit('miss', id); + socket.emit('miss', id); } - if(shipStruct.length == 0){ + if(struct.get(socket.id).allDestroyed()){ score = 0; - io.emit('won'); + socket.emit('won'); setTimeout(function(){ - process.exit(0) + socket.disconnect(); }, 100); } }); From 7c482ae6d51b2d027c13aa2db87bc419d67497f1 Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Sun, 3 May 2020 13:27:14 -0400 Subject: [PATCH 24/32] =?UTF-8?q?Adicionado=20score=20din=C3=A2mico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/game/mapShips.js | 2 -- src/index.js | 15 +++++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/game/mapShips.js b/src/game/mapShips.js index d62cfdbd..eb3cbd94 100644 --- a/src/game/mapShips.js +++ b/src/game/mapShips.js @@ -7,8 +7,6 @@ function ShipStruct(){ let limit = createField(); this.verifyShips = verifyShips; this.shot = shot; - this.field = field; - this.shipStruct = shipStruct; this.allDestroyed = allDestroyed; function createField(){ diff --git a/src/index.js b/src/index.js index f6100b95..d577fd30 100644 --- a/src/index.js +++ b/src/index.js @@ -11,8 +11,6 @@ const PORT = process.env.PORT || '8080' let struct = new Map(); -let score = 0 - function sink(ship, socket){ for(let i = 0; i < ship.length; i++){ socket.emit('sink', ship[i].position); @@ -32,32 +30,37 @@ app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.get('/', (req, res) => { - res.render('index', {title: 'Batalha Naval', score: score}) + res.render('index', {title: 'Batalha Naval', score: 0}) }) /* Socket */ io.on('connection', (socket) => { + let score = 0; + let multi = 1; struct.set(socket.id, new ShipStruct()); console.log(`Usuário conectado: ${socket.id}`); socket.on('click', (id) => { if(struct.get(socket.id).shot(id)) { - score++ + score += multi++; socket.emit('hit', id, score); verifyShips(socket.id, socket); } else { + multi = 1; socket.emit('miss', id); } if(struct.get(socket.id).allDestroyed()){ - score = 0; socket.emit('won'); setTimeout(function(){ socket.disconnect(); }, 100); } }); + socket.on('disconnect', ()=>{ + console.log(`Usuário desconectado: ${socket.id}`); + }); }); http.listen(PORT, () => { - console.log(`listening at http://localhost:${PORT}`) + console.log(`listening at http://localhost:${PORT}`); }) \ No newline at end of file From 5c7dc4b7dfd9bc3f921a3b411ee4995283246906 Mon Sep 17 00:00:00 2001 From: Cleriston Nantes Petrikic Date: Thu, 18 Jun 2020 21:11:37 -0400 Subject: [PATCH 25/32] Feat: multiplayer system created --- .gitignore | 1 + package.json | 12 +- src/config/config.js | 6 + src/controller/online.js | 22 + src/controller/room.js | 57 + src/controller/user.js | 50 + src/database/dao.js | 13 + src/events/game.js | 37 + src/events/online.js | 22 + src/events/rooms.js | 21 + src/events/socket.js | 12 + src/game/controller/game.js | 197 ++ src/game/libs/board.js | 106 + src/game/libs/ships.js | 20 + src/game/mapShips.js | 153 -- src/game/models/ContraTorpedos.js | 21 + src/game/models/Match.js | 7 + src/game/models/NavioTanque.js | 27 + src/game/models/Player.js | 12 + src/game/models/PortaAvioes.js | 33 + src/game/models/Submarino.js | 15 + src/game/models/Turn.js | 19 + src/game/ships.js | 182 -- src/index.js | 109 +- src/middleware/authenticator.js | 7 + src/public/css/bootstrap.min.css | 7 + src/public/css/error.css | 37 + src/public/css/game.css | 105 + src/public/css/header.css | 35 + src/public/css/home.css | 74 + src/public/css/login.css | 55 + src/public/css/message.css | 47 + src/public/css/online-sidebar.css | 83 + src/public/css/register.css | 48 + src/public/css/style.css | 20 + src/public/fonts/Yellow-Rabbit.tff | Bin 0 -> 40372 bytes src/public/fonts/grafitti.tff | Bin 0 -> 45052 bytes src/public/img/baby-narval.png | Bin 0 -> 53593 bytes src/public/img/baby-narval.png~ | Bin 0 -> 55292 bytes src/public/img/error-narval.png | Bin 0 -> 67397 bytes src/public/img/logo-narval.png | Bin 0 -> 106081 bytes src/public/img/online-ico.png | Bin 0 -> 7658 bytes src/public/img/sea-bg.jpg | Bin 0 -> 35773 bytes src/public/img/user-ico.png | Bin 0 -> 23633 bytes src/public/js/bootstrap.min.js | 7 + src/public/js/game.js | 142 ++ src/public/js/home.js | 32 + src/public/js/jquery-3.5.1.min.js | 2 + src/public/js/login.js | 36 + src/public/js/online.js | 24 + src/public/js/register.js | 77 + src/public/js/utilitaries.js | 35 + src/public/script.js | 43 - src/public/socket.js | 33 - src/public/style.css | 89 - src/routes/login.js | 26 + src/routes/register.js | 35 + src/routes/root.js | 77 + src/views/error.ejs | 25 + src/views/game.ejs | 42 + src/views/home.ejs | 51 + src/views/index.ejs | 25 - src/views/login.ejs | 27 + src/views/partials/navbar.ejs | 33 + src/views/partials/sidebar.ejs | 8 + src/views/register.ejs | 29 + yarn.lock | 3203 +++++++++++++++++++++++++++- 67 files changed, 5125 insertions(+), 648 deletions(-) create mode 100644 src/config/config.js create mode 100644 src/controller/online.js create mode 100644 src/controller/room.js create mode 100644 src/controller/user.js create mode 100644 src/database/dao.js create mode 100644 src/events/game.js create mode 100644 src/events/online.js create mode 100644 src/events/rooms.js create mode 100644 src/events/socket.js create mode 100644 src/game/controller/game.js create mode 100644 src/game/libs/board.js create mode 100644 src/game/libs/ships.js delete mode 100644 src/game/mapShips.js create mode 100644 src/game/models/ContraTorpedos.js create mode 100644 src/game/models/Match.js create mode 100644 src/game/models/NavioTanque.js create mode 100644 src/game/models/Player.js create mode 100644 src/game/models/PortaAvioes.js create mode 100644 src/game/models/Submarino.js create mode 100644 src/game/models/Turn.js delete mode 100644 src/game/ships.js create mode 100644 src/middleware/authenticator.js create mode 100644 src/public/css/bootstrap.min.css create mode 100644 src/public/css/error.css create mode 100644 src/public/css/game.css create mode 100644 src/public/css/header.css create mode 100644 src/public/css/home.css create mode 100644 src/public/css/login.css create mode 100644 src/public/css/message.css create mode 100644 src/public/css/online-sidebar.css create mode 100644 src/public/css/register.css create mode 100644 src/public/css/style.css create mode 100644 src/public/fonts/Yellow-Rabbit.tff create mode 100644 src/public/fonts/grafitti.tff create mode 100644 src/public/img/baby-narval.png create mode 100644 src/public/img/baby-narval.png~ create mode 100644 src/public/img/error-narval.png create mode 100644 src/public/img/logo-narval.png create mode 100644 src/public/img/online-ico.png create mode 100755 src/public/img/sea-bg.jpg create mode 100644 src/public/img/user-ico.png create mode 100644 src/public/js/bootstrap.min.js create mode 100644 src/public/js/game.js create mode 100644 src/public/js/home.js create mode 100644 src/public/js/jquery-3.5.1.min.js create mode 100644 src/public/js/login.js create mode 100644 src/public/js/online.js create mode 100644 src/public/js/register.js create mode 100644 src/public/js/utilitaries.js delete mode 100644 src/public/script.js delete mode 100644 src/public/socket.js delete mode 100644 src/public/style.css create mode 100644 src/routes/login.js create mode 100644 src/routes/register.js create mode 100644 src/routes/root.js create mode 100644 src/views/error.ejs create mode 100644 src/views/game.ejs create mode 100644 src/views/home.ejs delete mode 100644 src/views/index.ejs create mode 100644 src/views/login.ejs create mode 100644 src/views/partials/navbar.ejs create mode 100644 src/views/partials/sidebar.ejs create mode 100644 src/views/register.ejs diff --git a/.gitignore b/.gitignore index 2c4bae52..a9b7428d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /node_modules /.vscode .env +src/database/database.db3 diff --git a/package.json b/package.json index 22d8e8c5..9bcbb87a 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,20 @@ "description": "A simple Sea Battleships multiplayer and AI game", "main": "index.js", "scripts": { - "start": "node src/index.js" + "start": "cd src; node index.js" }, "repository": "https://github.com/GabCostaSilva/batalha-naval.git", "author": "gabcostasilva ", "license": "MIT", "private": false, "dependencies": { - "dotenv": "^8.2.0", - "ejs": "^3.1.2", + "bcryptjs": "^2.4.3", + "body-parser": "^1.19.0", + "cookie-parser": "^1.4.5", + "ejs": "^3.1.3", "express": "^4.17.1", - "socket.io": "^2.3.0" + "express-session": "^1.17.1", + "socket.io": "^2.3.0", + "sqlite-sync": "^0.3.9" } } diff --git a/src/config/config.js b/src/config/config.js new file mode 100644 index 00000000..2fb6c976 --- /dev/null +++ b/src/config/config.js @@ -0,0 +1,6 @@ +const KEY = 'user-id'; +const SECRET = 'socketchat'; +module.exports = { + KEY, + SECRET +} \ No newline at end of file diff --git a/src/controller/online.js b/src/controller/online.js new file mode 100644 index 00000000..cd364e65 --- /dev/null +++ b/src/controller/online.js @@ -0,0 +1,22 @@ +var stackOnline = []; + +const addUser = (user) => { + stackOnline.push(user); +} + +const removeUser = (user) => { + stackOnline.pop(user); +} + +const checkUser = (user) => { + return stackOnline.includes(user); +} + +const listUsers = () => { + return stackOnline.filter((i, j) => stackOnline.indexOf(i) === j); +} + +exports.set = addUser; +exports.remove = removeUser; +exports.check = checkUser; +exports.list = listUsers; \ No newline at end of file diff --git a/src/controller/room.js b/src/controller/room.js new file mode 100644 index 00000000..f4df6630 --- /dev/null +++ b/src/controller/room.js @@ -0,0 +1,57 @@ +var listRooms = []; +var userRooms = {}; + +const generateSerial = () => { + var result, i, j; + result = ''; + for (j = 0; j < 32; j++) { + if (j != 0 && j % 8 == 0) + result = result + '-'; + i = Math.floor(Math.random() * 16).toString(16).toUpperCase(); + result = result + i; + } + return result; +} + +const existsRoom = (room) => { + return listRooms.includes(room); +} + +const createRoom = () => { + let room = generateSerial(); + listRooms.push(room); + userRooms[room] = []; + return room; +} + +const removeRoom = (room) => { + if (existsRoom(room)) { + listRooms.pop(room); + } +} + +const checkRoom = (room, user) => { + if (!existsRoom(room)) { + throw "RoomDoesNotExistException"; + } else if (userRooms[room].includes(user)) { + //throw "AlreadyInRoomException"; + } else if (userRooms[room].length > 1) { + throw "FullRoomException"; + } +} + +const setToRoom = (room, user) => { + userRooms[room].push(user); +} + +const unsetToRoom = (room, user) => { + userRooms[room].pop(user); +} + +exports.exists = existsRoom; +exports.create = createRoom; +exports.remove = removeRoom; +exports.check = checkRoom; +exports.setTo = setToRoom; +exports.unsetTo = unsetToRoom; +exports.list = listRooms; \ No newline at end of file diff --git a/src/controller/user.js b/src/controller/user.js new file mode 100644 index 00000000..c3365b77 --- /dev/null +++ b/src/controller/user.js @@ -0,0 +1,50 @@ +const db = require('../database/dao'); +const bcrypt = require('bcryptjs'); + + +const insertUser = (user) => { + user.password = bcrypt.hashSync(user.password, 10); + db.insert('users', user, (result) =>{ + if(result.error){ + throw result.error; + } + }); +} + +const deleteUser = (user) => { + const SQL_DELETE = `DELETE FROM users WHERE username = "${user.username}";` + db.run(SQL_DELETE,(result) => { + if(result.error){ + throw result.error; + } + }); +} + +const updateUser = (user) => { + db.update('users', user, `username = "${user.username}"`); +} + +const findOne = (username) => { + let SQL_SELECT_ONE = `SELECT username FROM users + WHERE username = "${username}";`; + return result = db.run(SQL_SELECT_ONE)[0]; +} + +const findUser = (user) => { + let SQL_SELECT_USER = `SELECT * FROM users + WHERE username = "${user.username}";`; + let result = db.run(SQL_SELECT_USER)[0]; + return result && bcrypt.compareSync(user.password, result.password); +} + +const listUsers = () => { + let SQL_QUERY = `SELECT username FROM users;`; + return db.run(SQL_QUERY); +} + +exports.insert = insertUser; +exports.delete = deleteUser; +exports.update = updateUser; +exports.find = findUser; +exports.findOne = findOne; +exports.list = listUsers; \ No newline at end of file diff --git a/src/database/dao.js b/src/database/dao.js new file mode 100644 index 00000000..6b3f4447 --- /dev/null +++ b/src/database/dao.js @@ -0,0 +1,13 @@ + +const sqlite = require('sqlite-sync'); +sqlite.connect('./database/database.db3'); + + +const SQL_CREATE = `CREATE TABLE IF NOT EXISTS Users( + username TEXT PRIMARY KEY, + password TEXT + );`; + +sqlite.run(SQL_CREATE); + +module.exports = sqlite; \ No newline at end of file diff --git a/src/events/game.js b/src/events/game.js new file mode 100644 index 00000000..074eb484 --- /dev/null +++ b/src/events/game.js @@ -0,0 +1,37 @@ +exports.use = (io) => { + const rooms = require('../controller/room'); + const game = require('../game/controller/game'); + + io.on("connection", client => { + let player = client.handshake.session.user; + let room; + client.on('joinGame', (roomName) => { + if (rooms.exists(roomName)) { + rooms.setTo(roomName, player); + game.join(roomName, player, client); + client.join(roomName); + room = roomName; + console.log(`O cliente ${client.id} se conectou a sala ${room}`); + } + }); + client.on('click', (id) => { + if (game.existMatch(room) && game.isStarted(room)) + game.shot(room, player, id); + }); + client.on('playHere', () => { + game.playHere(room, player, client); + }); + client.on('disconnect', () => { + if (room) { + rooms.unsetTo(room, player); + setTimeout(() => { + if (!io.sockets.adapter.rooms[room]) { + console.log(`Fechando a sala: ${room}`); + rooms.remove(room); + client.broadcast.emit('closeRoom', room); + } + }, 800); + } + }); + }); +} \ No newline at end of file diff --git a/src/events/online.js b/src/events/online.js new file mode 100644 index 00000000..98f6f8e9 --- /dev/null +++ b/src/events/online.js @@ -0,0 +1,22 @@ +exports.use = (io) => { + const online = require('../controller/online'); + + io.on("connection", client => { + const username = client.handshake.session.user; + client.join(username); + if (!online.check(username)) { + client.broadcast.emit('newUser', username); + console.log(`User online: ${username}`); + } + online.set(username); + + client.emit('listOnline', online.list()); + + client.on("disconnect", () => { + online.remove(username); + if (!online.check(username)) { + client.broadcast.emit('dropUser', username); + } + }); + }); +} \ No newline at end of file diff --git a/src/events/rooms.js b/src/events/rooms.js new file mode 100644 index 00000000..c1904249 --- /dev/null +++ b/src/events/rooms.js @@ -0,0 +1,21 @@ +exports.use = (io) => { + const rooms = require('../controller/room'); + + io.on("connection", client => { + let room; + console.log(`socket conectado: ${client.id}`); + + client.emit('listRooms', rooms.list); + + client.on('createRoom', () => { + let newRoom = rooms.create(); + client.emit('room', newRoom); + client.broadcast.emit('newRoom', newRoom); + }); + + client.on('disconnect', () => { + console.log(`socket desconectado: ${client.id}`); + }); + + }); +} \ No newline at end of file diff --git a/src/events/socket.js b/src/events/socket.js new file mode 100644 index 00000000..7e085989 --- /dev/null +++ b/src/events/socket.js @@ -0,0 +1,12 @@ +module.exports = (server) => { + const io = require('socket.io')(server); + const rooms = require('./rooms'); + const online = require('./online'); + const game = require('./game'); + + rooms.use(io); + online.use(io); + game.use(io); + + return io; +} \ No newline at end of file diff --git a/src/game/controller/game.js b/src/game/controller/game.js new file mode 100644 index 00000000..62e310d8 --- /dev/null +++ b/src/game/controller/game.js @@ -0,0 +1,197 @@ +const Match = require('../models/Match'); +const Turn = require('../models/Turn'); +const Player = require('../models/Player'); +const ships = require('../libs/ships'); +const board = require('../libs/board'); + +const matchs = {}; + +const join = (room, playerName, socket) => { + if (matchs[room]) { + if (matchs[room][playerName]) { + socket.emit('alreadyInRoom'); + return; + } + matchs[room].player2 = playerName; + matchs[room][playerName] = new Player(socket); + setTimeout(() => { + startGame(room); + }, 200); + } else { + matchs[room] = new Match(); + matchs[room].player1 = playerName; + matchs[room][playerName] = new Player(socket); + socket.emit('waitPlayer'); + } +} + +const playHere = (room, playerName, socket) => { + console.log(`O jogador ${playerName} mudou de aba.`); + matchs[room][playerName].socket.disconnect(); + matchs[room][playerName].socket = socket; + if (matchs[room].start) + resumeGame(room, playerName) +} +const startGame = (room) => { + let player1 = matchs[room].player1; + let player2 = matchs[room].player2; + matchs[room].turn = new Turn(player1, player2); + createBoard(room, player1); + createBoard(room, player2); + matchs[room][player1].socket.broadcast.to(room).emit('startGame'); + matchs[room][player1].socket.emit('startGame'); + console.log('game started!'); + setTimeout(() => { + matchs[room].start = true; + changeTurn(room); + }, 1000); +} + +const resumeGame = (room, playerName) => { + matchs[room][playerName].socket.emit('resumeGame', + matchs[room][playerName].hit, + matchs[room][playerName].miss, + matchs[room][playerName].sink, + matchs[room][playerName].score); + if (matchs[room].turn.getMe() == playerName) { + matchs[room][playerName].socket.emit('youTurn'); + } else { + matchs[room][playerName].socket.emit('opponentTurn'); + } +} + +const finishGame = (room) => { + let me = matchs[room].turn.getMe(); + let he = matchs[room].turn.getHe(); + matchs[room][he].socket.emit('win'); + matchs[room][he].socket.disconnect(); + matchs[room][me].socket.emit('lose'); + matchs[room][me].socket.disconnect(); + matchs[room].start = false; + setTimeout(() => { + delete matchs[room]; + }, 3000); +} + +const isStarted = (room) => { + return matchs[room].start; +} + +const existMatch = (room) => { + return matchs[room]; +} + +const createBoard = (room, playerName) => { + let player = matchs[room][playerName] + player.ships = ships(); + player.board = board(player.ships); +} + +const destroyed = (ship) => { + return ship.filter(part => part.status == 'ok') + .length == 0; +} + +const sink = (room, playerName, ship) => { + let shipId = []; + ship.forEach(part => { + setSink(room, playerName, part.position); + shipId.push(part.position); + }); + matchs[room][playerName].socket.emit('sink', shipId); +} + +const verifyShips = (room, playerName) => { + const opponent = matchs[room].turn.getHe(); + const ships = matchs[room][opponent].ships; + for (let i = 0; i < ships.length; i++) { + let ship = ships[i]; + if (destroyed(ship)) { + ships.splice(i, 1); + sink(room, playerName, ship); + } + } + if (allDestroyed(room, playerName)) { + finishGame(room); + } +} + +const updateScore = (playerName) => { + playerName.score += playerName.multi++; +} + +const sendScore = (room, playerName) => { + let score = matchs[room][playerName].score; + matchs[room][playerName].socket.emit('updateScore', score); +} + +const sendHit = (room, playerName, id) => { + matchs[room][playerName].socket.emit('hit', id); + console.log(`${playerName} hit: ${id}`); +} + +const sendMiss = (room, playerName, id) => { + matchs[room][playerName].socket.emit('miss', id); + console.log(`${playerName} miss: ${id}`); +} + +const setHit = (room, playerName, id) => { + matchs[room][playerName].hit.push(id); +} + +const setMiss = (room, playerName, id) => { + matchs[room][playerName].miss.push(id); +} + +const setSink = (room, playerName, id) => { + matchs[room][playerName].hit.pop(id); + matchs[room][playerName].sink.push(id); +} + +const changeTurn = (room) => { + matchs[room].turn.next(); + let me = matchs[room].turn.getMe(); + let he = matchs[room].turn.getHe(); + if (isStarted(room)) { + matchs[room][me].socket.emit('youTurn'); + matchs[room][he].socket.emit('opponentTurn'); + } +} + +const shot = (room, playerName, id) => { + const opponent = matchs[room].turn.getHe(); + let board = matchs[room][opponent].board; + let i = (id / 10) | 0; // pick a right value + let j = id % 10; // pick a left value + if (matchs[room].turn.getMe() != playerName) { + matchs[room][playerName].socket.emit('NotIsYouTurn'); + } else if (board[i][j] == 'hited') { + matchs[room][playerName].socket.emit('AlreadyHit'); + } else if (board[i][j] !== undefined) { + board[i][j].status = 'destroyed'; + board[i][j] = 'hited'; + setHit(room, playerName, id); + verifyShips(room, playerName); + updateScore(matchs[room][playerName]); + sendScore(room, playerName); + sendHit(room, playerName, id); + changeTurn(room); + } else { + setMiss(room, playerName, id); + board[i][j] = 'hited'; + matchs[room][playerName].multi = 1; + sendMiss(room, playerName, id); + changeTurn(room); + } +} + +const allDestroyed = (room, playerName) => { + return (matchs[room][playerName] + .ships.length == 0); +} + +exports.join = join; +exports.shot = shot; +exports.playHere = playHere; +exports.existMatch = existMatch; +exports.isStarted = isStarted; \ No newline at end of file diff --git a/src/game/libs/board.js b/src/game/libs/board.js new file mode 100644 index 00000000..82bb0b93 --- /dev/null +++ b/src/game/libs/board.js @@ -0,0 +1,106 @@ +module.exports = (ships) => { + const forbidden = { + type: 'forbidden' + }; + + const createField = () => { + let arr = new Array(10); + for (let i = 0; i < 10; i++) { + arr[i] = new Array(10); + } + return arr; + } + + const field = createField(); + const limit = createField(); + + const validatePosition = (x, y, orientation, size) => { // checks if the position is valid. + let isValid = true; + if (orientation) { + for (let i = 0; i < size && isValid; i++) { + if (limit[x + i][y] != undefined) { + isValid = false; + } + } + } else { + for (let i = 0; i < size && isValid; i++) { + if (limit[y][x + i] != undefined) { + isValid = false; + } + } + } + return isValid; + } + + const setLimit = (x, y, orientation, size) => { + if (orientation) { + for (let i = 0; i < size; i++) { + limit[x + i][y] = forbidden; + if (y > 0) { + limit[x + i][y - 1] = forbidden; + } + if (y < 9) { + limit[x + i][y + 1] = forbidden; + } + } + if (x > 0) { + limit[x - 1][y] = forbidden; + } + if (x + size < 10) { + limit[x + size][y] = forbidden; + } + } else { + for (let i = 0; i < size; i++) { + limit[y][x + i] = forbidden; + if (y > 0) { + limit[y - 1][x + i] = forbidden; + } + if (y < 9) { + limit[y + 1][x + i] = forbidden; + } + } + if (x > 0) { + limit[y][x - 1] = forbidden; + } + if (x + size < 10) { + limit[y][x + size] = forbidden; + } + } + } + + const insertShip = (x, y, orientation, size, ship) => { + if (orientation) { + for (let i = 0; i < size; i++) { + field[x + i][y] = ship[i]; + ship[i].position = [(x + i), y].join(''); + ship[i].orientation = orientation; + } + } else { + for (let i = 0; i < size; i++) { + field[y][x + i] = ship[i]; + ship[i].position = [y, (x + i)].join(''); + ship[i].orientation = orientation; + } + } + setLimit(x, y, orientation, size); + } + + const random = (min, max) => { + return Math.floor(Math.random() * (min + max + 1) - min); + } + + const setShipsPositions = () => { + for (let ship of ships) { + let x, y, orientation; + do { + x = random(0, 9 - ship.length); + y = random(0, 9); + orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. + } while (!validatePosition(x, y, orientation, ship.length)); + + insertShip(x, y, orientation, ship.length, ship); + } + } + setShipsPositions(); + return field; +} \ No newline at end of file diff --git a/src/game/libs/ships.js b/src/game/libs/ships.js new file mode 100644 index 00000000..ccfe516e --- /dev/null +++ b/src/game/libs/ships.js @@ -0,0 +1,20 @@ +module.exports = () => { + const portaAvioes = require('../models/PortaAvioes'); + const navioTanque = require('../models/NavioTanque'); + const contraTorpedos = require('../models/ContraTorpedos'); + const submarino = require('../models/Submarino'); + const createShip = []; + const ships = []; + + createShip.push(portaAvioes); + createShip.push(navioTanque); + createShip.push(contraTorpedos); + createShip.push(submarino); + + for (let i = 0; i < createShip.length; i++) { + for (let j = 0; j < i + 1; j++) { + ships.push(createShip[i]()); + } + } + return ships; +} \ No newline at end of file diff --git a/src/game/mapShips.js b/src/game/mapShips.js deleted file mode 100644 index eb3cbd94..00000000 --- a/src/game/mapShips.js +++ /dev/null @@ -1,153 +0,0 @@ -function ShipStruct(){ - const ships = require("./ships"); - let shipStruct = JSON.parse(JSON.stringify(ships)); - let forbidden = {type: 'forbidden'}; - - let field = createField(); - let limit = createField(); - this.verifyShips = verifyShips; - this.shot = shot; - this.allDestroyed = allDestroyed; - - function createField(){ - let arr = new Array(10); - - for (let i = 0; i < 10; i++){ - arr[i] = new Array(10); - } - - return arr; - } - - function validatePosition(x, y, orientation, size){ // checks if the position is valid. - let isValid = true; - if(orientation){ - for(let i = 0; i < size && isValid; i++){ - if(limit[x + i][y]!= undefined){ - isValid = false; - } - } - } - else{ - for(let i = 0; i < size && isValid; i++){ - if(limit[y][x + i]!= undefined){ - isValid = false; - } - } - } - - return isValid; - } - - function setLimit(x, y, orientation, size){ - if(orientation){ - for(let i = 0; i < size; i++){ - limit[x +i][y] = forbidden; - if(y > 0){ - limit[x +i][y -1] = forbidden; - } - if(y < 9){ - limit[x +i][y +1] = forbidden; - } - } - if(x > 0){ - limit[x-1][y] = forbidden; - } - if(x + size < 10){ - limit[x + size][y] = forbidden; - } - } - else{ - for(let i = 0; i < size; i++){ - limit[y][x +i] = forbidden; - if(y > 0){ - limit[y -1][x +i] = forbidden; - } - if(y < 9){ - limit[y +1][x +i] = forbidden; - } - } - if(x > 0){ - limit[y][x-1] = forbidden; - } - if(x + size < 10){ - limit[y][x + size] = forbidden; - } - } - } - - function insertShip(x, y, orientation, size, ship){ - if(orientation){ - for(let i = 0; i < size; i++){ - field[x + i][y] = ship[i]; - ship[i].position = [(x+i), y].join(''); - ship[i].orientation = orientation; - } - } - else{ - for(let i = 0; i < size; i++){ - field[y][x + i] = ship[i]; - ship[i].position = [y, (x+i)].join(''); - ship[i].orientation = orientation; - } - } - setLimit(x, y, orientation, size); - } - - function setShipsPositions(){ - for(let ship of shipStruct){ - let x, y, orientation; - do{ - x = random(0, 9 - ship.length); - y = random(0, 9); - orientation = random(0, 1); // horizontal if is 0, and vertical if is 1. - }while(!validatePosition(x, y, orientation, ship.length)); - - insertShip(x, y, orientation, ship.length, ship); - - } - } - - function destroyed(ship){ - isDestroyed = true; - for(let i = 0; i < ship.length; i++){ - if(ship[i].status == 'ok'){ - isDestroyed = false; - } - } - return isDestroyed; - } - - function verifyShips(){ - for(let i = 0; i < shipStruct.length; i++){ - let ship = shipStruct[i]; - if(destroyed(ship)){ - shipStruct.splice(i, 1); - return ship; - } - } - } - - function shot(id){ - let wasHit = false; - let i = (id/10)|0; - let j = id % 10; - if(field[i][j] != undefined){ - wasHit = true; - field[i][j].status = 'destroyed'; - } - return wasHit; - } - - function allDestroyed(){ - return (shipStruct.length == 0); - } - - function random(min, max) { - return Math.floor(Math.random() * (min + max + 1) - min); - } - setShipsPositions(); -} - - -exports.ShipStruct = ShipStruct; diff --git a/src/game/models/ContraTorpedos.js b/src/game/models/ContraTorpedos.js new file mode 100644 index 00000000..e72a935e --- /dev/null +++ b/src/game/models/ContraTorpedos.js @@ -0,0 +1,21 @@ +module.exports = () => { + return [{ + type: 'contra-torpedos', + part: 0, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'contra-torpedos', + part: 1, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'contra-torpedos', + part: 2, + status: 'ok', + position: '', + orientation: '' + }] +} \ No newline at end of file diff --git a/src/game/models/Match.js b/src/game/models/Match.js new file mode 100644 index 00000000..48847bd4 --- /dev/null +++ b/src/game/models/Match.js @@ -0,0 +1,7 @@ +function Match() { + this.player1 = undefined; + this.player2 = undefined; + this.turn = undefined; + this.start = false; +} +module.exports = Match; \ No newline at end of file diff --git a/src/game/models/NavioTanque.js b/src/game/models/NavioTanque.js new file mode 100644 index 00000000..c4fa0a43 --- /dev/null +++ b/src/game/models/NavioTanque.js @@ -0,0 +1,27 @@ +module.exports = () => { + return [{ + type: 'navio-tanque', + part: 0, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'navio-tanque', + part: 1, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'navio-tanque', + part: 2, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'navio-tanque', + part: 2, + status: 'ok', + position: '', + orientation: '' + }] +} \ No newline at end of file diff --git a/src/game/models/Player.js b/src/game/models/Player.js new file mode 100644 index 00000000..72fe1ef2 --- /dev/null +++ b/src/game/models/Player.js @@ -0,0 +1,12 @@ +function Player(socket) { + this.socket = socket; + this.score = 0; + this.multi = 1; + this.board = undefined; + this.ships = undefined; + this.hit = []; + this.miss = []; + this.sink = []; +} + +module.exports = Player; \ No newline at end of file diff --git a/src/game/models/PortaAvioes.js b/src/game/models/PortaAvioes.js new file mode 100644 index 00000000..61d3a49a --- /dev/null +++ b/src/game/models/PortaAvioes.js @@ -0,0 +1,33 @@ +module.exports = () => { + return [{ + type: 'porta-avioes', + part: 0, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'porta-avioes', + part: 1, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'porta-avioes', + part: 2, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'porta-avioes', + part: 3, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'porta-avioes', + part: 4, + status: 'ok', + position: '', + orientation: '' + }] +} \ No newline at end of file diff --git a/src/game/models/Submarino.js b/src/game/models/Submarino.js new file mode 100644 index 00000000..58a03cd2 --- /dev/null +++ b/src/game/models/Submarino.js @@ -0,0 +1,15 @@ +module.exports = () => { + return [{ + type: 'submarino', + part: 0, + status: 'ok', + position: '', + orientation: '' + }, { + type: 'submarino', + part: 1, + status: 'ok', + position: '', + orientation: '' + }] +} \ No newline at end of file diff --git a/src/game/models/Turn.js b/src/game/models/Turn.js new file mode 100644 index 00000000..56712e4e --- /dev/null +++ b/src/game/models/Turn.js @@ -0,0 +1,19 @@ +function Turn(player1, player2) { + this.player = []; + this.player.push(player1, player2); + this.shift = 1; +} + +Turn.prototype.getMe = function () { + return this.player[this.shift]; +} + +Turn.prototype.getHe = function () { + return this.player[(this.shift + 1) % 2]; +} + +Turn.prototype.next = function () { + this.shift = ++this.shift % 2 +} + +module.exports = Turn; \ No newline at end of file diff --git a/src/game/ships.js b/src/game/ships.js deleted file mode 100644 index 18f3db6f..00000000 --- a/src/game/ships.js +++ /dev/null @@ -1,182 +0,0 @@ -module.exports = [ - [ - { - type: 'porta-avioes', - part: '0', - status: 'ok' - }, - { - type: 'porta-avioes', - part: '1', - status: 'ok' - }, - { - type: 'porta-avioes', - part: '2', - status: 'ok' - }, - { - type: 'porta-avioes', - part: '3', - status: 'ok' - }, - { - type: 'porta-avioes', - part: '4', - status: 'ok' - } - ], - - [ - { - type: 'navio-tanque', - part: '0', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '1', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '2', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '3', - status: 'ok' - } - ], - - [ - { - type: 'navio-tanque', - part: '0', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '1', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '2', - status: 'ok' - }, - { - type: 'navio-tanque', - part: '3', - status: 'ok' - } - ], - - [ - { - type: 'contra-torpedos', - part: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '2', - status: 'ok' - } - ], - - [ - { - type: 'contra-torpedos', - part: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '2', - status: 'ok' - } - ], - - [ - { - type: 'contra-torpedos', - part: '0', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '1', - status: 'ok' - }, - { - type: 'contra-torpedos', - part: '2', - status: 'ok' - } - ], - - [ - { - type: 'submarino', - part: '0', - status: 'ok' - }, - { - type: 'submarino', - part: '1', - status: 'ok' - } - ], - - [ - { - type: 'submarino', - part: '0', - status: 'ok' - }, - { - type: 'submarino', - part: '1', - status: 'ok' - } - ], - - [ - { - type: 'submarino', - part: '0', - status: 'ok' - }, - { - type: 'submarino', - part: '1', - status: 'ok' - } - ], - - [ - { - type: 'submarino', - part: '0', - status: 'ok' - }, - { - type: 'submarino', - part: '1', - status: 'ok' - } - ] - -] \ No newline at end of file diff --git a/src/index.js b/src/index.js index d577fd30..05b21019 100644 --- a/src/index.js +++ b/src/index.js @@ -1,66 +1,57 @@ -require('dotenv').config() - -const path = require('path'); const express = require('express'); -const app = require('express')(); -const http = require('http').createServer(app); -const io = require('socket.io')(http); -const {ShipStruct} = require('./game/mapShips'); - -const PORT = process.env.PORT || '8080' - -let struct = new Map(); - -function sink(ship, socket){ - for(let i = 0; i < ship.length; i++){ - socket.emit('sink', ship[i].position); - } -} - -function verifyShips(id, socket){ - let ship = struct.get(id).verifyShips() - if(ship){ - sink(ship, socket); - } -} +const cookieParser = require('cookie-parser'); +const expressSession = require('express-session'); +const bodyParser = require('body-parser'); +const config = require('./config/config'); +const path = require('path'); +const root = require('./routes/root'); +const routeLogin = require('./routes/login'); +const register = require('./routes/register'); -app.use(express.static(path.join(__dirname, 'public'))) +const app = express(); +const server = require('http').createServer(app); +const io = require('./events/socket')(server); +const cookie = cookieParser(config.SECRET); +const store = new expressSession.MemoryStore(); +app.use(express.static(path.join(__dirname, 'public'))); app.set('views', path.join(__dirname, 'views')); +app.engine('html', require('ejs').renderFile); app.set('view engine', 'ejs'); - -app.get('/', (req, res) => { - res.render('index', {title: 'Batalha Naval', score: 0}) -}) - -/* Socket */ -io.on('connection', (socket) => { - let score = 0; - let multi = 1; - struct.set(socket.id, new ShipStruct()); - console.log(`Usuário conectado: ${socket.id}`); - socket.on('click', (id) => { - if(struct.get(socket.id).shot(id)) { - score += multi++; - socket.emit('hit', id, score); - verifyShips(socket.id, socket); - } else { - multi = 1; - socket.emit('miss', id); - } - if(struct.get(socket.id).allDestroyed()){ - socket.emit('won'); - setTimeout(function(){ - socket.disconnect(); - }, 100); - } - }); - socket.on('disconnect', ()=>{ - console.log(`Usuário desconectado: ${socket.id}`); - }); +app.use(cookie); +app.use(expressSession({ + secret: config.SECRET, + name: config.KEY, + resave: true, + saveUninitialized: true, + store: store +})); +app.use(bodyParser.urlencoded({ + extended: false +})); +app.use(bodyParser.json()); + + +app.use('/login', routeLogin); +app.use('/register', register); +app.use('/', root); + + +io.use((socket, next) => { + let data = socket.request; + cookie(data, {}, (err) => { + let sessionID = data.signedCookies[config.KEY]; + store.get(sessionID, (err, session) => { + if (err || !session) { + return next(new Error('Acesso negado!')); + } else { + socket.handshake.session = session; + return next(); + } + }); + }); }); - -http.listen(PORT, () => { - console.log(`listening at http://localhost:${PORT}`); -}) \ No newline at end of file +server.listen(3000, () => { + console.log('Server rodando em http://localhost:3000'); +}); \ No newline at end of file diff --git a/src/middleware/authenticator.js b/src/middleware/authenticator.js new file mode 100644 index 00000000..1dc5e821 --- /dev/null +++ b/src/middleware/authenticator.js @@ -0,0 +1,7 @@ +module.exports = (req, res, next) => { + if(req.session.user){ + next(); + } else { + return res.redirect('/login'); + } +} \ No newline at end of file diff --git a/src/public/css/bootstrap.min.css b/src/public/css/bootstrap.min.css new file mode 100644 index 00000000..88269128 --- /dev/null +++ b/src/public/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/public/css/error.css b/src/public/css/error.css new file mode 100644 index 00000000..5aeda552 --- /dev/null +++ b/src/public/css/error.css @@ -0,0 +1,37 @@ +#wrap { + display: flex; + width: 100%; + justify-content: center; + align-items: center; + } + +.error { + max-width: 100%; + width: 100%; + text-align: center; +} + +.error-img img{ + max-width: 80%; + width: 600px; + padding-top: 60px; + -webkit-filter: drop-shadow(20px 0px rgb(19, 37, 59)); + filter: drop-shadow(20px 0px rgb(19, 37, 59)); +} + +.error h2 { + font-family: "yellow-rabbit"; + color: aliceblue; + font-size: 45px; + text-transform: uppercase; + margin-top: 0; + margin-bottom: 20px; +} + +.error p { + font-family: sans-serif; + color: aliceblue; + font-size: 14px; + font-weight: 400; + margin-bottom: 20px; +} \ No newline at end of file diff --git a/src/public/css/game.css b/src/public/css/game.css new file mode 100644 index 00000000..005e27b9 --- /dev/null +++ b/src/public/css/game.css @@ -0,0 +1,105 @@ +@keyframes turn { + 25% { + background: #B4D250; + transform: rotate(-1deg); + } + + 75% { + background: #B4D250; + transform: rotate(1deg); + } +} + +#hide-info { + display: none; + max-width: 70%; +} + +.out-turn { + background-color: #677484; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; +} + +.in-turn { + animation: turn .5s linear 0s infinite normal none; + background-color: #87A828; +} + +#score { + background-color: #4B6F9C; +} + +.display { + border: 2px solid white; + font-size: 20px; + color: #fff; + min-width: 12vw; + height: 3vw; + display: flex; + align-items: center; + justify-content: center; + padding: 10px; + border-radius: 8px; + margin-bottom: 10px; + margin-left: 10px; +} + +.label { + display: flex; + text-align: center; + justify-content: center; + font-size: 20px; + color: #fff; +} + +.board { + display: grid; + grid-template-columns: repeat(10, 0.5fr); + grid-template-rows: repeat(10, 1fr); + min-width: 340px; + min-height: 340px; + width: 85vh; + height: 85vh; + max-width: 50vw; + max-height: 50vw; +} + +.square { + display: none; + border: 1px solid #fff; + cursor: pointer; + width: 100%; + height: 100%; +} + +.main { + size: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 10px; +} + +.sea { + background-image: url('/img/sea-bg.jpg'); + background-size: 220%; + background-position: center; +} + +.hit { + background-image: none; + background-color: black; +} + +.miss { + filter: grayscale(100%) brightness(80%);; + background-color: grey; +} + +.sink { + background-image: none; + background-color: red; +} \ No newline at end of file diff --git a/src/public/css/header.css b/src/public/css/header.css new file mode 100644 index 00000000..b6bb646c --- /dev/null +++ b/src/public/css/header.css @@ -0,0 +1,35 @@ +.navbar { + + background-color: #809BBD; +} + +.navbar a{ + font-family: "yellow-rabbit"; + font-size: 30px; + color: #fff; + padding: 0; + border: 0; +} + +.dropdown .nav-link:hover { + color: rgb(228, 226, 226); + background: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu { + background-color: rgba(153, 169, 185, 0.8); + border-radius: 8px; +} + +#navbar-items li{ + padding-left: 30px; +} + +#user-ico { + filter: opacity(80%); + width: 50px; +} + +#user-ico:hover{ + filter:opacity(100%); +} \ No newline at end of file diff --git a/src/public/css/home.css b/src/public/css/home.css new file mode 100644 index 00000000..f37029a3 --- /dev/null +++ b/src/public/css/home.css @@ -0,0 +1,74 @@ +#tgg { + background-color: #fff; + border-radius: 50%; + height: 50px; + width: 50px; + margin-right: 10px; + -webkit-transition: all .2s linear; + -moz-transition: all 2.s linear; + -o-transition: all .2s linear; + transition: all .2s linear; +} + +.hamburger { + position: relative; + display: block; + background-color: #000; + width: 25px; + height: 3px; + top: 25px; + left: 12px; + transition: .5s ease-in-out; +} + +.hamburger::before, +.hamburger::after { + position: absolute; + display: block; + background-color: #000; + content: ''; + width: 100%; + height: 100%; + transition: .5s ease-in-out; +} + +.hamburger::before { + top: -8px; +} + +.hamburger::after { + bottom: -8px; +} + +input { + display: none; +} + +input:checked ~ label .hamburger { + transform: rotate(45deg); +} + +input:checked ~ label .hamburger::before { + transform: rotate(90deg); + top: 0; +} + +input:checked ~ label .hamburger::after { + transform: rotate(90deg); + bottom: 0; +} + +#flx { + display: flex; +} + +.content { + display: block; + margin: 20px; +} + +@media screen and (min-width: 950px) { + #tgg { + margin-left: -80px; + } +} \ No newline at end of file diff --git a/src/public/css/login.css b/src/public/css/login.css new file mode 100644 index 00000000..ba5c6f92 --- /dev/null +++ b/src/public/css/login.css @@ -0,0 +1,55 @@ +@keyframes glow { + to { + text-shadow: 1px 1px 3px #028aac, 1px 1px 5px #1bb5db, 1px 1px 7px #29a7c7; + } +} + +.glow { + -webkit-animation: glow 1s ease-in-out infinite alternate; + -moz-animation: glow 1s ease-in-out infinite alternate; + animation: glow 1s ease-in-out infinite alternate; +} + +.container img { + max-width: 300px; + height: auto; + padding-top: 60px; + -webkit-filter: drop-shadow(20px 0px rgb(19, 37, 59)); + filter: drop-shadow(20px 0px rgb(19, 37, 59)); +} + +.title-bat { + font-family: grafitti; + font-size: 60px; + color: aliceblue; +} + +.form-signin { + width: 100%; + max-width: 300px; + padding: 5px; + margin: auto; +} + +.form-signin .form-control { + position: relative; + box-sizing: border-box; + height: auto; + padding: 10px; +} + +.form-signin .form-control:focus { + z-index: 2; +} + +.form-signin #username { + margin-bottom: 5px; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.form-signin #password { + margin-bottom: 20px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} \ No newline at end of file diff --git a/src/public/css/message.css b/src/public/css/message.css new file mode 100644 index 00000000..f6247331 --- /dev/null +++ b/src/public/css/message.css @@ -0,0 +1,47 @@ +.message { + background-color: rgba(153, 169, 185, 0.4); + border-radius: 8px; + display: flex; + flex-wrap: wrap; + font-family: "yellow-rabbit"; + color: rgb(255, 255, 255); + text-shadow: + -1px -1px 0 rgb(65, 65, 65), + 0 -1px 0 rgb(65, 65, 65), + 1px -1px 0 rgb(65, 65, 65), + 1px 0 0 rgb(65, 65, 65), + 1px 1px 0 rgb(65, 65, 65), + 0 1px 0 rgb(65, 65, 65), + -1px 1px 0 rgb(65, 65, 65), + -1px 0 0 rgb(65, 65, 65); + font-size: 50px; + margin: 10px; + padding: 20px; + text-align: center; + justify-content: center; +} + +.break { + flex-basis: 100%; + height: 0; +} + +.message button { + pointer-events: auto; + flex-basis: 100%; + max-width: 20%; + min-width: 100px; + margin: 10px; + font-size: 30px; +} + +#msg { + pointer-events:none; + width: 100%; + display: block; + position: fixed; + margin-top: 30px; + z-index: 4; + left: 50%; + transform: translateX(-50%); +} \ No newline at end of file diff --git a/src/public/css/online-sidebar.css b/src/public/css/online-sidebar.css new file mode 100644 index 00000000..3ffca351 --- /dev/null +++ b/src/public/css/online-sidebar.css @@ -0,0 +1,83 @@ +#wrapper a img { + width: 12px; +} + +#wrapper { + position: fixed; + padding-left: 0; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; +} +#wrapper.toggled { + padding-left: 250px; +} +#sidebar { + z-index: 1000; + position: fixed; + left: 250px; + width: 0; + height: 100%; + margin-left: -250px; + overflow-y:auto; + background: #4B6F9C; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; +} +#wrapper.toggled #sidebar { + width: 250px; +} + +.sidebar-nav { + position: absolute; + top: 0; + width: 250px; + margin: 0; + padding: 0; + list-style: none; +} + +.sidebar-nav li { + text-indent: 20px; + line-height: 40px; +} + +.sidebar-nav li a { + display: block; + text-decoration: none; + color: #ffffff; +} + +.sidebar-nav li a:hover { + text-decoration: none; + color: rgb(228, 226, 226); + background: rgba(255, 255, 255, 0.2); +} + +.sidebar-nav>.sidebar-brand { + height: 65px; + font-size: 18px; + line-height: 60px; +} + +.sidebar-nav>.sidebar-brand a { + color: #ffffff; +} + +.sidebar-nav>.sidebar-brand a:hover { + color: #fff; + background: none; +} + +@media screen and (min-width: 950px) { + #wrapper { + padding-left: 250px; + } + + #wrapper #sidebar { + width: 250px; + } +} \ No newline at end of file diff --git a/src/public/css/register.css b/src/public/css/register.css new file mode 100644 index 00000000..2854c124 --- /dev/null +++ b/src/public/css/register.css @@ -0,0 +1,48 @@ +.container img { + max-width: 300px; + height: auto; + padding-top: 60px; + -webkit-filter: drop-shadow(20px 0px rgb(19, 37, 59)); + filter: drop-shadow(20px 0px rgb(19, 37, 59)); +} + +.title-bat { + font-family: grafitti; + font-size: 60px; + color: aliceblue; +} + +.form-signin { + width: 100%; + max-width: 300px; + padding: 5px; + margin: auto; +} + +.form-signin .form-control { + position: relative; + box-sizing: border-box; + height: auto; + padding: 10px; +} + +.form-signin .form-control:focus { + z-index: 2; +} + +.form-signin #username { + margin-bottom: 5px; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.form-signin #password { + margin-bottom: 5px; + border-radius: 0px; +} + +.form-signin #confirm-password { + margin-bottom: 20px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} \ No newline at end of file diff --git a/src/public/css/style.css b/src/public/css/style.css new file mode 100644 index 00000000..34a1bfc1 --- /dev/null +++ b/src/public/css/style.css @@ -0,0 +1,20 @@ +html, +body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + background: #1E344F; +} + +@font-face { + font-family: grafitti; + src: url('../fonts/grafitti.tff'); +} + +@font-face { + font-family: yellow-rabbit; + src: url('../fonts/Yellow-Rabbit.tff'); +} \ No newline at end of file diff --git a/src/public/fonts/Yellow-Rabbit.tff b/src/public/fonts/Yellow-Rabbit.tff new file mode 100644 index 0000000000000000000000000000000000000000..cc5252b7e6d9151400a0bb68557f7b1fccc0851d GIT binary patch literal 40372 zcmd432Y3`$(k|Si(MU}X2+(*4BYHICU@`&(Hrd92u}yNo#s&cr5-6c8lr_1-L}ert z5IJW|FgDJ{0cY%WUI*6MyS7{2!K?qRmb~lT@B8-NyZ8T}=U3A;XS&a+Q>Us@s4HptQ`Bnlm>D=9UbMHsPF5$bD38Sm{Lz}Qmonsh7?>BM3p!cIHr>=WlbT7j|4p2s` zS&ZIwny|17VFJEOU7wowA;({T-vs56eHdo`Z`W3?v{;zA4D(TV*n^!(%y7u?7VeSE zjONL(HTbYlnTgeG`+NV3@m;L}I*3`^T@GU+nZ)k0mYKz*c9+9ZXJ2<&$Mj;J?k-0# z1DMyk%aP1o%$MC|mf%4auj3I ze$!o!W(I{vLbsam9*{i{KD4{6VdBG2b(h1KsPJ#P%UWhzc&NJ^&P>$hc9(UGNw=%J z9D(bXy33JFgYLWTGRw@2aCet`p!{TanPUPGzjl}POkAY5yWA7y-|F3>>~ky)6PvMD*oGHSzU%jAiZCtB7QT2>WiCTC=%(`TY(oMmNhPI8K6WmZadMrLxt zc+0%hREydu+me--otTxExN-dI#MIP`e9MZ2_3Kk|&}La;R(3{uLaOE7?8Fs`n{rbV zvbwnv({U=x-#E^+{JYjORk8kEjr-773dEf>e&WQ5T@}0J826hL5aQo4u%u*L5-d4c z2^$mB60){fGLrrmD)_ew`nNa#UsHH;PEO{`2@~@3^T+3OnF}9@BP-F8pOLlEl9OTCl$e7{n^Mx#Q_?qCvhx$NlPwA98@sGO+LDlzlbH2Sm2;94 zEs5zH|6Y4McY8rXT4rjZWu|4+Kk0ci_v*j-;}((AjJ2R;LUy8MLq>W|!iF46THXm_UNf40K}bpR8(R5h;4S0`}Xzjd4! z{za89aKAJA+)Zf-DXHV3s~5Qcx!eEw&OaILUuG|}fXQGonL;LuNntiI$xIGH_9$ip zGa8?hnThIYVb-IDg;@ofi8>iL(*OQF5v6fBS2DS1oeVxyCVtr}?_?%{8INo85Y$ug z`H!Bm)o+QYmx!x*pc_$hH9o0k29uBbE6{p9jucfg>Svi+n|P<=9&x-^<*)+RH$jF} zT+R9yS-T`pgq;77@?T|~2~PiM-_-UuZT+6d@1-C2UnK96`@Zh+q;zX_5_B+8J^oKQ z{l5PHiRLV-tt`-+1zOI+=SIksrs{DEu4OPup#L}4|Ige0=Pm#L=h-y7axjBtG81s* ztH*d;`TeZw`j!YENQVt*KK-A!>Czd^%TYMjgHIA{n1xRZ`lQlElyXqAV8&1{U9~pB z57KcE-Gpn|sGR_sjB*05QLBIOrU;P$&N<+ah4TNznZ`gpC#oF&EAR0P$K1{ofL9uH zld9IG`84X^%*N3SXSwM=JJ8!A^wAYz#-g9DK53jJ_I(t)hAv47WF6&(yU9z73zm{ zMskv#e;@ZU@jZjtjO$&p(rD7vcH>Z+?j@lujp8@!ZGbH(I?`3*{Cim!qqYTCGjNs0 zoxp5SVQCCRZ2vL}K^msT^ulXOJAcU_@a^WW<)71C`$ z+jO-ir+QD9?~+&iC-Y%~s`V}lO!z0S8uw4@%LG`A`@e{Du=v08N!25|=J#)FXxFzy zBvG4Gji*3s0HTLU2 zV4x{x5N}?*XbHnS9BUaoWazNrBSwxIJ?7@IzIBD{fxT({o$E!VU&Dxw(RBm%R zT!LFnktL7U?+XO0YN~7N>$W#EHZjc7drZ-9l=Khg&S$^Jp9M43JV9d!NOr+%zb>5A@a z|M*Bku-}OB-G!;Q46fdcX_1I+*@KvPtC>5Ph0L8m1r{+&(DPE}9wr(A?mkR}83+sa zW11MCBZj$wGo6Xn>|_ROo?xbF8W^MIBon8(h;l45MN`KZG>^hUr*XZU>8A-WV^MdE z=5LGzb%twNajl9O6LyX19riWTUvn53#SYZwHTS$MnJV-ryarSpvDg zVS3b&fS`OQSWa|FHHtM-vOVoOdrjl&L6^tF#|Qv0-spO7?~Xm zi+=iOCV^K^rl)2qWSxa`7%}IqOqXP z{mdZEQq;c{eccMZ86eZ2AxkaO7oIhd*#o&n@NuC1MP?G?#uA*(3}K3y5eQCWm?Frx z4anMF)ISROWo9H(jd_rR`wj43A5O9hjg$0C`XRf}cu03-tN-pKoBi%2oBjU$yS<3# z?@zMN?@#K3Z1dlpuo2nmw^Ox|6Jv0~%bZNaZ}uVCe}9r~{^`V6y6@}5YM22SV^r@q znHbe}7&?t#GX^}g^aV5O6w-qK{!arua4w_KPU*=oJt8LqxeM?71(fZ4AJnLp`@@Q1 z%mB5_10f58Mf!q{!_p823lW_R3f!;rThNHkFF;MGuVpMM9gdQg8L5^>b^aOUNh+Pz z`7z4VI|);Y?*y*MZ0P(G^@h9Qj8>((&QDQ}?7R*-1wH8)9+uWIL*ef_W*9tO2M>q< z#dZvI417rk*>pI@t92$qW*sCnf=*Fu#;N707=@0Rrk3MDBhc?ppaXy{Mu2}LDDjDa zw7-DT7$d*|BV^(ra|AOD5)vkt2^!AKR{Kd&+pPzUguh0@i*E((fv6FQ_LZPLv3ZGv z$L51Zsn>g}SNbw8Trr~eNccb1?9Wty4q)B`9mv>0O-vJL3}#{^Fv(U>9&t93F{?7f zLRXRS|K*^=n6;oI5aA-Bp8=qw!6Op-c@T6$=U1SUF_R*hIQ8yS@QZ{tXx!7)yYcFk z4U836HZl@uB2xp}g6phmYZg|12j$q#5a=*yuLoov1Udi_6v!t&d#D_HKprE?qtLzw zB>5E?Gfb!5;UvPL0)B-K^g*<--9g1H1s`~E>{Topp z37_e!dQ@N43VorSXj~bm)}H{``ogcGKquo)U+7c=inR|1&HcXct^uI&phn2^GiU_l zH$r2-fDQs5Bjgzb8Vj8mArE3AG(+W~=*tLsI8gEgBV-^tQN2R;Gpe>WqAw$kX}H@D zBb};x-eS;!;M@;3wSdOpTR-$gcgef@sWGh|Mn`3ux&1H(;xG=Q?uQYL0HqQ2LoZ>V z)6j1}_`eo39uoG4tp~iU7(RjC@2yv2IT;; zk)N&yg%5&8q5lDpmhSe&{)((YHtDC<>5s@Z0LPm+2dec=OexAS*cA+b#9mMyk#GQF z;7U-7+IE;K!w5v70T`DNbc|Z2u?&F!)0N3;oh68D12FrDC#9DIF(wP>0L;sQ;5-I& zC`LLE7SV!^hJFUB`WXn#(DjMxb&6dBRV$nDeHH8)juDxl2P#LX8~3B!2Ru#C$wQ!|6BBf@7PLRKWP*f`gAPOScs_ccjXPb~Q23!#L0}YL7Ro*C`&wKm#P_B(*#lBa49s zqCn$RNoe(qf%S=JygIHWuzL)~J^^$iVtWj{YYJ!!`W%Fq`6(!^J7i&s1Uz~ignRU? zkvwe>>_S&Yt5?Qgehq?TVW5+64uTcP`zhKFLcer{_E9`)(|lkdClCLj{Q<>T9{RZj zl-6Y){ZU*a?eaLr;H0=s5>U-y*pbp6i|UNVSg3{t^k&2&9x;Jdi*bnI6sf5^5!T}& z6|MKQ3iB8ztxUA9pol{}Dbn)L4DoD1*$fSQ2RZ<|5i_oh0UeA8Y{saypp)PWW^fw> zIt9B6GqW7)g&8Z_50GduMj4AXL}|}zQCA!bR-9i^9*#N|>^7-93i`o=0rkpw^~waS zaTawALZpCJ2dmr$!*XFLjf2L9Km*~R!%=?-GXiynKo4}CqQ?-(rURXf)p-cUNc)>u zv>l4pTF@~ny&2JUD0D@19JDbM^}|8qptqsW36+~2%)f03S>@o&*M}v-0J$Nj1H3qWLb=t*^fm9^%6!bC%y%<5KLbfsJ zi#$GF<+cRq#28pJ9&{sYItJFHD=p~rX6#S?20C1&amdC4f z0{R*Y&Cp%4=2&$XJr>+4$BTvC@xTjw#$ksa0;L_uIMt@()Oj=x(o&{GzC8{cB0;BN zmW_jl-$1?L;4mK2g@KY4=)sZ}lrpLDYRw6d+ki+p3Q=kTuIWH&mQ8>Lh>~32OYhJQE>F zA5h9WCZaFOMy9EEX=gl9jaQS<7v;JmAoCOT&>(++zy^dG18 z8;5===OI6jQ)h7;`t6M}W#w_`5xF#aq*kQ=IP}GW(#(p32S(vLS$wKG(y6Ncr>f(c z3Z6P#9}oGb!lu7~PEyOXB1}bVJ^$P)6k0nl(LCw=!NPNo-hp>BF-fFH1tW7_5jl$`2f%s%+~4XH5zm< z#x))HbfClFZ`08`GHvu814>b4Iy6QZ?9FO+u*n3pxzrjmOx-Ku4(8$xq_Z`w&nXdp!Dz0wv5O9)0OR zCt;O|2WQG2ro+$UaS(?)An7g4d_;p;Ks^Zgn1x(v4(OjiXXE-D+*PoboP~^U9_Tlq zb8vkgGY=7U9(KUtpbOAyK649N%~#vbN84{uo}*rwhdt7K9Q|=FP_M7-d>7?aoqqs* zpz}G<)tzsFKBU%M)A=IyfV0r=0`&e3bDJu|ZD{*5B%Ta(g))rQppy|TlQ7OG;J%dK zwL@1ND9xsJ)yLXZA8S{AtX=i7cGbt)RUc~yhcMJ6AJYI>BV6Yiqf5w2SkG8C6lSF| zGdE==ZebQCC$7(8R-`86q+_?wF`9c<+(zEOK$q06>r(?={8k43_V=>(cja(uy>!*0 zf3((hw~k;U>HR)ttV$=VG+w2%ReGCBm#9>I<&XGx_5N=uNfoBnWEoAb4^&y^GalwF z^QDH-%+_oSE&82be+Eaw5os>z zkljTf7bN_U&_luw$-@XYB-D^FLqZG*FC?^(utGu#2`40!kT60*2nin~bdaz?LIw#J zBvgtpQ!sWVbM)9vNdYp%G&%(Il(eo6H+n~xyqs-{;jnLPj=#ADKLdgcGYd@iGgt_Td z%#9E?!rN%KNmv^p%kgLfTnkqTWh0D@);_`{R^g6O<)nv>KkmZT5V@#6WoLw`5u!$T z8lh=~r4f=g0JX0}A6+OKVQ7?>5q?IQ1z~4|oOS7fkSf~$l5I#I(O8lH3{Ib_D;w=f zXlG9dS(pEkyoAXRHb%%8;bMe}QOu;>0O4VTh7lG63N{lz(X; z17S&hz-17|LU=6gX=#R%Pf^CAMQts(g>}z*%Kr$pBFu^qE5fS?ts<<7kSfBd2&E#v zgisMaMYEc)sV-#dO^hND<0-{>veB;>618H^t%Ovx?#@BWg^-AL@(Wc-2z?^#iI6A4 zod^>l%#Cn~C1_3g1LZtgwCWlI;Y_q=rWr)KB#&AJnHNLmRgifxWX^=g&xhQ!&g4Mu z<&b-Qx7_zbCxamSL*25kMQ?<&Jr3CkJxYV@si={P-b*1nybgcA`; zL>LhvM6_QZbcpuhgbWcbM5qw$4ha!b;|L_B9S0#ngaZ)@MB}A7MVWFeMlleh7>ZFC zF^ZuW0j75_jVu`C_yf0F4jDosl>w8>IYf z99mf*G2wND2oD5z+I=s9w6x5@CTD`H`;6W&633t=r3BME2eirQURHmx>4Lf8s%CR~M3720c)2N9k^XbNE| zTKGSt$4NUHt~<*7iaq@gDuP1z385#1oe*+D5rLOLL8^PUr|>BZQ0)9zdBRVIqWx^uxGlogE1+^Z_+M_Hgj*LP5G_H1WR) znxNJcvnbM#6={!7``MweB0be#2rE7SE6#&f2E&`Wq`U#nEI3mnjD{>)H9I6^qbvGF zf)nKkJ-|r^$tlYuG=s1V%1sH!P^AV3HIje>)g&zd3xRe?pM+ZwYC(FXxI=gao{7MM zgjNt%(d9pc@KJtG>m=o(lvC17r_8MvTK0xCl!5d@AHC2AArgc~bfFQHL(yv57oPTu zDh27UA7rLzNPbFB5_&>@1NtG{Ar_L+GcyDFp_Pje5aL367RrfY!KEMccPI205B)8K z{_ceShCwPq76?}$D|4#n5T-y;it-df69`KnB!M*e+X}9S%$-=f{??5jgsWO4Pf~YF zs_pUQ5#B|3K?Hi}gq);n;zd~~w1>NddyzNL6A79FI!H|!V3&4o!e~h*dUDI5COxI2 zIZEE$6IKqxxLMWGv>)lh0Ei3azbrun_NBC6tjuD(F*QZRMP*=+G zDaY@P(cM6QgmBT*KziOnyHLoF5mQ#*W&KDspQo5Zxjbd^l*b#oJ%S=&Z*Yj{_6qX& zu4ma@9uFUd)T9y0*J*vFT>bBRNL3F#FelVi8S+qmPTEqfrRsqqAz@Ha&;=ntoa&vF zi__khKhO?qHek0L#A-CCv5(R!pqOIlCEp+Q19y5a`qLF9LMHio<8ca&vQ+@uVf z@@vX4|FQofw21u0fWB!pBNUhR&SX*QpYrITu)_e@p&v#?J37jrDSM{enKEa}n<>&z z&P*9I<;z`M>76J%vsa^o23*Oz>B%@VPsu5s6V^-e(b}d5 zC-RY-(0Tx77-hg=YWAy9vtNyx{c4bN(mM^5{Zj5rnJ-=Y7Hui>Rr6lVTFQATKfR4Yeu9r3{zyTgq-Jx24QB47?OIuMJaspsZE{y}59QvRcY%HIO(8 zl=f%;`<4rX--p3x8E7aTy14~M99F;EV2L|$%)-jL7$Z%>F$WoQGuHoh9P`i<<-U!0 zuj%)>?|e1)U7_Z_>($&h6ScZ>-+pS=O7EpaLQ=|qwcx_S3cuyOTFBA^QvBn)7OngK z{X1pIlsR-|!@u#JFnzAW@X;1CBZmz_Ov67#Z3-%#nhD*Z^MpR4p+HD?Aa9}J zpaz;^aE8Ore*2_n?E^4h2(zhMpoU?LMxzC7MLdW=(@;SJ=QXbJ*0dg<;#n z_J^Gcdo1j=uursefwnxL-Jso~t%tqucZVMdeuD{N#8>Snh8?T$MTdG^8TcvwQm!os*WL-d4 zqifRb)a}t7&>hiT)IFhlTKBx}Mcq5P4|JdC6kSNy8KI5n9bt+X95Fm%bi^$Yb0Th! zxG!Q;M1Dk3L|KG8LXPl9R7dQLI3966;&R0E5ido&9&s(=y@-z@zKsY)hDWlI#>gR& zBO}K~PK=C;jE}r6a#`e>$n}xQk!g`zBXc9mBgM#?$kxb%k!K<=N4^w!E%FbMA4Pr| zc|G!*$UjH^9Qju^oYk{NHkKXDPGYCBGuT<|Ja!4Yl6{cfz;0sG*eteyEnzEICo8i7 zwvKINTiIRge)ceXoITB+XD_i&vd^+t*jL!sjgla5=G?MNc6gi~hu7gL50(e5UUm)V zyjy^?dqX7RCBSGlds=5X0vPM5>w^6;!%5ZpMO#o^p$onr#E~*mN#6V&KtfT&*|N_b5hYB?@>X-WS32I}#6owT zsd%SHGo7 z(PX$fjMp1Wgz|C^S0dF`G{n?PHMK&$P+wMEEU@}z{7_!+Rx~9YxuG#$_SPF4jZ$T$ zXp5=&p#IOI>40KCZ|B~r*b}O&4o!Z@Gr_r1X7wAmD{qbB3|A-fdZnVnV9fFe1*^F@ zohUxE+*FjjdR(fo!u6H{d4lb!r?o{qaG3LKx3BV>_4o6` zd40z%%4TDc&jx-aiCY%(er1|x3a@u$R$Hr`><;VRY5eQl`53*($*;SAwtd1@3oX@N z^Nv76z9+vnUK-_|$BK^7lc5!Mb7+CxshnQTeI@+R_yt=d`y1glt5=NAuHYTb>$%oRwq?sXz2Y?b;W8exQ*u7RIYfuV+8vU^j*{a9 z=X8ngX5Q&!T~5JaeTj2<-Rv8jmzOSZ@@u@;D+=D&V3knq^@(2Jt8kri-XnQL$;rtc z!IQ?{!7bnx=%qz`i`#qJELD5jy$4v~F}-jgvqm&2b7n$-XjpF+93(^DAc{ihPI-Q; zJnwwHXxi_U^-pOwtxc%& zdObd~UYylXIm+zZShcxnE32>YR7y61Ep%7rY%+=ZmAokGizR1~?E;^-38K;=e8LoF&I>L&uL>TJ4oWtp3iMli86;ThG4DRq5Yq&TGy4=|IPv zqk0j7q-?ER&g*aEBz$x26kpk2$?8R=Z)uIv&#Z6eT}~$~C0SXA*X41WJ#H_IB?)iy zf*j*f&87DUIdGq?oFmC?5(`6?me54AsDFsx!Rw_HJ|+GXW>?jtt|o~+DC-k>Q9oUJ zqa^KAJ zci32c1C-=pMSTSi6`7(W{Kfjb-hk|9^%oz$7>$dvKEbuQI3ar@f_H_jl07Q!mm1Cb z)flx~67(*YTVKZ2RoB$kRaBS8>eq(G?NtUIR^HyOzoR8j>EERHxFtO+O8Uet339&2 z`zrMJh@TbjY0xL|fS;c1g3L4)s9ru24NPiG*M?9%~w`)&+wEKG5 zqk49Is7G~Z*K(7z{Pm(mygtaq=$&;4FnZ&Cfjg(Wpk4_hL_gKuYP}=}W7|Bgs?}UD z)uS(TTXTd>tY{An{=se5Kf|tlHt{al=!B<1f?a6TQmlS6FX<&wl1%!*hNT#so7kE3 zE|1giGJ6EC;6osGlv~@}8C(#tIYu8yJpKTG0ClRJ)%tYnkp$5cs5p&Tt9N=)pY?cT zj~uJtc$s&?_^`g@l=NQFqYpT$^{hcdyKU^}7?c^N4>qEjaz^i4C4^adeIxBr}}fz81)To*G3=j#2fG(Tn2!n0T(scyQ)RHh(DH^ zY4C3@u5NlVGmvM^t8{1TL+=|?PQI)(p0Vr2YQgU_`+ah?{&7A^a!W3K9p}`$tx&I9 zaO<72L(&T}X0GMv!#U75JD-bh%AM9-F>V*=80+*=N$X1zQ?V)jsAu zt#9}2Y?3apQKHGN_bGk!TWy(oujJA1-nr*Un=<1pv@M8eCFoz~ghVk`U!_b8Ez5^C zU*z5T?Ircw%zCMTGwTERy^vXNh%kId66qm6o5lJ$a1)Yrnu8fG2C4C&3_ztHe7_+bPy zxd$_UAbu6WRN=n^p+t|YhW|ff7K2Ai$m)<-({GD(jK;}eyHA+_k^tl*_(cFRwB73e z&e6;O6-JVVJwASBz!ZluRt;0eAW6W^9qAaECdlBo7|hEIbBtmB$l#Yk%wdK(puvwc z82r-b2*aFWnB!s0qYQI8j5)_J_#x1F4SuAAUwJT3G0YQT__-2ug<+o4FfTFqSqlB% zCa*EfD`E8CdAuHmA007&V3=zfJmq5EWtfi{=7TW&f`xYSE**Xr!tA9@w3d0Ec~O&~ zsnC3?`66sd*j4Ra+GX0a;ZwpL*#553t<}8|Q6E{)PG_(5Sl#0rJb+xnUDB`Czo-AH zXL(O+&*ysn*ejz~RDdM+pDjkZ@<1R(Gk(BqrW$-Gb9<_yJ^Br z$8Nf4Tx#s-ceMY;{$~dy4qQ6$y2&?4H^|4Qm_LlIw~V&DIkv>>nC_llJAK#mQ`29GkBsjhKRf>XjG`GO zGbi3+yyc@?rCayUnmKFUtVd=g&2r2-Je!%#&h9@ucJ>{!@0z`O_S)I5IpK5kb4JV= zH)rXb;yJE44RdzQxjg5ObH1Fbnaj>K%pE&7Wp2jY%DJw&?Q@UMeRA$AbFa_+ac*c{ z&v}M4{7aHmsOw#t!x+00)R#H|Z#1;#6C5l7VMI!%?LRkE6GpmwuOvfE9fRN^f$mw0?7RWWr{fd+r#K@YuZ8s-hN0LlwKL{&M^7q^eS1iB!ZI{x(Y(@vwY5 z>zVt9V$Sf3c-DDoulab(nPa}!Si@hR;0?bV3S}F`rOWd!ne)$oa`vj( z+%4q^WfisxyH$9QXMLj2YkIBhr-$Uwovi3zRKCzW&pvsrytqpq<>5T#4KX$}Kh$Cr zlX6NAnhQ?9dg{fR@<$31HWjc@Bl)NmJMubo$CSy(HBWq^?U;$p{mwh;hY992LZUU( zT2`0qDU#9!M~+~#$9Zl{3T(WWcOCO6Q@x6b4Zd*R-V}3Ca$(cicC+&yhy14J8M%pl zhX1+kn~Xya_L$wdJB`009#JYzDb@Ql&EG1+j$AsURgQGrV|+@vCB#@4@u9`Rt)Zi4 zkrYs1mH9}{lvSegtQadRVcwrSJEef&7kn&bXYG<}M;iZhOJ2tdd!1F$XFr

O?h0?Yd4tl>qE65~^*dH1uAHSyEEH*WTCWDO^=Gw^Je z*(OOiu$tQ;UX-3|Y~Fo%-^u5uJ{uZaU&z)MoZT;)4(|%xrX+4T`ktcwTCp@7U=0U% zo?nob#=j-*?>N3s%#VKbeZx`ZrXP&Tpekjz_mugP{|@X93|C8>X=1EnkrdkH4fQYN z2mi%u7L}%;d;#m{j#Q_4i!-$K!Mq06aJ073+aw%hqm-F)$2Xb-Pbe!cUb(LAFm>E% z6hdRYp=@tPfOnnoDak%1R{F90)tOHAZs)4dPv^KFOFp+=W(yU=l04BA>XTJ|!!DX0 zbRG8uV}kM?QEceAuATf z#(C}sL$T>0mNjI0zVdwHX=N`q@$udp{LiD$to_b#viz3^kntA#tjKsv6E`p91Ijdc3NIYkO4;1(ncOPgvDhq>x;G2! zSi_@C*4K$|E|Wv!y^q}3@5t=Vi<_-`rt!*6;`tc4D+Ajp)cQQgzzn&JUkp~6&`)FW zuHvJ@dv0aiyW16p6+Ju4eC8X^&oN3BR?*rG3>eNa2NnA{JNItIZWSAVZ;?b1$=(ca$UQZ>puk79gg1@A;g z=4zd6yJtCPNG<^A$5qXg*m&vTa_BXm5tFR8W#-M#Kh(6&$s#EX zASrYrDMW8uW#05AFNHXBh`Taa=~HWd(SPaiftNga-eRAP75Cruw%h!^TN&FmQt!@E zXyO!eqds)I@eX(Cn}0M(@3bA?>Qs zp`Fsh8agD#MtzLDD^Xp__J17z<&PgoUl=4M?gwLmAg5>YbKk=<^n!S%YZ*Fw%=;Sq z1pn%pS}byyrziQm((ZMx(q*y_@!seMFvw7KFK_tTaiz9nwC|GS7qR-C$Lc3M1{_Rq zN!UHhHlLL>yiirt?ATt_t}cMA_}G+5bIjthm01_f2FVfh94rvns8_|Krw(`AcU05* zjbcBdRYE@+_dQ$xv0aH|mHWzOp1dO_RPJsKb*|?^{a*?7fYvVgPPZL6T`dF=$k>B! z7Yr0E3FLdB)sD4BCAJ{6PmFa=FI<(I#6IGENLa)_EIv|ht~lsAdD0|SD&HvmBy-}8 zoyIJou&%U)Jrp=z!0nNC3e9eI-MWW?Ra_R2D=E8_(|dFFM4$LL{!``duMO{Z#J+AU z^OcvDR+Ls`mnM~R@BFw{i3#20W({vG5FQ+!K7}=WF2CY=LTY3UUtUB6D~Ty~BEPYB zPf1>A6|YFw+HSuTiu|dB6<;cEzic+VD+b%jeddt1LokY`U6uI#f^EX+v6zcLJ*F&s z9sb+oI@-~4CR+IN{&Py)XN8X&t{bj>s+f(U_e7p-&h)qv&vExOEcm*VReBa(ef9&> z`-`s30OwCLn)0@nY-f{C$_LkT-~SAR;eGGkJ8IUjV&J}AUh_V0#YNFnadpGHp}sO3 zy4{l>8n}qhi@SE4xw^8kw7!xxTo;vzqwNdLj)lvLx5}*HTB&r8-}5ya6&l^~%rVWi z546gQ9d8*O2Se`y7kE(g=9uMe&lPZccZ<7XTsFaWj=#lw!{Sf!Cjl?me~x>$rlX(l zf?V&Ywgp(>{1Nw#m?s2VOB#Po?D$r*A4}~_J}Ln#(s%hS`O&RkT?!b^Dy7Pk#)m>< zi$Xm_Q|p051-VkmXJvn?_|S27jg)3DbG!1T^5EF!;msphu{p#ZxW$~Xy9f|)yq~jGVw2Tl&JAYe3F*$6Wi!fVvW9hHW@u*8T(i8_s${#~U|nAnPakAG6#;@+L_DVNLh>=g+!R!?7jOX{`s5A)t(%N|`_kx^dmkn=p{ z?W50zv}eY$qU`Winv+%}t=w>5UZ!VLt2OAZ-|nwEcH!_7hn`^P9er`|YcXg1O~Hor z076J9uS~ygXfXUdk2AcxiZlGIa5ZN-2GLgST!;TrP22O@4&7762P+>C9~2%D9v0X7 zSm(QnMFGru>5UiOef~;&d&%yC=HiB}p7L6*pg=5)Ss^W#R#iBJa+hFpFuc`sBw zCS8!&+FG$T=I%wyW< z++65nqlR%&LGgg{{2|TG&tBd8_^Vo_wvumbY+A?d3KjEkwDi^TjVnw;hUOYY&zxf0kHI|DCZQhZmgmy)@f4(bV_()mW@rJRg(pzp0 z4U`UeG|ih6NW#_)un_uo9rY-ay-I)9@O^!i zD8^PvwPKx35@QV?i4|h8xk0M0GkM?I@!0-gmFx`)0X8a+;4jlL<>|ee?QbjmAGFGD zV7J@Kwr;h>79UC5y|Sol#9yU7pa0x@ho5CL#mp?g>$h(xyPvChm94qrQ?56fnv(6J zIW%uSzt7olmp_T!CgyH66(rvh8kl~ReKE9upM( zpOlO$SCz}Y*_q_pWDoV07PIoAH?U9J=};2?=!um-osEUDW0w6Bzn zlDLNb(Yrrh{J7z$;rq#);b=>P(Xh9nCQubD4;055juw~Mtd+I4hS;c3mhzYVHOHej zwm$ZU#V;E&4c|ZB5pB#Dq_jo67+NiaBFuMfslXj(X#chN|kC;;Mqe z;>z-hhRUYcs7=jz%6HY8_Sckg&uNvjr;I7>Q$9`GfA!?mr`uZg?Y^(MTxQE98}=+4 z*3DeFWvgG&1(iN>tLIos?G_Ka#Vg*A6*savbX7D-DSO>@Znn`S?-EVBJQqAqnw!^O znz1W)Pxe#w&9!WEZT9vwKC~He>cxZ64WG&_4SQgc$sL~>eGa>~JSLMfTsy$qf>=;W z>#dinxt*r^rkb{@mhGqN9`l?IoaLPB%N{DO;iW_39%;Mxg}{4_5-VTf5YBR332fBI zu=b(%Jx$R~UqA8Y7w@F(F@4jqyU0xFu zO&hCHEZdf_(ko30E1Eo8IeRzG-AXuj;DKG{R-x_`)|AgKDv>smWb=f2Na?Jce$a|X zT7E%pj%|~@Z3xEi`I?Vliqv{*{VhHx>vOqFS95FJp%tE7)^N_7d&0{bF6?y+heXk@ z-1n3zs-z`v8W%O1kJ=O(kf)40qP(~_e^+$l_hbK{^u22M-0-FHa7Qm=qMWg{Fq`#B zUfE=L_nd!`6G_io#m=n&Mdt`NbpB+2iksiNnroF__Pkw_*I3Z*{=|0bqgo{zTZ~$z z@5(dxd$H^AhuV#KcjUXvr7Wr7P1obn0coGSE7-RG_4CqMsW>z*_ck^vizJzjDZ5Wo z|F)vX(p`!vTk0sV1CwdVu32A(DZ811)KdkIT|MxW5YovZt*1a0;T-qWcIAfuQTCh~ zpF%PF`Q5I-8lWtAgs^q1sUmA(=;kfQu`%F09eo};5Z!X^b($iX%9;+wxVdrD^1OAd z_kah=^xVS-A86lM_2x^GImmfTjo&^0dB7gDXDszU;z?_&sCObm^$C9a@q>zPZ5vn) zdH7hg|8)8rXZKgM8J<%fP!=17#_RwlpF_aYR)?*gj>he6dpt+k>aQmujhm9YV`wtJ zxou4|vXAGo@^ZIUrn6ad-oW#YXSba=hn)0u#q&8&x70OMBb*tIPFEHhgTl@dd!jS1 zG{3x*eI*E`a9zPu2`t{A< z8GMFhCA-68bkr0VaK+wKd6Udaja;#qj5xX%SVUQ|$>4iPS}&A2*($z4uE%kS^Cum5 zH8|M@r+gfKw#;=gsGRUCH?f9Am*qn)TuN>f-2F1=0z@6vR{Bg< zUi9|QUV5(P@R>t~ROL15_MV0kbXz|8l-liu+j&FkI^J+l{L^~E#SN+APG$S@pgB1- z!}xYd`{TTjR8X=Wj|A~h$W>G0u8YBAW6%CF$s7u{8qxGVK4ab1tZlb) zyPVtSP=iG3Oc|yuHHwGI%VwA>ZckavM=4tIP|AtVo0Rnjqj!CF&torq{rVGzqK;W_ z@rE-bsBNpYg!etlo#!V&%7pa1^n%!;T{%rD5<81G6jgdE@O0J59}{-(XxhCaYhU46 zH%pH(tMM4KTOO^l-Y6a}FQqOwvlZj zW(`F)Jm%geu_u&aMj*rv)ABuz*Xcp2@XCS8{SR?bh2r6kox3%yr z&!VYaiQDvzXxgNN&qBhq#-EvEgZpgWnm^3!Ds~sUi(IML*rf`oVw#-6;(_#}KR#^s z2~CbxiGA9?_cS1+IZBw(-R5rJWfFEtyQN*MUrBi4lqhgjzP;54=d)sUjNfzN^hyhe1Gk# z0C)P_$+tyQO-prabqjm!FIantYgK51)JBK z1!8`ms;7>{E9?XKrH(ZP2vZx!5cfx0D?8RUr+j@$M?}rOM@a zN`2e+2*Rs zmckRRR(HFnxtfidqhuY6uHF0od$Zm(Ty0iLjcyrlAH^6x3fLR$+nwF8byc_#_TJqmoYP1oj>QbjXIAMWs_}{S+p(ASq&v--nQApCVTV0 zKF2jchXH3@mkvFu4qfGL%oZunm*dS1X4e+LavLwZ%`NU-@{U?IDif>Ag_BC^iD<=k zJmnNNq)9>J>Bfc&ko7J5OTZ$s_KBvL3^c{gf7)mdI2w3Im9y4WYioD!751}|C`+cN zcu$qL+E>kr4|8TZDLk8S%2F+d4=>&bdz+UIa?-<`m;O9-`s6BKjrpu2&QYi8|j6W zbDLZR&QfQktI}n4+UbQ1(Okp}Eb0h?*={W^$`739@R}K3hO>EXK0DUb`#a8^(7f=5 z_ISs6qj=8wlE>V3ToMsJw{DExmR+1to>rD#nQFtcmbB1>T8mkf3$SXIR@Jz+$J9vv zT5lcesgdwflV^`~()+0QtpBl^bN-!ywm?g;CD>fm$nHGbf~`qoYjrEaQ-d{-$-96! z#!TKGiVAQ^#nx?7Y}r1%Wfzs|JK0gcJG$kxVtHr5D~9XWmG6x!bIOJ-;&VgVON-6o zo()f%4c|8iNN;`Y3$5+%B=g(7tq9k3^g(kERDI_Rr(gRDHols+~svvyr^0Ja~=1_$4KEZiA_nIZSrmi7Ij0DfO{NOYraeiIdV$Tj_apx?xNM>D!n+X?$_v({#;mhl zsuyBK0Z$5rTCv)PXS0IOjhDFG7dY1Gaf#=6$!2quxNUB$0FZEz{gzAV;F5Vb@6>kD zbVm8cCXocj!@kd?`F6U@gAqwpfMNPI$YLJi{bIBuNt?Nlol1&mo{#%uWQ&|QdbmfXgSug z*(lTs)mRN19F@Vc7`!)D;w)jEB|^z+4iBjXAflp8u(BvrTJhEfJ)OpDnRuBH5A4=& zFl~@FN?Xj^q!OvrY?mAklSD6Vn!M?OQlEqM+kFLGl@w_49rPWP&q$B5QmeSL%>>%o z(kwP@H%UP;;79cLR!PA?J@3IkQ&dLXQ_6)Gl+n%6ZI7NfkoxS?uNk%}(O=_bziOWl zaJAMQXxe+=vG0_d+@A}d&U$*f1E`z6)F0|=_S|-5Tf05zMxXx1`kF?$mGwHkPP_@~ z+UDHm%k^dNa2;W7pT6nkKk!$LL()8C>3yq1k=gfpA8E;B4L{ds8n=}~Pj#h@jdjpd zY27y9A~)^G(^M&Iw8{e=e==I-iXv+fYb~-DVX3s?u;Qpx!%l^>!tD?oZ}4{dC|+Cq zV97%z50$Q|*vLBa9owA6g4IpW{z|?y5b( zJ;B|s^GCUcq(yJU=LyU;B7vfmHvW2ZXi3572F!kWP=%1 z8NtlPRZaIdY}}q$mlc#)(I?0OvnMDu+74rP<9GYjGw5t^G&-6qj+dS*IbU+V_(Jg+ z%sZdk&$?*>`kd9SYFCw$P%FG5>jESqBv$u4yp8yNA6{r7*59PYi(Z$*lwIhr|h&Ue0czW24??`QsiUkmtcI3?;g@EWi& zZjRjoFHyzH(G>X!)K)9|2$qZNb7Mt9zLXPB~5krx0rAZ3@)`b06MGn1!htv%N;4NmOoFaa&x&3UnY3vxcn_GAx6onbBZqgys4W>vLdrwW7v42C<38v`7?c zT5U_(P}`wK9J*%cj7}vl5adu$hAl^BJ`fm=AOr4F9e2?UqG z{eT!MUeuA;)IO^CP$eqtp(?JYA}Uh15~+F*YU5CEqu4|0MxqL+cU5I)v*K3#vf$(9 z1!5MH+c5uWC8G+lxE6l_OQMvq673ygXiSIQc%Ep~i7{ikld)rTGk3F6WFLjgg&*Ms zT0z5l1U?oXENUdNic&11MOjop`YK;C#8Rvs50o#l7(PTzlW~Bsw3fz%^Z!r*mDW1a z{5741u*C4h%%PxfyjfzNGjP14wc9M|KR8roUNbVfEZ+0li1eY`OlDiGxe4s|zw#hv zd@gr~Ic+J*ABtK=zjUB8QSQEs{jpmO1~5`>#O7tuu2@=-cDZ%9jz$C$cRh)>_pPWkg!WC9h=9KE=T1Oy_4cpwi)&rvOC}kdVD@_AP@?K{I2@e`TBIBF5DPvc1T0zh9_OIn<^iq(wg!h+#$Q0@QbJprt*+Apr7N1P4$P7!;1iN!xefouhgT#Bo=l;`E#FHJ-PNP%LYm&%2mAhKITpi7w z_1(gqpIK`*#9uTrk=5yRDk}K3kmgY5sQ0ON_>%}3W5P(zv>Gq6_t<*_^V=(RY`E4h zSc1(dSKBso=57jsd*?k<+&F)O^qSjz#k|R?#3>{q7Kn!GDJB;4&Zn30SyNS3MO3Yd zkGpDbqRzZ!$An_Euw0q?1o5{8qi#Wcn>rZ0;x!cIje_pe+-@5*wHk0dLuH4o!pd8) z^6^lWlDyaNP@kd75gJl3>UhdeQ~Xnvd~JW;gV3HJl>}20LtKRp0a_IZ2M|XhIF17f zl?=7X?Q#mrJFOy2Qz7lSf|Q2M$lfl-Q28E~9_7BzyH&f=oq=!SWg8?ijukH~x5QTdVEL0M*FnAV09tZ_qtP&S4n8l4#KN)sl`!D~wp242NTaH2I?OPt#bHHb zN<5hMwfhqOgbxUte8dcY5zY$}*3n0ax{lgWsS4YL>%2kicnwpJ>M|p(CU^@9j z;HKBc^b)vO{Balt7?}_qRRC=^?tmm6fmkt{s3d;ogJ*(J6N9YHChAcl=e=D%&4@ek zAza^C)Bzu6Z0=P+Qe+O}lNF@~xdvpGrv#xwf_V)W;sFaDf#zT{5J8n8?$x+8m+BfN z?kJVDkZhCYPl09&+R)?t#8fj^khuh3A7&;oHZ!b(Jzs@=R!Jw*! zoIy2&1%w<7gn(lYR9RR;nBssTki#<1@vvKf1Jn!+&?IJmh+-nv0+h(7L+AdWp@pMy z73GX@>XJN~htd?nrQuSQf6J~WlUmY_7nX1);1|d8bHe>0?gBZbm7{#J7)vJ+vqS~> zfw~O>0AF#03Nktb`Gvtl{NRIUXZLy-b2~lE#oP>sp=i*C0rJEnd$_q=DGut(^p!#f z%K%~ruPn}&OMX=+@~ayDMB}KMm~T`tL28+Tl@+)3b_eNm*i%FEn2ik^Lq=b?FVY=N zkBL#dd->~wwZ9@*YeJc^|65=X|8nAEZ=4Q zDD_%OcWOvyNR>$LDXA36`<4+Sl}L0jLqifpR}R8j)+;rJ+T-nRX%{q4`x4#J!VrXn z!rn-0xCLF|?nqsGOWNJ8Ba+j1;@0pV4-Jsme;B#J7pN_4L}B~^O3Fk#h5WjS5Ba*} zu&-ljPX!Ft$vN)Y*~zC_Al#TjKz`)$ik52jLIb_&JLafCZA&7Z3P+icW(gm%u(}fU zW71p!mmKgkH8<8Z3GUudce_pPjI|rET_+FaW^-2#W2OW{!2n7fT%qQG3!#(Hq}L`# zY?>O?6AtN!o{A--F+fvwbX@1=FWgx>xO9Cp57(98PBQ)u^X!ea-J=`ltt~sYvU+vP z^4?WTS2V1Y2HjHs6fwC#^ccyKOxjd@bn20(BOnBwwn@egdnd|eo{n3K>8k}2z_u7 z0l#qt-wFi|?IDMlyn`k~9kL^d{8hWEv?$F8f&1VG!LeHI_WRWUucCa2s7|TE-J%4r z`1vxDu_#s)1d>5~RZX-hDLbNUs15LJy5Khg??E#%+0L-OLw1>MB;1}=5|(6%`~&N@0T#jmEU3!Qtc97bvELJE za7rY?^sqCAVqaKIOgKlL>JD7$>btEN#GuXR)x1I6pq(M8irMrwoHfb)EFL{Y?Z_v< z-xS7Q__x8$gXWZ>&4XoId)M@&d)D+wIqBbKRd&D{(A`bmCc)F>Z`?tkq{ke+5OPZ) zPtfx+1x6dGrG}YWu>PrrCxh-*l(gskb^eB6Gjf~Qf#Q;?20ayOBVd%eKg<(L9fMsP zx<{hzeS4F`iQeS0wqd46I^u)LzF2oS0Y?B%2TWW<2nXo+#w>fn*zVrdT48v?roomx{F8 zBWCTo!o4F!rmca%ATa^+VT3W;HWgxy>}nJnbxeSOBEzeOU~v@rbvPA$1mXwRBBUw5 zqaA>)kG+Av=i{M>Acv!{Ef5eG8bJ?h&4j(fZ8(g4IQ$N=y-e84(1Cm@#SCn*83M~A zf^&AWW~6YZc}9`>>uYH4cK&XNzdIlAW|>caTGsdFWnc4jt66L&t$Ck;8CchfAt;7Y zPoU&cI>>Ef2$orqVWpp=4DJe4Y%~Bj3-%L++9^XYLjvRAdmHy)5mIqa=LnI7Uh05d z&pW07JIle~TO&0(=0AVq> zzr$9knuvsf)d7(DWnv&p6e1Wj6r>%ze}UD5KlJ5Ic#}!UNYWekKu;L2Ta$@+lE33e zJqceDGd|gTU?jc1Y}e;fuX&z1*9yZJFdSH}IwEIQNkd3qLi26ni8DpUOhPO;v|CpM zC=$Sh4`aUJ*ujBNQ4x2TyhvUqP!KHaI( z=rSgn?_5HW;A>&y5E3RDGo0b61n1MACs9LRgJzoX1c~y_DM+iPNM6k|fX?mAPvlL+ zkKQRx0M7#qNh^d2NQuqq-dniwwW32utxbTHArqg;v|kH zVkGp0xE4in2WhnspU!IYyzN8V%SN_KGxwYAOR4mUa@$fmKIby;NaFJ?YoEsvY1-Rn zyNjgSV5Hqi7iubFQ>-%Il7$(;Z7EK537L&8;TEVf>Mi$9yq)OL#?I& zZjW_}Ax*`9!jbn0=p)cC7$yRw|-ev|F4qCI;aGtYi(k2Fo1xix#_A}Yxjk=%@IZ`VLq*@mv6 zF5E@+q3j8(H1ky=eX^fOf8UGj+g`9m%qo^Xd7a>MDpkLN&$~$OvFz~H!nA3{I?isH zL~`}nZ{md;HWeMqetSOwc=_6BS!2Eil(s2`KAsjvc1JR0_!RSF?yFoZ5vne@YEkNA4h`JFvHtU3+5cOJ%E1K-W3K9wI5Mi1)tp_5x zDDNkqH~(uyRRrY3Z3Z$?vK^K?6jY#Ml)Q?$i?Tzod3*=V25((f`v?jkIAw^c6Js%P z@(d(@K25YG)T!WwJMsz+>hRZjoWv86+=s8?%nA_|{*8cOvYtR$^Zfv>s_~v}CIZM7 zIAU?~_&MajdsQp1q`~v|S2{v1%&$Y?g>3OYqd0>WsEW)6vdohvJKNw68x~FFj2(AszG{v?_fB$dGQmTTct^mW;P# z{B2a;99ZXDVMNc4B%|$-HY0IPqzfCP2+-ZFo)%B**;01?+fQ`O$m3`@xk78WMEYVX zy?J=*o_P*;mFo7}d|~9_BT6#dvu?mW99m`EL2{1*>0PTf#a!*Z>z3{6S>Ha88b}SU zs$b#l4c&{H-Vyi)+lOa7(&22ZYFXrK1>pcTA8Tgq-D+L&N+ceR8_{!&NJ-*eb(&^dNb17X zi6z~__`4tK=>_={kjulikx`0tdobunXaKo~8w}9>W~%axju0xXf$!;rJR&Z{1_d%@g4C_* z$dK6eQqVm>>82w_I~E))asrzIc}f}G7PT0bk?7um_@}@GaL$nbzsz0gsUd>2ZaaPJ zcb(mtB!{4u_5Jm|UH~(t-8YiQb8njqTnHnhYFa&1? zDRm&FM&Gucv zMPzmMZ|{Qi;m@eTE9@m5ozh%$Q+B&moAKkhIfC-}n_9MKf3A-JCbO$Q69Xa8LpZaoem-+p`fS`@++j_ra%e02v+49}OJ@Qkzc&^;8U9Genc4+SH zy#Oo@N21R^Ck~PZF#=JZmC`Y5dt!3uFwn~-Ki&F^NRQ?8~#~0&&^P;ReiQsq@HSg*r zFK(5p-TXxB-Dp+q#;I!ETeItN$p-gDXxGEFyZIc{`)6Bmh&SEBo7VECb?y(do2>X9 z3cuA2jqh?p<=45P^IdKz{Z==$K8{j+2EFfccadMv+>-3niF6t@$90`grBk`fvbUG> zkN+ckOF4att^?CXH|^*p(#Zm_4gIkIbVDZ#E+^7o3UamC3UurgIyQ-3`lpHXG1}5~ zA(h^!{$n{liGEm4pCm(7bo-u)ujcQOULGSA>OV~?^zsE%I>WaE3z{k-z^SZ7np< zGL@n{7L%RS{^b87(jMU38Kc_~QrD|jUuVGib;;;lTPGDd#i-LDrQCj?=*jy zM1DacSrbD*_IAC#L;7YqP;yri>BlRG^vz^)IGe?AkZ-f!meaX(^VX(3OUx-WI(53y zsma7F{bAfBGM5fvu$sv8y=2`E=?yoCQVzIp#dx^U@_-xX`-6KjF@883xBMjr?S1Ws z-~XEAtmbzUfu#E3evYJacD;K8z0~}^oFBdA*W@Yln{xX852X+f(RAl-!#vEqoJ!Mj zld=*{1CtMw&wq9ed?BT!?|}39063rT#&A9m*UX&1m6Hodo%!BGI+uK3R|e{+|LV$o zEuET(8|*L-@uP2;`*3Sy=hpM+OXd;W2H8?YyWd~mOI%+|A5J7sn&06{f4v9?c5vzI ze*ayFUw{6X^s(Rkw^jNO0{1V-+rJ@hA4A&y4PpBiWbH$U+Q*Qze|M2f$*ez2q;(Yf z^tG-K;Be=|@o4`;IS#yXpd1IxOchOi^+GRMG%9_7gYP|P7U8;IT|^l9vaWFW)1s?L zVCO{22#_4LUD7AOaU9&Vs~m^N4j$iHj)TjpXmn5Ir`3C;BWUn`&4)P0A1@*(?a!XE z^*WN;K8gI2He}D8Nauio>b5R$P`z;#-JU%gtCfD7ols88wT)R}YcqZGsPsOFn7){S z(_99_auxk3d-f#44;Nsbo9WzMvhb+10&PanW(C@eTt%g!dD-i5&HWdVeC_uQFHJ=9 zVntczB&MnLE9u~QaK@@e%lXmlZ|g20vCZYYL6+d0NR(zy_FxFUlG13mru;LUspCcp zQ0CQG=^ZzbT3VJbf4;R#%0fY&I+Dey%FXHDZr)dzG%JhDT64gfD||I4)F*Bbk~f;O zO>mmX$E_=9f0NMP{06EEbJtk4s>p&y$AYFM^ZH!f*!d zvg%dl;L7M4R2Lsw_R_)S$M+BI*e|Uem8KV%?Oxi|**TNAQ?7_#ua7=%JpW5D=p=GO z>;YlgyUie4$*9H#M|%b7s1H3IdbaVIMKgS@K4jK~O>8aeb{GfqV6YE=EcKFJt%XQ^ zqti)(G)AZE^RIsH{CG}fj|q<*Xu+A%s=n5dYUn~H=7e|m7lX%#j@N#CUtG8rJ1j|m zdt+!34ev`G8+Hjtavxjg2HP!Y%xX4&BKO{>e&pBcUB z<+1nmp0*(>4LE?G*+!$= zhz#IN69>*P0B4N-@e`dX!f`W3O=y;2Uc1s7iUh!4B}m`8YuWP+HTTp#;J;A47Dary zr;lT&>^rxXP@`c-1T}vg0u$=+C3$GYUU@Cd(tWWTo`8_yT)Dt}GIvk!!3}fGrMYS5IXR12J`qF@*YAAl+ndZYZa!JtTV{Uw z&hOS%e0zcUVD9(8tpEC@=iZ-h7SH+QImzit6aBnxS`_lO8 z$mlC4^}h7-=m&ata@Y^*r8kcb{`tTgsWn?yntMOJ{xkFbul4uMtG+txT=9lKakSvF z6I`k`etOU7n}50FZ&G3LgejgUZ$GwUn4C*q1C7@JMLj)Yw595jPCDGQc;$0<5~*Mc z$ZLv)$~|Vq-__-30a#O#rYH=PcJs_#8-_y}(h=-vPA^W? z#%l~Dc?*OI<-F<4dF0$5T-jT#)dU1bu`z-pU%a)$x0^$*qzYf@01rg&&SvfR|oS zTt4>xKAJzq4~-jhnQ=`we_Jr_ZnVpHAHM?~!J!I2b*Nz61Nb6uh}$VRSNz_bWE~>G zww7knY~;~Gouoyrs3Li!&}p2|SP#qbg#;ZUzzo6j6$a=Y5_@)J3^rtJ*g-gEC}#ew zlfIOP44noH{VS3?%lc^a-s@%3PrAA~``i2Sqnp3w!sR==cN?4XALQ?{Fuc*Xvc4z( zLH-U3SCHp_$=S%DOCR9#keBCzLe5JDf8eM0{h}7E*#y`pbMMK^MP)` zHoSwwTV@lWTUO>}?)2$aJw^V{KJy;ya{9rk>0m36lw0#u1;#u2OL|7woo8Wd;VcE{ z?Ub=O3|w#gczJAYbROr8`)Lf_1qI!@x(Z~G>;OA<`cpo9eYcP1gj2v?z0K(imQyXp z=?t($(1R;*99zqvOmKM?w?5ZOmeHK=TI;~6-R1-Df?fhw#CdV++7|GQ6gYg7FS+z) zU4RlZcUqUxnk7%<%!i`FFuftR0lY-E=uk@smpzE^E&O}#jz#VD*p}kIpTS?2g#Ay9 z2`5O(@T1Io=Et9#H-R9APxYDnBU4On$)0-`)qjlS#vzj92g;}5zyhpYzBb%=)`r@i z(QNHgPu3GYi-iTF_|PohX~y3&oW_AJ^XwTi{jopy7wa%h+%V=D4boh}tGP4klQ#4o3am#P`5%n0XZ zXT54|q^-c_Eh8MAw-V(7xGyf71;y978o@$29W0bXTz#JYSWq*0KFVdt>2pR(9N^8* zE}D6on{r0m+A(g*M+9EA*XI)?+^>r@{3#-7PN-(&uA zzxm=TWr;%{yiu`oV26}2pE5UE15r=NZ_}5y%&)Jic>KKF1bMP@_0ju3!Uo_`&HT@# zYM$vhd|%h%xC2$aia*%U>S|P$3ZZbwV2-4L@||FBV4#jYC+Jt*T2HQ*gJ0~R-@Uba zuUUc}!J(JrZS}q2m}p&Q?M$aK%-PYJZpxFOImSrP#;Yv*m}Xw4mF6zjET;Wu<~P<} zsbD)-Ob>x1@7uzk6`oV*D7>KX=ED06=M*j|OceGMZYn%h_>XaxaX%Y(;kc{D-9GM- zacjqI7`JuY=(xj0=M?>-XmZi@MYk6{R1_?V7j+f&6|E`SR`gQQt3`*3{!sK;(T~OB ziY>(#7GDCIyWbSwQal$7&`rg1ailm=++93Wyb>JH`-_hj{~0XMe=R;$oXhh-pHWf< zCTM%fWhGaZ+*oo;$?YW%fgo>Y$=s5<5^u>E7xYlcnv#trTT9*m1N3JlpO<`7@?&X1 zX>qAgdRD2U^cSU9lwMPML+O;#sik+7-dFl$=^QXY&o8Ynb(i`}c?O+c*N}OJ~#oOXTDH~u4oX{D?OV};4p|Huu z_sOt>iv02tiv3bRG>Cx;i=>gn&L4n5Kyj{u;|RC$zcHBb8n2~q0)vT!T*RKfhHwa` z?SaYk*4#=f{JzBvzahh+j+@Cm@+g=}%>=$*|9jMPDHU^Vp5HCV{e1d@5XwS5z}*h{@#fsWSI!Z%Rh&L4PZZU`iK4=sC`#l!KX)lD@3GHL=WRK8(q`Yi zM9f`bK50G8k+hJ^0&P<3Jw%+!`I++MOm`4*)cgU~evdvRjM;dRwWK_0*1?ZF-3we3^1;cD8cn;*(><3uJd<~bs2UJgtM=@UeIjsApMF-s8jshHC|QaBGz7XJZCH=f5Ag-Q@*6~>6j_l2-g z!R$wfh7Gki$`!D?yAWi@A4X$#5u22D@u!_7gChApn*?}0AU45KpP_(#buMipqEBG^ zv=@^$Q6Kf1&PxsS0X2N$X&)sr)CwQP)v>s}E-ci*ADK!xygea+epeIk7aD){2ft?f+LzfR{$tGB6E&ME=B{IFvcn?{U7{!c+t7`Ii0nD% zePv8EKQbp;pNc*>W$|-D56N_N^rgCowsdYc){DRWpQR`cwD*m9`eW|B$S_EnO%aiL zYNq0H*K%{$3b9240$D_r6!?TS@ewk~e8Ae~<=1h71lJ*ko|cg}sh*(_jb}{42f=6z z4q7?1cL!bn4i!=G)<;FnsftVVd9~F`iI!{lGrrgVe9z*DP!$z*2A*L}7PS|f0UOtp z`sM~l2n0lNCf-tWw?8K+7lWMnuA1EHFY5$thgTH3nTkob5QDNzg#~8`MM<&2wjT<4;}*`f;na&(#msUB0_5R?P+#R3ZVs zYvhjn$Q_Bcd7zs&&0SUzn>z6Qt(m|?RHcDn7*l~UgWEQaJ8cNrMQrniZM&nl z7|nLk5B5{Xc+{@iMP58-6Zb6JBZkxvCq9Nphi9QE;lFZtoJDR?Dn_6#;P+{0aKVHz zznr%%M@ux%e=YAFo~BO5MXx9jUC5~g@;NmzEP!FM&*bA{>ss~dH`{>%U5hUAiZgK+ zOcle>qMS7-R?vtzjAket7DHM{L|rSWv%yH5Z_B@dg;Kdv9*T4rV!m3KR}72!OoY&M zo>eppA?CIasI)C23L7DXQD+phAl@P8&ba%Y`bJUBT^z~vM;3^J&kufiXSKKv^xg-- zcHEh6?{tDUIp}wajV&!rPOv(Ix7#0x#GE28@WkRdM8!tH_P`dd$dGT8z~G)(&=6ng ouy=?kuG7VEnu=lk@q(#D7fne6v$uf*xF?V`Yqk#2i0k721FTv$p8x;= literal 0 HcmV?d00001 diff --git a/src/public/fonts/grafitti.tff b/src/public/fonts/grafitti.tff new file mode 100644 index 0000000000000000000000000000000000000000..7dad17faaba39497fa87f03e4ba787cb2428503c GIT binary patch literal 45052 zcmbTf36vb!Stc4c;>I2sduHUm@B30&S$k!zDybxuR9Z{BTKle6tJVANZnt-1^@W2>brT5>6OsVW?-aF@2s*Xxwk1qQItwGDTaD|ZC|7Prn|FeDe4PNcy{-hYo~8Ma&YPIDe9-cN>TLrGk0z$ z*#*8zQOw)n_3-(d7p}e3`HeMr{5U+eFI;`%y#48qoPfvwL{T3*b@A-A$HRZM`?o3T zXNwfY3m4CwKKsO{yX5nqhx11-!V|&=X$+6Q0*|v7uibw9pFjTnGDUq-rzrFbS8tp- zO(kDkrl?OGhR0vIcKY#~)SuB`hV#D#=O?e9zIN`9Uk$|I_^;vm-gfiGBe#_W-wH+j z)Yss-AKbik?&hoC=Vsx0eik0@g8%%8hI{X4f+FuEKZw$)lindkgEa08ju~o&`s&~q z!#U(zlOL8^MiuXn;wT+G0iWRgkWciE5hYNE2FEnTQ#S_343(umIylB~&YK3uER{jR z;FzNX^e|`yVG%x$T&H*JU8i^KU8i^KU8i^KU8i^KU8i^KUgx%R*U#NLef!+my+ zmv3CZedEHd(>E`kyOkWNx2SE@IqEw6cZ)hr-G<+1sU-Cf^#t56!{uLx=Wb9J+*fZ> z7v1xc)Cg6lTH9`&K7anw?Mv_ps5g#yh@(?!CNpaq(aJ_azoDQs=L90&KrR%r_S0)3f&0&I(?4)&8s5c(p`V-`^y%Q7^JIf~~vL?bXDL@nQG^n%pv zRAWlNOa7t8)LnRRcZzB?(e{hK3?C_Mzj*rf{`%oDqxZ{{aPO;Q8yzEMPn0uS|zK>4Q|3nq3d1@bZwqHW~_xBHI5!@PKrB&9@*0D2-Q$5U2 zax}G#w;J5;oP|(oa2bupUHvZnb=0`)-lpK!R2@vwyOtESf9tjEC)Z*%J8i$sx&NFv z^4l#glP=_YqrK7YNFnbX^#V?ShyR>Fr`;XNcSqdUGHD*(=L8t{6>>hDPM-S0;T_nb z=@ffTy6`-U(mIc$4vp&N3eN{dIZjJ!N{*IkJYqT%lB{z%eFx2G4!vn0O-=Brl`aH6q=sy&*f~o2#RN6IRf^ND6hSb((N4f`dm`PO{#G#0h1qE>x3MCZp2kg{uLYwK=LFLLBKYab{-nGS=DbUY8dFS@!^Cu1+nCzAk5najg(;Y6=<7ZFvM?$;M z<@=)XjO#9PrLyJD6VvdCfw(SH&u>DvT6dS%Z-4h*&I`XQvG(_u#nTNge1d6`*H}@W+KgM(c&wrMBM}HQ5`qTZ-*gx~r7k7R5%`ZLm*okIdjNr@& zd+?L2a_|N&zX#h7o#J0(Y5x81eCyk};4@s}VXpXo?h}b+29+ORiHjz8rwFbAj<}!# z2Y@hlhdQpiDj#UNOnrK*raw(IjRKtsjGjo!Bir%j$9p!UEe!AgilWYXxPN`&@d zT^(f*&K8AOxpQIM#7s(?T`(Hl;>9#FMJq}pnlHx_0hVjp^Ma)dQ%)in)T98fA>U=6 zIni1wmBxAO(5109k8IKMaUq}435N@s#j=Pih_c0D2p+gy5iL_Z7SQt5^+L9*Dlw%c zkD4t*rZ*EmS526@iYI&u6{5WO2=aj)SO%W>LbxoZTH5nuSaF35)JH*{?R(BLkWqW_-$O(3DKP%rk!(VO4ge>M2hb63uEUwZn^ zxr1{pP}L(RSiiN6ZLG8L)Fkc*9DSJ2gn45RmpR3$8DLV42RJ}HULWX*lZffz#lYv|h{Ofr z)I*Tyj=1mS2dF|m!HodK&j+CZA}t)2R)0Po%x0SYkRLp8Qm)D4EN&7!eZ<KtH93omk!^ukRa99mDl7h@VO?hfy6g+`JY7*7 z!dp4|ZAidA%AyL?N@^@LEkDsR5{q>qZr1@H6hI|Y8-Z47FY*1BdgWB1Tpd&~6N1gRa z>?nBYFwU)EuFJB$!E)NnY5nQ@*k@u?J#!Vd&{AE+N>5aBoA zzSJsMxA`7m$JH{ zYYFx4p(6)T;HrNv=T!2OE5(GF{{8m_kFSFa?rowV{YT96Ac3c-m-=Jq>8Jb8*mu_E zrpx&-d;8?ET?=C)y0RTNuVVW=wl81gB}DDxlc)LQSw47#Pfn$is5y|&RAY#WjVVa? zAf)~8yoj)*fpayfr?;Bq)2?%MhzZW1A?+m@7O_X5C$4D`r-K_DyObA>!8+mIg+9xB z>46d34iPp1NH4RR81o8aM*Qp<1!XRkOkU$4;d)PC%bcCQ=eJTC16f*?qdGBL*p>MIUM#t7@$l zn^9dvnfeP8xpWzJDe8uWMD5>VwtourFQgq9MLUNHX;cn$fLN_ zDiw=v3{236==V^4sIFY^*U+_V{p-f1onz4piz6a?78@m;sN%%>p51IJaReIye)8}^ zJ~UfEBSQxO%G+?M3aA$-FuA$3cPr%`p{{LJ>$L&WkUSc|!BvjSQdLL;y$}b_!Yi&$ z2Wd1>GEphfmivpo|5ngxcceRbwH5GUnrjqp1`eNs%JFz1;WO!EG8b>D5+QfNggUKq z0ajBG{G|9fQCwj%W~=ItF~U)6n~zgFN_b&|Z#HK{327=)tscU7*O!RgUFi}q0zb>UJc2k0C6oeENUYFpnyg+jkbXX2KT!*nFX1u4IXjN!K; z)gpiou&w(6%%BQezf-|AE3ZuR01OBm5SwwDnKa3*;9G&Upqr~WU=~$-@s(V@08|1m zNj2qXUW?RY`A_6!^!bD8v{tutS~O_HWt_8f%(jqb_zYTaXl3`>w;=`1QyMV-CAju@ zyq`cJESVTZdDhRVDvPAywcppsP#Y2z-+JY7a^=(j)I1%4W=QlTxg5mdP8%sSwYeZt}hfJ|6e|h{X`E9bTVJO>MotDbHbDZ{>*J0n`#;y^ohf!~{`2pY8by_XGtMBRJOzW-}~XUPyDMgCnD~Z%)agQ-Jki`37=0pbL2$* z2%6i_plAUyRJ?|f@B_d%02Ue~nEFV#BYimLk$e4t_Qk-u6)6e}r0S zRN6jjH_IHt;ThK0!7`H**jm9H(_iL=buN>X1TTZafqB{L-}>))f=Dsb^w52j9#s1A-9Umk8k`xb9Xk{5Cyr z(kr2jZ3h?zu^1U#(abUCQn0B__$uY`cwzH1mX!+W88r?zB2+ULqAfNhOC>QwBOYNK z9+?i=@do`l`sm{gMXa}Z;#ykrK1&c~~9xnY$ZNnSjY77(pjza8Jv2&sb4VuEv> z>Lq)@N(+4Xkw4=rnZSe`VEO$yi^y8M_rK`Z8J#LY6XSS4gDza?UkskvK3_d~XtiI@ zr-M2@f|cW3bPAG}C{!o6nwy7i#0}wRYxtz83tL5dfr!=`gu5Y6^cbVZjEHAu(k}mj zBbLjgiTFGLdarpkR(Ng(dDYmhj_cYiac}T*g&8~XE0=d4@N+>19TdtP06 zmWh>m{uFv87RqC0M|ZR<`oi%@arD}*4O8BkD~Cg|bd`x!*Gj6v`&gg<)XzArdN2~S zCCi^o*U(?s=JAcSHodU zr&7t9d49J(u z%WHdev*uql!|mAG+5~2g(+1O&grX+!48!|G$&3c4#&ZJ3VpLId1})@6R((8Q-fx;S zCrvHJaluehskN#$G=%AU-@Nxv^tYG-H4Rnw=OO1HRriUfpFDSZbR-&DnJD1ZRea?L zPCbgn$1%@}&ths9Up~m?9_D#0`h?26hg^hy1b~2$w`E-1 z^HlGJ2>26T(5L?xS;-u7GDoME<2+_W%tyqG_+we8f|-uF@3hr6gY~w5wc+>#(bQX( zhUk~thO)cT&q_?uN+BdDJtLk6+N$mxF*{Rq1_-Bs*qE*@IW#vZ`(*U9g)r2GS)U?2 zGJA?;EWwFIXLhGWo8Hs@=JqMzFJZ+;b1A)3Dlw^WPmgA9ps?Lub$l6lTpP_qlZjj) z&fv0@DT+@oaC|v9JDTpYagn{DSjM{lG}AKc;EOWlr+<#V3lZofb-7U(*zOPx=>(^GQGJK?1gGzq zyuNMcN_%-ty`GW_iYeESx%s^;lrAtgQm-`_I_zYdBLOQ`6c*NxE-hrknGw9w<&=b# ztkNO+A0Z~;1KOlk`o-D@cF%-^`R*mtKeI119XRHn^Yi>+JxfFSo>CRXZl^k1gnx%+@4OSqf2#KoB!ac)pc9gx%<&nZuys| ziwS}2Scev$ln!nzZT@E;Gtr$itzMxj($^U#7VFm1FOhG)ol@zCnFM4@8`SxJ(XEZi zt4p;~EPQxZAt6t)>HOu8(fEfdUP;XE*vkc<8 z1O^C%`#p;6l4KV$+(_(6#FZNB!UmBMky0kvf(Qr3=RPLZ>NaWI*bvyhz)h|^{E5Jb zKqsKu%$bRe#7#rUOFIJ*%*6e4GF1vR(8Zk0a}s8GB=RGh-^&Oogq2KfED%l<1SSgY zGC7lw3+PLzJkN5F?$UL+qwL!J-L(~YN(&2gFIFDal$B0Kk#)`bCq*hOKliptUoN3l zQT3IM5KW76SkZwb*W0-h`&uwsf+_Xh-_f6CT2uujeGcYco&n^3?6Lmi#nVT2ZtG;# zhw-H<8xYvpSyn3I^g2#c+`=RLwFM5J=dT^+qG!2dQ3i^)gG6a|)+-MY?(JG5VVWM> zbUpq-ej-tiZMDkBh*h#6L(jj7yoW^qPxhX6K(elepdR1>@sMp2SraJs@cceK^{^t7 zcEKHr6$Jh*uV_L35aF**0R6zXeLVN-%4v>?nIcOj9vYSP)TPtuoqn_1FXT#%&3M2l zWVX{dAgAVnDG^_L|F%@*DyO_VHJa(_zyodH=zRCro}%l5Q;G>4b?r0$oMR@+$t-9} z3y~<0ZQLFYuFn;GYQUGM3QpiuCMhz!KGtX+m`|+l+Bi13K%c4mH4aNb@NAhCG%GwC z34cKIGs=x`fdN58OPI;_h%Srr)f~;FDtPlB=!9X)qGrT$EDKrF7)+783Jf*~xUonb z>u1r@Qh!+}=bKf(v4E#Cn2KPb!z&3MkMn&D#gpN5hnpnaM`@xl@SOWzv$R!VOGIH7 z7`*2+ME-7!1&@H=tgF322qijkor2@N$jN{fhR6-oF=of|mB&wB;H8yAukCs+DAo3M zPBoX&Z`7^cmv4uJR#`LlvpHP*sJhyi8L50o)53+aEJsRo>&ny^!z}N*^|_Dy3Z~EP zOz0UcyzHdffAH>!PVG%=A*Vcwt+Y@7e7`+5*+R#;m>E`>h!FtWM^p#-=rrY{Y{;-H z)OtULs?~liZ5OlYh^Z=Uo_7*_ndWrSLF^D@z0B$UNWlG421`}9%BSkeXUi9L0tMh0 zARG&x999UxmGw`1oxQQ&TzQ2YI2s}h&7I_?&q9+0%!MvqS1{8&FqqrbW#jk3S>6_ zfNRJwi;z!O3bs*^31|HQh3F~zEU=m#P?w9M)z$t^xmUwn2je-M+Ky$IJSuD*JK7?i z`-)Fdt6K%L>cv-=N)oC_5XukUF(fVz=nDuTK&smwzzxMgJjoT+u+DX@oEzKc>vtlo z$lH3@$wj073+v5vy2y!Zv6H*I#^HIRq0^02gBKHH#Zre!FmyCC`X9y&dR>oJn!R-) zXy=nAB+KoXV`-W=R#gRF31@Oom9+kdC2u}&@cy(FV#e}LTxW9ONQCysd~z%-st@}{ zr8tG}Z9=zonod#?=(nywyg1V@xRIILzdGIIl6c7+?eg2>(Ka7m=jX=xgDO`ohv$$v zv@JItlejSDO<7F2<<0vQEAtJ)GAX}!q?`zah;SH*VNxR9^XRyHPN&^+O%1{|@3mgH z&_z-Z^`gVT*&u$rtx_G;{ftnDnoIB5n=7=~uGQw}`oGfE{j6AxC%Axa9EJiGw|Faf z@`Z2d2b`BR{806k$0v?L$wKv!98PyFqb1O^P>C!^QbXZb z`3M*>D{3qT{?0=>9)D(S@ejiM69RWm& zqoYUr#{!4u4lL*C-MG=k!7&^S2biFgMfss%QN!^vq#s7?Jau%dVIFl6X^Q|o)&|;LFXw1GRX@Q^w!@B0>o~`?^XY1?eYTWlXOHbfAJ=R> zWLXDuqAUo}7);4UgRMy^8POaq?v%FUL(Ty;reIUHBJcO9N>|KF>6ieaIO6EcIBn{* zt^}gNfaZ6kNK_9>u^`kG@BQH3f1-0t9&qt2^$64zYUuXu{-gB8#hIJS6L}TTC|PEM zmvK0F4Ac8~dxUSE=9||!yJh@OQ-}X?!qbr`^y<-;^nx0iZ zfCjI)K*)(V_yM6KKroZsy!W}O&M<%VlAAj8090g=^22}%fxhSzzTSp{nW}+Ri*nH% zy;MHRTVX76Or_@wKp(@_%jfQ#nccqmTl3K>JVyS=?l`7tF5S?LKwj2phUOBoD$L>d<(d)1Gzu5cy2jBm~m6EF9J3aan_|tF4 z^$O0`arQPoo6E8-o89(qye9FhNq+JMfBvWW*YcYd#9jgXXuph8%!wRR;IvahzSq_=@OC*kO%aOL=ysj zt_cmOHRqM820?0wu28R~|Jwq`hP3qP$?8*TEUxY>joCF3vvN7vkACK{-Cfd+ua;P? zltC7a=js0C%P+2#_wFwo!>HT%`X{HK&S!)Pr6%5N7G$1hQ`hLJSngK)On4-+t+#XY z*Q613Mqz1&VI%7$u^@$1iDt!2MuyY|${b8ks2Vx3;^RX-C++k1^5GaQj>$#(>(O#j z3tG@t3iaP{wN*{0atO1uCNV-8r5EfGfj<^l5sk-_`)rsLg32a?H31wzf5%Av_uuvu zEB(pO{#+iWRt(GbA%+Vj7QQJ0N|m9!96E~gdUjk%aS|g!y)4Iy0be!LX+{(!Dr2d| zGZhpzRK-?Q7)XgRfG1zQ_bp~S^L2=cWWxOv^eFD!=|3jVjaz4z7m~+tWev-h@y*-( zwVk|rh^MF^3|}ShTbXA^1Irq~_t27()Sa!CbjP(MfCLM4>K5fee{L;n3%dX-Ak|57 z8%E0B=x}bCJWK3n5H`Uszz}HWKB|*eF1f+ylj1a-JBXp^&W^{vIH|}!dU9&?oPVDc zj%m?CuD>JD*;5guof01o@CL($W0T2b=`|q>cngE3jsiIWOZ%;089(?46EJATFQqG&I~`-*7f?fzXr`nMgi+SlvK41`Wp>|R+!|zg*!Jco;q@PzCW`(QDOBf_>na> zQ^!&c7mnkzBODHLy3R!cc4SN53$qbkQ23!zvlkIOfEc7vZU#@tt)r)4)H1EhF-dy99wzMVh>P{@3Rd$!@~lRP959)=eV?YSBX{hNIs zKq3ayHDh3Ro7l3RGE?7RN4S6*pa;B&U5`OA^W z%}3&I?x6p$dGE_gRUQwG2SU0%KQp_nl0d8+He#$O7`2V?lBhzH{)(u~=4KEb)KXP{ z+}iwxc%l+dBUDmm$|Z;NN`cG&d*<7)@ZtsPO23L;e6jzM`s~FckDVVW3uA1yKZWDT zJy<=APd$q9juqbC&)seWYC# zXkL~kwaEEH&n+*9OQTXo7D?q20V@?`nyL85c733>`8P3misN|1FoM8E)nX)?j9iKp z?Dlj!KU)Y!5nbT82z1gAme^uaW;krcXVXDgZ-BCTy?Q4VaWc#|%#-UE8YM+keY$q| zNTYvevaNHWG;0LyYN0l9{PD!${PxDQnYAUK$zRnb0@(&PIk~Ml@#r>ap$V!iE6|5Z zJiBnPoj2_49>ivtnSFMz>iCKblMp)zFm{*&XB}DY9LOg{hlS~Wn9}`w`Zb2+AT!hf z=!G`W!Grxn^!m0v3ldfeSV>|%hRrUfXYtM*6;5jK+yob%=E7kJEQ6UquQg2Kw^t(c zT0?`X>A+1D>flyYAACUHJmq?h>be!FZX~e_$bg+L8wN`l23wanyT0hbHX#DgPw2Wz zC16ZHR@i&=Q;ogHQ>PRk;#AJj%ctXcNiA+h*^r;6S*5&x|3eEv3MJ#0L*p($+mzqk^ubFaTt=hUKD&W)riH_PVpFG%l>a|EauQEZdaOjJM+ND2nzv+@={XQv)n4YTh;}g5ZVHe z2y0acpCMIao`gjb>foM4O+ZOv2lNm<;j{r1bF`Yz<1~m1X1!XG)jT_EtQez_jKaad zUgsSj>(=%5<|mtqK#QUha#)8e^H{ZRWEjRVyVX+c>5!_3(mBR=V1B;NhV-D%=U>!E zqq-rsU}eJ$)&p0U%RiM5J)P?2N;o76r)*!(w_7cJv8JursS?8|!e~E|!8pc|Up zn3T_?(cPG2G3>;`ZNu8U8`pVB(4t4*9ZyYbyr^U|rOo%We9FSi?&U_8W9-n3y_EE~ zihh4*-t^UT@KutD6X^epso`ijb7$8E9sT_A-QDIwv>QE&`MSQ6sfIAio;z}NY;AkJ zoGq>9^j=e3ntN+OMgEOP% zR3LYP!J!|bZXA$D0{J{ek7L~)(C0|_v5K3zky&LId36`6P>9yA)^k3;T z!)+t$fi~a#ot>H=1~rkB`|(=v8GGLPin(S^Ff8$bKZW(7zsLlEn=esEVG3t?xxbBF zobOmU7SGJiV7dqEZ+ugnT;gIG7#y(fCsbhhq`(Mn0FVPqLZO2((1=AXZ`H`M>jL*- zW1tKI7$Eo=njnkk48+b0L}7#U2$(s%2C9IJ9Z&{JiJzloF;mUg_B=a*gEY1xG|Ni? zbL329dqWnBnEq}t%nGUnWfWnXV3>k$99BFu&eQAp>cqDvf z<0`B(ve}JLE;wgqCU30Yilt{p5uQiyg~WLgmU)7VzDCKk#e5v_`aE?Lm=Kv%O3pN7 z;mic*;Nv45wzZ5)#l1LrbmKSjWT=p~vv(N|?AIQt&L2gafEzpA4T&cm`Kybx3 z99|-l8bnGE2mB*Z)lnk1leZXp4dR zaAC-nT#)f*U%;M89m*?}yKQ|ELx-v}Z- zFE!7Nu@ji?^Qzb=@3l(F^5mmy;fX^_!P%};7U?l|bo&9vpO_2qFsGMILWY=1z^pzL zh;;)6#W5)_Oai$nWpqijW?{%Tb*7lGqJG;9+MG`p5~?3Fg=F%IozK^uIAg*>>z%R4 zCm&J#q7a;Koec({d&G){yu@M}=jG)?=-?rvueDW+W;$O@RX8>(cjSIL!3#AmCY*oI zlTS!OhNtOkBamQKeEFezS)1$0GjymM-SWqHHzMx4K;A7akK z|C5oV}h3*@`6wqZa zii0=09Exyef@bjZpe0*)gMm$wWsn7z2JogQU=^jZmJBnn4Z${ONb%kGJ-d1+Cn2MgY6tRF zG`7?}s&}n&I#@SFKEQUB4$LhuP#56DaiMnUADLs=XHTB^+9;6JX5rB3Q(YjmND$K* zeMUn6I&>qn61OmW_xn*ckC;RzWaL7L7n6HaVHQ3{tQ~*bw^6oP+Ka_c5gh!(dw0y9($45Z)5ZVV!>b}su1Gpc+;xzT~t-kkh;(OL8NFK;1K|Bu;J#Bb& z3RK`Zg70GmSC$U5H9&6vW$h(Zk0ny)n3tt9gzNzsv5O+_+R7zRK=-(iP`6$4jw zv#cW4Z-Tq};&`IU*wA~R`H)nNvh<&VVZcv+66#M_vnQT=?nBq-sy$rB4kL=+(5qi9bI$IV1!?g7v z$$fy`q>gm|XJA4y^}<#YdV!cwijX-^fy7B+EO&spp7tHkb`NSrJy_&Tw9eBl!cRce zt--qrT!AFOo=Lby(gddBCQ!s0z>*%A+`!S{Id@jlwJ4++L8a+SCemRjglifd3r`1w z#j$lsMZU@xMAH(XF+&`BEdZYkbzQ@70^xA1&4|f#*fOh?nQB1j;$^v^jL?38y?{_a z_nT5+UOW_NIF`Q|K-r~W#u7rBTcDDPMyyO9IJNPzu8n0=F*!fRPBK9nDMsbWCpQ1# zSqwFP1l7wxASj>xL}ZNRQsHp9GQyzR7f^YQVS=ifeY#j9ivkzKWf(2?&qmJax#)W@ z#>NAr?{|-4>5o9)&je1nKppC*(Bfi$Nt+vKmkJi<<5;U#@l=qbGn_0#+matLq#se_ z1N7yo#jVO)B+AQq$|H&+@+Z_0J!rhRzDa=9Z|4Z;dZ!Fa5un!@2*UyNUlx{6e7w+_ z-}Qk{T|HZGZ92?cy|3tiQF#GDWpSraF7^+Xbz21`p2X>x2^p>&d-0GM7A2fFaDv~cAHgh!VGmP+R0WI%64{sdP$#a+3=-MVz) zI(Msfi-wRmn7f87iEwZtIe^j!yR>-3a$x%*>d~#@dz6T8P_2FdTSM6pfexvLCtTtU zq&GSwm2fb8uoW1G5J{W}`enoA3FHB&s*neH)3twG>0JA80k%o;fl$q9L8>hu4fOmD zBU!XhjtJrO%wJtq=HuWkkI!R7%MJHyR1N-k>6)PEk5ehW4Ts$v` zdK^}j$>q`Hi;3O^%NJ7xa62)X?d|b3VJzDi*}uay-fxKS2pXyeQv$(2KeNQ@R%~_Ae>>_Uyvv@yP|OG;#hAre=Bj7=LD*507%mBV5@oGsC|2 zkaLg>$|W5h?|fkKdFtX;m0k2yMs_vvz=o)R+&ryqJtjH>QL_)KqwtWtiRg#uW(auX zEblqc5OaS_3f7B!hYiSfCR;Y;fL6_9D)CgoVR@yX^VJj1{F4#WS2&l>C zq~bgC;mwcGNxx%?wP1mG(;wgaZ}gwTOne8rOK+l{gq+~zm;0~iPv6)+`{*M}SUQgN zhp_YlesY8@EU;_4_V!@UgUgtEiKjO>{{b#Y$A;|*!b^sFfw5LtiAx@P&;4-Wp-jEJ zRY@?kH!I&_Hh<(??kll(5HqH;kK)9u3gBhmQANkE_Pn3237Sdk*n zK|- zMcC+Hz}g}T@;qpMf@*R=B+OOu%xkJs2j8*9h;+3C5Q$I9 z8>W5@moNZy5*52nIOGh&wQB|H>Q?<;b@l6}djl*SW_v@uKEO^lxg(JYmZ=k;BON3U zO;fV@z!;|Nl-Y0o>LLA%mSM-TV$H39D9+Ujt+1m@-ooh|I>^H+GYTEm6A5B*h zt>tYSlG=*>cruce15qA&Q6g3|Yr7YB+Rk`md|7KVpxRNTmkdLWH@~oNY?4W2qZ7u0 zA;aXo9iQLx;>JaW)`8mbnxTdQGt5ZZc8qOj_Px~)-F(p5{;9XsYEzcND3U(}e3Q1c z06h~H%Z;UUwgjU`LQ0Urf@76S<#0Gbbn^%I{*?Z=%pB~fcL~^C8(qHKztTQ)bno0q z`1sCoze=CR?R_|UfHf|%?d>?Vgfp-!)Om+HzZ;hr6dh6mx42CzfL@N~75|8y1{`k? z;iA;#t(v+_G?fERFp#|KHLk0{S`reCT=jHEphoD`Q;4e(XY&-`jtY8%9VF(txqXkM z;GSY!FLhzmL(n|^ure1rk$g+aabf|eb*nlf^o@Pi9A~Py+(|u`dikd(Mlh0igc`m% zO%$9sjH{je)yA&bJkWP!)}(FrE}AYY$@uJKGM5SlV>CUXEo-tM9c-9gmeyfA9tLya zfUl?IXIDc#X+()P3jVh@l9mNluHM|)9hK1;bY)Voc^+5zu-_-I7$qdl?*AT8I)Ud8 z9lo+OBhzD~f&v`v@0iD6J?;T&qo4MAdwZ6`OtJBc;>`S%a7y5cb_l%74_Wix7>Y9Agu(%9NKy7&VjC<)3Fi>)O=1NEX`AK$sqn!5Sq7aG6T$j2CkL28;OC_I6HOa~$B>QShe8tDb)smByP%rRheCtTKh@?`%M zyE-*?6tf3d-x5xY@|6WXcbr2MY_PX=S2$wa0~$aqdmzySb#kjwpLF4e#PVVA_r&4J zr{FeVJOJ|Iy#ogC5P^{e>*R$&z6v1&Y@HbKXouLp7lYs)f(iQGFW>PoYJlFAXv+Md zJ$v>f99SyDKw*@=smy|f;5 zVxgMVZ%UB@?21;4eE;1$KiFW9?wF0a{d1SD^?V@h|9J0rn14tA8SK3A8K^~c(Pux~ z|6K9YKl9U{{KSXfw7z2{Zom7*Cr=zZa&WpR-Mo$~@5kmOPiOgCx8BZ&FK{irHC#wR z5=gg%JjeJB4c5UO+9$x6aqdrk`ZjD}gC7 zAA}7`KkRbKk9?&6(eyjc@b7)st;-iyp2YnZ@aSF~*}&F^aJtOB`~g1uGT-!Z$B$o! zy)<`0^?zkcAR|=6&C~8P{;jp(uG*hw7gVrh&0-8X}nLGmZ&BTBp&9-%{*~D3A3=M{QNhS<`FBmtHl1vp{Lf$MC6W$I66YTasWh6iQ2K zth+dJBrE5GijUv)`>QZ)X8TLUv1HtUKIz0BNekQijJPD|Vpys?G7Y7E9ae`NnQNMU zr&}#oT0EVPG^0@%(1A_xzDn%o-%*H(Fuwr(qEl|a==ACSL-fhz#kmZr=zm~3U;iZt zpoWoovWxvBuO9D?9$_x}i=kvF*l3Q99C+sP<-NcI{ryjkEu{9=PwWY0#W1777C)s# z#pZ*dS}xb2g@Q3Jsrk~%%uIT*P+rOIPWTX?edw#l&mB5c0Zshvy)V)Ko!Jd*r5|>y zjHEA}yngD){>A>(SUeiOeCF`Z(RwmyE@OHIWBMj9UggBR%D^}lgX%+Fc)e(khkDTf z?gtdqeLT=d{S8{tuiojg{k}W`b@;JM#eE!NlQoJ|%|xC!hT0 z&hiBMYu}GGPV^YqQ-qTv3T#&Pj!!{_kmuj}o0pO$F51?TMzC^tWMrYr^FE*YNBOC6 zD8<6o6VAyOej#~>jaR~PE;pXPJOgDpCo|f(xg1uz@0gr0E0gtiM<-h8Pv9!5u_-OU{?@kJZdQd?4bwc{1~h| zHKF9yGP3dcDa!2D7(Q zD@w#MQb|=UCq}ZF*0D&`FZpWaQY+gqR9HDc3#FAC$BzFciZ4bX#Ix-CH~;*J{GS$9 zN3u!*Hjl*|t-<>A#&4YSRUNAl$j0Nag4M0XKTV%yJ^^dkmZ-&kz?}gQ7sWP?&+}%T z&*x1P{}CaB`44P9{zlDykdR5lP2Y~toVmx07;7;%Og0Qy9uaXT4) zIgC>w#HNECc|x7iV%2imKR4k70$Qt-joW)H*j>c*S!`uik|S}svmq-wYxw*bC;1$6 zvT^*}=AHA#@>pIHVGxT!TygbNudRPi zP3*82oViV)$~^2+!b4LCz(rTW^vGi$+6J30j>y48M1dt)nk*?CC8>PdY!T#Vd%7s&ZJ91UwBJ!5EUvCxd7K-C})VGpjEx?w;?;&>fCuE|-6zvI4b- zPK?+8ZFY7P#bq`t?ie}UV)<^dXtr}vK}Zlzd#}vgggwL}FuzSQ|8~3I5$ZXiz{*V= z4Dx{zPo+7l%7F~AhJyDEcfdskSrW0Rm_DOi9Yiq>D zJdt36p_z0RY!cjm`3oraxrgVVTbXGd|EIU82SZK0d<>kC{{9@-ibZ!Qtf^^yJuL-N;h<2AOR)38 zaY@!p$YvB#d)%#c|26%0^gqKo>JzYE&v~ePlKpz3XQztWqo?uZHj9Hee2@>!@!2Y` zT<6b^apgd^4C1+O=Y&@NP%h%JnSny_8*J1=0AcuDJ&PY&y%p$!emxx%%ZFwEdGg4U z1xbT}`wURXZ9(M8M7DPWe*g>u8sh*Qab)`*@2|i+Ufff!$ofKWdvr1j8^M|nCzFLx z&sqZ;H)1C$m2Ng+ivIKE(#CjiE@Wn4>^q;7T&Wd1JL=AKOVW_2!icMIGriVtoUf=RtIaR6_{oBrhDmXsUx$JzXzRD` z{SRiA8Kt`Lf7AGX+WYeG$gb+n`}TdSecxB9R8nc*Ra#mtbxSREs~2~>_tm|4Yq#5A z1C6mU25c4sf$#-~00{{p9}pZ8Odx~+*$Df1h{I$Uk}s3Y03n&Mgt)urci*d$L~#Dg zKlwgNUFxc*``&%;oO{nb_bk72H@OB|=sou|@Acn(`Rs|=sl+f}Jtg#XkMY&ry#E4! z=j~Ge4l%4qdpGuqND2hl##UfA#1rNqWnE_jNp}PtEws(MZgS7|$#{>uBXFHYo~6^> zNP4N#n3M=UaXIJFy+jdJU3Sq;CP2j~3p;G~>=_-lH87z&KY6qZ6}`oXUTB2bf#Bz8 zDtbDSjO^BXQ&LOVUHPlKP?85hEiAb2EW`oIEhT^6+R?Mqvm4$h1*Hh^Cy( zP2HMNjOLgn&M!wGC%@PFAM8hgjFLtM_JL-GSzd1L()#;^MIkUDuq9s0iFTJb)I`36 zy&W8oPOCP5=%i}1B|w(9vt`-asJYUS3PY$#)JoTxV%{DfIQN(@l*;rk^lzTM8LQ2v zdz((P5Q~B8PsG=J=?|Uz@Li|v*olMp_Vx@#Dz`p7eeQuh6Oy>nbs}GGD5!5SYQnc? z@gZk&hizOO>Rn_%c_wU)nsMxEdy(38_@1ZV_{qiT^W%f6Zia3?xp-)9V+WvzUxZz3$fNrbD|;zC1a*oqT6q^0impHvKS;K_)Mn zs$&boP8Os@yD%ae8YBj_~70nk>Hyy4Gfu*JYi+Rr|so)u&Y%oLlec26*etBY4ml6#$z%}(uUnT zz$W7q@7nF_^0NNBW&WB{sKs>#GZy;$p@MfES->eSy8k{w{EgCdmq- zc?-fm-w!LrzGl( z&5jC0Gwim=Of3%J0u>`25}U5CB^+`&;u4zOqn4ubFU^QoY3f??g{JC=Vkz>rzgRGu+i$V>tQ}@MFsbYQPB?EzI;XL~f zvF?c!FrGxt;wqiJYFJyRAc4kd3=%493xU@6izj$j+h~`$5Kr(8CP5I>DZi9C!XHLDEmm*fupA41i z#-Zxedy_0Cd^exeS>cTje>HjQ1}pYw`VLMkDlr3SloyT!fgrzJOacRf`|+{)L#!&( z!~?&&Jn9%xD?az;pXl#?>F$uF>Z~3u{IP$))U&8zHRfBy-1&>vw_!oJo%E1P&~X~f z<;%@0!i7_-b7Ni3xigD>LUMqQX88KFuzX-ckc1IFTIZ9ui%da-iqi>ZqM;Yw+PRtT zu@xeZskF(1%i9IgWh#(}yJn(@z@{QvqMs<5Cw0NQ1Vxh+OP2%4DC#7k48Rggy)zx@ zg(Gwd(E}7E+nYt+h1`jVOEMpHUJ?xPYm19V%aVn(bzfAx%pVfjRKOGxuOHQuHlqZK z*;{`rtBkGilTKz7_D*;{EJxE2S5aR;mKcY;11*^ws8mN#iUFZbC>;@Hj~_m9L;lMJ z9lM$k@HSi{sj(}<#Giesy>3}zo>x}iT}DZnmz{quxES8k{A+BN9- zHRP)a7HYqw=4Sc6`V_E8#ZX16*TpWQ$b?XDtG$KjBM8l9?E>4x_kaT%R)gT-wy!oC6N7VLp?8Xjie#!BO< z!9w8#%bvNnzzi2F>U=c)3+IXl1U^JvY+O`$5kP>o zWR2@R_jfL(d`;dh)V=08#kh>lfl9{*5P zLJkZgy&PHX&)j;J`34t6b&M=l+souW==N6-gVHtHFC0854DFa}3afiole`(?`ICHC zR3w+g-OB|ocSNeoVusY2(a!Fg3K|burmZ{Dm_7>LgYn-nw2i(9fLv<(4Dz`@>rcgtvBg>~ z>Dci=U7AnkBbt^hgtcTth}n(Q!Qa|{aL;Nl2bA|jHw$-6LQe(?y+>oIH1cEneS6DC z$9xW_i0No7Ilq$&7IXa*<%B8~bG6ANAkUxH!u}Mm0nF_NXVnMZ{M$b~Sucj`a+e`B z%%B;D2gu4ZlS*Dj+#l>b?31@X+KWfi!g6s)7wS7^#>Rub!l7)VRBAvfJ=gjX`vES6 z75z2jvE~Hx_~XsjvX8y|()oQza0D7A)ghdyM^*m!E8?R>8m_@MDndj z(FeqlYLtPV+V<6NOG(2f%(diEopsw9-~QO10%`L2_9^hVt2nindQZ-HOmUgDrAPT) zUp+YI@{NvlItv849i#5xd|x@xaHSNLQ?w#OI1ohB&SrrQ0(x@3k4iC@g>~5ZJR#X8HEJ z`$g1R&>hKNNFwy^TL1}=BD>-TfBZVVuKR5Ok^)x1KAl`0IdY}Ycdp>Tw5s3w{fl2i zw(Xw4Kz(6s>`-VjQ(d8XuBg=Vf4C6)D#Y49f_$j~=Fvx+ua3Uz!E2Y#Z45L_{*^Dg zdu??lm$}MMT<24X6UX?mi5+}&SqvT)<=|{LGt&`Mu0Wy^s^gFR*|Fat-wb(lJNX`U z$p_leA?c0n_R{Np!QgICcO^AROC^`Cb+)sQ!{))=M`qpcrJ^DpohxX9YS+HoQ|g!4H{^GwQh{*#YH(6lpFF9ugQ?-i0?i$N zapU3o^0Dx=(i_rci6#K}G$ha>@7CAD*v7u-^=>)(WH!Qc;f$G0g!a9+ZUQxYG<-c4 z%d_(I@>5mB%*gd$zGL@LQ|9iZG0NXWZGm^PU&QXb0e|#fcr~Y|n=|qxKN5pCf|m!S zvATqSSR(>JfsRROX6C0%ejQyPK&H3Pu4!*+@m36s`?g%_1a*6;MBdEsb{gIsq5yQ@ z3ZxYPZ_LO{ZlLLV!_rh^dHLY(vH8Qlw9pm#0@v4n^!)5xU(x30>*s~ty&1=O1(VS1 zP&E^(v7ZO#XR@H|`0&QljdC&DH}(g|J~A1*^^=SHZ|fUco7fi&tc;er*=khm`;vbq z**%hiMB-Zit5sw_!rnoO$h<#B?nd^*@#D=CiDqtcxLe>WB?L#PJTLF!6G!=j8`9z4 z9+51HnRPJ~BAK7IWK;S;E_nl&=84lS!`6PAC&#x_>NurTxNT`0g7yP|5ZATakxFf$ z4ia*G4qbCyxI>CW?@_L^y#DmQjaoCXwz`!3@}q+zSSyFQ-Su27{^+@v4|ferJ{Y}I zRRZ7Anp1fM7MNBb7>^isxZI~6&JM-b)zrPm?)%v1On)k7`ICR8C=WULw9dR9E->}9 z4#-=U&3E6vbm-)vv-3<$INI zFjkGAjvLqd!mX#+e`A}7l)fDq%y$FfpJp(t`%fRe?ciX{r>+XQnJHK`7p2O&m|7Mg zV)WzE*?F;E*O^>L_;>7cbZZQ1Q|)w1{I_L9?nM%qX{t$QWO^H_4#nv=s`t1eI@ehn zXzsmh@4%n21@Htu9jR2zx8tDPunEWw4uq#y0pZ#AIB`{0WOY6F%Z;O5fM3DfXZZv_ zaO2SJlDM(*GU+YxXu_!!E_JDL!3T6CKg+~@{`Bp3Aa!WC{uYscXup{)*+*+V3uB)U z=F`yxugqn~S##H$uRl;ba-wS>aZutiV!#{?=3-IE5IZ3-8;2ggK0S&oe?Kd}@Nu?a z@3u#8T%Q9Bbl_!S`_6Tv>)O6oBkGi!-Tw|BZb_`8Kx;h?{q&R2Pt)uQ{O+q{9jK^# z_B7Ynm4#Yi7eZ6mCLid>P6a@No5FyWga+wdvTwIa1jwH4gM3d%98jf?s`DK^WsC6b zVT=(=TX;ltmr=L1cUEUH1qVdtkJe>Apm!f1>_rVZJv4Y}Et7}*RaLd;dUB_Ka6Erb z4A?f1-~^+l>HsD5p%|Scq#J=Tv-FmFJ;OFmER_)a>|a|tU!dk9RaorWe>`Z_$IE32 z(2+xfZwq9tNFXxHNl~MFY_&Nn+qz&%+VW?*jCgo351M@)c6o_?D{{+FHx#+}G`31! zhf8;bC*y*1j887|a!u+#d~iRvPs&e=Mn6KV#A*@X1)JErt{y`LN7y4M9n$n?bFY>B z4+5*`I0iXAW4$+Ux5NULKzFmnc{%#+8k8;rI;8Aqgp~Yr?7QJRl8Xt~FR`M_r-lMmL`BL0wrhVbyC-6CtP^e#6*H&K zhcf$9gQ_qvd`zk)eOR_wrIhCR48_$BhX)E7Y9;+<>nF&&E+e+>GBEhc?v58g7jt}J zNk~l!m36_l!3TV|^ZG6^c3vbTwhaS;lAH?at$6+|L0$O|wzr<>@HVg*mr(OMBi0+u zl>VJ@4Jl0rvnwe)p+nnx)TKhEZ3y!86)HE{(Xq767w?EHX=0XZcKKs(tI3ELx8_s1 zs}VYi#p>On)LkxDMIiYACN(9-Bp{b}BY+h97IVJO;tX1JY8248yioP86b;FjhOXfl zD1%cL%*mq8C}KE${XPdl)4AL3jqEVQ@yclaK8$NMsb{Vwa$Tw@>b<4N*H|vDs|Dn{ zTg7N&+&7myB=UJ_Mb-U>LZ)6f5Jl8G?T2$SlbjKlR5C^9#Z6$5zny(2;vEjS(dQJc z%RknoiGArQA+aL(3;e(y$(R$vSy{DI4GiHB5W7r@!5R08FKe!A3ZoRrDm6>MuMPnFy83j5uF@ z-;sZ;M7R>${8yy2CsAluWf2@@26tO}M&=dgiL+xfum$Tr7^#G#dY4?1fkgX&sG&3* z1F;H3T!bx^|K{s2+kIotZ`jk;MmLjvs_$e;WMX1j*7RXLWdtlPW(-^%I&(Fk_Jt;o zmUm6e0L%>;nuy|TeGlH0PoO^08adr8GVANjy-JPQGt!k?Tmmqn4o`qGBvlY2wIWHr z3ib%zQrR(%fv&Hqo1ZmbFhA>pm~V~s99iEkuh*%(_H}kH!GOiMqt=tk?l7f8wLQua zH5F(dbG==lxVtD~$KNKd3#AqMPS%Q5mATQU0EwK;JIX{L*P{#$OlNDlQ);NOa&Wk5 z)h^az*zPNmmd(X_moo^|%uFk5gIr3{BEB3qw|pbcUXpdzy66wf(+@p;bqd}r)Pna% z2X|e2XZA>>5YTk%*5~^KE*gstMY_iVUwK(J*IQ5+iLZ>`zvB(M(imz|dVU&cvQM&q z0F0m~+^EXxo}> z2oRhmmxNV8W2A_G$J9{w!hy(bxncWaHj`s>B{g((?pkB7FIb2SPQ_Y9$qQLjEODBXqpIb=v97A#`)N(nJ7u}cekQnaG{v&h&O<_Kzzyus!F8{gP` zQ~Z&ao?pE2();`F;>Y*%+8umzh4;UnkDrvdgOc=GF)5X@z_(+X?U@Co)Ai7F^nGvD z2J5$LLrwC=?ficuJgTWn!SFztEhE#(~s zZ)#9r4NHyTBM=BAJ*Kw0p0nYlncT6vjRkyUcinSqNw&%TFOM zKCGIKKV4K$p1eMvLtaIsZUA9nYI>Guv%dabJ2dV#S!-E zVktdOA$%CWhPVseWDV1waZo-ynaI`+LsRtN*y!SV34hiMTT*VlKbrBUYm(7j@#W|V zbt_SnYeN&6SaNb)-y4qx2cns5B_9Zc(i<^r%&^VKKyme?v#@SbnegYWDRz~81~PU( zYQPnl0|%N1#kGamOdlWU;$!2yxKk<*isqC^R>gu@V7CB$JKK@X)eD25EdVm)!1e)f zz*UD`d#a~AbQE5X$y*8>UD5!k=qea=zI$^WbKBFj^xRTd~cKM5PdPWI#Q|KCsUg?3DR*wKr#W8~`PWBZq9#v1uVlszNu zye1m^#qvS1drCCA8OvZ*wi8D^0|ZIW=0GXDS$%`&}nI z1kZy?=aIXGbR{WWP3cct-hFpEP}7*G6M`Ru3+V$B8X|xD3-|6DU-U6SBQE!p1bIiv zF#w+Tn)8w9v15aw1TQhNU#`Rju1K?Ib7Lr**PU_lQ7bWXa|R28FRg+n+)>3NDW!4ZExG`Y#C6I zjpI4%;O=gVDENBHrC`T29tizFQ52ultL3v$VH<*4OQ`F2n#vbzfIkhaS zSn%(8;)(Y@@GqCD3d^g#>^t+X%SA(@D8T%on-55itxWJ*U0r(a;X_X=tG+Q5@ldPq zC@`&S>?-#lJPHqCE$?&dp35)2PnT7rz#B*SE(9D!g$oyi#9n@Q2hZKlo5rd*by*Bd z1(@OOL)ObC_Ov?hx99S2i}K+YDRPdQgYIU+B~EygMAX{3xi)*rO78Z~+vDLcSjsz| z0m=K?7AW*;+}5h?uH9SmpOUsgRmM8QJjI&xJ-5#u5tU?qVsTfltG~!u{=TY7QBLW` zg9+(=)ETsVzJ75yy!YbJ#_qHn&JN}SRwZ4`Iul7?dSg>3z2 zZW3mIYp`D;IgIE7uuIbst&9%#N#nI73MyJbDI1rpqL|HETQ(FbZRk&DYqP0-CtqYN zdl`hAl6`X(bxG~GGT)5`prWHgc~^eGnZ~@edhNoboRhl~jxRQloYXHY4Z!PnXtL{S z_sj2?%~`dc+JJ8XXuVQ*e0?R|yzQ=nQ}{*pPo<$=zB@Ntsq9UPONfh3BXOJw2+8Pi zRh5ui8j`i~VqVZDmaWplJ_5uda`RLC$Jo!qr=J13;BIQ02Fm%H$*+@V$e)mJkiRE4 zG5RvhF!N+`y94IlixJ@Ur zyMCZcdLGJU!9a#4RAZnAf?I|id@ke%+mAu}AL`HsE7Nd!>v^^v_u6>(k0x#E;uEb; z>0X0b<#S?OHur_kv+P}g1A$_keS~`~eYA!eaJk1`_$rs{Q~GN0bzOeIzXJiWVu{(1 zVnSMBhij>eEO&okzkfgToBZftb}jr^c#odR7jE4sm%FL?HhZ`J8ShRY})^7kvZ$M;9IgM3d{%1jnLT>zSTf?qx+VlABbFH*ejt8r&z5r(}o(8GP1odaO_NA)tZ&V z%<)ETYN7(b*~7kNYfeeu{AVVij$5n#V;st9F8XJDQRXCHkTQyKFtR2K_k{LaU8%j< zx0WB?tFkB^-89z$SSx3vmf#Oh3~^D3KVgmOj2g@%Y=CbBQw+P$0>Z_#e^nNyeP{pp zg}?pWO6WvjTF_pbxD=2JNW4JJ6rf)CFD7q1nz~@&P)!!o;W2vPk@Q7)ItEhlcxr%U z_wKv@M*L!strS^l@_-min1R!(FwCz?OJOUALUDXP;+yB$%SjY8=7)}pGZ4DMNN|xa zqEy+hi&`O+LOqe9G06&PzdbJ$BhliAq=gl+D-kW63_Cep6~l?p0?$0E?%by<==1sW_^AGUPU6Jz6+yLTN*v4; z)}k0n8~g)8I12s=D_sr}rkIn=Xf#7h${N$$&esc!Zuia!U**#QYgp%}oN=vsN*QDm zL92iqLC2@8Ey~?2%Bq!3wWh310m(KLNF)LwpCgUjrgWpCUZC}P=3cgnitUFHogNA` z!&=aXf+;Xm_7s&gVXPI9| zeZ&&ki42@_xmjWJDZf+X*?3fpkRXc7bd&+A5kYyST5HFUM+NGC7~;lio@d1Y=CuH*om!gOeKP7# z*>b^3hWKu=Q5gu^VoEY&IYCe8y}?AjYTLUP=Zm-gTHMn}j8scUtfjeBJzZ)(awDvfv08-Nt$ z+M8TD;FmXX+Vf`VMdBR&bjk9@VY%d~F?59~w?nyHwVt|=yzQ@Ne<-`EP=`F;G5o#n zX#-UR3wb%L>d)t`fMVpL-=6ZJ^kC0;D$(mZn5*inA)7`>iv)x5p0TX1r$YfN&gb97 zy}}0c0)QfcH5%=)Ojf21`CYmqO@K zm@gLgjnY~C|JeJO`}s0zcUIg;s%o{_B^JY(bW{)#i<;$$AAzo&X}oEU0hQV$vPpIO zG_Ja$g|7eY?G2s7)OikXuD4q(m!=rEd<2HaKQe|tu=mW^T|-H~A-?=hz}a#yTE-a4IgA}bua8`Vk0w`PMv*a`qtlsCvpW@RDzCT@~YIBrFHIG|H__a_Hf@q zI2BhaQFdZ8?D1`+ zZE2(cRBkSW7lTQ~Qqgz3+yusEdV*zVobFPnkU0L9QWBL4RNJa5YNEh?DBd@(C3rhf zyl@a7_dOiYwm4ihl{&QUzIwf6BpoY^y={c+D_u|iW;r|3( zcwqSFy713+;r|?6n7FT(;rF&T^F;{!=TOA*8A2qu8syIqqW&Hs+A9draol*G5bN`V zIDmNY!F2A&>HhZ+62Lq70Rnds>Ic3X(F=PBNz@2Q;&bYqgk*R^vfm(Zv*Z0uLW;1S zl==uM{{kVE9}?1qK6(}jLahkt!#(t)|G^j`!$>h3c?Th*-zH@Imk62oG$B*#gv{(G zr1>X=%m)Zr_#PpP_#cuezYPETr-8xs15``$p#nz`n1%00ltWMJCUd3rBj)MW zPsmT8>wXl+K28?#egJO;Z;}0Y>#y*?hW8BK%Xpi3kCHznNT_bzWJBel#L zFL0}^7ME;&n*E=x7W*z7zly%^ZT&U#?beUk2<~a5^(E$aTi;^7)A}s?b===T>r33> z)_-SdExfyN&UahSaf#N~*pIaSl0D!0JNCEm`O{E1xz>-kx3|8|ejj~)4%wN%-}*lG zLxkPHd39nje}y(D@I3dR64Cci)dKnA>|4?IyIWsj7h9iUv#sY@f9o6U;nrU;zY0Wy z_qCp3kGGy<7T`-oTsM0^u6w2RP4+dwzs2>L|J(W`?(yrm-*4hRZnER8FK`IG=8V>} zpxd9b@DQ;Rt?w{S>j&%z?&04sL!JfwuaE%vaDsUkvV-tu70?x-gUqGY|6?XmC+XM7 zQQD5$3hAq*LmPat7Xn?Oov_ffc_I*zNJJ(IQHcgk#X!!HMQq~0&gRGYLFnLN>lf(2XVDD0bo>qZxunXD6HRP7nF|GO#J=>4y=0RlC4`X*TO2&XP zIsuQ@6e9g+NR!OMDm{-{>^sOJDitij-@FUD{t9C3_8^jD9TBJd$Oin42gpHk2wBUA zQUCdNXjI35r*MLtB&Wzr$m8ULoaopf9F?XQZzLj^Go% z69)6bJBa^jyEdiVcJvqi$nk*DmK9ag4b!rbmK8wWMkE@GCz7djCY#F_iluU;+SOg_ zsrU9Z`UeJ)05v)`J~25pJ=2_>n_t+mxN~WF*Y1_oJ!|WG_igMyaPZJ=hmYKT^w{we zCr@p5wfW)Vr3-hEbLTtXF^ym3b>{Mm9Nd1W^H|%Dd7n>jJLI+EnK>K_fy*4Y{|fSM z(C(iyb|#RCW|Fz+_gSFB6OzI4kGaSFnMfwFd3@XD+8-HQ>#O+ry8H7SEU?d$=W&hy z+T-giGUYFm)1cBh#N%E>r2YleMZFAPI8g;A7w#KfDw3*5ic0%afU1oC z@Mj($=o8|xB;LIrw3Q@H!68mkEc$em#;ipUAA$Y^0Wrx62&v!{4qmy=3yh^Fx*fV~ zLkyNG)2{#>(N*AMfV4>Yz$bKw$C7#a)Oaw^Tvu@}FR3=1&A2br+OdfV69)Pd0Vsp5 zAYiA!1ni7EFWMhY)Nnlok0hdjj;8pos)*)LRS^%S3mSb?JTnL+;G=?$Kri4gN;0aO zB6yKLFZy$c<&z0U5&F|Ku>EKI!_5K)kambm;8AfEMZ=Rp{-G$TM%ifqp2ejA9!n8) zbO-Y%dNqNWrtpg9qtpbe1t88!2qqm4uTFT#U<1`M-G9G zCqn^LOV>28Q#M5%pU@7Er3&a;MY^-1q9w@AE4p6qYy+i7>NjNEuPlpK2i}hW4o&Ho$slf0l@#8A<`#A5biDE1;B$mN+B;B!>0}RtrcY z^@S9IQHz4Dh5^P=77Mzu`QkAYa3Xy`%3)bC@P+nAR};rH0MVf;wuBpMKb9ua(yz25 z)U`B0c0o01Y$nDuavMU#A6C(yBwM;^;M#_ULAKc&ZUJ)vC(;g4gAtEtYBri8eabL^ z6HfcnXnz)-&?TcT!fHhO({#-N7?>t#W>^CE;A<1PFbPE3{TZf-VP?|)khsu!@hAp@ z6K!120Lv8B#8q_5HgyvSl9p*=xT+3#Lq-xGC*g!n`%`_UV`Es`hODAm_T~#X zy>5SaK=g-4bc_I+`fLEb_<{~#SWQC(bp~0}WQ6U4lmzytv!aN%AJ%Dszi>9L_Jlx=Z2bzu_CMAdV7eq-LP!ugO zlx1{nI|!q-5N2cOreyk(n3<|!C^DbK63C{QH$jUe?C-PKL6A3k|1+N>{jP=u74yYk zvsbR&2R$(JeU|UOiG2s(%~Gv|YAAUB$)`fYC#=aIKp*>iatAZoh!S0ph#Ku( zh3;*^X^2B1$B@z-0NkJN+?Q8Ng2R%Sfr>>u=O%O&;b3_HnKmCrHT%2d- zqOa%U6}Q{&wRk$?rMJ{F-BjIjVlwj`%7z&xf6(@FTncmBWg}M_RGjTGd=q?dbu+rj z%gD%E5-^6ke>s*(O3MdDLjM1rQbs5UABF@n1WOu-hB18nTM-bve=~bo{eJX=M8)n6 z+lLz33_5nXijJXEKSSOK9!Ln%zvmSU3B3y}_Uc(8+`~kJJY$Bvs=SCHm}u~+oyH#a zng2?k*z#|CVcp$|0M5kT545V!2ke5?2!DkBC!jeOi2{6jK%<){o2Nj@d9w;0hzm}T zuJBqXtGaxa9qV-YCxLy}K%mu{{}uCp-wiQ^bRvFXS!1uFgWRobxRiV{7ILp=0}iPV zqJ*2>Ai_CwntRNS%R=c)ysyDb+P_!ev}dT`}vC>>GL@2 z&y_7RyHnQFWy~ov@aBfZ1AAz3!;O>-Z4Ab?AYeGs-2;COoQ~5|E_HgYlw)gcQB+Do zr#v)}q*-udPi=I^P$T_^w-IRnq{Eh(K(5eBu!wwQX76sc$sVEnwE0+LZ7l>72d7{h z`tY2LZ2y96^`d=e)7)G~0t-iY)913DD>vx)z+pZv$jXW#=W&jl410Tx%w?m{i=iP! zv3?B?1b)4%GX)ALm!C$G^54R=F**_I45)2?Ap;Li zFU&w+_4G7=OECuA}5w?Gps{bSNF{4 z?KQcI7^54By(-D~!R~QT}sAE(Gu)3}3`kGSfXm<@Fl(1m;gM4i7LeijFpnnZ?`K7?>KD zU*33LubEOHpJ%P~vY-d3M!j$>p_B7Dqd?F7VuNbKRrrPxf3`lxki-sZ3n>|4zF?&D4tspZ>$hPaFboI6D=2JUM~hc{!7 z*k^0`Jcho}(pd(UpsZp)eLqk<67RS)h?EtKK}furdN8#@k}E<{)+%6Wn7$$RFf)Ig^?R@)H@*M1ZlnYGP8lj85a7KJbcumB}+EM zwDs#xhjS6I?X=eCCqJJkT%6RL1RiuU>Lsmduh?bu;AT@7gZ~*QG7}Oy&GHlIFN~2@ zQlowz8g<^}<>jM>@(Rh!03Bvt-l(^}HmG}xO|d6+J+&@3h9#&n z9iNo~LuFKn$NzZ;61W_&L&&HcP1?&q@?o)zkO01=_C46nlpEN~Q7|GUl{egjILvW6 zh1+iS&AJY5&tq>A+)9QIb!#D!?DDvCU}faH?RE+SzAt3MdC5&sX3PE?6+a+*>jm;y zJf0-w*9S$TKM6gz#j-3cQ?5kCWIgCZ121OB-?Xt+sFBR52X%dck9m-)!K-27Bkm&O zsaEit3_+7pYU9|v?zMw{gCTQO!n*HeOh zfm@kRz;uF&sZaIbl75(uog9T9BmTe85efu)8tBxO;KsVx)G>R{6@Q@+@+z<}zM)OR zh{(tb2iy1`2oRGRRo3ZdD;%!rZ8u-iONn;M*Z|d|l{tpl{rK@x*|>z4Jt|KL+D-nN}2D`>U{%J+!Z_JV&@7FKCkQ zbN=1$1;^wP#ofK`6Rk%-7qiS3IAur{D8W?brfjM{d{BJ-#Ifa|DI;)I6twV z)amv0`^4v?2zXS;Q)$E2Ym|jrH)JA0s!4ACiVF&#Uz`~=Bi>;De`|8Z1lFWFk74liNUYHJ1-g^Qz>aiZBM$+MX1O6@1a4IdTEdWzM~Fejp}+ry4XCj+u&c3AWN zrNxj6z^+_3PZX}gOy3P`hdz2lPoL&qH&*gp+{XQPo#T^Fww05mrCgW~9<0MRp_o_| ze+?O=X?|i1oF3|Ahm{{x1epv{g$ZHso3gQ%Uw7;{te=`HDY9-IZS%0QRoFVRp0#0N z5I&?T;cwS^{vwc{_;PBkI@L(xFH;;{tk{{|A_>~PVM+mq)$G8_^xN|$&MMk?GBM6U zQrus;sJ+cPxtDZqvAbJR=*sSu8ZB)(Mc6M_zw-yjZNGK}+`yiD_Sunjb&4F{bYz*- z9$sWa_zs{@bo0f(FKl~?QH>l{q9qC~@a&NB12t5#*S4SSLbCDCD$-x-9d1jq z5D}$oAP{98k$plzFc{)<3aZ_o8O}?tESG2-gX@91QBxEPihqa2CDj@1Vq|Si`tiNS z$D<4V{RXU1Fr`ueq6Bv)LoqrAqhxE#H8vJ=Gc~k)7vb!*nwOT5p{1bkVay=OLBV#P z31*NqQ|-UB$xbnHJREho$}HBo+H|41zr;{^Z|*QC_}j(ILx|xu3AvypSOG!>zU~qo3nMp;2?Z@8?N&$ zq!$nDkxCGGc!=4asIAzaI5_RW*My&>_<2~bO|@dSy}v|O#+y?Lv-*lN&NNPFu8sNV z!Ckmq4gz&uS#MTe?G8^SBdu-gs#VCy`t0QJ=BVMsdp%-8adXpQ0`nU@uY6PR@-N$? zs^toK25o))A;|&7j9i-IS3*oCN>Ckl2?U{w(~rt*Gigp@K6eNzml(} zo9^WzB-ZQW$@>u1`8VOux%LXqLZg4?VroX11OCXzp8e2qiGNs;PZ|kV(k%CZF!vdQ zQf2z2?W{Et4z)XFqkUPBl0r3B-zV9#Y|sY*?N*&>Xp&lY5fw5OX}v##Sf3pf&juk4 z%1t($W;gKPJEb;KTdML+uc2;pIDkvLzlC*;xDx(kOt`)eY&-NJO>LcGBwD`uAN;@d z4XwNuuv6+mGgX>j9Cc{;nxzGD!|WAy^~lJVCEmqH%@%03ETF&ma+qE-S>AY{Zt@)= z%5>%0SWx?Q6frLNZ}r(qKo-2ojgk1B@Svln|25Dv#74^gu`RIPfz@L_ptQIGK`YgRbia-C$6|O^6dl%-Z7x(+UZ7 zA+vt6ai)Kt0g~7^UKnEF@WGWjTgiCGSRY@&mRM|zYGwTsVan(iHL*-Wf*GAdetDb@ z7z0Yd5Pw%zRikO5+M$E>cqy9MSLNB57#SHgwkOcJc1!Lm{VO!5Z7(|VKlz~%( zWfiZ&r%VDF$YNMCiHo0(2J$F2= zAk(x|`_XY0X^Z$Dlvsw%U0^?TJ-vCFX+6zFYG=UbIM7H>8fz~YLnALAeS}IjtOFE9 z5HPYEd<|3k^E9(?7nJF3Y3azzK^FZiBjLXrUpH@qmiMFc!2L6-jDw$KNLOKZNFU4z zMEjGyD~f%?Rh(W0u0{M+tw7{~l=ltZsk>7AZm5mH9Gv#3^ZLUE?Qvrag(>_1-4pDGqTR7Az37H~MsU#}g6^S;m>58chjY zvu10-#lSd5rGBv{6kb~^Z~D?*5tbMVCKo)>wC)GC{J%V72RNWIomfS<#$|A@&EWgDU!9Ga#v$I=Sps%H zJkVBuRPaD)=H@V4wt5u6^g)2Z4H+b5K~0?ePpgUD$Mzpf%$R0yrdqX_x-uBY?h2PV|f5!K*m1r4+cTibkjmW^8Te$hYU!h-O< z;}hF{{M;4Q^@T4cq9Ss+_euFX0NA=NshWOp&_n&+&R4Jg$oev;ApyLd***!%CVa(! z=`To-r1e~@B-TLj+sAmc&32F3rpI#TUlV0?Yq)bo(;7-Unp!N6(C=efAh6$&z2C=< z*EShK9*fZRr)qghoafYv3aZ>+iGCtFwZQa`5vl~L*+P3|UehM=LYQ&FuMBor^uOtP z1iQDKXY^gY6}?X$4+uiS%^W@YXwD=u*y1yD-(fy@QHWJ?ldXoU>|^E4T8oY>N02mC z#-A9bxBDo%pw@PKvcYl_zv5JqA|kim@%{f@mN>Aiqf_l_dHpld@>@tdkWvHaKD~a-V)EvDu`{bvw`TF4}4;v}{jCU08>MV~??{!ECEOzSj5LvfP&$!L` zbNmsm=R8AjA=P5>g*|DsC5%(_cCpXEh0wghtMnF_W|0A_kbhO9(`0UojY?tn+aI21 z1Kt%Gv!S9bSqv|%%5-wxQs1le0NR=Ju(2&5W12%ttID)Otp;mrf$hLD3bx>=2j~+j z1VAuR5%0=@dZWUDg>IP_U-FHVdLZAe&6;Xq4COYt6ztfyMtFp=T(BFNslate&Q82t zAa03AN~)wa*715{r>%sU)an6F(bgD(#-^Ozui9q2Gex zbpisV9cfQ<)s%!ip*SN^$^QzqZVbt*2cc7fzBxrrnVW_FGxAyfzs1uQD$_Ha%>cZd zhsY}}jZdUtIdX)0eAyQJdpR6scV2#Dt8S-#Of=J+vu;+9rGDRo`Naps4=2C9w3AkC}O zT%ExGboUZ3B>Yzo&g)MS&ypEFZJE3u`6=mPv!p~Rdc?ng`V&wJJ1vYQ;`BgbeGs-m zCe5bXhA@2;lzphWZYcfv6nU_UovCsMdUfC0X^uj&fR28zczqts02A)sdYHHpX4CZT z7lhw#qT80Z7SKg)5^xqNX{9Nu%?%CR-EVRxb!4Aqa6YoPGvMA^Wa>**X`j1$ad%oKL{E32<;1cAzwyl91gVdbTo<>ZkX` zMrdWmvH8oKT-kETo_eMKmAbV@RR-XwRcTRCGoB*3ukrl&k)=8I6KjqXv&gu$quwI% zs+mCH&&R~RIty%FW$eIvEzC&)5_O8-vc<2a3x$7mITx%WBt?aYLVwXAV;ChyLyDT4 z`)2X*bhj+U>^LSzz0aT=3*HpX>c-h4@V6c1KW1C84WrfPbWzwR^CZ-A{lC(!|eZ|F9cj(txmiypFLJw8O?Pj*7M;=U;)qfr( zH}TQoS~47cl*iBi|?q?32Yv;Z0 zLxDI!ER|Ob_jQ{qX{ebSw9e1;yH)bX?+aB5idcWYsJzf@sx)7C&jq-uD={*LNyg5w zi4Xo$J(2g+ia@jEJUe2tTCdk&3DZ*DPr*sN+o*D@bTt?WMa0OC+WQ5vuEiD| zpO)iK!5YIO)v_bzC?MFfBnUqhR@FTBl?kKn6C+Dinc7$;MYvlwE(H&fDlBt_-l{bj`-VR|$bFX}?bW#Q*N13;dG9kqDJl22hlU${ znE3cc^my|PCcPU1H!a$&t(udJgib{hWZWe$2 zMZIfX{gOcD6org&sSX+zE`ECPA&aB!tZBjfR&BqikQKto@bEU2!pX27alFSk9?Dc@ zQr-V!CBpMXS9HB|(oV*qztq2hvVG2PrfAUk^zLQENPV-es(itz3Gc42!o zFdYA?8z^Txe}LBr5!Dn#gy4RKFh`r=5sD%Cv9|yK@z5=iED&YKTUw=ev`n4^|7(y( z5&X&ucNP5;)Cu{sP5cdEDQ9ZeODF*72O$ZgrJd6A5|-$om)BLEYEU5GS+K&U99fiR z`h)w*pvg#3WbiN{Q}s3-0G($uKtsY157Jpn*(3$4H9M^!$A5yP^Xlp*h#S~Zrw{*x zZ_?9@sW&sQf@q0nR=I1;e)sLDFet zY7;ZP{*}#!!r13ns>OO7NU#u15Dkqq&1LT4VR>rAt5?7BTAb;>ey1%EZFE|E;eBA- z#e`WB{}>~DzLtOZtE^}U<-N#2@V9+fgE`+p{nIU4Ko?w#-hY1Fi$p>;MQ)6ZWo1HO zmZNGd*Et4jYND+_%~g|ov0qrwk8Q)14$4^6H|e4K2Qb({&fd_JikxtEj-T0BYrQc@sJuGr@vqreqlGq|;UoAm%YJ)=Qx5`n1w(xkU~qZ=0+Tl8e(iW;aV z1Gn<{anpbR5Ec$kPgS2@qrbH_BGe`H6-~B$yVRKmw?8(rg6%})s@4Xb?o+l*{{+@X zhLBT6y!PGJ#8zoteAXjTrnHH;cc9xES<}g2l|VHY_c2qxpS_%Y`h2Q@(^YnOGfq*6 z)2I0LaB7ytk8;liJ%P9bJU?lc1<(TO|X8)Zj(GTd>aIS2N`xND?2=~CEME6S1^I% zvD_^7-#d$r4tXk&!Y;?a(6vcV&seMxR`oSv?uZfEzrEa;mpd*4)xH>niR$u0V* z6&24;laf$e8!%!~ib5BD>&U=1^I}7uP(=LktG=07Y)J0eoT$w7+0H^x-~J~%4ea?8 z;OP|4%^Z@G-%Yjcf)|2a#dCz-jSU?Bn6o7u_Ggbwq>abMyiFFs<0Aw)e9`-aUBy$t zQT@iwbG@izmOGT=*0A*zfj}rHC+8|AnOXDKy%rc|xbA!j=p8iG}?l7Qdcq@c?-1zkRIiY)7 zk`>CZD%K}CV%V}CNYxwqj4S4*R(l;=+mTrHhV*!sF7XzjB0+?r;QIQ%be~kuKR?M{ zWM*d%y9KBNpFFMU6uhpo@GR#-LNGub)?Z)hKeInc9{T&TE?~6o$>hTw7*zdM@S3kG zTan!um8BgJ%Rrcf;dgEx2rgWx>tz62(lnAWRy{e{XpWa&Xt#WqjLz^nVa-<`^zsY5 z(-{;9G>$g{5@JFn=XD=9UWTmK#sryRf`S;9wb55zC?h^PuV-XWWjlXZ!Ml!NT_2g@W+(d4>z1Gs!LohqTG9UU1hRGr%hv>cYbdGaoN#JrGFWB=Iqjb81bTSiY z!$j(n;d^sI%#;%EqTC<2@OSI0W}ntoa#>)LLrWQ9vk%s$mhE513`FGy*ZE<4J^*Dv zT~oqcv1+!6TPj+%{|2io#%6!ZzeQ#tt&oT)y87gw`m>{!TfdU4jFg>9l5w(!WZj)C z>j6suizAoW!AJ=hq%syCg`y`B#1?ozh`2^{vLlxOK8UVW&Y;xL;r^Qc2S*{FPBE$s z;G9hONh7l9MiN!c`qfkDF1s^cVte0P!&Kj-IV>!w98M?^34HXmE5NcxDQl!}D73A^(%kV&OCFo+elKI1)nVD&i>2WyyQYh`*yo~`+<6WaU_ot?y5MV$f|-`+2w>O zF|?4If0}+E==(IMhUzJc$Q9qTMkEIW92-JF5n;N+alLAABXf-WLgha$!0+FNF^Qg0 zA$Kl)mL8&QsH$?jse<0Yq2^cH8^PCN`!_rd$|+;p_?5x&_Y)^J5-?UMiAgCTduoMD zP%y?+U65uLBF2Y3`ib zHx90?EyVAD#)PPLG!oi-LD)m|5~sm`&bk^|^p)@HkZ;DRhl}_%7R_F^g0HGOc4WxL zeMV0Mdwb;3t|W$_QmfM+{}MH8pHF*>%r3q#x%)Zd0r?18g*ON+yXQ zf>C9ee&8|gnwqo!@hj`6N_|@hy2x5L@lbh_P(t{w*;58QJnr_%iiLM*$HxR@WTU|* z>73Hit`demDe)uJ0x+`-IE(^ZW+-HAvzp5Ey|Mt;_*NsX{KzMG0gq^C@Q?AzeGV`G zT*oamr1aSAooKypMtsFYb7uO5$qCn7vTy3`^~@68JqUQluR1Rvq8Llh)>J)|r49~7 z!h=MF=XpIF|1gO}CZ;}|3xO(P-(lMsz=gV4Bypz8QV$sX{CLL;NjAAqyt&+%LYe#) zA``Reg|3G_+!SYIKKnfq6JsY*h%L+^f&zrL5&U0G;jWZwz9FN9Ollt$?wf4y@8Av-!x#;fULK2O9_5SCjSi$)rHY-0EV3_}qSu#pfj* zj;N7yMZyM4VGavH1;<}0a0%3U zYc#N=I&%x)SKeh4OR%Qq+w=84%Q&9q?4Uqvk6)#PDl^VM<|V7i^Zj0gtii5K>4wR8 z59RpWzKtck3UZ;-OXbVzg^`qlO1aUr5uJp{!NQP7z8Qwp=ke4Y{6!^=f{j8Xw|Ou` z4-)bGdEStF)n^Kc4b`2w@9O%YVD_5f*DT9hq@du9^unF$Vw)Fbe9t1h1c@fHe7c8W#m{ zVptgRx^xY^U|F1wm=`*-)PnKLJ z^8NWTJE9ks@dVxTki;k|#OOh*X+PZ4M)d;4?i0oqZkLxxgCd1|%jAcJ@J=M~CHz(} zC@SqWq0H`t!f>woK6&h&Xc>@#f{;vUTaCFnp66rqH?p#ycAT5iMz17{>9)}0J57C` zy5XmN?Yw@e(JFwFcAUU!?L}JRV9y*P>jT{i58*&=<#;!g+r6}{yivS+)0Hln>ZP1_ z7akBQFfp;Tp<%YN!a}i9;VF{uGfy+{`I8Ju7ysF6__Uw5#g!&Gu$SXD6qCQpu0J zMj@poFEqpwGPeTj{k@YmjQ^>>#Ffh7ygu}v)0C$KG^X$gR_L>bo#vJuSX#f*8)v`e z)Jynz*7Rk-$jn0^)Znti&?kA_UgP5Z^&`V?C9}_ELHX;^D8Wg;dqpEdD1$ME`UUXH z*(mrgHDePW=7R1gVelxpl~s`%<#hUPG2`=E`uce5-LAhk6Ahs)!4TUbRHru!F`p79 z9=p~)WoYvso!XNFWh_nchdqYO$#mkPBiKlfqsjIl*HhT$8b6C2qRoe4Gjt0&e^p>wu)uZ9-rJlQ|JIFCteDQda;JF@XWg23xS z>;=yE$vg3gPJ487GPSzbJJJ`Y;<+iQ^pDZ+*W3v~cEc}RA5bt@UNI~>+ubV_cVJ|iv(mK64 zDOR05X+ApnKeOUff7BQp3 zanfxBct{)rz#LO6<53O|=zB|cUY+Tju43IN=ZM-{*^B!GDO{qsY3Euh{MudP)*r{K z?M5VxfZWwo%Z`Ug<+kkxC`!Osinl?^ECeYmojh`;+{%Sacw`)4;e6w*_9O9S#K~f2 zdYpWXe)QVGmEy{FSVkko{c<0LkN+s#F5f=MCdP*(7p@ z6=Oo4@=Mmb_qaykv}cHTkyN*$9G2}}waAVOO6Q?INziOen@d@v=XMKfU3=R>=65n` z{EGcVCPU8PZFYzK$hZ@DLnNOh`ayscSqjb ztF=!=V>8XsH+sS>QO=v=H*Z3|AJeKj?Gy|6Z%75Cm?@O|oF{qX4ATo%QG0kjMy|*0 z#t~7X;E~@QYgL`Shs@AY8F*NFPxr_*(ScK842InuoM1l;o?{*XJTMJIS!>!62pbcx zeKd4@;=eNxUnM*{%{K1~5OHHVsK5LiI|>YlA;|T?UE-eunFBBJN9R$Un@?N_sS=gl ze2?zHj57$ol6`(PHg@PI)zI`+2@s8+Kkwh}>^c_NO$t7hemun;R?UMP!*^X${{G|B zCZ|O;okfjj?w=pgxe^`18VuR^@r}CAB+Wu2yEY^@G2;S%mu3Z>&0eRw7@la*n9iY~QMn^-WRKNhF?!Q*n z_`}|~M9v+iQUFe?A?A0Qh~$}Q$Z3^jT6TF3^xf_De?}!(&z3v1Xd(w-#AO2vtPla@ z0%}hF^<;W?lQOSuv1mrMG(-D;4Y6x_bqx)LzP|Nqiivbf1u;oGJG{Nc4nv!3_gIsG zI{AJ`3l6^g+S2utbd518t+K!;2Om+IoTsDI@c(M{6BG5eo}d2HoncF7P`+*L?X&?GY}K7Np;+@h+=>joXI#|2)T!4*!0qVmvf z2bn$Zy|uQHXw8xzS;M*c*MVuN(gG*G16~C$^e4!)dJhnJks%uB=5?&yQ`S|s<00GS zJLCTXK@wa$?Mt`?7SqbxYHULFxb<}fWPUye$dT?Iqp)x)P>iYT_~d+#cqhTYQkjwR zZ6fxA+Op~zVOP$VZ@N%8wIMiO1VW%Ax4o$KM&UkYg~Fi_9Gn#}o{)^XRqnJE`|(!w zC8@qjlP2<%am<-c=$WZnm}9!3&6T8&;+2R(nMXgK=a0r3joddG-+H%398!_2r<7eM z7)3ofWGTRYwW~U_;oY|7g?V>_`x7W!$4b1~QuaEUme%4ZzMPfa!`*-{73{9PC;EHX zgR5bDoGS~6X?#DzE|`irw4ciq=Sr;$#Q<`F7&p!Qh97Q!2~+2CIcpgExKQTo&(6(XF6_5T8^^m4{(@PzZ2Nc)1F7yO%~hk)9mjje9})s)=zJ z-0=TVVu86A5B|1l!q4tGjV4kBUO(a&&x4VUL)kXjKg;_BA3qHg^Llc0;DNE|daPu` z<(!ns5#0MplM@*S902yDh?uFA&`*Ej-LyQwkvD{L7bE~0E6uc@S9iDPb<2ZZR9t!_!%F z`gv8m=A^u_T)kL_6D z7n&9p&wdPfImqWk=*lLTZw7(Nal5rm%H2D49ux|C-K2&R0gYPUMEKLf9n96h$g$Czcvlr4g z6&mnfOMgz7PDpwX<)TH6lVw7iw*ymFH}>=vG~(2>LKVMF#=n?C$H$?n5>9J`zx8Gggg9n*VnYTk!>PSmrbWNji5|)`;R`JZXT;yx>93$XW6^t+@j8*#H zKD+u<5Nj~;%uN!V1@rOSwos|Ik4~qoI8kO_*gV5APl@DU-pYx(+ zO36FiQP*F+qIVGBiuT_IcnLV9p6MK+%mQ#^eq(!%8J7_R$=mw(Z-kpI%6hQwTQ4pk z{L*-9oKW*{21K$hdGEr4+yg_pW-U_Ou-sFpqhC)-t*q4+H5#dX7m@Q0C_o9qkRdg- zO;r?T0kjge(RsrW@GbZWk_T9eUTQLvj83Hhg~vN?Nw)D;3p!dT8q_WHF>NW;fxR3fE7>Q|76 zfNm9+S97D`hOw5*9s_{E_S@E1@@Y{yL~C|)Hoj+QJW*@kQneC-=)h-n^ z1oZ>}^P@KV{vQS!CTBCuWCL+GW)D9kr*zT!={iVHXvAdi5@v7Y=2#5Y9P_{Ikm#f( zATk)Hm5{2BflJ|rIlgkN)Et(7nacDJ-AcK))m4gvY3L_SY%)RPh&@vJRtJyE1ZZ8bQ5!f z6ErjPy>-bl*^xx-req{zyNqqVq4-+tO#G_>F+ZQ4=jA^aT!YD@(G@YiLsw8p*elS~ zQ@@{%)@B0NdmNDEWIs)W1bJ-Lb5hT2>#O1|!?f|VyrDzGN?s&VdZF-xH@sVMHB?{R zT+yd?bgRpimao_|1~GdK%2Gb%#7wpS;3&aer4RU27h+YEj?z-f>4vs;{mKYqxYFkP zD)YxtT7HiAxfPS@*peBn(Nj}1|I26)uFzVps?J`du^Gyq2c*743=Bg!nCk+u{KqiwRrZ;OQ`xV*ad%$31RNVtt<|`{t<7DRdFZF% zTvIRqa>x45$D2X-i1jA+V`20!$2q z^)u?_#Z%tD55aaU30_}e5Rg`7B9G&)7T1cw@H;VL#JOV2&+cLt$GK%6W5na$#*rPc zYgpc>qMQd%CleC0-OR8ykygfFQ;RS`)}s;XK`nfQ>ql&ihQhi=1vdR-RP zL26T-?Nz?lx7c#VBY|Nj#*LXsC(|k?m*j9Lc8LIEZ4cqC*HK6#H9~)W#l|?Ba+H{u zI(;jm3S7#mP*9LvjiKan`=OOI_q?NifS<*$t3A6fp}*qb_s7Ql=;`oE>KmhKhI2zH zSlT2$O?dL}5`qk1wXkIufC~_fsEzZxX(!h5^(|CAoqbog7W`nN_$Le&mmK&)!Tpyo zq|tl`>-`$*V}q;dSYqc3fnDV>m%}FAPr(B*v15XzV~C^+D*($+@l1#^ZzJw+Rl$CN zm#OEP(B1n=fd-=pN_11Pah0MC67d$RC}hCm>5}u?PZ2Mwz{0}{VcE<-t&{z)r1lD& zn>U+xgjIRJNi9aYFDh0)p4o+!+Hl#=WL3yV8i+}F-lIBz4MRU(bLzMlgYIv&ZlPla zkjxdfcPYi_*TLiVc(#2@!)@0!`nvBfBV~j`UnJ0T{%D_lH|I69!j@vRgb~IQvhn%r z!T^%-Z3p&#uEpoDkXY9eKbhG;h|fb{R?3?};5DrVRcHR3aaB>uToV34(_`dDWha`R zu~35#T_GxRhkohzu91gtgTH}5ExX0JONK^J4npUPu);hmX%v0wT=j+rbmwafM|nYU z7eZa;J_)*lk&U?Pg314$W~z`2DC97%Gx{yu6j$y&lCeV12N}dW&YxeQ&!h-pc=LVm ze)(o5-SDYr!IU*6i-15TFC)Ww`%q)CM^0E>odqigN8V~mz|!nwUkNab+w(ly!WD6M zWTF&(A9sjFUoB*&QZ5sBnYB(Bm(3+FOV2X;ek#&HVFP6_Uo5qcnktPG?L&L$lvegz zv@o18Pz(5WR4$4Elb=^@neeH|Xe;xoc--LsqR?2+e$haw8dt2OaPJWV2DXkp(_!I0 zQPwmVcis72<#1sk_AM>W%KGUAJ%fz%PHEGxU(C2iFWxpc^UlkCZ7ehXm|0r;OGp&w zD{$2;|J&yVhXZ$!pnw;DVKa7&u6n8EGS9>Z>LRSz;^66)q{%3;QbVSrhd!Z3$1mri z;`GT_y^H6nGO}vC5rMd22fm0R8o0r8{5v{CCn=bfEygu$Ik#TFQHmw0=NuPj?@|_9YFqlTxKVC7GVxB8-N>J z2exD1)3w!oM^5~vxZxr za?*p7B}(L+BBg~9uSY_!Isgs0Mm0wL=}w&m;5n&0Xl^QO6qFSRrpKjeod40TCPMT& zz(OcRrkV|`l?t;uKhxVT*s#1*;09tf^^1+Nq0GH8GNF2aBRBX)QoKc_I6B(afvITz zb?&DxyBYN>7@CRW44HLRUfr2C)}P3@-)n+-5l1e{r__IKQ?k9Y$;w zFK8J#;xjNRIuiZk29ZOivSIR%A{2cg?_CUX-|%i1s8LOkZrbbO0#uMQd8;Q3=qqP2 z;!`|Y7P4O|X~)a0IB#iGDCi7mO}~L^F$L|x$CPKg#AuEmJ>vM*NbyJo&J0C{+^}{9 z0;I_WgI8NK2(haITf005Wm1ZC9%HBUV6NZ#!jMJbn=a<*QJDSub2#2z69t}%R849J z;w|OKwPx&f2uxz^iXKFZ@~F=|eDd`-f&b!1)&9}IpYjTY)2;!U^772U?FgL3fU97N zJ&J6s4|b^nd=^_`Sw6?Zp3_BY<00)H%q-kJ@BGcZE$~rzHfei=AM5}n3=av*k~B}N z?%ch@1B{4I+;Dy?EHhT`FRdjt`$_hxJR`Fetp4(9=Tr|V!2aIG`+vrAj(zMk)zsf* z^L!IIctpm3Su9J5;csoLQse%}{_>UR)(rXgja|Xujpmp?EUcQ6NFTpEJ82HF9t+s2 z?6Z9XJ4+shp$AHAm})mQ+7KJGJYz#lee?QJ@t*CJ=VBpsxCQhL_78uv*cy+`u^7E$i<1 ze9G9a*{-Ov;uMTkgFK>JCL@Ux{PVN+`DV0B!_!g)MZ!155cg5t&__^%L(mbLb zL!PTJG92~^zw$B)w#rW{iRbF zkT_dgKbT(QY}|iQ&9?JCOtR`j4&b7;W#u1 zS=#+m@X5MFX{GW`7)v8t_&9>3P||vH->QA5))oe31_3Q32E4LY94eS+F_W;8C;cxD ziY$$4qz>*GVUE#XS2NFU+MiLuFM)ET< z#l6sSKMy&1VjESmO{X=Lj|LN)^4?PZZL{I#`7;<{!ss-@3M`4GzYU~N?t)XN3z%M> z^ieICezwKBRaR^1^Nwk$YS8Td!Cf;5p_11LLPvb4MYwDJ$%{MEL|7I_~^YdH{U2rAuLZY#f*Hk_h2%!Lh8# zGapl((cWZ={V~J1zA*B7`ToG@Z8@em6k-T^F4MkXQ@)qSJTq#M)_p@=VDU(X0v|t~ z*ioGnMdTJeB7tTIN@K*6zJ0X~Wk^aDm+=AVZId-?n+oG14u@U7zMCr=?rlJH27&q* zP>r(RNqfOCc7*+aHkF19DT}I(!hIt>TRQI(XGk#g%oq=yMnpuzhStL?4VWOC+Ux_> zQ^hUE0m2H>oHr;qFK5mLn!$P+vdMfnQ|fn3RP@^`lJP3r-@U>{rQP-YniE5nyyE=6 z56MiiFvC;1M69AzcDwO)2P%l2a zmI2M4R^Dpe%(iBi-F-T%$@5P2Qn1t7jPTkIXv$8&fycV@@Q|Q>4uAd}Fk9ca&P)=p zOVw~y#URjG0dB5OW?nOh3~|f^W^V>*dtE!s2AAIHloj+r?)`S9PXY@%4GSJOM5F;Y zRX~fQG|<)8m|mAMj62GVZ_;aKxLwPfNyjcwr$11OzmEehcNyKb)S-OfM2h+9 z`WYQBpfKN_RF^S`;=gBm3Eu|x?6%TO1vOkhcucP_eBw084A|=~UIOP>%DbT6Z5xl$Sdkn|{G%B0jrQX<*+4h_o8bjsf#*+W$A}_$MeFHCQi6V#g1r!jw z?CHZ^I7a0+4Wl3Rs)L@~l0cU2Kv73LBvlnSJ$XRWa&Fn~mp(9AM}jn`BTZzBIBbeE zkV^vbY&vtQ?@p6po7F~WC$C*{WrnnfT?C4qABBqh>+N`+1%}j-OnXDqmi`vdrekvK zDr4UDIgmg>^gwYZ(XC6t+WK0zw$7J;nALmFyKz&S7-$SAn+9E#mWv$0J14>32Um{^ z;Z`{n4s0u61S;u0sS9yQHL~J0+z-x+SH%JKn+1_xE1RpIoyu&pdO-xz9P1_Pc37LXq>< zCH03V+UMy(Ib$5X>kH$EqLr)X#Q;jV;%cFyd{+%2^>m8um4JWL)K9^1OpN>vFFl-R zFf>}n!}coPEBZ|DI055w8h=D^hpZ705uFnsZyEBCtfknZ;3SwHOMq?gIS< zFBCaKd-`4o8#M5v@IQb)lGc~PwAU8hWiU01qtRO9MXB-1hsEXHA+O~}&Kl2+y?;y& zCD?4GQ`jNj=FAp_^p0y@Fq))n@_$UcNLq>lBpy-w{mW=Sqm7s8&BSu%mv~o~{)$mw z5-k!`Mt6vTjiCijJwY1$MA@sr4}JdUGvBc1Oem5ISs{EA&ai^QGTy9W7EFr9z+Dsu zD=Rs$l_*t%6qVfXBt6+*g}?TIjnY)SpTM+5m;fbDIqmAdHI6wG%TYWA|K6!k9bfwaH3YTy|5k{@*7AokiPKApar> zFQRDf)Q-X=57glYnS>;hx%j&S?0U_b{iLuy5c1QE`ELjj7IAt6?Du)8)G-? z!J-3RT~9U37_1Mor}eAd6P`?Qd;QW!J<0D98T50|DkCbLc)eU<31ZQ{Y>7k$?&uw4y6j2Bt(A>?lfpvpwHTT|tJgpB zy>A?JB|Ik1HTSWx#*RB#HO*x-WgiG;FGikgaD6-!YkBazx)! zxo{oeKulhru2BbZ{;z6@5pnyO3N3X$M-$XQ$9B>I1-WKHY0t-9#Gj66**^R}n_09^yvL_bM znhRae;Cnl$(UQYoU{1`@jx1&zcLKgZbOxHJlPJtZR87Kz5aWgAUK! z&}WapdA|WzKzPslZ#uR+DZpSU^@M-v6>bg%Oe8c}-dT zTuz9h&l*L|=F#j4Vuvyb`hy0ch~O`Y0(s3tQFAM5c+@;l zruZ!Q=bZO~%GbpC@XwI-!@$7&oYx4=rrCcEUvzod=0cW7%czFRbP5&R(zFieI=mmYEnzu+qae%J+FJTX#6YyGUE4(61p*5eEpp%>vYG@86fr$ygvU|Vs}HBumX107O6j` zq=?%roX=>BD`|YoHePwX*mnB)kh3Zuh!iWyf#hnIJC@X&fciie%6xra?#$p;ZM!`G zA_#;8vQ%_&L%0Rj^Z78s1Hl(SxwSa!st`c4Qm|B%%7L>p8~ zKu5o$D1J!gm2dT(Jizx&LDSd&q%y!M60xEO27u;Z`-Q8ucBv|I==yi@{kcW>n$yY>mA% zZz^-B$QLLbmRWnfG>t%i`)nUWVAvc{XZth|%4;ps{>Be;bJ_0u+SM0<;~7cB8CMun zbax-reD)tOCk~~6c2JVM|497sc_b%!`)!60&4wio8GO{P;$Ig_!+IEgclS*zAM(qY zmJO9RT8U~vXgWtO9Uakej-7Ez8sl6Ik5O@~_%|3Qz-edn|H2(r@Pe3F5>XM$d;Rd8 zF4x_chJpl1509g+WlHoPDxWGQ=#-uLqVPQ*32gYeqQ_U7BM8GIE|JA}Kfu0L1^<&n z@r1&uX7E{Xpef`TX3jOa&g>C?Qhy>Wms7-^CeqLRF6y;9WyJFOeLV60SJ`F*8PVjDkyRZnuYs}I1g+KX zr!UUcMnl5e2LwF$UT5(bJ^(ipA5_#`30UUnaFsAG1wuB`K5}AoI!qa$plrzE{0H(p zr_3zm^8=Q8(;8yZK#m5Cv-&P=gE1;CIrkkmYwz|)SoH+(SguH_&o_PEyvVH zQpk>UQG3VE#0>-S2Nd3~&)XC@+KIt{J|ka)nb?M6?^}5`Ioc0`Gb(ibUIqpMNmJAA zj&`WkIkn#i!6Ug>^F1v!wNQs-Fxm)NNsnlB<`??XNySYvmGOZ8_*%XkK&KPKan;>d zqRcZ4ttFqmCwMXmiTQSVcA{t!NMgN9cRW09zO!fd?Tx=V4$0z&Ulpt*#u%Obdc{3b z!vAe`ZyFeQq&=$UfkWN3{;W_&_GLx~tI@_cKExL@2VHx2>3JD3E)WpVuN*k?a?Vs?Qf0Xz%k6QQBXWc(W^_8FCZzec z{yX0?#6Eh(ZtXIXK4=1%_&FoSbXv*)mp5@RvUd|JVNlW;QD*aJo1BC*hz#nfWYk-h zcizMAI5@2AkyN^V-ac;DC)&sFGC3}j^^f%aFZ%z50NjW|bIeBG?|-PYIJ8g;9wKL2 z<0aS$iEO(<^rSNQBi~qKio;-Fxi*h5gHIA-NNDdG4f}#Q_9?U%M0vjRiM;TSf2Sh) zuTUqIpl*N3x$UE%dW^QAz4~`xHINy0#;&wm|E(!S7 zj&ycZ5GDK&r-D&Dr!0iWz%ef>?%G2N0T69tw*S0Ft|I`o&_Ubd0~a%5Rg6en{B-=3 zY5H$yQHf{Ub8D9CzI2Lz$@t~FJLjJdA7W3-)9%GA(BP3c>o_(${e5s*LE<5{iE#L=6{zq>oFx_z^$o}Z z6a34eE9&4-QTyHB$(c!hot8MCCX0uoNRMBv=Xw>nBqSuw3-O};FZ^SI(kW)UrjUPbnkb!QP+4&G zR}$u1{>8np6o?_v)~M3j-IgcxppPJ;Y(*r75>nd(wUpr5nt)F0sf#gLdSz2=8|Px! zF3oSj&-_EdL`*&Ojj4_kbSX?fMnV6I4|_tu$^c^l_N9Qsv+v@3+$#3FbYp)l=}q$e z)&RbrT0CwkhjxCIyqQehXC@${6`bTA0T>Ng=^^n00D2fzUDGEOX{~HSPd=Y^%TxDK?_Vfv3WjvYu(Q2>d zTF^53)AuOWe-LL5#dRV6Z&1sP4dinYHwC-j0B$Nz!sR88hqu8Oe9D-oZZqHhK^LW4 zl8#0*<8$@-hyM35cdFD{*2BXKl@G6C2l{~ibZiwtA9nq%y=ORc9I&cTJ6vVaP>vB< zx6)qUOpAoCj%<=*t{%6WJkK!%NEcbp zR&Ky!l8IVpA1xArDm%&g@-S~|MZeK*Dr79(5_M31k>Xxh3 zBWq$x`^BDauIxy%VATQ)YS<^z1{?duKB=gKoS%0ZW33NX77M@a7}$=o7Ok#hk)qKg z&JJGmSw8`QgY3hLw{+CBivRHz=$}!&U;349iU318H=%fmrhnn^GBG(?l5C+`t^EYy z6hN(rsgw;2WIZlR&w1g2;Ji^RzQ+i7U9@E#Z2BFVyZHSr)aC(ffl}zeX_}v+z>yf&gQn+5k0xa2b#{)n5l%M zQO!}2dP%M&b>~$HNq8i>->dI(inU#p^oDC!RT1w-+f2gNbsL8s>EXm(jc4Vq`pKT$NwN$rWvUqDj^IE3Tm=ydMXE z*eWV}KVl_z#e0~L@WWeaPsdF%LG9zd!nK*jtP7V}0nlGi3rdmyw5Ta(Y(EskABA!I zU$I>MUsBZOUu&C_Za=Lf`?7O=A~+u)%Pel1cY`TTo6N(+9+{J~_AGzrBrwl%H&0}R zvQ97IJrSjEq6q`y5L_%Q25o3Uuze4e*r?0pzDXAIRb835I z#wX|JTL+A1lOSYcA6Z)3AZ7%0Jv|ZHyi>32@~RR~JSi~)8X&xBtugZP#YnW8uO4m0 z!wr)`0H%uP$iU&xm#sdO<#Wr@-ian`5@Mc)U5sD5ud1Utgv)QWFGh+lKJEk5nptF? z9=69`Pqqi3H#mfIx@0Ced3wy~#!84D2A2SIg)cf=#mIy zSBI<{lvVpeR;>XOkWG*N%%}dRkL3oZU0W}fWC6D~@x>;^(Yg>n4`{l8yYCB+kC7uM z#f!gGm|woUl!4WIwYbV?Gj;#ga1RsrI`p7pb8H$A>!v1sy^oFe?%!hq6xG2Zc_X3> zOiUX}kW~sEGu?ZEm}mb~7xez^oP}SCr`<;z6ruP#XsbjYqSdB|mlW=od)TTQIHKO&h-MN;nH4@N(5; zI{v2@vR;hL(}hB4w6qd6UcD&qT>ft`6$c6vvybh_nc=UD!G% zS>ivt1`xG!Tn7|Gti7&X1s<4Bu zLlxGrbSkZ2b_%ka%5i&N?t7FbC%Ru7%frRiMfV2gRj*rIV*-of2Sn9nM2p|p+-bTjYcPPNv(NiQJ3j6ZVsRKr zR!4~>O7~NFN))j1Grl6kdG4|O5CH@;s6(`!LzUi-h~SS@sm^7N#Ik@T!=h=(rMT#H z9t7h>d}<@eM(X3w^T97q9XeDF@Kk_<-~=qS8$#>^6WTf{(;#wMxZF_JFpyo<(;)kw zHc1fjOO%0u!DS@ywOSiCK=!~7^E{bqvlxplxE@eW8NbHD8hc~1@=mr%*%2Qkqv`R= zE$;VsRwGkno|vR|;utsisiTdu-1v`W?mJ24A2CyZGiMjeXT3%e<;4Kn^RHaCI`VUi zk_?y_&#H9bR@!l*KUi8&j1v0AblGMB#;l_=%L1Zlb)G$n82CoB5m};Z=}}rtb!`U>LR>Mu~Uov|X-@rP*NoA2q}SYEMNS%k!T-4h#%90!@Pa zJ~r~z=;ahU`e%`bP*^QBxW5LJJ6o|E#;HK5QHyN7T1-$@;Qf=YG3h^@mRD*f9JtR74jIMA68qa%6%0> z7ug)S_93nXX(ach7#($#Eps9QI2Ce9K8m88h#5U5AT4r1ol9tN*Uhw-R1BS4lscUX zc!THi9QChLd|Q4!ot=>1l)-Oqk=J{k`*-5hxGcDxPvvMbGBc<1)u`QCcbvLg#0UTX zZvkKa?Li;6Vh&9SIX7`O|*{#-p z;5ZkcndfdT$ZSh{JU!;DF)ny250`c2Ai4`P_qIKg9s8*bs9Jy2D-K8g^Wmb$o^1sN zL^b$(#3IXN5Op$$_HgkJx!AkDy=kAK9~jR>@w8_ET+GLF8+*A(G;4udZuxw8L*4sf zN)ukN*NB|lZ=mB5V)W3VXtc#z8u->KB}t%)`<6AM7h4cYRLQZx$n;QoeIj}&)AiG z2me~sUTJ&8hD$J;v)v5B7iMI4qVQ1|arzDGCXWAAS`?*M+~k^fd3t=`T zig=!u^WXBKLaqPQBtJg(wMfFpj0it@-d>dZD8M6Ol(eK$Xq$V~Nmcm)tO?A09IMoTdznnR87vgXEdkzaAgWroA0mg@;NM{M~@f&PmpAsh? zQ^+JwxIq~&CE4o?t~gQ6wj@rkNLuw_XS<6Ekg`M7>!7qvAdn{3Y@^)XbO&Yaz4Z{qHJNY=(FCQ@!@!qe!6(`u3Gwm8R#zn-Ei0Ufw*kw{_9%$!_LOim`(UBZO78>m zFJ;LmJiv*u2=MVmClk)rtI{n}dL~(=Q&PCy7u6LEAulEpVtfl-UPhYd_LdxZKUqDEdpL zm1m>AOTvD&OVQ_OsHT7RTi?o}w`}S^Ih`^MMP>s5{*?ag?&IB2IX8uNlVP1T(a&Rl z6V|de&UHNoMHRWy!fo82SF6Ic)>+nqpfJ&Bt$!)>2xqoIdrw5fVAJ(eCW?kdkLV{E zq~%z<wcgAPqmLB!@^(8`jPj;qK_QMa2R`mGI z`!H|X;|^eohWWztxC3#k%A_Cr^TpJyco;Sg4m^I1p7N*IrOc;LL+uY091yV|m>94S z-vThCo1KvCFZ zKYT>Ou%&iqd^S;0rl;`vw);_a+xmE=1KssJMEE|tV|i<1%F9N^%XRZj618nVsR(Kb zR)`VkE#Pj6L7(ORQ~L3Jy9+GjsOa4UN7~?_<+ncZA8|1P2Xcu&6&f4)cV3xd>p72cRI`TNX1@-%%XJ6~gm=-sC%q zp8HlLV4`EZm{;7fJb-5xLZl53g>EzvQQluUUt~~=0LbPssUOP%{%(nkP(r66l<${b ziPf|yPmfhnDwIQ=5Exbaz5U3IEE`{EIf$Lfta~Cnz_sDL8z4N&Rv)hiwF=RiAyR-M49d|G5D?t1;e2y{w2e*59!Q-e{=FWm?dQ7;?aK^e(e+6tr{Lg-V{KfIMcg_W zm(%I*y|2q}LYyBW$6Xom5~=r9vR|cuxFWscgU(8coP8eSzZ`}L^2Y!_;9s(5+KgXs z_hk0@u-n68HAnNB)w)r?E6WgOkM1{RC0xpZzCBr_Mxx)<6ESdsPI5448#F%tA=XOL z!jGEb0`{ygY>@&!nSh|Knv>8&JoBaHitt|8V+%ws(qk1V=khLA($wI6U?CZ zNSF;%_^ywSkGS~wl4LyFTpv9UR#n>c&d~s8E3r4o2OY6jKT}0S-)j`#S&i^ER#Zff zPfQ4gD>xvpQAj&rf>^Y|t|=QrT8Ee*=`t%81AMx{1gq`%ItJs@V+@iCuiG0M4~`ix zN<%Qo747qXy$lRw(XAWZohsgGK5G3NN|0iCrli0|SzToY_g${?gQ+BEc@1?#;+;I_>*0-pfs+X=g7 z#cZ#*urO=Jz(WBUS`pL3VysJhud5WHppdAi7<^*?lUjsz)uS6XA`e;&-HHXck zwo=?&42&%HfA`rrp`p1|o*03?S1<;~VcK=!itJGL81#ykqM{T!$(2|iN*+o|%0P$$ zOHjc2x=GXBVYB5TU)uhvh26O9?y?*6a5C3&+P9E>322R6R;{>`o}OOwgQ}X^f{k%4 zqJ+eU59^2KV5tpX-$+v4!3N9Z<{9QQR1oDTpP%3z{wWC;tvLP}75T%flp;~6N$`X2 z-|ej}DNO@+T7^uZpK}YZ+#A-yUs~g1yplFG?T1_G8$)?lgF8D)b<8C@>QMojDM4O5$8T-ay!wC(9@ zimtu=x$3l^7n5pAW5MVoq@Bo=?-zb|JKz5j3h9aYE!G|feJknAYu70G1_~PxEDa2j zaG#I;>G*T4a6cjH9oL32gZZZ3-(zv&8KTv_QcB;nhi7C<|ep6kGy#ZDM z_6ybUgq@y72Y)|c|8%^9%2mPXr|sdCa^Y>&8Le$R$kT%y>T8sqP=gEBptj%cb5mDO zHyx~6s?Dpcxlja~Awy%n7EDzdeE`ghCPeHO>TJ{vyuFhprB0~+?)nAnk&#K>qJjo- zLXQOZTR6>3YoB_3MzciGA8Z>p@O4@~y*`+$4oPIumF%;(?T&>BcZLt1c5v428f*rT znhc7ypF#H(s^&V^Tt*i1N@lIWX5D4t6{ly$Y^Rv-o9EA6$H)34Y(TR<_ACmiucBz) zsCU)Qy1}!TrMqb273-0W1rYoECH1Y6#l*!K z`Eh)_B>rl|iu`;u5u1VR_c`0c=;>rwi?H7T7{iGATz8SPGC=MR?0j-F zpYFF3-wR|tNqBY`O=mI;TFc>6L4Y^No(RNWgJjoi?Z6(Bhn##-&Ngn{sdCc--s;cE zp}IIrO(j;#C8$j=DQO9fRddrKZeUh~CW{*NtuPJ;`xQmUoX)g8)()FNh5r;N6`vq} zMYH>u_CBB>mG2vxnJ_5qgNZQz4kP4`L{?c@qP4SPFm*wripif^_mr9U&yTRXC064n zje}K6W@b5lxaNaZi00A&Tx~6YOfCKNNvd(Z$BUde+Q5^LvZGvpG83UlfoWY%=> zz@b-s1BLqemFiHX1UEF$L=7ho@iL^;F%U^ZdHmWNDxFdznoI}r)yynk8u~Nh5E7c) zOK6f<&?@Ljz`0+et*<#vIhwqnq=3v*R=D&csq4&pU+>X%QN+!^2EBwhKd)S^fRUn= z7Caa%t+WQA-)L&m@Jdneph`%{bLJB4t~oKGpfq|1)--e{4+@s#WVUezsLq!FNPT+X9Klyf1#FRKiN0{IMWvv(p=yhVybKJ5 z+I?!~a3L_q-E+!s1wBMvgUMp;?2vnY#L<$Sdd?E_)y|;&5*Ak0-|-InWb3gh!Yi-J zL@!;FycH>wbx~<6ae;dg@N2KjAV29YQOKXxbvNY7)47CTR7v(ilNl*UxAM}r(BUIG zfKD&L2u4aOZ?EI(+CRjnh*u&LO$BMmXirFbs-ZkW63g&Dj~V7F*rMd~xGY(ypbY89 ztM=KiyD?pxMxLAuMHCex5o=e2?$17imCAW_Ok<2M-5~=%k^WwS8x=-@pq=a$fJl3hAwIgR^*BLC-i% zrL2$sQkC&Jf@icxE@nE`^l2FP=vnOCU85u0e7r!~3%*EUq)vQ^qbg~Z=+nKic z17o{@<70aTGqkV`L0*Vlzwo^RkDH{l(Qnzti9kGWvn5}n!~*;ZG!UORps2HC#?vFgz1Z5Bn~HYILu zLXB7?fUACqt<|{6E6bmU;P+Z98u^Saz$PyR6UROn5d^9xz;@wb`wGL(w^^u*pp#D) zVQan4an!;UK6n38sccV&xz2+2HyCT zlkJ<91R&fM2ME@9m$%+B>3g1Z2jAsT&QrhFH8Z25q*9$IlzzC4%nR{3dGX#xwL~ea zrDaU2`?fd%4+XSL6`kS|Uw0JSC((K_sb9ZxJfR@)yht*V*dCm4fcx2I5h`5#f^Bnz&~?_BgYCd~5{r%lrFp*E z8aHac^Kic7B(O~zgHd3r!6%DAJ6R0TID-}9n3 zsv!oukEL+LD)lhhn<`VTQ22>UwdS(5K4z5W{uv>osVOR*^sM>GabQnT)Tv=%p;nid zm-ohTUHaVulfBvF`GnHV@yGp3lt)X;#xXyG!fatW?(6$d;Qvx)tE>h zIxA4pYbF7(I zSXQzWJxM-YGMJiWtoWRNDa@(*8vezp==+*tGoDe91s{JEs1yg(Pm zZ!%d8S{!rn&qZl1)OzWb%ha@BwyCh!`heoVE6tY!0TR8~cOh4Xn)<<@-Zq1sBbC=_ z6JbY6Qc_hqw31~1G`Jkd;J5ZEP+cp)f%gGwd@m8 zRaIrNzdg7e6C#xJc%KrpHV28m%W9fWzMQUhV=5*9f0M|{sY>RuuH-G*F>e{P6R;|% z(s9GFuk-bF?oo2e_+4Axs(pq<5e@uPy+XKF;_8sEqvlUl97$a2JdC^&R@zklzR8eZurR zb?o^sZd&h9JQgon4%Ky$S&(?54*bqX8v$B@UU1NdkY6o*sN_Ga`~M=R%PcGLyNMGSsol`m*D(%PDdfr-m(#AG zfI!Df>nJQ>Dv}}~ly>R_Zp{u^AYN>boe8vCO_!`*AK37(P+()Pl_n)66`RO2jAeK@ zDh8Q(k0pA38gNLqJ9wB?FZ}){vlc`@hZZ{QuSEivy+Xqe>yj@lDG5F3wwg1fC|F&= zq=ehh!*d+x#6Q@I=oHn`f~8p^R8%`i0iSZsFD!&%$jpVUt??C=Q&XRKQ=nQ|tJW|E zA;g@1X7T4zeE%NfKtV^e?=wGOy6m7+w@xpEPYW5M^&RRDHKKV=hgMkEwinfPtlKnh z*SVz`-+uxFQ%z*3C%KHz7IAOw>XO4?V(Iy`uH9I<_XUhxD1f-rDls8p43({AbQ4Fc zXNG&}lQ=JZxqfpUrTRGEwf7|`bq&HLM9yd)9TZwjoW zc7%(P8{+r%LVY6&@Bdap0?%g2v&10IUh#&}D3ZfmO+Ap>WK$wp7TND(kWx&EDDasH zxcDeu-eI;E=^SxinSkiS0^zduj!?{;vyvmIc|g^yB&bP9t{Ok<$^-Jh49) zFgI3{j6up%Jilwj>sFRnOXOkEdq~Ut2~8Pe`w`@%{#o9Tb?KKt$ z!J5|k`}wzLWEEY3|K|&kSo#1wYh{QYBZX0`sb1z5ij6;0e?Q~-FC3-uz4E6hyC&m= zX#1NDpu&qF*%@SOQ!nqEMJZT#e7Kt!=3XwzA(wdjw(t??xX>{Ms@WRT?3zZnH61sq zdph{io-xw>H$$Cp>0xS72deY_vKTDkq2kA{+l4O1Rbjq=xk`eRjho)8dWxZ?!3U`_ zqk;rKOO9oUE+)VG-gJYBE`e?&w53Ji8zq`sUAgIuCMr@spZtn^cNEk~=)EMGLJ>i} zoK#D+|9#+hSW(fimoPxnV-z&zM&;RaC!47V?$L5))O1X0djHaT3b{n@jNBvm)6h4?aVh9FBt1puMl2rbgd`-bH4Ofww0=nzfK}p{x~eh_bN~3m zv)N9(WMa}m_xKESjj22iRH%q2=YvQ~?<(*0^`pZGksiCG>XjV_TxroL{#dYDA&2wK z_}Vf}j=K}q-!}~RD)_v83r&NQs8F-#nRzvh@phu({m+C(Wp(xB&u!)-+n-rbi|oJa z{Gwz5rD_ldffRJ%6yTWVCyN@1gAf$bd^4+OvzGWBsM3UPEl9l1hC!wuCyyyt-6^u< z(_f{S$^Xp!(2VBB`5{FKxI22BzQLDUU(kUNZ8F5(0;>pXpGSYnLr;7E>Al*GukNy$ z8m1*PLbcmkkEXD$c~NK(GBWNk(-#f`BbC6$FJA_M!ChDUs0V>dBr!uH*1A#{?3fDt?j1Cc zqSKE+P<1Yx0LJ6Q)&F7@uHM7v)c;@*|Brk-85k^J@9@Evi(5YEnTz2%$&y>}?UsO+ z#-6m>b>PXsD?_8~kI2>1L(ZV_MW%w%Cj8k84Bkr?+JZynRzw|EzfDR>hxT3@A7^I> z`F*bTb=dm@5dvZ%ffyXMi+9{-F#I>!lpbFCgP~lq zYhE!`ag7b90Rg!QE~Br+kFEIz%I(E;G+B09T1eA6=O&cd1ZgCAjx8Ru)K=9ZeLNmq zNs)9%IfweaYDWg*^Bw}Ht$+sSg;-Wa#kjZz(;zOm^_eA6us^qN*BCc!nRt*QefxH7phThD?c6u-I|C8X#U|=3u10)XMC@7~F<2T7$e9+(i&1J2 zL!zv+OZoA~V%Axhc9pFfk?fB{EMYZZ9D0mw?}w)9(FuKIY-u_@3jgpgBLd~;}3idDQ}E-tARzTQAV$|Oof zNtrmakQ7PUp9M^&(~t!=HWHX|Y1J|V#rH9>M!*Wm#TA1B0Q|xeCgSdnZa5?jKy9lD z?}L2xA=5UVLBI3KD{7Ba4}I5bfH((;SZFCI&c@xrVAlZg-SIp*-t|p0MPFC+MaRKX z&xXU^`i1w-r|U984KK1sg!E}*pkIjf z0nI^Bdl0liPK2Rh)ZboNq62h&Hqy2dT|hFYAsmc3lN}Ee4y4|GI}wj8{EmCJjG0HT zE8b$b>1u~34S(vmLq|CDuMq}L&LAtv;Hntg2ab%l#5@(|4}SU+P>X!N2!GMs=qz)g zU`s5FdyCv43PIs5-!hv~g~(TRbm|t5$S{f;&4;bGeQY365K&37b|ItYSR|h_boD48 z-WTqSLAdSXW0Nd0;bN1^d&+EX`b>UBMn-M)n3xLqYfTXm1{Rhqr+YLV6zMWgI`$-B zD@S56Fp1H*TD-`Ef+&sfz{{oHJ>T*KhB6{&Csb~se$&r4>x-B@9Gg~bs?ur(Fi8h~ z?IoZqlBIP823o8t=<8>_)~Z|cai(ICK}KrQ#xht{JI*E7mpI#0$h*F_-EaS*>v;ex z=O_GoT<%rAc+Y)H_(t&jui(Bs|M4Ei{Jg;lhXS0%{_=K6R>X{sGLwSV_N>Zaan=Y4 z3|2@Q@!m{bUq7#gl9TgMHo%wtqdL{aj#F|FCC^K%m!mbf-tkG9zf&?N7+SAhy_nG_ zr_}TTn+Q>^=tE%RS~W;Z7xJdu-;|7|nh1DGt|@i7s{;930K+XyHpo2HO4)>dGuXd% z8&>D!Cbd1DKWhI;GPb&8KW>1zz!Dh~Gn@aY#lNe@pi{-SX_9=6Q!R5d|7}w+T>Z`M z%&oLSP>5u<7y-kZYN`YKGE~e6?kj~Lh(5`fMbGyX%8q`*m@hRquQ0^=Z|{(1tkCao z%pW~xds8`ugKQUb67b&-r;1;+qTlL_Fe<$LEXi~ij_ZWD_4|~B4k(a9unNn{{{9Lz zeNp#Oy9{=03otg>3Wjx;>s;dU{;Y1*xyD|KWeI{0v0$(II-$S)}F^OK51G3kyx$a)Sck=S(3)ifm0vT6W+ z{^u=)a9jG5S=h2)+VNnGSk^o6m)0AOCxgUU*)7z=WB-4J`71Gzs3Obnr71RIUol); zbIZoQZPs>CHp?X$DC{3_(yyha>J0p5&GNcaWuT`wM26{DsIXxA8Pv8wUag0uL>Z7c z(OGoD1%jclW5H3|o7$sVR~DRamRMou>8PJcSj4czk~&wliWBauf6$G6t#Lok8Agc9 zjbvg>Yil$67+5F=k9ht8M4774Lh=7-`pU28=3= zP^7y%C8a@-RJx^=P`afh|2NO?eZO-t_o;pMS!?aJC3rX%p7Wr`{39Cu!$yk^qFy5h zD?~7$Pi6P%$q|At@vd#YB_WFK_=ptnyBa^o@eqR}&|8(mEDR*z6(7GS`xw~nk@CZ1 zOC8G!3lD5YdJb>&&7C%-Jz&2A&gjWqnd{AFkPhLwlPYms#aW z%*jce+x)x6e}Uv%ydV@V`ABRRkvU$p%w|b^rubEf{jg7)B9jOrC=v)X$pGO=C#Qbi zlxI%W73os;B4ro1Ua)TfEG1vm*Ti6=qm#_iDc_0F|0_;m3m{7JUw~6mc$3rg*|UMv zu?`mEBrINN>Mzz}E8DfD#(22P1n4tx!KuVBF!(12m5l5+t%=;Qat9UXuYn`FV7M6z zYo*;|5MK+k*|_4&@XlT(OUsghcgf~e&# z$+8}dq;|v)+||Ytg2(Cdb6}?CL4(?t{9K2{=x62rEnnp_g_=}dTm(>1BDH`=3=5ky zjNy>M^hyyZFZt8|+R%jidQLR`j0W+SO%wq!#mu+np2J>jSA@CY*hRXi(&oR|x)>c$ zy(i^Nv*|6qeP#EDhs}u3`Y^D%^OCm^J0*>n*`4;9L}I6xb*=`TJm$l!1-K+!q+07< zOKaR^y1nSGsZ@3nC9!;v1lwIG+3$kf-@-GR1?5A^|x$?by13yVBff?D_FUn79i3 zTm&t%uddX0G5~k7cFNw6``;9P@h*d`=SA$mq{t3~5=j;xd+jVA z9o;Y0TD81qVsBxTNe5lTC3l*Zommp`SZNc3pi^?+8&E?f24mw()P$Y7v4KjSsI)3c zi=p}fK`xr{8@{wWm$V0?o~AVB&yF}!PeBy4@F}1wkvR{6;q_xy z)tN{BH`&r>+HhTfaB7U4GoO zW6qM?XZF!z#f)kW&yqelfHH-|9i$?*oRJEULc?q#if;)m4i7T(FOi&3Pem+n7BI8x z3P`6$3p0s{M9F%Km*5(iPb(k=_Vp!nd{_|i{)kzYRskFvyYTM43y$gaqRK-{!nU-lmPfb>%x?^K8HAy0KGe&xg022gP8I zFB$Quf}^(N;m4jIxm1NG?ZzQ9bm>I1d;m?B0m!0~o2dT{6Bk&cW5pDbTn@#<%9t!ro0&szh=65yhAZH)A-vSM$tLY&%;T5V_1Gf%q9hJh7YY9o0HgT* zjc?+mSIDe6-+pAO^7n9Q*KIX`mT;x}=5jp~HLS(LKBODDUy8zi;_FNAI1sFt@nSum z0w2GJT88(46My<1l}8m$G)_>vG~wDkANZp2_&Mv+-YWkKd57Ao`LT%1%W#;s@yD-C z7YQ-2b?6fE^$WWPG?%yR92_N^BUhSkZl!N)iJ_E#J0qu{M9GCk{tIVqNn%g=a{^KT zwvuvXjzHKmHsDUL29EuTsyX|O=%fGJv*RuH+mnI(CL8$GE38}P_+^o~Q z&oUJga-r3l+HmCdhcme|O4Yu}a#tX6Y_wAtmQuu5-W&VSNRHV~3Fbi^J7d&oP?u%5 z)f{(XAh$rol7o3)@+3;PdwIiiJqQ7gniNvsFk%p9e+KF&RZe&n4u_R9#-{}*e!aW# zCRd%bS$(}B+-fX=0n*2JNrS`Qc@%N(es%+Rg@gd1&vFI&agyW{*T$P!8b+UFg{E`T zSy?N0yF+-0h)!qsRrys5(D6}S9w1|uty2?7HZp!5bcYTX@4}KA09-f-WMmu=-kdoR z@~*i!gVjDWs$EExa}t7(>yem$DN(7RjSL`tthx|4=qm*?vRzSn9DXTib-_tV_U;D$$SoS{k<>I#>blctf zkqGw{#K&^;u6HaSUm>vU2pX4z*!*yLF#Hy@4o_+`7$x2F9dLM7QN}(P2CK&<7vHP6 z2h8;q?}0;Yru!*|mExxWITD(S7CSSum1SxC{PGT>8g$gXrTZ&IVq<>l1tn#Rs7;0e z)F2f}1;0SBygc4cHZ@S8o->dB|zw` zL4`mxfhQ{y7fr;?)eB|7Z%@8#oZQA!yb(PH#YVKEf^_dBCo@yF!4{`Xvj|Us)R;I$ zSaODpXRJLMS?t~8MX^KXqNY>ziky4=Tu%01chNg01Qy%p%+zP9_;{ROkN)KUdnKWq zpFtw|QKN4u?B!D3`g^zLcSd*j$O0Y?=6gh03J))kqs5f$8G+581f^O4A;RWD(FN?4 zNc8}4Bn%>EeC-f=9P+}N^h)vv4YO1?8|3GDaRB`>fuh(F+Xr-7yJ^J!l9O!{YEO^l zFa)hvigCO*J1?)Gw_uKUs5_chUq@$ZcgFXiKU-}e&Q{ZmH(ObvjqiSG z62UTs%^dzw)s%cLs44_L`NWUAZTK#5`Qjp4`DsD#Ui-~Ka(w*pgsjlLq8Gb{X|C7vMTGWX3GF26 z=%R3gS*g^w$NNq^Jq4Pu?)gmSgv+zirr1C_wW;6VzAP39Rf>H|jA)_FBEUKj4`I&@ zDB^mR_(b~LLUr`!>PamshTYh|ouPZYi8&CaTv5Hn2^?Xl{7mqxt!3MJIMTb$?a;l^ zYJT7nuQgowsHvsl93N~0bBTnXAaMlbCwx;U4`#biC3h;WuwJG*b8}ST;2YVMr|wx- zQYf!taVFYQ@n#vH;Mm-F+t%nX?;1;y+_xnc^wI=z(qp2oGe-h$dPVTbt98E1S>!;v z4*p$Y=B3?NSWIYGO~@n)x@ne%me%mU=U&sFbR!oRKet`xyKj@s?fjGgT4HICmOMRF z*C+r~Q+K$k+`dres!GO&H%Y?YP;6BoxaeIDE$tUqgh(Gzn+?14cenWNxx?eB_L$lw z;bGCAfARf=mBpzoh@RFZ`1iK~lErRo?&IQ`&**ZQM(tSdRti)VR7ey>e+#&2S};{6 zo@H5E&XLEi>uboPpp@)giU|rzznEU{Cdb9?XAo_NPx3g_*YHk~$5O*~$RMf$lRRiQ z{x|bR&&PNao%MBf6_=Y!rqL)J*Zbr(!&0Rqg?-lEWD0HiJMzs|_YCw*uUWfFb&o(L z&fXskhKDD* zU=>y04Gq7sEa4(h1Tf|0BI@kb>x5eQZz%1km3dbooo`EJfsa2g-@Q@|B;%o$oZ%!F z@kw3ra}b@#DA;n2&Xsw&KsPyR?>#9oM`1@=^xtYIfls*MiU~3-ZuFk>aZls!jCzavM&TPVIFEWg z!HXBF+6;klK!4gq=Z0rxbtkRcG?+wSJ$iW6prK*OSU_l1yPjd16=awdV^?O$i&w$# zyJU$h)N(A8zyV*t$44;mA?25CYKyNoCmV3SUP^b*f_tB>2xdDkvAL2fxo`1YbNky$ z&i%>H=iHmC#-Z=W(PmJXolVghrq=wsR8N%&WV|RIJFx7GiOCFZl)Y4O&N^C5%%EX) z$(d(%v7;x7cIVoY5M;JvNvm{ir&xETo$G^!oJPmRAQtu-J3dbX1E?vF7oRZ0YE5?a ze@h_*zHSnQ} zZ*?{xYR!*}@}Mp8F=ez^PqQ%_RM~8C>MWFSkIl091kK_?3KW!otd^k2pbgc@B654h znRBQ@`(x;3Ake)-nEv=rUFq%Oaek|%kR1^i3^ou*S4v`J*H|q4f5Vuag<7&?B$&$o zB;yW`@GAXdzg%7}pv}fadsb(MTlLq@$n;xoajo6d^uU4XI>V6t^@+Hw2_p;eHMAlZ>te4g{~6s5sM=3^nXVBlEek zE5L`KLJCQZg@$c9c`>Cw0T>wvGa41A%=y>1{0u5HeV^W<&otJ(KXHX`Sqvr8T{M+? zPDXVF%aaMd<`JgnSi6WmD@SaKWVg3h;d?iP36*_hwZV*j0+ zw{x$xM~jhyU}ALoVHYA+`jV6Q-pZn^($(7(*iZEqy-kQaJsVkwql!CYep8)ocFDGaCl;9(E$@Pru6WO*xPheBgDFN?QfY(&GB5L@B9iD!rKA{ zHo=XBCb>4)`cQNL52i=o0bQDYZoTzQB#u@=*ojYwHW|M@bWa&;#lRCDM`n z)4L7wyXP5w!v$^CVE3Z)sx^u_Yv>r%~Lqwyc>mx{f-vGiIC`cH(=B-BjbNzjG7Hb>ULHACI>B{Z3nUZi@ zk)^YhoT<7ydm0tLp3g#7OQ&?@oS5^mmW3K*-J-1%SwWn74FjCX7UeK(EmtPVq^j6o zG8I}!@Jmo_c0Jori2D}uLa;qWdi^k;+crs%!jD1svvvbfi2|#D3vip38);~Kw^1+* zIKj~f!mzXqA?Iq!yiH+sr|T5OW?8qyeMzoTV90$`92EFnNkF@Z(f~+@4(Q;ky4Pgg zxNRLBB@+obVM_e9RGe?tO2#0FU;bUi=zqRWBpl!Pe0vb_#K*=!Ti`3KeebeXL5W0Z z)WWJ7ZDv{1Be$TI<;Fb_^mR}{JMV4SNqGY9tKqwH@7jVYtev7?Cuhvaiy01YGi}A@ z*1KcdK7ER4LP^PfQ=uZu5{e@|gGWIjYb9?ko95!y{xwienT99t=FO1JFG(aLVNqH) zRn;Q+act9I_8cuh|0)}McdR;E^70ZMe1u!TwSG!k{Q9mBu$hlSTo>S@yAWDr1#{{( z7H|z73|2Je621Do)*n$=*xnu$B0q*K4pP;C=k;2U30=QV>8Qf7wU3SYP&OG4EeWiU zp5_@Z9F34ZJgPOGmjSBfg)+VVjsY~PeM=_~40wvX0xNi>rs$S7`f4F093Y|Kz8#gD zpkWSyUngERbDCr#CwOxZc}yN+e1nDu`lY&mSn@Xa)ZTJmk%5Gg7TT&Las3Lo#0CXL zX;WS#-!e6jF+1V!3^FLdh<>+U6|Gbm?#z2v4OhY;jxIojZpCw9CbZAuQV`*nXeaa3 zCSkhRsBb(Y;IHg|d$JTe0*a!Zr?=b?B=d%}`w>kL>-3a`ZZ~5nyVF%*Lqb8#bk)&e zc6O7;uKT6)&l>Bi^NVTmsaS?K<^zKrr=Q!V!Z(V<)N6d;8aFMuj%LN?qfwY+NPPdpBMYO2lp^=o*nG62kxQsY)MK8XwzxWAfTd+ z6>vOYF$4icYkWg-Xdm`R{Can&|5Z6<@Po3FU~|DDLnKaT;+E;X{_#p{mbdqoBOcqE z_5A#`=uXxi4iQ9H?ZFF)8+4F2o=eIH+>T5CrG}}~Qvh)AM(H_V$~^-k!j;JF`~~&| z@iQ?XG~^4?S~pOT6=colnLCXgRzLb83AeqcScnm}XCRNYQv-i}y>>rw&j-p>fh6wsuyH z>digj`Z&0DEF?O5OM$H?)UWGxX(8adFvLhO?f=&TKr@ohPSyDwu-STni<*f>WNwgi z`a2Q`ikj8@)jEF@C5uY>l-Fclkn8<9Ay|)UjRgeS^`oZy**m)~h$$eruvKlYrD!j< zny<34BT_SZWfMNY;P7;gav*zqWcS|jwvd0%V9h!ZWN$IT2-`M+cl!=yx)9`H%X% z!CgzR@q!>$fzdbYAP`BgZD6-(B3QCa?GN_MQDU#C^IH4J5pHo2td0bvj{#lqqt-8` zzKh+LsQDXv%2dl#aE~@$PkZKuJx^Lw|4bPuC&@pVlWFx4O2Q6H7*X#V&0V!}qXb1VMM zykn^8{k~33NNlKNM=%t9hiUL! zmlg6-{)q*_evKLYmq_2oFor8kP3_2jsr}wTC~%9@b3ao-Q?t;IH>@(68d9aOCXhv{ zriVPC~fuQ_i$s=Sg1l0>@iW3g%O!{NH<0FZ-}_PPeMjbZ~sK9q#p!ukzGk>_)9 zo0J24YcINg_@ntOR#4DB%;zG;e3CKmF-EV}U!DH$xqwAz#YgEQFoHE4maCh~Mfch)cNh}ut@5?xd?pHLEXhvNr^`TJU@8|IV=Yaga zaQF#$-lax+lm=V1_Y?0iEPxOXUrx&cE}ft^W|SID3!EKf$m!|KZVt}FB&U?kC3jKG5 z{Ei|=qs#(mLGq{44Lv-VhaBtmM_CgzmqRO}R;z(4CP~m1R2nslAvnEBgj62LE}lan zDB({=#d!6jg#b;V71s(fxqVJiQW7j_Xc#l>_pDmd(=%t?wYUK0LKw0${?(l>U3x;2E`37Ynff56o(l zGd@7oT5(d2cQL3-DVYIqnQCj@J)Vsl%V|3?-a)F%-t3kQQD;dqO$Ua9WD)p`Np?Wd z7(wp`e9bj=4Xr|J5h8Aye~rG#Ai7JX2?>+9Gi9K>GU`|~q6vEFFx?Rn{x$M`Ox{1(*f03!HWI7_ zfC$VkgXD|Vd~8tFi1H7G)GG`Fb64KAJKx03rXDt4IR5$z0xD9u%u#jHUkyZxK&1*ZxY9{66JH_V!cd=jIFgw{ zU4%iTxHnNpfpqEgsQsD!xq_ng@yqXAHO}~hnzx_j$789?!Q^Y^A-Y* z2aw7Y$+g9_nl(t!`#)2DZTG2Zi;`1%~p@O zoR^$F?E#xSDqM9>>4Zw8hWD}QIJK;UiJbk$Nt?%*ZZPnVxe{P5d?86?KwB!x`^GW* zt>9yny`=XF>nqx^c?(Lc^J4NDhVo-eKPp8umZ`=v6~E(xDP+2{AP9l2cf-1&3EPn} zs_)yxT<@A#8VjFr?r}!=Pulk)jr{h6F9ce1n;?SheFQ{gs_W~f)!N!0(X~ zGg>>&4_?Ku{SX1M=%YVyEvCSD8$w3<|3k}Zn^e+sG5TThjjsr&qb}kwaQ_p|L z0=_>Sy;V5eF+gQ_2A}urmzwd#nuyt5^dj=thO8fZob7&9eJbY(~RfiDRTwgXUX$1`nk z9Jzm72Zfcle@dKI&#`OZXoSv>1!fC*oHY1i1FD89rL~gzcXn4cFFwq~ON?nNd8x7V zp#PgpXvU{qYNg!JlCnFO<-1JU`tQ&t!QnF@1s21K>6+!&}JeFO|Ms^w^n19Uc?@)9mCCvoFhC+xCI|%aIGrA32BLo77&3K!ndkS2}A*^%N@`;jCU? za>va)K7^1*5wn9p)I5>*cpZX};xD-gqx*hfTY(?D#>e+{zdks({Uueq6KwkBb@aB* ze#BU5@)b3v+YFmy74b8^RtIygTG)vWc!h@Q=Qo@+URoS#I)OwAKNstU(hS3)Myo5v z06G_h;8b-=*+~)`D3zmS^;X1(p~Ai zqQp63U)g^}q3r$hCTg>}j(^u-X)rY81NPtoZDQ_v>DqDXa@|V>s1Fq6j0+R9Ug0OT zTuJ@ZRL&IE%qqFg`l(z3!ZV-J6UH#}-ty(k=vG7@7g>F>+pphm7-|`iLe@AjAww@= z#pKJf+vDr2dRM8q`0S;I?#_ja{G(;#uS}iHMi(2chBxdUW5=8>W1w**hBK6FtDS;; z6YGjE_V(TiIDhP7WHX$5iyU%6zHa+V4squE#bAh-`r_JVsdZB|w5Vyw`c>Q&Z2nEs zK*~A-u8w;`1ftH%%cTDE@R9L89zW;T{FZc0P0iZD5am=&pt*)+f#nGOjFi^l;Fd|e}^?R)DJZ6z%{V!v^|Qd za1t?D1sD#bi>jjHTnC#x+Fo{Z<-$&6!7Ef$CgV8oGNvNEx9{f5^(QptvS!}#2`@Em zyAKb_AVKES)NESY>iNGs;QHJ}+cRFBiGMdvk%%9q2Jm1EwuZ9uopjW$ z(9gsZZo};>!GH74PtAj8jurr%6zCOte?aLG_{B-|a}Qdcm_!cEAG>kF;FJE%k<4Z4 zlN(`gk{j>6@4k;48@c2EOdT9PFc0vZd|MtEzM4Sa6s0)RH(73G_2}*ADu$itJ$(h90lwhTCi)LrD5S>{Pmya$F&xg1G4(Q_96%b(on~l(u6rBa=6bTC8LnUw>6VYGx7e&Me8QJ*x|-3dXaU@^vA>K%M2D7 zXOhi?-}}PC`0QW)7@@BMPQOY2V05K1^}aA?=4ouWa#ZswBoDxyD(?)%1rv$i7Z&qf5UrnEfI(_;yY`6OG zjeKg;I4xYUbMkdz;p+n4+(N-vt`^cMp6aKti~X;6quGv!q_8_Tr8I ziZnS&KN*9xs=e3YR2D6csiL;c1iiqEFGV`KdXwB;!SO_$s}JkY*b(m1m67!i&YlBW zIecaBDk+}N#JNk|rErj<3OKQoE;K>h+~Q_foqsyoO+T**47JeP9(7xrN_ypf*wc^j5E~iMgM6(DGg1YJLF26@H zhCD`yMgKK(sv$!mdFT1H^UnF_%RrLbiwu_3!-~qjAmbe>yH*e2%gNjO8T2>Kez+fHJotn?({iNQ+kSIt`-kI+A_@1Y5b@Z{8G)q#=rnJK2P->_ zh9+pb|G<&@V)5Uqf`5m0=cHG@*_F3e9Lt}50CY+u2402r6Na5}+6?p2 z(N-^^c9|i+@g`cywI3i2HN`_|W15+vgKD{iD0cgwoOi!<-DSqUc(?kj(7&aJ$NtXg z0PRgK(R5B1bWrd1*PiVx9w5w*q$Q`$i6&5Ih&Ol1G`q=r#du5M+P4$g(zQA1H8PB; z1H;i_d^^Sem*(-iXNB~~lyLx6Sdi&XLP1EZFh^J4M<0+(DVC}jSrk{;JE`TY6a^4s zf3DLw`rU!i?AY67h2#l1*R^{d7NKLC`1fOJ%udu6u}Lc~>p{C2sglORxEj=$B&k?$ z>E?NchXiG1zX?(dR5_S%WOD9fWV$WR@}%&h1O-I|p|EvM5L4U|2A;2$VO4+DpGe^G z?akq-d-RY#to{i_`{Jx8QjrQ}3zZS5Kb_%fZf+58%~H#ICVBfq<+&QqL1r)nb!fN*i~I!Wm1ky&pRYw}?t|3iUJ z94=b#q@(k={nlx}K6S7gP0q;e%)qP)n%HVO@3q32S??5nc37+43&|AutAJ>YfKvmO2z_S`$# zJyKgWH-4*z%;mSv(=lFV~O2e{x@KP=}=SDr+;&mr4i<{S0;Zu{l59@>S&r3V&5`ew*a-7}}Q-Z`M5Z5LJSGtqm7O|wgsu*%XRnZHNkb2yEh z?5>3|!4Q~{!SqN!y5{EeZbu7N5++bj@uD;P$wG&??GAn@m+R*}#6H_@3KS1K6ujA( zwPn69c2!+1$DN;S91_1AlyRtIHgCP2ir7YXFG}c(S(WoYMC<9}YqnjLGOB+T)cHN? zA^Yr1eJc0fyn%EI&sONg{>M*i91kOeLu%?|#ubfEc)0G^_@FMTQK1qPHJACaj33hDG7eGEwx1b{3=io;w4TP zIDvv9hRWe8tAjN0ae56b!4(ep{eaX7U|X+R!{yd{KAhk^42fI{c!Or=^n8Dx zT93V>LrN+D^~ufDea26Tuvmi*)gSKsDX*+9;m^I{4*YHuo=B7J8cj%N{QQ+;tbDk< zXn+TA;NJ^p!{_>Ce57Pc8SFWKxu+ON{5MkV!neJ529=bnN`i2A@1pu?AAhqvmK*L4 z4H_XNSRo>s5)$>v&tt^K@*Z~Zq2dXp1Ifmont3*uTc%A)&^SD2K_L z%195W<-ac<-%_Qb<)zgyGLdnv%}mX}LAju`+isZ_T&pTyhz zE-ysZ_f4?2nE_)}YcT*#SYia)RrXS>OqXA_$P(a@E8>XSG2bfFj`01k0nz|FARWMJ zN|Bpmggu{6@?$tJ$|YAU=fB0KJEyEdgrpydR(1IpS|W!ODSp}Q+|Dc3H4lDGoYIf@ zTcw*`c}G~K2NSx^B2BQKvZviDNw# zhG8O*`taeM(19#jjj?goDRMDM)CDn9DOE9c}$Q!Aw? zh^p7(PGzy;1f_#66m}|mKV0r{!+&S+`bd*Nv9a*w%w*OEzveVvht2PP;SewU-5ZeQ zO$38U{q6h?8;y@&Y*qFM9kUXs?7K9joH|X}w%t9%%TY)hyAiA<4lXS*_|RR-<~+4` zaf0Qgv^Y^Dr41KBl~v1-M14|BvOz=?C9c!ae>o;khc2&B6(?L>)_dOiH@Y33VNJ=6 zE*v*`-yw+ZPUCcpwWSBJkIV4oai(2s7?W^jcKb<2WNU+>?vb*?+^*@pkf)KKl;HhY&3t*o_=e*dQ6 z4lKS1fIUE=v>DrGMJm)J5)vnuS|*9rj$yb?{Rh9dx8+;JuZ`Pp6T0Hf2V%z}YHL0f zADnYT7{`8Ad0b>BWvKZYk|w9cWDbc>ui-IMm}X^&$#ER;R&Qe!0!+K7i^ts^a=q|;vP3x~IR%WC;vC0noF zCwUz_oOcXauK4bb=J}^Qrujp&_*vN#^Ig5_irs?kFdqhZ`+7bXe*rcO5#t&&xHoIm zHAFKt&HRQlhSLAz)E31e_TTEX+PkzFCuLWpuVEF(L!F#ww$Q$jH z%}pI$L&+4Azec*6k4xtcL^9`j(oC;t9Iw$J8WI*T6gMpB@1+fgi-wy#{y<9pM}g}< z`KzRn_Xc9;XJ5a#gu|(1q3Mc9Tk<1f{&8N;Mt@G~G&Nm;BFXG&_I^*wz0;GT+e?nE zF6l=Gx~;c{s95QW+GRfv^{BsFcAN1a1>m|=ypcE5;vmW9z*>5h?(r0>xS>9wa3tiP z_;RklBMuADx{C58j+^$)o|x`d6t1LwjNb>Ve;Zb(svN#Si1z}Js!^Vpodd`$V?G;d!s7PGbt z55CGd)^4dm?%eomw_ILbUCR61tXannctSpaeqEecAzpq3a5ordT=)0Qk9PZe){PE- z-V#!EXVAZVnJFzL{~47%JG2cIMOMRwbN)vE8Xw~RjTI3cAFuYQvn$vl$vTG?At@`G zSf4uQbnTo~8aL^7e#o71PY@)hnczAOWC6cIf!Tu4{rX!Itg)$04R9CKU_D}3?uO~z z_er%@z;H=_($k%if9WUflGE}(z$*NPAtlv_+imjhHb~W5^wbsu1N$#Dw_bsIO%XD! zPEn@1%2sgbpg);A=1@^wK8ZJi1GRAfiv6M@f`j9&L*;?l%;37a{rP*}M8~mrq0Qa_ z>$46Ob)3IaV<*?TER@mgS%Ht(#;>b~!@l{SW~<#wM0Ign}3diuBk4(%#;Adfo#7U;Ods8=E@u@3tmd+3OQPc;t5>`%KSoN#BZj zKbQ{77aXsxM=UAR0<)E^oZnm;u?8_s&#SB#Cf?lEbhQ*CBzCC|W@Bd2h@HA|Fm%OD zAt1)P*+XfQj}Mbk7b_2rxuauINADu;H?Pc_pPx>o5z6w4*1|q$@=bdG3DNZzM&|dq zdy@8@z`uW_*dDfL0l7ax1)nF1DJ{&K!;*7-)43XAHFQ&cS$g1V*0nI6#Ww*IzC|`% z7X?zh*|_|^(|=x)Cp+ov{Evp;`&*}!L=OvefZk9Vm}wStP&EJB?d?A1Y7u(dc6{7+ z>0%L$>6OEK#ZaP2BIx>wJ0k6=I>H4MqD4diz_2N`xCkWwk-{tUA{_G@{u~w2*T=AI z&M9^4q@!OB1enigE9B$WSyU=(Qxd1ih1|V@i#X$b5lSN}aY5d^?xuSVj(|Z~H}TV? zOT6q-;HFTJ@p*Z%C#dy{Z=EusCR_Ih;U?g6C**wa?3$K0_%UGp0Crc(wnfzAfkhf44p=X()($_7cE==NS{5v^o)q zMJgbRoK1H9C8!`Pi|df>e!YrYb7wUCn7g)`+*{b7By3@|qvhWc3MW=DV|lVF;b64T z1z8Hadq)kt!b4t9t>AzBlK>NsZTC>4>Oc2tT*KjogaUFo1FCMeaq7t5Vas*7^gk~r zOnOESz!xKruBH~3-8Vi(jH+eNkNw~_rpTC#PmX`rTp%bqW!KHK%{SS+gvcuKGzJPl zdABk~89f3ML&i-YfU?v~cT?t_50*}?$-X)6IhIjUW~NfL8}@slAMQ;EOlkrRwA^je2 z7t&S+JKGmuJ^>mIkDjU|Uu+qX_F+SJtQW$X;R>=5Hvf%_9VBDox4qak#aJt*%xPV( z6f&t{X!!cfjSMA1;&fYr3`Q>Gv6GMea2aiT1|B^`Vys8r!e%Z40dbuID}}$AlTMK$P@I^1Bme{<*1v zm+bN;N`EymQkVG1Wl@da%GQ%SokY3rVQ??i$^~}Ky4rH*HdZvuo%7#k;b-BB#t+nS zVf}(?Sc*J>;};&YS3wdpHSOcY)+0dKE7XT3Ci7d~6hK0ibvSMWCI5a6ZW38l zs6jIosa1Jm=d+*&h7w44h@btcZMBgd{}7}i-!I~`#2AS)y~Mgg%H_4Q+iC!A&F&KG z%znHYQ>JoFWs<8I(EEh!eNr;|vVpl&ci^y8zXy0R=thm8O9&WrUx=nnyu^PhbK`ru zKRr0P|6%?#`Xdqba^$O)-icho(W&r9=W9Q+Rb&$m*Gr)S-E{X6aHbzhRZj6!$$%3? z2?Nvakl%dzznlJ(^WsG1&*kPF=G%&`a2hCT$TXhJ_vo`w;!XBzYwW8F!ex#yT!>H zXCjsYi?iVpa>AW#eA}b~4uCP~X0PEql&z;Iqd!Psqynbt0v&h)PA2bI-;L#%IB)J@ z8HHPS#Cf-Ub-s^N{lc0($QGpe=(yx`U>C;Rusy9yey<=^BBZ1RXprV{C5UXT#rmas zfGoh2|MMsW3QI{V<#~T;Uh8rWz!= zr-;elswdMS@jA!<8SoY`yfQ;qs^r|Bqx@v2@RShM5rzDaR%`^=u}1rEuZ0>1NGptu zesM_g6j7D;a@I(whVk)i3X-v`i?df0Ozgm(o*$_2WPnVXFpN4`FDZM$NVG<}Q66Ka!;d zqrNGL!0v8V;sp@m*ZjaM3{;JD?}H&WF0ur4GE2L=e*KMc+x;wH;WcgJPApPa^eDFIfcJ@>g!4*YB~u?ku$7sqp{jVE%CRZSl@JfO<_E(qSrL z_m9&v#8RZ|RRk-~v(F4-e;p|t#Py+&tX3(iL2lOoXHph8|0(DEZR@4mX6g5dbk#}r z(T*FrsNI#m6zvfcscu&EH@SeYV(z6rxaUaKfr$~Bi0vK6wQ;lwn+;;?VBn909en7G zcTJB;0lL%8(y2qhYGbqYG@|MES}o;G7R4QIqg3r{qK(VAl$SuX#Ri$rT*7aft;3PvdFvO^#{nKH%e(46bk}jMBJayIGzvJ^b;5?Ffsk!GvxaxABxxWm6s_#rvT(`-|JFf$>?cl-wu zKSW|9EzDn4Z`5C)6~v?57WD1n>_)mJPMmG=$&f{=+Z9YhB`~fb$C-!JJ6|}?6})pP zPtNx)@zgNgYt}Pa012cHM1fTRIPt;2gpAk^+@v(x&KR+bPBh^mrT?J{Ax408oB~?;5~GC?e4QY)F=yvMj)>FC40qM$piZZIa!gjBV%y|AT>bh1yDsb% zBs8fa^~_VW=cngcfph0y(!pF{lrXR!4HY;vB{!m~gbmCo9$Fh}+=yXd;9^G-lkM^< zCX*-Udwm^eXjkeJUm_uE$V@Luvd|WeeY7Gce|cE^QzgCExQ6a5%0sn>Y@}L^i0*0b zPF@3p_4(U(FdpPpbb4Eu* zgrGzONsF?5Zdt}129wiiXqw3>F7vU3tic@6;;RM3(HL%1*%fx0(pmB3r6m5hwlMHJ z24K`#lyDVi43H1r<9k*bD(W}Y^h)!sW{4eyBF2gQ&)T+{0bP=*25B#Q{h?IcuMnVg zOi2<2(f1wE6q<9VEX1>zC<7v|zX8vlr_aQ}g@Jk^DVpOPFSJ&+FHE-GRO_a5zg$G? zgZuIm{y@hk!sMb$PRiBvj0&s16+-e!1-zI(#JeL&f%eu#h0Dvktxh>9UN=^@1r2zT z&U1Y%Otl6sSKwbG;ln_ZVyG)BNM`*oqMCJ~$*AXt36p6zSfmA`38>GWt0K!s7XX1? z&*W3p5DMh&r%L9FNikKJKmc5gjRuHzU|lhW6GNIzwd^* zumIDW9i@-j0t<2NNZsEHM-dP*ZkCZ9&{*y1OIe!?USOi+VI7FkFU z+U}cEOF}b(V_%Dkb>2QlJKau+x<2G9DrF+@(;f}+19rfmd=D|Ygv8`nJe7dKSAa*> z%JVCbw13_&GjuwkVoueF#EBDXIQgL{Qw|9*=|iC~^E$hkcL`5LvXO@2J>7}G=;6dL zU}7;T3LSf>!F`!fO#ByQLs&VMg+H3)o%iNgbK9?!G&BB6bJLAnD5c8hV2s^Stxam?5$M&Vf|EATSRb z_|yRO?js6xEyDc8Lz~SH zOeBH3KWnuRcr>?;mciQC-6tRS{kC35==itg4&R1){{Kz19UZXe0>}^&`w+jgI9yzN z)cFdNTYuVeKt7Rz3YLO2;=ulIN=g=+f+Ad|RJl%B`oZI^Xy-$lNaet=AfKbHKVJpJ z2gR(|`zl^sbXCqFU;h8VF|B()PTanAS+h=fAF}|9S@GQ?S0BG!Q1e#tR2{IeIo3&|D^6ezOX*-W38v))Qvy+eHucZ zzJHySUHfrjY{vP9#wn*fg0?M*b$&r`7RCxeBqK;e{=HWDjGznInMsR zc)IK@#|I^Q4H(`sur&3?xLPN$dw})~0E-V+VB-04D0rIfuBHPg#F(7dXsb=N1dZ4) zkZo8Q5d5|wMSEI5s1pfHY7(HFoEUN`05}zzz_Wc{%j=SL9}+vZt=w)R#&nERVU_?( z)7qGa)(meQ=6-y4DF{@40+W?PF(`qmJ8|r2JK$<_wqo6hgABQc3)Ts)n;Dh%QHV)( zPygW<{zBUmUm33NjZwX`V!BPj%{FjJt_AeXhEtO#l>Sg^blj7fA?0Q+C?#O)*_AJ> z@%*iPrV_`S=j#K5Yoxp1fLgjh+hSZDSXja*POEHbFl71=D-o@4;&9ubNqf@HlkZm< z*3G-Z<#$Nel*#k!p+@z$&euQ(5CUzAb93O6jr-=1Y8~gv@N$Bp$%|WTz{-5?o}%sd zwri@$9DZvLER)z?N-@sh0QH_ARf8qaUlH#no@i=mNMzzzd#gP=sn+*F_>=U8nL=4h z9!^}cP?_b@&d-wTI8?j3T9Q9-d#tWMS`BJZfrGPx2bc?No&}zCYHc{nvMa`+;X*6N z9{r`cOsu|qz#&Cvh64}d#TgV>JnR^Mia-jehHy~Xw_0v_jvFu%6!ye5G>9?XV!yIN zO;m~_2u@do{E!Q(&p-YT)3o`?@1_v(o`ZrVp(R z_nou1u1vW2<@E(I<9XSstZV=BoYlJ`X76rfAan2k{#t7@Mh1>Xg&Xx-?>Ft=+4+;B zJ;7ok$F@89FF)Pi6L-&lKSLJ-BNGdUfPzBmdKI;Vst E0LQQgxc~qF literal 0 HcmV?d00001 diff --git a/src/public/img/baby-narval.png~ b/src/public/img/baby-narval.png~ new file mode 100644 index 0000000000000000000000000000000000000000..6ffa7f0dc6697b1bc46acae6251683687ce58149 GIT binary patch literal 55292 zcmYg%2Q=K@^EPX-tHkP}MDIO1!6JGO(Yp}6MT@=&LiFARLG%*6cOiu65g~dfdiQ=L z`TqXzIh&Jn9DCh6GxwS2nVI`mO+^+PgA@Y^2?<+X?&&imBoqh|67m)V4fsh8k##-r zAJj=s_Z1QnCf@x&SAv;ff%F5X+)^gy%#~*7 zmDMCVwHl8u8uk3PYGkr%n+JR04ea#D1Iq0F#Stb0gq=C!B|~@G)Xqy9)NIc#3PpbC z_x_d(0N;P87$66PGz@jI5k=u0Q=*LR*Cmiq;=2x7&O7f1nv;qzZm*1loOO(!-OlL9 z9Ga@DQ*%7Pe8(UJA0mabzE0Dw-;8aegM0( zN&21Pl@HRdVEV1Jld_gNnWcFYh5JA{v{%a1i>)HfmiFIw@p9mc zFFTIF$6lksd^BiJVMQb`|(83SCguZH!- zu_X*q-;VM#{-sz2W^YGSQ*&^E3;V~=jK{}BW24$&DcjGvPyc6&DeGW z)Rx8~0|K_$N8^gCO9l*TB6$W}$HG4B@)b;D|AHa_+$9T~%BR%aFCQlv5N zMZ```4gLKa8WtTd>)*$S=GTYnXLx%Bg|4;}Q+jmy$1f;C&M9yA`#)*lNrgTz{hDRA zlf-!Ns{ZWhN|4=6fPPi{mQ#KgV1yRdM~Uy29i2f%Z4f#{?D3$v~UEBT-^B6PkNd~ zHz8(E*{292+V8t#9)k@Ho&;<4a8pyol^4@V_kU!~_)WlVLPdr(Bks(n*UbEmx^v7tA?v@sa3JD=-JV}-{N4gB$_ufRG_$!-@d`Fn=3E!6Q8cn>7OIHk(-q1( zNRrPIf=K%-T_#;ijd<`&q`69UMfx=)#@6{zIc(_*F(Yk#6`W zZp>%-9s$eofAHHg5(zbM+MO==Xe_*s)HtWJzt>wzQ0;?Z|9k7@pH>{XInqZ6xsoLO zJ*d+Y96X&GcYdw1Ea&rJQ-1eEySE!`&E#!?$3ZG^8?&c{U7hm(Fx(8l5}FV(9~A$( z+$U}D3j8y2W!SF4{63l8`|G4P06x!V(3POC^?N+#M3( z%NA8*-Y;BgAX;X?HDDct5$2R$Am934lP zwpiH?gb0eRI~b6iegVBo1S?`cd@Kim2B}evuc< zYh-%*>qT67`|Jis)JCRs}-b2XjZ9oj+TZO>VnXS24cHnzjb= zR*D^nzSS6Q!uT(i!`y*&)Ek2I+84!e(Y(B1ED;eAvd#Q2^USXz@;y@%G9v>%Iz2^c>o1qtb3>9V^=>S4f7Y*u%~P03-P88v@x;dQMf{A|Kg!RH2~DjKh3FxQc}mzUcoNAE|%9wf+-Jdj#?x*qw<@!*d51WgVI9{$OyxY$9Lqb&>A zZti(l2nzZG`CsKIGgan}@Ta3@p#d1djYoa=2FRc4T8rUSvSlh#Ybe7U&Gi}xT}JxP zmMlQJ({>Iis6l-uvgJX8Wt2voc3V3gcx|~cx+m$nDM&*XL`UCCNek8l_fQHE7TI)! zk0XiFLy{8{DdNW8+|01!F3_iuh7<9Cd5d&wsMs&}hAK-p72ax`>*D0N4Oe3IOZ+;U2=H8o{8%0DUySGy-~UBpd& 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�~DcifY0$&&}qmdoY1Opt%~FKyWL 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 literal 0 HcmV?d00001 diff --git a/src/public/img/logo-narval.png b/src/public/img/logo-narval.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff6cd184e9c7bca4a90aa0ec471852d792a0b80 GIT binary patch literal 106081 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%0A&&WNKhQu{(wgrs5@Cqhz{M0f6Nf3x7 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 xLFpE9eijuE1l!A;>HZ_~|0Ms>t`-}h@41;#c z<;v1&R1O&EjW05YYN|@U~5R$!F%pSq8Tk5cA&aArTzHjUUO z<1@zz*tO(WLd*~X4!4A4Dg6BTBciGh&;rhiK1{L#p5ayT{vmIj>h~z@`m(tzqXLi7HtKKT2(;>_90VvyoPTU5Nn66*beiUlBxA@0Rt2zS6#n0R)DI z2R^2e=v)%G#VG)az+E9wwY!nnt$TCM!Lu)2{h-cOpo{4mdO)s>53P#B<5$%R-i~sD zWgkC~YHPuGxJrjCC%nmBpCauOA4efqJ)*7i-+9wMn)bOqqaBK=rupqf5gbkx98Nh$ zg4gjJzoQF3^(##{U`~DK+Cjm8uQ{=yt}ayzl-447X-{ynr1&Z2sI8Q@l3LHlmF zucf~+6IZr^E6*H!WG>`->*Jy(iXa>~`5Dw2tMlCV624R{YaJfan?VdxV58Jnv|e-Z zt|yTUcGOvmjH{tkbT_ufTD|MVvr3w<icwImr}?X6=y{eyJOR>{JlI%@zht_ zec)tfxrXLqzn?O>TwV3}7=rXWEA^}P7LMgpr62eO_PX-#M~7lN8YL31OZ=j<%Ot<8 z`LSMC5D?=06f^xLxy|g#z4GFw7Uuc7MC}#lGkrs%@vmZ+ufeT!aO?6NGm-rDM9y!# zhwX-R>^U=Wki1!}5gl^&Lp%Wy=-OLV73a?X2;uXko-ZRQ32yWu>~)9cF5z25`B#Z= z8-}YGZ%cfWN^K$nLSOjcd!UYs8zv#Gk-TNYZoS_0>||%?i<@Dd4p?^3DZYwgxf#&8 zDOiJZY?dNB%;+cowA0kNSR8X|_&~P`EJ#zrXx(k@ReyFz$~q#->4(a!wKCF8SUCeV z+LV8d5E71ANR>N0E)jXB$sM|&Z|5V4Uh0V2s*x@u)UTX57!H5+rQSi1@-y6MmiYny zK^I_9>4SPWwdrKRh?qL<5^gxE)QNX1o7h@o_qVBX3Ez$xg})GAy(%)#vuN#4vKX1& zGvt=X#cv*|n1#4def{H~e#&Ixg(Le00IIAZ14Do4TjQQ4RL`O1qz}#5B?vy)&(-!k z*B_uWC0I@1!Kb#oaiX+QS3!;;-Qa)Zg&`pZQu$|jI3?mEZ;PGH+V>W+FP#`v2he$u zFrg33^k|(0l03eT{bJ(%J@FYVh$MW}BmA*IGP#YL>KV3cjmM&&cG_QjJF+r>P)5UT z=Z&=2L%)UtO_F)d7eORFDJ&h|sjt9XtH2X=u;yo{C@Jqwp>iBC?|N_V^`4qz$}qSs zA4$$fOg6|hn}_6Sd-X8OPqDUw?zB+t;y_kpQxV9XT}JRz*U^dRy@{U1{u~=yeBQVx z<`F|DR4yRbCZ1URF7e|W^3eceHZaL!VJYh1*~E#P)5NO#-sOA#?B-r+9L4bT+0r51 z0hJygt_<>q zFK%38tch6~=vu+kU%joxOl+CDO4IWwqNQp4+m9tik07ZNe$jO=Riz=^(HU}6q9up= zZ zi8}@?%HEABKm#ncw~N##_@IuvGbw%3g)>jK*RnoK`nBTRB)Zz_rEiaKMm2p*&5vvl?_9ZCr+YG~cP}CI&bIP;ghgG-)%Wwfv3yru+vk9!a{rcmcYJj z98T-BS7HTmr41r8_L>g5s~OXNdU}`fF~cMC5SRyo_8u~X>t4|uN?6tzk3mm-rH2aU z&aZTt>w7iv-AnEC$ut^PAlZ5k;s$_E7HKmRGi|dJId}y1N%Yctw4cEUfEJ_w`2GbH z%B5-_qS`tzMD^yya3>|?wc*o%N;^{q`-~kSHr6SY=Et^Ec|FN* z(#th`#QAj+tNE+!<Bj@y!+%Tqg!EjhzkY!Gb6O+&60vi@`sg3hP>5N=|3VaTtjMj(I=n-MKh8 z*D?wP1`FV7Ez7q8x+L5SF%++HF{u%Q4Whs;C3$JFiJMpWp=oW1CI;!AaK3d2zI=>+ z7xkx|g02DY7|$Rh)PRxZPyCTTg>_TkvFJu~@2qO!&_=}R;lAPKUsW#B@bM3pcA5Sn zQK(v*ATEqBwRlg6xs7xAm4>;R_a3z_chj_o$f9qBO#aybVSYt47(s|oQMj^TYHuX9V=@+vXh`j# zluEnR*oh{{-iYei1NchGqzs*Uec2#WOmd_=k$yTEOed`3VYOlfhFPSp#bYc7b}-r@ekCYemd2~{lL%nE3Ej6qp> zs6@KWf$r#KYrhB$=P59#P#DBSz5boO=si62ka;j6+Wkc!_5I$1>8Q^|Yqs8Y33;$2 ziV_JYdd+(y;%5$H`Rr1Juife<9s732?F`Mhk{IzPOno5~2Ww>0?_3Q;G6ZK&#i&BH zdc5#!Pd)o17Q=D#sD=e?Qnr#cDyPhE8FAlRqBy!~3d>vNNHHo0JbXcH3=^FSWZ+a= zZWd+`Ssz7)3&qb*_ut{l!t&uB;@e($vYHl0PF7L(p^9Ruf-k{jeN?m8vbO)MK$e2| za^dnYSzoIoCpKy@NRG%C!zK6Mds<9bJP0pMur|>&AB-_jba%Y?bpHiDiygNdm^q0v zrGyO-tpHOlHIVh~taN%&B}XcwxIX&=)te+|sT|+E9R9pt5ycV}*6S=S`^D;PcQwL1 zY4f+D;!6uG$V2W{RctKPkIzdEN@oXC-OE)J(8o*!$LI2l8<{(_?7~XnN}ngEi=2~A^iN!9a^ujh?e*bagVLSs<=`y0Owun4S6>K(TCdEkNO@V)J z#89*a>3l!@!A<&-DOh8x(RA(NZ?;~S(Yf7w2ilSV84gL{`1*UE*TEh(evY>ct$lT z%gBSK&6xIZa+%P>&aJU;E>YLTYPY!yNYoNj1U6F36MLd&cgR{ z#a_3&F0`Znykm!YaMEZ#=!3Aos6TjCXnkG)b4!3r%r-XzzdpMZ&9$o9S%4+oqq-_@ zytSNmJD)ddav z>!K=lZ&ACZNrS^T6DYfZ6_m6W+c*7lp_!l^qg_RTv;2%)K6JD&Z%n}BIS{b0 z=)bpAe1T@;6hN{^hwUZ&HN({5wK*JEc2gAgch3!256~~z=;pvEr3pj5jS(_(-MJQ& z=$Af_cO@pyj7&ZTd1#Gvu(Xb=Rkv5&9((3%6}%TNi=TPDsB=H4+9y9Pc*vZ@7BA-5 z+RwK$J2GaYtVBV4ywV-MLy3a2LUH072HDq0<9|+~gh2;NE=c>CADUrHG9|WnALTcm z+2ojYUIJ$W^wbv{yguQydubc}G5!aiIePfE=db6%P5rlH402z4><@NdqL{Lb&kDML zk2|bwQBjB%G>cWh-=5z=o{RKv7GZeJWjKJ37u}qUHxPd|!^h?`^k7#L#9qjK2W=yd zvKzF93GZU1YR=BB~Vd(hI8`LvY8 zYPiJ2sS~ibk-lN=3zGhnlaeS2gvcQ<(DHq$aMjM0mLk%sq#GKhD~H zKOn~U6~gZK-P7!vZq~SGwN@lR{=cmTM<(zgod@{DACc*cM&=W|+eyO}GIY@be341tjJz2P&L|cl$lVvKtQ3WIk7R7fjsuT?1;T6=j+$r&Ai+2k*+4G2~-jB|1df$AXk0u1fZIaOXf1db zA5P8B%($mMy*-XAE`)Da+S3;_?~TQTD^+FeE~L!piSac8+Mg5^ewkM;HIf}F_8pQR z->x^)_A78Vy=!2*iYotw>YWUNf(;uzcWOv;sN_86)E*++Q)bzZ} zHv9&+OR^ZFC_b(J67C%N5MjDwvuWR{qwo$&AL9_}-ne=SnC^78}mt(|gA>)*UJ zTpF7PYzl)%z$+wdABEFIWw=Azhgh*VyQzLo*gBSC*38N8fsBBuAorc`dA8NJTBp(U zhl`pGGZ>yt{M{{CoE#*m2Q_Z|2jfo8cF6PTz#5IA#+J}A(NIT+0buvc(CMvP#Yt~y zrU#$E*&<$hBceZoOzlny+BeZo9;&V3)@d(|M>IIX-)X!Ra&z~DeRxP7leJ5&Gh!aR zT>jjm_~*j8g+|II{wrCjk@H#@NTIy)Qc8$t{_;`R*LLo>T43b-_U|j1#)n8v2$lcC zU(!s^jAd!5i-RQ5kpUAa$Rc=ycl}vV92do#8LPk8Nir4V69+6AY5Q&Df+Q_I>Asi= z`}xZWKlf64=UI-*d3UzwO*aL!Mt-O{si~nTP+v@X1TZ42?e{(K-blN}d$im+dS(%< zarKtg4IsT?G8v>_x!e0P$KfpV*O+I=$ansMNf1A!>_ZFJ6to-w%cfi}_a*@$zk=G5 zAXd@!z{ie(Y)Vd{>Zo=>kk?GjuUj_c)(0DyTdDSq7U1(~H8H?vObPPA(lhY%XkfP3 zbaJ9Y?gkeVZmi4udt$=$gf$Q=3Ss&kijYax*4zla{-clZiKD zyl#w^s^$R9P*Raq8;&x=g9yT86(Vd>1mm0)$N|6N4^N7o?$Pxc#wJI69ljDjEuAzL zYx}K)`~X6yAL`J%=0cDi)65BP!i7in_hfWjRE;Yxk#9fy>|NdtNv4UYbj($K=6M68 z2*h0yHqJh$XAE~ylf7qSX!RtIJam&T1nON7pdOS`7=^wKi4 zh(o=fq~0D`%v|^o?koY!YtIyL?j709aNzTjS{SgX1I33^!tpkmM8g)so}|5bw2A{k zm=WfBX#IQF?)m45Y4;ulv4 zdEfblNn0m@fA@imP8+4-ogSMc4l(z%x4GA(r%F4P^x>~Z^Ukko>ik}o5Tpa|5u{|0G@Wt&uXdv8X~X* znc}{r(qM&RjoWd_g+6jM+F9nFdIN`co%ZT`GY z+YJ2V3qJrK+-Fp9QS2<^Ds9_NVs}-+ELTUR7%+}~YuGh?x-TcSL(3=6MG8p$!Y%n| zNt_ONE7$b49J!!gFcP4vJi~_j?k$#|fN?%>_gs5sN88cc){oS*E25DzS$^h6mk2&J zDL5qp{HZ-9*2gYV*{3076|2zbYIkY&BOh(UrQr2 zevw(TRB$oBPjh2L3XR#aYe=^voVw9djRIl_#C%H@LpfS7^tLO|G0Du^%N7?;pyN+(w5d zkoUS3`}!WYk)AsP;;RMyb)y#K87|k}Yt-Ok3xqP@FUh^m&B1SB;t;K%FRz_;ax|^3 zZa(C}0RYvq$3{tBfrQ=TX{%=l>Syn@(55>P8f?9ImRMzW*=UG~5qHI2{Pv;$1mWMo z3ePVXYuq>V2>UV<+`K)U;=xr&TjbB?k>^-_Q9?(HuQnJ1!5cR=)oEEZiZx)s#k{9p z+%TA2j3Iwd`-syM1pusZ$Euy>?lF(#06sa-NswcM8$82qhS?t--k)QT9q;EYt+$=) z1^`Hw{1aMhFI!Fm6x{92r8o#snHHygTTjw&nmY_6vaiTrBfhQqqfM7kMdvj>%D|su zCUWLk?e^b8uYQc(mHjJfoXh*AvD!RET{+r>ps*Rh;Mr~`agBJf7{&k@I*XSKKvcXZ zX{pk za+R(=s(QHFvS*v$u4Sc+zY2E$z${K0u>k&^Or74E@Hva^{~JyuJby>yF~ckW3{6Rq0EO5hPWGq+Mh zxPF8yAeTMjAXFJwY}aqezy(9}*cRLIv;IdUsjK(xjR{D3#o8QwO}I}ujWIxS9pT+y zdFAKzV5UGz7A&Y_%UylPfNtJ{11fCZd=QDhe3g3`{8%9FZ( zCD1G18VolXY8AaEs$&;f-!xK@ZZAq^Oa6+Mq7Wz?jVYqgdg^z8B23!2O!$G@~f zHB~d+^YmK1R?p}9=Pv-NytJG&01ONO0Q))spId-%02~}VEIcd%0vrN70s;auDk3}r z5(W+yDkcgxIyy2oItnHV3MM)xE(SIx9w|OC9xekJAteSO5j!~tJr5N*D;V_GjY!A{ zh=|C@h)Af&M3_j3wbEZU6xxz=baqZp=GolkI zCd+;u&Qz{Ly@3HGb@V3oonfrw-mm81m5|lB97V#Hz@&3 zGpKd!4c!f>Z$`TNOAG02ij}1BRhTrrTlUz42inZV6V|)x-^{J^6&VDDfqiP|At?cc z6S3h%@^V~aHqCere_KIRk_^I{Nkr6IaZ#Uah5AUrMzBK(f82trNXVI=cx5$eRDfyU}xHS_rsw$F+FVH|Lr6R?1{=8o0ZD>?~g;&VWwe zGW!iPw}5A!u4BcET;JLzB<=-g-v0b@D4cbrn$F6B=VbHero@cUNmrXJWH;6lJ_fZ* zX@&jc9KHGxox>{=XjV>3Uvr$6a*{QJg{luh!9uvw&Vmf3DtC4%+Cx+D!Us5t!ZZ+!bX%3fn3sic}q? zrp5wgO+-QAVvx!fv%PMYduom8`6Hj%@viv1req=Y^*6u2N4xuXmg=)`6HMMYjUE2d zjU)&{vJF#6MSbh?>JJcduh_OyX8Wxlj;g_uFT+*%5*iG`Ct%D^0@pP_r$VFiuuEQr zn>uO@z2cSJ_ApC<>KFgt9b9sHEy~6gkyzh`Vfk>BG+ND)L!uLN0E`~d?Eb~ZmUanh zoo2#;h((!p4Omu?~eY{lAe;4(%a8Y?YS&c!5m?QewYH zS}xyQq?;~_xe*)mi*>cb0Um%MMeLQD41Zfzwv_$D$|LB-sEYDmT+Gz?BA2w!mGn1+ zw4T^gH}g|jr}#j~M1hU8TvODZt-@MJM*xFlv52tWBG)FdH`T8HPP%>R93mtc$Sy^! zkWmP!GuA`*!pAi%aqvQ_>AgQwILS{f2lMXCYMqmA%qRShL8I15hq{Ui7;E4h+|x#)9au#h+gPRbQ8Uk?E;6`Yn;aUN!|a*pKTMHjkOdjQH*& zM-Bxc)~$YbfpI^nq=B0O%kSq4`o*n=4a}u(o284g^_BE1dX6YUIVjuYfy>aXq*W7h zp?$<&w=h>n`kS{i59fVX&hyvp1%0)eNPFI^nM9~J6jDd7D}B28=FTuEY8>TZ_|=Kh zSXJ(|hGWCUS+I>|8>iAEUE~X>x`&2nTEl6$eoySvi>Kg47T2+^dy>;@E5M7Q>fQ*s z(d9~m^TskNaDH(&BXggzN}rKqEp?|BiQpE6)@Rf8cH^z88x}>8zCCx&laFuTEF8{D zbSQjFTr)CW`!Ol&FDEq}Ah8sPuMFkLSgGu^cW2WO7~3J{=p&ZpG5vSSI^3Xc?;X?9FbMB-gN(HK)~ z=$Dr30Sh||l87@mSZ7oj)6iN8i54wg>p4Dy6f{zPGcENyox5u^q{q26g<0FtlO0aY zJ_ib2NufqJ>4tcB-RSdj{MQMp@ir%QL>yK>{uW+#sUXuBckTI@K7$6(ZPySs5;>`L zxnUcoq=g+@%#7sfnD8f&%jE-2BROJ!zKcHqcSi&c1av~%{2j@6!N+zQl85%43DmdT z!aJL(7hfPh+YY_@P%N}GXI(8p)dzdY}g)ZZms0QD5 zpR|fsGtI~Yzn}*X4DkO)9sn3P1OO81e}D%Z^$U+4D_7uqY&9#m?3)w^A=>l1HIDfy zs?t1F%`BIodQsF;;mayI1+Xpss7ms_|ITK{@)e*dAOctE8Y6t4^Crt^=rQ4*k32p{ z7vg6IKjoSzo>O!B?o=TQFZiANAFI%wD-KU#+IVTMk$qub~qst7CG|jcilOa ze6riA>VCuv{;H;}u-dwe=I?R$@uelLP1Edh)-!Lyo}z{lFQ!R9V$JXUx`iD67_h6U zW%IeqOQ(Ue@ISpzJQDmyT>D@r>%-;hKp*ZN3nkF`YrlaqkxEy>!V~wii7ddO9b)8y zECsE*@0RkGyzXUfR12+!*~EUbLOBpl-VKSZg%QvvEume}^rHwEJdClexD)~t2S4?| z_&r5|_jv+m+&Cu!UxCE`Zy^6a7!D2r2?hm#{+~!f{3ntx`qmUPPmwv`dE6FK5lRN^C$XRB3Vm!Mi{9&Ix=`L#`)a|`KvdQVeu{e&Ei(VyF@;B5Y!Zt zCj=J_SO|>z>NtJ-s#PhzYYVZRnJo*H8P7UfR3`;(PY9wV@s=^2#q zll`*<%1+fOO$^O-o9Q7IICXe~3^m@0^zsDoI87BQ#XNpu?pKadvi5FB#|*_+^giEU zAMVYd^ZsFUrIdds)>1u>tj;yWAI0&Uy}*s@iz&_tUV^gW zVcsXe`JopvN z2XN&xyfab?Y7|`_MwHUx87n4gsC?uW-;frY&~sW+%6&0-cV6=Kb!A}*W`ue7PZG?h zl%AE4#_a+hoK88CCO>b@zJ6A#+5&V-Ya1P0SNB@R5`tmN<($s-h%Fjm9 zDd2&h<|lyiHs58ck*6;kp`BG!7r3&q=L?+Vqw{bkWk&i0km2SBOB$H;(FbSWi*sS# z+kucGyWhWQqyFZ2Va`R3LFRP1YSFZTUTOYD)^W z-T+|+seuQ^(&S*g)5R&EiSdx2lrE&l8P-*4Ii~884}8MTJM>p=!?xqUX!XgeckzBP z>wkt77itcc8A*;$E!_U*L`-#b{-GP9goG&=&P`1A4=3v zc-*xbnXa_=_h2lwXzy*$(XOUfccP$mHN!J*E<2|lr#{Dv!cTCqD&>mTLT09!a!mx! z!ag(Q6=1><_I_?Hd675|0vhW*{H~hJ`InP5nf1c)2_QFB`CIkYtang6m7{627~j>G zTimpvGV|hXR)_$)|2zan-OdNY1W##ri1x6JWX27TTwQ zo!gcK6~g1VQ%uYt4BRc&#B@Bib6Y-6)yp4?haFJR#K0&DBx`cYs3TIWZWo}iV`lRA z1ylLs#BB-bra`O=e=lEQu2HM8QQ`>s9V~wrQgw;!0!MH&`GjR<*L&_|kNGdh_5D1* z`T3+8m0&3;0hy_S2{c6yzqox+TdqClYA8r)HS^uDFD`fubS`i%pke=gxA3i2UQ~lW ze1+%AZUv@*tN6mxW5ja?y4B;cIR|IEEgsN=ZKGV0@bB&;@4fwD5v|ZxJ=dd5jbfx? zK$rET>G=Fx{Brwb*U3x07GW)ei>TletSX7;C*V+%_+Z6TyadIuY>T^j9eit4v}fiN=z(Up=yOjyKvHzbc?sgEwCgIE z<=nKzE4M->tx*wEC7AA6Y$1xEc}%}G8?QyoTuSK_PE57)rUyBI93qZo>O$`_RJG1$ zqEvQ$9k_|S*FC&mW8s{Ny0U`Uq?ND*ptkdxdU8VuJS_VUG9(1(Dft#_VWk6pbbdfW zOsju@W~%J$W9Rs+A!da5+>r7rGidJzaez7Al|LTa8T{u{S1aOgUocM&9*6TehvK9l0br)8O+>cAsT%zae?WyM6)Jy=Lw0E``9RtYd;w?jWDU8nsl31qv9c)*P{uLS z$-Gie?rk)In3a#R9C|+k(p4^fsUcDA)O*D0)joW9=~EUoha6}Zy^8aj%e%HIhi-yh z1n@Cc+q~)WQTAI5M}0{#J*r*u78!k9WF=q`xfR?ptxL8*WYA8+H}+a|$0e!0MJfTq zvp9=#Xbhz>HhXVyDi*iC+{u5NMQu@S#XLA4cu#tSlK53)D^<2aI|tA(HnugtU}zla zzc1C?$k+LKLPXN|%4V3;zk))xjWiU0E)XQ#nAOw&p=qH-Ry2>@)t$&7z#2o_G6?}a zaU5@kbrcxZb?9~gGq1QH)r!6OO*D0FPGw8#w@C2usH?vHe zu1o<`q2ij@9BW5*T5UfI0(#46)m;_*Dw*#cX^FZuRp=u#(U*T?Dq?O3x{+A)P2}Tc zzcvf_LRC^T2w1KL@!18{1@bQoHu`YeJ;3f>FjMV%PxtZ%TUH(!egfdQHJuQr|DumQ zW|ch@of*x+RZoT!8nM5pBotoAHMAE|4JulqSu$$37v2Z;F)(Z7!ni`2KSGft@(xt~ zNCHdRP7_)4`2K;7zSpoXpv(m&gQg1rSS)q^wKYe-(vxR`A3ARt zFsO^4L+~KTX?ueeC5_8Uq~(3bBM64>@7e0tt;p4_3h0x|eg7lT?ah)UeokGt!f_|4 zKz_`m&sc_|=3X(xKCG*FV1auOnt^Y2O&Ca`!$yN2sm2@NJ&)fxyz+kjF{)XRfJE;u zzrfm0icgMH{gto&vV%PesCijoz6tZT#)p<>een~p)^xO_WBdKv zjtNM34Ut-8iCl1yg#V%ms01xPQSg>Uys zDScs+y;j=oN;?1g(_7C>`sG$*T>a1cTN@|t=o0La3O%*xHms!IPA7kzUapdyysGVf zs`BvA)Bx_L<27n0+KdB_bPMv;f8>Gjn5PB3vbLZJ3%n~&Y(eArW?iRf)qT$cw>tDn zWZI?^9(mTpu3dH%d1r?Aj@i@o<0$pD(-4MX>8nvt&#YoBYzo$fDC`l%t2k4S?0#MQ z;*WU=27qTEAWQM6C7z%el+9FgeHW_ID zjFJVaRJ^uXHp@u%1n()4r5y(~3U<)keDx}6(4PA?bHcc8R|ss+1oDf-^A}`omWg?q zT7*Tts<%3?W`)Gu=<$E()LXP_Y2m0r`10Fc^Lv}9af$K*dPI4}RNcxo)D^s!U*Pdm z*pvG%6H+6iydAs=N4mnl8ZU$!OL&~LH?KP3itYR72Q21B&6aA}`1A<<*f*RWC#)QfPIt1`BXUo=;@TrKl^tSz`R?C8{wO;C#Vq#_JSI=^~*y=Jb*Z_H0X zg8X?8c|^Yw$j-@>kB`HATD^VW(-r%lExYgl<=*a6uyLyO`}fM*>WA}oVr0F4O_aQZS zLe^g6-aVL!42k=mxSp@h&S8h~w=H9L5Vm z?14iqO1^f%%N)!Wvm)^-(!$G_avIh;(S~gY?n-`4sL~yH$2X`TYdE?l`H-pECMo5l zjw4OYTQf|2@RX zq{Ey}U3#}P)-)SkS-nB^kqirAs&vJqhL=5o<6R5kb#-Ch=DenArv9pjFTxB_G?v;|PwSa-kr}Um9AQ#iI4;tuAL{&Rq0Bt49Ww z?^8ac#I79)+wRZjiiUzf?c5{|-?Uko&=&u>JolZ`Sm!xh_l}y_Y}=p?XeRZ?D^ry7 zvL%xxU}gGG40%l3&N$7eWZDCRMk=stg&V8*kimJy`C;$uI6d3CCDbL;Wr0NOYGIWS z%ZWQnt)r#!X{c< z3>FYk_sUc`JmcUmVC8c&ynZEcGkynCb=1SBhZ8hzg{G1#9Ca}wki+iH?SHRgkh%HY z1AAq+N{rEV4XaZA+BL#K6Cpdb@Zi_n#s-7w#oWd!rukHzIyY1OMXWc&9f?4E$K6tA|zr82_^dIf!cFl3JSLv}9(&6N!NjI9r$Fdu_$g`mx-W6q?D5d`mq zu0XD)?fO0C_b7~(^kY8YMp1cm@-%MQbYt4v@F$>qK>fJ}+uP|-gR@k?GEl+bGGs0( zFuT`E%M`z5`9pNuq5r}ory%nMVy#o#z^bWFZmxNcEIYuuUEejmCU3t_h^xsEfBgaK z+LlK^SRv8UzUlcB0K`}?Z}ZZMPN?6Mx#jLtgbP1VVhMo@JQs;s1U{|^Wy-pW714Z0 ziJomcC0h1H-^|tlq(AJ=nrS}$b5Mnu4hCH%`2^~1EWXTX*KTA|dra{j*;mi08b8#_ zCte=-c93+R2B}y7VkJPJ%e{!(uk1lL>d_nAH@bLtddBaWH^vV|RJ~ z1mKR?JKTD1N5C#!ru)weUNJJIVp3xWy3GeqD4FvYC{gg~su`{*@ttUEOV5wuY2mAzk3YLqV$ICNq-#yF_gBTmR| zg(aA3W2%-8`5>zc=dP_MFB3@2^_3WfMK<{|D%ft^>`(3ZqMXTtmnU0-eV_OX6bCwyYAPI~oG0EfUzl#5LBUR3ui~zP97z)+2O=AV z$Cuu^Qr>nJUn&Qn%6irP#tKHq>Lm46((5G>bDF|4uq&1v)eSS;n$M{YuY&DO1Xt9lr+=i%m5~y@9fM5-Y zmn7#w>}4D8fmxrVvyy$tn&1sy7dW<}wMv&d4GayKs0Jh-?{}`+4k8IFNO7PswG;K= z2Pfnk8cD(+M92g_^flyWO!W+=GbTZ1ii?HdNEidEyy@D2iWL2fUzS`Eg;B`4Cwxq5 zmqj-PH;uX7d0aiD`@-(<4{@kWN2$^20MzpxG*<$3$pOD=GGF2kb`n}j@V`EU!7lVlU0ltHMUFOgAn&LZO@D}E$%_kw(873GxpA$% z=5=8SlKVuTX|9FOl-VmkMuhw-K@>%til7?}1?-`+&u%M@=!x8uRg$yqghmNpn*Z5r z`RYCigbR{5x2N`^kyX&7paI|MVcK-sw#*!}SrWb-*`WY9 zTv|Iv^G#CSI44l~I4m;<$U7^?XF=VynGBr*pePud(&5Z0Sw^J`1mZ}xD`-@t=zdM= zVO~OK>BQgQy$*9b|@Nw^`T}gaRQTH+Y=fWe$m;} z=*H(%-=y+)Bm?5r{9@M%yHOq?a2sSyZp~*MG}V`louDOIX{HW_y`$#19)P~ z$s|`scF9=qm4rnytcAYX(}V=NVrR+|gD`B(w1O{^27`u#I_diPa#|n)=?M8h>n%34 z*TLNYE^#o#7HaYgu$rDRzlfMC*F8r3sFt*q^U%;92P^UwhdGdMxy>`+i99T$3y-ay z(rT?;WjJPV81<@QI(nVSovajg3cB*2ogZWfV9{TA-S~Q_S_4$&Nf-%hG0Xe|D!h^dqZCb)N#1L!h z;R6ve(bL;WJj`vrtcsQG(90o6u!7FpBS3QFy{PG2f(JkJB|gJ3`r0c>I9h_Jlx-UJ z0}ePNADR!bwUDo#FMOQU10IU}k3x+Hgz6}kC3UGW-(H{4w@43FMGSLkpGnksd0$Jw zw5=@!EjRP*Jn2XFUI20jk%G=d{S0n80$Ip~JC6t{*>4B2YTe2!!Gw)RPSZvX`w+P9 z;d9G90}rWB0N8QjB>&0_HnjRmvN`j1oaqmgrw6d_8kr_`P7A#G-VkU6xZD~%yT5s? z{5;g!-9xbKEUwHx0V*GjFZY9(_9}2Z`ECQ@XT>*!!6$!{o^<$a|5RGM@9GwPm2IB? zSc2dXP|(oe;9yYyC1l`eY^Y>n=&Gi!-ylfI*;7iyn}!zm|EQUTrm|viNVwe&|F1U) zCjve*k;$mDJ)Z*aPKdV2vRh>ng)Ot-F9`dP{Ek%Fk?=rXL~ck)Z{84E#m=ytu1&5c zXe`LmX-Bz14MdQed&)K2 zulCh8Oxu5US|XE#ppOdTa}>fCOnu2KJM^IPzR6})3nK5t&TcxxlzJYtQ!PX3gZKE{ zsfv#GnNAxYy>35}!wFscs1XYusbeWy1ZJwtNV(p5NMY+phM94p6|b@R(TJVMqxYuX zAeo%)e!Qg0&_)I%X5BpHJPLGH(kR;W+$Z*|uH0Q3C25=bAgn62lhFXKFZ=1uyo{NP znAg~Fl%mCa_EyGsW2*AaiTY7`H8HZwyvx+yR96^0m1CD*n43Mddj#kqXmDxOd6bY{ zwkmlxT-u0H7qo6+%@R>IDrEUMLg)Mz$LW`An%-);GL7U)Le1hp4A(D34orAW+D=cQ zeEEPCwr5+>)3M^-oxSaKoOZ48`4>44L{OPxQFE{DxS-!7WYQDlX_+SCO)*|^#q`C< z@Zrbn8BJ-(pp(iCK(6yqupXvU$k`~Rm5sq5_jR&V+e6npm;8nfL|04@X(los^p`B) zG4Db8VLy&wBZ72RA$#1H2b*T)Qg7L7JFPr%@#DEg>aYYx$}iKK6W9_}55(f%_Ge23 z*0xJH)(%XQ?^7+lp*T8YqhN)VIO^ANcMdtG zvww}%ehZQpx)F~kzL`^|B@_OzVHuw*74Z@g$LbjGsx%BucfH~R*8-wJ>77Y z{e}_Sq0p=mrRi7UZ%c{>?D3g4d=0GN77owbH6uuh?{}Lqw4IF%elb-w10xg9f5#ZZ zqvcrQd^aY-LDG^(ohtdCfUk}fw0c2+dhpk3dG}E$I~eMLqJ_lWCisx0>(>?5VQ-)N zZ{~lgA7u|CWr9;P55$ZMQ}Qc9tg~yv#|DMDiA5`cQ`##j544foeCQTAbbj&H>Y6Ed z8bD!QgVwbH-}@24YG1>}iZ0U+8EIji{-eE`Ja)R4lHip5qMFq0CLQaEICO4cDy4;; zn!WtCYV>18qCW%MLV6L)5M0oM0MFZU*!#I7xg}oaN85tg?xsAMRTG-Ar znGqX5BXgoE-E1sJ9G3U$NtR|0ilUIDeWbI?E5fDlNu1nfs9+eKSQ@GlkfeS6Zq|8UeD~YMq|LbW4b31D9Wj=wy92}MSl^`OV3O)6QOPDp zE4NP0rB(dAn04o^h#8w8jkJgVv}qnk7D7S(1nZLebVM6JVO%X~31G<4>OWA2x# ztX(sH7DC~e(-A6IT+YuDnOr=mt;yizFSL0pu`-fwZJe0bNp{`ga!b`ynUDFH8@K8H zdZkjMh$N2YaSeB4MnCeDmo(c%j)w65@T=nXER-gB`G@YIU(=@v+5i3kmw13D1)Bqk z#M--K6+;E8S@#@Q$^JyX$7QhF2_%OJGjLUQvT0C2Jag*!&bGi9gpXj!*ljM z{$Sc3Ti7LQvGn}3sUV;c={Y!UING~~J@siw`ze<_G47AXo|bKX&qucHjxO=K6r01u zt&2Cif6jgYWQB5^*kEiH%VhI_F9Or)Q2<|-_8}q5pMI)U#l^h0l!21pzAXKS4>(mv zB}xJV z$))YL7)K&4zP>ynUCTUS#%_E@rve1iz-Oz(`2N(r?RNOOeAN~*>%goU!h$4*rOV*v zuIA?g;)9c{bDMv3*G#uG#s5Sm3n~K!XcGO@CXtB;zTuk(vaZcWD)_$5v~BS-LwACH zJH)3@Iy58aE==bHzOAxvlupC@bma71I;zaIo8ReQyE8WQuiFS4z)r|{(#dYmDQ}<^ z@V%o^@7F1~G4_@^+TKx+c?YoVJ&Jsl0NnTayK5IpU|I^btg40HZ+Bd zin!oIV^uy^rh3WW8My-dJXSn3Z=KF*-&*&9ck_MCMLbvv+ksq{G6<ECQabDn>y8{H^tU5mHG_SC9{zwMs~N*v87W-UAeT$iR=G$6JO<9kn434EcNHP(UpSBe zW!2*o*GeZgvuZX5cFU>Wmeb2-HnQ7|y@&gz0wpI>7;<D(!dbZ*AQXHjgO z1koR_`N=u5@B=55I0xKjJS0k81=04Z+Y1}7$BocBY9x6Qw~nahKLO!oN)#K3Va|D& zx+LO`f4qetnC1RU7+wYWB(80}revoSmj67)snfBrb1|fqsC6=B)D_G% z5={L|bXXGfRA-;#)t*u@NKD`h{C zjXn>n3i0kJl;2~P zl8?_--wJYRBj*+is%&Xy(o=uSH4!0~mF*2)5n%c59|VmBj``xx%n3j1A4nHbD88EJ z`H{0!BGJSOHZ2A!w#?$pocmN!Sw2vG(8?i)o=*x2Dehvk>;YrQ6$25RM#_e5U6v~l z)S>kyQjfga0`PpTj%%nbH+2sdSG9R7!)1>LFBZ#BA zN+l@OU6=`+;fTW_MyTr~VV*{;t$FZMuSY%`g0+*#8$aQr>gZ zT>;W;_iHqi ztdmR%26;Gc?2{-WaFFj@`^)13x6(aA)jA+$DoUwE?wFNjX9#AXRQtb&QnDX)uP3##2f65Ysd( z!pR?1hG!~RLW9;DHcP9f3kpt*#RCU*gNlqPr69+eN=R{{sfjFQQWm-)O2a3jxTUPN zk)8t{q;4!h``)Wamo0Z7-^QAUj6tyq3jnv@uI#0RL6RXY1-L=7UBN9~7*$9nPE;ui zXD;MB&9t;9=J67;Ew3P-GMtnO3M9^{mh*V($Mj@ghZnz$m^c1bMxzW>X52F6m_%nv zC#XIO(Vv`xM8-0T!~rH#SK#sjELx66En)AdjVY&$fGJ%-NIki(sWJ#0uVYM1QV!9D zM+;Feve?;B8ls?ANLW$`F4n+4gh3bz=$gWEvu!-~RV)#U`C^5-pkLA3Fdf~9D{G6B zjLiMe$1u~m6qg|qK~SeLZ(`nhv|J>ilix+Q=>GW_OFh#rZ9KVzUkxUK=VQBS7Go{w z6yKqdrds@d6pu;C1=D^qJt^V-=rqVLt&A(s-dx^i|tC_ zputSjnuQBU`=)lFFJ*hw@Hk65r2okMVug=^(bH&-OqxP^k}OI$CrqY4RD(o4h+xHWJ$p%xHX+D)A3jp~ zXGyPNn{-&(eoM$i$D14kraBUSNu1b>ZUj z?NTWQD!ghl#`B#z|JJ zyM_ydV`u=7Z4ms3L1!Vj#r7cLJIim2m|3KdkSRMS*D<_Oq9Y+_;nL9MCg&J~k~$5G z0JIQ5d@C9(glujGZE`V>Xol!zwDjO5;c}(WhMuvmwP8>*{EyM4Gq74G7z;guuq(b! z=!(l|+H1jj9?`;DAJ`;!ksn6yugV%C+cD=DFo7=nkcm6{@Mi6m8w&tj8i+y7;MBfp zhvW2cC!+~OI9?6w#i+#4A!;Jy6v#t~pQq|i@Bzo1l7r|8A%r-~bm7&Q_+>WB%ZV2n z7t+!-Ib-4xaFy`c!J1;`u%*KirdnGz9ON{*L^fo!s%PiO6d;z)tDmfcu);g?o(vvR z6X-VQ@bE?8aLanS;3~-r2#Rf?q(jo3>82W#RiaOqMb86L#6f!9WQnlYuOg=CH`Qcj zj5|=GKl3q2HzXouL4xE6-L}Y(r2M(Tm}-b7kh*qeeDJV{A?sf5VvjQS&&nb2@=#zk z`}O`1nz+zt-yRc9g{H%5#UojyS(@j>l2N&ahfN^J_95irMKZ)mpx{BM9VhS_lo(L& zKV(H|D738(tkufQY5hS>V@$j-O%ed;P?&Culy5^v?cCCHA=Xo72U%IcAkvmj+7d=+ zoICR!m<=8e%Cz>Aeem#=mS!AEQL^}mmr7+P33@g{g3xGe1QyqB3Y^sqShFtIpbcQC zC4hJ^?577&&hkCLt!W32x?L*)V09RSkhqx_ZV39H5x0bx;OIE2}P|3h5#8>el`6`X~2~mY;pVV-2 zfAPV_MAs3X#;-E+NM=wT^J(Iea^MzO!9%kd>o`u42tR>mSGMrOi2HD~5Ic1$0TA1+ zUsMKF>95t8UVO#Fjs4%zJm@w(zU>RWJwG^pOcew>E`pGc1z}LZL9JBLzv3VngU+Kv z!dXS(qL+V}gmb{88&C)@lc}^p+DQ8si;5x(Ay*`c!CBbWAWEB5(Zg~yr(=9CLuY?V zl95yZ7j=UOVa~>%M+gPgEF0W(A$U4bxM*2#Elx4%Hc>xG8JU;5)ule-m%&Ds)`Zlj zI^faeHOvPGUpRN&;}gkad5wyT0#-3g5x;>Pa8F@) zWa=oW2nm3n08z<{S@3**;bD2OBugqS#HM#$5o`v-i@Ty?YA2C$>gtPsp<&E0E3xFF zV|zC2-G)eDTR0~_^Ftx+teicW)SJYEy4*d%YEUXq1zMX-E-f`%hwxn_$tcMb+{$aS zifsYf*6Cz`Y+P7T2eL6)*MH4SG?XiPlau!;;Rko((TK7S%9dR;rEC67Y`Xz8W9xy9 zBN)f7kFC?yciE5V)klMD*GYdogeFd7Y*T`w{6H$;s+jpQm)34|Mk`y)ZI7&4kURAMaG124QAeb-IawmzxO%t2c4{Vat+cwYR6nqDs``&m?Wb zN2L^pmL!=F-kXvSveY`pO$BPeM(E|Y3Dp%dR^+eD^KqUIDbO1ey5*!)Z(N4))PcBv}~zsrl?h_$+3*U&UPjSD$En= zP2oM)#2ysmsMO4QEfz-$nS&($S(1N6<5Aph2HHUEk136TF#pGg_{+0!;(Hw_@RA7n zkU)E?qstF<089~|ElOR3NR1cyPL;~&WCvZ4Q5feTC>cSp8G32su8{5lT|n8=V8Pv3 z#OCc;yEJhy!KjpgHl0*Bw@_{Xov)&TA6EvdPb^TnI?3>n$F91n*Hjn-#l8I$jPR!@ zAK@vFR3zCIB++r`B0g1~E#(m31sB&noF9*(dL}BDNV+O@Bx>{o0!t~piI|aODkkzl zsDtiXxH?EAQJv*G{GujX+7q5zR5B^obCziRN6Td;@Cs%-fk2-Dk`MI1ir|?v#+Uen#B;cTs(NN{EU(TU}hPdjIV?!N-q2cHWc>> zh*ALgRj+x8$ZpKJyldj>WSIt(%!Ixi1O64%?BuHm3@YFcho-i{E~1m8vu1opC0z(D zuSU6p1!Dz(U66|7JI_VC%t@DUvR1MZS0*(oZdpvVecQhxhfY zbHK9Vl3zB29!(Z66e<^nC;Rp+VhYK@Ncf&yOk0K-x`BpwwAJ`r@=XeZiMb~?gRp9B z2py1WLZ54QDt8kuhNxT77oUymE*&*=??o@J@FO+Q3gdtaDKDG|u;3{QM||QwwKsmk zBqKgEf<%AHM_vp|?smFyVPq(Q$Q{3pLRSvl?mNOtM@+AfuyiJmN)Xn*7B7Q!Jysjn zfmp33C4~w_^bs~M7Gey-zxw}S?O!l@AMtaz$ zEpQ5^%cjJPik(*Gr1qCzCj5qyFUECysXyeK_kQl^vAy+Cfqh(gf zpj8fFd%dAYFyg%pRjwNcJSL)aZlaSg!F^E(x;)eY0TOC44&^wxdIl4{dLV=%!GfH@ z?h476bODO;P&GhhYV?ND1rTeQKt^gXNFK##zNk=b>?`pp-`}9fIy@(-*Y>mbAA-fD zACQ=!)Pd zX@xE~@P~8|vxpB+QRtk%Lat-T2x){c>G(>!twE|Od-o1D2nhfOCdd#=K{&Vt&w`$U zCPgv@4Q(C@Y@0?$Vk5=PKo|}JI+O@tHnDTsQ~ zB49YWq#jb^UkHE$EdVl(moMo73k*SE>VYPv&vyA*ApOxhOvUv9XVpGgqU-=o7`U0d z!gGNTg&3QkDvFyeVAQtiLqdjS%iI%;!ODl@(Acbp?beU7$-wefrH=kn+exe)(?x`r zM_M8vh0p+dvT8sB6PbQfg@BzMXu6%=_EEz#`ApFFKeC){^6C6vr7HD^Ku=|Pbk!Y! zk-%bJXfYo6z*bZrG3?bu3yGrA={^(odHPTKD_z+ABdG2kVby1RY&!w~XPquIxNt^k zHG~+C4p5wHgr9<#-KyFqn2m$)ur5@|H8N96!!IZUY{0RDX2nec5k_BPCjc(^MS2`x zvanZgg0`RsbHd(lVfM0mn*{???kF3*(ft@#?4?i?Ed!`SC_1W`)eTZUlT08!YW=D+ zO}_@h0zA^3S&%`98;AD^#Y$hQ%9UH9XPxKWFcbsSlAtKnu}+2%GS^t1MM##*39$Q= zL7+29$K3<4M1kB|?u6zbrYZx=r+tZi>->NY?_2Ywp=0E0{iqzwEV z0jg@bhVoGbU4!8l0w@AJl?rJ9L3aie}gdiYG zO+Czk00v`miB3(H$8va_TMO-!Mh(sGxfHQMm~K&EN(U`J?t~-bc?A$^B5&M!kZLHY z9wtT#ltz_5ssb$M^0H}zKH8xpm`k}%NZ6Rg_PPe-jjiYqG6V*#RN0F`tGa$Y7wNvx z2m!{(`%E8jLP^EP>OP(jFa7;UNCA|QwkMUjIjo!}gsKD;9($F7LpG4N}I$9WZ~ zr@LS=(F8*30EAH>Nr!q8KA^q7Y@|q#kC7+<7rJr9RcbPf)+*U0#fk(FZ*J(ayTCzo zSi1|kGzAdAv4>Eo*wU#F_7lsQF}KPDmbgfJqLf_0{{R8e3!uno23jkQK#mA)FjZo8 zM;J*!9S2J)b5mYEQ7m(6nGg_xvNg!9JS4QoKjNtZ9N{IyHIjOET#e1G;=31kEVRc zEd}8@<;m=giUeQ$?x~V39#b8xBw4B3W!NCN6j#?U0DBWPE06H{E9c~?U=Ud%Lq{kH zf~vhnd4bci1@IwV9msc-_WLKwBQ~-SBXSxAk(3=wdJCg&HV7L#0;93l!2kv1l}<_J z0m{a}WUjalPJhGTBt<(f#FWhSJf{AoX+B%R-F8|AwH>7jfGC`}=?KY%*~-U+{Fu}w zk!Dv4Vm!<3O2&1#OcntH1aqgK1Y8ryDC=rcMC~Ot8UT`3C{O_#D#bO&A#oONfIZBj zp@9#6RnHRE+vZcE+8~1g!_^-$@HXz9$|DK4qkjDF9ApKg~FmVs@NJhA_K+G~m8tJd)Y z!6VIZ)p`^cTDh|Hf(SAU5Q+r9vBtD37Y^o8f^rZJgLf(ofth@&4g!)2iW~{Dq&t~G z$YgNFpWu4~>W)xlL3HVoS)y56e}Iew%tp`&%cSpCObo2Seckn|2>Qt}+oI z9FWT|-*{O-Zfch!(rx>b-~d3O%P(F9)}T6%wa}*Ad^!&2n*FMYB__8{aAV{v8~P7d zArf!J2B252nV=`?12E}laTLgZObx=f`(8p8(L@>Zja0rs2!nlI2;deU#S%N3% za5+1t7Y^8dM(E~jC7W=H?rdLuypWR((aTd6QnRrOd-}Cm!_~f1MXVw04jzi786%Ro z6we44j!43c0X?dO3J+0XrNsu|H;&6cTAGrgLW0BX6x;!! zSHLDAWt2I}+t3S>1QUl|;2>lU5#e!g9(*RxSpstewT-Zq$N)%wWS25%V zNx7sE7lT1YkB|&tndy zT<#3w!di+Fn1JAJ)7dZ(Y4U|I3>6flkzx%`$E-jvTs*c>8_Oo3l4?$zIb!3=HA?{a zMJPHULGmwr2-3J#UA8asPtio6C#*W2it~Ds0P%UpHfhs=r={dn?YgW zN&{o^P!Kzf6Qu1W{Epr5Y7R=a?n*gaq-NgzozaHNUA2il|L>QjG)KXC+Fk(eFh(8bA~ ziG{csx)Ajo7v!7}2%(U%;wG+dvy>NI7|9oKkL08VQ%uVXnvDw8*H94siWa&qTUAA9 z43|da($Q>*YtZn3>Ci!i02_ab6`IY{`Jzd5Pym6Muh-CE>WzXO5C#B3HOR%#P$I!L zbMtilX0ZEGzR-Vk-vGnmH`6BiBk-er@ZQP8t_dBH3Bn>tHy1$g9ScAOu#I6O)kOnD z0)|5e2C|4^Mj;z?RIEMdNVqn#Onjgizz3lcOaZ?1RLC+Y8R`@)Ti@lKWuLh zT-6+49Np0jYDn?+u8oIdNm0{#p+TF}-|c1!7g!kKkk%Y1-cmm(SP2DCLy@Rcp+~Y< z4(j?61xq178=AU#S$d7^g&Ef)n$?AM5RF>s4>q{`ugvIh=JXqbBtC=Yu=cOFlKHUQ)c z45^qsT~W!6N}&fydmu*Xl?@Pw!#W*_&q2rz2ECEK2P4$@MdjpVp(p`*NA0QN;u#)r3T5IsJ`s%;<>AxEkb z@>-(@D6}>Cg}^c9h+f6^C!W>)Sx=wRwSXNICmxN;FC1q;G)<{BL9e5yXg{s!8h}}> z^zSIojn@I4N29%!{{TRsC7JJVKvhp3g>W1}aP~z>2*=Sfo<+f^L^uL&1Ga?*5h1}u z*ldX|h8R;ipwVCj2ql@22Quh{HPFE1AhnhuXdB?05JvpDK-+Ch#yb2U(cj$_a%paZ z(Ci}iD!(-q1^`mbcNJTo@cH^OV;Kqz$fTwLj%nQ)-KAHc#RowOKs#!I19N=U5gAUQ zNa!&6x789!B*{YBHh2ZriZ1jYbipnkqI}p))Dyv+{1wYCUZw=>5kMWCo`5F;&Us}r zf7wmw1hOtNnI4D}V=F}(54ETK-Dyx^>(7ew^05dUWObEAwanr?1It*xC5&&{wg?p(9?H7?*dY^*+L0awwVyAy9 z-8;f1Fx5zz3jjSpIYcsUO92msf>xhzl*RlbaK_(77TKl?`;k0>uzrgo%$q6IexK=n zAM4Uh*(JT<3nT#n7zjF}G7ZC`WVsLJGd*Q~1!Dbhm}%CG`vS@0n`s@DE2kBAM7iq^ zu{h@ndMKus5{fZ#z?0cI;5?N2T~CipZ&1zMi+hAf8HS<9XH~B?`-Kv0WN}1Oi`DW< zEj)pf)cVO{BrMM1Nj1OWIEFbu!SGNQd&!`GXot&W>`F44`H}8}&ctmWU#0qgq%WA| zT#n==H-Dmgz%f@^C}uc*s8{0lp#WZm~{2{{0XCLl{imaeoNjG7V0*Vgdb(UrX!gn8H~9y z^#a1{T(J30ZeczIg9wwrXFWWG)dz5Ynh+FGGSLYEz=dmNg)x5DZB&{?jlof+2b)8$ zqafDBXCxb{IX;94^u)-GeQGKly=t&f5vilFe$OD$cSCC6&kcjpz#V#g;hn$y*K}b@~-jMJ>3NPg(Dk-S;g?&OI zOQwe7z;ZDqWoS3$$C#HwEA|7$%p7o$q&Q1d9QJno=jtNnRCPxpV&EN*j_~w!Nq$vO zvBPh)u$|=o4}M^XD#s%#31=%)#}Qb`2Bm9sEba&`-hybd<9;HjWfN!t-tPl)sd~!W zXGXptt_rN7H@l1gSw|1`D>)874cIWfj$N!!l?SkSAA12(Tl?i6^H#7PPkH^rhk*X& zN|b6W`dO47oTt?@H9zF@k>w-k)A>2Q7#(A~zRUx;b`0yguasiSFEZ^@i3v?W7;#KE zuY_WOhg2`HOhPK^(cF0xBm-B%%MP8LU~7zSiO|&B#2m4mkK1}ebsS|QpiQp<2@7RD zZ-H~8kOa0HGz$*lyRL*7(hqy7lFjGgRG8+`S306F$`6 zRDXVk$=4a?Gjh2*UZU?AW|$Ck;})fk^40c}&=tvv|lcwzKPoFkCjw2*gE9?4PZu#`^UrdB{&-mg)# zAdPXhmKqclG9zXtNqVDA6$^!?DPkh)J?t?m?jm}cdY3Eob^1Xpc|h6ziF5+&wF>42 zow#|lFdi1zV!AXtn3p!n*MMYV;gJnZ6lz6W5DuxZM%K5oOhNZYp4Irzr6cHeC$Z)< z30MIyC{cud%tI>EZ5l*Cy!r($6-N}xlA~C#5M8BrcHrP+z}#xVj*^|6i*R7If?XR6 zY_*j+(b6#^h<4G(Ldv_g^Y~Y;?t15-WrPnY1n^k;vt3=>Rn4JZU&G|afvcm;dxHa? z8~6>9VaPJ$q4*Jb?8mSW1|-XY@4u5RoSZ|+)Hshh-gSqhT}S4l(O0x9?h4KGJz*ZF zt3Jpbb>&zk9T!CPWGp%Z)r}cMTC_FgT=7SM}AI506|G(OTXS(1f}myf)Oui zt^g_6WtW1E_&`KWk{sYN(iGSjsNf1>HtDEJ6M7i*sl=o4fp0rC7}=d zo&v+RA>nxXZss<2;2~^$EGJ|h-u2JcbJVmnB zXoYmiAcK2kN#P)nZKmE!X3iJ^EG&9Kh14!5lT;8bgw?nN9ZoR|G9j-=jsv8*O*3ig z@C^}TuA9}#jTvOqN2Ccuv_E6J8CHZ>$IuW2N&wN^=n0TC`2IA8#j?Wa@UL=ODOS?* z6im>^lB+-_E>o>XDEgWd@0)|N9V1YCP~GQZ2A^KOogj5kjEF-mDo$A{e?>)0@MfC7jTWp#^&gAlDNJFIcMYvn(%p zz1%bH+BC8$k+0pg*lXepUY5Nem#z;4@NS&4?~xn0LwYUij)B6r0ho$iY-Au50bS5E zjYT|4Hd+A-k>V|*!XSAeWI6}HXclPgGshK8U6BmXf-Qh~brpD+% ziA4sULLhx*!LzaF5O3g_Q8p}udyIExR;c<7iSOnQmV3*G;%4&Qu+t)oRn14T!`E^b z>sL6+a!lF0Gxpz+P%)=>`Nl5>f_j+|=LisayAkh)*S23%-THrKe*yJ3M`zTNQvL%y z)+kv#6Xvh9w{ObSJktYeHg2zxW8xezdIzWgdy|&61spP=4B17t>Z@w^SPk&^7!(>5 ze2L?K3DTf6K;FuXV@1ub-jk`(7+6Uw9ufTmLK@- z^939LnTQ5cZ1r{$f*?5qxgbG?WGs0FQxTE7e318DP86_SIT#?@*cwW}i{Ob)yUv(q z<=7XuAub3ysPI9Zm#iH|v==>#DH@G&@(Lw^8=VT}=sUuxD{Rd-crMvx{h%I7n=+V3 z3u6AhY=KtN;IAyUUAR_4m9xwPqSYSCxUb^qtkm2B5{z4xQ?S%vhbqyk4GZFD{{R-v zRCO@=kaDm0yi|kb_g<7lx*Z$+^7f5gSA zt~Kxy)%llAGzFd$Q6r@hU-*;eCQt>xL5|F3Q+40t)Pex$!z7N{IY=+XmdEZ{Hi3d zHU;@i9UylPT|nn~P|glB`mYgt&RRY(3=4nR6n$WJO?XAYFl-SRb_W?%8HB9nDXvH& z3b8DI8`G6=zs0#bp?e_S%% z_XXq$k!6z+0^7Qj2svWSx<9QZ!p{f3-9h0zD0^CbBVWrMcz-QaG+r?JizWW~7uVDN z;{Bs2TO8Z=#Vq()eu!7ByA??X5&Sv{vK@g@V_LPhkf&&ap$S1n6;~~)#MclFnmsy2yx3(bEH3Vd zkBw?bE{?3rR^{xoZXA_5Jr|xAo*8risv)De3$jiO}`GsYd6Q>MoPn{nQ5*YgqLl3x*A)>JR~9uA#*+ z2z7T`>LNqMp2q-S=t6*7&}b6;xIS1%y;qo&&{(QX(x_+d=a6{3Sgjz@As> zPxT_~KIo-xa-T3xJG%b>fg=m;%Dum7MYh0Bb#W2gLDh@FY4{dP&%vm7$dyG)ii65S z*)$zZ`Hce?M?5@@kY%4xuVstbSCem4x6HShY=Pjtjv0)0n|J(k&ud-=uJMSV15blr zFiHsRgP(JyKY2TlOU$63a zo8g6ecb}|RuVeNwXopsQj9*A!;sl|rY&Yq1?*LxmUu|M-RfNMt7jI}oD5gh;{iX=A zhL?HNt*MM)>jl2D94p1YM0Py4`a^fcar=MRO;p`a)GNPYzp@+Q!oMMcT%K|Ab$DgU zb1(cFc8}X(DfPJ*bx`y`O?zU$h6vL{dwnvqYd^9U{#qf$=>u%%0P_@MnoGlAU|LNE zyd_}B$Q`vU2+mrJu1RS&wr3VK;_7}VU}NLy<~XLRgHcmbCp|a>00-Q* zD$zaYQp9Ng07bznftTpp^+{1Xk5W0~^MjK!u)XGLV0mq2?T-bUZ;qN3GBGFaB+=FuHcIti$rna@VvVv3; zxzOeuR@{EW?gdTrxtfCf$?-nSvC$x@^~a>79TP10fG?>S5o9`*9}gjJr|B7z)Dqx} zqRPN2ro0FugOZcd-pQ*Va6vT&!`@_J9aSTu{2?C`W+`&HF{ax7NMu|Q3=mj14i1C7!(zz&h)+^J$!m4gKX_sGhE%s3r@d zW3u+^Up9Rd%BB~DrtYBP8wm*{%%(S6fyaqq&CY z(&{E+{$g!~F0>$^p3YhF3o|sSp@0GR zbNyyBRLzV1F=P2n=p!=TgU|5U<_oPB2B#}uRoqZ_kbAIUfss{fweycp{2r6y4vZ_( zfs=6Kg-eYhV`h!_HcQYwW5+l&Y@ENQtGUY$TxG(|#)1)#IcGu1>jDs|pP^W7*|t&A z?g_KU45zbzdcA&mc7zQS6F>|G0(5dZlQe+T#w%SwIJP4My~DID=PV%x^)ea_cY$ZO z;Kf`Ysw6X+wlxhs4{#l>J=}$5j@3Ob;vV<*{{XRm zEb_;A&M$y@gqX3EOn?kw#eHcNdKQePPz43j;YPv@K}w>~TQWRzR2$!t zw=_$OP*=t1`590^BiBUlG=&N@<*mBjO1XSC2JjI=!{vP4tCbmQ+A7!@G;a>kqEc-@ z@>)5Qv2U zdaXK8qSaf7sBPI%L@3TD^)ZACv7B%{P{sl`wV;d^X_)rPwEoUxk|}LBdwdMb zUi<2!oYy~bL^kVI-uWY^L(2Omirf!!@K*%ej+BmR6no9Kd2V?!=49qjmA3g1I|~#= zptcbrlJ~H916UxM1EbCDcC5o&Y*pN|pWGO7%WdSmmQr9Pm>fSPQ6Vvf*M-417}bEZ87eo^fwozvJG|y;-&{8+j=VXNu5L2vxdudr!yS^pKHM>m^C=mdy$<* z1zcAo2)>(xX<6KhN&4hQJEW?OL95KiAfejY3aYMhw))im1Ww-AZ`I2(14HzX8jTN0 zwIGF_JHD$>6-#=o;ko<->%9}N#b3F`d#CLjJ6;Gs1{$0?r?S4t8d1cI;m68SmiDhd9O$r4vm^Rj7Gq@9Ej$Q9+@F+(YNwi zFhtx04i9p0;toA>Cr5i0T*}mCk6YPO8iBNG@#6JAFNg#n*!&7m2+(qOKP@Ez9Yzr0 z)a_u#z}hbkRlZF|0ozCNL#mNz>gKK*tmq=_Mr+@HAzqQG6NImNKt1egeN;Ac==dBy zNoja$_;^O3o}bv7eL<{nyS$*edQAOXK!Ovm%miR*nl$<)qL^g?z5qN#da3TsH~4$Y zl~LgyH@HHO3J<_@EHfTvrKzD^n239<89X{MwJkg|hBA`7=bOOHtrj80r?8E;aC_Xe z^M2GcgS9J;auGsnr3$6YkV|j^K2Nn{LZ;y1Y#*sw`fhMaLD!H`-reYYO2Im=d>|wO zhql!gysE=kyC>m#(aJ4pMALA%GN{$wp?fYG#D=vh7r1^9?*^kbg2X7BYcHr38;bNX z`Dm|DNF9*r_;sG%8J7;45wgD#nAU$7=tj}IA=n8>I(opp8fsiI>4M@B;|DW(ZpTsi zQ1<7-MU8cOmSre*S3&Z}9dpGwShL7RhLb5Twv!zPp|?@TQdcu1d_hI${){S{1h@5ez0M<}@i&2m&2v5_Kdt7ph-sPOqc(lxkiOebF8! zx)xW0)!G~^1mJbtM-0`eisB~)mQ2>9_7ngF-mEca>c?PEN)W4sJdWzp6a-`%9G4*T zL^9Mqz#hRJO05q42INJQ7FtQVft|~XZJ-!{Kn1OeFi3#AR!h@0G=u5`Es&Qxgba)8 zI;=c|@c|axru(bxnjp{JEDoHpaML7XM-L}Y#Zjl`&0a2h7F#_WM*to0KdF?tM-L1% z)BXtO!GX3Y)!1D-MezK`@{KQB7j#8A+hvV~^40EO zY!1Z71jhu_pKz4)YQHNXMF29lnIBSBE=4}rC(LzvdI0)KaaiVC<^i5r$4=HSrN>18 z;XK%nB@o_$*J1{^^5Z{`MMgX z+Fz`(aP(v;O-R~}uW{%ykX^HSW%^<)PRRLCJ&(W!)9*vd&HU)=inLWu%tDy#Am4Zg*S1VPAMh!6>aO+q;Ah3FXw~A^A7g|nwbBJUB z(bzuY7_ImUhQ#GLDmNxMiy-nhhjqfXV?Djtx=T-523o@E8haqe*ER&ZY|bua57K_$ zbW*`{ZBC1cpNq$x$I2f+mIBh>Q-`Cxqz4Ar)M1s$rJ=QnxWhd2EVmZ@AZsmepxxso zcIuq}072N7_*?z(@2W2rtKj;z^Z3;bk_PB06axSf_=f3rU$RzlVZ{sIl#VxPPkSPV zSO5dybG%gdpk1?|m+m8Froj7^JQhMh7NH?1BAkrfw|GD~HKbD83Uwo6#28grDc25+ zy;+%v8u`KUf&qVY@1u8Q?u_oC)3i1aH74rQyiDFKs2DySp9PWVzUT^DD06 zX&im9FEPwL%a_gwWsk6JHc$AGIy-^(L(>6({2Izl_0^kqBKm`~_OqA3eh5GBkfT-G z`boP7Ti7J1LwbE$C1Gt^RIe$UbH5)n0upGFhKgjeJ8R$j8TOMMh|`uEmj|l{3Uvl{ z%eA`ogQuUKBoqOuq)KB^plP58JmF%+yR%3hgvu)6Og%3ii;t#|zg=FCTr)#Cio%3B zyE98J9}bjU37t0e%n81cB*cMNz&i{D!!!B&+@R{1+n6=4qYXV}`vZ%ZY)TG)(hb*} z*?3IHW1v&XlpCWqk^GKJ_h%i9z2tT9%n3!{PndUt>pEp`_e90@ljlmu$8@iBvnr^p zxAHbOgl>0zcNgRvhe)L1@)>7W@q8!XRm}&@^02SNFQWq2-~FIZNq*0$gjl^9RGv=W zYY&(NMjK~_z%KQq6V}kb5U5cowtI^LUg>{_>nZ`?YU0{dGlLui3T%vl!0#)luuH~1 zK#Ad)1eM6?TjNAsgBig+sj-07T;Ld+TiGg|7Rii_GgpShw1Tx?YX!`DvN4KO`AOvc!=t;scd3ehUpg&()SeWluVu!Db-t54mn)x>IrlQz1Rx_IGTA! z2{)PQd(7oQ<>?=z4!Mtb!36nc8V_?%Vkt**Y*Gf2t3R1xb>;L1L&{b7cK z&EcCz#xl5VlY22zFIqgwpv?L_NBZTn_|j45Tnx4 z$CgS+ZlZ^Vgr+@GMdBTvqq4;x4dnj-0n2wISc^$!;aU$Y5U)E$((Dm67fE&H*gMBO zT!r*ha^D^D(jsg5cAEoI&_|>{Pl1m|QW~IqzmX{9@C38dC^OT)HtK2F#1$*A2-FQn zk{>{HWr-~G6ZUqQ!tPC~{2&-LTZu^v+ywx!+g3r$(eZi8n5K;^>`x5P7h+?Mmwv1% z*u66`>39z)L5WPP!+;2j#Y3}0z(4UqTsIwl&iXIn5k6bbL)f&Ys z4MmqeYDtMJ^l)fSQV$p&d1kZs8Q!kYd8e7V=LZ*`X?;Rn7qaO2aQ7K?Myo_}3

B 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 mA0GT82mc&{|FbF}q86oHg!this._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right

',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t { + let square = document.createElement('div'); + + square.innerText = ''; + + square.className = 'square sea'; + square.addEventListener('click', onClick) + square.id = [i, j].join(''); + + return square; +} + +const onClick = (event) => { + event.preventDefault() + socket.emit('click', event.target.id) +} + +const createBoard = () => { + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + $('#root').append(createSquare(i, j)); + setTimeout(() => { + $('#' + i + j).fadeIn(600); + }, 12 * i * j + 200); + } + } + setTimeout(() => { + $('#hide-info').fadeIn(1000); + }, 1200); +} +const updateScore = (score) => { + $('#score').text(score); +} +const handleHit = (id) => { + $('#' + id).toggleClass('hit'); +} + +const handleMiss = (id) => { + $('#' + id).toggleClass('miss'); +} + +const sink = (id) => { + $('#' + id).toggleClass('sink'); +} + +const handleSink = (ship) => { + ship.forEach(id => { + sink(id); + }); +} + +const handleResume = (hitted, missed, sinked, score) => { + createBoard(); + updateScore(score) + hitted.forEach(e => { + handleHit(e, score); + }); + missed.forEach(e => { + handleMiss(e); + }); + sinked.forEach(e => { + sink(e); + }); +} + +const playHere = () => { + socket.emit('playHere'); +} + +const alreadyInRoom = () => { + let message = `Parece que você já está com uma + aba do jogo aberta. Deseja jogar aqui?`; + showMessage(message, 'Sim', playHere); +} + +const connectionClosed = () => { + let message = `A sua conexão foi encerrada. Deseja ir para a página inicial?`; + setTimeout(() => { + showMessage(message, 'Sim', () => { + location.href = '/'; + }); + }, 300); +} + +const startGame = () => { + showMessage('O jogo vai começar.'); + setTimeout(() => { + createBoard(); + }, 200); +} + +const youTurn = () => { + $('#you-turn').addClass('in-turn'); + $('#you-turn').removeClass('out-turn'); + $('#opponent-turn').addClass('out-turn'); + $('#opponent-turn').removeClass('in-turn'); +} + +const opponentTurn = () => { + $('#opponent-turn').addClass('in-turn'); + $('#opponent-turn').removeClass('out-turn'); + $('#you-turn').addClass('out-turn'); + $('#you-turn').removeClass('in-turn'); +} + +const waitPlayer = () => { + showMessage('Aguardando o seu oponente.'); +} + +const handleWin = () => { + showMessage('Você venceu!'); +} + +const handleLose = () => { + showMessage('Você perdeu!'); +} + +socket.on('hit', handleHit); +socket.on('miss', handleMiss); +socket.on('sink', handleSink); +socket.on('updateScore', updateScore); +socket.on('startGame', startGame); +socket.on('resumeGame', handleResume); +socket.on('alreadyInRoom', alreadyInRoom); +socket.on('disconnect', connectionClosed); +socket.on('youTurn', youTurn); +socket.on('opponentTurn', opponentTurn); +socket.on('waitPlayer', waitPlayer); +socket.on('win', handleWin); +socket.on('lose', handleLose); + + +socket.emit('joinGame', room); + +window.onbeforeunload = window.onunload = (e) => { + socket.disconnect(); + return; +} \ No newline at end of file diff --git a/src/public/js/home.js b/src/public/js/home.js new file mode 100644 index 00000000..c29aaed0 --- /dev/null +++ b/src/public/js/home.js @@ -0,0 +1,32 @@ +var socket = io(); + +const list = (value) => { + $("#list-rooms").append(`
  • ${value}
  • `); +} + +socket.on('listRooms', rooms => { + for (let i = 0; i < rooms.length; i++) { + list(rooms[i]); + } +}); + + +socket.on('closeRoom', (room) => { + $('#' + room).closest('li').remove(); +}) + +socket.on('newRoom', (room) => { + list(room); +}); + +const createRoom = () => { + socket.emit('createRoom'); +} + +socket.on('room', (room) => { + window.location.href = '/r/public/' + room; +}); + +const toggle = () => { + $('#sidebar-content').toggle(600); +} \ No newline at end of file diff --git a/src/public/js/jquery-3.5.1.min.js b/src/public/js/jquery-3.5.1.min.js new file mode 100644 index 00000000..b0614034 --- /dev/null +++ b/src/public/js/jquery-3.5.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 { + $.ajax({ + url:'/login', + type: 'post', + data: { + username: username.value, + password: password.value + }, + statusCode: { + 401: () => { + username.setCustomValidity("O nome de usuário digitado é inválido."); + document.getElementById('submit').click(); + username.value = ""; + }, + 403: () => { + if(password.value != ''){ + password.setCustomValidity("A senha digitada é inválida."); + document.getElementById('submit').click(); + password.value = ""; + } + }, + 200: () => { + location.href = '/'; + } + } + }); +} + +$("#form-signin").submit((e) => e.preventDefault()); +username.onkeydown = () => username.setCustomValidity(''); +username.onchange = () => checkRemote(); +password.onkeydown = () => password.setCustomValidity(''); +password.onchange = () => checkRemote(); \ No newline at end of file diff --git a/src/public/js/online.js b/src/public/js/online.js new file mode 100644 index 00000000..284af18f --- /dev/null +++ b/src/public/js/online.js @@ -0,0 +1,24 @@ +const listOnline = (user) => { + $("#online-list").append(` +
  • + ${user} +
  • `); +} + +const toggle_sidebar = () => { + $("#wrapper").toggleClass("toggled"); +} + +socket.on('listOnline', list => { + list.forEach(element => { + listOnline(element) + }); +}); + +socket.on('newUser', user => { + listOnline(user); +}); + +socket.on('dropUser', user => { + $('#' + user).closest('li').remove(); +}); \ No newline at end of file diff --git a/src/public/js/register.js b/src/public/js/register.js new file mode 100644 index 00000000..a42bc4a8 --- /dev/null +++ b/src/public/js/register.js @@ -0,0 +1,77 @@ +var username = $("#username")[0]; +var password = $("#password")[0]; +var confirm_password = $('#confirm-password')[0]; + +const checkRemote = () => { + $.ajax({ + url: '/register/username', + type: 'post', + data: { + username: username.value + }, + statusCode: { + 400: () => { + username.setCustomValidity("O nome de usuário digitado já está em uso."); + document.getElementById('submit').click(); + username.value = ""; + } + } + }); +} + +const sendValues = () => { + $.ajax({ + url: '/register', + type: 'post', + data: { + username: username.value, + password: password.value + }, + statusCode: { + 200: () => { + $("#msg").append(``).hide().fadeIn(600); + setTimeout(() => { + location.href = '/'; + }, 3000); + } + } + }); +} + +username.onchange = () => { + if (username.value.length < 4) { + username.setCustomValidity('O nome de usuário deve ter pelo menos 4 caracteres.'); + username.value = ""; + } else { + username.setCustomValidity(''); + checkRemote(); + } +} + +password.onchange = () => { + if (password.value.length < 4) { + password.setCustomValidity('A senha deve conter pelo menos 4 caracteres.') + password.value = ""; + } else { + password.setCustomValidity(''); + } +} + +confirm_password.onchange = () => { + if (password.value != confirm_password.value) { + confirm_password.setCustomValidity('As senhas não batem.'); + confirm_password.value = ""; + } else { + password.setCustomValidity(''); + } +} + +$("#form-signin").submit((e) => { + e.preventDefault() + sendValues(); +}); +password.onkeydown = () => password.setCustomValidity(''); +username.onkeydown = () => username.setCustomValidity(''); +confirm_password.onkeydown = () => confirm_password.setCustomValidity(''); \ No newline at end of file diff --git a/src/public/js/utilitaries.js b/src/public/js/utilitaries.js new file mode 100644 index 00000000..7241c623 --- /dev/null +++ b/src/public/js/utilitaries.js @@ -0,0 +1,35 @@ +const showMessage = (message, button, event) => { + let divMessage = document.createElement('div'); + let divBreak = document.createElement('div'); + let buttonMessage = document.createElement('button'); + let buttonCancel = document.createElement('button'); + divMessage.innerHTML = message; + divMessage.className = 'message'; + divBreak.className = 'break'; + buttonMessage.innerHTML = button; + buttonMessage.className = 'btn btn-lg btn-primary'; + buttonCancel.innerHTML = 'Cancelar' + buttonCancel.className = 'btn btn-primary'; + $('#msg').prepend(divMessage); + $(buttonMessage).on('click', () => { + event(); + $(divMessage).fadeTo(600, 0, () => { + divMessage.remove(); + }); + }); + $(buttonCancel).click(() => { + $(divMessage).fadeTo(600, 0, () => { + divMessage.remove(); + }); + }); + if (button) { + $(divMessage).append(divBreak, buttonMessage, buttonCancel); + } else { + setTimeout(() => { + $(divMessage).fadeTo(600, 0, () => { + divMessage.remove(); + }); + }, 3000); + } + $(divMessage).hide().slideDown(600).fadeIn(600); +} \ No newline at end of file diff --git a/src/public/script.js b/src/public/script.js deleted file mode 100644 index fb0b0640..00000000 --- a/src/public/script.js +++ /dev/null @@ -1,43 +0,0 @@ -const socket = io(); - -function createSquare(i, j) { - let square = document.createElement('div'); - - square.innerText = ''; - - square.className = 'square sea'; - square.addEventListener('click', onClick) - square.id = [i, j].join(''); - - return square; -} - -function onClick(event) { - event.preventDefault() - socket.emit('click', event.target.id) -} -(function createBoard() { - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 10; j++) { - root.appendChild(createSquare(i, j)); - } - } -})() - - -// Catch all the `[data-toggle-sidebar]` elements on the document. -document.querySelectorAll('[data-toggle-sidebar]').forEach(toggle => { - // Add an event listener on those elements "click" event - toggle.addEventListener('click', e => { - // get the sidebar ID from the current element data attribute - const sidebarID = toggle.dataset.toggleSidebar; - // check if there is an element on the doc with the id - const sidebarElement = sidebarID ? document.getElementById(sidebarID) : undefined; - // if there is a sidebar with the passed id (data-toggle-sidebar) - if (sidebarElement) { - // toggle the aria-hidden state of the given sidebar - let sidebarState = sidebarElement.getAttribute('aria-hidden'); - sidebarElement.setAttribute('aria-hidden', sidebarState == 'true' ? false : true); - } - }); -}); diff --git a/src/public/socket.js b/src/public/socket.js deleted file mode 100644 index acff6898..00000000 --- a/src/public/socket.js +++ /dev/null @@ -1,33 +0,0 @@ -/** SOCKET */ -function handleHit(id, score) { - let sqr = document.getElementById(id); - let scr = document.getElementById('score'); - - scr.innerText = score; - sqr.classList.add('hit'); -} - -function handleMiss(id) { - let sqr = document.getElementById(id); - sqr.classList.add('miss'); -} - -function handleSink(id){ - let sqr = document.getElementById(id); - sqr.classList.add('sink') -} - -function delayAlert(m, time){ - setTimeout(function(){ - alert(m) - }, time); -} - -function handleVictory() { - delayAlert('You Win!!!', 100); -} - -socket.on('hit', handleHit); -socket.on('miss', handleMiss); -socket.on('sink', handleSink); -socket.on('won', handleVictory); \ No newline at end of file diff --git a/src/public/style.css b/src/public/style.css deleted file mode 100644 index 58e0ed73..00000000 --- a/src/public/style.css +++ /dev/null @@ -1,89 +0,0 @@ -body { - height: 100vh; -} -.root { - width: 50%; - margin: 0 auto; - text-align: center; -} -.container { - display: flex; - justify-content: center; -} - -.board { - display: grid; - grid-template-columns: repeat(10, 0.5fr); - grid-template-rows: repeat(10, 1fr); - width: 0%; -} -.square { - border-top: 1px solid white; - border-bottom: 1px solid white; - border-left: 1px solid white; - border-right: 1px solid white; - cursor: pointer; - width: 48px; - height: 48px; - background-color: rgba(71, 105, 255, .75) -} - -.main { -display: flex; -} -.content { - position: relative; -} - -/**** SIDEBAR ****/ -.sidebar { - background-color: #f1f1f1; - height: 100vh; - position: fixed; - top: 0; - right: 0; - min-width: 300px; -} - -.sidebar_content { - padding: 8px; - overflow-y: scroll; - overflow-x: hidden; -} - -.sidebar[aria-hidden="true"] { - transition: 200ms; - transform: translateX(100%); -} -/* SIDEBAR VISIBLE STATE */ -.sidebar:not([aria-hidden]), -.sidebar[aria-hidden="false"] { - transition: 200ms; - transform: translateX(0); -} -/****************************/ - -#score { - padding: 5px 0px 5px 0px; - width: 64px; - text-align: center; - /* height: 24px; */ - border: 1px black solid; - border-radius: 8px; -} - -.sea { - background-color: rgba(71, 105, 255, .75) -} - -.hit { - background-color: black; -} - -.miss { - background-color: grey; -} - -.sink { - background-color: red; -} diff --git a/src/routes/login.js b/src/routes/login.js new file mode 100644 index 00000000..1c8689d1 --- /dev/null +++ b/src/routes/login.js @@ -0,0 +1,26 @@ +express = require('express'); +router = express.Router(); +const user = require('../controller/user'); + +router.get('/', (req, res) => { + if(req.session.user){ + return res.redirect('/'); + } + res.render('login.ejs'); +}); + +router.post('/', (req, res) => { + let usr = req.body; + if(req.session.user){ + res.redirect('/'); + } else if(!user.findOne(usr.username)){ + res.status(401).send({error: 'User not found'}); + } else if(user.find(usr)){ + req.session.user = usr.username + res.status(200).send("OK"); + } else { + res.status(403).send({error: 'Not authorized'}); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/src/routes/register.js b/src/routes/register.js new file mode 100644 index 00000000..33809d5e --- /dev/null +++ b/src/routes/register.js @@ -0,0 +1,35 @@ +express = require('express'); +router = express.Router(); +const user = require('../controller/user'); + +router.get('/', (req, res) => { + res.render('register.ejs'); +}); + +router.post('/', (req, res) => { + let usr = { + username: req.body.username, + password: req.body.password + } + if(usr.username.length < 4){ + res.status(400).send({error: "Username is very small"}); + } else if(usr.password.length < 4) { + res.status(400).send({error: "Password is very small"}) + } else if(user.findOne(usr.username)){ + res.status(400).send({error: "Username already exists"}); + } else { + user.insert(usr); + req.session.user = usr.username + console.log(usr) + res.status(200).send("OK"); + } +}); + +router.post('/username', (req, res) => { + usr = req.body; + if(user.findOne(usr.username)){ + res.status(400).send({error: "Username already exists"}); + } +}) + +module.exports = router; \ No newline at end of file diff --git a/src/routes/root.js b/src/routes/root.js new file mode 100644 index 00000000..04dc0f75 --- /dev/null +++ b/src/routes/root.js @@ -0,0 +1,77 @@ +express = require('express'); +router = express.Router(); +const rooms = require('../controller/room'); +const auth = require('../middleware/authenticator'); + + +router.get('/about', (req, res) => { + var users = [{ + name: 'lucas', + email: 'lucas@123', + avatar: 'http://placebear.com/300/300' + }, { + name: 'jao', + email: 'teste@teste', + avatar: 'http://placebear.com/400/300' + }, { + name: 'blash', + email: 'blash@bkasdahk', + avatar: 'http://placebear.com/500/300' + }] + + res.render('pages/about', { + usuarios: users + }) +}) + + + +router.get('/', auth, (req, res) => { + res.render('home.ejs'); +}); + +router.get('/r/public/:id', auth, (req, res) => { + try { + rooms.check(req.params.id, req.session.user); + res.render('game.ejs'); + } catch (e) { + if (e == "RoomDoesNotExistException") { + res.status(404).render('error.ejs', { + tittle: 'Não Encontrado', + error_tittle: 'Sala não encontrada', + error_msg: 'Parece que a sala que você solicitou não existe mais.' + }); + + } else if (e == "AlreadyInRoomException") { + res.status(403).render('error.ejs', { + tittle: 'Erro', + error_tittle: 'Você já está na sala', + error_msg: 'Parece que você já está com a sala aberta em outra aba.' + }); + + } else if (e == "FullRoomException") { + res.status(403).render('error.ejs', { + tittle: 'Erro', + error_tittle: 'A sala atingiu seu limite', + error_msg: 'A sala que você está tentando acessar, já está em jogo.' + }); + } else { + throw e; + } + } +}); + +router.get('/logout', auth, (req, res) => { + req.session.destroy(); + res.redirect('/'); +}); + +router.use((req, res, next) => { + res.status(404).render('error.ejs', { + tittle: '404 - Não Encontrado', + error_tittle: '404 - Página não encontrada.', + error_msg: 'Parece que a página que você solicitou não existe, ou está temporariamente indisponível.' + }); +}); + +module.exports = router; \ No newline at end of file diff --git a/src/views/error.ejs b/src/views/error.ejs new file mode 100644 index 00000000..ff061b71 --- /dev/null +++ b/src/views/error.ejs @@ -0,0 +1,25 @@ + + + + + + <%= tittle %> + + + + + +
    +
    +
    + +
    +

    <%= error_tittle %>

    +

    <%= error_msg %>

    + + + +
    +
    + + \ No newline at end of file diff --git a/src/views/game.ejs b/src/views/game.ejs new file mode 100644 index 00000000..1de4fee3 --- /dev/null +++ b/src/views/game.ejs @@ -0,0 +1,42 @@ + + + + + + + Batalha Narval - Home + + + + + + + + + + + + + + + + + +
    + <%- include('partials/navbar') %> +
    + <%- include('partials/sidebar') %> +
    +
    +
    +
    Score
    +
    0
    +
    Seu turno
    +
    Turno do oponente
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/src/views/home.ejs b/src/views/home.ejs new file mode 100644 index 00000000..573c79a6 --- /dev/null +++ b/src/views/home.ejs @@ -0,0 +1,51 @@ + + + + + + + Batalha Narval - Home + + + + + + + + + + + + + + + + + +
    +
    + <%- include('partials/navbar') %> +
    + <%- include('partials/sidebar') %> +
    +
    + + + + +
    +
    +
    + +
      +
      +
      + + + + \ No newline at end of file diff --git a/src/views/index.ejs b/src/views/index.ejs deleted file mode 100644 index 68815cb2..00000000 --- a/src/views/index.ejs +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - <%= title %> - - -
      -
      -
      - - - - - - - diff --git a/src/views/login.ejs b/src/views/login.ejs new file mode 100644 index 00000000..0ee2a9b7 --- /dev/null +++ b/src/views/login.ejs @@ -0,0 +1,27 @@ + + + + + + Login - Baralha Narval + + + + + + + + +
      + +

      Batalha Narval

      + +
      + + \ No newline at end of file diff --git a/src/views/partials/navbar.ejs b/src/views/partials/navbar.ejs new file mode 100644 index 00000000..fc348fc8 --- /dev/null +++ b/src/views/partials/navbar.ejs @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/src/views/partials/sidebar.ejs b/src/views/partials/sidebar.ejs new file mode 100644 index 00000000..2c30572c --- /dev/null +++ b/src/views/partials/sidebar.ejs @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/src/views/register.ejs b/src/views/register.ejs new file mode 100644 index 00000000..e0290da0 --- /dev/null +++ b/src/views/register.ejs @@ -0,0 +1,29 @@ + + + + + + Registro - Batalha Narval + + + + + + + + + +
      +
      + +

      Cadastro

      + +
      + + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 47dad3cb..4049dda3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,28 @@ # yarn lockfile v1 +"@iarna/cli@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" + integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== + dependencies: + signal-exit "^3.0.2" + update-notifier "^2.2.0" + yargs "^8.0.2" + +JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1, abbrev@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + accepts@~1.3.4, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -15,6 +37,54 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -22,6 +92,39 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -32,6 +135,23 @@ arraybuffer.slice@~0.0.7: resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -42,6 +162,21 @@ async@0.9.x: resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -62,6 +197,18 @@ base64id@2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bcryptjs@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= + better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -69,12 +216,29 @@ better-assert@~1.0.0: dependencies: callsite "1.0.0" +bin-links@^1.1.2, bin-links@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" + integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ== + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -body-parser@1.19.0: +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -90,6 +254,19 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -98,17 +275,78 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== + callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -chalk@^2.4.2: +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -117,6 +355,87 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== + dependencies: + ip-regex "^2.1.0" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -129,6 +448,26 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -139,6 +478,11 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= +component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" @@ -149,6 +493,41 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -161,6 +540,14 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +cookie-parser@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== + dependencies: + cookie "0.4.0" + cookie-signature "1.0.6" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -176,6 +563,67 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -183,13 +631,20 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@~3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -197,30 +652,132 @@ debug@~4.1.0: dependencies: ms "^2.1.1" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +dezalgo@^1.0.0, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.2.tgz#a9986e6920a60f2a3229e87d4f0f3c073209874c" - integrity sha512-zFuywxrAWtX5Mk2KAuoJNkXXbfezpNA0v7i+YC971QORguPekpjpAgeOv99YWSdKXwj7JxI2QAWDeDkE8fWtXw== +ejs@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.3.tgz#514d967a8894084d18d3d47bd169a1c0560f093d" + integrity sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg== dependencies: jake "^10.6.1" @@ -229,12 +786,26 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + engine.io-client@~3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.1.tgz#922ddb47eecdcb541136a93aeead24718fd05461" - integrity sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw== + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.2.tgz#4fb2ef2b1fe1d3aa1c621c6a8d87f1fc55426b50" + integrity sha512-AWjc1Xg06a6UPFOBAzJf48W1UR/qKYmv/ubgSCumo9GXgvL/xGIvo05dXoBL+2NTLMipDI7in8xK61C17L25xg== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" component-inherit "0.0.3" debug "~4.1.0" engine.io-parser "~2.2.0" @@ -269,6 +840,68 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -284,6 +917,46 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +express-session@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.1.tgz#36ecbc7034566d38c8509885c044d461c11bf357" + integrity sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q== + dependencies: + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.0.2" + parseurl "~1.3.3" + safe-buffer "5.2.0" + uid-safe "~2.1.5" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -320,6 +993,36 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + filelist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" @@ -340,6 +1043,47 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -350,6 +1094,172 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gentle-fs@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" + integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q== + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" @@ -367,6 +1277,33 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -389,38 +1326,269 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -iconv-lite@0.4.24: +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4, inflight@~1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-cidr@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" + integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw== + dependencies: + cidr-regex "^2.0.10" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + jake@^10.6.1: version "10.6.1" resolved "https://registry.yarnpkg.com/jake/-/jake-10.6.1.tgz#c9c476cfd6e726ef600ee9bb2b880d5425ff8c79" @@ -431,11 +1599,363 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +libcipm@^4.0.7: + version "4.0.8" + resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" + integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.1.0" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.2: + version "10.2.3" + resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.3.tgz#d5e01f12d383ffca9a947807ca6a8f587d38fe2c" + integrity sha512-bCvdARu55fLQBhMfcYGF0GznF1kB2sqxq/9zKZ3652M8DDFWpVpCnpgzjzn0yWMDMez5ZGMBiX24yR11uEYZVQ== + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^11.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" + integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== + dependencies: + "@iarna/cli" "^1.2.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +meant@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -446,23 +1966,33 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -470,6 +2000,61 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -480,21 +2065,362 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-gyp@^5.0.2, node-gyp@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +nopt@^4.0.1, nopt@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-audit-report@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" + integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.4.tgz#2da1ecf3f43d419d96abf313664291a4623d3ea5" + integrity sha512-6jb34hX/iYNQebqWUHtU8YF6Cjb1H6ouTFPClYsyiW6lpFkljTpdeftm53rRojtja1rKAvKNIIiTS5Sjpw4wsA== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-user-validate@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" + integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + +npm@^6.4.1: + version "6.14.5" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.5.tgz#2cc59a3158cdd8461b486d0584c74ab554567219" + integrity sha512-CDwa3FJd0XJpKDbWCST484H+mCNjF26dPrU+xnREW+upR0UODjMEfXPl3bxWuAwZIX6c2ASg1plLO7jP8ehWeA== + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.7" + bluebird "^3.5.5" + byte-size "^5.0.1" + cacache "^12.0.3" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.12" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "~1.0.3" + editor "~1.0.0" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.0" + glob "^7.1.6" + graceful-fs "^4.2.4" + has-unicode "~2.0.1" + hosted-git-info "^2.8.8" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.5" + init-package-json "^1.10.3" + is-cidr "^3.0.0" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.7" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.2" + lock-verify "^2.1.0" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "~1.0.1" + mississippi "^3.0.0" + mkdirp "^0.5.5" + move-concurrently "^1.0.1" + node-gyp "^5.1.0" + nopt "^4.0.3" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.2" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.4" + npm-user-validate "~1.0.0" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.1" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.8.2" + qw "~1.0.1" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.1" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.0" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.1.2" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.1" + stringify-package "^1.0.1" + tar "^4.4.13" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.3.3" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.1.2, npmlog@~4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -502,29 +2428,286 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1, promise-inflight@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: - better-assert "~1.0.0" + err-code "^1.0.0" + retry "^0.10.0" -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: - better-assert "~1.0.0" + read "1" -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" proxy-addr@~2.0.5: version "2.0.6" @@ -534,11 +2717,85 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^6.8.2: + version "6.12.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.12.1.tgz#2ae4d272db4fba267141665374e49a1de09e8a7c" + integrity sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +qw@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" + integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs= + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -554,16 +2811,243 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -safe-buffer@5.1.2: +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3": +safe-buffer@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -593,11 +3077,50 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== + dependencies: + graceful-fs "^4.1.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + socket.io-adapter@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" @@ -633,9 +3156,9 @@ socket.io-parser@~3.3.0: isarray "2.0.1" socket.io-parser@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" - integrity sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== dependencies: component-emitter "1.2.1" debug "~4.1.0" @@ -653,11 +3176,236 @@ socket.io@^2.3.0: socket.io-client "2.3.0" socket.io-parser "~3.4.0" +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +sql.js@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-0.3.2.tgz#1676321f0716bdbbdef8d6bf70603424405d3889" + integrity sha1-FnYyHwcWvbve+Na/cGA0JEBdOIk= + +sqlite-sync@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/sqlite-sync/-/sqlite-sync-0.3.9.tgz#5bd5a234862fa8c5f05ab653250d5a73ecef5180" + integrity sha512-+dv7cxs9VaNFPV1aVISMkfqCpTvf90aA3/TkmxsPKGiWnn39hoQOCZcbuFHJCGYF+cfonilfzpzEvSSmz556mQ== + dependencies: + npm "^6.4.1" + sql.js "^0.3.2" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -665,6 +3413,54 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" @@ -675,6 +3471,26 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -683,25 +3499,211 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== + dependencies: + random-bytes "~1.0.0" + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@^3.3.2, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +worker-farm@^1.6.0, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + ws@^7.1.2: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" + integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== ws@~6.1.0: version "6.1.4" @@ -710,11 +3712,92 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From ad2becefd8d0c4d5522527c301d8ebbe53b3ef22 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 18 Jun 2020 23:05:03 -0400 Subject: [PATCH 26/32] fix: database path --- src/database/dao.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/database/dao.js b/src/database/dao.js index 6b3f4447..da72a8b1 100644 --- a/src/database/dao.js +++ b/src/database/dao.js @@ -1,6 +1,6 @@ const sqlite = require('sqlite-sync'); -sqlite.connect('./database/database.db3'); +sqlite.connect(__dirname + '/database.db3'); const SQL_CREATE = `CREATE TABLE IF NOT EXISTS Users( @@ -10,4 +10,4 @@ const SQL_CREATE = `CREATE TABLE IF NOT EXISTS Users( sqlite.run(SQL_CREATE); -module.exports = sqlite; \ No newline at end of file +module.exports = sqlite; From 3c4c558108f9056759b9933a3e36244b63c207e0 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Thu, 18 Jun 2020 23:05:21 -0400 Subject: [PATCH 27/32] refactor: refatora controller e rotas --- src/controller/user.js | 85 ++++++++++++++++++----------------------- src/models/userModel.js | 49 ++++++++++++++++++++++++ src/routes/login.js | 18 ++------- src/routes/register.js | 28 ++------------ src/routes/root.js | 10 ++--- 5 files changed, 97 insertions(+), 93 deletions(-) create mode 100644 src/models/userModel.js diff --git a/src/controller/user.js b/src/controller/user.js index c3365b77..f0d15e98 100644 --- a/src/controller/user.js +++ b/src/controller/user.js @@ -1,50 +1,41 @@ -const db = require('../database/dao'); -const bcrypt = require('bcryptjs'); - - -const insertUser = (user) => { - user.password = bcrypt.hashSync(user.password, 10); - db.insert('users', user, (result) =>{ - if(result.error){ - throw result.error; +const user = require('../models/userModel') + +module.exports = { + login(req, res) { + let usr = req.body; + if(req.session.user){ + res.redirect('/'); + } else if(!user.findOne(usr.username)){ + res.status(401).send({error: 'User not found'}); + } else if(user.find(usr)){ + req.session.user = usr.username + res.status(200).send("OK"); + } else { + res.status(403).send({error: 'Not authorized'}); } - }); -} - -const deleteUser = (user) => { - const SQL_DELETE = `DELETE FROM users WHERE username = "${user.username}";` - db.run(SQL_DELETE,(result) => { - if(result.error){ - throw result.error; + }, + create (req, res){ + let usr = { + username: req.body.username, + password: req.body.password } - }); -} - -const updateUser = (user) => { - db.update('users', user, `username = "${user.username}"`); -} - -const findOne = (username) => { - let SQL_SELECT_ONE = `SELECT username FROM users - WHERE username = "${username}";`; - return result = db.run(SQL_SELECT_ONE)[0]; -} - -const findUser = (user) => { - let SQL_SELECT_USER = `SELECT * FROM users - WHERE username = "${user.username}";`; - let result = db.run(SQL_SELECT_USER)[0]; - return result && bcrypt.compareSync(user.password, result.password); -} - -const listUsers = () => { - let SQL_QUERY = `SELECT username FROM users;`; - return db.run(SQL_QUERY); + if(usr.username.length < 4){ + res.status(400).send({error: "Username is too small"}); + } else if(usr.password.length < 4) { + res.status(400).send({error: "Password is too small"}) + } else if(user.findOne(usr.username)){ + res.status(400).send({error: "Username already exists"}); + } else { + user.insert(usr); + req.session.user = usr.username + console.log(usr) + res.status(200).send("OK"); + } + }, + verifyUsername(req, res){ + usr = req.body; + if(user.findOne(usr.username)){ + res.status(400).send({error: "Username already exists"}); + } + } } - -exports.insert = insertUser; -exports.delete = deleteUser; -exports.update = updateUser; -exports.find = findUser; -exports.findOne = findOne; -exports.list = listUsers; \ No newline at end of file diff --git a/src/models/userModel.js b/src/models/userModel.js new file mode 100644 index 00000000..fe63fa5d --- /dev/null +++ b/src/models/userModel.js @@ -0,0 +1,49 @@ +const db = require('../database/dao') +const bcrypt = require('bcryptjs') + +const insertUser = (user) => { + user.password = bcrypt.hashSync(user.password, 10); + db.insert('users', user, (result) =>{ + if(result.error){ + throw result.error; + } + }); +} + +const deleteUser = (user) => { + const SQL_DELETE = `DELETE FROM users WHERE username = "${user.username}";` + db.run(SQL_DELETE,(result) => { + if(result.error){ + throw result.error; + } + }); +} + +const updateUser = (user) => { + db.update('users', user, `username = "${user.username}"`); +} + +const findOne = (username) => { + let SQL_SELECT_ONE = `SELECT username FROM users + WHERE username = "${username}";`; + return result = db.run(SQL_SELECT_ONE)[0]; +} + +const findUser = (user) => { + let SQL_SELECT_USER = `SELECT * FROM users + WHERE username = "${user.username}";`; + let result = db.run(SQL_SELECT_USER)[0]; + return result && bcrypt.compareSync(user.password, result.password); +} + +const listUsers = () => { + let SQL_QUERY = `SELECT username FROM users;`; + return db.run(SQL_QUERY); +} + +exports.insert = insertUser; +exports.delete = deleteUser; +exports.update = updateUser; +exports.find = findUser; +exports.findOne = findOne; +exports.list = listUsers; diff --git a/src/routes/login.js b/src/routes/login.js index 1c8689d1..5bc55047 100644 --- a/src/routes/login.js +++ b/src/routes/login.js @@ -6,21 +6,9 @@ router.get('/', (req, res) => { if(req.session.user){ return res.redirect('/'); } - res.render('login.ejs'); + return res.render('login.ejs'); }); -router.post('/', (req, res) => { - let usr = req.body; - if(req.session.user){ - res.redirect('/'); - } else if(!user.findOne(usr.username)){ - res.status(401).send({error: 'User not found'}); - } else if(user.find(usr)){ - req.session.user = usr.username - res.status(200).send("OK"); - } else { - res.status(403).send({error: 'Not authorized'}); - } -}); +router.post('/', user.login); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/src/routes/register.js b/src/routes/register.js index 33809d5e..63e2ccc6 100644 --- a/src/routes/register.js +++ b/src/routes/register.js @@ -6,30 +6,8 @@ router.get('/', (req, res) => { res.render('register.ejs'); }); -router.post('/', (req, res) => { - let usr = { - username: req.body.username, - password: req.body.password - } - if(usr.username.length < 4){ - res.status(400).send({error: "Username is very small"}); - } else if(usr.password.length < 4) { - res.status(400).send({error: "Password is very small"}) - } else if(user.findOne(usr.username)){ - res.status(400).send({error: "Username already exists"}); - } else { - user.insert(usr); - req.session.user = usr.username - console.log(usr) - res.status(200).send("OK"); - } -}); +router.post('/', user.create); -router.post('/username', (req, res) => { - usr = req.body; - if(user.findOne(usr.username)){ - res.status(400).send({error: "Username already exists"}); - } -}) +router.post('/username', user.verifyUsername) -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/src/routes/root.js b/src/routes/root.js index 04dc0f75..f4945ccd 100644 --- a/src/routes/root.js +++ b/src/routes/root.js @@ -19,21 +19,19 @@ router.get('/about', (req, res) => { avatar: 'http://placebear.com/500/300' }] - res.render('pages/about', { + return res.render('pages/about', { usuarios: users }) }) - - router.get('/', auth, (req, res) => { - res.render('home.ejs'); + return res.render('home.ejs'); }); router.get('/r/public/:id', auth, (req, res) => { try { rooms.check(req.params.id, req.session.user); - res.render('game.ejs'); + return res.render('game.ejs'); } catch (e) { if (e == "RoomDoesNotExistException") { res.status(404).render('error.ejs', { @@ -74,4 +72,4 @@ router.use((req, res, next) => { }); }); -module.exports = router; \ No newline at end of file +module.exports = router; From e993fe49a3bb77c88bba62029f11fcb4191f172f Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Fri, 26 Jun 2020 20:53:24 -0400 Subject: [PATCH 28/32] fix: usuario atual nao eh mostrado na lista de online --- src/events/online.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/events/online.js b/src/events/online.js index 98f6f8e9..4d3efdd2 100644 --- a/src/events/online.js +++ b/src/events/online.js @@ -1,16 +1,25 @@ +let redis = require('../config/redis') + exports.use = (io) => { const online = require('../controller/online'); - - io.on("connection", client => { + + io.on("connection", async client => { const username = client.handshake.session.user; client.join(username); + + try { + redis.set(username, client.id) + }catch(err) { + console.error(err.message) + } + if (!online.check(username)) { client.broadcast.emit('newUser', username); console.log(`User online: ${username}`); } online.set(username); - client.emit('listOnline', online.list()); + client.emit('listOnline', online.list().filter(user => user !== username)); client.on("disconnect", () => { online.remove(username); @@ -19,4 +28,4 @@ exports.use = (io) => { } }); }); -} \ No newline at end of file +} From f05eff377e84eabf51a7295e4f4d40f6136fb591 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Sat, 27 Jun 2020 20:43:43 -0400 Subject: [PATCH 29/32] feat: add convite para jogar --- package.json | 7 +- src/config/redis.js | 14 + src/controller/user.js | 1 - src/events/game.js | 25 +- src/events/online.js | 6 +- src/events/rooms.js | 7 +- src/game/controller/game.js | 136 ++++--- src/game/models/Player.js | 23 +- src/public/css/bootstrap.min.css | 1 - src/public/css/home.css | 30 +- src/public/css/online-sidebar.css | 17 +- src/public/css/style.css | 7 +- src/public/favicon.ico | 0 src/public/js/bootstrap.min.js | 1 - src/public/js/game.js | 6 +- src/public/js/home.js | 2 +- src/public/js/online.js | 30 +- src/public/js/utilitaries.js | 2 +- src/routes/root.js | 2 + src/views/game.ejs | 4 +- src/views/home.ejs | 11 +- src/views/partials/navbar.ejs | 10 +- src/views/partials/sidebar.ejs | 15 +- yarn.lock | 655 +++++++++++++++++++++++++++++- 24 files changed, 866 insertions(+), 146 deletions(-) create mode 100644 src/config/redis.js create mode 100644 src/public/favicon.ico diff --git a/package.json b/package.json index 9bcbb87a..703ddc0e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A simple Sea Battleships multiplayer and AI game", "main": "index.js", "scripts": { - "start": "cd src; node index.js" + "start": "node src/index.js" }, "repository": "https://github.com/GabCostaSilva/batalha-naval.git", "author": "gabcostasilva ", @@ -12,12 +12,17 @@ "private": false, "dependencies": { "bcryptjs": "^2.4.3", + "bluebird": "^3.7.2", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", "ejs": "^3.1.3", "express": "^4.17.1", "express-session": "^1.17.1", + "redis": "^3.0.2", "socket.io": "^2.3.0", "sqlite-sync": "^0.3.9" + }, + "devDependencies": { + "nodemon": "^2.0.4" } } diff --git a/src/config/redis.js b/src/config/redis.js new file mode 100644 index 00000000..0bc9d140 --- /dev/null +++ b/src/config/redis.js @@ -0,0 +1,14 @@ +const redis = require("redis"); +const bluebird = require('bluebird') + +bluebird.promisifyAll(redis) + +const client = redis.createClient(); + +client.on("error", function(error) { + console.error('here', error); +}); +// client.set("key", "value", redis.print); +// client.get("key", redis.print); + +module.exports = client diff --git a/src/controller/user.js b/src/controller/user.js index f0d15e98..b9d02412 100644 --- a/src/controller/user.js +++ b/src/controller/user.js @@ -28,7 +28,6 @@ module.exports = { } else { user.insert(usr); req.session.user = usr.username - console.log(usr) res.status(200).send("OK"); } }, diff --git a/src/events/game.js b/src/events/game.js index 074eb484..a60f8b7b 100644 --- a/src/events/game.js +++ b/src/events/game.js @@ -1,3 +1,5 @@ +let redis = require('../config/redis') + exports.use = (io) => { const rooms = require('../controller/room'); const game = require('../game/controller/game'); @@ -5,13 +7,31 @@ exports.use = (io) => { io.on("connection", client => { let player = client.handshake.session.user; let room; + + client.on('newGame', (players) => { + let room = rooms.create() + + let p1 = io.sockets.sockets[players.player1] + let p2 = io.sockets.sockets[players.player2] + + game.newGame(room, { p1, p2 }) + + return true; + }) + client.on('invite', async invited => { + try { + let invitedId = await redis.getAsync(invited) + io.to(invitedId).emit('invited', client.id, `${player} está te chamando para uma partida!`); + }catch(err) { + console.error(err.message) + } + }) client.on('joinGame', (roomName) => { if (rooms.exists(roomName)) { rooms.setTo(roomName, player); game.join(roomName, player, client); client.join(roomName); room = roomName; - console.log(`O cliente ${client.id} se conectou a sala ${room}`); } }); client.on('click', (id) => { @@ -26,7 +46,6 @@ exports.use = (io) => { rooms.unsetTo(room, player); setTimeout(() => { if (!io.sockets.adapter.rooms[room]) { - console.log(`Fechando a sala: ${room}`); rooms.remove(room); client.broadcast.emit('closeRoom', room); } @@ -34,4 +53,4 @@ exports.use = (io) => { } }); }); -} \ No newline at end of file +} diff --git a/src/events/online.js b/src/events/online.js index 4d3efdd2..6fbdc3c3 100644 --- a/src/events/online.js +++ b/src/events/online.js @@ -10,16 +10,16 @@ exports.use = (io) => { try { redis.set(username, client.id) }catch(err) { - console.error(err.message) + console.error('redis error', err.message) } if (!online.check(username)) { client.broadcast.emit('newUser', username); - console.log(`User online: ${username}`); } online.set(username); + let users = online.list().filter(user => user !== username); - client.emit('listOnline', online.list().filter(user => user !== username)); + client.emit('listOnline', users); client.on("disconnect", () => { online.remove(username); diff --git a/src/events/rooms.js b/src/events/rooms.js index c1904249..b074e143 100644 --- a/src/events/rooms.js +++ b/src/events/rooms.js @@ -1,10 +1,7 @@ exports.use = (io) => { const rooms = require('../controller/room'); - + io.on("connection", client => { - let room; - console.log(`socket conectado: ${client.id}`); - client.emit('listRooms', rooms.list); client.on('createRoom', () => { @@ -18,4 +15,4 @@ exports.use = (io) => { }); }); -} \ No newline at end of file +} diff --git a/src/game/controller/game.js b/src/game/controller/game.js index 62e310d8..97471ad4 100644 --- a/src/game/controller/game.js +++ b/src/game/controller/game.js @@ -4,85 +4,93 @@ const Player = require('../models/Player'); const ships = require('../libs/ships'); const board = require('../libs/board'); -const matchs = {}; +const matches = {}; +const newGame = (room, players) => { + players.p1.emit('room', room) + players.p2.emit('room', room) +} const join = (room, playerName, socket) => { - if (matchs[room]) { - if (matchs[room][playerName]) { + if (matches[room]) { + if (matches[room][playerName]) { socket.emit('alreadyInRoom'); return; } - matchs[room].player2 = playerName; - matchs[room][playerName] = new Player(socket); + matches[room].player2 = playerName; + matches[room][playerName] = new Player(socket); setTimeout(() => { startGame(room); }, 200); } else { - matchs[room] = new Match(); - matchs[room].player1 = playerName; - matchs[room][playerName] = new Player(socket); + matches[room] = new Match(); + matches[room].player1 = playerName; + matches[room][playerName] = new Player(socket); socket.emit('waitPlayer'); } } const playHere = (room, playerName, socket) => { - console.log(`O jogador ${playerName} mudou de aba.`); - matchs[room][playerName].socket.disconnect(); - matchs[room][playerName].socket = socket; - if (matchs[room].start) + matches[room][playerName].socket.disconnect(); + matches[room][playerName].socket = socket; + if (matches[room].start) resumeGame(room, playerName) } const startGame = (room) => { - let player1 = matchs[room].player1; - let player2 = matchs[room].player2; - matchs[room].turn = new Turn(player1, player2); + let player1 = matches[room].player1; + let player2 = matches[room].player2; + + matches[room].turn = new Turn(player1, player2); + createBoard(room, player1); createBoard(room, player2); - matchs[room][player1].socket.broadcast.to(room).emit('startGame'); - matchs[room][player1].socket.emit('startGame'); + + matches[room][player1].socket.broadcast.to(room).emit('startGame', room); + matches[room][player1].socket.emit('startGame', room); + console.log('game started!'); + setTimeout(() => { - matchs[room].start = true; + matches[room].start = true; changeTurn(room); }, 1000); } const resumeGame = (room, playerName) => { - matchs[room][playerName].socket.emit('resumeGame', - matchs[room][playerName].hit, - matchs[room][playerName].miss, - matchs[room][playerName].sink, - matchs[room][playerName].score); - if (matchs[room].turn.getMe() == playerName) { - matchs[room][playerName].socket.emit('youTurn'); + matches[room][playerName].socket.emit('resumeGame', + matches[room][playerName].hit, + matches[room][playerName].miss, + matches[room][playerName].sink, + matches[room][playerName].score); + if (matches[room].turn.getMe() == playerName) { + matches[room][playerName].socket.emit('youTurn'); } else { - matchs[room][playerName].socket.emit('opponentTurn'); + matches[room][playerName].socket.emit('opponentTurn'); } } const finishGame = (room) => { - let me = matchs[room].turn.getMe(); - let he = matchs[room].turn.getHe(); - matchs[room][he].socket.emit('win'); - matchs[room][he].socket.disconnect(); - matchs[room][me].socket.emit('lose'); - matchs[room][me].socket.disconnect(); - matchs[room].start = false; + let me = matches[room].turn.getMe(); + let he = matches[room].turn.getHe(); + matches[room][he].socket.emit('win'); + matches[room][he].socket.disconnect(); + matches[room][me].socket.emit('lose'); + matches[room][me].socket.disconnect(); + matches[room].start = false; setTimeout(() => { - delete matchs[room]; + delete matches[room]; }, 3000); } const isStarted = (room) => { - return matchs[room].start; + return matches[room].start; } const existMatch = (room) => { - return matchs[room]; + return matches[room]; } const createBoard = (room, playerName) => { - let player = matchs[room][playerName] + let player = matches[room][playerName] player.ships = ships(); player.board = board(player.ships); } @@ -98,12 +106,12 @@ const sink = (room, playerName, ship) => { setSink(room, playerName, part.position); shipId.push(part.position); }); - matchs[room][playerName].socket.emit('sink', shipId); + matches[room][playerName].socket.emit('sink', shipId); } const verifyShips = (room, playerName) => { - const opponent = matchs[room].turn.getHe(); - const ships = matchs[room][opponent].ships; + const opponent = matches[room].turn.getHe(); + const ships = matches[room][opponent].ships; for (let i = 0; i < ships.length; i++) { let ship = ships[i]; if (destroyed(ship)) { @@ -121,72 +129,70 @@ const updateScore = (playerName) => { } const sendScore = (room, playerName) => { - let score = matchs[room][playerName].score; - matchs[room][playerName].socket.emit('updateScore', score); + let score = matches[room][playerName].score; + matches[room][playerName].socket.emit('updateScore', score); } const sendHit = (room, playerName, id) => { - matchs[room][playerName].socket.emit('hit', id); - console.log(`${playerName} hit: ${id}`); + matches[room][playerName].socket.emit('hit', id); } const sendMiss = (room, playerName, id) => { - matchs[room][playerName].socket.emit('miss', id); - console.log(`${playerName} miss: ${id}`); + matches[room][playerName].socket.emit('miss', id); } const setHit = (room, playerName, id) => { - matchs[room][playerName].hit.push(id); + matches[room][playerName].hit.push(id); } const setMiss = (room, playerName, id) => { - matchs[room][playerName].miss.push(id); + matches[room][playerName].miss.push(id); } const setSink = (room, playerName, id) => { - matchs[room][playerName].hit.pop(id); - matchs[room][playerName].sink.push(id); + matches[room][playerName].hit.pop(id); + matches[room][playerName].sink.push(id); } const changeTurn = (room) => { - matchs[room].turn.next(); - let me = matchs[room].turn.getMe(); - let he = matchs[room].turn.getHe(); + matches[room].turn.next(); + let me = matches[room].turn.getMe(); + let he = matches[room].turn.getHe(); if (isStarted(room)) { - matchs[room][me].socket.emit('youTurn'); - matchs[room][he].socket.emit('opponentTurn'); + matches[room][me].socket.emit('youTurn'); + matches[room][he].socket.emit('opponentTurn'); } } const shot = (room, playerName, id) => { - const opponent = matchs[room].turn.getHe(); - let board = matchs[room][opponent].board; + const opponent = matches[room].turn.getHe(); + let board = matches[room][opponent].board; let i = (id / 10) | 0; // pick a right value let j = id % 10; // pick a left value - if (matchs[room].turn.getMe() != playerName) { - matchs[room][playerName].socket.emit('NotIsYouTurn'); + if (matches[room].turn.getMe() != playerName) { + matches[room][playerName].socket.emit('NotIsYouTurn'); } else if (board[i][j] == 'hited') { - matchs[room][playerName].socket.emit('AlreadyHit'); + matches[room][playerName].socket.emit('AlreadyHit'); } else if (board[i][j] !== undefined) { board[i][j].status = 'destroyed'; board[i][j] = 'hited'; setHit(room, playerName, id); verifyShips(room, playerName); - updateScore(matchs[room][playerName]); + updateScore(matches[room][playerName]); sendScore(room, playerName); sendHit(room, playerName, id); changeTurn(room); } else { setMiss(room, playerName, id); board[i][j] = 'hited'; - matchs[room][playerName].multi = 1; + matches[room][playerName].multi = 1; sendMiss(room, playerName, id); changeTurn(room); } } const allDestroyed = (room, playerName) => { - return (matchs[room][playerName] + return (matches[room][playerName] .ships.length == 0); } @@ -194,4 +200,6 @@ exports.join = join; exports.shot = shot; exports.playHere = playHere; exports.existMatch = existMatch; -exports.isStarted = isStarted; \ No newline at end of file +exports.isStarted = isStarted; +exports.start = startGame; +exports.newGame = newGame; diff --git a/src/game/models/Player.js b/src/game/models/Player.js index 72fe1ef2..479d3e0c 100644 --- a/src/game/models/Player.js +++ b/src/game/models/Player.js @@ -1,12 +1,15 @@ -function Player(socket) { - this.socket = socket; - this.score = 0; - this.multi = 1; - this.board = undefined; - this.ships = undefined; - this.hit = []; - this.miss = []; - this.sink = []; +class Player { + constructor(socket) { + this.socket = socket; + this.name = socket.handshake.session.user + this.score = 0; + this.multi = 1; + this.board = undefined; + this.ships = undefined; + this.hit = []; + this.miss = []; + this.sink = []; + } } -module.exports = Player; \ No newline at end of file +module.exports = Player; diff --git a/src/public/css/bootstrap.min.css b/src/public/css/bootstrap.min.css index 88269128..58a6c30c 100644 --- a/src/public/css/bootstrap.min.css +++ b/src/public/css/bootstrap.min.css @@ -4,4 +4,3 @@ * Copyright 2011-2018 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/public/css/home.css b/src/public/css/home.css index f37029a3..de6e9f00 100644 --- a/src/public/css/home.css +++ b/src/public/css/home.css @@ -9,7 +9,35 @@ -o-transition: all .2s linear; transition: all .2s linear; } +.user-online { + display: flex; + justify-content: space-between; + color: #fff; + font-weight: 400; + align-items: baseline; + padding: 12px; + cursor: pointer; +} +.user-online::after { + content: ''; + border-radius: 50%; + width: 12px; + margin-left: 12px; + height: 12px; + background-color: rgb(50, 205, 50); +} +.user-online-icon { + display: flex; + align-items: center; + justify-content: space-between; + color: white; + background-color: rgb(50, 205, 50); + padding-left: 16px; +} +.user-online-icon:hover { + background-color: rgb(50, 150, 50); +} .hamburger { position: relative; display: block; @@ -71,4 +99,4 @@ input:checked ~ label .hamburger::after { #tgg { margin-left: -80px; } -} \ No newline at end of file +} diff --git a/src/public/css/online-sidebar.css b/src/public/css/online-sidebar.css index 3ffca351..aa0257f4 100644 --- a/src/public/css/online-sidebar.css +++ b/src/public/css/online-sidebar.css @@ -15,10 +15,13 @@ } #sidebar { z-index: 1000; - position: fixed; + position: fixed; + display: flex; + flex-direction: column; left: 250px; width: 0; height: 100%; + margin-left: -250px; overflow-y:auto; background: #4B6F9C; @@ -32,17 +35,9 @@ } .sidebar-nav { - position: absolute; - top: 0; width: 250px; margin: 0; - padding: 0; - list-style: none; -} - -.sidebar-nav li { - text-indent: 20px; - line-height: 40px; + padding: 24px 12px; } .sidebar-nav li a { @@ -80,4 +75,4 @@ #wrapper #sidebar { width: 250px; } -} \ No newline at end of file +} diff --git a/src/public/css/style.css b/src/public/css/style.css index 34a1bfc1..88f134cb 100644 --- a/src/public/css/style.css +++ b/src/public/css/style.css @@ -8,7 +8,10 @@ body { padding: 0; background: #1E344F; } - +ul { + padding: 0; + list-style: none; +} @font-face { font-family: grafitti; src: url('../fonts/grafitti.tff'); @@ -17,4 +20,4 @@ body { @font-face { font-family: yellow-rabbit; src: url('../fonts/Yellow-Rabbit.tff'); -} \ No newline at end of file +} diff --git a/src/public/favicon.ico b/src/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/src/public/js/bootstrap.min.js b/src/public/js/bootstrap.min.js index 00c895f0..2238870c 100644 --- a/src/public/js/bootstrap.min.js +++ b/src/public/js/bootstrap.min.js @@ -4,4 +4,3 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
      ',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t { const alreadyInRoom = () => { let message = `Parece que você já está com uma - aba do jogo aberta. Deseja jogar aqui?`; + aba do jogo aberta. Deseja jogar aqui?`; showMessage(message, 'Sim', playHere); } @@ -86,7 +86,7 @@ const connectionClosed = () => { }, 300); } -const startGame = () => { +const startGame = (room) => { showMessage('O jogo vai começar.'); setTimeout(() => { createBoard(); @@ -139,4 +139,4 @@ socket.emit('joinGame', room); window.onbeforeunload = window.onunload = (e) => { socket.disconnect(); return; -} \ No newline at end of file +} diff --git a/src/public/js/home.js b/src/public/js/home.js index c29aaed0..849614c0 100644 --- a/src/public/js/home.js +++ b/src/public/js/home.js @@ -29,4 +29,4 @@ socket.on('room', (room) => { const toggle = () => { $('#sidebar-content').toggle(600); -} \ No newline at end of file +} diff --git a/src/public/js/online.js b/src/public/js/online.js index 284af18f..6606e220 100644 --- a/src/public/js/online.js +++ b/src/public/js/online.js @@ -1,16 +1,32 @@ + +function handleUserClick(e) { + socket.emit('invite', e.id) +} + +const handleInvite = (id, msg) => { + showMessage(msg, 'Aceitar', function() { + socket.emit('newGame', { player1: id, player2: socket.id }) + }); +} + const listOnline = (user) => { $("#online-list").append(` -
    • - ${user} -
    • `); +
    • + ${user} +
    • + `); } const toggle_sidebar = () => { $("#wrapper").toggleClass("toggled"); } -socket.on('listOnline', list => { - list.forEach(element => { +socket.on('listOnline', users => { + users.forEach(element => { listOnline(element) }); }); @@ -21,4 +37,6 @@ socket.on('newUser', user => { socket.on('dropUser', user => { $('#' + user).closest('li').remove(); -}); \ No newline at end of file +}); + +socket.on('invited', handleInvite) diff --git a/src/public/js/utilitaries.js b/src/public/js/utilitaries.js index 7241c623..fdf93b3c 100644 --- a/src/public/js/utilitaries.js +++ b/src/public/js/utilitaries.js @@ -32,4 +32,4 @@ const showMessage = (message, button, event) => { }, 3000); } $(divMessage).hide().slideDown(600).fadeIn(600); -} \ No newline at end of file +} diff --git a/src/routes/root.js b/src/routes/root.js index f4945ccd..846fbbd8 100644 --- a/src/routes/root.js +++ b/src/routes/root.js @@ -1,7 +1,9 @@ express = require('express'); router = express.Router(); + const rooms = require('../controller/room'); const auth = require('../middleware/authenticator'); +const online = require('../controller/online'); router.get('/about', (req, res) => { diff --git a/src/views/game.ejs b/src/views/game.ejs index 1de4fee3..1db22990 100644 --- a/src/views/game.ejs +++ b/src/views/game.ejs @@ -18,14 +18,12 @@ -
      <%- include('partials/navbar') %>
      - <%- include('partials/sidebar') %>
      @@ -39,4 +37,4 @@ - \ No newline at end of file + diff --git a/src/views/home.ejs b/src/views/home.ejs index 573c79a6..0c4dc75c 100644 --- a/src/views/home.ejs +++ b/src/views/home.ejs @@ -9,9 +9,6 @@ - - - @@ -22,7 +19,6 @@ -
      <%- include('partials/navbar') %>
      @@ -36,7 +32,7 @@
      - +
      @@ -46,6 +42,9 @@
      + + + - \ No newline at end of file + diff --git a/src/views/partials/navbar.ejs b/src/views/partials/navbar.ejs index fc348fc8..8324681c 100644 --- a/src/views/partials/navbar.ejs +++ b/src/views/partials/navbar.ejs @@ -7,12 +7,6 @@ - -
      - \ No newline at end of file + diff --git a/src/views/partials/sidebar.ejs b/src/views/partials/sidebar.ejs index 2c30572c..ee1588ba 100644 --- a/src/views/partials/sidebar.ejs +++ b/src/views/partials/sidebar.ejs @@ -1,8 +1,9 @@ \ No newline at end of file + + diff --git a/yarn.lock b/yarn.lock index 4049dda3..9bc86bec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,6 +11,23 @@ update-notifier "^2.2.0" yargs "^8.0.2" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + JSONStream@^1.3.4, JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -75,6 +92,13 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -85,6 +109,16 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -92,6 +126,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -102,6 +144,14 @@ ansistyles@~0.1.3: resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -228,12 +278,17 @@ bin-links@^1.1.2, bin-links@^1.1.7: npm-normalize-package-bin "^1.0.0" write-file-atomic "^2.3.0" +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -267,6 +322,20 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -275,6 +344,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -321,6 +397,19 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + call-limit@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" @@ -336,6 +425,11 @@ camelcase@^4.0.0, camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -355,6 +449,29 @@ chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.2.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -382,6 +499,11 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + cli-columns@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" @@ -418,6 +540,13 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -443,11 +572,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -523,6 +664,18 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -612,6 +765,11 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -624,7 +782,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@2.6.9: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -638,7 +796,7 @@ debug@3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -667,6 +825,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -679,6 +844,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -696,6 +866,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +denque@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" + integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -736,6 +911,13 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + dotenv@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" @@ -781,6 +963,16 @@ ejs@^3.1.3: dependencies: jake "^10.6.1" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -902,6 +1094,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1030,6 +1227,13 @@ filelist@^1.0.1: dependencies: minimatch "^3.0.4" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -1141,6 +1345,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1199,6 +1408,13 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" +get-stream@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1206,6 +1422,13 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -1225,6 +1448,13 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + dependencies: + ini "^1.3.5" + got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -1242,6 +1472,23 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -1277,6 +1524,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -1287,6 +1539,11 @@ has-unicode@^2.0.0, has-unicode@~2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1304,6 +1561,11 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -1375,6 +1637,11 @@ iferr@^1.0.2: resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -1469,6 +1736,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" @@ -1481,6 +1755,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-cidr@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" @@ -1493,6 +1774,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -1505,6 +1791,18 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -1513,16 +1811,39 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -1530,6 +1851,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -1559,11 +1885,16 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -1604,6 +1935,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -1639,6 +1975,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" @@ -1646,6 +1989,13 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + lazy-property@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" @@ -1879,11 +2229,16 @@ lodash.without@~4.4.0: resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -1906,6 +2261,13 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -1993,6 +2355,11 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -2111,6 +2478,22 @@ node-gyp@^5.0.2, node-gyp@^5.1.0: tar "^4.4.12" which "^1.3.1" +nodemon@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416" + integrity sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^4.0.0" + nopt@^4.0.1, nopt@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -2119,6 +2502,13 @@ nopt@^4.0.1, nopt@^4.0.3: abbrev "1" osenv "^0.1.4" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -2129,6 +2519,16 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + npm-audit-report@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" @@ -2481,6 +2881,11 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -2544,6 +2949,16 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: version "9.5.12" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" @@ -2657,6 +3072,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2672,6 +3092,11 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2732,6 +3157,11 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -2762,6 +3192,13 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pupa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + dependencies: + escape-goat "^2.0.0" + qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" @@ -2811,7 +3248,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -2929,6 +3366,40 @@ readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: graceful-fs "^4.1.2" once "^1.3.0" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +redis-commands@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785" + integrity sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg== + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= + dependencies: + redis-errors "^1.0.0" + +redis@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/redis/-/redis-3.0.2.tgz#bd47067b8a4a3e6a2e556e57f71cc82c7360150a" + integrity sha512-PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ== + dependencies: + denque "^1.4.1" + redis-commands "^1.5.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -2937,6 +3408,13 @@ registry-auth-token@^3.0.1: rc "^1.1.6" safe-buffer "^5.0.1" +registry-auth-token@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== + dependencies: + rc "^1.2.8" + registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" @@ -2944,6 +3422,13 @@ registry-url@^3.0.3: dependencies: rc "^1.0.1" +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -2992,6 +3477,13 @@ resolve@^1.10.0: dependencies: path-parse "^1.0.6" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" @@ -3043,11 +3535,23 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -3319,6 +3823,24 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.trimend@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" @@ -3391,6 +3913,20 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -3406,13 +3942,20 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -3433,6 +3976,11 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +term-size@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -3466,11 +4014,30 @@ to-array@0.1.4: resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -3491,6 +4058,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -3499,6 +4071,13 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -3521,6 +4100,13 @@ umask@^1.1.0, umask@~1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +undefsafe@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -3542,6 +4128,13 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3568,6 +4161,25 @@ update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +update-notifier@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -3582,6 +4194,13 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3671,6 +4290,13 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + worker-farm@^1.6.0, worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -3700,6 +4326,16 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + ws@^7.1.2: version "7.3.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" @@ -3717,6 +4353,11 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" From abbf66d9e2a636be4309d7450d7bfdcc9e029282 Mon Sep 17 00:00:00 2001 From: gabcostasilva Date: Sat, 27 Jun 2020 20:44:53 -0400 Subject: [PATCH 30/32] update readme --- README.MD | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.MD b/README.MD index 9ebb545c..62439e29 100644 --- a/README.MD +++ b/README.MD @@ -19,6 +19,8 @@ Antes de iniciar, certifique-se de cumprir os seguintes requisitos: - yarn ou npm +- Possuir Redis instalado e rodando na port padrão(6379) + ## Como executar Execute os comandos
      From c025b5cf7147c0bcf36ddc12752571f4256ed102 Mon Sep 17 00:00:00 2001 From: Gabriel Costa Date: Sat, 27 Jun 2020 20:49:51 -0400 Subject: [PATCH 31/32] Update README.MD --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 62439e29..be52bf37 100644 --- a/README.MD +++ b/README.MD @@ -34,7 +34,7 @@ ou
      `npm run start`
      Após instalar as dependências e rodar o server, game estará rodando em

      -[http://localhost:8080](http://localhost:8080) +[http://localhost:3000](http://localhost:3000) ## Usando Batalha Naval Para usar Batalha Naval, siga os seguintes passos: From 15167d8c679b7c4d8bcf28d5ba61273d53234c06 Mon Sep 17 00:00:00 2001 From: Gabriel Costa Date: Sat, 27 Jun 2020 20:50:36 -0400 Subject: [PATCH 32/32] Update README.MD --- README.MD | 1 - 1 file changed, 1 deletion(-) diff --git a/README.MD b/README.MD index be52bf37..3908babe 100644 --- a/README.MD +++ b/README.MD @@ -50,7 +50,6 @@ As seguintes pessoas contribuiram para este projeto: - [Altair Aquino Alves Junior](https://github.com/Zaltair-alves) - [Cleriston Nantes Petrikic](http://github.com/petrikic) - [Anna Carollyne Pereira da Silva](http://github.com/MoshGirl) - - [Kemer Wander Souza Tomas](https://github.com/Kemer-Souza)