Compare commits
	
		
			334 commits
		
	
	
		
			
				v2023.08.2
			
			...
			
				master
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
							
							
	
	
		
			
		
	
	fd82adc73e | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	49f9f7fd3c | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	288fe04e95 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	800898153d | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	79d8294ba1 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	c89bf3bf1a | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	ce45727b60 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	7ba32186cf | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	01cf40d1b8 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	db05b1d4e7 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	166fab652d | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	310142efc3 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	3c05fe4248 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	81b43f3dca | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	05288f04aa | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	a4edd396f0 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	57bb0e03a3 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	429314efba | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	af4a460ceb | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	ffc8374b9f | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	7ed667e941 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	42de426467 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	54bf26bd35 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	59f8d4827b | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	8cc46fbe47 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	160c83f99f | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	f3e2d1e2fc | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	3b273d0ee9 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	e8ad39203f | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	6690d4e97e | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	93a2b9c0b5 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	caba5377e3 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	edca6b7abf | 
						
						
							|||
| 
							 | 
						
							
							
								
							
							
	
	
	006ad34e1b | 
						
						
							||
| 
							 | 
						
							
							
								
							
							
	
	
	3821e58e10 | 
						
						
							||
| 
							
							
								
							
							
	
	
		
			
		
	
	cebb14f59c | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	da992ff1b7 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	a349858a7d | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	73d3d0aa85 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	42cb4f5561 | 
						
						
							|||
| 296c823fc4 | |||
| 
							 | 
						ad60b38826 | ||
| 
							 | 
						4b8c38216f | ||
| 
							 | 
						a44d14c6bd | ||
| 
							 | 
						51beb44c30 | ||
| 
							 | 
						e19e504f1b | ||
| 
							 | 
						0a50c93d3a | ||
| 
							 | 
						3e97458ee2 | ||
| 
							 | 
						0a8db68e42 | ||
| 
							 | 
						6c126bc20f | ||
| 
							 | 
						80f4601670 | ||
| 
							 | 
						b65eca420a | ||
| 
							 | 
						02e9a6d85d | ||
| 
							 | 
						98cc18191a | ||
| 
							 | 
						11c3a2a85f | ||
| 
							 | 
						06db3b1551 | ||
| 
							 | 
						ec7e9ef0fb | ||
| 
							 | 
						bc9c002eb7 | ||
| 
							 | 
						f3bc3da7f8 | ||
| 
							 | 
						92f01ad9d0 | ||
| 
							 | 
						14c3a4e0ed | ||
| 
							 | 
						3a6758002f | ||
| 
							 | 
						5596afa450 | ||
| 
							 | 
						27116d79ce | ||
| 
							 | 
						f0f87f2a04 | ||
| 
							 | 
						4a39504f6c | ||
| 
							 | 
						2d462347f5 | ||
| 
							 | 
						083a4eb8af | ||
| 
							 | 
						9c306bd74e | ||
| 
							 | 
						70234f23f8 | ||
| 
							 | 
						588966a94f | ||
| 
							 | 
						b257c17f57 | ||
| 
							 | 
						97cab32d50 | ||
| 
							 | 
						858312f77a | ||
| 
							 | 
						f3694af95e | ||
| 
							 | 
						f00947d721 | ||
| 
							 | 
						4730f59dd0 | ||
| 
							 | 
						29f40ced3b | ||
| 
							 | 
						ee5931cba8 | ||
| 
							 | 
						93abf0cb1e | ||
| 
							 | 
						f674ef7838 | ||
| 
							 | 
						bf34ffcbc4 | ||
| 
							 | 
						d61a2d0109 | ||
| 
							 | 
						80cbe94dc0 | ||
| 
							 | 
						bb3f6afc81 | ||
| 
							 | 
						5472d7c7c7 | ||
| 
							 | 
						39d7895fad | ||
| 
							 | 
						33c49199c7 | ||
| 
							 | 
						031aa417b8 | ||
| 
							 | 
						a480bdeac8 | ||
| 
							 | 
						84517b7c92 | ||
| 
							 | 
						217b24c1e8 | ||
| 
							 | 
						33fec5e189 | ||
| 
							 | 
						1bfc111503 | ||
| 
							 | 
						6f5740ecee | ||
| 
							 | 
						d52be035d0 | ||
| 
							 | 
						34055ccb41 | ||
| 
							 | 
						d1ec296717 | ||
| 
							 | 
						57abc7d5a7 | ||
| 
							 | 
						acb18eb1ad | ||
| 
							 | 
						0d7eb302e8 | ||
| 
							 | 
						8d1469a5f4 | ||
| 
							 | 
						4b5c192301 | ||
| 
							 | 
						d7dab43cf4 | ||
| 
							 | 
						0e0d76760e | ||
| 
							 | 
						c0eba1f9f7 | ||
| 
							 | 
						de10ced0d2 | ||
| 
							 | 
						d9b84b39d2 | ||
| 
							 | 
						829ecc816d | ||
| 
							 | 
						387c296638 | ||
| 
							 | 
						2ea31ce775 | ||
| 
							 | 
						e1717e13d1 | ||
| 
							 | 
						0f4da7e3df | ||
| 
							 | 
						3824f01f9b | ||
| 
							 | 
						729be11b5a | ||
| 
							 | 
						4114f350bf | ||
| 
							 | 
						c9299b5410 | ||
| 
							 | 
						2fbf6cdc39 | ||
| 
							 | 
						e75b5ad8a9 | ||
| 
							 | 
						35e1c10775 | ||
| 
							 | 
						993198c16a | ||
| 
							 | 
						89b7a0b7ae | ||
| 
							 | 
						210d83db45 | ||
| 
							 | 
						f7e4a21ff2 | ||
| 
							 | 
						a1a8571873 | ||
| 
							 | 
						9f58d1e5b3 | ||
| 
							 | 
						40cd7fc002 | ||
| 
							 | 
						898176c5d4 | ||
| 
							 | 
						6f3be14459 | ||
| 
							 | 
						2b9db42593 | ||
| 
							 | 
						0cd22cf82b | ||
| 
							 | 
						6f83c77109 | ||
| 
							 | 
						0237bc60f3 | ||
| 
							 | 
						8baf29f486 | ||
| 
							 | 
						7c5461ddf3 | ||
| 
							 | 
						663b96bad2 | ||
| 
							 | 
						8da88fd38d | ||
| 
							 | 
						faa43b2d74 | ||
| 
							 | 
						26ab7d24d4 | ||
| 
							 | 
						03bc2cd211 | ||
| 
							 | 
						69ae67d510 | ||
| 
							 | 
						f68e4cb3e6 | ||
| 
							 | 
						361714b2f2 | ||
| 
							 | 
						9c18e70754 | ||
| 
							 | 
						d39ae4b8b5 | ||
| 
							 | 
						ecfd933db1 | ||
| 
							 | 
						968c1c996f | ||
| 
							 | 
						a1eff2c46e | ||
| 
							 | 
						652afe8093 | ||
| 
							 | 
						506dbc2b90 | ||
| 
							 | 
						0b050ec128 | ||
| 
							 | 
						6bae748385 | ||
| 
							 | 
						398fb1a1b3 | ||
| 
							 | 
						5bbe4ed4b5 | ||
| 
							 | 
						0b6f833b51 | ||
| 
							 | 
						80ca3f4345 | ||
| 
							 | 
						ed7a271816 | ||
| 
							 | 
						9b4410becf | ||
| 
							 | 
						e4e7ad6267 | ||
| 
							 | 
						adce1b1cf8 | ||
| 
							 | 
						359b480e0d | ||
| 
							 | 
						90c52206ef | ||
| 
							 | 
						60c11f8376 | ||
| 
							 | 
						c644b720ea | ||
| 
							 | 
						a85e8da2e8 | ||
| 
							 | 
						59e5dc3470 | ||
| 
							 | 
						41c22dd7f4 | ||
| 
							 | 
						62b503194f | ||
| 
							 | 
						a4edf22794 | ||
| 
							 | 
						d70bf3bc74 | ||
| 
							 | 
						c21e37a260 | ||
| 
							 | 
						b249fb8215 | ||
| 
							 | 
						4610066729 | ||
| 
							 | 
						8796ca9abe | ||
| 
							 | 
						98f2ccefea | ||
| 
							 | 
						35924db567 | ||
| 
							 | 
						fff8973a85 | ||
| 
							 | 
						4b585fe2ca | ||
| 
							 | 
						d8390f7a54 | ||
| 
							 | 
						fcb30657cb | ||
| 
							 | 
						4066dbb6d3 | ||
| 
							 | 
						587788cb7a | ||
| 
							 | 
						fe26401edc | ||
| 
							 | 
						ef3fd13b55 | ||
| 
							 | 
						98b36dd089 | ||
| 
							 | 
						5b3a2efd82 | ||
| 
							 | 
						a9e1cba778 | ||
| 
							 | 
						f0ebb75759 | ||
| 
							 | 
						9a0d3a4ccc | ||
| 
							 | 
						3fc99d1c9d | ||
| 
							 | 
						d4fef8b313 | ||
| 
							 | 
						0262ba30ab | ||
| 
							 | 
						e6d14246c9 | ||
| 
							 | 
						0655a95967 | ||
| 
							 | 
						9dfbac4b56 | ||
| 
							 | 
						f1f1169606 | ||
| 
							 | 
						5d6f390968 | ||
| 
							 | 
						37b8be496e | ||
| 
							 | 
						1af7891b11 | ||
| 
							 | 
						f7d589aad4 | ||
| 
							 | 
						59dd3cbdfa | ||
| 
							 | 
						5acec31981 | ||
| 
							 | 
						de8181ce93 | ||
| 
							 | 
						09cffe2562 | ||
| 
							 | 
						bc781baf14 | ||
| 
							 | 
						4f10d73cf2 | ||
| 
							 | 
						9d22db13a5 | ||
| 
							 | 
						d78ba74d44 | ||
| 
							 | 
						28a94afa50 | ||
| 
							 | 
						fd12540d0a | ||
| 
							 | 
						cc7fbbcdca | ||
| 
							 | 
						88516c780c | ||
| 
							 | 
						5ba30c2401 | ||
| 
							 | 
						f56107be8d | ||
| 
							 | 
						c16b9d351f | ||
| 
							 | 
						e558997a6a | ||
| 
							 | 
						5f3348ee79 | ||
| 
							 | 
						abece1760b | ||
| 
							 | 
						d6cd2d3154 | ||
| 
							 | 
						ba85934ebc | ||
| 
							 | 
						05c5c68460 | ||
| 
							 | 
						8e36d3dcba | ||
| 
							 | 
						4f50fa52c3 | ||
| 
							 | 
						10714d05bd | ||
| 
							 | 
						772460fc6e | ||
| 
							 | 
						29338c7175 | ||
| 
							 | 
						541106420e | ||
| 
							 | 
						afd430e052 | ||
| 
							 | 
						b1bdad158b | ||
| 
							 | 
						754e074dd9 | ||
| 
							 | 
						1013cd0456 | ||
| 
							 | 
						9a5ebd6465 | ||
| 
							 | 
						b29d84eef1 | ||
| 
							 | 
						811a96cbe3 | ||
| 
							 | 
						aa61d91b79 | ||
| 
							 | 
						48de704b66 | ||
| 
							 | 
						e171a0f8eb | ||
| 
							 | 
						91896f9dff | ||
| 
							 | 
						3f42bac3f4 | ||
| 
							 | 
						03769ee93e | ||
| 
							 | 
						e5c778e7ad | ||
| 
							 | 
						aeb9501237 | ||
| 
							 | 
						1556e6019e | ||
| 
							 | 
						8b35647f85 | ||
| 
							 | 
						7c572a1ca6 | ||
| 
							 | 
						1c8fc95e31 | ||
| 
							 | 
						0e5f6cd90a | ||
| 
							 | 
						ac1c84ea55 | ||
| 
							 | 
						fe06cd915c | ||
| 
							 | 
						c04f07cb5c | ||
| 
							 | 
						2a11cff663 | ||
| 
							 | 
						c5d62dc343 | ||
| 
							 | 
						b942762409 | ||
| 
							 | 
						a40febdef9 | ||
| 
							 | 
						22b74d1764 | ||
| 
							 | 
						805e9f9dca | ||
| 
							 | 
						fc7c365672 | ||
| 
							 | 
						70afd73d2d | ||
| 
							 | 
						94133ec0f7 | ||
| 
							 | 
						8adae46775 | ||
| 
							 | 
						06e760f975 | ||
| 
							 | 
						74c48d7bb6 | ||
| 
							 | 
						c96e27b8d2 | ||
| 
							 | 
						c77a184c37 | ||
| 
							 | 
						8584d25961 | ||
| 
							 | 
						b60a70394f | ||
| 
							 | 
						f7fa536753 | ||
| 
							 | 
						b8de913210 | ||
| 
							 | 
						d4021128fe | ||
| 
							 | 
						5d0fc96ba5 | ||
| 
							 | 
						4ff6785da1 | ||
| 
							 | 
						01b9e61b6a | ||
| 
							 | 
						b453b17797 | ||
| 
							 | 
						50b0a2b5b3 | ||
| 
							 | 
						09e5615505 | ||
| 
							 | 
						cbdbd2d0c7 | ||
| 
							 | 
						8a152b2138 | ||
| 
							 | 
						8b4a838785 | ||
| 
							 | 
						e816b3e3dc | ||
| 
							 | 
						5e662802bc | ||
| 
							 | 
						343207e8e4 | ||
| 
							 | 
						8921eb16f7 | ||
| 
							 | 
						c3509c0d41 | ||
| 
							 | 
						94fa32d53e | ||
