Flash OpenIPC firmware onto SigmaStar SSC335 SoC and Sony IMX307 IPC module. Requirements IPC module USB to TTL cable Windows laptop or computer Running a TFTP server on your Windows computer Results IPC module specifications Flash:GD25Q64CSIG: https://www.digikey.cn/zh/products/detail/gigadevice-semiconductor-hk-limited/GD25Q64CSIG/9484942 Soc:SigmaStar SSC335https://linux-chenxing.org/infinity6/ssc335_pb_v03.pdf Sensor: 1/2.8" 2MP CMOS Sony IMX307 LAN Windows computer TFTP SERVER directory structure The "bin" directory serves as the current directory for the TFTP server, used to store firmware files. Disable the firewall on the Windows computer and run tftp64.exe. Step 1: Welding the UART interface. Here is the TTL connection. Step 2: Connect the IPC module to your Windows computer using a USB to TTL cable. Connect the IPC module to your computer using a USB to TTL cable. Open PuTTY. Configure the serial port information. Restart the IPC module. In the PuTTY window, continuously press the "Enter" key on the keyboard. Step 3: Enter the following command in the PuTTY window # Enter commands line by line! Do not copy and paste multiple lines at once! setenv ipaddr 192.168.8.200; setenv serverip 192.168.8.250 mw.b 0x21000000 0xff 0x800000 tftpboot 0x21000000 openipc-ssc335-lite-8mb.bin #如果上面的命令执行不成功,请执行下面的。sf lock 0; 会提示失败, 不过没关系,继续下面的 1. if there is no tftpboot but tftp then run this instead tftp 0x21000000 openipc-ssc335-lite-8mb.bin sf probe 0; sf lock 0; sf erase 0x0 0x800000; sf write 0x21000000 0x0 0x800000 reset Note If you cannot input in serial port mode, please close the serial port first. Before re-entering, turn off flow control.

July 18, 2024 0comments 1351hotness 0likes Read all

因为Frp client 之前是使用批处理启动的,所以每次电脑重启之后,需要等到登录之后才能启动。目的是要操作系统启动之后就直接启动Frp client。为了解决这个问题,所以使用nssm来将Frp client安装到windows的服务,使它作为服务启动。这样就可以实现当电脑启动之后就可以直接启动。 目录 先决条件 安装过程 验证和引用 先决条件 Frp 服务端 与客户端https://github.com/fatedier/frp nssm 程序https://nssm.cc/download 根据Frp服务端的信息配置好相对应的Frp客户端信息 安装过程 Step 1 在Windows操作系统下配置好Frp 的客户端信息之后,使用命令行进入nssm目录,如下图:注:请根据你的实际情况,进入相对应的目录; Step 2 通过命令行 安装服务 nssm install MyFirstService #### Step 3当你在命令行中输入step2的命令,系统会跳出nssm 的gui让你填写程序的相关信息。这个时候,你只要在Nssm gui中填入服务的相关信息即可。如下图所示: 程序路径 程序工作目录 额外参数然后顶部的"Details"就是服务的相关详细描述和设置了。这个大家可以自己去尝试。在填完1-3步骤中的信息之后, 服务就算安装完成了。 (记得使用管理模式运行nssm) 验证和应用 在windows 的命令行输入“services.msc” 打开windows 的服务管理窗口 通过上图就可以判断 服务已经添加成功。 另外你还可以在frp 根目录下查看frp运行的日志。 引用 Frp 服务端 与客户端https://github.com/fatedier/frp nssm 程序https://nssm.cc/download 这就是使用nssm 在windows下,快速的创建服务的简单使用笔记。

June 2, 2024 0comments 590hotness 0likes Read all

