├── .gitignore ├── LICENSE ├── README.md ├── components ├── Entry.js └── GuiServer.js ├── css └── mystyle.css ├── data └── struct.json ├── fonts └── PressStart2P-Regular.ttf ├── index.html ├── launch.js ├── main.js ├── package-lock.json ├── package.json └── server └── heappy.py /.gitignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Gand3lf 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :slightly_smiling_face: Heappy: a happy heap editor 2 | Heappy is an editor based on gdb/gef that helps you to handle the heap during your exploitation development. 3 | The project should be considered a didactic tool useful to understand the evolution of the heap during the process life cycle. It has been created to simplify the study of the most common heap exploitation techniques and to support you to solve some binary exploitation CTFs related to this fantastic topic. 4 | 5 |

6 | 7 |

8 | 9 | ## Main features 10 | This is what Heappy implements: 11 |    :white_check_mark: take heap snapshots and compare them each other 12 |    :white_check_mark: recognize immediately type and fields of heap bins 13 |    :white_check_mark: search and edit heap values by decimal, hex or string 14 |    :white_check_mark: find yourself with the panoramic view of the heap status 15 |    :white_check_mark: take notes about a cell in the comment column 16 |    :white_check_mark: enjoy the light and dark mode 17 | 18 | ## Getting Started 19 | 20 | These instructions will help you to install and run Heappy fastly. 21 | 22 | ### Prerequisites 23 | 24 | If you don't have it, install GEF in GDB: 25 | 26 | ``` 27 | wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh 28 | ``` 29 | md5(gef.sh): eb053864d050048cb001c80c79fde7b5 30 | 31 | ### Installing 32 | 33 | Install Node.js and npm: 34 | ``` 35 | apt update 36 | sudo apt install nodejs npm 37 | ``` 38 | Download and install Heappy: 39 | ``` 40 | git clone https://github.com/gand3lf/heappy 41 | cd heappy/ 42 | npm install 43 | ``` 44 | Load the server inside GDB: 45 | ``` 46 | gef➤ source /my/path/heappy/server/heappy.py 47 | ``` 48 | It is suggested to run the Heappy GUI after that the target heap has been initialized. 49 | For example: 50 | ``` 51 | gef➤ break main 52 | gef➤ run 53 | ``` 54 | From another terminal launch the GUI: 55 | ``` 56 | cd /my/path/heappy/ 57 | npm start 58 | ``` 59 | 60 | Have fun! :rocket: 61 | 62 | ## Not yet implemented 63 | :black_square_button: 32-bit addresses support (coming soon) 64 | :black_square_button: multiple heaps support 65 | :black_square_button: gdb checkpoint integration 66 | 67 | ## Built With 68 | 69 | * [Vue.js](https://vuejs.org/) - Web framework 70 | * [Electron](https://www.electronjs.org/) - Builder framework 71 | * [GEF](https://github.com/hugsy/gef) - GDB extension 72 | * [Python3](https://www.python.org) - For GEF integration 73 | 74 | ## Current status ## 75 | 76 | | License | Compatibility | 77 | |---|---| 78 | | [![MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/Gand3lf/heappy/blob/main/LICENSE) | [![Python 3](https://img.shields.io/badge/Python-3-green.svg)](https://www.python.org/) | 79 | 80 | -------------------------------------------------------------------------------- /components/Entry.js: -------------------------------------------------------------------------------- 1 | class Entry { 2 | value = null; 3 | representation = null; //d: decimal, h: hex, a: ascii 4 | color = null; 5 | tag = null; // field of bin 6 | type = null; // type of bin 7 | comment = null; 8 | 9 | constructor(value, representation="h", color=null, tag=null, type=null, comment=null){ 10 | this.value = BigInt(value) 11 | this.representation = representation 12 | this.color = color 13 | this.tag = tag 14 | this.type = type 15 | this.comment = comment 16 | } 17 | 18 | isPrintable(){ 19 | return false 20 | } 21 | 22 | toHex(){ 23 | return "0x"+this.value.toString(16) 24 | } 25 | 26 | toInt(){ 27 | return this.value 28 | } 29 | 30 | toAscii(){ 31 | var hex = this.value.toString(16) 32 | if(hex.length%2 != 0) 33 | hex = "0"+hex 34 | var str = ''; 35 | for (var i = 0; (i < hex.length && hex.substr(i, 2) !== '00'); i += 2){ 36 | str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 37 | } 38 | return str; 39 | } 40 | 41 | toString(){ 42 | switch(this.representation){ 43 | case "d": 44 | return this.toInt() 45 | break 46 | case "h": 47 | return this.toHex() 48 | break 49 | case "a": 50 | return this.toAscii() 51 | break 52 | } 53 | } 54 | 55 | changeValue(newValue){ 56 | switch(this.representation){ 57 | case "d": 58 | this.value = BigInt(newValue) 59 | break 60 | case "h": 61 | this.value = BigInt(newValue, 16) 62 | break 63 | case "a": 64 | var arr1 = []; 65 | for (var n = 0, l = newValue.length; n < l; n ++){ 66 | var hex = Number(newValue.charCodeAt(n)).toString(16); 67 | arr1.push(hex); 68 | } 69 | this.value = BigInt("0x"+arr1.join(''), 16); 70 | break 71 | } 72 | } 73 | 74 | } 75 | module.exports = { Entry } -------------------------------------------------------------------------------- /components/GuiServer.js: -------------------------------------------------------------------------------- 1 | class GuiServer extends WebSocket { 2 | context = null 3 | 4 | constructor(context){ 5 | super('ws://localhost:9884/') 6 | this.context = context 7 | this.onopen = this.onOpen 8 | this.onmessage = this.onMessage 9 | 10 | } 11 | onOpen(event){ 12 | console.log('WebSocket Client Connected'); 13 | 14 | this.send('{"method":"snap"}'); 15 | } 16 | onMessage(event){ 17 | var msg = JSON.parse(event.data); 18 | for(var key in msg.heap.data){ 19 | msg.heap.data[key] = new Entry(msg.heap.data[key]) 20 | } 21 | if(this.context.heaps.length == 0){ 22 | this.context.heaps.push(msg.heap) 23 | this.context.chunks.push(msg.chunks) 24 | }else{ 25 | this.context.heaps[this.context.heaps.length-1] = msg.heap 26 | this.context.chunks[this.context.chunks.length-1] = msg.chunks 27 | } 28 | this.context.colorChunks() 29 | this.context.initCanvas() 30 | this.context.updateCanvas() 31 | this.context.tableUpdate() 32 | this.context.binsUpdate() 33 | } 34 | updateSnap(){ 35 | this.send('{"method":"snap"}'); 36 | } 37 | updateValue(address, value){ 38 | var data = JSON.stringify({ 39 | address: address.toString(16), 40 | value: value.toString(16) 41 | }) 42 | this.send('{"method":"update", "data":'+data+'}'); 43 | } 44 | 45 | } 46 | module.exports = { GuiServer } -------------------------------------------------------------------------------- /css/mystyle.css: -------------------------------------------------------------------------------- 1 | .theme-light { 2 | --background-color: #ffffff; 3 | --color-title: black; 4 | --bgcolor-maintab-head: #ffb13d; 5 | --color--maintab-head: #262626; 6 | --color-addresses: #3a3a3a; 7 | --color-fields: #3a3a3a; 8 | --color-border-vertical: #686868; 9 | --color-even: #ffffff; 10 | --color-odd: #ededed; 11 | --color-valuetable: #424242; 12 | --bgcolor-highlight: #D1E0EF; 13 | --color-highlight: #0060C1; 14 | --color-comment: #1E1E1E; 15 | --grad-button: linear-gradient(to bottom, #6296CA 5%, #3F7FBF 100%); 16 | --border-button: 1px solid #3B77B3; 17 | --bg-abbr: #777777; 18 | --color-plcholder-head: #555555; 19 | --grad-select:linear-gradient(to bottom, #6296CA 5%, #3F7FBF 100%); 20 | --border-select: 1px solid #3B77B3; 21 | --color-logbins: #555; 22 | } 23 | 24 | .theme-dark { 25 | --background-color: #3e3f43; 26 | --color-title: white; 27 | --bgcolor-maintab-head: #363b40; 28 | --color--maintab-head: #ebedef; 29 | --color-addresses: #b3ffff; 30 | --color-fields: rgba(253, 253, 253, 1); 31 | --color-border-vertical: #949494; 32 | --color-even: #414446; 33 | --color-odd: #54585c; 34 | --color-valuetable: #d3d3d3; 35 | --bgcolor-highlight: rgba(235, 255, 61, 0.20); 36 | --color-highlight: #99ff66; 37 | --color-comment: #ffffff; 38 | --grad-button: linear-gradient(to bottom, #ff5bb0 5%, #ef027d 100%); 39 | --border-button: 1px solid #ee1eb5; 40 | --bg-abbr: #999999; 41 | --color-plcholder-head: #b7b7b7; 42 | --grad-select:linear-gradient(to bottom, #ff5bb0 5%, #ef027d 100%); 43 | --border-select: 1px solid #ee1eb5; 44 | --color-logbins: #ddd; 45 | } 46 | 47 | @font-face{ 48 | font-family: "pressFont"; 49 | src: url("../fonts/PressStart2P-Regular.ttf") format("truetype"); 50 | } 51 | 52 | body { 53 | margin: 0; 54 | margin-top: 50px; 55 | font-family: Calibri, sans-serif; 56 | background-color: var(--background-color); 57 | } 58 | 59 | .title{ 60 | color: var(--color-title); 61 | } 62 | 63 | .maintab{ 64 | white-space: nowrap; 65 | border-spacing: 0; 66 | margin-left: auto; 67 | margin-right: auto; 68 | box-shadow: 0 1px 9px 1px rgba(0, 0, 0, 0.28); 69 | } 70 | 71 | .maintab.head{ 72 | font-family: Calibri, sans-serif; 73 | background: var(--bgcolor-maintab-head); 74 | color: var(--color--maintab-head); 75 | } 76 | 77 | .maintab.head th{ 78 | min-width: 70px; 79 | height: 35px; 80 | } 81 | 82 | .maintab.head th:first-child{ 83 | min-width: 140px; 84 | } 85 | 86 | .addresses{ 87 | text-align: center; 88 | color: var(--color-addresses); 89 | font-family: Verdana,Geneva,sans-serif; 90 | letter-spacing: 1px; 91 | font-size: 15px; 92 | } 93 | 94 | .fields{ 95 | color: var(--color-fields); 96 | font-style: italic; 97 | } 98 | 99 | .maintab.body td + td { 100 | border-left:1px solid var(--color-border-vertical); 101 | } 102 | 103 | .maintab.body tr:nth-child(even) { 104 | background: var(--color-even); 105 | } 106 | 107 | .maintab.body tr:nth-child(odd) { 108 | background: var(--color-odd); 109 | } 110 | 111 | .valuetable{ 112 | } 113 | 114 | .valuetable input{ 115 | text-align: right; 116 | color: var(--color-valuetable); 117 | font: normal 14px/normal "Lucida Console", Monaco, monospace; 118 | } 119 | 120 | .valuetable input:nth-of-type(odd)[highlight=true]{ 121 | background: var(--bgcolor-highlight); 122 | color: var(--color-highlight); 123 | } 124 | 125 | .input.comment{ 126 | display: inline-block; 127 | border: none; 128 | font: normal 14px/normal "Arial", Monaco, monospace; 129 | color: var(--color-comment); 130 | background-color: rgba(0,0,0,0); 131 | width: 160px; 132 | outline: none; 133 | } 134 | 135 | .myButton{ 136 | background: var(--grad-button); 137 | background-color:#ee4aa0; 138 | border-radius: 10px; 139 | border: var(--border-button); 140 | display:inline-block; 141 | cursor:pointer; 142 | color:#ffffff; /* text color*/ 143 | font-family:Arial; 144 | font-size:13px; 145 | font-weight:bold; 146 | } 147 | 148 | abbr[data-title] { 149 | position: relative; 150 | } 151 | 152 | abbr[data-title]:hover::after, 153 | abbr[data-title]:focus::after { 154 | content: attr(data-title); 155 | position: absolute; 156 | left: 14px; 157 | top: -2px; 158 | width: auto; 159 | white-space: nowrap; 160 | background: var(--bg-abbr); 161 | color: #fff; 162 | border-radius: 9px; 163 | box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4); 164 | font-size: 14px; 165 | padding: 3px 5px; 166 | } 167 | 168 | .buttonhead { 169 | box-shadow:inset 0px 1px 0px 0px #f7c5c0; 170 | background:linear-gradient(to bottom, #fc8d83 5%, #e4685d 100%); 171 | background-color:#fc8d83; 172 | border-radius:4px; 173 | border:1px solid #d83526; 174 | display:inline-block; 175 | cursor:pointer; 176 | color:#ffffff; 177 | font-family:Arial; 178 | font-size:13px; 179 | font-weight:bold; 180 | padding:1px 4px; 181 | text-decoration:none; 182 | text-shadow:0px 1px 0px #b23e35; 183 | position: relative; 184 | } 185 | 186 | .buttonhead:hover { 187 | background:linear-gradient(to bottom, #e4685d 5%, #fc8d83 100%); 188 | background-color:#e4685d; 189 | } 190 | 191 | .buttonhead:active { 192 | position:relative; 193 | top:1px; 194 | } 195 | 196 | .input.value.head{ 197 | border: none; 198 | color: #d3d3d3;; 199 | font: normal 14px/normal "Arial", Monaco, monospace; 200 | background: rgba(0,0,0,0); 201 | background: 202 | linear-gradient(#000, #000) center bottom 0px /calc(100% - 0px) 1px no-repeat; 203 | } 204 | 205 | .input.value.head::placeholder { 206 | color: var(--color-plcholder-head); 207 | } 208 | 209 | .input.value.head:focus { 210 | outline: none; 211 | } 212 | 213 | .input.value.body{ 214 | border: none; 215 | background: rgba(0,0,0,0); 216 | } 217 | 218 | .selecthead { 219 | -webkit-appearance: none; 220 | background: var(--grad-select); 221 | background-color:#e4685d; 222 | border-radius: 3px; 223 | border: var(--border-select); 224 | display:inline-block; 225 | cursor:pointer; 226 | color:#ffffff; /* text color*/ 227 | font-family:Arial; 228 | font-size:13px; 229 | width: 20px; 230 | height: 20px; 231 | font-weight:bold; 232 | text-indent: 4px; 233 | position: relative; 234 | left: 2px; 235 | } 236 | 237 | canvas{ 238 | display: block; 239 | margin-left: auto; 240 | margin-right: auto; 241 | width: 80%; 242 | } 243 | 244 | .plusmin{ 245 | position: relative; 246 | left: 0px; 247 | border-radius: 15px; 248 | background-color:#999999; 249 | border: none; 250 | cursor: pointer; 251 | font-weight: bold; 252 | font-family: Verdana,Geneva,sans-serif; 253 | } 254 | 255 | .help{ 256 | position: absolute; 257 | right: 0; 258 | bottom: 0; 259 | } 260 | 261 | .help[data-title] { 262 | position: relative; 263 | } 264 | 265 | .help[help-text]:hover::after, 266 | .help[help-text]:focus::after { 267 | content: attr(help-text); 268 | position: absolute; 269 | left: -104px; 270 | top: -100px; 271 | width: auto; 272 | background: #fff; 273 | color: #000; 274 | text-align: left; 275 | border-radius: 9px; 276 | box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4); 277 | font-size: 14px; 278 | padding: 3px 5px; 279 | } 280 | 281 | .myCanvas{ 282 | box-shadow: 0 1px 9px 1px rgba(0, 0, 0, 0.28); 283 | } 284 | 285 | .logBins{ 286 | color: var(--color-logbins); 287 | text-align: center; 288 | font-style: italic; 289 | } 290 | 291 | .navbar { 292 | overflow: hidden; 293 | background-color: #f7b600; 294 | position: fixed; 295 | top: 0; 296 | width: 100%; 297 | -webkit-user-select: none; 298 | -webkit-app-region: drag; 299 | z-index: 10; 300 | } 301 | 302 | .topButton { 303 | background-color:#f7b600; 304 | display:inline-block; 305 | cursor:pointer; 306 | color:#333; 307 | font-family:Arial; 308 | font-size:15px; 309 | text-decoration:none; 310 | padding:6px 20px; 311 | outline:none; 312 | border: none; 313 | -webkit-app-region: no-drag; 314 | } 315 | 316 | .topButton:hover { 317 | background-color:#f29d00; 318 | } 319 | 320 | .topButton:active { 321 | border-style: outset; 322 | border: none; 323 | } 324 | 325 | .topButton.exit{ 326 | position: absolute; 327 | right:0; 328 | background-color: #cf2a45; 329 | color: white; 330 | } 331 | 332 | .topButton.exit:hover { 333 | background-color: #e42f4d; 334 | } 335 | 336 | .topButton.title{ 337 | font-size:11px; 338 | font-family: "pressFont"; 339 | } -------------------------------------------------------------------------------- /data/struct.json: -------------------------------------------------------------------------------- 1 | { 2 | "small":["prev_size", "size", "fd", "bk"], 3 | "large":["prev_size", "size", "fd", "bk", "fd_nextsize", "bk_nextsize"], 4 | "unsorted":["prev_size", "size", "fd", "bk"], 5 | "fast":["prev_size", "size", "fd"], 6 | "tcache":["next", "key"] 7 | } -------------------------------------------------------------------------------- /fonts/PressStart2P-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gand3lf/heappy/20a3d01387a3ea87e84ff37da34510d0428c042c/fonts/PressStart2P-Regular.ttf -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 | 30 |
31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 43 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 73 | 74 | 75 | 76 | 77 |
39 |   40 | A d d r e s s 41 |   42 | 44 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |   F i e l d  C o m m e n t
{{elems[0].address}} 67 |
68 | 69 | 70 |    71 |
72 |
{{elems[elems.length-1].field}}
78 |
79 | 81 | Your browser does not support the canvas element. 82 | 83 |
| tcache: {{sumBins.tcache}} | fast: {{sumBins.fast}} | small: {{sumBins.small}} | large: {{sumBins.large}} | unsorted: {{sumBins.unsorted}} | allocated: {{sumBins.allocated}} |
84 | 85 |
86 |
87 |

