[
  {
    "path": "LICENSE",
    "content": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to <https://unlicense.org>\n"
  },
  {
    "path": "README.md",
    "content": "# 曹操CCminerproxy 抽水 9.0极致稳定版<防DDos CC攻击>\n最稳定的ETC/BTC/ETHW/RVN/ERGO/CFX中转托管软件！ 比例调整为0-95.纯中转及0.35%内 无开发费\n\nTelegram群组:https://t.me/CCminerproxy\n\n软件仅供学习参考，请勿用于其他目的，不承担任何责任\n\nETHW/ETF可以正常处理了\n\nBTC目前鱼池和btc.com稳定测试通过，币印 和蚂蚁 也可使用。\n\n注意：BTC钱包必须使用相对应矿池的用户名抽水 不能使用钱包地址\n\nBTC由于存在大量的大政奉还和难度不一情况，你实际得到的托管费会显著低于你设定的值，开发费也一样，优先保证客户低拒绝率\n\nmonitor目录下为CCminer多端口后台算力监控器，下载到本地pc使用。\n\n# 开发费模型\n``` javascript\n//开发费百分比，taxPercent是你设置的抽水百分比\nvar devPercent = 0;\nif (taxPercent <= 0.35) {\n    //小于等于0.35的，无需开发费，感谢你为广大挖矿爱好者做出的贡献\n    devPercent = 0;\n} else if (taxPercent <= 1) {\n    //大于0.35小于等于1的，开发费为你抽水比例的一半，以下所有开发费从客户那边算力收取，不影响你的收益\n    devPercent = taxPercent / 2;\n} else if (taxPercent <= 5) {\n    //1到5的，固定开发费0.5%\n    devPercent = 0.5;\n} else if (taxPercent <= 10) {\n    //5到10的，固定开发费1%\n    devPercent = 1;\n} else if (taxPercent <= 20) {\n    //10到20的，固定开发费2%\n    devPercent = 2;\n} else {\n    //20以上的，开发费线性增长，直到你的抽水比例为95%时，开发费为5%\n    devPercent = 3 * (taxPercent - 20) / 75 + 2;\n}\n```\n\n## 使用方法\n[Windows](https://github.com/ccminerproxy/CC-MinerProxy/tree/master/windows/)\n\n[Linux](https://github.com/ccminerproxy/CC-MinerProxy/tree/master/linux/)(支持一键脚本安装)\n\n所有版本均包含一个网页版的监控平台，可配置是否启用\n\n你可以同时添加两个抽水账户，并对每个账户分别设置抽水比例，两个账户抽数比例加起来不能超过95%\n\n现在抽水比例可以设置为0，纯转发，同样不收取开发费\n\n## 日你妈\n我的忧伤,你是煞笔\n\nGuoT,你也是煞笔\n\n\n\n## 其他\n法律不支持的地区此程序无法使用，请自觉遵守当地相关政策，使用此软件造成的法律问题，一概与软件作者无关。\n\n请只设定足够平衡你支出的托管抽水比例，不要抽大动脉，做到可持续发展，托管时请一定告知客户存在托管费\n\nETH/ETC的归集功能由于跨池存在难度、协议不一致等原因，可能导致你抽到的算力过大/过小甚至于无法抽取等情况\n\n4核心4G内存的搬瓦工，带机6000台，测试4天，机器稳定不掉线\n\n如果你经常掉线：\n\n①第一检查挖矿软件配置及内核配置，是否设置超过多少分钟没有成功提交重启内核\n\n②查看你服务器的硬件配置及软件带宽，配置过低可能导致转发性能不足，导致TCP重发及超时\n\n③检查你服务器的网络是否占用超过60%以上，是的话加带宽\n\n④检查你的抽水情况，如果一直没抽到，你的配置可能存在问题，导致各种断连情况，特别是蚂蚁、币安、OK、HIVE等池子\n"
  },
  {
    "path": "linux/README.md",
    "content": "## 一键脚本安装\n好处：适合又想要Linux稳定性的，又不懂Linux的小白的学习者<br />\n功能：包含自启动和进程守护，重启后可以自动运行，会放开防火墙和连接数限制，一键搞定<br />\n要求：Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统<br />\n建议使用 Ubuntu20.04操作系统.<br />\n使用 root 用户输入下面命令安装或卸载<br />\n``` bash\nbash <( curl -s -L https://bit.ly/34JVXmq )\n```\n<blockquote>\n<p>如果输入命令回车之后一直卡住不动，换这种办法<br />\nubuntu/debian 系统安装 wget: <code>apt-get update -y &amp;&amp; apt-get install wget -y</code><br />\ncentos 系统安装 wget: <code>yum update -y &amp;&amp; yum install wget -y</code><br />\n安装好 wget 之后 下载脚本并执行<br />\n\n<code>wget https://raw.githubusercontent.com/ccminerproxy/CC-MinerProxy/master/linux/install.sh</code><br />\n\n\n<code>bash install.sh</code>\n\n</p>\n</blockquote>\n\n<blockquote>\n<p>如果提示 curl: command not found ，那是因为你的 VPS 没装 curl<br />\nubuntu/debian 系统安装 curl 方法: <code>apt-get update -y &amp;&amp; apt-get install curl -y</code><br />\ncentos 系统安装 curl 方法: <code>yum update -y &amp;&amp; yum install curl -y</code><br />\n安装好 curl 之后就能安装脚本了</p>\n</blockquote>\n\n输入项一定别填错了，填错了按Ctrl+C重来（推荐使用finalshell工具连接你的linux服务器）\n\n如出现 Supervisor目录没了，安装失败  请依次输入以下代码执行:\n\nsudo rm /var/lib/dpkg/lock-frontend\n\nsudo rm /var/lib/dpkg/lock\n\nsudo rm /var/cache/apt/archives/lock\n\napt install supervisor -y\n\n最后再执行一键安装脚本\n\n一键脚本装好直接看最下面的注意内容就行了，突破连接数限制后记得重启服务器，输入命令 reboot 即可重启你的服务器，以后可不用重启\n\n## 自启动<已默认自启动>\n\n``` bash\n重启程序  (修改config.json配置文件后，重启程序生效)\n\nsupervisorctl restart ccworkertaxproxy1  （重启ID为1的抽水机,依次类推,ID=2就把数字改成2）\n\nsupervisorctl restart all  （重启全部）\n\n停止程序\n\nsupervisorctl stop all   （停止全部）\n\nsupervisorctl stop ccworkertaxproxy1  (停止ID为1的抽水机,依次类推,ID=2就把数字改成2)\n\nsupervisorctl status\t查看supervisor监管的进程状态\n\nsupervisorctl reload\t修改完配置文件后重新启动supervisor\n\nsupervisorctl update\t根据最新的配置文件，启动新配置或有改动的进程，配置没有改动的进程不会受影响而重启\n```\n\n## 修改比例等配置参数\n可编辑config.json文件\n\n安装的时候是id=1，默认目录 /etc/ccworker/ccworker1\n\n以此类推------\n\n可安装不同抽水矿池，安装时输入不同id即可。\n\n## 关于SSL\n\n如果要用自己的域名证书，pem后缀的是证书文件，key后缀的是私钥文件\n\n将这2个文件改名后 上传到目录并替换程序目录下的 cer.pem 和 key.pem \n\n推荐linux ssh工具:finalshell\n\n\n\n``` json\n{\n  \"enableLog\":true, //启用日志记录\n\n  \"ethPoolAddress\": \"ethw.f2pool.com\", //ETHW/ETF矿池域名或者IP,不要写端口,端口写下面一行\n  \"ethPoolPort\": 6688, //ETHW/ETF矿池端口\n  \"ethPoolSslMode\": false, //ETHW/ETF矿池端口是否是SSL端口,true为是,false为否\n  \"ethTcpPort\": 6688, //ETHW/ETF中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"ethTlsPort\": 12345, //ETHW/ETF中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"ethUser\": \"UserOrAddress\", //你的ETHW/ETF钱包地址,或者你在矿池的用户名\n  \"ethSecondUser\": \"UserOrAddress\", //你的ETHW/ETF钱包地址,或者你在矿池的用户名\n  \"ethWorker\": \"worker\", //容易分辨的矿工名\n  \"ethTaxPercent\": 20, //ETHW/ETF抽水百分比,单位%,只能输入0-95之间的数字\n  \"ethSecondTaxPercent\": 0, //ETHW/ETF抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableEthProxy\":true, //是否启用ETHW/ETF中转&抽水服务,true为启用,false为关闭\n  \"enableEthDonatePool\": false, //是否启用ETHW/ETF抽水重定向到指定矿池功能,true为启用,false为关闭\n  \"ethDonatePoolAddress\": \"asia1.ethermine.org\", //ETHW/ETF抽水重定向矿池地址\n  \"ethDonatePoolSslMode\": true,  //ETHW/ETF抽水重定向矿池的端口是否为SSL端口,true为是,false为否\n  \"ethDonatePoolPort\": 5555, //ETHW/ETF抽水重定向矿池端口\n\n  \"etcPoolAddress\": \"etc.f2pool.com\", //ETC矿池域名或者IP,不要写端口,端口写下面一行\n  \"etcPoolPort\": 8118, //ETC矿池端口\n  \"etcPoolSslMode\": false, //ETC矿池端口是否是SSL端口,true为是,false为否\n  \"etcTcpPort\": 8118, //ETC中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"etcTlsPort\": 22345, //ETC中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"etcUser\": \"UserOrAddress\", //你的ETC钱包地址,或者你在矿池的用户名\n  \"etcSecondUser\": \"UserOrAddress\", //你的ETC钱包地址,或者你在矿池的用户名\n  \"etcWorker\": \"worker\", //容易分辨的矿工名\n  \"etcTaxPercent\": 20, //ETC抽水百分比,单位%,只能输入0-95之间的数字\n  \"etcSecondTaxPercent\": 0, //ETC抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableEtcProxy\":false, //是否启用ETC中转&抽水服务,true为启用,false为关闭\n  \"enableEtcDonatePool\": false, //是否启用ETC抽水重定向到指定矿池功能,true为启用,false为关闭\n  \"etcDonatePoolAddress\": \"etc.f2pool.com\", //ETC抽水重定向矿池地址\n  \"etcDonatePoolSslMode\": false,  //ETC抽水重定向矿池的端口是否为SSL端口,true为是,false为否\n  \"etcDonatePoolPort\": 8118, //ETC抽水重定向矿池端口\n\n  \"btcPoolAddress\": \"btc.f2pool.com\", //BTC矿池域名或者IP,不要写端口,端口写下面一行\n  \"btcPoolPort\": 3333, //BTC矿池端口\n  \"btcPoolSslMode\": false, //BTC矿池端口是否是SSL端口,true为是,false为否\n  \"btcTcpPort\": 3333, //BTC中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"btcTlsPort\": 32345, //BTC中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"btcUser\": \"user\", //你在矿池的BTC账户用户名\n  \"btcSecondUser\": \"user\", //你在矿池的BTC账户用户名\n  \"btcWorker\": \"worker\", //容易分辨的矿工名\n  \"btcTaxPercent\": 20, //BTC抽水百分比,单位%,只能输入0-95之间的数字\n  \"btcSecondTaxPercent\": 0, //BTC抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableBtcProxy\":false, //是否启用BTC中转&抽水服务,true为启用,false为关闭\n  \n  \"rvnPoolAddress\": \"raven.f2pool.com\", //RVN矿池域名或者IP,不要写端口,端口写下面一行\n  \"rvnPoolPort\": 3636, //RVN矿池端口\n  \"rvnPoolSslMode\": false, //RVN矿池端口是否是SSL端口,true为是,false为否\n  \"rvnTcpPort\": 3636, //RVN中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"rvnTlsPort\": 42345, //RVN中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"rvnUser\": \"user\", //你的RVN钱包地址,或者你在矿池的用户名\n  \"rvnSecondUser\": \"user\", //你的RVN钱包地址,或者你在矿池的用户名\n  \"rvnWorker\": \"worker\", //容易分辨的矿工名\n  \"rvnTaxPercent\": 20, //RVN抽水百分比,单位%,只能输入0-95之间的数字\n  \"rvnSecondTaxPercent\": 0, //RVN抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableRvnProxy\":false, //是否启用RVN中转&抽水服务,true为启用,false为关闭\n  \n  \"ergoPoolAddress\": \"stratum-ergo.flypool.org\", //ERGO矿池域名或者IP,不要写端口,端口写下面一行\n  \"ergoPoolPort\": 3333, //ERGO矿池端口\n  \"ergoPoolSslMode\": false, //ERGO矿池端口是否是SSL端口,true为是,false为否\n  \"ergoTcpPort\": 3336, //ERGO中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"ergoTlsPort\": 52345, //ERGO中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"ergoUser\": \"user\", //你的ERGO钱包地址,或者你在矿池的用户名\n  \"ergoSecondUser\": \"user\", //你的ERGO钱包地址,或者你在矿池的用户名\n  \"ergoWorker\": \"worker\", //容易分辨的矿工名\n  \"ergoTaxPercent\": 20, //ERGO抽水百分比,单位%,只能输入0-95之间的数字\n  \"ergoSecondTaxPercent\": 0, //ERGO抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableErgoProxy\":false, //是否启用ERGO中转&抽水服务,true为启用,false为关闭\n  \n  \"cfxPoolAddress\": \"cfx.f2pool.com\", //CFX矿池域名或者IP,不要写端口,端口写下面一行\n  \"cfxPoolPort\": 6800, //CFX矿池端口\n  \"cfxPoolSslMode\": false, //CFX矿池端口是否是SSL端口,true为是,false为否\n  \"cfxTcpPort\": 6800, //CFX中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"cfxTlsPort\": 62345, //CFX中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"cfxUser\": \"user\", //你的CFX钱包地址,或者你在矿池的用户名\n  \"cfxSecondUser\": \"user\", //你的CFX钱包地址,或者你在矿池的用户名\n  \"cfxWorker\": \"worker\", //容易分辨的矿工名\n  \"cfxTaxPercent\": 20, //CFX抽水百分比,单位%,只能输入0-95之间的数字\n  \"cfxSecondTaxPercent\": 0, //CFX抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableCfxProxy\":false, //是否启用CFX中转&抽水服务,true为启用,false为关闭\n  \n  \"httpLogPort\":8080, //网页监控平台端口\n  \"httpLogPassword\":\"caocaominer\", //网页监控平台密码，不能为空\n  \"enableHttpLog\":true //是否启用网页监控平台\n}\n```\n如需编辑    按Ctrl+O,再按Ctrl+X\n\n## 运行<默认已运行>\n\n``` bash\n./ccminertaxproxy\n```\n\n## 传参方式运行\n支持传参方式运行，方式如下\n\n``` bash\n./ccminertaxproxy --ethPoolAddress=eth.f2pool.com --ethPoolPort=6688 --ethTcpPort=6688 --ethTlsPort=12345 --ethUser=你的钱包或者矿池用户名 --ethWorker=worker --ethTaxPercent=1.0 --enableEthProxy=true \n```\n以上仅为范例，参数名字和上方JSON配置文件的参数名一致，参数为false的配置默认不用配进去，看不懂这个的不要用这种方式\n\n\n\n## 注意\n\n矿机无法连接的记得开防火墙，云服务商的还有对应的安全组，配置好了矿机连不上肯定是这俩原因，SSL连接记得矿机本地加高级参数，如何配置安全组自己Google去\n\n\n"
  },
  {
    "path": "linux/cer.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIDUTCCAjkCFGsHka/T1i3IRkpdHtwChRrJ/Bu2MA0GCSqGSIb3DQEBCwUAMGQx\nCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlTaW5nYXBvcmUxEjAQBgNVBAcMCVNpbmdh\ncG9yZTELMAkGA1UECgwCQ0MxCzAJBgNVBAsMAkNDMRMwEQYDVQQDDApjYW9jYW8u\nY2FvMCAXDTIxMTIwNDE0MzY1N1oYDzIxMjExMTEwMTQzNjU3WjBkMQswCQYDVQQG\nEwJTRzESMBAGA1UECAwJU2luZ2Fwb3JlMRIwEAYDVQQHDAlTaW5nYXBvcmUxCzAJ\nBgNVBAoMAkNDMQswCQYDVQQLDAJDQzETMBEGA1UEAwwKY2FvY2FvLmNhbzCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiy9aStqRoc+ZziRSzJkaocGMtS\nUEKale0VEgr+ecoQECfuORcZh+g/IX2Yjw46KPt1N87FNXGBbvysMclW1Dyf9C8J\nz9aDT42cfAfxbw22Y2f8UohzhdE4UztGHhJPfsJ4gMzltk+QKOm0eq/M/fAxDCP5\nMJ+HsaZdYIm1QefRsYaeVKMHXfvqVFsJu579X7IcXi+Jlewxr5jjmfI4aHftnbfZ\nFz03H/UHraxa9dvPOEB50kZQUaYq6NrKk5WIR3deQYgkZpd0PqpOuptfJtyniS1I\nYEOzElchQWy+CC2ZKZ4BOP5UeY6jlQyE+W1gmVdFoMgxzIE1ZCwk/GdmNWkCAwEA\nATANBgkqhkiG9w0BAQsFAAOCAQEAi5EA8GLpftGdhWIuSqW6tbCgfuLh16Uxc7NW\nhrf3aF7JDOB1e5GvtEP/wtEDw4VKUySxdmK51QNOHn4kZwNc6iMnWdjuPLhoGgFv\n+KLTRMiWin62JPCtAIDzh3eapfwQVWAKovskTHS4XzlrJPSqtiAfzxXVgQj67H8r\nl+pU1Tmr53RHa7Dsn/qgqPATePQzlaIKHCPAO76+u2+jObAPVdLXf0aIAbrT4neP\nBf+LiL8OvvNEvBz7ko1g6LVZgsZbetu23RrmOcjuCsglBn8z+zOA4up2xVaV1YO7\nwyAF2hSQQNSJo0+TIiX38wcBWiNf2k6ZZhs1IkPTwGxiit9Zjg==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "linux/config.json",
    "content": "{\n  \"enableLog\":true,\n  \"ethPoolAddress\": \"ethw.f2pool.com\",\n  \"ethPoolSslMode\": false,\n  \"ethPoolPort\": 6688,\n  \"ethTcpPort\": 6688,\n  \"ethTlsPort\": 12345,\n  \"ethUser\": \"UserOrAddress\",\n  \"ethSecondUser\": \"UserOrAddress\",\n  \"ethWorker\": \"worker\",\n  \"ethTaxPercent\": 20, \n  \"ethSecondTaxPercent\": 0,\n  \"enableEthProxy\":true,\n  \"enableEthDonatePool\": false,\n  \"ethDonatePoolAddress\": \"asia1.ethermine.org\",\n  \"ethDonatePoolSslMode\": true,\n  \"ethDonatePoolPort\": 5555,\n  \"etcPoolAddress\": \"etc.f2pool.com\",\n  \"etcPoolSslMode\": false,\n  \"etcPoolPort\": 8118,\n  \"etcTcpPort\": 8118,\n  \"etcTlsPort\": 22345,\n  \"etcUser\": \"UserOrAddress\",\n  \"etcSecondUser\": \"UserOrAddress\",\n  \"etcWorker\": \"worker\",\n  \"etcTaxPercent\": 20, \n  \"etcSecondTaxPercent\": 0,\n  \"enableEtcProxy\":false,\n  \"enableEtcDonatePool\": false,\n  \"etcDonatePoolAddress\": \"etc.f2pool.com\",\n  \"etcDonatePoolSslMode\": false,\n  \"etcDonatePoolPort\": 8118,  \n  \"btcPoolAddress\": \"btc.f2pool.com\",\n  \"btcPoolSslMode\":false,\n  \"btcPoolPort\": 3333,\n  \"btcTcpPort\": 3333,\n  \"btcTlsPort\": 32345,\n  \"btcUser\": \"user\",\n  \"btcSecondUser\": \"user\",\n  \"btcWorker\": \"worker\",\n  \"btcTaxPercent\": 20, \n  \"btcSecondTaxPercent\": 0,\n  \"enableBtcProxy\":false,\n  \"rvnPoolAddress\": \"raven.f2pool.com\",\n  \"rvnPoolSslMode\": false,\n  \"rvnPoolPort\": 3636,\n  \"rvnTcpPort\": 3636,\n  \"rvnTlsPort\": 42345,\n  \"rvnUser\": \"user\",\n  \"rvnSecondUser\": \"user\",\n  \"rvnWorker\": \"worker\",\n  \"rvnTaxPercent\": 20,\n  \"rvnSecondTaxPercent\": 0,\n  \"enableRvnProxy\": false,\n  \"ergoPoolAddress\": \"stratum-ergo.flypool.org\",\n  \"ergoPoolSslMode\": false,\n  \"ergoPoolPort\": 3333,\n  \"ergoTcpPort\": 3434,\n  \"ergoTlsPort\": 52345,\n  \"ergoUser\": \"user\",\n  \"ergoSecondUser\": \"user\",\n  \"ergoWorker\": \"worker\",\n  \"ergoTaxPercent\": 20,\n  \"ergoSecondTaxPercent\": 0,\n  \"enableErgoProxy\": false,\n  \"cfxPoolAddress\": \"cfx.f2pool.com\",\n  \"cfxPoolSslMode\": false,\n  \"cfxPoolPort\": 6800,\n  \"cfxTcpPort\": 6800,\n  \"cfxTlsPort\": 62345,\n  \"cfxUser\": \"user\",\n  \"cfxSecondUser\": \"user\",\n  \"cfxWorker\": \"worker\",\n  \"cfxTaxPercent\": 20,\n  \"cfxSecondTaxPercent\": 0,\n  \"enableCfxProxy\": false,\n  \"httpLogPort\":8080,\n  \"httpLogPassword\":\"admin\",\n  \"enableHttpLog\":true\n}"
  },
  {
    "path": "linux/html/index-no-tax.html",
    "content": "<!DOCTYPE html>\r\n\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>管理控制台</title>\r\n    <style>\r\n        /*\r\n        CSS for the main interaction\r\n       */\r\n        .tabset > input[type=\"radio\"] {\r\n            position: absolute;\r\n            left: -200vw;\r\n        }\r\n\r\n        .tabset .tab-panel {\r\n            display: none;\r\n        }\r\n\r\n        .tabset > input:first-child:checked ~ .tab-panels > .tab-panel:first-child,\r\n        .tabset > input:nth-child(3):checked ~ .tab-panels > .tab-panel:nth-child(2),\r\n        .tabset > input:nth-child(5):checked ~ .tab-panels > .tab-panel:nth-child(3),\r\n        .tabset > input:nth-child(7):checked ~ .tab-panels > .tab-panel:nth-child(4),\r\n        .tabset > input:nth-child(9):checked ~ .tab-panels > .tab-panel:nth-child(5),\r\n        .tabset > input:nth-child(11):checked ~ .tab-panels > .tab-panel:nth-child(6),\r\n        .tabset > input:nth-child(13):checked ~ .tab-panels > .tab-panel:nth-child(7),\r\n        .tabset > input:nth-child(15):checked ~ .tab-panels > .tab-panel:nth-child(8),\r\n        .tabset > input:nth-child(17):checked ~ .tab-panels > .tab-panel:nth-child(9),\r\n        .tabset > input:nth-child(19):checked ~ .tab-panels > .tab-panel:nth-child(10),\r\n        .tabset > input:nth-child(21):checked ~ .tab-panels > .tab-panel:nth-child(11) {\r\n            display: block;\r\n        }\r\n\r\n        /*\r\n        Styling\r\n       */\r\n        body {\r\n            font: 16px/1.5em \"Overpass\", \"Open Sans\", Helvetica, sans-serif;\r\n            color: #333;\r\n            font-weight: 300;\r\n        }\r\n\r\n        .tabset > label {\r\n            position: relative;\r\n            display: inline-block;\r\n            padding: 15px 15px 25px;\r\n            border: 1px solid transparent;\r\n            border-bottom: 0;\r\n            cursor: pointer;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .tabset > label::after {\r\n            content: \"\";\r\n            position: absolute;\r\n            left: 15px;\r\n            bottom: 10px;\r\n            width: 22px;\r\n            height: 4px;\r\n            background: #8d8d8d;\r\n        }\r\n\r\n        .tabset > label:hover,\r\n        .tabset > input:focus + label {\r\n            color: #06c;\r\n        }\r\n\r\n        .tabset > label:hover::after,\r\n        .tabset > input:focus + label::after,\r\n        .tabset > input:checked + label::after {\r\n            background: #06c;\r\n        }\r\n\r\n        .tabset > input:checked + label {\r\n            border-color: #ccc;\r\n            border-bottom: 1px solid #fff;\r\n            margin-bottom: -1px;\r\n        }\r\n\r\n        .tab-panel {\r\n            padding: 30px 0;\r\n            border-top: 1px solid #ccc;\r\n        }\r\n\r\n        body {\r\n            padding: 1px;\r\n        }\r\n\r\n        #logButton {\r\n            display: inline-flex;\r\n            margin-top: 0.5rem;\r\n            text-decoration: inherit;\r\n            --tw-text-opacity: 1;\r\n            padding-left: 1rem;\r\n            --tw-bg-opacity: 1;\r\n            background-color: rgba(37, 99, 235, var(--tw-bg-opacity));\r\n            align-items: center;\r\n            padding-right: 1rem;\r\n            color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n            padding-top: 0.5rem;\r\n            padding-bottom: 0.5rem;\r\n            letter-spacing: -.05em;\r\n            font-weight: 600;\r\n            font-size: 1.125rem;\r\n            line-height: 1.75rem;\r\n            position: absolute;\r\n            right: 0.6rem;\r\n        }\r\n    </style>\r\n\r\n    <style>\r\n        /* Table Styles */\r\n\r\n        .table-wrapper {\r\n            margin: 10px 70px 70px;\r\n            box-shadow: 0px 35px 50px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .fl-table {\r\n            border-radius: 5px;\r\n            font-size: 16px;\r\n            font-weight: normal;\r\n            border: none;\r\n            border-collapse: collapse;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            white-space: nowrap;\r\n            background-color: white;\r\n        }\r\n\r\n        .fl-table td,\r\n        .fl-table th {\r\n            text-align: center;\r\n            padding: 8px;\r\n        }\r\n\r\n        .fl-table td {\r\n            border-right: 1px solid #f8f8f8;\r\n            font-size: 14px;\r\n        }\r\n\r\n\r\n        .fl-table thead th {\r\n            color: #ffffff;\r\n            background: #4FC3A1;\r\n        }\r\n\r\n\r\n        .fl-table thead th:nth-child(odd) {\r\n            color: #ffffff;\r\n            background: #324960;\r\n        }\r\n\r\n        .fl-table tr:nth-child(even) {\r\n            background: #F8F8F8;\r\n        }\r\n\r\n        /* Responsive */\r\n\r\n        @media (max-width: 767px) {\r\n            .fl-table {\r\n                display: block;\r\n                width: 100%;\r\n            }\r\n\r\n            .table-wrapper:before {\r\n                content: \"Scroll horizontally >\";\r\n                display: block;\r\n                text-align: right;\r\n                font-size: 11px;\r\n                color: white;\r\n                padding: 0 0 10px;\r\n            }\r\n\r\n            .fl-table thead,\r\n            .fl-table tbody,\r\n            .fl-table thead th {\r\n                display: block;\r\n            }\r\n\r\n            .fl-table thead th:last-child {\r\n                border-bottom: none;\r\n            }\r\n\r\n            .fl-table thead {\r\n                float: left;\r\n            }\r\n\r\n            .fl-table tbody {\r\n                width: auto;\r\n                position: relative;\r\n                overflow-x: auto;\r\n            }\r\n\r\n            .fl-table td,\r\n            .fl-table th {\r\n                padding: 20px .625em .625em .625em;\r\n                height: 60px;\r\n                vertical-align: middle;\r\n                box-sizing: border-box;\r\n                overflow-x: hidden;\r\n                overflow-y: auto;\r\n                width: 120px;\r\n                font-size: 13px;\r\n                text-overflow: ellipsis;\r\n            }\r\n\r\n            .fl-table thead th {\r\n                text-align: left;\r\n                border-bottom: 1px solid #f7f7f9;\r\n            }\r\n\r\n            .fl-table tbody tr {\r\n                display: table-cell;\r\n            }\r\n\r\n            .fl-table tbody tr:nth-child(odd) {\r\n                background: none;\r\n            }\r\n\r\n            .fl-table tr:nth-child(even) {\r\n                background: transparent;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(odd) {\r\n                background: #F8F8F8;\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(even) {\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tbody td {\r\n                display: block;\r\n                text-align: center;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n<div id=\"main\" class=\"tabset\" style=\"display: none;\">\r\n\r\n    <!-- Tab 0 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabConfig\" aria-controls=\"secConfig\" onclick=\"onConfigClick()\" checked>\r\n    <label for=\"tabConfig\">中转配置</label>\r\n    <!-- Tab 1 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEth\" aria-controls=\"secEth\" onclick=\"onEthClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEth\" id=\"labEth\" style=\"display: none;\">ETHW/ETF信息</label>\r\n    <!-- Tab 2 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEtc\" aria-controls=\"secEtc\" onclick=\"onEtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEtc\" id=\"labEtc\" style=\"display: none;\">ETC信息</label>\r\n    <!-- Tab 3 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabBtc\" aria-controls=\"secBtc\" onclick=\"onBtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabBtc\" id=\"labBtc\" style=\"display: none;\">BTC信息</label>\r\n    <!-- Tab 4 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabRvn\" aria-controls=\"secRvn\" onclick=\"onRvnClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabRvn\" id=\"labRvn\" style=\"display: none;\">RVN信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabErgo\" aria-controls=\"secErgo\" onclick=\"onErgoClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabErgo\" id=\"labErgo\" style=\"display: none;\">ERGO信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabCfx\" aria-controls=\"secCfx\" onclick=\"onCfxClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabCfx\" id=\"labCfx\" style=\"display: none;\">CFX信息</label>\r\n\r\n    <div class=\"tab-panels\">\r\n        <section id=\"secConfig\" class=\"tab-panel\">\r\n            <div id=\"tableConfig\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>配置项解释</th>\r\n                        <th>配置项名称</th>\r\n                        <th>配置项内容</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"configTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEth\" class=\"tab-panel\">\r\n            <div id=\"tableEth\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ethTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEtc\" class=\"tab-panel\">\r\n            <div id=\"tableEtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"etcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secBtc\" class=\"tab-panel\">\r\n            <div id=\"tableBtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"btcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secRvn\" class=\"tab-panel\">\r\n            <div id=\"tableRvn\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"rvnTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secErgo\" class=\"tab-panel\">\r\n            <div id=\"tableErgo\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ergoTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secCfx\" class=\"tab-panel\">\r\n            <div id=\"tableCfx\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"cfxTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n    </div>\r\n\r\n</div>\r\n</div>\r\n<div id=\"timer\" style=\"display: none;\"></div>\r\n</body>\r\n<script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n<script>!function(a){function b(a){var b;return a=a||0,b=Math.floor(a/60),{days:a>=n.DAYINSECONDS?Math.floor(a/n.DAYINSECONDS):0,hours:a>=3600?Math.floor(a%n.DAYINSECONDS/3600):0,totalMinutes:b,minutes:a>=60?Math.floor(a%3600/60):b,seconds:a%60,totalSeconds:a}}function c(a){return((a=parseInt(a,10))<10&&\"0\")+a}function d(){return{seconds:0,editable:!1,duration:null,callback:function(){console.log(\"Time up!\")},repeat:!1,countdown:!1,format:null,updateFrequency:500}}function e(){return Math.round((Date.now?Date.now():(new Date).getTime())/1e3)}function f(a){var d=b(a);if(d.days)return d.days+\":\"+c(d.hours)+\":\"+c(d.minutes)+\":\"+c(d.seconds);if(d.hours)return d.hours+\":\"+c(d.minutes)+\":\"+c(d.seconds);return d.minutes?d.minutes+\":\"+c(d.seconds)+\" min\":d.seconds+\" sec\"}function g(a,d){for(var e=b(a),f=[{identifier:\"%d\",value:e.days},{identifier:\"%h\",value:e.hours},{identifier:\"%m\",value:e.minutes},{identifier:\"%s\",value:e.seconds},{identifier:\"%g\",value:e.totalMinutes},{identifier:\"%t\",value:e.totalSeconds},{identifier:\"%D\",value:c(e.days)},{identifier:\"%H\",value:c(e.hours)},{identifier:\"%M\",value:c(e.minutes)},{identifier:\"%S\",value:c(e.seconds)},{identifier:\"%G\",value:c(e.totalMinutes)},{identifier:\"%T\",value:c(e.totalSeconds)}],g=0;g<f.length;g++)d=d.replace(f[g].identifier,f[g].value);return d}function h(a){if(!isNaN(Number(a)))return a;a=a.toLowerCase();var b=a.match(/\\d+d/),c=a.match(/\\d+h/),d=a.match(/\\d+m/),e=a.match(/\\d+s/);if(!(b||c||d||e))throw new Error(\"Invalid string passed in durationTimeToSeconds!\");var f=0;return b&&(f+=Number(b[0].replace(\"d\",\"\"))*n.DAYINSECONDS),c&&(f+=3600*Number(c[0].replace(\"h\",\"\"))),d&&(f+=60*Number(d[0].replace(\"m\",\"\"))),e&&(f+=Number(e[0].replace(\"s\",\"\"))),f}function i(a){var b,c;return a.indexOf(\"sec\")>0?c=Number(a.replace(/\\ssec/g,\"\")):a.indexOf(\"min\")>0?(a=a.replace(/\\smin/g,\"\"),b=a.split(\":\"),c=Number(60*b[0])+Number(b[1])):a.match(/\\d{1,2}:\\d{2}:\\d{2}:\\d{2}/)?(b=a.split(\":\"),c=Number(b[0]*n.DAYINSECONDS)+Number(3600*b[1])+Number(60*b[2])+Number(b[3])):a.match(/\\d{1,2}:\\d{2}:\\d{2}/)&&(b=a.split(\":\"),c=Number(3600*b[0])+Number(60*b[1])+Number(b[2])),c}function j(b,c){b.state=c,a(b.element).data(\"state\",c)}function k(b){a(b.element).on(\"focus\",function(){b.pause()}),a(b.element).on(\"blur\",function(){b.totalSeconds=i(a(b.element)[b.html]()),b.resume()})}function l(b){if(b.totalSeconds=e()-b.startTime,b.config.countdown)return b.totalSeconds=b.config.duration-b.totalSeconds,0===b.totalSeconds&&(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.callback(),a(b.element).data(\"seconds\")),void b.render();b.render(),b.config.duration&&b.totalSeconds>0&&b.totalSeconds%b.config.duration==0&&(b.config.callback&&b.config.callback(),b.config.repeat||(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.duration=null))}function m(b,c){if(this.element=b,this.originalConfig=a.extend({},c),this.totalSeconds=0,this.intervalId=null,this.html=\"html\",\"INPUT\"!==b.tagName&&\"TEXTAREA\"!==b.tagName||(this.html=\"val\"),this.config=o.getDefaultConfig(),c.duration&&(c.duration=o.durationTimeToSeconds(c.duration)),\"string\"!=typeof c&&(this.config=a.extend(this.config,c)),this.config.seconds&&(this.totalSeconds=this.config.seconds),this.config.editable&&o.makeEditable(this),this.startTime=o.unixSeconds()-this.totalSeconds,this.config.duration&&this.config.repeat&&this.config.updateFrequency<1e3&&(this.config.updateFrequency=1e3),this.config.countdown){if(!this.config.duration)throw new Error(\"Countdown option set without duration!\");if(this.config.editable)throw new Error(\"Cannot set editable on a countdown timer!\");this.config.startTime=o.unixSeconds()-this.config.duration,this.totalSeconds=this.config.duration}}var n={PLUGIN_NAME:\"timer\",TIMER_RUNNING:\"running\",TIMER_PAUSED:\"paused\",TIMER_REMOVED:\"removed\",DAYINSECONDS:86400},o={getDefaultConfig:d,unixSeconds:e,secondsToPrettyTime:f,secondsToFormattedTime:g,durationTimeToSeconds:h,prettyTimeToSeconds:i,setState:j,makeEditable:k,intervalHandler:l};m.prototype.start=function(){this.state!==n.TIMER_RUNNING&&(o.setState(this,n.TIMER_RUNNING),this.render(),this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.pause=function(){this.state===n.TIMER_RUNNING&&(o.setState(this,n.TIMER_PAUSED),clearInterval(this.intervalId))},m.prototype.resume=function(){this.state===n.TIMER_PAUSED&&(o.setState(this,n.TIMER_RUNNING),this.config.countdown?this.startTime=o.unixSeconds()-this.config.duration+this.totalSeconds:this.startTime=o.unixSeconds()-this.totalSeconds,this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.remove=function(){clearInterval(this.intervalId),o.setState(this,n.TIMER_REMOVED),a(this.element).data(n.PLUGIN_NAME,null),a(this.element).data(\"seconds\",null)},m.prototype.reset=function(){var b=this.originalConfig;this.remove(),a(this.element).timer(b)},m.prototype.render=function(){this.config.format?a(this.element)[this.html](o.secondsToFormattedTime(this.totalSeconds,this.config.format)):a(this.element)[this.html](o.secondsToPrettyTime(this.totalSeconds)),a(this.element).data(\"seconds\",this.totalSeconds)},a.fn.timer=function(b){return b=b||\"start\",this.each(function(){a.data(this,n.PLUGIN_NAME)instanceof m||a.data(this,n.PLUGIN_NAME,new m(this,b));var c=a.data(this,n.PLUGIN_NAME);\"string\"==typeof b?\"function\"==typeof c[b]&&c[b]():c.start()})}}(jQuery);</script>\r\n<script>\r\n    function calcTimeDiff(pastTime) {\r\n        var now = new Date().getTime();\r\n        if (now <= pastTime) {\r\n            return \"刚刚\";\r\n        }\r\n        var nowSecond = Math.floor(now / 1000);\r\n        var pastSecond = Math.floor(pastTime / 1000);\r\n        var diff = nowSecond - pastSecond;\r\n        if (diff < 60) {\r\n            return diff + \"秒\";\r\n        }\r\n        if (diff < 3600) {\r\n            return Math.floor(diff / 60) + \"分\" + (diff % 60) + \"秒\"\r\n        }\r\n        if (diff < 86400) {\r\n            return Math.floor(diff / 3600) + \"时\" + Math.floor((diff % 3600) / 60) + \"分\" + ((diff % 3600) % 60) + \"秒\"\r\n        }\r\n        return Math.floor(diff / 86400) + \"天\" + Math.floor((diff % 86400) / 3600) + \"时\" + Math.floor(((diff % 86400) % 3600) / 60) + \"分\" + (((diff % 86400) % 3600) % 60) + \"秒\"\r\n    }\r\n\r\n    var isInConfig = true, isInEth = false, isInEtc = false, isInBtc = false, isInRvn = false, isInErgo = false, isInCfx = false;\r\n    var configDesc = {\r\n        \"ethPoolAddress\": \"ETHW/ETF矿池地址\",\r\n        \"ethPoolSslMode\": \"ETHW/ETF矿池端口是否SSL模式\",\r\n        \"ethPoolPort\": \"ETHW/ETF矿池端口\",\r\n        \"ethTcpPort\": \"ETHW/ETF中转TCP端口\",\r\n        \"ethTlsPort\": \"ETHW/ETF中转SSL端口\",\r\n\r\n        \"etcPoolAddress\": \"ETC矿池地址\",\r\n        \"etcPoolSslMode\": \"ETC矿池端口是否SSL模式\",\r\n        \"etcPoolPort\": \"ETC矿池端口\",\r\n        \"etcTcpPort\": \"ETC中转TCP端口\",\r\n        \"etcTlsPort\": \"ETC中转SSL端口\",\r\n\r\n        \"btcPoolAddress\": \"BTC矿池地址\",\r\n        \"btcPoolSslMode\": \"BTC矿池端口是否SSL模式\",\r\n        \"btcPoolPort\": \"BTC矿池端口\",\r\n        \"btcTcpPort\": \"BTC中转TCP端口\",\r\n        \"btcTlsPort\": \"BTC中转SSL端口\",\r\n\r\n        \"rvnPoolAddress\": \"RVN矿池地址\",\r\n        \"rvnPoolSslMode\": \"RVN矿池端口是否SSL模式\",\r\n        \"rvnPoolPort\": \"RVN矿池端口\",\r\n        \"rvnTcpPort\": \"RVN中转TCP端口\",\r\n        \"rvnTlsPort\": \"RVN中转SSL端口\",\r\n\r\n        \"ergoPoolAddress\": \"ERGO矿池地址\",\r\n        \"ergoPoolSslMode\": \"ERGO矿池端口是否SSL模式\",\r\n        \"ergoPoolPort\": \"ERGO矿池端口\",\r\n        \"ergoTcpPort\": \"ERGO中转TCP端口\",\r\n        \"ergoTlsPort\": \"ERGO中转SSL端口\",\r\n\r\n        \"cfxPoolAddress\": \"CFX矿池地址\",\r\n        \"cfxPoolSslMode\": \"CFX矿池端口是否SSL模式\",\r\n        \"cfxPoolPort\": \"CFX矿池端口\",\r\n        \"cfxTcpPort\": \"CFX中转TCP端口\",\r\n        \"cfxTlsPort\": \"CFX中转SSL端口\",\r\n\r\n        \"enableHttpLog\": \"是否启用网页管理控制台\",\r\n        \"httpLogPort\": \"网页管理控制台端口\",\r\n\r\n        \"ccVersion\": \"转发工具版本\",\r\n    }\r\n    $(document).ready(function () {\r\n        $.ajax({\r\n            url: \"/config.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                onConfigLoaded(data.data);\r\n            }\r\n        });\r\n    });\r\n\r\n    function onConfigLoaded(data) {\r\n        $(\"#main\").show();\r\n        if (data.enableEthProxy) {\r\n            $(\"#tabEth\").show();\r\n            $(\"#labEth\").show();\r\n        }\r\n        if (data.enableEtcProxy) {\r\n            $(\"#tabEtc\").show();\r\n            $(\"#labEtc\").show();\r\n        }\r\n        if (data.enableBtcProxy) {\r\n            $(\"#tabBtc\").show();\r\n            $(\"#labBtc\").show();\r\n        }\r\n        if (data.enableRvnProxy) {\r\n            $(\"#tabRvn\").show();\r\n            $(\"#labRvn\").show();\r\n        }\r\n        if (data.enableErgoProxy) {\r\n            $(\"#tabErgo\").show();\r\n            $(\"#labErgo\").show();\r\n        }\r\n        if (data.enableCfxProxy) {\r\n            $(\"#tabCfx\").show();\r\n            $(\"#labCfx\").show();\r\n        }\r\n        var tableStr = \"\";\r\n        for (var key in configDesc) {\r\n            if (!(key in data)) {\r\n                continue;\r\n            }\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + configDesc[key] + \"</td>\";\r\n            tableStr += \"<td>\" + key + \"</td>\";\r\n            tableStr += \"<td>\" + (data[key] === true ? \"是\" : (data[key] === false ? \"否\" : data[key])) + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        $(\"#configTbody\").html(tableStr);\r\n    }\r\n\r\n    function onConfigClick() {\r\n        if (isInConfig) {\r\n            return;\r\n        }\r\n        isInConfig = true;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n    }\r\n\r\n    function onEthClick() {\r\n        if (isInEth) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = true;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEthInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEthInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onEtcClick() {\r\n        if (isInEtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = true;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onBtcClick() {\r\n        if (isInBtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = true;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadBtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadBtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onRvnClick() {\r\n        if (isInRvn) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = true;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadRvnInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadRvnInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onErgoClick() {\r\n        if (isInErgo) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = true;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadErgoInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadErgoInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onCfxClick() {\r\n        if (isInCfx) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = true;\r\n        $('#timer').timer(\"remove\");\r\n        loadCfxInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadCfxInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function loadEthInfo() {\r\n        $.ajax({\r\n            url: \"/eth.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEth) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEthLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadEtcInfo() {\r\n        $.ajax({\r\n            url: \"/etc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadBtcInfo() {\r\n        $.ajax({\r\n            url: \"/btc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInBtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onBtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadRvnInfo() {\r\n        $.ajax({\r\n            url: \"/rvn.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInRvn) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onRvnLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n    function loadErgoInfo() {\r\n        $.ajax({\r\n            url: \"/ergo.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInErgo) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onErgoLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadCfxInfo() {\r\n        $.ajax({\r\n            url: \"/cfx.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInCfx) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onCfxLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    var arrayCompare = function (x, y) {\r\n        if (x.connectTime < y.connectTime) {\r\n            return -1\r\n        }\r\n        if (x.connectTime > y.connectTime) {\r\n            return 1\r\n        }\r\n        return 0\r\n    }\r\n\r\n    function onEthLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ethTbody\").html(tableStr);\r\n    }\r\n\r\n    function onEtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#etcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onBtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#btcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onRvnLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#rvnTbody\").html(tableStr);\r\n    }\r\n\r\n    function onErgoLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ergoTbody\").html(tableStr);\r\n    }\r\n\r\n    function onCfxLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#cfxTbody\").html(tableStr);\r\n    }\r\n</script>\r\n\r\n</html>"
  },
  {
    "path": "linux/html/index.html",
    "content": "<!DOCTYPE html>\r\n\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>管理控制台</title>\r\n    <style>\r\n        /*\r\n        CSS for the main interaction\r\n       */\r\n        .tabset > input[type=\"radio\"] {\r\n            position: absolute;\r\n            left: -200vw;\r\n        }\r\n\r\n        .tabset .tab-panel {\r\n            display: none;\r\n        }\r\n\r\n        .tabset > input:first-child:checked ~ .tab-panels > .tab-panel:first-child,\r\n        .tabset > input:nth-child(3):checked ~ .tab-panels > .tab-panel:nth-child(2),\r\n        .tabset > input:nth-child(5):checked ~ .tab-panels > .tab-panel:nth-child(3),\r\n        .tabset > input:nth-child(7):checked ~ .tab-panels > .tab-panel:nth-child(4),\r\n        .tabset > input:nth-child(9):checked ~ .tab-panels > .tab-panel:nth-child(5),\r\n        .tabset > input:nth-child(11):checked ~ .tab-panels > .tab-panel:nth-child(6),\r\n        .tabset > input:nth-child(13):checked ~ .tab-panels > .tab-panel:nth-child(7),\r\n        .tabset > input:nth-child(15):checked ~ .tab-panels > .tab-panel:nth-child(8),\r\n        .tabset > input:nth-child(17):checked ~ .tab-panels > .tab-panel:nth-child(9),\r\n        .tabset > input:nth-child(19):checked ~ .tab-panels > .tab-panel:nth-child(10),\r\n        .tabset > input:nth-child(21):checked ~ .tab-panels > .tab-panel:nth-child(11) {\r\n            display: block;\r\n        }\r\n\r\n        /*\r\n        Styling\r\n       */\r\n        body {\r\n            font: 16px/1.5em \"Overpass\", \"Open Sans\", Helvetica, sans-serif;\r\n            color: #333;\r\n            font-weight: 300;\r\n        }\r\n\r\n        .tabset > label {\r\n            position: relative;\r\n            display: inline-block;\r\n            padding: 15px 15px 25px;\r\n            border: 1px solid transparent;\r\n            border-bottom: 0;\r\n            cursor: pointer;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .tabset > label::after {\r\n            content: \"\";\r\n            position: absolute;\r\n            left: 15px;\r\n            bottom: 10px;\r\n            width: 22px;\r\n            height: 4px;\r\n            background: #8d8d8d;\r\n        }\r\n\r\n        .tabset > label:hover,\r\n        .tabset > input:focus + label {\r\n            color: #06c;\r\n        }\r\n\r\n        .tabset > label:hover::after,\r\n        .tabset > input:focus + label::after,\r\n        .tabset > input:checked + label::after {\r\n            background: #06c;\r\n        }\r\n\r\n        .tabset > input:checked + label {\r\n            border-color: #ccc;\r\n            border-bottom: 1px solid #fff;\r\n            margin-bottom: -1px;\r\n        }\r\n\r\n        .tab-panel {\r\n            padding: 30px 0;\r\n            border-top: 1px solid #ccc;\r\n        }\r\n\r\n        body {\r\n            padding: 1px;\r\n        }\r\n\r\n        #logButton {\r\n            display: inline-flex;\r\n            margin-top: 0.5rem;\r\n            text-decoration: inherit;\r\n            --tw-text-opacity: 1;\r\n            padding-left: 1rem;\r\n            --tw-bg-opacity: 1;\r\n            background-color: rgba(37, 99, 235, var(--tw-bg-opacity));\r\n            align-items: center;\r\n            padding-right: 1rem;\r\n            color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n            padding-top: 0.5rem;\r\n            padding-bottom: 0.5rem;\r\n            letter-spacing: -.05em;\r\n            font-weight: 600;\r\n            font-size: 1.125rem;\r\n            line-height: 1.75rem;\r\n            position: absolute;\r\n            right: 0.6rem;\r\n        }\r\n    </style>\r\n\r\n    <style>\r\n        /* Table Styles */\r\n\r\n        .table-wrapper {\r\n            margin: 10px 70px 70px;\r\n            box-shadow: 0px 35px 50px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .fl-table {\r\n            border-radius: 5px;\r\n            font-size: 16px;\r\n            font-weight: normal;\r\n            border: none;\r\n            border-collapse: collapse;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            white-space: nowrap;\r\n            background-color: white;\r\n        }\r\n\r\n        .fl-table td,\r\n        .fl-table th {\r\n            text-align: center;\r\n            padding: 8px;\r\n        }\r\n\r\n        .fl-table td {\r\n            border-right: 1px solid #f8f8f8;\r\n            font-size: 14px;\r\n        }\r\n\r\n\r\n        .fl-table thead th {\r\n            color: #ffffff;\r\n            background: #4FC3A1;\r\n        }\r\n\r\n\r\n        .fl-table thead th:nth-child(odd) {\r\n            color: #ffffff;\r\n            background: #324960;\r\n        }\r\n\r\n        .fl-table tr:nth-child(even) {\r\n            background: #F8F8F8;\r\n        }\r\n\r\n        /* Responsive */\r\n\r\n        @media (max-width: 767px) {\r\n            .fl-table {\r\n                display: block;\r\n                width: 100%;\r\n            }\r\n\r\n            .table-wrapper:before {\r\n                content: \"Scroll horizontally >\";\r\n                display: block;\r\n                text-align: right;\r\n                font-size: 11px;\r\n                color: white;\r\n                padding: 0 0 10px;\r\n            }\r\n\r\n            .fl-table thead,\r\n            .fl-table tbody,\r\n            .fl-table thead th {\r\n                display: block;\r\n            }\r\n\r\n            .fl-table thead th:last-child {\r\n                border-bottom: none;\r\n            }\r\n\r\n            .fl-table thead {\r\n                float: left;\r\n            }\r\n\r\n            .fl-table tbody {\r\n                width: auto;\r\n                position: relative;\r\n                overflow-x: auto;\r\n            }\r\n\r\n            .fl-table td,\r\n            .fl-table th {\r\n                padding: 20px .625em .625em .625em;\r\n                height: 60px;\r\n                vertical-align: middle;\r\n                box-sizing: border-box;\r\n                overflow-x: hidden;\r\n                overflow-y: auto;\r\n                width: 120px;\r\n                font-size: 13px;\r\n                text-overflow: ellipsis;\r\n            }\r\n\r\n            .fl-table thead th {\r\n                text-align: left;\r\n                border-bottom: 1px solid #f7f7f9;\r\n            }\r\n\r\n            .fl-table tbody tr {\r\n                display: table-cell;\r\n            }\r\n\r\n            .fl-table tbody tr:nth-child(odd) {\r\n                background: none;\r\n            }\r\n\r\n            .fl-table tr:nth-child(even) {\r\n                background: transparent;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(odd) {\r\n                background: #F8F8F8;\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(even) {\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tbody td {\r\n                display: block;\r\n                text-align: center;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n<div id=\"main\" class=\"tabset\" style=\"display: none;\">\r\n\r\n    <!-- Tab 0 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabConfig\" aria-controls=\"secConfig\" onclick=\"onConfigClick()\" checked>\r\n    <label for=\"tabConfig\">中转配置</label>\r\n    <!-- Tab 1 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEth\" aria-controls=\"secEth\" onclick=\"onEthClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEth\" id=\"labEth\" style=\"display: none;\">ETHW/ETF信息</label>\r\n    <!-- Tab 2 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEtc\" aria-controls=\"secEtc\" onclick=\"onEtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEtc\" id=\"labEtc\" style=\"display: none;\">ETC信息</label>\r\n    <!-- Tab 3 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabBtc\" aria-controls=\"secBtc\" onclick=\"onBtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabBtc\" id=\"labBtc\" style=\"display: none;\">BTC信息</label>\r\n    <!-- Tab 4 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabRvn\" aria-controls=\"secRvn\" onclick=\"onRvnClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabRvn\" id=\"labRvn\" style=\"display: none;\">RVN信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabErgo\" aria-controls=\"secErgo\" onclick=\"onErgoClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabErgo\" id=\"labErgo\" style=\"display: none;\">ERGO信息</label>\r\n    <!-- Tab 6 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabCfx\" aria-controls=\"secCfx\" onclick=\"onCfxClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabCfx\" id=\"labCfx\" style=\"display: none;\">CFX信息</label>\r\n\r\n    <a id=\"logButton\" href=\"/log.html\" target=\"_blank\" style=\"display: none;\">\r\n        查看原始日志\r\n    </a>\r\n\r\n    <div class=\"tab-panels\">\r\n        <section id=\"secConfig\" class=\"tab-panel\">\r\n            <div id=\"tableConfig\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>配置项解释</th>\r\n                        <th>配置项名称</th>\r\n                        <th>配置项内容</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"configTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEth\" class=\"tab-panel\">\r\n            <div id=\"tableEth\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ethTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEtc\" class=\"tab-panel\">\r\n            <div id=\"tableEtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"etcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secBtc\" class=\"tab-panel\">\r\n            <div id=\"tableBtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"btcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secRvn\" class=\"tab-panel\">\r\n            <div id=\"tableRvn\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"rvnTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secErgo\" class=\"tab-panel\">\r\n            <div id=\"tableErgo\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ergoTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secCfx\" class=\"tab-panel\">\r\n            <div id=\"tableCfx\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"cfxTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n    </div>\r\n\r\n</div>\r\n</div>\r\n<div id=\"timer\" style=\"display: none;\"></div>\r\n</body>\r\n<script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n<script>!function(a){function b(a){var b;return a=a||0,b=Math.floor(a/60),{days:a>=n.DAYINSECONDS?Math.floor(a/n.DAYINSECONDS):0,hours:a>=3600?Math.floor(a%n.DAYINSECONDS/3600):0,totalMinutes:b,minutes:a>=60?Math.floor(a%3600/60):b,seconds:a%60,totalSeconds:a}}function c(a){return((a=parseInt(a,10))<10&&\"0\")+a}function d(){return{seconds:0,editable:!1,duration:null,callback:function(){console.log(\"Time up!\")},repeat:!1,countdown:!1,format:null,updateFrequency:500}}function e(){return Math.round((Date.now?Date.now():(new Date).getTime())/1e3)}function f(a){var d=b(a);if(d.days)return d.days+\":\"+c(d.hours)+\":\"+c(d.minutes)+\":\"+c(d.seconds);if(d.hours)return d.hours+\":\"+c(d.minutes)+\":\"+c(d.seconds);return d.minutes?d.minutes+\":\"+c(d.seconds)+\" min\":d.seconds+\" sec\"}function g(a,d){for(var e=b(a),f=[{identifier:\"%d\",value:e.days},{identifier:\"%h\",value:e.hours},{identifier:\"%m\",value:e.minutes},{identifier:\"%s\",value:e.seconds},{identifier:\"%g\",value:e.totalMinutes},{identifier:\"%t\",value:e.totalSeconds},{identifier:\"%D\",value:c(e.days)},{identifier:\"%H\",value:c(e.hours)},{identifier:\"%M\",value:c(e.minutes)},{identifier:\"%S\",value:c(e.seconds)},{identifier:\"%G\",value:c(e.totalMinutes)},{identifier:\"%T\",value:c(e.totalSeconds)}],g=0;g<f.length;g++)d=d.replace(f[g].identifier,f[g].value);return d}function h(a){if(!isNaN(Number(a)))return a;a=a.toLowerCase();var b=a.match(/\\d+d/),c=a.match(/\\d+h/),d=a.match(/\\d+m/),e=a.match(/\\d+s/);if(!(b||c||d||e))throw new Error(\"Invalid string passed in durationTimeToSeconds!\");var f=0;return b&&(f+=Number(b[0].replace(\"d\",\"\"))*n.DAYINSECONDS),c&&(f+=3600*Number(c[0].replace(\"h\",\"\"))),d&&(f+=60*Number(d[0].replace(\"m\",\"\"))),e&&(f+=Number(e[0].replace(\"s\",\"\"))),f}function i(a){var b,c;return a.indexOf(\"sec\")>0?c=Number(a.replace(/\\ssec/g,\"\")):a.indexOf(\"min\")>0?(a=a.replace(/\\smin/g,\"\"),b=a.split(\":\"),c=Number(60*b[0])+Number(b[1])):a.match(/\\d{1,2}:\\d{2}:\\d{2}:\\d{2}/)?(b=a.split(\":\"),c=Number(b[0]*n.DAYINSECONDS)+Number(3600*b[1])+Number(60*b[2])+Number(b[3])):a.match(/\\d{1,2}:\\d{2}:\\d{2}/)&&(b=a.split(\":\"),c=Number(3600*b[0])+Number(60*b[1])+Number(b[2])),c}function j(b,c){b.state=c,a(b.element).data(\"state\",c)}function k(b){a(b.element).on(\"focus\",function(){b.pause()}),a(b.element).on(\"blur\",function(){b.totalSeconds=i(a(b.element)[b.html]()),b.resume()})}function l(b){if(b.totalSeconds=e()-b.startTime,b.config.countdown)return b.totalSeconds=b.config.duration-b.totalSeconds,0===b.totalSeconds&&(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.callback(),a(b.element).data(\"seconds\")),void b.render();b.render(),b.config.duration&&b.totalSeconds>0&&b.totalSeconds%b.config.duration==0&&(b.config.callback&&b.config.callback(),b.config.repeat||(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.duration=null))}function m(b,c){if(this.element=b,this.originalConfig=a.extend({},c),this.totalSeconds=0,this.intervalId=null,this.html=\"html\",\"INPUT\"!==b.tagName&&\"TEXTAREA\"!==b.tagName||(this.html=\"val\"),this.config=o.getDefaultConfig(),c.duration&&(c.duration=o.durationTimeToSeconds(c.duration)),\"string\"!=typeof c&&(this.config=a.extend(this.config,c)),this.config.seconds&&(this.totalSeconds=this.config.seconds),this.config.editable&&o.makeEditable(this),this.startTime=o.unixSeconds()-this.totalSeconds,this.config.duration&&this.config.repeat&&this.config.updateFrequency<1e3&&(this.config.updateFrequency=1e3),this.config.countdown){if(!this.config.duration)throw new Error(\"Countdown option set without duration!\");if(this.config.editable)throw new Error(\"Cannot set editable on a countdown timer!\");this.config.startTime=o.unixSeconds()-this.config.duration,this.totalSeconds=this.config.duration}}var n={PLUGIN_NAME:\"timer\",TIMER_RUNNING:\"running\",TIMER_PAUSED:\"paused\",TIMER_REMOVED:\"removed\",DAYINSECONDS:86400},o={getDefaultConfig:d,unixSeconds:e,secondsToPrettyTime:f,secondsToFormattedTime:g,durationTimeToSeconds:h,prettyTimeToSeconds:i,setState:j,makeEditable:k,intervalHandler:l};m.prototype.start=function(){this.state!==n.TIMER_RUNNING&&(o.setState(this,n.TIMER_RUNNING),this.render(),this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.pause=function(){this.state===n.TIMER_RUNNING&&(o.setState(this,n.TIMER_PAUSED),clearInterval(this.intervalId))},m.prototype.resume=function(){this.state===n.TIMER_PAUSED&&(o.setState(this,n.TIMER_RUNNING),this.config.countdown?this.startTime=o.unixSeconds()-this.config.duration+this.totalSeconds:this.startTime=o.unixSeconds()-this.totalSeconds,this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.remove=function(){clearInterval(this.intervalId),o.setState(this,n.TIMER_REMOVED),a(this.element).data(n.PLUGIN_NAME,null),a(this.element).data(\"seconds\",null)},m.prototype.reset=function(){var b=this.originalConfig;this.remove(),a(this.element).timer(b)},m.prototype.render=function(){this.config.format?a(this.element)[this.html](o.secondsToFormattedTime(this.totalSeconds,this.config.format)):a(this.element)[this.html](o.secondsToPrettyTime(this.totalSeconds)),a(this.element).data(\"seconds\",this.totalSeconds)},a.fn.timer=function(b){return b=b||\"start\",this.each(function(){a.data(this,n.PLUGIN_NAME)instanceof m||a.data(this,n.PLUGIN_NAME,new m(this,b));var c=a.data(this,n.PLUGIN_NAME);\"string\"==typeof b?\"function\"==typeof c[b]&&c[b]():c.start()})}}(jQuery);</script>\r\n<script>\r\n    function calcTimeDiff(pastTime) {\r\n        var now = new Date().getTime();\r\n        if (now <= pastTime) {\r\n            return \"刚刚\";\r\n        }\r\n        var nowSecond = Math.floor(now / 1000);\r\n        var pastSecond = Math.floor(pastTime / 1000);\r\n        var diff = nowSecond - pastSecond;\r\n        if (diff < 60) {\r\n            return diff + \"秒\";\r\n        }\r\n        if (diff < 3600) {\r\n            return Math.floor(diff / 60) + \"分\" + (diff % 60) + \"秒\"\r\n        }\r\n        if (diff < 86400) {\r\n            return Math.floor(diff / 3600) + \"时\" + Math.floor((diff % 3600) / 60) + \"分\" + ((diff % 3600) % 60) + \"秒\"\r\n        }\r\n        return Math.floor(diff / 86400) + \"天\" + Math.floor((diff % 86400) / 3600) + \"时\" + Math.floor(((diff % 86400) % 3600) / 60) + \"分\" + (((diff % 86400) % 3600) % 60) + \"秒\"\r\n    }\r\n\r\n    var isInConfig = true, isInEth = false, isInEtc = false, isInBtc = false, isInRvn = false, isInErgo = false, isInCfx = false;\r\n    var configDesc = {\r\n        \"enableLog\": \"启用日志\",\r\n\r\n        \"ethPoolAddress\": \"ETHW/ETF矿池地址\",\r\n        \"ethPoolSslMode\": \"ETHW/ETF矿池端口是否SSL模式\",\r\n        \"ethPoolPort\": \"ETHW/ETF矿池端口\",\r\n        \"ethTcpPort\": \"ETHW/ETF中转TCP端口\",\r\n        \"ethTlsPort\": \"ETHW/ETF中转SSL端口\",\r\n        \"ethUser\": \"ETHW/ETF第一个抽水用户名\",\r\n        \"ethSecondUser\": \"ETHW/ETF第二个抽水用户名\",\r\n        \"ethWorker\": \"ETHW/ETF抽水矿工名\",\r\n        \"ethTaxPercent\": \"ETHW/ETF第一个账户抽水比例(%)\",\r\n        \"ethSecondTaxPercent\": \"ETHW/ETF第二个账户抽水比例(%)\",\r\n        \"ethDevPercent\": \"ETHW/ETF开发费(%)\",\r\n        \"enableEthProxy\": \"是否启用ETHW/ETF抽水中转服务\",\r\n        \"enableEthDonatePool\": \"是否强制归集ETHW/ETF抽水到其他矿池\",\r\n        \"ethDonatePoolAddress\": \"ETHW/ETF抽水归集矿池地址\",\r\n        \"ethDonatePoolSslMode\": \"ETHW/ETF抽水归集矿池端口是否SSL模式\",\r\n        \"ethDonatePoolPort\": \"ETHW/ETF抽水归集矿池端口\",\r\n\r\n        \"etcPoolAddress\": \"ETC矿池地址\",\r\n        \"etcPoolSslMode\": \"ETC矿池端口是否SSL模式\",\r\n        \"etcPoolPort\": \"ETC矿池端口\",\r\n        \"etcTcpPort\": \"ETC中转TCP端口\",\r\n        \"etcTlsPort\": \"ETC中转SSL端口\",\r\n        \"etcUser\": \"ETC第一个抽水用户名\",\r\n        \"etcSecondUser\": \"ETC第二个抽水用户名\",\r\n        \"etcWorker\": \"ETC抽水矿工名\",\r\n        \"etcTaxPercent\": \"ETC第一个账户抽水比例(%)\",\r\n        \"etcSecondTaxPercent\": \"ETC第二个账户抽水比例(%)\",\r\n        \"etcDevPercent\": \"ETC开发费(%)\",\r\n        \"enableEtcProxy\": \"是否启用ETC抽水中转服务\",\r\n        \"enableEtcDonatePool\": \"是否强制归集ETC抽水到其他矿池\",\r\n        \"etcDonatePoolAddress\": \"ETC抽水归集矿池地址\",\r\n        \"etcDonatePoolSslMode\": \"ETC抽水归集矿池端口是否SSL模式\",\r\n        \"etcDonatePoolPort\": \"ETC抽水归集矿池端口\",\r\n\r\n        \"btcPoolAddress\": \"BTC矿池地址\",\r\n        \"btcPoolSslMode\": \"BTC矿池端口是否SSL模式\",\r\n        \"btcPoolPort\": \"BTC矿池端口\",\r\n        \"btcTcpPort\": \"BTC中转TCP端口\",\r\n        \"btcTlsPort\": \"BTC中转SSL端口\",\r\n        \"btcUser\": \"BTC第一个抽水用户名\",\r\n        \"btcSecondUser\": \"BTC第二个抽水用户名\",\r\n        \"btcWorker\": \"BTC抽水矿工名\",\r\n        \"btcTaxPercent\": \"BTC第一个账户抽水比例(%)\",\r\n        \"btcSecondTaxPercent\": \"BTC第二个账户抽水比例(%)\",\r\n        \"btcDevPercent\": \"BTC开发费(%)\",\r\n        \"enableBtcProxy\": \"是否启用BTC抽水中转服务\",\r\n\r\n        \"rvnPoolAddress\": \"RVN矿池地址\",\r\n        \"rvnPoolSslMode\": \"RVN矿池端口是否SSL模式\",\r\n        \"rvnPoolPort\": \"RVN矿池端口\",\r\n        \"rvnTcpPort\": \"RVN中转TCP端口\",\r\n        \"rvnTlsPort\": \"RVN中转SSL端口\",\r\n        \"rvnUser\": \"RVN第一个抽水用户名\",\r\n        \"rvnSecondUser\": \"RVN第二个抽水用户名\",\r\n        \"rvnWorker\": \"RVN抽水矿工名\",\r\n        \"rvnTaxPercent\": \"RVN第一个账户抽水比例(%)\",\r\n        \"rvnSecondTaxPercent\": \"RVN第二个账户抽水比例(%)\",\r\n        \"rvnDevPercent\": \"RVN开发费(%)\",\r\n        \"enableRvnProxy\": \"是否启用RVN抽水中转服务\",\r\n\r\n        \"ergoPoolAddress\": \"ERGO矿池地址\",\r\n        \"ergoPoolSslMode\": \"ERGO矿池端口是否SSL模式\",\r\n        \"ergoPoolPort\": \"ERGO矿池端口\",\r\n        \"ergoTcpPort\": \"ERGO中转TCP端口\",\r\n        \"ergoTlsPort\": \"ERGO中转SSL端口\",\r\n        \"ergoUser\": \"ERGO第一个抽水用户名\",\r\n        \"ergoSecondUser\": \"ERGO第二个抽水用户名\",\r\n        \"ergoWorker\": \"ERGO抽水矿工名\",\r\n        \"ergoTaxPercent\": \"ERGO第一个账户抽水比例(%)\",\r\n        \"ergoSecondTaxPercent\": \"ERGO第二个账户抽水比例(%)\",\r\n        \"ergoDevPercent\": \"ERGO开发费(%)\",\r\n        \"enableErgoProxy\": \"是否启用ERGO抽水中转服务\",\r\n\r\n        \"cfxPoolAddress\": \"CFX矿池地址\",\r\n        \"cfxPoolSslMode\": \"CFX矿池端口是否SSL模式\",\r\n        \"cfxPoolPort\": \"CFX矿池端口\",\r\n        \"cfxTcpPort\": \"CFX中转TCP端口\",\r\n        \"cfxTlsPort\": \"CFX中转SSL端口\",\r\n        \"cfxUser\": \"CFX第一个抽水用户名\",\r\n        \"cfxSecondUser\": \"CFX第二个抽水用户名\",\r\n        \"cfxWorker\": \"CFX抽水矿工名\",\r\n        \"cfxTaxPercent\": \"CFX第一个账户抽水比例(%)\",\r\n        \"cfxSecondTaxPercent\": \"CFX第二个账户抽水比例(%)\",\r\n        \"cfxDevPercent\": \"CFX开发费(%)\",\r\n        \"enableCfxProxy\": \"是否启用CFX抽水中转服务\",\r\n\r\n        \"enableHttpLog\": \"是否启用网页管理控制台\",\r\n        \"httpLogPort\": \"网页管理控制台端口\",\r\n\r\n        \"ccVersion\": \"转发工具版本\",\r\n    }\r\n    $(document).ready(function () {\r\n        $.ajax({\r\n            url: \"/config.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                onConfigLoaded(data.data);\r\n            }\r\n        });\r\n    });\r\n\r\n    function onConfigLoaded(data) {\r\n        $(\"#main\").show();\r\n        if (data.enableLog) {\r\n            $(\"#logButton\").show();\r\n        }\r\n        if (data.enableEthProxy) {\r\n            $(\"#tabEth\").show();\r\n            $(\"#labEth\").show();\r\n        }\r\n        if (data.enableEtcProxy) {\r\n            $(\"#tabEtc\").show();\r\n            $(\"#labEtc\").show();\r\n        }\r\n        if (data.enableBtcProxy) {\r\n            $(\"#tabBtc\").show();\r\n            $(\"#labBtc\").show();\r\n        }\r\n        if (data.enableRvnProxy) {\r\n            $(\"#tabRvn\").show();\r\n            $(\"#labRvn\").show();\r\n        }\r\n        if (data.enableErgoProxy) {\r\n            $(\"#tabErgo\").show();\r\n            $(\"#labErgo\").show();\r\n        }\r\n        if (data.enableCfxProxy) {\r\n            $(\"#tabCfx\").show();\r\n            $(\"#labCfx\").show();\r\n        }\r\n        var tableStr = \"\";\r\n        for (var key in configDesc) {\r\n            if (!(key in data)) {\r\n                continue;\r\n            }\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + configDesc[key] + \"</td>\";\r\n            tableStr += \"<td>\" + key + \"</td>\";\r\n            if (key.indexOf('DevPercent') !== -1) {\r\n                tableStr += \"<td>\" + parseFloat(data[key].toFixed(2)) + \"</td>\";\r\n            } else {\r\n                tableStr += \"<td>\" + (data[key] === true ? \"是\" : (data[key] === false ? \"否\" : data[key])) + \"</td>\";\r\n            }\r\n            tableStr += \"</tr>\";\r\n        }\r\n        $(\"#configTbody\").html(tableStr);\r\n    }\r\n\r\n    function onConfigClick() {\r\n        if (isInConfig) {\r\n            return;\r\n        }\r\n        isInConfig = true;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n    }\r\n\r\n    function onEthClick() {\r\n        if (isInEth) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = true;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEthInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEthInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onEtcClick() {\r\n        if (isInEtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = true;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onBtcClick() {\r\n        if (isInBtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = true;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadBtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadBtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onRvnClick() {\r\n        if (isInRvn) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = true;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadRvnInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadRvnInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onErgoClick() {\r\n        if (isInErgo) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = true;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadErgoInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadErgoInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onCfxClick() {\r\n        if (isInCfx) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = true;\r\n        $('#timer').timer(\"remove\");\r\n        loadCfxInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadCfxInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function loadEthInfo() {\r\n        $.ajax({\r\n            url: \"/eth.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEth) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEthLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadEtcInfo() {\r\n        $.ajax({\r\n            url: \"/etc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadBtcInfo() {\r\n        $.ajax({\r\n            url: \"/btc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInBtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onBtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n    function loadRvnInfo() {\r\n        $.ajax({\r\n            url: \"/rvn.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInRvn) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onRvnLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadErgoInfo() {\r\n        $.ajax({\r\n            url: \"/ergo.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInErgo) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onErgoLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadCfxInfo() {\r\n        $.ajax({\r\n            url: \"/cfx.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInCfx) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onCfxLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    var arrayCompare = function (x, y) {\r\n        if (x.connectTime < y.connectTime) {\r\n            return -1\r\n        }\r\n        if (x.connectTime > y.connectTime) {\r\n            return 1\r\n        }\r\n        return 0\r\n    }\r\n\r\n    function onEthLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ethTbody\").html(tableStr);\r\n    }\r\n\r\n    function onEtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#etcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onBtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#btcTbody\").html(tableStr);\r\n    }\r\n\r\n\r\n    function onRvnLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#rvnTbody\").html(tableStr);\r\n    }\r\n\r\n    function onErgoLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ergoTbody\").html(tableStr);\r\n    }\r\n\r\n\r\n    function onCfxLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#cfxTbody\").html(tableStr);\r\n    }\r\n</script>\r\n\r\n</html>"
  },
  {
    "path": "linux/html/login.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>登录</title>\r\n    <style>\r\n        * {\r\n            margin: 0;\r\n            padding: 0;\r\n        }\r\n\r\n        .cavs {\r\n            z-index: 1;\r\n            position: fixed;\r\n            width: 95%;\r\n            margin-left: 20px;\r\n            margin-right: 20px;\r\n        }\r\n\r\n        html,\r\n        body {\r\n            width: 100%;\r\n            height: 100%;\r\n\r\n            background-image: -webkit-linear-gradient(top, #02164f, #000);\r\n            background-image: -moz-linear-gradient(top, #02164f, #000);\r\n            background-image: -ms-linear-gradient(top, #02164f, #000);\r\n            background-image: -o-linear-gradient(top, #02164f, #000);\r\n            background-image: linear-gradient(to bottom, #02164f, #000);\r\n            background-color: #1A1A1A;\r\n        }\r\n\r\n\r\n\r\n        .loginmain {\r\n            background-color: hsla(228, 61%, 18%, 0.50);\r\n            width: 540px;\r\n            height: 180px;\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            margin: auto;\r\n            padding: 100px 40px 40px 40px;\r\n            box-shadow: -15px 15px 15px rgba(6, 17, 47, 0.7);\r\n            z-index: 99999;\r\n            border-radius: 3px;\r\n            box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            -webkit-box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            -moz-box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            border: 1px solid hsla(0, 0%, 100%, .3);\r\n        }\r\n\r\n        .login-title {\r\n            color: #fff;\r\n            font-weight: 600;\r\n            height: 60px;\r\n            font-size: 20px;\r\n            text-align: center;\r\n            margin-top: -60px;\r\n        }\r\n\r\n        .login-con {\r\n            height: 208px;\r\n            position: absolute;\r\n            left: 0;\r\n            width: 60%;\r\n            margin: 0 20%;\r\n        }\r\n\r\n        .login-user {\r\n            position: relative;\r\n            background: #ECEEF0;\r\n            height: 53px;\r\n            line-height: 53px;\r\n            margin-bottom: 15px;\r\n        }\r\n\r\n        .icon {\r\n            position: absolute;\r\n            z-index: 1;\r\n            left: 36px;\r\n            top: 3px;\r\n            opacity: 1;\r\n            color: #000;\r\n\r\n        }\r\n\r\n        .icon img {\r\n            width: 18px;\r\n            height: 18px;\r\n        }\r\n\r\n        .login-con input {\r\n            width: calc(100% - 130px);\r\n            margin-top: -2px;\r\n            background: rgba(57, 61, 82, 0);\r\n            left: 0;\r\n            padding: 10px 65px;\r\n            border-top: 2px solid rgba(57, 61, 82, 0);\r\n            border-bottom: 2px solid rgba(57, 61, 82, 0);\r\n            border-right: none;\r\n            border-left: none;\r\n            outline: none;\r\n            font-family: 'Gudea', sans-serif;\r\n            box-shadow: none;\r\n            color: #61BFFF !important;\r\n        }\r\n\r\n        .login-pwd,\r\n        .login-yan {\r\n            position: relative;\r\n            background: #ECEEF0;\r\n            height: 53px;\r\n            line-height: 53px;\r\n            margin-bottom: 15px;\r\n        }\r\n\r\n        /*\r\n    .login-pwd .icon{\r\n        position: absolute;\r\n        z-index: 1;\r\n        left: 36px;\r\n        top: 8px;\r\n        opacity: .5;\r\n    }*/\r\n        .login-btn {\r\n            margin: 0 auto;\r\n            position: relative;\r\n        }\r\n\r\n        .login-btn input {\r\n            border-radius: 3px;\r\n            background: #3277fcb8;\r\n            border: 2px solid #4FA1D9;\r\n            color: white !important;\r\n            text-transform: uppercase;\r\n            font-size: 11px;\r\n            cursor: pointer;\r\n            position: absolute;\r\n            top: 30px;\r\n            left: 0;\r\n            right: 0;\r\n            margin: auto;\r\n            width: 100%;\r\n            height: 53px;\r\n            -webkit-transition-duration: .2s;\r\n            transition-duration: .2s;\r\n        }\r\n\r\n        .login-btn input:hover {\r\n            color: white !important;\r\n            background: #4FA1D9;\r\n            cursor: pointer;\r\n            -webkit-transition-property: background, color;\r\n            transition-property: background, color;\r\n            -webkit-transition-duration: .2s;\r\n            transition-duration: .2s;\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n    <canvas class=\"cavs\" width=\"2048\" height=\"1002\"></canvas>\r\n\r\n    <div class=\"loginmain\">\r\n        <div class=\"login-title\">\r\n            <span>管理员登录</span>\r\n        </div>\r\n        <form method=\"post\" name=\"login\" action=\"login.html\" onsubmit=\"return check()\">\r\n            <div class=\"login-con\">\r\n                <div class=\"login-pwd\">\r\n                    <div class=\"icon\">\r\n                        <img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABgUExURQAAAJqampmZmZqampmZmZubm5mZmZqamqysrJqampubm5mZmaGhoZqampycnJqampubm5qampqampqampqamp2dnZqampqampqamqGhoZqampqampqampqampqampmZmbSSAhEAAAAfdFJOUwB182y3RYf8A/4xhRSGJXs8zY7UpR6WV18L68HiTLCg7Y7vAAABR0lEQVRIx+2W2ZKDIBBFFVzQEDfco+H//zKAqZSC0Iw1y8vcN2/3UaobGoPgbzWtfb2kM3viwhfpGsQ/eqw+CAl3iMI6kKEPrgsNEMNUHisrSmgV1uopHd1rU1ks/hjVhsUu6CYzErJ/jbIWameKVCSEmokl1dihRISfhtvKYkxWaBZhs52d/L61glR25cSPhH+zQbkI9id+I/zWBsUieD/xS+FH/5AD6lrE3cpYSLQWQYjScYuRhXtp0PcCz9zi+n6RJUiAQx3q5fCB8K9BIwyNNarxwRlA6M6NyQBCasKIJuQ7b4Wg8d1MrOU4IfyG9uOsApeXbVD+FWgbtcdC5HDJe2MCeUClMeuKK1B3BaI/BI1aa8WVD0OkRdHxeiFXjkZwCUJXoPkMIm4ZUOUx8xZ9eRPyG5atee/D0q4HPKewmPef3DfpBUsaT9x4ryHkAAAAAElFTkSuQmCC\"\r\n                            alt=\"\">\r\n                    </div>\r\n                    <input id=\"password\" type=\"password\" name=\"password\" placeholder=\"密码\" autocomplete=\"off\" value=\"\">\r\n                </div>\r\n                <div class=\"login-btn\">\r\n                    <input type=\"submit\" value=\"登录\">\r\n                </div>\r\n            </div>\r\n        </form>\r\n\r\n    </div>\r\n\r\n    <script>\r\n        function check() { \r\n            var password = $(\"#password\").val();\r\n            if (  password == \"\") {\r\n                alert(\"密码不能为空\")\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n    </script>\r\n\r\n\r\n    <script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n    <script>try {\r\n            if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {\r\n\r\n            } else {\r\n                $(function () {\r\n                    var canvas = document.querySelector('canvas'),\r\n                        ctx = canvas.getContext('2d')\r\n                    canvas.width = $(window).width();\r\n                    canvas.height = $(window).height();\r\n                    ctx.lineWidth = .3;\r\n                    ctx.strokeStyle = (new Color(150)).style;\r\n\r\n                    var mousePosition = {\r\n                        x: 30 * canvas.width / 100,\r\n                        y: 30 * canvas.height / 100\r\n                    };\r\n\r\n                    var dots = {\r\n                        nb: 250,\r\n                        distance: 100,\r\n                        d_radius: 150,\r\n                        array: []\r\n                    };\r\n\r\n                    function colorValue(min) {\r\n                        return Math.floor(Math.random() * 255 + min);\r\n                    }\r\n\r\n                    function createColorStyle(r, g, b) {\r\n                        return 'rgba(' + r + ',' + g + ',' + b + ', 0.8)';\r\n                    }\r\n\r\n                    function mixComponents(comp1, weight1, comp2, weight2) {\r\n                        return (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2);\r\n                    }\r\n\r\n                    function averageColorStyles(dot1, dot2) {\r\n                        var color1 = dot1.color,\r\n                            color2 = dot2.color;\r\n\r\n                        var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius),\r\n                            g = mixComponents(color1.g, dot1.radius, color2.g, dot2.radius),\r\n                            b = mixComponents(color1.b, dot1.radius, color2.b, dot2.radius);\r\n                        return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b));\r\n                    }\r\n\r\n                    function Color(min) {\r\n                        min = min || 0;\r\n                        this.r = colorValue(min);\r\n                        this.g = colorValue(min);\r\n                        this.b = colorValue(min);\r\n                        this.style = createColorStyle(this.r, this.g, this.b);\r\n                    }\r\n\r\n                    function Dot() {\r\n                        this.x = Math.random() * canvas.width;\r\n                        this.y = Math.random() * canvas.height;\r\n\r\n                        this.vx = -.5 + Math.random();\r\n                        this.vy = -.5 + Math.random();\r\n\r\n                        this.radius = Math.random() * 2;\r\n\r\n                        this.color = new Color();\r\n                    }\r\n\r\n                    Dot.prototype = {\r\n                        draw: function () {\r\n                            ctx.beginPath();\r\n                            ctx.fillStyle = this.color.style;\r\n                            ctx.arc(this.x, this.y, this.radius, 0, Math.PI, false);\r\n                            ctx.fill();\r\n                        }\r\n                    };\r\n\r\n                    function createDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            dots.array.push(new Dot());\r\n                        }\r\n                    }\r\n\r\n                    function moveDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n\r\n                            var dot = dots.array[i];\r\n\r\n                            if (dot.y < 0 || dot.y > canvas.height) {\r\n                                dot.vx = dot.vx;\r\n                                dot.vy = - dot.vy;\r\n                            }\r\n                            else if (dot.x < 0 || dot.x > canvas.width) {\r\n                                dot.vx = - dot.vx;\r\n                                dot.vy = dot.vy;\r\n                            }\r\n                            dot.x += dot.vx;\r\n                            dot.y += dot.vy;\r\n                        }\r\n                    }\r\n\r\n                    function connectDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            for (j = 0; j < dots.nb; j++) {\r\n                                i_dot = dots.array[i];\r\n                                j_dot = dots.array[j];\r\n\r\n                                if ((i_dot.x - j_dot.x) < dots.distance && (i_dot.y - j_dot.y) < dots.distance && (i_dot.x - j_dot.x) > - dots.distance && (i_dot.y - j_dot.y) > - dots.distance) {\r\n                                    if ((i_dot.x - mousePosition.x) < dots.d_radius && (i_dot.y - mousePosition.y) < dots.d_radius && (i_dot.x - mousePosition.x) > - dots.d_radius && (i_dot.y - mousePosition.y) > - dots.d_radius) {\r\n                                        ctx.beginPath();\r\n                                        ctx.strokeStyle = averageColorStyles(i_dot, j_dot);\r\n                                        ctx.moveTo(i_dot.x, i_dot.y);\r\n                                        ctx.lineTo(j_dot.x, j_dot.y);\r\n                                        ctx.stroke();\r\n                                        ctx.closePath();\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    function drawDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            var dot = dots.array[i];\r\n                            dot.draw();\r\n                        }\r\n                    }\r\n\r\n                    function animateDots() {\r\n                        ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n                        moveDots();\r\n                        connectDots();\r\n                        drawDots();\r\n\r\n                        requestAnimationFrame(animateDots);\r\n                    }\r\n\r\n                    $('canvas').on('mousemove', function (e) {\r\n                        mousePosition.x = e.pageX;\r\n                        mousePosition.y = e.pageY;\r\n                    });\r\n\r\n                    $('canvas').on('mouseleave', function (e) {\r\n                        mousePosition.x = canvas.width / 2;\r\n                        mousePosition.y = canvas.height / 2;\r\n                    });\r\n\r\n                    createDots();\r\n                    requestAnimationFrame(animateDots);\r\n\r\n\r\n\r\n                });\r\n            }\r\n        } catch (e) { }\r\n    </script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "linux/install.sh",
    "content": "#!/bin/bash\nstty erase ^H\n\nred='\\e[91m'\ngreen='\\e[92m'\nyellow='\\e[94m'\nmagenta='\\e[95m'\ncyan='\\e[96m'\nnone='\\e[0m'\n_red() { echo -e ${red}$*${none}; }\n_green() { echo -e ${green}$*${none}; }\n_yellow() { echo -e ${yellow}$*${none}; }\n_magenta() { echo -e ${magenta}$*${none}; }\n_cyan() { echo -e ${cyan}$*${none}; }\n\n# Root\n[[ $(id -u) != 0 ]] && echo -e \"\\n 请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}\\n\" && exit 1\n\ncmd=\"apt-get\"\n\nsys_bit=$(uname -m)\n\ncase $sys_bit in\n'amd64' | x86_64) ;;\n*)\n    echo -e \" \n\t 这个 ${red}安装脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}\n\n\t备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统\n\t\" && exit 1\n    ;;\nesac\n\n# 笨笨的检测方法\nif [[ $(command -v apt-get) || $(command -v yum) ]] && [[ $(command -v systemctl) ]]; then\n\n    if [[ $(command -v yum) ]]; then\n\n        cmd=\"yum\"\n\n    fi\n\nelse\n\n    echo -e \" \n\t 这个 ${red}安装脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}\n\n\t备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统\n\t\" && exit 1\n\nfi\n\nif [ ! -d \"/etc/ccworker/\" ]; then\n    mkdir /etc/ccworker/\nfi\n\nerror() {\n\n    echo -e \"\\n$red 输入错误！$none\\n\"\n\n}\n\nlog_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 日志记录， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}Y${none}]):\")\" enableLog\n        [[ -z $enableLog ]] && enableLog=\"y\"\n\n        case $enableLog in\n        Y | y)\n            enableLog=\"y\"\n            break\n            ;;\n        N | n)\n            enableLog=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用日志记录 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\neth_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 ETHW/ETF抽水中转， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}Y${none}]):\")\" enableEthProxy\n        [[ -z $enableEthProxy ]] && enableEthProxy=\"y\"\n\n        case $enableEthProxy in\n        Y | y)\n            enableEthProxy=\"y\"\n            eth_miner_config\n            break\n            ;;\n        N | n)\n            enableEthProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用ETHW/ETF抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\neth_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入ETHW/ETF矿池域名，例如 ethw.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}ethw.f2pool.com${none}]):\")\" ethPoolAddress\n        [[ -z $ethPoolAddress ]] && ethPoolAddress=\"ethw.f2pool.com\"\n\n        case $ethPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF矿池地址 = ${cyan}$ethPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到ETHW/ETF矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" ethPoolSslMode\n        [[ -z $ethPoolSslMode ]] && ethPoolSslMode=\"n\"\n\n        case $ethPoolSslMode in\n        Y | y)\n            ethPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到ETHW/ETF矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            ethPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到ETHW/ETF矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$ethPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入ETHW/ETF矿池\"$yellow\"$ethPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入ETHW/ETF矿池\"$yellow\"$ethPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}6688${none}):\")\" ethPoolPort\n        [ -z \"$ethPoolPort\" ] && ethPoolPort=6688\n        case $ethPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF矿池端口 = $cyan$ethPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"6688\"\n    while :; do\n        echo -e \"请输入ETHW/ETF本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" ethTcpPort\n        [ -z \"$ethTcpPort\" ] && ethTcpPort=$randomTcp\n        case $ethTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF本地TCP中转端口 = $cyan$ethTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"12345\"\n    while :; do\n        echo -e \"请输入ETHW/ETF本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$ethTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" ethTlsPort\n        [ -z \"$ethTlsPort\" ] && ethTlsPort=$randomTls\n        case $ethTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $ethTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $ethTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF本地SSL中转端口 = $cyan$ethTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你的ETHW/ETF钱包地址或者你在矿池的用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" ethUser\n        if [ -z \"$ethUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n            echo\n        else\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF抽水用户名/钱包名 = $cyan$ethUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" ethWorker\n        [[ -z $ethWorker ]] && ethWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow ETHW/ETF抽水矿工名 = ${cyan}$ethWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入ETHW/ETF抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" ethTaxPercent\n        [ -z \"$ethTaxPercent\" ] && ethTaxPercent=10\n        case $ethTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF抽水比例 = $cyan$ethTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableEthSecondConfig\n        [[ -z $enableEthSecondConfig ]] && enableEthSecondConfig=\"n\"\n\n        case $enableEthSecondConfig in\n        Y | y)\n            enableEthSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableEthSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableEthSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个ETHW/ETF钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" ethSecondUser\n            if [ -z \"$ethSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow ETHW/ETF第二个抽水用户名/钱包名 = $cyan$ethSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的ETHW/ETF抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" ethSecondTaxPercent\n            [ -z \"$ethSecondTaxPercent\" ] && ethSecondTaxPercent=10\n            case $ethSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow ETHW/ETF抽水比例 = $cyan$ethSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n    while :; do\n        echo -e \"是否归集ETHW/ETF抽水到另外的矿池，部分矿池可能不支持，任何的归集都会损失抽水算力。 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableEthDonatePool\n        [[ -z $enableEthDonatePool ]] && enableEthDonatePool=\"n\"\n\n        case $enableEthDonatePool in\n        Y | y)\n            enableEthDonatePool=\"y\"\n            eth_tax_pool_config_ask\n            echo\n            echo\n            echo -e \"$yellow 归集ETHW/ETF抽水到指定矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            enableEthDonatePool=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不归集ETHW/ETF抽水到指定矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\neth_tax_pool_config_ask() {\n    echo\n    while :; do\n        echo -e \"请输入ETHW/ETF归集抽水矿池域名，例如 asia1.ethermine.org，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}asia1.ethermine.org${none}]):\")\" ethDonatePoolAddress\n        [[ -z $ethDonatePoolAddress ]] && ethDonatePoolAddress=\"asia1.ethermine.org\"\n\n        case $ethDonatePoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF抽水归集矿池地址 = ${cyan}$ethDonatePoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到ETHW/ETF抽水归集矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" ethDonatePoolSslMode\n        [[ -z $ethDonatePoolSslMode ]] && ethDonatePoolSslMode=\"n\"\n\n        case $ethDonatePoolSslMode in\n        Y | y)\n            ethDonatePoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到ETHW/ETF抽水归集矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            ethDonatePoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到ETHW/ETF抽水归集矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$ethDonatePoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入ETHW/ETF抽水归集矿池\"$yellow\"$ethDonatePoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入ETHW/ETF抽水归集矿池\"$yellow\"$ethDonatePoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}4444${none}):\")\" ethDonatePoolPort\n        [ -z \"$ethDonatePoolPort\" ] && ethDonatePoolPort=4444\n        case $ethDonatePoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETHW/ETF抽水归集矿池端口 = $cyan$ethDonatePoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n}\n\netc_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 ETC抽水中转, 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableEtcProxy\n        [[ -z $enableEtcProxy ]] && enableEtcProxy=\"n\"\n\n        case $enableEtcProxy in\n        Y | y)\n            enableEtcProxy=\"y\"\n            etc_miner_config\n            break\n            ;;\n        N | n)\n            enableEtcProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用ETC抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\netc_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入ETC矿池域名，例如 etc.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}etc.f2pool.com${none}]):\")\" etcPoolAddress\n        [[ -z $etcPoolAddress ]] && etcPoolAddress=\"etc.f2pool.com\"\n\n        case $etcPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow ETC矿池地址 = ${cyan}$etcPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到ETC矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" etcPoolSslMode\n        [[ -z $etcPoolSslMode ]] && etcPoolSslMode=\"n\"\n\n        case $etcPoolSslMode in\n        Y | y)\n            etcPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到ETC矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            etcPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到ETC矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$etcPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入ETC矿池\"$yellow\"$etcPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入ETC矿池\"$yellow\"$etcPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}8118${none}):\")\" etcPoolPort\n        [ -z \"$etcPoolPort\" ] && etcPoolPort=8118\n        case $etcPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETC矿池端口 = $cyan$etcPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"8118\"\n    while :; do\n        echo -e \"请输入ETC本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" etcTcpPort\n        [ -z \"$etcTcpPort\" ] && etcTcpPort=$randomTcp\n        case $etcTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETC本地TCP中转端口 = $cyan$etcTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"22345\"\n    while :; do\n        echo -e \"请输入ETC本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$etcTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" etcTlsPort\n        [ -z \"$etcTlsPort\" ] && etcTlsPort=$randomTls\n        case $etcTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $etcTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $etcTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETC本地SSL中转端口 = $cyan$etcTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你的ETC钱包地址或者你在矿池的用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" etcUser\n        if [ -z \"$etcUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow ETC抽水用户名/钱包名 = $cyan$etcUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" etcWorker\n        [[ -z $etcWorker ]] && etcWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow ETC抽水矿工名 = ${cyan}$etcWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入ETC抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" etcTaxPercent\n        [ -z \"$etcTaxPercent\" ] && etcTaxPercent=10\n        case $etcTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow ETC抽水比例 = $cyan$etcTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableEtcSecondConfig\n        [[ -z $enableEtcSecondConfig ]] && enableEtcSecondConfig=\"n\"\n\n        case $enableEtcSecondConfig in\n        Y | y)\n            enableEtcSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableEtcSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableEtcSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个ETC钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" etcSecondUser\n            if [ -z \"$etcSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow ETC第二个抽水用户名/钱包名 = $cyan$etcSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的ETC抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" etcSecondTaxPercent\n            [ -z \"$etcSecondTaxPercent\" ] && etcSecondTaxPercent=10\n            case $etcSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow ETHW/ETF抽水比例 = $cyan$etcSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n    while :; do\n        echo -e \"是否归集ETC抽水到另外的矿池，部分矿池可能不支持，仅测试E池通过 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableEtcDonatePool\n        [[ -z $enableEtcDonatePool ]] && enableEtcDonatePool=\"n\"\n\n        case $enableEtcDonatePool in\n        Y | y)\n            enableEtcDonatePool=\"y\"\n            etc_tax_pool_config_ask\n            echo\n            echo\n            echo -e \"$yellow 归集ETC抽水到指定矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            enableEtcDonatePool=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不归集ETC抽水到指定矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\netc_tax_pool_config_ask() {\n    echo\n    while :; do\n        echo -e \"请输入ETC归集抽水矿池域名，例如 etc.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}etc.f2pool.com${none}]):\")\" etcDonatePoolAddress\n        [[ -z $etcDonatePoolAddress ]] && etcDonatePoolAddress=\"etc.f2pool.com\"\n\n        case $etcDonatePoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow ETC抽水归集矿池地址 = ${cyan}$etcDonatePoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到ETHW/ETF抽水归集矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" etcDonatePoolSslMode\n        [[ -z $etcDonatePoolSslMode ]] && etcDonatePoolSslMode=\"n\"\n\n        case $etcDonatePoolSslMode in\n        Y | y)\n            etcDonatePoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到ETHW/ETF抽水归集矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            etcDonatePoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到ETHW/ETF抽水归集矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$etcDonatePoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入ETC抽水归集矿池\"$yellow\"$etcDonatePoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入ETC抽水归集矿池\"$yellow\"$etcDonatePoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}8118${none}):\")\" etcDonatePoolPort\n        [ -z \"$etcDonatePoolPort\" ] && etcDonatePoolPort=8118\n        case $etcDonatePoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ETC抽水归集矿池端口 = $cyan$etcDonatePoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n}\n\nbtc_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 BTC抽水中转， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableBtcProxy\n        [[ -z $enableBtcProxy ]] && enableBtcProxy=\"n\"\n\n        case $enableBtcProxy in\n        Y | y)\n            enableBtcProxy=\"y\"\n            btc_miner_config\n            break\n            ;;\n        N | n)\n            enableBtcProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用BTC抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\nbtc_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入BTC矿池域名，例如 btc.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}btc.f2pool.com${none}]):\")\" btcPoolAddress\n        [[ -z $btcPoolAddress ]] && btcPoolAddress=\"btc.f2pool.com\"\n\n        case $btcPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow BTC矿池地址 = ${cyan}$btcPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到BTC矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" btcPoolSslMode\n        [[ -z $btcPoolSslMode ]] && btcPoolSslMode=\"n\"\n\n        case $btcPoolSslMode in\n        Y | y)\n            btcPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到BTC矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            btcPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到BTC矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$btcPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入BTC矿池\"$yellow\"$btcPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入BTC矿池\"$yellow\"$btcPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}3333${none}):\")\" btcPoolPort\n        [ -z \"$btcPoolPort\" ] && btcPoolPort=3333\n        case $btcPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow BTC矿池端口 = $cyan$btcPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"3333\"\n    while :; do\n        echo -e \"请输入BTC本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" btcTcpPort\n        [ -z \"$btcTcpPort\" ] && btcTcpPort=$randomTcp\n        case $btcTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow BTC本地TCP中转端口 = $cyan$btcTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"32345\"\n    while :; do\n        echo -e \"请输入BTC本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$btcTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" btcTlsPort\n        [ -z \"$btcTlsPort\" ] && btcTlsPort=$randomTls\n        case $btcTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $btcTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $btcTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow BTC本地SSL中转端口 = $cyan$btcTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你在矿池的BTC账户用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" btcUser\n        if [ -z \"$btcUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个用户名啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow BTC抽水用户名 = $cyan$btcUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" btcWorker\n        [[ -z $btcWorker ]] && btcWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow BTC抽水矿工名 = ${cyan}$btcWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入BTC抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" btcTaxPercent\n        [ -z \"$btcTaxPercent\" ] && btcTaxPercent=10\n        case $btcTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow BTC抽水比例 = $cyan$btcTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableBtcSecondConfig\n        [[ -z $enableBtcSecondConfig ]] && enableBtcSecondConfig=\"n\"\n\n        case $enableBtcSecondConfig in\n        Y | y)\n            enableBtcSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableBtcSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableBtcSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个BTC钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" btcSecondUser\n            if [ -z \"$btcSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow BTC第二个抽水用户名/钱包名 = $cyan$btcSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的BTC抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" btcSecondTaxPercent\n            [ -z \"$btcSecondTaxPercent\" ] && btcSecondTaxPercent=10\n            case $btcSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow BTC抽水比例 = $cyan$btcSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n}\n\n\nrvn_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 RVN抽水中转， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableRvnProxy\n        [[ -z $enableRvnProxy ]] && enableRvnProxy=\"n\"\n\n        case $enableRvnProxy in\n        Y | y)\n            enableRvnProxy=\"y\"\n            rvn_miner_config\n            break\n            ;;\n        N | n)\n            enableRvnProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用RVN抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\nrvn_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入RVN矿池域名，例如 raven.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}raven.f2pool.com${none}]):\")\" rvnPoolAddress\n        [[ -z $rvnPoolAddress ]] && rvnPoolAddress=\"raven.f2pool.com\"\n\n        case $rvnPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow RVN矿池地址 = ${cyan}$rvnPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到RVN矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" rvnPoolSslMode\n        [[ -z $rvnPoolSslMode ]] && rvnPoolSslMode=\"n\"\n\n        case $rvnPoolSslMode in\n        Y | y)\n            rvnPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到RVN矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            rvnPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到RVN矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$rvnPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入RVN矿池\"$yellow\"$rvnPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入RVN矿池\"$yellow\"$rvnPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}3636${none}):\")\" rvnPoolPort\n        [ -z \"$rvnPoolPort\" ] && rvnPoolPort=3636\n        case $rvnPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow RVN矿池端口 = $cyan$rvnPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"3636\"\n    while :; do\n        echo -e \"请输入RVN本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" rvnTcpPort\n        [ -z \"$rvnTcpPort\" ] && rvnTcpPort=$randomTcp\n        case $rvnTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow RVN本地TCP中转端口 = $cyan$rvnTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"42345\"\n    while :; do\n        echo -e \"请输入RVN本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$rvnTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" rvnTlsPort\n        [ -z \"$rvnTlsPort\" ] && rvnTlsPort=$randomTls\n        case $rvnTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $rvnTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $rvnTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow RVN本地SSL中转端口 = $cyan$rvnTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你在矿池的RVN账户用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" rvnUser\n        if [ -z \"$rvnUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个用户名啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow RVN抽水用户名 = $cyan$rvnUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" rvnWorker\n        [[ -z $rvnWorker ]] && rvnWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow RVN抽水矿工名 = ${cyan}$rvnWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入RVN抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" rvnTaxPercent\n        [ -z \"$rvnTaxPercent\" ] && rvnTaxPercent=10\n        case $rvnTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow RVN抽水比例 = $cyan$rvnTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableRvnSecondConfig\n        [[ -z $enableRvnSecondConfig ]] && enableRvnSecondConfig=\"n\"\n\n        case $enableRvnSecondConfig in\n        Y | y)\n            enableRvnSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableRvnSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableRvnSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个RVN钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" rvnSecondUser\n            if [ -z \"$rvnSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow RVN第二个抽水用户名/钱包名 = $cyan$rvnSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的RVN抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" rvnSecondTaxPercent\n            [ -z \"$rvnSecondTaxPercent\" ] && rvnSecondTaxPercent=10\n            case $rvnSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow RVN抽水比例 = $cyan$rvnSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n}\n\nergo_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 ERGO抽水中转， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableErgoProxy\n        [[ -z $enableErgoProxy ]] && enableErgoProxy=\"n\"\n\n        case $enableErgoProxy in\n        Y | y)\n            enableErgoProxy=\"y\"\n            ergo_miner_config\n            break\n            ;;\n        N | n)\n            enableErgoProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用ERGO抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\nergo_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入ERGO矿池域名，例如 stratum-ergo.flypool.org，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}stratum-ergo.flypool.org${none}]):\")\" ergoPoolAddress\n        [[ -z $ergoPoolAddress ]] && ergoPoolAddress=\"stratum-ergo.flypool.org\"\n\n        case $ergoPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow ERGO矿池地址 = ${cyan}$ergoPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到ERGO矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" ergoPoolSslMode\n        [[ -z $ergoPoolSslMode ]] && ergoPoolSslMode=\"n\"\n\n        case $ergoPoolSslMode in\n        Y | y)\n            ergoPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到ERGO矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            ergoPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到ERGO矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$ergoPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入ERGO矿池\"$yellow\"$ergoPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入ERGO矿池\"$yellow\"$ergoPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}3333${none}):\")\" ergoPoolPort\n        [ -z \"$ergoPoolPort\" ] && ergoPoolPort=3333\n        case $ergoPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ERGO矿池端口 = $cyan$ergoPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"3434\"\n    while :; do\n        echo -e \"请输入ERGO本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" ergoTcpPort\n        [ -z \"$ergoTcpPort\" ] && ergoTcpPort=$randomTcp\n        case $ergoTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ERGO本地TCP中转端口 = $cyan$ergoTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"52345\"\n    while :; do\n        echo -e \"请输入ERGO本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$ergoTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" ergoTlsPort\n        [ -z \"$ergoTlsPort\" ] && ergoTlsPort=$randomTls\n        case $ergoTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $ergoTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $ergoTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow ERGO本地SSL中转端口 = $cyan$ergoTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你在矿池的ERGO账户用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" ergoUser\n        if [ -z \"$ergoUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个用户名啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow ERGO抽水用户名 = $cyan$ergoUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" ergoWorker\n        [[ -z $ergoWorker ]] && ergoWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow ERGO抽水矿工名 = ${cyan}$ergoWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入ERGO抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" ergoTaxPercent\n        [ -z \"$ergoTaxPercent\" ] && ergoTaxPercent=10\n        case $ergoTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow ERGO抽水比例 = $cyan$ergoTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableErgoSecondConfig\n        [[ -z $enableErgoSecondConfig ]] && enableErgoSecondConfig=\"n\"\n\n        case $enableErgoSecondConfig in\n        Y | y)\n            enableErgoSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableErgoSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableErgoSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个ERGO钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" ergoSecondUser\n            if [ -z \"$ergoSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow ERGO第二个抽水用户名/钱包名 = $cyan$ergoSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的ERGO抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" ergoSecondTaxPercent\n            [ -z \"$ergoSecondTaxPercent\" ] && ergoSecondTaxPercent=10\n            case $ergoSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow ERGO抽水比例 = $cyan$ergoSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n}\n\ncfx_miner_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 CFX抽水中转， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableCfxProxy\n        [[ -z $enableCfxProxy ]] && enableCfxProxy=\"n\"\n\n        case $enableCfxProxy in\n        Y | y)\n            enableCfxProxy=\"y\"\n            cfx_miner_config\n            break\n            ;;\n        N | n)\n            enableCfxProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用CFX抽水中转 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\ncfx_miner_config() {\n    echo\n    while :; do\n        echo -e \"请输入CFX矿池域名，例如 cfx.f2pool.com，不需要输入矿池端口\"\n        read -p \"$(echo -e \"(默认: [${cyan}cfx.f2pool.com${none}]):\")\" cfxPoolAddress\n        [[ -z $cfxPoolAddress ]] && cfxPoolAddress=\"cfx.f2pool.com\"\n\n        case $cfxPoolAddress in\n        *[:$]*)\n            echo\n            echo -e \" 由于这个脚本太辣鸡了..所以矿池地址不能包含端口.... \"\n            echo\n            error\n            ;;\n        *)\n            echo\n            echo\n            echo -e \"$yellow CFX矿池地址 = ${cyan}$cfxPoolAddress${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否使用SSL模式连接到CFX矿池， 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" cfxPoolSslMode\n        [[ -z $cfxPoolSslMode ]] && cfxPoolSslMode=\"n\"\n\n        case $cfxPoolSslMode in\n        Y | y)\n            cfxPoolSslMode=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 使用SSL模式连接到CFX矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            cfxPoolSslMode=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 使用TCP模式连接到CFX矿池 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        if [[ \"$cfxPoolSslMode\" = \"y\" ]]; then\n            echo -e \"请输入CFX矿池\"$yellow\"$cfxPoolAddress\"$none\"的SSL端口，不要使用矿池的TCP端口！！！\"\n        else\n            echo -e \"请输入CFX矿池\"$yellow\"$cfxPoolAddress\"$none\"的TCP端口，不要使用矿池的SSL端口！！！\"\n        fi\n        read -p \"$(echo -e \"(默认端口: ${cyan}6800${none}):\")\" cfxPoolPort\n        [ -z \"$cfxPoolPort\" ] && cfxPoolPort=6800\n        case $cfxPoolPort in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow CFX矿池端口 = $cyan$cfxPoolPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n    local randomTcp=\"6800\"\n    while :; do\n        echo -e \"请输入CFX本地TCP中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认TCP端口: ${cyan}${randomTcp}${none}):\")\" cfxTcpPort\n        [ -z \"$cfxTcpPort\" ] && cfxTcpPort=$randomTcp\n        case $cfxTcpPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow CFX本地TCP中转端口 = $cyan$cfxTcpPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    local randomTls=\"62345\"\n    while :; do\n        echo -e \"请输入CFX本地SSL中转的端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 或 \"$magenta\"$cfxTcpPort\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认端口: ${cyan}${randomTls}${none}):\")\" cfxTlsPort\n        [ -z \"$cfxTlsPort\" ] && cfxTlsPort=$randomTls\n        case $cfxTlsPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        $cfxTcpPort)\n            echo\n            echo \" ..不能和 TCP端口 $cfxTcpPort 一毛一样.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow CFX本地SSL中转端口 = $cyan$cfxTlsPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入你在矿池的CFX账户用户名\"\n        read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" cfxUser\n        if [ -z \"$cfxUser\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个用户名啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow CFX抽水用户名 = $cyan$cfxUser$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n    while :; do\n        echo -e \"请输入你喜欢的矿工名，抽水成功后你可以在矿池看到这个矿工名\"\n        read -p \"$(echo -e \"(默认: [${cyan}worker${none}]):\")\" cfxWorker\n        [[ -z $cfxWorker ]] && cfxWorker=\"worker\"\n        echo\n        echo\n        echo -e \"$yellow CFX抽水矿工名 = ${cyan}$cfxWorker${none}\"\n        echo \"----------------------------------------------------------------\"\n        echo\n        break\n    done\n    while :; do\n        echo -e \"请输入CFX抽水比例 [\"$magenta\"0-95\"$none\"]\"\n        read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" cfxTaxPercent\n        [ -z \"$cfxTaxPercent\" ] && cfxTaxPercent=10\n        case $cfxTaxPercent in\n        0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n            echo\n            echo\n            echo -e \"$yellow CFX抽水比例 = $cyan$cfxTaxPercent%$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"是否添加第二个抽水账户 输入 [${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableCfxSecondConfig\n        [[ -z $enableCfxSecondConfig ]] && enableCfxSecondConfig=\"n\"\n\n        case $enableCfxSecondConfig in\n        Y | y)\n            enableCfxSecondConfig=\"y\"\n            echo\n            echo\n            break\n            ;;\n        N | n)\n            enableCfxSecondConfig=\"n\"\n            echo\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$enableCfxSecondConfig\" = \"y\" ]]; then\n        while :; do\n            echo -e \"请输入你的第二个CFX钱包地址或者你在矿池的用户名\"\n            read -p \"$(echo -e \"(一定不要输入错误，错了就抽给别人了):\")\" cfxSecondUser\n            if [ -z \"$cfxSecondUser\" ]; then\n                echo\n                echo\n                echo \" ..一定要输入一个钱包地址或者用户名啊.....\"\n                echo\n            else\n                echo\n                echo\n                echo -e \"$yellow CFX第二个抽水用户名/钱包名 = $cyan$cfxSecondUser$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n            fi\n        done\n        while :; do\n            echo -e \"请输入第二个抽水账户的CFX抽水比例 [\"$magenta\"0-95\"$none\"]\"\n            read -p \"$(echo -e \"(默认: ${cyan}10${none}):\")\" cfxSecondTaxPercent\n            [ -z \"$cfxSecondTaxPercent\" ] && cfxSecondTaxPercent=10\n            case $cfxSecondTaxPercent in\n            0 | 0\\.[0-9] | 0\\.[0-9][0-9]* | [1-9] | [1-8][0-9] | [1-9]\\.[0-9]* | [1-8][0-9]\\.[0-9]* | 9[0-5] | 9[0-4]\\.[0-9]*)\n                echo\n                echo\n                echo -e \"$yellow CFX抽水比例 = $cyan$cfxSecondTaxPercent%$none\"\n                echo \"----------------------------------------------------------------\"\n                echo\n                break\n                ;;\n            *)\n                echo\n                echo \" ..输入的抽水比例要在0-95之间，如果用的是整数不要加小数点.....\"\n                error\n                ;;\n            esac\n        done\n    fi\n}\n\nhttp_logger_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 网页监控平台， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}Y${none}]):\")\" enableHttpLog\n        [[ -z $enableHttpLog ]] && enableHttpLog=\"y\"\n\n        case $enableHttpLog in\n        Y | y)\n            enableHttpLog=\"y\"\n            http_logger_miner_config\n            break\n            ;;\n        N | n)\n            enableHttpLog=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用网页监控平台 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\nhttp_logger_miner_config() {\n    local randomTcp=\"8080\"\n    while :; do\n        echo -e \"请输入网页监控平台访问端口 [\"$magenta\"1-65535\"$none\"]，不能选择 \"$magenta\"80\"$none\" 或 \"$magenta\"443\"$none\" 端口\"\n        read -p \"$(echo -e \"(默认网页监控平台访问端口: ${cyan}${randomTcp}${none}):\")\" httpLogPort\n        [ -z \"$httpLogPort\" ] && httpLogPort=$randomTcp\n        case $httpLogPort in\n        80)\n            echo\n            echo \" ...都说了不能选择 80 端口了咯.....\"\n            error\n            ;;\n        443)\n            echo\n            echo \" ..都说了不能选择 443 端口了咯.....\"\n            error\n            ;;\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5])\n            echo\n            echo\n            echo -e \"$yellow 网页监控平台访问端口 = $cyan$httpLogPort$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    while :; do\n        echo -e \"请输入网页监控平台登录密码，不能包含双引号，不然无法启动\"\n        read -p \"$(echo -e \"(一定不要输入那种很简单的密码):\")\" httpLogPassword\n        if [ -z \"$httpLogPassword\" ]; then\n            echo\n            echo\n            echo \" ..一定要输入一个密码啊.....\"\n        else\n            echo\n            echo\n            echo -e \"$yellow 网页监控平台密码 = $cyan$httpLogPassword$none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n        fi\n    done\n}\n\ngost_config_ask() {\n    echo\n    while :; do\n        echo -e \"是否开启 GOST转发，如前端有GOST加密，这里建议不开启。开启后可能能改善掉线情况，抽水软件的端口将变为随机，而你配置的端口将由GOST提供，脚本将自动绑定你配置的端口到GOST，由GOST转发到抽水， 输入 [${magenta}Y或者N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" enableGostProxy\n        [[ -z $enableGostProxy ]] && enableGostProxy=\"n\"\n\n        case $enableGostProxy in\n        Y | y)\n            enableGostProxy=\"y\"\n            echo\n            echo\n            echo -e \"$yellow 启用GOST转发 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        N | n)\n            enableGostProxy=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 不启用GOST转发 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\nprint_all_config() {\n    clear\n    echo\n    echo \" ....准备安装了咯..看看有没有配置正确了...\"\n    echo\n    echo \"---------- 安装信息 -------------\"\n    echo\n    echo -e \"$yellow CaoCaoMinerTaxProxy将被安装到$installPath${none}\"\n    echo\n    echo \"----------------------------------------------------------------\"\n    if [[ \"$enableLog\" = \"y\" ]]; then\n        echo -e \"$yellow 软件日志设置 = ${cyan}启用${none}\"\n        echo \"----------------------------------------------------------------\"\n    else\n        echo -e \"$yellow 软件日志设置 = ${cyan}禁用${none}\"\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableEthProxy\" = \"y\" ]]; then\n        echo \"ETHW/ETF 中转抽水配置\"\n        echo -e \"$yellow ETHW/ETF矿池地址 = ${cyan}$ethPoolAddress${none}\"\n        if [[ \"$ethPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow ETHW/ETF矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow ETHW/ETF矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow ETHW/ETF矿池端口 = $cyan$ethPoolPort$none\"\n        echo -e \"$yellow ETHW/ETF本地TCP中转端口 = $cyan$ethTcpPort$none\"\n        echo -e \"$yellow ETHW/ETF本地SSL中转端口 = $cyan$ethTlsPort$none\"\n        echo -e \"$yellow ETHW/ETF抽水用户名/钱包名 = $cyan$ethUser$none\"\n        echo -e \"$yellow ETHW/ETF抽水矿工名 = ${cyan}$ethWorker${none}\"\n        echo -e \"$yellow ETHW/ETF抽水比例 = $cyan$ethTaxPercent%$none\"\n        if [[ \"$enableEthSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow ETHW/ETF第二个抽水用户名/钱包名 = $cyan$ethSecondUser$none\"\n            echo -e \"$yellow ETHW/ETF第二个账户抽水比例 = $cyan$ethSecondTaxPercent%$none\"\n        fi\n        if [[ \"$enableEthDonatePool\" = \"y\" ]]; then\n            echo -e \"$yellow ETHW/ETF强制归集抽水 = ${cyan}启用${none}\"\n            echo -e \"$yellow ETHW/ETF强制归集抽水矿池地址 = ${cyan}$ethDonatePoolAddress${none}\"\n            if [[ \"$ethDonatePoolSslMode\" = \"y\" ]]; then\n                echo -e \"$yellow ETHW/ETF强制归集抽水矿池连接方式 = ${cyan}SSL${none}\"\n            else\n                echo -e \"$yellow ETHW/ETF强制归集抽水矿池连接方式 = ${cyan}TCP${none}\"\n            fi\n            echo -e \"$yellow ETHW/ETF强制归集矿池端口 = ${cyan}$ethDonatePoolPort${none}\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n        echo \"ETC 中转抽水配置\"\n        echo -e \"$yellow ETC矿池地址 = ${cyan}$etcPoolAddress${none}\"\n        if [[ \"$etcPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow ETC矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow ETC矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow ETC矿池端口 = $cyan$etcPoolPort$none\"\n        echo -e \"$yellow ETC本地TCP中转端口 = $cyan$etcTcpPort$none\"\n        echo -e \"$yellow ETC本地SSL中转端口 = $cyan$etcTlsPort$none\"\n        echo -e \"$yellow ETC抽水用户名/钱包名 = $cyan$etcUser$none\"\n        echo -e \"$yellow ETC抽水矿工名 = ${cyan}$etcWorker${none}\"\n        echo -e \"$yellow ETC抽水比例 = $cyan$etcTaxPercent%$none\"\n        if [[ \"$enableEtcSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow ETC第二个抽水用户名/钱包名 = $cyan$etcSecondUser$none\"\n            echo -e \"$yellow ETC第二个账户抽水比例 = $cyan$etcSecondTaxPercent%$none\"\n        fi\n        if [[ \"$enableEtcDonatePool\" = \"y\" ]]; then\n            echo -e \"$yellow ETC强制归集抽水 = ${cyan}启用${none}\"\n            echo -e \"$yellow ETC强制归集抽水矿池地址 = ${cyan}$etcDonatePoolAddress${none}\"\n            if [[ \"$etcDonatePoolSslMode\" = \"y\" ]]; then\n                echo -e \"$yellow ETC强制归集抽水矿池连接方式 = ${cyan}SSL${none}\"\n            else\n                echo -e \"$yellow ETC强制归集抽水矿池连接方式 = ${cyan}TCP${none}\"\n            fi\n            echo -e \"$yellow ETC强制归集矿池端口 = ${cyan}$etcDonatePoolPort${none}\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n        echo \"BTC 中转抽水配置\"\n        echo -e \"$yellow BTC矿池地址 = ${cyan}$btcPoolAddress${none}\"\n        if [[ \"$btcPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow BTC矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow BTC矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow BTC矿池端口 = $cyan$btcPoolPort$none\"\n        echo -e \"$yellow BTC本地TCP中转端口 = $cyan$btcTcpPort$none\"\n        echo -e \"$yellow BTC本地SSL中转端口 = $cyan$btcTlsPort$none\"\n        echo -e \"$yellow BTC抽水用户名/钱包名 = $cyan$btcUser$none\"\n        echo -e \"$yellow BTC抽水矿工名 = ${cyan}$btcWorker${none}\"\n        echo -e \"$yellow BTC抽水比例 = $cyan$btcTaxPercent%$none\"\n        if [[ \"$enableBtcSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow BTC第二个抽水用户名/钱包名 = $cyan$btcSecondUser$none\"\n            echo -e \"$yellow BTC第二个账户抽水比例 = $cyan$btcSecondTaxPercent%$none\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n        echo \"RVN 中转抽水配置\"\n        echo -e \"$yellow RVN矿池地址 = ${cyan}$rvnPoolAddress${none}\"\n        if [[ \"$rvnPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow RVN矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow RVN矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow RVN矿池端口 = $cyan$rvnPoolPort$none\"\n        echo -e \"$yellow RVN本地TCP中转端口 = $cyan$rvnTcpPort$none\"\n        echo -e \"$yellow RVN本地SSL中转端口 = $cyan$rvnTlsPort$none\"\n        echo -e \"$yellow RVN抽水用户名/钱包名 = $cyan$rvnUser$none\"\n        echo -e \"$yellow RVN抽水矿工名 = ${cyan}$rvnWorker${none}\"\n        echo -e \"$yellow RVN抽水比例 = $cyan$rvnTaxPercent%$none\"\n        if [[ \"$enableRvnSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow RVN第二个抽水用户名/钱包名 = $cyan$rvnSecondUser$none\"\n            echo -e \"$yellow RVN第二个账户抽水比例 = $cyan$rvnSecondTaxPercent%$none\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n        echo \"ERGO 中转抽水配置\"\n        echo -e \"$yellow ERGO矿池地址 = ${cyan}$ergoPoolAddress${none}\"\n        if [[ \"$ergoPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow ERGO矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow ERGO矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow ERGO矿池端口 = $cyan$ergoPoolPort$none\"\n        echo -e \"$yellow ERGO本地TCP中转端口 = $cyan$ergoTcpPort$none\"\n        echo -e \"$yellow ERGO本地SSL中转端口 = $cyan$ergoTlsPort$none\"\n        echo -e \"$yellow ERGO抽水用户名/钱包名 = $cyan$ergoUser$none\"\n        echo -e \"$yellow ERGO抽水矿工名 = ${cyan}$ergoWorker${none}\"\n        echo -e \"$yellow ERGO抽水比例 = $cyan$ergoTaxPercent%$none\"\n        if [[ \"$enableErgoSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow ERGO第二个抽水用户名/钱包名 = $cyan$ergoSecondUser$none\"\n            echo -e \"$yellow ERGO第二个账户抽水比例 = $cyan$ergoSecondTaxPercent%$none\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n        echo \"CFX 中转抽水配置\"\n        echo -e \"$yellow CFX矿池地址 = ${cyan}$cfxPoolAddress${none}\"\n        if [[ \"$cfxPoolSslMode\" = \"y\" ]]; then\n            echo -e \"$yellow CFX矿池连接方式 = ${cyan}SSL${none}\"\n        else\n            echo -e \"$yellow CFX矿池连接方式 = ${cyan}TCP${none}\"\n        fi\n        echo -e \"$yellow CFX矿池端口 = $cyan$cfxPoolPort$none\"\n        echo -e \"$yellow CFX本地TCP中转端口 = $cyan$cfxTcpPort$none\"\n        echo -e \"$yellow CFX本地SSL中转端口 = $cyan$cfxTlsPort$none\"\n        echo -e \"$yellow CFX抽水用户名/钱包名 = $cyan$cfxUser$none\"\n        echo -e \"$yellow CFX抽水矿工名 = ${cyan}$cfxWorker${none}\"\n        echo -e \"$yellow CFX抽水比例 = $cyan$cfxTaxPercent%$none\"\n        if [[ \"$enableCfxSecondConfig\" = \"y\" ]]; then\n            echo -e \"$yellow CFX第二个抽水用户名/钱包名 = $cyan$cfxSecondUser$none\"\n            echo -e \"$yellow CFX第二个账户抽水比例 = $cyan$cfxSecondTaxPercent%$none\"\n        fi\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableHttpLog\" = \"y\" ]]; then\n        echo \"网页监控平台配置\"\n        echo -e \"$yellow 网页监控平台端口 = ${cyan}$httpLogPort${none}\"\n        echo -e \"$yellow 网页监控平台密码 = $cyan$httpLogPassword$none\"\n        echo \"----------------------------------------------------------------\"\n    fi\n    if [[ \"$enableGostProxy\" = \"y\" ]]; then\n        echo \"GOST转发配置\"\n        echo -e \"$yellow 启用GOST转发，实际config.json配置文件中的抽水软件端口将更换为其他随机端口，对外仍使用你配置的上述端口，GOST自动绑定对外端口和抽水的随机端口，你只需按以前的一样给用户就可以了，请牢记你的配置端口 ${none}\"\n        echo \"----------------------------------------------------------------\"\n    fi\n    echo\n    while :; do\n        echo -e \"确认以上配置项正确吗，确认输入Y，可选输入项[${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}Y${none}]):\")\" confirmConfigRight\n        [[ -z $confirmConfigRight ]] && confirmConfigRight=\"y\"\n\n        case $confirmConfigRight in\n        Y | y)\n            confirmConfigRight=\"y\"\n            break\n            ;;\n        N | n)\n            confirmConfigRight=\"n\"\n            echo\n            echo\n            echo -e \"$yellow 退出安装 $none\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n}\n\ngost_modify_config_port() {\n    if [[ \"$enableEthProxy\" = \"y\" ]]; then\n        gostEthTcpPort=$ethTcpPort\n        ethTcpPort=$(shuf -i20001-65535 -n1)\n        gostEthTlsPort=$ethTlsPort\n        ethTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostEthTcpPort=$ethTcpPort\n        gostEthTlsPort=$ethTlsPort\n    fi\n    if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n        gostEtcTcpPort=$etcTcpPort\n        etcTcpPort=$(shuf -i20001-65535 -n1)\n        gostEtcTlsPort=$etcTlsPort\n        etcTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostEtcTcpPort=$etcTcpPort\n        gostEtcTlsPort=$etcTlsPort\n    fi\n    if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n        gostBtcTcpPort=$btcTcpPort\n        btcTcpPort=$(shuf -i20001-65535 -n1)\n        gostBtcTlsPort=$btcTlsPort\n        btcTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostBtcTcpPort=$btcTcpPort\n        gostBtcTlsPort=$btcTlsPort\n    fi\n    if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n        gostRvnTcpPort=$rvnTcpPort\n        rvnTcpPort=$(shuf -i20001-65535 -n1)\n        gostRvnTlsPort=$rvnTlsPort\n        rvnTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostRvnTcpPort=$rvnTcpPort\n        gostRvnTlsPort=$rvnTlsPort\n    fi\n    if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n        gostErgoTcpPort=$ergoTcpPort\n        ergoTcpPort=$(shuf -i20001-65535 -n1)\n        gostErgoTlsPort=$ergoTlsPort\n        ergoTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostErgoTcpPort=$ergoTcpPort\n        gostErgoTlsPort=$ergoTlsPort\n    fi\n    if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n        gostCfxTcpPort=$cfxTcpPort\n        cfxTcpPort=$(shuf -i20001-65535 -n1)\n        gostCfxTlsPort=$cfxTlsPort\n        cfxTlsPort=$(shuf -i20001-65535 -n1)\n    else\n        gostCfxTcpPort=$cfxTcpPort\n        gostCfxTlsPort=$cfxTlsPort\n    fi\n}\n\ninstall_download() {\n    $cmd update -y\n    if [[ $cmd == \"apt-get\" ]]; then\n        $cmd install -y lrzsz git zip unzip curl wget supervisor\n        supervisorRunningCount=$(ps -ef | grep supervisor* | grep -v \"grep\" | wc -l)\n        if [ $supervisorRunningCount -eq 0 ]; then\n            service supervisor restart\n        fi\n    else\n        $cmd install -y epel-release\n        $cmd update -y\n        $cmd install -y lrzsz git zip unzip curl wget supervisor\n        systemctl enable supervisord\n        supervisorRunningCount=$(ps -ef | grep supervisor* | grep -v \"grep\" | wc -l)\n        if [ $supervisorRunningCount -eq 0 ]; then\n            service supervisord restart\n        fi\n    fi\n    [ -d /tmp/ccminer ] && rm -rf /tmp/ccminer\n    [ -d /tmp/ccworker ] && rm -rf /tmp/ccworker\n    mkdir -p /tmp/ccworker\n    git clone https://github.com/ccminerproxy/CC-MinerProxy -b master /tmp/ccworker/gitcode --depth=1\n\n    if [[ ! -d /tmp/ccworker/gitcode ]]; then\n        echo\n        echo -e \"$red 哎呀呀...克隆脚本仓库出错了...$none\"\n        echo\n        echo -e \" 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本\"\n        echo\n        exit 1\n    fi\n    cp -rf /tmp/ccworker/gitcode/linux $installPath\n    rm -rf $installPath/install.sh\n    if [[ ! -d $installPath ]]; then\n        echo\n        echo -e \"$red 哎呀呀...复制文件出错了...$none\"\n        echo\n        echo -e \" 温馨提示..... 使用最新版本的Ubuntu或者CentOS再试试\"\n        echo\n        exit 1\n    fi\n}\n\nwrite_json() {\n    rm -rf $installPath/config.json\n    jsonPath=\"$installPath/config.json\"\n    echo \"{\" >>$jsonPath\n    if [[ \"$enableLog\" = \"y\" ]]; then\n        echo \"  \\\"enableLog\\\": true,\" >>$jsonPath\n    else\n        echo \"  \\\"enableLog\\\": false,\" >>$jsonPath\n    fi\n\n    if [[ \"$enableEthProxy\" = \"y\" ]]; then\n        echo \"  \\\"ethPoolAddress\\\": \\\"${ethPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$ethPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"ethPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"ethPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"ethPoolPort\\\": ${ethPoolPort},\" >>$jsonPath\n        echo \"  \\\"ethTcpPort\\\": ${ethTcpPort},\" >>$jsonPath\n        echo \"  \\\"ethTlsPort\\\": ${ethTlsPort},\" >>$jsonPath\n        echo \"  \\\"ethUser\\\": \\\"${ethUser}\\\",\" >>$jsonPath\n        echo \"  \\\"ethWorker\\\": \\\"${ethWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"ethTaxPercent\\\": ${ethTaxPercent},\" >>$jsonPath\n        if [[ \"$enableEthSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"ethSecondUser\\\": \\\"${ethSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"ethSecondTaxPercent\\\": ${ethSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableEthProxy\\\": true,\" >>$jsonPath\n        if [[ \"$enableEthDonatePool\" = \"y\" ]]; then\n            echo \"  \\\"enableEthDonatePool\\\": true,\" >>$jsonPath\n            echo \"  \\\"ethDonatePoolAddress\\\": \\\"${ethDonatePoolAddress}\\\",\" >>$jsonPath\n            if [[ \"$ethDonatePoolSslMode\" = \"y\" ]]; then\n                echo \"  \\\"ethDonatePoolSslMode\\\": true,\" >>$jsonPath\n            else\n                echo \"  \\\"ethDonatePoolSslMode\\\": false,\" >>$jsonPath\n            fi\n            echo \"  \\\"ethDonatePoolPort\\\": ${ethDonatePoolPort},\" >>$jsonPath\n        else\n            echo \"  \\\"enableEthDonatePool\\\": false,\" >>$jsonPath\n            echo \"  \\\"ethDonatePoolAddress\\\": \\\"ethw.f2pool.com\\\",\" >>$jsonPath\n            echo \"  \\\"ethDonatePoolSslMode\\\": false,\" >>$jsonPath\n            echo \"  \\\"ethDonatePoolPort\\\": ${ethPoolPort},\" >>$jsonPath\n        fi\n\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostEthTcpPort\n                ufw allow $gostEthTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostEthTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostEthTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $ethTcpPort\n                ufw allow $ethTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$ethTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$ethTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"ethPoolAddress\\\": \\\"ethw.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"ethPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"ethPoolPort\\\": 6688,\" >>$jsonPath\n        echo \"  \\\"ethTcpPort\\\": 6688,\" >>$jsonPath\n        echo \"  \\\"ethTlsPort\\\": 12345,\" >>$jsonPath\n        echo \"  \\\"ethUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"ethWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"ethTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableEthProxy\\\": false,\" >>$jsonPath\n        echo \"  \\\"enableEthDonatePool\\\": false,\" >>$jsonPath\n        echo \"  \\\"ethDonatePoolAddress\\\": \\\"ethw.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"ethDonatePoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"ethDonatePoolPort\\\": 6688,\" >>$jsonPath\n    fi\n    if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n        echo \"  \\\"etcPoolAddress\\\": \\\"${etcPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$etcPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"etcPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"etcPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"etcPoolPort\\\": ${etcPoolPort},\" >>$jsonPath\n        echo \"  \\\"etcTcpPort\\\": ${etcTcpPort},\" >>$jsonPath\n        echo \"  \\\"etcTlsPort\\\": ${etcTlsPort},\" >>$jsonPath\n        echo \"  \\\"etcUser\\\": \\\"${etcUser}\\\",\" >>$jsonPath\n        echo \"  \\\"etcWorker\\\": \\\"${etcWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"etcTaxPercent\\\": ${etcTaxPercent},\" >>$jsonPath\n        if [[ \"$enableEtcSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"etcSecondUser\\\": \\\"${etcSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"etcSecondTaxPercent\\\": ${etcSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableEtcProxy\\\": true,\" >>$jsonPath\n        if [[ \"$enableEtcDonatePool\" = \"y\" ]]; then\n            echo \"  \\\"enableEtcDonatePool\\\": true,\" >>$jsonPath\n            echo \"  \\\"etcDonatePoolAddress\\\": \\\"${etcDonatePoolAddress}\\\",\" >>$jsonPath\n            if [[ \"$etcDonatePoolSslMode\" = \"y\" ]]; then\n                echo \"  \\\"etcDonatePoolSslMode\\\": true,\" >>$jsonPath\n            else\n                echo \"  \\\"etcDonatePoolSslMode\\\": false,\" >>$jsonPath\n            fi\n            echo \"  \\\"etcDonatePoolPort\\\": ${etcDonatePoolPort},\" >>$jsonPath\n        else\n            echo \"  \\\"enableEtcDonatePool\\\": false,\" >>$jsonPath\n            echo \"  \\\"etcDonatePoolAddress\\\": \\\"etc.f2pool.com\\\",\" >>$jsonPath\n            echo \"  \\\"etcDonatePoolSslMode\\\": false,\" >>$jsonPath\n            echo \"  \\\"etcDonatePoolPort\\\": 8118,\" >>$jsonPath\n        fi\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostEtcTcpPort\n                ufw allow $gostEtcTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostEtcTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostEtcTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $etcTcpPort\n                ufw allow $etcTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$etcTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$etcTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"etcPoolAddress\\\": \\\"etc.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"etcPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"etcPoolPort\\\": 8118,\" >>$jsonPath\n        echo \"  \\\"etcTcpPort\\\": 8118,\" >>$jsonPath\n        echo \"  \\\"etcTlsPort\\\": 22345,\" >>$jsonPath\n        echo \"  \\\"etcUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"etcWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"etcTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableEtcProxy\\\": false,\" >>$jsonPath\n        echo \"  \\\"enableEtcDonatePool\\\": false,\" >>$jsonPath\n        echo \"  \\\"etcDonatePoolAddress\\\": \\\"etc.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"etcDonatePoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"etcDonatePoolPort\\\": 8118,\" >>$jsonPath\n    fi\n    if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n        echo \"  \\\"btcPoolAddress\\\": \\\"${btcPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$btcPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"btcPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"btcPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"btcPoolPort\\\": ${btcPoolPort},\" >>$jsonPath\n        echo \"  \\\"btcTcpPort\\\": ${btcTcpPort},\" >>$jsonPath\n        echo \"  \\\"btcTlsPort\\\": ${btcTlsPort},\" >>$jsonPath\n        echo \"  \\\"btcUser\\\": \\\"${btcUser}\\\",\" >>$jsonPath\n        echo \"  \\\"btcWorker\\\": \\\"${btcWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"btcTaxPercent\\\": ${btcTaxPercent},\" >>$jsonPath\n        if [[ \"$enableBtcSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"btcSecondUser\\\": \\\"${btcSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"btcSecondTaxPercent\\\": ${btcSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableBtcProxy\\\": true,\" >>$jsonPath\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostBtcTcpPort\n                ufw allow $gostBtcTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostBtcTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostBtcTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $btcTlsPort\n                ufw allow $btcTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$btcTlsPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$btcTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"btcPoolAddress\\\": \\\"btc.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"btcPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"btcPoolPort\\\": 3333,\" >>$jsonPath\n        echo \"  \\\"btcTcpPort\\\": 3333,\" >>$jsonPath\n        echo \"  \\\"btcTlsPort\\\": 32345,\" >>$jsonPath\n        echo \"  \\\"btcUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"btcWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"btcTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableBtcProxy\\\": false,\" >>$jsonPath\n    fi\n    if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n        echo \"  \\\"rvnPoolAddress\\\": \\\"${rvnPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$rvnPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"rvnPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"rvnPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"rvnPoolPort\\\": ${rvnPoolPort},\" >>$jsonPath\n        echo \"  \\\"rvnTcpPort\\\": ${rvnTcpPort},\" >>$jsonPath\n        echo \"  \\\"rvnTlsPort\\\": ${rvnTlsPort},\" >>$jsonPath\n        echo \"  \\\"rvnUser\\\": \\\"${rvnUser}\\\",\" >>$jsonPath\n        echo \"  \\\"rvnWorker\\\": \\\"${rvnWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"rvnTaxPercent\\\": ${rvnTaxPercent},\" >>$jsonPath\n        if [[ \"$enableRvnSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"rvnSecondUser\\\": \\\"${rvnSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"rvnSecondTaxPercent\\\": ${rvnSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableRvnProxy\\\": true,\" >>$jsonPath\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostRvnTcpPort\n                ufw allow $gostRvnTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostRvnTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostRvnTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $rvnTlsPort\n                ufw allow $rvnTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$rvnTlsPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$rvnTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"rvnPoolAddress\\\": \\\"raven.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"rvnPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"rvnPoolPort\\\": 3636,\" >>$jsonPath\n        echo \"  \\\"rvnTcpPort\\\": 3636,\" >>$jsonPath\n        echo \"  \\\"rvnTlsPort\\\": 42345,\" >>$jsonPath\n        echo \"  \\\"rvnUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"rvnWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"rvnTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableRvnProxy\\\": false,\" >>$jsonPath\n    fi\n    if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n        echo \"  \\\"ergoPoolAddress\\\": \\\"${ergoPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$ergoPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"ergoPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"ergoPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"ergoPoolPort\\\": ${ergoPoolPort},\" >>$jsonPath\n        echo \"  \\\"ergoTcpPort\\\": ${ergoTcpPort},\" >>$jsonPath\n        echo \"  \\\"ergoTlsPort\\\": ${ergoTlsPort},\" >>$jsonPath\n        echo \"  \\\"ergoUser\\\": \\\"${ergoUser}\\\",\" >>$jsonPath\n        echo \"  \\\"ergoWorker\\\": \\\"${ergoWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"ergoTaxPercent\\\": ${ergoTaxPercent},\" >>$jsonPath\n        if [[ \"$enableErgoSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"ergoSecondUser\\\": \\\"${ergoSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"ergoSecondTaxPercent\\\": ${ergoSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableErgoProxy\\\": true,\" >>$jsonPath\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostErgoTcpPort\n                ufw allow $gostErgoTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostErgoTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostErgoTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $ergoTlsPort\n                ufw allow $ergoTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$ergoTlsPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$ergoTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"ergoPoolAddress\\\": \\\"stratum-ergo.flypool.org\\\",\" >>$jsonPath\n        echo \"  \\\"ergoPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"ergoPoolPort\\\": 3333,\" >>$jsonPath\n        echo \"  \\\"ergoTcpPort\\\": 3434,\" >>$jsonPath\n        echo \"  \\\"ergoTlsPort\\\": 52345,\" >>$jsonPath\n        echo \"  \\\"ergoUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"ergoWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"ergoTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableErgoProxy\\\": false,\" >>$jsonPath\n    fi\n    if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n        echo \"  \\\"cfxPoolAddress\\\": \\\"${cfxPoolAddress}\\\",\" >>$jsonPath\n        if [[ \"$cfxPoolSslMode\" = \"y\" ]]; then\n            echo \"  \\\"cfxPoolSslMode\\\": true,\" >>$jsonPath\n        else\n            echo \"  \\\"cfxPoolSslMode\\\": false,\" >>$jsonPath\n        fi\n        echo \"  \\\"cfxPoolPort\\\": ${cfxPoolPort},\" >>$jsonPath\n        echo \"  \\\"cfxTcpPort\\\": ${cfxTcpPort},\" >>$jsonPath\n        echo \"  \\\"cfxTlsPort\\\": ${cfxTlsPort},\" >>$jsonPath\n        echo \"  \\\"cfxUser\\\": \\\"${cfxUser}\\\",\" >>$jsonPath\n        echo \"  \\\"cfxWorker\\\": \\\"${cfxWorker}\\\",\" >>$jsonPath\n        echo \"  \\\"cfxTaxPercent\\\": ${cfxTaxPercent},\" >>$jsonPath\n        if [[ \"$enableCfxSecondConfig\" = \"y\" ]]; then\n            echo \"  \\\"cfxSecondUser\\\": \\\"${cfxSecondUser}\\\",\" >>$jsonPath\n            echo \"  \\\"cfxSecondTaxPercent\\\": ${cfxSecondTaxPercent},\" >>$jsonPath\n        fi\n        echo \"  \\\"enableCfxProxy\\\": true,\" >>$jsonPath\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $gostCfxTcpPort\n                ufw allow $gostCfxTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$gostCfxTcpPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$gostCfxTlsPort/tcp --permanent\n            fi\n        else\n            if [[ $cmd == \"apt-get\" ]]; then\n                ufw allow $cfxTlsPort\n                ufw allow $cfxTlsPort\n            else\n                firewall-cmd --zone=public --add-port=$cfxTlsPort/tcp --permanent\n                firewall-cmd --zone=public --add-port=$cfxTlsPort/tcp --permanent\n            fi\n        fi\n    else\n        echo \"  \\\"cfxPoolAddress\\\": \\\"cfx.f2pool.com\\\",\" >>$jsonPath\n        echo \"  \\\"cfxPoolSslMode\\\": false,\" >>$jsonPath\n        echo \"  \\\"cfxPoolPort\\\": 6800,\" >>$jsonPath\n        echo \"  \\\"cfxTcpPort\\\": 6800,\" >>$jsonPath\n        echo \"  \\\"cfxTlsPort\\\": 62345,\" >>$jsonPath\n        echo \"  \\\"cfxUser\\\": \\\"UserOrAddress\\\",\" >>$jsonPath\n        echo \"  \\\"cfxWorker\\\": \\\"worker\\\",\" >>$jsonPath\n        echo \"  \\\"cfxTaxPercent\\\": 6,\" >>$jsonPath\n        echo \"  \\\"enableCfxProxy\\\": false,\" >>$jsonPath\n    fi\n    if [[ \"$enableHttpLog\" = \"y\" ]]; then\n        echo \"  \\\"httpLogPort\\\": ${httpLogPort},\" >>$jsonPath\n        echo \"  \\\"httpLogPassword\\\": \\\"${httpLogPassword}\\\",\" >>$jsonPath\n        echo \"  \\\"enableHttpLog\\\": true,\" >>$jsonPath\n        if [[ $cmd == \"apt-get\" ]]; then\n            ufw allow $httpLogPort\n        else\n            firewall-cmd --zone=public --add-port=$httpLogPort/tcp --permanent\n        fi\n    else\n        echo \"  \\\"httpLogPort\\\": 8080,\" >>$jsonPath\n        echo \"  \\\"httpLogPassword\\\": \\\"caocaominer\\\",\" >>$jsonPath\n        echo \"  \\\"enableHttpLog\\\": false,\" >>$jsonPath\n    fi\n\n    if [ \"$enableGostProxy\" = \"y\" ]; then\n        if [[ \"$enableEthProxy\" = \"y\" ]]; then\n            echo \"  \\\"gostEthTcpPort\\\": ${gostEthTcpPort},\" >>$jsonPath\n            echo \"  \\\"gostEthTlsPort\\\": ${gostEthTlsPort},\" >>$jsonPath\n        fi\n        if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n            echo \"  \\\"gostEtcTcpPort\\\": ${gostEtcTcpPort},\" >>$jsonPath\n            echo \"  \\\"gostEtcTlsPort\\\": ${gostEtcTlsPort},\" >>$jsonPath\n        fi\n        if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n            echo \"  \\\"gostBtcTcpPort\\\": ${gostBtcTcpPort},\" >>$jsonPath\n            echo \"  \\\"gostBtcTlsPort\\\": ${gostBtcTlsPort},\" >>$jsonPath\n        fi\n        if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n            echo \"  \\\"gostRvnTcpPort\\\": ${gostRvnTcpPort},\" >>$jsonPath\n            echo \"  \\\"gostRvnTlsPort\\\": ${gostRvnTlsPort},\" >>$jsonPath\n        fi\n    fi\n\n    echo \"  \\\"version\\\": \\\"9.0.4\\\"\" >>$jsonPath\n    echo \"}\" >>$jsonPath\n    if [[ $cmd == \"apt-get\" ]]; then\n        ufw reload\n    elif [ $(systemctl is-active firewalld) = 'active' ]; then\n        systemctl restart firewalld\n    fi\n}\n\nstart_write_config() {\n    echo\n    echo \"下载完成，开始写入配置\"\n    echo\n    chmod a+x $installPath/ccminertaxproxy\n    chmod a+x $installPath/gost\n    if [ -d \"/etc/supervisor/conf/\" ]; then\n        rm /etc/supervisor/conf/ccworker${installNumberTag}.conf -f\n        echo \"[program:ccworkertaxproxy${installNumberTag}]\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        echo \"command=${installPath}/ccminertaxproxy\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        echo \"stdout_logfile=NONE\" >>/etc/supervisor/conf/ccworker${installNumberTag}.conf\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ \"$enableEthProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTcpPort}/127.0.0.1:${ethTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTlsPort}/127.0.0.1:${ethTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf\n            fi\n            if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTcpPort}/127.0.0.1:${etcTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTlsPort}/127.0.0.1:${etcTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf\n            fi\n            if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTcpPort}/127.0.0.1:${btcTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTlsPort}/127.0.0.1:${btcTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf\n            fi\n            if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTcpPort}/127.0.0.1:${rvnTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTlsPort}/127.0.0.1:${rvnTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf\n            fi\n            if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTcpPort}/127.0.0.1:${ergoTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTlsPort}/127.0.0.1:${ergoTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf\n            fi\n            if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtcp]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTcpPort}/127.0.0.1:${cfxTcpPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf\n\n                rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtls]\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTlsPort}/127.0.0.1:${cfxTlsPort}\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf\n            fi\n        fi\n    elif [ -d \"/etc/supervisor/conf.d/\" ]; then\n        rm /etc/supervisor/conf.d/ccworker${installNumberTag}.conf -f\n        echo \"[program:ccworkertaxproxy${installNumberTag}]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        echo \"command=${installPath}/ccminertaxproxy\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        echo \"stdout_logfile=NONE\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}.conf\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ \"$enableEthProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTcpPort}/127.0.0.1:${ethTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTlsPort}/127.0.0.1:${ethTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf\n            fi\n            if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTcpPort}/127.0.0.1:${etcTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTlsPort}/127.0.0.1:${etcTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf\n            fi\n            if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTcpPort}/127.0.0.1:${btcTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTlsPort}/127.0.0.1:${btcTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf\n            fi\n            if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTcpPort}/127.0.0.1:${rvnTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTlsPort}/127.0.0.1:${rvnTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf\n            fi\n            if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTcpPort}/127.0.0.1:${ergoTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTlsPort}/127.0.0.1:${ergoTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf\n            fi\n            if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtcp]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTcpPort}/127.0.0.1:${cfxTcpPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf\n\n                rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtls]\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTlsPort}/127.0.0.1:${cfxTlsPort}\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"directory=${installPath}/\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"autostart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf\n                echo \"autorestart=true\" >>/etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf\n            fi\n        fi\n    elif [ -d \"/etc/supervisord.d/\" ]; then\n        rm /etc/supervisord.d/ccworker${installNumberTag}.ini -f\n        echo \"[program:ccworkertaxproxy${installNumberTag}]\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        echo \"command=${installPath}/ccminertaxproxy\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        echo \"stdout_logfile=NONE\" >>/etc/supervisord.d/ccworker${installNumberTag}.ini\n        if [ \"$enableGostProxy\" = \"y\" ]; then\n            if [[ \"$enableEthProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTcpPort}/127.0.0.1:${ethTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostethtls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostEthTlsPort}/127.0.0.1:${ethTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini\n            fi\n            if [[ \"$enableEtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTcpPort}/127.0.0.1:${etcTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostetctls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostEtcTlsPort}/127.0.0.1:${etcTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini\n            fi\n            if [[ \"$enableBtcProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTcpPort}/127.0.0.1:${btcTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostbtctls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostBtcTlsPort}/127.0.0.1:${btcTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini\n            fi\n            if [[ \"$enableRvnProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTcpPort}/127.0.0.1:${rvnTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostrvntls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostRvnTlsPort}/127.0.0.1:${rvnTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini\n            fi\n            if [[ \"$enableErgoProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTcpPort}/127.0.0.1:${ergoTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostergotls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostErgoTlsPort}/127.0.0.1:${ergoTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini\n            fi\n            if [[ \"$enableCfxProxy\" = \"y\" ]]; then\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtcp]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTcpPort}/127.0.0.1:${cfxTcpPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini\n\n                rm /etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini -f\n                echo \"[program:ccworkertaxproxy${installNumberTag}gostcfxtls]\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini\n                echo \"command=${installPath}/gost -L=tcp://:${gostCfxTlsPort}/127.0.0.1:${cfxTlsPort}\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini\n                echo \"directory=${installPath}/\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini\n                echo \"autostart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini\n                echo \"autorestart=true\" >>/etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini\n            fi\n        fi\n    else\n        echo\n        echo \"----------------------------------------------------------------\"\n        echo\n        echo \" Supervisor安装目录没了，安装失败，请查看github解决办法\"\n        echo\n        exit 1\n    fi\n    write_json\n\n    echo\n    while :; do\n        echo -e \"强烈建议开启：TCP SSL优化稳定神器、BBR加速、修改系统连接数限制吗，确认输入Y，可选输入项[${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}Y${none}]):\")\" needChangeLimit\n        [[ -z $needChangeLimit ]] && needChangeLimit=\"y\"\n\n        case $needChangeLimit in\n        Y | y)\n            needChangeLimit=\"y\"\n            break\n            ;;\n        N | n)\n            needChangeLimit=\"n\"\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    changeLimit=\"n\"\n    if [[ \"$needChangeLimit\" = \"y\" ]]; then\n        changeLimit=\"y\"\n        benefit_core\n    fi\n\n    clear\n    echo\n    echo \"----------------------------------------------------------------\"\n    echo\n    echo \" 本机防火墙端口已经开放，如果还无法连接，请到云服务商控制台操作安全组，放行对应的端口。\"\n    echo \" 第一次安装请输入 reboot 重启你的服务器使突破tcp连接数生效，以后不用重启服务器。\"\n    echo \" 大佬...安装好了...去$installPath/logs/里看日志吧\"\n    echo\n    echo \" 大佬，如果你要用域名走SSL模式，记得自己申请下域名证书，然后替换掉$installPath/key.pem和$installPath/cer.pem哦，不然很多内核不支持自签名证书的，比如凤凰内核\"\n    echo\n    if [[ \"$changeLimit\" = \"y\" ]]; then\n        echo \" 大佬，系统连接数限制已经改了，记得重启一次生效哦，输入reboot 即可重启您的服务器\"\n        echo\n    fi\n    echo \"----------------------------------------------------------------\"\n    supervisorctl update\n}\n\nbenefit_core() {\n    tcp_tune\n    enable_forwarding\n    ulimit_tune\n}\n\ntcp_tune() { # 优化TCP窗口\n    sed -i '/net.ipv4.tcp_no_metrics_save/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_no_metrics_save/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_ecn/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_frto/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_mtu_probing/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_rfc1337/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_sack/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_fack/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_window_scaling/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_adv_win_scale/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_moderate_rcvbuf/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf\n    sed -i '/net.core.rmem_max/d' /etc/sysctl.conf\n    sed -i '/net.core.wmem_max/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.udp_rmem_min/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.udp_wmem_min/d' /etc/sysctl.conf\n    sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf\n    cat >>/etc/sysctl.conf <<EOF\nnet.ipv4.tcp_no_metrics_save=1\nnet.ipv4.tcp_ecn=0\nnet.ipv4.tcp_frto=0\nnet.ipv4.tcp_mtu_probing=0\nnet.ipv4.tcp_rfc1337=0\nnet.ipv4.tcp_sack=1\nnet.ipv4.tcp_fack=1\nnet.ipv4.tcp_window_scaling=1\nnet.ipv4.tcp_adv_win_scale=1\nnet.ipv4.tcp_moderate_rcvbuf=1\nnet.core.rmem_max=16777216\nnet.core.wmem_max=16777216\nnet.ipv4.tcp_rmem=4096 87380 16777216\nnet.ipv4.tcp_wmem=4096 16384 16777216\nnet.ipv4.udp_rmem_min=8192\nnet.ipv4.udp_wmem_min=8192\nnet.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr\nEOF\n    sysctl -p && sysctl --system\n}\n\nenable_forwarding() { #开启内核转发\n    sed -i '/net.ipv4.conf.all.route_localnet/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.conf.all.forwarding/d' /etc/sysctl.conf\n    sed -i '/net.ipv4.conf.default.forwarding/d' /etc/sysctl.conf\n    cat >>'/etc/sysctl.conf' <<EOF\nnet.ipv4.conf.all.route_localnet=1\nnet.ipv4.ip_forward=1\nnet.ipv4.conf.all.forwarding=1\nnet.ipv4.conf.default.forwarding=1\nEOF\n    sysctl -p && sysctl --system\n}\n\nulimit_tune() {\n\n    echo \"1000000\" >/proc/sys/fs/file-max\n    sed -i '/fs.file-max/d' /etc/sysctl.conf\n    cat >>'/etc/sysctl.conf' <<EOF\nfs.file-max=1000000\nEOF\n\n    ulimit -SHn 1000000 && ulimit -c unlimited\n    echo \"root     soft   nofile    1000000\nroot     hard   nofile    1000000\nroot     soft   nproc     1000000\nroot     hard   nproc     1000000\nroot     soft   core      1000000\nroot     hard   core      1000000\nroot     hard   memlock   unlimited\nroot     soft   memlock   unlimited\n\n*     soft   nofile    1000000\n*     hard   nofile    1000000\n*     soft   nproc     1000000\n*     hard   nproc     1000000\n*     soft   core      1000000\n*     hard   core      1000000\n*     hard   memlock   unlimited\n*     soft   memlock   unlimited\n\" >/etc/security/limits.conf\n    if grep -q \"ulimit\" /etc/profile; then\n        :\n    else\n        sed -i '/ulimit -SHn/d' /etc/profile\n        echo \"ulimit -SHn 1000000\" >>/etc/profile\n    fi\n    if grep -q \"pam_limits.so\" /etc/pam.d/common-session; then\n        :\n    else\n        sed -i '/required pam_limits.so/d' /etc/pam.d/common-session\n        echo \"session required pam_limits.so\" >>/etc/pam.d/common-session\n    fi\n\n    sed -i '/DefaultTimeoutStartSec/d' /etc/systemd/system.conf\n    sed -i '/DefaultTimeoutStopSec/d' /etc/systemd/system.conf\n    sed -i '/DefaultRestartSec/d' /etc/systemd/system.conf\n    sed -i '/DefaultLimitCORE/d' /etc/systemd/system.conf\n    sed -i '/DefaultLimitNOFILE/d' /etc/systemd/system.conf\n    sed -i '/DefaultLimitNPROC/d' /etc/systemd/system.conf\n\n    cat >>'/etc/systemd/system.conf' <<EOF\n[Manager]\n#DefaultTimeoutStartSec=90s\nDefaultTimeoutStopSec=30s\n#DefaultRestartSec=100ms\nDefaultLimitCORE=infinity\nDefaultLimitNOFILE=65535\nDefaultLimitNPROC=65535\nEOF\n\n    systemctl daemon-reload\n\n}\n\ninstall() {\n    clear\n    while :; do\n        echo -e \"请输入这次安装的标记ID，如果多开请设置不同的标记ID，只能输入数字1-999\"\n        read -p \"$(echo -e \"(默认: ${cyan}1$none):\")\" installNumberTag\n        [ -z \"$installNumberTag\" ] && installNumberTag=1\n        installPath=\"/etc/ccworker/ccworker\"$installNumberTag\n        oldversionInstallPath=\"/etc/ccminer/ccminer\"$installNumberTag\n        case $installNumberTag in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9])\n            echo\n            echo\n            echo -e \"$yellow CaoCaoMinerTaxProxy将被安装到$installPath${none}\"\n            echo \"----------------------------------------------------------------\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" ..端口要在1-65535之间啊哥哥.....\"\n            error\n            ;;\n        esac\n    done\n\n    if [ -d \"$installPath\" ]; then\n        echo\n        echo \" 大佬...你已经安装了 CaoCaoMinerTaxProxy 的标记为$installNumberTag的多开程序啦...重新运行脚本设置个新的吧...\"\n        echo\n        echo -e \" $yellow 如要删除，重新运行脚本选择卸载即可${none}\"\n        echo\n        exit 1\n    fi\n\n    if [ -d \"$oldversionInstallPath\" ]; then\n        rm -rf $oldversionInstallPath -f\n        if [ -d \"/etc/supervisor/conf/\" ]; then\n            rm /etc/supervisor/conf/ccminer${installNumberTag}.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisor/conf.d/\" ]; then\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisord.d/\" ]; then\n            rm /etc/supervisord.d/ccminer${installNumberTag}.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_eth_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_eth_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_etc_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_etc_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_btc_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_btc_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_rvn_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_rvn_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_ergo_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_ergo_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_cfx_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_cfx_tls.ini -f\n        fi\n        supervisorctl update\n    fi\n\n    log_config_ask\n    eth_miner_config_ask\n    etc_miner_config_ask\n    btc_miner_config_ask\n    rvn_miner_config_ask\n    ergo_miner_config_ask\n    cfx_miner_config_ask\n    http_logger_config_ask\n    gost_config_ask\n\n    if [[ \"$enableEthProxy\" = \"n\" ]] && [[ \"$enableEtcProxy\" = \"n\" ]] && [[ \"$enableBtcProxy\" = \"n\" ]] && [[ \"$enableRvnProxy\" = \"n\" ]] && [[ \"$enableErgoProxy\" = \"n\" ]] && [[ \"$enableCfxProxy\" = \"n\" ]]; then\n        echo\n        echo \" 大佬...你一个都不启用，玩啥呢，退出重新安装吧...\"\n        echo\n        exit 1\n    fi\n\n    print_all_config\n\n    if [ \"$confirmConfigRight\" = \"n\" ]; then\n        exit 1\n    fi\n\n    if [ \"$enableGostProxy\" = \"y\" ]; then\n        gost_modify_config_port\n    fi\n\n    install_download\n    start_write_config\n}\n\nupdate_version() {\n    clear\n    echo\n    while :; do\n        echo -e \"更新本机安装的全部标记ID的版本吗？确认全部更新输入Y，如只需要更新单个版本输入N，可选输入项[${magenta}Y/N${none}] 按回车\"\n        read -p \"$(echo -e \"(默认: [${cyan}N${none}]):\")\" needDoAllUpgrade\n        [[ -z $needDoAllUpgrade ]] && needDoAllUpgrade=\"n\"\n\n        case $needDoAllUpgrade in\n        Y | y)\n            needDoAllUpgrade=\"y\"\n            break\n            ;;\n        N | n)\n            needDoAllUpgrade=\"n\"\n            break\n            ;;\n        *)\n            error\n            ;;\n        esac\n    done\n    if [[ \"$needDoAllUpgrade\" = \"y\" ]]; then\n        update_all_version\n    else\n        update_single_version\n    fi\n}\n\nupdate_single_version() {\n    while :; do\n        echo -e \"请输入要更新的软件的标记ID，只能输入数字1-999，这个脚本只能更新5.0及以上版本的软件，其他版本请删除后重装\"\n        read -p \"$(echo -e \"(输入标记ID:)\")\" installNumberTag\n        installPath=\"/etc/ccworker/ccworker\"$installNumberTag\n        case $installNumberTag in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9])\n            echo\n            echo\n            echo -e \"$yellow 标记ID为${installNumberTag}的CaoCaoMinerTaxProxy将被更新${none}\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" 输入一个标记ID好吗\"\n            error\n            ;;\n        esac\n    done\n    if [ -d \"$installPath\" ]; then\n        echo\n        echo \" 大佬...马上为您更新...\"\n        update_download\n        echo\n    else\n        echo\n        echo \" 大佬...你还没有安装 CaoCaoMinerTaxProxy 的标记为$installNumberTag的多开程序啦...重新运行脚本设置个新的吧...\"\n        echo\n        exit 1\n    fi\n}\n\nupdate_download() {\n    [ -d /tmp/ccminer ] && rm -rf /tmp/ccminer\n    [ -d /tmp/ccworker ] && rm -rf /tmp/ccworker\n    mkdir -p /tmp/ccworker\n    git clone https://github.com/ccminerproxy/CC-MinerProxy -b master /tmp/ccworker/gitcode --depth=1\n\n    if [[ ! -d /tmp/ccworker/gitcode ]]; then\n        echo\n        echo -e \"$red 哎呀呀...克隆脚本仓库出错了...$none\"\n        echo\n        echo -e \" 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本\"\n        echo\n        exit 1\n    fi\n    rm -rf $installPath/ccminertaxproxy\n    rm -rf $installPath/html/index.html\n    rm -rf $installPath/html/index-no-tax.html\n    cp -rf /tmp/ccworker/gitcode/linux/ccminertaxproxy $installPath\n    cp -rf /tmp/ccworker/gitcode/linux/html/index.html $installPath/html/\n    cp -rf /tmp/ccworker/gitcode/linux/html/index-no-tax.html $installPath/html/\n    chmod a+x $installPath/ccminertaxproxy\n    echo -e \"$yellow 更新成功${none}\"\n    supervisorctl restart ccworkertaxproxy$installNumberTag\n}\n\nupdate_all_version() {\n    [ -d /tmp/ccminer ] && rm -rf /tmp/ccminer\n    [ -d /tmp/ccworker ] && rm -rf /tmp/ccworker\n    mkdir -p /tmp/ccworker\n    git clone https://github.com/ccminerproxy/CC-MinerProxy -b master /tmp/ccworker/gitcode --depth=1\n\n    if [[ ! -d /tmp/ccworker/gitcode ]]; then\n        echo\n        echo -e \"$red 哎呀呀...克隆脚本仓库出错了...$none\"\n        echo\n        echo -e \" 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本\"\n        echo\n        exit 1\n    fi\n    installIdMax=999\n    for installNumberTag in $(seq 1 $installIdMax); do\n        installPath=\"/etc/ccworker/ccworker\"$installNumberTag\n        if [ -d \"$installPath\" ]; then\n            rm -rf $installPath/ccminertaxproxy\n            rm -rf $installPath/html/index.html\n            rm -rf $installPath/html/index-no-tax.html\n            cp -rf /tmp/ccworker/gitcode/linux/ccminertaxproxy $installPath\n            cp -rf /tmp/ccworker/gitcode/linux/html/index.html $installPath/html/\n            cp -rf /tmp/ccworker/gitcode/linux/html/index-no-tax.html $installPath/html/\n            chmod a+x $installPath/ccminertaxproxy\n            echo -e \"$yellow 更新ID:$installNumberTag成功${none}\"\n            echo\n        fi\n    done\n    supervisorctl reload\n}\n\nuninstall() {\n    clear\n    while :; do\n        echo -e \"请输入要删除的软件的标记ID，只能输入数字1-999\"\n        read -p \"$(echo -e \"(输入标记ID:)\")\" installNumberTag\n        installPath=\"/etc/ccworker/ccworker\"$installNumberTag\n        oldversionInstallPath=\"/etc/ccminer/ccminer\"$installNumberTag\n        case $installNumberTag in\n        [1-9] | [1-9][0-9] | [1-9][0-9][0-9])\n            echo\n            echo\n            echo -e \"$yellow 标记ID为${installNumberTag}的CaoCaoMinerTaxProxy将被卸载${none}\"\n            echo\n            break\n            ;;\n        *)\n            echo\n            echo \" 输入一个标记ID好吗\"\n            error\n            ;;\n        esac\n    done\n\n    if [ -d \"$oldversionInstallPath\" ]; then\n        rm -rf $oldversionInstallPath -f\n        if [ -d \"/etc/supervisor/conf/\" ]; then\n            rm /etc/supervisor/conf/ccminer${installNumberTag}.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf/ccminer${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisor/conf.d/\" ]; then\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccminer${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisord.d/\" ]; then\n            rm /etc/supervisord.d/ccminer${installNumberTag}.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_eth_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_eth_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_etc_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_etc_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_btc_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_btc_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_rvn_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_rvn_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_ergo_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_ergo_tls.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_cfx_tcp.ini -f\n            rm /etc/supervisord.d/ccminer${installNumberTag}_gost_cfx_tls.ini -f\n        fi\n        supervisorctl update\n    fi\n\n    if [ -d \"$installPath\" ]; then\n        echo\n        echo \"----------------------------------------------------------------\"\n        echo\n        echo \" 大佬...马上为您删除...\"\n        echo\n        rm -rf $installPath -f\n        if [ -d \"/etc/supervisor/conf/\" ]; then\n            rm /etc/supervisor/conf/ccworker${installNumberTag}.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf/ccworker${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisor/conf.d/\" ]; then\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_eth_tls.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_etc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_btc_tls.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_rvn_tls.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_ergo_tls.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tcp.conf -f\n            rm /etc/supervisor/conf.d/ccworker${installNumberTag}_gost_cfx_tls.conf -f\n        elif [ -d \"/etc/supervisord.d/\" ]; then\n            rm /etc/supervisord.d/ccworker${installNumberTag}.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_eth_tls.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_etc_tls.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_btc_tls.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_rvn_tls.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_ergo_tls.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tcp.ini -f\n            rm /etc/supervisord.d/ccworker${installNumberTag}_gost_cfx_tls.ini -f\n        fi\n        echo \"----------------------------------------------------------------\"\n        echo\n        echo -e \"$yellow 删除成功，如要安装新的，重新运行脚本选择即可${none}\"\n        supervisorctl stop ccworkertaxproxy$installNumberTag\n        supervisorctl update\n    else\n        echo\n        echo \" 大佬...你压根就没安装这个标记ID的...\"\n        echo\n        echo -e \"$yellow 如要安装新的，重新运行脚本选择即可${none}\"\n        echo\n        exit 1\n    fi\n}\n\nclear\nwhile :; do\n    echo\n    echo \"....... CaoCaoMinerTaxProxy 9.0版 防DDos CC 极致优化版<双钱包> 一键安装脚本 & 管理脚本 by 曹操 .......\"\n    echo\n    echo \" 1. 安装\"\n    echo\n    echo \" 2. 更新\"\n    echo\n    echo \" 3. 卸载\"\n    echo\n    read -p \"$(echo -e \"请选择 [${magenta}1-3$none]:\")\" choose\n    case $choose in\n    1)\n        install\n        break\n        ;;\n    2)\n        update_version\n        break\n        ;;\n    3)\n        uninstall\n        break\n        ;;\n    *)\n        error\n        ;;\n    esac\ndone\n"
  },
  {
    "path": "linux/key.pem",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAuLL1pK2pGhz5nOJFLMmRqhwYy1JQQpqV7RUSCv55yhAQJ+45\nFxmH6D8hfZiPDjoo+3U3zsU1cYFu/KwxyVbUPJ/0LwnP1oNPjZx8B/FvDbZjZ/xS\niHOF0ThTO0YeEk9+wniAzOW2T5Ao6bR6r8z98DEMI/kwn4expl1gibVB59Gxhp5U\nowdd++pUWwm7nv1fshxeL4mV7DGvmOOZ8jhod+2dt9kXPTcf9QetrFr12884QHnS\nRlBRpiro2sqTlYhHd15BiCRml3Q+qk66m18m3KeJLUhgQ7MSVyFBbL4ILZkpngE4\n/lR5jqOVDIT5bWCZV0WgyDHMgTVkLCT8Z2Y1aQIDAQABAoIBAFh27w0nWJ13T1+D\nSRrAmRJfTsjj7ilYnYLm2rOFW5QayYI2qgWUZvIoesQLdEmeNc7rQAW7k3OASUag\nu1/yRMmc23pEOtZGIq5zSz0KuORafZZq1qUgn/GsBsGXPgQLK22+BgMd64qEQ/Rc\nS380slR/SY9ZZZ6jgcVraDfNJ3n+t7l5lLdPBEjZfwhEJti5e6PasKRBX7LNAfzp\nHXCF8AjWvxK+bdhPfxlcj/fGsJdQYRodvSsv1l0hCuZwwmu0VVRXomRYaaacz5mu\n8oXuJ0AmtCjmQEbEycgE++5VFCNSdehmFEZVHycAjx05nq7rPO6We9YRbIoHSkrx\n41j1jXkCgYEA2gSCGPAbInRDHwTW5D/SKrORGyOjqU5hilFaVZhlPJD/O7gBs1G2\npe8ElD5+VRp2mFBpyebGXGSa9T3i+By7/XaoXE+GIPCDI3/y49/y6Jy1NzOwEyZ4\nzVKT2sJ3ksSebFBIyqSY/IeF8cuh5nPnvd1mde+nQJHJUsmcXAAmcesCgYEA2OB1\nVpagIQrDHgfEGOsQngJsXW4Kdg0IEcGEQbYiLVTDOY1snTsBtoOC2ht8fQSawx3K\npuAPkIMONtnL0qGzHOXF+NO6hcts9AgRlvtbLBwL7QN52v6eoFHcImB58sn1l2ww\neVc5tOAaNiKXdRi9pEgDlhHEFizAq4mc+vA4jPsCgYEArsqUf2fpaVsrATCBFSgx\n2Lh0qvyM102XGC0XLq7q438gkoF5I4ps1GZoFm5wHM0FriIyXoQeHq8uKVa/pMps\n0c6TNscvMzOBADIxyw6ekm4pP6O6E/BxQ7RkBCyLb2kh1pcbdRQ376a79dqb58af\nUnKyFfXY8wSvEye+q2gXapcCgYEAqCX/U88dAAFUHmhvBdLa42eFlTrIKZcY9otP\ne5M3FGZvpqOb3pvtTBDS10AQWO3FABqNEK0P5D94OdbLTNfKA1GzGKUwLKP4KYxH\n9wOTQLPOG0lipQRdAHf3cT/TzQYAwBJF0w5p028dY3OWcldoUYL0JNpJadfw2g6s\nA3NUpRkCgYEAkLBN+pjNT3IBf2LeHSGBN9COmHLuaanL2P3F5e7oG7dsI8Fl7IXK\nN3fwncqcTEuQyL8EpSLPWJy0hSbM96eALYBw8d0TO1aI8hbrY8asCN9wmQMuEisH\nJkHElw/n2HVd8ZClnyk1w+gczrNBDwvVI7LWTgYNsVzZS23UDIMlzcY=\n-----END RSA PRIVATE KEY-----\n"
  },
  {
    "path": "windows/README.md",
    "content": "## 下载\n\n目录里的文件都要下载\n\n## 运行方式①\n\n打开CaoMinerTaxProxy.exe，记得关闭杀毒软件，不然可能误报\n打开后几个配置自己配置，配置完了点击启动\n每次启动系统都要重新运行一次\n\n## 运行方式②\n\n自行编辑config.json文件，注意//之后的都删掉，包括//\n``` json\n{\n  \"enableLog\":true, //启用日志记录\n\n  \"ethPoolAddress\": \"ethw.f2pool.com\", //ETHW/ETF矿池域名或者IP,不要写端口,端口写下面一行\n  \"ethPoolPort\": 6688, //ETHW/ETF矿池端口\n  \"ethPoolSslMode\": false, //ETHW/ETF矿池端口是否是SSL端口,true为是,false为否\n  \"ethTcpPort\": 6688, //ETHW/ETF中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"ethTlsPort\": 12345, //ETHW/ETF中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"ethUser\": \"UserOrAddress\", //你的ETHW/ETF钱包地址,或者你在矿池的用户名\n  \"ethSecondUser\": \"UserOrAddress\", //你的ETHW/ETF钱包地址,或者你在矿池的用户名\n  \"ethWorker\": \"worker\", //容易分辨的矿工名\n  \"ethTaxPercent\": 20, //ETHW/ETF抽水百分比,单位%,只能输入0-95之间的数字\n  \"ethSecondTaxPercent\": 0, //ETHW/ETF抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableEthProxy\":true, //是否启用ETHW/ETF中转&抽水服务,true为启用,false为关闭\n  \"enableEthDonatePool\": false, //是否启用ETHW/ETF抽水重定向到指定矿池功能,true为启用,false为关闭\n  \"ethDonatePoolAddress\": \"asia1.ethermine.org\", //ETHW/ETF抽水重定向矿池地址\n  \"ethDonatePoolSslMode\": true,  //ETHW/ETF抽水重定向矿池的端口是否为SSL端口,true为是,false为否\n  \"ethDonatePoolPort\": 5555, //ETHW/ETF抽水重定向矿池端口\n\n  \"etcPoolAddress\": \"etc.f2pool.com\", //ETC矿池域名或者IP,不要写端口,端口写下面一行\n  \"etcPoolPort\": 8118, //ETC矿池端口\n  \"etcPoolSslMode\": false, //ETC矿池端口是否是SSL端口,true为是,false为否\n  \"etcTcpPort\": 8118, //ETC中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"etcTlsPort\": 22345, //ETC中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"etcUser\": \"UserOrAddress\", //你的ETC钱包地址,或者你在矿池的用户名\n  \"etcSecondUser\": \"UserOrAddress\", //你的ETC钱包地址,或者你在矿池的用户名\n  \"etcWorker\": \"worker\", //容易分辨的矿工名\n  \"etcTaxPercent\": 20, //ETC抽水百分比,单位%,只能输入0-95之间的数字\n  \"etcSecondTaxPercent\": 0, //ETC抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableEtcProxy\":false, //是否启用ETC中转&抽水服务,true为启用,false为关闭\n  \"enableEtcDonatePool\": false, //是否启用ETC抽水重定向到指定矿池功能,true为启用,false为关闭\n  \"etcDonatePoolAddress\": \"etc.f2pool.com\", //ETC抽水重定向矿池地址\n  \"etcDonatePoolSslMode\": false,  //ETC抽水重定向矿池的端口是否为SSL端口,true为是,false为否\n  \"etcDonatePoolPort\": 8118, //ETC抽水重定向矿池端口\n\n  \"btcPoolAddress\": \"btc.f2pool.com\", //BTC矿池域名或者IP,不要写端口,端口写下面一行\n  \"btcPoolPort\": 3333, //BTC矿池端口\n  \"btcPoolSslMode\": false, //BTC矿池端口是否是SSL端口,true为是,false为否\n  \"btcTcpPort\": 3333, //BTC中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"btcTlsPort\": 32345, //BTC中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"btcUser\": \"user\", //你在矿池的BTC账户用户名\n  \"btcSecondUser\": \"user\", //你在矿池的BTC账户用户名\n  \"btcWorker\": \"worker\", //容易分辨的矿工名\n  \"btcTaxPercent\": 20, //BTC抽水百分比,单位%,只能输入0-95之间的数字\n  \"btcSecondTaxPercent\": 0, //BTC抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableBtcProxy\":false, //是否启用BTC中转&抽水服务,true为启用,false为关闭\n  \n  \"rvnPoolAddress\": \"raven.f2pool.com\", //RVN矿池域名或者IP,不要写端口,端口写下面一行\n  \"rvnPoolPort\": 3636, //RVN矿池端口\n  \"rvnPoolSslMode\": false, //RVN矿池端口是否是SSL端口,true为是,false为否\n  \"rvnTcpPort\": 3636, //RVN中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"rvnTlsPort\": 42345, //RVN中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"rvnUser\": \"user\", //你的RVN钱包地址,或者你在矿池的用户名\n  \"rvnSecondUser\": \"user\", //你的RVN钱包地址,或者你在矿池的用户名\n  \"rvnWorker\": \"worker\", //容易分辨的矿工名\n  \"rvnTaxPercent\": 20, //RVN抽水百分比,单位%,只能输入0-95之间的数字\n  \"rvnSecondTaxPercent\": 0, //RVN抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableRvnProxy\":false, //是否启用RVN中转&抽水服务,true为启用,false为关闭\n  \n  \"ergoPoolAddress\": \"stratum-ergo.flypool.org\", //ERGO矿池域名或者IP,不要写端口,端口写下面一行\n  \"ergoPoolPort\": 3333, //ERGO矿池端口\n  \"ergoPoolSslMode\": false, //ERGO矿池端口是否是SSL端口,true为是,false为否\n  \"ergoTcpPort\": 3336, //ERGO中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"ergoTlsPort\": 52345, //ERGO中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"ergoUser\": \"user\", //你的ERGO钱包地址,或者你在矿池的用户名\n  \"ergoSecondUser\": \"user\", //你的ERGO钱包地址,或者你在矿池的用户名\n  \"ergoWorker\": \"worker\", //容易分辨的矿工名\n  \"ergoTaxPercent\": 20, //ERGO抽水百分比,单位%,只能输入0-95之间的数字\n  \"ergoSecondTaxPercent\": 0, //ERGO抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableErgoProxy\":false, //是否启用ERGO中转&抽水服务,true为启用,false为关闭\n  \n  \"cfxPoolAddress\": \"cfx.f2pool.com\", //CFX矿池域名或者IP,不要写端口,端口写下面一行\n  \"cfxPoolPort\": 6800, //CFX矿池端口\n  \"cfxPoolSslMode\": false, //CFX矿池端口是否是SSL端口,true为是,false为否\n  \"cfxTcpPort\": 6800, //CFX中转的TCP模式端口,矿机填你的IP或者域名:这个端口\n  \"cfxTlsPort\": 62345, //CFX中转的SSL模式端口,矿机填你的IP或者域名:这个端口\n  \"cfxUser\": \"user\", //你的CFX钱包地址,或者你在矿池的用户名\n  \"cfxSecondUser\": \"user\", //你的CFX钱包地址,或者你在矿池的用户名\n  \"cfxWorker\": \"worker\", //容易分辨的矿工名\n  \"cfxTaxPercent\": 20, //CFX抽水百分比,单位%,只能输入0-95之间的数字\n  \"cfxSecondTaxPercent\": 0, //CFX抽水百分比,单位%,只能输入0-95之间的数字\n  \"enableCfxProxy\":false, //是否启用CFX中转&抽水服务,true为启用,false为关闭\n  \n  \"httpLogPort\":8080, //网页监控平台端口\n  \"httpLogPassword\":\"caocaominer\", //网页监控平台密码，不能为空\n  \"enableHttpLog\":true //是否启用网页监控平台\n}\n```\n\n编辑好config.json文件,或者用CaoCaoMinerTaxProxy.exe配置好运行一次\n管理员权限打开命令行cmd\n切换到本目录\n\n输入nssm install CMinerProxy\n点击Path后面的省略号，选择ccminertaxproxy.exe\n点击Install service\n重启系统即可自动启动\n\n\n## 传参方式运行\n支持传参方式运行，方式如下\n\n``` command\nccminertaxproxy.exe --ethPoolAddress=eth.f2pool.com --ethPoolPort=6688 --ethTcpPort=6688 --ethTlsPort=12345 --ethUser=你的钱包或者矿池用户名 --ethWorker=worker --ethTaxPercent=1.0 --enableEthProxy=true \n```\n以上仅为范例，参数名字和上方JSON配置文件的参数名一致，参数为false的配置默认不用配进去，看不懂这个的不要用这种方式\n\n\n## 注意\n\n千万不要忘记修改配置文件\n千万不要忘记修改配置文件\n千万不要忘记修改配置文件\n\n如修改了配置，修改后需要重新执行程序，或者去services.msc里重启CMinerProxy服务\n\n矿机无法连接的记得开防火墙，云服务商的还有对应的安全组，配置好了矿机连不上肯定是这俩原因，如何配置安全组自己Goodle去\n\n需要增加TCP连接数，[查看这里](https://m.kafan.cn/A/pv06e54mvd.html)\n\n\n## 关于SSL\n\n如果要用自己的域名证书，请直接替换key.pem和cer.pem文件，如果看不懂这句话就不要管，凤凰不用自己的域名证书无法使用SSL模式\n"
  },
  {
    "path": "windows/cer.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIDUTCCAjkCFGsHka/T1i3IRkpdHtwChRrJ/Bu2MA0GCSqGSIb3DQEBCwUAMGQx\nCzAJBgNVBAYTAlNHMRIwEAYDVQQIDAlTaW5nYXBvcmUxEjAQBgNVBAcMCVNpbmdh\ncG9yZTELMAkGA1UECgwCQ0MxCzAJBgNVBAsMAkNDMRMwEQYDVQQDDApjYW9jYW8u\nY2FvMCAXDTIxMTIwNDE0MzY1N1oYDzIxMjExMTEwMTQzNjU3WjBkMQswCQYDVQQG\nEwJTRzESMBAGA1UECAwJU2luZ2Fwb3JlMRIwEAYDVQQHDAlTaW5nYXBvcmUxCzAJ\nBgNVBAoMAkNDMQswCQYDVQQLDAJDQzETMBEGA1UEAwwKY2FvY2FvLmNhbzCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiy9aStqRoc+ZziRSzJkaocGMtS\nUEKale0VEgr+ecoQECfuORcZh+g/IX2Yjw46KPt1N87FNXGBbvysMclW1Dyf9C8J\nz9aDT42cfAfxbw22Y2f8UohzhdE4UztGHhJPfsJ4gMzltk+QKOm0eq/M/fAxDCP5\nMJ+HsaZdYIm1QefRsYaeVKMHXfvqVFsJu579X7IcXi+Jlewxr5jjmfI4aHftnbfZ\nFz03H/UHraxa9dvPOEB50kZQUaYq6NrKk5WIR3deQYgkZpd0PqpOuptfJtyniS1I\nYEOzElchQWy+CC2ZKZ4BOP5UeY6jlQyE+W1gmVdFoMgxzIE1ZCwk/GdmNWkCAwEA\nATANBgkqhkiG9w0BAQsFAAOCAQEAi5EA8GLpftGdhWIuSqW6tbCgfuLh16Uxc7NW\nhrf3aF7JDOB1e5GvtEP/wtEDw4VKUySxdmK51QNOHn4kZwNc6iMnWdjuPLhoGgFv\n+KLTRMiWin62JPCtAIDzh3eapfwQVWAKovskTHS4XzlrJPSqtiAfzxXVgQj67H8r\nl+pU1Tmr53RHa7Dsn/qgqPATePQzlaIKHCPAO76+u2+jObAPVdLXf0aIAbrT4neP\nBf+LiL8OvvNEvBz7ko1g6LVZgsZbetu23RrmOcjuCsglBn8z+zOA4up2xVaV1YO7\nwyAF2hSQQNSJo0+TIiX38wcBWiNf2k6ZZhs1IkPTwGxiit9Zjg==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "windows/config.json",
    "content": "{\n  \"enableLog\":true,\n  \"ethPoolAddress\": \"ethw.f2pool.com\",\n  \"ethPoolSslMode\": false,\n  \"ethPoolPort\": 6688,\n  \"ethTcpPort\": 6688,\n  \"ethTlsPort\": 12345,\n  \"ethUser\": \"UserOrAddress\",\n  \"ethSecondUser\": \"UserOrAddress\",\n  \"ethWorker\": \"worker\",\n  \"ethTaxPercent\": 20, \n  \"ethSecondTaxPercent\": 0,\n  \"enableEthProxy\":true,\n  \"enableEthDonatePool\": false,\n  \"ethDonatePoolAddress\": \"asia1.ethermine.org\",\n  \"ethDonatePoolSslMode\": true,\n  \"ethDonatePoolPort\": 5555,\n  \"etcPoolAddress\": \"etc.f2pool.com\",\n  \"etcPoolSslMode\": false,\n  \"etcPoolPort\": 8118,\n  \"etcTcpPort\": 8118,\n  \"etcTlsPort\": 22345,\n  \"etcUser\": \"UserOrAddress\",\n  \"etcSecondUser\": \"UserOrAddress\",\n  \"etcWorker\": \"worker\",\n  \"etcTaxPercent\": 20, \n  \"etcSecondTaxPercent\": 0,\n  \"enableEtcProxy\":false,\n  \"enableEtcDonatePool\": false,\n  \"etcDonatePoolAddress\": \"etc.f2pool.com\",\n  \"etcDonatePoolSslMode\": false,\n  \"etcDonatePoolPort\": 8118,  \n  \"btcPoolAddress\": \"btc.f2pool.com\",\n  \"btcPoolSslMode\":false,\n  \"btcPoolPort\": 3333,\n  \"btcTcpPort\": 3333,\n  \"btcTlsPort\": 32345,\n  \"btcUser\": \"user\",\n  \"btcSecondUser\": \"user\",\n  \"btcWorker\": \"worker\",\n  \"btcTaxPercent\": 20, \n  \"btcSecondTaxPercent\": 0,\n  \"enableBtcProxy\":false,\n  \"rvnPoolAddress\": \"raven.f2pool.com\",\n  \"rvnPoolSslMode\": false,\n  \"rvnPoolPort\": 3636,\n  \"rvnTcpPort\": 3636,\n  \"rvnTlsPort\": 42345,\n  \"rvnUser\": \"user\",\n  \"rvnSecondUser\": \"user\",\n  \"rvnWorker\": \"worker\",\n  \"rvnTaxPercent\": 20,\n  \"rvnSecondTaxPercent\": 0,\n  \"enableRvnProxy\": false,\n  \"ergoPoolAddress\": \"stratum-ergo.flypool.org\",\n  \"ergoPoolSslMode\": false,\n  \"ergoPoolPort\": 3333,\n  \"ergoTcpPort\": 3434,\n  \"ergoTlsPort\": 52345,\n  \"ergoUser\": \"user\",\n  \"ergoSecondUser\": \"user\",\n  \"ergoWorker\": \"worker\",\n  \"ergoTaxPercent\": 20,\n  \"ergoSecondTaxPercent\": 0,\n  \"enableErgoProxy\": false,\n  \"cfxPoolAddress\": \"cfx.f2pool.com\",\n  \"cfxPoolSslMode\": false,\n  \"cfxPoolPort\": 6800,\n  \"cfxTcpPort\": 6800,\n  \"cfxTlsPort\": 62345,\n  \"cfxUser\": \"user\",\n  \"cfxSecondUser\": \"user\",\n  \"cfxWorker\": \"worker\",\n  \"cfxTaxPercent\": 20,\n  \"cfxSecondTaxPercent\": 0,\n  \"enableCfxProxy\": false,\n  \"httpLogPort\":8080,\n  \"httpLogPassword\":\"admin\",\n  \"enableHttpLog\":true\n}"
  },
  {
    "path": "windows/html/index-no-tax.html",
    "content": "<!DOCTYPE html>\r\n\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>管理控制台</title>\r\n    <style>\r\n        /*\r\n        CSS for the main interaction\r\n       */\r\n        .tabset > input[type=\"radio\"] {\r\n            position: absolute;\r\n            left: -200vw;\r\n        }\r\n\r\n        .tabset .tab-panel {\r\n            display: none;\r\n        }\r\n\r\n        .tabset > input:first-child:checked ~ .tab-panels > .tab-panel:first-child,\r\n        .tabset > input:nth-child(3):checked ~ .tab-panels > .tab-panel:nth-child(2),\r\n        .tabset > input:nth-child(5):checked ~ .tab-panels > .tab-panel:nth-child(3),\r\n        .tabset > input:nth-child(7):checked ~ .tab-panels > .tab-panel:nth-child(4),\r\n        .tabset > input:nth-child(9):checked ~ .tab-panels > .tab-panel:nth-child(5),\r\n        .tabset > input:nth-child(11):checked ~ .tab-panels > .tab-panel:nth-child(6),\r\n        .tabset > input:nth-child(13):checked ~ .tab-panels > .tab-panel:nth-child(7),\r\n        .tabset > input:nth-child(15):checked ~ .tab-panels > .tab-panel:nth-child(8),\r\n        .tabset > input:nth-child(17):checked ~ .tab-panels > .tab-panel:nth-child(9),\r\n        .tabset > input:nth-child(19):checked ~ .tab-panels > .tab-panel:nth-child(10),\r\n        .tabset > input:nth-child(21):checked ~ .tab-panels > .tab-panel:nth-child(11) {\r\n            display: block;\r\n        }\r\n\r\n        /*\r\n        Styling\r\n       */\r\n        body {\r\n            font: 16px/1.5em \"Overpass\", \"Open Sans\", Helvetica, sans-serif;\r\n            color: #333;\r\n            font-weight: 300;\r\n        }\r\n\r\n        .tabset > label {\r\n            position: relative;\r\n            display: inline-block;\r\n            padding: 15px 15px 25px;\r\n            border: 1px solid transparent;\r\n            border-bottom: 0;\r\n            cursor: pointer;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .tabset > label::after {\r\n            content: \"\";\r\n            position: absolute;\r\n            left: 15px;\r\n            bottom: 10px;\r\n            width: 22px;\r\n            height: 4px;\r\n            background: #8d8d8d;\r\n        }\r\n\r\n        .tabset > label:hover,\r\n        .tabset > input:focus + label {\r\n            color: #06c;\r\n        }\r\n\r\n        .tabset > label:hover::after,\r\n        .tabset > input:focus + label::after,\r\n        .tabset > input:checked + label::after {\r\n            background: #06c;\r\n        }\r\n\r\n        .tabset > input:checked + label {\r\n            border-color: #ccc;\r\n            border-bottom: 1px solid #fff;\r\n            margin-bottom: -1px;\r\n        }\r\n\r\n        .tab-panel {\r\n            padding: 30px 0;\r\n            border-top: 1px solid #ccc;\r\n        }\r\n\r\n        body {\r\n            padding: 1px;\r\n        }\r\n\r\n        #logButton {\r\n            display: inline-flex;\r\n            margin-top: 0.5rem;\r\n            text-decoration: inherit;\r\n            --tw-text-opacity: 1;\r\n            padding-left: 1rem;\r\n            --tw-bg-opacity: 1;\r\n            background-color: rgba(37, 99, 235, var(--tw-bg-opacity));\r\n            align-items: center;\r\n            padding-right: 1rem;\r\n            color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n            padding-top: 0.5rem;\r\n            padding-bottom: 0.5rem;\r\n            letter-spacing: -.05em;\r\n            font-weight: 600;\r\n            font-size: 1.125rem;\r\n            line-height: 1.75rem;\r\n            position: absolute;\r\n            right: 0.6rem;\r\n        }\r\n    </style>\r\n\r\n    <style>\r\n        /* Table Styles */\r\n\r\n        .table-wrapper {\r\n            margin: 10px 70px 70px;\r\n            box-shadow: 0px 35px 50px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .fl-table {\r\n            border-radius: 5px;\r\n            font-size: 16px;\r\n            font-weight: normal;\r\n            border: none;\r\n            border-collapse: collapse;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            white-space: nowrap;\r\n            background-color: white;\r\n        }\r\n\r\n        .fl-table td,\r\n        .fl-table th {\r\n            text-align: center;\r\n            padding: 8px;\r\n        }\r\n\r\n        .fl-table td {\r\n            border-right: 1px solid #f8f8f8;\r\n            font-size: 14px;\r\n        }\r\n\r\n\r\n        .fl-table thead th {\r\n            color: #ffffff;\r\n            background: #4FC3A1;\r\n        }\r\n\r\n\r\n        .fl-table thead th:nth-child(odd) {\r\n            color: #ffffff;\r\n            background: #324960;\r\n        }\r\n\r\n        .fl-table tr:nth-child(even) {\r\n            background: #F8F8F8;\r\n        }\r\n\r\n        /* Responsive */\r\n\r\n        @media (max-width: 767px) {\r\n            .fl-table {\r\n                display: block;\r\n                width: 100%;\r\n            }\r\n\r\n            .table-wrapper:before {\r\n                content: \"Scroll horizontally >\";\r\n                display: block;\r\n                text-align: right;\r\n                font-size: 11px;\r\n                color: white;\r\n                padding: 0 0 10px;\r\n            }\r\n\r\n            .fl-table thead,\r\n            .fl-table tbody,\r\n            .fl-table thead th {\r\n                display: block;\r\n            }\r\n\r\n            .fl-table thead th:last-child {\r\n                border-bottom: none;\r\n            }\r\n\r\n            .fl-table thead {\r\n                float: left;\r\n            }\r\n\r\n            .fl-table tbody {\r\n                width: auto;\r\n                position: relative;\r\n                overflow-x: auto;\r\n            }\r\n\r\n            .fl-table td,\r\n            .fl-table th {\r\n                padding: 20px .625em .625em .625em;\r\n                height: 60px;\r\n                vertical-align: middle;\r\n                box-sizing: border-box;\r\n                overflow-x: hidden;\r\n                overflow-y: auto;\r\n                width: 120px;\r\n                font-size: 13px;\r\n                text-overflow: ellipsis;\r\n            }\r\n\r\n            .fl-table thead th {\r\n                text-align: left;\r\n                border-bottom: 1px solid #f7f7f9;\r\n            }\r\n\r\n            .fl-table tbody tr {\r\n                display: table-cell;\r\n            }\r\n\r\n            .fl-table tbody tr:nth-child(odd) {\r\n                background: none;\r\n            }\r\n\r\n            .fl-table tr:nth-child(even) {\r\n                background: transparent;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(odd) {\r\n                background: #F8F8F8;\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(even) {\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tbody td {\r\n                display: block;\r\n                text-align: center;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n<div id=\"main\" class=\"tabset\" style=\"display: none;\">\r\n\r\n    <!-- Tab 0 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabConfig\" aria-controls=\"secConfig\" onclick=\"onConfigClick()\" checked>\r\n    <label for=\"tabConfig\">中转配置</label>\r\n    <!-- Tab 1 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEth\" aria-controls=\"secEth\" onclick=\"onEthClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEth\" id=\"labEth\" style=\"display: none;\">ETHW/ETF信息</label>\r\n    <!-- Tab 2 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEtc\" aria-controls=\"secEtc\" onclick=\"onEtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEtc\" id=\"labEtc\" style=\"display: none;\">ETC信息</label>\r\n    <!-- Tab 3 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabBtc\" aria-controls=\"secBtc\" onclick=\"onBtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabBtc\" id=\"labBtc\" style=\"display: none;\">BTC信息</label>\r\n    <!-- Tab 4 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabRvn\" aria-controls=\"secRvn\" onclick=\"onRvnClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabRvn\" id=\"labRvn\" style=\"display: none;\">RVN信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabErgo\" aria-controls=\"secErgo\" onclick=\"onErgoClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabErgo\" id=\"labErgo\" style=\"display: none;\">ERGO信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabCfx\" aria-controls=\"secCfx\" onclick=\"onCfxClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabCfx\" id=\"labCfx\" style=\"display: none;\">CFX信息</label>\r\n\r\n    <div class=\"tab-panels\">\r\n        <section id=\"secConfig\" class=\"tab-panel\">\r\n            <div id=\"tableConfig\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>配置项解释</th>\r\n                        <th>配置项名称</th>\r\n                        <th>配置项内容</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"configTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEth\" class=\"tab-panel\">\r\n            <div id=\"tableEth\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ethTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEtc\" class=\"tab-panel\">\r\n            <div id=\"tableEtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"etcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secBtc\" class=\"tab-panel\">\r\n            <div id=\"tableBtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"btcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secRvn\" class=\"tab-panel\">\r\n            <div id=\"tableRvn\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"rvnTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secErgo\" class=\"tab-panel\">\r\n            <div id=\"tableErgo\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ergoTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secCfx\" class=\"tab-panel\">\r\n            <div id=\"tableCfx\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"cfxTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n    </div>\r\n\r\n</div>\r\n</div>\r\n<div id=\"timer\" style=\"display: none;\"></div>\r\n</body>\r\n<script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n<script>!function(a){function b(a){var b;return a=a||0,b=Math.floor(a/60),{days:a>=n.DAYINSECONDS?Math.floor(a/n.DAYINSECONDS):0,hours:a>=3600?Math.floor(a%n.DAYINSECONDS/3600):0,totalMinutes:b,minutes:a>=60?Math.floor(a%3600/60):b,seconds:a%60,totalSeconds:a}}function c(a){return((a=parseInt(a,10))<10&&\"0\")+a}function d(){return{seconds:0,editable:!1,duration:null,callback:function(){console.log(\"Time up!\")},repeat:!1,countdown:!1,format:null,updateFrequency:500}}function e(){return Math.round((Date.now?Date.now():(new Date).getTime())/1e3)}function f(a){var d=b(a);if(d.days)return d.days+\":\"+c(d.hours)+\":\"+c(d.minutes)+\":\"+c(d.seconds);if(d.hours)return d.hours+\":\"+c(d.minutes)+\":\"+c(d.seconds);return d.minutes?d.minutes+\":\"+c(d.seconds)+\" min\":d.seconds+\" sec\"}function g(a,d){for(var e=b(a),f=[{identifier:\"%d\",value:e.days},{identifier:\"%h\",value:e.hours},{identifier:\"%m\",value:e.minutes},{identifier:\"%s\",value:e.seconds},{identifier:\"%g\",value:e.totalMinutes},{identifier:\"%t\",value:e.totalSeconds},{identifier:\"%D\",value:c(e.days)},{identifier:\"%H\",value:c(e.hours)},{identifier:\"%M\",value:c(e.minutes)},{identifier:\"%S\",value:c(e.seconds)},{identifier:\"%G\",value:c(e.totalMinutes)},{identifier:\"%T\",value:c(e.totalSeconds)}],g=0;g<f.length;g++)d=d.replace(f[g].identifier,f[g].value);return d}function h(a){if(!isNaN(Number(a)))return a;a=a.toLowerCase();var b=a.match(/\\d+d/),c=a.match(/\\d+h/),d=a.match(/\\d+m/),e=a.match(/\\d+s/);if(!(b||c||d||e))throw new Error(\"Invalid string passed in durationTimeToSeconds!\");var f=0;return b&&(f+=Number(b[0].replace(\"d\",\"\"))*n.DAYINSECONDS),c&&(f+=3600*Number(c[0].replace(\"h\",\"\"))),d&&(f+=60*Number(d[0].replace(\"m\",\"\"))),e&&(f+=Number(e[0].replace(\"s\",\"\"))),f}function i(a){var b,c;return a.indexOf(\"sec\")>0?c=Number(a.replace(/\\ssec/g,\"\")):a.indexOf(\"min\")>0?(a=a.replace(/\\smin/g,\"\"),b=a.split(\":\"),c=Number(60*b[0])+Number(b[1])):a.match(/\\d{1,2}:\\d{2}:\\d{2}:\\d{2}/)?(b=a.split(\":\"),c=Number(b[0]*n.DAYINSECONDS)+Number(3600*b[1])+Number(60*b[2])+Number(b[3])):a.match(/\\d{1,2}:\\d{2}:\\d{2}/)&&(b=a.split(\":\"),c=Number(3600*b[0])+Number(60*b[1])+Number(b[2])),c}function j(b,c){b.state=c,a(b.element).data(\"state\",c)}function k(b){a(b.element).on(\"focus\",function(){b.pause()}),a(b.element).on(\"blur\",function(){b.totalSeconds=i(a(b.element)[b.html]()),b.resume()})}function l(b){if(b.totalSeconds=e()-b.startTime,b.config.countdown)return b.totalSeconds=b.config.duration-b.totalSeconds,0===b.totalSeconds&&(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.callback(),a(b.element).data(\"seconds\")),void b.render();b.render(),b.config.duration&&b.totalSeconds>0&&b.totalSeconds%b.config.duration==0&&(b.config.callback&&b.config.callback(),b.config.repeat||(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.duration=null))}function m(b,c){if(this.element=b,this.originalConfig=a.extend({},c),this.totalSeconds=0,this.intervalId=null,this.html=\"html\",\"INPUT\"!==b.tagName&&\"TEXTAREA\"!==b.tagName||(this.html=\"val\"),this.config=o.getDefaultConfig(),c.duration&&(c.duration=o.durationTimeToSeconds(c.duration)),\"string\"!=typeof c&&(this.config=a.extend(this.config,c)),this.config.seconds&&(this.totalSeconds=this.config.seconds),this.config.editable&&o.makeEditable(this),this.startTime=o.unixSeconds()-this.totalSeconds,this.config.duration&&this.config.repeat&&this.config.updateFrequency<1e3&&(this.config.updateFrequency=1e3),this.config.countdown){if(!this.config.duration)throw new Error(\"Countdown option set without duration!\");if(this.config.editable)throw new Error(\"Cannot set editable on a countdown timer!\");this.config.startTime=o.unixSeconds()-this.config.duration,this.totalSeconds=this.config.duration}}var n={PLUGIN_NAME:\"timer\",TIMER_RUNNING:\"running\",TIMER_PAUSED:\"paused\",TIMER_REMOVED:\"removed\",DAYINSECONDS:86400},o={getDefaultConfig:d,unixSeconds:e,secondsToPrettyTime:f,secondsToFormattedTime:g,durationTimeToSeconds:h,prettyTimeToSeconds:i,setState:j,makeEditable:k,intervalHandler:l};m.prototype.start=function(){this.state!==n.TIMER_RUNNING&&(o.setState(this,n.TIMER_RUNNING),this.render(),this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.pause=function(){this.state===n.TIMER_RUNNING&&(o.setState(this,n.TIMER_PAUSED),clearInterval(this.intervalId))},m.prototype.resume=function(){this.state===n.TIMER_PAUSED&&(o.setState(this,n.TIMER_RUNNING),this.config.countdown?this.startTime=o.unixSeconds()-this.config.duration+this.totalSeconds:this.startTime=o.unixSeconds()-this.totalSeconds,this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.remove=function(){clearInterval(this.intervalId),o.setState(this,n.TIMER_REMOVED),a(this.element).data(n.PLUGIN_NAME,null),a(this.element).data(\"seconds\",null)},m.prototype.reset=function(){var b=this.originalConfig;this.remove(),a(this.element).timer(b)},m.prototype.render=function(){this.config.format?a(this.element)[this.html](o.secondsToFormattedTime(this.totalSeconds,this.config.format)):a(this.element)[this.html](o.secondsToPrettyTime(this.totalSeconds)),a(this.element).data(\"seconds\",this.totalSeconds)},a.fn.timer=function(b){return b=b||\"start\",this.each(function(){a.data(this,n.PLUGIN_NAME)instanceof m||a.data(this,n.PLUGIN_NAME,new m(this,b));var c=a.data(this,n.PLUGIN_NAME);\"string\"==typeof b?\"function\"==typeof c[b]&&c[b]():c.start()})}}(jQuery);</script>\r\n<script>\r\n    function calcTimeDiff(pastTime) {\r\n        var now = new Date().getTime();\r\n        if (now <= pastTime) {\r\n            return \"刚刚\";\r\n        }\r\n        var nowSecond = Math.floor(now / 1000);\r\n        var pastSecond = Math.floor(pastTime / 1000);\r\n        var diff = nowSecond - pastSecond;\r\n        if (diff < 60) {\r\n            return diff + \"秒\";\r\n        }\r\n        if (diff < 3600) {\r\n            return Math.floor(diff / 60) + \"分\" + (diff % 60) + \"秒\"\r\n        }\r\n        if (diff < 86400) {\r\n            return Math.floor(diff / 3600) + \"时\" + Math.floor((diff % 3600) / 60) + \"分\" + ((diff % 3600) % 60) + \"秒\"\r\n        }\r\n        return Math.floor(diff / 86400) + \"天\" + Math.floor((diff % 86400) / 3600) + \"时\" + Math.floor(((diff % 86400) % 3600) / 60) + \"分\" + (((diff % 86400) % 3600) % 60) + \"秒\"\r\n    }\r\n\r\n    var isInConfig = true, isInEth = false, isInEtc = false, isInBtc = false, isInRvn = false, isInErgo = false, isInCfx = false;\r\n    var configDesc = {\r\n        \"ethPoolAddress\": \"ETHW/ETF矿池地址\",\r\n        \"ethPoolSslMode\": \"ETHW/ETF矿池端口是否SSL模式\",\r\n        \"ethPoolPort\": \"ETHW/ETF矿池端口\",\r\n        \"ethTcpPort\": \"ETHW/ETF中转TCP端口\",\r\n        \"ethTlsPort\": \"ETHW/ETF中转SSL端口\",\r\n\r\n        \"etcPoolAddress\": \"ETC矿池地址\",\r\n        \"etcPoolSslMode\": \"ETC矿池端口是否SSL模式\",\r\n        \"etcPoolPort\": \"ETC矿池端口\",\r\n        \"etcTcpPort\": \"ETC中转TCP端口\",\r\n        \"etcTlsPort\": \"ETC中转SSL端口\",\r\n\r\n        \"btcPoolAddress\": \"BTC矿池地址\",\r\n        \"btcPoolSslMode\": \"BTC矿池端口是否SSL模式\",\r\n        \"btcPoolPort\": \"BTC矿池端口\",\r\n        \"btcTcpPort\": \"BTC中转TCP端口\",\r\n        \"btcTlsPort\": \"BTC中转SSL端口\",\r\n\r\n        \"rvnPoolAddress\": \"RVN矿池地址\",\r\n        \"rvnPoolSslMode\": \"RVN矿池端口是否SSL模式\",\r\n        \"rvnPoolPort\": \"RVN矿池端口\",\r\n        \"rvnTcpPort\": \"RVN中转TCP端口\",\r\n        \"rvnTlsPort\": \"RVN中转SSL端口\",\r\n\r\n        \"ergoPoolAddress\": \"ERGO矿池地址\",\r\n        \"ergoPoolSslMode\": \"ERGO矿池端口是否SSL模式\",\r\n        \"ergoPoolPort\": \"ERGO矿池端口\",\r\n        \"ergoTcpPort\": \"ERGO中转TCP端口\",\r\n        \"ergoTlsPort\": \"ERGO中转SSL端口\",\r\n\r\n        \"cfxPoolAddress\": \"CFX矿池地址\",\r\n        \"cfxPoolSslMode\": \"CFX矿池端口是否SSL模式\",\r\n        \"cfxPoolPort\": \"CFX矿池端口\",\r\n        \"cfxTcpPort\": \"CFX中转TCP端口\",\r\n        \"cfxTlsPort\": \"CFX中转SSL端口\",\r\n\r\n        \"enableHttpLog\": \"是否启用网页管理控制台\",\r\n        \"httpLogPort\": \"网页管理控制台端口\",\r\n\r\n        \"ccVersion\": \"转发工具版本\",\r\n    }\r\n    $(document).ready(function () {\r\n        $.ajax({\r\n            url: \"/config.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                onConfigLoaded(data.data);\r\n            }\r\n        });\r\n    });\r\n\r\n    function onConfigLoaded(data) {\r\n        $(\"#main\").show();\r\n        if (data.enableEthProxy) {\r\n            $(\"#tabEth\").show();\r\n            $(\"#labEth\").show();\r\n        }\r\n        if (data.enableEtcProxy) {\r\n            $(\"#tabEtc\").show();\r\n            $(\"#labEtc\").show();\r\n        }\r\n        if (data.enableBtcProxy) {\r\n            $(\"#tabBtc\").show();\r\n            $(\"#labBtc\").show();\r\n        }\r\n        if (data.enableRvnProxy) {\r\n            $(\"#tabRvn\").show();\r\n            $(\"#labRvn\").show();\r\n        }\r\n        if (data.enableErgoProxy) {\r\n            $(\"#tabErgo\").show();\r\n            $(\"#labErgo\").show();\r\n        }\r\n        if (data.enableCfxProxy) {\r\n            $(\"#tabCfx\").show();\r\n            $(\"#labCfx\").show();\r\n        }\r\n        var tableStr = \"\";\r\n        for (var key in configDesc) {\r\n            if (!(key in data)) {\r\n                continue;\r\n            }\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + configDesc[key] + \"</td>\";\r\n            tableStr += \"<td>\" + key + \"</td>\";\r\n            tableStr += \"<td>\" + (data[key] === true ? \"是\" : (data[key] === false ? \"否\" : data[key])) + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        $(\"#configTbody\").html(tableStr);\r\n    }\r\n\r\n    function onConfigClick() {\r\n        if (isInConfig) {\r\n            return;\r\n        }\r\n        isInConfig = true;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n    }\r\n\r\n    function onEthClick() {\r\n        if (isInEth) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = true;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEthInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEthInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onEtcClick() {\r\n        if (isInEtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = true;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onBtcClick() {\r\n        if (isInBtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = true;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadBtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadBtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onRvnClick() {\r\n        if (isInRvn) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = true;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadRvnInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadRvnInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onErgoClick() {\r\n        if (isInErgo) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = true;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadErgoInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadErgoInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onCfxClick() {\r\n        if (isInCfx) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = true;\r\n        $('#timer').timer(\"remove\");\r\n        loadCfxInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadCfxInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function loadEthInfo() {\r\n        $.ajax({\r\n            url: \"/eth.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEth) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEthLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadEtcInfo() {\r\n        $.ajax({\r\n            url: \"/etc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadBtcInfo() {\r\n        $.ajax({\r\n            url: \"/btc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInBtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onBtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadRvnInfo() {\r\n        $.ajax({\r\n            url: \"/rvn.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInRvn) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onRvnLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n    function loadErgoInfo() {\r\n        $.ajax({\r\n            url: \"/ergo.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInErgo) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onErgoLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadCfxInfo() {\r\n        $.ajax({\r\n            url: \"/cfx.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInCfx) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onCfxLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    var arrayCompare = function (x, y) {\r\n        if (x.connectTime < y.connectTime) {\r\n            return -1\r\n        }\r\n        if (x.connectTime > y.connectTime) {\r\n            return 1\r\n        }\r\n        return 0\r\n    }\r\n\r\n    function onEthLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ethTbody\").html(tableStr);\r\n    }\r\n\r\n    function onEtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#etcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onBtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#btcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onRvnLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#rvnTbody\").html(tableStr);\r\n    }\r\n\r\n    function onErgoLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ergoTbody\").html(tableStr);\r\n    }\r\n\r\n    function onCfxLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#cfxTbody\").html(tableStr);\r\n    }\r\n</script>\r\n\r\n</html>"
  },
  {
    "path": "windows/html/index.html",
    "content": "<!DOCTYPE html>\r\n\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>管理控制台</title>\r\n    <style>\r\n        /*\r\n        CSS for the main interaction\r\n       */\r\n        .tabset > input[type=\"radio\"] {\r\n            position: absolute;\r\n            left: -200vw;\r\n        }\r\n\r\n        .tabset .tab-panel {\r\n            display: none;\r\n        }\r\n\r\n        .tabset > input:first-child:checked ~ .tab-panels > .tab-panel:first-child,\r\n        .tabset > input:nth-child(3):checked ~ .tab-panels > .tab-panel:nth-child(2),\r\n        .tabset > input:nth-child(5):checked ~ .tab-panels > .tab-panel:nth-child(3),\r\n        .tabset > input:nth-child(7):checked ~ .tab-panels > .tab-panel:nth-child(4),\r\n        .tabset > input:nth-child(9):checked ~ .tab-panels > .tab-panel:nth-child(5),\r\n        .tabset > input:nth-child(11):checked ~ .tab-panels > .tab-panel:nth-child(6),\r\n        .tabset > input:nth-child(13):checked ~ .tab-panels > .tab-panel:nth-child(7),\r\n        .tabset > input:nth-child(15):checked ~ .tab-panels > .tab-panel:nth-child(8),\r\n        .tabset > input:nth-child(17):checked ~ .tab-panels > .tab-panel:nth-child(9),\r\n        .tabset > input:nth-child(19):checked ~ .tab-panels > .tab-panel:nth-child(10),\r\n        .tabset > input:nth-child(21):checked ~ .tab-panels > .tab-panel:nth-child(11) {\r\n            display: block;\r\n        }\r\n\r\n        /*\r\n        Styling\r\n       */\r\n        body {\r\n            font: 16px/1.5em \"Overpass\", \"Open Sans\", Helvetica, sans-serif;\r\n            color: #333;\r\n            font-weight: 300;\r\n        }\r\n\r\n        .tabset > label {\r\n            position: relative;\r\n            display: inline-block;\r\n            padding: 15px 15px 25px;\r\n            border: 1px solid transparent;\r\n            border-bottom: 0;\r\n            cursor: pointer;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .tabset > label::after {\r\n            content: \"\";\r\n            position: absolute;\r\n            left: 15px;\r\n            bottom: 10px;\r\n            width: 22px;\r\n            height: 4px;\r\n            background: #8d8d8d;\r\n        }\r\n\r\n        .tabset > label:hover,\r\n        .tabset > input:focus + label {\r\n            color: #06c;\r\n        }\r\n\r\n        .tabset > label:hover::after,\r\n        .tabset > input:focus + label::after,\r\n        .tabset > input:checked + label::after {\r\n            background: #06c;\r\n        }\r\n\r\n        .tabset > input:checked + label {\r\n            border-color: #ccc;\r\n            border-bottom: 1px solid #fff;\r\n            margin-bottom: -1px;\r\n        }\r\n\r\n        .tab-panel {\r\n            padding: 30px 0;\r\n            border-top: 1px solid #ccc;\r\n        }\r\n\r\n        body {\r\n            padding: 1px;\r\n        }\r\n\r\n        #logButton {\r\n            display: inline-flex;\r\n            margin-top: 0.5rem;\r\n            text-decoration: inherit;\r\n            --tw-text-opacity: 1;\r\n            padding-left: 1rem;\r\n            --tw-bg-opacity: 1;\r\n            background-color: rgba(37, 99, 235, var(--tw-bg-opacity));\r\n            align-items: center;\r\n            padding-right: 1rem;\r\n            color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n            padding-top: 0.5rem;\r\n            padding-bottom: 0.5rem;\r\n            letter-spacing: -.05em;\r\n            font-weight: 600;\r\n            font-size: 1.125rem;\r\n            line-height: 1.75rem;\r\n            position: absolute;\r\n            right: 0.6rem;\r\n        }\r\n    </style>\r\n\r\n    <style>\r\n        /* Table Styles */\r\n\r\n        .table-wrapper {\r\n            margin: 10px 70px 70px;\r\n            box-shadow: 0px 35px 50px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .fl-table {\r\n            border-radius: 5px;\r\n            font-size: 16px;\r\n            font-weight: normal;\r\n            border: none;\r\n            border-collapse: collapse;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            white-space: nowrap;\r\n            background-color: white;\r\n        }\r\n\r\n        .fl-table td,\r\n        .fl-table th {\r\n            text-align: center;\r\n            padding: 8px;\r\n        }\r\n\r\n        .fl-table td {\r\n            border-right: 1px solid #f8f8f8;\r\n            font-size: 14px;\r\n        }\r\n\r\n\r\n        .fl-table thead th {\r\n            color: #ffffff;\r\n            background: #4FC3A1;\r\n        }\r\n\r\n\r\n        .fl-table thead th:nth-child(odd) {\r\n            color: #ffffff;\r\n            background: #324960;\r\n        }\r\n\r\n        .fl-table tr:nth-child(even) {\r\n            background: #F8F8F8;\r\n        }\r\n\r\n        /* Responsive */\r\n\r\n        @media (max-width: 767px) {\r\n            .fl-table {\r\n                display: block;\r\n                width: 100%;\r\n            }\r\n\r\n            .table-wrapper:before {\r\n                content: \"Scroll horizontally >\";\r\n                display: block;\r\n                text-align: right;\r\n                font-size: 11px;\r\n                color: white;\r\n                padding: 0 0 10px;\r\n            }\r\n\r\n            .fl-table thead,\r\n            .fl-table tbody,\r\n            .fl-table thead th {\r\n                display: block;\r\n            }\r\n\r\n            .fl-table thead th:last-child {\r\n                border-bottom: none;\r\n            }\r\n\r\n            .fl-table thead {\r\n                float: left;\r\n            }\r\n\r\n            .fl-table tbody {\r\n                width: auto;\r\n                position: relative;\r\n                overflow-x: auto;\r\n            }\r\n\r\n            .fl-table td,\r\n            .fl-table th {\r\n                padding: 20px .625em .625em .625em;\r\n                height: 60px;\r\n                vertical-align: middle;\r\n                box-sizing: border-box;\r\n                overflow-x: hidden;\r\n                overflow-y: auto;\r\n                width: 120px;\r\n                font-size: 13px;\r\n                text-overflow: ellipsis;\r\n            }\r\n\r\n            .fl-table thead th {\r\n                text-align: left;\r\n                border-bottom: 1px solid #f7f7f9;\r\n            }\r\n\r\n            .fl-table tbody tr {\r\n                display: table-cell;\r\n            }\r\n\r\n            .fl-table tbody tr:nth-child(odd) {\r\n                background: none;\r\n            }\r\n\r\n            .fl-table tr:nth-child(even) {\r\n                background: transparent;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(odd) {\r\n                background: #F8F8F8;\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tr td:nth-child(even) {\r\n                border-right: 1px solid #E6E4E4;\r\n            }\r\n\r\n            .fl-table tbody td {\r\n                display: block;\r\n                text-align: center;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n<div id=\"main\" class=\"tabset\" style=\"display: none;\">\r\n\r\n    <!-- Tab 0 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabConfig\" aria-controls=\"secConfig\" onclick=\"onConfigClick()\" checked>\r\n    <label for=\"tabConfig\">中转配置</label>\r\n    <!-- Tab 1 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEth\" aria-controls=\"secEth\" onclick=\"onEthClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEth\" id=\"labEth\" style=\"display: none;\">ETHW/ETF信息</label>\r\n    <!-- Tab 2 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabEtc\" aria-controls=\"secEtc\" onclick=\"onEtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabEtc\" id=\"labEtc\" style=\"display: none;\">ETC信息</label>\r\n    <!-- Tab 3 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabBtc\" aria-controls=\"secBtc\" onclick=\"onBtcClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabBtc\" id=\"labBtc\" style=\"display: none;\">BTC信息</label>\r\n    <!-- Tab 4 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabRvn\" aria-controls=\"secRvn\" onclick=\"onRvnClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabRvn\" id=\"labRvn\" style=\"display: none;\">RVN信息</label>\r\n    <!-- Tab 5 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabErgo\" aria-controls=\"secErgo\" onclick=\"onErgoClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabErgo\" id=\"labErgo\" style=\"display: none;\">ERGO信息</label>\r\n    <!-- Tab 6 -->\r\n    <input type=\"radio\" name=\"tabset\" id=\"tabCfx\" aria-controls=\"secCfx\" onclick=\"onCfxClick()\"\r\n           style=\"display: none;\">\r\n    <label for=\"tabCfx\" id=\"labCfx\" style=\"display: none;\">CFX信息</label>\r\n\r\n    <a id=\"logButton\" href=\"/log.html\" target=\"_blank\" style=\"display: none;\">\r\n        查看原始日志\r\n    </a>\r\n\r\n    <div class=\"tab-panels\">\r\n        <section id=\"secConfig\" class=\"tab-panel\">\r\n            <div id=\"tableConfig\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>配置项解释</th>\r\n                        <th>配置项名称</th>\r\n                        <th>配置项内容</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"configTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEth\" class=\"tab-panel\">\r\n            <div id=\"tableEth\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ethTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secEtc\" class=\"tab-panel\">\r\n            <div id=\"tableEtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>单机算力</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"etcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secBtc\" class=\"tab-panel\">\r\n            <div id=\"tableBtc\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"btcTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secRvn\" class=\"tab-panel\">\r\n            <div id=\"tableRvn\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"rvnTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secErgo\" class=\"tab-panel\">\r\n            <div id=\"tableErgo\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"ergoTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n        <section id=\"secCfx\" class=\"tab-panel\">\r\n            <div id=\"tableCfx\">\r\n                <table class=\"fl-table\">\r\n                    <thead>\r\n                    <tr>\r\n                        <th>序号</th>\r\n                        <th>在线时长</th>\r\n                        <th>客户端IP</th>\r\n                        <th>连接端口</th>\r\n                        <th>钱包名</th>\r\n                        <th>矿工名</th>\r\n                        <th>总提交</th>\r\n                        <th>总抽水</th>\r\n                    </tr>\r\n                    </thead>\r\n                    <tbody id=\"cfxTbody\">\r\n                    <tbody>\r\n                </table>\r\n            </div>\r\n        </section>\r\n    </div>\r\n\r\n</div>\r\n</div>\r\n<div id=\"timer\" style=\"display: none;\"></div>\r\n</body>\r\n<script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n<script>!function(a){function b(a){var b;return a=a||0,b=Math.floor(a/60),{days:a>=n.DAYINSECONDS?Math.floor(a/n.DAYINSECONDS):0,hours:a>=3600?Math.floor(a%n.DAYINSECONDS/3600):0,totalMinutes:b,minutes:a>=60?Math.floor(a%3600/60):b,seconds:a%60,totalSeconds:a}}function c(a){return((a=parseInt(a,10))<10&&\"0\")+a}function d(){return{seconds:0,editable:!1,duration:null,callback:function(){console.log(\"Time up!\")},repeat:!1,countdown:!1,format:null,updateFrequency:500}}function e(){return Math.round((Date.now?Date.now():(new Date).getTime())/1e3)}function f(a){var d=b(a);if(d.days)return d.days+\":\"+c(d.hours)+\":\"+c(d.minutes)+\":\"+c(d.seconds);if(d.hours)return d.hours+\":\"+c(d.minutes)+\":\"+c(d.seconds);return d.minutes?d.minutes+\":\"+c(d.seconds)+\" min\":d.seconds+\" sec\"}function g(a,d){for(var e=b(a),f=[{identifier:\"%d\",value:e.days},{identifier:\"%h\",value:e.hours},{identifier:\"%m\",value:e.minutes},{identifier:\"%s\",value:e.seconds},{identifier:\"%g\",value:e.totalMinutes},{identifier:\"%t\",value:e.totalSeconds},{identifier:\"%D\",value:c(e.days)},{identifier:\"%H\",value:c(e.hours)},{identifier:\"%M\",value:c(e.minutes)},{identifier:\"%S\",value:c(e.seconds)},{identifier:\"%G\",value:c(e.totalMinutes)},{identifier:\"%T\",value:c(e.totalSeconds)}],g=0;g<f.length;g++)d=d.replace(f[g].identifier,f[g].value);return d}function h(a){if(!isNaN(Number(a)))return a;a=a.toLowerCase();var b=a.match(/\\d+d/),c=a.match(/\\d+h/),d=a.match(/\\d+m/),e=a.match(/\\d+s/);if(!(b||c||d||e))throw new Error(\"Invalid string passed in durationTimeToSeconds!\");var f=0;return b&&(f+=Number(b[0].replace(\"d\",\"\"))*n.DAYINSECONDS),c&&(f+=3600*Number(c[0].replace(\"h\",\"\"))),d&&(f+=60*Number(d[0].replace(\"m\",\"\"))),e&&(f+=Number(e[0].replace(\"s\",\"\"))),f}function i(a){var b,c;return a.indexOf(\"sec\")>0?c=Number(a.replace(/\\ssec/g,\"\")):a.indexOf(\"min\")>0?(a=a.replace(/\\smin/g,\"\"),b=a.split(\":\"),c=Number(60*b[0])+Number(b[1])):a.match(/\\d{1,2}:\\d{2}:\\d{2}:\\d{2}/)?(b=a.split(\":\"),c=Number(b[0]*n.DAYINSECONDS)+Number(3600*b[1])+Number(60*b[2])+Number(b[3])):a.match(/\\d{1,2}:\\d{2}:\\d{2}/)&&(b=a.split(\":\"),c=Number(3600*b[0])+Number(60*b[1])+Number(b[2])),c}function j(b,c){b.state=c,a(b.element).data(\"state\",c)}function k(b){a(b.element).on(\"focus\",function(){b.pause()}),a(b.element).on(\"blur\",function(){b.totalSeconds=i(a(b.element)[b.html]()),b.resume()})}function l(b){if(b.totalSeconds=e()-b.startTime,b.config.countdown)return b.totalSeconds=b.config.duration-b.totalSeconds,0===b.totalSeconds&&(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.callback(),a(b.element).data(\"seconds\")),void b.render();b.render(),b.config.duration&&b.totalSeconds>0&&b.totalSeconds%b.config.duration==0&&(b.config.callback&&b.config.callback(),b.config.repeat||(clearInterval(b.intervalId),j(b,n.TIMER_STOPPED),b.config.duration=null))}function m(b,c){if(this.element=b,this.originalConfig=a.extend({},c),this.totalSeconds=0,this.intervalId=null,this.html=\"html\",\"INPUT\"!==b.tagName&&\"TEXTAREA\"!==b.tagName||(this.html=\"val\"),this.config=o.getDefaultConfig(),c.duration&&(c.duration=o.durationTimeToSeconds(c.duration)),\"string\"!=typeof c&&(this.config=a.extend(this.config,c)),this.config.seconds&&(this.totalSeconds=this.config.seconds),this.config.editable&&o.makeEditable(this),this.startTime=o.unixSeconds()-this.totalSeconds,this.config.duration&&this.config.repeat&&this.config.updateFrequency<1e3&&(this.config.updateFrequency=1e3),this.config.countdown){if(!this.config.duration)throw new Error(\"Countdown option set without duration!\");if(this.config.editable)throw new Error(\"Cannot set editable on a countdown timer!\");this.config.startTime=o.unixSeconds()-this.config.duration,this.totalSeconds=this.config.duration}}var n={PLUGIN_NAME:\"timer\",TIMER_RUNNING:\"running\",TIMER_PAUSED:\"paused\",TIMER_REMOVED:\"removed\",DAYINSECONDS:86400},o={getDefaultConfig:d,unixSeconds:e,secondsToPrettyTime:f,secondsToFormattedTime:g,durationTimeToSeconds:h,prettyTimeToSeconds:i,setState:j,makeEditable:k,intervalHandler:l};m.prototype.start=function(){this.state!==n.TIMER_RUNNING&&(o.setState(this,n.TIMER_RUNNING),this.render(),this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.pause=function(){this.state===n.TIMER_RUNNING&&(o.setState(this,n.TIMER_PAUSED),clearInterval(this.intervalId))},m.prototype.resume=function(){this.state===n.TIMER_PAUSED&&(o.setState(this,n.TIMER_RUNNING),this.config.countdown?this.startTime=o.unixSeconds()-this.config.duration+this.totalSeconds:this.startTime=o.unixSeconds()-this.totalSeconds,this.intervalId=setInterval(o.intervalHandler.bind(null,this),this.config.updateFrequency))},m.prototype.remove=function(){clearInterval(this.intervalId),o.setState(this,n.TIMER_REMOVED),a(this.element).data(n.PLUGIN_NAME,null),a(this.element).data(\"seconds\",null)},m.prototype.reset=function(){var b=this.originalConfig;this.remove(),a(this.element).timer(b)},m.prototype.render=function(){this.config.format?a(this.element)[this.html](o.secondsToFormattedTime(this.totalSeconds,this.config.format)):a(this.element)[this.html](o.secondsToPrettyTime(this.totalSeconds)),a(this.element).data(\"seconds\",this.totalSeconds)},a.fn.timer=function(b){return b=b||\"start\",this.each(function(){a.data(this,n.PLUGIN_NAME)instanceof m||a.data(this,n.PLUGIN_NAME,new m(this,b));var c=a.data(this,n.PLUGIN_NAME);\"string\"==typeof b?\"function\"==typeof c[b]&&c[b]():c.start()})}}(jQuery);</script>\r\n<script>\r\n    function calcTimeDiff(pastTime) {\r\n        var now = new Date().getTime();\r\n        if (now <= pastTime) {\r\n            return \"刚刚\";\r\n        }\r\n        var nowSecond = Math.floor(now / 1000);\r\n        var pastSecond = Math.floor(pastTime / 1000);\r\n        var diff = nowSecond - pastSecond;\r\n        if (diff < 60) {\r\n            return diff + \"秒\";\r\n        }\r\n        if (diff < 3600) {\r\n            return Math.floor(diff / 60) + \"分\" + (diff % 60) + \"秒\"\r\n        }\r\n        if (diff < 86400) {\r\n            return Math.floor(diff / 3600) + \"时\" + Math.floor((diff % 3600) / 60) + \"分\" + ((diff % 3600) % 60) + \"秒\"\r\n        }\r\n        return Math.floor(diff / 86400) + \"天\" + Math.floor((diff % 86400) / 3600) + \"时\" + Math.floor(((diff % 86400) % 3600) / 60) + \"分\" + (((diff % 86400) % 3600) % 60) + \"秒\"\r\n    }\r\n\r\n    var isInConfig = true, isInEth = false, isInEtc = false, isInBtc = false, isInRvn = false, isInErgo = false, isInCfx = false;\r\n    var configDesc = {\r\n        \"enableLog\": \"启用日志\",\r\n\r\n        \"ethPoolAddress\": \"ETHW/ETF矿池地址\",\r\n        \"ethPoolSslMode\": \"ETHW/ETF矿池端口是否SSL模式\",\r\n        \"ethPoolPort\": \"ETHW/ETF矿池端口\",\r\n        \"ethTcpPort\": \"ETHW/ETF中转TCP端口\",\r\n        \"ethTlsPort\": \"ETHW/ETF中转SSL端口\",\r\n        \"ethUser\": \"ETHW/ETF第一个抽水用户名\",\r\n        \"ethSecondUser\": \"ETHW/ETF第二个抽水用户名\",\r\n        \"ethWorker\": \"ETHW/ETF抽水矿工名\",\r\n        \"ethTaxPercent\": \"ETHW/ETF第一个账户抽水比例(%)\",\r\n        \"ethSecondTaxPercent\": \"ETHW/ETF第二个账户抽水比例(%)\",\r\n        \"ethDevPercent\": \"ETHW/ETF开发费(%)\",\r\n        \"enableEthProxy\": \"是否启用ETHW/ETF抽水中转服务\",\r\n        \"enableEthDonatePool\": \"是否强制归集ETHW/ETF抽水到其他矿池\",\r\n        \"ethDonatePoolAddress\": \"ETHW/ETF抽水归集矿池地址\",\r\n        \"ethDonatePoolSslMode\": \"ETHW/ETF抽水归集矿池端口是否SSL模式\",\r\n        \"ethDonatePoolPort\": \"ETHW/ETF抽水归集矿池端口\",\r\n\r\n        \"etcPoolAddress\": \"ETC矿池地址\",\r\n        \"etcPoolSslMode\": \"ETC矿池端口是否SSL模式\",\r\n        \"etcPoolPort\": \"ETC矿池端口\",\r\n        \"etcTcpPort\": \"ETC中转TCP端口\",\r\n        \"etcTlsPort\": \"ETC中转SSL端口\",\r\n        \"etcUser\": \"ETC第一个抽水用户名\",\r\n        \"etcSecondUser\": \"ETC第二个抽水用户名\",\r\n        \"etcWorker\": \"ETC抽水矿工名\",\r\n        \"etcTaxPercent\": \"ETC第一个账户抽水比例(%)\",\r\n        \"etcSecondTaxPercent\": \"ETC第二个账户抽水比例(%)\",\r\n        \"etcDevPercent\": \"ETC开发费(%)\",\r\n        \"enableEtcProxy\": \"是否启用ETC抽水中转服务\",\r\n        \"enableEtcDonatePool\": \"是否强制归集ETC抽水到其他矿池\",\r\n        \"etcDonatePoolAddress\": \"ETC抽水归集矿池地址\",\r\n        \"etcDonatePoolSslMode\": \"ETC抽水归集矿池端口是否SSL模式\",\r\n        \"etcDonatePoolPort\": \"ETC抽水归集矿池端口\",\r\n\r\n        \"btcPoolAddress\": \"BTC矿池地址\",\r\n        \"btcPoolSslMode\": \"BTC矿池端口是否SSL模式\",\r\n        \"btcPoolPort\": \"BTC矿池端口\",\r\n        \"btcTcpPort\": \"BTC中转TCP端口\",\r\n        \"btcTlsPort\": \"BTC中转SSL端口\",\r\n        \"btcUser\": \"BTC第一个抽水用户名\",\r\n        \"btcSecondUser\": \"BTC第二个抽水用户名\",\r\n        \"btcWorker\": \"BTC抽水矿工名\",\r\n        \"btcTaxPercent\": \"BTC第一个账户抽水比例(%)\",\r\n        \"btcSecondTaxPercent\": \"BTC第二个账户抽水比例(%)\",\r\n        \"btcDevPercent\": \"BTC开发费(%)\",\r\n        \"enableBtcProxy\": \"是否启用BTC抽水中转服务\",\r\n\r\n        \"rvnPoolAddress\": \"RVN矿池地址\",\r\n        \"rvnPoolSslMode\": \"RVN矿池端口是否SSL模式\",\r\n        \"rvnPoolPort\": \"RVN矿池端口\",\r\n        \"rvnTcpPort\": \"RVN中转TCP端口\",\r\n        \"rvnTlsPort\": \"RVN中转SSL端口\",\r\n        \"rvnUser\": \"RVN第一个抽水用户名\",\r\n        \"rvnSecondUser\": \"RVN第二个抽水用户名\",\r\n        \"rvnWorker\": \"RVN抽水矿工名\",\r\n        \"rvnTaxPercent\": \"RVN第一个账户抽水比例(%)\",\r\n        \"rvnSecondTaxPercent\": \"RVN第二个账户抽水比例(%)\",\r\n        \"rvnDevPercent\": \"RVN开发费(%)\",\r\n        \"enableRvnProxy\": \"是否启用RVN抽水中转服务\",\r\n\r\n        \"ergoPoolAddress\": \"ERGO矿池地址\",\r\n        \"ergoPoolSslMode\": \"ERGO矿池端口是否SSL模式\",\r\n        \"ergoPoolPort\": \"ERGO矿池端口\",\r\n        \"ergoTcpPort\": \"ERGO中转TCP端口\",\r\n        \"ergoTlsPort\": \"ERGO中转SSL端口\",\r\n        \"ergoUser\": \"ERGO第一个抽水用户名\",\r\n        \"ergoSecondUser\": \"ERGO第二个抽水用户名\",\r\n        \"ergoWorker\": \"ERGO抽水矿工名\",\r\n        \"ergoTaxPercent\": \"ERGO第一个账户抽水比例(%)\",\r\n        \"ergoSecondTaxPercent\": \"ERGO第二个账户抽水比例(%)\",\r\n        \"ergoDevPercent\": \"ERGO开发费(%)\",\r\n        \"enableErgoProxy\": \"是否启用ERGO抽水中转服务\",\r\n\r\n        \"cfxPoolAddress\": \"CFX矿池地址\",\r\n        \"cfxPoolSslMode\": \"CFX矿池端口是否SSL模式\",\r\n        \"cfxPoolPort\": \"CFX矿池端口\",\r\n        \"cfxTcpPort\": \"CFX中转TCP端口\",\r\n        \"cfxTlsPort\": \"CFX中转SSL端口\",\r\n        \"cfxUser\": \"CFX第一个抽水用户名\",\r\n        \"cfxSecondUser\": \"CFX第二个抽水用户名\",\r\n        \"cfxWorker\": \"CFX抽水矿工名\",\r\n        \"cfxTaxPercent\": \"CFX第一个账户抽水比例(%)\",\r\n        \"cfxSecondTaxPercent\": \"CFX第二个账户抽水比例(%)\",\r\n        \"cfxDevPercent\": \"CFX开发费(%)\",\r\n        \"enableCfxProxy\": \"是否启用CFX抽水中转服务\",\r\n\r\n        \"enableHttpLog\": \"是否启用网页管理控制台\",\r\n        \"httpLogPort\": \"网页管理控制台端口\",\r\n\r\n        \"ccVersion\": \"转发工具版本\",\r\n    }\r\n    $(document).ready(function () {\r\n        $.ajax({\r\n            url: \"/config.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                onConfigLoaded(data.data);\r\n            }\r\n        });\r\n    });\r\n\r\n    function onConfigLoaded(data) {\r\n        $(\"#main\").show();\r\n        if (data.enableLog) {\r\n            $(\"#logButton\").show();\r\n        }\r\n        if (data.enableEthProxy) {\r\n            $(\"#tabEth\").show();\r\n            $(\"#labEth\").show();\r\n        }\r\n        if (data.enableEtcProxy) {\r\n            $(\"#tabEtc\").show();\r\n            $(\"#labEtc\").show();\r\n        }\r\n        if (data.enableBtcProxy) {\r\n            $(\"#tabBtc\").show();\r\n            $(\"#labBtc\").show();\r\n        }\r\n        if (data.enableRvnProxy) {\r\n            $(\"#tabRvn\").show();\r\n            $(\"#labRvn\").show();\r\n        }\r\n        if (data.enableErgoProxy) {\r\n            $(\"#tabErgo\").show();\r\n            $(\"#labErgo\").show();\r\n        }\r\n        if (data.enableCfxProxy) {\r\n            $(\"#tabCfx\").show();\r\n            $(\"#labCfx\").show();\r\n        }\r\n        var tableStr = \"\";\r\n        for (var key in configDesc) {\r\n            if (!(key in data)) {\r\n                continue;\r\n            }\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + configDesc[key] + \"</td>\";\r\n            tableStr += \"<td>\" + key + \"</td>\";\r\n            if (key.indexOf('DevPercent') !== -1) {\r\n                tableStr += \"<td>\" + parseFloat(data[key].toFixed(2)) + \"</td>\";\r\n            } else {\r\n                tableStr += \"<td>\" + (data[key] === true ? \"是\" : (data[key] === false ? \"否\" : data[key])) + \"</td>\";\r\n            }\r\n            tableStr += \"</tr>\";\r\n        }\r\n        $(\"#configTbody\").html(tableStr);\r\n    }\r\n\r\n    function onConfigClick() {\r\n        if (isInConfig) {\r\n            return;\r\n        }\r\n        isInConfig = true;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n    }\r\n\r\n    function onEthClick() {\r\n        if (isInEth) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = true;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEthInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEthInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onEtcClick() {\r\n        if (isInEtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = true;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadEtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadEtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onBtcClick() {\r\n        if (isInBtc) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = true;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadBtcInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadBtcInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onRvnClick() {\r\n        if (isInRvn) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = true;\r\n        isInErgo = false;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadRvnInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadRvnInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onErgoClick() {\r\n        if (isInErgo) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = true;\r\n        isInCfx = false;\r\n        $('#timer').timer(\"remove\");\r\n        loadErgoInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadErgoInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function onCfxClick() {\r\n        if (isInCfx) {\r\n            return;\r\n        }\r\n        isInConfig = false;\r\n        isInEth = false;\r\n        isInEtc = false;\r\n        isInBtc = false;\r\n        isInRvn = false;\r\n        isInErgo = false;\r\n        isInCfx = true;\r\n        $('#timer').timer(\"remove\");\r\n        loadCfxInfo();\r\n        $('#timer').timer({\r\n            duration: '10s',\r\n            callback: function () {\r\n                loadCfxInfo();\r\n            },\r\n            repeat: true\r\n        });\r\n    }\r\n\r\n    function loadEthInfo() {\r\n        $.ajax({\r\n            url: \"/eth.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEth) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEthLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadEtcInfo() {\r\n        $.ajax({\r\n            url: \"/etc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInEtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onEtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadBtcInfo() {\r\n        $.ajax({\r\n            url: \"/btc.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInBtc) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onBtcLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n    function loadRvnInfo() {\r\n        $.ajax({\r\n            url: \"/rvn.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInRvn) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onRvnLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadErgoInfo() {\r\n        $.ajax({\r\n            url: \"/ergo.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInErgo) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onErgoLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function loadCfxInfo() {\r\n        $.ajax({\r\n            url: \"/cfx.json\",\r\n            type: \"POST\",\r\n            dataType: \"json\",\r\n            success: function (data) {\r\n                if (!isInCfx) {\r\n                    return;\r\n                }\r\n                if (data.code == 200) {\r\n                    onCfxLoaded(data.data);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    var arrayCompare = function (x, y) {\r\n        if (x.connectTime < y.connectTime) {\r\n            return -1\r\n        }\r\n        if (x.connectTime > y.connectTime) {\r\n            return 1\r\n        }\r\n        return 0\r\n    }\r\n\r\n    function onEthLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ethTbody\").html(tableStr);\r\n    }\r\n\r\n    function onEtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总算力：\" + data.base.totalHashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].hashRate.toFixed(2) + \"M\" + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#etcTbody\").html(tableStr);\r\n    }\r\n\r\n    function onBtcLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#btcTbody\").html(tableStr);\r\n    }\r\n\r\n\r\n    function onRvnLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#rvnTbody\").html(tableStr);\r\n    }\r\n\r\n    function onErgoLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#ergoTbody\").html(tableStr);\r\n    }\r\n\r\n\r\n    function onCfxLoaded(data) {\r\n        data.clients.sort(arrayCompare)\r\n        var tableStr = \"\";\r\n        {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + \"运行统计\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"服务器运行：\" + calcTimeDiff(data.base.applicationStartTime) + \"</td>\";\r\n            tableStr += \"<td>\" + \"总连接矿机：\" + data.base.totalClients + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"-\" + \"</td>\";\r\n            tableStr += \"<td>\" + \"总提交区块：\" + data.base.totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"总抽水：\" + (data.base.donateSubmit + data.base.donateSecondSubmit + data.base.devSubmit) + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户1：\" + data.base.donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.base.donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.base.devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n        }\r\n        var icount = 1;\r\n        for (var key in data.clients) {\r\n            tableStr += \"<tr>\";\r\n            tableStr += \"<td>\" + icount + \"</td>\";\r\n            tableStr += \"<td>\" + calcTimeDiff(data.clients[key].connectTime) + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].ip + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].port + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].walletName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].workerName + \"</td>\";\r\n            tableStr += \"<td>\" + data.clients[key].totalSubmit + \"</td>\";\r\n            tableStr += \"<td>\" + \"用户1：\" + data.clients[key].donateSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;用户2：\" + data.clients[key].donateSecondSubmit + \"&nbsp;&nbsp;/&nbsp;&nbsp;开发：\" + data.clients[key].devSubmit + \"</td>\";\r\n            tableStr += \"</tr>\";\r\n            icount++;\r\n        }\r\n        $(\"#cfxTbody\").html(tableStr);\r\n    }\r\n</script>\r\n\r\n</html>"
  },
  {
    "path": "windows/html/login.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>登录</title>\r\n    <style>\r\n        * {\r\n            margin: 0;\r\n            padding: 0;\r\n        }\r\n\r\n        .cavs {\r\n            z-index: 1;\r\n            position: fixed;\r\n            width: 95%;\r\n            margin-left: 20px;\r\n            margin-right: 20px;\r\n        }\r\n\r\n        html,\r\n        body {\r\n            width: 100%;\r\n            height: 100%;\r\n\r\n            background-image: -webkit-linear-gradient(top, #02164f, #000);\r\n            background-image: -moz-linear-gradient(top, #02164f, #000);\r\n            background-image: -ms-linear-gradient(top, #02164f, #000);\r\n            background-image: -o-linear-gradient(top, #02164f, #000);\r\n            background-image: linear-gradient(to bottom, #02164f, #000);\r\n            background-color: #1A1A1A;\r\n        }\r\n\r\n\r\n\r\n        .loginmain {\r\n            background-color: hsla(228, 61%, 18%, 0.50);\r\n            width: 540px;\r\n            height: 180px;\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            margin: auto;\r\n            padding: 100px 40px 40px 40px;\r\n            box-shadow: -15px 15px 15px rgba(6, 17, 47, 0.7);\r\n            z-index: 99999;\r\n            border-radius: 3px;\r\n            box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            -webkit-box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            -moz-box-shadow: 10px 10px 31px -5px rgba(0, 0, 0, 0.7);\r\n            border: 1px solid hsla(0, 0%, 100%, .3);\r\n        }\r\n\r\n        .login-title {\r\n            color: #fff;\r\n            font-weight: 600;\r\n            height: 60px;\r\n            font-size: 20px;\r\n            text-align: center;\r\n            margin-top: -60px;\r\n        }\r\n\r\n        .login-con {\r\n            height: 208px;\r\n            position: absolute;\r\n            left: 0;\r\n            width: 60%;\r\n            margin: 0 20%;\r\n        }\r\n\r\n        .login-user {\r\n            position: relative;\r\n            background: #ECEEF0;\r\n            height: 53px;\r\n            line-height: 53px;\r\n            margin-bottom: 15px;\r\n        }\r\n\r\n        .icon {\r\n            position: absolute;\r\n            z-index: 1;\r\n            left: 36px;\r\n            top: 3px;\r\n            opacity: 1;\r\n            color: #000;\r\n\r\n        }\r\n\r\n        .icon img {\r\n            width: 18px;\r\n            height: 18px;\r\n        }\r\n\r\n        .login-con input {\r\n            width: calc(100% - 130px);\r\n            margin-top: -2px;\r\n            background: rgba(57, 61, 82, 0);\r\n            left: 0;\r\n            padding: 10px 65px;\r\n            border-top: 2px solid rgba(57, 61, 82, 0);\r\n            border-bottom: 2px solid rgba(57, 61, 82, 0);\r\n            border-right: none;\r\n            border-left: none;\r\n            outline: none;\r\n            font-family: 'Gudea', sans-serif;\r\n            box-shadow: none;\r\n            color: #61BFFF !important;\r\n        }\r\n\r\n        .login-pwd,\r\n        .login-yan {\r\n            position: relative;\r\n            background: #ECEEF0;\r\n            height: 53px;\r\n            line-height: 53px;\r\n            margin-bottom: 15px;\r\n        }\r\n\r\n        /*\r\n    .login-pwd .icon{\r\n        position: absolute;\r\n        z-index: 1;\r\n        left: 36px;\r\n        top: 8px;\r\n        opacity: .5;\r\n    }*/\r\n        .login-btn {\r\n            margin: 0 auto;\r\n            position: relative;\r\n        }\r\n\r\n        .login-btn input {\r\n            border-radius: 3px;\r\n            background: #3277fcb8;\r\n            border: 2px solid #4FA1D9;\r\n            color: white !important;\r\n            text-transform: uppercase;\r\n            font-size: 11px;\r\n            cursor: pointer;\r\n            position: absolute;\r\n            top: 30px;\r\n            left: 0;\r\n            right: 0;\r\n            margin: auto;\r\n            width: 100%;\r\n            height: 53px;\r\n            -webkit-transition-duration: .2s;\r\n            transition-duration: .2s;\r\n        }\r\n\r\n        .login-btn input:hover {\r\n            color: white !important;\r\n            background: #4FA1D9;\r\n            cursor: pointer;\r\n            -webkit-transition-property: background, color;\r\n            transition-property: background, color;\r\n            -webkit-transition-duration: .2s;\r\n            transition-duration: .2s;\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n    <canvas class=\"cavs\" width=\"2048\" height=\"1002\"></canvas>\r\n\r\n    <div class=\"loginmain\">\r\n        <div class=\"login-title\">\r\n            <span>管理员登录</span>\r\n        </div>\r\n        <form method=\"post\" name=\"login\" action=\"login.html\" onsubmit=\"return check()\">\r\n            <div class=\"login-con\">\r\n                <div class=\"login-pwd\">\r\n                    <div class=\"icon\">\r\n                        <img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABgUExURQAAAJqampmZmZqampmZmZubm5mZmZqamqysrJqampubm5mZmaGhoZqampycnJqampubm5qampqampqampqamp2dnZqampqampqamqGhoZqampqampqampqampqampmZmbSSAhEAAAAfdFJOUwB182y3RYf8A/4xhRSGJXs8zY7UpR6WV18L68HiTLCg7Y7vAAABR0lEQVRIx+2W2ZKDIBBFFVzQEDfco+H//zKAqZSC0Iw1y8vcN2/3UaobGoPgbzWtfb2kM3viwhfpGsQ/eqw+CAl3iMI6kKEPrgsNEMNUHisrSmgV1uopHd1rU1ks/hjVhsUu6CYzErJ/jbIWameKVCSEmokl1dihRISfhtvKYkxWaBZhs52d/L61glR25cSPhH+zQbkI9id+I/zWBsUieD/xS+FH/5AD6lrE3cpYSLQWQYjScYuRhXtp0PcCz9zi+n6RJUiAQx3q5fCB8K9BIwyNNarxwRlA6M6NyQBCasKIJuQ7b4Wg8d1MrOU4IfyG9uOsApeXbVD+FWgbtcdC5HDJe2MCeUClMeuKK1B3BaI/BI1aa8WVD0OkRdHxeiFXjkZwCUJXoPkMIm4ZUOUx8xZ9eRPyG5atee/D0q4HPKewmPef3DfpBUsaT9x4ryHkAAAAAElFTkSuQmCC\"\r\n                            alt=\"\">\r\n                    </div>\r\n                    <input id=\"password\" type=\"password\" name=\"password\" placeholder=\"密码\" autocomplete=\"off\" value=\"\">\r\n                </div>\r\n                <div class=\"login-btn\">\r\n                    <input type=\"submit\" value=\"登录\">\r\n                </div>\r\n            </div>\r\n        </form>\r\n\r\n    </div>\r\n\r\n    <script>\r\n        function check() { \r\n            var password = $(\"#password\").val();\r\n            if (  password == \"\") {\r\n                alert(\"密码不能为空\")\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n    </script>\r\n\r\n\r\n    <script src=\"https://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js\"></script>\r\n    <script>try {\r\n            if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {\r\n\r\n            } else {\r\n                $(function () {\r\n                    var canvas = document.querySelector('canvas'),\r\n                        ctx = canvas.getContext('2d')\r\n                    canvas.width = $(window).width();\r\n                    canvas.height = $(window).height();\r\n                    ctx.lineWidth = .3;\r\n                    ctx.strokeStyle = (new Color(150)).style;\r\n\r\n                    var mousePosition = {\r\n                        x: 30 * canvas.width / 100,\r\n                        y: 30 * canvas.height / 100\r\n                    };\r\n\r\n                    var dots = {\r\n                        nb: 250,\r\n                        distance: 100,\r\n                        d_radius: 150,\r\n                        array: []\r\n                    };\r\n\r\n                    function colorValue(min) {\r\n                        return Math.floor(Math.random() * 255 + min);\r\n                    }\r\n\r\n                    function createColorStyle(r, g, b) {\r\n                        return 'rgba(' + r + ',' + g + ',' + b + ', 0.8)';\r\n                    }\r\n\r\n                    function mixComponents(comp1, weight1, comp2, weight2) {\r\n                        return (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2);\r\n                    }\r\n\r\n                    function averageColorStyles(dot1, dot2) {\r\n                        var color1 = dot1.color,\r\n                            color2 = dot2.color;\r\n\r\n                        var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius),\r\n                            g = mixComponents(color1.g, dot1.radius, color2.g, dot2.radius),\r\n                            b = mixComponents(color1.b, dot1.radius, color2.b, dot2.radius);\r\n                        return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b));\r\n                    }\r\n\r\n                    function Color(min) {\r\n                        min = min || 0;\r\n                        this.r = colorValue(min);\r\n                        this.g = colorValue(min);\r\n                        this.b = colorValue(min);\r\n                        this.style = createColorStyle(this.r, this.g, this.b);\r\n                    }\r\n\r\n                    function Dot() {\r\n                        this.x = Math.random() * canvas.width;\r\n                        this.y = Math.random() * canvas.height;\r\n\r\n                        this.vx = -.5 + Math.random();\r\n                        this.vy = -.5 + Math.random();\r\n\r\n                        this.radius = Math.random() * 2;\r\n\r\n                        this.color = new Color();\r\n                    }\r\n\r\n                    Dot.prototype = {\r\n                        draw: function () {\r\n                            ctx.beginPath();\r\n                            ctx.fillStyle = this.color.style;\r\n                            ctx.arc(this.x, this.y, this.radius, 0, Math.PI, false);\r\n                            ctx.fill();\r\n                        }\r\n                    };\r\n\r\n                    function createDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            dots.array.push(new Dot());\r\n                        }\r\n                    }\r\n\r\n                    function moveDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n\r\n                            var dot = dots.array[i];\r\n\r\n                            if (dot.y < 0 || dot.y > canvas.height) {\r\n                                dot.vx = dot.vx;\r\n                                dot.vy = - dot.vy;\r\n                            }\r\n                            else if (dot.x < 0 || dot.x > canvas.width) {\r\n                                dot.vx = - dot.vx;\r\n                                dot.vy = dot.vy;\r\n                            }\r\n                            dot.x += dot.vx;\r\n                            dot.y += dot.vy;\r\n                        }\r\n                    }\r\n\r\n                    function connectDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            for (j = 0; j < dots.nb; j++) {\r\n                                i_dot = dots.array[i];\r\n                                j_dot = dots.array[j];\r\n\r\n                                if ((i_dot.x - j_dot.x) < dots.distance && (i_dot.y - j_dot.y) < dots.distance && (i_dot.x - j_dot.x) > - dots.distance && (i_dot.y - j_dot.y) > - dots.distance) {\r\n                                    if ((i_dot.x - mousePosition.x) < dots.d_radius && (i_dot.y - mousePosition.y) < dots.d_radius && (i_dot.x - mousePosition.x) > - dots.d_radius && (i_dot.y - mousePosition.y) > - dots.d_radius) {\r\n                                        ctx.beginPath();\r\n                                        ctx.strokeStyle = averageColorStyles(i_dot, j_dot);\r\n                                        ctx.moveTo(i_dot.x, i_dot.y);\r\n                                        ctx.lineTo(j_dot.x, j_dot.y);\r\n                                        ctx.stroke();\r\n                                        ctx.closePath();\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    function drawDots() {\r\n                        for (i = 0; i < dots.nb; i++) {\r\n                            var dot = dots.array[i];\r\n                            dot.draw();\r\n                        }\r\n                    }\r\n\r\n                    function animateDots() {\r\n                        ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n                        moveDots();\r\n                        connectDots();\r\n                        drawDots();\r\n\r\n                        requestAnimationFrame(animateDots);\r\n                    }\r\n\r\n                    $('canvas').on('mousemove', function (e) {\r\n                        mousePosition.x = e.pageX;\r\n                        mousePosition.y = e.pageY;\r\n                    });\r\n\r\n                    $('canvas').on('mouseleave', function (e) {\r\n                        mousePosition.x = canvas.width / 2;\r\n                        mousePosition.y = canvas.height / 2;\r\n                    });\r\n\r\n                    createDots();\r\n                    requestAnimationFrame(animateDots);\r\n\r\n\r\n\r\n                });\r\n            }\r\n        } catch (e) { }\r\n    </script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "windows/key.pem",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAuLL1pK2pGhz5nOJFLMmRqhwYy1JQQpqV7RUSCv55yhAQJ+45\nFxmH6D8hfZiPDjoo+3U3zsU1cYFu/KwxyVbUPJ/0LwnP1oNPjZx8B/FvDbZjZ/xS\niHOF0ThTO0YeEk9+wniAzOW2T5Ao6bR6r8z98DEMI/kwn4expl1gibVB59Gxhp5U\nowdd++pUWwm7nv1fshxeL4mV7DGvmOOZ8jhod+2dt9kXPTcf9QetrFr12884QHnS\nRlBRpiro2sqTlYhHd15BiCRml3Q+qk66m18m3KeJLUhgQ7MSVyFBbL4ILZkpngE4\n/lR5jqOVDIT5bWCZV0WgyDHMgTVkLCT8Z2Y1aQIDAQABAoIBAFh27w0nWJ13T1+D\nSRrAmRJfTsjj7ilYnYLm2rOFW5QayYI2qgWUZvIoesQLdEmeNc7rQAW7k3OASUag\nu1/yRMmc23pEOtZGIq5zSz0KuORafZZq1qUgn/GsBsGXPgQLK22+BgMd64qEQ/Rc\nS380slR/SY9ZZZ6jgcVraDfNJ3n+t7l5lLdPBEjZfwhEJti5e6PasKRBX7LNAfzp\nHXCF8AjWvxK+bdhPfxlcj/fGsJdQYRodvSsv1l0hCuZwwmu0VVRXomRYaaacz5mu\n8oXuJ0AmtCjmQEbEycgE++5VFCNSdehmFEZVHycAjx05nq7rPO6We9YRbIoHSkrx\n41j1jXkCgYEA2gSCGPAbInRDHwTW5D/SKrORGyOjqU5hilFaVZhlPJD/O7gBs1G2\npe8ElD5+VRp2mFBpyebGXGSa9T3i+By7/XaoXE+GIPCDI3/y49/y6Jy1NzOwEyZ4\nzVKT2sJ3ksSebFBIyqSY/IeF8cuh5nPnvd1mde+nQJHJUsmcXAAmcesCgYEA2OB1\nVpagIQrDHgfEGOsQngJsXW4Kdg0IEcGEQbYiLVTDOY1snTsBtoOC2ht8fQSawx3K\npuAPkIMONtnL0qGzHOXF+NO6hcts9AgRlvtbLBwL7QN52v6eoFHcImB58sn1l2ww\neVc5tOAaNiKXdRi9pEgDlhHEFizAq4mc+vA4jPsCgYEArsqUf2fpaVsrATCBFSgx\n2Lh0qvyM102XGC0XLq7q438gkoF5I4ps1GZoFm5wHM0FriIyXoQeHq8uKVa/pMps\n0c6TNscvMzOBADIxyw6ekm4pP6O6E/BxQ7RkBCyLb2kh1pcbdRQ376a79dqb58af\nUnKyFfXY8wSvEye+q2gXapcCgYEAqCX/U88dAAFUHmhvBdLa42eFlTrIKZcY9otP\ne5M3FGZvpqOb3pvtTBDS10AQWO3FABqNEK0P5D94OdbLTNfKA1GzGKUwLKP4KYxH\n9wOTQLPOG0lipQRdAHf3cT/TzQYAwBJF0w5p028dY3OWcldoUYL0JNpJadfw2g6s\nA3NUpRkCgYEAkLBN+pjNT3IBf2LeHSGBN9COmHLuaanL2P3F5e7oG7dsI8Fl7IXK\nN3fwncqcTEuQyL8EpSLPWJy0hSbM96eALYBw8d0TO1aI8hbrY8asCN9wmQMuEisH\nJkHElw/n2HVd8ZClnyk1w+gczrNBDwvVI7LWTgYNsVzZS23UDIMlzcY=\n-----END RSA PRIVATE KEY-----\n"
  }
]