简介: 在这篇文章记录了在C sharp 编程中使用IniParse 对ini配置文件进行读写的操作. 读取ini文件中的Mysql数据库配置文件进行数据库连接: 如果你想从一个 .ini 文件中读取配置信息,可以使用第三方库,如 IniParser。以下是如何使用 IniParser 库来实现: 首先,你需要使用 NuGet 包管理器安装 IniParser。在 Visual Studio 中,可以通过 NuGet 包管理器控制台执行以下命令:Install-Package IniParser 然后,创建一个 config.ini 文件,并添加以下内容: [Database] Server=your_server User=your_user Password=your_password Database=your_database 接着,修改你的 mysqldata 类如下: using System; using IniParser; using IniParser.Model; using MySql.Data.MySqlClient; using Sunny.UI; namespace ExpressManageSystem { internal class mysqldata { private static readonly string configFile = "config.ini"; private static readonly FileIniDataParser parser = new FileIniDataParser(); private static readonly IniData configData = parser.ReadFile(configFile); public static string connection_string { get { var databaseSection = configData["Database"]; return $"server={databaseSection["Server"]};user={databaseSection["User"]};password={databaseSection["Password"]};database={databaseSection["Database"]}"; } } public MySqlConnection mySqlConnection = new MySqlConnection(connection_string); //连接数据库 public bool connect_db() { try { mySqlConnection.Open(); return true; } catch (Exception ex) { UIMessageBox.Show(ex.Message); return false; } } //关闭数据库链接 public bool close_db() { try { mySqlConnection.Close(); return true; } catch (Exception ex) { UIMessageBox.Show(ex.Message); return false; } } } } 在这个修改后的代码中,使用了 IniParser 库来读取 config.ini 文件中的配置信息。这样,你就可以通过修改 config.ini 文件来更改数据库连接信息,而无需修改代码。 读取ini文件中的信息保存到变量中: 请参考示例代码 private void CopyExpressInfo() { try { if (datagridview_main_information.SelectedRows.Count == 0) { MessageBox.Show("请先选择客户"); return; } // 获取选中的行 DataGridViewRow selectedRow = datagridview_main_information.SelectedRows[0]; // 获取选中行的数据 string customercode = selectedRow.Cells["customercode"].Value.ToString(); //所需要复制的内容 var configFile = "config.ini"; //定义ini配置文件名称 var parser = new FileIniDataParser(); IniData configData = null; if (File.Exists(configFile)) { configData = parser.ReadFile(configFile); //读取CompanyInfo 部分的信息 var companyInfoSection = configData["CompanyInfo"]; string receiverAir = companyInfoSection["Receiver_air"]; string addressAir = companyInfoSection["Address_air"].ToString(); string phoneNumberAir = companyInfoSection["Phonenumber_air"]; string receiverSea = companyInfoSection["Receiver_sea"]; string addressSea = companyInfoSection["Address_sea"].ToString(); string phoneNumberSea = companyInfoSection["Phonenumber_sea"]; string cnShippinginfo = $"收件人:{receiverAir}\r\n收货地址:{addressAir}({customercode})+空运部\r\n手机号:{phoneNumberAir} \n" + $" \r\n收件人:{receiverSea} \r\n收货地址:{addressSea}({customercode})+海运部 \r\n手机号:{phoneNumberSea}"; //保存到粘贴板 Clipboard.SetText(cnShippinginfo); MessageBox.Show($"已成功复制地址信息到剪贴板。"); } else { MessageBox.Show("配置文件 config.ini 不存在,系统正在为你重新创建!"); configData = new IniData(); MessageBox.Show("创建config.ini 成功,请在软件根目录填写相关信息!"); } } catch (Exception ex) { MessageBox.Show($"Error: {ex.Message}"); } }

March 18, 2024 0comments 936hotness 0likes Read all

简介: 这篇文章记录了自己在解决VALORANT 游戏在Windows 11上VALORANT的反外挂程序"Riot Vanguard"错误代码: VAN9005 or VAN9003的处理过程. 参考: 在Windows 10作業系統上調整虛擬化型安全性(簡稱VBS)設定 | VAN9005 |《特戰英豪》https://support-valorant.riotgames.com/hc/zh-tw/articles/16941220890899-%E5%9C%A8Windows-10%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1%E4%B8%8A%E8%AA%BF%E6%95%B4%E8%99%9B%E6%93%AC%E5%8C%96%E5%9E%8B%E5%AE%89%E5%85%A8%E6%80%A7-%E7%B0%A1%E7%A8%B1VBS-%E8%A8%AD%E5%AE%9A-VAN9005-%E7%89%B9%E6%88%B0%E8%8B%B1%E8%B1%AA Windows 11「VAN9001」或「VAN 9003」錯誤疑難排解 |《特戰英豪》https://support-valorant.riotgames.com/hc/zh-tw/articles/10088435639571-Windows-11-VAN9001-%E6%88%96-VAN-9003-%E9%8C%AF%E8%AA%A4%E7%96%91%E9%9B%A3%E6%8E%92%E8%A7%A3-%E7%89%B9%E6%88%B0%E8%8B%B1%E8%B1%AA Windows 11 关闭基于虚拟化的安全(VBS) 问题疑惑https://answers.microsoft.com/zh-hans/windows/forum/all/windows-11/3864f584-4090-4793-8a5b-34fd73605c91 解决过程: 客户操作系统为Windows11, 笔记本电脑支持TPM2.0根据上面官方支持文档操作,打开TPM2.0之后.通过msinfo32 命令查看安全启动状态,仍然显示未开启.Riot Vanguard 无法正常运行.于是将客户的操作系统更换成Windows10 关闭VBS 之后就可以正常运行游戏了. 总结: 如果你的操作系统是Windows11 ,请开启TPM2.0, 并使用UEFI启动,通过msinfo32 命令查看安全启动状态.如果已经是开启状态则可以正常进行游戏. 如果你是操作系统是Windows10 ,请直接关闭VBS,卸载Riot Vanguard 重新进游戏测试即可.

March 18, 2024 2comments 3288hotness 0likes Read all

记得上次被MySQL教训还是在10年前,如今又一次被MySQL折腾一次。早9点开始到现在下午5点。总算是把MySQL装好在Windows10上了。 MySQL安装 https://dev.mysql.com/downloads/installer/ 选择你要的版本安装即可 一切安装完成之后,通过CMD登录或者Navicat 登录会提示---date [ERROR] [MY-011084] [Server] Keyring migration failed. ---date [ERROR] [MY-010119] [Server] Aborting 于是跟着stackoverflow 开始操作https://stackoverflow.com/questions/51448958/mysql-server-8-0-keyring-migration-error-at-login 跟着Sabito的操作可以直接在cmd中登录,但是当启动WindowsService再来用cmd登录的时候会出现以下错误 ERROR 1045 (28000) Access denied for user root@localhost (using password: YES) 解决办法 停止MySQL服务 新增一个文本文档命名为‘mysqlinit.txt’ 在文档中写入以下内容 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password' 将该文档拷贝到C: CMD管理员权限进入MySQL Server 的 bin目录 在cmd窗口输入以下命令 然后回车 --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=C:\\mysqlinit.txt --console 等待命令执行完成,按Ctrl+C 退出CMD 并关闭 重新启动MySQL服务 这个时候就可以使用CMD或者Navicat 登录了 参考 How to Fix " access denied for user 'root'@'localhost' (using password: yes) " in MySQL Window 10 mysql server 8.0 keyring migration error at loginhttps://stackoverflow.com/questions/51448958/mysql-server-8-0-keyring-migration-error-at-login

February 10, 2024 0comments 910hotness 0likes Read all

这篇笔记主要记录了作为一个新手如何使用Arduino IDE对ESP32S3开发板进行开发,以及ESP32连接到电脑,在Arduino IDE 中添加附加开发板, 通过示例代码点亮ESP32中的LED灯 .以下操作都是在Windows系统环境中进行. 准备工作 ESP32 S3 开发板 Arduino IDE USB To Type C Windows 操作系统电脑 可以正常访问Github的互联网环境 步骤 Arduino IDE 下载 Arduino 下载地址 https://www.arduino.cc/en/software 选择Windows操作系统下载 安装好之后如下 在IDE中添加附加开发板 点击 “文件”-“首选项”,在 “附加开发板管理器网址” 中输入以下地址 Espressif ESP32: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json 如下图所示 点击 “工具”-“开发板”-“开发板管理器”,在 “开发板管理器” 中搜索 “ESP32”,选择"esp32 by Espressif Systems" 点击安装即可 如下图所示 等待安装完成之后就可以开始连接ESP32 开发板. 将ESP32开发板连接到你的电脑 驱动程序安装由于我使用的是USB A TO Type C, ESP开发板上用的是CH343p芯片,所以要提前安装驱动源地官方 驱动地址:http://vcc-gnd.com/ 将设备通过USB A TO Type C的数据线插入到电脑的USB口 切记使用正确的数据线,不是电源线,电源线里面只有2芯,无法传输数据 在设备管理器中检查开发板是否连接正常如果你可以在你电脑的设备管理器中的端口选项中看到该设备,那说明ESP32开发板已经正确的连接到你的电脑了 在Arduino IED中连接开发板并使用示例 通过Arduino IED连接开发板在Arduino IDE左上角点击"选择开发板" 在"开发板"下方搜索"esp32s3" 并且找到相对应的开发板型号, 在右侧选择端口,点击确定即可.如下图所示. 连接完成如下图所示 通过Arduino IDE中的实例点亮开发板的LED 操作步骤如下图所示 接下来IDE 会新增一个窗口,展示BlinkRGB的项目如下图在确认开发板是正常连接的情况下,可以点击左上角的上传按钮将代码上传到开发板. 通过以上步骤,你的ESP32 开发板中的LED 开始闪烁了哦 参考: 如何安装Arduino IDE?添加附加开发板?以 ESP32 为例 - 小栋同学https://xd.sh.cn/arduino-ide-esp32/

February 8, 2024 0comments 842hotness 0likes Read all

眼鏡使用小貼士 定期清潔眼鏡: 使用專用眼鏡清潔液或溫和的肥皂水清洗眼鏡。避免使用含酒精或強酸性物質的清潔劑。 正確佩戴和摘掉眼鏡: 使用雙手握住眼鏡的雙腿,避免單手拿取框架,以防變形。 遠離高溫和潮濕環境: 避免將眼鏡長時間置於高溫環境中,也不要將它們放在浴室等潮濕的地方。 避免用衣物擦拭眼鏡: 使用專用眼鏡布或清潔紙巾擦拭眼鏡,避免使用衣物或紙巾,以防划伤鏡片。 注意鼻托和腿部調整: 確保鼻托和腿部的調整合適,以保持眼鏡的穩固和舒適。 避免戴眼鏡入睡: 長時間戴眼鏡可能導致鏡腿變形,避免戴著眼鏡入睡。 防護眼鏡: 在進行運動或有風塵的環境中,佩戴防護眼鏡,保護眼睛免受外界傷害。 這些建議有助於延長眼鏡的使用壽命,同時確保您的眼睛保持在良好的健康狀態。 眼睛保健小貼士 保持充足的睡眠: 睡眠對眼睛的恢復至關重要。每晚爭取7-8小時的良好睡眠。 遠離煙草: 吸煙可能增加患白內障、黃斑變性等眼疾的風險。戒煙有助於眼部健康。 保持適當的屏幕距離: 使用電子設備時,將屏幕保持在眼睛的合適距離,通常是20英寸遠。 多食用富含抗氧化物的食物: 如胡蘿蔔、菠菜、草莓等,有助於減緩眼部衰老過程。 佩戴太陽鏡: 戴上防紫外線的太陽鏡,保護眼睛免受陽光傷害。 眼保健操: 定期進行眼保健操,如遠近對焦、眨眼操等,有助於緩解眼部肌肉。 用眼休息: 長時間用電子設備或進行近距離工作後,進行眼部休息。每隔20分鐘注視遠處,眨眼,緩解眼部疲勞。 保持房間濕度: 保持室內 濕度,避免眼部因空氣過於乾燥而不適。 感謝:Six分享 和 ChatGPT的整理 引申閱讀: 眼睛疲勞- 妙佑醫療國際 https://www.mayoclinic.org/zh-hans/diseases-conditions/eyestrain/symptoms-causes/syc-20372397

January 10, 2024 0comments 474hotness 0likes Read all

使用Google map的链接, 当用户点击时直接导航到该地址 在Google Maps上生成一个导航链接可以通过在URL中使用特定的参数来实现。以下是一个示例链接,当用户点击它时,将直接导航到指定的地址: https://www.google.com/maps/dir/?api=1&destination=目标地址 请将 目标地址 替换为您想要导航到的确切地址。确保使用百分号编码(percent encoding)处理地址中的特殊字符。例如,空格可以编码为 %20。 例如,如果您想导航到纽约时代广场,链接可能如下所示: https://www.google.com/maps/dir/?api=1&destination=Times%20Square,%20New%20York,%20NY 用户点击这个链接后,将被重定向到Google Maps应用程序或网页版,并显示从当前位置到目标地址的导航路线。 请注意,Google Maps API key(api=1参数中的API密钥)是可选的,但如果您拥有API密钥,可以使用它以获得更多的功能和更高的配额。 使用Google map的链接, 当用户点击时直接导航到该坐标 在Google Maps上生成一个导航链接,直接导航到指定坐标,您可以使用以下URL格式: https://www.google.com/maps/dir/?api=1&destination=纬度,经度 将 纬度 和 经度 替换为您要导航的具体坐标。例如: https://www.google.com/maps/dir/?api=1&destination=37.7749,-122.4194 这个链接将导航到纬度37.7749,经度-122.4194的位置。用户点击这个链接后,将被重定向到Google Maps应用程序或网页版,并显示从当前位置到指定坐标的导航路线。 与之前提到的一样,api=1 参数是可选的,但如果您拥有Google Maps API密钥,可以使用它以获得更多的功能和更高的配额。 使用WAZE导航, 当用户点击链接时直接导航到该地址或者坐标 Waze使用不同的URL参数来实现导航。以下是使用Waze进行导航的基本URL格式: https://www.waze.com/ul?ll=纬度,经度&navigate=yes 将 纬度 和 经度 替换为您要导航的具体坐标。例如: https://www.waze.com/ul?ll=37.7749,-122.4194&navigate=yes 这个链接将导航到纬度37.7749,经度-122.4194的位置。与Google Maps类似,用户点击这个链接后,将被重定向到Waze应用程序并显示从当前位置到指定坐标的导航路线。

January 7, 2024 0comments 542hotness 0likes Read all

使用iKuai的Docker 安装Uptime 监控网络状况并设置通知提醒 Uptime Kuma 简介 我爱开源 Uptime Kuma 是一个开源项目,它的项目地址是在这里https://github.com/louislam 开发者是以为香港Coder, 该项目已经有了43.4k star. 大家再给他多一些星星吧! 缘由 有时候有些服务器因为某些原因离线了,忘记检查了。 然后造成服务器无法正常服务。于是就有了想法在iKuai的 Docker 中安装Uptime 来监控服务器和网络设备的在线状态 先决条件 路由器要有空闲磁盘来存储Docker数据, 不然无法正常安装Docker插件 iKuai 版本要在3.5以上 在iKuai云平台绑定设备,并安装好Docker插件 安装步骤 在路由器的USB口插入一张USB磁盘并在"系统设置" - " 磁盘管理- 磁盘分区中" 将磁盘分区并挂载 绑定业务选择" 普通存储" 即可 在云平台的" 插件应用 " 插件市场中选择要安装docker的设备 在云平台 "插件管理" 检查插件安装状态, 显示安装成功则可以进行下一步操作 回到路由器中的"高级应用" - "插件管理" 点击蓝色的 "docker" (需要在云平台安装好docker插件成功才能看到) - " 服务设置 " 将镜像库URL 设置为微软的https://mcr.microsoft.com/ 点击确认保存 回到Docker 界面 点击 "镜像管理" 点击添加, 选择"镜像库下载" 在搜索框中输入Uptime 选择: louislam/uptime-kuma 下载, 然后等待提示下载成功下载时间取决于您的网络状况和磁盘速度 回到Docker 界面 点击 "接口管理" 添加新的接口 如下图:(可以根据您的自身需求设置,但是不可以与路由器本身的LAN地址冲突) 回到Docker 界面, 点击"容器列表" 添加新的容器如下图 添加完容器之后启动即可 容器端口映射 端口映射只要将容器的3001端口映射出去就可以使用外网地址访问了 参考: https://www.ikuai8.com/zhic/ymgn/lyym/2019-12-13-06-35-05/2021-03-08-07-27-41.html 基本使用 Uptime Kuma 自带多国语言 配置简单 使用方便 , 大大减低了运维人员的学习成本. 总的来说, uptime的基本使用分为4部分 创建管理员账号 添加需要监控的设备或者服务 创建状态页面给非运维人员查看 若有需求,可以设置通知渠道进行提醒 更高级的API功能就大家自己去研究啦 基本使用如图所示 通知提醒设置 请参考设置页面中的链接, 有具体文档, 其中本人是使用的Telegram Bot , 因为Telegram Bot 是最简单,最方便的. 最后感谢 感谢张品正同学的分享, 感谢iKuai的产品. 是因为他们我才想到把它部署到iKuai并完成我的需求.

December 29, 2023 0comments 540hotness 0likes Read all

缘由 因为11月份是快递量比较大时候,会有有很多快递单需要查询快递状态;之前是因为单量少,每一个单每一个单去baidu 直接看百度查询到的结果。这两个月由于快递单特别多,于是就打算用Python 结合快递100的API 来查询快递状态 代码 快递100 API 实时查询状态 # coding = utf-8 import hashlib import json import requests class KuaiDi100: def __init__(self): self.key = '' # TODO 客户授权key self.customer = '' # TODO 查询公司编号 self.url = 'https://poll.kuaidi100.com/poll/query.do' # 请求地址 def track(self, com, num, phone, ship_from, ship_to): """ 物流轨迹实时查询 :param com: 查询的快递公司的编码,一律用小写字母 :param num: 查询的快递单号,单号的最大长度是32个字符 :param phone: 收件人或寄件人的手机号或固话(也可以填写后四位,如果是固话,请不要上传分机号) :param ship_from: 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供 :param ship_to: 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供 :return: requests.Response.text """ param = { 'com': com, 'num': num, 'phone': phone, 'from': ship_from, 'to': ship_to, 'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能,2:开通行政解析功能并且返回出发、目的及当前城市信息 'show': '0', # 返回数据格式。0:json(默认),1:xml,2:html,3:text 'order': 'desc' # 返回结果排序方式。desc:降序(默认),asc:升序 } param_str = json.dumps(param) # 转json字符串 1. 签名加密, 用于验证身份, 按param + key + customer 的顺序进行MD5加密(注意加密后字符串要转大写), 不需要“+”号 temp_sign = param_str + self.key + self.customer md = hashlib.md5() md.update(temp_sign.encode()) sign = md.hexdigest().upper() request_data = {'customer': self.customer, 'param': param_str, 'sign': sign} return requests.post(self.url, request_data).text # 发送请求 result = KuaiDi100().track('yuantong', 'YT9693083639795', '', '广东省江门市', '广东省深圳市') print(result) 接口文档 https://api.kuaidi100.com/document/5f0ffb5ebc8da837cbd8aefc 导入快递单和填写结果 # coding = utf-8 import openpyxl from openpyxl import Workbook from kuaidi1000_function import KuaiDi100 import json import time wb = Workbook() ws = wb.active 1. 定义表头 title = ['客户名称','快递单号','快递状态','最后更新时间','快递开始时间','详情','时效/天'] ws.append(title) start_time = time.time() #读取excel表格 customer_file_path = 'F:/EXCEL/info/Customer.xlsx' customer_workbook = openpyxl.load_workbook(customer_file_path) 1. 获取工作表的Sheet customer_sheet = customer_workbook['海运SEA'] sheet = customer_sheet.title #顺丰快递需要手机号验证 air = 2699 sea = 8166 phone = '' #判断当前表格是否海运还是空运并赋值给phone if sheet == '海运SEA': phone = sea else: phone = air 1. 获取Customer.xlsx中A2:A100列的所有客户名字和B2:B100列的相对应的快递单号 customer_names =[(customer_sheet.cell(row=i, column=1).value) for i in range(2,100)] express_numbers = [(customer_sheet.cell(row=i, column=2).value) for i in range(2,100)] 1. 将快递单号使用for循环查询快递状态 ,并append 到 infomation_first中 for express_number, customer_name in zip(express_numbers,customer_names): response = KuaiDi100().track('',express_number,phone,'','') #定义获取到的数据 api_data = json.loads(response) #判断数据是否存在 if 'data' in api_data and api_data['data']: last_data = api_data['data'][-1]…

December 8, 2023 0comments 2610hotness 0likes Read all
1234512