| 
							 | 
						0f265f43f2 | ||
| 
							 | 
						3c711a3be5 | ||
| 
							 | 
						63ab693d87 | ||
| 
							 | 
						7884f44391 | ||
| 
							 | 
						a7ed69542b | ||
| 
							 | 
						e7e2cfaf4b | ||
| 
							 | 
						6feda31d56 | ||
| 
							 | 
						6a2851447c | ||
| 
							 | 
						294a9573e4 | ||
| 
							 | 
						476a58fafc | ||
| 
							 | 
						f0ed9a670f | ||
| 
							 | 
						cb6e3d378d | ||
| 
							 | 
						025f4e1773 | ||
| 
							 | 
						b87c1467c6 | ||
| 
							 | 
						606c641558 | ||
| 
							 | 
						ad7f3fca65 | ||
| 
							 | 
						cf2c13fa26 | ||
| 
							 | 
						160c8a5d50 | ||
| 
							 | 
						761cbb11a4 | ||
| 
							 | 
						4ffec4148a | ||
| 
							 | 
						bf5b014435 | ||
| 
							 | 
						d9e3c5b179 | ||
| 
							 | 
						1ffe9ea2b2 | ||
| 
							 | 
						16ecc6abe3 | ||
| 
							 | 
						1763281e39 | ||
| 
							 | 
						b760a00f3f | ||
| 
							 | 
						168400fab0 | ||
| 
							 | 
						8af402a9e2 | ||
| 
							 | 
						3d69dd05c2 | ||
| 
							 | 
						fc2111ad4e | ||
| 
							 | 
						6fd3f5b1d0 | ||
| 
							 | 
						2832b08777 | ||
| 
							 | 
						a160a5b4d1 | ||
| 
							 | 
						092a771283 | ||
| 
							 | 
						b9cf312ee6 | ||
| 
							 | 
						cc2d653da6 | ||
| 
							 | 
						5812807f7d | ||
| 
							 | 
						05525e7a97 | ||
| 
							 | 
						7637493fbb | ||
| 
							 | 
						6a3d6af654 | ||
| 
							 | 
						60d5008596 | ||
| 
							 | 
						b55abe4d15 | ||
| 
							 | 
						47b751c020 | ||
| 
							 | 
						dcc3c8dd54 | ||
| 
							 | 
						ea63711fb9 | ||
| 
							 | 
						5fab5ac440 | ||
| 
							 | 
						67dbc1f6e8 | ||
| 
							 | 
						039a2fb895 | ||
| 
							 | 
						27cac08f46 | ||
| 
							 | 
						896b5c1550 | 
| 
						 | 
				
			
			@ -26,5 +26,3 @@ MEMCACHED_HOST=127.0.0.1
 | 
			
		|||
 | 
			
		||||
LASTFM_KEY=
 | 
			
		||||
LASTFM_USER=
 | 
			
		||||
LASTFM_TOP_TRACKS=10
 | 
			
		||||
API_ROOT=http://127.0.0.1:3000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								.github/CODEOWNERS
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
* @RoscoeDaWah
 | 
			
		||||
							
								
								
									
										5
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -17,5 +17,8 @@ yarn-error.log
 | 
			
		|||
/.fleet
 | 
			
		||||
/.idea
 | 
			
		||||
/.vscode
 | 
			
		||||
.auth0.*.json
 | 
			
		||||
**/.DS_Store
 | 
			
		||||
/log
 | 
			
		||||
/storage
 | 
			
		||||
/tmp
 | 
			
		||||
/public/pub
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								.run/Development Server (External).run.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
<component name="ProjectRunConfigurationManager">
 | 
			
		||||
  <configuration default="false" name="Development Server (External)" type="PhpLocalRunConfigurationType" factoryName="PHP Console" path="$PROJECT_DIR$/artisan" scriptParameters="serve --host 0.0.0.0 --port 8000">
 | 
			
		||||
    <method v="2" />
 | 
			
		||||
  </configuration>
 | 
			
		||||
</component>
 | 
			
		||||
							
								
								
									
										5
									
								
								.run/Development Server.run.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
<component name="ProjectRunConfigurationManager">
 | 
			
		||||
  <configuration default="false" name="Development Server" type="PhpLocalRunConfigurationType" factoryName="PHP Console" path="$PROJECT_DIR$/artisan" scriptParameters="serve">
 | 
			
		||||
    <method v="2" />
 | 
			
		||||
  </configuration>
 | 
			
		||||
</component>
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +1,3 @@
 | 
			
		|||
# diskfloppy.me
 | 
			
		||||
<img src="https://git.frzn.dev/RoscoeDaWah/wah.moe/raw/branch/master/assets/logo.svg" alt="" height="100" align="center"/>
 | 
			
		||||
<hr>
 | 
			
		||||
