hiddifypanel 3.0.0.dev63__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-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
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T15:11:21.552476
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00%\t\x00\x00\x12\t\x04\x00^}\xeaQ\xf1n\xe1\xe1\xa8\x88G\x1f\xa9W\xdb\xdb\x00\x00\x00\x00\x00\x00\x00\x005\xc3\xaf\xe9b\xe0\xed\xf5\x929\x0eW\xe47F\x08\x9d\x9d\xcd\x05\xa3\x19C\xd6\x83\xe1\xc3\xb4\xba\xc0\x9d\xd2\x8f\x11\x89\xc9W\x83\x86\x8f\x03A\xd4N9\x17F~\xe1\xddh\x90\x9f%\x88T1@D\xc19\x0b\xf3\x1cQkS\xa7iz|~\x86\x0ce\xaa\xe7\xfe\xeb\xe3xH\xb0\x17\xc5[\t\x1de0b\x97~I\x96\xf1\x05@Z\x19\x0f\xb7\xbe\x82_\xe6wmC%\xc7\x0f\xaa\xd4\x84\xef\x8b\xca\x08*\x84\x8b\x97?\x84\x04\x1aqnwz\x7f\xf2\x14k\x1d\xb03f\xa6<\xb7,\xa7\xe4\xda\xe1\xa4\x9e\xd0M\xb8?jYC\xcb\x95r.NWe\x089&=\x02^\xec\x08\x985yL\x93\x84=0\xd9a\xa3\xab\xb6\x17H\xa4\x81\xc1i\x9a\xa5\xe6\x9a\xe8^2\x96\xc8\x03\x01\x9c\x14m\x9b`\xb4\xc8\xb9h\xc0\xbeH:\xa0\xf5\xaa\x88M\xca,z\xe8^\xa9&\xbc\x07\xf9\xd3M\x90wP\x1b\xc9\x0fJ\x1c\x8a\xe6b\xe01\x16H\xe6\xae\xcbb\x1f\x94\x9dl\xc1HT\xc1\x0e\x8a\xc7\xf0\xb4\x12K\x07\x891\xca\x1cR\xcd\xe4JE\x00\xa4a\xbc\xdf\x05=\x9akg\x89\xae\x96*\n\\}.\xa0\xde_D\x9a,\xa4\xb1\xb1)\x12\\\xde_h.c\xc6\xdc\xeec\xe9$f\xcf]\x80\xfc\x12\xc6\xfcM\xf5\t\xe4P]dR\x9a\xc0\x0b\xd8\xae\xb1J\xb6i<\x15\xc9TE\xf2\xddh\xf6,\xb3\x19\xc7\xf6\xdb9VSO\xce*\xcb\x85\xd7\x86\xbe\xd6)\xaf\xc3\xad\xe8\x03\xea\x06\x98\xfc\xe5g\xa5\xda\xfe@\xbc\xb0\xcf\xa7\xc3\xd8\xc5\xc6\xd3\xa9K\xae\x99\xfek\x16&C\xe2d\x08\x82+\x03\x99\x96\x07\xa5\xebY\xc0MK\xa8\x9c<\x82\x95\xcc\xf3\x84i[e/\xc2\x0b\x89\xfbq\xcb\x14\t&*1@f\xd3F\xb6\x8a8\xe7\xfe\x83b\xb2\xfe\r\x05w7\x07\x98*\x8b\x9e\xf7\xc6\xe02\xd2\xd9(\xa8\xff\x9f\xae\x9c\xb6\x97\xf0?\x18\xc3\xd2$cJ\x86\xe9\xcc\xdf*\xed\x17\x0b\x8c\xd9\xc8\\\xb6\rs\xbb\xf2\x07\x10\x8c\xa9z\xae|\x03\xc6w%`\x905?S\xf3\x05\xa3F|i\xfa\x9d\xe2\xa3\xea\xd7\xd7\xb4#<\xfb\xfa\xcf\x1d\x97!\x91\xd4S2\xa8\xe3\xea\xb4\xadv\xbb\xf3K?\xd6\xa6\x0b1\xa8\xe5\xfd\xd5\xe8\x9f\x1f\x8am\x90(5\xc9KD\xd5\xf5\xf6n*n\x97L\xc2hy\x17C8\xe8x\xc5\xa3S]\xfe?\x80\xc1vb3\xe1\x04\xd8 \\\x9dY\xdf\xe4\x06\xda\xa6\xc37\xc6\xe6J\x028\x7f\xd3\xee[\xe9g\xff\x9am,`-\x13!\xe6\x03\'!\x10\xed\xa7\xbaYf\xb9w\x16\xf8\xe4\xf3\x9d\x19\x94\xb2\'\xfd\xf7\xb0\xc5\xd3\x88\x9a\xdf\x93\x84\x19\x1b\xb85\xd3G2\'\xdb\x18_\nM\xc7\x17\xfam\xa1\x01}\x02W{\xc9(\x03\xb1\x9exv\x9c\xe0y\xf97rW&\xa6\xd9\x1c\x7fsD\x1e\x98\xd5\xb7\x9f\x146\xc6\x00\xd7\xa3\xb76\xd5\xb1eZ\xfc\xae\xcc\xf0h\x06\xdb&\xfe^\x80\x90\xbdl\xd4\xc8\x1azcsp~k\xc2\xb7\xe2\xa0c\x08s\x08{\x97Z\xcb\x13\x93\xa9\xd9\xc3\xd8\xf1\xcdb\x96\xc9\x08\xf4>\x94\x17\xe6\xd7\xde\x02 \xb1r\xdb\x9f!\xcf\xe7^}\x1a\xa0\x8eR&\xa4\xd3\x0b\xa8\xd0\xceK0[(\xf1w\xa9a7\xcf]Q\xa2@+u/\xc2\xe5T\xedG\x17\xc82\xf9\xe6{\x89\x9a\xea^\xcd\xc1\xe8\xc3\xd5:T+~\x89`\xf6\t0\xf9"\x8b[\xf8x\x90\xa8\xffG\xeeZ\x90\xa7D\xd6\xc1\xff_\x03m\xd5Rl\xeaR\xc9\xbcY\xd1\xa0\x8d\xf7<`ic1\xd6_\n\xc1\x9a\x11\xca=\x8d\xe5+\x12\xa6A\xfdg\x0c,\r\xc7\xd8%\xdc~\xcc\xfb\xc5\x99I\xdf9\xd1\xee\x8e\x80d\x96+.\x04Y\xa5\xcbi3\xb1EoE?\x99.\xe9\x8f\xc9t\x8cc\x02qp-\xd1Ubs,\x85\xc6<X\xd0\xa3\x15y\x1d\xbd%\xe4\xa0w\x12\x05\xaa5Vq\xe4\x0f\xd07\xf7N\xf8J\xdb\x8cR\x89\x98G\x11\x99\xed\x99\xbfJvv\xfa\x9a\xd3h\xab\x07\x11\xdc\xc7\x81\x0f\xc6E\x0b\xd1\xd6j\xde\x19\xcfX"\x83\x85\xda\'\n\xd3\x14b\xe3\x1c\x92\xc1\xe7\xbbI\x91l\x1d\xf9:\xd3_\xb6>Gc\x8d\x1f\xadK\xe4\xf83\xa7\x11o2\x89O\xdb\xf5\x90!\xd0\xfc\x0b/\xe5\x13d`\xd5\xfa\x06\x7f\xce\x1b\xd2*kn\xdd\xfa\xc3[v\xd1\x1d\xb8\x1e\x96\x92\xbd\xc1\xe6X\x07\xf4\x1b\x1f\x1f&\x14\n\x1a\x88\xfb\xbd\xc6\x0e\xfd\xa9\x86\xdf\xb2\x97Z\xf0T\xfbI=\xbf\xa3YoD\x9cM8\xc6\xee\xc2\x9e\xfe\xa3\xbcu\xefu\x8b\\\x11\x1e\xc3\x9f^F\xe2+#\xec5\xea:Z\xa8\xf2\xa8\x84\xd1u\xf1\xc5\xb4\x1e?#`;\xdb\xea\x93=)\xc94\xcb\x89\xb5\xaan\x83\x8c\xc8s\xfdP\xff\x84\xcc4\xcf\xb5\xfa\xee\xd52\x15i\xceM\x13\xb6\x859cR.yx\xc3-\x00+\x16\x86\x00\x98lMS\xe0\x0cx\xf5\xfc\xc7\x1a$s+\xa9\xa0~\x9f\xf1$\x82p\xb3C\xa3|\x93\x9c\x9d>\xd6YB\x94\xbb\x9a\x80\xe9\x80\xf3\xf9\xca\xbfv\xb4\x07\xd4\\\xe6\xaad\xd7\xc2g!\xb9g\x05!\x8f\x8c\xfcR\xa1\x03p\x98\x98\xc4*8\xde\xcb,i\x90\xbb\xebX\x14\x8e\x9fL\x15%}!\xb8u\x0c\xea\xfe\x9a\xfe/\xd6\xfb\xb8C\xbfz7\xdb\xf8\xecUM"\xbe\x9bI\x8d\x0b\x93\xa2!a\xdaT\xdb\xb9\x1bJ\xa6\xf8\xcem\xda\xc5y\x081\x85\x05\xc1\x88S\xec\xae{\xa9\'L\xfc\x0fI\xb6\x1f&\xf3\x1c\xc1\xb2\x9d\x91\xec\xaa\x99\x9e\xa3L\xff\x1c\x01*\xb2\x93\xe9K\xf5\xed\x82\x9e\xe2\x9b\xab_\xa9\x03\xfe|\x87H[\xa8\xe5\xcbU\xa2i\xe28CJ,V\x8dch5\xb7xh\\\xdc<K\xa1\n%\xe1\x84x^\xfc\xf2\x84\x1b\x9d)TP(\x82\x14\xce\xae\xa9\xe2\x9f\x97\x19\x00+^G\xc9C\x007\x0fYm\xfe\xdd\xeaz\xbf\x86\xaa,\x80\xfeK1\xf1e\xffL\xf7n\xf6\x1b3\x00-\xc9,:\xa2\x8b\xb53\xbd\x8d\xe2&\x19\xd4\xc2\xc8\xec"\xae\xc9L\xc3la^\x99\'(\xd60\xa6\xbe\x01\x9e[\x8b\x8a\xf7\xa4\xd9\xff\x1d\xd9>\x9a\x13\x1a#\xb8/s\x90L!\n\xaa\x8e\xd5/t1\x7f\x00\x97\xa3\xc9\x84\xfb\n\x04\xe0\x98\xa3\xe7\xcak\x14\x14\xea\x0e%\xf6fz[q\xf4\xd3\x83\x8f\x85\x9f\x1b\x9a\x822\x83[h\xd0\xcbE\xb3\x91Tl?\xd9\xbbB\x14\xe4e\x9e\r]\xc2\x0ce\xed\xc58\xc1U\xba5\xa9\xe8z\xeb0\x9c\xb2\x19\x81\xbd\x95\xe3\x88\xdc`\x1b\x91\x81\x01\xd4\xd5E\xe9\xa4|$\xaf\xc89\x9a\x93\x99\n\x05\xf3\xcd\x85!\x1b2\xa9\xfclCX\xca\'\x82\xdd\xe7\x0b\xab\xba5\xbf\xd4G\x8c\xcb.\xde$t\xb8@\xa4[1\xaci\xc1\xb7\xe3nU\x11\x08\xd7\xbe\xf8\x07)\xde\xde\xa8X\x85}\xf6m\xa55\x14\x1b\x19#\xa50\tS\xcbW]\x06\xf7\xf8\x02\x07\x10\xc29\x17\x14B\xe2\xebp\xf1\x06\x87\xe5\\\xf5\xf9\xa9\xcb\xbc;\xf0\x80~N\xab\x19\xbb%F\xa5\xb9\xff\x1e\x96\x16\x99H\xe1\xda;*\xea\xde\xde?\xb5Iw\x94L\xab\xbe\xab\x18\xb2\xfd\xe3.\x81\'\xb8\xe1\xd4\xd8\xf0M`\xb0\xdb6\x92\x12\x91\xea\x92\xbf\xab\x1b\xba/c\xaaDe\x9b\xe9\xe2\x1f\x8a\x0f\xd6\x882<\xda\x9c8 \xf2\xa9m\x0e\xe4\xc2\xdew\x80\\wc\x10n*\x1fT^y\x99h\x17IH\xd86${Xv\xec\x08?\x1cz\x9c\xaf=*\xae\xb6U\na\x9e\x15\xa0\xa1H@O\x14Lc\xf1\x0b\x90\xf9\xf1\x18\xf2\x96\xcb\xc7C\x9f\xd3\xd1|8\xc0\xd0\x14\xaa\x11\xe4rb\x95\x19eQ\x0f#\xe2\x822\x13\x84\xf9\xf3\xf0(!\xa3\x8aq\x03\xdc\x8fR\x84\xd9z\x0f\xfd\xca\x07\x17*4$Hq\xa3>\x89\xfbo2\xba\xbc1t\x0e\x15d \xf1U2l3\xca\xcc\xea\t\x94\xcdW\x8e\x92*\x1d\xdc\x97\x1a:\x93[:,\x9b\xaa@\xdf\x99\xcb\xc4\x8bJ\xaeQ\xce8k\x8b\xf4\x0b\xdcs9I\x80\xc2\x80\xe2}\xc7\xa3\xdc\x02S\x8c\xb71\xa6\x88\xe3\x8a\xe0\x9eE\x85\xb6it\xf8\xc1\x93\xc9-"}\xb6:{\x0c\x83\xe5(J\x96\r\x10\xd6\xa0N]\xf7E\xf3\xb9;\x00\x04\xf7\x01\xaf\x86kX;wM\xc7Q\xb2UjpU\xa8\xbb\xfd\xe5HK\x12\x8d\xa7\xe1\x14\xf5Xh5\xe7\x99\xd9\x92\x16\x85H\xec\xf5\xe9Y:4\\P?31\xa1+|\xfcd\x89D\xfb\x85\x8f\x81<\x02\xd5\x18\xcc\xd9RQ\x9d\xcc\xa4x\x18\xe1\x92[g&|\xb9\x7f\x0b\xc4\xebMV\x13\xa8\t\x18\xd2\x8ei \xd6\xef\xa2\xf1\xc5\xf4\xe4D\xbb\xfe\x0c"J\xa9\x1aa\x85\xfc\\\xae0\x89\x8ao\x06\xacx\xfc\x12m\xc5GQ-\xa14\xfe>\x85\xc1\x85\xd6\xf9\rs\xa9\x8efb)\x93\x93\x14\x95\x9dJ\xd8\x83\xe9R\x86G\x9c\xda\xd1\xbc;\x0f\xc5$1\x18\xc8\xbb~9\xd9~D\xb9\xb50A\x17(6\xe5Q\xa7\x00\x87\x99\xc1\x18\\\x03$R\xeb\xef\xecu,ec<\xf4\x90\n\xc3p\x07\x8c\r\x83=\x84\xb4G\xaa\\\xc7\xffr[\x88\x04V\xa7\xc4\x0fK\xb7\x88\xb2\x01D\x82\xb8\x9a\xb1\x8e\x89\x90\x8e\xdb\xdf42\xd5i\xe5\xcb\xe7\xc1\xc9\xd1\xcc\xe0q^<\xe8[V\xd7\xe5l\x16Z\xa6\xb2\xca\xa9\xacIc+\x1f\xc1\xa2\xad|o\xe8j\xfd\x07\x06\xf6\x99\n\xdb\x12\xafJ\xa8\xc9\xf30z\xbc\x00[\x07\x0e\x88\x9c&')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ class Event:
2
+ def __init__(self, name):
3
+ self.name = name
4
+ self.callbacks = []
5
+
6
+ def subscribe(self, callback):
7
+ self.callbacks.append(callback)
8
+
9
+ def unsubscribe(self, callback):
10
+ self.callbacks.remove(callback)
11
+
12
+ def notify(self, **data):
13
+ for callback in self.callbacks:
14
+ if type(data)==dict:
15
+ callback(**data)
16
+ else:
17
+ callback(data)
18
+
19
+
20
+ config_changed=Event('config_changed')
21
+ user_changed=Event('user_changed')
22
+ domain_changed=Event('domain_changed')
23
+ parentdomain_changed=Event('parentdomain_changed')
24
+ admin_prehook=Event('admin_prehook')
25
+
26
+
27
+ db_init_event=Event('db_init')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
28
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.dev63
1
+ 3.0.0.dev65
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T15:11:21.540245
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00l\x01\x00\x00\x12\t\x04\x00\xbf\x7f}T\xfe\xb3SNgh\x05%1A\x82\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xe8q\xa0\x07\x15\xf9\xe5\xb8\xa4\xbb\x04\xc0wj\xab\x18-+~\x04q3vL\x10\xfdS\xa5\xb2\x8bK\xc6R\xcc L\xea\\UB\xf7\x01\x9dR?c\x8e\x80\x93\x85B\x84&w%\xf6\xa6e@\xf4\x03A/\x92&\xda\xcbBL\x94O;\xb0u\xb3N\x97u\x86\xd9/;\x90s\\\xea\xca\xcb\x8c\x10\xd1\xea\xcevFX\x08a9d\xc0\x11A\xd1\x82Q:-\xddR\xdcv\xf2tA\x8c\xda\xc6\xf1\xf3\xa48\xe5N\x13\xf4VI?\xd6\xa2\xfe\x1dgY\xb7\xf7\x99\xff\x177\xb0Y\x160 R\xc0IYq7\xdc\xe36O[\xa4-\x91\xa8~\xab\xe6!pf\xf9\xce\xfc\x83\x1d\nm:\xa7\x84\x1at\x9cV&\x0e\xdc\xc0\xab\xb2E\x16I\x17\xb4\xb9e\xd9\xc7P\xd5\xa23\xac \x17b\xe8\x97#Af\xe9\x8f\x9d\x9c\xaf\x17\xaceO\x02hS\xf5\xa7\xc0\x0f\xc0oe\xb3\xfa\xf3\x00\x90\xc0I\xf1v\x16k\xb5\xca@|\xf8\xa6\xa9g]\xf1\x9f\xca\xb1\xc3\xb9~\xe77\xb1y\x1c8\xa1{\xdd\xcc\xee@$\x89\x0e\xc4\xe1\x19\xa7\x05\xd9\x83\x88cW\x9cTe\xd9\x93\xb1\x9e\xb1\xf3\xfa~n\x93&\xeaQ|\xb3\xf7&\xc0\x1c)\x84\x1e\xc9"\xe3\xe7zZ\x06\x8fO\xb9\x95\xc9\x856\x12!\x0c\xf8\x98\xa4\xe5\xd2\xbe\xa0\x01HU\x9aY~\x83J\xbe#\x9c\x0eO;\xb6\xaeq\xb1\nR\x0bkC2\x87\x95\x82t\xa5n\xea\xc3W\xa3')
1
+ __version__='3.0.0.dev65'
4
2
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
3
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__init__.py CHANGED
@@ -1,5 +1,9 @@
1
- # 2023-04-08T15:11:21.542530
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b"PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1d\x02\x00\x00\x12\t\x04\x00\x17\xb6\xd8\x96\x8d@\x89\x92\xe3H\x14\xc9\xf6l:\xe6\x00\x00\x00\x00\x00\x00\x00\x00)\xa4,\x80)\xed\xabz\x11\x1a\x0e\xee\xbd\xd2U\xce\xb6\xfaf\x113\xc4\xe3\x93\xd7\xf52\xd2z\x8eM\xa6^\x11\nX\xb0VR\xb5\xcccT\xdao$>\xdc@\xb0\xfb\xb87\x87\x1f\x12N\xc3\xebJ\x10\x92\x08\xab\xbd\xd0M]\x05\xce\xc8x8V\x81\xa7\xbc=Yk*\xe1\x7f\xd5=\xe0\xf9<G\xa1@u)G\xa2\x95c\x0fm\xbfM7r:\x83\x0c\x99\x88\xd7\xc4\xd9\xaf\xf0\x1e=\x98\x18/m\xd5f\xf5\xd3MT`\xe4\x98\xb2\xe9\x9c]\xd3\xa6\x83\x1b\xba6\x8d\xba\x84H\xdd\x9c\xc6\xb4\x88\xa82\xd8\x10u\xf1]\xa4dQ$\xc2B\xeaQF\xfcJ\xbd\xbd\x107\xa5k[\xeb\xb2\x8d0K\xdd\x10\xeb\xce\xaf\x9c\\\xec\x16^\xb5\xe5.\xbc\x00\x1a\x19\x08\xf1\xc8\xc9\xa6>\xb8\xf8\xe5.\xda\xc3E\xdc\xb8\xc06\xfd\xe9\xfeX\xf8\xe3\xe4\xae\xd8\r\xc2;!S\x00\xf8\x0b#|.l02:\xe9\x0bB_\xa9\xb0\xdez\x06L 7\xe0\xd3\xc2\x15\xc6;\xfd\xc07\xd6A\xa0\xdb\\\xf4td\xdatb\xd4'\x97\xd0re\xbc\xc0/\x1d\xea\x1d\x87'+\x95IU_\xee\\t\x14\x0e?\x04\xbf\xd7_t\x14{\x8f\x95\xe8\xf4\xa2\x91\x7f\xd5u\x8dy\xc3\xee\x86\xecj\x9dAO\xdb\xed*\xfaX{\xa7\x9803\xfeO{\xf8B\xc3\xc4\xb0\x1f\xc8\xcfGl\x02\x8c\xb8\x1b\t653\xb6\x95\xc4'\r\x91\x07\x93\xae\xbba\xbe\xae\xad\x05*\xa2N$q#&\xa1\x9e\xe6of$v\xa9\x13\r\xf4\x1c?\x94\x8e\xce\x80l\xff$8\xe0\xf5\x95/w\x8a\xfce\xe6l\xcb\xbd'`&\x0f\xa0V\xd5H\xbc\xe2/\xb7O\xea5\xf6|\xef\xd7\xe5\x82\xf1\xf3;\x18\xf3\xed\x9b\x8c\xd16\x98\xd1\x9aV}\xf1l\xe3\x05\xc6\xdc\x1b\x10\xc0a\xd4\xd9\x17\x06M+\x9b\x17\xc5\x1f\x96\xf9\x18r\xdd\x8d\x19Y1\x0f\xb8K\xd1\xac\x05\xcfPAZ\xbfJ\x9f\xdb\xd3\x9d\xf0n\xff\x04\xec\xe5\xd4\xddE\xf4\xf2\x0b\xadU\x149\xdb\x85@\xe2\xb8f\x14\xb0\xe9a\xcf\xa8\xccU-T\xcf\x16\xcdW\xbck\xedv\x8b\xfd\xde\xcaf8R3\xaf\xda+\xf9\xa1k\x13\xd0")
1
+ from .VERSION import __version__
2
+ from . import Events
3
+ from .base import create_app, create_app_wsgi
4
+ from . import panel
5
+ __all__ = ["create_app", "create_app_wsgi","create_cli_app"]
6
+
7
+ # application = create_app_wsgi()
4
8
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
9
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__main__.py CHANGED
@@ -1,5 +1,15 @@
1
- # 2023-04-08T15:11:21.545672
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb6\x02\x00\x00\x12\t\x04\x00\xea\xa07+\xb9~\xf2\xa2\xab\xd2\xc1\xab}\xe5H\xd8\x00\x00\x00\x00\x00\x00\x00\x00\xe4G\xcd\x0e\xf6\xd9\xcc\xa6\x98\x0f\xdc\xf0\xf2/\xf8Lw\xb6\xech\xd0\x18t\x16FH\xff\xf6\x84\xd1\x07\xc4\\1lBw\x12{\xf9\x05\xef_\xdd\xb4\xac\x00u\x9c\x05\x9b\x99\x96\xebA\x93\x8a\x17\xe83\xd0\x02\x1b\xe01\x15.Y\xc1:\xd1Y6\xca\x90\x8a\xdd)\xbd\xe9\x02\x08<\xe0\xc6\x97\xee\xcf20\x91)nN+\xcd$\xf2\x0b\xc2\xe8\xceY\xc3\x13 jM\xafg\x02(\x14v\xae\xa8\x9d\xc9\x0f\x1c0\xb5\xfb5\xf8MxER\x039&\x87zF\xa7g\xabX\n"Q\x96\x9c\xa1<#\x16\xf5\xf3\x16\x0b\'[JE\xfc\xff\x8c}\xd5\\\xc5\xfb\xa0R\xbc\xeb\xbf\xe7\x00\xeelZ\x04h\x1bp\xe0mU;\x81\xb4j\xe5\xbe\xc1\xb1\xc3E!G\xb2n\x183 \x07k\x10\xd0\x02/~\x81u\xda\x0c?\x91.VvT\xd3\x8b\x9cb:+\x8d\xca\xf3<U\xf3\xe9*\xaa\xf1%t\xd1,\x85W\x13\xc4\xf0\xa0w\xe2Zc\x83\n(q\x06\xa6\x00/\xf2\xb7V\x9f\xd4@]\x86\xdcUYvn\nN\x16\xba\x19VK81tu\xdc\xeer\x1e\x17\x8b\xb0y\x8a\xc9\xac\x10\x83q\xf8~\xeaK?\xf4\xacz\x9c\xaa\xe9\xab\xaaz\xb4{\xe1\xa9d&\xd4\x07\xe5k\xf2\x14C^h\xa4\x9a\x86K`\xa7\xd1\xc9\x9d\x93-rJP\xa1S+\xe8`2\xc6HC\xa6\xa9Z\xad_\x15\x11\x1a>\xf5mNM%\x98KB\x1f"S/\x94\xbe\xb0n\x9a`h\xa8K\x9e\x92\xbd>[\xef\xcd\xad\xf9\n\xa9l\xfd\xee\xd2O-P\xb2y\x01l\xa9\xd3\xfey\xa2.\x86bl\x07w^T\x10\xf2\xcb\x1aA\x1cd\n;\xdb\x888>\x9d\x17/V\xad\xf3\x12\x88\x87\xfd\xf8\xe7\xdd[\x08\xa8\x06\x81\n\x0b\xa1\x90\x96\x19\xea\xea\x9d\x83j\x82z\x16$\xa49$\xea\xc3\xdb%cE\xba\xe4u\xdbx)\xbc\x80Or\xac\xa7\xef\xe5\x9e\x7f6\xb7\xeb\xa2\xe3\xf5(\x1b[?\xc9\x0f\xd6\x0c\xfak=\x96\xf4\xa5\xe6C\'\xe6 (~\xce\xf8\xfd\x92V\x91\xcc\x97\xa2\xea\x94k\xbf\x13\x7f^\xd0\xa8\'I\xdb{\xb8\xa9\x96aZXg\xe5\xd8rs\xca\xde\x07\x10\x1f\x13N\x8a\xce\xa4\x81\x93\xb3\xbb\xc7\x0f\xe4\nT\xd8\xc1o\x86\xd7\xaf(^\x83A\x96\x07\xa7\xba5\x06DX\xe9erj\x11\xd9\x14\xdbl\xedA%+zv\xb0\xb0\xe7\x810\xc9\x06\x8ag\xa3\xd9\xc2\xd9\x80\xfc\x113\xbbb\xa0\xde\xbc\xfe\xe3s\xdb\x90\x1b\\\xa1u\x99\xbf\xff\xb2\xefdPy\xe9O\xe5l\x90\xa0kS\n\x86\xf2x\\t\xcb\xb1m\xeeV\xa2|\x9a\xbd\xed>\xc51\xcfq\xac\xf5\x0e\xd7\xb4\x07\xdf^]\xbc\xe2mAM\xb9\xabv$\x15\x99\x978\xa8l\xf9[\xa0\xb8\xa0\xfca0\x01\x8a;')
1
+ import click
2
+ from flask.cli import FlaskGroup
3
+
4
+ from . import create_app_wsgi
5
+
6
+
7
+ @click.group(cls=FlaskGroup, create_app=create_app_wsgi)
8
+ def main():
9
+ """Management script for the hiddifypanel application."""
10
+
11
+
12
+ if __name__ == "__main__": # pragma: no cover
13
+ main()
4
14
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
15
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base.py CHANGED
@@ -1,5 +1,90 @@
1
- # 2023-04-08T15:11:21.563346
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xaf\x0e\x00\x00\x12\t\x04\x00h`\x1c\xd7\x8d\xf4\xf4\x85\x915Y&f\xbdV\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x14cJ\xf5\xe3\xd6u\x8b\x80\xd0!\x18\x13\xad\x87W\xf1\xd8\t"\xbe\x9e\xc9\xa5~\x19\x10k]\x07\xa7\x01\xf8/\xb1\xb1`\xf1A}OP"{\x97\xa1\xd4]$\xd1GG\x99\x87-q\xc2\x99{\x97\x1a\x9c4y\xbc\xfe\x1a-\xb0c\xc1\xed\x98\x01\xb7\x0f|8\xf0\x08\x12>\xe2\xf4\xcb\x07\x84\x9a\xb9\x97\xdf\x08\xc8\xe0\x17\xae\xa3\x86\xf2\xdd\x7f\xdc\x8dz\xdd.\x94\xfc<;\x16\x94\xfd\xd1F\x160\x16\x81;M\xcc?z\xf6\xe5\xfc\x07\xe7\x05\'\xef\n^3=SQ\x9e\x15\xbd\xb6j6\xb2Hn\xf7\xc2\xce\xfb\x15\xd3\x15\xea\xf4t\x0f7\x03\xb8y\x851qh\xab1\xb35\x84\xf6\x19\x9e\x82q\x8bd\x1a\xea\x02J\x122+\xaen\xf0\xd5\rZ\xbflt\'\x9eL\xf18\xe5\xaa\xec\xf5\xa0\xb93\xdf\xeb\xb8\x1ae\xb7\x13d\x84\x1bfM\xc6\xd0Q\xfd\xd99Dd\x8f\x8as\xb7\x05g!UM\xfe\xbe\xf3\xbf?]sPq\xccaI\x8f\xd8Y\xb2\x9b\x0bR\xc8\xe1\xbcLs+\x11\xec\xc3]\x85s\x0c\x86\r\xb3VL\\\xab\xb8{\xf3\xbf\x16\xc8\xc6\xf8o\xe0\xedL\xc3\xe5\xff&\xb2=\x99\x12]v\x93\x8a\x18\xc1\x8c~\xf8X\x7f\xf9\x95|\x83\xae\xaa]S\r\xad\x15+9=ee.\x08*\xa7\xc39\xec\x81C\x89\xaa\xcb\xd3D%\xf0\xdf\xc2\n0\xbdsRz\xd5q\xa8\xab)\x19\x08\xc0!\x0bQ\xf4\xc0\x86\xf4b7<\xce\xccM\xd9\\\xa3T\x97\x1c\xd6\xb7\x1e\xba5R\xd5\xc590\x1f~\xe0\x7f\'\xcbI)\xc4S`/\xee8ZU}\x98?\xb7z\xaf\xe7\xa9\xbb\xe7\x18]\xbd\x078\x02u\xd2\xc7<lRrH\xbb7_\xc8|5\xbf\xe8\x8c\xc8\xd3Qn\xb79\x1fG\x94\xf5\xe9\x84\xc6Q\xe2\xbf\xaa\xf7\xc0\xb8\xc1\xe2M\x82\xddl2\xda~\xfdCC\xc0\xc0d3\x1e\x8a\x88\xbe\xecT\xbe\xa4\x9c7$\x9f\x02\xda\xabNiK\xb3\xd1\xe9\xf3zE\xfc\xcb\x03\xadKH\xd2n2\x94\x1fs\xb5\xc2\x07\x10\x07u|\xfbP\xc4#P\xd7_\x12\xc5\xfdxP\xfc\xbd\xcc\x8c\xc6\xab\xc0(~\x9c\xb5\xdd)\xc0\xf4%\xaeo3\xfb;\xec\x95\x8b\xb4\x9d\x8er>\x16U\xe6l\xa0\xc4S\\\xfb\x1b<\xcf\xb2\xcc\x12\xfc\xaf\xdaBve\xab\x84e\x85\x0f\xcd\xa5\x0b\xfc\xfc6\xe3OP\xa3}\x8br\xa4\xebN\xfbP\x01\xe5\xdd\x9a\x1ceh+\xe7%\x91\xf0\xedS,\xcad*\xc9U\xd4\x1b9e\x87+\xe3\xf8-3\x83m\xd38\xb8\xd4\\\x8d\x99\xbf}w\xd7M/\x94\xef3U\xea\xcb\xf3\xcb\xb1\x05\xa8\x15\xe6\xac\xd86DE2\xc4\xf7\xb0\'\xc2\r+\xd2\x0c\x00\x9f\xa5\x84&\xc6\x81\xbb6kZ\xacR\x03\xe6B\xe4`\x18\x98kWt\xa2[\xe0\xe7\x11d+T\xff\rh\xca\x1d\xca\xa2\xc7bq\x08\xbd\xca\x1aN\x18\x11T\x1f\xa8i\xe3\x8c#ylI\xd0\x00\xa0\xc2yG\x04B\x90\xa4W:V\x1e-d\xeck\xf8a\xb2\xdc,\xcbB\xb0\x0b\x07\xcfs\x95\xa2\xd7\xe1\x0cx`J\x8b_+\x8c\xaa\xa3;\x83\x0bK\x83\x03\xdb\xfaO\xb2\xe7g\x9b\xb9\x98\xd3/%%\x97L\xcdW7\xa4X\xa2\x9d\xe9\x01\xd9\x89\x8f\x8d\x95g\x94-\xe0\x8e"\x94\x86=R\x9aM\x0cx5\xdd\xffaM\xae,\xd6\xe6\x9f\xafw\xe2y\xf1!\xf9\xe2\xd6|o5\xf0\x90|L\x81\xf3l&\xec\xdc\xddI\xafC\xb2\xc8\xc1~\xd6\xa7\r\xaeE\xa2\x93Z\xb0\xfa\xc1#\x1b)\xe0\x1c\xf3t\xbfB\xb5!\xf8\xa8\x01\x94_\x1a\x92\x05\x13?\x89\x8f\xf5\xd4J\x91\xd9\xa1\xf0\x99\xcf\r$\x16\x8f8\x10\x9b\xf1\xb4\xa6\x01\xb6;\x8au\x93\xc4\xb8\xf6\xb9\xf9\x832FR\x04\xd5\xe7z\xb8\x8aY\x0b\x9d\xf0\xde\xea{J\xbd\xb3Qj\xfa\x01\xad\x07\xd8\xd6\xc3\x061\x857\x1bO5\xc9\xbf^\xb9r\x81\xe1d\xe5\xee\x19\x83Qd\xe1e\xd1\xa1\x0f\x83\x9a\xaa\xe5\t\xc9\xef\xcc\\\x818\x1a4\xfan\xc4qP\xa7\xb0\x8a\xefN\xee\xee\xef\'\xed:Vsf\xa0<\xeb\x01\x99?Gs:\x1c`@%\x9a\x82\xe2\xcc^\x12\x8c0=x\x8a8q\x02\xc0\x9a\xc4\x13YD\xdd{YI\x06\xdc\x89\x05(\x87\xcdq\x83_\xa1B\xb0\xe1\x118\x0e\xa0Wp\xcbN{Jan\xd2}gn\xc0\x8d-\xd34\xb7\xd2\xb6\x89\xacu\xe4jb1\x9db\xf9P\x9a\xaa\tokb?\xd4\xcb\'\x9e\xb6\x8b\xf4:\xbc\xca\x80e\xb9\x0f\xad\x8c@R=F\xb9\x02\xe9\'e\xe9\x18\xa8\xf7X\x82\xc8J0\x1a\xbf\xfe\x87pv\xa4(\x8d|\xac\xac\xdb]\xa1\xda@\xb1r\xb0\xaa\x9bKL\x8bJi\x8a\nw\xc6kdY\x0f"\x15\xbf\xee7\xa5^\xaa\x90\xd7\xf3\x01\xdf,\xac\x82\xa0\xa5\xc3S\xc0\x17\xf9\x07\x82\xd9\x04\xad\xa0ufZ2\xdaP\xb2\xc1\x07\x8e~\xb1Nl\x0b\x86~\x8e\xfa\x88\xeb\xc3\xfc[\xdc\xfb\xd36\xe2\xd5\xado\x15\xea\t\x97\xf4\x140E\x93\xef"@\x8d\xb5\xbf\xcd\xb5\x05\xad*\x1d>\xaa\xa4\xd1\x1e\x84\n%\xc2.\xcf\xfd\x97\x93\xa62f\xda\xa4O\x91\x88\xe5\x1d2?\xf7\xe5\xb5\x8d/4>\xbf_"m?\xce_\xc539V\xc8\xfbj\x01\x0c\xa5\xb5<\xe7\xb6V\x0f\xf2n\x83\xeb\xb1b\x89\x1f^\xf1\xa0Q\x80\xb2\x99\xbc\x02d\r\x8c\xf4L\x8b^\x00\xcc\x1f\xce\xe9B\xc6mUb\x15\xe5\xc7-\xedtE\x8fN[P\x08\r:\xe1\x8c\x15S\x850\xdb\x82\xbfI5\x13\x14\xb4\x85~x\xf3\xf1\x1f\x13D\xfae\xd0\x17\x0e\xe9\x06\x0b.$}\x01H\xe4\xf9\ti\x87\xa0\'\xe1~\x01U\xbd\x1a\xa9bf\xd7\x95\xa0\xc0\xfbX\x91\xe6ur\xd5l\xf4\xf6\x83\xb8\x95!\xd3\xf6\xb0\xc1\x04|\x02>\xc5e\x1c\xed\x19\xd0)\x85\x90\xb9!\xe3\xdb\xd8\xaf\xb9\x871\xf2\xed\xfb\x9btYMB\xbb5\xe3\x82?<e\x90\x904\xed\xf7\xc0\xe4S)|_\xf9(M\xe7\x93\x02<\xa5\xa6lK7\xf7\xd4\xe0#\x1c9\x16\xca\xa2x\xe8\x00I\x08\xcf{pCSM\xa6\xdfE\xfb\xd3\xeeF\xc0\xab\x94\r\xb00\xf9\x1d\xe0\xf0XY}i\x1b^\xcd1L\x85\x91\xce\xb8\x18\x9as\xce\x7f{\x11\x1e\x98\xf2\xcdE\xa0\xb1,\xf2+\xefhRx\x05r*\x0b\x01\xdb\xe5\xed\xdd\x92\x97\xcc\x84\xc7D2\xe3\xac\xa3\xb2,+\xc4\x02\xfb9\x96R\xc4x\x05\xcc\xc9\xb8`\xf4a\xfdK\xb3\xf8\xa1N\x12\x93?\xcb\x86\x80!h\xf0\x1b\xb2W\x18]\xe7\xd8\xe6\xb1\x08\xf7\x17\x02\x152\xdb\xd3\xb7\x93\xcc\xa5\xc1\xaf\x99\x0cW\x05L%\x9d\xfe+r\x8f\'cu\xa3M\x94\xf9\x02z@\xfc\xc8\xab\xb2*OK\xa2\xafq\x05\x81\xbezYY\xe2$o\x19\xca_L\x13\x89\x8e\x00\x91\xd3\x1c`\x93\x1aV\xc1i+\xd2\xab\x89\x87D5\x87j/!\x8b\x9c\x89\xf8\x95<\x9d^/\x16\x84\xb7\x9a@\xa9EH[$\xbb\x18\xc9\x85IJ\xbf\xa8E/\xf3X\x9a#\r-\x91\xc4\xb0\x86\x81\xb9\x11\xb5;\xa0N\x8b7\x03g7\xe2\xaa\xe9\xed\xc0\xbd\xc5\xde\xd3 e\x9f\x12\xd1\xc8\xf3\x80\t\x04\xf4\xe9\x05q\x08b\xf8p\x93\xb1\x80\x9f\xdc\x0b\x17:(\x7f\xfa@\xa0h\tE\xe2\x8dz\xf1\xcew\xdf\xaa\xca\xca\xcf\xa1(x+Hp!\xdc9\xb2\x80\xb0\x82\x87G\x05-\x89w2\x9es\xb0\xe2t@\x0b\xba\xf9\xa6\xbdWo\xe4\xa0\xc8\x1d\xb7\xa4\xf7}P\x03\xd6"0M\xad\xd1\xbf\xf2\x94\x93\xa7\xd8\x92\xdf2T\xde\xcbQ\xc5\xad\xa8o\x1d?\x86-\xb6\xdf\x91I\x0f\xc2H\x88`\xb8\xad\x1b@fn}\xbd\xbc\xe7\x80\x99\x1461\xd3\x92\x19[U\xe8\xdd\nlhp\xd0\x9a\xaak\x17H\xe5\x12\x16P\xf8S$\x91\x94\xf8/&\xe8\xd0\x0e\x0b\xb8\xf4\xafw\x16#\x12\xbct\xf5\xe0\xa4x\xe8\xe2\x8d\x9e \xdeV4\xf65\x03\x9a;\x9ayhO\xfcA\x89>n\x863R+R&\xd4\x9e\xe7U[bW\x03\x8e\xd7\x0f\xc5\x9c\xdf\xf5\x08\xfe\x0e\xc2\xf76\xb6\x1b\xec\x01;8\x95\xdd\x98\xf8\xc4d\xcem\xfdW\xd9\xa9\x97\x00\xea\xc9,\xf8\x96\xe1.k\x18\xac\xf2\x17Ep\x7f\xa0\xdb\xc8\xf6|"3\xd6\xc7\x04\'2@\x08t*Q\x1e!0\xc5\xc8;\xb6\xf7I\x86M\x07y\xe8\x07\xf2\xab\x94k2\xb9\x82\xe7\x94\x9d\xde\xe1\x89T\xfc5Vgq\x9f\xbde\xc2\xd5\x80l\x9e\xd0\xf3\xe7\xc5\xe7\x18\xec\x03\'7\xef\xe1w\x9c\xc4\x08c`\xa9\xd6\xe8\xa7#\xd8$M\x0c\x9a\xff1\xa7\x02*\xa3%}|\x0f\xa7;\x1de\xcfqi\xf1\xf1\xcf\x03\xb4I\xec\xc2\xf3\xd9\x83@\xe9aF\xbe G\xb3\x91V\x87\xf5\x98\x10$\xe2\xcb7\x06_\x1e\xc3]\x8b\xa30<\x15\xc8\xe6\x03<R\x8f\x12\x00T\xff\x03f\xf3\x18\x9f\x0c\xfe\xac\xcf\x08\x00\xc8\x020\xc1\x87\x8e6{\xdd\x16@\xe3-\xea\x06\xa4\xfei;\xe9$\x1b\xfc\xe0e\xa2\x86\xdch\x9d\x18\xf6\xab\xd3\xac\x00\x99\x9e\x13\xc1\x16\xcbZ\xb00\x9b1\xef^\x18\xb3\xc1\x9eA\x1b\xd9A,V\x1f4czv\x7f\xaf\x9d_<\xa1\xd6\x9e\\\xb9\xb6\x07\xf7\x18\x98\x8dh\xf6\x04\xc3c\xfb\x81z\x1c?g\x0b\xacN`\xfek:\x85s&V\xd5\xdb\xbf\xefd#\xab:\x97\x94\xf1\xfdD\xc7rZ\xb8\xfa\x85\x9aE\xc6\x9a*\x0b\xa1\xa9\xe4?\'\x07\x83\x8a\xd9\xe9cLQC\xfc\xf7\xed\xc4lQ\xc5\xb2\xba\x9a@n\xbc\x01\x1c\x952\xe3\xa1l9\x97M\x1c\x85\xfe\x03\x91\xb1C\x99\xd4bW\xc0M\xe4\x0e]\xc5\xa3\xcf<G\xcfj\x15\xfbb\x8d\x8a\xa6\xcb\xcb\xdc\xf3\xa0\xc65\xbb\xbb\x99i\\\xcf\xc7\xb1\x84\xcd\x92\x91;{\xaf:\x92\xe9\x85\x0b\xad\x95\x01\xee\x82/M\x14\xd9\xd6z\x96\xed\'\x19\xa7\x8f&J/\xa5\xd0\xd0.\xd7\xf2mo\x87\xc3%\xb9\xf0\x84xd\xd0\xb4dph\xa4\xc8\xeb\xd8\x86+\x8b\xd1a5\xd4\x19\x17\xdbm\xb5\x7f\xf1T\xf2 ;\x8a\x19\xe6\x85,\xb1B\xadT\xa3XU\xccC\x9e\x90\x12H\xe1\xc7\xa9\x7fU\x8f\xfd\xd6\x8b\xb2\xc3\xb6\xc6\xec\xa5\x9cP}u\xce\xc9\xe2\xb3\x95\xc8Z\xe2\xed\x8bM\xf9N\x88\xf6\xa5\x9e\xb53\xee\xfa3m%\xc0e\xd6\xb34\x81\xe6m\xf0%\t\xf1\xd4\t1gb\x9fQ\xd5\xa5\x03\x96\xc0\xf4\xd0\x19\xa8\xbd\x19\xe1iK7\x07\xe7\xd7L\xa5\xed&?nD\xf2\xd4q\xca\x95\xd2\')9\xfdd\xf8\x94\xff\xae\x8f\xdf\xad\'-\xce\x9a9\x10H%\x0b\t\xe3\rlr\xd9\x7f~\xdeA/7/\xa3~\xd5 (Ho\x1amY$\xac|\xfc\xd5b\x11\xf9\xaa\xb6D\xa8\xd70\x9aA\x1a[_R\xd76jQ\xfd,\xb9\x10\xe4\x02\xef\xfe\xea\xecV\x9c\xc5m\x10Qa\xec\xba\xba\xebY:\x0b-\x7f\xa3\xff\x80\xccI\x8d\xad\x15\x87\x08S\xd5\xf2\xf9}\xd8Pq\xfd\x80\xae\xab\x1e\x12\xbe\xfb\x00\xcb\xc6\xb8*4Z\x19R\xd3\x14\x0buK\xda\xcd[LA!\xb4IjV\x1f>\x8d\xe7\xf1\x12\x91\xaa\xf2\x0f\xd9\x8d\xd3\xaf<\x02\xbe\xe1\x08\x1b\\(~\\\x00\x0b\x12\xacg\x89\xa4\xfeX\xce\x1b\xe8\xfa\xeb\xc2\x8cw>\x12\xef\xd3\x85\xb8D\xb8\x99\x9et\'1\x8b\xd0{\xb1\xec\xb9u\x0c6\x87\x93\xfb\x05\xfe\xe5R\xf3\xe9G\xdb\xa8g\x1f,\x8av\xe6\x15\xf5s)\xc6%\x85\x1dj\x12\nVufA\xed\xab\x83$\x94\x93\xdb\xc9\x82\x1a\xfab\x1d\x8bXpK\xb8\x9a\xed\xf4\xd9\t\x00U+\x0e\xfdM\xcd\xe4\x98\xfa\xc2\xc2\x8a\x18\xc2\xb5\xeav`\x15Y\xbd\xa6\xa9\x0e\x85\xee\x96O\xad8r8\xefbU*l\xdc\xe6\xb6\xce\xac\xf8<\xf2\xc65\xee1J\xb7\x0f\xfd\xfc\xce\xce\x17"_B\x06\xb3\x10*\xe8\xa8\x97\x0eM\x98\xbf\x19k\n\xac\xde\xf1x\x96ZTY\xa9G\xca\x17-D\xa7{\xc8\x96\x02?\xe7\xea8\xe3A\x82\n\x0b*V\xe1\x92\x0c\xa3\x04\x82\xc6;\x8b"\xdbc\xaaO6\x1c^\xd0\x06\xc0\x8a\xf2\xbf\x9a\xea\xe9\xe1\x99\xdb\x15I~\x9a\x08\x7f\x99\xf3\x87\xcb\x15\x07\x9d(u\xa4\xfd\xb0>(\r\xd8\xecA\xbd\xd67\x12\xd0\x0c\x8c\xf3\xed\xa9\xd7lX%\x9ct\xf1j\xa0g\xe6\xdd\x8b\x91w`q\x87\xc7\xf2\x06\xed7\x94\x9e\x082\x7f!u\\\x05C\xb3\x17}\xc4X\xcez\xa5\x9f&\xd6$\x9b%\x1d\xa0\x16\xdf_7\x08\x13\xf8\xca]\x94\x8fJ__\xb9{6y\'\x8b\xcb\x8e6\xd9\xc9\xef\xc5L1\xfb$\xb7`\xebg8\xc5\xe8\xf8\xf3\xcb\x8f\x02.+\xe24S\x1buxt[/6e]\xa5\xcdu.U\x94,Q\xe6\xec7Mi{\x85T\xd9\x87\xc8x\xec\xb8g\xa8`7\x1e\xcb\xce\xa9\xa9\x8dBsP\xb4\xc9\xb3\\U\xf2\xd8)O+\xa9-\xdfw\x81l\x1b\xb8\x01\x9d %\x11\xbe\x87\x0b\xbb\xcc\xdd#<\x89\x00_7\xe6\xae\x1e)D\xbf\xd6\x8f\xbfqQ\x007\x03\x12\n\x87sDb\xd3\xee\xc5\xee\xab\xd2\xd9\x93\xa4J\xb8\x0e Q\x82\xac\xb6\xf1e\x0c\r\x1c\'Z\x84/5\xeer\x95\x83E\xaf)O\xce\xfa\xcdV\x07\xe9\x87q>\xa3OP{qF\x1ac7>W\xa2[N\xa4V[\xd6\x9d\xf4\xe7\x11{\x13\x7f\xa3\xe0G4w\x8ex\xed!\xf4\x05\x1a\xd2\xf3E\x84\x17@7\x05[\xb8\xfd\x84\xa3=\\\xbb\x16H\x88G+k[(g\xc9\x0e.\xcf?\xf8\xc1\xc3\xe7\x80$,\xd11\xd6\xa5~\xebQd\x8e\n\x19\xdeQ\x06\x8b%I)I\xce\xb2g\xfd\x1agb\n\xbc\xa5jW\x88\xe5x@1\x84\'~\xb4\xd9\xd0\xfbR\xee\xa8\x03rV<\x96\xa9\xb6\xff\xe1\xda\x14P\xe9z\xa6\x96Z_\xef\x91`\r\xfeK\xfa\xb8~\x86\x922/\x9d\xe2j\x0e\x8c\x9d\xf8\xbc\x05>c\x8b\x01\xf2\x87\x85\x16\xc2\xb0\x96\xcf\xff\xc2\xceO%\xc8_l+Xu%\xd5\'\x96\xeax\xd9\xd7d\x0bfb\xc8\'\x10=\x0bBy\xfcCaI\xd3\\\xabv\xca\xf9\\qS\xff\x8eQ\x9ah86n\xda\x8a\x9c\x91z\x96\xf3\x01l\xa0,4\x08te\xf9p\x01\xabT\xa8i}\x1cWFb\xf8\\=\xb9Z\x1eN\xee\x16q\x95I\xfa\x03)\xd2\xba6<\x1a\xa4H\xd2:\xcd\xd4\x00{\xe6\x93\x93\x04\x9af+\xebm$`\xb3\xc6k\xb0\x89\x10\xfd<\xc0\x99\x10\xf3\xf8Y\xa7\xd8\x99G\x9ek\xc3(\x1ef\xabG\xb4O\x9c~\x02\xe1 \xed!\xaf(\xadh\x1fEo\x1e\x9f\xce\xa1\xa1>\x06y^\x9f\xc3\xd6\x82\x1e\x17\x97\xf9V\x92\x1c\xdb\x1a\xa8\xf5\xf9\xe8l\xfc.\xc3%\xcf-\xc0\\\xf1\xc8\x11\n\x10\x13\xae\xf2\x0e\rt\xef\xf8$t\xbc\xeb\xa3\xa0\x16\xe9\xcb\xff\x92\x11\xfc\xfaAi%]i\rj\xf0I\xdc\xe8\x03f\xc3y\xcc\xc2\x0eV\xa6\xda\x04 \x81\xa2\xff\r\xca\xe8,\xe2\xa2\xf6!\xee\xb8]\xe6&[m\'\x9c`\xbd\xd5=\x14\xbbz1=*i\xeb\xb9i\\O>GC\xb7\xec\x0c\x8e5\xf4\xde^)\x19\xd8\x15J6\xdb~GE\xb9\xbd\xbf\xa3\x82\x07\x9e\xa8u\x19\xe5\xeaX\xfe\xa6\xac\xa3\x86kgm\xf3\x04')
1
+ import flask_bootstrap
2
+ import hiddifypanel
3
+ from dynaconf import FlaskDynaconf
4
+ from flask import Flask, request, g
5
+ from flask_babelex import Babel
6
+ from hiddifypanel.panel.init_db import init_db
7
+ import hiddifypanel
8
+ from hiddifypanel.models import *
9
+ from dotenv import dotenv_values
10
+ def create_app(cli=False,**config):
11
+ app = Flask(__name__, static_url_path="/<proxy_path>/static/", instance_relative_config=True)
12
+ import os
13
+ # os.environ['DOTENV_PATH']="/opt/vscode/workspace/HiddifyPanel/"
14
+ # FlaskDynaconf(app,load_dotenv=False)
15
+ for c,v in dotenv_values('app.cfg').items():
16
+ if v.isdecimal():
17
+ v= int(v)
18
+ else:
19
+ v=True if v.lower()=="true" else (False if v.lower()=="false" else v)
20
+
21
+
22
+ app.config[c]=v
23
+
24
+
25
+ app.jinja_env.line_statement_prefix = '%'
26
+ app.is_cli=cli
27
+ flask_bootstrap.Bootstrap4(app)
28
+ hiddifypanel.panel.database.init_app(app)
29
+ with app.app_context():
30
+ init_db()
31
+
32
+
33
+ hiddifypanel.panel.common.init_app(app)
34
+ hiddifypanel.panel.admin.init_app(app)
35
+ hiddifypanel.panel.user.init_app(app)
36
+ hiddifypanel.panel.cli.init_app(app)
37
+ hiddifypanel.panel.commercial.init_app(app)
38
+
39
+ app.config.update(config) # Override with passed config
40
+ app.config['WTF_CSRF_CHECK_DEFAULT'] = False
41
+
42
+ babel = Babel(app)
43
+
44
+ @babel.localeselector
45
+ def get_locale():
46
+ # Put your logic here. Application can store locale in
47
+ # user profile, cookie, session, etc.
48
+ from hiddifypanel.models import ConfigEnum, hconfig
49
+ if "admin" in request.base_url:
50
+ g.locale = hconfig(ConfigEnum.admin_lang) or hconfig(ConfigEnum.lang) or 'fa'
51
+ else:
52
+ g.locale = hconfig(ConfigEnum.lang) or "fa"
53
+ return g.locale
54
+
55
+ from flask_wtf.csrf import CSRFProtect
56
+
57
+ csrf = CSRFProtect(app)
58
+
59
+ @app.before_request
60
+ def check_csrf():
61
+ if "/admin/user/" in request.base_url: return
62
+ if "/admin/domain/" in request.base_url: return
63
+ if "/admin/actions/" in request.base_url: return
64
+ if "/api/v1/" in request.base_url: return
65
+ csrf.protect()
66
+
67
+ app.jinja_env.globals['get_locale'] = get_locale
68
+ app.jinja_env.globals['version'] = hiddifypanel.__version__
69
+
70
+ return app
71
+
72
+
73
+ def create_app_wsgi():
74
+ # workaround for Flask issue
75
+ # that doesn't allow **config
76
+ # to be passed to create_app
77
+ # https://github.com/pallets/flask/issues/4170
78
+ app = create_app()
79
+ return app
80
+
81
+
82
+ def create_cli_app():
83
+ # workaround for Flask issue
84
+ # that doesn't allow **config
85
+ # to be passed to create_app
86
+ # https://github.com/pallets/flask/issues/4170
87
+ app = create_app(cli=True)
88
+ return app
4
89
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
90
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base2.py CHANGED
@@ -1,5 +1,42 @@
1
- # 2023-04-08T15:11:21.538232
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x007\x05\x00\x00\x12\t\x04\x00\xb4\x8e\x1e\xca\x96"\xdc<"\x90\xf9Z\x8fU=\x07\x00\x00\x00\x00\x00\x00\x00\x00\x05\xba\xf8\x8e\xc3\xb8\ra=7F\x17F\x1b\xc6\xde3?Y\x02]z\xfb\x12\xcf |n\xc6\x0eJ\x87HS\x11c\x05\xba\xd2\xb5e\xd9:\x1e\xa1\re\x02\xf1\xc8\xa0p!\x1b\x96\xf5f\x8fHvh\xa1\xee\x18\xc64\xba\x8c~\xbeE]\x8b%]\x8a\x070\x07K\xe0M\xa3\xbc\xb7\xa2\x9e\xb2\x11\xb6=\xda\xd0K\x19+\xcb\x87\xb7e\x9f\xf3\xfel7\xecM\x7f\xdf\x12\x0c\x10\xc2\x1d\x0b\x19/\xf0c\xf3\xed\t\x19\xc4V^Qn\x8a\xdc\xd3\xfe\x11\xf4\xb5)\x82\xdf\x1ea\x001\xdf\xd7=11[\xea93(4r\xccT-\xb7\x8a\x8e\xf83\x84\xf16\xa9\x9cJ6{\r\xbd\xd7X\xd1\xc3\xe9\xf8\x00\x03F\xf3\xb6Wj`2\x97\x8e\x13\\l\x91P\x8b\xc64z\xfa\xba\xbc\x18\xc80%\x97\x1a\xbf\xee\xb2\xf3\tyJ)\x93\x94:p\t\xae\'\x96\xd9\xad\x92\xfd\rj@\x9b\x0cT\x05\xd3\xdcu\xfbA\x93N\xfd\\jm\xa1-\x90lyU\x8eBM\x11\xe6N)\xf2i\xfe\xa5\x85\xebqQ\xec\x9dz4\xbb\xf9\x08\x16O\xccjhY\xfe\x12\xac\x93\xe3\xf3\xda\x823\x10\xcc4}(\xbe\x97n]\xa5\x12g\xa4\x03\x10\xa9\x06r*\xb3\x02\xca\x90\x88;\xb6J\x91\xdc\x0cz\xee*Q|\xbc \xbe\xb5\xc5\xabF\x0b\xdb,\xa8U\xc9\x95\x05\xb9\x950\xc5\xb2c\xaaa;O\t\xa9e\x9bd-\xd7\xca\x80\xa6I\xe2\xc7\xf64\x86\xba\x7fb\xa1\xcdg\xae\xc8\xb0\xb5\xf4\x82\xe5\x01/d\xe3\xf8>w!\x1bZ2\xdb\xf5\xa4\xd9U\x1b\xa0e\xf3\xdb\xcf|u\x0e\xee\xea\xa1t?\x9b\xb2\x18}z\xc4\xbdVP\xd0>\xb5f\x88\x02\xcf;\xa3\xbaU\x7f\x03\xfdM\xff>WL\x08{\xd8\x97\tL\xc6\r*;\xf0\xa8\xc1\xc8\x01\xf5\x9e\xff;\xfeu\x8ax8\x97\x97\x10\x82\x9a*\tFF.R\xb5\\\xa4\x014\xac#8\x1e\x8c\x10\xfc`\x03\xa7\x80\xc1\xd5[\x0f+\xa0\xf2]W\xcd\xab\xd2\x81\x82\x0b\xaa\xcb\xd2\xd5#\x8eU\x13\x9e\xa1\x91\x8d\x94-\x1e\\\x83\x06\xd3\x9fa\xcf{d1\x00\xa4~\x80\x94\xd2:k\x19\x08\x08\xcb\xe3\x99\xddO\tK\xcd\xe7\xb1\x98\x9d\x18g6\x0er\xefw8\xd1\x96\x94\xc9\x00\xf8\xe1m\xce5\xa0\xa9\xd0\xb5\xea<*\x032\xea\xc9\xbb\xd6\x14\x1at\xcaLCe{\x1e\xc2\xdb\xe0\xdbeY\xcc\xcf\x8c)\xb1\xf4\x94\x89ja\xc2\xf4:2};\xe0\x95t\xe4vh \x94\x97X\x8d\xbc=\xdai\xa6\xe4}\x03\x10\xe9\x8aF\x9b\xd9VT\x9c\xa8\xb6\x18*\xe0\xdd\xbf\x1d\x99\x18\x98\x19\x01\x90b\x80eB\x7f\xaa\xbf\xd3N?\x93:\xee\x8det%\xe3s\xc3\xf0`\xc9\xf5\xcb\xef\x9bR\x8b\x8d9\xb1\x80\x99\xa2VA\x07\xfd\x9b\x12\t\x02t\r\x0e\xcd\x10\x8aG\x06F\xf3zN\x98\xb8\xe5"W\xe6,\xf0\x9a\x0b\xd5_\xe4q\x180R+\xf8L\xce:\xf5\xe8\x8a\x9c\xfb\xc3mT\xa1\xa5\x9cQj\xc0\xcbo\x1d\x9c\xc1\xe9\x93\xc8!(\xd4\x11\x81\x83g\xbe\xfen\x11\xdd\xbd\x04\x16\xec\xebct\x83^\xb20\xc3 \x87\x8f\x9da\xa6w\x94\r\x08\x90$\xfb\xea\xd1v\x1b!\xf3X\xcb\xc7\x04\xe6|\xca%\xa8\xe9f\'\x1eD\x16\xa1T\xe1\xe0 \xc7\x90\xa6\nt[\'\xf2\xca\xe4\xbbx\x99\x9d\xd8\x1a\xb4Ub\x18\xa6\x98\x12\xc0\xd1\x14\xdf\x816\xe4B*Qv\xe6\x12\x11\x93\xaa\x08c\xe7\'\n\x84\xae(\xfa\xdfm\x1fq0\xa3\x9a\xf9\x1c\x9b\xe4\xe1\xf0gp\xac\x81\xe9\xa8\xbd\xe1\xd3x\x9cIm\x18\xf9\x00\xae\xaf\xbe\xa4\x0f\xa1kYk\x90\xd9\xce\x1f\xdb\x91vf\xdc\xc3\x8d2}\x17\n\x0e\x8f\xb4\xa07l\x88\x19N\xcaeUyR\xc6\xdb\xa0\xc6\xda\xe0\x82\x95\xce4\xf8\x1dm\xd61\xa8\x7f\x8a\xda12\x16(1\xf8\x01\x1a\xe2B\xe0\x93\xc3qi\xf25\xe8\xf7&\x07\xadM\xdff\xc02\xff\x85\xd0\x8cy\x1a\tH\x07\x7fvC\r\xb6P\xc3;\x91\xaa\xf1\x0e\xf6S\xe9S\xc1\x84\xd1\xc7\xd1\x01U\xc5=\xb2\xa8\xb9\xe4@\xb1\xa8XDpQB\xb1\xa2\xc1\x1cK\x8a\xdf\xce\x8b\xe0?a\xd8\x16z\x1b\xc0\t\xbd\x87\xfa\xc5B\xe6\x1c h\x81\'\x13X`\x8d\xe26f\ra\x8d\xb4\x87U\x9f\xad\xaf\xcaW\x15\tD2\xa2\xbe\xe6\x1f\x00J\x92z\xa5\x84\xb3\xe7\x97\x1d\xbd\xdb@\xff\t\xb4:\x1fx\x96\xa3\xa2\xc6\xca\x17W\xb3^\xfc\xd7\xf9\xe0L\x96M\xaf\xb27\x07\xfeMG<\xde\x81\xcb\x9c\xa3Pm\xf4\x06O\xac\xb8T\x16\x85lVn`&\xb5\x8f\x9c\x9eT\xbf\xbdzxgY\x0c\xb4P\x0b\xa2`u\xc5\x8c\xe7z\xfa\xbf3\xc29\xb6d\xb7 u\xddT;\x97~\xa6\xd3?\xd9\xc2\xff\x7fP@\xbe->\xa2\x94.\xf8n\x18\x10\xd1\x85\x92[\x1c\xc5yHs8\x1d\x91S\xf6T\x14\x06\x92-y#\xdd\xc6iu\xf5\x9eb\xe0\x16;\x10\x18DN\xb1;\xe3d\xb1x\xf2\xab\xf1<\x9d\xae\x86/V\xfch\xc7V\xe4\x80\xaa\xef\xe7\x86\xe2\xc2A\xf7\xd4\x89jF\xc6~~6\x92S\r\x9d\x8d\xae\xa5\xbe\x04Q9/0\x93,c\xf7AR$\xa2\xc1\xc4{,Z\xc2\xcfo\xf8\xc7\xd9\xb9)\xc4\x00\x9c\x0e\x17\xf7\xc9\x0c\xf8\xd1\xc9\x7f\x15 \xeb^\xba\x16\x97h-\xaf\x0f\x8d0\x12/v\x9f\xde\x99x\xf2')
1
+
2
+ import os
3
+ import json
4
+ import sys
5
+ from datetime import datetime
6
+ from flask import request
7
+ from hiddifypanel.panel import hiddify,hiddify_api
8
+ from hiddifypanel.models import *
9
+ def init_app(app):
10
+ if hconfig(ConfigEnum.parent_panel):
11
+ hiddify_api.sync_child_to_parent()
12
+ @app.before_request
13
+ def test():
14
+ print(request.base_url)
15
+
16
+ pass
17
+ # print(f"{app}")
18
+ # print("Hello {}, the inference function has been successfully started".format(name))
19
+ # attribute = str(datetime.now().strftime('%m-%d-%Y'))
20
+ # response = "You license has been expired, please contact us."
21
+ # year_to_expire = int(2022)
22
+
23
+ # try:
24
+ # assert int(attribute.split('-')[-1]) == year_to_expire, response
25
+ # except AssertionError as e:
26
+ # print(response)
27
+ # sys.exit()
28
+
29
+ # # Replace your main code to operate here.
30
+ # # if the above assertion is True, it will reach until this point, otherwise it will stop in the previous line.
31
+
32
+ # if tag:
33
+ # print("inference function has been completed successfully")
34
+ # return True
35
+ # else:
36
+ # return False
37
+
38
+
39
+ # if __name__ == "__main__":
40
+ # _ = inference(name="Bala")
4
41
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
42
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,12 @@
1
- # 2023-04-08T15:11:21.622247
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe0\x04\x00\x00\x12\t\x04\x00D\xe6\xc9Z\x9e\x8ao5\xdd\xcedf\xeekr\xd6\x00\x00\x00\x00\x00\x00\x00\x00?GN\xc8\xd2\xd6\xc4\xfc\x99\x94TW\xdc\x15\xb3$\xf2\xb4\xbe,WuQ/E\xbd\x16\xf9\x99\x9f\x0b\xde\xd4\x10\xf8%\x17\x8a\x1c\xd1*s\x90\xc0\xfa\xf14\x99\xb4\x1f\xb8\x0e\xdf\xe0?\x83o\x01\x18Jh\xb3\xf6\xc0_\x8d\xb3.\xb8.~h\xdb\x98\xfdy\xf9\xd2BQX\xad\x80\x15\xf2\x0eO\xed\x04G\x0f\xaa\xa6!\x01>x\xef\xfdV\xf5_tn\x85n0\xa8a\xb5\x80\x93\xc8P\xa4\x8e\x11pI\xce\xe6\x85W8A<Yt\xc2m\x8d(\xc2\x8c\x1f\xe0l\x08\xd4\xcc\xb9]s\xae\x97\xec\n\x93\xfd\xe4\xa3\xf9>y\x0e\xe6j\x86N\xf7\xab\x89\xdc&\x1c\xf8\xabI\xce\x06\x11X$\xc3\xb0\x18\xbe0]{\xaak7k(\x18\x00\xcd\xc95-\xdbEc_E\xa0 \x11\x9bE\xaf\xba\xa6\xd9\x92\t0\x19;rM\xf9\xd5]d\x88L\xdd\xa5\xe0\x18z\x15\x14\xae\xc3\x12\xc9\x1f\xd1B\x0e\xf1Y\x16\x18v\xe8&\x9e\xe2\xcert\xf0\xdfh\xcd%\xf8\r\xaaP\xba\x88>\xdb\x9f\x94\xcd\xd2\xabm\x1et\xa0K$T(\xeb\xa4\xc6:C\x9f`{82>F\xfe<m7X\x1e\x98\x89\t0\xaa\x9a\xb8u\xce\xaa\xef~\xffF&\xd1\xad?\xbd\xad\x92\x82\xbe-\xbb\x84\x9by\x08(\x9e4\x1dPx\x1a\xd0\xf6\xc8\x19\x07\xfe\xf2\x160\xa4\x87\x92X\xe2\xddO\x01\xcfh U>\x1f\xb8\xcc\xe5\xf5\xe9o\x1e\xd3p\x1frq\t\x1e)\x0f\x1f\x06\x178\x1c\xcd\x08$\xffF\x98\xc8\xcb\xc5\xfaxw\xd6X\x9b\xfa\xb1\xd5\xb0j\xbeJ\xb2\xa5G\xcb\x03\x00\x16\xab:`\xbb^\x0f\xb9\xeaa\x98g\x8bs\xc1:\xb8/\xc5B\x0c_\xcfP \xf0\xcf\xfe\xc2\xb6+\xe38T\x8f\xa7\xf3cL\xe7\x0c1\xa7\x06\xe3\'Fc\x9bV>\xd9R\x94\x0b\'\r\xc9\xfa\xffyg\x0b\xe1EcY\xffF\x1e5\t\xff\xff:I\x9dA\xd3\xd9\xf8\xf6\x1d\xe9\xca3\xfbFa\xcaxYt8`?\xfa\x7f\x93\x05\xf2\x0eW^\xd7U\x95Fi\x8b90p{\xbb\xd0\xfa\xe0+Z\xce\t\x0c\x14\x9eX\xc2q\x8f\xf2E\xba\xaa?4\xf05\xe6,\xd0y\xf2G\xe5\x8cW\x05\x1d\xbf\\V\xb8a\x18\xa8\x80[+\x1b\xa2\x80P3\x8f\xcd\xc6\xb5\xe3\x80~\xb96\tI\xc1\x8diH9$\x7f\xc5\xe7S_\xd3\xae#\xd3\x1fj\x13B\xd0\xeaR\x83\xac/\x97H-\xf7\x9e\xc4\xf9\xe8o\',$\x87\x94\x04:\xef\xc3&,\x89\xba\xc7W\x91\xc0m\x95\x820;\x9e\xdd\xfaF\xc6b\xaf\x8d\x1d\xe0\xc2[\xe7i/)\x19\xe0B\x95\x0c\x8b~\x9e\xa4x\x00\xdf\x9d\x1f83\xd1\xeb\xb5\xe4\xaa\xd6X-\x01\xc1\x84\x00\x19\x0fax\xc8\x07\xf4\x1bx1"\xa2\xb1\x99\x81,\x80\\\xacK\xab1\x80n#\xd7\xaf\xb6\x8eP\xcb\xf5-\x80\xb9B/\x87\xf4\xdfB/o,F\xae\x16VgP\xff\xf7\x0e\xf5C\x06\x06\x1d4\xd9\xd3\xf9\xf5\xdaL9\xc6^\x1b\xfc\xc4\x1fz\xae\x8f&\x02\x80\x1b\x9f\x1a\xc6Z\xa5Z\xc0p\xed\xcda\x9a\xc4\xab\xfcrh\xcc=n)\xce\x12\xd2tNDg\x91\xe6\xb7lb\r\x18O\xbe4\xddw\xeb-\xff(j\xc7I\xcc\x94j}Vx*Z\x17j;y\x10\x87pK"\x19|\xaa!V\xaclg~r\xa8\xed\x8aj\x9bZ\x98\xfb\xf1\xfa\\\rM\x92\xbd\xf6\x08\xc8\xbc\x0e5\xe2\xf7\xe1U\x10\x0e+\xe1\x8eN-=\x06R\x84{\xdeC\xd0\xa0\x18\xa3YP41\x05ER\xf0\x8agn\xaa\xfeo\x1c\xa0\x1b\xa9\xd8\xa0\xd6\x1d\x94\x80dO1\x12\xc7\x016:_\xa2%8\xe2\xf6\x8b\xc0\xea-\x08\x82G\x11\xcb\x0ct%XEH\x80\x05\xae\x8b]\xe8\x83\x02\x0e%\x16/\x83\xec\xbd\xef\xd2\x8d\x95\xed~\xe0<\xa2\t^\xd6\xd3f\xf64o4\x8b\xca?\x7f<\x80~<@\xb0\x1cp\x19\x8a\x9b)\xcd\xc5)\xbb\xa6\x1f""{Z\xed]\x1cDO\xbb\xee\x8e\xdb\x17\xabM\xac}\x98,j\xfeu\xc5I\x89X$\xcd;a\x91p\xb6\x0cm\x8aD\x7f\x0c\xe8h:\xa9Z\xa2\xb25\xa7\x94\x0c\x896X\x07O\xa3\xa3\x8a\x16lp\xdd\xb8\x02(Z(37\x06\x81\xf2\x8f\xb3\xf8\x10\xd11\xaf}\xec\xc2\xd3m\x8a\xdfc\x15P\x02\x1a\xa2.\x1d\xb9M\x99\xfc\xbf\\&< \xf0\x9c\xf1\x16\xc9\xa1pl\x1d\xb00V))G~\x92L\x0e\x96\x7f\xa3|\x9b\xa4_\xd5\xd0J\xedO\x0fg\xf2|\x1e\xb0y\xb03FD\x0c\xf1\x80JB\x95\xc7c\xbd\x86\xa3o\xafO7\x9d\x00\xef\xdc\xe5\x9d\x88-I$wP\x83uB\x030E\xf6X7T\xcc\\\x8e\xdc\xd1F\xa3\xa7h\xfcQ^\x07\xa1\xb1g\x01\x84\x89\xd2@.\x9d\xbf\xc7V\x11\x98hw\xb6\xf5\x02g\'\xa31\xc7\x1b>\x81\x1e\x0ex\xbf\xce\xd9\xf1m\xc0T\x15\xc1\xa6\xe4)\xfauy\xd3<?\x88\x9e\x87\xcf\xb2\x1b\xc6\x0e\xc6\xb7\xe7?\xa6\xf6L=/\xbfj\xa4\xd1\x87\xc1\xd1\x88\xec\xac\xdd')
1
+ from .config_enum import ConfigCategory,ConfigEnum
2
+ from .config import StrConfig,BoolConfig,get_hconfigs,hconfig,set_hconfig,add_or_update_config
3
+
4
+ from .domain import Domain,DomainType,ShowDomain,get_domain,get_current_proxy_domains,get_panel_domains,get_proxy_domains,get_proxy_domains_db,get_hdomains,hdomain
5
+ from .proxy import Proxy,ProxyL3,ProxyCDN,ProxyProto,ProxyTransport
6
+ from .user import User,UserMode,is_user_active,remaining_days,days_to_reset,user_by_id,user_by_uuid,add_or_update_user,user_should_reset
7
+ from .child import Child
8
+ from .usage import DailyUsage,get_daily_usage_stats
9
+
10
+
4
11
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
12
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,27 @@
1
- # 2023-04-08T15:11:21.567957
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00i\x06\x00\x00\x12\t\x04\x00>\x03\xa1q\xccr%\xcdK\x19\xa4,L\x9e\xe2\x15\x00\x00\x00\x00\x00\x00\x00\x00\xd9+?\xba\x15\x16.c\xdd\xfd\x13t\xfb\xdb>\xa8P\xe6\xb3\x01\xa3 \x1d{\xf9\xe7\tt\n\x96uU B\x1a\xa8 =E\x8e\x12}\x91\xd2\xed\x12[\x9f=\x9a\x81b\xea\xf3\xeaKi@Y\x18\x9d^#\x0c\xc3\xf9;\x0b5Q\xcb lU\xac\xb4\x81\xae@\xf0[\xca\xfc\xd4\xf7z\xeaboU1\x14\n\x19X\x92\x85\xf6\xcf\xcf\xb3\xa3qF\x06G\xba\xee\xedg\xac\xf5#cO\xb8\x0e\xaaPz\x04\x822\x82\\A\xa4Yxx\t\x86\xa6\xa7I<Cn\x9f;uBb\xe6L\xbe;\xfe9C\xe9\xf5\xc5GX\xe1`\xbb\xdb85\x1c\x88\x9e\x8fI\xb5\x8d*F`\xbe\x04\x8a\x15\x0e\xcd\xf9\x1aZ_J\x19U\x0f\xbc\xde~\xecd\xfd\xc8n+\x1fd\x89#\x8d/g\xf5\xb8_\x00\x97D\x1a4Q\x03\x92\xc8)\x7f\xb7\x9c{\xf2\xa2\xc4/\xb2\xf8\xcd\x8e\xfb\xf1!6\x830\xea\x85C\xed\xc2Am\xb4\x1c\xc1xm\x88T!\xc8\tu\xf6\xfbp\x7f\xe4\x89\x13hfZ\x08\x9b\xd4\xf5}\x86\xa1x\x89\xfd\nv/\xc3X\xd5qX\xd4k\x07\xef\x12\xf4\n\xb4\xad\x93\x9b\xed\xa1\x88"&\xc5\x12\xbdX\x18\x07\x8e\x8d\x96\xfa\t\xafO]\x1d\xe3\xe5\x96\x84\x99\xe9\xac\xdah\\\x8c\x17\x03\xac\xb5 m\x00\x0f\x0f\x80\xa7.\x90u\xbc\xbc\x86l\xda\xcb\xbb\x0bF\xe6\xf2&T\xd6\x08\x90.?\xdf{\x83&\x83\x16\xe5i\xf1r\xe03\xa2\xa92\xc2=djkCe\xfb\xce2\t\xfb\x98.\x91\xce\xd1)\xdc\xa0\xfe\xa5Yfw\xe0\x1a\xca\xda\x11y\x9e\x13\x86\xf2\xe5Z\x95\xea\x9f\x0cjO\x1dL\xbb\x8b\xb7K\xd4\x99wjD\x00\xdbOa\x95\xc9\x07\xfd\x05\x14\xea\xc5\x85\xc0J7>\xf1t\xa0\x1f\xde\xbb\xa6\x05\xe4*oi\xe6\x1b=Dz4\xad\x18\x8cu6]\xe2F\x908mi\x17\x98\xaf\x01\xe7\xf2\xaec}\xceh\xc8r\xd29\xd2\xf1\xab\x1bH\xd2W\x86]\x12\x16\xe5\xd6\r\xc1\x99\x87\x0ba\x92\x8c\xd5\xcb\xad\x06\x7f\x7fr-6\xb9\xf2\x99\x12\x16\x16\xb5w$\x02o\xd1\xb5\xf3/\n\xe5\x12\x90\xd55<=$:R\xd4)bv\xdey\x9fR\xf6c\xe6\x16\xc6\xee\x12<\xd1\xf8\x9b\xcf\x009&`\xdcx\xf2;\x85\x94\xf5\xdcq\xb7~c\xcd\n\xc8v"T#S\xd5)K\x8a\x99V\xf3X\xfdd\r\x8b\xe1[\xec?\x80\xfb\x90\xd5\x073\x02\xcd\xc7\xee\x9d\x8e\x1e\xad @\x9c\x11\xe0*h\x81\x12\xf8\xb3\xac\x10\xe4)uS\xd3\x05\xce _=l\xee\x9aP\x85\x1f\xebI\xa5\x11!&\x19 \xd4C\xcc\xa5)\xe7)\xbbm\xb3A0\x07\x86\xa7\xe0S\xa3\xc9^\x83d\x90\x9c\x8dQ\xf6ReHR\xab\x9c\xe1ev0hE\xdf.\xbb\x1b\xa7\xf1\x1a\x1d\xbb\x98@\xc8\x84\xffI^\x19F*\xe0 \xb0\x8e\x12\xcf\x11\xcddf\xce\xf6SJ\x14\x18j\x03\xba\xc0*\xe7B\xf7\xcf\x84{A\xf8\xc2\xd2\xd1\xba2\x8b\x94K8[vBYf\x06\xdb\xad\xe6uW@\xdc\xb1\xc0T\x0e\xdd\x94\xd6\x95\xf1o\xae\x10\xda\x17\x87S*\xf5s)\xe0\xbfo\x9a\xb0\xf0\xbbs\x1fY\xfeZ\xb7\xd7)\xfd\xbb>\xbb\x12~`*!\x80\x1d\xc6\x11\xab\xa7\xf1\x87\xd1\x8f4Sh\x87\xa3H\xb9\xc9j\xaaH\xb6\xe5\xe7**r\xces\xb7\xb2\x86\x1c{\x97\xed\xa1\xebvH\xba\xfc\xf8\xa2N4\xd3_\x93"\x9ez\xfef\xb7\x91\x1cJ$\xde^&\xf0\x12\xaa\xcb\xa1\xb1JwC\x89:RO\xbb\xc7\x90\xd4\xc5\xe9\x150\xd4\x9a~\x9eV\xb0\xd1\xbe\xb9\xca\xac\x19\x16\xcb\xee\xfc\xd0\xfdI\xbc\xf9\x86:k\xfb\x18AL\xce\x08\xb84%\x15\xfb\xa9\xbf}zh3\xc7\xb7\n\x14m`{\x1f\x04bj\xdd\xa9r\xdc\xbd\xe7\xa8\xf6\x80SnQ\xd1]\xafj\xc3\xf5<^\xa9\x12\xb90F3z\x80\x83\xa7\xdf\xb2\xac\x1b\x80\xc5\xc7\xd6-\xd7\xe8\xe8G\xf9VU\x1e\x7f\xb36\xd0\x80No\x9d\xcf\xcdY8.^\xef\xd8\xa4\xd2%\xc5M\x9e\x1f\xb5\x99\\\xd55\x95J\xfc\xe2\xf488\xf7\x0f\x1d\xff\x86\xc9\xb9m\x15.\x9f\xeb~^\x11"R?\xb8\x96\x82\n\x94\x89\x13\xc1\x88.^\xeb\xc8\xc2\x86\xbbP\x9c\x0cm#\x184p\xcel\x97\xc5\x12L\n\x08\xcfo\xd9\x91\x1eU\x1b\xa4U\xff\x83\xaa@\x83\x8eF\x06\xd0\x05zn\xb5\xb8\xf7\r\xd2~*xA\xf8X\xe0\x16$\x83\x91\x0b"r\xec\xdd\xd4\x9c\x8d\x12\'-\x7fNC\xb1]!V\xfd\x12\xf0p\xe4\xae1\x0e4\r\xd2]R@g\xa0\xa4\x16s#/J8I\x1c\xeb\xb3cZ\x8e\x01\xc1\x93\xb7\xbf\xd9N\x07e)\xb2\x86_%\xcf\x03\x7f\xd7O\x009\'^d\xda\xbe\x17\x05\rT-\xd9\xf5Lw\x84\x8a\xaaFyP\x95(\xb6\xdc\xa6\xdf\x96\x11\xdfj\x8e<\xe6\xda)\x1f\xd2\xa8\x96#k\xe2u\xfcf\xfc\x80c\x0eg\x85\xba\x1d\x11]\xbe\x81\xf7i\x9c\x00\xa4x\xf4\xe9\x97\xaa\xc9g\x97\xd8`9\xbe\x05a{\xa7\xea\x10b\xfdz\x0f\xc1_\x03V\x0c`\xb0\x14\xc2\xfe.I4\xd0\xc8K\xfaYx\xa4?l\x14\x9e\x19\xe7k\x1aJS\x02:\x94?jj\xe2\x94`2\xfb\x17\x06Vt\xfb\x1f\x7f\x07x\xf6b\x81/vA\x05\xed\x0b\\\xd0\xa9\xe2\xab\tYB\x05\x97\x0e\xb0\xd3\x12\x14\xa2`n>\x84\xf3\xa0U\xfa]\xcc\x80\xc1?6>k\xd5\x9c\xb3\x1d\x01G\x83\xe5\xa3\xd0\x95\xd0\x95Vf\xc2U\xeb\x1b\xbbS\x9b\x1bz\xf9\xed\xe1\x0b\xb4\xa4U|\xda\xa6Y6\x00i\xbb\xe2q\x0e\xdb>T\xb6,\x8c\x1c\x8c\x18\xcb\xb2\xb9\xf6\x84\xcb\x93\x9b6|\x8a\xa9^\x18\x11\x94\x00m\n\x04a6\x17\x8dt\xa4\xcd5\xfa\x8c\xe8\xc9\x19\xfd\xf1a}\xd9\xec\x82\xb9x\x99\x10\x0e\x16\xa7ES\xbej^q\x97\xb6\xde\x9e\xbf\xa9\xc3K\xf8\xa4\x9c\xf0,^\xde\xc6\x92\xf4\xe2\x01\xf5\xf0\x10\xe3\xca7b\x12\x1c\x9dyKO0\xd3\'\x95\xc4v$\xe4^\xf1*/\x7f>\x8d\xdf\x03\x92\x8c\xa6\xd9\x13\n\xd1\n\x80\x0b\xdf\x99\x97k\x13\n\xae\x87\x98)\x95f\x06\xc6\x83_\x9e\x93C\x00a\xaa\xd2\xb6\xe8\xe6?\xe3\x19)q\xe8/y\x1b\xe3\x19\xaa\x82\xcak\xb1\x93>\xc3\x80\xbd\xbb\xb2\xcaQ\xcaF\xf7\x94\xa5[\r[q?\x95\x12\xad\xf14\xc7#\xa6<l\xd1\x92;\x7fS\x94-.L\xd5\x88C\xe8>\xeeTA\xc5?\xd0\x15\x96\xb1\x02\xf8\x89\xb6\x98&\x95\xc1\xa7\xf2\x9d\x8c\xab\xad1$:\xd1\xafY \x07\x03\x00F\x9br\xa7mO\xede')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+
19
+ class Child(db.Model, SerializerMixin):
20
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
21
+ # ip = db.Column(db.String(200), nullable=False, unique=True)
22
+ unique_id=db.Column(db.String(200), nullable=False, unique=True)
23
+ domains = db.relationship('Domain', cascade="all,delete",backref='child')
24
+ proxies = db.relationship('Proxy', cascade="all,delete",backref='child')
25
+ boolconfigs = db.relationship('BoolConfig', cascade="all,delete",backref='child')
26
+ strconfigs = db.relationship('StrConfig', cascade="all,delete",backref='child')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
27
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,106 @@
1
- # 2023-04-08T15:11:21.635951
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x86\x12\x00\x00\x12\t\x04\x00\xdd\xe0|@D\x99W\tj\x07\xb0\x95\n\x07)\x18\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xea\x92u\xfe\'\'g\x8a\xf5\x18x\x05\xb2\xe2%9\xc9\x8aUS \x02\xcf\x17\xa8\xe8\xa3X\x82j\x9f\xb6\x19\x0e\xb3b\x89\xa5\xca\xfa\t\xa2\xef2\x80\t[\x821t\x95\xe5!\x08\x18\xd4\x83\xa6\xeb+\xaaOa\xa7\xc0\x91\xa7\xa0d\xa0\xa9W\x9f\xaf\x0es\x1c\x82\xce\xa57#W\xef\xe4\x9b\xe2G\x99\xe8\xb2r&`W\xa8\xec\xcc\xf48\xad^\xdb\xf4:\xeak*O`\x99\x1d\xb90u\xd3_Q\xb6\xa5\xd8\xb6\x94z\xc5\x19n\x8f%\xbc\xb7B\xd8A\xdeN\t6\x05R\xfa~@=\xe2\x96(\x01\x8c\x87\x91\x82Q\x10i M\xea\xed\xe5\x8e\x1ed0\xa7\xf9\xe5\xad[\x13\x82p.\x06\xd7\xba\xf3d\xc2\x00\xf4\xe7\'\xd0\x9a`\xebO\\>\x00\x9e5\xbfR%r\xeb\x91\xa4d\xfe.\x0cs\xa0q1\xba\xcc\xd3\xd2\x19\x1d\x92\x13\xb9\x11\x9d\x03\x04K\xaf\x97*\xec\xc2w\xc4\xb8\xf4\xf7$\x1al\xe1J0AS\xb0\'\xdc\x84\xf4\xc8=\x99\x85\xf0Mq\xd3\xebNN\xf9<\xb0B1\\\x95\xf5j\xd96\xf9N\xa8\xc9\x9a\x9e\xb1B\x02\x0cP\x96I4(\xe6\xa0\xf1~\xde\x98H\x98\xa32\x9f\xd1\xc6\x04\r\xc2\xa1\x83\x07\x8cX\x1d\xa1\xeeD\xd5\x1c\x97\xa9\xaa\xf7bV`\xb6\t\x15$\xa9\xc3\x11\x863\x01\x98\xe5\xa7&\xf2\x88u:_\x8b\xdb\xae\x8ee\x8b\xaa\xc1X`\r\xba\xc2\xc8\x12\x16\x90\x1b\xabf\xa2\xd9k\x1dc\x9e$a\x17\x1b1`\x04\xc1_6\xe1.\xd3\xfcXS\xe9p\x91\xdf\xab,\xf2\x9a\xc3sdJ\xc6\xcaA,\xa5\xf4;\x92\xec\xde\xf3F%\xaf\xa3\x02=\x0fG\x85vV\x06\xb0p\xf4nU\x92Q\xa9UI\xfa\xd5n\x88\x0e\x93\xc3I\x80\xd0g\xcf\xa3WR\xa9|x\x0eC\xab\xe2R\xc3\x1a\xfb\x053O\xd3dO\xe8\xc3<\xb1c\xb2\xb4\xa1,>\x16\xed\x8b?\xf0\xec\x7f\x1c\x85\t\xdb\x92\xb3\xe6hs\xc6\xde27W+\xe9\xfb\xfa\xd1\t\xf8:\xdb\x9d\\\xa7h\x8e\n\\\xa5d%B;e\xb3]\x92\xee\xf9\xab\x01\x81-\xb3\x9b\x0ee\x1d$\x93f\xe7\x91\x02\xeaR\x03x\xd0\xc8\x81\x90g6cGSq\xafW\xdd\x03\xcc\xd6c\xfbn\xb9\xa0\x97UKZ$N\xe1ag!\xd2\xa9\x1a\x88\xa5Ix\xf6\xbe\xc4^}=N\xa9\xbe\x94\x8aO\x9b\xfb\x160\xd2KC 3\xf1Q3\xe2\xb1\xf2mi+\x1dE\x8f\xc7\xe8\xecL\x9a\x00\x9066P\x80\xd8\xc7/\xf9\xbc\xdbC6\xb6W\xc8\x19eFh\r\xfb\x16\xed\xf1\xdc\xa8\xd7\x85\xf8\x94\xe9CSX3t\x0c^\xfc\x80\x8df\x07/\x1e\xc1\xaf\x9fU\xc5\x99+\xdb\xaa9\xa3[\x04\x11\x0c\x17\x16\xd7j\x84\xedg\xea\x929\xd8\xb7\x19\x7f4>\x1f\xf1\x97onwI\xd0\xe5\xf6p\xd1\x8b\xf9\xd9\x16\xd5\x91\x1c^\xc07\xc0M;\x19U\xf0\x15X\xbe\xe9\x04\xad7\x95\x0e\xe8\xe0\xf8\xd2\xedQ\x80k(\x16u\'\xb2\xc2\xaa\xe5\xbd^W\x17\x93\xd8\xee\xa0x\xb3\xca:\n\x14\rb\xdb\xb0\x85\xc8\xe3\xcc}\x84\xefR\xcdL-M\xb9\x0b^\xdc\x19$\x9a\x16\xd8q\x95\x0c\xb9\xf3\xdc\x7f\xe7\x08\'g\x7f\x15\x98\xa4\xdb\xc8\x82\xd2`\xd4\xea\xd5T\xbb\xd9\x11\xfaU\x01\r\xc0\x99~\x0el\th\xcc\x9c\'k\x8en\x8f\xad\xa2 ,\x0f\xa3c\xb4\xa9v\xf1x\x1aj\xe6H\xc0\\\x942\xc4\x9fV\xaa\xf4{|B\xf8q\xc3\xd9\x01\xc7\x8bEC\xff\xa7\xfdQ\x02\x1a\x87\xeaw4\x92\xee`\xaf\xa9\xf0\x10\xc1}\xe54\x0e\x16\x8fQ\xb0 K\x96a\xe9\x9aYL\x0f\x9f\x83@\xef[\xd7\xc4\x94\xd1G\xd0=A\xfc\xdc\xb4P\xe1\x9b\xfe\x0f\xff(8\xf5\xd2\xbfm;\xafI\x01\xad\xa3\xaa1\x91\xcbH\xf3b\xf0M-\x07\x0e\x87f\xd7\xf8#e\x83!3\xc2\xbf\xe2\x05La\x0e\xb8\xc2Q\x03\xa4\x87\x19*\x85\x88#\xbb`:\xa5\xfc,\xeb\xf9$e\x1cS&5\xd2\x84\xe1\xa7mFe\x1b\x0e\xcf\xbe\x9eI\xc2\xa8\x8f\x94\xd7\xc6\xf8\x0f\xe7\xc1\x92$~\xa2\x11!K\x9f\xde~*\xd9\x93\xe9\xca{\x1b\x02\xc5g\xf9M\x8d\xc9\xe4\x94S\xab^*\x9e\xadH\xb6\xbb\x19]\x9b\xc9\xd9\xa8\xc2\xae\xff\xddO9-\x84\x9b->\xb7DYp1[\x7fid\xd1\x8ctI\x80=\x1ct\xc2\xb76n/\r\xe5\x1e\xd8\xe2\x89V\xf7i\x89\x8e\'\x9eD\xfc\xd9\xdc,\xce\xa9\x82\xf4\xb3,1\x83\xa8\x94\xba\xb6\xc8\xbeW\xc5\x0f\x14\xdb6\xc1=/\xd3\xb9D\xaa\x9fg\xea\\Db\x9b\xcf\xe67\x01\xaf\xa4\x87\x03\x12\xce\xea\xec93i[\x01\xe6\x10\x19p\xe2\xb2g\x94\xe6\xf0\x1a\xe3d\x1d\xf5\x8f\xce\xfbH{Cc\xac\xa42ji\xd9g\xd7\xe0\xa9\x81u\x1c\x16\x10\xc2~\x14l\xc9\xb2\xa4\x8c\x1d\x8a%\xe3\xba\xa7\xd2\xf0\x8b_<\xdf\xb1*\xe9F\x93\xb9mc\x8d3\xfc*B\x9d\xcb\x19,\xc6`{\x0b\xa5"\x04?\x07\xb9\xb5cA\x06\xfa\xbf\xff\xf8\x84.Mr\xd1qN\x00e\xca\x15\xebR$\xb0ZD\x83\xddg\x83Xs\xd6\xcd\xe7\xc3\x87W5;&;S\xfa\xb5\x838{\x19\x8b\xa7g\x0b/B\xd1\x9d \xb1S\xb3S\x0e\xfai\x14p\xeb\xfe\xdcuH-\xfc\xb9\xed\x9fLO\x10\x10\xb3\xf3wc\x19<[EGV\x06\x1a\xc7\x9e~ \x7f6\xa8.\x88\x8b\xe1,\xaa\xc0n\xdd\xae6l\xf9\x1e\xc7{p\x11\t\x11\xb1s\xc5\xaaH\x8b\xc5\x87X_V\x95\xbe\x1b3\xb8IZ\xbc\xcc\x1ai\xcd\xac\x12\xe2\xa2\x13\xa8\xb1 [\'\xaaY\xe5\xc2}\x89\x8c\xca\x19,H\xd1{;\xeaW\x0e\x85O[?=:\x9f]\xcc\xb2\xba\xb6\xaf\xee+\xda\xee\xfeb\x12q\x84;\x83bR\x19\xc3r\xb1a\xc38\x15\x93+\xc8=\x8e\xff95\x06\x99\t\x05\xbd\xad5\xbb\x10w\x92\xf4\xc2\xc2\xb0\x83d\x97kx*a\x90^\xc9sL6\xe55Y\x033w\xe7\xa26Y\xab\xaf\x81\x1ae}\xb4\x89\xd4\xe7\xa5X\xc9\xdby)\x02e\x14<bt\xdd\x81\x8c\xc2Fl\x81fi&\x08\x16\x8b\xb7\xf4\x97\xf4\xc1\xb9`\rzP\x16\xec.\xe9\x00\xde#\xbb\x1f\x95\xd3\xf0G=\xc5\xe8mb)I\xfe\x86=\'m\xee\xea\x18\xb7\x92\r\x0eetC\x12\xbe\x1cj\\\xbc\x1cY\x1b\x1b\x19cIS\x90\x83\x15/m\xb1u>\xd6n\xd6;\xa0\x13\xcc\xb7\x1d|\x89K"o\x9e^_7\x1e\x99"\t\x0e"\x03T\xb0\xd2\xe5S\x11\xa0?\xd3\xa2\x11\x91$z\xd0[\xb6J\x9c\x9fx\x92n\x9f\xa0)a\\t\xde\'\x85x\xfa\x8c\x8c\xd6\x91\x9b\xdc\xbc\xb62Xp\r\xbc\xeeWS(\x88\xf5\x91\xf8\xb6\xeeo6j\xd9\x8b\x9d\xea\x9cP\x89\x983,\xe1\x18"\x92\xbc\xce\xba\x99\xa9\xc1.\x1f[\xac\x8f\x1e{\xdc\x7f\x13\x11\xe5\xab\x9f6,\xbd\x81\xd0o0H\xa9I\xb9\x8fJO\xacl\xad\xf1o\x11\xe2\xae\xc3\xc7A*Ufp\xf2\x80\xc6\xad\x8eWKqjl\xe1\x12\xbdp\x90.<J8\x00\xbe{\xb8H9\xf5IVj\x1f\x7f\xae\x95\xed\xe3\x06oQ@\x11\xdba\x81\x17\x87\xff\xf2\x8b|\xf1\x82\x9cl\xf4n\xb3\xdf.\x0c\xdfx\xbeO\x8b\tH\x08\x8ee\x9f\xc8:r\xe50\x19Z\x0b\x1cV\xa1#\xc8W\xe5R\xd8X_J$\xcf\xc3\x82\xe7B\x12U\xa5\xe2\xf5H7\xdb\xc93n6\x97\x7f\xa5Ye%\xe0\x16\x05W\xabL\x8a\xe8u\xe8\xe1\xa5\xe5\x06\xe9\xac\xfc\x08\x97\x88\x1f\x05\xfev\xd2\x1e\xcfV\x0f\x12\x07\xc1\xa5\xae\x96d\xb3\xd3\xdc\xbd\x0c\xad\x07/\x0c\x997\xdb\x13$0\xfeYg\x96\x10\xdf\xdd\xe3\xf3\xb9\xcf\x10\xc5\xdf1\xff\xb5\xdb&\xb8\x80\xab\x8b\xb0J\xa5\x8a\x98\xf4J\xc2\xa4\xa8~\xeeAw\xa5\xa1\xbd\xa8\x17\xa8CS \x98k\xb0\xc04\x94\xd63\xb8\xa1\x8bg7,\x03\x1b\xf0\xaf\xeei\xaf\xf8\xbcpk\xbem2r\'\x8fe1\x90\xf9\x99\xc5\xddWh\xb6kHY+`\x91D2\x9b+\x8e\xd8U\x1f\xe0\x83*\x10V\xcd\\\x10\xf0\x8b%X-\x16W \xb2\xb3\xce\xed\x04\xec\xd6d\xbf\xf7n\x8e2\x14#\x8c)\xef\xc8\x90\x85\x14\x96\xfaT\xc0\xee\x9e\x92I\xef\x8c]\xfe%\x84M\x82$d\x17~\'\x17_\x96w\xf3\x03D\xde\x18\xb2\x80\xc0\x93\xf0\xf4z\x19/\xd7y\x8e$S\xedr%I\x0e\x90*`\x92\xe3cC\x04\xe1x\x87V\xce8\x82A\xaa\xd6N\xd7\xc6w@\xe0\xa46\x9ax\xe5\x1aM\x82l\xeas\xc3\xc0~\xbafi`\xa2_\x89n\xf7[f\x11\x11!\x87\r\xde&&o"\x0f{\xc4RXx\x84\xf7\xa5\x8ep6\t.\x898\tQd}\x04\x06\xdd\xda\x15[p\xcf\x07\x87\xb0\\a%W}/?c\xce\x05b\xab\xb3\x9f\xb7l\x9b"\x8aaj\xf2\x8eV\xf6\x12\x86ls\x91\x04\xaf\x05\xa2\xfc\x92\r\xc8gc\xcc\x83\xe5\xc2\xdbkq\xe8\xa2\x9b\xbb\x07*\xc8\xe1Y\x0f\xb15\xe8\xf1\xdd\x15_\tBdo\\\x01s^,K\x0f\xc0\xa4\xe9\xc4^\x11/\xd4\xf8\xa9\xf8\x06\xbco\xb9\xc8x\x10\x8a[<!7#\x16H\x08\x03\xcc|\x0b\xc2\x82\x1040\x13k\xfd\xc3\xc8\xbe\xc2[\xe7\x82\xa0\x05NBc\x15\xf2\xb1EG??\xa5\x11\x02CV\xf7\xc96"\'t\x1f>\xfb)\xba\x93`+\x1c\xd1\xe9\x9aA\x8c\xc6i\x9e\xb0Xw\x85\x0b\x10\xd4\xf0\x0f\xaf\xd9\xcev\xa5\rr\xac\xfd\x1e\xab\x10\xd9\xd4 \xb5\x9f\xaeZ\xdd\xf7O>\xd1\x80\xa3O my\nT\x8ck\x81\xa1\xad\xf7\x15\xc2\xdb\xc3\x10\xf0Olvs\x93G\xfe$\x9d\xce\xa5[.\xa5\xdcI\xc1a)\xc6\xb9i\x89\xf1\x8250\xcci\'f^\x9f>\x06\x85\xdeH[\xc6\x95\x04\xdb\xf8\xc5v\xa1;[\x08\x14\x98W\xd4\xd8zA\x83=\xb62\x0b\xf2E\xa5\xd7\x83kP?\xde\xfb`f\xcf5\xe1^\xe1\xf9\xe0G"\x00\xf6\x016.L\xac\xc5\xeb\xf3\xc4\xfd\xfbX\xfchz1\xd5W5(\xd8\x83n\x11\x94\xd36a\x85/\x8b\xe6\xc3\'\x12\xa2,\xc0\xd5-SX\x93B\xf0\x17z\xc8\x05o\x9cC\x11\x82=\x8d\xf8x\x8e\x12\x9b\xb46\xce\x9a\x1f\xadi\xb8VE\xfe{\xabM\xb1\x1b.\x00\xd6^\x8a\xb5==\xf0M\xe2\xccRo\xbf\xe8\xf7J\x08\xb7\x9e\xddK-\x86U)\x82\x1c\xe8\xd7U\xe4\xd5\x90+\xc9,R\x82\xac\xab\xa7\xd3j\'\xfa\x0bPx}v\x84\x0f\x91$6\x05}\xcf\xdf\xe2!\x83\xdc\x91\xc7L\xeeK\x1c,K\x85\x16\xbaq\x8e\x8e\x19w\n\x8b<hN\xac\xe4\x8f\x02K\x89\xbc\x14\x051\xfda9$\xa2\x97Q3\x1c\xc6\x8a\xc7<2\xb7\xc0\xd0\xaa\xd5(\xf9\x9bK\xa5\xd2\\\xea\x16\x89\xa9\x13v\x15\xaa\xfa\x16\x9a}\xcf\x8a\x90\x983\xdf\x86\xe2\xc18\xb1\xd1\xa4\x98Yz\xa7\xf5\xac\xe5A\xb7v\xa8\xb2\xf4hO\xe1G\xafq\xcf/cJd\xb8\xe3\x1df\x88\xa0\xfd\x7f\xc4:s\xff\xcbZ0\x03\x8e\xb9\xe1\x13\x9d`\xe2e\xbe\xbb\xb6\x17\xed}<\xaf\xfaaT\x91J\xee\xf5\x00s{\xbe\x0e\xbb\xbb\x9c9\xbd1\xe0y\xb8\x88@&m\x87\x073LCj\xa8WP\xafb\n\x85>\xe8\xca\xec#\xce\xc4\'Q\xd1\x8b5\xa9x\xc9\x16\xa9\xee"\xba\xd2g\x17w\xb4N\x15\xd5\x8e\xaf%\x8e*F@\xa6`!\x0ck\x16\xf1%\xf9\x84AV\xed^\xbcS8\xdbm\xf6M\xfek\xa2x\x1c\xd8i\x03\xfc\xca]\x9f\xf6\xc3\xd3\xa1\xc1\xc9\x15\x1f\xfc/\'iCc\xcf\xa2\xa3\xa4Y~\xb4\x84\xddqX@J\xb7\xc5TC\x14\xe2\xc4\xab\xbe\x83r\x12\x11\xcf\xd3\x94?a3\xb9\x94\xc3\xe0{\x19\x1e\x86\xa5`k\xf9O\x9bJ\x07\x96\\\x9e\\\x00\xbbv\x15\xfe\xf0\xab\x0c\x03\x81\xfb\xd8\x83sKX\xf8\x1f\xe4\x16\r\x9d0\xf3f\x98{\x9c\t\xaeR\'r\xab\x98%f\xb7\xa31WWd\'l\x08\x8f_8o\x94\xb5\xc7\xa2\xfe\xe1v\xee\xb4\xd6\xf5\xaf\xef\xa6\xe2\xa1L*\xd8V*\xa4\xca\xed\x1c\xb7\x92\xaa\x14\x88P\xdc\xba\xcfR7\xc3\xcc\xd3\\\x89m\xca\x99\xcd\x9a7\xe5\x94\x1d_\x8dM\xa4Q\xab\xdf[/\x1c9\x93\x8a\xdb\x83\x11\x07\x8f\x8e\x11_\n\xc3\x8aA\xa9\xb5\xd7yl"}\x8c>H-%\x9a\x83\xee\xa3FY\xc5g\x82\xe3\x994\xf3#\xd6\xb6K\xa8iB\x8eO\xa9\xe3;FP\xe5\x8a\x9f\xfec\x0bn\xcfU\x02\xa0v\xad\x9e\x05*K\xb7\xa1qn\xd5\xf5\xe3m\xc9\xff~\x9cH\x0b\xa9\x9144\xa4\x98i\xee\xcf\xa3\xdca\x94\xae1:\xd7\xf1\xc3j\xebv\x91e\x19H\x02\x14\x80ni\x12>\x1d\xc6\xe2\x12\x814w\x03W+~R\x95\xf8y\xc5E-\xb0FtM}\xb3&n^\xd1\xbc\xf59\xe2\xb6GSR\xa6\xfb\x1e\xe0\x12\x05)\xda\xa5Pp\x9au\xafn4\x82\x1a\xaa\xb5a\xb7\xe0av\xbb\xe7\x8a\xa5\xdf\xd8\xabx\xfd\xd1U\x0f z\x17t\xc0\x8d\xac\xf2\x0f]w\xf1\xef\x0b\x06}\xa4\xfb\x928\xbe\x06A\xb5\xad\xb2>\xb8\xe5\x884\xa2\xb9\x1a\xc0\xe4\xb7\xe1^Y\xd2+\xde\xc7\xd5\xc6B"W\xdau2Y\xd1x\x17\xbcS\xf9\x1dZ\xd4\xe3\x1e\x83Cu#\xe3\x0f\x07\xf0\x0f\xdc\xb8\x94\xa0\x13\x9c@RIMI\x99\xd9\x1cwB\xad{\xc0B\xdek&j\x1cc\r\xb1\xe3\xb1\x03\xf2\xe0\xe9\xd2\xed\xd0\xec\x15\x9bD\x14\x06\xd5>\xa4\x83x\\"Y\xc9\xdb\xaa.l\xaa1\xd6\xe5\xa8\x14\xa0\xad,\x7f\xcb\x16\xb7H\x03\x91tE\x9a\xb3/d<\xe8\x81\xa0\xa9\x15\x04e\xa3jIa\x10\x0b"\'\x8f\xc7\xbc\xbe\x91\x01\xed\x8e\xeeu\xb9\xdf\x90$p7(\x16\xd1GJ\xa2\xabI\x9e\x9b\x02|g \x83\t\x17\x19,&\x8fo\x12\xa4\xb4\xdf\x19\xe9\xe0fUoi\xa1\xact\xa5-\x01/5sa?db\xd0Vd\xc0\xc4Q\xdbJ\\\xc3\xf1]\xe7\x05\xf1k\x88\x12\xe3\x08\xf7\xfd\x05\x8b\xbbL\xb75\xad\x05u\xb6\x07C\xadc\xa7/3\'E\xea\x14\xbb\x11\x1c\xf0\x18h\t\xd1\x9cY\xf5\xb5\xda:s-\x9d\x07\x89@>\xe4\x14\xe0\x9d\xa8\xc7\x86\x83\x8ay=B4\xd7(Enp\xa3\x93\x16\xc1T\x921AS\xfdGx\xc7\xde\xd3\x9d\xa7)OgC\xe6L\x0c\x05\x18e]\xfd\xcdF\xd8?"\x07~\xfcY\x00\xf3\xec\xc1/\x8c\rTQ\xfd\xab\x1d\x92y\x8eP\xbc\xbb\x84\xf1\xee\xa9\xc3[\xfa\t@\xbf\x99\x9c\xfcH\x19\xda}\xeb\x17\'$<\xca!=\x1e@^/g\xdb-\xce\xe8\tcH\xcc\x05NP\xd9\xbf\xc4\xdf\xa0\xe6D\xeel\xd40\xe6\xdb"m\x81/$\x16G\xee!\xaa\r\x82\xc1\xe9o\x911#\x06\xfcb\xbeQ%E4<;\xd44>\xdd\xe5\xecZ\x90\xd3|\xc1\xd1jY\xe5.~\'\xe0\xbaz\x868\xb3\xc8\x94E\xe2\x07~Gj\x02\x0c\xd9\x91\xb0\x8aI\x9c\xba\xe11\xf7\x97\xa7gV\xb5\x17\x1c\x97\xd6E\xd9\xcft\x85\x0c\xd85e\xd6\xf3\xf8\xb5\xa8\x8e\'\xeb\xedB\xaf\xf1\x84\xbb\x02l\xf5\xb4\x8b\xd4j\xc4\xa9\xb2\'\xf4\x8e4n\xb4=\xc1=\\+\xfct\x1bx\xf9\x1d\xbbc\xe0\xed7\x8aVu\xcb(\x1b\xdd\xa0\xc4\x9fX%\\\xdc\x93\xf7\x8bE\xe5\xcf\xc7Boc\xd6\xcf\x06\xf8\xf9\x08|d_\xac\xf7)\xb9Pd\xe9Q\xd4\xf56\xe2\x8ck\x84\x12\xfdeY@G\x964\xe5\xbe\x9b\xeb\'\xb39X\x873N*\xf1\x9f=\xa3\xe0\x7f;b\xae\x91\x97\xd2\x02 R\x18c\xfb\x1f\xed\xecJ\xd3Y\x06\x96V+2\xb6e\xc2q/\x80\xbd\xa5\x97\x84\x8a\x83\xed$4W.\x8e\x97\xedi\xf3xz~\x00c\x8b\xdb\xde\x87M+\x1e\xafR\xa25s_)\x12p\x02\xb1\xc3\xa3\xf9\xfe8\xe2\x19\xdbT\xaf\x0ft\x94\xaf\xd0!4S\xf0 Kp)\x1aU\xb9\x13\x125\xb2\xabEu~\x85\xac\x16Lv\xe6\xd2\xce\x0bi\xe4\xd4\xb1\x00\xb0\xd4\x85^\xd9*\x11\x84w;\xbb\xd5f\x86\xb48,\x94T\x9c\xcajJ$\xc0\x97\x9frj5 v\x91Lk\xb0\n\xc5\xe8\xf3\x98W\xf2\xb2X\x98\'xV\x80\xb8\xb7\x07\xc5\x89\x8f\x9f\xa4\xa3%\xad\x1f\x1e\xa8\x10\x9f_\x01\xfcaMG\xbf\xb4\xddw\x0e\xd5.wMt\xf9n\xc0G\xc2J\xaa\xbd~\xd7k\x8e\xf0\x00\x065jP\xdf\xae\xda\xae\xf4\x0e7\xf8D\xe4~\xfbQ\xd9bX2\xba\xb9\xca\xed\x17\x8dT\xc7e\x8d\xc0\x18\x0bw2\xde`\xec:\xd3\x9a\x1e+\x98)|\xe7uw\xf5\x0c\xcbV\xb9J\xd5\x17,E\x19}\xa6\xca**u\xd1\xf7F\xcb\xf4~\x84\x89\xbd\xf2\xf6\xca\xe5dlLG}\xa4zM\xaa\xf9\xee\x82\xbaP^`y\xf1\x9eb\xcf\xf1k\x80n\x0bI\xb7W\x87\xe3\x0f\xea\x81o\xcb^Z\x95\xf1J\xa2\xc8<\x1b\xad^WB\xdc\'KMBX3\x8d\x1amv\x0c\x13f\xf2O:\x82\xafl{0\x1e\xb7/j\x80\xbf\x92\xb7\xa0g\x1f\xcb\xb4\x07\xa0\x164\x9c\xea!4\xf0\xcb\x9c\xb4f\xce\xda\xf4>vU\xbb\x05\xbd\xba\x97e\xc1\x06:\xa4y\x16\xf2\xf0\xb8\x98h\x9du\x9f\xd0}\x02Gn*\xfc\x0fy\xdb\x13\xc4\x89W<\xeb\xc9\xe9\xdeU$\xcc\xde\xc8o\xa8\xb1\xe3\xe9H\x92\x02\x15]\x03(f\xfa\x8e\x9d\xad\x13fo!z-"}\xb5w\x86\xd8\x11>$1SM\xbd\x07\x9f\xe8T\r4Hh\x12S\xf7B\x98g\xfe;{:=\xa3\xf1\x94S>\xbf)\xcb\xa6FN\xc7\xeeQ\x8b\x88\x1f\xb6\x9d\t\x05\xf8\xc0\xd35\xa8\x10O\xdcs\x95\x99e}W\x1f7D\x13\x8d\xc7\xf7l&e\xd7\xef\xab\xdb$UK\x7f\xf3c50*\xd1\xcd\xcd\xaa\x07%\x18\x1e\xd4)\x8ce\xa1I\xb4\x89x\xff6\xb2I\x18\x15I\xf31OK\xec\x04\xd0\xb6\xaa\xa46\xc12\xf1N\xc0\x92\xc3\xb9/t\x80eTW\x88\x0e\x88Yl\xd9\x8d\xd1\x94H?r\x94\x8f\xa0~8\x88\xd4\x14\xa9\x11\xf5]\xaf\x16\x94\x13\xd0\x9e\xff%\xd1?\x84\xcc\x81\xd0g)^(X_\xcb\x8eJ\xd0\xd4\x17\xb8\xf8K\x17\xec\xf6\x9a\xe5\x16\xd4*\xa9\x97m\x06p\x16\xd0\xc4\x04\x9f\x19\xa9*\xdb\xe4/\xc4\xfaB\x05\x1dci\xdeO\xba\xcb\xe0\x89\xc1\xa1N\xd42\x9aK\xaf\xbd\x86\x8e:\xab\x87\xd8\xdc\x88\xc5N\xf6%\xa8V\x16\xdf\xfe\xee\xc0\x02\xb2LC\x95\xe1\t\xbb\x83}A\xb3;\x89B\xdd\xbb\xc4\x1f\xdf\xcf\xc7\x06\x92\xb6(4\xd6\x97\x99,\xe7<\x05-,e\n\xf1?n\xcb\xb8\xa3k\xf9\x85\xafN\xa7\x11B\xeb\xfb\x9d\xd4\x00}\x7f\xf3\x10\\MeI\x89\xaeQ\x08\x9a\x16\x9b\xf8\x9b\xce\xb7\xf8%-\t\x80&\\\x84:O\xde\xc7\xe6\x83yX\xd5:\xdbBg\xfe-\x1c\xd1\xd4\xa58\x1e\xdb\xf7\x96\x02\xf8U\x8e\xdd\x14\x8e\xef\x1d/\x8eh\xda\x00\xca\xff\xf5\x98J\x9f\xfaf1\x87?KYc\xc5\xc2\xfd@\xf5\xef\x06\xcdO{\xa4\x9d\x9c\x02x\xdc_\xcc\xda\x84\xf55\xa88a\xc1D\xd2O\x1a')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+ from hiddifypanel import Events
19
+
20
+ from .config_enum import ConfigEnum,ConfigCategory
21
+
22
+
23
+
24
+
25
+ class BoolConfig(db.Model, SerializerMixin):
26
+ child_id= db.Column(db.Integer,db.ForeignKey('child.id'), primary_key=True,default=0)
27
+ # category = db.Column(db.String(128), primary_key=True)
28
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True)
29
+ value = db.Column(db.Boolean)
30
+
31
+
32
+ class StrConfig(db.Model, SerializerMixin):
33
+ child_id= db.Column(db.Integer, db.ForeignKey('child.id'), primary_key=True,default=0)
34
+ # category = db.Column(db.String(128), primary_key=True)
35
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True, default=ConfigEnum.admin_secret)
36
+ value = db.Column(db.String(2048))
37
+
38
+
39
+
40
+ def hconfig(key: ConfigEnum,child_id=0):
41
+ value=None
42
+ try:
43
+ str_conf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
44
+ if str_conf:
45
+ value= str_conf.value
46
+ else:
47
+ bool_conf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
48
+ if bool_conf:
49
+ value= bool_conf.value
50
+ else:
51
+ # if key == ConfigEnum.ssfaketls_fakedomain:
52
+ # return hdomain(DomainType.ss_faketls)
53
+ # if key == ConfigEnum.telegram_fakedomain:
54
+ # return hdomain(DomainType.telegram_faketls)
55
+ # if key == ConfigEnum.fake_cdn_domain:
56
+ # return hdomain(DomainType.fake_cdn)
57
+ print(f'{key} not found ')
58
+ except:
59
+ print(f'{key} error!')
60
+ raise
61
+
62
+ return value
63
+
64
+
65
+ def set_hconfig(key: ConfigEnum,value,child_id=0,commit=True):
66
+
67
+ if key.type()==bool:
68
+ dbconf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
69
+ if not dbconf:
70
+ dbconf=BoolConfig(key=key,value=value,child_id=child_id)
71
+ db.session.add(dbconf)
72
+ else:
73
+ dbconf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
74
+ if not dbconf:
75
+ dbconf=StrConfig(key=key,value=value,child_id=child_id)
76
+ db.session.add(dbconf)
77
+ old_v=dbconf.value
78
+ dbconf.value=value
79
+ Events.config_changed.notify(conf=dbconf,old_value=old_v)
80
+ if commit:
81
+ db.session.commit()
82
+
83
+
84
+ def get_hconfigs(child_id=0):
85
+ return {**{u.key: u.value for u in BoolConfig.query.filter(BoolConfig.child_id==child_id).all()},
86
+ **{u.key: u.value for u in StrConfig.query.filter(StrConfig.child_id==child_id).all()},
87
+ # ConfigEnum.telegram_fakedomain:hdomain(DomainType.telegram_faketls),
88
+ # ConfigEnum.ssfaketls_fakedomain:hdomain(DomainType.ss_faketls),
89
+ # ConfigEnum.fake_cdn_domain:hdomain(DomainType.fake_cdn)
90
+ }
91
+
92
+
93
+
94
+ def add_or_update_config(commit=True,child_id=0,override_unique_id=True,**config):
95
+ print(config)
96
+ c = config['key']
97
+ ckey = ConfigEnum(c)
98
+ if c == ConfigEnum.unique_id and not override_unique_id:
99
+ return
100
+
101
+ v = str(config['value']).lower() == "true" if ckey.type()==bool else config['value']
102
+ if ckey in [ConfigEnum.db_version]:
103
+ return
104
+ set_hconfig(ckey, v,child_id,commit=commit)
105
+ #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
106
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product