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.
Files changed (72) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,19 @@
1
- # 2023-04-08T15:11:20.758927
2
- from pyarmor_runtime_000000 import __pyarmor__
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\xd0\x07\x00\x00\x12\t\x04\x00\ng<\xfb\r\xaf\x1f\xfb\xb9\xa47Zi#dE\x00\x00\x00\x00\x00\x00\x00\x00\xed"i\x96~\x9b+\xb4\xb2)\xb2=v}\xea\xaePF\xfc\xeb@\xa1\x9b\xb1l\xa0\xb0g8\xad\x1c\xb98\xd0u\x91g\xda\t{?\xef\x90T\x8be\xe2\xeb\x0bB\xdct$\xea\x10\xee\x07a2\x92\xf0@g\xe3\x7f\xbcU\xa4\xd4R\xb3v\xc7\x14L\xa9:V\x9a$\xdc"\xc3\xb4\xdc\x95\x1c\xc0^\xef)\xfc\xc9\xab\xbaP\xbbb\xbeX\x167\x08\xc2K\x1a\xc1\x1eA\xc3b/\x04K\xe9:\xb3Qw[\xbf\xf8\x9c\xe7\xda\x1d\xe8\x01\xbc\xa3ah\xafR"\xb2c@\x0e\xd4\xe0*\x01\xed\x85\xf03\xa7\xb5\x8ak(\xe2g_F\xdd$\xae\x97c\x8b\xfc\xe2\xb0\xe6^\x16G\xca\xff\xb0Y\xfbP\xbe\xa3Hs\xffvB#?\xae\xff:\xdc\x8d\xf3(\x1b\xc9L\xc3\x1c\xfd\xf5\xac\xb4m5\x9c\x83\x0eP\xfc{\x18IuA\xf0\x02)2%\xea2\x0b\xef\t\xc1\xf5\xe4\x90|c\xdf\xd4\x83}\n\xa0\xb0f\xa7\x08\x19t\xe7qqQ"2W\x9a\xb4\xdd\xe5\x9f+c\x0f\xd0-\n\xcb\x1c\n\x93\x84\xe1"E\x8b\x11W\ry\x92%\x15\xb2\x89\xa7*\x12s\xf6*B\xbf\x80\x1bR\xb3\xaf#\x8efq\x06&\x01\xc0\xb5Rf\xd2\x12D\xf7\xaeJ.@\xe4\xd9\\\xda\x86G\x00\xbdU!\x86\xbc\xf3\x19\xee\x1e\xc2y\xf6|l\xdc\x80\x84\x86\x1f;\xbb+P\xdcY>\xe8B\x7f\x87#LAi3\x8e\xd6\x04xh\x08\x02\xc2E\xca\xf7\xf3\xcaE\x10h\xac\x94Sp\xd8i\xcc\x9f\xfc}$\xb6\x9d\x9e\xba\x14\xa4\xe6`\x12N\x18a\xd3\xe4 \x99\xa5\xc6jE;NL}\xc1a\xef\xef\xdd5\xa1\xc8\xe7\xafc\xbd\xd2\xd0Z]M\xb6\x18a\xa8\xe6H`\x991\xe7\x18&\xcd;\x8e_D$\x83\x86\x8ff\xe3X\xc3\xb8\x88!\xfa\xd5\x08<\xbc\xe1\xb2e\x81_\xda\xe0\xb0w\xdf\xa1\xa5`:\x0e\x8f\x1f%i[4\'6 \xcd\xd1\xf8\xf0Q"\x03g\x93\x7f0\xa2nd\xef\xe0\xebIE"\xc0\x96Z\xc8\xce\x94.\xbb\x15\xb1\x8cH\xa2*\xf7\xf3\xdc(\xa0\x18\x0b\x0b\t\n\xb4\x7f\xa0/\\X\r\xd2X\xf2\x9da%\x9c\x12\xee\x07\xfb|\xe7\xb25;W\xc6\xde\xcc\x8e\xce\x11\xe2M\x80:\ns\x87\xef\x077\x19%\xf5\xfc\x95\xcfc\xc64\xc9S\xab\x8d$\xe8\xa4\xf5\xaf\xb8\xbf\xbe8\xb5\x12\xd3p|\xdbd\xa5\xd3L5a\xabm4\xca\xe6\xf7\x03\xa3\x94\x01\x14g\xc3\'f],\x8a\xe8\xd2:\x8c\x91\x13\xce\xfel&$=\xab?\x83\xe7\x99\x8a\xc8\x11\x0e\xb6\x17\x8b\x91\xe4\x9f\xc9\xc8\xd7\xc2\x9c\x1b\xf1\xd1%e+\x05\x99\xd5`\xf6\x13MS\x19\xb2\xd0:niUuo\x03m\x8a\x87\xb6g\x179u\xea\xe6\xe5\xd0\xa2\xb70\xb9\x8cx#8\xe1\x9b\x0f\xcf\xa6\x0fNk\xa6\xd7\x1d\xf3\xc4\xa2Y\xf5\xe8\x1b\xb8\xcb[\xe3 \x8f\x92(D\xe2?$\xd0\x9dna\xa308\x86a\xcd\x16\x02>\x1b\xcd5\xedU_\x8d\xf63\x15\x18\x95ZD\x9a|(\xaa\xee\x08N\xac{E\x02\r$\xb1\xa5\xe5\x90\xc4\xf9;\xea"\xe3\xa6\xf9\x03\x1fj\xcb\x99\x8e\xd18\x9a\xbd\x9eog^\xd3:\xbdN+\xe9\xea\xac\xef\xd4\x9fJ1\x83\xab"Ql*\xa6\xb3\xed\x00\x1a\xea\x7f{\xe1\x1d\x1d-\xb1\x96\x0b\xe7asuB\x05\x80\xf8\xf8;C\x16\xa7\xae\xdc\x9c\x1e!"\xfb\xf5i\xd1{;\x0b\x17\x0fh\x1e\n\xf8hnv\xda\xba\xb8\x10\x15\xfeQ\xb6\x87\xed)\x06Y?\xcf#\x8c\x02\xc1\xee\xb7_\xca:\x07Q\x90\x17\xbe*H\xb2\xee\x17H\x98q\xddM\x8b\xe3|\xdaiQS`\xe2\xbc\x92\x04j\x1fLP\xe2$n\xb2\xcd_\xe92\xab\x9e\xa2\xb6 $\xde\x8cW\xed-\x10\xd7\xea\x8a\xcbk\xb3\x95>"\xd4<G]\xd7t\xb6<\xba\xcd\xfe\x96wHb\x8a@\xae\x98\x9fz\xe1\xfe\xdb\xa5\x90z\xe8\xb4/\x06\xc4\xbe\xb1\x0e\xd28{\xe0,?e\x9fs\xdc~-\xf1\xff\xee 12\xa2\xd5\xe7\xb8\xe6s\x07I\x17\xc6C5\x15\xf2aV\xb7>\xac#>\x15\\CK\xf2\xe8K.\xe2\x91t\xc6\xde6o?\x8b\x07F \x98\xfe\xb2\xd2%9\x00\xe2y0s\xecv\xca\xb0z\x92\xcai\x1cB\xdf\xeb\xb2\x03\x9d#\xe0\xd4\x94\xee\xa2%\x94c\x9ew\xb7"\x14|.\x1bv\x9c!\xb8/T\xf6\xd2!%D\x8b\x7f\x85\x1e\xe4\xde\xd0h\xf4\x03M\xca\x15\xe6c\x8c!w\xe7}\xa0K\xaf(\xbfn@\xc5\x83\x80H\x00r\xe0\xf3M{\xd4\x89\x970\xa4\x10\xe44\xbdx\x8e\xc2\x01~s\xb2-r\x0e\xfc\xfb\x0bLb\x0e\xc5&\xc8WG\xfa\x91\x7f\xd3\x0caR\xb0\xf5\xc4\x0e\xcem\x08X{\xbcE\xcf\xfb\x1b\x009\xcc\x879\xa1\xb0\x1f\x1e\xb2\xff\x8d\xd5\'%\xf3F\xf8\x96\x9f\x0c#\x0b\xb9-\x1a\xcc3+\x0f\xdf\xf5\xf7^\x17\xa0\xac\x138\xf1\x99\xf0\xe1\x9b\xf4O,\xf7T9\xc1\xdf\xc4\x91\xf6\xd8\xe23\xed\xda>[X8\x0f\n\x9bj\x1aa\x1dv:\xbd\xf7[\xca/o`iF@\xe8\xb4\xec\xca\x94\x127Kf\xcav\x9b0\x95\xda\xba\xb97\xf9Y\x1bq\xe1(\xae\xf5\xfc)\xec\xf0I\xc4\xbd\x12\x0b3?\xde\x1a\xa5\xe8\x99v\xed\xac\xa0p\xc7\xfd]O\xa7\xfe\xf4\x0eR\xc7\x8c\xd1\xc6r\xf3\xfc\xda\xa4\x14\xc6\x88Z\xc9\x91\x08\xd2Jo \xa8\x0c\xe1\x97H\xe7\x17U\n>\xa2\xbe\xdc<dM[\xdf\xb6\x10\xad8NU\xd7D\xeb}z.\xb3\xa8\x92\xd3\x95\x89A\x08\xef\xc4N\xb5\xc2)t4\xb1\x89\xf1\xb8\xc9\xcc\xd7\xf8\xb4q\xc0\xa1E\x1a\xe4\xdaE\x8f\xe7\xe4\xe3\x1bQ_\xa6\xe8\xa5\x16\x0b@\xe9Z\xb9\x1f\x87\xda\x8d\xfauG\xcc\x89\xb0\x92\xd5\xe1\xb3\x07\xfb\xdc"\x94O\x1c\x11.\xa8\xd7\xde\x06\xa7\x1f{\xcd\xe3)3\x83\x1b\xf8p\xebiB\xa3U,*\xab\x88[\xdd~\xabi\x8e\xb2S\xf3N\xef\xef\x08\x8d?\x9b\xb0\xc9\xb9%\xdd1\xe9\x15/\x02\xf9\xf7\x14\xb58\xb6R\xdcr*&\xe3\xdf>\x18o\x19\n\xc7\xa6F\x99\xe5l\xfds\xafG\xcb\xd3\xfc\xf0\xce\xf6\xa0\x1e\x05\xc8\xbf\x00`\xe7\xcc\xa4\x99\xf01\xff}\x1f\xfd\xc6?\x89\nV\x8ej\xfe\xf2\xcc:\xfa\xf3+?\xf3\xd4;d\xf0]\x82\x87\xcb\x03\x03\xe1\xc5]\x97\x9b\x87\xc8\x81Pf\x0f\x96\xd3\xf2\xb0\x1d\xff. \xde\t\xad\x81\x0f\xb4\xe6\xb6\xd0\xbdF`Bl\x91\xeaI\xfb\t\xe41\xe4\xa9m\x01\x86\xa2wf\x9d\x0b\x86"\x027\xc9\xb0 \xd2\xdd\x96\xf4\x94)\xceY|s\xdf\x01\xc9\x1f\xcf$\xe35b)#\xd4\xbe\xb9@\x8e\x1b#.\xa1\x89\xee\xf8\nA\t\xfa\xca\x1b\x8f\x89\xb7x\x95>\xad\xb919<\x16\xcc\x12:\xd6\x90?\xde\xd2\rP\x80\xf5i\xcc\x15#\xfdG\xf3U9\x90\xf4\xfe\xbd\x0e\xc3\x19\x9e\xb2D\xf7\xbdY\x9fY=K\\\xd6\xfdu\xa2,\xb0\x8f\x15!h\x00\xe5\x0f\'\xa4Fol\xdb2\x82#\x81tC\xb2\x14\x7f+\xac\xf6\xbbK\x85\x90EE\xa3 \x90\x7f\xca\xaa\xde\x0c\x91Y\x8f_e\x96\xe4\xe8"fEr\xcb\x07\xe0\xa5R\x12\x991\x9f\xefV\xaaM\x0f\xcc\xbd\x98\xf5\xda\xed\x88X7\xad\xdef\xbd<\xb8/\xdf\x82\x833\xf6+\x0bl7\xca\xed\x8aX\xe0M\x8c!V\xcb\xcc\xefU\xbc;\xf8\x99\x01\x97\x80\xb4\x1c\x12\x94!\xfe\x9e\x13\x91L-\xd0\x95\xf2\xd8i\xa7\xa1\x94[\xa2*\x1e\xec\x1aR\xdf\x12\x06\xc0BR\x9a\xc9\xaa\xf1\xf6j\xa8\xca2\xb2\x15]yA|n\xef\xb5>\xe6x\x08i\x85\xd3\xc0\x8b\xe0\x04\x1d\xc1\xaf\xc9+`\xe7\x7f\x1c\x86\xabx05\xbd\x81\x9f \xc9\xb7\xe3\x13\xe4\x14Z\x89\thIx\x1b\xfaeKt\xec]\xbd\xcf\xae\xaf~\'\xfa\xfc/\x87\xd7\xa8\xc9q]\xbc\xa5\xad\xe7\xc5\xf5\xb5O\xc5\xe3v.{\x18\xeb/\xde\x14\x90\xe1\xc3\x89\xcc\x03\xcb\xd3VU\xf2qV\xea\xee\xb38\x98\x84\x94\x07\xa8\x01\x8e\xc7\xe1`\x03\x92@WO7\xebuc\xeasZ\xc1\xf4b\xf3C\x8b\x9c')
1
+ from flask import g, send_from_directory, url_for
2
+
3
+
4
+ def send_static(path):
5
+ return send_from_directory('static/assets', path)
6
+
7
+
8
+ def init_app(app):
9
+ @app.url_defaults
10
+ def add_asset(endpoint, values):
11
+ def get_asset(path):
12
+ return url_for('asset', proxy_path=g.proxy_path, path=path)
13
+ g.asset_url = get_asset
14
+
15
+ app.add_url_rule('/<proxy_path>/asset/<path:path>',
16
+ 'asset', view_func=send_static)
17
+ pass
4
18
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
19
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,36 @@
1
- # 2023-04-08T15:11:20.600627
2
- from pyarmor_runtime_000000 import __pyarmor__
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\t\t\x00\x00\x12\t\x04\x00\xad[\xd6\xb6\xad\xd7\x16\xe7\x97\xfe\xb8d\x11\x12\xc8g\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x1d$^\x9a\xe4\xe1\xea4\xfd\xdab)u\xabw\x94\x8a\xd4\x84\xe9\xa3\x0ed\xb6-\xfczGB\xd9\x00\xb1\x17\x83\xf1\xfb\xb3\xefx\x94\xfe7\xd4%h\xd7\xec\x9b\xa6\x1a\xcf\x9f\x181\x10m\x1fCP\x10\xc3NY\xd9\xe7\xf3\xd6\xd1\xd3<\xf3\x1eG\xe4l\xeay\xe0\xba[F\xaf\xee\xc0\xc2\xaf\x11\nt\x83\x1f}\x16n\x10\x99\xd5\x9eR~\xa4\xa3\xb7\x87IC\x8a\x0f\xc7\xa8\xb3\x1fA\xb6$\xf6\x92\xd4\x06\xd4\x1b\x8b\xf3""\x18zpY\x04\xaa\x1e\xfc\x87u\x13\xc6\x1c\x1d\xf8\xa3\xa1CM\xa1g\x9c\x16\xff\xd1~GX\xf2\xa2N\x87\xa4=\x1d``\xcf\xb9\xb1>\x1f}\x88\xc7G\xa7\n%\xf0\\-s\xea\xc0U\'\xc1\x8e\xebb.\x1d\xee\x01\x87\r\x1bm\xa4\xc6@\x85\x08\xc56\xcc;\xe5ti\xd8\xf4ohO\x11%\nK\xe4l^\xa8N\xc0\x16q\xb3\x1c\xf6\xab\x07\xe5\xf6\x9c\x94q\x81MV\xfc\xe7\xe9\xf6\x1d\xd9\xbbj\xa7zp3\xf8\xfc\xb4\x88?\x0f\xc9\xceU\xb7\x87f)=>\xe7\x1d\x9d\x87N\xa2\x17\x10D\x11\x8a\xf0\xf8\xdf\xde0\xe4hs\xf6y\x03\xa8M\x03\xc5\x82\x8b/\xad\xa9\xb3@\x99\xd6\xfc\x9d\xcd\xc3\xdd\x95\xc3\x8d\xef\xff\x0eI\x19\xe9|!\xa174!Br\xab\x1ay\x8f0\xf10\xb9\x16y\x9f\x91\xb3\x1f\xc2\xd6\x08\x04\x9c\xe3MJ\x08f\x19\xcf\x9b\xa0:Q\x15~\x94;B7\xe8\xc6\xe7a\xda\xfe\x175\x8a\xc8\x98\x93\x99\xe8P|\x1d\xdd\t\xc51\xb6\x86\xecZ\xb6Fh\x13\xdd\x14\x18W\x1b\xd4\xa5*W]\xbd\xc9\x94\x82\x13J\xe4F\xef\xbei\x7f"\xbbo}\xe1\x0f\x1d\x16\x9d\x18\x7f\xa34$\r\xe4\xb5\x80\xb0\x00\x9c\xb2<\xdd\xfb\xed\xa7\xd0J\xe4\xe1\xac\x94\xc1\xcf\\c\x81\xd9|\x9d\xd9|\xe5Zr\x82\xf05\x11".\x9d\x81\xea\x10Y\t\x9b\xb2\xa3\x86\xa7s\xf7\x8a\xb8(\xf555\x98P!\x13fz\xf4\xaf\x82"\x98\xc3O@5H\xb7u]\x8c\x8e\xb0H\x14\xcdo\xcexKs\xcc\xf2\x87\xa7X\xe9\xf3\xf2\xcb\x0cH\xe2\xc6\xe1\xdf\xa5{\x94\xd8\xf5O\x85\x8f\x0f\xb7\xd1\x036\xaf\xaf*\xbaO\xee\x17\xf8\xeb\xf8*9\xd8\xe4\x95\x97P\x8f|\x19\t\x89\xc2\x82\xb6\x00\xde#\xb9\x8c\x18K\xdf\n\xd5SK2\xc6\x9f\xc0H\xff\xc2\xaa\xc81\xff:6\x9b\x1bE^\xed\x959\xd53S%\xca\x05\xb8\x06\xf4\x1a\x8fO\x06\xc0\xef\x04\x9d\xa69\xdd\x03^\xa3q\xe6N\xf9O\x9at"\x8a\x930\x14"\xf1\x06\xb7\xc7\xb9q~T8\xc6\x00\x9fC\xf5w\x8d\x9f\xedb2\x9b\xa1\x081@|nD\'\xa4>/B(\x06}\xa7\xbc\'\x81E\xba;{\xf4<\x10i\xff\xf9\x98\x03\x9a\xa6\xc4\x8e\x89\x8d{\xc9 ^\xa0G\xbd4r%\x949\x9a\xa2l\xeaW\xbe\xfa\xb3\x89\x1c\xd2\xb7\xdf0\x81=M\t\x17\x89#\x1a\x8c\xbe\n\x12%\x9d~\x11\xc0^hA\x15\x08\x1a\x9e\x96/o\xaf\xf4\x1fYD\xaeI\xdfJ\x95\xf9JXY\nX\xeeP@\x1bI\x1dt\xf1\xdf\xf30\x85\x10A]\x91:\xc0^\xe8z\x0f\xbc\xb7\x00JM\xa8\x0b\xb9\xb8\x9dy\x80\x8c\xbd_\x7fI\x00%h\xb7\x1d\xf6^\x90\xb5\xfbB\xcf\x86\x84V\x94\xfa\x83\x87^\x08\xfcG\xddq\xbb0b$~"d|\x0c\x063\xbf\xca\'\x04\x84\xb5\xd2\xaa\xa0\xc1\n\xeakj\xf0\n\xb5\x81%\'\x12t\x943\xe2V\x1da\xfc\xc5N\xeaj;5V?\xbbG\xb3C\xabwI-\xe3\xc5\xcc\xd3\xa9+\x89}\xf8\x07\xd4\xbbi\xc0 @\xb9Y\xb8\x95\x9b\xa7\x9cy\xa1\x96\x9b}\x85\xe9\x0bC\xcfV\xf0\x19%]\xf8\x9c\xd6\x10g\x82\x85\x80\x16\xbfp>:\xaf\xbdc\x7f\xc9\xc1\xf0\x1c\xc2\x8b+\xde4\xd5\xd1\xf4#\x96\x0b\x10i\x05\xda\x19\x83S<d\xa2\xab\xbaX\x87|\xbdW\xc3\xeb\xdb\xbd\xff\x1c\xcb\x82U\xb2\xdf\x85\xd4v\x13\x9cC\xea\x18\x02,\x99\xd7\xe5\xde\x9d\xb26\xf7\xe7\xd1\xc7\x8c\xd9\xafJ\xaa\xb0\xe4\xf0\xddq\xdem\xb2#\x9dO \x86\xf8\xbf\x02\x94@}\xea>P\x1a\xef\xf8z\xbc\xc1Tk\x84\xec\x03\x88\xee\x01(\xff\xf0A\x97{Z\x8fb\x03\xf8W<^\xbc\x1bx+\x89\x0e\x11\x0c\xcfk\xea>\xde\x05\x9a\xff\x9e\x1d\xed(\xaa\xa0\xcd\xc4\x86Mb\xcc\xbd\xe5\x99\xa2\xa4\xb1\xefZg4\x17\xec\xab.i\xe4H\xa4`\x02\xd7u\x8dJ>-\x8e\x8d\x81\x81(AN\x9b\x98}0o\xcbP\xd3l\xb5\x0f\x7f\x06\xa5\x1e\x07\x82\xd9\x99W0\xc8\xba\xef\x02?_\xfbI\x18\xf5\x17\x89\xe6\xa7^\xfb\x8eX0\xfa^\x8fF\xa4k\xd5 \xc14\xd0\xf3f\xf0=gT\x03*O\x9c\x1f\xac3\xba+-\x1eT\xd5\x1b!\xf5/\x87\xb5 \xbdT\x95)\xc9\x1a\x94 (\xd4T2\to|\x17\x88\x12\xd6\x8e\xbd\x99\xe8C\xfcnl\xd1\xc0\xaff\xe3\x18\xc1\xdb\xd2Y\x9fh{E\xe8\x15t\xcc\x9d\x9cnD\x9a):\x17\xef\xa2\x13\x9f<q\xac\xa3P)4,\xab\xb1O\x94\xcf\xa6\xdc4\xa8\xd1\x8b4!PL\x17\xc1\\$p\x97\xa1mmLV\xc9\xee\xac\xfb\x0e/@X\xb5\xe7\xb3fQ\xe1\xe8\x85@g\x8eD\xdbo\xd7\xeaz\xe3=\x93\xec\x19\x9d>\xf2uea; \xc9BS\xedVC\xeco\rU\x015\xbb\xf3\xd3\xa3\xb1D2\xdf\x8b\x9f$\x86)A3=\x93U>\x83\x1ci\x94\x05\xcdZ3\xa5c\x98\xe6\x94M\xf0\xea\x05\xb9P\x1e\x83`\x99%\xbe\xcaZ\xc9\xe5]\xd58c\xc0!!2-\x9d\xc3W\xb3\xb5\x14Q\x89\xda\xce\x92E\xca\xc5"*!\xcb\xdb\xfcq\x98\xe9\xf7\n\x0b\xdeU\xe2\xd3\xe8\x81}\xa0\x17F\xf5\x86\xbe\x16\xd2\xd5\xa7\xc5\xbc\xf4"\xc8\xda\xd2Q\xe0%\x9dY\xaa\x00?-n\x0e\xce\xba\x89@r\xb4\xa9fI\xac\xf9\xa9$`tw\xc6\xa4\xef\rUh\x87\x96\xde\xcf\xa9\xce\x1ex\xf4\x9fH\r\x027Y9vP\'\x01\x8cc\xbc\xbe\'\x8bq6\x94\x85\xea\xda\xc0\xe0\x18,\xb3\xd5/d\xdb!B9|OR\x02u\x97\x8b\xf7CN\xedDs\xd6\x0e\xc1\xa5\x828\x84M\x04\xf2\x13J\xba\x84\xa39XS\x87\x80\xb7\x9a\x00\x94\x08\x9dw\xe3\xe5\xfds\xc9\xc9-K\xd4\xe6\xad\xd2v%\xd2B\xf1js\xfe\x91\xf5Z\x97\xa0\xf7\x9c\x8bE3^8A1\x9f4QE\x9d%\xf0\x80\'J\x13\x15%\n\xe8t-\xfd\x07Uq8G\xc2\xe8\xf0\x10T\x0e_r\x1dpR\xe04x#\xc2\xfb\x81\xf1\x90\xd5"\xbcq\xea`=\xd4\x00\xce(\xfb]\xf9\xce\xfa\xa0O\xb5\xd2*\xbf\xb0\x91+\x8d\x90\xe5\xb6em\xbe\xee\x04\xd5\x05\xa4\x19\x99\x0e\x7f$=\xd0>V\xf4\xa7\xe1\xba\x8f\xe4\xb2\xf3\x81\x90\x18\xbc$8\xf3\x99\x13\xb6j\xe1^8\x88\xec\x9f \xf9\x9c\xda\xfdJ\x18\xb6\xf0\xd5\xd9\x9bT\x90u\xdaY\xca\xdf"\xf6\xb4\x11%c\xe6\x04!:\xbb\nB\x98\xd1`\xee6\xb0\x88%\x958\xb9\xd8\xdf?\xe0\xbe\x1a\xb5\xfd\xba\xf6\xbe\xbf\x9dFE\xfe\xad{\xf1\r\nx\xe5\\\x9a\n\x89\xe2\xbdwyG\xd0\xa8\xeb\xc2\x0c\\\xac\x00\xa9\xcdjO\xcda\x0bS\xd5 C\xa1\x8fN\xbcZ6c>\x91x\x93g=m\xce\x98q\x01<\xab\x18\xec-c\x94\xb6\xcf(eq^\x80\x12g\x1f\xaa\x1e\xe3)\xc3\xe8\x0b\xefS\xfe\xa8\x89\xe8\x8a\x90\xa6\xec\x9a\xdd\xaf\xd9e0\xdaa\xe7\x06\x08;\xff\xf6\xf9\x82\xf6\xc6O\x13\xbe\xa7\xd4\xc8\xd0\xe4\xc5\xb4)z\xbe\xfc\xd0}\xda\xddo\xc4\xb0u\x92\xf5+y\xd5 6\xee\x1a\x8c\x075\r\xab?\xa6\xb2\xb4\xe2?\xb5\x00a\xbcp\x0fW\xe3n\xae\x82\xc6\xd2\xd1.\xdc\xb1x\xfd\x188\x8c\x92\xc8DK\xa0\xcb\xae\xfby\xdav\xac\xc6\x18\xfb\xafF\xb5\x16\x18.\xa16#{\xd7\xdb*\x08\xe0.\xaf\xe6\xf2\xc2\x7fs\xa3\xed/\xbcX\xdc=\x81\xe9\x12\x07\x9f^\xcc\xd8\x8d(5[\x93Q\x91B\xbfgj\xf9\xd2\x92\xf3j\x08l=\xa5\x96\x1c\xeb\xe1I\x82d\xad\xc2\x9b\xbf\x98}m\x94\xc5\x07\n\t\xf9\x9e\xda}8|A\xb5SY\x94\x93\x88Qj\xcd6_\x0b\xdcx\xfe\x95[N\x98\xc8\xff\xc7\xefVF\x17~V\'Y8\xb5\xd0i]\x7f\xd7U[BT\x9e\x91\xc4\x13\xf7@\x13\xb1u\xb3/\x91\x8e|X\x92*\x851\x8c\xf0w\x99\x92\xebW\xa5\xca\xc2\xf0n\r\xde\x82\n\xeegsw\xda}\xd5!l_\xd9\xc2\xc2\xaah%\xa4\x078\x97\xa3\x8e\x13\xe2\x90\xcf\xc7\xfc\x12\xf7\xcf\xb2\xe4\x11\xbe\xe9\xc4\xa8`R2\x8f\x95\x08u7~\xbe\x9c\x18\x0b\x06\xda\x922|\x0e\x0b\x8f*\xc43\x02\xa5\xb6\x83\xfc\xdb\x8cr\x0eGe\x97_"G\xde\x01\t\xe0,\xed\xbf\x80\x04\xd7G\xb5\xa8,^\xab\x10\xb1>?\x15\xc4\xa9\xfa\xb6\x18\xf0\x12\xa8\xd2\xbd9k\xd6V\x16\x8d0\xbd~\x12\\[\x1f\xcb,s\xc9=&u\xce\xda\xbbJM\xf3\x81\x1be\x18\x08X\xb7\xa9\x87\xd9\xf8\xbf\xee\xc2\xfa\xea\xf8w\xdc[\xd1[b\xacn\xddv|\xf3K\xc8\xafbY}\xb0\xb9\xed3>;\x97\x1f \xa7\xb3a\xf9\xbe\xfe\x8d\x86Kv\xca\xe4\x87\x97\x1f\xe2\x89\xfd\x10\x01\xa4\xa8&\xa4\x14\xa6\xb9\xcc\x82\xefy')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from hiddifypanel.models import *
2
+ import CloudFlare
3
+
4
+
5
+ def add_or_update_domain(domain,ip,dns_type="A",proxied=True):
6
+ res=False
7
+ if hconfig(ConfigEnum.cloudflare):
8
+ cf=CloudFlare.CloudFlare(token=hconfig(ConfigEnum.cloudflare))
9
+ zone=get_zone(cf, domain)
10
+ if zone:
11
+ dns=get_dns(cf,zone,domain)
12
+ data={'name':domain[:-len(zone['name'])], 'type':dns_type, 'content':ip,'proxied':proxied}
13
+ if dns:
14
+ cf.zones.dns_records.put(zone['id'],dns['id'],data=data)
15
+ else:
16
+ cf.zones.dns_records.post(zone['id'],data=data)
17
+ res= True
18
+ return res
19
+
20
+ def get_zone(cf,domain):
21
+ zones= cf.zones.get();
22
+ res=""
23
+ if zones:
24
+ related_zone=[z for z in zones if z['name'] in domain]
25
+ if len(related_zone):
26
+ res= related_zone[0]
27
+ return res
28
+
29
+ def get_dns(cf,zone,domain):
30
+ dns_rec=cf.zones.dns_records(zone['id'])
31
+ rel_dns=[d for d in dns_rec if d['name']==domain]
32
+ res=""
33
+ if len(rel_dns):
34
+ res=rel_dns[0]
35
+ return res#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
36
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,127 @@
1
- # 2023-04-08T15:11:20.778827
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x80\x15\x00\x00\x12\t\x04\x00\xaf\xce\xda\x1aev\xa2\xd1\xc9\xa2\xc5#\xe7.G\x8f\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xe9\x1c\xc8z\xc7\xaev{=\xaa\x01\x9f\xde\xf7\xc3\xf5\x86\x1e\xca\xb7\x9bXf\xc6\xb0u\x02HG|X\xbf\xc1+\xf9"c\xd8\xe9\xc7\xfc\x0b7CD)\x06\xc7\xd1Y\xcdqZ\x9cJ\xafk\xf2\xe9\xcd\xf2\xc6\x17\xd0e\x0c\xb2\xe3\xa1#S#_9\xb6\x0fAG\xb7\x04\xf0@\xee\x93F\x8a\xaa.\x128(d\xa9\x19\xd7\x1eaSq\xcf\xbf\xd9\xdc\xa0\xb6\x9d\x0fA\x1f\xb9*yZF\x15]\xe2\xbfl\xd6ko1\xf4\xa2\x94\xcclILKA\x11"\x18\xcb\xc8\x1b8\x9d_OT\r\xfc\xed\xae\x84\xb0}!Z\xb9\xc3~1\x87\xa4xe\x84\xa0{\x8f>\xf2\xcfwv\r\'(\xcf\x1a\xad0\xae\x05\xee\xf0_7\x9ez\x00E\xe1\x9f\'/0\x93\x0f\xa9\xb4.\xcb\xf4%8\xc8\xaf]\xac\x9cxE\xe4\xe6(Bg\x86\x8f7p\x9bvNE\x14\t2\xa5\xbd^\xc7\xa5\x91v\x0e2\xbc\xd6\x15QBV\x8e\x8ew\x9f\x1b\x03\xd1\xd9\x06\x0c\xc4q\x1c\xb7\x8b_\xa0\xeb\x0e6N\x97%,S\x17[\xe1\xe9D\xbc\xddw\x9b3\xd7\xd9r?\xaf\x19\xd0nP\xb0\x1e\x84D\x94\x1e\xddS\x80`\xc0{}\xd7\xa8\xf0\xfc%\xa4\xder\x82\xba\xf3\x83N\xa7\xc4\xc5\xc6\xf9\xa5[\xec\xe0\xed\xc2X\x87\xd2\xdaF?\xa6bW\x08\xb0\x11}\x19\xbbD\xaaWC\xaaP,Z%F\xf1m\xaf\xfd7g>\xb33\x18#\xbf\x043\xa1\xdd\xf2\x9c\x08A<+\xda|q.\xe4\xc7\xc7/\xf8\xe3\x0eE\x94\xf9\x1fM\x05\x8e\xef\x08\x7f\x9a\x94\x17!\x83"\xcb\x15\x88<S+#;\xc2\xccU\xe7\x9f\xc6)P\xa2\xc9\xeco\xd0$\x0bYY\xec\x14\xbd(]\x12\xa7_\xd7"\x0f\x07{\x9d\x0c0\xcd\xdf\xe7\x05\x9c\x054\x06\x85\x8f\x1f\xe9;\xb2so\x87:\x80\xc5N\xe7\x10{\x06\xba\xa8c\xfa\xb0\xba_\x07\x0c\x93\xd2n\xaed)\x87\x03b\x8e\xc1\x89\xed\xe1(2\xb5MW\xfe\x1b\x15\xeb\xfd\xd9\x17\x12\xea\x8a\x8e\x82\xc5F\xb6"x-\x08Y\x90\x06\x08\x14\x8b\x07\x1d\xe2\xfe\xe6tre\xcb\xf7T\x9bW\x06h\xd8\x00<r\xabG\xdbJ\xb1\xd3\xfd\x18\xd7\xbcc\x13\x8fC|f\xe4\xac\x9d\xf0\x92NIp\xc3R\xfd#\x91~ \x9d\xe2\xe9\x1d\x99(\xdcB\xa1\xceW\xaf\x13s\xd1\xd92\x00\x98}g\x9dS\xb6\x07\xeb\xc6\xd6\xa0\x1ei\x9a\xf5\xde\x0c\x8c\xb8\xc0\xa5\xd2\xb1\xeb\xdc\xdb\xd2W\xc6\xa7\x16t\xcb8\xf3-\xf6\x9ae`\xa4\xdfQw\xd9#\xd4Bk\xf7\xb0\xa9x\x00\xf8\xa0W\x12\xfa\xc6)\x9f\n\xa8\xa3\x8f\xc50!\x01m\xfd\xc4X./\x04:\x8b\x11\x10A\xbe\x15\xca[\xf7\x05\r\xed"\xb7\xbc\xb0\xf3\x9e\xf9\x1f\xa4\x93=,3\xf2\x8c$\xe0\xf8\x8ca\xbb ,U\xbb\x9e\xd1\xfe\x08\x90\'\xe7\xab\xb1\x14c\xb9\xa9Q\x02]1S\xba[\xcc\x19\xab\x19\x0f\x8b}G\xeb-D=\xe3@\x85\x04\x1f\x8d\xf9".S\x17y\x7fgdq\xd5\xa9g\xbf\xacY\xec\x19\xc1^\xa4\x85\xb4S\x88I\x18\x8f\xf3\x96s,\xa6\xe1\xdfJ\xbbD\x9b\xcbo\x84y\xfb\xe3M\x07"6\xa0\x19\xa5@P\xff\xe9\xddH\xaf\x98\xee\xd5d\x91\x9c\xa0v\n\xe3\xc7N\xd2\xfc\x1f\x05*\xa6\xf2\x16\x1a\x16e\xdd\'@M\xc7\x98g\x93r\xa4\x08\xf8\x81G\xca\xf7\xc1\x1b<c\xc7\x85x\x17\xdf\xf7\xf0\xac\x9f\xa6.\xd4*j\xe3G}\xfd\xba\xad\xe5\xae\xf6\xb1\xa9\xb8\x8b|\xa2\xae\xa2{J\x15K\x90Z\xa8W\xa9\xbb\x92\xa7\xf47g=\xc8\xae\xd7%\xfc\xe2\xa2\xa4\x0f\x99\xb9\x17\xd7-I\x8f\x96fq\xbf\x12\xa6\xca\x9d\xb8\xacZ<Y\xe6u\x93)\xc0v\x98\'\xa9\xc4(\xa1\x94;\xbd)\xa9!\xf9d\xeef=\x9aA\x80+\x13\x95\xff}V9n\xfc\xd4\xee\x04\xa3\xd4\xef\xc7H\xfe\t oo\x8c\xfe\x06y&S\xeaF\x18\xc4\xe6\xab\x8c]\xe7\xb5y\x08\xd1f\xfd\xc5\xdb\n\x17\x1b.\x111o\xf7\x10Q\xce_\xef\xc8\x0c\xc3\xc3\xc2\xb9y\xa5Nwp\x82\x16<\x90\xbe\xe0\xdc\x08\x16\xb1\xd2\x9cmE\x87\xc5\xa9\xda\xfch\xd8\xcd\xd6e\x18\xf6\x88LJ\xcd\xcc\xda5\xc4c_\x9f\xd7\x16\x00\x18\xf5\x0b\xf5\xfe\x0b\xf5^v\xc3\xc6\xf8\xb7\xd4c\xd8H\xd6W\xa4mW\x8e\xa5\xa1J\x19\xd7\x9b\x19_\xb6|U\xa8\xca\xed\xef\x89\x8df$\x12#\x0byC\xa5S\x10\xe5\x8b\x80KRC\xe9\xf8\xe3m\xe70\x9b\xfd\xbe\xef\xd9\xe7<\xee\xff\x08\xbf\xb7\x05\x12W\x98\r\'EY\xf5\xc4*\xe4\x05i\x7f96\xdf\xd9\xe5t\x9a\xc1\x989\xbb\xaa\xaf\xe4\xb3$\xc0\x15\xf48\x1b\xda:&\x00\xe6\xc7>p\xff\xd1~\xe9\x8e,^7\x91K\x19B\xdax)\x18)\x13z\xf0\xc1\xfd\xc0J\x9e\x9e&\x13\xd6\xe2\x06\xe2:\x05\xc4\xbf\x94\x1c\xaf(\x1dnFC\xb9\r\x01\x19m(\xae\xa0\xe60\\\x05\xfeB\x0c\x02\xael\x14\x04\x84\x861\xd9\xa7\xe9\x93\xf1^:\xe5$S;]\xaf\xceV\x88{\x0c\x1e\xc6\xcf[\xf6=KO\x949\xb6v\xf2\x851\xd8\xbb\xec\xdd\xb9\xcaj`\x90f\xd4\xffD\x1dvx^F\xa1qs^\x85u|\x04r\x8e\x01Y\xbc\xa4\x12\xe1\x0f\xe4\xafSM\x110r\x00f\xb9\x86\x9a\xe0v\x150\x9d\x14,\xe8\xbe\x04\xea\x9e\xb7\xf3Gl4\xe7_^\xf8\x1f\xd8\x96BO\xad\xb8\x07\x82{v\xa1\x04Y\xd0\x1f\xc2\x1a\xc2$\xa5\xa8@\xe0]m.eCh\x0enb\xed\xf1t\x91-\xdd\xf3D@_\xb7\xf4\xaa\xf3\x1eOn\xb6\n\xee\x93s\xe9\xa3\x17e\xe8\xed\xa8\xe0\n~\xcc~L~\x80\xf7>\x03\xc23W\x18YB\xdd\xba\x94\xa1"(\xd2A\xa7f-\xba\x96|M\x9c\xa4\xe4^jV\xb7\x9c\xd8VN6?(%6\xa5 \xf9\xb3f\x1a\x85\x93\xc5\x87\xd4B\xfc:\xebj\x9d\x89!\xe2\xcdo_\xff\xcf\xdb\xc6ME\xef\xde\xdcI\xb7\x82\x0c\xd3\xe0L\xaa\x86<\x00\x90~\xb2\x1f\xfc\x91?r\x149\xb46\xa2\xd9\xc3kO\xd6\xbew>\xd7\xb7\xbd\x15j\x90\xb8\x0f\xde\xcf\xd0\\+\x81|\x88\xb0I\xa4\xb10T[\xa28\xc7*\x01\xabQB\xdb\xccU\xf7?\xb5\x19\x97#a\x974\xbcN\x06\x85\x1e\xc0\xf67\x97\xaco\x17L\t$\x86\x900\xf4\xad\xd1\x91g4X}\xf6k\xb7\x1a\xb8fm\x02\xa2\xc5V\xdf\x08\xfeA\xff\xe7u\xa0\x84w0\xe47O`\x12\x04\xf7\x85+\x18\xf1\xd7\x80&\xe9\xf9\x81\x08\xb8k\x10R8\xa8\x8b\x07\x91\xdey\xd7\xe18I\xac\xd1GYd\x85\xf9\xe9|h\x8e\x81\x8b)\xf71\xd4\xd5\xdc\xbef J\xb5\x17)=;O\x1f1H\x0e\x11>\xd5\xe6\x1b\x08\xcd\xce\x86\x16#F\xd1\xd3\x02~\xcf\xbf\xa3@\xb5 \x88\x9a;j\r_\xa3\xc7E\xc1P|\xfe\x1b\xdf\x0e\x9e\x1f?\r\xeb\xa7\xfc\x00\xebK\xb3\x13\xf1\xefh$>\x8c\xc0\x9e=\x93\x1fA\xebq\x15P\x82\x10\x92\xb0\xf2:\x05\x80!\xc8\xd3\xd3#\xcb\xe1\xa1\xb0\xde\x160\xd4o\x13\xd1:]\xb3\xec\\\x82\x96K\x99\x03\xbf6\x075\xea\xdb\x8a\xe1\x1d\x18i\xba\xde\x06\x96\x9e\xac\x8d\x00\xff\xb3>L\xb0O\x8f\xc2\xc2\xf3\xae\xcfh\x86\xf5\x19l\x97\xd0\xc8\x84^\x04\x15\x88\x9c\x8d\xb5L\xfbK}zl\xe4\x8a\xfaLw\xefXM, p\xfa\xf4D%\x9cWDA\x85\xc1(\xf3i\xe2K\xd0C\xe7+\x92\x9a\x1c\x1f\\\x04_\xb0\xd7\x08\xa5Q\t\xe4\xad\x0c\x0fn\xf8\x17`\xc1\xf4\xc1\x83\xd0?\xb7\x08\xc7\xcc\xcf\x90GZ\x11\'\x07\xf7,f\x04\xe24\xcb1\x17\xf7\xf1\x99\x9e\xd4\xbf\x7f\x12\xdd\xdd\xed\x8cG4Bp\\\x15\xd4)\xacFx\x9bQW*T?\xfb\xf1\xcf8\xef\xd2U)\xc6\x02\xce\x970\xd4\xbeV\xcd\xb0\x98^\xe1\xf6\xd6L~6;\xa6\xeb1\xb1u\x9eP9"\x84\xaa\xbc\x03\'\xda\x88\xc8\xa1U\xd6\xe9\tP\x8a\x81\xdbG%\xfe\xa2\xbf\xa2\xff\x9d\x9c6\xbd\x1f\x87\xfc\xd5;\x0c6\x80\xc5\x7f$B\x80#;R\xdc\x9bY\xf5a\xcca \x88\xd4c\xbe\xcb\x83]\xb4rEG\xf3}\xa1X\xc0&3#\xd6\x18\xde\x1f!\xe3>\xea\x81\xc8\xba\x1f\xe2d\xd2\xf4\x14\x08`\x8b\xe7\x86H\xcbH\x91\x8c\x85\xd4\x85L\xc9\xb4\xda\xfb\xc5\xbdg]\xe2\xd9\xed\xe1]\xe8ly\\\x89RK\x00\xdfI\x16\xc1\x93\xdfE\xf2\xc3\xfe\xb4\xec#|?\xf0V\xb9[\xa1\xd6\xd2 ze\x1b\xf7\x07\x92\x16?4Cj\xd3\xb8\xd3\xbb\x04\xb8\xd7DP\xb0\xa8\xe8\xd3\xaa>\xbc\x881\xa1\xd4\xc6_\x8f\xd6%\x99$\xc6\x8e\xa4\xc3\xb0\x08\xc3G\x8c)\x11A\xe3\xe6\xb2\x1dX\x1bv\xdf\xfdx\xab\x1a\x83Ez\x10\xae\x11^\xd7\xc3\xda\xd1~\x10\xdfu\xf7\xc3\xa3\xaf\xae\x00\xafy\x1e\xcd\x1f\xd0)`\xfa\xda\xbc\x05\xce}\xe5b@j\xf4\xc8 8\x84[\xee\xf3\xf0\xcd\xd6\xf5\x0c\x94arf\xc3\xb2S\x8e\x9bg\xab\x1f2u"\xa8\x97\x80\x0bk\xb3\x97\xafj5\xda\xf0,\x7f\xb5\x9d\xae\x88\xd7\n\xea(\xcev\xb4\xd5@\x024v\x83+|\x86t\xae>5\x01\xe2\x88\xc37v\xb3\xb3\x94r\x104\xf2\xe1\x7f\x16\\\xbe\xa1\xaf\x18\xd9\x08\x15\x10\xea\xcao !\x07\xf8\xcd\xab1\xbdT\xcc\xda\xdayq\xcc\x86\x00\xe0\x89\x14\xc1g\x8f\x8br\xd2\x88\x97\xff\xf4%\xd8f\x82=`\xf3<\xf8\x8d"\x19"*\xef\x8f\x15\xeb\x88H\x02hs\x0e\x97\x9c\xba\x0bQ\xdc\x99\xe2\x8d\x01d\xfe\x1f+\xab\xe0!\x0b8=le\x13Nt\xa7\xbd\xdd\xe4\x9c\xcc\xce\xab?K\xcd_\xc8\xbf\x15\xe2\xaa\xc0D\x14\xff\xd3\x08[\x9a\xda\xf7\xd0\x90\x13[;l\xb7\xe4WJo\xc8\xddh\xcd\x8e\xd5Y\x81K5\x9a\xd5\x00\x13\x98d1Xe\x15\xcb\x12u<2\x11\x8a\x9f\xf5\x8c\xa1GQ\xf1b\xa1\x16dnG\xc9\xeb\tZ\x19\x0f\r\xc6\xf5\xa8Q/\x1d\x17g#}M\x1c\xeb\x11/\xfd\x95\x99\xc5\xb9\xa2\xe52V0\x9dJu\x88\x90\x99\x04\xde\x0c\xa3\xc3tU\xf4\x84+\xd6\x99\x97\x06\t\xfb\xc4\xba\xea\x06\r\xd4S\xab\x963\xd9\xcc\xae\x11\xf1\x82\x92\x11l\x9fU\xaa\xfa\xe8\xba\x03|\xefR\x16`jS\xc2`\x8fyRS\xd0\x1c\xe78JO\x17\x96\x08\xfdZQ\xa9\x12\xbc{\\~\x03\xdeF\xb3\xd1\x10\xa0\x85\xe36q\xc6\xa5\x84v0\x84\x8d\xe3n\xbe6\x11ym\x1b#\x05\x97AP+C\xa1\xfaDg\xca\xf7L8/[\xb2\x80\xb92\xedv\x84\xfcJY\xb8\xac\xc9R\xa9N\x99\xad\xde\x1f\xf0\x19\xec\xed\xd7\xa9w\xd6\xdcSq{\xb2r\x1c\x0c\x05\x0b\xdd\x15\xef4\xd5\xaa\x02\xbfM\x96\xb4j\x86\x102\x10V\xdf\xe0\x99~\xbc\x7f\x89\x16\x9b\x95\x03\\\xda-3\xa6~\xb4\xf7_\x05\niJ\x12|\xf72u\xe6\x14\x1d7\xf5\xfcO\x16\x84\xc7u\x89\xb5l\xd8V\')\xfd=\x99\x8a\x01dsh6\x99H\xb8\x8eO\x0b2W\xd5\xdc\x17\xfa\xf1\xec&\xcb\x9c\xe4\x134T\xf9\xbcQ_\x01>[=\x0f\xfe~f\x91W\x1eH\xee\x85"t)U@\x9bJ\xe5\xa2_\xbb\\M\xeab\xe2Q\xd6\xab\x0f\x94\xf5h\x19 y\xda_\x07\xb7\xe7,\x8a\xeb\x9d\xa1\xc6}Y\xc2\x04\xe3:\x18\xb3\x9ev\x17\xce\x82 \x94\x11\xa5\xf7\xfdH\x96\xf4&\x96z\xc0l$\xa1\xa9?\x10\xfe\xffc\xd9\xedGo\xe8y\x19:b(\xd9W\xc4\xbd3%c\x9eK^\xf6e%f\xfbL#j\x81G\xfa\x98\r\xdb\xb1\xc3\x16W\xacJ\xcb~N\xectrE\x94\x96\x01\t\xa7E\xa6<p\n\x8b!\xb5\xea\x10\x1b\xecZQ\xbf\xcb\x9c\xbf\xba\xa9\x8b[^\x8ah~\xbb\x89\xd16\x9a\x05]\xc3w:O\x8f\xfc-:\xcf\xf4K\xd6c\xdf\x96q-=D,61\xae\x1b\x04W\xb8\xd4\x95\x80\xedM\xe5\x98@gsM\x8f\xb3h{~\x93\xb0\xa4#\xd2\xc2\xb3x-<%\x12T\x8bg\x0bJ\x0bSC(\x94\x00P\xb1\xbc,\xf8\xef\xb1z\x05\x1bhL\xf0\xa3\xcfy\x9b\x12\x14|b\x9a#p\xa4\xe7\xcf\x84w\xdc\x850\xeb\x8d\x84(\x08\xd2\x8c\xf5\xd8\xdb\x04\x1d-\xbb_m\x9b\x91\x830\xd73\x92\x0b\x1aX\xff\xbe\x84\xc08\x17\x1a%\x82\xcb\x85\xbcI\xda\xbe\xc6\xe1K\xe3h\xb6p\xdfN\x1b\x86c\xe8\x1c\x1d&N\x87$W\x03\x91\x03\xdeTr@\x81\x8c8\x9b[j\xe3\x8e\xe6`\x01\xe99\xbbfD\x98\xc1d&\x8cX\x81\xbb\x99\xff\xde\xf2\xe5\xac\xc9\x80\xb6K\x04"H\x01\xc5\x92\x0e\x11\xfa\x99 \xeb\x1fH\x1d\xf80\xee7\xe8\x9f\xe9\x92\xf3B\x90\x0b\x81\x1d\x80\xb3\xbf\xbd\xb4?\x13\x11\xe3E\x85\xa2\xe7\xf5\xb6\x8e\xddu\xefN\x9f\xd1\xb9p!\xf2\xe3\x10\xbd\x8dti6\xf8\xa0\xe6\xac\xf5\x04\x93\xdc\xb3\xa0\x14\xec\xe8\x92\xdb\xe7\xafi\xf3_\x04\x9f\xb6\x93E\x13\xb9\xfe\xf1\xed}h\xb09\xbe\x8d&\xe1\xc5\xcb\xba\xad%a\xadzP\xc3"\xdca\x17\xf0\x04\x00\x0e\x02{M\xbe-\xce\n\xbd\xae\t\xee\xdd\x92\x08\x03\x8d\x85yX\xf8@\xff\xa8\x03\xb53\x95\xda\x00l\xe1\xfe\xec\x16S\xc4R\xbc\x01\x90\x06!_\xb4\xe9R\x0e(\xcd\x8d\xbf\xf2o\xae\x9d\xfa/\x1c\xd1\x876\xaa\xf7\x90\xfc\xd9T\xf7\xf2hy\xee\xc2\xddTE6=\xbec\xb4\\\xfbc\xc9\x9fT!\xfa\xd5\x9f\xf66\xda\xbfe6\x8f\xd2\x95\x86N\x15\xfcS_\xb3\x82\x06\x80I\xc9\x01\xe7\xe0\xfa\xc5\xa0e3E!\x86\xb8i.\x86N"\xdd\xfaI\x8d\xdfS\xf3\xb3h\xd9R\x1aN\xcf\x0cf\x93\xf2\xc5\xcd \xe8G\xc0\xb0KC)z-\xd8\xd6\xfc\xdbSs\xb0\xb4\xdb8\xa1F,4"\x14\xb2k\xe6r\x16a\\\x91"9"\xb0\x0b\x9f\x11[\xcc9Y\xc0=%m\xa6\xda]\xd0\x19\xce\xf5\xber\xde\x19\xb3\x16&\\~\xf9\xed\x1a\r\xdb\xb8\t\xa2\x17\x04\xa7\x05\x98\x83\xd6\xc7\t\xc5}\xdd7Z\xf7q\xb9B*!\x8b=q!\x15\xd2\x1d\xc1\xe8y\x14\xa9S\xe3\x03\x8c\xd2\x17\x84\x03\x18t\xe40Sum\xc7w\x8b\x1b\x85/h4\xf1;\x12F*5\x05H\xb9\xcf\x16e*@\x94\xe8I\xac0/Q|\xbc\x1a\x83\x1c#\xa9\x14\t\xa8\x14\x82`\xdd\xe5\xaeMBd\x88\x90\x06\xd2|6ZN\x95!\x11\x15\xf9O\xac\xbeZ\xf3\xb3.i7\x1f<\x10\x7fl\x0b}C\xdaU\xef\xc7\x804\x16M\x8b\xa2\xd2H\xfcj\xc84{\x0b#\xd2T\x7f@\xc6>\r#\xc7\x1b\xd6\xa8\xd1+\x95\x98\x0f^\x1aYE\xce\xae2\x14\xde\xa7\xb1\x19\x854 <\x03@~\xf0m\xd6A;\xb3\xaf\xfc\xf3}\xf7\xc1\xb8Nm\x906x\xa6\xf9\xa1\xe1`UY,\x96%\x0e\'\x03Zs\xbaZ\xaaw \xefqV\xee_6\xfb\x94\xee\xfb\'\x074[e)z\xa8\xb65U\xef2\x1f\x93H\x9b~\x91\xb2\xf1ztX\x01\x18\x92\xe7\xae\x8a\x81\xb4\xbf\xa7q<\x99i\x9ek\xe26\x80\n\xab\x17\x86\xd2J\x7f\x0b."\xc3\x97\xa8J$\xed\x923!s\xba\xfbf\xd8\x05\xa3\xf2\xcf~\x03a@\xf8\x13\x16\xa9Rx\xae<\xf5\xa3\xbbL\x0e\xcezW\xd4\xe5y\x9f\x02N\xa6T\xcc3j\xf5\xa6\x90\xb3I\xa3\xa3\xfc\x9d\x7fx\xe5\x08VPb\\\xd38\xb0K\x1c\xa6\xbfB\xbd\x15\xedo\x07/\x9f\x86\xb6\x97\x86\xcb\xe2\xf2\xaa\x0fe(\xf4\xab\xdc#\xa8\xf2\xf5P\xb9z\xd7\xd8\x8eJ\\\xb5\xdev8\xed\x00\xf4j\xec\x02`\xe5YS{\xd4\xf5\xae\xfe\x83?OP\xa4\'\x00)Q\xdfD>!\xc4\x8c\x0b\x94\xb9\x1a\'\xe5\xcc\x1ct\xf5?\xf4\x83\xbb\x06>\x87\xaeP\xcc\x95\x02p\x84?\x14\xfa\x1a\x1d\xc0\xf3;\x83~\xa8[\xac\xad\x8e\x01\x15\x9f\xbc/\xee\xdd8}L\x9c$\xa4\xbfe\xe4Ec%\xc3\x05KN\xef\xcc\xa2\\\x0c\x14\x9f\xec\xf6\x1d\xe0\xbea\x00\xc7k\x11:tO\x11 \xa3G\xde\xaef\x00!\xbe\xaeB\x04\xe0\x17\xb9\xceM\xcb;!\xc9\xfb\x99O\xd9\xab\xe9\xb9\x99\xf2\xe4\xa1w\xbc8%\x02z\x99\x90\xdf\x1e\xe1\x08\x99\x110\x85`UN\xce\xfc]\xeb\x9b_i\x92x\xaf\x82\xbfA\n\t\xe7\xd2\xa8\x7f\xb9\xab\xed5\xec\xcb?\xa2\xaa)\xbe\xc2\x06\xb5\xfb\x17M\xa5\xc5\xc8\x07Z\x9a\x85]/j-\xbb\x99\xcc\xf0\x04\x12\xb4\xdd\xf5Q\xfd\n\x06\xdc`I\x96\xbe\x88\x84{\x89\xaa\xb4\xd2\xa9\xae\xf4\x04]\x96\x86\x1c\xd5\x1dWc\x1e\xc2\xf3G:\xf6\x95&\xf3\xb5\x8f\xdc#&\xca\xe1\x0f\x91\x9f\x15\xb6\x07\xc7k\xceo\xdf{L(\x10\x0b\x06w\xd85\xf8{\x1b\x08\xbc\xa4\x1f\xb2\x7f\xb4<\xf9\xbbZ|J"<7<N?Q\x98\xc3\t\xbc\x1a\xdao\xb7,\x9dO^m\xd4\x8fn\xdb\'\xe3z\xd56\xae!Y\xa6\x91\xdex\x02\xe9Y\xc3nS\xc7\x0e,!<\x87~\x994\x15\xd8\x86E\x93c\x95\x8c\x94O\xccg%\xfd\xa6\x02w!:\x8e\x98\xfdk\x9a\xbd\x95\xf3\x91(c\r\xf8\xe0\xc7\x84\x98\xeda\xc1\xc9/%dST4"/\x904j~Z(\xd0X\xa4"\xa7\xbc~\xf2a\x95\xd0\xdd\x18\xf4\x96WI\x90\x88\x96\xc6\xed\x08\xaf)+\x8b\x95M\xf7$\xaeU\xc1\xe4\x06={\xdfk\x0e\xca\xa6\xbc\n\xd8\x9dc3\x87\x98\xf1\x9b\xfa\xc5\x05\xb8\x07\xf8\xe6\tN\x08\xa5o\x16\x05\xc8\xd3\xec\x8f\x04l\xf2\x8a[!\x8c\xae\x91\xca\x8b\x96\xe8\x83\x96\x03`\x93q\xd2\xb4\xd5\xbd\xe8u>\xd0\xc8\xf6\xdf\x14:\xaf\xff\xc8m\x0c\x90\x05\x9b^B\xe4\x16\xdd\x17RQ\x07\xf0Iu?\xce"\xd9m_\xdd\xd9\xbd\'\x91\xff\xc55H\x80\xaf\x01\x9c\xff"\x03\xfd\xd0?jg\x1ac\xe5\x1c\\ai*\xa7yX\x8f{\xa2\xef\x0e\x19\x0e\xfff^\x8eA&\x92\xc7\xa0\xd8\xfbMD\x1c\xa7\xd9\x96\xf0,\x14\x81\xf0t~\x91\xb0\xf2\xe1\x9cc[\xcb\xdea\xd9.\xac\xa4B\x18\xbc\x19\xdb\xca~\x8e\xabM|\xcc\x1d)\xffHJ\x022\xae\x8a\xbeN\xf2\x8b\xdcX[\rV\xcf\x9b}\x04.\xdc\xadJ\x9am\x80P^G\xfb#-\xcb\xfa\xda\xb04s\x88\xd5\xd2\x0e\x94r4\xc0\xf5\x149\xf5\x10\xc8\x85RK\xd2_\x8a\n\x1fy!\xe2\x80mCh\xae7W\xdf.\x07t/\xfe[S\xfd\xe6\x1fh@\xe5\xa5A\xf1\xf8:t\n\xd4\xcf#G\x9d\xaa\x13\xc18\x8a\xfe\x1e\xcd}\xd6\xf4\xe9\x14\xb8\x87\x14\xf6p\x95\x10h\x1dE\xe1/\x17rr.\xb0\xdf\x0e|\xbe%w\x9a0T}z<\x94i\x99=\x89\xbayK\x81\xcf\x88\xbe\xdc\x91m\xe4,\x91\xbe|\xb1\xb0\x07\x1cs\x1d\x7f\xbc\xd4\xec\x16\xbdxy\xdf\x9e\x84\xc1N\x8a\x18\x0b\xc21\xefd\xd1]"\x1f\xd3\xda*,l\xf8\x08n\xde_N\x0b\xfe\r\xa1\x8at\x89\xbf\x82\xc7\xea\xa7<\x1f\x17\xa2\xbbS\x83!\xde\x9c\xc6<\x12\x15\xdc\xb1,\xddl0\x96\x1f[\x86\x04\xaa<\x15#\xdbN\xeeq\xb3>G\xd2=Gq\x1cA\x7fN00A\x80\xf2g\x88d\x15\xb9\xdf\x19\n)[\'K\x98o\xddm\xd9~\x99\x1c\xc3t\xb3\xc0\x07b\xd8\xed\x1e\xdc\x05k|\xd3T\xc6\x81\xd1d\xf3\xf2\xf1?\xd7\xbc\x8a\xb5v\xbf@\x92(t"\xa1\x96M\xb57\x1eA:\xab-z\xe6\xbe\xa5%`\x86aC\xf5\x9fKp\x9cQ\x91Q\x07\xd9)\t\xa8\xefE\x8d\xeaF\xa2F\x89\x8f \x15\xb2\xf3\xb2d\x16\x1d\xcdz\xedR(/Q\xec\xc9m\xa0<\x17T\x12\xbc\x1eEL~{4Yt\xfa6\x02r\xc1\xa5\x94=\xcc\x96\xd5\x02\x84\x13K\x8b\xe9\xdd\xe3\x08\x17<\xc6\xae\x18\x06/\xc6\x9c\x89h\xc1\x9c\x14d\x88\xe0\xb9;46\x93\xa6\xb73\x11\x9aXp]\xf5=\xe3\xcf\xad\x80-\x89\x93W\x8c\xebk\xc7\xd8\xe1\x1c\x01,\xfb\xdbb\xfb\xcb\xae2\xb7\xce\x90\xda\x97\xd7\x8e\x9b\x8b8\x89\x08\x9e\xf4\x10"v\xe2:J\xcd\'\xa7\xebDX\xc4\x9d\x0b\x8c\xe2Q\r"\xb9\xbc\x1b\xdb\x88\xd8\xef\xfb\xe6\xda\xd2c\x1dg(\xcf\x1d\xc1\xef\xb5R\xaa\xbcu\x1bZ\x07\xb8\x84\xcbc)\xe8\xe9\xf2\x1f;\x84\xc3.\xf8\xf7H\\\xa8\xc4/\xfb\xa6\xfa\xd9\x1c2\x9b\x03Y\xf1\x07\xedr,\xf6\x90X\x9awHG\xcd\x08S\xe9Y:Q\xbck\x10\x9c%\x08\x9b\x86l\xb1\xf3\xa9\xf1:\'X\x08\xe4j\x7f\xc0\xf1\x01\xe8\xf9R\x8c\xe3\x1e\xeb\xe4TN\xb44\xbd;\xfa\x96\x8f\xcc?\xfa* \xb4\x12\xc1\x0b~\xa0\x8e\xcd\xebp\x0b\xe9\xff\x7f\x04~\xe1\xdc\xb1Q\xb4W\xde\x8c\xf4q\xc0\xc0\x96gB\xa6#\xf2 Z\x81Y\x1fU\xb6\xe3o\xae\x8e\xe0\xfc\x18#=7c\xf4eX6\xf2\xbb}\xe3d\xc7d\x02\xb6\xee\xdc/\x9a\x92\xf0\x00\x84\xe0\xcd\x15\xaf*N"\x8eojPV[y\x9f\x90W\xbeW5\x7f\x01\xfc\r\xef9zQGG\x00,K\xca\xbd7\x04\xf5\x85$\xa0\xed\xe3\xb3\x1d\x1d\xa3\x07\\\xc1u[\xa7<\x91F\x0f\xe8\x88\x8b=a,\xc5\xa9\xd3\xeb\xf2\xffT\xc0(^(\x10}\xc0&H\xa9\xc0\x7f \xc7\xda\xc33\x1a\xdcP\xdaQ\x02\xf2\xc7=\x7fix\xe0\x80\xff\xdc\xb2q\xee\xb8\xc4\x89XCG\xe4\xf8v4R^.q^\x8b/\x0f\xeeZtW"\xadC\x9a(\xf3\xfb\x8b\x85\x11\x1b\xd8\x9e\xc5\xa52\xb7s\xffv\x1fG\x04\xe8\xed\xc1\xb8N\xd8h\xb7e\x87\xf80GK\x7f\xed\xe3\x07\xe4\xdcZ\x99\x08\xb9\xf6\xc2\t:\xb5(\x90\xa1\xc2E]\x04\xd5\xa0\xe5K\xc3VT\xcb+\xd4\x96\xc0\'\x01/\xd3\xba\xf7"p\xf6\xdae\x92^P\xf8\xef\xae\xf8\xe7\xf6$\x0ey\x1d\x92y\x11\xf8\xe0Yr:\xfdq\xe9i\xf1\xe38\xaa[\x8d\xbcjH\xedX\xa6\xb6\x89\xc1\\\xdc\xa6>|\xfe\x19p\xbe\xa65h[^\xd5Dk[\xcc\x1b\xfd[\xadQ\xcc\xee\xcd\xa9\xb2\x0b\x8a/\xa1;`\x80)3\xaf\xfc\xca\xe2\xab\x914\x88\x86\xee\xe5#\xa7\xec\x03=yi\xbd\xe2\x95\xba\xc8+A^y\xdbf\xcdE\xc0\xd8\xce\x07\x16>M\xfbNX\x88\x94y\x8c\x06\x8d\xa3I?')
1
+ from hiddifypanel.models import *
2
+ from flask_babelex import gettext as _
3
+ default_ips="""
4
+ mcix.ircf.space MCI
5
+ mci.ircf.space MCI
6
+ mtn.ircf.space MTN
7
+ mtnx.ircf.space MTN
8
+ rtl.ircf.space RTL
9
+ mkh.ircf.space MKH
10
+ hwb.ircf.space HWB
11
+ ast.ircf.space AST
12
+ sht.ircf.space SHT
13
+ prs.ircf.space PRS
14
+ mbt.ircf.space MBT
15
+ ask.ircf.space ASK
16
+ rsp.ircf.space RSP
17
+ afn.ircf.space AFN
18
+ ztl.ircf.space ZTL
19
+ psm.ircf.space PSM
20
+ """
21
+ from flask import request,flash
22
+ import maxminddb
23
+ import os
24
+ import re
25
+ import random
26
+
27
+ try:
28
+ ipasn = maxminddb.open_database('GeoLite2-ASN.mmdb') if os.path.exists('GeoLite2-ASN.mmdb') else {}
29
+ ipcountry = maxminddb.open_database('GeoLite2-Country.mmdb') if os.path.exists('GeoLite2-Country.mmdb') else {}
30
+ except Exception as e:
31
+ print("Error can not load maxminddb")
32
+
33
+
34
+ asn_map={
35
+ '58224':'MKH',
36
+ '197207':'MCI',
37
+ '12880':'ITC',
38
+ '44244':'MTN',
39
+ '57218':'RTL',
40
+ '16322':'PRS',
41
+ '56402':'HWB',
42
+ '41689':'AST',
43
+ '43754':'AST',
44
+ '31549':'SHT',
45
+ '205647':'SHT',
46
+ '50810':'MBT',
47
+ '39308':'ASK',
48
+ '205207':'RSP',
49
+ '25184':'AFR',
50
+ '394510':'ZTL',
51
+ '206065':'ZTL',
52
+ '49100':'PSM'
53
+ }
54
+
55
+ def get_asn_short_name(user_ip=None):
56
+ user_ip=user_ip or get_real_user_ip()
57
+ asnres = ipasn.get(user_ip) if ipasn else {'autonomous_system_number':'unknown'}
58
+ asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
59
+ return asn_map.get(asn,"unknown")
60
+ def get_country(user_ip=None):
61
+ user_ip=user_ip or get_real_user_ip()
62
+ return (ipcountry.get(user_ip) or {}).get('country',{}).get('iso_code','unknown')
63
+ def get_real_user_ip_debug(user_ip=None):
64
+ user_ip=user_ip or get_real_user_ip()
65
+ asnres = ipasn.get(user_ip) or {}
66
+ asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
67
+ asn_dscr = f"{asnres.get('autonomous_system_organization','unknown')}" if asnres else "unknown"
68
+ asn_short=get_asn_short_name(user_ip)
69
+ country=get_country(user_ip)
70
+ default=get_host_base_on_asn(default_ips,asn_short).replace(".ircf.space","")
71
+ return f'{user_ip} {country} {asn} {asn_short} {"ERROR" if asn_short=="unknown" else ""} fullname={asn_dscr} default:{default}'
72
+
73
+ def get_real_user_ip():
74
+ user_ip=request.remote_addr
75
+ for header in ['CF-Connecting-IP','ar-real-ip','X-Forwarded-For']:
76
+ if header in request.headers:
77
+ user_ip= request.headers.get(header)
78
+ break
79
+
80
+ return user_ip
81
+
82
+ def get_host_base_on_asn(ips,asn_short):
83
+ if type(ips)==str:
84
+ ips=re.split('[ \t\r\n;,]+',ips.strip())
85
+ valid_hosts=[ip for ip in ips if len(ip)>5]
86
+
87
+ if len(ips)%2 !=0 or len(valid_hosts)==0:
88
+ flash(_("Error! auto cdn ip can not be find, please contact admin."))
89
+ if len(valid_hosts)==0:return
90
+
91
+ all_hosts=[]
92
+ for i in range(0,len(ips),2):
93
+ if asn_short == ips[i+1]:
94
+ print("selected ",ips[i],ips[i+1])
95
+ all_hosts.append(ips[i])
96
+
97
+ selected= random.sample(valid_hosts,1)[0]
98
+ if len(all_hosts):
99
+ selected= random.sample(all_hosts, 1)[0]
100
+
101
+ return selected
102
+
103
+ def get_clean_ip(ips,resolve=False,default_asn=None):
104
+ if not ips:
105
+ ips=default_ips
106
+
107
+ ips=re.split('[ \t\r\n;,]+',ips.strip())
108
+ user_ip=get_real_user_ip()
109
+ asn_short = get_asn_short_name(user_ip)
110
+ country=get_country(user_ip)
111
+ print("Real user ip",get_real_user_ip_debug(), user_ip,asn_short,country)
112
+ is_morteza_format=any([format for format in asn_map.values() if format in ips])
113
+ print("IPs",ips)
114
+ if is_morteza_format:
115
+ if country.lower()!=hconfig(ConfigEnum.country) and default_asn:
116
+ asn_short=default_asn
117
+ selected_server=get_host_base_on_asn(ips, asn_short)
118
+ else:
119
+ selected_server=random.sample(ips, 1)[0]
120
+ print("selected_server",selected_server)
121
+ if resolve:
122
+ from hiddifypanel.panel import hiddify
123
+ selected_server=hiddify.get_domain_ip(selected_server) or selected_server
124
+ return selected_server
125
+
4
126
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
127
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/panel/cli.py CHANGED
@@ -1,5 +1,174 @@
1
- # 2023-04-08T15:11:20.734666
2
- from pyarmor_runtime_000000 import __pyarmor__
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\xc4"\x00\x00\x12\t\x04\x00\xc4\x03\x1c\xa3y;\xf2\nhO\xda\xa2\xe6\x98\xca@\x00\x00\x00\x00\x00\x00\x00\x00\xc7s@\xe0\x8dih\xae\xe3\xee\x17\xc3i\x16b\x1c\x1c\xec\xc3QD\xd9\xbe\x17\x88\t\xbe\x19\xff*\xebP\xdeQG\x9b\xfa\xeeB\x03\xfd0\xb0\x8d\xa4-\x83`B\xc0\xc3$\x1b\xcf\xaf\xd8bK\xc9\xf3\xaeE\x10\xcd\xe0\xa6\x1e\xe3\xde\x8a\xce\xc37\xbfb$\xf9\xc869w\xda\x85*^J\xa8\x1evj\xf4T!\xaad=\xa2W\xe6)\xdc^~\xe2\xa8~\xe1\x98\x9c\x89\xac\x07\x1e\x02\xb3\xa1XR`\xe1,s,\xfb\xe30z\x88d\xc23/\n\xc3\xac"`\xea[00h4A\x83QPn\xb9\x0c\xff^\x17 \xfa\xa1+\xce\x9f\xe8s-\x15BAJ\xa57pq{\xfb\x89\xb9\x11{~a.D%\xb9\x00\xd1\x9d\x86#\xa5\xf7\x9a\x84y\x12\xd4\xb8\x9b&\x82:vlK\xd9\xffwN+\x81%\x013\xb4#RY+}|\x89,\xa6f\xcbN\x1a\xe7\x96\x9a\xc8\x0c\xa6\xe2\xc5\xf1\xe3\xa4\xa2r\xe7\xb8\xb1\xb3\xdf\xc9\xa6\xd3y)\xc1\x8b\xfc\x14\xa4\x0fm\x07\x98|\x07\x07\xe9\x1a\xcd\xd7\x97\x0c\xe8\xd7\xdc\x86\xff\x87/\x1d\xa9\x17\x16Ft\xf8<l\xa7\xc8\xb4\t~\xa5\xb6*N_\xfbDdV\xf0\xe1\xb5?\xba\xdd\xa4\xf8s\xef\xcb\xd5\xfc\x1e\x07\x0c\x05\xb1\xe7NC\xcc\xaf\x02|\xfb\xec\xed\xf2IBw\xed\x8b\xd26\xdf\xce\xb9\x08\xb9\x9d\x80g\xa9\x98=\x19\xcb\xc8\xb0C\xd6ge\xa0\xe6\x94`\xac\xdd.\xb0}\xb4\\\x10l\x99c]\xe7!\xf6j\xca\xda\x05\xb9\x0c\xb8\xd9\xb9\x15\x06\x11W\x80\xaa\xff\xd0DY\x9c+\xad\xbc\x0e\xaaH\x1b\xcfs\xd6\xad\x89\x99\xb8\xc2\xf31\x9f\xb6\xe6\x87\xeb\x1eP\xf6\xca\xee\xb2-\x93_\xd5\xd7\x7fK!\xa5>C\xa4=\xf0\x9f\xf5\x8e\x003\xbaA1aj}\xf5R\xcdn\xf7\xb8\x1c\xe9fIE\xb7R\xab\x05\xb3`\xaec\x99\tWd\x1b\xe3\x0b\x98\x0e\x1c\xc0\xd0v\x7f\xe6jD\xeaa\xa3\xce\x86\xf2\xab\xe9=\x92\xcf\x99?\x8a\x8b\x08B]\xfd\xbc\xc4\xfcDe\xf6\xe2\xd8-Vck\xfb\x00\x15s2A$\xd9Iqhr\xf3\x1d\xec\x08\x8d\x99\xc3\xfd\xa5\x9cf\x14\x93D\x91\xc1\x95\xc9*|\x0cj\xbawS\x9f\x01\xd3\x05*j5\x12\xbdK\xddvd\xe4\x82[\xc7J\xc0\xb2\xc2\r\x92\xf2r\x85m\xb6\x8a)\xcf_4\xd9\x98\x93\xea\xb3!\x16\xa3\xb1\\\xcd\x9a\xe3u\xf05\x1b\xd5\x1cP\xde\xef%\t\x81\xd8\xb1\x8d\xc2\xa4\x851;v\xaa\xa2\x80\xd18b}\xe5\xc6\xa7\x00\x9b#\x0e\xe0\x8b\x19\xc1*/3\x1a+\x84\x84\xeaEy:\xae\xc7\xa1^\xc8\xc3\xf7\xc6+\xc5uNw\x04\x95\x1c\xc1\'\xfd\xb2\xfb\xeb\xf5\xdbT:\xee\xc3q\xcd\x1d\xbe\x8f)\xd0\x01\x1aU\xbe%\\\x0e\xa7\xd9y\x91\x8d\xbf\xb7\xe6\x9d7\x06\x8bX\xdb\x023\xf26\xf3\xef=q\x08\x8d\xc8x\xb7\x017\xe9\x04\xec\x12\xc2\x92)2{<\x10<pa\x12S\x1f\x9cDY\xa9C_\xdc\xf8\x98[\x93\xc1a\x02K\xfcC\x07.I\x13\xf3\xb3\xe7j6E\xf1\xfc\x14\xc7\xec23\t+2@\x00k\x8esns\xb5<\xa8\xb9\xb8\xc7\xd6\x98\xfe\xf3\xbe\xb3\x0e\n\xc3\xed\xae\xd3\x8d\xf7\xe5Jx\xe4\x9d\x86r\x92Oq\x8b\x8b\x03\xd3){R\x9a\xac\xb6C\xd4\xa8,\x179\x9e&z\x85\xde\xbd\xa7\xfb\x03\xbd\xe5\x10\xcc\x94\xe5lq\xef?D#\x1d=\xefw\x97\xb7\x9a\xee)\xe9\xb8,\x83D\x98\x10&;\xf6\xad\xc2\x19\xb8Y\xbfQt\x18\xe8Q\xac%\xa6P\xba\x05\xa3\xc9\xa1\x17\x0c\x9e\xc9"\xd4&SJ\x1f&\x1c;\x8bt\x98$\x02\x95\xa3\xfb\x8e\xa6\x81-[&*]\x1e\xa5\xbav)\x93*\x96\xb8\xc6g\x1f\xddY\x80\x8a\x0bz\xf5(\xce\x83\x8f\xc1+&\x94\xd77\xc1;\xd3\xc8\x03w\xd6\xa8\xf4\xcf\xd7\x0f\x9a\xfe\x98\xf4\xe5\xffdY|5=\xee7\x14}\x8b6a\xbf^K]"};\x0c:O_\x05\x15w\xd9\xed\xdck\xe9\xc9\xdeiBs\xfc7\x08q\xfb\xd8|h\xe1\x05<2\xb7\xf53\x83v\xe9\x12~+\xa68\xcf=\x1aD\xa8B\xb2U0\x96\xb6\xc8\x96\xbb\xf2\xe2\x06\xde\x1d8+?$\x8b^\xd8\x00\x19\'\x14\xcb \xe5\xd8\t\x06\xcbBL\x8d\xa5\x072\xf1\x1b\xd8t\xd1\xc3w\x98\xe2\x05MJT\x12\x0cG09\xe9S\x18\x90\x01\xca\xd0A\xbf\x15\x00\xa8?]\xe3\xb1\x0e+0\rx\xb7\xa8\xc4\x1c\x9a\xd1\xd9\xefW\x0f\xb9L]\xbe\x98\xa2\x1eM/\xf6\xb8\xf3\xffSY_>\xcfb\xbcU\xb5\xcb\x89\xcd\n\xe4;\xdb;\x89\xfd\xd8\x87\xbfB\x8d\xfb)\x9b\xef\xa4OL\x17g\xe1\x07\x82\x98\x16\xbctS\xc9\xbbn\xe2Y\xf6*\x96z~14T\xe9\xc3\xa2\x81&i\xaa=I\xf2\xc2\x8a\x11\xdf\xcb1\xcd\xc6\xe9\xf3\x91W\xb5\xa5y\x02\x9f\xae\x86\x9f\x00\xc3\xf7\xf20\xd8\x8c\x9e\xef\xad\x93\xb80\x89\xc99f&\xdf\x17E\x90t.\x9bZ\x91\xd1\xd6\xb1\xbf\x92\xb8\xfd(\xe8\xd4\xbbJ\x81\x94\xff\xa0?\x90\xfe\xf9\x07\x86Y\xc5\xb8\x1aZ`\xf1>5\xbe\x9b\xf71f)"f\'#\xdd\xa7\xe5x\xc7\x84\xfa\x8d\xfc\x86\xed\xc6F\x03\x8a\x08\x1b\xc4\x8f\x11\xe4(\x8e\xe7\x9ay\x93/\t\xba.\x83\x96d\x19/\x0f\xcb\x15\xe1\xcb\xfan\x9c\x18\npJ\xa9\x89)\x81\xb5\xed\xcat\xb0\x1bN\xf8\xbdz\xa6\x0e\xb0\xa9O\xc7|\xa1`\xf1\xa4\xfd\x01\x11 \xc6\xa6gDt\xe23\x90\xc6\x92$\xd5\x98\xccm1\xec\xa3u\xc9xv\x0e5S~?\x90\x1a\xce!\xd7\xa4\xe6r\x0e\xd5\xf0\'\x9d\xd9\xe9\xae%d\xcd4`m\x9d\x08\x1b\x1c\xdb\x1be\x04\x81j\xec\xe0\'Q\x85\xf0\\\x9f9\x16.N3?\x03\xf8\xab\xfe8;\xc5\x9a\xcc\x00 \xac\xd04`Gd\xe7NR\x1e\xed\xd95\xdaM}\x0b\xb1\xd8\x05\xe3*\xf6Z\xbf\xd4hvx|\xf9M\xcb<\xd0\xa1\x1d\x9e\xf5\x087\xaed\x19O\xaf\xb4<\xd4\x06\x99T\xc5(\xf0+\x19CD>\x18\x14\x9a\xce\x1c\x8e\x9e\xf7\xe3\xfa\x00\xaa\x8e\xb4\x1a\x9d\x90p\xa8\x97\x9b\xec\xda}u\x0cnnj\x8fO\xa5\x0c\x9c\x83\xd8\xca\xcb\x80\x9bo\x8b@!\x9b7\xe4\x19\x8d8\x81\xd8\x12\x1d&\xb5\xaaO_\x11\x80\xa9\xb5w\x96t\xb4\xda\xa7\x96Fg9\t\xcf]\xb1\xee\x16\\\xe6\x8c0\xc6\xca\x17\xb7!\xed\xd8\xda]"d\xc6\xce\x96BM\x1f\xec\x81\x92\x80\xcc\xf1\x06`L7\x91\x10\x81[\xf1] \x8c\t\x81\xa3\x1czWSi\x83\xb9#\x95\x96\\\xf1$:_\xa4\x02\xf4GJ\xfb\xd2\xa5\x86\x17\xae\xcf\xda\xd2\x95,nd7\xd2h\x13\xf8R\xa1\xe6\t\xf8\xaf\x84\xdd\x0eW\xfa\xe6*y\xbage\x99t\xa0O\xbcp\xdf1\x05\xe3\xce\xac\x1a\xae\x03%LF/AZ\x81\xc4\xfb\x120\x91@\xcc\xb6*\x7f\xb8\x02\xef\x1f\xbc\xdf\x08\xb9Z_$\x05\x9aR</\x82\x81q\x90\xc5\xede\xf8&w\x95\xb8\x1d\xd1>\xf5|k\x0e\xada\x0b\x7f[ \x0c\xdc\x11ZX1\xa0\x97\xde\xdcy^\x12\x90\x9c\xf8\xce\xe1\x85\xd7\xb5\x98\xb3*\xa1\xd4\xf4u\x8eA\x80k\xb5\xbcg\x93\xc5\x7f\xa4\xe2\xac\x1bpQ\xba\xf8\xb3\xcf\xf7Zj+\x1c\xe3R\x05\xdbS\xddc\xd7;l\x87Ro\x18AJ\x1f\xf2\xaa\xe9\x8aK\xc9\x83\xe1ah\x94\x81\x8bh2\xda\xa5A\xc9\xeeR}\x8f\x83$$\xb3\xd0\x05\xa6\xa8\xb43V!\xae\x91f\x07\x95\x0f\x96g\x91\x08\x1f\xfa\x1e\xc7\x8f\xe7\x91p\x93\xb3/\x90J\x99\xe9\xfe\x03\x9cC\x01<\x9c1\xb3\xb5\x9eQ\x9d\xdf;\x99\xf6\xf6pv\xe8[\x88\xc2o&K\x9c\xd5T\xd0\xccX|\x8a\xa1z|\xb3\'U\x82s\\\x83Z\xaap{~\\\xd4A\x95\\\xb8\x94\xc1\xd0n\x952\xf4\x82\xa7V\xf0K\xc2c\xeb\xdc\x02\xc1\x83\xf2\x99\x9f9co\xd8p\xc6\xdc\x00\x1e/g\xc2!\xc9\xba\xecX{\xfbB\x92\xe8\xc1Yp#\xe2)\xc8\xa0\x9f\x9b\x95H\x99\xba\xaeO\xca\xb21\x1f\xb1\x10\x84"\xba\x89\x9a\xd0N\xfd5\xdd\x85&,\x15\xb8\xa1\xad\xda\xd7\xa8\x83<\x02\xb8\x8b\xe9C\x81\xb066\x82\x97\xb0\xe1\xb2\xc3)9\x1b\xa6\xf1\xa1\x8a.\xd3#y\xbe\xe4\x9e\xfc\xa4\xe6\xbe\xf1Y\x94\'\xeb]<\xd8m\x8f\xd3\xcf\x04\n\xa9\xf1\x14\x90~\x1a\xd5\x8a\xf6k{de\x98\xee\xf9\xf6J\rQK\x99\xd2\xe8\x07a`.\xc7\x0e\x82\xbbl\xaa\xa5\xf9zv.f\xf3$&H\xb1\xae>|\xfd1\xce|\x05\tw\xdfa\x90c%A\xdep$K]\xbf\x1aE,AOu\x86\xfa{\x1c\xe7d\xab\xc3\xb5c\x1ce\xc8\xebO\xa5^\x10:\xa5\x8a\',\xa5\xf6T\xf7\xd71"O%\x13H ";&!\x8d2PVs\x89\xdfc\xbb[\xbfT\xb3\x9a%Y\x9f\xf6g?\x92\x90~\xe4\xcb\xc4\xdb\x9c\xda\xa7P\xefc\xc3\xef\x87\xb9x_\x82_\xb4\xe3=\x1f\xa3\x9e\xf7\xbf\xc9qh\x84\x8dU\xfcl\xe3\xeb\x19Bt\xebe\xf2\xd4R1\xf5\x9a\xb0\xb4\xfdU\xb8kRl\xfe\x8c!\x7f\xc5\xa3\x82\xdcn\xdb\t\x82\x01s\xab\xd5\xbae0"\x130x\xa6\xe0\xb5dg(\xd1\x99r\xc3n\x1c\xc6\\\x92{\xb8v\xbc\x1e\xe1\xeaU\xc4\xe7\xce\x11\xe6\ny\xa1!\xe6\xb7\xb9`\xc7Pd\x06m\x90\xb4\xaeE\x87\x15\x0c\xe0P\xfc\xb3\xe2\x99T\xa6\x1d\xb3\xa0\xaa"y\xadp\x93\xba:\xeb#\xf76\x8d)\x1a\x93\x83\xcb\xee\x08 )-\xd0\xb5x\xb3\x05\xa9\x08\xbc\xf1+%\xbdG<\xe1\x1a\xf0\xe0\xd3Z\xfa\x1cJ\xc9\x141\xce"(X\x13o\xdeE\x7f\xf9\xdcx\xc3\xa1j1\xcam]-Z\x1e\xaa\xb6l\xdd?\x12\x00\xacxU%\xdf\x9cbRE\xde>\xec\xf5E\xde\x14\xbb\xb7P\x00\x9dl\xf8\x10\x7f(\xb7Y\xddQ\xb0\xa1\x7f\x80\xc3\xfe\xda\x94c\xbe\xb5\x8a\xd5\x11\xba$\x9c\xb6Ysq\x1dpq\x08d\xd6\xa4\xf0\xf2\xb9\xbc5\x99+\xab\xaf\xbde\x08\x8b\xd5\xa2\xe5O-L|\xd3e;(\x8c8\x14\xce0S.\xbeV\xdbV%\xc5\x92\xa3)\xeaK\x96~\xe6\xe0\xa6\t~%\x97R\x0ba%k\xd14\x8f\x97l\n\xf0BWL\t\xc5\x9c\x04\xaam\xf7\xe7\xb2\xb0D\xd8l*\xd4\x80:\t\x06\xd77\x8c-^>\xe5\xb1\xe4\x8e\x0f\x036\xb7hT\xcb\x88\xf0\xbc\xb5\xa8=\x1d\x8e\xaci\x1d\x06\xa8uAN=>T\xf8\xf0\xbc\xfb"\x11\xd7\x97$\xef`N\xad\x9c]-\x03yy\xd2f0\xff\xb4E&\x16CZ\xf03\xdc0\xe4VQ1q7\xba\xf6\x1eg\xbd\xb2\xe3\xc69\x9f\xbf\x0f\xc6\xf3J$\xb2\xbcn\x1e\xae\xc6\x1a\x9b\xed\xfe\x18\xb8\x97\x9f\x05Ys\xa1Z\xe7\xa4\xd1\x8a\xd3Y+G<\xeb\xf5Y\x07\x86\r\x00\r9\xd1\x86~\x18$\x1a\xb7\xcd\x8b\x8c\xc7\x1a\xd5\xde\x92\x0c9ZT\x17\x1f\xada\t"K\xec\xc1\xeb\xca,\x84\xc5\xf1K\xe7\xd7\x1f\x94z\xb8\xce\xca\xc6r\xc7\xec}\xb7W\xc5\xd6w\x08\xb6=\x02\x05\xf1h)\xdb\xf0\xbcg\x9e$\xf2r\xf4XY\x0b\x91:\xbd\'>\xd1\x80u\xc9\xf9tB\xfd\x0fn4\xd4\\\xb4\xe8M\xf9@dk\x10\x1c\x8e]\x88\x8f\xa9\xd5\xf5\x8e\x08+\xefV\xc7\xa1\xc7\x1b\xb42.\xb2\xe04t\t\x94\x10p\xc2\xdd\x1d\xa6@9\x96\xd1\x02\xc2\xbb\xb0\x18\xe411z\xd2\xa2`\xbc|\x08\x93a\x13\x14\x7f\xe8)\xbb:\xa3\x0c\xed\xcb\x90LJ\x82z\xda\xb4\xf4DM\xe1L\xab\xf1\r\xffqJ4/\xac\xc9\xab\xa7%cI\x08\xe9?x}d\x90\xe9]oM\x1b\x94\xfd\xa7\x05v\xb0pSZ\rM[\xbfV\'\xadh\x01\x12\xaf\x10\x1d\xe2\x16\x86\xb8\xf9\x9b\x90\xc6\x8eM\xf8\xa1),eP\xbf\x99\x14d[\x81\xe41\xe3xv\xcf\xe4\xe6\x02g\x88\x8c\xa6UzG\x83\xca\xa5z&t.\xcd\xf7\xfa\xdb\xfd)r\xfeS]Y6\xc3\xfec\xddg\xb1\xba\x8b\xe0(\xb0\xff\xa0b\x1e.5\xa54\xcd\xc4i\xec(T\x1c/\x15\xef\xe2\x9f\xd6\xa3\xabc\x02\xe1\x8e\x02i\x82\xf3\xbb\xb9]\x93\xaf\xa5\xbb\x0bX\xa0\xc8\xad\xbe\xb4=\x99\x9em\x80l\xcd\x9b\xe8BJ\x95\xbd\x1a4X\xf3\'f\xa6\x13\x8b\x06\x12\xc6\xf2?\x93\xfc\xe2ucs\xda]\x07@W\x9a\x93\n\x8849\xda\xaa5\t\xbb<\xb1\x178y\xe6\xc9\xa9\xe4\xf7\x02\xd4\xf2Q#\xec\x96\x9b\xaeB\x03\x04\x17\x8a$\x0e\xf8\x1d%\x87cep\xf4>BK\xf9zO\x1b\xba\xec\x98\xba\xca\xcb\xff`n\x86\n\xf5=\xae\xae\xcfM$\x85\x99n\xb1\xecK_l?\xbaK\xbe.\xc5\xede\x94\xb6\xec\xf7.e\x9e\x8e\xbc@*\xcf[\x94\xbc\\\xfej\xd9\xa3\x88\x97}\xdco\x92\xe9\xbe\xecVgB\xb2\r\xed>\xe27\xfb\xb2\xdd\xa3\x14t\xdd j\xb5+\x01d\xcd\xef\\\x13\x15i\xcb\xb5\xa7\xe2\x08q\x12\x91Yq\x8d\x90\xa2\xc0zu\xc0%\xcf2\xd4H\xb4\xb9\x06\x06K%tyB2\x8d=\xdd\x95\xc4"\x0bZ\xf2#\xd0\xc6\x95U\x84>\xa5\x84\xdc"\xe1\xf0\x95m\x06\x9c\xbbR\xe0TM\x11M\xfc\xabV\xd1\xef\xcaD*\x9b7\xefE\x9f\xff.\xa2(\xc5<@\xdb/\x9dv&\x12<=\xd8S\xb4\xad{6\xc3\xec\xb8\xa9\x17\xa9.F\x1d\xf6Q\x9ff\x8b)/\x89\x027\xf2zz\xbbB~\x86\xcc\x8f\x1e\x92P\xfe\x06.\x94 \x1b(\x90\xfe\xdf\xb6\x02\xeePW\x07{\x852nq5\xd7\x94\x88\xf9JV\xb1)\xac\xc3\x91\xe9\xedd\xaf\xe8H \xdb<!\x94N#\x0f\xf0\xbb\x82\x97\x8f\xbc;\xfdvoo\x98f\xfa\x17\xe0#s@\xbd\xb92\x0f\x99\x86\xcb\xf6\xa8T\x9c:\x88O\x8c\x0b`\xc6\x99\x18k\xf4\x08\x9d0\xc0\x98U\x15@\xc2f_\xb3\xf5\xb9\xc2\xa7P\x9b\xb6\x96\xea\xb5)\x94\xc0J\x87\xe3\x19\xe1\xf5\x8d8\x0eW&@\xf4\x92Q\x1a\x0b\xb0\x8a=\x81q\x8f\xb8\x0cN\xc0\xf4\xac\x03\xf6\xd4\'\xb0\xc9)\xf7\xa8\xe9N\xbb\x01\xd4\x15n\x1c\xf3L,,\xab\xd1\xe0\x7fQ\xa5\xca\xc8!\xadA-\xb4we\xe3\xb7\xce\xe24\x8a\x0e\x9a\xc15|w\xc42\x0c\x80b\x90\xc6\xf7S\'>\xc5\x85@m\xbc\xf2&f\xe2X\xa5\x8a\xc6\x0b\xa2\x96\x036\x95g5Q\xda\x07}\xb1\xb4)\xde\x1c\xd6L\xb5\xa1q\xedMEt\xc1\xbd\xc8r.\xafF\x00\x99\x16\xf2\'\nQ\xa8K\xec\x12\xb72\x08\x88\xda\xc0\x04\xece\x92\x15\x04\x8ca\xf6\xb2\xcd\x19?`gg\xfa\x8dg\xd9UH\xe8\xcc\xd7rqy\x8f\xcc\xa0\xdf9C\xf2\xc8\xe3\x18\xce?\xe88b\\!\x8fIO\xca5\x140\x08\xfe8\xac\x8a\xb5\xbb\x06\x19\x0c{\x9a~\xa5\xd7\xf7W\xd1w\xd0\x8f\xdf2\x8d\x01\x95~\xcc\x1f\xbe\x10~hA\x07z\xb9\xcd\x8f;\xee\xe9\xb0PL\xb7\xb9\xf3\x81\x99\xe4\x86\xb5\tE\xef\x9a\x80\xaa\xd8\xd2\x94\x0f\x95hR2\x16/\x08\xf2`t\x1b\xb4\xcb\x03\x10\xe6koA\xffk\xc2EV\xd2\x1ca\xef\xa6i\x05`k\x1e\x85"\x92\xa4Qaf\x1f\x8a\xd2I\x8d\xea:9\x13\xc0\x9e\x15z6\x1b\xea+\x9c\x81\x9dW\xa9\xcc\xd9g\x8d\x08\xa7\xb7\xec \xce\x9c \xf0L$O\xea\xe6\x01\x93zQ\xff=\x86\x9a\xc6\xd7GWHI\xde\x97\xa0\xcfk\xbc\x17\x98t\xb2<<\x93\x1bXF\xb6\x98\x84\xfb\xa2]YWd\xf3\xfd\x02K\x1a\x14^\xba\x0f\xd4p\xf7\xb4\xa7!\x14\xe9\x9d\xb5\x88VA~4\x12R\xd5\xfe/\x9fi\xd6\xc6\x89\xdb\xbffg\xbd\x96\xd5,O\x18q\xdc\x85\x12s/F\xd1\x80\x0f\xcf\x070\xd2_\x00\xf1\xe9g2\xd0\xfe\x89\x92_\x7fz\xcb\xb98\xf2\x05C\x97M\xbc\x95\xd1\xe3\x97\x1eC\xd5T\xc4\'+1\xce\xb7\xf5\xbf\xd2\xa8\xbe\x07\xad\x12\xa7\x11\xb3\x8dAN\x1e$7f\xf5\x1d\xb7\xc9j\xac\xabA\xd5\x16\x12$4\x8c\xac\x99\x08r\xd0\xd0\x94W\xff\xa4\xd4\xe0\x1a\xaf\xf5\xfb\xa3\xafo\xb2+\x96\xc4\r\x96{7\xda\xa2\x10\xd9;^w\xd18nn\xdf\x185Z{\xeb\xf17\xc6\x8b\xf4q\xb79\x85\xe5\x19\xab\x00H\x1d\x00\xec\x0ea\xeaq\xd8\x1c\x85\xf8\x0c\xbdE<:\x8d\xf3\xb6\xaf\xe7\x9d\xd1\xdc\xf8\x82Bk}\xcfb\xfbCM\x01&d\x8c\xfa\x9c>\xa9\x01\x8e\x17\xa2tj\x1e\xda\xe1\xafi\xbd~\xf5B\xca\xa5\xc5\xd3?\x8f\xe3f\xf7\x07\xb5\x89<\xc5\xe4\x9a\xec\xb3E\xcd\xa2\xa3\xb8R\xd8&\xd9\x9e\n-G\x14o~\x82\x12$z \xe81B\xb2E\xc3y\x1e\x10\x82\xb9"O|\x05zB\xb5\x91\xb1\xbb\xdc\x81\x8c\x88rS\x87\xb5\xba\xed\x19\xf6\x1d\xee\x15Qut|\xec\xc2\xfbi~\x1bX0\x1aF\xfe\x8b\t\x06\xfeCd\xe3t\xee\xc8J\xfbch\x0c\x93\xd7\x89\xce\xb7\xef\x98\x86\x93=\xc1ROc\x0b\x9ac\xae\x02\x8f\x97\x92\xae_9R\xc3\x02\xb9\x808\x9b\xeay\xbbR\x85\xbe\xfa\x81\xdeu\xf3e\x0f\xe5\xdft\x14\x8aa\xbf|\xd1\xd12\xa8~Nn\x19\xa2\xdaJCO=z\xdd \x08\xad)\x16\xb4\xe8\x08)\xbae\xc3\xd7\xad\xa8m\xcd\x9d\x8f\xa2\xe5\x08|\x0fV\xe5\xb8\x1a\t!\x04\x90\x8e\xd1\xb1\x14\x97\x1c\xecO mb\xfe\x01$\x84\x89\xa5\xe9\xa5\xea\x88\xbe\xbe\xbd\xdeiP\x10[|\xac[\\\xeeS\xe8\xa5\xde\x91\x0b[\x9c\x1c\xbb\x10\x8a\x1f\x9f3\xb5 \x812`zx\r\x8c\xe7A\xb7B /@\xa5\xb4\x879\xcd\x81\xf8\x15\xc2q\x9b\xa9gG\'\xe9\x89w\xebU]\xd4\xd5\xb3t\'~\x14x\xa9\xee|\x01s\xfd\xb3S\xf7\xff\xa6\xe5V\xc4\x0e\xe2\xf22\x07\x13\xf3+\x1b}D?+5\xe3\x7f(\x84y\x93\xe5\xdb<\xb2\x83\xe6\n\xff\xb2\xbb\x1b\x9c!k\x9c\xc2\x97\x90\xee\x88\xb60\x13\xb1\xfbq\xfc\x92\xb0-8E~q\xadHCY7\xd3\xec\xea\xca\xdf!#\';\xae9*\xb2\xb0F6\xc4\xd5\t/\x13b\x9e!7\xa8\x86\xef}\xd8;\t\xc4@\x8a^\xeae~\x83q\xf8}\x02\xb1W\x16\x14(,\x9e\x1e\xc4\xcb\xa8\xea+0-\x18\xee9\xe9O\xbc\x95\x0b\x0e\'?J\xd1\x00\x06\x8f\x89\xa7\x0c\xd0\x1f\x82\xf5\xd0\x0e\xdcN?\xdd\xef\x14|Ws\x0eu\x99\xe5\xd0\xc2E\xc9\xbcH\xf5\x9c\x94\xca\xfe!\x1f|j\xf0\x1d\t\x15\xd8\xa5t\x05*r\xf6\xce\xe3\x0c;\x82\xf6\xe3\n\x05\xa5\x7f\xcf\x87k\xe9P\x95\x18\xa18\xde\xab\x8an\xf8\xc6\xa5g\x8d\xeb\xda{&A[\xd6\xc7\xd3\xae\x9dk\x11K\xfb\x7f\xb6,\xa2\xb1\xac1\x8bEn*v\\\xf8\xd1\xf7m\xbb*7\xdd&\x1b\x96\xc2J\xb1[\x91\xee_\x901\xea\x98\x03\xf7\xdb\xaf5I}\\\xc2*;\x93\x1f<\x13\xaf\x8e\xf6\x02\xbe\\\xfd\xc0\xcf\xc9[\xfck\xb0\x1b\xde\x14pS\xff\x93;N\xce4B%\xb0m\xc0\xb5\x0cdn\x84N\xa6\x8a\x9b\xcd\xc9\x12\xf8g\x9bil\xf83Z\x0c\x96\xa6xNy7\xc3\xf0\x94\x94\x11h\xc7s\x06\xa0[\xb9\xaf\x86 Xx\x9feWD\xfc\xf5\'\xdedj\x9b\xfa\xbchF\xaaC\xe3w\xb0\x11\xd5n\x97\xfb\x1e\xd5\x08\x9e"\xe8y\x16I\x16L\x19A.\xbd\xf4I\xcf\xd9\xf6:(\xb0\x97\x81\x1e_?\xe1\x92\xe6\xb1\x8c\x9f\xa2\xa1\x15\xa4\x8a\xb5G\xd0\xfd\x1637\x04\x1f\xf1zM\xa7\xac\x0c\xad\x00\x81\x80>h:\n\xbf\xfa\xa5q\x9fW6\xbf\xbc\xc2$[\xd5\x0e\xc0\x1bbW\xc2\xe6\xe3J\x14(\xc6\xe4\xcd\x1a\xb5\xbbl\xbc Q\xd3\xf6\xf1\xd2\xe5\xb2\xbc\x01\xd5\x8d]0EtX \xb3+&\xf7`g\x18U\x83\xe5\xc0\x89_\xad2\xe9\xd5\x85\xdf-\xca)%\xfa\x1a\x1d\x9d\xa3\xd9O\x03>\xd8\xf9\x06%\xd2\xdf\xa9\xb0\x19\xd5\xec\xa8s\x8a\x84\x85\x8f\xd0"\x10@\xaf\xbf\xb5\x98\xcbq\x7f\xc8\x8e7\xac\xb7F\x8e\xa7\xa1SO\x91D\xee\xf0\xd6<\'[\x87H\\\xdb\xdc\xc0\xca\'\xca\xe3L\x85e\xe2\xf0\x98_c\xaa\x1f\x00\x0bK(@\xc3\x82^\x10\x05\xf0\xad\x98\xe7Q\x80\x0b))\x10\r\x83\xe72/\x12\x02\xda\x9c5\xcb\x87\xc0(\xab9\xdb3,\xda\xe0\'YK\x85\xf4\xc8\xfe\xf8\xa2*\xbe$-\xdfNH&)h\xd7\x1e\xc2i4\x95ubg\xfa\x12\xbf\xee\xdfyz\x9c\x9a\xf7\x16D\x93S\xea"\x1eM\x83\xb1uj\xd6Y\xd6o\xcc\xa3\x16\xc6#p\x14A\xbc\xee\xad+\xe2\x82\x9c\xb9=R\x82/#f\xae\xd0\x89!.X\xb0ET\xf3\x1eM\xb2\xca\x17H\xb6G?u\\\x13\xa4\x89#\x92\x06\x1bG\x95\x06;\xe9P\x9d\xa1(\xd6\x94\xcf\xad\x03\x99P\x16}n\xbd\x05MNHoU\xd9\xcf&\xa3\x8fq\xe5\xf3\xde\xd5\xde+#\xfc\xa1\x80\xa3CZ\xbb\x94\xdc\xec\x99\xf9J\x89H\xbf\\{\x01\xd5\x05\x08\xd0\x9b)\xc5\xda\x1e\xdf@\xef\x90\xd7q\xca\xe0/\xd8Z\xe02?\xc1\x7f=\x87|\x19\xce\xd67\x19\xa2mO\xbe1#\x1aJW\xa8[\xe1\xa7\xc0,\x04\xd0\xd8\xf9\xcfB$V\x81j\x1e\x10WPZ\xf1\xb5A\x10\x1a\xc6\xa0a\xdf\x99\xf6sA\x03\xd6\xff:SH\x8e\xe8\xb9\xbc\x06\xd1p+\x1e+\xc2\x18\xd9P\x8a\xf2\x08\xa2\x83\xae\xabs|2\x85RZ\x19~`\xdd\xef+oaQ\xa8`\x99F\'>\x01\x0f\x05\xd8\x0b\xe8\tt\xa5c\x84\x1b\x93\x82\x93h\xaa3\x08\x18n\x86\x05\xc1\xee\x90\x1b\x1c\xc8H\xdd\xdfj[\xfeq\x0bW\x0fe3m\x9c\xf9Y\xd2\xc5(W\x148\xfe\x015c\xa1\x07\x94E\xb6\xd1\x10\xca\xdd\x18P-;\xdf\x16J\xff\xe8\xab"\xfc\xb8\xd3\x03\x8e\x05(\x1643\'\xaf`\x9e\xd3\tt,B\xcd\xcb\x07\xab\xf8\r\xd5>d\r*\x89\xdb\x172\xe0~\xfc\xa6\x99`\xc5-\xac.\xe2\x82\xa4\xd4\xde\xc0\xce\x9f,B\xbc\xce\x1d\xacX\xf2,SX\xb3\x86\xc1{\xdb\xf2awfT\x88\x8a\xbd\x9e\x17\xc5\xdc\xa2\xcb8\xf5\xfa\x1ah\x91P\x86\xb0Jh\x92,\xb4wB\xe8\xe6\xfc\xf6I\x1d\xb1|C\xd0\xc2(/\n\xd6_\xa68\xbd\xf0\x9d\xaeg\xfd\xd7\x93\xcbD\x9a.\x16\xe0H\x1ds5\xe2\xf0\xb4\x83y\xe4\xf6\x8c\xbaP\xfd\t\xd4\xad5@\xe2\xcd9s\x85\xfd\xeakE]Yl\x80\xa8t]<\x97\x9e\xb1\x91\x1fB{qz\r\x96\xf2?n\x11\x9a\x81\xe1\'\x8bJM\xf8\x87\xe5X4N\x04\xc1\xa2\xad\xd4$K\xbd\xd5\x0e\x94`\xd8\x91O\xcf\xee\x01\x10;\x85\xe2\xe4vl\xd7}\x89\xe2\x19\xa3q\x04\xf4\xef\x7fi\xe6\xa8\xb4U\x0bpF\xa4\x98r1=\xc3\x9aZ=\x85\xdc\xa7qv\x18\xf1\xd8^\n\xe7\t\x0c\xf401\x93\x88\xa5\xfe\xc5^\x8bJn8\x1b\xd7Q\xbfE\xaf\x91O+\x03N,3\xfb6Y\xfb\xad.\xda\xd0=Uh\xad\xa9\x07\x1e\xd7\xa2\xce\x8b`\xd1\xd6\x00I\xd8\x9d\x07\xe0\x8a\x85\x0ew\x83\x8eC/A\\i\xee\x97\xb5\xb4\xc0k\xf4\x88\xd0B\xc4\x9b\xe3\xdf\x17\xdf\x85.\x04\xf5c\x96>\x0c\x17c\x1fs}&\x90\xab\x9d\x8f\x10L*\xc1\xce\x03\xda@B\xa2ML\xd6\xdc\x05\xf6\xff\x95\x15\x00\n%\x88\x1a\xfa]\x1e\xc5^;\x913V\x88\r\xa2\x0f\x9aKU\xa3\xf0=\xac\xad\xd4t\x0c\xc2_\x8d\xe9j\x0c\xda\xaf\x9b\xa0C\xdc\x90\x9a\xc1U!\xfd\'3\xae.\xfcf,5w%\x82/b\x0f\x03\xcb+\xc2\xd6\xe2a\x93pSx\xe7~qH\tM\xdf\x8b\xbcb\nd)\xf7\x007)K\xe8\x00f\x06\xd5\xb8P:\xfaO\x17\x1e\xfb\xcel`3&\xd77/\x14`$w\xfan\x84\xba\xf5$p^\xfd\x93M\xd5\x1a\x92\xbe\x9fQ\xe4:G\xb9\x93V\xb4")\xc1\xa7\xc5\x91\xdcY\x14f\xa5\x1e5\xb3\xddb\xab\x11\x16gN\xea\x0e;\x1a\x06T\x93g\t8"\x11SOj\x1f\x9cw8~\xfd|\xe4\xa3\x01\x1bB\xfd$\x96\xaa\x19\x87-\x87uf@\x9fj\x0c\xad\x99%z\x9b\xdb\xe8*\xb3\x8c\xe7\xc4\x87V\x83el\x10`\xf5\xea\xd9\xf0f/E\xc8$Y\xd1I\xd2W\x170\x086\xca\xa3xK\x17\x0bC\xf4\x86\x9f\r`\xd6\xae\xa0\x8ak\x04\x96:<\xc1\x94\x96\xc8#`\xdd\xf9\x8fG\xfa_\xc8\xf6\xf1\xa7\x1fE\x88te\xe1{/\xbd\xb4[\xd9\xed\x8e\x86\xb23-\x03\xb3K\xf4\xf0\xd4(\r\x9bk\xc17\xb8(P\xb0\xee\x8e\xe4\xf5\xc1\x99@\r(\xf6\x93\xb4\x041%3\xac%!\x11\xb8\xcd\xdc\xb1\x8b)%E\xed\xd4)\x88\x83@\x18\xc0ko\x8d\x14\x89uV\xed^\xc9\xd1\xa1\x165\xb1\x89@\xcb\xd4s\xd0\xfdQ\x05\xde\xd3z\x085v\xe8ND\xc3[},\x17\xe2\xc0\x81r\xa0\xb5\xc8\xd8\xcd\xf3o\xa9\xf1\xa6T\xa0\x90[7\xb9\x97\x98_\xc5-.Z\xb1\xae\x95d[\x9a\xad\xd7\x16\xa7V^\xd5\xd5\xe5vH\xc3\xa5\xd7\xb3)\xee\xe5\xa4\xaa\x8d\xdb\x1aR\xde\xc4%J\xeeU\xe1\x07\x81\xff\xc3\x90\xba\x80I,R\x94`|E\xadz\xc0\xe5\xa2\x8du\xac{\x08\x92\x129\x96\x97\xbeo\x1d;\x1a\xf1\x83\xbb\x93\xfb\x95\xaem\x8d\x86,\xbb\x88I\xf0\x17\xff\xaf\x8atr\xb1B`\x7f\xc5\xc8\x8cr\xe2\x08\xff\xf1PY\xffc\xfa\x9f\xe1\xcc\xab\xfa\xb6\xa0\x15O\xdf\xa4>\x94\x10\x15)\x15eDE\xe7`G5$\xe4\xf7\xad\xd5\x9aTc#\x90\x022J\xd6\xd1\xa0R4\xde\x18e\xe4\xb3Mn\xf9\xae\xdd\xeb\xa0\xa09\x14i\xac\xeem\x8e\xbb\xc8\xc0D\x08h\xe5\xd7@e\x9a\xfc\xc3\x806\xcd"\xb9T_\xf7\xf6\xe4\xbfa]\xe5\x1cJ\xbep\x13\\\xca\xd0\x7fP\x89N\xfa\xf7IS\xdfR*"\x9e\x8c\xbc\x99\x10\xfc\x8f\x02\x1a\xc1\xa1\x82\xb7\xe1->Or\xc7\xf1\xd0\x91F\xb6\xf7\xa3^$k\xf9\xd7\xf8\xfd(k\xf7-\xb5p\xc0\xac9\xa2\x0e\xde\x80\x86P\xbd\\\x11\x9a\xd5\xee+\xf7@g_\xf6y\xd9b.-\x02\xf4V\xed\x91\x8c\x0b\xba\xbbl\xd7A.\xf6\xf5\xc3\x9c\x01;=\x19\xbf\x87\xdc\xc3\x89\xfb^B>\x93\xa7\x9b\x82g\x98\x9e\xc7\xa4nO2\xd0\x99\xd2ON\xbfK\x03]\xe5$a\x07\xecv7\xf5\xbc/\xa8\x9b\x8a6q\xbeu\xe5\xc4;\xe1\xfb|\xe2\xd5\x11hX6~*\x9a\xca\xec\xc1\xa9\x07\x1eqd\xa2&x\x00\xd3a\x11\xf2\xeb)^\x03\xba\x11\x11\x91\x94\xcd@\xc7\xd9\xaf\xdb1\xd4\xd0\xcd\xa1P\xb1\x0b\x1e6]\xf7\xf5oE\xecI\x11\xcd\xafdh\xfb\x19\x9a\xcc6\x03e\xea\xe3\xf8\xcdxM\xce\x10\xf8\x85\'P1\x8e\xb6\xb0\xf4\xc9\x05\x928M\xa5\x87\x80Yq\xc7\xc8\xf3\xe3j\xc6\xd4\x84\x8e,ii\x1d\x1f\xc0*\x83:t\xf8=\x1esh\x01\xbbM\xb4\xe27\xda|\xde\xa1*61\xae\xf7\x9c\x8a\xd19\xa4\xe1\xf6\xd5l!\xa8?w\x97/\xf1\xfbO\x04\x84q\x16\xf0\x92\xe9\x17\xd5A\xec\x162\xfdL\x11\xdf\xe4\xec\xbel\xeb\x98Di\xb8\x1f\x1a\xc9\xdda\xdf\xf5\xda\x9f\x8b\x17\x01\xd1\xf5B0\\\xe5\xb7\xa6\xd8\x15{\x91\xf3\x10\x1c\x98O\xdd\x84\x8b\xb4\xa0\xbe\xdaAG\x997\xbc\x10\xb5\xf2\x81\xccj>\xeb \xde\xafv\xf9\x1b\x8a\x86\xe7\x1d|\x00x\x05\xdf\x19\r\xbb\xf1\xa9\xd6B\xbem\x08\x1c&\xce:z)\xdbAW\x9a\x886W\xb7^\x19^\xe2\xbc\xed\x05\x1f\xaa\xfaz\x18\r\xdaz\x81\xd2$\x1a\x9a\n\'p9`\xfb\xfe*X/\xf79\xb2\x82\x12K\x89\x99_\x8e\xd1\x83\x86\x83X\x16\x14\xd8\xb2\xc5\r+{\xe8\x97\xc7\xe9\xc1"L|^\x14 r+B\xf9}\xff>v\xdf\xdbm\x92\x9d\xea\x12\xed<D\xd3[E\xc9\xc1W\xc3\x1e\x16J\x922\xc4 \x81D\x0cY\xe6I\xe0\x84lf\x07\xa1R+\xce\x9dC\xe1\x8d\x1b\xcdk\x1f\x1c%HM\xaf\x7f\xb4v-\xf1\xaf]\x83%\x8f\xb5\xc3\xcf\xc9A\xd1}\x13\xb5\xe8C|\xfc`\x94\xaf4/\xf9\x9eS\x914 \xf6}u\x9c\xd7\xbe\xea\x9bq\x8f\xec\x8c\xb2\x98d\x03L\xa5u$&p\x82r\xb3\xac\x16#\x1b\x17\xe6\x1a5\xe2T\xa4\xc1n\xc1\x9a\xc3\xfbB\xfdb\xf2T&\xcd\x1d\xbb\xf9g\xe9ue/>\xfd\xab\x16\xa1t\xb0o0o\xdbhB9\xad\x0e9\xc5M\xbf\xb6F<-o\x8a\xfbe\xea\xc8\x03\xf4N\xa2\xa4l\xce&\xd9\x1c:D\x9a\xd4jw\xcatc\x89L\x89\xaeO\x03U\xa3g\xc2\x8a0\x8b5\xcfP\xce\xd6z\xd2\x86\x81\x19x\xef\x9a\xc0\x93.A\xe7=\xc7$\xd3\xe1\x88\x0e\xad\'\xc0|!\x8cJ7\xf9\x01i\x14\xb7q\n\xcd\xd82\x84\xc5\xccU\x92\x10!\xcf^\x1c\xb4x\x10\x91lE\x82\xad\x83\x08(\xe7\xb3\x0c\x92\xcc\xb4\x93$A\xb6C\x0cZA[\x84\x84\x9b\xc3\xf9\xdcb\xeb\xc0\xe63\xb0\xd1\xbcH\xbb\x8c\xd8\x91\xbe\xbel\x06\xf5\x9c\xceJ#1r3\xc2i\xf5\xff\xf6\x98\xebp`%\xb4\xd2E\xcbw\xfc\x95\xc3\xefH\xf1\x97\xc98\x17\x8f\xde\x13Q\xfdB\xff\xd9\x7f\xcb(W\x8b\x93\xd7\xa9\xb0\x91\xea\xe8,\x14\x07\xc2{\x08\x92! \xd67\x9f!\xaf\xeac\xba\xff\xb3\xba\xae\xea\xc5\xda\xd2\xe7\x9d\x81\x189[\xd2l3-\xfc\x16\xaa\xfc\t\xbb\x9c\x13\x98\xb8\x8c[\x00\xc5\x87\xdd\xa1\\;3\x87]\x12\xb2p\x17W\xeb\xb37\rX\xad\xd4F\x1e\x84\xba\xeb0\x94\xf0\xbc9/4\x10)q\r\x08\x12\x89\x0eG.H\xbd\x07>+\xcfz\xb5X)6\t\x9d\x8f\xce\xda\x93.\x98\xf2\xa0\x81^M\x1e\xd9\x89F#\xf4B\xd2A9y^\x7f\x14\xac\xda%|\xdfz\xea\xeb[\x0f#\x16\xbd\xcff\xceQ\x02R\xa5\xc3\xf0\x0c\xda\xaeM|!4]j\xd7v7\x92\xc6b\xcf2r\xacE\x14\xacV\x00\x14\x0b\xa2h6\xd2m\xc8\xf5Q\xe2\x04\x03q\x92x\xdaA\xbcs\x19Q\xac\xf0RH\xe8B\xe9%/\xa0\xe9\x15\xf1\xe7\\.\xd7\xf7\xfe^Z&Ut\xb5\x1a\x05V,s?\x9b{\'9O\xb3\xbb\xde\x893,\xe8\xf3\xbb\x9a/\x14]W&#\xbe\xc7\xb8B\xf3\x9b\xdf\xeb\x00\x13\xf5Y\xb3\xce\xc91O6\x98 \xbbJ\x1e\x96}p\x18\xe9hd\x020\x9e\xe9\x02,\n\xcb&\xda\x96U\xc3C\n\xf6\xde*\xfa\n\x90\xbc\\\xaf&>\xa5zvD[\r\xc7\xe80\xa0D\x15\x90\x04\xba"\xd8_\x91\x87i\xe8\xb1(K\xee\x95s_0\xccC\xdd{\x1fa\x1f\x00\xbe\xae1`u\xf9\xea\x9a\x83\xec\x95M\xc77\x07;\xf1;\xf7"\xf3\xa2n\x8c\x146^\xa6~\xbd0\x99\xd7\xeb=k\x87\xaa\x981\x882\x8eh\x13\xee\xd0\x01[\xb1\x854\xfciw\x87\x8b\xbb\xf1\x82~k`\xcb\x9f\xd6L\x08t\x03,\x00\xcf\xd5\n\x1e\xb3\xd9\x82\xf5\x95x\x01\xcfY\xc8\xe2\xd9\xf0\xe8\x8bX\xd4\x07T\xd6!\xebE\xef\n\x1b\xff\x1c\x83\xc9s\xccY2\xcak\xc1\x9f\'\xc8\xbc8\x85\x8b\xdf\xb6\xf6\xbf\xc3(\x13\x07\xa7\xfdS\xee,\xbf4\xd7\x8eAZvv\x13\x7f\xe54q\x18\xa3R8\\\xbd\x1e\xcd;\x8b\xf1c\xac0\r\x1c\x04\x1c\x94\x98\xce\x06+\xaf\xb3\xeb9\xea\xa5\xaa\xc6<\x81Of\xf49\x9e\x87K2V+\xa0\xa8C>\xf2|OM0?\xfe"\x04\xf0\xae\xede\xef>M\xa3\xb5P:\xed\xcc\xb5^\xae\x8f$\xf8FD}\xb1*\x9a"X\x8a\x08\xba_\xa6Xd\x96\xfb\xf2\xcf?1\x9b|\x90^+\xb9\xdc\x11\x8bI\xcc\xe9\x7fn!\x0bQ)\x9cE\x9d\xe5@L\xe6\x9cZ\x91%\xc1\xb0\xf2w\xa2\xca")I#\xd8\xcf\xb4<1\xde\xb9\xf6\xca<-\x19,\xe7\x8f\x17\xe3*[FE\xb9\xb15-\x9eM\xc5\xa1u\xa5\xd7\xf9\x1c\xab\x0c^K\x95\x9a\x1ep5O!\x1e\xfc\x86\xa7\xdeIa/5+\x1c\xd1F\x14\x92\x84\xaa\xa9\xe0\x9d\xd8\x9bx\x9e\x0eg\xdb\xbf\x82/\xc9P\xacn\x0cV\xb5qCgQ\x9bY(4w\xc6\x86\x7f\xb5\xe21\x86\x0c\xfd)\x95\x08\x886\xf5\x15V|\x07\x9a\x7f\x974\'\x11\x15\xb9@\x9c\x1a\x85\xb4\x95>\xe5\xe2\x0b\x08$\x958;[\xf7\xa6\xc22S\xa4A\xd7O\xd4~]\x0f8\r\xd9\xde\xbc\xe6\xb5z\xfc\x8f\x0c XQ\x9d\xf4\x01\xf1P,oZ\xbd\xca\x08(\x8c\xae3\x8d\xfe\xb17\x93\xc5\xaaL\xdc\xa1\xa1\x94\xf8\x93\xf8r/\x8e\x10\xe8\xff\xa5-\x80\x8a?m\xf8\x192\xc0s\x83V\xb6\xca\xec\xb7\x94\xd3-f\xc9\xdb\x1fFx\xc2\xc7\xae\r\xfa\x14\x8e}\xb4\x9e\xe8\xef\x1a\xf4\xc0\xbd\xc1\x80W\xd7Q\xec\xeb\x9f~{\xe5e1\xa2\xa0,\xf5\x03{\xedY~:\x94\x99XR\xb7p\xcbhmY/\xf0v\xcdE_\x8e?\x87\x11\xd4\xa1a+~\xd6q\xc6N\xc0\xfa\xb2\xea\xeb)\xb4Qp\xae\x91\xefae\xe6\xbb{\x9a\xe9\x93\xec!\xbd\x9d\xc5\xfc\xb5\x00\x13\xef\x06\xb3\xa4j\xca%\x01\x8e\xd1\xf1\xd8vC\xff\x14\xf3NI\xc1\xbb\x19\xeao\xed\x9d\xce\xcf:\xb8F]\x8f\x03\x0e@\x9a\x12X4\x9e\xcd\xb7w\xf2\xeb\xbb-j\x80\xc3\xe0\xa0\xa9\xaf\xa2\x10%p\xc0\xf96\xcd\xd5\xb2\x06\x8f\xa7\xb3\x92\x8e\x85\xa9\xe8\xfb\x08\xdf\x9du\xf6&ih\xbc\xcak\xb8.\x87\x04\xc9g\xad|\x88#1W@\x99ae\x92N\xa1\x1d\xd0N1Ie\xa3\xa8\xcf\x01\xdck[\\\xd8\xd4B\x0b\xf4\xd5-\xca\xd1>+;\x85M\xe0bm\x18\x19\xd5\xaf\x83rT}|\x81\x1fT1\xd8\xc3S\xf9q.\xc0\xea\xf0\x89\x08$w\xad\x0c#\xf00\x969\xb1`\x92\xb7\x9e\xdc\xcb\x8e\x9c\xe9\xe3\x94$X\xa3\xc2~\x1aU\n\xb0|\x18\xae\xfa\x8b\xab\r\xae\x80\x13\x03\x89\xe1\x91\xcb\xed\xea\xf3@\xbfL\x84\xb6\xcfW\xb5X\xc1\x07\xd6\xe6\xc2m\xb0\tL\xee\x84\x95\xa4\x1a\xdcWCr\x11@\xf1\xf3\x9fd\x99k\x10mX\xd39(GL\xc1\x86Pg\x00Y\xe9\x81\x81\x81\x15\xd6\xc6U\xf4\xb0\x9ca\x8c\x1dc\x04K\xda\xfa\xca\x8f\x08{1\xab\xf5z\x1a\xe9\xb7}\xe2\x16;\xdd\x1c\xc7@\x9a\xa8W \xa8h\x99s\xa1\xb0i2;V\xc3\x8aJ~\xcb\xe9\xb3I\x07\xe1\xd6\xe1\xeb ]+\xc3Af(\xb6!O(\x88\xccI\xfet\x91S\xe8\xdf\x1f:\x0f\x81qAm\x1d\x1d\x9c\xc1\x83\xb3\xef/>;\xab\x87\xdd\xef\x9er\x1e\x02\x0f\xd1\x94B@\xddK\x9e\xc6\x15H\xb8N\xfb\x06\xc3wpC\xa2(\xc8\xde\x1e\x8cV\xb9\xc1\xe0\xa7\xa1\xebO\x03\xe2\xec`\xe5\x87*\xbd\xc0\x9f\xea\xdd\xc4.e\xf83)\xb5\x1b\xe3\xb8\xc8c\x06\xfa}R\x8d\xae\xcdT\xd57\xba\xf4\x97\xcf\xc7\xe5\x0e/\x0b\xfc\x18CC:\xdc\xd2\xaf\xc4\xd7M\xd1\xdf\xe8*\xeeP\xff\xf0\xdc5\xc4[K(a!5\xbfZ\x87\xc0\xdfn`k\xf7\x1e\x93x\xac\xfd\x14\xf7\x94\xf1\x9d\x01n\xff\xf8\x8e\xc8\xa2jD\xc0\xf3^\xd9 \x92\xf7\xa2\x82O\xd9\x1f\xa0\x1a\xa3\xeev^*)\xdd^\x0eL:\x04 ~\xa8b*\x8b\x96\x90 p\x7fgx`\x9f\xf9R\t\xe5\xaa\x96\xef\xbf\xb1%t\x14\xa1r\xe0+5W\x96~\xa5\xc3\x84pO\xceq\xfaF\\\xe8\x9f\xc0#2D\xc0K\xb5\xa7,4\x96{}vW\xb0\x8a?\x14\xf0\xc1d\x9e\xc8\xed\x9d\xcd}\xb3\x8f!\xb9(\xe4*H\xf8\xff\x19h\x99c\x90\x14}\xe6\xd4-\xfb\x18\x98\x90\x83Xa_\xc9\x10\xcc\x96\x88,\xb1\x7f`93v\'\xf7\x8b\xf7\xa1mb\xf2F\xfe\x14<Gs\xf2\x90@U\xd3=\xe41\xa7\xc2Nc4\xae{[\xbd\xdd\xcc\x0b\x93]0)\xf2\x11|1\xde$\x0c\xadK4\xac\xd2L\xdb\x9fu\xfc\xbd\xfdk\xde\xacw\xb0\xaa\x88\xb9\x04\x9c\xb1?\xd6\x9b\x83>{\xd4@\x0fy\xd6\xba\xb4\x9ci\xf0,3\x04\xc3\x9f\xdf%\x85\xb6\x0b\xc7m')
1
+ import click
2
+
3
+
4
+ from hiddifypanel.panel.database import db
5
+ from hiddifypanel.panel.init_db import init_db
6
+ from hiddifypanel.models import *
7
+
8
+ from hiddifypanel.panel import hiddify,usage
9
+ import random
10
+ import uuid
11
+ import urllib
12
+ import string
13
+ from dateutil import relativedelta
14
+ import datetime
15
+
16
+ def drop_db():
17
+ """Cleans database"""
18
+ db.drop_all()
19
+
20
+
21
+
22
+
23
+ def backup():
24
+ dbdict=hiddify.dump_db_to_dict()
25
+ import json,os
26
+ os.makedirs('backup',exist_ok=True)
27
+ with open(f'backup/{datetime.datetime.now().strftime("%Y_%m_%d__%H_%M_%S")}.json','w') as fp:
28
+ json.dump(dbdict, fp,indent=4, sort_keys=True, default=str)
29
+
30
+
31
+
32
+ def all_configs():
33
+ import json
34
+ valid_users=[u.to_dict() for u in User.query.filter((User.usage_limit_GB>User.current_usage_GB)).all() if is_user_active(u)]
35
+
36
+ configs={
37
+ "users": valid_users,
38
+ "domains": [hiddify.domain_dict(u) for u in Domain.query.all() if "*" not in u.domain],
39
+ # "parent_domains": [hiddify.parent_domain_dict(u) for u in ParentDomain.query.all()],
40
+ "hconfigs": get_hconfigs()
41
+ }
42
+ for d in configs['domains']:
43
+ d['domain']=d['domain'].lower()
44
+ # del d['domain']['show_domains']
45
+
46
+ def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
47
+ domains=Domain.query.all()
48
+ sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
49
+
50
+ configs['hconfigs']['first_setup']=def_user !=None and len(sslip_domains)>0
51
+ # configs
52
+
53
+ print(json.dumps(configs))
54
+
55
+ def update_usage():
56
+ print(usage.update_local_usage())
57
+
58
+ def test():
59
+ print(ConfigEnum("auto_update1"))
60
+
61
+ def admin_links():
62
+ proxy_path=hconfig(ConfigEnum.proxy_path)
63
+ admin_secret=hconfig(ConfigEnum.admin_secret)
64
+ server_ip=hiddify.get_ip(4)
65
+ admin_links=f"Not Secure:\n http://{server_ip}/{proxy_path}/{admin_secret}/admin/\n"
66
+ domains=get_panel_domains()
67
+ admin_links+=f"Secure:\n"
68
+ # domains=[*domains,f'{server_ip}.sslip.io']
69
+ for d in domains:
70
+ admin_links+=f" https://{d.domain}/{proxy_path}/{admin_secret}/admin/\n"
71
+
72
+ print(admin_links)
73
+ def admin_path():
74
+ proxy_path=hconfig(ConfigEnum.proxy_path)
75
+ admin_secret=hconfig(ConfigEnum.admin_secret)
76
+ print(f"/{proxy_path}/{admin_secret}/admin/")
77
+
78
+ def init_app(app):
79
+ # add multiple commands in a bulk
80
+ #print(app.config['SQLALCHEMY_DATABASE_URI'] )
81
+ for command in [init_db, drop_db, all_configs,update_usage,test,admin_links,admin_path,backup]:
82
+ app.cli.add_command(app.cli.command()(command))
83
+
84
+ @app.cli.command()
85
+ @click.option("--domain", "-d")
86
+ def add_domain(domain):
87
+ table= ParentDomain if hconfig(ConfigEnum.is_parent) else Domain
88
+
89
+ if table.query.filter(table.domain==domain).first():
90
+ return "Domain already exist."
91
+ d=table(domain=domain)
92
+ if not hconfig(ConfigEnum.is_parent):
93
+ d.mode=DomainType.direct
94
+ db.session.add(d)
95
+ db.session.commit()
96
+ return "success"
97
+
98
+ @app.cli.command()
99
+ @click.option("--admin_secret", "-a")
100
+ def set_admin_secret(admin_secret):
101
+ StrConfig.query.filter(StrConfig.key == ConfigEnum.admin_secret).update({'value': admin_secret})
102
+ db.session.commit()
103
+ return "success"
104
+
105
+ @app.cli.command()
106
+ @click.option("--key", "-k")
107
+ @click.option("--val", "-v")
108
+ def set_setting(key,val):
109
+ old_hconfigs=get_hconfigs()
110
+ hiddify.add_or_update_config(key=key,value=val)
111
+
112
+ return "success"
113
+
114
+ @app.cli.command()
115
+ @click.option("--config", "-c")
116
+ def import_config(config):
117
+ next10year = datetime.date.today() + relativedelta.relativedelta(years=10)
118
+ data=[]
119
+ if "USER_SECRET" in config:
120
+ secrets=config["USER_SECRET"].split(";")
121
+ for i,s in enumerate(secrets):
122
+ data.append(User(name=f"default {i}",uuid=uuid.UUID(s),usage_limit_GB=9000,package_days=3650))
123
+
124
+ if "MAIN_DOMAIN" in config:
125
+ domains=config["MAIN_DOMAIN"].split(";")
126
+ for i,d in enumerate(domains):
127
+ if not Domain.query.filter(Domain.domain==d).first():
128
+ data.append(Domain(domain=d,mode=DomainType.direct),)
129
+
130
+ strmap={
131
+ "TELEGRAM_FAKE_TLS_DOMAIN": ConfigEnum.telegram_fakedomain,
132
+ "TELEGRAM_SECRET":ConfigEnum.shared_secret,
133
+ "SS_FAKE_TLS_DOMAIN":ConfigEnum.ssfaketls_fakedomain,
134
+ "FAKE_CDN_DOMAIN":ConfigEnum.domain_fronting_domain,
135
+ "BASE_PROXY_PATH":ConfigEnum.proxy_path,
136
+ "ADMIN_SECRET":ConfigEnum.admin_secret,
137
+ "TELEGRAM_AD_TAG":ConfigEnum.telegram_adtag
138
+ }
139
+ boolmap={
140
+ "ENABLE_SS":ConfigEnum.ssfaketls_enable,
141
+ "ENABLE_TELEGRAM":ConfigEnum.telegram_enable,
142
+ "ENABLE_VMESS":ConfigEnum.vmess_enable,
143
+ # "ENABLE_MONITORING":ConfigEnum.ssfaketls_enable,
144
+ "ENABLE_FIREWALL":ConfigEnum.firewall,
145
+ "ENABLE_NETDATA":ConfigEnum.netdata,
146
+ "ENABLE_HTTP_PROXY":ConfigEnum.http_proxy_enable,
147
+ "ALLOW_ALL_SNI_TO_USE_PROXY":ConfigEnum.allow_invalid_sni,
148
+ "ENABLE_AUTO_UPDATE":ConfigEnum.auto_update,
149
+ "ENABLE_SPEED_TEST":ConfigEnum.speed_test,
150
+ "BLOCK_IR_SITES":ConfigEnum.block_iran_sites,
151
+ "ONLY_IPV4":ConfigEnum.only_ipv4
152
+ }
153
+
154
+ for k in config:
155
+ if k in strmap:
156
+ if hconfig(strmap[k]) is None:
157
+ data.append(StrConfig(key=strmap[k],value=config[k]))
158
+ else:
159
+ StrConfig.query.filter(StrConfig.key==strmap[k]).update({
160
+ 'value':config[k]
161
+ })
162
+ if k in boolmap:
163
+ if hconfig(boolmap[k]) is None:
164
+ data.append(BoolConfig(key=boolmap[k],value=config[k]))
165
+ else:
166
+ BoolConfig.query.filter(BoolConfig.key==strmap[k]).update({
167
+ 'value':config[k]
168
+ })
169
+ if len(data):
170
+ db.session.bulk_save_objects(data)
171
+ db.session.commit()
172
+
4
173
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
174
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,60 @@
1
- # 2023-04-08T15:11:21.088876
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x008\x0f\x00\x00\x12\t\x04\x00\xc8R\xc0\x1ba\x84\xfaW\x0f\xdd\xc0\x9eM2\x03\xeb\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xd8/\x93\xae=\xba\xb1\x8b\xd1\x08\xc0\xb1\x17,\xee,%\x8ch\xc5\xbe\x8f-\x0e\xf4\x1f\xf6z\r\xd7\x93p(7\xd7\xba\xa2H\x8c\x9a\xa5\x83\xa9\x0f\xbf\xb3\xcd[\x0eE\xd6\x80\x1b<\xe4\x95\xcc\xbb\xe9\nP*\xea\xb1]\xeb\x87\xe8\xec\xad\x15`g\x1c\xf3 \xa8\xeb\xaa\xe9.I\xc7\xe7qr\x01\xee\xa3\xae\xcd\xeb&\xfd\xafT\x04.m\xd1>R\xc2\x16B\xc0HN\xa6\xe5\x82a$\x08\xe1zz=\x93\x85g\xb1\xd6\x12<\xd0\xb6w\x0f\xf3\xd9\xfa\x11\x82\xd5\x10:}\xe8\xe4\xf6V\xd0P:\xe4:K\xe4p\xcd\x14\xbfz\x1a>\x8fUnP\xc7!\xcfGh\x8d\xb7 \xd1\xc6u\xd9+\x85\xee\xfb\xd8\xe7V\xa92+@\x02zsH\xb3\xb8\xdbt\xed^[\xe3\t\x9d\xdc\xfc\xffU\xeb\x00.\x923\xe4\x13\x10!\x81\xa3 ?\x81\xec\xf26\x03\xb9\x18A\xefx]\x7fd@/\xdc\x95\x93\xbb23\xf3\xba\xa5\xf2\xe1\xe9\x8c\xcc\xd3o\xe7s\xb7\xdc\x18\xe5sx\xc7\x18=\xb8\xa96\xe4X\xfe\xc8K\xee\x07M\xf8\x1a\xaf\xeb()w\xa6\x91\x02v\x8a\xb4\xcf\x92\xa94\x8a\xf7\xa35\xca\xc5\xd7\x10\x8c|\xa1\xda\xca\x1b\x8e\xf6\x85y\x9c\xd9\xd95G9z\xa52\xbe\xaf{^\x18*\xcc7\xc6\xab\xd4\xf7\xfe}\x86\x10\x9a\xec\xaa\xd1\x04\xa1/p)\xdc%\x03\xf2\xe6\xee\x8e\xa1Y\xd1\xc7#\x89#\x98\xdd\xd3H=\x93\x89\xc3\xb9S\xb4\xa0\x8d\xfcd\xe0\xfcq\t\x13\x8c\xcd^\x17\xc84\x9a\xaa\xc5a$\xa8_B\xf8\xf1=e\x8f\x8b\xe5\xc0\xf9\xb5.\x10\xc3\xeb\x9e\x8b\x01\xed\xea\x08\x10\x02%\xc3\xf1\xda\x12{\x14,\xf5\xed#W&\x04R\xf0h\xd1e\xe7\xe9\xf2\xee\x1e\xe0\x03\x93K\xd8u>4\x84&u\xe0l\x85[\x96\x17\x8dw^{\xc8\x8a\x0c%\xca\xce\xb8\xa1\x02\x9aV\xd4\xc4y\xc2_\x917\x8b\x98M\x9f\x81\x19\x0bct\x132\xe3\x91\xa4q\xacj\x8d\xc5\xa3\x98\xdb\x18\xf01\xf0\xae\xcb\x0e\xd9\x14\x8a+I\xc3\x12\x92\x1e\xb8~V\x9a\x8e\xb6\x94>\xe6\xbb\xbac\xbc\xaf\x0c\x16,\x87\x7f\x0c\xf7\xba\xba\xceb\xee 4\xc8\xf7\xaa\x84\xda(\xea\x03\x0f(z\x8aS\xb9vZ\xcdpMo+\xeey/\x133\xd0\x05~\xb61[\xdc\xca\xb9PY\x1an\xba\xd9\x87\xf0\xbb\xbb\xa2\xa6\xb0X\xc0\x1fZ1i\xe5\xa38\x90\xeb\xa4\x92\xdcB\x9e\x8c\xf1L,\xc9\x10\x96\xb9f\x9e\xe6\xfcW\x18N<\xf8\x85\x97`\xbe\xfb:P\x9d\x08\x16\xf6\x811\xe0\xf9\x16\x02\xc9\x13\x90\xd2\x8d\xf8d\xc73V\x03\x1f\x03/\x837!6w\x10^g=\x96q\xb2\x17)2\xc0\xcb\xb8\xdb\x0c\xf3\x0c\xb2qv\x10^\xedE\x1e\xf3\x90^H\xe6\xe4\x1a\xa1\xd6\xe6?\xf1\xe2\x82\xdd\xc0\xb8\xa6\x8a\xa5\xfe\xa6G\x87\xf7!-\x95U\xb73\x83\x85\x02+(A\xd4\x8f\xef\xbdrw\xa9\x9dFa\xa3\xb5\xd0\xabj\x87\x04\x05\x00U1\xca\xf2\xa5(\xf8\xac\x98>\xd7\x05\xbe\x1ci\xfd\xf6B\x7f\x9f\x07a\xf9\xc3\xa6\xc3\x05\xe7\x15\xa0\xb2\xad&\xb6Z\x117o \xcd\xe9R\xde\xbc3\xfajb\xff\xda\xb60\xa6<F\x1c;\xa7\xc5Hf^\x8b\xe7h\x19\xa8\xaa\xf7\xf6>&\x98P\xa7\n\x94\xaa\xdap\x1d.\xd9\x88\xda\x85s\x1d2\xef\xdd\x11-\xdb\xbe!O\xa8\xb0\xb7\xaaXoO\xcf\xa6T\x01\x9f\xdb\xf7\xcf\xfd\x91\x1a\x14**_O\xfaw\xdd\xe2\xa5K\xf5P\xd1!\xeb8+\xbb\xf93|C p\x9dcKUr\xfe\xb3*\xb8\x9cl\x9d"\xce\xab\x00\x90\xfe-\xdcT\x07\x80\xa6\x96\xab\xd4i\xd01\xa2W\x98\xe1|C\xfcrx\xbbF#*F\xfd\xf3\x97=o\x17\xa6\xc7a@]\xcb\xbe\x02\xe7\xda\xb8\xb1\xb9\x1e\xef0N\xb50\x7f>\'R\x02\n\x83\xd6E\x85\xad\xfez\x95zk\x9ePJ\'\xee,\xcb\xf4\xe3\xa6a\xd6\xfe\x1a\xc9\x8e\x1cG\x08j\xca\x05hQ\xb3~\x94Q\x01\x04@\x96\x19\xadG\x04@\x81\xd7\xb5e\x10\xc8\xd3%O\xd8^\x8b\x08\xf4\xa7\xf0-Wv*\xe1\x1c\xf0\xc3"f\x03\x1e&\xa9\xd0dM\xa6\x9d\\k\xae\xdd\xef@|\xd6\x05&o\x92\x91\n]\x0c-\x88\x17\xf9\x8c\x87\xa6&\x05l\xc2I\xcd\x17I\xc9\xcc+\xc9v\x07\x1c\x9a]\x9ed\x0f\xf8\x0b\x9d\xcdj\xba:\xb5r\xfe\xa4\xbf\xfb\x00\x00\x06*\xa9\xff\x9d\x13\xa7\x10]\xe8\xca\xf1fZ8>-\x8c\x80Y\x12(\xf8\xecz\x06\xa3\x11F\xccQ\xa2:y\x1dh\\/\x9c\x9a\xf2\x8e\x98\tV\xbd\x8d\x118\xec\x10\x1aR\x84y\xe4@\x81b\xf6\xd4\x11\xf2\xedx\xea\x06\x96\x18\xdb\xf4\x0c\xf3Q\xb9\x03\x868\x0e"&8\xdf\x9fVy\xc7S=\x8a.C\xb7\xd9\xf8\x1e\xee3\x0e`\xb5W\xd2\xa8\xae\xbf\x89\xd5\xe4\x08wD\xcd\n!P\x93\xc6\x99P\x12[Xt\xb4\xcc\x08\xbe\xe0\x9di8\xe23\xde\xd7\x97\xe6\x1a\xf5\x17\x03\x80\xe8\xf2\xcdS\xcb\xc8\xd9\x82\xb8\xc7)\x99\xc5[6l~\x99\xc6e\xadxo\xc5}\xc4\x02vp\xe5\xf8\xd4\xe8m\x9d\x98\xa4\xf7\x14?\t\xd7\x03b\x9e\xd0P\x07\xec\x8ep\xacv\xd6\x8c\xc0\x06\x8a\xdd]\x94mR\xab\xcc\x8eH\xde\xf7\xb3\x92>\xd92e\x1a\xb7\xf9\xb9\x89\xdf\xae\x90\xb0\xfc\x89\xd5{Q\x8aD\xd6\t\xf0\xf870\x0fqL\x88\xc5\xf1{0\xb3\x88\xd2S\xb8}\xafc\xdb\x02]I\x036\x88l$\xbfS\x94\xd80\x15\xa3\x92+\xd2:\xf7\x90\x05\xc0\x98\xca>\xff\xf4\xfa\x90\t:0\x0be\x04\x95W\xa2\xe3\x90\xa2\xc4\x1ed#k\xe4k\xf3lRR\x10\xedz^x9<\xa3jw\xda\xa7kD\x9c\xed\x86\xfc-\xbd\x83MO\xeb\x18\x8d\x86\x89\x1e\x0b\x90Z]\x88e\x80\xf5\x85,\xa2X\x0b[\xaf\xbcp\xc2Mw\xd4\x13~\xe0S\xd8\xc8\x13\xdfRY\xe7\xbe4Kp\x1bl\xc8\xc0\xe3\x02 q1\xab8\xe7\xa4d34%LYJ\xb4>\xe7@\x87L\xe5G\xccz^L\x9d\x13\xe9n\xad\n\x05zAU\xcdvAbW\x1c\x88\xf4\x00\x10\x88\xadTCk\xe1\xbf\xbd\xb2\xb1~1\x8e\xd5\x8c5\xcb\xe6\x1a\x04\x81e\xd1\xb06\xd9\x9b\x97\xe3wlJ\xcf\xb6\xdc\xf2\xfcG;\xea_\xa8\xd23\xf0\x13\x01\xe3\xb1O\xd9Q<\xcd\xdd*+\x9b\xb4|\xa2\x0f1\x18cG\x00,8\xd5TfhC:\xf6\x992`\xfcx\xb7\xcc{\xb3\x90f\xa7\xe5\xe1gdd\x17W\xe0B\xf9\x9b\x19\xbflPd\x11\xf4\t+\xa4\'\xe0\xbd\xb4~w\xf6-/v\xcf\xb4\x9c\x00V\x9b\xe8\x0b\x10l\xf7\xd9E\xa7\x97\x8az\xa1\x191E\x12\xbck\x028V8\xe4\xf7\xdf\x83\xbd\x0e\x86\xf1p\xa1)\x15q\x8c\xb1\x1e\x98\xa0\x07MD\n\xe1\xb2\r\x86\xa0p\x03v\x95\xad$v\x92"6\x1a=n\xad\x1ef\n\xf4\x82-\xec4|\xa5\xde\x84\xaf\x85\xa8\xf0\xdaD\xbf\x07\x90\xe5\xf1\x04\x9f\x16\x84z\xd8t\xc0\xf5 ik0k\x9ar\x91#X\xee\x08\xbdZ3x\x1a\x99;\x18U\x9eL\x89\xe2-OG\xda\xad\xca\xff\x87$\x18Q3\xf8\xf0s\x9e\xc5\xcdX\xbe\x13\x918\xbe\x0b\xf4\x02m\xa7 HczI\xe6\xa2\xf5\xd6\xde\xb4pC\x1f2\x03U,\xd7?\xe8\xc2\x87\x82\xa4D\xc80\xab\x01(-@\xa1\x95\xcbX\xbf\xd8\x89\xbb\xf8ty\x1f\x12\x9c$\x1b\xc1Yo]v\x96D\xa2\xc3B4\x97h\xee\x02\xa8\x8c`i\x10\x86\xb5\x8d^\xe3\xac\x0fW_\xe1(\xf0\xb8\xc1\xca\xffpTYf\xec]\xe2\x06\x1a\x97\x9d_^\xc2\xe8\xd3\xbd\x967A\x99D\x93\xa3&\x97\x7f@M\x91(\xfd\x91\xd7\xe1\xac\x1f\x93ZQ\tB\x07\x15\x9e\x92>\x0e\xd7\xd6\x19\xa2\xba\x8b\xab\xe7y\xb1\x9d\xc8\xb7\xb4\\\x040\x1d\xb0Sg\x1fyTw\xba\r\xdb\xe8\xee2\xbd\xb9\'\xd3\xc4\xb6_2\xc4\xc4;\xfea\xd9\x86\xaf\xb3\nkwJ\xc8xg\xbb\xfbQ\x18x\x0f\xd8\x8c\x07X\xdf\x9c\xcd\xc8\x1a\xa3\xdbC\x0fK\x93\xa1\x84^\xd1v\xa4\x9b\xd4;\xf6\x95\'\xc6\x1eB\xfe\n7\xdb"\x81\xa3\xde\x0fra\x11\xeb\xd4\xb7ATdd\xaa\xed\xc9LV.\xac\x9a\xdf2\xe1\xda\xc4;\xcd2\xdb\xe3\xa03:M\xd2\xea\xd9\x1d\xfa\xee\x15W<W\x84\x15\x9e\xee\x80\x0f"\xdc\xb6F\xcdf\xea)\x9b\rI\\\x91\x9b\\}\xef\x90\xd94Ka|\xd8\x0bj\xd2\x02)\x92\xc4xV\xa2;\x870\xfc-\x94\x9b\x91\xae\x0c*\x86\xd8\x93H\xff\xa7l\xfbv\xf8\x88\xf3\x00\xce-\xc0\x97?\xf2\xf2w\xe8B{}\xa3\xb4\xdb\xe4\xa8\nR\xaa\xc5;V\x18\x1esI\x10\xb1\x06g\xd0\xfa\x19hD\xc8G\xcdwm\\\xc5\x989\x81\xec\x80B\x13W1B\xf5\xe1\x8b\x95\x8d\x1c\xe0\xa9\x95FQ%k\xe7\\\x9f\x7f\xa9$`\xdb\xf0E\xff\xac\x0e\\@\x07\x07n\x85\xaf\xe8Y@EJ\xc3\xfd\xaf\xc4\xccN\xa0\x9e\xf0\xb4\xe2L\x1a\x06\x14vi0H\xa3\xdd\xf4\xb9\xeddN\x838\xa4\xbf\x1a\xd8\xa5\x08\xb3\xfd\xb1\xf54\x1c\xed\x8ev\xe6\x97\xdc\xe1:\nD\xf0\xe4\xef$#\x0e\x8c\x96\x98M\x1f\x90tFF\x19>"\x89\xbe\xbex18t/\x07\xe0\x8b\x0b\x13z\xfcA\x1b\x03\x95\x84\xc1\xf5\x81\x87N2\x13\x9a\xa6\x9bB\x9c\x8a\xc7\x11T\x9f\x96R\xbd\xb5\x1a\x87\xbf\x8b\x80\xe5\xf2\xdb\x0f\xc6\xe6\x84\xd4o\x92c\x0e\xa0\xe7\x92\xa1%\xc31\xee\x07\xc9\xc4\xfc\xce\xc6 o bp\x10\xb2\x1a\xc1p\x83\x04@\x83G\x7f\x97\x82\x8c\n\xfe\x90\xd6\xfeqpJ9Q\xa6\xd6b\xdc\xa2h5\xfb~<\xde\x9c\xfe.\\\x94\xf0\xe8?\x10\xb7\x8bh\xbc,wZ\xffr\x9cKtwZI}f\x1cxC\xadh\xebP\xe2\x18\xd6\xa2Z\x9fn\xd6\x10\xa2\xb26w\xa3\xde\x99\x8dD5\x1ct\xf6a\x8a\xea\x86R\xa3*\xaf*w6\x14\xd4\x98l\xd0\xe5A\x94<\xf4\xbc\xd6\x8evn\xd1\xaewi\x04\x9b%\x13<\xf0v\x07$\xdc\x95\xe9Z\xf2\xe9\xcc\x11\x1au\x1b1\xca\xaeg\xc0(\xdf\x9f\xb5\x99Z\x8a\xce\x17+\xc8[\xd2\xcd&\xcc\x1e\xc2Ji0\xd7\xa9\x1dh\xa1R\xa7\xb4\xe0\x1d#u\xb7{\xee R}Z~C\x8d\xda\xf0\xf0\xb9\x93\x8d\x0e"\xe6K\x1b\n\xd5^\xd8,aJn\xf6z\x04j\x90f}W\x94\x04\xc0\xbc\x85\x82R\xbam\xb45\xdb\xe56\x0fJ3\xce\xf1\xebkcFX/\xf7\xe7\xe1UMr>\x86\xac)E\xd9\xf6p<<\xd9\x0c.\xb9m\xcdX\xa1\x8a"\x19)\x8eg\xf8e3v|NS\xf8p~\x0e4\x99\xda\x9a\xb7\xbd\x0f\xd2\xc1h\xb9\x9d)\x86|\xa9H\xcf\xebm\x8b\x18\xc2\xf1\x9e\xc3\x16^+\xddH\xf6\xe1H6\xa2AG\xca\x87\xc3\x13R\t`\xad\xcc\xc5G\xf4?\xd0\xe1\x9d\xe3\x1a6\xb4\xb7FA\xb9\xd2-\xeb\xa1\xf3\xdcJ@/\x95iw\xdc!#E\x93\xd8\xaa\x1e\xbc.\xf6\t0\x10t\xb9\xd3g\xb2\x89\x89H\xe7\xfbQ\x92H\x0c^@{\xefa\x80\xfdV\xd1\xd8\xb4\x99C\x9bO1\x90o\xac\xd2\x18&ZR\x0c\xf5\xb2W\x9f\xc6\xac\xf0t\x8a\x16\x81\xd5\xc9\xcf\x14\xe46\x83\xeb\xf28\xbf\x15\xe2 \xeac\x98\x9f\x9b\xa9P!?\xed\xbfu\x90\xcf\xba\x84\x02\xf1\x1d\'\xa10Ji\x19 \xf8\xa8\xb4z\td\x82\x9d\n\xab\x8cT\xd1\x03\xd2\xae\xd8\xe9\r\x12E\xd3\x07\xd7K\x1es&\xa7\xb5!\xe4i\xc4\xe7W\xa0\x10\x1b\xd5\xef\x8c,\x03\x1eBR\xd7\xc0\xe9\xd0>\xa2O\xfc\xfc\x95Ld\xc0lo\x11\xc8A\x9d\xe6\xde \n\x1d`7\x00l\x11)\xe8j\n\x98\x7f8\x82X\x10\x92\xe7\xfa\x0c\x08\x8f\x0b\xac\x8a\x90kkY\xe6{u<[\x8c7E\xe2\xcc\xa5\xec\xb8&<\x08\xd0\x18\x18\x89 \xf0\xfe\n\xb8K\x10V}=\x0f\xd7\xf5\xea\xfaT&\xacK\xf1\xfa>\xad\x83{\x97\xff\x95\x18*F-|\x9c\xc67\xaa\x14\xfc^=\xd1\xbaC\x92\xfdJ\xc3\xd2\rO\xa95a\xa7\xfci\xd6\xe5Q\xbe\xe2\x05\xce\x80\xae\xd2\x9d\x7f\x00\xc7jXt\xc9;>\x87\xf1\x0b9f\x9e&\xa0\xa5tyP\xe2\x92\x86\xcex\x9a\xb7v\xd5\xa5:@\xd1\xf6\x7f\xa0~2\xfask\x8f\x1c\x83\xd3,\x04\x05\x1c\x89\r\xb4\xe5\xe3\xed\xb5\xb5\xcd\xb32Gl\xd1\xb6\x02\xdc\x08\xd2\xd3\xe6]\xc2\xb4?\xd38mfp\xfe4\x17\xcfd\xb8\xc90\xb0\x9e\xf7\xd4E;-\xe9/\xe1#\x8f\xda\xb6\x1ag\xde!h0\x1f\x91\x8f\x92\xbb\x15\xbd<T|\xac\x91\xd9\x07\xfcN\x98,\xd2\xc7\x01V\xbd4\xf0\x18\xffDc\xa2\xd4\x14\xf5\xcbv\x95`\xe1\x8eq\x99i)a+\xe1\x8br\x9e\xebTk`H\xd8B*@e[\xe9\xe7b\x9c\xadf\x98\xa0J\x040\xb2\x15\xb7\x9b7u@5\xab6\x9bY \'\xc9\xa3\x95#\xb8R\x07\xaa\xa8\xba\xe2\x1f\xc7.\x96#\x83\xb93\x08\xb3\x82Yb%\xe5\xc0C\x1c\xa8\x94\xd9\xed\x03\xee<\x87\x8e\xd2B1\xf1\xae\x88\x17\x0f]xi\xac\xab\xe2\x90\x87\x88\xa8\xf7\xd3Et\x0c\xcbs9%m\xfea\xc0\xd0\xa7\x15\xb6S\xca\x7f\x00\x07d\x10>\xf8\xa7\xa8\xe1E\xcb\xed,\x1b\xa7\xa5\x97\x88\xdf%\xe6\xe3J)6\x0bNcY\xd4\xce\x9e+\xe8\xe9\xa7\xf5\xfc\xed\xba\xe0\xdc\x07\xf4\xf8nF\x10\xbc\x81`\xedV\\O\xc4\xc1E\xb4\x18M\xfa\x91\xcf`0\x14x7\xfe\x1a\xc9\xc2%+\xdfB\x7fa\xc4\x0f\x89\xb57/U+r\xed\x8d\xa6\xb4\x11\xcf\\\x81\xf0\xa0uo\xa0`~\xb8\x08\xee@\xf5_O\xea\\\xc1\xe8\xd0\xd9\x7f#\xa2U6\xba\x88\x08^\x1e\xceYO\xe6\xc9\x84\x81!M\x9azu\x0b\x90\x15\xcd}.i\x84\xbdY\x9e\x8a\x1c0\x11\xb7\x17\x95.\xd2\xca\xdf\xa0MQaa\xec!e\xbfih\xac2\xc4\'\xb2\x95\x95M\x03(\x8b\xd6\xe50\xde\xd3\x10\x81\xedu6T\x14\xc8\xa4\x9a\xdeP\x10\xa4\x85\x12f\x94\x16J^\xda\x9d\xdc\xde4\xc5#\xa2!\xb29>b%\xee\xb1\'N\x1c\xf6\x8c\xf52\x9f=\xd5m*\x08\xfd\x19z;{\r\x80\xab+G\xd4,ac\xde\xa2\x85_\xd21\xaf2\xe1\xde\x88m\xcd0\xf9\xd7\x0b\xb7A>;\xe4sU\x94\x80\x9b&d\xaa\xd2\xebq\t\xadS\xe9\xb8J\x99\xde\x88\x9f0\xa8 \xf6\xbf\x9bK\x01\xea\x14\xd3\x10\x92\xf6\xc6\xd9\x9e\x17\xa3|\xd9\xb8\xabZ\x13\xddpodW\xd9x4\x9a\x7f\xd2<t{\x18\x12\xc0\xae)\xdc\x0bY\xc2\x9cU\x97\xd3\x10\xcc&\x08\xa86p\xdb\xb1\xf4N\xe7gx\x87\x12\xafA\xc5:_6Ni\x1d_\xc2\x93?\xe1\xc9_cI\n\xc7\x8an\n\xc9\x1d\xa2\xc3\x90\x00\x84\xb9=\xa4\x86\xd0\x1e\xd7\'N99\n\xf5VY\xe9\xf3\xfe \x94\xe7\xc6\xad\x98\xae\xd3e\x9dA\x92\x93\xd7\xf2\x88=U\xbc{\x98\xa3\x8c0w\xbd)ROO\xa48M\x00\x87\x06\xf9\x8d.*V\xc3\x0c\x93K\xee\xb3\x98/\xbd?9\xa5%\xad\xda\xa9\xd4d\xff\x9c\xc8\x92\xe1y1q\t\x0c\t(\xc4eB\x9c\xf4^-\x04\xfe\xd9,\x8e.\x8a\xd8\xca64\xaa\xad\tC8\x93{\xca6\x91\xec\xbd\x8e\xe4W\xfbF?#\x1b\xf5+v\xccq\xd8\x80\xe0\xfeW\x90\xa3\xe5\x1b\x93\x07\xee\xaf=\xc5\xa6vt\x95\xb6l\r\x0f\xf8\x0c\xbfC\x8aW\x11c\xd0\xce:z\xa2\xe2\xba\x8dCl\x89\nA\xf9\xdd\xa2Zv\x07\xfc{\x11\xabJ\x87\xc5%\x0bZ~!z]\xe3\x91\xc0\x8e\xd5\xb1Rdj}\x96\xebVJ\x8e\xf4\x0el/\xc5\xd8j\x89ks\xe5^\x8e')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.base import AdminIndexView,expose
2
+ from hiddifypanel.panel.hiddify import admin
3
+ from flask import render_template,url_for,Markup,request
4
+ from flask_babelex import lazy_gettext as _
5
+ from hiddifypanel.panel import hiddify
6
+ import datetime
7
+ from flask_classful import FlaskView,route
8
+ from hiddifypanel.models import *
9
+ from hiddifypanel.panel.database import db
10
+ from hiddifypanel.panel.hiddify import flash
11
+ class CommercialDashboard(FlaskView):
12
+ def index(self):
13
+ return ""
14
+ bot=None
15
+ # if hconfig(ConfigEnum.license):
16
+ from hiddifypanel.panel.telegrambot import bot
17
+
18
+ if hconfig(ConfigEnum.is_parent):
19
+ childs=Child.query.filter(Child.id!=0).all()
20
+ for c in childs:
21
+ c.is_active=False
22
+ for d in c.domains:
23
+ if d.mode==DomainType.fake:continue
24
+ remote=f"https://{d.domain}/{hconfig(ConfigEnum.proxy_path,c.id)}/{hconfig(ConfigEnum.admin_secret,c.id)}"
25
+ d.is_active= hiddify.check_connection_to_remote(remote)
26
+ if d.is_active:
27
+ c.is_active=True
28
+
29
+ return render_template('parent_dash.html',childs=childs,bot=bot)
30
+ # try:
31
+ def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
32
+ domains=get_panel_domains()
33
+ sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
34
+
35
+ if def_user and sslip_domains:
36
+ quick_setup=url_for("admin.QuickSetup:index")
37
+ flash((_('It seems that you have not setup the system completely. <a class="btn btn-success" href="%(quick_setup)s">Click here</a> to complete setup.',quick_setup=quick_setup)),'warning')
38
+ elif len(sslip_domains):
39
+ flash((_('It seems that you are using default domain (%(domain)s) which is not recommended.',domain=sslip_domains[0])),'warning')
40
+ elif def_user:
41
+ d=domains[0]
42
+ u=def_user.uuid
43
+ flash((_('It seems that you have not created any users yet. Default user link: %(default_link)s',default_link=hiddify.get_user_link(u,d))),'secondary')
44
+
45
+ # except:
46
+ # flash((_('Error!!!')),'info')
47
+ h24=datetime.datetime.now()-datetime.timedelta(days=1)
48
+ onlines=User.query.filter(User.last_online>h24).count()
49
+ total=User.query.count()
50
+ return render_template('index.html',onlines=onlines,total_users=total,bot=bot)
51
+
52
+ @route('remove_child', methods=['POST'])
53
+ def remove_child(self):
54
+ child_id=request.form['child_id']
55
+ child=Child.query.filter(Child.id==child_id).first()
56
+ db.session.delete(child)
57
+ db.session.commit()
58
+ flash(_("child has been removed!"), "success")
59
+ return self.index()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
60
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product