My personal website, developed using the Laravel framework
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,9 @@ class Handler extends ExceptionHandler
 | 
			
		|||
    public function register(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->reportable(function (Throwable $e) {
 | 
			
		||||
            //
 | 
			
		||||
            if (app()->bound('sentry')) {
 | 
			
		||||
                app('sentry')->captureException($e);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										15
									
								
								app/Helpers/LegacyHelper.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
if (!function_exists('isLegacy')) {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if the current hostname should return the legacy site
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    function isLegacy(): bool {
 | 
			
		||||
        return (
 | 
			
		||||
            request()->getHost() === "legacy.wah.moe" ||        // Accessed via legacy.wah.moe domain
 | 
			
		||||
            str_starts_with(request()->getHost(), "192.168") || // Accessed via local IP address
 | 
			
		||||
            !request()->hasHeader("Host")                  // Browser does not send Host header (e.g. NCSA MOSAIC)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								app/Http/Controllers/BookmarksController.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use App\Models\BookmarkSite;
 | 
			
		||||
use App\Models\BookmarkCategory;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
 | 
			
		||||
class BookmarksController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    public function show() : View {
 | 
			
		||||
        $categories = BookmarkCategory::with('sites')->get();
 | 
			
		||||
        return view('bookmarks', compact('categories'));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,37 +2,32 @@
 | 
			
		|||
 | 
			
		||||
namespace App\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use App\Models\GuestbookEntry;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use DB;
 | 
			
		||||
use Illuminate\Http\RedirectResponse;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\Validation\ValidationException;
 | 
			
		||||
use UAParser\Parser;
 | 
			
		||||
 | 
			
		||||
class GuestbookController extends Controller {
 | 
			
		||||
    public function guestbook() {
 | 
			
		||||
        return view('pages.guestbook');
 | 
			
		||||
    public function show(): View {
 | 
			
		||||
        $entries = GuestbookEntry::selectEntries();
 | 
			
		||||
        $parser = Parser::create();
 | 
			
		||||
 | 
			
		||||
        return view('guestbook')
 | 
			
		||||
            ->with('entries', $entries)
 | 
			
		||||
            ->with('parser', $parser);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function guestbookPost(Request $request) {
 | 
			
		||||
        $this->validate($request, [
 | 
			
		||||
            'name' => 'required',
 | 
			
		||||
            'message' => 'required'
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        $matching_bans = DB::select('SELECT reason FROM guestbook__bans WHERE ip_address = ?', array($request->ip()));
 | 
			
		||||
 | 
			
		||||
        if (!empty($matching_bans)) {
 | 
			
		||||
            return view('errors.guestbook-ipban')->with('reason', $matching_bans[0]->reason);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        DB::insert(
 | 
			
		||||
            'INSERT INTO guestbook__entries (name, timestamp, ip_address, agent, message) values (?, ?, ?, ?, ?)',
 | 
			
		||||
            [
 | 
			
		||||
                htmlspecialchars($request->get('name')),
 | 
			
		||||
                time(),
 | 
			
		||||
                $request->ip(),
 | 
			
		||||
                $request->userAgent(),
 | 
			
		||||
                htmlspecialchars($request->get('message'))
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new guestbook entry
 | 
			
		||||
     *
 | 
			
		||||
     * @param Request $request
 | 
			
		||||
     * @return RedirectResponse
 | 
			
		||||
     * @throws ValidationException
 | 
			
		||||
     */
 | 
			
		||||
    public function addEntry(Request $request): RedirectResponse {
 | 
			
		||||
        GuestbookEntry::insertGuestbookEntry($request);
 | 
			
		||||
        return back()->with('success', 'Entry submitted successfully!');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								app/Http/Controllers/HomeController.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\Config;
 | 
			
		||||
use Illuminate\Support\Facades\Http;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
use DateTime;
 | 
			
		||||
 | 
			
		||||
class HomeController extends Controller {
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns age based on birthday date and current date (GMT)
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    function returnAge(): int {
 | 
			
		||||
        date_default_timezone_set('Europe/London');
 | 
			
		||||
        $birthday = new DateTime("2005-06-07");
 | 
			
		||||
        $currentDate = DateTime::createFromFormat("Y-m-d", date("Y-m-d"));
 | 
			
		||||
        $age = $birthday->diff($currentDate);
 | 
			
		||||
        return $age->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows home page
 | 
			
		||||
     * @return View
 | 
			
		||||
     */
 | 
			
		||||
    public function show(): View {
 | 
			
		||||
        return view('home', [
 | 
			
		||||
            'age' => $this->returnAge(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								app/Http/Controllers/MusicController.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\Config;
 | 
			
		||||
use Illuminate\Support\Facades\Http;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
 | 
			
		||||
class MusicController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    public function getCurrentTrack() {
 | 
			
		||||
        // If it's already cached just return that
 | 
			
		||||
        if (Cache::has('current_track')) {
 | 
			
		||||
            return Cache::get('current_track');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $response = Http::withQueryParameters([
 | 
			
		||||
            'method' => 'user.getrecenttracks',
 | 
			
		||||
            'user' => Config::get('services.lastfm.user'),
 | 
			
		||||
            'format' => 'json',
 | 
			
		||||
            'nowplaying' => 'true',
 | 
			
		||||
            'api_key' => Config::get('services.lastfm.key')
 | 
			
		||||
        ])->get('https://ws.audioscrobbler.com/2.0/');
 | 
			
		||||
        $data = $response->json();
 | 
			
		||||
        $track_data = $data["recenttracks"]["track"][0];
 | 
			
		||||
        // $image = array_column($track_data["image"], null, 'size')['large'] ?? false;
 | 
			
		||||
        $image = end($track_data["image"]) ?? false;
 | 
			
		||||
        $now_playing = false;
 | 
			
		||||
        if (array_key_exists("@attr", $track_data)) {
 | 
			
		||||
            $now_playing = $track_data["@attr"]["nowplaying"] == "true" ?? ["url"=>null];
 | 
			
		||||
        }
 | 
			
		||||
        $current_track = [
 | 
			
		||||
            'title' => $track_data["name"],
 | 
			
		||||
            'artist' => $track_data["artist"]["#text"],
 | 
			
		||||
            'url' => $track_data["url"],
 | 
			
		||||
            'image' => $image["#text"],
 | 
			
		||||
            'header' => $now_playing ? "Now Playing" : "Last Track",
 | 
			
		||||
        ];
 | 
			
		||||
        Cache::put('current_track', $current_track, now()->addSeconds(15));
 | 
			
		||||
        return $current_track;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTopTracks() {
 | 
			
		||||
        // If it's already cached just return that
 | 
			
		||||
        if (Cache::has('top_tracks')) {
 | 
			
		||||
            return Cache::get('top_tracks');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $response = Http::withQueryParameters([
 | 
			
		||||
            'method' => 'user.gettoptracks',
 | 
			
		||||
            'user' => Config::get('services.lastfm.user'),
 | 
			
		||||
            'format' => 'json',
 | 
			
		||||
            'period' => '1month',
 | 
			
		||||
            'limit' => 10,
 | 
			
		||||
            'api_key' => Config::get('services.lastfm.key')
 | 
			
		||||
        ])->get('https://ws.audioscrobbler.com/2.0/');
 | 
			
		||||
        $data = $response->json();
 | 
			
		||||
        $topTracks = [];
 | 
			
		||||
        foreach ($data["toptracks"]["track"] as $track) {
 | 
			
		||||
            $topTracks[] = [
 | 
			
		||||
                'title' => $track["name"],
 | 
			
		||||
                'artist' => $track["artist"]["name"],
 | 
			
		||||
                'url' => $track["url"],
 | 
			
		||||
                'plays' => $track["playcount"],
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
        Cache::put('top_tracks', $topTracks, now()->addSeconds(15));
 | 
			
		||||
        return $topTracks;
 | 
			
		||||
    }
 | 
			
		||||
    public function show() : View {
 | 
			
		||||
        return view('music')
 | 
			
		||||
            ->with('current_track', $this->getCurrentTrack())
 | 
			
		||||
            ->with('top_tracks', $this->getTopTracks());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								app/Http/Controllers/RoscoLekoController.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\File;
 | 
			
		||||
use Illuminate\View\View;
 | 
			
		||||
 | 
			
		||||
class RoscoLekoController extends Controller {
 | 
			
		||||
    public function getImages(): array {
 | 
			
		||||
        $images = [];
 | 
			
		||||
        $path = 'images/pandamonium';
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            $path = 'images/pandamonium-legacy';
 | 
			
		||||
        }
 | 
			
		||||
        foreach (File::glob(public_path($path).'/*') as $path) {
 | 
			
		||||
            $image_data = [];
 | 
			
		||||
            try {
 | 
			
		||||
                $exif = exif_read_data($path);
 | 
			
		||||
            } catch (Exception $ex) {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            $image_data["path"] = str_replace(public_path(), '', $path);
 | 
			
		||||
            if (isset($exif)) {
 | 
			
		||||
                if (isset($exif["ImageDescription"])) {
 | 
			
		||||
                    $image_data["description"] = $exif["ImageDescription"];
 | 
			
		||||
                }
 | 
			
		||||
                if (isset($exif["DateTime"])) {
 | 
			
		||||
                    $image_data["date"] = strtotime($exif["DateTime"]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            array_push($images, $image_data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        usort($images, function ($a, $b) {
 | 
			
		||||
            $dateA = $a['date'] ?? PHP_INT_MIN;
 | 
			
		||||
            $dateB = $b['date'] ?? PHP_INT_MIN;
 | 
			
		||||
            return $dateB <=> $dateA;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return $images;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows the page
 | 
			
		||||
     * @return View
 | 
			
		||||
     */
 | 
			
		||||
    public function show(): View {
 | 
			
		||||
        return view('pandamonium', [
 | 
			
		||||
            'images' => $this->getImages(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -47,6 +47,7 @@ class Kernel extends HttpKernel
 | 
			
		|||
 | 
			
		||||
    protected $routeMiddleware = [
 | 
			
		||||
        'rate_limit' => \App\Http\Middleware\RateLimiter::class,
 | 
			
		||||
        'validator' => \App\Http\Middleware\GuestbookValidate::class,
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,6 @@ class EncryptCookies extends Middleware
 | 
			
		|||
     * @var array<int, string>
 | 
			
		||||
     */
 | 
			
		||||
    protected $except = [
 | 
			
		||||
        //
 | 
			
		||||
        "colorscheme"
 | 
			
		||||
    ];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										37
									
								
								app/Http/Middleware/GuestbookValidate.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Response;
 | 
			
		||||
 | 
			
		||||
class GuestbookValidate
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle an incoming request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
 | 
			
		||||
     */
 | 
			
		||||
    public function handle(Request $request, Closure $next): Response
 | 
			
		||||
    {
 | 
			
		||||
        if (
 | 
			
		||||
            !$request->validate([
 | 
			
		||||
                'name' => 'required',
 | 
			
		||||
                'message' => 'required'
 | 
			
		||||
            ]) ||
 | 
			
		||||
            $this->containsUrl($request->get('message')) ||
 | 
			
		||||
            $this->containsUrl($request->get('name'))
 | 
			
		||||
        ) {
 | 
			
		||||
            return response()->view('errors.guestbook-invalid', [], 400);
 | 
			
		||||
        }
 | 
			
		||||
        return $next($request);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function containsUrl($str) {
 | 
			
		||||
        $matches = [];
 | 
			
		||||
        $pattern = '/\b(?:https?|ftp|www)(:\/\/)*[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
 | 
			
		||||
        preg_match_all($pattern, $str, $matches);
 | 
			
		||||
        return count($matches[0]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,9 @@ class RateLimiter
 | 
			
		|||
     */
 | 
			
		||||
    public function handle(Request $request, Closure $next): Response
 | 
			
		||||
    {
 | 
			
		||||
        if (auth()->check()) {
 | 
			
		||||
            return $next($request);
 | 
			
		||||
        }
 | 
			
		||||
        $ipAddress = $request->ip();
 | 
			
		||||
        $cacheKey = 'rate_limit_'.$ipAddress;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								app/Models/BookmarkCategory.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Models;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
 | 
			
		||||
class BookmarkCategory extends Model
 | 
			
		||||
{
 | 
			
		||||
    use HasFactory;
 | 
			
		||||
    protected $table = "bookmark__categories";
 | 
			
		||||
    protected $fillable = ['name'];
 | 
			
		||||
 | 
			
		||||
    public function sites() {
 | 
			
		||||
        return $this->hasMany(BookmarkSite::class, 'category');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function insertBookmarkCategory(string $name) {
 | 
			
		||||
        $newBookmarkCategory = new BookmarkCategory;
 | 
			
		||||
        $newBookmarkCategory->name = $name;
 | 
			
		||||
        $newBookmarkCategory->save();
 | 
			
		||||
    }
 | 
			
		||||
    public static function selectBookmarks(int $id) {
 | 
			
		||||
        $bookmarks = BookmarkSite::where('category', '=', $id)->firstOrFail();
 | 
			
		||||
        return $bookmarks;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function importBookmarkCategory(array $data) {
 | 
			
		||||
        foreach ($data as $category) {
 | 
			
		||||
            $newBookmarkCategory = new BookmarkCategory;
 | 
			
		||||
            $newBookmarkCategory->name = $category['name'];
 | 
			
		||||
            $newBookmarkCategory->priority = intval($category['priority']);
 | 
			
		||||
            $newBookmarkCategory->save();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								app/Models/BookmarkSite.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Models;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
 | 
			
		||||
class BookmarkSite extends Model {
 | 
			
		||||
    use HasFactory;
 | 
			
		||||
    protected $table = "bookmark__sites";
 | 
			
		||||
    protected $fillable = ['name', 'description', 'url', 'category'];
 | 
			
		||||
 | 
			
		||||
    public function category() {
 | 
			
		||||
        return $this->belongsTo(BookmarkCategory::class, 'category');
 | 
			
		||||
    }
 | 
			
		||||
    public static function insertBookmark(string $name, string $url, int $category) {
 | 
			
		||||
        $category = BookmarkCategory::where('id', $category)->firstOrFail();
 | 
			
		||||
        $newBookmark = new BookmarkSite;
 | 
			
		||||
        $newBookmark->name = $name;
 | 
			
		||||
        $newBookmark->url = $url;
 | 
			
		||||
        $newBookmark->category = $category->id;
 | 
			
		||||
        $newBookmark->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function importBookmark(array $data) {
 | 
			
		||||
        foreach ($data as $site) {
 | 
			
		||||
            $newBookmark = new BookmarkSite;
 | 
			
		||||
            $newBookmark->name = $site['name'];
 | 
			
		||||
            $newBookmark->description = $site['description'];
 | 
			
		||||
            $newBookmark->url = $site['url'];
 | 
			
		||||
            $newBookmark->category = $site['category_id'];
 | 
			
		||||
            $newBookmark->save();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								app/Models/GuestbookEntry.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Models;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
 | 
			
		||||
class GuestbookEntry extends Model
 | 
			
		||||
{
 | 
			
		||||
    use HasFactory;
 | 
			
		||||
    protected $table = "guestbook__entries";
 | 
			
		||||
    protected $fillable = ['name', 'message'];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new guestbook entry.
 | 
			
		||||
     *
 | 
			
		||||
     * @param Request $request The HTTP POST request
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function insertGuestbookEntry(Request $request) {
 | 
			
		||||
        $newEntry = new GuestbookEntry;
 | 
			
		||||
        $newEntry->name = $request->get('name');
 | 
			
		||||
        $newEntry->message = $request->get('message');
 | 
			
		||||
        $newEntry->ip = $request->ip();
 | 
			
		||||
        $newEntry->agent = $request->userAgent();
 | 
			
		||||
        $newEntry->legacy_flagged = isLegacy();
 | 
			
		||||
        $newEntry->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function selectEntries() {
 | 
			
		||||
        $entries = GuestbookEntry::where("legacy_flagged", false)->orderBy('created_at', 'desc')->get();
 | 
			
		||||
        return $entries;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function importGuestbookEntry(array $data) {
 | 
			
		||||
        foreach ($data as $entry) {
 | 
			
		||||
            $dt = new \DateTime('@' . $entry['timestamp']);
 | 
			
		||||
            $newEntry = new GuestbookEntry;
 | 
			
		||||
            $newEntry->name = $entry['name'];
 | 
			
		||||
            $newEntry->ip = $entry['ip_address'];
 | 
			
		||||
            $newEntry->agent = $entry['agent'];
 | 
			
		||||
            $newEntry->admin = $entry['site_owner'];
 | 
			
		||||
            $newEntry->message = $entry['message'];
 | 
			
		||||
            $newEntry->created_at = $dt;
 | 
			
		||||
            $newEntry->updated_at = $dt;
 | 
			
		||||
            $newEntry->save();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,45 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Models;
 | 
			
		||||
 | 
			
		||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Foundation\Auth\User as Authenticatable;
 | 
			
		||||
use Illuminate\Notifications\Notifiable;
 | 
			
		||||
use Laravel\Sanctum\HasApiTokens;
 | 
			
		||||
 | 
			
		||||
class User extends Authenticatable
 | 
			
		||||
{
 | 
			
		||||
    use HasApiTokens, HasFactory, Notifiable;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The attributes that are mass assignable.
 | 
			
		||||
     *
 | 
			
		||||
     * @var array<int, string>
 | 
			
		||||
     */
 | 
			
		||||
    protected $fillable = [
 | 
			
		||||
        'name',
 | 
			
		||||
        'email',
 | 
			
		||||
        'password',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The attributes that should be hidden for serialization.
 | 
			
		||||
     *
 | 
			
		||||
     * @var array<int, string>
 | 
			
		||||
     */
 | 
			
		||||
    protected $hidden = [
 | 
			
		||||
        'password',
 | 
			
		||||
        'remember_token',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The attributes that should be cast.
 | 
			
		||||
     *
 | 
			
		||||
     * @var array<string, string>
 | 
			
		||||
     */
 | 
			
		||||
    protected $casts = [
 | 
			
		||||
        'email_verified_at' => 'datetime',
 | 
			
		||||
        'password' => 'hashed',
 | 
			
		||||
    ];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,23 +2,20 @@
 | 
			
		|||
 | 
			
		||||
namespace App\Providers;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Config;
 | 
			
		||||
use Illuminate\Support\ServiceProvider;
 | 
			
		||||
use PostHog\PostHog;
 | 
			
		||||
 | 
			
		||||
class AppServiceProvider extends ServiceProvider
 | 
			
		||||
{
 | 
			
		||||
class AppServiceProvider extends ServiceProvider {
 | 
			
		||||
    /**
 | 
			
		||||
     * Register any application services.
 | 
			
		||||
     */
 | 
			
		||||
    public function register(): void
 | 
			
		||||
    {
 | 
			
		||||
    public function register(): void {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Bootstrap any application services.
 | 
			
		||||
     */
 | 
			
		||||
    public function boot(): void
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
    public function boot(): void {}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								app/View/Components/LastFMCurrent.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class LastFMCurrent extends Component {
 | 
			
		||||
    public $track;
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($track) {
 | 
			
		||||
        $this->track = $track;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.lastfm-current');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								app/View/Components/LastFMTop.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class LastFMTop extends Component {
 | 
			
		||||
    public $tracks;
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($tracks) {
 | 
			
		||||
        $this->tracks = $tracks;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.lastfm-top');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								app/View/Components/LastFMTrack.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class LastFMTrack extends Component {
 | 
			
		||||
    public $track;
 | 
			
		||||
    public $count;
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($track, $count) {
 | 
			
		||||
        $this->track = $track;
 | 
			
		||||
        $this->count = $count;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.lastfm-track');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								app/View/Components/Layout.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use DateTime;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class Layout extends Component {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct() {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            return view('components.layout-legacy', [
 | 
			
		||||
                'isChristmas' => $this->isItChristmas()
 | 
			
		||||
            ]);
 | 
			
		||||
        } else {
 | 
			
		||||
            return view('components.layout', [
 | 
			
		||||
                'isChristmas' => $this->isItChristmas()
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isItChristmas() : bool {
 | 
			
		||||
        $currentDate = new DateTime();
 | 
			
		||||
        $currentYear = intval($currentDate->format('Y'));
 | 
			
		||||
 | 
			
		||||
        $startDate = new DateTime("$currentYear-11-10");
 | 
			
		||||
        $endDate = new DateTime(($currentYear + 1) . "-01-01");
 | 
			
		||||
 | 
			
		||||
        return $currentDate >= $startDate && $currentDate < $endDate;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								app/View/Components/Navbar.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class Navbar extends Component {
 | 
			
		||||
    public $title;
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($title) {
 | 
			
		||||
        $this->title = $title;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.navigation');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								app/View/Components/Wah.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\View\Components;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Contracts\View\View;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\Config;
 | 
			
		||||
use Illuminate\Support\Facades\Http;
 | 
			
		||||
use Illuminate\View\Component;
 | 
			
		||||
 | 
			
		||||
class Wah extends Component {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new component instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct() {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function getWah(): string {
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            try {
 | 
			
		||||
                $response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
 | 
			
		||||
                $data = $response->json();
 | 
			
		||||
                if ($data == null) return "";
 | 
			
		||||
                $path = parse_url("https://api.tinyfox.dev" . $data["loc"], PHP_URL_PATH);
 | 
			
		||||
                return "//".request()->getHttpHost()."/proxy/wah/".basename($path);
 | 
			
		||||
            } catch (Exception $ex) {
 | 
			
		||||
                return "";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            $response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
 | 
			
		||||
            $data = $response->json();
 | 
			
		||||
            if ($data == null) return "";
 | 
			
		||||
            return "https://api.tinyfox.dev" . $data["loc"];
 | 
			
		||||
 | 
			
		||||
        } catch (Exception $ex) {
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.wah', [
 | 
			
		||||
            'wah' => $this->getWah(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								assets/logo.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 1893 339" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,0,-420.871)">
 | 
			
		||||
        <g id="Artboard2" transform="matrix(0.73917,0,0,0.235401,0,420.871)">
 | 
			
		||||
            <rect x="0" y="0" width="2560" height="1440" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(1.62833,0,0,5.11304,-84.1879,-2332.06)">
 | 
			
		||||
                <g transform="matrix(0.9823,0.187314,-0.187314,0.9823,115.768,-33.3744)">
 | 
			
		||||
                    <path d="M326.769,715.888C330.602,715.888 334.435,713.529 335.909,711.76C377.188,663.11 403.135,488.853 403.135,488.263C403.135,483.545 401.071,479.418 395.764,478.238L343.281,467.918C342.101,467.624 340.922,467.624 339.742,467.624C336.204,467.624 334.14,469.098 332.961,472.931C329.717,484.135 308.783,589.987 302.001,607.383C300.822,610.921 299.643,612.395 298.463,612.395C297.284,612.395 296.104,610.921 295.515,607.972L273.991,526.594C272.516,522.466 268.388,519.222 262.491,519.222L261.607,519.222L223.276,521.581C214.136,522.171 210.303,526.299 210.008,530.427C204.111,614.754 202.047,615.344 198.509,615.344C197.329,615.344 196.15,614.164 195.265,612.1L138.949,482.661C138.064,480.597 135.116,477.648 130.398,477.648C129.219,477.648 128.039,477.943 126.86,478.238L70.249,497.993C67.3,498.878 65.826,502.416 65.826,505.954C65.826,507.134 66.121,508.608 66.711,509.787L159.883,718.836C161.063,721.49 165.191,724.144 170.203,724.144L171.088,724.144L214.431,721.785C222.687,721.785 229.173,718.836 249.518,644.239L273.106,712.939C273.991,715.593 278.413,718.247 283.426,718.247L284.31,718.247L326.769,715.888Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:7.06px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.996964,-0.077866,0.077866,0.996964,-83.3213,42.4174)">
 | 
			
		||||
                    <path d="M650.81,701.735C653.758,700.556 655.233,697.312 655.233,694.364C655.233,692.889 654.643,691.12 654.053,689.941L551.74,481.776C550.561,479.123 545.548,476.174 539.356,476.174L496.603,476.174C492.18,476.174 487.757,478.238 485.988,479.712C437.928,524.53 387.508,690.236 387.508,699.376C387.508,703.799 389.867,707.337 395.469,709.106L440.581,722.08C442.35,722.669 443.825,722.964 445.299,722.964C448.837,722.964 451.196,720.9 452.67,717.362C453.555,714.708 457.683,703.799 463.285,689.646L517.832,692.3L518.422,692.3C522.255,692.3 525.203,689.056 525.498,685.518L529.036,632.74L529.036,632.15C529.036,628.317 526.088,625.074 522.255,625.074L488.642,623.305C507.218,576.423 510.461,568.168 512.82,568.168C513.704,568.168 514.589,569.052 515.473,571.116L580.93,717.952C581.815,720.016 585.353,722.669 590.071,722.669C591.545,722.669 593.314,722.375 594.788,721.785L650.81,701.735Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:7.06px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.997179,0.0750623,-0.0750623,0.997179,-50.4766,-58.4735)">
 | 
			
		||||
                    <path d="M899.664,721.785C903.497,721.785 906.74,718.836 907.035,715.003L919.124,485.02C919.124,481.187 916.175,477.648 912.342,477.648L853.077,474.405L852.488,474.405C848.655,474.405 845.706,477.648 845.411,481.187L841.283,560.502L778.48,557.258L777.89,557.258C774.352,557.258 771.109,560.502 770.814,564.04L768.455,615.639L768.455,616.228C768.455,619.767 771.404,623.01 775.237,623.305L838.04,626.253L833.322,711.17C833.322,715.003 836.271,718.247 840.104,718.541L899.664,721.785ZM750.764,720.311C754.597,720.311 757.841,717.067 757.841,713.234L757.841,482.956C757.841,479.123 754.597,475.879 750.764,475.879L690.909,475.879C687.076,475.879 683.833,479.123 683.833,482.956L683.833,713.234C683.833,717.067 687.076,720.311 690.909,720.311L750.764,720.311Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:7.06px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.991478,-0.130275,0.130275,0.991478,-201.194,134.945)">
 | 
			
		||||
                    <path d="M1022.32,629.497C1025.86,629.497 1028.22,626.843 1028.81,623.305C1033.53,596.178 1038.24,558.732 1038.24,523.94C1038.24,477.059 1033.82,476.174 1028.51,476.174L965.415,476.174C961.877,476.174 959.518,479.123 959.518,482.366C959.813,523.055 964.236,597.063 966.005,623.305C966.3,626.843 968.954,629.497 972.492,629.497L1022.32,629.497ZM996.67,726.208C1019.67,726.208 1038.54,707.337 1038.54,684.044C1038.54,660.751 1019.67,641.88 996.67,641.88C973.376,641.88 954.506,660.751 954.506,684.044C954.506,707.337 973.376,726.208 996.67,726.208Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:7.06px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1.08899,0,0,3.41949,182.218,-900.313)">
 | 
			
		||||
                <path d="M1220.95,663.011C1221.88,662.394 1222.96,661.778 1222.96,660.544C1222.96,659.928 1222.65,659.157 1221.88,658.232C1212.94,647.902 1197.06,623.541 1197.06,593.784C1197.06,565.415 1212.01,541.055 1221.26,530.108C1222.34,528.874 1222.65,527.949 1222.65,527.024C1222.65,525.945 1221.88,525.174 1220.8,524.403L1216.64,522.09C1216.02,521.782 1215.4,521.474 1214.94,521.474C1213.4,521.474 1212.16,522.553 1211.24,523.632C1202.45,533.5 1183.8,557.089 1183.8,593.784C1183.8,631.096 1203.22,654.84 1211.7,664.399C1212.78,665.632 1213.71,666.095 1214.63,666.095C1215.25,666.095 1215.71,665.941 1216.33,665.632L1220.95,663.011Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                <g transform="matrix(0.990492,-0.137573,0.137573,0.990492,-69.4464,184.165)">
 | 
			
		||||
                    <path d="M1242.85,649.597C1243.15,655.456 1246.09,657.923 1251.17,659.157C1252.25,659.311 1253.49,659.465 1254.72,659.773C1261.96,661.007 1269.21,661.624 1276.3,661.624C1320.09,661.624 1358.33,637.726 1358.33,594.093C1358.33,585.459 1356.79,575.899 1353.39,565.569C1344.61,538.588 1317.32,527.333 1291.26,527.333C1282.16,527.333 1273.07,528.72 1265.05,531.341L1240.38,532.729C1238.38,532.729 1236.83,534.579 1236.83,536.583L1242.85,649.597ZM1276.92,561.561C1280.47,560.635 1284.32,560.019 1288.02,560.019C1316.55,560.019 1316.7,590.546 1316.7,593.168C1316.7,612.748 1301.9,625.545 1284.01,625.545C1282.78,625.545 1281.55,625.545 1280.31,625.391L1276.92,561.561Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.999241,0.0389517,-0.0389517,0.999241,24.2226,-55.6835)">
 | 
			
		||||
                    <path d="M1510.66,593.63C1510.66,567.882 1492.16,527.178 1442.82,527.178C1415.68,527.178 1386.39,540.13 1376.37,568.961C1373.13,578.52 1371.59,587.617 1371.59,596.097C1371.59,634.488 1402.42,660.39 1437.58,660.39C1468.88,660.39 1510.66,636.03 1510.66,593.63ZM1442.82,626.316C1426.94,626.316 1412.14,613.057 1412.14,593.476C1412.14,579.445 1419.85,560.327 1442.2,560.327C1463.63,560.327 1471.81,578.212 1471.81,593.476C1471.81,610.898 1461.17,626.316 1442.82,626.316Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.998795,-0.0490748,0.0490748,0.998795,-27.2616,77.677)">
 | 
			
		||||
                    <path d="M1590.68,657.769C1592.53,657.615 1594.22,656.073 1594.22,654.069L1594.22,653.915L1589.6,565.723L1613.96,564.49C1616.12,564.336 1617.66,562.486 1617.66,560.481L1616.27,532.266C1616.27,530.108 1614.27,528.566 1612.26,528.566L1551.21,531.804L1522.38,533.346C1520.37,533.5 1518.83,535.042 1518.83,536.892L1518.83,537.2L1520.22,565.723C1520.22,567.728 1522.07,569.27 1524.23,569.27L1549.51,567.882L1554.14,655.919C1554.14,657.769 1555.68,659.465 1557.68,659.465L1557.99,659.465L1590.68,657.769Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.993146,-0.116878,0.116878,0.993146,-57.3371,210.711)">
 | 
			
		||||
                    <path d="M1834.28,659.157C1836.6,659.157 1838.29,656.844 1838.44,654.685L1843.69,535.196L1843.69,534.887C1843.69,533.191 1842.76,531.033 1839.83,530.879L1809.15,529.337L1808.84,529.337C1806.68,529.337 1804.22,530.57 1803.6,531.341C1796.05,540.284 1781.55,562.948 1768.91,584.688C1768.6,585.15 1768.45,585.459 1768.14,585.459C1767.83,585.459 1767.68,585.304 1767.37,584.842C1754.73,563.102 1740.23,540.284 1732.68,531.341C1732.06,530.57 1728.98,529.337 1726.82,529.337L1726.51,529.337L1696.14,531.033C1693.21,531.341 1692.28,533.654 1692.28,535.35L1698.3,654.685C1698.3,656.844 1699.99,659.157 1702.46,659.157L1702.61,659.157L1732.22,656.69C1735.61,656.381 1737.77,653.144 1737.77,651.448L1737.77,651.293L1730.83,585.767L1730.83,584.688C1730.83,583.763 1730.98,583.146 1731.29,583.146C1731.75,583.146 1732.22,583.608 1732.83,584.379C1735.76,588.388 1747.02,611.515 1754.73,625.7C1755.65,627.55 1757.19,629.862 1759.97,629.862L1775.85,629.246C1779.24,629.092 1780.94,626.933 1781.55,625.7C1789.11,611.515 1800.36,587.463 1803.14,583.608C1803.76,582.837 1804.22,582.375 1804.53,582.375C1804.99,582.375 1805.14,582.992 1805.14,584.071L1805.14,584.842L1797.9,651.448L1797.9,651.602C1797.9,653.298 1799.44,656.69 1802.83,656.844L1834.13,659.157L1834.28,659.157Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.994193,0.107609,-0.107609,0.994193,75.0929,-204.041)">
 | 
			
		||||
                    <path d="M1997.71,593.63C1997.71,567.882 1979.21,527.178 1929.87,527.178C1902.74,527.178 1873.44,540.13 1863.42,568.961C1860.18,578.52 1858.64,587.617 1858.64,596.097C1858.64,634.488 1889.48,660.39 1924.63,660.39C1955.93,660.39 1997.71,636.03 1997.71,593.63ZM1929.87,626.316C1913.99,626.316 1899.19,613.057 1899.19,593.476C1899.19,579.445 1906.9,560.327 1929.26,560.327C1950.69,560.327 1958.86,578.212 1958.86,593.476C1958.86,610.898 1948.22,626.316 1929.87,626.316Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.99192,-0.126865,0.126865,0.99192,-58.7652,265.507)">
 | 
			
		||||
                    <path d="M2093.61,655.919C2095.77,655.765 2097.31,653.915 2097.31,651.91L2096.24,625.083C2096.24,623.233 2094.54,621.537 2092.53,621.537L2092.23,621.537L2054.76,623.541L2053.99,609.202L2079.58,609.202C2081.74,609.202 2083.28,607.506 2083.44,605.348L2083.75,581.758L2083.75,581.45C2083.75,579.445 2081.9,577.904 2080.05,577.904L2052.45,577.904L2051.68,564.644L2087.6,562.794C2089.45,562.64 2091.15,560.944 2091.15,559.094L2091.15,558.785L2089.91,531.958C2089.76,530.108 2088.06,528.412 2086.21,528.412L2085.91,528.412L2044.89,530.57L2044.28,530.57L2016.22,532.112C2014.37,532.112 2012.67,533.808 2012.67,535.658L2012.67,535.967L2018.99,656.227C2019.14,658.077 2020.69,659.773 2022.54,659.773L2022.85,659.773L2052.91,658.232C2053.06,658.232 2053.37,658.077 2053.53,658.077L2093.61,655.919Z" style="fill:rgb(223,80,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <path d="M2115.35,665.632C2115.97,665.941 2116.43,666.095 2117.05,666.095C2117.97,666.095 2118.9,665.632 2119.98,664.399C2128.46,654.84 2147.89,631.096 2147.89,593.784C2147.89,557.089 2129.23,533.5 2120.44,523.632C2119.52,522.553 2118.28,521.474 2116.74,521.474C2116.28,521.474 2115.66,521.782 2115.05,522.09L2110.88,524.403C2109.8,525.174 2109.03,525.945 2109.03,527.024C2109.03,527.949 2109.34,528.874 2110.42,530.108C2119.67,541.055 2134.63,565.415 2134.63,593.784C2134.63,623.541 2118.74,647.902 2109.8,658.232C2109.03,659.157 2108.72,659.928 2108.72,660.544C2108.72,661.778 2109.8,662.394 2110.73,663.011L2115.35,665.632Z" style="fill:rgb(255,152,0);fill-rule:nonzero;stroke:rgb(249,247,204);stroke-width:5.59px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 12 KiB  | 
| 
						 | 
				
			
			@ -1,18 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
    "name": "floppydisk05/diskfloppy.me",
 | 
			
		||||
    "name": "roscoedawah/wah.moe",
 | 
			
		||||
    "type": "project",
 | 
			
		||||
    "description": "My personal website, developed using the Laravel framework.",
 | 
			
		||||
    "keywords": ["laravel", "framework"],
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": "^8.1",
 | 
			
		||||
        "auth0/login": "^7.8",
 | 
			
		||||
        "ext-exif": "*",
 | 
			
		||||
        "browner12/helpers": "^3.7",
 | 
			
		||||
        "guzzlehttp/guzzle": "^7.2",
 | 
			
		||||
        "intervention/image": "^3.9",
 | 
			
		||||
        "laravel/framework": "^10.10",
 | 
			
		||||
        "laravel/sanctum": "^3.2",
 | 
			
		||||
        "laravel/tinker": "^2.8",
 | 
			
		||||
        "scrivo/highlight.php": "v9.18.1.10",
 | 
			
		||||
        "spatie/laravel-honeypot": "^4.3"
 | 
			
		||||
        "spatie/laravel-honeypot": "^4.3",
 | 
			
		||||
        "spatie/laravel-html": "^3.4",
 | 
			
		||||
        "ua-parser/uap-php": "^3.9.14"
 | 
			
		||||
    },
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        "fakerphp/faker": "^1.9.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3949
									
								
								composer.lock
									
										
									
										generated
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -4,12 +4,11 @@
 | 
			
		|||
use Illuminate\Support\ServiceProvider;
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
    'name' => env('APP_NAME', 'diskfloppy.me'),
 | 
			
		||||
    'version' => '2023.08.26',
 | 
			
		||||
    'name' => env('APP_NAME', 'wah.moe'),
 | 
			
		||||
    'version' => '2025.08.30-patch2',
 | 
			
		||||
    'env' => env('APP_ENV', 'production'),
 | 
			
		||||
    'debug' => (bool) env('APP_DEBUG', false),
 | 
			
		||||
    'url' => env('APP_URL', 'http://localhost'),
 | 
			
		||||
    'api_root' => env('API_ROOT', 'http://localhost:3000'),
 | 
			
		||||
 | 
			
		||||
    'asset_url' => env('ASSET_URL'),
 | 
			
		||||
    'timezone' => 'UTC',
 | 
			
		||||
| 
						 | 
				
			
			@ -26,8 +25,8 @@
 | 
			
		|||
        App\Providers\AuthServiceProvider::class,
 | 
			
		||||
        App\Providers\EventServiceProvider::class,
 | 
			
		||||
        App\Providers\RouteServiceProvider::class,
 | 
			
		||||
        browner12\helpers\HelperServiceProvider::class
 | 
			
		||||
    ])->toArray(),
 | 
			
		||||
    'aliases' => Facade::defaultAliases()->merge([
 | 
			
		||||
        // 'Example' => App\Facades\Example::class,
 | 
			
		||||
    ])->toArray(),
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
use Auth0\Laravel\Configuration;
 | 
			
		||||
use Auth0\SDK\Configuration\SdkConfiguration;
 | 
			
		||||
 | 
			
		||||
return Configuration::VERSION_2 + [
 | 
			
		||||
    'registerGuards' => true,
 | 
			
		||||
    'registerMiddleware' => true,
 | 
			
		||||
    'registerAuthenticationRoutes' => true,
 | 
			
		||||
    'configurationPath' => null,
 | 
			
		||||
 | 
			
		||||
    'guards' => [
 | 
			
		||||
        'default' => [
 | 
			
		||||
            Configuration::CONFIG_STRATEGY => Configuration::get(Configuration::CONFIG_STRATEGY, SdkConfiguration::STRATEGY_NONE),
 | 
			
		||||
            Configuration::CONFIG_DOMAIN => Configuration::get(Configuration::CONFIG_DOMAIN),
 | 
			
		||||
            Configuration::CONFIG_CUSTOM_DOMAIN => Configuration::get(Configuration::CONFIG_CUSTOM_DOMAIN),
 | 
			
		||||
            Configuration::CONFIG_CLIENT_ID => Configuration::get(Configuration::CONFIG_CLIENT_ID),
 | 
			
		||||
            Configuration::CONFIG_CLIENT_SECRET => Configuration::get(Configuration::CONFIG_CLIENT_SECRET),
 | 
			
		||||
            Configuration::CONFIG_AUDIENCE => Configuration::get(Configuration::CONFIG_AUDIENCE),
 | 
			
		||||
            Configuration::CONFIG_ORGANIZATION => Configuration::get(Configuration::CONFIG_ORGANIZATION),
 | 
			
		||||
            Configuration::CONFIG_USE_PKCE => Configuration::get(Configuration::CONFIG_USE_PKCE),
 | 
			
		||||
            Configuration::CONFIG_SCOPE => Configuration::get(Configuration::CONFIG_SCOPE),
 | 
			
		||||
            Configuration::CONFIG_RESPONSE_MODE => Configuration::get(Configuration::CONFIG_RESPONSE_MODE),
 | 
			
		||||
            Configuration::CONFIG_RESPONSE_TYPE => Configuration::get(Configuration::CONFIG_RESPONSE_TYPE),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_ALGORITHM => Configuration::get(Configuration::CONFIG_TOKEN_ALGORITHM),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_JWKS_URI => Configuration::get(Configuration::CONFIG_TOKEN_JWKS_URI),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_MAX_AGE => Configuration::get(Configuration::CONFIG_TOKEN_MAX_AGE),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_LEEWAY => Configuration::get(Configuration::CONFIG_TOKEN_LEEWAY),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_CACHE => Configuration::get(Configuration::CONFIG_TOKEN_CACHE),
 | 
			
		||||
            Configuration::CONFIG_TOKEN_CACHE_TTL => Configuration::get(Configuration::CONFIG_TOKEN_CACHE_TTL),
 | 
			
		||||
            Configuration::CONFIG_HTTP_MAX_RETRIES => Configuration::get(Configuration::CONFIG_HTTP_MAX_RETRIES),
 | 
			
		||||
            Configuration::CONFIG_HTTP_TELEMETRY => Configuration::get(Configuration::CONFIG_HTTP_TELEMETRY),
 | 
			
		||||
            Configuration::CONFIG_MANAGEMENT_TOKEN => Configuration::get(Configuration::CONFIG_MANAGEMENT_TOKEN),
 | 
			
		||||
            Configuration::CONFIG_MANAGEMENT_TOKEN_CACHE => Configuration::get(Configuration::CONFIG_MANAGEMENT_TOKEN_CACHE),
 | 
			
		||||
            Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY),
 | 
			
		||||
            Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM),
 | 
			
		||||
            Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST => Configuration::get(Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST),
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
        'api' => [
 | 
			
		||||
            Configuration::CONFIG_STRATEGY => SdkConfiguration::STRATEGY_API,
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
        'web' => [
 | 
			
		||||
            Configuration::CONFIG_STRATEGY => SdkConfiguration::STRATEGY_REGULAR,
 | 
			
		||||
            Configuration::CONFIG_COOKIE_SECRET => Configuration::get(Configuration::CONFIG_COOKIE_SECRET, env('APP_KEY')),
 | 
			
		||||
            Configuration::CONFIG_REDIRECT_URI => Configuration::get(Configuration::CONFIG_REDIRECT_URI, env('APP_URL') . '/callback'),
 | 
			
		||||
            Configuration::CONFIG_SESSION_STORAGE => Configuration::get(Configuration::CONFIG_SESSION_STORAGE),
 | 
			
		||||
            Configuration::CONFIG_SESSION_STORAGE_ID => Configuration::get(Configuration::CONFIG_SESSION_STORAGE_ID),
 | 
			
		||||
            Configuration::CONFIG_TRANSIENT_STORAGE => Configuration::get(Configuration::CONFIG_TRANSIENT_STORAGE),
 | 
			
		||||
            Configuration::CONFIG_TRANSIENT_STORAGE_ID => Configuration::get(Configuration::CONFIG_TRANSIENT_STORAGE_ID),
 | 
			
		||||
        ],
 | 
			
		||||
    ],
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -1,117 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
    // Friends' Websites
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Friends' Websites",
 | 
			
		||||
        'bookmarks' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "nick99nack",
 | 
			
		||||
                'url' => "http://www.nick99nack.com/",
 | 
			
		||||
                'description' => "Currently in the process of taking over the internet. I Totally didn't steal any of his stuff."
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "campos",
 | 
			
		||||
                'url' => "https://campos02.me/",
 | 
			
		||||
                'description' => "Cool brazilian dude, does programming and stuff"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Sashi",
 | 
			
		||||
                'url' => "https://joshuaalto.com/",
 | 
			
		||||
                'description' => "Site redesign #8! I'll find a website style I enjoy eventually, I swear!"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "noone",
 | 
			
		||||
                'url' => "http://strangenessnetworks.com/",
 | 
			
		||||
                'description' => "Strangeness Networks, noone's website."
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "raf",
 | 
			
		||||
                'url' => "https://notashelf.dev/",
 | 
			
		||||
                'description' => "is a shelf"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "CamK06",
 | 
			
		||||
                'url' => "https://starman0620.neocities.org/",
 | 
			
		||||
                'description' => "Now with more outdated HTML!"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "HIDEN",
 | 
			
		||||
                'url' => "https://hiden.pw/",
 | 
			
		||||
                'description' => "Moar buttons!"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "coco",
 | 
			
		||||
                'url' => "http://cocomark.neocities.org/",
 | 
			
		||||
                'description' => "needs to go to the brain store"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Toxidation",
 | 
			
		||||
                'url' => "http://toxi.pw/",
 | 
			
		||||
                'description' => "h (idk if this is his actual domain he has like 5)"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "xproot",
 | 
			
		||||
                'url' => "http://xproot.pw/",
 | 
			
		||||
                'description' => "a random internet person on this very random planet"
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    // Cool Projects
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Cool Projects",
 | 
			
		||||
        'bookmarks' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "ToS;DR",
 | 
			
		||||
                'url' => "https://tosdr.org/",
 | 
			
		||||
                'description' => "\"I have read and agree to the Terms\" is the biggest lie on the web. They aim to fix that."
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "NINA",
 | 
			
		||||
                'url' => "https://nina.chat/",
 | 
			
		||||
                'description' => "Yahoo! Messenger (and soon AOL) revival"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Escargot",
 | 
			
		||||
                'url' => "https://escargot.chat/",
 | 
			
		||||
                'description' => "MSN/WLM revival"
 | 
			
		||||
            ],
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    // Other Cool Stuff
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Other Cool Stuff",
 | 
			
		||||
        'bookmarks' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "WinWorld",
 | 
			
		||||
                'url' => "http://www.winworldpc.com/",
 | 
			
		||||
                'description' => "WinWorld is an online museum dedicated to the preservation and sharing of vintage, abandoned, and pre-release software."
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "ToastyTech",
 | 
			
		||||
                'url' => "http://toastytech.com/",
 | 
			
		||||
                'description' => "Nathan's Toasty Technology Page"
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Optimized for no one",
 | 
			
		||||
                'url' => "http://www.hoary.org/browse/",
 | 
			
		||||
                'description' => "Optimized for no one, but pretty much OK with . . ."
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Cameron's World",
 | 
			
		||||
                'url' => "http://www.cameronsworld.net/",
 | 
			
		||||
                'description' => "A love letter to the Internet of old."
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    // Miscellaneous Resources
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Miscellaneous Resources",
 | 
			
		||||
        'bookmarks' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "Home Manager (Appendix A)",
 | 
			
		||||
                'url' => "https://rycee.gitlab.io/home-manager/options.html",
 | 
			
		||||
                'description' => "Useful list of configuration options for Home Manager."
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ]
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -1,71 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Websites",
 | 
			
		||||
        'projects' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "diskfloppy.me",
 | 
			
		||||
                'description' => "The website you're looking at right now!",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/diskfloppy.me",
 | 
			
		||||
                'languages' => ["PHP", "CSS"]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "NetDrivers",
 | 
			
		||||
                'description' => "Driver downloads website.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/NetDrivers",
 | 
			
		||||
                'languages' => ["Ruby", "CSS"]
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "APIs",
 | 
			
		||||
        'projects' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "trivia-api",
 | 
			
		||||
                'description' => "API to serve random trivia questions.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/trivia-api",
 | 
			
		||||
                'languages' => ["JavaScript"]
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Discord Bots",
 | 
			
		||||
        'projects' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "PlexBot",
 | 
			
		||||
                'description' => "A basic bot to play music from the configured Plex server in a Discord voice channel.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/PlexBot",
 | 
			
		||||
                'languages' => ["Python"]
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
        'name' => "Abandoned Projects",
 | 
			
		||||
        'projects' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "website-cf",
 | 
			
		||||
                'description' => "Rewrite of my personal website in Adobe ColdFusion.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/website-cf",
 | 
			
		||||
                'languages' => ["Adobe ColdFusion"]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "WinBotJDA",
 | 
			
		||||
                'description' => "Rewrite of CamK06's WinBot using Java and DiscordJDA.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/WinBotJDA",
 | 
			
		||||
                'languages' => ["Java"]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "delayed-eject",
 | 
			
		||||
                'description' => "Scripts which eject the cd drive a lot to annoy nick.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/delayed-eject",
 | 
			
		||||
                'languages' => ["Shell", "C"]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => "php-sound",
 | 
			
		||||
                'description' => "Plays a specified sound file or files on the web server when a php page is loaded.",
 | 
			
		||||
                'url' => "https://github.com/floppydisk05/php-sound",
 | 
			
		||||
                'languages' => ["PHP", "Shell"]
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ]
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -1,67 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
use Laravel\Sanctum\Sanctum;
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Stateful Domains
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | Requests from the following domains / hosts will receive stateful API
 | 
			
		||||
    | authentication cookies. Typically, these should include your local
 | 
			
		||||
    | and production domains which access your API via a frontend SPA.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
 | 
			
		||||
        '%s%s',
 | 
			
		||||
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
 | 
			
		||||
        Sanctum::currentApplicationUrlWithPort()
 | 
			
		||||
    ))),
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Sanctum Guards
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | This array contains the authentication guards that will be checked when
 | 
			
		||||
    | Sanctum is trying to authenticate a request. If none of these guards
 | 
			
		||||
    | are able to authenticate the request, Sanctum will use the bearer
 | 
			
		||||
    | token that's present on an incoming request for authentication.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'guard' => ['web'],
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Expiration Minutes
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | This value controls the number of minutes until an issued token will be
 | 
			
		||||
    | considered expired. If this value is null, personal access tokens do
 | 
			
		||||
    | not expire. This won't tweak the lifetime of first-party sessions.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'expiration' => null,
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Sanctum Middleware
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | When authenticating your first-party SPA with Sanctum you may need to
 | 
			
		||||
    | customize some of the middleware Sanctum uses while processing the
 | 
			
		||||
    | request. You may change the middleware listed below as required.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'middleware' => [
 | 
			
		||||
        'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
 | 
			
		||||
        'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,5 @@
 | 
			
		|||
    'lastfm' => [
 | 
			
		||||
        'key' => env('LASTFM_KEY'),
 | 
			
		||||
        'user' => env('LASTFM_USER'),
 | 
			
		||||
        'toptracks' => env('LASTFM_TOP_TRACKS')
 | 
			
		||||
    ]
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								database/factories/BookmarkCategoryFactory.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Database\Factories;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\Factory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkCategory>
 | 
			
		||||
 */
 | 
			
		||||
class BookmarkCategoryFactory extends Factory
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Define the model's default state.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array<string, mixed>
 | 
			
		||||
     */
 | 
			
		||||
    public function definition(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'name' => $this->faker->word,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								database/factories/BookmarkSiteFactory.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Database\Factories;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\Factory;
 | 
			
		||||
use App\Models\BookmarkCategory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkSite>
 | 
			
		||||
 */
 | 
			
		||||
class BookmarkSiteFactory extends Factory
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Define the model's default state.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array<string, mixed>
 | 
			
		||||
     */
 | 
			
		||||
    public function definition(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'name' => $this->faker->name,
 | 
			
		||||
            'description' => $this->faker->sentence,
 | 
			
		||||
            'url' => $this->faker->url,
 | 
			
		||||
            'category' => BookmarkCategory::factory(),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,28 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
return new class extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('password_reset_tokens', function (Blueprint $table) {
 | 
			
		||||
            $table->string('email')->primary();
 | 
			
		||||
            $table->string('token');
 | 
			
		||||
            $table->timestamp('created_at')->nullable();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::dropIfExists('password_reset_tokens');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
return new class extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('failed_jobs', function (Blueprint $table) {
 | 
			
		||||
            $table->id();
 | 
			
		||||
            $table->string('uuid')->unique();
 | 
			
		||||
            $table->text('connection');
 | 
			
		||||
            $table->text('queue');
 | 
			
		||||
            $table->longText('payload');
 | 
			
		||||
            $table->longText('exception');
 | 
			
		||||
            $table->timestamp('failed_at')->useCurrent();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::dropIfExists('failed_jobs');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -11,13 +11,10 @@
 | 
			
		|||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('users', function (Blueprint $table) {
 | 
			
		||||
        Schema::create('bookmark__categories', function (Blueprint $table) {
 | 
			
		||||
            $table->id();
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->string('email')->unique();
 | 
			
		||||
            $table->timestamp('email_verified_at')->nullable();
 | 
			
		||||
            $table->string('password');
 | 
			
		||||
            $table->rememberToken();
 | 
			
		||||
            $table->unsignedBigInteger('priority')->nullable();
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +24,6 @@ public function up(): void
 | 
			
		|||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::dropIfExists('users');
 | 
			
		||||
        Schema::dropIfExists('bookmark__categories');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
return new class extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('bookmark__sites', function (Blueprint $table) {
 | 
			
		||||
            $table->id();
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->text('description')->nullable();
 | 
			
		||||
            $table->string('url');
 | 
			
		||||
            $table->unsignedBigInteger('category');
 | 
			
		||||
            $table->foreign('category')
 | 
			
		||||
                ->references('id')
 | 
			
		||||
                ->on('bookmark__categories')
 | 
			
		||||
                ->onDelete('cascade');
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::dropIfExists('bookmarks');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -11,14 +11,13 @@
 | 
			
		|||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('personal_access_tokens', function (Blueprint $table) {
 | 
			
		||||
        Schema::create('guestbook__entries', function (Blueprint $table) {
 | 
			
		||||
            $table->id();
 | 
			
		||||
            $table->morphs('tokenable');
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->string('token', 64)->unique();
 | 
			
		||||
            $table->text('abilities')->nullable();
 | 
			
		||||
            $table->timestamp('last_used_at')->nullable();
 | 
			
		||||
            $table->timestamp('expires_at')->nullable();
 | 
			
		||||
            $table->string('ip');
 | 
			
		||||
            $table->string('agent');
 | 
			
		||||
            $table->longText('message');
 | 
			
		||||
            $table->boolean('admin');
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +27,6 @@ public function up(): void
 | 
			
		|||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::dropIfExists('personal_access_tokens');
 | 
			
		||||
        Schema::dropIfExists('guestbook__entries');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								database/seeders/BookmarkCategoriesTableSeeder.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Database\Seeders;
 | 
			
		||||
 | 
			
		||||
use App\Models\BookmarkCategory;
 | 
			
		||||
use App\Models\BookmarkSite;
 | 
			
		||||
use Illuminate\Database\Seeder;
 | 
			
		||||
 | 
			
		||||
class BookmarkCategoriesTableSeeder extends Seeder
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the database seeds.
 | 
			
		||||
     */
 | 
			
		||||
    public function run(): void {
 | 
			
		||||
//        BookmarkCategory::factory()->count(5)->create()->each(function ($category) {
 | 
			
		||||
//            $category->sites()->saveMany(BookmarkSite::factory()->count(3)->make());
 | 
			
		||||
//        });
 | 
			
		||||
        $category = new BookmarkCategory([
 | 
			
		||||
            'name' => 'cool people',
 | 
			
		||||
        ]);
 | 
			
		||||
        $category->save();
 | 
			
		||||
        $site = new BookmarkSite([
 | 
			
		||||
            'name' => 'campos',
 | 
			
		||||
            'description' => 'Cool brazilian dude, does programming and stuff',
 | 
			
		||||
            'url' => 'https://campos02.me/',
 | 
			
		||||
            'category' => 1,
 | 
			
		||||
        ]);
 | 
			
		||||
        $site->save();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,22 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Database\Seeders;
 | 
			
		||||
 | 
			
		||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 | 
			
		||||
use Illuminate\Database\Seeder;
 | 
			
		||||
 | 
			
		||||
class DatabaseSeeder extends Seeder
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Seed the application's database.
 | 
			
		||||
     */
 | 
			
		||||
    public function run(): void
 | 
			
		||||
    {
 | 
			
		||||
        // \App\Models\User::factory(10)->create();
 | 
			
		||||
 | 
			
		||||
        // \App\Models\User::factory()->create([
 | 
			
		||||
        //     'name' => 'Test User',
 | 
			
		||||
        //     'email' => 'test@example.com',
 | 
			
		||||
        // ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										881
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,881 @@
 | 
			
		|||
{
 | 
			
		||||
    "name": "wah.moe",
 | 
			
		||||
    "lockfileVersion": 3,
 | 
			
		||||
    "requires": true,
 | 
			
		||||
    "packages": {
 | 
			
		||||
        "": {
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/browser": "^7.40.0"
 | 
			
		||||
            },
 | 
			
		||||
            "devDependencies": {
 | 
			
		||||
                "axios": "^1.1.2",
 | 
			
		||||
                "laravel-vite-plugin": "^0.7.5",
 | 
			
		||||
                "vite": "^4.5.3"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/android-arm": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "android"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/android-arm64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "android"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/android-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "android"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/darwin-arm64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "darwin"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/darwin-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "darwin"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/freebsd-arm64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "freebsd"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/freebsd-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "freebsd"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-arm": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-arm64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-ia32": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "ia32"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-loong64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "loong64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-mips64el": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "mips64el"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-ppc64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "ppc64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-riscv64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "riscv64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-s390x": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "s390x"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/linux-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "linux"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/netbsd-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "netbsd"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/openbsd-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "openbsd"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/sunos-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "sunos"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/win32-arm64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "arm64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "win32"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/win32-ia32": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "ia32"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "win32"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@esbuild/win32-x64": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
 | 
			
		||||
            "cpu": [
 | 
			
		||||
                "x64"
 | 
			
		||||
            ],
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "win32"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry-internal/feedback": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-ewJJIQ0mbsOX6jfiVFvqMjokxNtgP3dNwUv+4nenN+iJJPQsM6a0ocro3iscxwVdbkjw5hY3BUV2ICI5Q0UWoA==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry-internal/replay-canvas": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-s5xy+bVL1eDZchM6gmaOiXvTqpAsUfO7122DxVdEDMtwVq3e22bS2aiGa8CUgOiJkulZ+09q73nufM77kOmT/A==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/replay": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry-internal/tracing": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/browser": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-i9vGcK9N8zZ/JQo1TCEfHHYZ2miidOvgOABRUc9zQKhYdcYQB2/LU1kqlj77Pxdxf4wOa9137d6rPrSn9iiBxg==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry-internal/feedback": "7.120.3",
 | 
			
		||||
                "@sentry-internal/replay-canvas": "7.120.3",
 | 
			
		||||
                "@sentry-internal/tracing": "7.120.3",
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/integrations": "7.120.3",
 | 
			
		||||
                "@sentry/replay": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/core": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/integrations": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3",
 | 
			
		||||
                "localforage": "^1.8.1"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/replay": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-CjVq1fP6bpDiX8VQxudD5MPWwatfXk8EJ2jQhJTcWu/4bCSOQmHxnnmBM+GVn5acKUBCodWHBN+IUZgnJheZSg==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry-internal/tracing": "7.120.3",
 | 
			
		||||
                "@sentry/core": "7.120.3",
 | 
			
		||||
                "@sentry/types": "7.120.3",
 | 
			
		||||
                "@sentry/utils": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/types": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@sentry/utils": {
 | 
			
		||||
            "version": "7.120.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz",
 | 
			
		||||
            "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@sentry/types": "7.120.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/asynckit": {
 | 
			
		||||
            "version": "0.4.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/axios": {
 | 
			
		||||
            "version": "1.7.9",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
 | 
			
		||||
            "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "follow-redirects": "^1.15.6",
 | 
			
		||||
                "form-data": "^4.0.0",
 | 
			
		||||
                "proxy-from-env": "^1.1.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/combined-stream": {
 | 
			
		||||
            "version": "1.0.8",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
			
		||||
            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "delayed-stream": "~1.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/delayed-stream": {
 | 
			
		||||
            "version": "1.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=0.4.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/esbuild": {
 | 
			
		||||
            "version": "0.18.20",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
 | 
			
		||||
            "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "hasInstallScript": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "esbuild": "bin/esbuild"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "optionalDependencies": {
 | 
			
		||||
                "@esbuild/android-arm": "0.18.20",
 | 
			
		||||
                "@esbuild/android-arm64": "0.18.20",
 | 
			
		||||
                "@esbuild/android-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/darwin-arm64": "0.18.20",
 | 
			
		||||
                "@esbuild/darwin-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/freebsd-arm64": "0.18.20",
 | 
			
		||||
                "@esbuild/freebsd-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-arm": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-arm64": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-ia32": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-loong64": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-mips64el": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-ppc64": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-riscv64": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-s390x": "0.18.20",
 | 
			
		||||
                "@esbuild/linux-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/netbsd-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/openbsd-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/sunos-x64": "0.18.20",
 | 
			
		||||
                "@esbuild/win32-arm64": "0.18.20",
 | 
			
		||||
                "@esbuild/win32-ia32": "0.18.20",
 | 
			
		||||
                "@esbuild/win32-x64": "0.18.20"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/follow-redirects": {
 | 
			
		||||
            "version": "1.15.9",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
 | 
			
		||||
            "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
                    "type": "individual",
 | 
			
		||||
                    "url": "https://github.com/sponsors/RubenVerborgh"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=4.0"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "debug": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/form-data": {
 | 
			
		||||
            "version": "4.0.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "asynckit": "^0.4.0",
 | 
			
		||||
                "combined-stream": "^1.0.8",
 | 
			
		||||
                "mime-types": "^2.1.12"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 6"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/fsevents": {
 | 
			
		||||
            "version": "2.3.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
 | 
			
		||||
            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "hasInstallScript": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "optional": true,
 | 
			
		||||
            "os": [
 | 
			
		||||
                "darwin"
 | 
			
		||||
            ],
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/immediate": {
 | 
			
		||||
            "version": "3.0.6",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
 | 
			
		||||
            "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/laravel-vite-plugin": {
 | 
			
		||||
            "version": "0.7.8",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.7.8.tgz",
 | 
			
		||||
            "integrity": "sha512-HWYqpQYHR3kEQ1LsHX7gHJoNNf0bz5z5mDaHBLzS+PGLCTmYqlU5/SZyeEgObV7z7bC/cnStYcY9H1DI1D5Udg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "picocolors": "^1.0.0",
 | 
			
		||||
                "vite-plugin-full-reload": "^1.0.5"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=14"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "vite": "^3.0.0 || ^4.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/lie": {
 | 
			
		||||
            "version": "3.1.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
 | 
			
		||||
            "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "immediate": "~3.0.5"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/localforage": {
 | 
			
		||||
            "version": "1.10.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz",
 | 
			
		||||
            "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==",
 | 
			
		||||
            "license": "Apache-2.0",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "lie": "3.1.1"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/mime-db": {
 | 
			
		||||
            "version": "1.52.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
 | 
			
		||||
            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/mime-types": {
 | 
			
		||||
            "version": "2.1.35",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
 | 
			
		||||
            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "mime-db": "1.52.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/nanoid": {
 | 
			
		||||
            "version": "3.3.8",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
 | 
			
		||||
            "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
                    "type": "github",
 | 
			
		||||
                    "url": "https://github.com/sponsors/ai"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "nanoid": "bin/nanoid.cjs"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/picocolors": {
 | 
			
		||||
            "version": "1.1.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
 | 
			
		||||
            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "ISC"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/picomatch": {
 | 
			
		||||
            "version": "2.3.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
 | 
			
		||||
            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=8.6"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/jonschlinkert"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/postcss": {
 | 
			
		||||
            "version": "8.5.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
 | 
			
		||||
            "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
                    "type": "opencollective",
 | 
			
		||||
                    "url": "https://opencollective.com/postcss/"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "type": "tidelift",
 | 
			
		||||
                    "url": "https://tidelift.com/funding/github/npm/postcss"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "type": "github",
 | 
			
		||||
                    "url": "https://github.com/sponsors/ai"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "nanoid": "^3.3.8",
 | 
			
		||||
                "picocolors": "^1.1.1",
 | 
			
		||||
                "source-map-js": "^1.2.1"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^10 || ^12 || >=14"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/proxy-from-env": {
 | 
			
		||||
            "version": "1.1.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
 | 
			
		||||
            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/rollup": {
 | 
			
		||||
            "version": "3.29.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
 | 
			
		||||
            "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "rollup": "dist/bin/rollup"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=14.18.0",
 | 
			
		||||
                "npm": ">=8.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "optionalDependencies": {
 | 
			
		||||
                "fsevents": "~2.3.2"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/source-map-js": {
 | 
			
		||||
            "version": "1.2.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
 | 
			
		||||
            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "BSD-3-Clause",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=0.10.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/vite": {
 | 
			
		||||
            "version": "4.5.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz",
 | 
			
		||||
            "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "esbuild": "^0.18.10",
 | 
			
		||||
                "postcss": "^8.4.27",
 | 
			
		||||
                "rollup": "^3.27.1"
 | 
			
		||||
            },
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "vite": "bin/vite.js"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^14.18.0 || >=16.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/vitejs/vite?sponsor=1"
 | 
			
		||||
            },
 | 
			
		||||
            "optionalDependencies": {
 | 
			
		||||
                "fsevents": "~2.3.2"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "@types/node": ">= 14",
 | 
			
		||||
                "less": "*",
 | 
			
		||||
                "lightningcss": "^1.21.0",
 | 
			
		||||
                "sass": "*",
 | 
			
		||||
                "stylus": "*",
 | 
			
		||||
                "sugarss": "*",
 | 
			
		||||
                "terser": "^5.4.0"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "@types/node": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "less": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "lightningcss": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "sass": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "stylus": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "sugarss": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "terser": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/vite-plugin-full-reload": {
 | 
			
		||||
            "version": "1.2.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "picocolors": "^1.0.0",
 | 
			
		||||
                "picomatch": "^2.3.1"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,6 +8,9 @@
 | 
			
		|||
    "devDependencies": {
 | 
			
		||||
        "axios": "^1.1.2",
 | 
			
		||||
        "laravel-vite-plugin": "^0.7.5",
 | 
			
		||||
        "vite": "^4.0.0"
 | 
			
		||||
        "vite": "^4.5.3"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@sentry/browser": "^7.40.0"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										104
									
								
								public/ai.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
#
 | 
			
		||||
# ai.txt
 | 
			
		||||
# Generated by Empathy First Media Digital Marketing Agency
 | 
			
		||||
# https://EmpathyFirstMedia.com
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
User-Agent: *
 | 
			
		||||
 | 
			
		||||
# Text Permissions
 | 
			
		||||
Disallow: *.txt
 | 
			
		||||
Disallow: *.pdf
 | 
			
		||||
Disallow: *.doc
 | 
			
		||||
Disallow: *.docx
 | 
			
		||||
Disallow: *.odt
 | 
			
		||||
Disallow: *.rtf
 | 
			
		||||
Disallow: *.tex
 | 
			
		||||
Disallow: *.wks
 | 
			
		||||
Disallow: *.wpd
 | 
			
		||||
Disallow: *.wps
 | 
			
		||||
Disallow: *.html
 | 
			
		||||
 | 
			
		||||
# Images Permissions
 | 
			
		||||
Disallow: *.bmp
 | 
			
		||||
Disallow: *.gif
 | 
			
		||||
Disallow: *.ico
 | 
			
		||||
Disallow: *.jpeg
 | 
			
		||||
Disallow: *.jpg
 | 
			
		||||
Disallow: *.png
 | 
			
		||||
Disallow: *.svg
 | 
			
		||||
Disallow: *.tif
 | 
			
		||||
Disallow: *.tiff
 | 
			
		||||
Disallow: *.webp
 | 
			
		||||
 | 
			
		||||
# Audio Permissions
 | 
			
		||||
Disallow: *.aac
 | 
			
		||||
Disallow: *.aiff
 | 
			
		||||
Disallow: *.amr
 | 
			
		||||
Disallow: *.flac
 | 
			
		||||
Disallow: *.m4a
 | 
			
		||||
Disallow: *.mp3
 | 
			
		||||
Disallow: *.oga
 | 
			
		||||
Disallow: *.opus
 | 
			
		||||
Disallow: *.wav
 | 
			
		||||
Disallow: *.wma
 | 
			
		||||
 | 
			
		||||
# Video Permissions
 | 
			
		||||
Disallow: *.mp4
 | 
			
		||||
Disallow: *.webm
 | 
			
		||||
Disallow: *.ogg
 | 
			
		||||
Disallow: *.avi
 | 
			
		||||
Disallow: *.mov
 | 
			
		||||
Disallow: *.wmv
 | 
			
		||||
Disallow: *.flv
 | 
			
		||||
Disallow: *.mkv
 | 
			
		||||
 | 
			
		||||
# Code Permissions
 | 
			
		||||
Disallow: *.py
 | 
			
		||||
Disallow: *.js
 | 
			
		||||
Disallow: *.java
 | 
			
		||||
Disallow: *.c
 | 
			
		||||
Disallow: *.cpp
 | 
			
		||||
Disallow: *.cs
 | 
			
		||||
Disallow: *.h
 | 
			
		||||
Disallow: *.css
 | 
			
		||||
Disallow: *.php
 | 
			
		||||
Disallow: *.swift
 | 
			
		||||
Disallow: *.go
 | 
			
		||||
Disallow: *.rb
 | 
			
		||||
Disallow: *.pl
 | 
			
		||||
Disallow: *.sh
 | 
			
		||||
Disallow: *.sql
 | 
			
		||||
 | 
			
		||||
# Disallow
 | 
			
		||||
Disallow: /
 | 
			
		||||
# --------------------------
 | 
			
		||||
# Empathy First Media AI.TXT
 | 
			
		||||
# --------------------------
 | 
			
		||||
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&GGGGGGGGGGGGGGGGGGG#@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
 | 
			
		||||
# This ai.txt file was created by Empathy First Media.
 | 
			
		||||
# https://empathyfirstmedia.com/
 | 
			
		||||
| 
						 | 
				
			
			@ -1,38 +1,54 @@
 | 
			
		|||
:root {
 | 
			
		||||
  --background: #1c1b22;
 | 
			
		||||
  --foreground: #dddddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
html {
 | 
			
		||||
	color-scheme: dark;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
	background-color: var(--background);
 | 
			
		||||
	color: var(--foreground);
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  margin: 20px;
 | 
			
		||||
  background: #80c9fa url("/images/peek.png") no-repeat bottom right 10px fixed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img {
 | 
			
		||||
  image-rendering: pixelated;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a {
 | 
			
		||||
    color: #99f;
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  text-decoration: underline dotted;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:hover {
 | 
			
		||||
    text-decoration: underline;
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  text-decoration: underline solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1#indextitle {
 | 
			
		||||
	font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
 | 
			
		||||
    Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue",
 | 
			
		||||
    sans-serif;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr, th, td {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-size: 12pt;
 | 
			
		||||
	padding: 0 5px;
 | 
			
		||||
tr,
 | 
			
		||||
th,
 | 
			
		||||
td {
 | 
			
		||||
  font-family: monospace;
 | 
			
		||||
  font-size: 12pt;
 | 
			
		||||
  padding: 0 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr td:nth-child(2) {
 | 
			
		||||
  padding-left: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
address {
 | 
			
		||||
	font-family: sans-serif;
 | 
			
		||||
	font-size: 12pt
 | 
			
		||||
  font-family: sans-serif;
 | 
			
		||||
  font-size: 12pt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.description {
 | 
			
		||||
  font-style: italic;
 | 
			
		||||
  font-size: 90%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
hr {
 | 
			
		||||
    border: none;
 | 
			
		||||
    border-bottom: 2px solid #2f2f42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,70 +0,0 @@
 | 
			
		|||
/* Tomorrow Night Bright Theme */
 | 
			
		||||
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
 | 
			
		||||
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Comment */
 | 
			
		||||
.hljs-comment,
 | 
			
		||||
.hljs-quote {
 | 
			
		||||
  color: #969896;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Red */
 | 
			
		||||
.hljs-variable,
 | 
			
		||||
.hljs-template-variable,
 | 
			
		||||
.hljs-tag,
 | 
			
		||||
.hljs-name,
 | 
			
		||||
.hljs-selector-id,
 | 
			
		||||
.hljs-selector-class,
 | 
			
		||||
.hljs-regexp,
 | 
			
		||||
.hljs-deletion {
 | 
			
		||||
  color: #d54e53;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Orange */
 | 
			
		||||
.hljs-number,
 | 
			
		||||
.hljs-built_in,
 | 
			
		||||
.hljs-literal,
 | 
			
		||||
.hljs-type,
 | 
			
		||||
.hljs-params,
 | 
			
		||||
.hljs-meta,
 | 
			
		||||
.hljs-link {
 | 
			
		||||
  color: #e78c45;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Yellow */
 | 
			
		||||
.hljs-attribute {
 | 
			
		||||
  color: #e7c547;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Green */
 | 
			
		||||
.hljs-string,
 | 
			
		||||
.hljs-symbol,
 | 
			
		||||
.hljs-bullet,
 | 
			
		||||
.hljs-addition {
 | 
			
		||||
  color: #b9ca4a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Blue */
 | 
			
		||||
.hljs-title,
 | 
			
		||||
.hljs-section {
 | 
			
		||||
  color: #7aa6da;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tomorrow Purple */
 | 
			
		||||
.hljs-keyword,
 | 
			
		||||
.hljs-selector-tag {
 | 
			
		||||
  color: #c397d8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hljs {
 | 
			
		||||
  background: black;
 | 
			
		||||
  color: #eaeaea;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hljs-emphasis {
 | 
			
		||||
  font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hljs-strong {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,373 +1,359 @@
 | 
			
		|||
:root {
 | 
			
		||||
    --background: #1c1b22;
 | 
			
		||||
    --foreground: #dddddd;
 | 
			
		||||
    --background: hsl(214, 67%, 85%);
 | 
			
		||||
    --foreground: hsl(214, 20%, 14%);
 | 
			
		||||
    --border-color: hsl(214, 96%, 48%);
 | 
			
		||||
    --border: var(--border-color) 2px solid;
 | 
			
		||||
    --shadow-color: hsla(214, 96%, 43%, 0.4);
 | 
			
		||||
    --shadow: drop-shadow(8px 8px var(--shadow-color));
 | 
			
		||||
    --shadow-small: drop-shadow(3px 3px var(--shadow-color));
 | 
			
		||||
    --links: hsl(214, 27%, 22%);
 | 
			
		||||
    --links-hover: hsl(214, 27%, 15%);
 | 
			
		||||
    --table-header: hsla(214, 96%, 43%, 0.2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ───────────────────────────────────── Fonts ────────────────────────────────────── */
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Sans";
 | 
			
		||||
    src: url("/fonts/PTSans-Regular.ttf") format("truetype");
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Sans";
 | 
			
		||||
    src: url("/fonts/PTSans-Italic.ttf") format("truetype");
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Sans";
 | 
			
		||||
    src: url("/fonts/PTSans-Bold.ttf") format("truetype");
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Sans";
 | 
			
		||||
    src: url("/fonts/PTSans-BoldItalic.ttf") format("truetype");
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Serif";
 | 
			
		||||
    src: url("/fonts/PTSerif-Regular.ttf") format("truetype");
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Serif";
 | 
			
		||||
    src: url("/fonts/PTSerif-Italic.ttf") format("truetype");
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Serif";
 | 
			
		||||
    src: url("/fonts/PTSerif-Bold.ttf") format("truetype");
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family: "PT Serif";
 | 
			
		||||
    src: url("/fonts/PTSerif-BoldItalic.ttf") format("truetype");
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ───────────────────────────────────── Pride ────────────────────────────────────── */
 | 
			
		||||
#prideflag {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    width: 120px;
 | 
			
		||||
    transform-origin: 100% 0;
 | 
			
		||||
    transition: transform .5s cubic-bezier(.32,1.63,.41,1.01);
 | 
			
		||||
    z-index: 8008135;
 | 
			
		||||
}
 | 
			
		||||
#prideflag:hover {
 | 
			
		||||
    transform: scale(110%);
 | 
			
		||||
}
 | 
			
		||||
#prideflag:active {
 | 
			
		||||
    transform: scale(110%);
 | 
			
		||||
}
 | 
			
		||||
#prideflag * {
 | 
			
		||||
    pointer-events: all;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ───────────────────────────────────── Global ───────────────────────────────────── */
 | 
			
		||||
html {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    color-scheme: light;
 | 
			
		||||
    scrollbar-color: var(--border-color) var(--background);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    font-family: sans-serif;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    color: var(--foreground);
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    text-align: left;
 | 
			
		||||
    min-height: 100%;
 | 
			
		||||
    background: url('/images/roscoe_tile.jpg');
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    font-family: "PT Serif", serif;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
html {
 | 
			
		||||
    color-scheme: dark;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ul {
 | 
			
		||||
    list-style-type: square;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.page {
 | 
			
		||||
    min-width: 780px;
 | 
			
		||||
    max-width: 800px;
 | 
			
		||||
    padding-left: 0.5em;
 | 
			
		||||
    padding-right: 0.5em;
 | 
			
		||||
    margin: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1.inline {
 | 
			
		||||
    margin-top: 0;
 | 
			
		||||
    clear: none;
 | 
			
		||||
    display: inline;
 | 
			
		||||
img.logo_paw {
 | 
			
		||||
    filter: grayscale(100%) sepia(100%) hue-rotate(180deg) saturate(300%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1,
 | 
			
		||||
h2,
 | 
			
		||||
h3 {
 | 
			
		||||
    margin-top: 1em;
 | 
			
		||||
    clear: left;
 | 
			
		||||
h3,
 | 
			
		||||
h4,
 | 
			
		||||
h5,
 | 
			
		||||
h6 {
 | 
			
		||||
    margin: 20px 0 0 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img {
 | 
			
		||||
    border: none;
 | 
			
		||||
    max-width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img.right {
 | 
			
		||||
    float: right;
 | 
			
		||||
    margin-left: 0.5em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.form td {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* -------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
div.code-block {
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    border: 2px solid #dddddd;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    text-align: left;
 | 
			
		||||
    max-width: 90%;
 | 
			
		||||
    min-width: 400px;
 | 
			
		||||
    margin: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.code-block hr {
 | 
			
		||||
    margin-top: 5px;
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.code-block h1 {
 | 
			
		||||
p,
 | 
			
		||||
ul,
 | 
			
		||||
ol,
 | 
			
		||||
dl,
 | 
			
		||||
menu,
 | 
			
		||||
dir {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    font-family: monospace;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.code-block h1 small {
 | 
			
		||||
    color: #919191;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.code-block pre hr {
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.code-block pre code {
 | 
			
		||||
    background-color: #222;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
    display: inline;
 | 
			
		||||
    max-width: 95%;
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header a {
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nav {
 | 
			
		||||
    margin-bottom: 0.3em;
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nav div a img {
 | 
			
		||||
    width: 32px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nav div h1 {
 | 
			
		||||
    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
 | 
			
		||||
        Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue",
 | 
			
		||||
        sans-serif;
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    font-size: 30px;
 | 
			
		||||
    margin: 10px 10px 10px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.date {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.note {
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
    border-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.weather th {
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.weather td {
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.rss {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 1em;
 | 
			
		||||
    right: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.archived {
 | 
			
		||||
    margin-top: 0.5em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.archived span.date {
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
    margin-right: 0.2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
video {
 | 
			
		||||
    max-width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.deprecated {
 | 
			
		||||
    line-height: 140%;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    color: #aa0000;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    padding-bottom: 0.5em;
 | 
			
		||||
    border-bottom: 2px dashed #aa0000;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table td {
 | 
			
		||||
    border: 1px solid white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td {
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header .title {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header {
 | 
			
		||||
    font-size: 100%;
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    padding-bottom: 0;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1 {
 | 
			
		||||
    font-size: 150%;
 | 
			
		||||
}
 | 
			
		||||
h1 {
 | 
			
		||||
    font-size: 150%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h2 {
 | 
			
		||||
    font-size: 130%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h3 {
 | 
			
		||||
    font-size: 115%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.computers {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td.computer {
 | 
			
		||||
    width: 50%;
 | 
			
		||||
    border: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.footer {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.commits tr td {
 | 
			
		||||
hr {
 | 
			
		||||
    border: none;
 | 
			
		||||
    padding-right: 5px;
 | 
			
		||||
    border-top: var(--border);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a {
 | 
			
		||||
    color: #99f;
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form tr td {
 | 
			
		||||
    border: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form tr td label {
 | 
			
		||||
    padding-right: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form tr td span.text-danger {
 | 
			
		||||
    padding-left: 5px;
 | 
			
		||||
    color: rgb(255, 114, 114);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form tr td textarea,
 | 
			
		||||
table.gb-entry-form tr td input {
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form-container {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form-container tr td {
 | 
			
		||||
    border: none;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form-container tr td p,
 | 
			
		||||
table.gb-entry-form-container tr td ul {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry-form tbody tr td textarea {
 | 
			
		||||
    width: 210px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry tr td {
 | 
			
		||||
    border: solid #ffffff 1px;
 | 
			
		||||
    width: 500px;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry {
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-admin {
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
    width: 500px;
 | 
			
		||||
    border: #fff solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-admin tr td {
 | 
			
		||||
    border-right: none;
 | 
			
		||||
    border-bottom: none;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-admin tr td.gb-del {
 | 
			
		||||
    border-left: none;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    width: 32px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-admin tr td.gb-message {
 | 
			
		||||
    border-top: none;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.info-table tr td {
 | 
			
		||||
    border: none;
 | 
			
		||||
    padding-right: 5px;
 | 
			
		||||
    vertical-align: bottom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.info-table tr td h1,
 | 
			
		||||
table.info-table tr td h2,
 | 
			
		||||
table.info-table tr td small {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
caption h1,
 | 
			
		||||
caption h2 {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
caption {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.info-table tr td small {
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hljs {
 | 
			
		||||
    background: none !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.me img {
 | 
			
		||||
    float: right;
 | 
			
		||||
    margin: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.me p {
 | 
			
		||||
    text-align: justify;
 | 
			
		||||
    color: var(--links);
 | 
			
		||||
    text-decoration: underline dotted;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:hover {
 | 
			
		||||
    text-decoration: underline;
 | 
			
		||||
    color: var(--links-hover);
 | 
			
		||||
    text-decoration: underline solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.computer {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
div.page-container {
 | 
			
		||||
    width: 800px;
 | 
			
		||||
    margin: 5px auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.computer td {
 | 
			
		||||
    border: none;
 | 
			
		||||
div.page-container > div {
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    filter: var(--shadow);
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    margin-bottom: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.computer h1,
 | 
			
		||||
.computer hr {
 | 
			
		||||
div.page-container > div:last-child {
 | 
			
		||||
    margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 64px 1fr;
 | 
			
		||||
    grid-template-rows: 1fr;
 | 
			
		||||
    grid-column-gap: 15px;
 | 
			
		||||
    grid-row-gap: 0;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header img {
 | 
			
		||||
    image-rendering: pixelated;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header h1 {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header h1,
 | 
			
		||||
header p {
 | 
			
		||||
    display: inline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main>div {
 | 
			
		||||
    position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main>div::after {
 | 
			
		||||
    display: block;
 | 
			
		||||
    content: "";
 | 
			
		||||
    clear: both;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div#footer {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: auto 1fr;
 | 
			
		||||
    grid-template-rows: 1fr;
 | 
			
		||||
    grid-column-gap: 0;
 | 
			
		||||
    grid-row-gap: 0;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div#footer div:last-child {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div#footer div:last-child img {
 | 
			
		||||
    image-rendering: pixelated;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    width: 88px;
 | 
			
		||||
    height: 31px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Wah! **/
 | 
			
		||||
div.wah {
 | 
			
		||||
    float: right;
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.wah img {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.wah h3,
 | 
			
		||||
div.wah p {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    margin: 5px 0;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.wah p {
 | 
			
		||||
    margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.wah img {
 | 
			
		||||
    width: 250px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Guestbook **/
 | 
			
		||||
table.form input,
 | 
			
		||||
table.form textarea,
 | 
			
		||||
table.form button {
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.form input,
 | 
			
		||||
table.form textarea {
 | 
			
		||||
    width: 250px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.form textarea {
 | 
			
		||||
    resize: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.form button:hover {
 | 
			
		||||
    background-color: var(--border-color);
 | 
			
		||||
    color: var(--background);
 | 
			
		||||
    filter: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.form tr td,
 | 
			
		||||
table.gb-entry-form-container td:last-child {
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.gb-entry {
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    width: 75%;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Music **/
 | 
			
		||||
table.music-top10 {
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 th,
 | 
			
		||||
table.music-top10 td {
 | 
			
		||||
    padding: 2px 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 th:first-child {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 tr:first-child th {
 | 
			
		||||
    border-right: var(--border);
 | 
			
		||||
    border-bottom: var(--border);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 tr:first-child th:last-child {
 | 
			
		||||
    border-right: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 tr td {
 | 
			
		||||
    border-right: var(--border);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.music-top10 tr td:last-child {
 | 
			
		||||
    border-right: none;
 | 
			
		||||
}
 | 
			
		||||
table.music-top10 tr:first-child th,
 | 
			
		||||
table.music-top10 tr td:first-child {
 | 
			
		||||
    background-color: var(--table-header);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.current-track {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 180px auto;
 | 
			
		||||
    grid-template-rows: 1fr;
 | 
			
		||||
    grid-column-gap: 10px;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.current-track img {
 | 
			
		||||
    float: left;
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    width: 174px;
 | 
			
		||||
    height: 174px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Bookmarks **/
 | 
			
		||||
div.bookmark-category:first-child h2 {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.computer .computer-image {
 | 
			
		||||
    width: 256px;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ────────────────────────────────── Rosco & Leko ────────────────────────────────── */
 | 
			
		||||
div.rosco-leko-gallery {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
    align-items: flex-start;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.spec {
 | 
			
		||||
    padding-left: 20px;
 | 
			
		||||
div.rosco-leko-gallery > div {
 | 
			
		||||
    border: var(--border);
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    filter: var(--shadow-small);
 | 
			
		||||
    background-color: var(--background);
 | 
			
		||||
    margin: 10px;
 | 
			
		||||
    height: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.spec-title {
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.computer-specs {
 | 
			
		||||
    margin-top: 5px;
 | 
			
		||||
div.rosco-leko-gallery > div,
 | 
			
		||||
div.rosco-leko-gallery > div img {
 | 
			
		||||
    max-width: 220px;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,13 @@
 | 
			
		|||
html {
 | 
			
		||||
    color-scheme: dark;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    font-family: sans-serif;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    margin-left: 10px;
 | 
			
		||||
    color: #ddd;
 | 
			
		||||
    background-color: #333;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.gb-entry_details tr td {
 | 
			
		||||
    padding-right: 5px;
 | 
			
		||||
}
 | 
			
		||||
html { color-scheme: light; }
 | 
			
		||||
body { color: #2a271c; background-color: #f2efbd; font-family: serif; }
 | 
			
		||||
h1, h2, h4, ul, p { margin: 0; }
 | 
			
		||||
h1 { font-weight: normal; }
 | 
			
		||||
h4 { margin-bottom: 5px; }
 | 
			
		||||
ul { padding: 5px 30px; }
 | 
			
		||||
a { color: hsl(183, 93%, 27%); text-decoration: underline dotted; }
 | 
			
		||||
a:hover { color: hsl(183, 93%, 15%); text-decoration: underline solid; }
 | 
			
		||||
code { font-family: monospace; }
 | 
			
		||||
code.addr { font-size: 24px; }
 | 
			
		||||
table { border: #f27405 2px solid; background-color: #f2efbd; filter: drop-shadow(3px 3px hsla(11, 96%, 43%, 0.4)); }
 | 
			
		||||
img { border: #f27405 2px solid; filter: drop-shadow(3px 3px hsla(11, 96%, 43%, 0.4)); }
 | 
			
		||||
hr { border: none; border-bottom: 2px solid #f27405; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 777 B After Width: | Height: | Size: 4 KiB  | 
| 
		 Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 735 B  | 
| 
		 Before Width: | Height: | Size: 591 B After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSans-Bold.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSans-BoldItalic.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSans-Italic.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSans-Regular.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSerif-Bold.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSerif-BoldItalic.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSerif-Italic.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/fonts/PTSerif-Regular.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/images/background.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 837 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/aliasing.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 786 B  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/cnfunknown.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 524 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/csshard.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 495 B  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/juli.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 3.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/paws-aliased.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 478 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/servfail.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 891 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/thnlqd.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 996 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/transrights.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 471 B  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/wah.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 764 B  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/x86.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 133 KiB  | 
| 
		 Before Width: | Height: | Size: 132 KiB  | 
| 
		 Before Width: | Height: | Size: 142 KiB  | 
| 
		 Before Width: | Height: | Size: 116 KiB  | 
| 
		 Before Width: | Height: | Size: 145 KiB  | 
| 
		 Before Width: | Height: | Size: 134 KiB  | 
| 
		 Before Width: | Height: | Size: 154 KiB  | 
| 
		 Before Width: | Height: | Size: 160 KiB  | 
| 
		 Before Width: | Height: | Size: 151 KiB  | 
| 
		 Before Width: | Height: | Size: 126 KiB  | 
| 
		 Before Width: | Height: | Size: 160 KiB  | 
| 
		 Before Width: | Height: | Size: 156 KiB  | 
| 
		 Before Width: | Height: | Size: 141 KiB  | 
| 
		 Before Width: | Height: | Size: 142 KiB  | 
| 
		 Before Width: | Height: | Size: 153 KiB  | 
| 
		 Before Width: | Height: | Size: 159 KiB  | 
| 
		 Before Width: | Height: | Size: 158 KiB  | 
| 
		 Before Width: | Height: | Size: 134 KiB  |