xX No data available Xx

88 | 89 |
90 | 91 | 92 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /launch.js: -------------------------------------------------------------------------------- 1 | const { app, BrowserWindow } = require('electron') 2 | 3 | 4 | function createWindow () { 5 | const win = new BrowserWindow({ 6 | width: 900, 7 | height: 590, 8 | minWidth: 700, 9 | minHeight: 300, 10 | frame: false, 11 | title: "HEAPPY :)", 12 | webPreferences: { 13 | nodeIntegration: true 14 | } 15 | }) 16 | const ses = win.webContents.session.clearCache(function() { 17 | }); 18 | win.setMenu(null) 19 | win.loadFile('index.html') 20 | } 21 | 22 | app.whenReady().then(createWindow) 23 | 24 | app.on('window-all-closed', () => { 25 | if (process.platform !== 'darwin') { 26 | app.quit() 27 | } 28 | }) 29 | 30 | app.on('activate', () => { 31 | if (BrowserWindow.getAllWindows().length === 0) { 32 | 33 | createWindow() 34 | } 35 | }) 36 | 37 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const { Entry } = require('./components/Entry'); 2 | const { GuiServer } = require('./components/GuiServer'); 3 | var fs = require("fs"); 4 | const ldsh = require('lodash') 5 | 6 | new Vue({ 7 | el:'#app', 8 | data:{ 9 | heaps:[], 10 | chunks: [], 11 | struct: {}, 12 | zoom:100, 13 | range: [0,16], 14 | shift: 0, 15 | lastScroll: null, 16 | updateRows: 0, 17 | chunkColors: {}, 18 | factCanvas: 0, 19 | canvasInitialized: false, 20 | currIdCanvas: 0, 21 | guiServer: null, 22 | usage: "", 23 | sumBins: {} 24 | }, 25 | created:function() { 26 | 27 | fetch('file:./data/struct.json') 28 | .then(res => { 29 | return res.json() 30 | }) 31 | .then(res => { 32 | this.struct = res; 33 | }) 34 | 35 | this.chunkColors["fast"] = "#c6ff44" 36 | this.chunkColors["large"] = "#44b0ff" 37 | this.chunkColors["small"] = "#ad44ff" 38 | this.chunkColors["tcache"] = "#ff4493" 39 | this.chunkColors["unsorted"] = "#ffbb44" 40 | this.chunkColors["allocated"] = "#d8d8d8" 41 | 42 | this.guiServer = new GuiServer(this) 43 | }, 44 | methods:{ 45 | isLastChunk(id){ 46 | console.log("test") 47 | console.log(id) 48 | console.log(this.chunks.length -1) 49 | if(id == this.chunks.length -1) 50 | return true 51 | return false 52 | }, 53 | handleScroll(event) { 54 | //event.deltaY>0 ? this.zoom-=30 : this.zoom+=30 55 | var date = new Date(); 56 | var time = date.getTime(); 57 | var scrollFast = 1 58 | if(this.lastScroll != null){ 59 | scrollFast = 1 -Math.round(100/(this.lastScroll-time)) 60 | } 61 | this.lastScroll = time 62 | event.deltaY>0?this.shift+=scrollFast:this.shift-=scrollFast 63 | 64 | if(this.shift < 0) 65 | this.shift = 0 66 | if(this.shift + this.range[1] > this.heaps[0].top) 67 | this.shift = this.heaps[0].top - this.range[1] 68 | 69 | this.updateCanvas() 70 | }, 71 | initCanvas(){ 72 | var canvas = document.getElementById("colorBar"); 73 | if(canvas == null) 74 | return 75 | this.canvasInitialized = true 76 | var lastCId = this.chunks.length - 1 77 | 78 | var ctx = canvas.getContext("2d"); 79 | ctx.clearRect(0, 0, 700, 50); 80 | ctx.imageSmoothingEnabled= false 81 | ctx.lineWidth = 3; 82 | var keys = Object.keys(this.chunks[lastCId]); 83 | 84 | var rangeSize = keys[keys.length -1] - this.heaps[0].bot 85 | this.factCanvas = canvas.width / rangeSize 86 | 87 | for(var k in this.chunks[lastCId]){ 88 | var x = (k - this.heaps[0].bot) * this.factCanvas 89 | var colorChunk = this.chunkColors[this.chunks[lastCId][k]] 90 | ctx.beginPath(); 91 | ctx.strokeStyle = colorChunk 92 | ctx.moveTo(x,2); 93 | ctx.lineTo(x,48); 94 | ctx.stroke(); 95 | } 96 | ctx.beginPath(); 97 | ctx.strokeStyle = "#FF00FF" 98 | ctx.moveTo(0, 0); ctx.lineTo(25, 0); ctx.stroke(); 99 | ctx.moveTo(0, 50); ctx.lineTo(25, 50); ctx.stroke(); 100 | }, 101 | updateCanvas(){ 102 | if(this.currIdCanvas != this.chunks.length 103 | && this.chunks.length !=0 104 | && !this.canvasInitialized){ 105 | this.initCanvas() 106 | } 107 | var keys = Object.keys(this.chunks); 108 | var rangeSize = keys[keys.length -1] - this.heaps[0].bot 109 | 110 | var canvas = document.getElementById("colorBar"); 111 | if(canvas == null) 112 | return 113 | var ctx = canvas.getContext("2d"); 114 | ctx.imageSmoothingEnabled= false 115 | ctx.lineWidth = 5; 116 | 117 | ctx.beginPath(); 118 | ctx.strokeStyle = "#FFFFFF" 119 | ctx.moveTo(0,0); ctx.lineTo(700,0); ctx.stroke(); 120 | ctx.moveTo(0,50); ctx.lineTo(700,50); ctx.stroke(); 121 | 122 | var x = this.shift * this.factCanvas * 8 123 | 124 | ctx.beginPath(); 125 | ctx.strokeStyle = "#FF00FF" 126 | var barSize = (this.range[1]*8) * this.factCanvas 127 | 128 | ctx.moveTo(x,0); ctx.lineTo(x + barSize,0); ctx.stroke(); 129 | ctx.moveTo(x,50); ctx.lineTo(x + barSize,50); ctx.stroke(); 130 | 131 | }, 132 | canvasClick(event){ 133 | var rect = event.target.getBoundingClientRect(); 134 | var fact = 700 / (rect.right - rect.left) 135 | var barSize = (16*8) * this.factCanvas 136 | var x = ((event.clientX - rect.left) * fact) - (barSize/2) 137 | if(x < 0) 138 | x = 0 139 | this.shift = Math.round((x / this.factCanvas) / 8) 140 | this.updateCanvas() 141 | }, 142 | takeSnapshot(){ 143 | var clonedHeap = ldsh.cloneDeep(this.heaps[this.heaps.length-1]) 144 | var clonedChunks = ldsh.cloneDeep(this.chunks[this.chunks.length-1]) 145 | 146 | this.heaps.push(clonedHeap) 147 | this.chunks.push(clonedChunks) 148 | 149 | this.updateCanvas() 150 | }, 151 | updateSnapshot(){ 152 | this.guiServer.updateSnap() 153 | }, 154 | colorChunks(){ 155 | for(var id=0; id < this.heaps.length;id++){ 156 | for (let addr in this.chunks[id]){ 157 | address = parseInt(addr) 158 | type = this.chunks[id][address] 159 | color = this.chunkColors[type] 160 | //console.log(address, type, color) 161 | 162 | switch(type){ 163 | case "allocated": 164 | if(!(address in this.heaps[id].data)) 165 | this.heaps[id].data[address] = new Entry(0) 166 | this.heaps[id].data[address].color = color 167 | this.heaps[id].data[address].type = type 168 | break 169 | case "tcache": 170 | if(!(address in this.heaps[id].data)) 171 | this.heaps[id].data[address] = new Entry(0) 172 | if(!(address+8 in this.heaps[id].data)) 173 | this.heaps[id].data[address+8] = new Entry(0) 174 | 175 | this.heaps[id].data[address].color = color 176 | this.heaps[id].data[address+8].color = color 177 | 178 | this.heaps[id].data[address].tag = this.struct[type][0] // "next" 179 | this.heaps[id].data[address+8].tag = this.struct[type][1] // "key" 180 | 181 | this.heaps[id].data[address].type = type 182 | this.heaps[id].data[address+8].type = type 183 | break 184 | case "fast": 185 | case "small": 186 | case "large": 187 | case "unsorted": 188 | for(var c=0; c0 && this.heaps[id].data[address].value != this.heaps[id-1].data[address].value) 224 | entry["isChanged"] = true 225 | 226 | if(id < this.heaps.length -1) 227 | entry["readonly"] = true 228 | entries.push(entry) 229 | } 230 | yield entries 231 | } 232 | }, 233 | changeRepr(event){ 234 | var b = event.target 235 | var id = parseInt(b.getAttribute("heapid")) 236 | 237 | var address = b.id.split(":")[1] 238 | var action = "h" 239 | if(b.innerText == "h"){ 240 | action = "d" 241 | }else if(b.innerText == "d"){ 242 | action = "a" 243 | } 244 | this.heaps[id].data[parseInt(address,16)].representation = action 245 | 246 | this.tableUpdate() 247 | }, 248 | valueChanged(event){ 249 | var addr = parseInt(event.target.parentElement.id, 16) 250 | var newVal = event.target.value 251 | var id = parseInt(event.target.getAttribute("heapid")) 252 | 253 | this.heaps[id].data[addr].changeValue(newVal) 254 | this.guiServer.updateValue(addr, this.heaps[id].data[addr].toInt()) 255 | this.tableUpdate() 256 | }, 257 | searchChanged(id, event){ 258 | var value = event.target.value 259 | var select = document.getElementById("searchType:" + id) 260 | 261 | switch(select.value){ 262 | case "h": 263 | case "d": 264 | if( !isNaN(value)){ 265 | var intVal = BigInt(value) 266 | for(var address in this.heaps[id].data ){ 267 | if(( event.key != "Enter" || address > this.heaps[id].bot + (this.shift*8)) && 268 | this.heaps[id].data[address].value == intVal){ 269 | this.shift = (address - this.heaps[id].bot)/8 270 | break 271 | } 272 | } 273 | } 274 | break 275 | case "s": 276 | var strVal = value.split("").reverse().join("") 277 | for(var address in this.heaps[id].data ){ 278 | if(( event.key != "Enter" || address > this.heaps[id].bot + (this.shift*8)) && 279 | this.heaps[id].data[address].toAscii().includes(strVal) ){ 280 | this.shift = (address - this.heaps[id].bot)/8 281 | break 282 | } 283 | } 284 | break 285 | } 286 | this.updateCanvas() 287 | }, 288 | arrowHandler(id, event){ 289 | // Per andare direttamente al prossimo chunk 290 | if(event.key == "ArrowDown"){ 291 | console.log("ArrowDown pressed") 292 | console.log(this.shift + this.heaps[id].bot) 293 | }else if (event.key == "ArrowUp"){ 294 | console.log("ArrowUp pressed") 295 | } 296 | }, 297 | commentChanged(event){ 298 | var addr = parseInt(event.target.parentElement.id, 16) 299 | var newVal = event.target.value 300 | this.heaps[0].data[addr].comment = newVal 301 | console.log("commented") 302 | }, 303 | tableUpdate(){ 304 | this.updateRows += 1 305 | }, 306 | deleteSnap(id, event){ 307 | console.log(id) 308 | if(id == this.heaps.length-1) 309 | return 310 | console.log("delete row:", id) 311 | //this.heaps.pop() 312 | this.heaps.splice(id, 1); 313 | this.chunks.splice(id, 1); 314 | this.canvasInitialized = false 315 | this.initCanvas() 316 | this.updateCanvas() 317 | }, 318 | changeRows(val){ 319 | this.range[1] += val 320 | this.tableUpdate() 321 | this.updateCanvas() 322 | console.log(val) 323 | }, 324 | changeZoom(inout){ 325 | this.zoom += inout 326 | document.getElementById("mainTable").style.zoom = this.zoom+"%" 327 | }, 328 | binsUpdate(){ 329 | this.sumBins = { 330 | "fast": 0, 331 | "large": 0, 332 | "small": 0, 333 | "tcache": 0, 334 | "unsorted": 0, 335 | "allocated": 0 336 | } 337 | var lastId = this.chunks.length-1 338 | for(var k in this.chunks[lastId]){ 339 | this.sumBins[this.chunks[lastId][k]] += 1 340 | } 341 | }, 342 | clean(){ 343 | window.location.reload(false); 344 | } 345 | } 346 | }) -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "heappy", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "heappy", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "lodash": "^4.17.21", 12 | "nocache": "^2.1.0", 13 | "vue-observe-visibility": "^1.0.0", 14 | "websocket": "^1.0.33" 15 | }, 16 | "devDependencies": { 17 | "electron": "^11.2.3", 18 | "electron-packager": "^15.2.0" 19 | } 20 | }, 21 | "node_modules/@electron/get": { 22 | "version": "1.12.4", 23 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", 24 | "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", 25 | "dev": true, 26 | "dependencies": { 27 | "debug": "^4.1.1", 28 | "env-paths": "^2.2.0", 29 | "fs-extra": "^8.1.0", 30 | "got": "^9.6.0", 31 | "progress": "^2.0.3", 32 | "semver": "^6.2.0", 33 | "sumchecker": "^3.0.1" 34 | }, 35 | "engines": { 36 | "node": ">=8.6" 37 | }, 38 | "optionalDependencies": { 39 | "global-agent": "^2.0.2", 40 | "global-tunnel-ng": "^2.7.1" 41 | } 42 | }, 43 | "node_modules/@sindresorhus/is": { 44 | "version": "0.14.0", 45 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 46 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 47 | "dev": true, 48 | "engines": { 49 | "node": ">=6" 50 | } 51 | }, 52 | "node_modules/@szmarczak/http-timer": { 53 | "version": "1.1.2", 54 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 55 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 56 | "dev": true, 57 | "dependencies": { 58 | "defer-to-connect": "^1.0.1" 59 | }, 60 | "engines": { 61 | "node": ">=6" 62 | } 63 | }, 64 | "node_modules/@types/glob": { 65 | "version": "7.1.3", 66 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", 67 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", 68 | "dev": true, 69 | "optional": true, 70 | "dependencies": { 71 | "@types/minimatch": "*", 72 | "@types/node": "*" 73 | } 74 | }, 75 | "node_modules/@types/minimatch": { 76 | "version": "3.0.3", 77 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 78 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 79 | "dev": true, 80 | "optional": true 81 | }, 82 | "node_modules/@types/node": { 83 | "version": "12.20.0", 84 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.0.tgz", 85 | "integrity": "sha512-0/41wHcurotvSOTHQUFkgL702c3pyWR1mToSrrX3pGPvGfpHTv3Ksx0M4UVuU5VJfjVb62Eyr1eKO1tWNUCg2Q==", 86 | "dev": true 87 | }, 88 | "node_modules/@types/yauzl": { 89 | "version": "2.9.1", 90 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", 91 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", 92 | "dev": true, 93 | "optional": true, 94 | "dependencies": { 95 | "@types/node": "*" 96 | } 97 | }, 98 | "node_modules/asar": { 99 | "version": "3.0.3", 100 | "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", 101 | "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", 102 | "dev": true, 103 | "dependencies": { 104 | "chromium-pickle-js": "^0.2.0", 105 | "commander": "^5.0.0", 106 | "glob": "^7.1.6", 107 | "minimatch": "^3.0.4" 108 | }, 109 | "bin": { 110 | "asar": "bin/asar.js" 111 | }, 112 | "engines": { 113 | "node": ">=10.12.0" 114 | }, 115 | "optionalDependencies": { 116 | "@types/glob": "^7.1.1" 117 | } 118 | }, 119 | "node_modules/at-least-node": { 120 | "version": "1.0.0", 121 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 122 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 123 | "dev": true, 124 | "engines": { 125 | "node": ">= 4.0.0" 126 | } 127 | }, 128 | "node_modules/author-regex": { 129 | "version": "1.0.0", 130 | "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", 131 | "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", 132 | "dev": true, 133 | "engines": { 134 | "node": ">=0.8" 135 | } 136 | }, 137 | "node_modules/balanced-match": { 138 | "version": "1.0.0", 139 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 140 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 141 | "dev": true 142 | }, 143 | "node_modules/base64-js": { 144 | "version": "1.5.1", 145 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 146 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 147 | "dev": true, 148 | "funding": [ 149 | { 150 | "type": "github", 151 | "url": "https://github.com/sponsors/feross" 152 | }, 153 | { 154 | "type": "patreon", 155 | "url": "https://www.patreon.com/feross" 156 | }, 157 | { 158 | "type": "consulting", 159 | "url": "https://feross.org/support" 160 | } 161 | ] 162 | }, 163 | "node_modules/bluebird": { 164 | "version": "3.7.2", 165 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 166 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 167 | "dev": true 168 | }, 169 | "node_modules/boolean": { 170 | "version": "3.0.2", 171 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", 172 | "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", 173 | "dev": true, 174 | "optional": true 175 | }, 176 | "node_modules/brace-expansion": { 177 | "version": "1.1.11", 178 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 179 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 180 | "dev": true, 181 | "dependencies": { 182 | "balanced-match": "^1.0.0", 183 | "concat-map": "0.0.1" 184 | } 185 | }, 186 | "node_modules/buffer-alloc": { 187 | "version": "1.2.0", 188 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 189 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 190 | "dev": true, 191 | "dependencies": { 192 | "buffer-alloc-unsafe": "^1.1.0", 193 | "buffer-fill": "^1.0.0" 194 | } 195 | }, 196 | "node_modules/buffer-alloc-unsafe": { 197 | "version": "1.1.0", 198 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 199 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 200 | "dev": true 201 | }, 202 | "node_modules/buffer-crc32": { 203 | "version": "0.2.13", 204 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 205 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 206 | "dev": true, 207 | "engines": { 208 | "node": "*" 209 | } 210 | }, 211 | "node_modules/buffer-fill": { 212 | "version": "1.0.0", 213 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 214 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", 215 | "dev": true 216 | }, 217 | "node_modules/buffer-from": { 218 | "version": "1.1.1", 219 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 220 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 221 | "dev": true 222 | }, 223 | "node_modules/bufferutil": { 224 | "version": "4.0.3", 225 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", 226 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", 227 | "hasInstallScript": true, 228 | "dependencies": { 229 | "node-gyp-build": "^4.2.0" 230 | } 231 | }, 232 | "node_modules/cacheable-request": { 233 | "version": "6.1.0", 234 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 235 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 236 | "dev": true, 237 | "dependencies": { 238 | "clone-response": "^1.0.2", 239 | "get-stream": "^5.1.0", 240 | "http-cache-semantics": "^4.0.0", 241 | "keyv": "^3.0.0", 242 | "lowercase-keys": "^2.0.0", 243 | "normalize-url": "^4.1.0", 244 | "responselike": "^1.0.2" 245 | }, 246 | "engines": { 247 | "node": ">=8" 248 | } 249 | }, 250 | "node_modules/cacheable-request/node_modules/get-stream": { 251 | "version": "5.2.0", 252 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 253 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 254 | "dev": true, 255 | "dependencies": { 256 | "pump": "^3.0.0" 257 | }, 258 | "engines": { 259 | "node": ">=8" 260 | }, 261 | "funding": { 262 | "url": "https://github.com/sponsors/sindresorhus" 263 | } 264 | }, 265 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 266 | "version": "2.0.0", 267 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 268 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 269 | "dev": true, 270 | "engines": { 271 | "node": ">=8" 272 | } 273 | }, 274 | "node_modules/chromium-pickle-js": { 275 | "version": "0.2.0", 276 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", 277 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", 278 | "dev": true 279 | }, 280 | "node_modules/clone-response": { 281 | "version": "1.0.2", 282 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 283 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 284 | "dev": true, 285 | "dependencies": { 286 | "mimic-response": "^1.0.0" 287 | } 288 | }, 289 | "node_modules/commander": { 290 | "version": "5.1.0", 291 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 292 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 293 | "dev": true, 294 | "engines": { 295 | "node": ">= 6" 296 | } 297 | }, 298 | "node_modules/compare-version": { 299 | "version": "0.1.2", 300 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", 301 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", 302 | "dev": true, 303 | "engines": { 304 | "node": ">=0.10.0" 305 | } 306 | }, 307 | "node_modules/concat-map": { 308 | "version": "0.0.1", 309 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 310 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 311 | "dev": true 312 | }, 313 | "node_modules/concat-stream": { 314 | "version": "1.6.2", 315 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 316 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 317 | "dev": true, 318 | "engines": [ 319 | "node >= 0.8" 320 | ], 321 | "dependencies": { 322 | "buffer-from": "^1.0.0", 323 | "inherits": "^2.0.3", 324 | "readable-stream": "^2.2.2", 325 | "typedarray": "^0.0.6" 326 | } 327 | }, 328 | "node_modules/config-chain": { 329 | "version": "1.1.12", 330 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 331 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 332 | "dev": true, 333 | "optional": true, 334 | "dependencies": { 335 | "ini": "^1.3.4", 336 | "proto-list": "~1.2.1" 337 | } 338 | }, 339 | "node_modules/core-js": { 340 | "version": "3.8.3", 341 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", 342 | "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", 343 | "dev": true, 344 | "hasInstallScript": true, 345 | "optional": true, 346 | "funding": { 347 | "type": "opencollective", 348 | "url": "https://opencollective.com/core-js" 349 | } 350 | }, 351 | "node_modules/core-util-is": { 352 | "version": "1.0.2", 353 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 354 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 355 | "dev": true 356 | }, 357 | "node_modules/d": { 358 | "version": "1.0.1", 359 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 360 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 361 | "dependencies": { 362 | "es5-ext": "^0.10.50", 363 | "type": "^1.0.1" 364 | } 365 | }, 366 | "node_modules/debug": { 367 | "version": "4.3.1", 368 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 369 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 370 | "dev": true, 371 | "dependencies": { 372 | "ms": "2.1.2" 373 | }, 374 | "engines": { 375 | "node": ">=6.0" 376 | }, 377 | "peerDependenciesMeta": { 378 | "supports-color": { 379 | "optional": true 380 | } 381 | } 382 | }, 383 | "node_modules/decompress-response": { 384 | "version": "3.3.0", 385 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 386 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 387 | "dev": true, 388 | "dependencies": { 389 | "mimic-response": "^1.0.0" 390 | }, 391 | "engines": { 392 | "node": ">=4" 393 | } 394 | }, 395 | "node_modules/defer-to-connect": { 396 | "version": "1.1.3", 397 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 398 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 399 | "dev": true 400 | }, 401 | "node_modules/define-properties": { 402 | "version": "1.1.3", 403 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 404 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 405 | "dev": true, 406 | "optional": true, 407 | "dependencies": { 408 | "object-keys": "^1.0.12" 409 | }, 410 | "engines": { 411 | "node": ">= 0.4" 412 | } 413 | }, 414 | "node_modules/detect-node": { 415 | "version": "2.0.4", 416 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 417 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 418 | "dev": true, 419 | "optional": true 420 | }, 421 | "node_modules/duplexer3": { 422 | "version": "0.1.4", 423 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 424 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 425 | "dev": true 426 | }, 427 | "node_modules/electron": { 428 | "version": "11.2.3", 429 | "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz", 430 | "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==", 431 | "dev": true, 432 | "hasInstallScript": true, 433 | "dependencies": { 434 | "@electron/get": "^1.0.1", 435 | "@types/node": "^12.0.12", 436 | "extract-zip": "^1.0.3" 437 | }, 438 | "bin": { 439 | "electron": "cli.js" 440 | }, 441 | "engines": { 442 | "node": ">= 8.6" 443 | } 444 | }, 445 | "node_modules/electron-notarize": { 446 | "version": "1.0.0", 447 | "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz", 448 | "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==", 449 | "dev": true, 450 | "dependencies": { 451 | "debug": "^4.1.1", 452 | "fs-extra": "^9.0.1" 453 | }, 454 | "engines": { 455 | "node": ">= 10.0.0" 456 | } 457 | }, 458 | "node_modules/electron-notarize/node_modules/fs-extra": { 459 | "version": "9.1.0", 460 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 461 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 462 | "dev": true, 463 | "dependencies": { 464 | "at-least-node": "^1.0.0", 465 | "graceful-fs": "^4.2.0", 466 | "jsonfile": "^6.0.1", 467 | "universalify": "^2.0.0" 468 | }, 469 | "engines": { 470 | "node": ">=10" 471 | } 472 | }, 473 | "node_modules/electron-notarize/node_modules/jsonfile": { 474 | "version": "6.1.0", 475 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 476 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 477 | "dev": true, 478 | "dependencies": { 479 | "universalify": "^2.0.0" 480 | }, 481 | "optionalDependencies": { 482 | "graceful-fs": "^4.1.6" 483 | } 484 | }, 485 | "node_modules/electron-notarize/node_modules/universalify": { 486 | "version": "2.0.0", 487 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 488 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 489 | "dev": true, 490 | "engines": { 491 | "node": ">= 10.0.0" 492 | } 493 | }, 494 | "node_modules/electron-osx-sign": { 495 | "version": "0.5.0", 496 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz", 497 | "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==", 498 | "dev": true, 499 | "dependencies": { 500 | "bluebird": "^3.5.0", 501 | "compare-version": "^0.1.2", 502 | "debug": "^2.6.8", 503 | "isbinaryfile": "^3.0.2", 504 | "minimist": "^1.2.0", 505 | "plist": "^3.0.1" 506 | }, 507 | "bin": { 508 | "electron-osx-flat": "bin/electron-osx-flat.js", 509 | "electron-osx-sign": "bin/electron-osx-sign.js" 510 | }, 511 | "engines": { 512 | "node": ">=4.0.0" 513 | } 514 | }, 515 | "node_modules/electron-osx-sign/node_modules/debug": { 516 | "version": "2.6.9", 517 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 518 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 519 | "dev": true, 520 | "dependencies": { 521 | "ms": "2.0.0" 522 | } 523 | }, 524 | "node_modules/electron-osx-sign/node_modules/ms": { 525 | "version": "2.0.0", 526 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 527 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 528 | "dev": true 529 | }, 530 | "node_modules/electron-packager": { 531 | "version": "15.2.0", 532 | "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.2.0.tgz", 533 | "integrity": "sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA==", 534 | "dev": true, 535 | "dependencies": { 536 | "@electron/get": "^1.6.0", 537 | "asar": "^3.0.0", 538 | "debug": "^4.0.1", 539 | "electron-notarize": "^1.0.0", 540 | "electron-osx-sign": "^0.5.0", 541 | "extract-zip": "^2.0.0", 542 | "filenamify": "^4.1.0", 543 | "fs-extra": "^9.0.0", 544 | "galactus": "^0.2.1", 545 | "get-package-info": "^1.0.0", 546 | "junk": "^3.1.0", 547 | "parse-author": "^2.0.0", 548 | "plist": "^3.0.0", 549 | "rcedit": "^2.0.0", 550 | "resolve": "^1.1.6", 551 | "semver": "^7.1.3", 552 | "yargs-parser": "^20.0.0" 553 | }, 554 | "bin": { 555 | "electron-packager": "bin/electron-packager.js" 556 | }, 557 | "engines": { 558 | "node": ">= 10.12.0" 559 | }, 560 | "funding": { 561 | "url": "https://github.com/electron/electron-packager?sponsor=1" 562 | } 563 | }, 564 | "node_modules/electron-packager/node_modules/extract-zip": { 565 | "version": "2.0.1", 566 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 567 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 568 | "dev": true, 569 | "dependencies": { 570 | "debug": "^4.1.1", 571 | "get-stream": "^5.1.0", 572 | "yauzl": "^2.10.0" 573 | }, 574 | "bin": { 575 | "extract-zip": "cli.js" 576 | }, 577 | "engines": { 578 | "node": ">= 10.17.0" 579 | }, 580 | "optionalDependencies": { 581 | "@types/yauzl": "^2.9.1" 582 | } 583 | }, 584 | "node_modules/electron-packager/node_modules/fs-extra": { 585 | "version": "9.1.0", 586 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 587 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 588 | "dev": true, 589 | "dependencies": { 590 | "at-least-node": "^1.0.0", 591 | "graceful-fs": "^4.2.0", 592 | "jsonfile": "^6.0.1", 593 | "universalify": "^2.0.0" 594 | }, 595 | "engines": { 596 | "node": ">=10" 597 | } 598 | }, 599 | "node_modules/electron-packager/node_modules/get-stream": { 600 | "version": "5.2.0", 601 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 602 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 603 | "dev": true, 604 | "dependencies": { 605 | "pump": "^3.0.0" 606 | }, 607 | "engines": { 608 | "node": ">=8" 609 | }, 610 | "funding": { 611 | "url": "https://github.com/sponsors/sindresorhus" 612 | } 613 | }, 614 | "node_modules/electron-packager/node_modules/jsonfile": { 615 | "version": "6.1.0", 616 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 617 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 618 | "dev": true, 619 | "dependencies": { 620 | "universalify": "^2.0.0" 621 | }, 622 | "optionalDependencies": { 623 | "graceful-fs": "^4.1.6" 624 | } 625 | }, 626 | "node_modules/electron-packager/node_modules/semver": { 627 | "version": "7.3.4", 628 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 629 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 630 | "dev": true, 631 | "dependencies": { 632 | "lru-cache": "^6.0.0" 633 | }, 634 | "bin": { 635 | "semver": "bin/semver.js" 636 | }, 637 | "engines": { 638 | "node": ">=10" 639 | } 640 | }, 641 | "node_modules/electron-packager/node_modules/universalify": { 642 | "version": "2.0.0", 643 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 644 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 645 | "dev": true, 646 | "engines": { 647 | "node": ">= 10.0.0" 648 | } 649 | }, 650 | "node_modules/encodeurl": { 651 | "version": "1.0.2", 652 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 653 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 654 | "dev": true, 655 | "optional": true, 656 | "engines": { 657 | "node": ">= 0.8" 658 | } 659 | }, 660 | "node_modules/end-of-stream": { 661 | "version": "1.4.4", 662 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 663 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 664 | "dev": true, 665 | "dependencies": { 666 | "once": "^1.4.0" 667 | } 668 | }, 669 | "node_modules/env-paths": { 670 | "version": "2.2.0", 671 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 672 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 673 | "dev": true, 674 | "engines": { 675 | "node": ">=6" 676 | } 677 | }, 678 | "node_modules/error-ex": { 679 | "version": "1.3.2", 680 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 681 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 682 | "dev": true, 683 | "dependencies": { 684 | "is-arrayish": "^0.2.1" 685 | } 686 | }, 687 | "node_modules/es5-ext": { 688 | "version": "0.10.53", 689 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 690 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", 691 | "dependencies": { 692 | "es6-iterator": "~2.0.3", 693 | "es6-symbol": "~3.1.3", 694 | "next-tick": "~1.0.0" 695 | } 696 | }, 697 | "node_modules/es6-error": { 698 | "version": "4.1.1", 699 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 700 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 701 | "dev": true, 702 | "optional": true 703 | }, 704 | "node_modules/es6-iterator": { 705 | "version": "2.0.3", 706 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 707 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 708 | "dependencies": { 709 | "d": "1", 710 | "es5-ext": "^0.10.35", 711 | "es6-symbol": "^3.1.1" 712 | } 713 | }, 714 | "node_modules/es6-symbol": { 715 | "version": "3.1.3", 716 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 717 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 718 | "dependencies": { 719 | "d": "^1.0.1", 720 | "ext": "^1.1.2" 721 | } 722 | }, 723 | "node_modules/escape-string-regexp": { 724 | "version": "4.0.0", 725 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 726 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 727 | "dev": true, 728 | "optional": true, 729 | "engines": { 730 | "node": ">=10" 731 | }, 732 | "funding": { 733 | "url": "https://github.com/sponsors/sindresorhus" 734 | } 735 | }, 736 | "node_modules/ext": { 737 | "version": "1.4.0", 738 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", 739 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", 740 | "dependencies": { 741 | "type": "^2.0.0" 742 | } 743 | }, 744 | "node_modules/ext/node_modules/type": { 745 | "version": "2.5.0", 746 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", 747 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" 748 | }, 749 | "node_modules/extract-zip": { 750 | "version": "1.7.0", 751 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", 752 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", 753 | "dev": true, 754 | "dependencies": { 755 | "concat-stream": "^1.6.2", 756 | "debug": "^2.6.9", 757 | "mkdirp": "^0.5.4", 758 | "yauzl": "^2.10.0" 759 | }, 760 | "bin": { 761 | "extract-zip": "cli.js" 762 | } 763 | }, 764 | "node_modules/extract-zip/node_modules/debug": { 765 | "version": "2.6.9", 766 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 767 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 768 | "dev": true, 769 | "dependencies": { 770 | "ms": "2.0.0" 771 | } 772 | }, 773 | "node_modules/extract-zip/node_modules/ms": { 774 | "version": "2.0.0", 775 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 776 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 777 | "dev": true 778 | }, 779 | "node_modules/fd-slicer": { 780 | "version": "1.1.0", 781 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 782 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 783 | "dev": true, 784 | "dependencies": { 785 | "pend": "~1.2.0" 786 | } 787 | }, 788 | "node_modules/filename-reserved-regex": { 789 | "version": "2.0.0", 790 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 791 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", 792 | "dev": true, 793 | "engines": { 794 | "node": ">=4" 795 | } 796 | }, 797 | "node_modules/filenamify": { 798 | "version": "4.2.0", 799 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", 800 | "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", 801 | "dev": true, 802 | "dependencies": { 803 | "filename-reserved-regex": "^2.0.0", 804 | "strip-outer": "^1.0.1", 805 | "trim-repeated": "^1.0.0" 806 | }, 807 | "engines": { 808 | "node": ">=8" 809 | }, 810 | "funding": { 811 | "url": "https://github.com/sponsors/sindresorhus" 812 | } 813 | }, 814 | "node_modules/find-up": { 815 | "version": "2.1.0", 816 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 817 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 818 | "dev": true, 819 | "dependencies": { 820 | "locate-path": "^2.0.0" 821 | }, 822 | "engines": { 823 | "node": ">=4" 824 | } 825 | }, 826 | "node_modules/flora-colossus": { 827 | "version": "1.0.1", 828 | "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz", 829 | "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==", 830 | "dev": true, 831 | "dependencies": { 832 | "debug": "^4.1.1", 833 | "fs-extra": "^7.0.0" 834 | }, 835 | "engines": { 836 | "node": ">= 6.0.0" 837 | } 838 | }, 839 | "node_modules/flora-colossus/node_modules/fs-extra": { 840 | "version": "7.0.1", 841 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 842 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 843 | "dev": true, 844 | "dependencies": { 845 | "graceful-fs": "^4.1.2", 846 | "jsonfile": "^4.0.0", 847 | "universalify": "^0.1.0" 848 | }, 849 | "engines": { 850 | "node": ">=6 <7 || >=8" 851 | } 852 | }, 853 | "node_modules/fs-extra": { 854 | "version": "8.1.0", 855 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 856 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 857 | "dev": true, 858 | "dependencies": { 859 | "graceful-fs": "^4.2.0", 860 | "jsonfile": "^4.0.0", 861 | "universalify": "^0.1.0" 862 | }, 863 | "engines": { 864 | "node": ">=6 <7 || >=8" 865 | } 866 | }, 867 | "node_modules/fs.realpath": { 868 | "version": "1.0.0", 869 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 870 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 871 | "dev": true 872 | }, 873 | "node_modules/function-bind": { 874 | "version": "1.1.1", 875 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 876 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 877 | "dev": true 878 | }, 879 | "node_modules/galactus": { 880 | "version": "0.2.1", 881 | "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz", 882 | "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=", 883 | "dev": true, 884 | "dependencies": { 885 | "debug": "^3.1.0", 886 | "flora-colossus": "^1.0.0", 887 | "fs-extra": "^4.0.0" 888 | } 889 | }, 890 | "node_modules/galactus/node_modules/debug": { 891 | "version": "3.2.7", 892 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 893 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 894 | "dev": true, 895 | "dependencies": { 896 | "ms": "^2.1.1" 897 | } 898 | }, 899 | "node_modules/galactus/node_modules/fs-extra": { 900 | "version": "4.0.3", 901 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 902 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 903 | "dev": true, 904 | "dependencies": { 905 | "graceful-fs": "^4.1.2", 906 | "jsonfile": "^4.0.0", 907 | "universalify": "^0.1.0" 908 | } 909 | }, 910 | "node_modules/get-package-info": { 911 | "version": "1.0.0", 912 | "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz", 913 | "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=", 914 | "dev": true, 915 | "dependencies": { 916 | "bluebird": "^3.1.1", 917 | "debug": "^2.2.0", 918 | "lodash.get": "^4.0.0", 919 | "read-pkg-up": "^2.0.0" 920 | }, 921 | "engines": { 922 | "node": ">= 4.0" 923 | } 924 | }, 925 | "node_modules/get-package-info/node_modules/debug": { 926 | "version": "2.6.9", 927 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 928 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 929 | "dev": true, 930 | "dependencies": { 931 | "ms": "2.0.0" 932 | } 933 | }, 934 | "node_modules/get-package-info/node_modules/ms": { 935 | "version": "2.0.0", 936 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 937 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 938 | "dev": true 939 | }, 940 | "node_modules/get-stream": { 941 | "version": "4.1.0", 942 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 943 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 944 | "dev": true, 945 | "dependencies": { 946 | "pump": "^3.0.0" 947 | }, 948 | "engines": { 949 | "node": ">=6" 950 | } 951 | }, 952 | "node_modules/glob": { 953 | "version": "7.1.6", 954 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 955 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 956 | "dev": true, 957 | "dependencies": { 958 | "fs.realpath": "^1.0.0", 959 | "inflight": "^1.0.4", 960 | "inherits": "2", 961 | "minimatch": "^3.0.4", 962 | "once": "^1.3.0", 963 | "path-is-absolute": "^1.0.0" 964 | }, 965 | "engines": { 966 | "node": "*" 967 | }, 968 | "funding": { 969 | "url": "https://github.com/sponsors/isaacs" 970 | } 971 | }, 972 | "node_modules/global-agent": { 973 | "version": "2.1.12", 974 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", 975 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", 976 | "dev": true, 977 | "optional": true, 978 | "dependencies": { 979 | "boolean": "^3.0.1", 980 | "core-js": "^3.6.5", 981 | "es6-error": "^4.1.1", 982 | "matcher": "^3.0.0", 983 | "roarr": "^2.15.3", 984 | "semver": "^7.3.2", 985 | "serialize-error": "^7.0.1" 986 | }, 987 | "engines": { 988 | "node": ">=10.0" 989 | } 990 | }, 991 | "node_modules/global-agent/node_modules/semver": { 992 | "version": "7.3.4", 993 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 994 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 995 | "dev": true, 996 | "optional": true, 997 | "dependencies": { 998 | "lru-cache": "^6.0.0" 999 | }, 1000 | "bin": { 1001 | "semver": "bin/semver.js" 1002 | }, 1003 | "engines": { 1004 | "node": ">=10" 1005 | } 1006 | }, 1007 | "node_modules/global-tunnel-ng": { 1008 | "version": "2.7.1", 1009 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 1010 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 1011 | "dev": true, 1012 | "optional": true, 1013 | "dependencies": { 1014 | "encodeurl": "^1.0.2", 1015 | "lodash": "^4.17.10", 1016 | "npm-conf": "^1.1.3", 1017 | "tunnel": "^0.0.6" 1018 | }, 1019 | "engines": { 1020 | "node": ">=0.10" 1021 | } 1022 | }, 1023 | "node_modules/globalthis": { 1024 | "version": "1.0.1", 1025 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", 1026 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", 1027 | "dev": true, 1028 | "optional": true, 1029 | "dependencies": { 1030 | "define-properties": "^1.1.3" 1031 | }, 1032 | "engines": { 1033 | "node": ">= 0.4" 1034 | }, 1035 | "funding": { 1036 | "url": "https://github.com/sponsors/ljharb" 1037 | } 1038 | }, 1039 | "node_modules/got": { 1040 | "version": "9.6.0", 1041 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1042 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1043 | "dev": true, 1044 | "dependencies": { 1045 | "@sindresorhus/is": "^0.14.0", 1046 | "@szmarczak/http-timer": "^1.1.2", 1047 | "cacheable-request": "^6.0.0", 1048 | "decompress-response": "^3.3.0", 1049 | "duplexer3": "^0.1.4", 1050 | "get-stream": "^4.1.0", 1051 | "lowercase-keys": "^1.0.1", 1052 | "mimic-response": "^1.0.1", 1053 | "p-cancelable": "^1.0.0", 1054 | "to-readable-stream": "^1.0.0", 1055 | "url-parse-lax": "^3.0.0" 1056 | }, 1057 | "engines": { 1058 | "node": ">=8.6" 1059 | } 1060 | }, 1061 | "node_modules/graceful-fs": { 1062 | "version": "4.2.6", 1063 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 1064 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 1065 | "dev": true 1066 | }, 1067 | "node_modules/has": { 1068 | "version": "1.0.3", 1069 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1070 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1071 | "dev": true, 1072 | "dependencies": { 1073 | "function-bind": "^1.1.1" 1074 | }, 1075 | "engines": { 1076 | "node": ">= 0.4.0" 1077 | } 1078 | }, 1079 | "node_modules/hosted-git-info": { 1080 | "version": "2.8.8", 1081 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 1082 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", 1083 | "dev": true 1084 | }, 1085 | "node_modules/http-cache-semantics": { 1086 | "version": "4.1.0", 1087 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 1088 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 1089 | "dev": true 1090 | }, 1091 | "node_modules/inflight": { 1092 | "version": "1.0.6", 1093 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1094 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1095 | "dev": true, 1096 | "dependencies": { 1097 | "once": "^1.3.0", 1098 | "wrappy": "1" 1099 | } 1100 | }, 1101 | "node_modules/inherits": { 1102 | "version": "2.0.4", 1103 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1104 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1105 | "dev": true 1106 | }, 1107 | "node_modules/ini": { 1108 | "version": "1.3.8", 1109 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1110 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1111 | "dev": true, 1112 | "optional": true 1113 | }, 1114 | "node_modules/is-arrayish": { 1115 | "version": "0.2.1", 1116 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1117 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1118 | "dev": true 1119 | }, 1120 | "node_modules/is-core-module": { 1121 | "version": "2.2.0", 1122 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 1123 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "has": "^1.0.3" 1127 | }, 1128 | "funding": { 1129 | "url": "https://github.com/sponsors/ljharb" 1130 | } 1131 | }, 1132 | "node_modules/is-typedarray": { 1133 | "version": "1.0.0", 1134 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1135 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1136 | }, 1137 | "node_modules/isarray": { 1138 | "version": "1.0.0", 1139 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1140 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1141 | "dev": true 1142 | }, 1143 | "node_modules/isbinaryfile": { 1144 | "version": "3.0.3", 1145 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", 1146 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "buffer-alloc": "^1.2.0" 1150 | }, 1151 | "engines": { 1152 | "node": ">=0.6.0" 1153 | } 1154 | }, 1155 | "node_modules/json-buffer": { 1156 | "version": "3.0.0", 1157 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1158 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1159 | "dev": true 1160 | }, 1161 | "node_modules/json-stringify-safe": { 1162 | "version": "5.0.1", 1163 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1164 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1165 | "dev": true, 1166 | "optional": true 1167 | }, 1168 | "node_modules/jsonfile": { 1169 | "version": "4.0.0", 1170 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1171 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1172 | "dev": true, 1173 | "optionalDependencies": { 1174 | "graceful-fs": "^4.1.6" 1175 | } 1176 | }, 1177 | "node_modules/junk": { 1178 | "version": "3.1.0", 1179 | "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", 1180 | "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", 1181 | "dev": true, 1182 | "engines": { 1183 | "node": ">=8" 1184 | } 1185 | }, 1186 | "node_modules/keyv": { 1187 | "version": "3.1.0", 1188 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1189 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1190 | "dev": true, 1191 | "dependencies": { 1192 | "json-buffer": "3.0.0" 1193 | } 1194 | }, 1195 | "node_modules/load-json-file": { 1196 | "version": "2.0.0", 1197 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 1198 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 1199 | "dev": true, 1200 | "dependencies": { 1201 | "graceful-fs": "^4.1.2", 1202 | "parse-json": "^2.2.0", 1203 | "pify": "^2.0.0", 1204 | "strip-bom": "^3.0.0" 1205 | }, 1206 | "engines": { 1207 | "node": ">=4" 1208 | } 1209 | }, 1210 | "node_modules/load-json-file/node_modules/pify": { 1211 | "version": "2.3.0", 1212 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1213 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1214 | "dev": true, 1215 | "engines": { 1216 | "node": ">=0.10.0" 1217 | } 1218 | }, 1219 | "node_modules/locate-path": { 1220 | "version": "2.0.0", 1221 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 1222 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 1223 | "dev": true, 1224 | "dependencies": { 1225 | "p-locate": "^2.0.0", 1226 | "path-exists": "^3.0.0" 1227 | }, 1228 | "engines": { 1229 | "node": ">=4" 1230 | } 1231 | }, 1232 | "node_modules/lodash": { 1233 | "version": "4.17.21", 1234 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1235 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1236 | }, 1237 | "node_modules/lodash.get": { 1238 | "version": "4.4.2", 1239 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1240 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", 1241 | "dev": true 1242 | }, 1243 | "node_modules/lowercase-keys": { 1244 | "version": "1.0.1", 1245 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1246 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1247 | "dev": true, 1248 | "engines": { 1249 | "node": ">=0.10.0" 1250 | } 1251 | }, 1252 | "node_modules/lru-cache": { 1253 | "version": "6.0.0", 1254 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1255 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1256 | "dev": true, 1257 | "dependencies": { 1258 | "yallist": "^4.0.0" 1259 | }, 1260 | "engines": { 1261 | "node": ">=10" 1262 | } 1263 | }, 1264 | "node_modules/matcher": { 1265 | "version": "3.0.0", 1266 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 1267 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 1268 | "dev": true, 1269 | "optional": true, 1270 | "dependencies": { 1271 | "escape-string-regexp": "^4.0.0" 1272 | }, 1273 | "engines": { 1274 | "node": ">=10" 1275 | } 1276 | }, 1277 | "node_modules/mimic-response": { 1278 | "version": "1.0.1", 1279 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1280 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1281 | "dev": true, 1282 | "engines": { 1283 | "node": ">=4" 1284 | } 1285 | }, 1286 | "node_modules/minimatch": { 1287 | "version": "3.0.4", 1288 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1289 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1290 | "dev": true, 1291 | "dependencies": { 1292 | "brace-expansion": "^1.1.7" 1293 | }, 1294 | "engines": { 1295 | "node": "*" 1296 | } 1297 | }, 1298 | "node_modules/minimist": { 1299 | "version": "1.2.5", 1300 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1301 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1302 | "dev": true 1303 | }, 1304 | "node_modules/mkdirp": { 1305 | "version": "0.5.5", 1306 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1307 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1308 | "dev": true, 1309 | "dependencies": { 1310 | "minimist": "^1.2.5" 1311 | }, 1312 | "bin": { 1313 | "mkdirp": "bin/cmd.js" 1314 | } 1315 | }, 1316 | "node_modules/ms": { 1317 | "version": "2.1.2", 1318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1319 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1320 | "dev": true 1321 | }, 1322 | "node_modules/next-tick": { 1323 | "version": "1.0.0", 1324 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 1325 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 1326 | }, 1327 | "node_modules/nocache": { 1328 | "version": "2.1.0", 1329 | "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", 1330 | "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", 1331 | "engines": { 1332 | "node": ">=4.0.0" 1333 | } 1334 | }, 1335 | "node_modules/node-gyp-build": { 1336 | "version": "4.2.3", 1337 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", 1338 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", 1339 | "bin": { 1340 | "node-gyp-build": "bin.js", 1341 | "node-gyp-build-optional": "optional.js", 1342 | "node-gyp-build-test": "build-test.js" 1343 | } 1344 | }, 1345 | "node_modules/normalize-package-data": { 1346 | "version": "2.5.0", 1347 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1348 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1349 | "dev": true, 1350 | "dependencies": { 1351 | "hosted-git-info": "^2.1.4", 1352 | "resolve": "^1.10.0", 1353 | "semver": "2 || 3 || 4 || 5", 1354 | "validate-npm-package-license": "^3.0.1" 1355 | } 1356 | }, 1357 | "node_modules/normalize-package-data/node_modules/semver": { 1358 | "version": "5.7.1", 1359 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1360 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1361 | "dev": true, 1362 | "bin": { 1363 | "semver": "bin/semver" 1364 | } 1365 | }, 1366 | "node_modules/normalize-url": { 1367 | "version": "4.5.0", 1368 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1369 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1370 | "dev": true, 1371 | "engines": { 1372 | "node": ">=8" 1373 | } 1374 | }, 1375 | "node_modules/npm-conf": { 1376 | "version": "1.1.3", 1377 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 1378 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 1379 | "dev": true, 1380 | "optional": true, 1381 | "dependencies": { 1382 | "config-chain": "^1.1.11", 1383 | "pify": "^3.0.0" 1384 | }, 1385 | "engines": { 1386 | "node": ">=4" 1387 | } 1388 | }, 1389 | "node_modules/object-keys": { 1390 | "version": "1.1.1", 1391 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1392 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1393 | "dev": true, 1394 | "optional": true, 1395 | "engines": { 1396 | "node": ">= 0.4" 1397 | } 1398 | }, 1399 | "node_modules/once": { 1400 | "version": "1.4.0", 1401 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1402 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1403 | "dev": true, 1404 | "dependencies": { 1405 | "wrappy": "1" 1406 | } 1407 | }, 1408 | "node_modules/p-cancelable": { 1409 | "version": "1.1.0", 1410 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1411 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1412 | "dev": true, 1413 | "engines": { 1414 | "node": ">=6" 1415 | } 1416 | }, 1417 | "node_modules/p-limit": { 1418 | "version": "1.3.0", 1419 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 1420 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 1421 | "dev": true, 1422 | "dependencies": { 1423 | "p-try": "^1.0.0" 1424 | }, 1425 | "engines": { 1426 | "node": ">=4" 1427 | } 1428 | }, 1429 | "node_modules/p-locate": { 1430 | "version": "2.0.0", 1431 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1432 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1433 | "dev": true, 1434 | "dependencies": { 1435 | "p-limit": "^1.1.0" 1436 | }, 1437 | "engines": { 1438 | "node": ">=4" 1439 | } 1440 | }, 1441 | "node_modules/p-try": { 1442 | "version": "1.0.0", 1443 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1444 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 1445 | "dev": true, 1446 | "engines": { 1447 | "node": ">=4" 1448 | } 1449 | }, 1450 | "node_modules/parse-author": { 1451 | "version": "2.0.0", 1452 | "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", 1453 | "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", 1454 | "dev": true, 1455 | "dependencies": { 1456 | "author-regex": "^1.0.0" 1457 | }, 1458 | "engines": { 1459 | "node": ">=0.10.0" 1460 | } 1461 | }, 1462 | "node_modules/parse-json": { 1463 | "version": "2.2.0", 1464 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1465 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1466 | "dev": true, 1467 | "dependencies": { 1468 | "error-ex": "^1.2.0" 1469 | }, 1470 | "engines": { 1471 | "node": ">=0.10.0" 1472 | } 1473 | }, 1474 | "node_modules/path-exists": { 1475 | "version": "3.0.0", 1476 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1477 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1478 | "dev": true, 1479 | "engines": { 1480 | "node": ">=4" 1481 | } 1482 | }, 1483 | "node_modules/path-is-absolute": { 1484 | "version": "1.0.1", 1485 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1486 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1487 | "dev": true, 1488 | "engines": { 1489 | "node": ">=0.10.0" 1490 | } 1491 | }, 1492 | "node_modules/path-parse": { 1493 | "version": "1.0.6", 1494 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1495 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1496 | "dev": true 1497 | }, 1498 | "node_modules/path-type": { 1499 | "version": "2.0.0", 1500 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1501 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1502 | "dev": true, 1503 | "dependencies": { 1504 | "pify": "^2.0.0" 1505 | }, 1506 | "engines": { 1507 | "node": ">=4" 1508 | } 1509 | }, 1510 | "node_modules/path-type/node_modules/pify": { 1511 | "version": "2.3.0", 1512 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1513 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1514 | "dev": true, 1515 | "engines": { 1516 | "node": ">=0.10.0" 1517 | } 1518 | }, 1519 | "node_modules/pend": { 1520 | "version": "1.2.0", 1521 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1522 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1523 | "dev": true 1524 | }, 1525 | "node_modules/pify": { 1526 | "version": "3.0.0", 1527 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1528 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1529 | "dev": true, 1530 | "optional": true, 1531 | "engines": { 1532 | "node": ">=4" 1533 | } 1534 | }, 1535 | "node_modules/plist": { 1536 | "version": "3.0.1", 1537 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", 1538 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", 1539 | "dev": true, 1540 | "dependencies": { 1541 | "base64-js": "^1.2.3", 1542 | "xmlbuilder": "^9.0.7", 1543 | "xmldom": "0.1.x" 1544 | }, 1545 | "engines": { 1546 | "node": ">=6" 1547 | } 1548 | }, 1549 | "node_modules/prepend-http": { 1550 | "version": "2.0.0", 1551 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1552 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1553 | "dev": true, 1554 | "engines": { 1555 | "node": ">=4" 1556 | } 1557 | }, 1558 | "node_modules/process-nextick-args": { 1559 | "version": "2.0.1", 1560 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1561 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1562 | "dev": true 1563 | }, 1564 | "node_modules/progress": { 1565 | "version": "2.0.3", 1566 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1567 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1568 | "dev": true, 1569 | "engines": { 1570 | "node": ">=0.4.0" 1571 | } 1572 | }, 1573 | "node_modules/proto-list": { 1574 | "version": "1.2.4", 1575 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1576 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 1577 | "dev": true, 1578 | "optional": true 1579 | }, 1580 | "node_modules/pump": { 1581 | "version": "3.0.0", 1582 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1583 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1584 | "dev": true, 1585 | "dependencies": { 1586 | "end-of-stream": "^1.1.0", 1587 | "once": "^1.3.1" 1588 | } 1589 | }, 1590 | "node_modules/rcedit": { 1591 | "version": "2.3.0", 1592 | "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz", 1593 | "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==", 1594 | "dev": true, 1595 | "engines": { 1596 | "node": ">= 8.0.0" 1597 | } 1598 | }, 1599 | "node_modules/read-pkg": { 1600 | "version": "2.0.0", 1601 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1602 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1603 | "dev": true, 1604 | "dependencies": { 1605 | "load-json-file": "^2.0.0", 1606 | "normalize-package-data": "^2.3.2", 1607 | "path-type": "^2.0.0" 1608 | }, 1609 | "engines": { 1610 | "node": ">=4" 1611 | } 1612 | }, 1613 | "node_modules/read-pkg-up": { 1614 | "version": "2.0.0", 1615 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1616 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1617 | "dev": true, 1618 | "dependencies": { 1619 | "find-up": "^2.0.0", 1620 | "read-pkg": "^2.0.0" 1621 | }, 1622 | "engines": { 1623 | "node": ">=4" 1624 | } 1625 | }, 1626 | "node_modules/readable-stream": { 1627 | "version": "2.3.7", 1628 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1629 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1630 | "dev": true, 1631 | "dependencies": { 1632 | "core-util-is": "~1.0.0", 1633 | "inherits": "~2.0.3", 1634 | "isarray": "~1.0.0", 1635 | "process-nextick-args": "~2.0.0", 1636 | "safe-buffer": "~5.1.1", 1637 | "string_decoder": "~1.1.1", 1638 | "util-deprecate": "~1.0.1" 1639 | } 1640 | }, 1641 | "node_modules/resolve": { 1642 | "version": "1.20.0", 1643 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1644 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1645 | "dev": true, 1646 | "dependencies": { 1647 | "is-core-module": "^2.2.0", 1648 | "path-parse": "^1.0.6" 1649 | }, 1650 | "funding": { 1651 | "url": "https://github.com/sponsors/ljharb" 1652 | } 1653 | }, 1654 | "node_modules/responselike": { 1655 | "version": "1.0.2", 1656 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1657 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1658 | "dev": true, 1659 | "dependencies": { 1660 | "lowercase-keys": "^1.0.0" 1661 | } 1662 | }, 1663 | "node_modules/roarr": { 1664 | "version": "2.15.4", 1665 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 1666 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 1667 | "dev": true, 1668 | "optional": true, 1669 | "dependencies": { 1670 | "boolean": "^3.0.1", 1671 | "detect-node": "^2.0.4", 1672 | "globalthis": "^1.0.1", 1673 | "json-stringify-safe": "^5.0.1", 1674 | "semver-compare": "^1.0.0", 1675 | "sprintf-js": "^1.1.2" 1676 | }, 1677 | "engines": { 1678 | "node": ">=8.0" 1679 | } 1680 | }, 1681 | "node_modules/safe-buffer": { 1682 | "version": "5.1.2", 1683 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1684 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1685 | "dev": true 1686 | }, 1687 | "node_modules/semver": { 1688 | "version": "6.3.0", 1689 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1690 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1691 | "dev": true, 1692 | "bin": { 1693 | "semver": "bin/semver.js" 1694 | } 1695 | }, 1696 | "node_modules/semver-compare": { 1697 | "version": "1.0.0", 1698 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1699 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 1700 | "dev": true, 1701 | "optional": true 1702 | }, 1703 | "node_modules/serialize-error": { 1704 | "version": "7.0.1", 1705 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1706 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1707 | "dev": true, 1708 | "optional": true, 1709 | "dependencies": { 1710 | "type-fest": "^0.13.1" 1711 | }, 1712 | "engines": { 1713 | "node": ">=10" 1714 | }, 1715 | "funding": { 1716 | "url": "https://github.com/sponsors/sindresorhus" 1717 | } 1718 | }, 1719 | "node_modules/spdx-correct": { 1720 | "version": "3.1.1", 1721 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1722 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1723 | "dev": true, 1724 | "dependencies": { 1725 | "spdx-expression-parse": "^3.0.0", 1726 | "spdx-license-ids": "^3.0.0" 1727 | } 1728 | }, 1729 | "node_modules/spdx-exceptions": { 1730 | "version": "2.3.0", 1731 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1732 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1733 | "dev": true 1734 | }, 1735 | "node_modules/spdx-expression-parse": { 1736 | "version": "3.0.1", 1737 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1738 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1739 | "dev": true, 1740 | "dependencies": { 1741 | "spdx-exceptions": "^2.1.0", 1742 | "spdx-license-ids": "^3.0.0" 1743 | } 1744 | }, 1745 | "node_modules/spdx-license-ids": { 1746 | "version": "3.0.7", 1747 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 1748 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", 1749 | "dev": true 1750 | }, 1751 | "node_modules/sprintf-js": { 1752 | "version": "1.1.2", 1753 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1754 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 1755 | "dev": true, 1756 | "optional": true 1757 | }, 1758 | "node_modules/string_decoder": { 1759 | "version": "1.1.1", 1760 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1761 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1762 | "dev": true, 1763 | "dependencies": { 1764 | "safe-buffer": "~5.1.0" 1765 | } 1766 | }, 1767 | "node_modules/strip-bom": { 1768 | "version": "3.0.0", 1769 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1770 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1771 | "dev": true, 1772 | "engines": { 1773 | "node": ">=4" 1774 | } 1775 | }, 1776 | "node_modules/strip-outer": { 1777 | "version": "1.0.1", 1778 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 1779 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 1780 | "dev": true, 1781 | "dependencies": { 1782 | "escape-string-regexp": "^1.0.2" 1783 | }, 1784 | "engines": { 1785 | "node": ">=0.10.0" 1786 | } 1787 | }, 1788 | "node_modules/strip-outer/node_modules/escape-string-regexp": { 1789 | "version": "1.0.5", 1790 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1791 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1792 | "dev": true, 1793 | "engines": { 1794 | "node": ">=0.8.0" 1795 | } 1796 | }, 1797 | "node_modules/sumchecker": { 1798 | "version": "3.0.1", 1799 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 1800 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 1801 | "dev": true, 1802 | "dependencies": { 1803 | "debug": "^4.1.0" 1804 | }, 1805 | "engines": { 1806 | "node": ">= 8.0" 1807 | } 1808 | }, 1809 | "node_modules/to-readable-stream": { 1810 | "version": "1.0.0", 1811 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1812 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1813 | "dev": true, 1814 | "engines": { 1815 | "node": ">=6" 1816 | } 1817 | }, 1818 | "node_modules/trim-repeated": { 1819 | "version": "1.0.0", 1820 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 1821 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 1822 | "dev": true, 1823 | "dependencies": { 1824 | "escape-string-regexp": "^1.0.2" 1825 | }, 1826 | "engines": { 1827 | "node": ">=0.10.0" 1828 | } 1829 | }, 1830 | "node_modules/trim-repeated/node_modules/escape-string-regexp": { 1831 | "version": "1.0.5", 1832 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1833 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1834 | "dev": true, 1835 | "engines": { 1836 | "node": ">=0.8.0" 1837 | } 1838 | }, 1839 | "node_modules/tunnel": { 1840 | "version": "0.0.6", 1841 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1842 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1843 | "dev": true, 1844 | "optional": true, 1845 | "engines": { 1846 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 1847 | } 1848 | }, 1849 | "node_modules/type": { 1850 | "version": "1.2.0", 1851 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 1852 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 1853 | }, 1854 | "node_modules/type-fest": { 1855 | "version": "0.13.1", 1856 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1857 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 1858 | "dev": true, 1859 | "optional": true, 1860 | "engines": { 1861 | "node": ">=10" 1862 | }, 1863 | "funding": { 1864 | "url": "https://github.com/sponsors/sindresorhus" 1865 | } 1866 | }, 1867 | "node_modules/typedarray": { 1868 | "version": "0.0.6", 1869 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1870 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1871 | "dev": true 1872 | }, 1873 | "node_modules/typedarray-to-buffer": { 1874 | "version": "3.1.5", 1875 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 1876 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 1877 | "dependencies": { 1878 | "is-typedarray": "^1.0.0" 1879 | } 1880 | }, 1881 | "node_modules/universalify": { 1882 | "version": "0.1.2", 1883 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1884 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1885 | "dev": true, 1886 | "engines": { 1887 | "node": ">= 4.0.0" 1888 | } 1889 | }, 1890 | "node_modules/url-parse-lax": { 1891 | "version": "3.0.0", 1892 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1893 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 1894 | "dev": true, 1895 | "dependencies": { 1896 | "prepend-http": "^2.0.0" 1897 | }, 1898 | "engines": { 1899 | "node": ">=4" 1900 | } 1901 | }, 1902 | "node_modules/utf-8-validate": { 1903 | "version": "5.0.4", 1904 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz", 1905 | "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==", 1906 | "hasInstallScript": true, 1907 | "dependencies": { 1908 | "node-gyp-build": "^4.2.0" 1909 | } 1910 | }, 1911 | "node_modules/util-deprecate": { 1912 | "version": "1.0.2", 1913 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1914 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1915 | "dev": true 1916 | }, 1917 | "node_modules/validate-npm-package-license": { 1918 | "version": "3.0.4", 1919 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1920 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1921 | "dev": true, 1922 | "dependencies": { 1923 | "spdx-correct": "^3.0.0", 1924 | "spdx-expression-parse": "^3.0.0" 1925 | } 1926 | }, 1927 | "node_modules/vue-observe-visibility": { 1928 | "version": "1.0.0", 1929 | "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-1.0.0.tgz", 1930 | "integrity": "sha512-s5TFh3s3h3Mhd3jaz3zGzkVHKHnc/0C/gNr30olO99+yw2hl3WBhK3ng3/f9OF+qkW4+l7GkmwfAzDAcY3lCFg==" 1931 | }, 1932 | "node_modules/websocket": { 1933 | "version": "1.0.33", 1934 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz", 1935 | "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==", 1936 | "dependencies": { 1937 | "bufferutil": "^4.0.1", 1938 | "debug": "^2.2.0", 1939 | "es5-ext": "^0.10.50", 1940 | "typedarray-to-buffer": "^3.1.5", 1941 | "utf-8-validate": "^5.0.2", 1942 | "yaeti": "^0.0.6" 1943 | }, 1944 | "engines": { 1945 | "node": ">=4.0.0" 1946 | } 1947 | }, 1948 | "node_modules/websocket/node_modules/debug": { 1949 | "version": "2.6.9", 1950 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1951 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1952 | "dependencies": { 1953 | "ms": "2.0.0" 1954 | } 1955 | }, 1956 | "node_modules/websocket/node_modules/ms": { 1957 | "version": "2.0.0", 1958 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1959 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1960 | }, 1961 | "node_modules/wrappy": { 1962 | "version": "1.0.2", 1963 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1964 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1965 | "dev": true 1966 | }, 1967 | "node_modules/xmlbuilder": { 1968 | "version": "9.0.7", 1969 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 1970 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", 1971 | "dev": true, 1972 | "engines": { 1973 | "node": ">=4.0" 1974 | } 1975 | }, 1976 | "node_modules/xmldom": { 1977 | "version": "0.1.31", 1978 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", 1979 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", 1980 | "dev": true, 1981 | "engines": { 1982 | "node": ">=0.1" 1983 | } 1984 | }, 1985 | "node_modules/yaeti": { 1986 | "version": "0.0.6", 1987 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 1988 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", 1989 | "engines": { 1990 | "node": ">=0.10.32" 1991 | } 1992 | }, 1993 | "node_modules/yallist": { 1994 | "version": "4.0.0", 1995 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1996 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1997 | "dev": true 1998 | }, 1999 | "node_modules/yargs-parser": { 2000 | "version": "20.2.5", 2001 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", 2002 | "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", 2003 | "dev": true, 2004 | "engines": { 2005 | "node": ">=10" 2006 | } 2007 | }, 2008 | "node_modules/yauzl": { 2009 | "version": "2.10.0", 2010 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2011 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2012 | "dev": true, 2013 | "dependencies": { 2014 | "buffer-crc32": "~0.2.3", 2015 | "fd-slicer": "~1.1.0" 2016 | } 2017 | } 2018 | }, 2019 | "dependencies": { 2020 | "@electron/get": { 2021 | "version": "1.12.4", 2022 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", 2023 | "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", 2024 | "dev": true, 2025 | "requires": { 2026 | "debug": "^4.1.1", 2027 | "env-paths": "^2.2.0", 2028 | "fs-extra": "^8.1.0", 2029 | "global-agent": "^2.0.2", 2030 | "global-tunnel-ng": "^2.7.1", 2031 | "got": "^9.6.0", 2032 | "progress": "^2.0.3", 2033 | "semver": "^6.2.0", 2034 | "sumchecker": "^3.0.1" 2035 | } 2036 | }, 2037 | "@sindresorhus/is": { 2038 | "version": "0.14.0", 2039 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 2040 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 2041 | "dev": true 2042 | }, 2043 | "@szmarczak/http-timer": { 2044 | "version": "1.1.2", 2045 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 2046 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 2047 | "dev": true, 2048 | "requires": { 2049 | "defer-to-connect": "^1.0.1" 2050 | } 2051 | }, 2052 | "@types/glob": { 2053 | "version": "7.1.3", 2054 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", 2055 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", 2056 | "dev": true, 2057 | "optional": true, 2058 | "requires": { 2059 | "@types/minimatch": "*", 2060 | "@types/node": "*" 2061 | } 2062 | }, 2063 | "@types/minimatch": { 2064 | "version": "3.0.3", 2065 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 2066 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 2067 | "dev": true, 2068 | "optional": true 2069 | }, 2070 | "@types/node": { 2071 | "version": "12.20.0", 2072 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.0.tgz", 2073 | "integrity": "sha512-0/41wHcurotvSOTHQUFkgL702c3pyWR1mToSrrX3pGPvGfpHTv3Ksx0M4UVuU5VJfjVb62Eyr1eKO1tWNUCg2Q==", 2074 | "dev": true 2075 | }, 2076 | "@types/yauzl": { 2077 | "version": "2.9.1", 2078 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", 2079 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", 2080 | "dev": true, 2081 | "optional": true, 2082 | "requires": { 2083 | "@types/node": "*" 2084 | } 2085 | }, 2086 | "asar": { 2087 | "version": "3.0.3", 2088 | "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", 2089 | "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", 2090 | "dev": true, 2091 | "requires": { 2092 | "@types/glob": "^7.1.1", 2093 | "chromium-pickle-js": "^0.2.0", 2094 | "commander": "^5.0.0", 2095 | "glob": "^7.1.6", 2096 | "minimatch": "^3.0.4" 2097 | } 2098 | }, 2099 | "at-least-node": { 2100 | "version": "1.0.0", 2101 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 2102 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 2103 | "dev": true 2104 | }, 2105 | "author-regex": { 2106 | "version": "1.0.0", 2107 | "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", 2108 | "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", 2109 | "dev": true 2110 | }, 2111 | "balanced-match": { 2112 | "version": "1.0.0", 2113 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 2114 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 2115 | "dev": true 2116 | }, 2117 | "base64-js": { 2118 | "version": "1.5.1", 2119 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 2120 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 2121 | "dev": true 2122 | }, 2123 | "bluebird": { 2124 | "version": "3.7.2", 2125 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 2126 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 2127 | "dev": true 2128 | }, 2129 | "boolean": { 2130 | "version": "3.0.2", 2131 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", 2132 | "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", 2133 | "dev": true, 2134 | "optional": true 2135 | }, 2136 | "brace-expansion": { 2137 | "version": "1.1.11", 2138 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2139 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2140 | "dev": true, 2141 | "requires": { 2142 | "balanced-match": "^1.0.0", 2143 | "concat-map": "0.0.1" 2144 | } 2145 | }, 2146 | "buffer-alloc": { 2147 | "version": "1.2.0", 2148 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 2149 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 2150 | "dev": true, 2151 | "requires": { 2152 | "buffer-alloc-unsafe": "^1.1.0", 2153 | "buffer-fill": "^1.0.0" 2154 | } 2155 | }, 2156 | "buffer-alloc-unsafe": { 2157 | "version": "1.1.0", 2158 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 2159 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 2160 | "dev": true 2161 | }, 2162 | "buffer-crc32": { 2163 | "version": "0.2.13", 2164 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 2165 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 2166 | "dev": true 2167 | }, 2168 | "buffer-fill": { 2169 | "version": "1.0.0", 2170 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 2171 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", 2172 | "dev": true 2173 | }, 2174 | "buffer-from": { 2175 | "version": "1.1.1", 2176 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 2177 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 2178 | "dev": true 2179 | }, 2180 | "bufferutil": { 2181 | "version": "4.0.3", 2182 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", 2183 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", 2184 | "requires": { 2185 | "node-gyp-build": "^4.2.0" 2186 | } 2187 | }, 2188 | "cacheable-request": { 2189 | "version": "6.1.0", 2190 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 2191 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 2192 | "dev": true, 2193 | "requires": { 2194 | "clone-response": "^1.0.2", 2195 | "get-stream": "^5.1.0", 2196 | "http-cache-semantics": "^4.0.0", 2197 | "keyv": "^3.0.0", 2198 | "lowercase-keys": "^2.0.0", 2199 | "normalize-url": "^4.1.0", 2200 | "responselike": "^1.0.2" 2201 | }, 2202 | "dependencies": { 2203 | "get-stream": { 2204 | "version": "5.2.0", 2205 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2206 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2207 | "dev": true, 2208 | "requires": { 2209 | "pump": "^3.0.0" 2210 | } 2211 | }, 2212 | "lowercase-keys": { 2213 | "version": "2.0.0", 2214 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 2215 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 2216 | "dev": true 2217 | } 2218 | } 2219 | }, 2220 | "chromium-pickle-js": { 2221 | "version": "0.2.0", 2222 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", 2223 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", 2224 | "dev": true 2225 | }, 2226 | "clone-response": { 2227 | "version": "1.0.2", 2228 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 2229 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 2230 | "dev": true, 2231 | "requires": { 2232 | "mimic-response": "^1.0.0" 2233 | } 2234 | }, 2235 | "commander": { 2236 | "version": "5.1.0", 2237 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 2238 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 2239 | "dev": true 2240 | }, 2241 | "compare-version": { 2242 | "version": "0.1.2", 2243 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", 2244 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", 2245 | "dev": true 2246 | }, 2247 | "concat-map": { 2248 | "version": "0.0.1", 2249 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2250 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2251 | "dev": true 2252 | }, 2253 | "concat-stream": { 2254 | "version": "1.6.2", 2255 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 2256 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 2257 | "dev": true, 2258 | "requires": { 2259 | "buffer-from": "^1.0.0", 2260 | "inherits": "^2.0.3", 2261 | "readable-stream": "^2.2.2", 2262 | "typedarray": "^0.0.6" 2263 | } 2264 | }, 2265 | "config-chain": { 2266 | "version": "1.1.12", 2267 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 2268 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 2269 | "dev": true, 2270 | "optional": true, 2271 | "requires": { 2272 | "ini": "^1.3.4", 2273 | "proto-list": "~1.2.1" 2274 | } 2275 | }, 2276 | "core-js": { 2277 | "version": "3.8.3", 2278 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", 2279 | "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", 2280 | "dev": true, 2281 | "optional": true 2282 | }, 2283 | "core-util-is": { 2284 | "version": "1.0.2", 2285 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 2286 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 2287 | "dev": true 2288 | }, 2289 | "d": { 2290 | "version": "1.0.1", 2291 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 2292 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 2293 | "requires": { 2294 | "es5-ext": "^0.10.50", 2295 | "type": "^1.0.1" 2296 | } 2297 | }, 2298 | "debug": { 2299 | "version": "4.3.1", 2300 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 2301 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 2302 | "dev": true, 2303 | "requires": { 2304 | "ms": "2.1.2" 2305 | } 2306 | }, 2307 | "decompress-response": { 2308 | "version": "3.3.0", 2309 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 2310 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 2311 | "dev": true, 2312 | "requires": { 2313 | "mimic-response": "^1.0.0" 2314 | } 2315 | }, 2316 | "defer-to-connect": { 2317 | "version": "1.1.3", 2318 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 2319 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 2320 | "dev": true 2321 | }, 2322 | "define-properties": { 2323 | "version": "1.1.3", 2324 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 2325 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 2326 | "dev": true, 2327 | "optional": true, 2328 | "requires": { 2329 | "object-keys": "^1.0.12" 2330 | } 2331 | }, 2332 | "detect-node": { 2333 | "version": "2.0.4", 2334 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 2335 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 2336 | "dev": true, 2337 | "optional": true 2338 | }, 2339 | "duplexer3": { 2340 | "version": "0.1.4", 2341 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 2342 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 2343 | "dev": true 2344 | }, 2345 | "electron": { 2346 | "version": "11.2.3", 2347 | "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz", 2348 | "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==", 2349 | "dev": true, 2350 | "requires": { 2351 | "@electron/get": "^1.0.1", 2352 | "@types/node": "^12.0.12", 2353 | "extract-zip": "^1.0.3" 2354 | } 2355 | }, 2356 | "electron-notarize": { 2357 | "version": "1.0.0", 2358 | "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz", 2359 | "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==", 2360 | "dev": true, 2361 | "requires": { 2362 | "debug": "^4.1.1", 2363 | "fs-extra": "^9.0.1" 2364 | }, 2365 | "dependencies": { 2366 | "fs-extra": { 2367 | "version": "9.1.0", 2368 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2369 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2370 | "dev": true, 2371 | "requires": { 2372 | "at-least-node": "^1.0.0", 2373 | "graceful-fs": "^4.2.0", 2374 | "jsonfile": "^6.0.1", 2375 | "universalify": "^2.0.0" 2376 | } 2377 | }, 2378 | "jsonfile": { 2379 | "version": "6.1.0", 2380 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2381 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2382 | "dev": true, 2383 | "requires": { 2384 | "graceful-fs": "^4.1.6", 2385 | "universalify": "^2.0.0" 2386 | } 2387 | }, 2388 | "universalify": { 2389 | "version": "2.0.0", 2390 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2391 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 2392 | "dev": true 2393 | } 2394 | } 2395 | }, 2396 | "electron-osx-sign": { 2397 | "version": "0.5.0", 2398 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz", 2399 | "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==", 2400 | "dev": true, 2401 | "requires": { 2402 | "bluebird": "^3.5.0", 2403 | "compare-version": "^0.1.2", 2404 | "debug": "^2.6.8", 2405 | "isbinaryfile": "^3.0.2", 2406 | "minimist": "^1.2.0", 2407 | "plist": "^3.0.1" 2408 | }, 2409 | "dependencies": { 2410 | "debug": { 2411 | "version": "2.6.9", 2412 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2413 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2414 | "dev": true, 2415 | "requires": { 2416 | "ms": "2.0.0" 2417 | } 2418 | }, 2419 | "ms": { 2420 | "version": "2.0.0", 2421 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2422 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2423 | "dev": true 2424 | } 2425 | } 2426 | }, 2427 | "electron-packager": { 2428 | "version": "15.2.0", 2429 | "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.2.0.tgz", 2430 | "integrity": "sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA==", 2431 | "dev": true, 2432 | "requires": { 2433 | "@electron/get": "^1.6.0", 2434 | "asar": "^3.0.0", 2435 | "debug": "^4.0.1", 2436 | "electron-notarize": "^1.0.0", 2437 | "electron-osx-sign": "^0.5.0", 2438 | "extract-zip": "^2.0.0", 2439 | "filenamify": "^4.1.0", 2440 | "fs-extra": "^9.0.0", 2441 | "galactus": "^0.2.1", 2442 | "get-package-info": "^1.0.0", 2443 | "junk": "^3.1.0", 2444 | "parse-author": "^2.0.0", 2445 | "plist": "^3.0.0", 2446 | "rcedit": "^2.0.0", 2447 | "resolve": "^1.1.6", 2448 | "semver": "^7.1.3", 2449 | "yargs-parser": "^20.0.0" 2450 | }, 2451 | "dependencies": { 2452 | "extract-zip": { 2453 | "version": "2.0.1", 2454 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 2455 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 2456 | "dev": true, 2457 | "requires": { 2458 | "@types/yauzl": "^2.9.1", 2459 | "debug": "^4.1.1", 2460 | "get-stream": "^5.1.0", 2461 | "yauzl": "^2.10.0" 2462 | } 2463 | }, 2464 | "fs-extra": { 2465 | "version": "9.1.0", 2466 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2467 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2468 | "dev": true, 2469 | "requires": { 2470 | "at-least-node": "^1.0.0", 2471 | "graceful-fs": "^4.2.0", 2472 | "jsonfile": "^6.0.1", 2473 | "universalify": "^2.0.0" 2474 | } 2475 | }, 2476 | "get-stream": { 2477 | "version": "5.2.0", 2478 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2479 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2480 | "dev": true, 2481 | "requires": { 2482 | "pump": "^3.0.0" 2483 | } 2484 | }, 2485 | "jsonfile": { 2486 | "version": "6.1.0", 2487 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2488 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2489 | "dev": true, 2490 | "requires": { 2491 | "graceful-fs": "^4.1.6", 2492 | "universalify": "^2.0.0" 2493 | } 2494 | }, 2495 | "semver": { 2496 | "version": "7.3.4", 2497 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 2498 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 2499 | "dev": true, 2500 | "requires": { 2501 | "lru-cache": "^6.0.0" 2502 | } 2503 | }, 2504 | "universalify": { 2505 | "version": "2.0.0", 2506 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2507 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 2508 | "dev": true 2509 | } 2510 | } 2511 | }, 2512 | "encodeurl": { 2513 | "version": "1.0.2", 2514 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2515 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 2516 | "dev": true, 2517 | "optional": true 2518 | }, 2519 | "end-of-stream": { 2520 | "version": "1.4.4", 2521 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 2522 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 2523 | "dev": true, 2524 | "requires": { 2525 | "once": "^1.4.0" 2526 | } 2527 | }, 2528 | "env-paths": { 2529 | "version": "2.2.0", 2530 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 2531 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 2532 | "dev": true 2533 | }, 2534 | "error-ex": { 2535 | "version": "1.3.2", 2536 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 2537 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 2538 | "dev": true, 2539 | "requires": { 2540 | "is-arrayish": "^0.2.1" 2541 | } 2542 | }, 2543 | "es5-ext": { 2544 | "version": "0.10.53", 2545 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 2546 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", 2547 | "requires": { 2548 | "es6-iterator": "~2.0.3", 2549 | "es6-symbol": "~3.1.3", 2550 | "next-tick": "~1.0.0" 2551 | } 2552 | }, 2553 | "es6-error": { 2554 | "version": "4.1.1", 2555 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 2556 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 2557 | "dev": true, 2558 | "optional": true 2559 | }, 2560 | "es6-iterator": { 2561 | "version": "2.0.3", 2562 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 2563 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 2564 | "requires": { 2565 | "d": "1", 2566 | "es5-ext": "^0.10.35", 2567 | "es6-symbol": "^3.1.1" 2568 | } 2569 | }, 2570 | "es6-symbol": { 2571 | "version": "3.1.3", 2572 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 2573 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 2574 | "requires": { 2575 | "d": "^1.0.1", 2576 | "ext": "^1.1.2" 2577 | } 2578 | }, 2579 | "escape-string-regexp": { 2580 | "version": "4.0.0", 2581 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2582 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2583 | "dev": true, 2584 | "optional": true 2585 | }, 2586 | "ext": { 2587 | "version": "1.4.0", 2588 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", 2589 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", 2590 | "requires": { 2591 | "type": "^2.0.0" 2592 | }, 2593 | "dependencies": { 2594 | "type": { 2595 | "version": "2.5.0", 2596 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", 2597 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" 2598 | } 2599 | } 2600 | }, 2601 | "extract-zip": { 2602 | "version": "1.7.0", 2603 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", 2604 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", 2605 | "dev": true, 2606 | "requires": { 2607 | "concat-stream": "^1.6.2", 2608 | "debug": "^2.6.9", 2609 | "mkdirp": "^0.5.4", 2610 | "yauzl": "^2.10.0" 2611 | }, 2612 | "dependencies": { 2613 | "debug": { 2614 | "version": "2.6.9", 2615 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2616 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2617 | "dev": true, 2618 | "requires": { 2619 | "ms": "2.0.0" 2620 | } 2621 | }, 2622 | "ms": { 2623 | "version": "2.0.0", 2624 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2625 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2626 | "dev": true 2627 | } 2628 | } 2629 | }, 2630 | "fd-slicer": { 2631 | "version": "1.1.0", 2632 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 2633 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 2634 | "dev": true, 2635 | "requires": { 2636 | "pend": "~1.2.0" 2637 | } 2638 | }, 2639 | "filename-reserved-regex": { 2640 | "version": "2.0.0", 2641 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 2642 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", 2643 | "dev": true 2644 | }, 2645 | "filenamify": { 2646 | "version": "4.2.0", 2647 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", 2648 | "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", 2649 | "dev": true, 2650 | "requires": { 2651 | "filename-reserved-regex": "^2.0.0", 2652 | "strip-outer": "^1.0.1", 2653 | "trim-repeated": "^1.0.0" 2654 | } 2655 | }, 2656 | "find-up": { 2657 | "version": "2.1.0", 2658 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 2659 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 2660 | "dev": true, 2661 | "requires": { 2662 | "locate-path": "^2.0.0" 2663 | } 2664 | }, 2665 | "flora-colossus": { 2666 | "version": "1.0.1", 2667 | "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz", 2668 | "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==", 2669 | "dev": true, 2670 | "requires": { 2671 | "debug": "^4.1.1", 2672 | "fs-extra": "^7.0.0" 2673 | }, 2674 | "dependencies": { 2675 | "fs-extra": { 2676 | "version": "7.0.1", 2677 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 2678 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 2679 | "dev": true, 2680 | "requires": { 2681 | "graceful-fs": "^4.1.2", 2682 | "jsonfile": "^4.0.0", 2683 | "universalify": "^0.1.0" 2684 | } 2685 | } 2686 | } 2687 | }, 2688 | "fs-extra": { 2689 | "version": "8.1.0", 2690 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 2691 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 2692 | "dev": true, 2693 | "requires": { 2694 | "graceful-fs": "^4.2.0", 2695 | "jsonfile": "^4.0.0", 2696 | "universalify": "^0.1.0" 2697 | } 2698 | }, 2699 | "fs.realpath": { 2700 | "version": "1.0.0", 2701 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2702 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2703 | "dev": true 2704 | }, 2705 | "function-bind": { 2706 | "version": "1.1.1", 2707 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2708 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2709 | "dev": true 2710 | }, 2711 | "galactus": { 2712 | "version": "0.2.1", 2713 | "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz", 2714 | "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=", 2715 | "dev": true, 2716 | "requires": { 2717 | "debug": "^3.1.0", 2718 | "flora-colossus": "^1.0.0", 2719 | "fs-extra": "^4.0.0" 2720 | }, 2721 | "dependencies": { 2722 | "debug": { 2723 | "version": "3.2.7", 2724 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2725 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2726 | "dev": true, 2727 | "requires": { 2728 | "ms": "^2.1.1" 2729 | } 2730 | }, 2731 | "fs-extra": { 2732 | "version": "4.0.3", 2733 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 2734 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 2735 | "dev": true, 2736 | "requires": { 2737 | "graceful-fs": "^4.1.2", 2738 | "jsonfile": "^4.0.0", 2739 | "universalify": "^0.1.0" 2740 | } 2741 | } 2742 | } 2743 | }, 2744 | "get-package-info": { 2745 | "version": "1.0.0", 2746 | "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz", 2747 | "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=", 2748 | "dev": true, 2749 | "requires": { 2750 | "bluebird": "^3.1.1", 2751 | "debug": "^2.2.0", 2752 | "lodash.get": "^4.0.0", 2753 | "read-pkg-up": "^2.0.0" 2754 | }, 2755 | "dependencies": { 2756 | "debug": { 2757 | "version": "2.6.9", 2758 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2759 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2760 | "dev": true, 2761 | "requires": { 2762 | "ms": "2.0.0" 2763 | } 2764 | }, 2765 | "ms": { 2766 | "version": "2.0.0", 2767 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2768 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2769 | "dev": true 2770 | } 2771 | } 2772 | }, 2773 | "get-stream": { 2774 | "version": "4.1.0", 2775 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 2776 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 2777 | "dev": true, 2778 | "requires": { 2779 | "pump": "^3.0.0" 2780 | } 2781 | }, 2782 | "glob": { 2783 | "version": "7.1.6", 2784 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 2785 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 2786 | "dev": true, 2787 | "requires": { 2788 | "fs.realpath": "^1.0.0", 2789 | "inflight": "^1.0.4", 2790 | "inherits": "2", 2791 | "minimatch": "^3.0.4", 2792 | "once": "^1.3.0", 2793 | "path-is-absolute": "^1.0.0" 2794 | } 2795 | }, 2796 | "global-agent": { 2797 | "version": "2.1.12", 2798 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", 2799 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", 2800 | "dev": true, 2801 | "optional": true, 2802 | "requires": { 2803 | "boolean": "^3.0.1", 2804 | "core-js": "^3.6.5", 2805 | "es6-error": "^4.1.1", 2806 | "matcher": "^3.0.0", 2807 | "roarr": "^2.15.3", 2808 | "semver": "^7.3.2", 2809 | "serialize-error": "^7.0.1" 2810 | }, 2811 | "dependencies": { 2812 | "semver": { 2813 | "version": "7.3.4", 2814 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 2815 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 2816 | "dev": true, 2817 | "optional": true, 2818 | "requires": { 2819 | "lru-cache": "^6.0.0" 2820 | } 2821 | } 2822 | } 2823 | }, 2824 | "global-tunnel-ng": { 2825 | "version": "2.7.1", 2826 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 2827 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 2828 | "dev": true, 2829 | "optional": true, 2830 | "requires": { 2831 | "encodeurl": "^1.0.2", 2832 | "lodash": "^4.17.10", 2833 | "npm-conf": "^1.1.3", 2834 | "tunnel": "^0.0.6" 2835 | } 2836 | }, 2837 | "globalthis": { 2838 | "version": "1.0.1", 2839 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", 2840 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", 2841 | "dev": true, 2842 | "optional": true, 2843 | "requires": { 2844 | "define-properties": "^1.1.3" 2845 | } 2846 | }, 2847 | "got": { 2848 | "version": "9.6.0", 2849 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 2850 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 2851 | "dev": true, 2852 | "requires": { 2853 | "@sindresorhus/is": "^0.14.0", 2854 | "@szmarczak/http-timer": "^1.1.2", 2855 | "cacheable-request": "^6.0.0", 2856 | "decompress-response": "^3.3.0", 2857 | "duplexer3": "^0.1.4", 2858 | "get-stream": "^4.1.0", 2859 | "lowercase-keys": "^1.0.1", 2860 | "mimic-response": "^1.0.1", 2861 | "p-cancelable": "^1.0.0", 2862 | "to-readable-stream": "^1.0.0", 2863 | "url-parse-lax": "^3.0.0" 2864 | } 2865 | }, 2866 | "graceful-fs": { 2867 | "version": "4.2.6", 2868 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 2869 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 2870 | "dev": true 2871 | }, 2872 | "has": { 2873 | "version": "1.0.3", 2874 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2875 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2876 | "dev": true, 2877 | "requires": { 2878 | "function-bind": "^1.1.1" 2879 | } 2880 | }, 2881 | "hosted-git-info": { 2882 | "version": "2.8.8", 2883 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 2884 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", 2885 | "dev": true 2886 | }, 2887 | "http-cache-semantics": { 2888 | "version": "4.1.0", 2889 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 2890 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 2891 | "dev": true 2892 | }, 2893 | "inflight": { 2894 | "version": "1.0.6", 2895 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2896 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2897 | "dev": true, 2898 | "requires": { 2899 | "once": "^1.3.0", 2900 | "wrappy": "1" 2901 | } 2902 | }, 2903 | "inherits": { 2904 | "version": "2.0.4", 2905 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2906 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2907 | "dev": true 2908 | }, 2909 | "ini": { 2910 | "version": "1.3.8", 2911 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2912 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 2913 | "dev": true, 2914 | "optional": true 2915 | }, 2916 | "is-arrayish": { 2917 | "version": "0.2.1", 2918 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2919 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 2920 | "dev": true 2921 | }, 2922 | "is-core-module": { 2923 | "version": "2.2.0", 2924 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 2925 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 2926 | "dev": true, 2927 | "requires": { 2928 | "has": "^1.0.3" 2929 | } 2930 | }, 2931 | "is-typedarray": { 2932 | "version": "1.0.0", 2933 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2934 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 2935 | }, 2936 | "isarray": { 2937 | "version": "1.0.0", 2938 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2939 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2940 | "dev": true 2941 | }, 2942 | "isbinaryfile": { 2943 | "version": "3.0.3", 2944 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", 2945 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", 2946 | "dev": true, 2947 | "requires": { 2948 | "buffer-alloc": "^1.2.0" 2949 | } 2950 | }, 2951 | "json-buffer": { 2952 | "version": "3.0.0", 2953 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 2954 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 2955 | "dev": true 2956 | }, 2957 | "json-stringify-safe": { 2958 | "version": "5.0.1", 2959 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2960 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 2961 | "dev": true, 2962 | "optional": true 2963 | }, 2964 | "jsonfile": { 2965 | "version": "4.0.0", 2966 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 2967 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 2968 | "dev": true, 2969 | "requires": { 2970 | "graceful-fs": "^4.1.6" 2971 | } 2972 | }, 2973 | "junk": { 2974 | "version": "3.1.0", 2975 | "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", 2976 | "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", 2977 | "dev": true 2978 | }, 2979 | "keyv": { 2980 | "version": "3.1.0", 2981 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 2982 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 2983 | "dev": true, 2984 | "requires": { 2985 | "json-buffer": "3.0.0" 2986 | } 2987 | }, 2988 | "load-json-file": { 2989 | "version": "2.0.0", 2990 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 2991 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 2992 | "dev": true, 2993 | "requires": { 2994 | "graceful-fs": "^4.1.2", 2995 | "parse-json": "^2.2.0", 2996 | "pify": "^2.0.0", 2997 | "strip-bom": "^3.0.0" 2998 | }, 2999 | "dependencies": { 3000 | "pify": { 3001 | "version": "2.3.0", 3002 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 3003 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 3004 | "dev": true 3005 | } 3006 | } 3007 | }, 3008 | "locate-path": { 3009 | "version": "2.0.0", 3010 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 3011 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 3012 | "dev": true, 3013 | "requires": { 3014 | "p-locate": "^2.0.0", 3015 | "path-exists": "^3.0.0" 3016 | } 3017 | }, 3018 | "lodash": { 3019 | "version": "4.17.21", 3020 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 3021 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 3022 | }, 3023 | "lodash.get": { 3024 | "version": "4.4.2", 3025 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 3026 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", 3027 | "dev": true 3028 | }, 3029 | "lowercase-keys": { 3030 | "version": "1.0.1", 3031 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 3032 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 3033 | "dev": true 3034 | }, 3035 | "lru-cache": { 3036 | "version": "6.0.0", 3037 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3038 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3039 | "dev": true, 3040 | "requires": { 3041 | "yallist": "^4.0.0" 3042 | } 3043 | }, 3044 | "matcher": { 3045 | "version": "3.0.0", 3046 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 3047 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 3048 | "dev": true, 3049 | "optional": true, 3050 | "requires": { 3051 | "escape-string-regexp": "^4.0.0" 3052 | } 3053 | }, 3054 | "mimic-response": { 3055 | "version": "1.0.1", 3056 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 3057 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 3058 | "dev": true 3059 | }, 3060 | "minimatch": { 3061 | "version": "3.0.4", 3062 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 3063 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 3064 | "dev": true, 3065 | "requires": { 3066 | "brace-expansion": "^1.1.7" 3067 | } 3068 | }, 3069 | "minimist": { 3070 | "version": "1.2.5", 3071 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 3072 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 3073 | "dev": true 3074 | }, 3075 | "mkdirp": { 3076 | "version": "0.5.5", 3077 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 3078 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 3079 | "dev": true, 3080 | "requires": { 3081 | "minimist": "^1.2.5" 3082 | } 3083 | }, 3084 | "ms": { 3085 | "version": "2.1.2", 3086 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3087 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3088 | "dev": true 3089 | }, 3090 | "next-tick": { 3091 | "version": "1.0.0", 3092 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 3093 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 3094 | }, 3095 | "nocache": { 3096 | "version": "2.1.0", 3097 | "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", 3098 | "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" 3099 | }, 3100 | "node-gyp-build": { 3101 | "version": "4.2.3", 3102 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", 3103 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" 3104 | }, 3105 | "normalize-package-data": { 3106 | "version": "2.5.0", 3107 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 3108 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 3109 | "dev": true, 3110 | "requires": { 3111 | "hosted-git-info": "^2.1.4", 3112 | "resolve": "^1.10.0", 3113 | "semver": "2 || 3 || 4 || 5", 3114 | "validate-npm-package-license": "^3.0.1" 3115 | }, 3116 | "dependencies": { 3117 | "semver": { 3118 | "version": "5.7.1", 3119 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 3120 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 3121 | "dev": true 3122 | } 3123 | } 3124 | }, 3125 | "normalize-url": { 3126 | "version": "4.5.0", 3127 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 3128 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 3129 | "dev": true 3130 | }, 3131 | "npm-conf": { 3132 | "version": "1.1.3", 3133 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 3134 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 3135 | "dev": true, 3136 | "optional": true, 3137 | "requires": { 3138 | "config-chain": "^1.1.11", 3139 | "pify": "^3.0.0" 3140 | } 3141 | }, 3142 | "object-keys": { 3143 | "version": "1.1.1", 3144 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 3145 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 3146 | "dev": true, 3147 | "optional": true 3148 | }, 3149 | "once": { 3150 | "version": "1.4.0", 3151 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3152 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3153 | "dev": true, 3154 | "requires": { 3155 | "wrappy": "1" 3156 | } 3157 | }, 3158 | "p-cancelable": { 3159 | "version": "1.1.0", 3160 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 3161 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 3162 | "dev": true 3163 | }, 3164 | "p-limit": { 3165 | "version": "1.3.0", 3166 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 3167 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 3168 | "dev": true, 3169 | "requires": { 3170 | "p-try": "^1.0.0" 3171 | } 3172 | }, 3173 | "p-locate": { 3174 | "version": "2.0.0", 3175 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 3176 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 3177 | "dev": true, 3178 | "requires": { 3179 | "p-limit": "^1.1.0" 3180 | } 3181 | }, 3182 | "p-try": { 3183 | "version": "1.0.0", 3184 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 3185 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 3186 | "dev": true 3187 | }, 3188 | "parse-author": { 3189 | "version": "2.0.0", 3190 | "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", 3191 | "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", 3192 | "dev": true, 3193 | "requires": { 3194 | "author-regex": "^1.0.0" 3195 | } 3196 | }, 3197 | "parse-json": { 3198 | "version": "2.2.0", 3199 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 3200 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 3201 | "dev": true, 3202 | "requires": { 3203 | "error-ex": "^1.2.0" 3204 | } 3205 | }, 3206 | "path-exists": { 3207 | "version": "3.0.0", 3208 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 3209 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 3210 | "dev": true 3211 | }, 3212 | "path-is-absolute": { 3213 | "version": "1.0.1", 3214 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3215 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3216 | "dev": true 3217 | }, 3218 | "path-parse": { 3219 | "version": "1.0.6", 3220 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 3221 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 3222 | "dev": true 3223 | }, 3224 | "path-type": { 3225 | "version": "2.0.0", 3226 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 3227 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 3228 | "dev": true, 3229 | "requires": { 3230 | "pify": "^2.0.0" 3231 | }, 3232 | "dependencies": { 3233 | "pify": { 3234 | "version": "2.3.0", 3235 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 3236 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 3237 | "dev": true 3238 | } 3239 | } 3240 | }, 3241 | "pend": { 3242 | "version": "1.2.0", 3243 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 3244 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 3245 | "dev": true 3246 | }, 3247 | "pify": { 3248 | "version": "3.0.0", 3249 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 3250 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 3251 | "dev": true, 3252 | "optional": true 3253 | }, 3254 | "plist": { 3255 | "version": "3.0.1", 3256 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", 3257 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", 3258 | "dev": true, 3259 | "requires": { 3260 | "base64-js": "^1.2.3", 3261 | "xmlbuilder": "^9.0.7", 3262 | "xmldom": "0.1.x" 3263 | } 3264 | }, 3265 | "prepend-http": { 3266 | "version": "2.0.0", 3267 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 3268 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 3269 | "dev": true 3270 | }, 3271 | "process-nextick-args": { 3272 | "version": "2.0.1", 3273 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 3274 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 3275 | "dev": true 3276 | }, 3277 | "progress": { 3278 | "version": "2.0.3", 3279 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 3280 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 3281 | "dev": true 3282 | }, 3283 | "proto-list": { 3284 | "version": "1.2.4", 3285 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 3286 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 3287 | "dev": true, 3288 | "optional": true 3289 | }, 3290 | "pump": { 3291 | "version": "3.0.0", 3292 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 3293 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 3294 | "dev": true, 3295 | "requires": { 3296 | "end-of-stream": "^1.1.0", 3297 | "once": "^1.3.1" 3298 | } 3299 | }, 3300 | "rcedit": { 3301 | "version": "2.3.0", 3302 | "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz", 3303 | "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==", 3304 | "dev": true 3305 | }, 3306 | "read-pkg": { 3307 | "version": "2.0.0", 3308 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 3309 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 3310 | "dev": true, 3311 | "requires": { 3312 | "load-json-file": "^2.0.0", 3313 | "normalize-package-data": "^2.3.2", 3314 | "path-type": "^2.0.0" 3315 | } 3316 | }, 3317 | "read-pkg-up": { 3318 | "version": "2.0.0", 3319 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 3320 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 3321 | "dev": true, 3322 | "requires": { 3323 | "find-up": "^2.0.0", 3324 | "read-pkg": "^2.0.0" 3325 | } 3326 | }, 3327 | "readable-stream": { 3328 | "version": "2.3.7", 3329 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 3330 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 3331 | "dev": true, 3332 | "requires": { 3333 | "core-util-is": "~1.0.0", 3334 | "inherits": "~2.0.3", 3335 | "isarray": "~1.0.0", 3336 | "process-nextick-args": "~2.0.0", 3337 | "safe-buffer": "~5.1.1", 3338 | "string_decoder": "~1.1.1", 3339 | "util-deprecate": "~1.0.1" 3340 | } 3341 | }, 3342 | "resolve": { 3343 | "version": "1.20.0", 3344 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 3345 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 3346 | "dev": true, 3347 | "requires": { 3348 | "is-core-module": "^2.2.0", 3349 | "path-parse": "^1.0.6" 3350 | } 3351 | }, 3352 | "responselike": { 3353 | "version": "1.0.2", 3354 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 3355 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 3356 | "dev": true, 3357 | "requires": { 3358 | "lowercase-keys": "^1.0.0" 3359 | } 3360 | }, 3361 | "roarr": { 3362 | "version": "2.15.4", 3363 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 3364 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 3365 | "dev": true, 3366 | "optional": true, 3367 | "requires": { 3368 | "boolean": "^3.0.1", 3369 | "detect-node": "^2.0.4", 3370 | "globalthis": "^1.0.1", 3371 | "json-stringify-safe": "^5.0.1", 3372 | "semver-compare": "^1.0.0", 3373 | "sprintf-js": "^1.1.2" 3374 | } 3375 | }, 3376 | "safe-buffer": { 3377 | "version": "5.1.2", 3378 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3379 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 3380 | "dev": true 3381 | }, 3382 | "semver": { 3383 | "version": "6.3.0", 3384 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 3385 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 3386 | "dev": true 3387 | }, 3388 | "semver-compare": { 3389 | "version": "1.0.0", 3390 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 3391 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 3392 | "dev": true, 3393 | "optional": true 3394 | }, 3395 | "serialize-error": { 3396 | "version": "7.0.1", 3397 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 3398 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 3399 | "dev": true, 3400 | "optional": true, 3401 | "requires": { 3402 | "type-fest": "^0.13.1" 3403 | } 3404 | }, 3405 | "spdx-correct": { 3406 | "version": "3.1.1", 3407 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 3408 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 3409 | "dev": true, 3410 | "requires": { 3411 | "spdx-expression-parse": "^3.0.0", 3412 | "spdx-license-ids": "^3.0.0" 3413 | } 3414 | }, 3415 | "spdx-exceptions": { 3416 | "version": "2.3.0", 3417 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 3418 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 3419 | "dev": true 3420 | }, 3421 | "spdx-expression-parse": { 3422 | "version": "3.0.1", 3423 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 3424 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 3425 | "dev": true, 3426 | "requires": { 3427 | "spdx-exceptions": "^2.1.0", 3428 | "spdx-license-ids": "^3.0.0" 3429 | } 3430 | }, 3431 | "spdx-license-ids": { 3432 | "version": "3.0.7", 3433 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 3434 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", 3435 | "dev": true 3436 | }, 3437 | "sprintf-js": { 3438 | "version": "1.1.2", 3439 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 3440 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 3441 | "dev": true, 3442 | "optional": true 3443 | }, 3444 | "string_decoder": { 3445 | "version": "1.1.1", 3446 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3447 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 3448 | "dev": true, 3449 | "requires": { 3450 | "safe-buffer": "~5.1.0" 3451 | } 3452 | }, 3453 | "strip-bom": { 3454 | "version": "3.0.0", 3455 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 3456 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 3457 | "dev": true 3458 | }, 3459 | "strip-outer": { 3460 | "version": "1.0.1", 3461 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 3462 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 3463 | "dev": true, 3464 | "requires": { 3465 | "escape-string-regexp": "^1.0.2" 3466 | }, 3467 | "dependencies": { 3468 | "escape-string-regexp": { 3469 | "version": "1.0.5", 3470 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 3471 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 3472 | "dev": true 3473 | } 3474 | } 3475 | }, 3476 | "sumchecker": { 3477 | "version": "3.0.1", 3478 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 3479 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 3480 | "dev": true, 3481 | "requires": { 3482 | "debug": "^4.1.0" 3483 | } 3484 | }, 3485 | "to-readable-stream": { 3486 | "version": "1.0.0", 3487 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 3488 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 3489 | "dev": true 3490 | }, 3491 | "trim-repeated": { 3492 | "version": "1.0.0", 3493 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 3494 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 3495 | "dev": true, 3496 | "requires": { 3497 | "escape-string-regexp": "^1.0.2" 3498 | }, 3499 | "dependencies": { 3500 | "escape-string-regexp": { 3501 | "version": "1.0.5", 3502 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 3503 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 3504 | "dev": true 3505 | } 3506 | } 3507 | }, 3508 | "tunnel": { 3509 | "version": "0.0.6", 3510 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 3511 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 3512 | "dev": true, 3513 | "optional": true 3514 | }, 3515 | "type": { 3516 | "version": "1.2.0", 3517 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 3518 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 3519 | }, 3520 | "type-fest": { 3521 | "version": "0.13.1", 3522 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 3523 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 3524 | "dev": true, 3525 | "optional": true 3526 | }, 3527 | "typedarray": { 3528 | "version": "0.0.6", 3529 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3530 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3531 | "dev": true 3532 | }, 3533 | "typedarray-to-buffer": { 3534 | "version": "3.1.5", 3535 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 3536 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 3537 | "requires": { 3538 | "is-typedarray": "^1.0.0" 3539 | } 3540 | }, 3541 | "universalify": { 3542 | "version": "0.1.2", 3543 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 3544 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 3545 | "dev": true 3546 | }, 3547 | "url-parse-lax": { 3548 | "version": "3.0.0", 3549 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 3550 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 3551 | "dev": true, 3552 | "requires": { 3553 | "prepend-http": "^2.0.0" 3554 | } 3555 | }, 3556 | "utf-8-validate": { 3557 | "version": "5.0.4", 3558 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz", 3559 | "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==", 3560 | "requires": { 3561 | "node-gyp-build": "^4.2.0" 3562 | } 3563 | }, 3564 | "util-deprecate": { 3565 | "version": "1.0.2", 3566 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3567 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3568 | "dev": true 3569 | }, 3570 | "validate-npm-package-license": { 3571 | "version": "3.0.4", 3572 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 3573 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 3574 | "dev": true, 3575 | "requires": { 3576 | "spdx-correct": "^3.0.0", 3577 | "spdx-expression-parse": "^3.0.0" 3578 | } 3579 | }, 3580 | "vue-observe-visibility": { 3581 | "version": "1.0.0", 3582 | "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-1.0.0.tgz", 3583 | "integrity": "sha512-s5TFh3s3h3Mhd3jaz3zGzkVHKHnc/0C/gNr30olO99+yw2hl3WBhK3ng3/f9OF+qkW4+l7GkmwfAzDAcY3lCFg==" 3584 | }, 3585 | "websocket": { 3586 | "version": "1.0.33", 3587 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz", 3588 | "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==", 3589 | "requires": { 3590 | "bufferutil": "^4.0.1", 3591 | "debug": "^2.2.0", 3592 | "es5-ext": "^0.10.50", 3593 | "typedarray-to-buffer": "^3.1.5", 3594 | "utf-8-validate": "^5.0.2", 3595 | "yaeti": "^0.0.6" 3596 | }, 3597 | "dependencies": { 3598 | "debug": { 3599 | "version": "2.6.9", 3600 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 3601 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 3602 | "requires": { 3603 | "ms": "2.0.0" 3604 | } 3605 | }, 3606 | "ms": { 3607 | "version": "2.0.0", 3608 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3609 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 3610 | } 3611 | } 3612 | }, 3613 | "wrappy": { 3614 | "version": "1.0.2", 3615 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3616 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3617 | "dev": true 3618 | }, 3619 | "xmlbuilder": { 3620 | "version": "9.0.7", 3621 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 3622 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", 3623 | "dev": true 3624 | }, 3625 | "xmldom": { 3626 | "version": "0.1.31", 3627 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", 3628 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", 3629 | "dev": true 3630 | }, 3631 | "yaeti": { 3632 | "version": "0.0.6", 3633 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 3634 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" 3635 | }, 3636 | "yallist": { 3637 | "version": "4.0.0", 3638 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3639 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3640 | "dev": true 3641 | }, 3642 | "yargs-parser": { 3643 | "version": "20.2.5", 3644 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", 3645 | "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", 3646 | "dev": true 3647 | }, 3648 | "yauzl": { 3649 | "version": "2.10.0", 3650 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 3651 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 3652 | "dev": true, 3653 | "requires": { 3654 | "buffer-crc32": "~0.2.3", 3655 | "fd-slicer": "~1.1.0" 3656 | } 3657 | } 3658 | } 3659 | } 3660 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "heappy", 3 | "version": "0.1.0", 4 | "author": "gand3lf", 5 | "description": "Heappy: an heap editor", 6 | "main": "launch.js", 7 | "scripts": { 8 | "start": "electron --no-sandbox ." 9 | }, 10 | "devDependencies": { 11 | "electron": "^11.2.3", 12 | "electron-packager": "^15.2.0" 13 | }, 14 | "dependencies": { 15 | "lodash": "^4.17.21", 16 | "nocache": "^2.1.0", 17 | "websocket": "^1.0.33" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /server/heappy.py: -------------------------------------------------------------------------------- 1 | import gdb 2 | from websock import WebSocketServer 3 | import re 4 | import threading 5 | from collections import OrderedDict 6 | 7 | GEF_PROMPT = "gef\u27a4 " 8 | GEF_PROMPT_ON = "\001\033[1;32m\002{0:s}\001\033[0m\002".format(GEF_PROMPT) 9 | GEF_PROMPT_OFF = "\001\033[1;31m\002{0:s}\001\033[0m\002".format(GEF_PROMPT) 10 | 11 | class Heap(): 12 | def __init__(self, pid): 13 | self.pid = pid 14 | vmmap = gdb.execute("vmmap", True, True).split("\n")[1:] 15 | heap_map = list(filter(lambda x: ("[heap]" in x), vmmap)) 16 | tmp = [int(re.sub(r"\x1b\[\d*m", "", x),16) for x in heap_map[0].split(" ")[0:2]] 17 | self.bot, self.top = tmp[0], tmp[1] 18 | self.__read() 19 | self.data = self.__read() 20 | def __read(self): 21 | infer = gdb.inferiors()[0] 22 | data = infer.read_memory(self.bot, self.top - self.bot) 23 | return data 24 | def toDic(self): 25 | d = {} 26 | d["bot"] = self.bot 27 | d["top"] = self.top 28 | d["data"] = OrderedDict() 29 | for i in range(0, len(self.data), 8): 30 | entry = self.data[i:i+8] 31 | val = int.from_bytes(entry, byteorder='little') 32 | if val!=0: 33 | d["data"][i+self.bot] = str(val) 34 | return d 35 | def toChunkDic(self, onlyFreeChunks = False): 36 | d = {"bins":{}, "chunks":{} } 37 | addr_r = r"(?<=addr=)0x.+?(?=,)" 38 | for t in ["fast", "large", "small", "tcache", "unsorted"]: 39 | raw_string = gdb.execute("heap bins "+t, True, True) 40 | matches = re.findall(addr_r, raw_string) 41 | d["bins"][t] = [int(x,16) for x in matches] 42 | 43 | if(onlyFreeChunks == False): 44 | raw_string = gdb.execute("heap chunks", True, True) 45 | matches = re.findall(addr_r, raw_string) 46 | d["chunks"] = [int(x,16) for x in matches] 47 | else: 48 | d["chunks"] = [] 49 | for t in d["bins"]: 50 | d["chunks"] += [k for k in d["bins"][t]] 51 | dd = {} 52 | for addr in d["chunks"]: 53 | dd[addr] = "allocated" 54 | for key in d["bins"]: 55 | if addr in d["bins"][key]: 56 | dd[addr] = key 57 | return dd 58 | def __str__(self): 59 | return str(self.pid) 60 | 61 | class Snapper(): 62 | def __init__(self, ws, client, type_): 63 | self.ws = ws 64 | self.client = client 65 | self.type = type_ 66 | def __call__(self): 67 | h = Heap(gdb.selected_inferior().pid) 68 | if(self.type == "heap"): 69 | heap_snap = h.toDic() 70 | msg = {"type":"heap","data":heap_snap} 71 | self.ws.send(self.client, json.dumps(msg)) 72 | elif(self.type == "chunks"): 73 | chunk_snap = h.toChunkDic() 74 | msg = {"type":"chunks","data":chunk_snap} 75 | self.ws.send(self.client, json.dumps(msg)) 76 | elif(self.type == "total"): 77 | heap_snap = h.toDic() 78 | chunk_snap = h.toChunkDic() 79 | msg = {"type":"total","heap":heap_snap,"chunks":chunk_snap} 80 | self.ws.send(self.client, json.dumps(msg)) 81 | 82 | class Writer(): 83 | def __init__(self, address, value): 84 | self.address = address 85 | self.value = value 86 | def __call__(self): 87 | gdb.execute("set {int*}0x" + self.address + " = 0x"+ self.value) 88 | log("Write " + self.value + " at address " + self.address) 89 | 90 | def log(message): 91 | gdb.write(message+"\n"+GEF_PROMPT_ON) 92 | gdb.execute("echo") 93 | 94 | def on_data_receive(client, data): 95 | global client_gui 96 | client_gui = client 97 | log("log:"+data) 98 | json_data = json.loads(data) 99 | if(json_data["method"] == "update"): 100 | addr = json_data["data"]["address"] 101 | val = json_data["data"]["value"] 102 | gdb.post_event(Writer(addr, val)) 103 | elif(json_data["method"] == "snap_heap"): 104 | gdb.post_event(Snapper(my_server, client, "heap")) 105 | elif(json_data["method"] == "snap_chunks"): 106 | gdb.post_event(Snapper(my_server, client, "chunks")) 107 | elif(json_data["method"] == "snap"): 108 | gdb.post_event(Snapper(my_server, client, "total")) 109 | 110 | my_server = WebSocketServer( 111 | "127.0.0.1", # host. 112 | 9884, # port. 113 | on_data_receive = on_data_receive 114 | ) 115 | 116 | client_gui = None 117 | 118 | # Update gui at each stop in gdb 119 | def stop_handler (event): 120 | if(client_gui == None): 121 | return 122 | gdb.post_event(Snapper(my_server, client_gui, "total")) 123 | print("event type: stop") 124 | 125 | gdb.events.stop.connect (stop_handler) 126 | 127 | def start_server(): 128 | my_server.serve_forever() 129 | 130 | t = threading.Thread(target = start_server) 131 | t.daemon = True 132 | t.start() 133 | --------------------------------------------------------------------------------