python script to turn stepper motors #2
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,2 +1 @@
 | 
				
			|||||||
node_modules
 | 
					node_modules
 | 
				
			||||||
dist
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								dist/Vision/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								dist/Vision/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <title>Cat Cannon</title>
 | 
				
			||||||
 | 
					    <link rel="stylesheet" href="styles.css">
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  <script src="main.js" defer></script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										3
									
								
								dist/Vision/main.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								dist/Vision/main.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										149
									
								
								dist/Vision/main.js.LICENSE.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								dist/Vision/main.js.LICENSE.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,149 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2017 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2018 Google LLC
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Use of this source code is governed by an MIT-style
 | 
				
			||||||
 | 
					 * license that can be found in the LICENSE file or at
 | 
				
			||||||
 | 
					 * https://opensource.org/licenses/MIT.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2018 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2018 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2019 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2019 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2020 Google Inc. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2020 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @license
 | 
				
			||||||
 | 
					 * Copyright 2020 Google LLC. All Rights Reserved.
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the License);
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an AS IS BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 * =============================================================================
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license See the LICENSE file. */
 | 
				
			||||||
							
								
								
									
										24
									
								
								dist/Vision/styles.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								dist/Vision/styles.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					* {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PredictedObject {
 | 
				
			||||||
 | 
					  border: 2px solid green;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.predictedObjectLabel {
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  background-color: green;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  padding: 5px 10px;
 | 
				
			||||||
 | 
					  text-transform: uppercase;
 | 
				
			||||||
 | 
					  font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#VideoView {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: 0;
 | 
				
			||||||
 | 
					  left: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										195
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										195
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -86,6 +86,25 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-bEYwMeBuiWl+fB5fBmhqwxjjbwBme7KgTDCquOyHoP1P01HZNBAmyJIDCtpqGHBJuGHBOpFga/DBl+9yF7gR6g=="
 | 
					      "integrity": "sha512-bEYwMeBuiWl+fB5fBmhqwxjjbwBme7KgTDCquOyHoP1P01HZNBAmyJIDCtpqGHBJuGHBOpFga/DBl+9yF7gR6g=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/body-parser": {
 | 
				
			||||||
 | 
					      "version": "1.19.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/connect": "*",
 | 
				
			||||||
 | 
					        "@types/node": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/connect": {
 | 
				
			||||||
 | 
					      "version": "3.4.34",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/node": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@types/eslint": {
 | 
					    "@types/eslint": {
 | 
				
			||||||
      "version": "7.2.6",
 | 
					      "version": "7.2.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
 | 
				
			||||||
@ -112,6 +131,29 @@
 | 
				
			|||||||
      "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==",
 | 
					      "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/express": {
 | 
				
			||||||
 | 
					      "version": "4.17.11",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/body-parser": "*",
 | 
				
			||||||
 | 
					        "@types/express-serve-static-core": "^4.17.18",
 | 
				
			||||||
 | 
					        "@types/qs": "*",
 | 
				
			||||||
 | 
					        "@types/serve-static": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/express-serve-static-core": {
 | 
				
			||||||
 | 
					      "version": "4.17.18",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/node": "*",
 | 
				
			||||||
 | 
					        "@types/qs": "*",
 | 
				
			||||||
 | 
					        "@types/range-parser": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@types/glob": {
 | 
					    "@types/glob": {
 | 
				
			||||||
      "version": "7.1.3",
 | 
					      "version": "7.1.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
 | 
				
			||||||
@ -128,6 +170,12 @@
 | 
				
			|||||||
      "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
 | 
					      "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/mime": {
 | 
				
			||||||
 | 
					      "version": "1.3.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@types/minimatch": {
 | 
					    "@types/minimatch": {
 | 
				
			||||||
      "version": "3.0.3",
 | 
					      "version": "3.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
 | 
				
			||||||
@ -153,11 +201,33 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q=="
 | 
					      "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/qs": {
 | 
				
			||||||
 | 
					      "version": "6.9.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/range-parser": {
 | 
				
			||||||
 | 
					      "version": "1.2.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@types/seedrandom": {
 | 
					    "@types/seedrandom": {
 | 
				
			||||||
      "version": "2.4.27",
 | 
					      "version": "2.4.27",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
 | 
				
			||||||
      "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE="
 | 
					      "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/serve-static": {
 | 
				
			||||||
 | 
					      "version": "1.13.9",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/mime": "^1",
 | 
				
			||||||
 | 
					        "@types/node": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "@types/webgl-ext": {
 | 
					    "@types/webgl-ext": {
 | 
				
			||||||
      "version": "0.0.30",
 | 
					      "version": "0.0.30",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
 | 
				
			||||||
@ -374,7 +444,6 @@
 | 
				
			|||||||
      "version": "1.3.7",
 | 
					      "version": "1.3.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
 | 
				
			||||||
      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
 | 
					      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "mime-types": "~2.1.24",
 | 
					        "mime-types": "~2.1.24",
 | 
				
			||||||
        "negotiator": "0.6.2"
 | 
					        "negotiator": "0.6.2"
 | 
				
			||||||
@ -743,7 +812,6 @@
 | 
				
			|||||||
      "version": "1.19.0",
 | 
					      "version": "1.19.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
 | 
					      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "bytes": "3.1.0",
 | 
					        "bytes": "3.1.0",
 | 
				
			||||||
        "content-type": "~1.0.4",
 | 
					        "content-type": "~1.0.4",
 | 
				
			||||||
@ -760,14 +828,12 @@
 | 
				
			|||||||
        "bytes": {
 | 
					        "bytes": {
 | 
				
			||||||
          "version": "3.1.0",
 | 
					          "version": "3.1.0",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
 | 
				
			||||||
          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
 | 
					          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
 | 
				
			||||||
          "dev": true
 | 
					 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "debug": {
 | 
					        "debug": {
 | 
				
			||||||
          "version": "2.6.9",
 | 
					          "version": "2.6.9",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
					          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
				
			||||||
          "dev": true,
 | 
					 | 
				
			||||||
          "requires": {
 | 
					          "requires": {
 | 
				
			||||||
            "ms": "2.0.0"
 | 
					            "ms": "2.0.0"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
@ -1117,7 +1183,6 @@
 | 
				
			|||||||
      "version": "0.5.3",
 | 
					      "version": "0.5.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
 | 
					      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "safe-buffer": "5.1.2"
 | 
					        "safe-buffer": "5.1.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -1125,20 +1190,17 @@
 | 
				
			|||||||
    "content-type": {
 | 
					    "content-type": {
 | 
				
			||||||
      "version": "1.0.4",
 | 
					      "version": "1.0.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
 | 
				
			||||||
      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
 | 
					      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "cookie": {
 | 
					    "cookie": {
 | 
				
			||||||
      "version": "0.4.0",
 | 
					      "version": "0.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
 | 
					      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "cookie-signature": {
 | 
					    "cookie-signature": {
 | 
				
			||||||
      "version": "1.0.6",
 | 
					      "version": "1.0.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
 | 
				
			||||||
      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
 | 
					      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "copy-descriptor": {
 | 
					    "copy-descriptor": {
 | 
				
			||||||
      "version": "0.1.1",
 | 
					      "version": "0.1.1",
 | 
				
			||||||
@ -1304,14 +1366,12 @@
 | 
				
			|||||||
    "depd": {
 | 
					    "depd": {
 | 
				
			||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
 | 
					      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "destroy": {
 | 
					    "destroy": {
 | 
				
			||||||
      "version": "1.0.4",
 | 
					      "version": "1.0.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
 | 
				
			||||||
      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
 | 
					      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "detect-node": {
 | 
					    "detect-node": {
 | 
				
			||||||
      "version": "2.0.4",
 | 
					      "version": "2.0.4",
 | 
				
			||||||
@ -1347,8 +1407,7 @@
 | 
				
			|||||||
    "ee-first": {
 | 
					    "ee-first": {
 | 
				
			||||||
      "version": "1.1.1",
 | 
					      "version": "1.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 | 
				
			||||||
      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
 | 
					      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "electron-to-chromium": {
 | 
					    "electron-to-chromium": {
 | 
				
			||||||
      "version": "1.3.633",
 | 
					      "version": "1.3.633",
 | 
				
			||||||
@ -1370,8 +1429,7 @@
 | 
				
			|||||||
    "encodeurl": {
 | 
					    "encodeurl": {
 | 
				
			||||||
      "version": "1.0.2",
 | 
					      "version": "1.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
 | 
					      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "end-of-stream": {
 | 
					    "end-of-stream": {
 | 
				
			||||||
      "version": "1.4.4",
 | 
					      "version": "1.4.4",
 | 
				
			||||||
@ -1463,8 +1521,7 @@
 | 
				
			|||||||
    "escape-html": {
 | 
					    "escape-html": {
 | 
				
			||||||
      "version": "1.0.3",
 | 
					      "version": "1.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
 | 
				
			||||||
      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
 | 
					      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "escape-string-regexp": {
 | 
					    "escape-string-regexp": {
 | 
				
			||||||
      "version": "1.0.5",
 | 
					      "version": "1.0.5",
 | 
				
			||||||
@ -1508,8 +1565,7 @@
 | 
				
			|||||||
    "etag": {
 | 
					    "etag": {
 | 
				
			||||||
      "version": "1.8.1",
 | 
					      "version": "1.8.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
				
			||||||
      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
 | 
					      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "eventemitter3": {
 | 
					    "eventemitter3": {
 | 
				
			||||||
      "version": "4.0.7",
 | 
					      "version": "4.0.7",
 | 
				
			||||||
@ -1595,7 +1651,6 @@
 | 
				
			|||||||
      "version": "4.17.1",
 | 
					      "version": "4.17.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
 | 
					      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "accepts": "~1.3.7",
 | 
					        "accepts": "~1.3.7",
 | 
				
			||||||
        "array-flatten": "1.1.1",
 | 
					        "array-flatten": "1.1.1",
 | 
				
			||||||
@ -1632,14 +1687,12 @@
 | 
				
			|||||||
        "array-flatten": {
 | 
					        "array-flatten": {
 | 
				
			||||||
          "version": "1.1.1",
 | 
					          "version": "1.1.1",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
 | 
				
			||||||
          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
 | 
					          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
 | 
				
			||||||
          "dev": true
 | 
					 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "debug": {
 | 
					        "debug": {
 | 
				
			||||||
          "version": "2.6.9",
 | 
					          "version": "2.6.9",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
					          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
				
			||||||
          "dev": true,
 | 
					 | 
				
			||||||
          "requires": {
 | 
					          "requires": {
 | 
				
			||||||
            "ms": "2.0.0"
 | 
					            "ms": "2.0.0"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
@ -1779,7 +1832,6 @@
 | 
				
			|||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
 | 
					      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "debug": "2.6.9",
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
        "encodeurl": "~1.0.2",
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
@ -1794,7 +1846,6 @@
 | 
				
			|||||||
          "version": "2.6.9",
 | 
					          "version": "2.6.9",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
					          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
				
			||||||
          "dev": true,
 | 
					 | 
				
			||||||
          "requires": {
 | 
					          "requires": {
 | 
				
			||||||
            "ms": "2.0.0"
 | 
					            "ms": "2.0.0"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
@ -1836,8 +1887,7 @@
 | 
				
			|||||||
    "forwarded": {
 | 
					    "forwarded": {
 | 
				
			||||||
      "version": "0.1.2",
 | 
					      "version": "0.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
 | 
					      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "fragment-cache": {
 | 
					    "fragment-cache": {
 | 
				
			||||||
      "version": "0.2.1",
 | 
					      "version": "0.2.1",
 | 
				
			||||||
@ -1851,8 +1901,7 @@
 | 
				
			|||||||
    "fresh": {
 | 
					    "fresh": {
 | 
				
			||||||
      "version": "0.5.2",
 | 
					      "version": "0.5.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
 | 
					      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "fs.realpath": {
 | 
					    "fs.realpath": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
@ -2082,7 +2131,6 @@
 | 
				
			|||||||
      "version": "1.7.2",
 | 
					      "version": "1.7.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
 | 
					      "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "depd": "~1.1.2",
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
        "inherits": "2.0.3",
 | 
					        "inherits": "2.0.3",
 | 
				
			||||||
@ -2094,8 +2142,7 @@
 | 
				
			|||||||
        "inherits": {
 | 
					        "inherits": {
 | 
				
			||||||
          "version": "2.0.3",
 | 
					          "version": "2.0.3",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
				
			||||||
          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
 | 
					          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
 | 
				
			||||||
          "dev": true
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -2243,7 +2290,6 @@
 | 
				
			|||||||
      "version": "0.4.24",
 | 
					      "version": "0.4.24",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
 | 
				
			||||||
      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
 | 
					      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "safer-buffer": ">= 2.1.2 < 3"
 | 
					        "safer-buffer": ">= 2.1.2 < 3"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -2359,8 +2405,7 @@
 | 
				
			|||||||
    "ipaddr.js": {
 | 
					    "ipaddr.js": {
 | 
				
			||||||
      "version": "1.9.1",
 | 
					      "version": "1.9.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
 | 
					      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "is-absolute-url": {
 | 
					    "is-absolute-url": {
 | 
				
			||||||
      "version": "3.0.3",
 | 
					      "version": "3.0.3",
 | 
				
			||||||
@ -2697,8 +2742,7 @@
 | 
				
			|||||||
    "media-typer": {
 | 
					    "media-typer": {
 | 
				
			||||||
      "version": "0.3.0",
 | 
					      "version": "0.3.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
 | 
					      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "memory-fs": {
 | 
					    "memory-fs": {
 | 
				
			||||||
      "version": "0.5.0",
 | 
					      "version": "0.5.0",
 | 
				
			||||||
@ -2713,8 +2757,7 @@
 | 
				
			|||||||
    "merge-descriptors": {
 | 
					    "merge-descriptors": {
 | 
				
			||||||
      "version": "1.0.1",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 | 
				
			||||||
      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
 | 
					      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "merge-stream": {
 | 
					    "merge-stream": {
 | 
				
			||||||
      "version": "2.0.0",
 | 
					      "version": "2.0.0",
 | 
				
			||||||
@ -2725,8 +2768,7 @@
 | 
				
			|||||||
    "methods": {
 | 
					    "methods": {
 | 
				
			||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
 | 
					      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "micromatch": {
 | 
					    "micromatch": {
 | 
				
			||||||
      "version": "4.0.2",
 | 
					      "version": "4.0.2",
 | 
				
			||||||
@ -2741,8 +2783,7 @@
 | 
				
			|||||||
    "mime": {
 | 
					    "mime": {
 | 
				
			||||||
      "version": "1.6.0",
 | 
					      "version": "1.6.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
 | 
					      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "mime-db": {
 | 
					    "mime-db": {
 | 
				
			||||||
      "version": "1.45.0",
 | 
					      "version": "1.45.0",
 | 
				
			||||||
@ -2817,8 +2858,7 @@
 | 
				
			|||||||
    "ms": {
 | 
					    "ms": {
 | 
				
			||||||
      "version": "2.0.0",
 | 
					      "version": "2.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
 | 
					      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "multicast-dns": {
 | 
					    "multicast-dns": {
 | 
				
			||||||
      "version": "6.2.3",
 | 
					      "version": "6.2.3",
 | 
				
			||||||
@ -2865,8 +2905,7 @@
 | 
				
			|||||||
    "negotiator": {
 | 
					    "negotiator": {
 | 
				
			||||||
      "version": "0.6.2",
 | 
					      "version": "0.6.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
 | 
					      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "neo-async": {
 | 
					    "neo-async": {
 | 
				
			||||||
      "version": "2.6.2",
 | 
					      "version": "2.6.2",
 | 
				
			||||||
@ -3011,7 +3050,6 @@
 | 
				
			|||||||
      "version": "2.3.0",
 | 
					      "version": "2.3.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
 | 
					      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "ee-first": "1.1.1"
 | 
					        "ee-first": "1.1.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -3106,8 +3144,7 @@
 | 
				
			|||||||
    "parseurl": {
 | 
					    "parseurl": {
 | 
				
			||||||
      "version": "1.3.3",
 | 
					      "version": "1.3.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
 | 
					      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pascalcase": {
 | 
					    "pascalcase": {
 | 
				
			||||||
      "version": "0.1.1",
 | 
					      "version": "0.1.1",
 | 
				
			||||||
@ -3154,8 +3191,7 @@
 | 
				
			|||||||
    "path-to-regexp": {
 | 
					    "path-to-regexp": {
 | 
				
			||||||
      "version": "0.1.7",
 | 
					      "version": "0.1.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
 | 
				
			||||||
      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
 | 
					      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "picomatch": {
 | 
					    "picomatch": {
 | 
				
			||||||
      "version": "2.2.2",
 | 
					      "version": "2.2.2",
 | 
				
			||||||
@ -3237,7 +3273,6 @@
 | 
				
			|||||||
      "version": "2.0.6",
 | 
					      "version": "2.0.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
 | 
				
			||||||
      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
 | 
					      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "forwarded": "~0.1.2",
 | 
					        "forwarded": "~0.1.2",
 | 
				
			||||||
        "ipaddr.js": "1.9.1"
 | 
					        "ipaddr.js": "1.9.1"
 | 
				
			||||||
@ -3268,8 +3303,7 @@
 | 
				
			|||||||
    "qs": {
 | 
					    "qs": {
 | 
				
			||||||
      "version": "6.7.0",
 | 
					      "version": "6.7.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
 | 
					      "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "querystring": {
 | 
					    "querystring": {
 | 
				
			||||||
      "version": "0.2.0",
 | 
					      "version": "0.2.0",
 | 
				
			||||||
@ -3295,14 +3329,12 @@
 | 
				
			|||||||
    "range-parser": {
 | 
					    "range-parser": {
 | 
				
			||||||
      "version": "1.2.1",
 | 
					      "version": "1.2.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
 | 
					      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "raw-body": {
 | 
					    "raw-body": {
 | 
				
			||||||
      "version": "2.4.0",
 | 
					      "version": "2.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
 | 
					      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "bytes": "3.1.0",
 | 
					        "bytes": "3.1.0",
 | 
				
			||||||
        "http-errors": "1.7.2",
 | 
					        "http-errors": "1.7.2",
 | 
				
			||||||
@ -3313,8 +3345,7 @@
 | 
				
			|||||||
        "bytes": {
 | 
					        "bytes": {
 | 
				
			||||||
          "version": "3.1.0",
 | 
					          "version": "3.1.0",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
 | 
				
			||||||
          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
 | 
					          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
 | 
				
			||||||
          "dev": true
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -3573,8 +3604,7 @@
 | 
				
			|||||||
    "safe-buffer": {
 | 
					    "safe-buffer": {
 | 
				
			||||||
      "version": "5.1.2",
 | 
					      "version": "5.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
 | 
					      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "safe-regex": {
 | 
					    "safe-regex": {
 | 
				
			||||||
      "version": "1.1.0",
 | 
					      "version": "1.1.0",
 | 
				
			||||||
@ -3588,8 +3618,7 @@
 | 
				
			|||||||
    "safer-buffer": {
 | 
					    "safer-buffer": {
 | 
				
			||||||
      "version": "2.1.2",
 | 
					      "version": "2.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
 | 
					      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "schema-utils": {
 | 
					    "schema-utils": {
 | 
				
			||||||
      "version": "3.0.0",
 | 
					      "version": "3.0.0",
 | 
				
			||||||
@ -3632,7 +3661,6 @@
 | 
				
			|||||||
      "version": "0.17.1",
 | 
					      "version": "0.17.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
 | 
					      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "debug": "2.6.9",
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
        "depd": "~1.1.2",
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
@ -3653,7 +3681,6 @@
 | 
				
			|||||||
          "version": "2.6.9",
 | 
					          "version": "2.6.9",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
					          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
				
			||||||
          "dev": true,
 | 
					 | 
				
			||||||
          "requires": {
 | 
					          "requires": {
 | 
				
			||||||
            "ms": "2.0.0"
 | 
					            "ms": "2.0.0"
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
@ -3661,16 +3688,14 @@
 | 
				
			|||||||
            "ms": {
 | 
					            "ms": {
 | 
				
			||||||
              "version": "2.0.0",
 | 
					              "version": "2.0.0",
 | 
				
			||||||
              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
					              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
				
			||||||
              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
 | 
					              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 | 
				
			||||||
              "dev": true
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "ms": {
 | 
					        "ms": {
 | 
				
			||||||
          "version": "2.1.1",
 | 
					          "version": "2.1.1",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
 | 
				
			||||||
          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
 | 
					          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
 | 
				
			||||||
          "dev": true
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -3737,7 +3762,6 @@
 | 
				
			|||||||
      "version": "1.14.1",
 | 
					      "version": "1.14.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
 | 
					      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "encodeurl": "~1.0.2",
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
        "escape-html": "~1.0.3",
 | 
					        "escape-html": "~1.0.3",
 | 
				
			||||||
@ -3777,8 +3801,7 @@
 | 
				
			|||||||
    "setprototypeof": {
 | 
					    "setprototypeof": {
 | 
				
			||||||
      "version": "1.1.1",
 | 
					      "version": "1.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
 | 
					      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "shebang-command": {
 | 
					    "shebang-command": {
 | 
				
			||||||
      "version": "1.2.0",
 | 
					      "version": "1.2.0",
 | 
				
			||||||
@ -4084,8 +4107,7 @@
 | 
				
			|||||||
    "statuses": {
 | 
					    "statuses": {
 | 
				
			||||||
      "version": "1.5.0",
 | 
					      "version": "1.5.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
 | 
					      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "string-width": {
 | 
					    "string-width": {
 | 
				
			||||||
      "version": "4.2.0",
 | 
					      "version": "4.2.0",
 | 
				
			||||||
@ -4243,8 +4265,7 @@
 | 
				
			|||||||
    "toidentifier": {
 | 
					    "toidentifier": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
 | 
					      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "ts-loader": {
 | 
					    "ts-loader": {
 | 
				
			||||||
      "version": "8.0.13",
 | 
					      "version": "8.0.13",
 | 
				
			||||||
@ -4321,7 +4342,6 @@
 | 
				
			|||||||
      "version": "1.6.18",
 | 
					      "version": "1.6.18",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
 | 
				
			||||||
      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
 | 
					      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "media-typer": "0.3.0",
 | 
					        "media-typer": "0.3.0",
 | 
				
			||||||
        "mime-types": "~2.1.24"
 | 
					        "mime-types": "~2.1.24"
 | 
				
			||||||
@ -4348,8 +4368,7 @@
 | 
				
			|||||||
    "unpipe": {
 | 
					    "unpipe": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
 | 
					      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "unset-value": {
 | 
					    "unset-value": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
@ -4455,8 +4474,7 @@
 | 
				
			|||||||
    "utils-merge": {
 | 
					    "utils-merge": {
 | 
				
			||||||
      "version": "1.0.1",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
 | 
				
			||||||
      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
 | 
					      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "uuid": {
 | 
					    "uuid": {
 | 
				
			||||||
      "version": "3.4.0",
 | 
					      "version": "3.4.0",
 | 
				
			||||||
@ -4473,8 +4491,7 @@
 | 
				
			|||||||
    "vary": {
 | 
					    "vary": {
 | 
				
			||||||
      "version": "1.1.2",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
 | 
					      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "watchpack": {
 | 
					    "watchpack": {
 | 
				
			||||||
      "version": "2.1.0",
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
				
			|||||||
@ -11,9 +11,11 @@
 | 
				
			|||||||
  "license": "ISC",
 | 
					  "license": "ISC",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@tensorflow-models/coco-ssd": "^2.2.1",
 | 
					    "@tensorflow-models/coco-ssd": "^2.2.1",
 | 
				
			||||||
    "@tensorflow/tfjs": "^2.8.2"
 | 
					    "@tensorflow/tfjs": "^2.8.2",
 | 
				
			||||||
 | 
					    "express": "^4.17.1"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@types/express": "^4.17.11",
 | 
				
			||||||
    "ts-loader": "^8.0.13",
 | 
					    "ts-loader": "^8.0.13",
 | 
				
			||||||
    "typescript": "^4.1.3",
 | 
					    "typescript": "^4.1.3",
 | 
				
			||||||
    "webpack": "^5.11.1",
 | 
					    "webpack": "^5.11.1",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,32 +0,0 @@
 | 
				
			|||||||
import PredictedObject from "../Models/PredictedObject"
 | 
					 | 
				
			||||||
import PredictedObjectCollection from "../Models/PredictedObjectCollection"
 | 
					 | 
				
			||||||
import PredictedObjectView from "../Views/PredictedObjectView"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class PredictedObjectCollectionController {
 | 
					 | 
				
			||||||
  private model: PredictedObjectCollection
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  constructor () {
 | 
					 | 
				
			||||||
    this.model = new PredictedObjectCollection()
 | 
					 | 
				
			||||||
    this.renderView()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  set predictedObjects (objects: PredictedObject[]) {
 | 
					 | 
				
			||||||
    this.model.objects = objects
 | 
					 | 
				
			||||||
    this.renderView()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  public renderView = () => {
 | 
					 | 
				
			||||||
    const existingPredictedObjectViews = document.querySelectorAll('.PredictedObject')
 | 
					 | 
				
			||||||
    existingPredictedObjectViews.forEach(v => {
 | 
					 | 
				
			||||||
      v.outerHTML = ''
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const body = document.querySelector('body')!
 | 
					 | 
				
			||||||
    this.model.objects.forEach((object: PredictedObject) => {
 | 
					 | 
				
			||||||
      const predictedObjectView = new PredictedObjectView(object)
 | 
					 | 
				
			||||||
      body.appendChild(predictedObjectView.element)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default PredictedObjectCollectionController
 | 
					 | 
				
			||||||
@ -1,48 +0,0 @@
 | 
				
			|||||||
import Video from "../Models/Video"
 | 
					 | 
				
			||||||
import VideoView from '../Views/VideoView'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class VideoController {
 | 
					 | 
				
			||||||
  private defaultWidth: number = 640
 | 
					 | 
				
			||||||
  private defaultHeight: number = 480
 | 
					 | 
				
			||||||
  private userMediaConstraints = { video: true }
 | 
					 | 
				
			||||||
  public model: Video
 | 
					 | 
				
			||||||
  private view: VideoView
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  constructor (props: { width?: number, height?: number } = {}) {
 | 
					 | 
				
			||||||
    this.model = new Video({
 | 
					 | 
				
			||||||
      width: props.width || this.defaultWidth,
 | 
					 | 
				
			||||||
      height: props.height || this.defaultHeight
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.view = new VideoView(this.model)
 | 
					 | 
				
			||||||
    this.renderView()
 | 
					 | 
				
			||||||
    this.enableCamera()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  get imageData () {
 | 
					 | 
				
			||||||
    if (!this.view.element.srcObject) return null
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const canvas: HTMLCanvasElement = document.createElement('canvas')
 | 
					 | 
				
			||||||
    canvas.width = this.model.width
 | 
					 | 
				
			||||||
    canvas.height = this.model.height
 | 
					 | 
				
			||||||
    const context = canvas.getContext('2d')!
 | 
					 | 
				
			||||||
    context.drawImage(this.view.element, 0, 0, this.model.width, this.model.height)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return context.getImageData(0, 0, this.model.width, this.model.height)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  private enableCamera = async () => {
 | 
					 | 
				
			||||||
    const stream = await navigator.mediaDevices.getUserMedia(this.userMediaConstraints)
 | 
					 | 
				
			||||||
    this.view.srcObject = stream
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  private renderView () {
 | 
					 | 
				
			||||||
    const existingVideoView = document.querySelector('#videoView')
 | 
					 | 
				
			||||||
    if (existingVideoView) existingVideoView.outerHTML = ''
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const body = document.querySelector('body')!
 | 
					 | 
				
			||||||
    body.appendChild(this.view.element)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default VideoController
 | 
					 | 
				
			||||||
							
								
								
									
										38
									
								
								src/Server/Server.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/Server/Server.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					import express from 'express'
 | 
				
			||||||
 | 
					import path from 'path'
 | 
				
			||||||
 | 
					import bodyParser from 'body-parser'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Server {
 | 
				
			||||||
 | 
					  public app = express()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor () {
 | 
				
			||||||
 | 
					    this.createApp()
 | 
				
			||||||
 | 
					    this.setupAppOptions()
 | 
				
			||||||
 | 
					    this.setupAppRoutes()
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  createApp = () => {
 | 
				
			||||||
 | 
					    this.app.use(express.json())
 | 
				
			||||||
 | 
					    this.app.use(express.urlencoded({ extended: false }))
 | 
				
			||||||
 | 
					    this.app.use(express.static(path.join(process.cwd(), '/build')))
 | 
				
			||||||
 | 
					    this.app.use(bodyParser.json())
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setupAppRoutes = () => {
 | 
				
			||||||
 | 
					    // this.app.use('/api', apiRouter)
 | 
				
			||||||
 | 
					    this.app.use('/', (request, response, next) => {
 | 
				
			||||||
 | 
					      response.sendFile(path.join(process.cwd(), './dist/Vision/index.html'))
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setupAppOptions = () => {
 | 
				
			||||||
 | 
					    this.app.use((request, response, next) => {
 | 
				
			||||||
 | 
					      response.header('Access-Control-Allow-Origin', request.headers.origin || '*')
 | 
				
			||||||
 | 
					      response.header('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,HEAD,DELETE,OPTIONS')
 | 
				
			||||||
 | 
					      response.header('Access-Control-Allow-Headers', 'Content-Type,x-requested-with')
 | 
				
			||||||
 | 
					      next()
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Server
 | 
				
			||||||
							
								
								
									
										29
									
								
								src/Server/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/Server/main.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					import http from 'http'
 | 
				
			||||||
 | 
					import Server from './Server'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const main = () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const port = normalizePort(process.env.PORT || '5005')
 | 
				
			||||||
 | 
					  const webService = createServer()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  webService.listen(port, () => {
 | 
				
			||||||
 | 
					    console.log(`Server is listening on ${port}`)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const createServer = () => {
 | 
				
			||||||
 | 
					  const server = new Server()
 | 
				
			||||||
 | 
					  return http.createServer(server.app)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const normalizePort = (portString: string) => {
 | 
				
			||||||
 | 
					  const port = parseInt(portString, 10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (isNaN(port)) return portString
 | 
				
			||||||
 | 
					  else if (port >= 0 ) return port
 | 
				
			||||||
 | 
					  else return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { main, createServer, normalizePort }
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/Server/moveStepper.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/Server/moveStepper.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					# command arguments to run process
 | 
				
			||||||
 | 
					# 1: int pin_one
 | 
				
			||||||
 | 
					# 2: int pin_two
 | 
				
			||||||
 | 
					# 3: int pin_three
 | 
				
			||||||
 | 
					# 4: int pin_four
 | 
				
			||||||
 | 
					# 5: string clockwise or counterClockwise
 | 
				
			||||||
 | 
					# 6: float: interval_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import RPi.GPIO as GPIO
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motor_channel = (int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]), int(sys.argv[4]))
 | 
				
			||||||
 | 
					motor_direction = sys.argv[5]
 | 
				
			||||||
 | 
					interval_time = float(sys.argv[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GPIO.setwarnings(True)
 | 
				
			||||||
 | 
					GPIO.setmode(GPIO.BOARD)
 | 
				
			||||||
 | 
					GPIO.setup(motor_channel, GPIO.OUT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        if(motor_direction == 'clockwise'):
 | 
				
			||||||
 | 
					            print('motor running clockwise\n')
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.HIGH))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.HIGH,GPIO.LOW,GPIO.LOW))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.LOW,GPIO.HIGH,GPIO.HIGH,GPIO.LOW))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.HIGH))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        elif(motor_direction == 'counterClockwise'):
 | 
				
			||||||
 | 
					            print('motor running anti-clockwise\n')
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.HIGH))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.HIGH))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.LOW,GPIO.HIGH,GPIO.HIGH,GPIO.LOW))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.HIGH,GPIO.LOW,GPIO.LOW))
 | 
				
			||||||
 | 
					            sleep(interval_time)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    except KeyboardInterrupt:
 | 
				
			||||||
 | 
					        sys.exit(0)
 | 
				
			||||||
@ -3,7 +3,7 @@ import ObjectDetector from "../ObjectDetector"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const defaultPredictions = [
 | 
					const defaultPredictions = [
 | 
				
			||||||
  (prediction: DetectedObject) => prediction.score > 0.6,
 | 
					  (prediction: DetectedObject) => prediction.score > 0.6,
 | 
				
			||||||
  (prediction: DetectedObject) => prediction.class === 'cat',
 | 
					  (prediction: DetectedObject) => prediction.class === 'person',
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector {
 | 
					function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector {
 | 
				
			||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
const path = require('path');
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  entry: './src/app.ts',
 | 
					  entry: './src/Vision/main.ts',
 | 
				
			||||||
  devtool: 'inline-source-map',
 | 
					  devtool: 'inline-source-map',
 | 
				
			||||||
  devServer: {
 | 
					  devServer: {
 | 
				
			||||||
    contentBase: './dist',
 | 
					    contentBase: './dist/Vision',
 | 
				
			||||||
   hot: true,
 | 
					   hot: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  module: {
 | 
					  module: {
 | 
				
			||||||
@ -20,7 +20,7 @@ module.exports = {
 | 
				
			|||||||
    extensions: [ '.tsx', '.ts', '.js' ],
 | 
					    extensions: [ '.tsx', '.ts', '.js' ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  output: {
 | 
					  output: {
 | 
				
			||||||
    filename: 'app.js',
 | 
					    filename: 'main.js',
 | 
				
			||||||
    path: path.resolve(__dirname, 'dist'),
 | 
					    path: path.resolve(__dirname, 'dist', 'Vision'),
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user