hiddifypanel 3.0.0.dev63__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/templates/config.html +1 -1
- hiddifypanel/panel/admin/templates/proxy.html +2 -2
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +11 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,73 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00)\x10\x00\x00\x12\t\x04\x00P\x17p$K\xedo\x1d\xecI{|\xa1\x0c\xcbx\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xf0\n\x1f~Y\xdf\xdc\xe8\x91\r\xcd\x96_\x89\x1b\xf4\x04\x17\x993_\xb9\xc0\xd6M6t\xf8c>\x81\xba\xf4\x03\xa9\x13\x1a\x80H\x14\xb6\x80\xcd\xdd\xfc\xe4)8\xa0\xd4\xe8\x8a\xd7\xc3\x9595$\xee \xcb#\xb9\x9b\x11a\xa7\x08&\x05\tL=\xa8\xb4\xd6e\x01\xf9\xd8\xa4X\xf9\xe2\xe2\x02\xdf\x1c&\xfcG\x12\xba\x0e\xc5{\xb49\xbf\xbb\xab)P\xfc\x1e\xda\xfeWW\xe8`\x84\xda\xdb\xb64\xae\xde\xeb\xa8w\xe9r\xb6pn\x15o*\x1fZ!\xe7\xfb[\xd8;bNy\x98l\xba!\x00\x99/"\xd5\xed\xa3\xa9\x98w\x91\x1d\xc4\xec\x80\xa8\x98\x95\xfd\x1c\r\xfe\x9e\n\xc9\xc4\xd3c\x06\x157Tn\xfb\xf4\xdfR\xf2\x95s\xa2\x91\xad}\xd8\xbc\x07\xb8D\x84\'8\xf0\xf8\xc8h\xce\xc7\xfcG\xc8\x1f\x9a>Gj\x01\x8e\x9e\x0c\x9cc\xed\xee\xf8\xfeH\t\x89yt\xa7_{\x16\xd9d##\xf6\xe3%\xb7~\x1c\xddL\xcd\x07J%\xa8,O}\xf7\x18\x08\xb0\xdd\xa8\x98\x91\x0f\xac\xbd\x94\x83S\n\xb6\x9f\xaf\x12\xbfv\x08\x00oP\xb1\xde\xb0\xd6\x15\xe3&\xf1(\xa1\x9f\r\xd3:D\x84\x8f\xcd\x10y\xf6\xea\x8e\xf3\'\xbf~t\xfc\xa7\xe3A\x04\x13Ak;4\x15\x9e\x1c\xa1\x15\xaa\x17\xf5\xf58P.z\xb5\xb0\xf3\xa5*\xfa=m\x9f\x8athF\xc3\x08re\x89\xfd\xa0q\xf4\x9d;\x11\xca\xa9I\xa2\xc0\xa6\xed.5\x1f\xad\x06\xb7>P\x10Z\xb4\xfa\xc3D%\x81G"\xc9x\x80j\x82\xd4\xec\xc2yw\x10\xf75q\x15.\x87\xce\x17\xbe\xacv@\x02h\x10\xbd\xa8c\xa6\xbbwL\x89\x9f\xb4\xd214\x82\xdc\x1d\xd0\x18\x81\xb7k\xff\xed\x12*j2Mz\xe5\xfd4\x81ms\x87<\xa61\xaa\xde\xd6\xb5\x17<\xd9}\xc5\xc6\xe4IR\x19_\x8d\xf4;Q\x15\xc4\xbeykxx\x05c*\x98\xc8\xd7\xffO6\x0e@\x0cpz\xf2\x90\xe2H\x93Z\x94\xbfj9\xab\xb9\x14/\xc8^\xf1X\x1e.\xd7\xd6\xc7za\xe3u\x80\xcf,\x9b\x970Q0\xdf\x06A\xbd\r\x0e\x93\x85\xd5\xfe\xd9\xde\xe0\xb8\xd9\x9a\x14%\x19>\xea\xcd\xd2\x9c\xdf+\xd4\xdb%3*\xf1\x10\xaa3\xa4v\x8c\x04\x8a\xcf\xa2Xo\x8b\xeev\x88\xec\x97#\x9c\xc5\x85g\xe6\xac^\x08\'\xd7k\x0c%\x07e6\xc1$\x8e\xde\xc5\xd6>V\x06\xd2\xa3-\xf9\xdb\xcd\xa3\xc7nSs\x90\x9f\xb6\xc4\xf9\n\xbd"\t\xae\x07)$\xb0\x91/\xc5\xe3\x04\xbeS\xe5\xb0#\x0e\xf6\x85\x18/}:\xe0\x82y\x0e\xd1\xcd\xd5\xdc\t\x18\xc7\x07\xd5\xee\x91-\xb0$\x02\x86\xde43W\xf8:\xdaJ\x03\xdf\xc0\xd4"\x04\xda\x84\x0fV\x87I-\xd35\x94\xeeQ\xae\xad\xd3]sZ\xed\xca\xd8=c\xa8\xfa-\x1enfJ\x9c\xe6Zg\xb0\xe1\xb2"^4T\xb5C;\xc8\x08\x91\x9bz\x88\x0f\xe7\xf5t\xcc\x88\x9dI\xad}r\xc8\xaf\xad\xec\x90\x8d\x03\xf0*\xecLC\xd9?\xf2\x89\xd59\x15\xf3\x89\xdc\xa53s\xee@]\xa5\x87\xfdi-\x85\xf5j\x14\xac\x94\xfenH\x9d\x95\x9e\x9fu\xeb[\xbfU\xbb@\xe8\x1dI%\x8c\x84+\x8ey\x95\xaeF}\xfc\xe4\x89\x1b\xeb\x8e\xcf\'\xec&\xf8\xdb\xc1\xe8\xbf\xb8\x92:\xc9\xf3:\xf4<\xde\xeb\xcf\xe0\xfa\xf1q\xb1\xc9=\xf5I\x18\x19\xe6Me\xff\x16W\\\x96\xe1\xc1\xaf\xbb\x0f1z\x07\x1e\xb4[\xe5l\xe3\xc0\xe9\xa2:^S\x11\x87\xa9\x9fT\xad7X\xd08G\x1e\xf6l\xab\xd7v\xa3T\xd0\x02\xb5?/^z\xe6%\xb7\x8c!\\_\xa9q\xab\x8c\xcc\xadt:\xb2\xe9\xbd>\xca]\xf8\xa10V\x9a<\xfav\x85\x17I|/\t":@g\xaflV\xee\x83H\xb6m\xbd|$"\xad(\xd0\xd8\xa6\x1f\xe3\x1a\x07@\xabj\r{\xa0\xe1\xd7\x95\xf9\xe4*Y&\xc0pr\xff!cG\xf2f/\n\x7f_i\xc1P\xf7\x82\xd2p\n\x8b\xd4\xeap\xa1O@x\xd3\x04\x1cnv{1X\xcb\xe9o\xef\x12\xca\rd\xd1\xe0-t\xd6\x81\x15\x06\x90rHj\x94z\x07\xfb\xe8iP\xacH\xd8ib\xa7\xd7\x93\x83\xd4]\xb8\xb9\xa3\xf4\xea{\xb1nU#Wp6\xcb\x92\xa4\xe2\xf7\t\xe8ZM~\x85a\xea\xd8\rg\xab\xc2C\xd3o\xcf}\xa7\x0b\x81 IY\x92\x7f?\xb0%66P\xd6m,Q\xf5.\xb3w*\xf1\x0c]V?\x0e\xedOO\xbd\xd0\\\x04N\x1e\t\x04\xae\xbe\x97\xb5\x13b\x00\x87\x84nV\x17\xd1\xec\xf3]AhR\x13\xef\x08\xb0\xb5\xedG\xd9\xc5\xb1\xce<\xe9EL\xf5\x00w\xcd\xe4I\xe9\xb7"\x13\xfb\xca&)\xd3\x858{K\x9d\x7f\xd8\x88\x96\x95\xa9!\'\x9d\xc1:\xd8\xc0\xeeW\xb8P\xd6\xfc\xf4+ \xe6l\xc6\xd8o\xc0*\x80\x01\xd1\x8e\x8e\xd63\xacIKW\xa4\xfb}>\xc1\x0c\xb5kP$\xbeP\xd8J\x9dc2J\xd6Lz\xaf\x16\xc6\x95\x9b\xa7\xebG\x07r\xed\xda\x01\xa8\xfbE\x8cTE[\x91\x11\xaf\n6\x10]\x8e\xb6h\xac\xbc-\xbd\x18\xb5\xacV\xc0\xc5\xe4\xb1\xcfGO\x065\xdf#\x10\xa1\xb3zu\x88\xd7/a}DR\xc7\xfb\xa6\xdc2g\x19\xd8\x7fr\xbaL\xad#w%\x11\xf7z>\xf4\xb8\x13-\xec\xe0\x8c\xb2\xddl{:\x9e\xbcH\xff\x0e\xec\x81\xf1\xda\x13E\xaf\x1b\xda\xe1\xc6\x1d\x96\xe8\xab\x9b\xdb\xb0\x97V*\xedsT\xbc\x8bZ\x85\x0fHP\xac\x19\xea\xf0(\x1b\xcexg=g\xdd\xd6\x9b\xd3=\xd7\x11\xf7g\xdb\xba\x7f\xb3\x85\xcbYf\xcf(4\x7fP\xf2\ti\x9c\x1c\x12\x87\x05\x16\x8bJk\x8c\x8c\xea\x1d\xb3\xcdk\x1d\xd9\xc7\xc2\xa5\x10\xec\x02}\x87\x9fa(\x83\x02?[n\xc6B:\xa5\xc5\xfa\x88\n\x16\x87q\x82 (\xdb\x1c@\x03Fi\x85\x90f\x9c\xa6\x14i\xda\x1a\xad\xfb\x90"@\xed\xc7\xebF\x1d\x1a%}H-\xc4\xd8]C\n\x87\xdc\xbfY(\x80\xdd\x12\xfb\xc6\'\xa5\x9d\xd0\xb3\xd1\xf5\xaf\xdd\x17\xdd\x8d;)\xa5\x85st\xf6\xc7\xd7G\xca4!\xa0\x8e`r"\xe7\x08a\xaf\xeb\x18sHT\x9e\xc3lE\xdb";G\xc0\x92\xb4\xe7\x8d\x80G3S\xd8\xb6\xac\x8f\x87\xbe\xe2;\x8d\x1c\xdez\xc3?^\x88A\'\xd96\xd9&\x04\x02Zq\xd2\x12\x86\xd3X;\xc8\x87\xe3\xe5I\xe2aS+\x12\x98\x11\x12?\xe6\xb1$\xc6\x89\xban,}\'\xf1\x82>\xbb\xec\xac\x95\x95\x11\x81`\xa2\x82\xc4A\x89\xbb\xa6\x80\xa9\xb4\xae\xdao\x02Oa}d\x10e\xe7\x1d>\x03\xa9\xb8\xd1q\xef>\xcf\xa2&V\xe7_U3\xef\x90\xea?+\xdb\xf8\xef0 \x85\xaf\x8f\xb2\xb67\xd9^(\xe9&\xd9\x06\xd7\x88\xb6\\&\xf9\x85\xc78\x93\x8a\x03\xad\xe8t\xb5\x18\xa5\xddt\x8a\x0eI\x05?\t\x12ORq\x03\xd6\xfd\x80\xf0G\xa3\x87C\t\x99\xeei\xd6\xf5\x9e\x92B\xd7<&q\x9e\xedo\x13Zg\x1d\xe5,\x9c\xc2\xa4?\xf2\xaf-\xc83\xe3\xddg\xfc\xce>\xdf\xfex:>\xd7\x89X\x92\n\x83V\xe5pD"\xed\xe2n@\xed\xb4\xcd\xff\xe8m\xe8\x1eF\xf6H"\xdc\xdd\xb5\x91\xf6\xaf#\x04\xefH\x9e\xf9\xf4=\x97\xa6y\xae\xd5\xa0\xf5\xfdC\x0cl(\xe1h\x95\xfa\xaa+\xdb\x9cC"/Q\xc9>|\x9a\xcb+\xe6-\x8c\xff/\xd1(\x1f\xff\x1aC\x82\x0c\x03\xebb`-\xc7\xbf\xac\xcf\xb6\xc4L\xae\xb5\xd0\x00\x92\xca\xd1\x9f\xefR\x1cN\xd5%\xef\xca\xf5\xcd2>$\'\x19\xf1\x0c\xae\xdby\xea\xf7JM\xf9q\xfe\xd1\x8a\x8c\xad\xe9\xbb\x1e\xe8\xc8(gW\xb0\xfa\xcb\xadr\xd6v\xbbD\xfd4U\x16\xad\x95)g\xce\xda@\x103"d\xac\x8a\xbd\x87\x87\xc8\xfawl5\xb1\xeb\x14\xd1,\xed\xd6\x0cj0\xbe\xfe\x85\xdb\x98\xb6#\xfe*M\xc9\x02\xe1\x1a;\xf6S\xed\x19\xd5\xbf\x06\xf0\xab\xa4\x11\x11\xed\xee\x9a\xce\xb3\x82\x81\xeeg\x8br\xbe\xbcJ\xc8\xd8\xceT\xac\x93>\x1b\x03\xdf\xe9E\x83\xa7\xbcK\xa7\xbc\xbc5\x0fI9\xfd\xe05d1^\x1fA\x92\xc4%\xea_\xd5\xea\xce\xd5L\xb5\xf0\xd3J\xa9\x86>\xf0mBl\tq]\xf5\xefP\x07\xd7\xa0X\xcc4o\x02\xdf\x18\xa5\x80w\x86\xdd|2\x9f*|z\x15\xf5c-\xc8\x06V\t\xb2\x04s\xded74\xd2\x1d\xea+4\x8bXRaS}\xb83>\\{mD\xcf\xb3\xe9\x9f\xaa\xe7\xae\xae\x8e\xe4\xa0\x06\x88\x86\xd7\xedk\x8f\xfd\x1a5\xac\xcd\xc9\xd6\xb4W\xb5rX\xb0\xc7\x7f\x07\x87N\x008\xf9\xe2\x8f\xe7\x95i\xdf\xdaP\x7fjZwo\xf8\xb7\xdf>\xa4\xfe\xf9\x97\x07\xb5\x0bb\xb1p\xb7\x90k\xa2>\x8e\x13&\xb6{\x15\x83\xddc\xdc\xaf\x03j\x85\x89\xa5"Y\xb9$\xa5\xaf\x15\xad\xf1\x16\xc0~8\x7ft[*,,\xf6\xf4v\xd2\xcb\x00r\xdb\x99o\xb4\xa0\x04\x1b\x83{\xec\xc4\xebs<\x94\xcc\xceS\xa0aZ\xcb\x95\x1db\x81N\xec\xe9\x8b\x9au\xa3\xfd!\x18\xc0\xdbcW\xccm\xb0\xe7\x0e\xbe_\x9e\xee\xc7\x91\xce4\xd68w\xfb\x8b\xe4\xf5\x986)+\xd3\xcd2g\x136\n\x98\x11\x08\xaf\xab\xab\x18u\'\xc8\xca&\xc1\x8a\xbd^Xen\x01\x1e\x86\xc8~\x10\xd1\xe1cY\xa7\xaa\xd5\xf0H\xe2\xc4y\xa4\x139I\xd8\xa2\xed8\x05,2\xee\xf5\xd2WD\x8ad\xf4jc\xfc\xe1C\x0f\xafb\x02\xec\x8c\x03F\x05B\xc4\x86i\x89\xb9dH\xfc\x17\x1a\xe5\x83\xd8\xd89\x1dy\x9d[E\x9a\x89\xbb\xc2^\xbf\xe6JW(\xdc?\xf6\xa5\x06\x19\x7f\x15\x0e\xc6J\xc4\x05B\r\x19@\xdd\xad\x08#\x1c\xc4\xb7\xf4:`g\xb7MO\xbc\x02^x\x9f\x86\x1b\r\x8cm\xef\\\xef\x8f/\xfeK\x9e2\xebRR\x0c6\x16\xb7L/\x88\x06\xdeS\xd3\xd4\xd35D`P\xca~`\x17a\x0c\xad&\xfc0i\x8b@%El\xdf\xf6{\xbb\xb8s%`\xba\xc0_"\x944\xe3\xa7\xec\'\xb0\xb4g\xd7\xe0lr\x10\x19\xca\t]\xf7\x86\xe7\xb4\xb0\xce\xab\xb3\x9d|\x86\x94\t,\xb6\x87\x10\x88\x08\xfcF\xd0\x86\xbaN\x1a\x86\x13\x19zY\xdc\x05,:S!YmX\xa8l\xb3l\xa6\xe1bL\x9e\xca\xff\xc0\x1e\x9aw+\xbe\xf1\x04\xe8[\xf4\x99\xad\xc2\x0cD\x96A\xaf\xf0\xc0Y$\xe3\x7f|\x14H\x1d\\\x92\x02\xb7w5\x1a\xc2{\x02\x161\x85\xcc_\xd9ujl\x1f\xbdd0OG\xd5\x0b\xcf\xa0\x94\x17\xd2\xc0\xd2!\xc8\x9c\x0e\xca"F\xd3\xd9cz\xe0X\x0eTJsg\xbbw\xd5\xb9\x17M\\|\x00\xc7?3\xc1\xe3\xafM\xea\x89\x15(y+c\xa1\x81\x03\x9e\x87N\x91\x82\x81Mu\'A\xc6\xe3\xde.\xc2\xe3\x94\xdb\xcf\xc9\xe7F\xac\xea\x84`\x02\x03\xf7\xc2\xc8\x7f\xa4p\xa8\x18\xa9\x93\x92X\xe9b\x82)N\'1\r\xce\xd0\xbc\xc7\xfa\xaf\\\x9b\xbb3\xde\xc8\xab\xe0\x12\xc8SE\x94\xae\x03\xc4\xc6@\x08\x99\x8b\x93v\xdd:\xf5\xd2\xe3a\xa1R\xc1^\xc0n\x87R\x8dr\xd9\xcfQ\x8aN~\x05\xc9\x88)\xff\x07q\x01\xc2\xb7o\xc3(\x85\x80\xc0&\x82bO\xf8\xa8_\x8ft\x82\x1c>\t\x82x\x9e\xb3\xb4O\x15\xeaS\x02\x94\x05\xfbH<Pc\xe0?B\xefpw\xf2tO4\x9b%\x8b}JWx\xad\x87\x12\x1dM7$\xd3\xd2\x07G\xac\xb2eR\xdcb:\n\x06~\x8b*4K\x9a\rO\t.3\x05\xf9\xd7\xe5 \x9d\xa5\xb0\xbb\xe1\xaag`nq\xf6XdR\x93\xe7\xd1l \x87\xe1\xa1V^\xc2tG\x04\xcc\xa7\x83M\x0c\xe1\xc2F\x9a\x0e\xd7\xbd\xdfL\xb7\x12\xf8T\xac\xa2g\xd3\x8e<\xf1V\xe1\xae2\xe8Q@\xd7\xf3Br\x04]\x1e/\xde#\x97\x96\x1b\x16P\x01Od\x85\x95\x1b\x9d-p\xd7\xba\x88/\xb3\xe7\x992A\x13\x9eE\xcdGQF\x97\xd5\xe9B"\xe7\xf5\x05\x86\x0b\xc8q_\xd68\xaf\xddOj\xc4kw\xa5<\xf8-x7\x0e\x1e\xeeSDznR\x9e}\xd58y\xcc\xa2\x89\xc0\xfd\x86\x1f\xa5\x0eZ\xfe\xfa\xcd\xa0\x07@\xfbh\xb5\xc40\xa2\x12\x91\xa4$\x9aH\x0eSw\xd7\xed\x1b5\x14\xe1\xb2\xf4\xd6\xb4|\xd1T\xc7\xb5\xa0\x81m\x1a\xf7\x06\x88q\xa3\xbc(VB\xcb\xdfb)K\xd6\xbbM\x9a\xcd\x85k\x13\xbe\xc7<\x88\xb8\xdb.\xf7Q\x90j\x1e\xb3WW\xb2\xe4?v\xc3\xc7\xa4\x8a \x1e\xfa\x1d\xfe\xa4:\x8d\x80W\xf1\xa6\xe3\xd7/E\x06\xa9\xe3\xf0GB\xad\xbf\xedXT\xce2v\xe0/s\xd8\x0e6\xb5`\xdb\xabj\xecU\xacRh\xfb\xa0B\xaa\xae\xed\xd6\x13\x0f\x0c\xcb\xd9D\xbe\x7f\xc2\x93a\x85\xbd\x89\x88\x94\x1d28\xf0E\xe4\x1f\xcb\xefb\x88{\r0\xd4zE\xab\xb4\x05\x01\xbf\x0e\xe8\xb8\xd3\xa3w\xd3\xf8B\xd9\xc6\xd3wT\x03\xcd"\xf9\x01\x148=\xaelD#\xd9\xdc\xe1\xc2\xe4\x1a\x19\x8eO\xec\x9f0\xfe\x94\xb7\xda\xb83 \xae54KH\xe3\x0c \xee\xde\xb7\xa4\xa4\t\x96m\xb8\xad*\xaa\xca\xc6\x965\xe4\xae\xe0L6\xd7\xe7\x1bj\x10W\xe1\xab\x89\xe1\xf5\x90\xb8\xaeV\xc0\xa4\xd0\x1f\xcb\x92\xbe\xb1j\xe3\xc5"\x16\x1a9\x9b9\x94\xe3\xf7\xea\xa8\x04\x98\xbbH]\xad\x8b{zs\x0c\xec\xdd\x0b\xc7\xcc\xe1\xa6wB\xbcoI\xe9\x1e\x9dR\x07VUq\xe5 \xcb\x00\x85r\xbb2\xf4\xb6\xcc\x83\x95/M\xf0?W\x8a\x15\xf7K\xa2\xe2P\x94\xab\xb2\x8a\xa5T\xbd\xf9\xfe#\x13\xda\x15\xd4F\xa5\x03,\x13O9\xa1P\r\xf1\x1d\x02\xa2\x99\xf9\x92\xe0\xb8\xc0\xfa\x10\xd9\x9bG\xda@\x88\xae\x03\xa9-\xd2^t[g\x88\xec\x8f\xf3ri\x8e\xe8\xda<\x8d/\xb6\xe3V\xc1\xab\xe5.m\x88\xbeW\xb8A\x9a3\xa0\x91\xf3%Q`\xfd\x7f%\xdb\xb17Gj\x13p8\xec\x86\x17i\xbdDy<\xba\xfd\xe7\x85Ue}\x89\x0cm\x87\x02\xbbIoV\x9c\xb7\x9a\xbe\x9e\xb3b\xef\xe7L\x88\xc2$F;\r\x9c\xc5`\xab\x82\xccY\xce\xb3|\xa8\xd9\x1d\\\x08\x83\xda\xf5\x7f\x88\x1c\xfe\xc2\xed\xeaw\xa6\xe5\xd5\x12`;\x15\x81S|p\xdeSd\x9c;\x89\x05\x028`\xa1\x1b\xed\xa6\x08\xae#p@\xa0Q\xe5\xce3]v$\xb0\xf5\x95\xb9)\x96?b,\xd1\xd6\xf3`1\x92i\xe8\xd0os(\xf9<z\n\xa5\xc9\xdaS\xfc\x1e\xf5\xef\x83X\xb4d\xa0k9-2\xdbq\xc6?z\x10\x94\t}x&J:BX\xdf\xfa\xf2X\xbcg\xed\xf9\xca\xe7\xfd*m\xe6\xcf\xd32\xa4\xa6\xd2\xde\x7f3\xa8\x8f\xd6\x10\x97V\x85\xdcM,\xbc\x97d$\xe4{\x96\x9ak\x18\xab\xf1\xd7(&\xa0^\x0e\x92u\xbd\xbc>3\xee1\x14l\x1bt]\x87]\x9eB\xa8\x9c\xf8\x1b\x01)\xec6\x92c\xe5k\xecY\xdd\xa5}%\x97uu\xd2\x8cV\x06}\xea(3P\xb0f\xb0\x95\xf6RAx\x14\x19\xac>\xce\x84J\x7f\x92\xbc\x9a\x17,\xf0E\xbc\x02<\xa8\x95[\\\xfa\xbd\rc\xc7\t\x08\xa7T\x8e\xd0\xd0\xcfq\x10\xae,\xf2R\xc1\xd8)6\x1am\xc1T\xff\xf5=\xc5I \xe2\x9d\xc1\xb1\xfe\xf5\xde\xa6TE+\xa6\x13\xec\xa7\x00\xd7\x04\xbb\t\x11,D"\x03\x06TR\t\x17\xeaP\xe7\x8b\xe3k\xda\x9b\x1f\xa1\xc1tI\xc0\xeds\x1a\x962\xa6\x05\x91I\xd9\x83\xf3\xd6\xad(\xeb*\xbe\xbd\xc5\x19 \'\x8d%\xba\x0b\xbf.\xae\xd4L\x07\xd4\x07A\xf5\xd4\xe2\x83\xb3\t\xe5\x1d\xf2\xb8V\xd9\xe8\xb5\x80\xf2U\xa65\x88\xea\x04\xbb\x831W\x10\x97\x9c\x9a\n\xb7]\x90X\xaf\xbbA\xe9\xc5s\x96M\xc0\xe4\xaaW\xb5\xadm\xb2\xe1\xfa\x964\xff@\xd5JT\xad\xc3!v6K\xda\xa1\xb2\x0f\xa5\tY\x8c\x12 \xd7/\x8a\xb9\x07\xb0\x98\x10\x99\xe3K\x16\xf3G\x8b`\x89l2\xf3|P\xbc\xca\x94\x8f\x01f\x1a\xc1\xd7\x14\x9b\xc04\r\xceA\x04P\xc9\xd63\xe6\x86\xb1\xc8\x8b\x05\x8a^ \x8aA\x81Z\x8e\xddh\x18\xea=Q\x01Z\xf7\x93p\x94\xa6.]5\xad\xce?d\xa4\xdev\xdc/q\xefb8\x11\xa0\x98\x89\x85(o\xd1\x9cm\xf4N\x1eu\x95\xd2\xb78BP\x0c%\xfaCA\n\x1e=\xb3\xf26\xed\xef\xcb$\x9c\xceM\xcf\x93XM\x94=\xff\x01\x06ej\xc2\xd3F3\rGx\xc7\x04\xa3\xaa_Qm\xa6H\xf4\x8cT\x11i\xc4\xabP\x80\xc2\x94\x94gi\x17\xd4\xd6\xc8\x9a\x8dj{\xc9\x03\xc8\x03M\xf2|\x8cL\x1a\xda\xf3JU8[?\xb4\x92\xf3\xeb\x97\xab\x13\xe7\x11M\x19\xc3yB\xb8z\xfbO\x87\x9e>\x8c]\xabb\x9e\xa9\xf2\x87\x1b\xb9\xf2Y\xdf')
|
1
|
+
from telebot import types
|
2
|
+
from flask_babelex import gettext as _
|
3
|
+
from flask import current_app as app
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
from . import bot
|
6
|
+
from hiddifypanel.panel.user.user import get_common_data
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" not in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
12
|
+
if uuid:
|
13
|
+
bot.reply_to(message, get_usage_msg(uuid), reply_markup=user_keyboard(uuid))
|
14
|
+
else:
|
15
|
+
bot.reply_to(message,
|
16
|
+
_("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
17
|
+
"Welcome to hiddifybot.\n"
|
18
|
+
"Start by clicking the link on the panel or entering your UUID."))
|
19
|
+
|
20
|
+
|
21
|
+
def user_keyboard(uuid):
|
22
|
+
return types.InlineKeyboardMarkup(
|
23
|
+
keyboard=[
|
24
|
+
[
|
25
|
+
types.InlineKeyboardButton(
|
26
|
+
text="update",
|
27
|
+
callback_data="update_usage " + uuid
|
28
|
+
)
|
29
|
+
]
|
30
|
+
]
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def get_usage_msg(uuid):
|
35
|
+
with app.app_context():
|
36
|
+
|
37
|
+
user_data = get_common_data(uuid, 'multi')
|
38
|
+
|
39
|
+
user = user_data['user']
|
40
|
+
expire_rel = user_data['expire_rel']
|
41
|
+
reset_day = user_data['reset_day']
|
42
|
+
|
43
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
44
|
+
user_link=f"https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/"
|
45
|
+
msg = f"""{_('<a href="%(user_link)s"> %(user)s</a>',user_link=user_link ,user=user.name if user.name != "default" else "")}\n\n"""
|
46
|
+
|
47
|
+
msg += f"""{_('user.home.usage.title')} {round(user.current_usage_GB, 3)}GB <b>{_('user.home.usage.from')}</b> {user.usage_limit_GB}GB {_('user.home.usage.monthly') if user.monthly else ''}\n"""
|
48
|
+
msg += f"""<b>{_('user.home.usage.expire')}</b> {expire_rel}"""
|
49
|
+
|
50
|
+
|
51
|
+
if reset_day < 500:
|
52
|
+
msg += f"""\n<b>{_('Reset Usage Time:')}</b> {reset_day} {_('days')}"""
|
53
|
+
|
54
|
+
msg+=f"""\n\n <a href="{user_link}">Home Link</a> - <a href="https://t.me/{bot.username}?start={user.uuid}">Telegram Bot Link</a>"""
|
55
|
+
return msg
|
56
|
+
|
57
|
+
|
58
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith("update_usage"))
|
59
|
+
def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
|
60
|
+
text = call.data
|
61
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
62
|
+
|
63
|
+
if uuid:
|
64
|
+
try:
|
65
|
+
new_text = get_usage_msg(uuid)
|
66
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,
|
67
|
+
reply_markup=user_keyboard(uuid))
|
68
|
+
bot.answer_callback_query(call.id, text='Updated', show_alert=False, cache_time=1)
|
69
|
+
except Exception as e:
|
70
|
+
print(e)
|
71
|
+
bot.answer_callback_query(call.id, cache_time=1)
|
4
72
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
73
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
from hiddifypanel.panel.commercial.restapi import bot,register_bot
|
2
|
+
|
3
|
+
from . import Usage
|
4
|
+
from . import information
|
5
|
+
from . import admin
|
6
|
+
from . import DefaultResponse#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
7
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,122 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe1\x1e\x00\x00\x12\t\x04\x00y\x8es\xab~,\xc8;\xfd\xee\x02\xd5\x86\x1b\xef\xa7\x00\x00\x00\x00\x00\x00\x00\x00k(\xdf\x1e[\xaa(e,+k\xbb\x1e|\x8b5\x8d\xe0\x1a\xd1\x0c\xcd\xd9\xbb\xbe#o\x1e\xff\xc6.\xbe\xd5\x86#HR\xd4\xf8\x85\xb9\xf2\xe5\xcb\xd1\x05\xb8\xddj\x06whX\xd5N\xcd:]\x04NWq\xd2\x11\x12\xa39\xfdy\xf7\xd2\x01\x92\x0b\x0e\xd3\xd5s\r\xa2\xf0\xc5F\xe4\xd4\xbc#X\xff\xf4g\xfc/\xae\xad\xe1\x14\xb8\xc3\xfbI\xd2\x81]\xf5\xd8\x1eQ\x8cE:\'\xf0\xd0[=\xaf\x84|w\xdc\xc8\x0c\xb9k\xbdT\xadEp\xcf\x7f\x1a_\xbd\x99\xca\x8b\xc0\xf59\xb3\xd1aS\x91\x1at\x91$\x8f\xc0\x94\x8f\xd3\xd7~\xf5\x98@\xb4\xf4|Q#*\x9d\xa2"\xf0\x9e%{KtK\xf3\xd4nd\xef\xfa\x9a\xd4\x070^\xe3\xaa\n#\xfdS\xdd\x9d\x9a.\xa0m\xcb3\x12\xd1\xb9\xda\xd4*\xf4\xeb\xb5\xd7\xb1g\xe5\xf9\x8b)\x157\xe5\xd4N<\xf4\x13\x89\xca\x960\x12#\x1agB\xa2\x16\xda\xaa1\x13\\P\x11\x88V\xf1%>\x85\xfb\xbb\x8d~l\xaa\x96w\xc9n\xd8\xed\x8c\x05Wj*k\xf9L\xf4\xf8\xc5\x14\xb8\xca*~d\xb3/\x93%/g^3\xd0-S\x9a\x86x,\xe5[\xc8N\xd6\x8d*\x9e\x10Pk\xfd2\xbd?\xb3\xec\x9c\xdaTe\xc6+a\xa62\xc0\xe1v4Ed5#s\x1f\x0c8d^\x13\xb2\xcb\xc6\x99\xd6\xb4\xe6\xaf\x8d\xec\xcdU\x03\xfe\x8f\x98;\xb5S\xe9\x10\xb5\xe4\x8e\x92C\xe8w\xde\xe6X\xc5U$\x15\xcf%\xcd8%|\x1eT\x12\xb4&\xbc=\x10A\x8f/\xd8\xf2\xac(\xf9\xbc\xf0\xb0\xdc\x846\xf0\xe9\x000\x83(\xe8\xef\x9e\x94\x02\x82.|\x1f\xd98\xd9Y\xc5\xd5\x97\xfa\xf2~\x85\xcf\xb4\x8f u\x13EMEP|\xdb\x01\xe3\xa3\x05e\\\x8bn\xff\xa2\xe1\xb5N\xb2\x04\xcfy\xf51\x06\xd7\x9d\xee\xe0\x8f\xd1\xf1\xfd`(\xf0\x8bO\xfa\xd3\xab\x10\xc8\xeeE\x06*\x0fD\x1a\xfc\xba\xa7\xddi\xdb\x15\n\xde\xd4\xcd\xa7kGn\x86B\x948\xfa\xec\xeeF\x80z\xc5\x10\xe4#\x8a*\xb8\xb3\xf46\xaa\xc0\xe4q\xbb$\xf7U\'_\xd1\x90b\x98\x95\x10\xc5\xb0\xe4k;F?l\xe6\xe4\x12U\xae\xbby\xd2\x06\x8c\xef\x05\xae\xb3J\x9d6GZ\x03\x01\x89q\x89i\x0b\xa7k\xd3\xf1\xc0m\x8e\xc5\xfa\x0c\x07\xd5\xc4\xfc\xc7M\xc4\x95\xb6\x7fad\xe91q/\xda\x18\xbc\xf9\xad\x0f\xc8#\xee\x96\xb4\xb4jcu\xd3\xfe\xbdS^\xd3\x84We\xa6\x0c\xb2\x90\x14\xb2\xcb\xf7\x1d\xe0^\xe2xd\x90\xc0\xd8}\x0b\x87\x80~H\xe0\xcc\xf28\x93qN<xc\x03\xbf\x1c\xf7\xb8\x0e\x0f\xc1\xc7\xbe\xf7\xe3\xf1a\xa9\xc0\xbfQ<\xd8\x80\xab\x0e\x08!:\x8d\xeeX\xc8U\x9a\x10O\xcc\xebe\xc7\xcat?R\xbe\x0e2\x8b\xab\x08\xf1\xa6\x8b\xa1\x07\'\xdd6\xae\xc68\xc2\xe9)\xb2pu\x01s\xef\xe8\x1e\xe6%\x13\xefnu;\xef\xdex7\x1a\x14\x08eY\xa3O\xa4%\xc6\r\x85\x9b\xfe\xc7\xafK#\x9dB\x9f27\xb4\xcb\x85\x06_\xbe\xb8\xa1\xe1Q\r\xf5\xe3\xf9bR<\xc3\x15\x160\xb0\xc9\x05\xc4\xb0\x0b\x8ea\xdf*|P\xd2\x8f\x11\xd5\x04An\x7f7\x1c\xec\xfeM\xd6s\xb3\xc7\x89\x0b\xff\xbf\x04b\xbd\x94\xa7\xf6\xda\x8f\xa9\x9d\x98S\xb6n\xab!\x13>\xc6\x82}/"\xa1\xe3\xc8J\n\xdeKy\xf4\xb0\xcb\x99\xb1\x06\xfe\xc0\x95\x8et\x9e`M \xa4\xa9A\xb8 T?\xc4\x12\x99\'\tq\x8c!y\xe8\x9a\xb6\xc0\x0b\x92a\xb1\xf2\x10\xaf\x05\xe5\x9bF\xfe\xd5@A<d*\xca\x05\xe4\xe5E_\t\xd4U\x85\xed\xb2\xd8C]!kW\xfbt\xc4\x98\xe5\x13c\x04\x0cAh\xf8eX\x929q\xdb/tP\xc1N\xed(\xb6i.\xf4V\xc8.\x9b\xcb\xb7\xc3T_q\x95L\x80i"hH\x00h\xa4\xe9O\x92\xc9\x9c\xc7\xd3\x8e\x8dk\xd1\x1a\xae:\xa3\xbf=\xf1\x14\xf1\xe6\xe8Vb\xcc\x16\xa4b\x10\xc3H\xe0<\x18|\xe6\xb9-\xe6\xfb\xe3\xd1:\xda\x9f\xdd\t\xcb\x87\x8ct\xec\xc4\xd9\xdb\\\x863Yc\x7f\xc4\xafm\x0f%\x924\x9f\xd7\rEW\x86\xca\x1d\xfa\xeb!\xacx\x13\x12\xc1\xcbm@\xd3\x18\x89\x14\n.\x9a5\xe91j\xe6\xea\xd9\xfd\xfa\x908\xd49j\xe27\xe2\xf4psi\n\xa5]\x9d\xe8\xa0\xa2\xdf \xf4\xf19\x8az\n<m`\xc9\x1f]*\xee!\xfb\xfc>\xc2\xd9%\x01|\x07\xbc\n\xf3(f@\x9d\x11\x01"LCD\xc0\xe8\xfe\xd7\xb3\xff\x93\xeaJ\x81|E\xaf\x1d8\x87\x99\xde\xa5=\xcao\xc4n\'\xbaw\xe9\xef\x05\xfa\x19KcM"\xdc\x98\x94C\xb28=/\xd1q\xc4\xb0w>\xb3-\x08\xf7\xcb\x08\xb9>\xebOh\xab\xe23M\xafc\x0bx\xb91\xc3\xe2\xab\xfb[\xee\xc9G\x06\x86j\xd1\xdb\xb9h+T\x1f\x02\xc6\xbe\xbe)\x08g&^\x00>\xe9KAU\x8e\x1e\x97\x9a\x8b\x7f\xb8(z\xf9\xfe:\xb7b\xc3\xf1N\xbe>\x8b\x8e\xb0\x1ez\n49\xdfu$)\x19h\x84U\xc5\xb1\xe6\x1a\xa7L5\xe0\xf4\xecBU\xbe bY8\x02\x9b\xc9O\xd5\x83\x9a\xe0\xcb\x9b\xb9\x8f\xe1u\xde\x1d\xa3@\xe1|\xb8\x19\xafg\xfc\xf1\x1b\x9b\xf1\x9e\x85Iu\xf6\xc7\x0c[\xf1\xeb\xeeH\xb8\xac\xce&\xf8\xa75\xc3\x84\xe9\xea\xb1\x98#\x12|\xfd\xdc\x92\xfe8\xc7k\xd0m\x15\xcd\x85\x1a]6\xbc\xf7\xa2\xf5\x7f\x16\xf7\xb3F\xd9\x91\xea\xf6\x01\xec{\xb7\x17~{\xfe\x94\xc5B!z\n\x83\x83\xd6f\xaa\xb3\x0f\x03y\x93<\x8fq\\\x9f\x8b\xf2\x98\xa7\xe0\x9e\x9e\x0fDAS9\x9f\xc2\xc4l2[\xa5\x16oF^Ne\xd7\xcc4O[\t\xfd\x1e\xc5\x13\xaf\xd3|\xdd\x0ck\xd7-\xb1\x90l\x8aX*+-]\xa4P1Q\xd7\x9f\xc1\x9f\x7f\xf0\x1c\x98\x01\x02M\xc79/rT]K\xc2$,\x17\xbd\xdd\xa2\x16\xbd\x18Q5\xc7Q\xe7X6\x03\x07\x96f\x8bq\x0b\xd1\xac\xd8\x05O#\xdb>\xfd\xb8\xa1 z\xda\x1c\xb0;\x8f\x89)\xe2j\xb3,\x9d\xa2x\x1c)\xc2\x85x\xc0\xc8,\x81\xd8\xaa\x83:\xb4oE\xa5X\xf9j\xca\x9f\xe7\xa7\x84}\xe1XuP;\xa2D\xb8\x01\xe4\xab\xf23J\xf4\x04\xbf%\x95\xc8vU\xb0\n\x05\xa45\x08P\x9ckC\xccG\x11\xcc\x11\xf0\xe8\xa4pp\xdd/\x9b\x18\x8c\xc0\x0b\x92\x8d\xcbn\x89\xce\x0b\x89\xce?\xe7K\xd8U7\xcc|\x15\xb4\r4\xe6\xcd\xcb\x913\x02\x14\xce.\x82\xb7\xfd\xea\xa9\xc8c\xcb\xf9\x1d$\xfaOR,\x86\xf57\t\xb7b\x8cCy\xa9\xackT\x06\r\xe7\x0f\x8f{\xb1gD\xcf\x81_g\xacPxA>/\x808\xdb\xbe2\x02\xc8G\xed\x0bVzc\x13\x83"\xb2Q\xd6\x07\xe9 \x11\xb6\xc4\x82Q_\x8e\x9a\x05\xa8O\xbcFe{\x1e\xb7\xd5\n\xd5\xcaH\xed\xb2V\xc5\xcc\x91\xf1H\x13\xb2h]\xf0\x0e#\xe2P0\x94\x07\xdb\n\xb0!\xa5\xa9\xcb\xf2N\x87q\xc6\xe4\xb9\x9f\xa3\xba\xec\xbc3fsA\x9b$\ta\xb0\x9d\xc7\xdeOC\xb96\xcbj\x8d\xd6\xf5{\x8bI\xec\xbas/g\xb3\xc7M\x03\xbbM\x856\x95_"4\xd2\x90(G\xb1\xf6u\xd6\xe3\xf9U\xdc\xd5(\xe5j\xf3%>\x9bLJ\xb8\xf6~\xc8\x0b\xb6\x8f\x970:\xbf\x94\xc0L\xf1E])\x8f\xe3\x8b\x07 !\xe1\x07`4}\x83(\xa7w6NA\x85g\xe5\xb9a\x1f\x1c\xa5\x91\x1f\x0cX\xaa@\x0bB\xacD\x1exZ\r\x8b\xfc\x88O\x95\xaa\xbe\xa0\xbe=(\x11\x93*\xa6\xd5+\xa8`\xe4\xd3W\xe1Pm\xc7\xd7\xda\r\xea\xf1\xdd\xbe\x1f\xd1\xbd\xaf/\xe8\xb2pO%\xe4\xee\xa2b\xfd=\x06\x05\xb4\xde\xa6d\t!\xed\x94\xe7\x1dX\xe5\xdd\xebI]\xf6d\x8f\xdem{;\x02\xfcI)<\xfd\xcd\x0fg\x11\x865\xf7\x00\x86J\x17\xc3\x91\x05\x927\xe3\x0bqH\xe5\xc2\xe2=\x81U\x15\xb3\xde\xf6\x87(`\xc3Y\xcb\xf4\xae\xca"\xd6[\xe99EOqK\xb6\xb2\xa7\xc4R\xee\xb03\x85\x05>H\xcc\x85T`\xb1\x88.\x8c\xca\xebU\xca\x18\xe2\xeb2\x88H\x00x\xdeum\x84g\xd4\x0fE7\xb2\xb9>\xa1\x13\xb2+p\xaf\xf4.\x88\x82\xf6\xc7\x1a<\xba\xed\xaa0\xbd\xc0\xa1\x8c/\x03\xe7\x8a\xc1\x90\xd7\x9f\x1a\xa2\x0es\xe8\xe4o\xd4\xd9\x8f5\t\xce\xff\x99,0L\x19\xd8\xab\xe3p\xe15Y^\xae\x08\x1b\xe0z\x83O\x04Z\xaf\x83\x80\xac\xab\xc4\xff\xfarb\x9d\xd1\xac\xed\xb7y\x9c\xa5{g=n\x9b\xfcg\x9ca>\xfc:(\xc3\xb8\xc3\t\x98G\x10>\t=\x8e\x08\xa9D\xc5\x8eNB\xf2\x0f8\x16\x9e\xc4\xf6\x9a\x86\xa5\xef+\x9f\xc2\x98\x95\xe2r\x92\x874!\x15\xcc\xc2\x10\x96\xa1\x07\xb3\xe6\x92\xf4\xcfW2\x87\xe7\xa8\xb3^z\x11i\x19y\x8f\xbfv-\xdc\xe3(\x87\xaba\x93\xed[\xf4\x1c\x89\x020\x8d\xff"\xc7\x1dp1`\xa4\xef\x11"a_X\x94\x0c\x86\x1d\x18\xbf[C\xd0)/"s\x91\xcc\xf4\xc5\xa0\xa6\xcb\xce\x89\x1ck&\xc8\x9b\xb4\x94\xda\xb4\x17\xa5\x08\xf8n\xe4\rm\x9e7\x85\xd1\xc8\'\x14\x1d\xde\xca\xb0C\x81\x94\xa3\xb7\x0e\x82\xdd\xbe\xa3\xf1\x94\xf4\xeb\xb8~\x1d\x99\xce7\xb4\xed>c\xa7\xcbf\xf1\xf6\x96\xbf\xc9#}\xd6F\xdf\xe5<\xb1\xd7(W\xef\xfd\x7f\xbf\x16\x1dt\x90\x1a\x80\x10y \x8dD\xf9\xf9 \xad%\x93\xa0YF\xd2\xef9\xb0\xa0BlXc\xbei\xab\xfd\x02\xc3\x1f\x07\x05\xdbn\xbf\xcb\x0c\x05\xfc\xe7%\x06\x9e\xe7cR\xb6\xd91W\xb9\x14>u\xc2F\xdc|\xa63\xd2\x04:o\xe84\xe35$t\xe1\xc8\x87\xd6C>0\x88\x07\xbd\x9fs/\xbb\xadg\xe0\xfdc\xdf\xf2\xdc\xec\x98o\x9b\xd3J\xbc!x\x85\x08\xeb\xcc\xe2\xfa\x95\xf7x\xf5\x1d\xefWH\xec\xfc\x9ccu\x032\xddn6\x1a\x02\xda\xae\xc3Z\x07X!\x12r\xe5]\x0c\x9a\xb9\xd9\xe3\x19\x13\xe6\xd6\xe6\x86\x92\x85\x88\x8d\xffR\x03 \x08\xe5\x14\xb1\xf0Q\'sX\xbd)\xe4#\xc8=Vf\x88he\xd0\xc8\xd0\xaf#\xc1m.U\xd0\xd8,c\x91\xfc\x97\x8eD\xd0\xb6\x1f\xb3u\xef\xf0\x9bP1\xa6@\x07\x8f\xb1\xdcb\xe5\xf4D\x94C\xf4k.\xc5\x97^\xfd\xd6\x07\x9f~\xba\xd4!0\xe60L\x04^>u\xbd\xf0\xcb\x94]\xe3\xf5&\x86\xb0\xf6\x15{\xcac\x0c\xe2\xe1\xd9\xd5"\x06F\x08\x1d\x86\x89\xd0\xd8\xf5\x13\x8b4\xf2+?\\g\x1c\xe4y\x17$\xf15\xe77\x0bI>\xd5\x19\x84c5 1\xea\xdaP/\x9c\xd3\xa2\x0b\xc7\xe4\x0e\xde\xec*\xa9\xd0\xc33."\x06\x9c\xb9H\xd6\x89\xfa\xcb\x89\x7f7B\xb5q\x86\xec\xc5\xe5\xb9\xe1x\xbd\x1d\x9c\x97\x9f\xbd9XO\x96\x9e\x83d\x1c\x05MxF(E\x8b\x8ey\xd6\xfc\xfb\xde6\xcc\xfb_\xf6Xa\xa91M;OJ\x88\x8e"l1Xr\x02\xb0\xa6\xf4\x92\x01\xd1\x1c\xf9\x89\xce!t\x82\xa3:&*`\xf8U\xe1-\xcb\xb0/}\xd5\xa9`\x8e\xb9\xe9M&\xdc\xb0\xf0X+\x0eZ\xb9|g\xa9\x0bm\x135\x90\x0bj\x15\xf0\x83\x13\x14\xaf\x9cL\x1e\xe7\xcc\xce\xe4\xe7AC\x8f\xdb\xf3Hc\x8axxf\xa1\x83\xb8\x7f\x9a_x\x99\x13\xe5\x92\x90\x10\x17\x8f\xd0\x03\x01\xb0pv\xdb2\x01\xed\xe3\x8f#\xc1\xae\xa9\xdf\x03-\xb5/\xc2i\xd2\xbc9\xa5\xf1\xe5\xe5?\x80\x07\x11\x9d\xb8\x17\xec\x8b\xb9e\xc3\x839;(\xa4\x8c\xc0\x1d\x92\t\xdf\xd3\xd4\xff\xaf\xbc\xc6\x8a:\xef\xa0\x03\x18\x8a\x85=\xbc\x80Gj\xd8\\\x92\xe0z\xa4\x95\x89\xe3\x01\xa9\x9b\xbfw\x93\xc4\x97\xfa\xea\x1cs\xca\x15M\x98\x19\xach\x8e\xc5\x16m\x97\x84\x9c\xdbb\xf9_E3\xfd\xcaHag\x9d\x9ePnK\x85/\xc9T(\xe8\x13\r\x99\x87\xae\xfdr<\xb4\xef\xea\xe7\x9e\x94\xc7e@\xd8l>\xd1\xc0\xa4A\xd06\xf2\x96\xa14\xe5^\x89\xb5\xe3\x1d\xae\xf4\xffF\x87B\xdeV\xf5\xe0+\x99gE\x85\x03~\xbd\xc7\x86\x90e\xcd\x89\xdcp4W\x03>"m\xca-\x7fyCt\x1e\xff\xe2\x1e8Y\n7\x9dt\x89\xb1\xdd\x9f[M\xf5\xdf\x92\xce\xf7\xb6\xddZ|\x03\x97\xda\xccG1\xa5P8\xb3\xd4k\xc2\xc14c\x1e\n\x9e\xec\xb4\xe3q!\xf0\xa2\x92\xa5~\xcc\x8c)\xf9\xad\x8dB\xeb\xae\xe1\xba*H\xd2F\x12\x8d\xb9@\x9c\x1b\xed\x87\x8d;z\xa0}\xdf\xf9\x88\x81\xdfG\xbfa\xa99\xe1\xca5\xa2\xbdo\xbc\x93(^a\xe7\xc3\xdeo\xf0\xd3>\xbb\x89\xceM\xef\xff\x02\x03\x85\xf5\xea\xf5\x12\xbf9\xe6}\xea\x93\xf4\x1e\xb1\x8a\r\x15\x96\xd3\x15\xe5z$\x8f\x06F\x17\xe7\xe2\xeb\xe2\x14p\x1fz\x91\xddG\x9f\xb3\x16\xd9\x17\x83\x0b\xd7Y\xe3,u\x17\x84u\xd0\xa94\x00&\xb6!F?V\xbf\xc4\x14\xfboy\xa9\xb1x\xc4\xe2T\x12-\x04>&\'6\xe7\rLxt\xad\x1b\x8eU\xcb\xfc\x80p\xee\x83\x112\xaf\xf0\xd6M\x9a\x08C\x9d\x87!\xd1\xffb\xd5\x0f\xb3\xce?\xe2D\xd8\xbd\xd7\xdfA`T\xc5i\x17\xbb\x8f\xd6\xdb\x91O\xf8\xde\xd5\xddh\x8e\x0e\xfd\xa4I)\x153\xdba\xfa\x98\xbbY\xccx=V\x9d\x84\xde\x9ck\xc2\xd4\xda\xb9Bc\xf6\x83_DV\x9e\xca\x84<\xb6\xb4\xae<\xa5\x80\x8b\x0c\xeb+,\xd4hN\xecN\xbd\xa8o\xf0\xd6}\xa2P3\xcf$\xf0:\x0e\x0eX\xff1\x8dm\xf2\x17\xe3QR\x18\xde\xaf$\xd0\xef\x98\x0eG\xe8\xdd\xfb^`\x8e\xc1r\x81g\x15\\e\xdf\x8d\xc9\xe7\xc8p\x0c\xccZ\x80\xd6\xfaB\x93Y\x9a\xb5\xfe^P\'\x8c\x1e]\xcd\x08\x80`\xbd_\xddg\xf3\x89\t\xdaH|\xe5L7\x08\x0f\x85\xac\xf8\r$\\*Uuo,!\xee\xacx=\xb8\xcc2\x07\xc5^Z\xe4\x8a\xd1\x17\x98\x8ao\x15\x13\xc7\xf3(\xef\xec\xd6\x013#-uf\x08\xc1P\x90\xc6\x15\xd2:\xc1!g\x8e\xcf\xdf\x85\x9bw\x0e\x13\x91j{Y\xbf\x04\x9d\xb7\xef\xb4\x89\xa1\x95#x\xea\x9e"\x07T\x16\xa5&\x94gX\x18\xd0\xa8\xb3rxK[L&\xe2\x84+\xd4\xca\x18XI\x7f\x04\x85\xffQ\x0bC\x88Q"\xae\xc7v\x01\xe1\'V\x9ej\xf6G\xaf\x13\xb9\xb2^G<{\xe0\n\xe2\x84\xd1\xd3SW\xec\xa2\x8a\x01\xffi\t\xef\xd1\xa8\x97\xea\x82\xaa9\xa38^\xc0\xdb\xa4\x90\x9a\xae1\xd5\xa9\xbc\xe7\xdb\x86zD>O\x16\x83j\xd6h\x8c\xf9\x8c\xed!\xa7e\xaf^j\x17\xab\xeaEz\x9bw\xe8\xe2B\x81\x1b\xf0&\xf7U\x9aI\xcc\xd3\xdf;\x17\xda&\x84w\xbd\xa8`b\xbf\xa2\xff\xad\x1e<\xab\xc1\x01\xb3\xe9)go\xfa\xaf\xcc\xf4\x08\xae1VW+ga\xef\xddL\x1a^\xbe\x06k\x05\xca\xb6_\xae\x9aU\xd6P\x02\xf9\xe9\x840D\xc9\x01o\xa5_\x06iPq\x82\xc3\xaa\x16am\xb1\xf4Ba\xe7\x9f\xea\x11\xbc\xb7\xe4\x9d\xcb\xe4\xf5\xbd\xe0L\xa2\xa3O\xc6\x05\xf0\xd0h=\x07\x1b1\xa9g\x8doQ\x84\x18\xc4\xa6\xea\xdc\xa9B\xd8\xf8|\xde\x01.0\x88\xd1\xd9\xde\x16\x8fno\x1d\x80\xc6\x0e\xefTM\xdal\xb9\x83ER\x90\xea\xa0jP\x95Sf\x07\t\xff\x99\x9ad\xea\xdc\xc06\xd9n M\xdc\xfb\x91\xcd$\xb9\xa1\xbas\x8a\xc9\xb6\x19\xa4\x0f\xd6\xfd\xb7\xbe\xfd\x11\x11\xd1I\xce\x8dq\x13\xc6\x0b@_3\xf9m\x86\x01\xbev\xfd\xc8\xd5/\xd5\xa8:\xb6F\xd9\xf6_\xe7\xeb\xac\xd7\xf6\t\xbf\xf9\x15/6\xa4D\xa5e\x1cA\xf4u}\xe9\x0b\xee\xd8\x19\r\x18\\Y\x10\xb7T\x9c\xe5i\xc2\x06\x028\xbdE\xa7\xd1p\x0c\xe6\x98\xef\xec\xa0#\xf2\x9e\xbax\xa4l=`*}\xf4\xcd\xf6\x13\x15\xc1\\\xfb\x7f\xc6\xec\xa0\xa7N\x8b\x9a\xe1y\xa0\xf24\xca\xa2\x96[\xeb\xae}\x81Zd\xfc~\xffZk\x96\xd2\x15X{\xff\x15\xd0\xa63t+>X\xb0Q\x1e\xb6\xed\xe9\x83\x15}\xfe\xba\x1a#\xba K\xd67\x12^^I#8}/\xff\xa6\x10\x03\x90\x9bh\x08-\x04[\xb0\x04\x06\xb8\xeb\xd2\x98\r\xd0\xbcl\x99\x17\x15\x90\xbfn\xd4+\xe4ew\xee\xd0\xa9\xa6 \x01\x13\xc9\x9a@\xe6w>\xb3\xc3\x8b8\xea\xed\xc3\xdb\x87\xf5,\xa7%\x1a\x9f\x16\xc7\xabQBi+\xca\xa4\xc8\xa4\x8bJ33\x8a\r\xc6\xb04\xa9\x91\xf9,\x07o\xd0/a\xe3\x86\x83\xfd\xc8\x9f\x89\xcc\xe5\x93\x85\xb4\xdd,\xb9\x08\xb5\re\xa4\xde\xe6\x06\xee\x9aEX\x16\xf7)%@\x1a\xa4\xe2x\xf4\x148*\xa6\xb4I\xc8\x08>\xf8\re\xbc\xa2\xbc?\xcf\xdc&\x818\'\xcc\xf5\xae\xf6DE\xa4n\x8b\xf7\x95u\r\r\xc1M\x0b\xb3\xb2\x7f\x9e\xfbHfm\xa2C\x12f\x1e\x8d\xcc\xfew\x1dj\x99\xe5\x95\x10\x87e`\xdd\xf7v<1\x08\xb9\x00\xad-\xc5\xe3\xd8\xe0o\xc20\xfdgk\xbeEd\x8a\xc2\xe4\xf5n\x10U\x87\xa3D\xf6P\x96\xc0\x11Q\xa1\x80>kd\x86\xc7\x93\xc6\x8a\x91R\xfd\xd0\xdav\xbd\x90\x1e\x87\n\xa8\xa4\'\x8fD\'\x7f\xafV\xfc\x7f\xbe\xa34\xa0i\x931g)\xd6\xa9\xa6X\xa7\xb15\x08\xe2LAEq\x0e\xd3\x87~~\x86oT\xe4\x00\xa4\x0b\n%\xf5\x1fH\xa0X\xe2#j-\x7f\xa2}\xca\xb3\xf1W\x9e\x86[\x92 G\x11l\xe2\xf7\xb7L\xda\xca\xfb\xb9T`a\xda\xe2K\xbe\x81\xeek\xc5(wu^\xbf\xd2\x0e/P\xd3\x8di\x02\x92\xc8\x1b\x88\xf26;\xd3K4\xab\xb5\xbbQ\xc4=\xd2\x8c\xc1o\xf1\xba\xea)X\xac\x83\x95\\\x93\xf2\x07\xd3\x9c\xf0\xc0L\xd6\x9c!\xa6\xf5Vj\xae\x02\x9arN\xd2@O\x01ct1\xd3?\xb34\x950\xad(p\x9eF\xd7\xab\xf8\xaeg\rns\x14\xa7_\x0c,#TN \xab6L\xc8\xab\xde\x96}Eo\xda\xe2\xa2\x1b\xcc\xaby\x9cE\x92q\x94j\x8c\xe2h\x0e\xe8z{a\x87\xb3f\xe7\xf3%1\xdaa\xce\xa8V\xf2\xd7{~\xd8q\xd0\x97\xf3\xebE\xf4v\xf2W\xef]\xaft\xd9\xf1\rM\xd2\xee\x00s\xcd\xc5A.\x1dh\xb7a\'o\xf9\xfe\x83;\xd6-:h\xe8z\xfevb4\xbe c\xab=Y9j7\xcf\x0ekz\xb3^E\xdak#\xda\xcb\x7famx\x14j7\x87<\xef\xbc\xaa\x8a\x983\xfc\\@\xc0pJ\xa9)q\x92\xe7\x8f\x1d\xf3\x8dl\xbf(Y\xe2Y\xe6D\xe8\xbb\x88\xe8Xb\xf6\xf6\xa2to|k\x16j\x8e\xf1\xb4\xe1\xbb\xees\xc7\x93)\xe8@\xe7\x91\xccH\x0c\xc9\xbf\x86%\xe0\x99\xca\xe0\x9c\xbb\xee\x01\xf9\xf2\x80%04Ni\x00\x1b\xb6\x15\x1c\x1b\xd3S\xca\x99\xe6u\xa0\x80\xc9\x9a\xfa\xd5\nL^cr\x18\xa7:\xc4\xe4\xf5\xbb\x19\\\xcd\x86\xe9T\xc9\xfb\xd5\x05\x10\x10TV2\xbc\xbb\xcfs%\xe0\xb5\xc5\xa3\x1f\x9c\x04\xfe\x01FTt\xf6\x0f\xc0\xba\xdbX q\xd7T\xb3\xf8\x98I\r\xf3\xb7\xe6\xdf\xff\x88*\xf5\xa5\x16\x17\xf3NAvH8*P\xb3\x8fS\x95\xea;\xdc\xf4y\xdaju\xb2\xf3\x7f\x9bR\xd9\xdb\xd9 9\x0c=(\xae\xa7ucj\x0e\xb5(z\xc8w\xe1\xd4,\x12\x94\x9aH\x95\x12Ka\xf3\xf65d\x1do\xc5_\xbf\x194b\x93Z\x82\x1fA5\xd3\xd0\xa4$\xb3AD\xa7\x88\xc3`\xee\x1f\xf8\x16\xe2\x96\xa0n\xf0\x1f\xd8#\x13\xeci\x99\xca\xa6\x99\xad^\xc9\xda\xa7\x8c*\xb0\xdctW\xcc\x1dM\xd1\xce\xf7\xcd\xb1\xdf}\xadW\xbe\x1e\x08\x84\x82BV\xa7i\xe0\xccx\xb8\xc7+s>y\x99T\xe3L\x97\x17\xc6\xec\x10\x9e\x1f\xc5\x002x/j\xce\xbat-)\xba\xae)\xa0B\xe8\xfb7\xa8v\x91\x0bf\xb9u\xd0\x1a!\x98\x96<i[7\xcd\x04\xf7KR\x04\x06=0\xc3y\xff\xca\xb6\xea\xcf\x9fzfa\x0e\x00\xdam\xc8\x89\x97\xd4fi\xa0\x99\xde\xeeyjcUq\xdd\x8d\xfcV\x10<\x97\xed\x91\xf2~1\xb9)Q\xd4\xa0r4\xa8\xbf\'8\x00Xev\xbch\xb2\x92\xf2I\xb1 \xe7\xa6s\x1d\x177bE\x00ARq\x8d,!r\xfc\xb9\x88^\xf5A\x1f<\x0f2\x9d\xb9ys|\x82\xd1\xee#_ \x97RlE`\xa5\xb0\xcc\x82\x96\xfb\xfa\xfe\xc3\x03\x16d\x1c\xdb\xe2&WU\x82\x08\x99x\xb0\xf4\x07R*4l\xbb;w\xde\x8a\x8d\xd9%v\x19c\x8b\x18\xf8\xe6\xf2\x0b\xcf\xb1R\xc2\xb5X#\xc7\xea\xca\x17\xa8)\x15\x90\x0b\xb0\x08\x83\x02\xe8\xe1\\\xc1,&\x1d\xbd\x03\xd6Z\'\x8b\t\x1a\xd0\xd7\x90\xca\x9e\xb4iT\x19\x16e\x8b\xc0\x0b^\x83\xcb\xd8\xbb\x08c]\xe2\x97\x8em\x13\xc6i\xef\xdb\x99\x0bV\x98}\x04\xbc\x82\'\xacAIK\x01T\xddz\xee\xb9\x9eu\xeb\x8c\x1dgw\xaa\x03.\xf8\xe9\xd8\x8b\t\x96\x9d\x9b/\x1e\x02\x8e\x80^\x00f&O^\x00\xd3\x11\x85M\xd3U\xfc\x89mT\x81~uM\x00\xa1\xff\xfa\xede\xc9=\x85\x1f\x9c\xe9\x8c\x93\x0c\xea\x9b[\xa7\xfc`\xcbrwZ,7a\x8d{\xf6\xa8\xa8\xbbg\xd4\xd6\r\xcf\xc1\x03\xd3v%\xadz\x9eZ\x07\xaa\xe5\xb0x\xa7\x8b\x14 <_\x8c\xff\xbf\xc1g\xa2\xdcoqI\xa3\x03 \xecw\xfbb\xab\xb5\x0f\xe3U\x9e\xf0}9#\xee\xa7\x82\xd8W\x84\x0b.\xb6GF9Q\xdbb\x07\r\t\xb1\x08\x07dCv\xdaV\n\x05\xb4)\xea\xa7\xdd\xb0u\x01\x08\xf3Idf\xa7\x80"\xc6\x044\n\\\x7fz\xf6\xa9a@/-E\x8cl\xa26\xdb\xb2\xef\xca\x81\xa3\xff\x02(\xe3\x02\xfc\x11\x13[\xf7[o\xee\xbc\x13RVz\xcc\x9bBV\x1e\x14\xe8\x84FQ\xb4\xa0\xcb\xb9k7\xe4\x9c\xd6{\x92.\xd1\xa3F\xdb\xd8nW|\xf9\xf2\'\xe2\n\x03\x1e\x99\x90Z\x03+\xd4\xf5\'G\xec\x9f\xd9\rk\x1e\x91\xd8\x89m!\xf4}\xad\x0f]\xa6\x0c\xc7u\x94\xd0p$\xca\xd0\x84g;\x94N\xe0\xbf \x160(=i--\xb3\xc7\x82s~\xb3\x9d\rK\xa4\xa0\xd1}(_JR\x1a\xd2\rT\x18\xf7\xf5\xf6\xb9\xd7\x7f\x99\x19\x01t\xa2\x9b"\xe6t\rL\xa6YT\xb7UC\xa0\xf9\xaf\xf6\x8b{\xa2\xf7\xf7\xae5\x07\xb9H\x02R$[B\xb5\x95\xadK\x90.wC}\x92\xb6\xe0\xf8\xf1\x97\xcc*\xb72\xacN\x04Z\x1dlk\xea\x0bt?Sj\xb6K\x17-\xee\xe8h\xf1\xc0\xbd\xa7bWY\x1ap\xbb\t#\x83\x17M\x8b%\xa1C\xf6{D\xdc&\xc9Y8\x82\xca\xf3\xfb\xd0v\xcfm\x99\xff*\r\x84\xce\x81\x8a_\xb9v\xc0\xc3\xad\x1e\xb9\xc1"\x93\x8f/\x8f\xb6 \xab\xc1\xd0e\n\xed>\xe7\x04\xfd\xf3\x9d\x17|(Q\xa9\xd9,3\x1a\xcee\xb5\x9a\x1c\xd3\xec\x1c\xb9\x00B\x96\xd3\x9e\xf3\xb8&\xf9?i\xb8\xbf\xf6U_\xc3\xc8a\x90c\x18\x9b\xf9\xc3\xae+\x00\x7f\xa4SS\x03\\?\x14\xac\xe5\xad(\xbc\xda!\x0fO\n\xadn]\xba\x13\xe9\x15\xccq\xc6\xacq\xb5\xd0\x84U`\xf9|6\x7f\xc1\xfa\xac\xb9\xe5\xf9\x9e)\xda\xbb\xd0\xfc*\x9c\xb5\xb2\x83\x0f\xff\x84\x8e\x13\x88\xb5\x08q\xf2{b\xe9\x1b<\xd7\xa2w\x97\n\xa3AA\xa1WZ\xa2\xc9\xf8M\xc9[\xcc{\xb1\x12\xd8\xe0MLe\xae\x80\xebE\'d\xf5<k\xc4\x98qU\xe2\xb7B}\xb8<\x80\xf8\x95zo\xd7\xce\r\x89\xf8 <gX\xed87\x83\x03\xb9\x9f\xea\xb8\x80\x143\xb7<S\'V\xcc\x8bx{\x14^\xef=\\Y\x7f\x0cl\x0c\xda\xe6\xf8g\xbb\xe1S\x9d\xb9\x1f\xb3\xe7\xf5r\xf9\xc1\xe3\x91W\xf01$.#\xe9\xd6\xd7N\x95\xf4%\x01\x92\x97o\xcc\xd2\xb1\xcc \xc0\xbb\x9b\xaa\x15\x0f\xb9\xe0VORc\x06\xf3\xf6\xeeY-\x96Q\xd8ky)\x9c\xdb\x1f\xe5\xcd\xf4F\xa4W\x1d\xc0VTP\xbat\x89|\xc9\rth\xf3\x0f\xdf\xe0\xb5\xd2\x97\xa0\x05\x85\xad\xe0bO\xc3]\x9c\xda\xe6O\xd6\x81|\xe2\xeb\xd0\xc3U|\x92W/\xe7(\xf4\x86{k\xc8\xcc\xa5\xbe\xbc\x01]\xd2\x0e\xdb\x98yW9\xf4\xffP2\xef\x1d\xc9\xcc\x10\x99\x1e\xf3\x8f\x14\x1a\xca\x18\xd63\x1c\xde\x10\xe7\x0b\xe1j_\x9d\xd1.,\xee\xff\x1c{\x9f(\n-\xec\xbbs\x81\x87\xf1\xf9\xfb\x92\x92a\xab\xc2\xdf\x93\xe8\xb8\xb1\xf75s\x10\xb8;n_\xe1\xbc{\xf3&\xf41{\x1cUky\xe9\xe4\x16\xea}\xa5o\xca\x19\t&\xd2c\xc9\x9a\xaaT\xd2\x991\xf0OG\x01\x98\xb7?\xa4e\x00h\xc6\x86\xde\x15\x089\x92\xcaV\x16\x1c%\xc5t,\xc7\x9c\x82$\x87(u\x85\x1e\x0f!\x12\t\xd7\x04\xd21\xe5z\xe2$X\xe0&q\x0e\xe0\xc2\x88\xe4\x90\x04H\x97\x12\x81P\xd0\xcd\x12\xea\xbclf\xf69\xfc%\xb3*x\xd8\xb9\xd1\x05\xdf\x07\x11_\x01\x83W.\xbd\xf6\x92d\xd8\xb7\x91\x9c\xe8\xd7\xaa-\xb4W4,:,~\x815\x8d\x19BT\xc8\xd2\x8e\xe0U\xe2\xbcGE\x9d\xf8\xc1\x87kj\x07\xccN\x17\x94\xd6\xf9\x14\xe1j1\xe8\x19\xac.\xfe\r\xc3V\xbfF\x0c\x0cO\x89\x9a0\xdd\xa5\x80\xe0\x18\x84\xcb\xe1g\xf5\x07\xf2\xc5\x91\x97\x91\xed\x91\xcbY\x00\xe1\x1a\xed\xe6\x81\x12I\'\x84I\xa4@\x86\xf1\x82\xf9\xa5\xe1\x14"\x1b\x11\xe0r\x1bQ\xcd\x16\xf3\xe9\xf91`\xd948\x84\x9d\xde\xc0\xdb!\xcb\xd7F\xdc\xf7:vI\xb2\x8c\xf9\x93\xd0\xa2\xe2\xa3azI\xf1V\xc3\x9d\x9c\x93\xc8\xea\xc8\x10|\x9eM\xca5\x9a\x9d\xd1\xfezSyu]\xb4\xbd\xa8l\x02\xfe\xb3\xdfg\xab\x97\xd1kF\x02\x15\xb6\x00\x883\xc6\x91\xf8i\x1f8\x03\xc8yO\xa5\xc3[\x02\xf2Z\x9eN\xd4\xf6\xc1\x8fP\xed\xe30)\xae~\x88\x88\xd4\x7fX\x1c\x08\xcc=#g\xf1U\xd5PO\xc5\xd8r\xd9\x19\x8c\xa5\xe8W=\xec\x9c\x0f\xddf`M\x94xe\xb5dk/lJ\x93]\xaf\x03q\xabVnT\xc1\xe4\xf7m\xb4\xc9\xe0\\,it\x0b\x15\xcf/J\x0e\xcfD\xcb\x17\x81\xf0\x93zJ\x16Z\x18pXs\xca\r\x12\xacO%|a\x15\xa4\xffcmN\xef\x00i\'\xd3\xe7\xa4\x8a\xe9\xcf7A\xc6\x80VZ\xc9\xe9n\x87#\x9f\xc6\x8f6\x03y\xbdc\xc9R\x9c&\xaa\xec*\xe7\xe05"<\x93=\x04\xa4i\xd5\xa0\xc1&L\xa0\xf5\xf9?\x9d\xf2\xe1T;\xe5U\xd1t\xd5\xc1\xfdu\x15\xbd\x18^\xdb\xa6\x84\xcf\xa4\xb3\xa9\xa0\x9e\xd12\xb4\xecH\x13\xf8\xf0\xdc~l\xad\xe8\x08\xcc\x18k\xa3\xbc6Z\xb7!\xfbI$\xb1\xf0\x02\xb5\xd6\xaf\xa4z<\xa0\x0b(\x0e\x891\xcd\xad"z\x16\x94\xb5\xd2\x1f\x7f\xda\x05\xe0\x0b&\xd6F\xd8\xcf\xf6;V\xd7\xd9\xe27\xc3\xd6L\x16G\xf3\x07\x12\xa0p\x86\xe2\x7f \n@\x1d\xca\xeb\xaav\xe5\xe0K\x01\x17\xdcR\xa6L\xe3a\xdeKX\xd7\xb6\xc8\xd7\x06\xaf\xc7I\xe6:Ro;J?\xb0\xc8\xa6P\x11\x9cHWF\x96C\xfam}b\xa1cP\xdc\xbd\xb8\xbc\x0e\x91\t\xea\x19\x85\xc6P4"\xee\xbc\x18m\xee\x1c<\xb9$\x1d\xf0\r"\xb1[\x04\xd6\x1ak{/\xf9q\xe1\x11\x9b\xa8oY\xf6J\x94\t\xb8\xed\xf6\xdf\xa1\x05\xf2D%\xd1S\xa1H\xac\xac\xa0Q\x10\xd3C\xfc\xb7;3\xb2\x1bt\xb4\x0f-\xf5$\xcc\xf1\x08\x05\x14nXpR\x97\xdf\x84f{\xf4\x95\x9c\xd3 \x9b4\xb8r\x9e\xb2=\x132\xb0\x82\xf4\xd4\xef\xbfk\x92\x18>\x08\x8a\x95\xff\x98\xb7+\x88\x11N\xab\xaafj\x1b\x8a?\xf6[\xaf3\xc5\x04\xd2\xe4\x012\x9f]Qn\xdb,\xc2\x98\x8d\xca+\xe0\xf2\xf5.\x87i\x1b(\xa6W6\x0f$\x98\xab$\xbf\xe8\x0fH\x0b\x88\xa0\xd2r<\xe7W\t\xd0>\xcc\xa3Ro\xde\xdd<\x92\xc2\xf4\x95\xde\x13\xb8\xb2,a\x93\x98\xeb\xe1\x11\xac`\xefss\xa0\x08i]\xfa\xa4{]O\xa4G\xb9_\xf2\xa7G\x14\xa8Mtjn\xf0 \x9a\xd1\xec\x126\xa9\\\xc4\x84\xc4a\xae\xb2#\xb2<\x0e\xe2`5\x08-C<\xce\xf0e\x1a\xe4_W(\xa0\x81+k\xa7\x16m\xf0f\xb2\x8f\x1f\xe0W?&m\xafW\xbf>\x80r\xfa\xe2;\x988\x97\xcf\xact}\xe8:\x06\xa7\x01\x02p@"\x99hA\x1c\xcc\x8dM\xedU\xb0I<\x90~8\xb5\xe5\x05\x1a{\xa2\x16\xa5\xce\x19\xe8\xaac1\n?]\xda\xad\xab(H\xd2\x80\x0c\ry\xacz\xc3R\xab\xf5\xb1Ek\xba>\xf7s\xabYi\xc0\x02&\xa6C\xbe5\x07\xbe\xcaZ\x97\xee\xd3f\x98\xfcbeV\xe24\x0c\x0eC2\x98)\xdb\xfc\xe9\x8d\xb7\x86\xfa\xa9\xe4\x98\xdd\x8b\xe7e-\xf4\x82\xd2\x07\xd4\xe84\x8e\x922x\xc4*\xd9\xeep\x90\x82\x08P#\xbc!\xd0\xacnC7\xdf\xe8O\xcb\xf4\x15:\x87\xc9;\xf0?\xb7\xce8\x07oEl\xff-\x92\'\x8c.r\x03\x14\xb0\xac\r\x0c\xb5\xe7\x084\xf0>\xd7\xebi\xfdDr\xb3\x8c\xa5\xfc\xd2\xd9n\x95\x14\xe5\xdc\x89<\xe5\xb5J3\xd4\xf3#\x89\x803{\t^\xd1\xcf\xda\xd3\xce8\xd4ep\x7f!\x7f\x1b\xa9&\xf6~\xbb\x87\x16\xaftJ\x9e L;\xb2\xa2A\xf6\xdf(&\x9f\xe8jj \xff\'\x0e\x7f6N\x04\xd07!\xd9[\x83)\x90I\xa2\x95G\x18:\x8b\x97\xd5\xd9\x81\x80\xca\xe0e\xc0\xfcI\xd9/\xad\xec\x7f\nz\xb4S\xf7&o\xc9\xfb\xd6\xa8\xe97\xa0\xb1\xd1`\xd0nW\x87\x11-\xea\xde\x88\xc4ll\x1e@\xd6\x1b\x8c[\xc1\xfa\xe4"\xcc\xe9Hm93\xcfG\x0f\x9a\xb1n\xd1m\xe0K\xf6\xd7y\xacb\xe3u\xb2`-\x8euU\x1c\x1c\x18Y\xc2\xec(\xb1\x84\xb9\xd4;\xe4mC_.\xefB\xb2q|\xd0\xb1\xf5\xbd\xe7\xbc>\x05\xab\x98\x94\xca}\\\xd6=A\xa3M\xda\x15\xdf\\\xe24HP\xc3\x16\xfcG#\xc6b3\x15\x9f\x9d\xa0v\xd5\xa4+\xbeb&#\x9b\xdc\xa6\xd7\x9ef\xbbAj\xd9\xe4 \xc7\xec\xcf\x8c\xe2\x04\xa4\xcf\xd5$\x817\x01~\x14\x0bTH\xac\xf3 \x13&j\x12\xce\xc7X\xd6mG7Z\xa4,*\xb8\xb9\xb1U\xb7\xa5\x0f\x15\xf3F\xd0\xc8\xe2\xb4>\xa4\x07\xce`{\xcb\xbb\xac\xd5md\xe4\xa2\t\xcb`\xa4k\xad\xe7\xd4^\xca4\xdf<\xa7\xd9\xf3*&L\xe4A0\xda\x9b\x93\x10&\xb8\xe4\xa5y\x9e`\x16\xac\xe6R[Fr2\xbb\xe1\'ZBG\x06$\xbc\x1d(\xbd|\x0eD\xef\x10\x93F2\x08\x02xU\x94P\x98\x14\xf1\x07WF\xe6\xc6*\xf3\x91\xbal\xa0{\xb3\xb6]\xf5\xbaE{=Y\x06\xa60\x92\xce\x8a\xf7\x15t\xbe?\xb3\\\xeb\xe0u\xec\x93\x10\xa3\xb1\x9f4k\xf9v\x15\x9b\xcb+\x990\xd5\xd4\x16\xe6\xe9M5\x1a@R\xfc\xfa\x83\xa3\x1cR\xe6W\xb2\xbapTIc\xc0\xfc\xda\xed\x88\xb8\xda\xb2\x86T\xc2\xc0\x18\xd0\x7f\xac\xfcI\x05\xde\x98MI\xe7\xf4\xa4w\t\x93\xe0\x93\x1b\xac\xb0\x1d\xf0\x13\x03\xa79<\xd9P\x9a\xa0\x19\xf7\xa5\x9c\x91\xba}\n\xa2\xce\x1e\x8d\xe5\x1a\x7f\x18\n\x881J}\xfcj#*\xb4\xca\xd3\x98\xe2\xef\xca\xcd\xcev\x03\x9fh\xd4\xb8\xc5\x93<\x8d\xdcq\x93V\x0cYt\xec\x1b\x87\x84\x9c\xc3\x80\x80-y$\x9a\xac@J\xa1\x90/\x9fCx\xa5\x183:\x84\x00\x83/\x83\xcckD5l11@8\xbf\x98s\xa0\xf3\xb9\xd3\xe5\xa0npb\xfao\xbd[j\xa7\xa0\xfa\x9cK\x81{\x9d\xc4\x0eK,K\x9a\xce\x85\xe4\x1d\xaa\xa0n\xd4\xd7fm\xd0\xf7\xdc\xa4\x92\x92F\x8c\xcb\x12C\x921\xf5\xf8\x08n\xe7\xc3\x93\xc6?\xc9\xcd\xbc\r\'\xf0\xbed\xa1\xd68\x93\xfd$\x8e,\xef\xe4\xec)\xe3f\x8ef\x0e\xd08~-N\x91\xe4\xfctq\xc7\x90~8E\x81\xc4\x9e\x9f&\xd0hZ\x9d\x9el\xd8\xe8K\x1b!\xc3')
|
1
|
+
from . import bot
|
2
|
+
|
3
|
+
from telebot import types
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.panel.database import db
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
#print("dddd",text)
|
12
|
+
uuid = text.split()[1].split("_")[1] if len(text.split()) > 1 else None
|
13
|
+
if uuid:
|
14
|
+
if uuid==hconfig(ConfigEnum.admin_secret):
|
15
|
+
start_admin(message)
|
16
|
+
return
|
17
|
+
bot.reply_to(message, "error")
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
def start_admin(message):
|
23
|
+
|
24
|
+
bot.reply_to(message,"Welcome to admin bot. Choose your action",reply_markup=admin_keyboard_main())
|
25
|
+
|
26
|
+
def admin_hash():
|
27
|
+
return hash(hconfig(ConfigEnum.admin_secret))%100000
|
28
|
+
|
29
|
+
|
30
|
+
def admin_keyboard_main():
|
31
|
+
|
32
|
+
return types.InlineKeyboardMarkup(keyboard=[[
|
33
|
+
types.InlineKeyboardButton(
|
34
|
+
text="Create Package",
|
35
|
+
callback_data=f'{admin_hash()}create_package'
|
36
|
+
)
|
37
|
+
]
|
38
|
+
]
|
39
|
+
)
|
40
|
+
|
41
|
+
def admin_keyboard_gig(old_action):
|
42
|
+
def keyboard(gig):
|
43
|
+
return types.InlineKeyboardButton(
|
44
|
+
text=f"{gig} GB",
|
45
|
+
callback_data=f"{old_action} {gig}"
|
46
|
+
)
|
47
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
48
|
+
[keyboard(i) for i in range(1,5)] ,
|
49
|
+
[keyboard(5*i) for i in range(1,5)],
|
50
|
+
[keyboard(50*i) for i in range(1,5)]
|
51
|
+
]
|
52
|
+
)
|
53
|
+
def admin_keyboard_days(old_action):
|
54
|
+
def keyboard(days):
|
55
|
+
return types.InlineKeyboardButton(
|
56
|
+
text=f"{days}",
|
57
|
+
callback_data=f"{old_action} {days}"
|
58
|
+
)
|
59
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
60
|
+
[keyboard(i) for i in range(1,16,3)] ,
|
61
|
+
[keyboard(30*i) for i in range(1,5)]
|
62
|
+
]
|
63
|
+
)
|
64
|
+
def admin_keyboard_count(old_action):
|
65
|
+
def keyboard(count):
|
66
|
+
return types.InlineKeyboardButton(
|
67
|
+
text=f"{count}",
|
68
|
+
callback_data=f"{old_action} {count}"
|
69
|
+
)
|
70
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
71
|
+
[keyboard(i) for i in range(1,5)] ,
|
72
|
+
[keyboard(i*5) for i in range(1,5)],
|
73
|
+
[keyboard(i*50) for i in range(1,5)]
|
74
|
+
]
|
75
|
+
)
|
76
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith(f'{admin_hash()}create_package'))
|
77
|
+
def create_package(call): # <- passes a CallbackQuery type object to your function
|
78
|
+
from . import Usage
|
79
|
+
try:
|
80
|
+
splt=call.data.split(" ")
|
81
|
+
if len(splt)==1:
|
82
|
+
new_text="package size? حجم بسته؟"
|
83
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_gig(call.data))
|
84
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
85
|
+
elif len(splt)==2:
|
86
|
+
new_text="package days? چند روز؟"
|
87
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_days(call.data))
|
88
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
89
|
+
elif len(splt)==3:
|
90
|
+
new_text="How many? چه تعداد؟"
|
91
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_count(call.data))
|
92
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
93
|
+
elif len(splt)==4:
|
94
|
+
gig=int(splt[1])
|
95
|
+
days=int(splt[2])
|
96
|
+
count=int(splt[3])
|
97
|
+
new_text="Wait... لطفا صبر کنید"
|
98
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=None)
|
99
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
100
|
+
for i in range(1,count+1):
|
101
|
+
user=User(package_days=days,usage_limit_GB=gig,name=f"auto {i} {datetime.date.today()}")
|
102
|
+
db.session.add(user)
|
103
|
+
db.session.commit()
|
104
|
+
# bot.send_message(call.message.chat.id,f"Days: {days} Limit: {gig}GB #{i}\n\n https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/",reply_markup=Usage.user_keyboard(user.uuid))
|
105
|
+
bot.send_message(call.message.chat.id,Usage.get_usage_msg(user.uuid),reply_markup=Usage.user_keyboard(user.uuid))
|
106
|
+
|
107
|
+
# db.session.commit()
|
108
|
+
new_text="Finished..."
|
109
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
110
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
111
|
+
hiddify.quick_apply_users()
|
112
|
+
|
113
|
+
except Exception as e:
|
114
|
+
print (e)
|
115
|
+
# import traceback
|
116
|
+
# traceback.print_stack()
|
117
|
+
# new_text=f"Error {e}"
|
118
|
+
# bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
119
|
+
# bot.answer_callback_query(call.id,cache_time =1)
|
120
|
+
|
4
121
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
122
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,125 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xd2\x13\x00\x00\x12\t\x04\x006\x8c\xf8\xae\x96\xaf\x1c\xd9\xba\x01n4\xe7\xfb\x86\xe2\x00\x00\x00\x00\x00\x00\x00\x00M\x1a\x9cA\xd9\xbb/\x81x\xe8\xe6\x95[\xce\x95\x8e\xac\x80\xed\x05\xa8o`v\xd9!\xf5\xaf\xb3\x1a\xeef\xbc\x84K\'\xe3\xc0?\xfbiyzD\x02\xf6\xb3\xa1\x7f\x92\xce\xe4\xa7\x847\xba\x14KG\x86\xdeD&-\xa1\xd1\xadQ\x9e\x85\xe1i\x9e\x98+\x83\xd8\xb36\xb0\x87\x95<\x1bH*\xf7\x97y\xa8\xd5Wl\x14\x8e|D\x12\xf7A\xe8^\x97\xaf\xbe\x9a\x11Fa=L\xdeL\rg\xe2\x1a}\xc0\xb6\x1b\xfc\x7f{`m\xec\xf7W\x81`\xc1\xc3\xe8\xde\xeeT\xdf_x\x9dr\xbd!z2\x00S\x98\xf0g\xa6\xb4g\x1f\xb9lhX\xf8\x16\x84nk\xec\x1a(\xda\xf3\\?\xf0\x96\xc1\x8dC\t\xd7j\x1d\xe3\x06\xf3I\xff\x0b\xb4\xcez\xa6\x83\xdc\xc3)\x1b\xd0\x80S];\x11(O\xed\xd4S\x8c,\xce\xf0\xed\xa5a\xe5\x8c\r\x14\xc4\xce[\xac\xde\xc7\xf9s+\'\x9a\xf6\xe6\xbfX\xa7\xfcXQ\xafb\xc3\xf9\xd8\x11pZ\x89K\xce\x12\xa3\xf2\xb3\xf3z\x1a\x89SQ\xec\xed\xe6\x98/\xa8\x90wQ\xb62id\x06\xd6\xaeo\xf2k\xf4v\xb2V\x80\xde\xd9\x91\xc29\x8f\x16]02E|\xd8C \xc3\xb6\tw\x19\xad\xc5{.n\xdd\x0en\xb4\xc4\xc0\xb3\x10\xbd\x8e\x97\xde0\x1f9\xc0\xd22\xdb\xb3\xfe\xf8\x19^\x9e\xc5\x16c\xa93zp /\xd0\xeb\x98n\n\xc2j\x96\xa4\xcb\x8b\x8d\x81O\x07\xb5\xf1\x94P\x92\xb6\xe9\x82\xc4I`\xea6\xc7\x08]\x02\xbbFM\xce\xcfFf9\xe9M\x84\x0f!\xefI-\xd3\x98eu\'=]*o\x1b\xc2\xc9\x1c\xb7\x90z\xf0z\xf2\xe0\xcc\xb1\x95\xa1\x90\xab\x90,\x83\x05UzE\x8cWF=\x96\xb2\x9e\xc3r\x0c\xffT\xfemy,\xcd\x89\x9cg\x1f\xbc\x02\x10\x87\x01\x89\x81\xad\xff\x13\xeb\xee\xb1\x98cyt\x8b\xceb\x18\xc6\xd1T\x07\xa6M\xe1\xc6tT/}\xf2[U\x1fu\xa6\x8dOTvRS\xc3^\xde\xc40\x0f/34\xd7\xf4\x19\xb7\xd9\x98\x0c\x94\x10\x92O\xda\xf7e\xe9\xb3\x93\x16\xa80\xcf\xb8\xdd\xbc\xbb\xa5\x9ci&\xc2\xfb7\xb5*\xaf*p\xd8\x16\xfa\xd3\xec\x8d\x04\x17\x1c\x0e\xa1\x94\xf1\xb0\xd9\xdch\xeb<77\x95\xa3y\xf4\x04/t\xf0?Q#k\xd1\xa88\x06d\x96\xf8\xbe\xd2\xa5\t<l\xa5\x06J\xcd\xb4z\x03O\xc80\xb3uh\x99\x9e\xb7\x0f\xe4{\xedo\x9b[\x85h\xb2f\xd4p\xb8\x98ub\x9f\xafa\x9b\xf5\xcf\x99H\xa6\x19\xc0 \xf8\xa7\\\xf25\x10\xe0wyI4\x07\x08\x8ep\xce\x16@\xach\xa7\x05\xe8\x10\xfaCj\xed=\xb8\xcdrA\x03\xee4\x8a6\xe7q\xb6\x1cak\xdb\xdd\x8e"\xd4Zy\x0f$\xa9\xa6\x14O\xackr\xeb\xf5V.\x15B\xa6?\xc5\xdcXi\xf5\xf6,}\x0f&\x13\xbb\xaa/}.7\xe7\xf58\x991f\x01M\x92\xed\x1b\xf2\xe3\x9fn\xf5;\xf8\xdc\x80\xe2\x907\xbe\x9f\x085E\xaa\x93h\x1b\xd5R\xa5\xe0\xf9\x15\xa5\xfe\xb0lj\xb6\x0f&\x94\x80\xba$\x8e\xed\xa6\xceQ\x00\x99\x07e/vj\xfb\xfc\xa9\xd4M\xfeH\xdc\x8b\xdcS\xf2A\x87\xbe\x9b\xba_\xd6\x86\x84L\xf7\x01\x95l\xe6\xdb\xaa|\xe4w\xc1\xa5\xca3\x98P\x93\xeb6\x1f\xcb\xea\x08\xd3\xf5\xcerzl\xde^\x80\x9e)\xb1\xe7\xbd\xba\x92\xe3\x89\xebG\xe62\xceq\x01\xfc\x1e/\x1adZ\x9f\xaa\x18\x94\xf9\x91\xb6B\x06f\xff\xad\xa3\x19\xabL\xe3\xad\x87\xd7\x83\x97\xbc\x7f\xe8\x87L[\x81\x1cn\xcd\x92JC]\xc9\xfat\x89 ,\x14G\xa7\x8e\xa9+>2\xbc\xdf\xc0N\xe2\x88\x92T\x99\xac\xaf\xeej0V\xe0K\xd1S\x11D\xf7\xd3\x06\xe4\x8f\xba\x97\xac}\n\xc5I\xac\xa7!\x01\xfa6a\xc5\x88\'z\x8e\x14\xba]\xe5\xabnM\xe5\x95\xc7\\\xe1\xdc\x0e\x06\x16\xa1\x7f(\xd2M;\xbf\x12\x0c\xaf\x08\xd4J\x90\xbb^9lE\xbcq>\x13\xa61Kat\xbe\xd8\xae\x1b\xb12q\'\xe8\xf9\x9d\x08\xc8W2O\xbd_\xfbko\x90\xdeMZ\xf9\xf4\x0f\xb7\x1e\x9b\xee\xfa\x94\x95h\x81\xc4C\xa1\x07\x03#\x9c\x95\xfb\xbf\n\xb7\xa6}E\x1d\x96f\xf5V\x96z\xfb\xc2\x89\xfe\x8a\xd9\x8bH\xae\x10\xd5/\xd8kx\xef\xf6\xe5\xf8\xd1\x9d\t\xa0\x93\xbfI`\xcf\xe9\x84Z\x9cu\xba\x18 y\x80\xd7\x1e\xfbo\xb2\xee\x86\x7f-\xf7\xbcQvm\xa45\xf3\xd1\n\x87\x9f\xbd8\xf3\x91\x14\x0eS\xd3\x14U\x11}\x1c\xe6\x1d\xf4\x01V\x83c\xde\x8f\xdc\x10\x9c;\x8f\x883\xe1\x06V\x14\x9c\xf0\xeaf,\x19"\xfd%\x19\x9a\x03\x02B\xbf0\xe0!\xcbzx\xf5\xe4\x05\xd208\xfa\x8f~\xc1\x19\x9a\xae\xf5\xbc!\x8d\xe9bMGO\xe3Wz\xb35\x8d?+\x92\xfcs\x1c\x87\x9c9\x85e\xe5\xf2x\xa4\xa2|Z\xecE\xfeI\xd5\x89\xe8n\\\x8f\\\xa0X\xc6S\xee\xc6\x1a7\xa9\x8e\xd1\xed\xbaG\x88\xdbqM0x\xa4&\x94\xd0)iqv>9\xa8\x9aIi\x10\xf0\x06)\x88\xe3iv\xa3\xf4\xd7\xd8\x8c\xf1\xbaB\xf3~\xdb\xb2\xa7\n,F\xe2\xc8F.\x18b\x02\xff\x9f\xcd\x11\xd3:\xc7Z\xac\xc3)\xd2nS\x81yl`P?\x10^s\xe09\x14\xa2\x02\x16=\x0b4\xd4\xaa\x0e\xc4)\xec~\x1f\x08}\xbb\x8f\xc6\xedN\x9e\xc6\xf2\x1eD\xb6E\xef\xc2\xe7_h\xd4\x80\x96\x833\x1b\x82\xe9\xe6\x13\xd0t\x04\x07bfaQ\x07G\x1d\xf4&\x04z\x90\xcd}P]V_I\x16G#\\aJaEv\x03\x0b\xc8\xc9V\n\x0f\x98\xe1\x95YMM\xc75[g/\xec\xd0\xc5@\x92\x15\x8c/}\xe5}\xdcLb\xa4\xbe\x0f\xa2\xcb\xb2\xbe:?\x97\x1eZ\xbd\xd9,BK\xa8\xc0\r\x91\x1do\xdd\xc9\x05\xcf\xaap\x00\xd8\x83W\xe7U\xba0i?E\x7f-\xd9|\xfd\xf0\xf1"4\x99\xa4)\x91v\x1d\x1a*\xb4\x01\x82X3\xa5\x00,\x02\xee\x84\xe7O\x06\xbb+\xf9\xca$2\xa29\x8a\xa0H\xfaLi\xaf\x84Q\x85\x8a8b\x06I\'"\x1d\xcb\xabB\x01N\xc2\x0c]s{\x9f\xe7~\x021{\x0f%\x18\xc3]2&\xe6\xfe\x1d\x99C\xccCW]\xd6\x9f\x19\xed\x88D\xed\xe9\x17M\xda20FY\xef\xc9\x08\xec;\xbb\x8c\xca\x87\xb7\xda\xcc\x8dj\xf0 \xf56\x84\x95\x99\xf1\xe4\x15Ds\x82\xb6\xf5\x12\xb2\xc7\xa3\x04(\xd5\xb2\x8ay\\\xbc\xd97c\x17\x90\x18W\x14\xe7\xec=f\xb2t$\x80\xd0S\xbf\x95\x85\xa1\x11\x81\xbf\xb3\xcb\x0c\x93\x89\x8e\xae\x87\xae\xa9\xae\x81\xacb^\xd5\x18Gon\xf3\x01\xf9"\x9e\x0c\xc5\xf3B~>\xb11\x82\x80\x91\x99\xfc\x1c\r\xc9b\x90\x84\x7f\xf0\x0cD.\x9c\xa0Q\xe4Z\x03\xec6\xa2{\x96mS9^L\xe7\xdd\xac\xdcGb\x94\x92\xab\xf70\x93\x06y\xe1\xab!a\xed\x89V\xf3W\xe3I&\xa5?\xc5\x13A\xb7\xf9zA\xcf-\xe7b\t[&\xb8\xecI&\xfe\xed\xbd\x947f\x8e\xe9\xe3\xa5?\xac\xb3.\xe3\x16\xa5\x1e\xb11\xa2\xc0A\xce\x9e\xa9R\x89\x0f\xcd\x11\x04\xab\xaa\xf1gro\x1b\xb2Y\xb3\xe7G\xc8t\xae<-\xe0\xc6\xae\x82Ba\xd9\x17P\x86U8Gq\x8e\x84\xb4\n\nVo.\x1eJ\xf3O\x08\xb0\xf75\xb9Z\xe1s\x89\xce\x98SZ\x985\xc9\xd3\x0b\xbe\x15\x11\xc8C\xb4\xa23\xb797N*\xea\xed\xacga\x8cl%D\x18\tFt\x1f\xa1!B\xcf\r\xf3\xa5\xd8\xab\xc1\xba\x02n\xcd\x05\\\x07\xcc3\xc6vI\xf9H\x017\xd3\x8f\xd5\xe6\xd2\xe8\x1df\x7f\x8b\xb3Wi\xbc\xaaf\xd4\xa5e\x93\xcb\t6\xa9\xc4\xf5\xa3\xeb$\x94:\xd9\xa3\x88c\x98n\xb2\x89\x12\xc6\xb9\xf8\x16pE[.\x9cT\xbb\x1b\x92|rq\xaa\xe1\xf0\\\x1bv\xdb<a\xe3\x9b\xbd\x02\xf80\x89i4\xee\x97\xdd/NE\x8d\xe6\x0eH\x15r\xfa*\xa2\x8d\xc5E\xe8\x02\xd3\xdfX\xcfY\xe4(Z\xbb\xbb\xdf`\xbd\xde\x0f7\xfe\x01_M\xef\x17\xea\xd1\xa0\xc9\xe4\xc4:7=\xb3\x0e\xe7\xb3\xfd\x98\xa4M!\xb2\xd6\xb9\x92\xe5d\xb2G)F\xf3\xcf\x01\xdc\xa5\x81\x15ETS+\xa2\xd6\x9f\x91Q5Y\x8fM\xc0]\xf7\x89\xa2_\xd9\xfb\x80F\x18\xe7\xcfY\xb6\xb7\x01\x99\xda\xc7\xc7\xd6}\xfa>\xe2\xa2\xcd\xecFF\xf5\xb2X\xfci\xab\xf8\x02\x0e\xc9\xdd\xf7\xbaWf\xe9\xf7H}\xc7\x82\x18\x8fy\xe4\xee\x91]\xab\x87\xc7\xc3\x8e6Qf\x9f(\x129\x13\x85K\xa5V\x97\xa1\xaex\xf7x\xba\xdb\xf3\xb0\'\xed\x1a0\xf1py\xa1vN\xa7;[\x97guM\xfb/\xf1<=\x8c\xa8=\xaf~\x96\rY0\x11\x85\x92\x89\xd0\xe8\xc5\x93\xa4\xbb(\xf1\x0b\x0c\xf5\xdf0\x94\x9a\xc3\x84\x91\xca"\x01\x1a\xcf\x13\x02\xe9v\x9b\xecS\x04\xd3\xaf\xa1S\xb2\xde\xd3\xee\xd5\xb3^\xf7.owD\x18\x9f\xadc]DQ\xf9\x14 \x14c\x89%\xa8\xe2\xfd\x02@\xdf\xees\x0b\xdd\xbdv[\x91\x13\xc5\r}~F;\xc5k\x07\xdb\xdd\xd6\xc9\xe8\xcd0B%G\xd0e\xa2?|\xc0\xb3\x18\xa6\xef3?\xe5r\x8a^2\xe1M\x06\xd1\xdc\xe8Z\xcag[\xaaf\xc5\xc0\xbehpX\x0c\x11\xf3<~$\x14\xb7v&\xe62)}[\xd5R\x19\xfbzN;\xd5\xa0\xaa_\xb4\xb7W.\xa9b\xfb\xa0\xe3\xa9\xf5\x8b\x12}\x1e\x02\x15klAv\xa9\xe1\x07\x00\xd0\x8c6\x16\xa3\x88\xb8\xe4\x01\x93g\xd3\xc5C\xa9\xf6{oun%U*\xbc\tq\xa0\xd4\xf4=]s/\xaf\xb7\xe5\xfcK\x98\xb7K\x97v\x07\xbf\xdd}\xc3\xd4\xe7V_\xacEW[WZ\xdb\xd0J\xb6\xb2m@\x17a\x93(!\x07\xb9m\xc8Z\x95\x0e\xe2\xfa\xbe\xa2\xea7!av\xdb\xd3)\xbb\xe0\xee1W:S\x1cL#Y\n\xeaN!\x06\xea\n,ix/\xa0\x07&Xv\xde\xc8\xac\x1b\x8e\xb8\xe0\xec\x1ai\xe2\x02\xeaC\xc6\xff\x9e\x99E\xfb\x9d\xd4W\xcav\x04#:\xb1\tA<\xad!\xcb\xb62<\x88;M}\xcc\x88b)\x07;\x1d\x18n\x16"\x86rBYS\xb7 \x16w \xacT\x99\xb3\x97\x12\xe4BQ\\Up(\x94\x19O\x0f\xc6N\xbcE9"\xb4\xb5\xba3P\xc0\xac\xbb\x8626Z\xb9\x1b!qG\xf0\xe1\x9c-\xe2\xf7i\xcff]\x85J\xb2\x12\x1e\x89\x0c\x81\x085}l\xe6\x93!\xbf\xe9\xc8\x1a\x00\xd9\x1cX\xe9\x85}\'\x00\x1c\xa8\xe4\x81B\xc7\x9d{\':\xe4\xc2Y\xed\x88\xcf\xe0%\xb4{\xa2N\xd1\xa8\xbf\xfaf\xdcf\x06Y+\xc8\x16\xe1HB\x9dMek\xf1\x90\x04\x92\xb8\xecks\x8e\xbc\x9e\xb3\xc7\n|\x80\x1a\xd7\xad\xb6\xb83\xd9\xa2\xfcY)\re\x83wc\xf6HM\x11\xab\xdd\x98\xbbS\xfe\xf4\xdf\xba2~\x14)\xe5\xbb\x9b\xe8o\t\xc5\xb1\tt\xf1Pw6\xa6r\xc5\xee\x04\xf1\xfeV\x16\xc4\xb2\x10l^\xd8\xf8\xac\x95\xa0"\xe2\x8e\x14B\x1eKf\xc1\xdd\x16x,\x86Ma0\x03O\xe9\xbdP\x8d\xc6x\xff\x8b\x8b\nD\xd8\xd89o\xee\xfe\xab\x178e\xde\x1e]\xf8\x19 v\xd1\xc0[\xa20E\xebr~\xc0\xb6\x8d\x16\xe5X\x96\x92\x17\xb8\xb5\xb7Z\xbc\xf1\xc5\xd8\xd8\x01\x80\x19\x89\xffJ\xc4\xb0E\x16\xce\rhP 1xP\xe3\x83\xcb\xe7E\x1a\xf8\xc76s\xd0U\xe6W\x87\x03\x08\x11\xf2\x1d\x99!\x95H\x0c7Z>\xcbQ^\xdf\xbaH{Jk\xac\xd3\xc6I\x8c \xba:\xe0\n&\xf6\x0c\x80B\x8aG\xa8\xee\xaf6D^C\'?e\xb6\xc1\xeb_\x8d\xa5\xda\xfc\xe8R<\xdf\xb6\xd3\xe0\x17\xda\x0bw\x9d\xcbJ?\xe6M8\xde\xf1T{\xe3\xe7;\xa7\x859^\xdfQ\xb4\xf9\x06\x1b\xae\x05(\x98\xdc=l\xc4\xb3Y&\\)\xbck\x8e\xe0\xa5\x19\xa7\x87\xea\x05.\xe4\xaeh1\xd53\x0e\x88\xb1\x02\x85\x7f\xbb\x0f\x7f\xd7\x18q+\xd4(\x8e\x151\x94t_\xe4:\xe3\x86\xb0d\xbd,;)\x00\xec\xf1\x08`=\xc5\xfdq\x16\xa5\xde\xfa\xb3\xbf\xef\x15\r\xa22\xf7L\xfe\xe2pC2\xa6\xb7"&J\x87p\x89\x8a\x11\x05\xd2\x90\x83\xd4\x11B\x19\xb1\x03;\xb9{z\x15\xdd\xb9\x91\x86i\xcek\xa4\xe8U\xbf\x11\xa8G\x89\xce\xd1_v\xf4\xfb\r\xa1{\xcd&\xde{L\\\xd8\x01=A\xeas\xf63P\xad\xa5\\\xbc\x830p\xdf\xa7\xe7I\xbe\xdc\x9c\xe9\xf37\xba.m\xd05\xb8F\xb1v\r|\xf5l\xe56\x1d9\x8cV\xa9\xe1\xea\x9c\'\xc7S*\xf0\xf9\xafDiH\x14\xe0\xbb\xa8\x91b^\x16\x8a(\xe1w&\xa9>2l\xc5r\xf58\xe2\xac\xe0c&\xdd\xa3\\\xd9-\x05R\x05\xe6\x04\xb7\x06\xc9wZ\x99t\x92\xa3\xbdj\xf1\xc0\x92\xb3U\xc1\tUw&ko\xa8n\xf9\xb32 \xf7g\xad\xb6\xf7\xa8\x91d\xf6\x83\x90\xcc\xc8H\xb5<\xd7\xd3H8u\x9d\xcc\x81q\x98\x9c\x01Z\xed\x8d\xad\x1b\xa6|\x08\xaf\x7f2\xd5\xd1\x07\xe5Ag\x0f\xf8\x07\x1d\xa9D\xa4w\xde\xf0\x1d/\xb4\xb6\x8eu\xbd\xb2<c\x9f\xfe\xb6\x80JG\x08<\x17\xf5\x9f\xeb\xc3\xdd:\xb3\xb1i\xd1\xe6\xc8\x056\xd7\x0c\xc5\xd0\xed\xba\xdd_\xe7\x1e\x93\xff\xce\xd7"\xc1\xff\x84$F2\xb8\x1a\x0b\xdfV\xc4sb\xde%\xe7\xb5u\xd73\x91[\xff\xdfN\r\x1cV\xbc\xb6\xa8\xa1;\x10\xd6\xc7@\xa1\xc6\xa9F0g\x06\xfb\x06a\x8f\x07&(QD1\xd6\x98\xb4\x99,\xff\x9ft\x0e\xac\xba\x18\x12\xf0GT5[\x05\xfb\xc4\x80\xb0{6\xee\x9e\xcc\x9evU<7\xb5\x86c=\xf6\xb8\x88\x888\xe9\x94\x0f\x85\t\xc7\xc5\xc3\x11\xf0\xf1\xf6=\t\xa0\xed\x0f\xaf\xe3\x88\xc4\xdfaB\xd1px\xf6WqN\xc3S)\xe10\xb8\xdb\xabYS\xd3\xab\xf5\xd1\xa2\x85\xab\xee\xa5\xe7\xff\'4\xcc\x86\x1bGXmX\xb0E{\xe6!zhF\x7f7Mr\xc2\xde\xbbd\ny\xef\x1c\x1c\x07\xcf\xb9Z\xed\x8f\xa8n\x87\xf2\x073\xef\xdfG\xf4\xd2]\xcd\xcc\xd7\xcd[\x06z\x92#:Q\xe74\x08;\x9f\x87z\xbb%]\xd2S,\x1b\xa3\xea(x\x88\xca\x11G\xa5\x01^D\x87\x0c\x0c\x8f\n\x15\xee\xc8\xd6\xdeI\xa5\x89\xbe\xc9\xa2[\x17\x89\x13\xec8=5^\xaf(y\x83\x81\xee\x03\x18\xac\x17\xe93E\xf8\xf7\xf0Z\x9c\xb2:\xe2\x8a\x1d\x99\x01#_3e\x85\xc4\x02\x03\x0f\x81\xd2\xb1\x8a\x82L\xda\xe8E\xe2\xe5\x99>\x8e\x99\x03\x0b\xbcL\x86\xd7J\x9e\nnh\xdb/\xcdGY\x14YZ\x81\x9a\xcdF,g\xf7\x8a\xd3\xdb\x87Bp\x13\xcfX{\xfb\xa3,\xea\xbc!\xbfW:=\xf27\xd5\xb1J\x89oN\x86\xcf*=\xb5\x80\x99^\x96f\xe0\xf8\x83\xed\xffN\xfd:\xc1\x07\x07\x90\xf1\xed\xde\x0c\x0bQ\xf8\x15%\xfb\xee\r\xa3\xafr\x8c\x06\xf1\xbaLw\n\xc1\xb1\xbc0\x87\xea\xcf\xa8\x1d8\x8dUU\x19!\x999\xaf\xe5=\xb7\xfc\xcb\x7f\x04\xc2O\x14\xaaG\xaa\xc4\x87\xa6$m\x0e\xfb\x8f0 \xa7j\x0fg\xfd\xb7\xba\xb0}E4\xe5\xfaM3\x1f\xe6\xbe\xbfr\xe0z\xd1\xdc\xfc\xe7\xff\xb07\x91\xb5\xa1\x9bF%\xcc\x17\xeb\xfa\x82:\xde\xf2{\xbe\x81\x9e\xb96Fx\xb1\xf3\xe4\x08\x9c\xa6\xfdpg\x19\xb1\x1a\x06p\xf4\xdf\xa3\xb5^$\x97P\xb4\n\xe9\xdf\x97\x1b\x81\x92\xd8\xefw\xe5 \xbf\t\x85\xf1\x89(\xf2\xc9\x132\xe8\xe7\xe9\xcbz\xa6\xd6\x90\x055\xa4\xd2\xc0\x10|\xef\xff\xd0\xab$\x9b\xef\'\xa3\xe4\x08q\xb8){\xfb\x08\xf9\x10\x8d\r\x1dh>R\xd1\x8b\xc0l\x8946\xb9\x1e\xbd.\xa0\x1d\xf0\xec\x8e/4\xeb\xdc\xba\x1c\xd8\x0cY\x1d\x14\xf2\xf9g\xda\x07R\xacH\x00\xba\xe4\xed\x02\xfd8\xf9\xa2\xf0\x06O\xb5/\xa5\x97h\xb5)\xf5Q\x93\xa5\xa6X\xd8\xf2\xf3\xa8\xeb\xdc\x14\xb9vq9yf\xeaE\t\x9a\x14\xa1%\x856\xb1$\xacA\xd715\xc5sP\x9c\xf5z\x17\xf4\xb7&\x81\xde\xba\x07\x0f<\x9bIN\xd0\xc3\x96?>\xff\xb6\x8b6\xacj\x89l\xb37jA\x05hW\x94.\xcd\r\xbd\x03\x0b\x0f\xc2\x81S\xbe\xe0\x0c\xb0\x19$\xfb\x8f\x1a\x1ab-\xfah4*\xb1\x07k\x98\xa8\xde\x1b \xc1\xf5\xfb\xae\xc1\xeex\x88\xea\xf4R\xfe\xfb\x84\x11\x9b{\xb6\xf5w\xbf\\\xaf,r]\xda\xb63\xa9\x84w\x13\x0c\x05\xbb\xfe\xbb\x03\x08\xea\xe4\x12"/\xb4\x85j\xa4\xa3\xbd`X\xf5c[l\x84\x91p#\xde\xd7\x0bQ\x80\'K\xe1AN\xc5-#\xfd\x90\xb4\xe9X\x9d]\x08\xd9U4\xa3\x12]jH{\x84\x8a\xa6\xcd\xb3\xd5\x8d\xaa\x86\x8dx\xf3\xa8,\xb8Y\x1d`\xc3\x95\xc4\xd94\x9f.(ar\xc5\x85\xfc\xe1@\xe8\x1a\x15\x88\xaf\xf7\xe4}\xeat\xfc\xf0\x16\x1d\xd5\x19\x87\x90\xcdt\x10F{\x95\xcc\xb4\xe7m\x12\xbf\xd2Q\x0ba;Y^\x87A\xaf\xad%\xf1\xec\x80\xfbi\x93$\x8d\nH\x1f\xc1\xfa+\xd7=:\xd8x8\xa2s\xd0f%\x01\xcd[\xdb\xff-\x86\xf1\x1d\x08\x0b\x1aw\xb2\x06n\xf0u\xda+<ah%\xca\t\xde f\x99\xcfo\x808d\xd1\xfcp\xf2\xb1\xb4\xf0\xe3\xf7\\\x97\xe1_>i\xaf\xf4U\xca9\xda\x1dn52$\xa8A@\xbb,\x8b\xc6\x18\x8b\x0b\xbc\xddb[rN\'\x8a\xab\xb0;\xd9q\xe4\xdb\xd4\x8c\x9a\xa9\xd51\x0e\x15\xee\xbb\xe0RRF\xf0\xb2\x1eH~\xf4\xb6\xee\x1d2\xb7a\xd4e*\xc6\x87\xdd\xbb\xf3\xfb\xc3x\xba\xb8\x83$\xd0I\xc0\xbd.\xa4\xf0\x02\x17\x90|\xccK\x19\x135\xd9\xaa\xcb\xf0\xb2c\xd1t\x17!\xa9\xed\xbe\xda\xbaW\xefI\x0b.\x8fN\xca\xd5\x8b\xb4p\x86\x8d\xe9\x1a\xf9\xab\xc4;4\xbe\x1ek[\xa6X\x806\xfe\xaa\xf1Od\x92\xfb\x13(\xd7\t\xacF\xaa\xaa\xa1\xb33>\x1c\\Tf\x08\x11\x1d\xd0\xcf\x8d4\x8fX\xb8\xb3k\xf3\xfa\r\x08\xd0\xef\xcb\xf0\r\xc4\x93e\x84K\xf7a\xa7\xa1b\xd3>\x04G\xb6w\x1e{>\xee\x01m\xad\xfaY\x03\xef\t\x8e\xdbE\x16v\xb65\x19`\x94]\x9d`\xe4\x88\x01d\xfd:4\xee\xd4O\xb05\x91\x1a&\x1a\x0f\x97>\xd2\xaa\xc7v\x11~\x11\xce\xa5\xc48\xb8D\xc55\x8e\xdb\xa1hA\xb2\xb6h\xac\'\xca`\xcc\xb6\x1a\xf1\xa9\xb4Q\x0b?\xee\xf3\xd9|K\x08G#\x13Q\xce\x95\x94T\xad\xe5\xbe\xdf\xf4\x98\xc4ys\x08C\xc2\xca\xf4\x0f\xbc\x1dw\xf08\x058=\xdb\xb2X\xe06\x88\x17%Ta%\xda\xb2v\xfe l\x88\x14S\xd7\xaa\x8a\x946\xb8\xb1pz\x8f\x82\x0e\x9c7\xc6\xcde\x15\x862\x8fK\xea\xeb\xb0i\xac\x80c\xb7\xdb@<\xd5\xd4\x8c\x90\xd8\xc4@\xb8\t\x92\xa8\x0b\xd6\x0br\x95h\xa2\x19\x0c1\xdd\xc7\x8c\x18\xea\xda\x9b\xbc\xfe\xa7\xff\xafy\xf0!\xb8\x1bH\xe3\x07\x8c\xef\xcd9\x1f\xdd\n\xe5\x96\xc4\x9bW\xabX\xe5\xbb\x1an\xe1KB\x1fG\xb8=\x8eQ\xea!\xc7\xcbT\xf1+\xd4\x83G\xcf\xb1i\x90\x01F{V\xe9M\x85\xa4o\x95\xd8*\xac\xe0\x15\xa0\xf2\xe2\xb2\x16\x10\xac\x03\xb5\x17\nV\xc97J\x8e\xf3Hb\xdcT)\xb4n?lT\xe6\x19\xaa)\x89\xfeT\xb9\x8a\x95\x0b\xab\xd7\xb8(\x1by:zi\xf3\xcfIy\xe3\xef\xc23\x91\xc3\x88\xce`\x90\x96\xfc\r\xb5\xcf\x88g`J\x9cS\x1a\xe0\x94\x1f>\xd4\x86\xc5\x89\xa1\xf83/p\xfa\x8f\x12\x10\xf4ZI\x9e\xad\x9b\xa2\xb6F\xd23\xc5\x15Dm\x81\x8c\xd3\x0fp\'9\xba.\x84p\xc3L\x11\x81\x91`\x0b\xc9\xd6\xe1\xbe\xcbZ0`_\xc3\xda3\x8cE\x0c\x88h\x90\xbf\xccX\xc4\xf1I\x0b\xceV\x0ei\x14"%i\xff\xa5\xbe\x92\xac\xf3\x9a"\xc5\xca\x9f\xb8\x1b\x87\xad\xe6(\xd5\x01\x91\x92\xe5k\x1a=9\xffiw\x90c\x97\x1dE\xd4:\xa1\xd9\xe2\xeec\xfe\x82\xde9nrn\x8f\xb0H\x9e\x9fg\x1b\xbe\xe6<\xfa?\xce\xae\x00\x93Y\x82\xf2[\xf3\t\x13v-\xcf\xc5 7\x18\xca}\x1e\x03U\xaa\x90\x10|\xb2vZ>\xbe\xf9;\xf8\r\xdf\xe9%P\xd7=]\x8d\xac\x95\xf9\xa8u\x93;\x10\xaa\x9a\xdaz\x12\x11\xfc\x10\xe3#\x92\xe2\x90\xc3\x80\xf2wA|\xc9\x01`\x17{b\x8c\xa8\x8e\xef\x94\xbe\x94|\x1f\x81\x07-\xdcu\xeb\x9e\xa7\xf5~\xbe\xff=\xdd\xbe\xde?\xdd \x93\xb0\x13\xef\x93\xa8\x8c')
|
1
|
+
from flask_babelex import gettext as _
|
2
|
+
|
3
|
+
from . import bot
|
4
|
+
from hiddifypanel.panel.user.user import get_common_data
|
5
|
+
from hiddifypanel.models import User
|
6
|
+
|
7
|
+
|
8
|
+
def prepare_me_info(user):
|
9
|
+
"""
|
10
|
+
Prepare response to the "me" command
|
11
|
+
@param user: User instance
|
12
|
+
@return: A text message
|
13
|
+
"""
|
14
|
+
|
15
|
+
response = _("Dear {}\n\n".format(user.name if user.name is not None else "user") +
|
16
|
+
"Your hiddify information is\n" +
|
17
|
+
"UUID: {}\n".format(user.uuid) +
|
18
|
+
"Last online date: {}\n".format(user.last_online) +
|
19
|
+
"Expire time: {}\n".format(user.expiry_time) +
|
20
|
+
"Usage class: {}\n".format(user.mode)
|
21
|
+
)
|
22
|
+
|
23
|
+
return response
|
24
|
+
|
25
|
+
|
26
|
+
def prepare_help_message():
|
27
|
+
"""
|
28
|
+
Prepare response to the "help" command
|
29
|
+
@return: A text message
|
30
|
+
"""
|
31
|
+
|
32
|
+
# command description used in the "help" command
|
33
|
+
commands = {
|
34
|
+
'hello': 'Get started with the the bot',
|
35
|
+
'help': 'Gives you information about the available commands',
|
36
|
+
'info': 'Return information about your usage',
|
37
|
+
'me': 'Return information about your account'
|
38
|
+
}
|
39
|
+
|
40
|
+
# generate help text out of the commands dictionary defined at the top
|
41
|
+
response = "The following commands are available: \n"
|
42
|
+
for key in commands:
|
43
|
+
response += "/" + key + ": "
|
44
|
+
response += commands[key] + "\n"
|
45
|
+
|
46
|
+
return response
|
47
|
+
|
48
|
+
|
49
|
+
def prepare_hello_message():
|
50
|
+
"""
|
51
|
+
Prepare response to the "hello" command
|
52
|
+
@return: A text message
|
53
|
+
"""
|
54
|
+
|
55
|
+
response = _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
56
|
+
"Welcome to hiddifybot.\n"
|
57
|
+
"Start by clicking the link on the panel or entering your UUID.")
|
58
|
+
|
59
|
+
return response
|
60
|
+
|
61
|
+
|
62
|
+
@bot.message_handler(commands=['me'])
|
63
|
+
def command_me(message):
|
64
|
+
"""
|
65
|
+
TelegramBot command "me"
|
66
|
+
@param message:
|
67
|
+
"""
|
68
|
+
|
69
|
+
text = message.text
|
70
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
71
|
+
if user_uuid:
|
72
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
73
|
+
|
74
|
+
bot.reply_to(message, prepare_me_info(user))
|
75
|
+
else:
|
76
|
+
bot.reply_to(message, "Please enter user_uuid")
|
77
|
+
|
78
|
+
|
79
|
+
@bot.message_handler(commands=['help'])
|
80
|
+
def command_help(message):
|
81
|
+
"""
|
82
|
+
TelegramBot command "help"
|
83
|
+
@param message:
|
84
|
+
"""
|
85
|
+
|
86
|
+
bot.reply_to(message, prepare_help_message())
|
87
|
+
|
88
|
+
|
89
|
+
@bot.message_handler(commands=['hello'])
|
90
|
+
def command_hello(message):
|
91
|
+
"""
|
92
|
+
TelegramBot command "hello"
|
93
|
+
@param message:
|
94
|
+
"""
|
95
|
+
|
96
|
+
bot.reply_to(message, prepare_hello_message())
|
97
|
+
|
98
|
+
|
99
|
+
@bot.message_handler(commands=['info'])
|
100
|
+
def command_info(message):
|
101
|
+
"""
|
102
|
+
TelegramBot command "info"
|
103
|
+
@param message:
|
104
|
+
"""
|
105
|
+
print(message)
|
106
|
+
text = message.text
|
107
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
108
|
+
print(user_uuid, text)
|
109
|
+
if user_uuid:
|
110
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
111
|
+
information = get_common_data(user_uuid, 'multi')
|
112
|
+
|
113
|
+
bot.reply_to(message,
|
114
|
+
_("Your hiddify instance information \n" +
|
115
|
+
"Domain: {} \n".format(information['domain']) +
|
116
|
+
"Usage limit: {} GB\n".format(user.usage_limit_GB) +
|
117
|
+
"Current usage: {} GB\n".format(user.current_usage_GB) +
|
118
|
+
"Expires at: {} \n".format(information['expire_s']) +
|
119
|
+
"Remaining days: {} \n".format(information['expire_days']) +
|
120
|
+
"\n\n Happy using \U0001F389 \U0001F389 \U0001F389 \n"
|
121
|
+
))
|
122
|
+
else:
|
123
|
+
bot.reply_to(message, "Please enter user_uuid")
|
4
124
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
125
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/common.py
CHANGED
@@ -1,5 +1,100 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00w\x11\x00\x00\x12\t\x04\x00\xb7\xe9\x15\x0b\xbf7\xbb\xed\x7f\x80!\xa7)\xde&u\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\xc9s\x0b\x99\xfa\x9c\x9b\x0b\xd1\x0eIm#}4\xecs\x98y\x97\x10\xac\x0c/\x16\xa3\xdb+Y\'\xda%Z\x84=\x13\x11\x9a\x89\xae\xc4p\x80 \xdb\xf9a\x14|\x1a\xcb\n\x94T\xf0\xe8\xcfX\xc3\x85C\x80\xceNw\xc7\xc1\t`\xa0rk>8w\xd9/\r\xaf\xe4U\xc5\xb5\xe7Fy\xa3i\x14\x12\xa6\xd1\x86\x89S\xe1\xa7Fx\x82\xef~~\xa8G\x80W\xa1x\xe5\xe5T\xe1\xefU\xcf\x9f\xf9\xfb5\x01\xc2~z[\xb2.\xed\x17N\x9b\xea\xa2\x00\x81\x96\xcd\x03u\xd7\xadhs_\x11\x97\xab\xdb5\x13|\x91\x90R\xf1\xddSq\x9b\xb0i\xf9\xfc\xcaW\xdc\xc2ki\x92\xcb\xfaR\x80S\xf7\xfb.\xf72\xca\x0c\x83\xef&\xadx\xa9\t\xfe\x8at\xde\x8c\x1b\x0cg\x82PG\xbb\xde\x07\xbf>Wg\x01h\xecoC\x07\xf3S\xc3\xcb\x89U8b\xe7\xb4SE\xf4\xc4\xe0\xf5\x90"\xc54\xd5\tt\x98(=\xfd\xf8\xf1\xc6b\x06jT\x80\x89\x8f\xba]\xdch&\xc1\xce\xcd\xe3k\xcb\xe3\xdc\x08\x16\xd3\x1e@\xa0o\xed\x16\xea\x8e\x01\x02\x1e\n\x18\x96\xfd\x9a"\xc6\xc1\x8eZ\xecEpK\x8a`CG)\x05\x91\x0ca\xe2\xf7\x11^\x9eIb\xdb\xa2\x0c\x9c\xfa\xeaBn\n\x8c\x85I\xba\x8d\x11\x18T\xf6,\x87\xd9\xebCFM$\xa3tp\xb5kVH<\xde\x95\xd8\xdc\x0f\xdb\xef\xd1\x19\xe1L\xde\x9f\xb3\xa5\xa8\xf6\x10\xd6\x19\x92w\xaf\x0e8I\x955\xf5\xe0\x94\xb2\t\x7fdx\xc73\xbf\xb5}V\xdbk\xffR\x8c\x05&FKU\t}\xd98%\xe9\xc3<\x9bO\xd1y\x16K\xd7g\x9a\x1a\xb7\xafo\xc6g\xbbFC3\xeeO\x91`(\x14oO\xa5\x85\xc6\xd1\xba@ifFqR8O>\x1b{\xa2\xda\x11C\xcc\x8b\x9e\xb6\xa9<92\xb6\x1d\xbe\xac\xb6z^\x03\x95\xac\xf9P\x9b/Z\xd9\xd1w\xcdA+O\xfa\xcb2\x86\xe1\xc3/]s\xbe\xc9L\xfc&\xe8^\xc8u\xea\xd3\xc9W\x16\xcd\xb6\\\x9eK\xa4\xa6\x965\xce\x81K!\x1fcHU\xc4\x87@d\xcb$\xdae\xe9\xb6\xae\x94C\xaeV\xc3w?b\xb4\xfe\x9b\xda\xa4@FX*\xae\x02\xe4\x18y\xb8\xce\x948\x1f=\xf3|6T\x8bs\x9a%}\xc5*\xc2\xd9\x05\xe4\x13\xf8\x9b|\x1e\x14\x14\xdf\xf8~y\xe7\xfe\r\xecc\xdbE1}\x04\xa08X\xe5\xb0=E[Z\xe5{r5`a\xe9(!5\xc5\xe2\x1a\xc0\x7f\xc1\xbc\x0c\xc6<\xd7SX(\x13\x8ea\xb3\xd2I=\xea.\x03\xb1\x8c\x91-\x01?1a\xc6\xc1\x0b\x87\x00g5\x15\xc4},l\'\xe9\xbf\x0f&\x00R\xc0O\x15\xba z\xaa\xa9\x07\x1f\x12\xae\t\xd2~\x1e\xf4d\x10\xca\x06s\xcfK\xcc0\xc8\xb9\x8f 9\xcb\xcf\xb3\x12\xf2xc_%P\x11\xc9\x18:\x85V,\xbb\xeaA?\xf9\xcf\x0c\xa7\xd6\xee\xe3Oo\x08\xf5$f?n\x0c\x99\x0b\x91\xda\r\x88\x0b\xffc6\xae\xb5\xb9\x88rta\xd5_@\x13Fs]\\X\xc5i\x126\xc0\xb2\xc0<\xf1\x92\x9fr\xf0\xa9a\xab#\xe0B\xd1X\x9fK\xa8i\xf1\x1a\xc3\xbeD\xc9\x95\xf0`\xf8\xd6\xdc`g\xb6\xbf\xcb\xe4\xee\\\x16M\xf5\xa4\xf6"\xf81Zw\x18\xbc\x94\xcb\xc0\x87\xa7\xbe\xd5%\x9c/Li\x81\xd8\x18\x1a`\x82?\xa6\x06\xcb\xeb;BS\xe5$\xd2~\xf7\x98n\xe3\xa5\xac\xe6\xb0\x15\x06\xba\xf8\x14\xd6\x95\x85\x01\x1f\x03B\xd3/\xc4O\xf1\xbd\x8dK\xa9D\x12\x83\xc3\x0cW\x7f\xdd\xdfi\x04\xa7\x06~\xd2\xef\xee\xdc8\x06-\xddyR\xff\x12I\xc4\x8a\xc3\x17\xae\x98\xe7\xc4\xf1>\x99\xa3\x0bb\x05\xf2\xf4\xa7\xef\xa1\xf0\x1e\xab\x7f\xf4\x8c1(Lq\xe0\xb6_\xbe\x9d\x8f3\r\x8azU\xf7\x01\xc6v)u\x81\xcc\xdc}\x91\xd8S\xd2\xdd\xf6\xb5\n\xc7OO\xdf \xcd\x88\xb1@\xd0\x08\xc2\x0cx\x84R\x03\x15l\xc3S\xaf\x0f0[\x1b\xb7\xca|\x9f\xb0\xc5\xa5\x99\x18\x7f\xe8 2\xa3\xe7\x91\xc0\xce\x12\x1e\xb9\xc2`\x1a\xeb\xa1\x01X\x03d\n>\x8f\x92\r\xce0V\x04FsG\xec\x06\xb6\xb4`\xbf\xe8\xab\xe0\x17\x85,\x1e#;\xdd\tn\x83TcX\x9c\xaf(\x0b\xb5\xe9%C\xcaI]%\xeeP_\'\x05m\xd43mr\x16\xca\x10\xdb\xb22\xc7\xfc\xa0\x86\xe0l#g\xd4\xee\xb1\xb7r\xad\xd2I)\x0cI\x12\x95\x9d\x8c\xfd\xd0y\x05\xb5E!\x87\xd1\xc14\x0c\x99\xb9\xb4\xcc\xd6&\xf7\xb8L}\x1cn\xe4B\xe0\x0f\xb1E\x95\x01\xe4\x1dl\xebQ\x00fL\xd7\xcf0\x90\xb3\x1b\x99Y\x8ec\xfe\x1a\xc9&\x8fd\x16\x15#\xff\xde\x90\xa64.]#\xfc\xe1\xfd?\xf7\xadJ9\xd9\xb1\xbf]]\xbbh\xcd\xde2\x976T\x94Uj\x89\x98\xf0\xb0\xe8$\x95_#\xf0\x1bmOmj\x8d\x9at\x19\xec)\xb6z\x9d\\\xf8X\x92V\x82]iIg\x99\xffvlz\x84\x0b\x9c\x02[\xe9\xe4\x15*J*Ya\xfa^\xe0\xd5\x98]\\\x8d\xfc\xa4\xfd\xd4\x03\xfeT#*X>S&GtS\x11\x19\x17\xd6\x06\xa4\xb7\xb3\xf0B\xb8\xd2\xafL\x9d\xd4\xfd\xf9\x0f\x17S\x07\xdf\x94\xef$YA\x88M{x\x02\xea\x9b.\x8c\xc5\x8f\x8e\x97Z\x1c\x17\x90\xc9\xf6c.\xf8\x16Ds\x91\t2\x8f\xd9\n\x88\x06n\x83\x1d\xcb\\E^\x8dr\xe6\x03q{146\n\xb8x\xa1P7lB\xa3\xd5\xb5\xe2^\x1c\x00^Y\x97\xeciP\xef\xb5\xc1=\x16\x1a\x07\xd1\xe0\xbdo\xb7\xc1lU\x80\x02"X5\xe9\x9e-\x14\xd1\xa4v \xa1\x05\xeco\xc170\xe1\xe2\x13Q\xfd7\x90\xb5W\xd0\x9d\')V-\xffa3\x9b\xc3Z(\x80\x9c;\xe7\xda\x80\xa6\xa4\xa8\xc4\x92\xff=b\x0b\xb5c\x01\xb7\xfcq\xa6\x1f\xc2i%<\xd3\xb9:\xeb\x85\xdbt0H\xb3\xb0k\x16\x1b\r\xb2\xfc\t\xe4\xe1\t\x04\x8f\x80\xc3\xd9=\xac\x96\xc2\xee{\xaa)\x91s&\xf9y\x1b\x96\x83jO\x08\xc7\xe2PX\xa8?N\xba\xb1\xa6\x82=<\x08\x96\x19\xbe\xcd\xb3\xc6\xca\x10\xdeM\xd3U\xfa\xb7`\x139\x86\xf4\x04\xba\x15\xe0.\xd1\xd12\xa2\x0ePm\xac\x7f\xcaV\x12\xbc]\x86\xc8\x97I\xea\x8d.n\xf7\xc7 S\xfa\xd2\x1f\xa9\xdekS\xbd.\x95\xb3\xcc\x04\x8c\xab\xcc=_\x14`\xd1HP\x05\x84\xbc\xe66l\x02\xbe\xa5UG[\t\xf6r\x8dd\x02\xf4\xcfd\xddI\\\xa4\xbc\x00\x84\xa5\xb109\x977\x02\x1b\x88/\x1fqi\xb3\xc6W\x85D4\xdc{sQ\x9f\xe5\x80\x13\xc2Z\x1d\xe4 \x9d\xa0m\x94\rZ\xba;\x98-2\x9dn`\xa3\xa0\xa01u\xce"\x17\x82h\x1di__\xb6\x0e\xc6\x07\xf3*\x8d\xcc\xfa37I\xb2c\xb7A\xbe*\xb7\xae\x1a\xea\xa0\x87\xf1\xe9\xb8\xc5\xbeT\xdc\x9a\x883\x7f\xd0\xa1\xa3\xbc\xd0\x1d\xd2\xd1\xea\tZ+\xd3\xf8/\x01P\xfa\x04\x89\xd7O@9l\x1d\x9cR)*w.\xcbR\xe16\xf8\x8b\x01\xc62\\\xc9\x8e\xd0E1~\xd5\x1e\x90\x89\xb0Lm\xff\xc2\'\x04$\x1d<\x05&\x90\xd3\xf1}\xb7\xb3\xaf \x1c|\xccA\x96O\x85\xcdP\xb2i\x8f\xe0\xddA\x004\xbd\xca-D\xf4R\xd8\xe5\xdc:+\xac]\x13\xb7]\xf9W\xa2p\xaeyV89%\xe7\x9dVb\xe9I\xff\x11%\x97]-\xef\xf6\x99\x05\xd3Sp\xe5\x9b\xc1\xb0vM\x94\x97\xeb\xbfe\xae\x99\xb8\xde\xd7\xe1\xf5\xa7\\{\xd6C\xfa\xa3q8\xb6\xc6\xfbV\xdd6*H\x86\x95\x8d\x96\xf0\x1b\xea\x10\xd2D\xc4\x93.\xb0dV\xed\xdb\xa2\xea$*\xecN\xbcz\xa3\xdc\xc1Kxqs\xd3t\x18f\xd1\xa6\x13\x13\xacm\x8al\xe3\x06\x89a\xbe\xc9c\xa7\xc2\x02\x00\xa2D\xee\t\xb8\x18\xfe]rl\xfc\xec\x14\xbdZ`c\xc7\xd4\x9b$dfV\xabM\x18\x13\x1d}\x11\xde;\xe0\x83j\xb0dQ\x00^\xaf\xf9\xe2\xd5}\xd0\xc6\x81T\x8e\x03\xa7*\x80\xa0F0h\xd2\n\xf5\x83\xb8lH!\x0b\x02\xb2\xd5\x1cKH\xff}\x04\x7f!@Q\xfab\x99\xa4\xf4\xa9\x0b#\x9ft\xb5l=\xbf]\xe00\xbd\\)\x83)&a\xe6\xd3\rC\xf5f\xd8\xaf\'\xd9`\x7f\xdc\xb9v\xbdL\xae\x93\xa2#\x7f\x7f\xf4\xb4\xe6e\xb4\t\xc3\x96\xe0\x89\xb8\xc7\xe7U8\xb4<\xe4c\xf7\xc7\xd5\x8e\x10\xad\xb7\x96\x97\xd1\xfe\x82\x8d\x19\xcb\xdd0\x88\x03\xce\xa2\xd8\xcca\xc2\xf4\x81\x14\x1a\xd7\x15E\xbe\xe4\xf2\xac\xa2(\xe1tA\x05\xeeTD;\x14/g\x89ZP\x1b\x18\xad\x8b~\x89\x9d\x17\xe5\xa5\xcc\xf0\xc5\xea\x82\xf62\x8f\x91\xb6\x16\xf4\x97KEW\xd7$\xa8;o\xa0\xb5/\xfb\xfc\xb7\xa8\x19\x15\xef\xae\xad`)\xa1~=2\xabG\r\xcb\xb3\x0e\xe3Y4\xf7\xf8F\x16\xfa\x82\xa1^\x96Z0$5P\xb5\xa3k\x06X\xdb$\x12\xb4\xe6\n0\x0b?\x96p\x83\xf6\xd1L\x99$\xcb\xbc\xc2\x12\x0fx\x86X_#\x8dH\xef/%F\xbc\xf7\xd3\xaa\x0c\x9b\xd9\xe0\xef\x8dT\xfd\xd1\x0e\xbd\xe8\' \xaeR\xb4S\r\xa4\x13\x0bq!>\x0c&\xe63\x9ex\x1f\x19T\xb9)\xce\xdbz\xe4e\xab\x16\x82\xf1\xafg,=\x1c\xd4s`\xf6v\x83\xc71\xe7X{\xe79\x92\x7fA\xca\xf9\xd7\x9f\xac\xf4\xe8\\\x06\xea\x88w\x19\xa9\xe8\xb0\x01\xc5\xfd|\xfd\xc3H\xa1a"\x84\xfe-\xe6- [\x11\xb0gLdM\xe0\xebZ\x9e\x18~\x16G4\xea\x96\xf6\x98\x86\xd1\xae$Hd\x91Z,\xa9\x87\xbd\th\xa2\xc3\x0b\xb0\xbb\xf4n\xf4\xbc\x1bc\xca\x95J\x7f\x86r\x9d#S\'\xfb\xfb\x82\xcf\xcd\x0e\x12\x8c\xa6~\xbe\xf1\x9c\xbe\xd4\xbeoYr\xf5F\xc9J\xe7\xde\xde9\xf5|\x08JM\xbf\xce\xe4\x15\xd3\xb4_H`\x0b5\xbb4\xb7w\x05<\xe7{C\xed^\x06\xd5A\xa1\x94E\xc3\x90P\x01%t\x8d\xc38\xafi\xb3\x81\xb2\xec\x1b\xc4\xcd\x0f\xe2_s\x00\x92\x7f\xdf\xeau\x07\x16\xf5K\xcc?\xb0\xe0\xd2\xffl\xa1\xb6\x1e0\x00V\xf9\xaatR\x01\xe4K\xe2\xd9e\xb9\x91%\xf5Bz\'`)(l\xe4\xfd\x17\xae\x1f\xa5B\x18\x85o\xfc\xe5\x9a\xf5\xee\xedu\xd3\xbe\xdc/\xd0\xc3^\x16\x08?H\x02\xf6\xbc\x91\xf6\x87\x0e\xdac"E~"OZ\xaau7\xb0\\@<@\x90!"\x83\x94\xd9c\'6\xaf\xb7^\xc0\xb1P#_hc\xb0}\xc38\xa8wgp\xda:\x92\xe8\xbf\x83r\xf4+\x0e\xca\x81?\xe3p\xda\x8bi\xa5|54\x12A\xfcdT{\x8c\x80\x1dWP\x00\xb8\x92\xfe3<U\xb6n\xe0d\x01f\x81l>\xbaq\'|\xe1\x1c\xfd\x07\xa4\n\xcer\xae\xdc\xf6\x9b\x91\x15\xceu}&\xe3\x1f\x85`\xd7\x00\xe1\xe0\x12\xebY\xc2Q\xd0\x89\xe6Y\xb3lT\x8e\xcf\'}4|Pl\xc1\x1aK\n\r\x8f\x14\xd4}EW\xba.\xa2\x8e\xcd\x02\xec\xe4+A\x8cf\x143\xf3\t\xa4\x9eem\x14Y\xe5\x8c\xb7\xc5OC\x8df\xeb\xfd\xfa(}\x0b1\xe97\xa9\xc0j\xbb<\x8c\x101\xd0\xf9\xd6\xb4g\x11\x8d\xc1\xe8\xd1\xa8 7:\xb54(\xc8\x98\xb0\xc6\xb5\x9a\xb5\xc6\xe2\xffH\xe4v\x8c\xbf"\xd6\xce\xda\x0cqs\xd4R\xfc\x02\xf9\xe9mk\xc8\xf3?\xcb\xb3;\xe5x\x90v\xd2z\xa6+~\x11v\xd8_\x10X"\x8d\xf1\xc5\x92\x95>\xc4/(\xafbp\x08\xc2nE\xe6#\x13\xa2\xf3\xa0t\xc2\tw\x89\xc4\x91p\xd08\x87\xee?\x8291%\x94\x10\xc6\xd5t\xaa\xd6\x16Y1a\xf9\xb82`,:;\x84\xdd\x0fe\xd19\x01\xb7\x84a\xf8y<\xcc\xf5\xae+Fx\xa2\xd7Nh\x82\xe5\x9f@F\x9f \xbd\xe7_\xe7ZL\x8d\xf5\xd2[=\xf8n\xdbl\xbbE\x13A\x88\xa1\xfc\x86\xcaY2\xd3\xec\x14\xb4\xbd\xfa\x04\x01:\x10e\xb5f&\x19\xe0\x9d\xc6l\xd6bjr\xb4RV\x85\xfa#\x94\x0b\xcb\x17\xc1H\x01\xaeQ\x90^\xfc\xd7\x0e\x18`\xab\xe8\x11\xae\xd6jC\xbd\x08\xaa\xc8\x8cD\x01\xc1\xb0\x95\xaf6\x12;\xeb#\xff\xf1\xbb:\xe4\xd2\x01\x13\xfa\xf1\n\xe1\x8a\xf3:/\xaaSM\x9d\xb3o\xea\x92\xb8 \xb8\xe3H\xafg\x17\xbd~\xde\xf0\xa8\xb6\x06\xb3\xe2\x96!S\x8d\x1b]\x9e\x07\x1fx\xfa\x08\xb6\x1305k0\xd1h\xe5\xc3\xcav\r\x80y\x87\x979Y\xd5j\xfd\xfb%\x8f\xacl7Y\xeb4\xce\xf7\xc0"kZ\xe5y\x18R\x96\x1e\xbdx\xc5\x17\xbbY\xfd\x941\xdc\x1d\xb3H_xNN\xbcy\xce\xe5E\x8c\xc0\xd7\xc2hT\xcb\xba\x9d\xf2\xe6\xc9)I\x96\x9b\xea\xa7\xa8^\x82\xfe\xff?\xb7b&\xb5\x91O\x13\x81b\xd3\xf5\xbeI\x88\x05w\xb7\xbb\x1d&\xa9\xcf\xd3z\xc5\x1cG\xe2dWS\xb6=\x18`\x0b\x06w\x07\x1c\xf3\x83\x96\x03\xee\x02\xcd\xa0d\x94\xdem\xfd}\x0e\x9d\x05\xc1\xd0c\xd0\x0c\x7f\xe9\xa0T\x8f\x84\x00\x8f\xfab\xe2sM\xa0u8\xc5*\x8fq\xf2\x1a[\xa5\xd1Z#5\x93hK\xcf\x1d\x8a\x83\xd0a\xf4\xa7\x12\x84\xc9G\xd4\xb4~lk\xac\xa3p\x13\x9c\xd5\xbeB\xd8\xd9| 43\xbax9|J\x9aq\xbb\xf9\xb0\xc2\x91G6\xc4\x86\xb7&\xf5F\n\x80\x81\xcc;\nm\xf4N\xee\x0c\xfe\xa0S"\xcbV\x0cx\xed\xbf\xbe \xa2\xabh\xf4\xfe\x060\xc8A\xca$\xa3\xc0\xba\x03\x9e\x14\xef\xd1G\xcb%\x03\x01\xb4\x99\x81)(\xee\xb4\xc8\xd3\x00\xb6YcOP%\x86\x0ei~\xa5g\xaa#t\xbd\xbb\x8d\x9b\xfa\xcc\xe6\x9a\x882\x16\xe9.\x98\xb5k\x11\x12\xfa\xdf\x82\x93\x84\xdb\xf2$\x1f5\xff}\xe2Cm\x18\x84\x82\x91\x08\x07\xc2\x86\xc2\tQ,\xa3\x93,\xac\x82\x1c\xd3\xd4\x86\xcf\xa4l\x87\x03\xb0\xdc\x1f\x14.\x10\x8a\xfa\xf1o\x95\x9d\x1e@J\x11\xf2H<\xdd\x1d\xd6\xb2\xd9J\x8c\xc2\x0b\x91x\x9a\x0e\xcau\x00\x80\xd6|q\xf3\xe6\xe2\xae6\x8aI\xfe\xe3\x95\xbc"\x97\x8d\xde!\x12n>\xe6P\x0b\x81S\xb3\xde\xa3\xb8\xe0+\x117_\xafxoP\xe4zv7RJR\xf3O\xd8\x1b\xe7\x08\x8f\x9f,\xa4\x17\xc6\xdc\x97\x92\xe2\x94\xdb\xc6\xa2\x883P\t\xd1\x89d\xe8\xd7\xb4\xca_\xf9\xce+\x9b\x88f\xdd\x88b$\x1a9\xdf]g+\xcf\xc5\xe0\x8c\xe8\'|S\x99\x08\xa8\x03i\xd2\x15w\xa9\x7f\x0b\x06Cd\x1e%:\xc2\xd0%s\xbd;P\xa62\x88M\xad\xa1_e\xad\xca;Y\x06\xeb\x92\x00\xc4\x86\xa0o\xc7\xbd\x91\xeb\xa4\x8e\'wI\xcb\x1c\xa8^\x03\x19\xc0\xdf\x86z\xcb=\x9a\x18\xc8\xa1\xfaD\xe1/mX[\xaa)\xc05F\x8d\x19O\x85E6V\x04>\xfd3\xfay\x0fV\xa7\xa7\x9d;\xad0)\x84[\xa3\xb6TU!J|3\xd6\x1c\x7f\xde\x08\x88\xe1"\x9d\r\xd9\xea\xbe9\x8e&\xe6aX\xfc-\x10\'9\x18\x98\x1d\xf9Vr\xcd\x9a\xcd\x85-\x8a\xac\'\x94\xd4\x19\x03\xa7\xe0\x033\x89eD\xb7\xaf\x9d\xac\x8da\xc2T\x14\xb5\xc5\x1d\xea#\x8e8\x9e\x9f \xbb\x11x"KQ\xd0[\x8dr\xb75\xaco\x8c`\xea\xd4\x00\xbb\x9f\xab\xcf+\xeaM\x01\xcfW\x15\xc4x\x95\xd9?\xf8\xad\x9fT\xd1\xfd\xfd\xcc\x82>G{\x1c\t\x156\x88\xa9#\x1c\xba\x87\xb7\x9c\x1fo\x02\x96\r\x9f\xff\xd1H\x1eo\xcb~\x8a\xc3\xa65\x17\xf8\x0b\xbfr\xcb\x81\xac\x94\xf2\xac\xce\xf3IN\x85\xf8\xe4\x1c\x13qS\x80\xc0\x91V2=E\xdbq\xac\xe6#\xc7\xbd5/\x1b\x1bp\xb5*\xf4z:e\xdd\xec\x16\x92\x02\x81\x92n\xac\xc4a\xa0\xbdlJ\x89\x81J\x08\xfb\x14\xec*&\x97\x91\xfe89g\xe1+-\xfc\xeaV\x196\xad%Q\xd8\xb2\x9b\x94\x08d\x9b%\xc9m\xc6\x17\t_\xbcUO%j\xce[\x0b\x1c\x0e\xc7\x1cW\xb5y\x98"\x94U=\xb1\x1c\x9en\xee\xf0\xa8\x08x\xd7\x1d\x97\xc6\n\x07T\x0b\xccF\x0b\x93\xc7\xc3\x1cp\x80q{7\x91PYn\x1b\xbb\xffi\x90O\x86\xd5\xa6\xed\x05\xb2\xa9G\x19\x17\xfbo\xb76\x13\xd6f\x02\x89,Zc\xff\x01N\x07\xaa\x97U\xf8\x03\xd0F\x85$G2;\xb9\xe8\xcd8S\xb7\xbd+\xc0\xd7\x0b\xcaEY.\xb9R\xc5>`\xb4\xf3\xf6H\x1a|\x17\xc5\xcdo\xa5\xe3\x187rgG\xfe\x1f<\xd1\x9cwN\r,?\xc3Y=\xe6\xe1\x135c3\xfa\xf5E\x9a\xab\xf5\x11\x1c\xff_B\x97^R\x84\'|\x8d{\xa6\xb2\xfa\xa4\x07w\xfa\x0c\x17\xdc/\xbe\x02\x19\xdf\xb2\x81"\xec\xfa<,\xe2Y\xf5\x01)\xfde\xde\xd4\r\xe4l4>\xad\x01\x85\x8d)9\x0f\xedO\x06J\xac\x1f\x07\x0e\xe8\xdb\xc96\x97\x1c?\x80\xbc\x96If7w\xf00Td\x08\xc4\x9c\xa7\xb0\xf4\xf2:~s(\t:\xaeH\x0b\xa3\xa2\x95\xdb4\x83]6\xd0\xf5\xacb\r\x83\xd2D\xfcK\xd1\x05f\x0b\x10\xc4\x9a\xa7\x880\xf7\xf2A\x87\x86\xc9\xa7h\xa29\xfaQ\x8eM{\xc4+\xbd\x03L\xccL\x81\xef\xdc\xa2\xcd/b\xaf\x01\x08M\x111\xbc9\xe90\x933v\xa5\xb7\xd4Jn+Z\xcf\xd7\xc1u\x8ci\xf9n\x16\';v\\[\xeb\x12S\x8f\xb6\xd3dr\xc6L\x84\t\x9a\x16\xfc\x93\x8c\xe5\x13Q%\xec\xb6p\x8e\x89\xaae\xbf\x06s\xfd>\x80!Y\xeb.\x84\x1c\xd5\xc2\x97]\xb7!F\x8b\x8d\xf5\xaa\xeaVf\xbc1\xa3\xde\xc9\xf8+\xbbPw\x87\xf2\x0b\x8c\x8d\x96\xe2\xffWx;\x94\x14\x89n\x90{\xf5-!(\xc6\xd31\xf9\xe7\xce\x15\\\x188\xcc\x1e\xe4r\x18[\xff\xaa\x899\x0b;=\xb0!Jg\\\x19"\x01\xb9\xb0\xf9\xc6\xaa,e\x81\x91\x85[\x1ds\xf2\x8f\xd8e\xaaH\n%\xdc\x9b\xa9\x9a\xaf\xb1h\xf2\'\x9b\x8eR\x0fP\xac8\x960\x1b\xfa\x8dv\x1c\xeb\xf4q\xd2zDO9\x87\xb0\x93\x0fh<$R\xafC\x0f\xc4R\xb5\xaf\xd8/\x1a\x15\xf1\xa4\x83\xf7\x84\x8a\xf1V\xb4\xc1z\xd20')
|
1
|
+
from flask import g, jsonify, abort, render_template, request, send_from_directory
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
from hiddifypanel.panel import hiddify
|
4
|
+
import uuid
|
5
|
+
from flask import g, send_from_directory, url_for,session
|
6
|
+
import traceback
|
7
|
+
import user_agents
|
8
|
+
import hiddifypanel
|
9
|
+
|
10
|
+
def init_app(app):
|
11
|
+
app.jinja_env.globals['ConfigEnum'] = ConfigEnum
|
12
|
+
app.jinja_env.globals['DomainType'] = DomainType
|
13
|
+
app.jinja_env.globals['UserMode'] = UserMode
|
14
|
+
app.jinja_env.globals['hconfig'] = hconfig
|
15
|
+
|
16
|
+
@app.errorhandler(Exception)
|
17
|
+
def internal_server_error(e):
|
18
|
+
if not hasattr(e, 'code') or e.code == 500:
|
19
|
+
trace = traceback.format_exc()
|
20
|
+
import lastversion
|
21
|
+
last_version=lastversion.latest("hiddifypanel",at="pip")
|
22
|
+
|
23
|
+
has_update= "dev" not in hiddifypanel.__version__ and f'{last_version}' != hiddifypanel.__version__
|
24
|
+
return render_template('500.html', error=e, trace=trace,has_update=has_update,last_version=last_version), 500
|
25
|
+
# if e.code in [400,401,403]:
|
26
|
+
# return render_template('access-denied.html',error=e), e.code
|
27
|
+
|
28
|
+
return render_template('error.html', error=e), e.code
|
29
|
+
|
30
|
+
@app.url_defaults
|
31
|
+
def add_proxy_path_user(endpoint, values):
|
32
|
+
|
33
|
+
if 'user_secret' not in values and hasattr(g, 'user_uuid'):
|
34
|
+
values['user_secret'] = f'{g.user_uuid}'
|
35
|
+
if 'proxy_path' not in values:
|
36
|
+
# values['proxy_path']=f'{g.proxy_path}'
|
37
|
+
values['proxy_path'] = hconfig(ConfigEnum.proxy_path)
|
38
|
+
|
39
|
+
@app.route("/<proxy_path>/videos/<file>")
|
40
|
+
def videos(file):
|
41
|
+
print("file", file, app.config['HIDDIFY_CONFIG_PATH'] +
|
42
|
+
'/hiddify-panel/videos/'+file)
|
43
|
+
return send_from_directory(app.config['HIDDIFY_CONFIG_PATH']+'/hiddify-panel/videos/', file)
|
44
|
+
# @app.template_filter()
|
45
|
+
# def rel_datetime(value):
|
46
|
+
# diff=datetime.datetime.now()-value
|
47
|
+
# return format_timedelta(diff, add_direction=True, locale=hconfig(ConfigEnum.lang))
|
48
|
+
|
49
|
+
@app.url_value_preprocessor
|
50
|
+
def pull_secret_code(endpoint, values):
|
51
|
+
# print("Y",endpoint, values)
|
52
|
+
# if values is None:
|
53
|
+
# return
|
54
|
+
|
55
|
+
g.user = None
|
56
|
+
g.user_uuid = None
|
57
|
+
g.is_admin = False
|
58
|
+
|
59
|
+
|
60
|
+
if request.args.get('darkmode')!=None:
|
61
|
+
session['darkmode'] = request.args.get('darkmode','').lower()=='true'
|
62
|
+
g.darkmode=session.get('darkmode', False)
|
63
|
+
|
64
|
+
if request.args.get('pwa')!=None:
|
65
|
+
session['pwa'] = request.args.get('pwa','').lower()=='true'
|
66
|
+
g.pwa=session.get('pwa', False)
|
67
|
+
|
68
|
+
g.user_agent = user_agents.parse(request.user_agent.string)
|
69
|
+
if g.user_agent.is_bot:
|
70
|
+
abort(400, "invalid")
|
71
|
+
g.proxy_path = values.pop('proxy_path', None) if values else None
|
72
|
+
if g.proxy_path != hconfig(ConfigEnum.proxy_path):
|
73
|
+
abort(400, "Invalid Proxy Path")
|
74
|
+
if endpoint == 'static' or endpoint == "videos":
|
75
|
+
return
|
76
|
+
tmp_secret = values.pop('user_secret', None) if values else None
|
77
|
+
try:
|
78
|
+
if tmp_secret:
|
79
|
+
g.user_uuid = uuid.UUID(tmp_secret)
|
80
|
+
except:
|
81
|
+
# raise PermissionError("Invalid secret")
|
82
|
+
abort(400, 'invalid user')
|
83
|
+
g.is_admin = g.user_uuid == uuid.UUID(hconfig(ConfigEnum.admin_secret))
|
84
|
+
bare_path=request.path.replace(g.proxy_path,"").replace(tmp_secret,"").lower()
|
85
|
+
if not g.is_admin:
|
86
|
+
g.user = User.query.filter(User.uuid == f'{g.user_uuid}').first()
|
87
|
+
if not g.user:
|
88
|
+
abort(401, 'invalid user')
|
89
|
+
if endpoint and ("admin" in endpoint or "api" in endpoint):
|
90
|
+
# raise PermissionError("Access Denied")
|
91
|
+
abort(403, 'Access Denied')
|
92
|
+
if "admin" in bare_path or "api" in bare_path:
|
93
|
+
abort(403, 'Access Denied')
|
94
|
+
|
95
|
+
if hconfig(ConfigEnum.telegram_bot_token):
|
96
|
+
from hiddifypanel.panel.commercial.telegrambot import bot
|
97
|
+
g.bot=bot
|
98
|
+
# print(g.user)
|
4
99
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
100
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|