hiddifypanel 3.0.0.dev64__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,73 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00)\x10\x00\x00\x12\t\x04\x00oGR\xba\xc81\xc2S\x8b\xd3\xd2\xe5\x0f\xde\x84\x88\x00\x00\x00\x00\x00\x00\x00\x00\xda\x02\xe7q\xc1\xce\xb6[\xa7\x9c\x0en\x8fy-$\xcf\x03\xab\x870j\xe7\x8c\xe83$\x17\xc7~\xc4\x84\x03[\xc8`\xda\xcf\x82O\xf2p\xd0\x12@\x18u#\xcf_6\xc7\xc3\xabw\x12\x19\x8b_r\x03\x07i\xa8\x14\x91\xbav\x9ez}\xdd\x13\t\xa9\xaf\x91{\xdb\xd8\xa9\x07$/\x96\xd0T\xc9C\x18<\xdb5\xf09\t\xebm\x06\xa3q\xf48K\x95\xb2"\x08\xb2\xee\xba<T\x08\x85Y[B\xf0\x0e\xf1V\xe0|\t\x9f?\xd3\xc8z\x16A\xa1%\xc9\xc5\x93\x8av\xad\x18Sd\x07\xed\x00Ih\xd2X\xf7u\xa4:Aa\x06\x82j\x11\nz\xd1\xf1o\xf3\x15+\x85k^UV\xe7\x8e(\xa9d\xba\xacX\xcc#\x0c\xddt\x0b\x9aPwS@\x04\xf5\xa0\xde;\xcd\xcf\xfc\xcf\x89\x04\x13\xbb\xaf\nj\xecl\xdf\x0c~\xe7|=N\xec\x9e )\xbb\x1f=\xa3\xd6\x81\xb4\xb3\'\x8b\x84={\xec\x06Yvjxe\x1a\xd8\xa6\xd2\xc7\xc4N\x10\x1a\xc4\x1b\xbf*n\xdc\x85\xbb\xa4jP\x9bN\x86\xc6\xca-4\xd0\xa0x\x11Y\x82\xb4\x7fUF\xb3\xf4\x03\xb9\xab]\xb0\xd5\'\x86\xde|\x0eW\x06\xe1\xdc (\xb4z\xfe\x91\xe1\x13Jy\x13\xbc\xde\xbd\r\x00\x08\xcd\x18`\x83\x80 \xc4\t\x95\xe3\x82\xad\xdc\x8b\xb7\x1d2\xfa\xf2\xect\xcf\xa6\x19\xb5i\x81\x9e\xfagF\x16\x90\'\xe5\xe9w\xd39\xa5<,}N\x04K\x90\xef\x9e\x1c\x81\xaf\xc4:b\x1f;Y\xc9]\xbf\xbbR\x99b\xd52H\xae\xe4\x1a\x1b\xa8(\x13QL&\xf0\xc57\xe7\x1d\x07\xd1\x15~-\x17\n\t][\x9e\xfa\xd5\xf3\xcfb\r\x9d1dR\xf7\xa3\x04\xe5\x02\x1a\xef\x0f?\xf9iJ\xf1}\xdfXP[\xdd\xf0kt\xed\x0e\xf6\xbe\xdce\xbe\x80\x99\\\xfc\x02\x87\x10\x00\xcd=\x86\xf2\x0b\xaa\xd5&dk\xbcd\xbf\x84\xf0\xe4\xb8\xcd\x8dCp\x9eW\xc4\xaa\\\xae\x82\xd13\xb6\x91\xd9\xf9\xe3\xc9l\xc4=\xf0\'\xedB\xb3\tp\xc9k\xbf0\x04\xee\x82\x9fp\xb0\x10 \xe5\x8b\x8e\xe9\x1f\xc1\x8c^q\xf5\xaf\xdfq\xe6\x0e)\xba\xb6\xd68q\xd4\x85\xaav\xff\x99qf\x9b\x8ckW@\xdc\x87?\xb9\xf9k:6\xac0\x046\xf3\xd0*l%\xfa\x9e\x91j\x8dy\xbe\x8a\x93\xd8]h\x02\xee\x85\xc0\xf1\xbfV\xdf\x10\x83\x88\xb3\x02u!\xbfL\x06k\x9a9\xfa\xfca\xdf\t\x1f?\x15\xd0v@\xb7\xebV\xc6eHN!BO\x0b^\xb27\xd0\xd7\x98\xab\xf6\xd8\xe0bCx\xc0`\xaf\xdaA\xffl\xfd\xf6\x84\xf9\x8aJ\xb4\xf1\x84d\xc7\x0b\xc7\x1c\xd8\x84\'9Xu\x7f\x1f=\xb0\x93\x17\xa3[\xb3\n\x92>\x907\xff\xe5\x05\xf147\xbd\xeexf\x08ZooA\xd9U\xc5\xd7\xcf\xbcrv\xc0\xfd\x81\'\x1b=\xe7\xfb\xbd\x07j\xba\x1eO\x17\x07\xbf~\x95\xa3_E9\xda\xbf\xb8\x98\x19\x1f\x8b\xe9\x16\xba\x9d=*\x94B\xa45(b\x03n\xe3\xc8\x10\xf9\x14A\x8a\xbc_\x07\x86cK#A$wqq3\x8afk\x18\x89CE \xfcA\xb1\xd8\xa6o\x9as\xda\xdb\xa0*\x08_1i\xfe\x0f"\xe55A\xe8\xf7\xd5g\xb8\xac*\x18\xc2\x83Vp6\x80\xf1\xae\x8e`\xa4I\xb5e\x98\x87\xa9\x92\xa2eT+\xc2\xed\xc9\x9f\x94=\x12srH\x91\xfc\x05\x1c\xc1;\xa0Y\xf8*m\xe9xUW\x12Mq\x95\x18\x7f }\xcd\x88[3\x98\xed\x94\xf5CX\xdd\x00\xe8\x8ap\x1c-\x91\r\xebh\x8e_\xa4\xc9~}\xf5\x8e\xf2\xbf\xc3\xd9\xbfZde\xe5\x13\xd4\xff@\x1c\x8e\xa9W:\xf0.F\x02\x9a\xcdK\x95\x1f\x0b2VX\x08\xc3\'l#\x80\x13\xc7q0\x97\x92+\xa6 \xcc\x10\x86\x9c\xfd9(\x84\xf4r\x11;\x9d\xc0\xe7\xbb\xc7\xaeU\x9a\xc0\xba"\xee\r0l\xe32t\xc6\xab\xc1\xe5\xdc\xdawaO \xf1}\xf7\xd8y6\xac\xbb:3%\x99\x04\x1c\x89\x02-\x89\x19w\xac\xf2\xc1\xbe\xaf\xaed\x8d\x85\x8c\t\xba:\x19\x89z\x04\xfc\x92\xf5\xc3\xce"\xb07$\xc1y9,\x81x\x94\x14a\'\x035s\x0f!w\xcf\xaf\xca@\xfc\x0f\xdf\xcd\x82\xcbxhQ$\'Nd\xb8\xa8Xs\x0e@\x1b-\xbf\x1a}/dF\xb8\xf6B\xa1\x94\xa0\x9a5\xdaZ\xf7\x83\xb1@\x1cA\xa9TCh\x9a\x95$I\xc0\x8d<\xab\x02;<\x14\xd2]\xe1QR\x8f\x06\xcb\xb3\xf7\x12;\x14,\xe3\x07 \xa4\xa37W;\xbbD\xf6\x1e\xe7\xb5\xc2\x86\xefG\xe07\xe1\xa3&J\xf6M\xa0\xdf\xc9\xadm\xd0\xcd\xcf\x86)\xa3jL\xb6\x18\xbbdF\xac\x8a\x0b\xe4e\xa2_l\xf1\x02\x1c\xc3$\xde/m\xab\xbc\xa9\x8b\x91Y\xd6\xb0\xcce\xb1Q\xd1\x1ftg\x1djk\xaft\x15\xe6\xcc\xcfF\xb2\xecG\xf7P\x8e:\x95\x02\xac\xfc\x86\xae\xf1M\xd6\x0c\xea\xef\x00\xa0\xc8\x10\x9bh:Fg\n}\xd1\x94\x81\x973F\xc3V\x82\xbfI\xdf"\x139\x08\xc4\xf6_\xd2\x835\xa2\x8d\xa5\x9b)I\x90\xa8"T\xed\x12\xc7_\x9e\xd5\xa2\x8f\x83!\xf3K\xf2\xaa\xd2\r\xb0u\x1b\xdfG\x88k|\xf8\x96\xdd\x0e\xd5,H>ap\xd5S\xee\x89\x0bbF\\\x9e\xefh\xaaQAx\xea\xa3\xc0\x80\r.\xed\x13\xdb\xf5\xb3\xcc\xc1[\xbf\x97\xf4\xad]\x88\x97\xf9\xb3\xe7n\xd1\x17P\xc3\x80\x89\xa8_\x01\xca\xf2\xd7\x11\xad\xb2\xeb\xd5E\x1c\x0ck\xd6\xcc\xd5Mg\x88\x99\x12*h\xff\x14\x12\x11\xa3\xdb\xc7\xcb\xdd\xab\x87\x02\xae\xf7h\xef\x86\xfcA,\xf2{\x12\x85\xcf\r\xcf\x1b\xc1\xd7\xc3\xae*\xd7\xfb>i\xd4SO\xb8\xe4\x07jg\xae-\xc5\x1fy\xacU&\x11\x976\xe8\xc0\xf9\xb5n:\xc1zD\xc3K\xe6\xa2\xbf\xed\x99O\x10\x10\xdc\xbe\xb2:+@+a\xa10\x11\xaeD\xf0\xc8\xaaX\x8d\xfe\x9c\x04\xe4s\x83\x99h[#\xe3G\nqz\xda\x85\xeb\x80\x86M,\x94\xe0\xd4\xacA\x14=\x1d\x93*\xf4\xe2zj\x97\xda\x9f\xc7\xcf\xe3n_E$\xf5\xa7\xccL9V\x8dp\xbe\xfeV\x1a\xb1o\xd3\x8f\xd8-\xe0\x08e\xb4\x8c\xb96\xfe\x1a\xa4 K\xf4\x83\x18\xd17K\xab \xde0@\x9c\xe5\xec\n4\x8a\x91\x9d\xbb\x08\xf8\x1f\x9a\xeaJ(c\xb20u\x967e\xf8\xaf]\x180(4\x83\xd8\x94u[\xf7M\xf5\xe1W\xce]g\x1c\xe0\xe8\xc8o\x9a\x1c\xb8\xc5\x11M\xca\xd4\xea5\xba\x86\xb6\xf3a\xeax\xf2\xab\xb3\x8dI\xb6\xfbY\x8f\x0c\xb7Tspy\xdb U\xe7y=to\xcfWU{\xfe\xc0\xb7\xa5\xf3\xd1\x99l\xb2\xb7T)|\x0e\xb0\x9aN\xb7U\x85\xc3SD\x8d2*\xc4\xa4\xf2-\xf1a\xd3\xd4^\xf6\xf7\xa5\x88\xb0cL\xe1]\xc0\xb8\xa98\xa4\xe7SM;0X!3;\x9d\xef8\x99\xf4\x89\xc9\xff\xf9\x9c$3\x96\xe2\xf6*\xdb_\xa9\x13A\xafh\xd3\xd4\xcf\xd7 \x16C\xef~e\xab}\xceB`\xde\xd1\x8a\xb0\x91\r\x9dIE\xca\x96w\x95\xaaM\n\xfe\xc3\xe1<\x94\x98\xc6?{9\xb0\xfe\xbe\x08\x18\x8b\xd598Y4\xe2:\x1c\xf0\x8f\xc3~\xe5:\xd4P\xb2B\x04F\x08S\xaf\xfat>e\xdd\xd9,s\x90{\xca\xac\xd6\x1c\xdbE\xea[D,@\xee\x88M\x86\x01\x1f\xc6\x00\\\xd2\x99\n\x9f?\xe7\xd7\xf5\xc4\xab\xeeb\x01\x86k@\xb1\xed3\x10\xba*Ov\x9bV9S\xef5\xcb\x04\xb9\x14\xef\xf4!\xd86\xf7]\xad\xed\x834\xc9\x97\xccyT1\x1f\x18\xaf"u\x9d\xc5\xba\xee\r\xecPo`^q1\x10W`\xb8\x18-\xe4\xc20\x84(j\x12=\x92}0c\xbd\x9d\x8cA\xe5h\n\x11\x12\xef\x9f\xa8\x076h\xc9\xa5\xd7\xb1\xd6\xcbq\x83c\x81{\xda\xdaS\x1b\x8cFP\'QB\x1a~\xa4t\xc2\x0cd\xc5\xfaWrZ\xf5\xb5\xea\xa0\x1b\xb8S\xa6TJi\xfb\xf2>\xf7\xc8\xc2o\x1f\t\xc7w|6q\x80\xb4\x0f\xb5kR~\xad\x0eG)\xd7\x131\xb1T\xb9\x8b\xbah#\x8bu\x15\xd9\\\x83\x17\xb7\x9a\xf0\xd3\xcbe%\xe1=\x0e\x9a\xee\x9fI\x8c\xfb=j\xb6\xd9\x98\x99w1\x8c\xbf\xeb\xe9\xb8\xf7\xddO\x02\x0bfy\xe3q@\xbes\x08\xdaX\xb2\x16\x93`F%\x04\x0f`\xcb\x03s/\x1d\xe5E\xc4\n\xb9\x8c}\x1c\xa8 \x9b\xa8\xb2w\x8c\x8e\x16St\xdd\n\x0e\xd2\x96\x03"}{\xd9!\xa0k\rfZ\xe0VK,\xd1\xa7\xeb,!\x97\x0f\xa2\xf6\xc4\xc2\xfb\xf7\xdb^\x03\x03\xfb7\x9b\xb3\xa6\x8c\xdb\x92\xbbZ\x93!KG\x8br\xce\x07\x13P\x99>7Y\xd7\x8e\x94u?\xccQ\x8b\r5W\xf0\xf5{@\xd5\xbdk\xadr\xae6\xab\xe0}\xc2P\xe4\xa9LEE\x0b+\x05oQ\xe1\xb5\x13w\xd46\x80\x9f\x10\x9f\xd4<}(\xe3?\xf4\xed2\xb1.\xa0:\xd2\x9a\xd1\xd68\x07\xbc\x19\xdb\xdeh\x86\x81Oq\x8f\xf3\x1d\x95a\xa53\x9c\xe2#\x81\xa5\xfc\xb2\x8b\\\x84\xd8\xc2\xb2\xcf&\xd1\xb9\x04\xd9RT$4\x0evo\x8d\x1c\xe5\xa0\x1b\xb4&\\\xc8\x90\x18\xc0\xb48x\xa6\x89=\xbe\x86th[f\x0b\x864\xe1ae\xb1\xa3\xddl\xcf\t\x9e\xad\x19%\x85\x02\xa6\x80\xf1r\xe3\xc6\tGm{\x00\xc9\xa7\xea\xd1L\xee\xd9\xc6?O\x08\x80\xf1He\xde\xfa\xbe\xf3:\xe6\x0f3Sn\x9b\xd5\xc5\xa2!ESi\xa56\xf1\x0fK\x8e\xb2\xaa\x039=\x96\xb3.\xbd\x9d\xd1+L\x88T\x1c\xcb-~n\xf8\xa9C#XlQe`W\x14d\x9fh\xfb\x1c\x86\xc1\xc4\x96\xf4!\xbd\x9e7s\xc0\\\xad\x86\xd2\xad)\xb8\xf6\x05\xc9\xbcL0!\x08\xcf\xc31\xc7\xb2\xb7\x17\xd8\xe8\x12BLo\xb2S\x1f\x002\xc5\xfe\xed\xcf\x92\x06\xdad\xcf\x87\xeb/\xe7\xdc\xa6em\xf8\xd6\xa4\x91\x80\xc6\xe9\x83r\xec\x98\xf0\xf7\xb2\xf3\xb8D\x1bL1`\xcc\xd5{R\xc5\xb1\xd8ei\xde%\xdc\xcb~\x13f\xd1\xb5\x17j\x92\xfa\x845\xc6Y\xfeA\x86gK\xaf\x04\x11\x18\xf3\xf7\xe3S\x96J\'^\xc4\xec\xee!O\xeb\x1d\x03\xa1o[I~:x\xd4Z\xd6K\x9du\x04cL4\x971\x89\x16k`\x97\xcd\xe0\xb3(\rbL\x9d\x9aJ0O!\xc1\x1a@\x06H<;\x1c3R\xcd\xa8 ]\x03\xf6I\x80\xfa\xbd\xc1u\x17\xe54\xc3n&M\xf9\xc7\x11\xc4\x1f\xcb\xaec,\xfd\xeb\xa7g\xaa\xd5Z\xf9_\xb8\x90\x0e\x05:\xd8\xef\xc2P\xcf\xbe\x81\x03L\xec\xad\xd4\x90\xf3`\xc1\x03\x9d\xa7/F\xf3\xfd\xfeP\xa7\xe4Y \x02\x877h2\xb7\xdd\xb0?og\xb3\x81\x8e\xfdZ\t\x02\xc2\xb3\xe3\x8a\xdcRz\xec\xefQ=\x15Z\x0e\r\x1a\x12o\x02\x83)U\x92\x9b\xd8N\x91\xeb\x8b\xe0\xd1vs\x7f\xe0\xd5[\xd8\x93m\xde\xd6z)\x92\xe4\xbe\xe2\x1fJ\xfdd\xa2\xaf\x8a}\xaa+\xeb)\xac\xa8\xb2\xc8/\xa3=\x9fq\\\xfdJ,\x1e\xcf\xbf\xacW\x8b\xe9\x07\xed\x90\xd5\x91\xe8\n\xe6\x19\xb0\xeb\xe6\xc9\x82\xb5\xdbE\xac-\x15(\x9e\x17A\xc1\x8e\x11)s\xfcq\x8e\xfd2WP%\x7f`[<!#\xa2x\xc8\xde\xc9\x9b\x07\xf2\x1a\x89\xeb\x14-\xe9e\x93\xa5\x80/\xeer%a$\x91\xa3$\xd9\xa0qZ\xfe\x1bc$6\xdb\x96\x9d\xd7\xba\xa3\x8e/\x7f\'\xc3\xd1=Z\x18k\xf7\xb1\xdb\xb4\x1c3\x8b\xbc\xa8\x84\t\xb0\xcf\xddw\xeay\xc0\xec&\x8a\x8e\x11\xb2\xdd\x10\x99\xea\x08\xea~\xbc\x88B+\xad\xc8\xe4&\x0b\xa3\x05j\xb2\xafu\x1ca7\x7f\xff&\xabTI\x17\xc2\x1f\x851v\xbc\x1e\x84\xac\xda\xde\xb4\x96~S\xaa\x9c\xcc\xbb\xe6\x89\x0f\xdd\xc5\xeb\xf4\xf6b\xe2\xe7:\xc7i,Mm#\x16\xbf4\xbbA\x04\x8dC\xdf\xf4Uf\xf8\xe9\xb0\n\x0b\xd3\xad\x01\x83:.\x1et`\xed\x17\x96U\xb5pb\xc0w\x8bf\x97 \xd4\xf9D\x15\x94{X\xb5\x93\xfd\xf7A\x13\xb6\x1a\xb9\x13\xab\xcc\xfd_QD\x162\xa6\xb1*\xbc\x99N%3\xbc\x85Z\xd5\x9ad\xb9Z)\xd7us-c\x18\xcd\xd9\xcc\x83\x86\xccE\x06-\x0c\xb1p\x90:\xce\xbfc,\xc0\x9a\x85\x00\x1e\x9d\xae\x15%\x8d\x85d1\xd8\xda\xf7\xe8\xe8\xbb#G\x16\x01\xec\x18\xb9\xc6\xc4\xe5@f!Z\xc5i\xc0\xc77\xf65\xd2\x8da\xf4\xd8\'\xb1\xf4\xcf\xf2\xb8\xdfh\x8e\x91\xe2\xa2\x8b\xedun\x04}\xfa81\xa2^\xf4\x02\x02\x80+\x14\x1ew\x84\x1fh\xcc\xe0\x92\xc9m\xc7\x90d\xb0\xba\xb5f]\xdd\x0f23\xb0\x93\x96\x0c\xb3\xc8\xbf\xf2\xd5\x96\x9e\xff\xa7\x11\x98l\\X\r/xy\x1e8\x13v\xbdVE\x00\xab\xdf6\xf5\x86\x18\x9c\xf7v[\x93\x8b\x01\xcf\x0e\xbfE\xc0\x89\x84X\xe2_a\x15\xdc>yK,y\xacor\xaaf\x93=\xb9m\x1b\xb7\xc7r\x83\xee\x03\x02\x1f\x17\xe0\xaaVx\x98\x9b\x0cb\x95\xb8|\xbb\xfc\x1fz[k\xb6\xc7\x9c\xdb\xc1?\xd3\t\xd3\x9e\x06\xd8W\xd6\x99$f\xcbf\xf5\xdf\x1a\xeb\x92\xbc\xc9;\xd4k+\x9d\xfe\xb6fi\x10\xb1\n\x18X\xcdf\xf7s\xf7\x9d\x92\xd1\x8c\x15\x0f\xd2\x19\xbd\x87+m\xb7\x8e\xa6\x0ft@k\x85\x1b\xa9\xd3\x04\x86] \xa4\xde\xde\xcda\xec\x84.k\x80\t\xc1\xcc8ADe\xe0\x88\x12\xb4\xd5\x87QO5\xf8B{\xf1Y\xd6`:\xc2;`\xa8\xf89py\x9a?\x93\x7faA?#l\xbc\x0e\xec}d\nZ9\x1c8\xd56\xc4\x06\xff\xce\x1b\xadWE$z\xf8\xcc\xfa~\xfa\xa3\xcd\x05\x86B\x19\x12\xdd^\xb7\x99\x8b&\xf6\xc7\xb0\x86\x0ck_\x167K\'\x0c\xc0\xbc??\xe2\x83\xc6N \x0bl\x08,r\x01\xef/C\xb4\x10(\x91\xd1\xcc\xf5\xc2s\x8dg\xe5\xe2Q\xc6\xbc\x08?\x94\x12$?\x8c\x1cqs\xbe\xda\xa1b\xa0\x83X\x17+a7Kn\xe6\xee\xa4x\xc2L\x8aW4k\xb8\xf685\x80\xcc0\xa2\x08\xf2I\x1e\xf8;\x05\xca\x10\xff\xfaid\x84\x0b\xd2\xe4\xf1\x81\x82\xae\x9d\x18\xb1\xb1\xdeA%7D\xfdA\x87\xfb\xccfG(\xb1\xb60\xd0\xbf\x1f\xe7\xb3\xd8_\xf4\x1e\xd1\xa8g\x06\xb1\xb4G\xeb\xceD\xf6\x96\xd1\x13~\xfc,8"\xd5m\xcc\x95\x12\xffe\xefA\xc0\xc8\xe1\x1f\x822\xb5\xc7\xae\x8dl\xc0\n\xb9\x00GE\x87~\xee9\xad\xb3p\xac\x1a\x8b\x10\xa3V\xe4\xb47\x87\x82y\x01\x16\x8d\xd8\x01\xa8\xcc\x00\x88&W\xb9\xee\xf0\xfb\xbab\xbf\xa3\xb2V\x89\x90\xea\xb9QT|\xaaK"\xb3\xa5Z\xda\xb3\xdc#]\x87CB\x80f$\xa4\xe5\x99\xf4<\x9f\xa2\x82\x8d\xa4<\x86~,\x8e\x11\xa4\x13\x95\x94C\xbd\x93\x8a\xbcWu\xc6;\x9b\x11\x86\x08\x8c\x1bz\x9d\x88\xec\xab\x146Q\xd0\xe3E\xf3q*\x05\x16\xe8jFVG\xc7\xb6\xc2@\x0f\x84\rc8\xa6w\xec\xc4\xaf-\xcd\x95\xcf{\xec\x9b\xfc\xc4-"\xf3\x14\xde<\xc2\x0e\x81.j\xef0\xf0\xbd\xbc\xd3\xc8\xf3t\x90\xa9c\xcb"|\x08R{\xd4\xdb\x94\xd5hx#N\xa5\xa4\xb9\x93!r\x18\xcf\'\xe3\xf0%Q\xb3\xdc\nW\xd2/\xc1w\xeeR\xe0\xbez\xce\x96G\xcec\x1b\xe8\xfa\x97\x12\x1c\xa25\xf41@w\xd2C-E~\x18!\x1e\xcb\xac\xd0\xedH\xcc\xc9\xc5\x1a\x88\xbc\x05Cr\xf2\xad\xb4\xa3fc\xa1\xd3%,\xfd\xc6\xc6\xaclF*\xf8V}\xba\x17O\xd0 Yu\xdc\xc9]-\xc5\x91\x0b4\xd4\xc5\x0f\xacOwZ\xb4\xee\xe7\x99\x9e\xd6\xee`\xb5?h\x94\xc5Xbx\xef)\x9d\n\xdf\r\x89\xa9\x16\xce\xac\xbd\x808C1\x18\x89T\xee\x03\xa4\x7f\xec\xc7\xa1\xf9(Zq0#\x9f\xe2\xfe\xc3&l\xfd\xc1W\xb0\\\xdd\xa2\x14\xe9R\x042g\x08\xc0\x950>c\xadk\n\xc0\xc5\x0b{q\x8f\xc6\xe4^\xe1fi\x95\xe6\xda;\x90\xecw\x19\xd8l$h\xe7#\x8e[\xb4 p\xdcRt>\x84\x8d}6\x84\xdeV\x99\xb7AS6)\tj\x0e\x86i#_jsC\xf0!\xd1Q1\x1cp.8>\xb2\xb0.ppTCA\x1c\x89\x85B\xbc\xca\xd1C\xb7\xf5 \x8d\x90B\\\x08HSC\x1a\x01a\x04\x9b\x11\n\xea7\xa7z<\xa9\xd5\x8b*\xb4\xee)\x84\x92\xd9\xd63n\xc4\xd0\xb0\xd1\xb8\x0cli\xc6\xe9\x80\xfbA\xaa\xf4\x11\xad\xd8(;\xc9D]\x89[\x04\xcf\x81\xb7o\xc2*\x84\x0c\xc6+\xe7\x87\xa7<\x98\xc9&,r\x96\xd1$s_\x9a\xb6^\x0e\xeaZ\xa1N8!\xc8\xadUL\x8ev\'\xae\x0b\x0f\xdbp\xd8\x05\xbf\xf8\x94\xa1@\x05n3\x9f!9=\x88\xa0\xacq\xb1\xfa\x94d:;\x0e\xc9\\\xf9\xc3\xdc')
|
1
|
+
from telebot import types
|
2
|
+
from flask_babelex import gettext as _
|
3
|
+
from flask import current_app as app
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
from . import bot
|
6
|
+
from hiddifypanel.panel.user.user import get_common_data
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" not in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
12
|
+
if uuid:
|
13
|
+
bot.reply_to(message, get_usage_msg(uuid), reply_markup=user_keyboard(uuid))
|
14
|
+
else:
|
15
|
+
bot.reply_to(message,
|
16
|
+
_("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
17
|
+
"Welcome to hiddifybot.\n"
|
18
|
+
"Start by clicking the link on the panel or entering your UUID."))
|
19
|
+
|
20
|
+
|
21
|
+
def user_keyboard(uuid):
|
22
|
+
return types.InlineKeyboardMarkup(
|
23
|
+
keyboard=[
|
24
|
+
[
|
25
|
+
types.InlineKeyboardButton(
|
26
|
+
text="update",
|
27
|
+
callback_data="update_usage " + uuid
|
28
|
+
)
|
29
|
+
]
|
30
|
+
]
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def get_usage_msg(uuid):
|
35
|
+
with app.app_context():
|
36
|
+
|
37
|
+
user_data = get_common_data(uuid, 'multi')
|
38
|
+
|
39
|
+
user = user_data['user']
|
40
|
+
expire_rel = user_data['expire_rel']
|
41
|
+
reset_day = user_data['reset_day']
|
42
|
+
|
43
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
44
|
+
user_link=f"https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/"
|
45
|
+
msg = f"""{_('<a href="%(user_link)s"> %(user)s</a>',user_link=user_link ,user=user.name if user.name != "default" else "")}\n\n"""
|
46
|
+
|
47
|
+
msg += f"""{_('user.home.usage.title')} {round(user.current_usage_GB, 3)}GB <b>{_('user.home.usage.from')}</b> {user.usage_limit_GB}GB {_('user.home.usage.monthly') if user.monthly else ''}\n"""
|
48
|
+
msg += f"""<b>{_('user.home.usage.expire')}</b> {expire_rel}"""
|
49
|
+
|
50
|
+
|
51
|
+
if reset_day < 500:
|
52
|
+
msg += f"""\n<b>{_('Reset Usage Time:')}</b> {reset_day} {_('days')}"""
|
53
|
+
|
54
|
+
msg+=f"""\n\n <a href="{user_link}">Home Link</a> - <a href="https://t.me/{bot.username}?start={user.uuid}">Telegram Bot Link</a>"""
|
55
|
+
return msg
|
56
|
+
|
57
|
+
|
58
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith("update_usage"))
|
59
|
+
def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
|
60
|
+
text = call.data
|
61
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
62
|
+
|
63
|
+
if uuid:
|
64
|
+
try:
|
65
|
+
new_text = get_usage_msg(uuid)
|
66
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,
|
67
|
+
reply_markup=user_keyboard(uuid))
|
68
|
+
bot.answer_callback_query(call.id, text='Updated', show_alert=False, cache_time=1)
|
69
|
+
except Exception as e:
|
70
|
+
print(e)
|
71
|
+
bot.answer_callback_query(call.id, cache_time=1)
|
4
72
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
73
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
from hiddifypanel.panel.commercial.restapi import bot,register_bot
|
2
|
+
|
3
|
+
from . import Usage
|
4
|
+
from . import information
|
5
|
+
from . import admin
|
6
|
+
from . import DefaultResponse#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
7
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,122 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe1\x1e\x00\x00\x12\t\x04\x00q\x18\x0e\x11.?\x16\xde\xf9_\x84\xb1\x96N\x8f\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x89N\x95g\x02Luh,\x1d\xb5\n\xce\x8e\x84\xb0\xa1\xfeS\xe6\x17\x8d\xd0\x896E\xcc\xaa\x8dZI\xca-\x02VH%&\x92\xc9\xe8\x0b\x89\xb8i;\xe7\xe3\x8e\xcbO\xeft\x15\x94\x13\x83gI\x06\xf8Z\x15\xec\x0e\xcc\x9f:\x80\xcf\x82\xc2\xb4\xe9\xd9\xa2\t\xc1\x92R\xb5\x1a\xb9\x15I9\xf0QS\xca\x95\xc1K\x8c\xe0bw\x97\xd5\xbeQ"$\xcel\xecI\n\x1f\x99\xf3\xd6\x8c;\xc1\xd5\xc8:PK\xb5\xb6\xccP\xe3\xe4\x91s\xa8+\xb3\x96\x12\x12\xbc\xd1W&\xdc#\xfa8\xe8\xa7~nqf\x9aEg\xee@\xa2\xd5\x96\xb9\x87*G\x8b\x9e\x1f\x9a\xba]\xec\xb1\xd5\x92\xd2\x10\xe4\'S\x92\x8b\xfa\xe0;(^&\x83\x9f}\xd5\t\xca\xd0\xb5\x9d\xf5\x9a]\x01\xc4\xbe\xfe\xf1\x1f\xc1\xa2\xe0$4\x89K#x]\xaa<l\xe7J\x0c\xae\xff\xc7\xcb\x1e(L`+\xd8\xdf\x16\x14\x0c\xad\x97\xe57"\xb6"\xae\x0c\x7fe2t\xea\xba\x87\xe6\xaa\x82|\xddp\xbb\n\x04}\x1d<\xb0\x11D\xb1R\x1f\x7f\xe4\x1e\xdec\x17\xc7\x8c\xa2H8}~\xee\x1bS\x85\xd4j\x92\xa2)\xf2\x95\xe5\xacX\x08V=\xe9f\x0f\x90\'\x9a\xc3z\x7f9\xd2\x88\xf7\xb3\x1b\x877\tr\x80H\x07~V\xcf\x10Rj}Q!\xf2\xd8\xfe8X\xa4\x9e8A\xa6\xd8"\xa9\xd8\x15ws\x1a\x9e\x05\xd0\xdfF\x17\xa6\xe4;\xdf\xfc\x8d\xf1|[\xae\xd6\x17|\xb7\xeb\x164\x07\x8c\x85\x87_qbk\xb7H\x9a\xc9\x89=\xf1\xca:\x9b{\xc8@.\xb0\xf2\xd12\xf8\xcd\x1b\x92E\x9bR\xdd\xb7%\xbb\x00k\x8d\xf8hy*A\x19\xc9\x956\xee\x85\xc4\xe7\x02<\xd8\x9d\xf9\xcb<\x849N\x80\x0bR}\xa2\xfb34\'\xc6?\xcf\xbd\xa8\xde\xe7\x19\x10S\xc5\xbc\xa1S%@\xa1`1\xc0\xda\x13\xd0=\xa1\xd9\xbf"\xc0\x13g\xed\x92\xf0\xb3}1\x90\x92\xe3B\xa0\x17\xe4\xa9\xfc9\x06\xb91\xe8\x82\xfe\x0e\x8c\xf6\xcc\\\n\xf9\x94\xfe\x97\xe5\x9c\xd1u6\xfbB\x16\x9f\xf6\x99\x86S\xc17\xf2Q\x93\x90N\xafUy\x0b\xe3\xbbU\x17\xbd7DK\x84T)a1@\x11\xe4T\x00\xb1\x80\xb4\xc4d\n\x9dM\x9e/\xdf\xc6~\xecu\xf7\xd1\xae\xc6`\xc5\xd8\xa0\xad\x1e\xbb\xa1\xd3@[\xbc\x0e\xc9\x14\xe6jk\xd1\xf7L\xfc\x02he\r\x9e7\xadn\xdb\xe29\x15.\x84\x8b\x14\xa2t\xc9\xe8Y\xa7\xb3j\x95U\x04\x07\xed X#Zr\xe8hu.i\xba\x901|\xda\x0c\xd4\x9f\xeeW\x8d\x00\xd5\xcc\xe1\xf3\x9e\x06]\x96\x07\x1d&L>Xe\x15\x02y\xbct\xed.[\x1d\xdc\x05\xc7y\xed\x90s\xe7\xb1gO\xdd)3\xe7ww\x84Bv\x0f_\x11\xed)/\xfaY|z8\xb6lF\x90z\xc7\xf6\r\x81j\x9b/\xb6\xff\x94\xdcPq\'\xbd\xdf\x97\xad\xf94k\xa2\x99 @d\x1e\x13XU\t@\x93\x96\xfb\\\xcc\x05\xd7\x9es9t\xaa\x89b\xb1\x8c(\x94\xae5a\xd9\xcd\xca\x14\x15\x15\xab\xc2\xd29\t\x07\x1b<\x05T\n\xf1I\x1cz#\x05\x9a\xbb\x01\x97\xe5\xd8\xb2\xc0\x9eaJ\xb1RJ\xe0f\x8d\xf4\xaa\x8b\xbf\x8b\xe4\xe6\xaa\xfb\xec7\xf7\x0b\x1c\xd4\\O\xf9\t\x94\x87\xa7\x9co\x92\xaeVG\xa1\xe3O6\x92\x12\xf4U\xc9\xd4\x9a\xe0\x8c\xa4;b\xaf>\x11\xea\xdcV\xb5\\\x00E\x82*\xb9{\xfd/\xc8\x1cht\xc9V\xe7Zx\xdf\xf9\xf6\xd2\x96\x82\x1a\xc7\xa2\xe7,\x00\xf1r\x89\xa1\xd9\x97j\xf3v\t\x91#\xdcr\x92!\x99\xf4 \xe7\x90\xa7\xaf\xd9!\xb8\t\xc6\xc2i\xfa\x14{EI\x1e\xea\xf7%X\x0b\x07@xc2\x0b\x97\t\xdc\xd4(\xef\x03B\xb6\xd9\xfb#\x91F=g\xc7\x93{\xe8\xd0\xa2\xd5\x0fA\xfc\xd2\xec%_<\x84\x89hSw \x0b\x19[|b\x00\x03\x9fI)\xed\xd4\xb2p\xa1\xcd\xbe\x91P\xf9\xc5b\x0e*\xe1\x85\xb8\xba\x92\xb7u\xa4\xb6\xa2(Q3\xc2\x82\x9f\xf3\x15\xdf!\x10\xdas{\xc3T\x15\xec\x95\xb8\x9b_\xb0\x7fq\xde\x01\x9c+mG\xc8\xd4\xd7\x80\x93\x1a\xe4\xb6US\xc6\x7f\xd8ONQ\xcdO\x9e]Y\xcc6.\xeb\xd0\xfcJ\x93\x81\x03\x95\xcc\x85\xeb\xdc\x0e\xd3\xddUd\xb7\x16>\x01326Y\xf1%\x9a\x04\xb5\x82\x84i2(\x19\xe8\xb00\x13\\\xbb\xef\xe8\xd7\xd8\x1d\xa6\x84\xc0\xd6\xbf\xb2\xe3\x9f\x05S\xd4\x8f\xed\xa8H\xd4\x17J\x800\xe6\x05h\xed\xfa\x1cp\xb7*\x98\xf8\xcaO\xd2\x17\x13\xe2LUf.g\x9c\xb6p\xccL\xa3\x7f(\xf7\xb8\x11nn\xb9\xe3B^\xcevo\xa3\x85\xbb{S\x98\x0e\xd2\xbf\x00G/\xdd\x08\xfd\x8d\\\x0f\x88\xad\x07\xce\r\x92\xe8U]\x85\xee\x1cVQ\x05+\x95\xd8B\x03\x8c#\x02\x89\xce\xc8\xc5\xcc\xb2\xc7\x93\x99\xe8\x1b\xf8\xee2\xdc$z\xbf]\x8a\xa0s\xe2Y&\xf6\xd3-\xc4\x17\x02)\xde\x96@f\xa2\xce\x88\x99g\x83`\xdc\xe5l\x0cz\xa3\x12K=%{\xdc\x05Z\x01\x1b\xb2\xd6#bs\x9d\x99\xc5\xe2\x9d\xf2\x1c\xaa[#sJL\x07\xd9\x96\xd4\xd8\xd2E\xa4\xb76`.\x00o\x84\xcd\xc8\xb0:\x89\xe1\xef\xe0G\xce\xc7f3\xce\xbe6\x0f\xc3\xa6\xd40\xbc&\xb6\xd7/2\x14\x86.\xa5\xe5\xc2:\xca\xfd\xfe\xa0\xed\x04=,\xa2\x1bj\x18\xb1\x86\xd0C\x19I\x80;\xc8\xae\x91\xcc^f\xdcU\xb5\x0er\xe8\xfc\x8fwA*\xc7\x16\xb9s\x97\x9c\xea\x08\xaa1\xae\xc6c\xad\xb2\x1b\xf1\x8c\xea=7\xaa\x8c*\xe0\xb5\x13%ET~\x1d3>Y7x0L\xe1\x1d\x92\xdbO\xbcH!J\x91\xa1<4.q_\x84\xc2|\x1bH\xed\xd0w\'\xee\xd2y4\x8e_s\xa2/\xc4\x06\x9b\xd7\xa3\x8d\xc48\xd2\x05\x89\xc7\xaf\xee\xc9\xdc!\xd4\'\x1a/\x16\x81\\\xbeC\x06"\x14\x9eo\xdc\xd5\xf7\x9d\xb8\xed(\xec\xc1\x16\xec\x9f/1\x9eT~\x9c\xfeU\xfc\xaf\t\xcb^\xcf\xfd\xe9\xd8k\xc0c\xa8\x08\xf3\xcf\xfa\x8a\xac\xd5$\xa6 \xb5\x1b\xe8w\x8c\xf3y\xf9"\x8d\x19;\x91\xcd\x0f\tG\xba\x08)\xe2\x8d[\x06\x0fx\xc4\xa3\x89\x18\xbdN\x8f\xf9\xe2\x85U\xa2f\xf0\\\xd9\x15\xf5p\x90QZ\x85\x9b\xa4\xc7@6}VSn\xb9\xf2l>\xd8Y\xe0V\x05.T\xc5\x19\xfc\x12K\xc3J\xe2\x08\x0e\xa4\xf4\xe9\xcc\r\x10\x8e\x14,\x7f\xc8rH-\xb7b\xcf\xedwK\xc5\x93\xd3\x0bO\xb9%FU\xff\x82f\xb0$\xd6T\xbf=\x80"7Z\xbd\x94.\xb2\xc0\xccD\xd4\x1e\x8d\xd3\xff\xf1HV \x97rO\x00\x0f\xa7\xcd(cu\r\xf8\xacR\xcb\xf18>X\xe7\x8e\x16\x8f\x15\xf3N\xe4\xb0TC\x1e\xa9E\x13\x05\x00["\x80F*\xa9+\x85R+\xecn\x9b8\xec\xe1|\xe3\xf2;6\xe2\xc4N/\xc3\xc3\x8bez\x1e\xb6\xbclB"b\x81\x15Z7\xd1hp\x997k\x97C\xf7,Y\x8eY\x9c\xa07q\x9d\xe6\xfc\xd2;V\xe7\xd2\xf2\x00,\xc9=k\x0c\xfbW\x16$*\xcb\xcc\xbf|\xe1(\x9ebR\xfb\xedC \xb8\xce\x90\xe1\xbc\x0b\xef*\xe7|\x0e\x9d\x8d\xf3\x02\xb7`\xf2\xe8\x99I\x16\xffTE/3\x90\x01g\xf2\xf9\xa9\x13\xb5\x87\xa3\x04\x87\xca\xfal\x11sg\xc0\xa8j\xa9\xfd\x8cit\x08\tJ\xd1m\xfc\xbfk!$\x00JP\x91\x96\xc1\x14I1\x07\x15\\\xfc\x8a\x1a\xc3\xa5\xb8\x86\xca\xf46\xe6\xa5\xcb4\x9b\xac\x87\xf8\xabl\x17_-%\xa9\xe1\xa4x\xb8\xf6g\xc9\xc7\x87\xa59D\x18\xc1\x02\xdcX\xb9<\xe8\xc1\x8c\n\x8d\xcc\x98\x864\xdf\x99[p+\xc6\xebW4\x9c\x94\x7f\xba8\xef\x84\xca\n=b\xe3\xf3\xb7\xcb{(t~=\x175\xde\x84c\xb6\xc7Hz<\xa7\xd8\x1b\xfb\xd1T&Z\n\xb4\xd0F-\x0e\xd7\xc5~\x9b\x13\x1b\x04\x1dpl\xab\x87\x1f\x1b\x01Z\x0e\x8c\xb0<\x17\x90\x81\xc7\xb1\x9c\xb7L\xbd?O\x8b\xf9\xd0\xdf\xd3X\xe6\x83#\x8c\xb4V\xdd\x9dE\xe4\xcf\xe3\x12\xbd\xda\xf3\xa5\xdc\xa1\xafJ\xfc\x07\xcaV]\x04\xa6\xf8\xac\xa8\xd9\x01\xafM\x81\xd3\x91\xa6\x0b\x1c3(\x1d\x97\xe9\x06\xd7E\xfe\xb0\xf4\x1f\x1e\x16\xed]T\x8f\xe7\xe4\xe8\x10\xcf9\xa5#\xab\xbc{\xaa"\xb1\xe7Q\xaa\xacU\xd9l\x01\x90\xc6\x86+\'gl\xe7\x9d\x9f\x1d\xb5.%\x9aG\xccvP\\4/\xf7\x0eG\xc4\x17\xe5{@\xd6\xf0\x91\xc3\xa6\x9f\x85\tG\xd4\x96]\xf7\xce\xfe\x9b\x16\x03\x07\x02\xbf\xe7rp\xfd\xf5?eB\xa0\xb5g>\x041\xfc,\x8f\xf7>;\xd8\x8d\xb7\x90\x14_Y\x93\xf3L\xe3\xfcNW\x91\xe2j{>\x1e\xf2\xa35\x9c\xa3\xe4y\xbf\xf4\x91|V\xab\xa8t\x95\x03\xd2)\xd9B\x1e\no\xf6\x9f\x11\x97+p\x1b;\x07\xac\xfe\xf0\x9ew\xc9~\x16^3\x14\xef\xe6kxTT\xf0\xe9\xb4Sg\x8b \x08\xf8,#T\x06\x1c\xb1\x80\x84t\x9d\xf0\x9e!r\x03=\xd4P\x10f\x86\xadx\xcb\xd93\x11D\xc2\xb4\x9d\xb5!\x0c:;\x92=.\xb9\xb0\xe8\x1aO\xaajq\x06N\x1fqT|\x8f\xd0\xe7>\x05\xf4\xeb\x83\x8e\xb0\x0e\xefMI\xcc~v\x01\x99w\xb1\xee\xce2\xbf{\x10\xb3\xfc\xca\xadf\xc6\xaa\x9b\xe5\x06\xf8\x14Vf|\xb9\x92u3\x9e9\xde\x9f\xde.\x87\xd9p\xf4\xe2\x9d\xa9\xefd\x12%\xfdw\xdc\xe0}\x1ab?<(\xfau\xa3"\t\x9fmd\xcaA\xe5N\x89\xed6\xd6\x05p\x06r\xbc\xf5l=\xc0t\xb3\xb4W\x15\x18_.\xb0\xca\r\xfa\xa3s^\x12D\x07\x7f\x81\x81/o(\x83\xdf\x98Lq\xd8\x0e\x97\xa8\xbf_\n _\xcc\xdc\x12\xb2\xd4oS_\x8c\xa5\x8e\x08\x1f\x94\x8f"$\t\xff\xb8\x99Y\xe5\xbb\xddu\xf1\xf7\xd7\xb2X~4\xee\xa6\xc3\xb7f\xcc\xf4\x9f7\xa0\xdf\xc8\xc2P\xff^\x98\x97\xc3\xfbT\x87\x92\x1b\xab\x04\xf0\xbe\xf54\x7f\xe4=\xec\xeb\xb1\xb0\xea\xad\xee\nv\x0e\xf5\x19Io\xc0\x01\xe4wwr(\xd86d\x85\xa0Q\xaf\xe5\x93\xeb\x863\xd79\xdc7\xd0\xf6\xda\x15\xad\xb1\x11\xcbJ(\xa6\xd2\xf7\xf4\x19\x15\x08%Ci\x96\xea\x8d\xcc\xbf\xff\xd5\xf1\x04k\x0f\xe2F\xb3\xde3\x9c\xb3\xb7f\r\x13N\xa4ck\x14\xf9\xff\xcc\x89\xb2\xcbJo~\xfb5\x14Vz\xf6\xba\x8e\xbb3\x01\xee\xf4u}\xed\x8b\x14\xf2\x11\x15\xefK\x92\xc6<\xac\x13Wm\x9b\xde\xa6e\x0c\xf8\xd6\xb4\xa9\xbaa\x10\x93\xce\xe1\xdc\x84`\xbbI*q\xac\xd1\xa2\xb7\x90{\x18l\x13\x1f!\xeb\xdc\xef<\xae\xf8\tru\xbd?\xc2Gk\xd40\xd9\x99\x9d$\xdfc\x10\xca\xd0HD\xb3\x9a\x15\x9e\x9c\xd0\x0f\xfd,\xd3\t\xd9\xf0\x10\xf7\xf2\xd68\xcc\xa1\xa7,l:c2\x00\xa7\x0e\x1aX\xb2\xfa^\xb2\xba\xac\xbb\x9b\xa8\xa0\xe4\xef\xcbD\xa4\xb3\xa5~\xdd[\xb0`\x81\xd5\xec<a\x07\x8a4\xec\x98\xb4`\xdeQ\xd9\xd9\xec\xbe\xc9\x8c\\\xbdG\x14!\xcc,\x82\xaaF\x1b\xed\xcce8?\x91\xcb%\x1ea\r\xe6\xa1ta\xdaG\xec\x8aR\xfd\x1b\xbd"\xdaq^o\r\x10\xd0\xc8\xc4\xa60\xfd\xb5r\x93\xd8!T\xa9\xc2H\xbf\xae&nc\'\t\x82Z\xd4\x1b\x14\xd2iU\x1c\x97\xb2-\xb1\xee\xe1\xb9\x9fp\x95\x0b \xb9Q;\x19=_^\xffl\x8b\x1b\xb1^\xb2\x0c!\xedKD\xc4\xf4\xda\'\x92\x80gP\xac\x1b\x91\xdb&\xd3\xe0\xb8\x05P\xfe\xc4\x9b\xa8H"\x87\x1c(\x9d\xabV\n$\'Z;L\xe7C\x0f\xcf\xba\x13\xc3\xa6\xe2G\x12C\xe7R\xf1\xa4\xedlK\xb64\x9b2\x86\x81(P\xcaQq3Xd\x0e\xc4\xe9\xed\xb0\x0b\xd47\xb3\x9f\x82\xa4;J8\x11[\x06LC\x9b6\x0c\xca\x83\xb7C<\x17\xff\xe6\xcf\xad\xdbk\xa3\xd4,g\x83\xfd\x0e\xceg\xa9\xae\x0f\x18\xd4\xb1Y w\x18u\xd0\xde\x11@$X\x92\x15[~!o\x8bl}\x9f\x02\xde6\xfc\x86\xe2M\xf7X8:}q\xf8\xcc \xf5.\xa1b\xf9\x89\x15\xaePY\xc5\xf0\xb8\xa9\xe7 /y\xae\x17`t\x8a\xbd\x05\x01{Ge\xf7\xf2r)l2\xe0\xa7\x1f\x03\x07\xe5\x10\xe2l\xa6e\'m\xb8W\xb5\xd6\xcb\xeb\xb0\xc7\x90\xc2\x85\xdd\x19\x89$\xe2\xb3\x1a5\xbc)\xb7$\xd9!\xd2q\xfb\x19>\xd6pgE;\xac\xb5\xc1\xfa%\xdd\xb9]\xa7\xc8\x7f\x95\xb4\xe2\x00\xa7x\x82w\xe4R\x0cp\x9ei_\xf2\xd2\xaa\xcb\x05\xf6\x9aFvn\x84\x92]O7\x8e\x9f\xaa\xa4Lr\x05\x82\x8b,\xf7;+\xfc\xfe"\x81.e\xdb\xb64ot\r\xe8w\xc6\x07\x9a\x05nn\x81\x1dig\xf3\xbeU^\xe6J\x0b\xdf8#\x1a\xe4\x19\xa9\x83]\x02f\xab\xadvQ\xf1\xb8\x83\x0b\xd6\x8d\xc6\xc9e$\xbeG\xec\xa6!>\xb4&\xba^?\xa7\xdeq2\x8e\xc4\xc3D1G\xd4<+ \xa5\x10 \x89Z[\x85\x92\x95e&r\x14\xc6GMO5\xf7X\x88\xe8\x84v\xb3\xb6\x03\x93\xf0\n\xe6\xf1\x98\xa1\x17\x85\x14\xea\xe0\xc6\'~\x9b=\xa95A\x1d\xec\xeb9G\x97\xb9\xccK\xa0\x80\n\xedj/\xf2 tN\x80\x10\xb5\xb8\x00\x13\t\x7fe\xb9O\xd1gg\xb8\xc8\xa9a\xd0|]$\xdf\x9e\xf3,S\x964\xce\x87\xf8;\x7fsO\x84\xc39\x1f@\xe1\xa8N\xce\x16\xbcCE\xd3\xf7f\x17g\x82\xc0\tG\xee3\n)[\xd4\xbc\xb6\xad\xe7\xf6(\xd3(\xc0\xca\'\xbb<h|\xabY\xaf\xd3\x8f\x89\xd9N>=\xa2\x1b\xee\xd8}PL\x81\xe1\xd6\x05*\xb7DN\x1b\xe2\xdf\xe5K\xbeYlq\x8a\xd0\t\xb8\xf5\xc2k\xe1RF[\x7f\\\xc9\x94-n\x8a\xc6\xfc\x89\x93\x07\x8c\xeaG\xa9|\x86\x16\x92X\\\xaa\xbe*BrJ\xbbB^\x8a\xfcn\xc7\xe9\'\xb1\xf4\x00P\xb0\x1c\x8a\xdc`\x82\xaeG@\xbe\xb7=t>{\xbd\xfd\x13v%\xe9\xf5\xa2\xa02\x06\xf1\x99\xa4\x1eF\\\xf8,\xc64q%\x160\xb51\x89h\xfb\xcd\xd7\xb9e\x99W\xafO\x08\xf6g]\x7f\x9c] 9\xb4\x8dV7?]}U\tW\xb2\xc2\xc6\x9f\xc9H{`\x1f.l\xfc\xc30\xe1\xa9\x9f\xb1\xe6\x8e:\xe5\xabF\x18\xc0\xc6?\t\x0b\xe2\xec)\xfdN \xb7\x18\xd0\xc7\x8d\xe4\x050a\xaa\xc00\x84\x84\x9f\ng\xfc\xc1_\xa57z\x8dg\xe0\x81][\x0f\x1fcc)`J-\xf8\x95\xd3\x90\xac|Cd\xb1\xc7\xea\xe6q\xafP\xd6 \'\x97\x1c\x07W\x8f\x86\x8c\xe4\xd9\xe7\x12\xc7\xab}\xa6%\xf7\x10b\xe1\xb3\x8cP \xc4Ib\xb8o\x9c\xf4\x11\xf5\xfa\x1f\x86Z\x97\x80\x95?S\xf4\xa2%9"\x19a\xb9h\n\xc6\xa3\xcd\x8b\xd6\xc7_\xbc\xda\xd5\xd2\xebWr$H\x8b\x12\xda\xcc\xcf\xbb*\xea\xb8Z\xcc\x8b\x8b$e \xbd\'\xf5&\x8e\xce\xde\xb3\xc7\xd6T)F\xa1\x9b\xc3\xec\xb8\xdf\x89\xdc1\x03\xa5\xb0UO\xa3_T\xa2\xce\xe4\xaa\x05\xb5\x12\x04\xe8\x12\xf7\x0fI\xe5\x97^JE\xceB\x02\xf7{\xbc\x9dA\x96\xf7\x91\x13\xd6f\xea\xaa\xad` \x93\x08\x1ao9\x96\xfbX\xec\x9fb\xf2\x02U\x9a\xc3@&\xdf\x92?\xd0\xb1\xbe\x0bW\x0e\x07\xbd\xd9\x83\x11lr\x89\xde\xe6\x07\xd0\x0f\xca\xa3\xdeT)\xf1\xd4\x92\x862\xb1\xc0\x16\xd8\x08b\xd8(\x961kz[b\xbe\xe8,\x0b7j<F\xf6l\xe4\xbf\xba\xb5\xb8\xfe\xc6\x9f\xb1p\x80\xbb\x9eG,T~\x02l\x85(\x86\xe1[\x88\xeac \xf1\x88\x84\x13\xa5\x03\te\x98\xf1\xa4=i\xc4\xb1\x8aM\xec\xaf\x93ia\xaf\x82W\x99\x1a\x1fU3\xb1\x12V0\t\xa8\x92ri\xedi\xee\xd0\xb0\x1d\n1\x0e\x98\xc5\x86\xca\xc9h\xddd\x0b4\x80\xa9D\x12\x00\xc0=$\x17\x95\tH\xbd\xa0\xd9IC\xfc\x00\xd0=\x88\xfa\x17\xc3NW\xe3\x1e\xeb\n\xf2\x81{\x10Gq \xfd\x97?b\x06\x02\x9c6-\x90H\xb0\x1c\xefZ0?\x1d\xa9\x81\xdd\xf3\xf7\x1f\xfcD\x11"aQ\xf5&v\x13\\n\x1f1\xbf\x16\xafw5@\xb5\xff\x96\xde\xeb\xd5\xc8\xacY\xdd-\xb5.\xe8\xde\xcbP:\x93\x8e0%Df\'\x97}\x8ea\x15\xfb\xc7\x84\x99\xa7\x83\x0b\xc2\x9f\xe8c\x18\xae\x1a\x04W\xb2\x1a\xcc\xadS%Y0-\x13\xbd\x9dyv$\xdbVN\xc9\x91\xd0\xf9\xe5\xcd"R\x89V\x92\xf8\xba\xb9\x8es1g\xf2\xf2p\xdax\xf4\x91\xd60\xc8\xc91\xd3\x95e\xb3X\x99Y\xf3{\xe8)\x89n\x81p?\xf9\x83\xa7\xbb\x94\xc5Z\x91I\xfb\xe0\xac\x8cl\xcf\xc1\xe0\xda!\x0c \x80\xa7J\xe0\x98\xd1)\xe0j\xfc\xd6b\xef\xb9\x0fh\x02kC\xf5>\x185\xbe*\xce\xbe\x8eK\xaf\x84\xecGS\xc3~\x9f\xca=\xf6\x00\xc41\x9b\xfc\x88E4\xd1\x1e\xf7\x89\x05\xa8-\xa7#?\xc3\xf4\xb4IQ\x94\x06\'\x81\x86\x00\x0b\xcf\xaa\x15i\x8a\x95\x8c\xa3\xf8\x98\xddQ\x89\x95\x0fKk\x8a0Z\x0f\xb0\xf7\x10\xa1\'\xf7\'2\x15\xfd\xca\xce\xf2JK\xef\x18u0\xf5\xd7E\xb3\r0[3jl\xa4\x89\x1b\x93\xfd\x02\xfbd\xfa\xc95\xa7\xf9\xd3\xfc\x86^\xea\xa1O\xde*\x82Xf\xebVX\xdbk\xac86C\x8c{\xcd?\xb2\'\xe2\xcd\x14v*\x81;B4\xf1o\xbcH\xe1\x19\xf4e&\xc2\x8a\x91\xd9!8\x18\x82\x16>\xc8\x8bL\xd3U\xf9\xae,\xee\x98\xf8\xdeH\x00\xf3\xef\x84}\\=\x05P\x98UfwA\x9a{\x02\xb8\xda\xf2\xe9\x8a\x93\x13\xc6\x88]\xba\xb2i\x8b\x1c\x89\xc9j]\xa3\r\xe82\xfa\x82\x8d$\xfd].\xb8\xfa\xd9\xd9%Z\xea\xc1\xb91w\x19\x93\xfe\xfb&\x1a+\xda\xae\xec2KH\xe7\x9c\x00\xee\xbb\xed\xe1*\x80\xa8\xa2&\xe9U\x97\xb6\xeb\xae\xcd"u\xbba\xbe\t\x82\xc4\xbaH\xa4\xfcF\xa0\x14\xf6UP\xaa-\x03\xc1\xcbD\xa9\xbbl<r\xaf\xaf}e\xbb\xbf"\xa4\xc6\xcb\xd8n\xd6\xa8\xfa\xca\x96a\xd8\xd2\xf9\xca\x13}W\xbc\x03.\xb1\xb0Ph\xf8\xb1\xbb\x81\x17\xd0In\nS\x99\x04Qc\x93V\xd6ys\xc7\x8e\x07\xea\x80\xc8\xf4\xb0\x9fg\xfcS\xce.\xab\xfbK+\xd5\x99\xd1\xa7RWVvL\x98V5\xbb\xf7\xfa\xe3\xc5\x02!\xf0\x98/:\x9a\x93\xcf\xd2e\xf6pvw\x96\x9f\xdd\xc1s\x15\x07,$\xd5\x9dy\xc6\rj\x01\x0b5\x19V]y\x18U]B\x17\xea\xe1\xbf\xe2\x0e\x1bkoT\x05lTn\xf2\xc6/\xc1\xb6\xd0@&\xecy\xd4\xc8\xdb\xd7\x0e`Q\x98\x12\x90\xfd\x88D\x85w\x1c\xca~H\xd7\xc4\x96\x9a\xef\xf81\xd5]\x15\xb9a\xd0\xdb\xa8\x0e\x81\xa7q\xfeu\x0e\x85.6\x9c>\xddh\xab\xdd\xbbK\x7f\xc8\x8ev\xb2O\xb6\xd9\xca\x92A\xd5\xe9\xca\x9a\x9c\xea\xb3]\x86<0\x9f\xe6\xc5k\x10\x01%\xd5\xae\xd9\xae\xaa\xff8\xe5J\xf6/G\xbc)\xbb\x8f\xaa\xb0(\x14\xf6/\xb7\xe88\x16\xb7\x14\xf9CD\xe1\r\x0b\x1e\xc8\xc1\xf7\x11z8`8@>\xa2\xf5_\x01\xcau\xc1/\\\x82`\xea\xbe\xc2\xc7k\xea\xd1&\xebvP\xc4\xd7\x94\x1bpT.\x0f\xc2\xa1\xb6\x16\xbe\xf1\x11 d\xe8\xc08\xe3\x1b,\xfd}-\x8d\x12\x9aA9/\x9eo\x16yk\xc8\xd4W\x10,\x9a\xca(\xdcB\x08\xd1\xae\xb7@\x80J\x07\x0b\x9as\xd7\xe7\xc71DE\x08\x059(\xab\xb99O^\x82T9\r\xf0\x17\xeb\xc22\x11\xd3Q\xa9\xc4,1\xb8\xf3\xc1\xca\xcfC\xa9-\xe5\xf1"\xcaiU\x12\xc1\xc7\xef\xa36\x88\xcd\x89\x88Y"8UEr\x93\x9e\xe4\xd9\xf7J\x90\x9f5eQ\x1d\xfe3\xd1\xdaiP\xc4\x0b\xaap\'\xd2ZQ\x92{#\xc8\xc2\xb8#-\x85\x1d||\x1c\x9a\x81\xae\xfade@\x8c+\xee\xf2=&\xb4\xa5\x89\xf2\xc9\x19Q\xb8\xb0\xc0\x13\x15F\xf3@\xe6\xc4\x03\xe1\xa9X\xb4\x16\x9d\xac\x04\xfb\x16L\x05S\x9d \xba\xf5\x06\xdc\x86\xb3r;.d\xdbE\xbd\xb5\xae\xdbA\x13\xf8};\xa3,\x03\xcb\xbe~\xe9y>\xcf\x86Cy\x82\x8a\xea\xc6\xae8\xb0\xe9Y\x11\xf0\xb4\xdc|v\xf0[\x8a\x07\x1a\x9aAp\x8fQp?\\\xe2\x8f\xf6oG\xbc\xe3f\x7fq\xa4\x84d>\x96\xff\xd8\xc4\xa2\xa1\x89i\xe0\xf7\x9d\xe2\'\xff\x16\x0e\xad\x00\x9fm\x10L\x9d\xb2\x03n\xe4\xfb@n:\x8c\x82\xf8\xa9\xef\x96\xf4\x03\x96~\xad(\\\xe7\xb5\xfc\x9e\xcd\xc6\xe1\xf6\xfd\x94\x90d\x12C\x06\x08u\xc8\xfd\xa1\xbc \xe5;\x8f\xbe\xad\xd0\x1e\x977\x00g\x8fB\x04\x0fN\x9f2\xec\x92\xe1\xc0\xf4\xf8\xbf\xe9g\xb4\x11\x1c\xe3\xff\xdc=\xc2\x05\x19_\x1a\xb6\x86\xf2\x81s\xd280\rP8\x95\xa7~\xb6\xd5\xeek\x14\xc8K\x81\xc6\x0f\xb4\xf9\xb3#\xe7\x16\x92\xb0\rX\x87B\xb8%\xf9\xeex\xb1p#8k\x0f\xc5\xf3\x91\xfel\xc3=\x82\x82\x14\x07\x18}\x17f\x15~%j}CP\xb4\x15\x1a_7\xdf\xda\xfa\xb8\xb1\x1c\x13\x8d\xb0\xef\x9a\xc79\xbc\x80\xf7\x8c\xae\x00\xe0o\xffS\xc0!P7{\x88\xfc\xa9_\xc8\xca\x90|\xc0\x12\x91;\x85zb\xc8\xf3q\x81e;\'HN\x1b\x81\xc5:\xd0\xbcZ(U\x9c,cYXW\x9a*8\xf1\xa0\xbdsw\xfcS\x89\xa7~\x17\xb9`\xc6\xf7v\xdc\x85@: @\xc1\\\x06\x9f\xd2D?\xb5D\xf6\x9c_\n\xa5\xd9Y\x87\xbeZ\xedhk\xc9\xc9\x19Ueg8\x88\xb1X\rN\xb7\x02\xce\xd7\xb9\xf7\xc1d7\t\x0b\xdcp\xef\x96\xe5\x16\x96\xeb\xb1\xfe\xa3\xe9i#\xac\x8e\xa5\xf0[\x84\xee\xd1\xc7\x98\x95\xd4\x0e\xc6\x04(4\x03\xb2ql&\x05k\xf1J\xd4\xae\xd9\xa9,\x83yJ\xcc\x8c\x8fC\n\x85\x99\x95<\x06]#,m]\xe7\x0e\xdc\x8akK\xe9\x11\x04\xd2%\x95\xd0\xf9\xdcW\xbf\xefAZo9&M\'\x13\x91v\xac\x7f\x8bt\xd2\xf0\x87w\x80\x819\xebw#\x99\xda\xfeZ:S\xc3\x06<\xca\x08]F\xe0<\x1a\xe23.\xd8\xc2o\xe9#\x98\xde6\x84\x17\xa8B\xf6h\xaaV[=\xd2$p!\xcf\x08\xe1\x02]\x8cPR\xf8n\x94\x8a\x03\r\x04\xe1$^\xd8Y\xfc\x1beC\xc30M*\x90\xc5f\x0cQ\x8f\x80GA\x01!\x1d\xe5\xee\x15c\n\x7f\x88mk\xbe\xa9cE\x1e\xd4}Z\x13v\xaaS\r\xfdF\x9f}\xc8\xe9\x83\xe8\x8fp\xf8\x03\xf9X\xf7\x1a\xac\xa8\x1a\x0e\xb8o\x99\xc3j\x10\xb3\x82\xf5\xe9\xab\xeb\x8b\x97\x19A\x81\x8a\xde0\xe1Q(\x1d"R\xb43\xde\xb9\x07\x17B\x8ab\x9b\xb0*\xf5b\xd0E\xe0b\x84U\x1fEM#:\x9fL\xce\x02\xe6\xc2y\x19\x9cs\x00~%\x99|\x8f\xc5-\r\x08\xebz\xde.L\x14\x03s\xda6\xb5g\xca\xb3s\xf7\x9a\x81\xdfR\xb9\xaa\xde_\xb8\x7f\xb6\xb7\xdc\xe3H\x9a>\xf2\x9a\x1d\xb0\xa0\xe7\x01t9\xc4Q\xbc>"n\x92\x87\x83)W\xbe\xac\xda\xac\xdaB\xc7\xdb\x1d\x12\xa4\x0e>\xd9\x83\xe1\xad;\xd0\xda\xc8\xa9\x0b\x08\xe6\xa3x\xc5\xf5\xbdpP\x1e\xe7\xed\x8c\x138h7\xbc5\x14\xee\x9d\xef\x0e\x10;\x04\xfb\xe2-]\x03\x11\xa2\xbd\xfa\x08\xa1\x9cx\xc3\xa5\x92\xbeYE\x8b\x17\x99v\r\xe2Nb\x94\x8b}O\xdb\xf9R\x9b\x17\x8d4I=vW\xeev\xad\xc2\xc2\\\xa2`\xc9\xb3\xc2\xb5\x9e\xd7\x11\x14q\xff%\x17)@Z{\xb6\x96.\xce%\x97\xb3\xfa\xb3\xc6\x1ek+\x82\x8d6\\Q\x8bQ\xce9-\xcf\xdc\xb5\xa1\x18\x0b\xed\x1e\x93\xb6{-\xeb\x8a\x9a\xd9\x81\x9a\xcd\x19^\x10\x93x?\xfb5\xa5"\x9c\xe96\xe35\x00-\xbc\xd0\xe1\xd1j\x1f\xa7\xcah\xa1\x96\x03\xdf\xd4\x07\x15X\x84Oy|}\t~\x8a\xbfYt\xe0A\xdb\xa4\xa8L!\xd4\xb5]\x12\xbf\x02\\\x08)]?6\xc2re\x10\xc3\x83i\x8c\x03\x89C\xcf#\xce\xbcMo<T\xd3:z\x11C\x9f<k\x9a\xce\xe5\xbap\x0c\xaa\x87\xc9g\xcf\xcb\xba\xd3\xeaw\x97\xcc\xdc%.\x924\x8e\xdaw\xddw\xa7\x89\x85\x00P\xa1\x92k^\xe6T\xc6`\xbb\x07\xe2\xdc\xb5\x14\xf2\xb3\x98A\x0e\xcb\xed\x11\xd4]\xa6\x9dCP|\xc0\x06\x7fM\x14\xf8\xf8i\x11\x91\xb9\xdc6\xcc\xe8\xec\xe2uQ J\xb2\x05G\x92>\xb2\x02\xda\x12p8\xd6\xb1\xb7@?Z\x95\x017\x1a\x955\x9a\xa9\x9f\xa2\x8e!\x1fhmS\xd3!\x8a\xe8\xfb\xf8\x97\xe5\\\xcfT#Q\xcf)%\xfd\xb4^i?9\xcf\xacu\xc1H\x85\xc3r\x1d.\x86\xdb\xc4|\x99\xc6=\xa8z\xdbo>\xa0J%\xc0\xf1\x02`\x99\xb8\xd8\xfbB*\xa7\x15\xcfz\xdck h)\x92\x8cv\x92Q\xc2s@\xc9\x88\xf7A\xc4\xa5\x17\xf9\x1f\x1dE\xb2Bv\x7fA\xb1\x92\xa0\x8dM4\xb2\x8b\xa3\xa8>\x7fV\nE\xc1Z\xab\x01\xfb<\xef\x9c\xa3\xcc\xfb]_\xc2\xf7et\x19Ab\x87\x8d\x9dBL\xca\xdb\xfd\x04\xd68`K\xc9\xe7\x83\xa5\xd0\xd3k\xf9\xf2\xc9\x14\x04\xed\xb9\xabT\t H\xe0\xf8\xe6\x18\x9c\xccL\xcb\tf\xa4y\x10\xef\xb4&\x07\x17a\xb62\x17J\x9c\xc3\xf7\xed\x13\x85\xb7\xa4\x1b\xc1P\\\x7f\xafq\x9fnz\x9a\xd5\xb4\n8T\x8c\xb5\x9a:\x1e\xe2N\xd5A\xeex\x94)!\xfe\x8b\x81\xd8\xffIm\xab\xaa\xcd\x8c\xd0\xe9.\xcci\xbd,\xcd5^\xcb\xc8"O\x11\x12\t\xf7\x9a\x9d\xf0C\xe8\'\x12V\x8f\x1d\t\x17"\xcdh\x19\xc81\x81\xfc\xe2O\xe7%B\xbd}\xd6\xf3g\xa3;\xef#\xca\xa7/H\xd3\x1e\xc7g\x83t\x932K;\xdd*\x17\x06\x90\xa7\x05\xe8Hy\x077\xf5\'\xf1\x00Z\'\xaa\x9f\x0e5\xddk\xc0\xd1\xcd\xb9\x97hX\x19\xc5uE\xb9W,\x0bK\xed\xc1\x98\x93\x13O\xe9\x18\xc3S\xbd8\xf8\x94d\xaf~eEl6F$\xe8\xfbIb\xff\xa7\x15\xec\xe6\x13*\xcb\x8aq\xa4^ \x17W=w\xcf\x9e\xd7\xa5\xa6I.*\r[\x82\x8a^\x08%\xb0\xc8\x06\xfb\x16\xf2\x88\xa4\xc9J\xcf\x91\xf8\xcf\xad\xecx\x1c\x9dS.\'\xc9\xd5kfjz4l\xaf9\x9e\xfe\xd4{\x8e\x91\x1f\xfe\x04\x827\xed\x8fy\x80b/tt\xb7\xae>\xe7\x1c_\x0e>\xa7\x1fa\xb5f\x88\xf7\xa9\x11\xa1\x89\xa7\xe0\xa3\xce\xf4\xefK\x16H`pt\\\xf0\xf0\x1ez\x0fYt\x14\xcezPr\x8f\xb1\xd9\x13\xa6-\x9e\x86\xf5|\xd7\xe50?Q\x12d\x90\xc9[\xca\xe2\xb6f\x060k\xb1z\xa8\x95LJ\xeav\x17\x81\x0b\x11#\xafwQ\xbf\xda~9\xae\xf1\x83\x99b\x1a:\xcc@M\xb4\xe5\x99:\x1c3L6zuO\xd7T\xeb\xf2\x19@\x0f\xcf\x02m\xd7t7\xc1f}x\x00\xdcj\xd7S\xa2\x06\x8e\x0f\xc2\xa4\x8a\x80v\xac\xa0\x9c\xb5\x11jn\xc3\xb0\x93\xdf\xe7\xdc\xcf\xb6\x87\xf2.\xf1\xe6`m\xd5:\xa9\x8f\x97fQ[!\x18\x02\x11\x10\xfb\xeaq\xc0\r,\xb3\xc1\xb1\x0cf\x8d\x05\xb4\xcc]\xf0\x93\xc0\r\x9eep8\x1e\x19j\xd4\xac~\xcf\xc0jeGfAmh\xaa#\xb3o\xef]K\xabH\x97\x0b\xc3\xf3\xe8o\xff]\xc9\xb0\x12\x95\x7f\xc2\x9e\x7fG\xf6\xd7\xf0\x8dF4nf|\xa3\x0f\xee\xa4\x92\xaa\xc8\x15\x1c\x07\xf9\xd8\xcc\t}\xf7`\x7f-\xf1\x02\xe5\rO\x0c]\xac\n\xeb!V9#{\xf4\xe2s{\'\xd9\xd1\x99I\xf0\xcat\xbdz\x83\xe0D\xdd\xa1\x03\xcc\xbc\x0bE\xa9\xfd\x9f\x7f\x99\xa5k\xa4\xd7\xc7x\x8b\xc1\x9a\xfe\xa7\xe2\xcd\xa1\xc3\x1f\x96\xe4yk\xb8s\xab\x04`\xb5r\x90\xe9[$@5\xfd\x86\x93\xfc0G#\xd82\xd9\xbbl\xb7^\x1a\xf2\xa7\x02\xb6\xb0+ct\xaf\x17\xa3H\xc7\xa8\xdd\xdc\xa2\x89\xf4\xd1\xb9\x07\x0c\x81m\x17\x13\xda\xb6\x97\xfa \xb7\x12\xd9\x9aP\x89\x15e\xb2\x1bC\x17\xad\xde\xa8\xb3\xe6\\\x91E\x7f\x1fP)?f\xe4\xbe!mD\x10\xc9\xde\x899t\xc3Bm\x93,\xc6\xa2]\x97^\xe9\x8c\xc6\x9f"\x1a\x95CSDq;\xbf)P\xc0\x94Y\x152C\xc3\x95\xb5q\xf1\x8ai\x0eUf[\xc8n\xa7^\x93]\xb0\xbc\xa6\xb9\xde\xbdo\x8c:5b\x8e\x01s\xa2\xd6\x98\xc6\xe7\xa7B# k\xe2f\xa3\x9e\xef\x85\x1erFu\x85K\x93\x96Mu\x14\xc4\xc5A\x06L\x8a\xd43\x13\xaf,\xef\xb9\xfd\xc9\x0e\x1dz\x88\xa4f>)H\xa7\xc7_~%\x8e\n\x8f\xb8\xdd\x80\xe1\x8bsB\'s\xe10\xc9V~\x1d>\xec`\xb9U^>C\xb5f\xf5\x1c\x06\x99\xd8\xaa\x8e\x99\xeb\xf0\xd0\x08`\xba\x13\xf4\x91c\xd6:\xa4Q\x8e\x9c>\xa43;;\xb3\xc9\xce\xc8Y\x0f\xea#\x1c\xdd\x90L\x00Bg\x87\x1f\xd6<v\xdd\xc6"|\xe6\xcc#\xe1\xf3\x1a\xe8\xc7\xb4\xda4\x08\xa45\x1d\xbeG\x11\x12yX\x06>}\x94\xf5/\x1f\xb5\xa3`\x0f\x8fV\x92c&s\xa0\xcf\xf1c\xb3eX~8k&%O\x1d\xc5$\xb0W\x10(*6\xfc\x021\xdc\xe4\x97\xbekx\xe7\xecAz[\xa4=)\xd4\xa3(\x95>\x01;\x9f\xa9\x8cE\xc8\xf1_\x90\xa7\x05\xc8+g\x8b"\t>\x02\'n\xe7-\xac\xd1\xcd\xb9-\x05P7\xe1\xe9\xd8\xb29\xc8N+i\xbf\x98O\xa2)\n\x16h\x8b\x87\x8f\xd3@Q\xcc\x1b\xa1i\xb5N,\xe0\xaa\xc2d\x8fa\x0e\xe3\x9eA\x05 X)\x9dG\xd6\xa8?M\x90}\xb3V?\xf0:\x82W\xc3\x91\x1b\xee&1t\xe9\x08P\xdc\xe8O\x0bl-\x89\xd6\xab84<\xf9>U\x8f\x1eR(a4,\x11\x96\xfdWI\xcb}\x84ph\xc6\x9a\x82;$\x9fbc\x05S\xcaXy\x0fW\xdc\xf5wI\xee\xc6\xa0\xe9)\xea\xed\x0b\xdeo\x8d\xc6\xd4\xe8\xedv\xde@\x81c#\x16/-jp\xe4\x87M\x19\xbf\x87w\x81"\x99b\xad\x1c\xd6J\xcd\xd1\xb9\x98\xd6\tr\x0e\x9b7\x1f\x9d\xa2\x84\x80n\x9a\x83\xb4\xd7\xa5Tsk\xb9\x85/\xcel\t@\x16\x1dj\x9b)l\xba\x07\xa1\xa2\xee8\x02\xa5\x15\x80\x08\xd1\xfd\x0c\xd3\xfc\x8c\xc4~k\x8du\xd9\t\x8a7E\xe0o&\xd5z\x18F\x91\xce\x04\xd9\xe8a\xe6\xdaE\xa52\xb6\x00\x87KITdA\x7fS[\xb3rS\xe3Y\xf5\x84\x07\xad\x96\xb7\xcd&\x16@mb\x1c\xac\xb4O\xcd2\x87\xe7\x94Q\xe8\xe7\x11\xa4\x9d\xc3C\xc7ES\x95\x163\x94hL\xd8*P\xd4z\xb1w\x96\xe0)\xba\xa1\x13\xf7\xe5\xffb\xbd\xe1\x97\xe7\xe4\xc1\x10\xf5a\x1bF\r\x192\xf8\x9eB\\x\xb0+\xbc\xb7\xc8r\x9b\x99\x1e`\xbf%r\xaf\x93\xb8\x19\xb4\xea\xd4\xcf\x93\xd0\xc2\xe2\xdb\xc7\xed\xd9\xed]\xed\xca3\x88\x9f\xca\x8b3\xa0\x95\xf4\x1e}pm\xcf}Rq6\xd0[\xca\x1e\x8e\x0b\xafs6\xb7\xa1\xf1L9B}\x1f\x98\x10H4\xa8p\xdd+\xe5\xd9\xd4.\xb4<\xaeZ\x82"\xf7&\xc6o\xa1[\xee\x7f]\xeb\xde\xa2E4\x9b\xc9\x10 xc\xd5\x87\xec\xdd\x85%\x10\x92P\xd0\xf2\xb0f\x14\x1b\x1aVj\x93T)@\xaa\xe0K\xdf\x19\x12ix\x1d\xc0\xd8\xfc\x0c\x0b*\x17\r\xfc\xc0\x08\x17[\xdc\xd0[\x869\xcelh\x86\r\x06\xce\xfbl^\xf7!\xd3?\xce\xafS1!\x8dp\xd0\xf5O&\x904a\xaf\x1e\xca\x81v\xaf\xc6H\x85\x91n\xae\xa4\x17S\x06\xc6+\xc9\xd2\xc5\xc4\xc3\xa2\x10ch\xf8\xc9D\x91\xc1\xc51"3\xc8\x18\x8f\xf7L&\x08\xa2\xaac\x90&r;}`\xc6\xb6d+\xef\xd4q\x8b\xf1\xcaU\xf2\xdd\xfd\x80\xfaG\xcaM\xe1F\x8et\xe7o\x04-U\xfd\xe3?\xc2\xcd\x04\xdf_\xacbf\xef{\x0bd1\\\xb9>d\xe2\r\xc1d\xe7N\xc6\xb8 (!\xc5\x8f\x8a\x1f\xbd\xf4\x8eg;\x1c\x9ad\xf6\xb4F6\xad\x10\x97\xbbr\x9cj\x0e(\xa9\xba\x05\xa0Q\xbc\xc7*\x9f')
|
1
|
+
from . import bot
|
2
|
+
|
3
|
+
from telebot import types
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.panel.database import db
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
#print("dddd",text)
|
12
|
+
uuid = text.split()[1].split("_")[1] if len(text.split()) > 1 else None
|
13
|
+
if uuid:
|
14
|
+
if uuid==hconfig(ConfigEnum.admin_secret):
|
15
|
+
start_admin(message)
|
16
|
+
return
|
17
|
+
bot.reply_to(message, "error")
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
def start_admin(message):
|
23
|
+
|
24
|
+
bot.reply_to(message,"Welcome to admin bot. Choose your action",reply_markup=admin_keyboard_main())
|
25
|
+
|
26
|
+
def admin_hash():
|
27
|
+
return hash(hconfig(ConfigEnum.admin_secret))%100000
|
28
|
+
|
29
|
+
|
30
|
+
def admin_keyboard_main():
|
31
|
+
|
32
|
+
return types.InlineKeyboardMarkup(keyboard=[[
|
33
|
+
types.InlineKeyboardButton(
|
34
|
+
text="Create Package",
|
35
|
+
callback_data=f'{admin_hash()}create_package'
|
36
|
+
)
|
37
|
+
]
|
38
|
+
]
|
39
|
+
)
|
40
|
+
|
41
|
+
def admin_keyboard_gig(old_action):
|
42
|
+
def keyboard(gig):
|
43
|
+
return types.InlineKeyboardButton(
|
44
|
+
text=f"{gig} GB",
|
45
|
+
callback_data=f"{old_action} {gig}"
|
46
|
+
)
|
47
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
48
|
+
[keyboard(i) for i in range(1,5)] ,
|
49
|
+
[keyboard(5*i) for i in range(1,5)],
|
50
|
+
[keyboard(50*i) for i in range(1,5)]
|
51
|
+
]
|
52
|
+
)
|
53
|
+
def admin_keyboard_days(old_action):
|
54
|
+
def keyboard(days):
|
55
|
+
return types.InlineKeyboardButton(
|
56
|
+
text=f"{days}",
|
57
|
+
callback_data=f"{old_action} {days}"
|
58
|
+
)
|
59
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
60
|
+
[keyboard(i) for i in range(1,16,3)] ,
|
61
|
+
[keyboard(30*i) for i in range(1,5)]
|
62
|
+
]
|
63
|
+
)
|
64
|
+
def admin_keyboard_count(old_action):
|
65
|
+
def keyboard(count):
|
66
|
+
return types.InlineKeyboardButton(
|
67
|
+
text=f"{count}",
|
68
|
+
callback_data=f"{old_action} {count}"
|
69
|
+
)
|
70
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
71
|
+
[keyboard(i) for i in range(1,5)] ,
|
72
|
+
[keyboard(i*5) for i in range(1,5)],
|
73
|
+
[keyboard(i*50) for i in range(1,5)]
|
74
|
+
]
|
75
|
+
)
|
76
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith(f'{admin_hash()}create_package'))
|
77
|
+
def create_package(call): # <- passes a CallbackQuery type object to your function
|
78
|
+
from . import Usage
|
79
|
+
try:
|
80
|
+
splt=call.data.split(" ")
|
81
|
+
if len(splt)==1:
|
82
|
+
new_text="package size? حجم بسته؟"
|
83
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_gig(call.data))
|
84
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
85
|
+
elif len(splt)==2:
|
86
|
+
new_text="package days? چند روز؟"
|
87
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_days(call.data))
|
88
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
89
|
+
elif len(splt)==3:
|
90
|
+
new_text="How many? چه تعداد؟"
|
91
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_count(call.data))
|
92
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
93
|
+
elif len(splt)==4:
|
94
|
+
gig=int(splt[1])
|
95
|
+
days=int(splt[2])
|
96
|
+
count=int(splt[3])
|
97
|
+
new_text="Wait... لطفا صبر کنید"
|
98
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=None)
|
99
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
100
|
+
for i in range(1,count+1):
|
101
|
+
user=User(package_days=days,usage_limit_GB=gig,name=f"auto {i} {datetime.date.today()}")
|
102
|
+
db.session.add(user)
|
103
|
+
db.session.commit()
|
104
|
+
# bot.send_message(call.message.chat.id,f"Days: {days} Limit: {gig}GB #{i}\n\n https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/",reply_markup=Usage.user_keyboard(user.uuid))
|
105
|
+
bot.send_message(call.message.chat.id,Usage.get_usage_msg(user.uuid),reply_markup=Usage.user_keyboard(user.uuid))
|
106
|
+
|
107
|
+
# db.session.commit()
|
108
|
+
new_text="Finished..."
|
109
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
110
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
111
|
+
hiddify.quick_apply_users()
|
112
|
+
|
113
|
+
except Exception as e:
|
114
|
+
print (e)
|
115
|
+
# import traceback
|
116
|
+
# traceback.print_stack()
|
117
|
+
# new_text=f"Error {e}"
|
118
|
+
# bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
119
|
+
# bot.answer_callback_query(call.id,cache_time =1)
|
120
|
+
|
4
121
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
122
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,125 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xd2\x13\x00\x00\x12\t\x04\x008\x18\x1eD\xdf\xf3\x15\x93\xf1\xf2\xf0\x14o\xf3\x8c\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x88\xaf+\xc1\xf2\xa7z\xc4\x08\xd0\t\xe1W\xc9dXv\x8a`\xfc\xeb\xbf.^:i\x15\x80\x9a\xc5\xc2lqt+\x99\xe6H)S\x9aU\xaf\xed\xa8\xd8\xec\xb6W(\x91\x04\xdb\xbe\xebZ\xbb=\xdb\x18W\x95\x89\xf5E!d\xf2\xb07|\xee\x91\x7f\x99\xec1c6\xefLU\xb1\xc8:\xeb+\xb9\xcf\x8a\x16W\x1f\xdd\xde@U*+\xb1\xf0B\x1dd\xe7T;P1w%\xf0\x9d\xe8\xf3\xb8p\x82\x14\x12\xc1\xcd\xba\xec\xc5\x14\x92\xb3\x9b\x9d\xc2)\xd4\xb3<\r\x99\xad\x00\x1c)\x13\xed?\xd8\'\x15\x97>\x19X\xf6\x83\x0f\x1a\x8f Z\xb6a\xeboS\xb9\xba];\x94\xa5\xee\xa3\xe2\xed\xbc^J[ \xccu\x19\xdb:4\xb4\\\xe8\x04\x83~\xcb\xd6$L\x8cs\xbf\xbc_\xf3!f\xb9\xf4\xbe;\xd7\x16\xcc\xc5\xabGk>\xaa\x1e\xc2y>\x97\xa8mr[\x81-\x1f\x98H\xfd\xa2\xc2\x0f\x87\xd0d\x1fQ!\xa0\xa0\x85\xe9\x96\x9c0\xaa\xcc\xfbC\xf4\xcd\xb0go\xdc\x19\xcf\x1f\xe7\xb0\x03e\'\x97\xc6\xb1\xe8\x03r\xf7\x19Sb`f\xecd\xbdpJWy\x0f\xd4\xb7\x8f%\xcf\xec\x96\xa5^\'\xcdL\xed\x7f\xab\x1f_F\x90\xc4\xd0\xc1?\x9a#\xa4\xf0\xc4-\xe4\xe6\xf4<\xacM\x04\xb3\xafPN\xa2K\xfd\x17\xa2\r\xbdK\xb2\xa2~X\xfcv;M\x89\xcd\xaa\x01ED\xa1\xfe\x8a=\xf8\xe9\xd0T\x05\xa0[\r=\xb0I"X\x82\xb7\xc7\xf0\xaeN$^\x0c\x06\x82\xc4@\xd4\xf5\x8d<\xd5\x15\xfcb\x808\x92A\xa7B\x9d:_\x91\xb36\x13B\xb9\xfd\x01\xc2H^e\xc2%\x9d\xa5\xc12\xe1\x00\xf4\x90j\xae^;\x90\x9c[\x8c\x9a\xc5\xact\xcd\xc4"S\\d\xab\t\xb3\xbd\xbbOe\x92aW\xbc\x02>v/\xd8\xef\x7f\xe4$a\xa8;.\xc18Z\xd5\r\xe2\x01\xa4R\xf0\xa3\x9e\x1bN<U\xec\xc2)\xb6\xa0\xb8\xa3\xde\x98\x18\xe8\x1e\x90r\xb6_x\x1a$\xc1\x7f\xca;\x9e\xb4\xad\xda\xd2\xb4\x04=Z\x89\x8a\x8f*\xc0P\x0b\x1d\xe2\xaa$\x18\x7f\xf6\r\xf8\x0b\x85\x88@\x88cxy\x1b\xca\xb3\xb4\x1a\xf2\x87\x8c\x14n\xf3\xd6\x0bji\xb3\x08\x11\x9f\xc1\x1aN\x06\x0eL\xb7\xfe\xc1J%\x9d\xc2\xccyA4\x85\xa6\xb6g\xe9\xe5V\x13U\x91u>\x19\xde\x96\xa0:\x9a5\xb7\x8e\xe7\xa3(\xd2f\xa1\xf5\xcc"\xf2\xee\xdcXC\x1c\x02_D\xa0\x04\x07v\xb3\xcb\xb3\xbd\xfc\x91\x92\x9ct\xd2\xe6c\'\xff\x00z\xf0\x0b\xdf}\xefh>.\xa2\xd0cg\'\xef\xed\xc3\x95G\xd9\xa4b\x1b\xde\x19\x0e\xc4z\x93\xebk\xf8\xc3=n\xf8\x03m\xf6Q\x0eG\xa4:D\xd21\xf5\xdc\xbdJ<\xc6\x85}$^\xe0\xec\xfe\xe9\x07d\xd8\xc3\xfc\xf0\xc2<&\x88\x9b\xef\x83\x8b\xbbq\xe2\x99{\xef\xf8Z\x85\x16\xf0\x1f\xd48\xf3P\xbf\x9a2EA\xd2\\1)__\xe3a\xfcG<\x08\x8a\xe5Is\x8f6o\xe8\xc0Bq\xd9\xc2\x92\x03@\x1b\xdb\xec_\xef\xa2\xb2\xbd\x1f,\xf6t0D\x0c\xa2j\x97Q3\x9c\xd5\xa7n\xda$ \x18\xec\xe1\xffbf\xcaf\xb5\x92\'\xc8H-\xaf\xc6-\xe0\xc1\xd1\x04\xe5s\xf3\xda\xe0V\xa5\xca3u\xb1h-(E\'\xdctR\x19\x0b"\xb4i\x8b\xb8Q\x01\xdf\xa6\x10!\xa45\x07gq\xe2\xf9\xdb\xd2\xad\xd2\xd1\xc5\xdd\x8dpM\xeeQB\x1eyw7\xe59\xe9\xcfB\xa2eYO\x83\x83\xe3\xe1r\x07\xde\xd7\xbd\xd2\xd8j\x85\xc4\xc8\xd6\xa9r+\xd9M\xe8\x0b\xad\x8f\xd3\x88D*/\xa4%\x83>|yc\xf2\xa1\xcc_\x02A\x8a\xcb\x9f\x8b\xd7)\xb4\x87z\xd7\x1ax\xec\xc0Z\x0c\xa4\xfb\xc1\xea\xad\xfd\xda(\xc6G\x9evst(\x13\xec\xc4\xc3\x82EP\xb8>\xbb\x96\x84\xe0\xd3;\x9c\xdcX\xbfU\xf7\x0fJ\x1d|\xb2\xb5\x998`\xe8\x84\xdf\x8e^\xcd\x06\xbd\x94\x8d\xaf\x19u\xeb\xf4\x12\xa5m\x96\xe1\xaee\x1a\xdb\x02\xff\xf3\x94\xce:\xf2\xbd\xe8\x96y\x92\xc9P\x83\x91\x97\xdbY\xa1\xa0_\x0cL\xf4\xa6\xee\xacp\x8c\xca\x13\xf4\xb1\xb9\xe3\xacEa\x04\x02ET\xbb\x10\xa3\x03\x1a\x8f\x14\x1d\xf4\x0c{c\x8c\xde\xcc\x89\x88\xb6\x86p\xad\xf5*\xd3\xcc\xdajh@\x9c(\xa3 @\xd4b\xb8_\x12\xbfo\xd5\xa4\x82gK\x8c\xef\xa4\x04\xbc\x15\x81\xd9h\x8b\xc20Xr\xe3\xb2\n9>\xb7"\x80#\xd7\x04\xf2b;C\xbd\x19\x86\x1f\xd0\xbd\x17B\x1f\x9d\xf6\x8b\x9b&\x1bh\x02\x82\x15(\xbb\x1e\xcb\x087,\xd1|Q\x0b\xb6Z!\xe9\x1e\xed\x8e_\xce\xa0*\xa0M\xe2\xd2\xd3\xbfX\x0b\xff\x14\xd4 \xacX\x1d@\xec\x16Pn\xab\x91\xd1H#\x88\xe2|b\xb4I\xc2+\x8b\xd2x\xc4J\xba\xa7N\x0c\xca\x88\xa4\x93^9\x1a\xbdZ\x01_\x92\x92\x9fe\x19\xb7\xe2\xef\x10\t=q!\n\xfb\xfd}\x08f8\xe4b\xad\xa5DP\x97\x03M\xa4\x01\x9f-\x1f\x1bl\xd3\x12\xdc(E\xdf\xc7\x11\xd39H\xe6\x12\xf3.\xd1\xe4\xa3\xa8\xa7*\xe4\xd8\x98\xaf\xdd\xc6wkJ\\\xd0\x19\x91\xff\xe6x\x9e\x93M\xf9erG\x17\xa3\x1c\x01\x9c\xd8\xb4\xe7\xad\x9fs\x1e6\xf3\xcb?\xdb\xd7\x8f\x03`\x10\xd68\xb4\xdf8v]\xcaR\xab\xf1n3\xe8"\x1d\xd4\xe2\xb5\xf7\xa5\xcf\xe8\xbc<\xe6\x82\x8b\x86w\xff\x1f\xd5tY\xa7\xf7I@\x1a\x89\xcbU\r=q\rm\xe3n\x0bA\xeb\xb2\xf5\xa6\xe1\xd5M\xeb\xa6\xd2\x01\x16.\xa3F\x8f\xcf\xa6b#\x82\xc6>\xea\xef\xa1\x9d\xc8i\xda\xed"\xb2\xd4S\xd5\xb7F\xa4\xbb0\xa0C\x04\xf0\xfc4\xcf\xd2d\x86x\x1b\xbb_jO\xa5dm\x10`Z\x11\x8f\xe7\xb3_\xa8\x06\x19Xh\xb6\xff\xc0\x96\x13\xb5\xbe\xa17w/\x96\x9a\x9b\xdb\'Xw[\xde\x07\xd2\xe3z\xf2\xf0\xd2\xc2\xf3\x19`\xcdXp\xbe\xe3\xf0\xf0c\xe2\x80\xfc\x98\xe6C\x1b:\xf8\xbf\x15d\x8b\x0fn\xde\t&\xe3\xd7\\\xd0\xf4\x84Q\xd6YI[QS;\x967\x9b\xa7\x0e.\xc1\x8bJ~\xca\x81\xbd\x16y\xf4\xde\x9a\x87@\xca\xb9\x82\x9a9\x8a\x11\x9e\xdd\x12\xed\xbae\xae\x8f=\xd7\r\x89RV\xd2\xa4\x03\x1e\x11\x96\xa6\xe2\x9a4\x9e\xb5D\xe4\'\xef\x88\x08S\x8a<\xc8\x83\xccM\x1eL\x17+\xde\x18\x97w\xfd\xd9\x04\xf3\xc9\xb1;\xbdh%\xc0\xfc\xde\xb07\x1a\x94h\xa1\x8b\xa5\xfaH\xabq\x022\x1e\xe2\xe0\xf1\xdd\xb2\x9c\xcc\xe5\xcb\xbe\xe6\x8b\xafz\xf2\xd1\xba"\xb0BW\x1f\xfdz\x0f\\\xd6a\x97\xb5\x98\xa5L\x94q\xacd\xaen\x86\x99\x9e\xf5\xc1M<(\x1dM\xaeO\xebX\xa9:\x8d\x9fA\xac\xae--\xf1\xb2A\x83\xa9m#R\x98\x84\x04(e}*&\xe0fD\xdd\xdd1\x0e\xfd\x06>&\x8b\x98\xe0{\xd6[SL&n$\xb3\xef"\xd2\xdd\x84\x05e\x00e@>]v\xc3\xccQ\xc3Lh\xba\x8bg\xa9^\xce\xc6\x0e\x0b[[\xa4\xa8|L)\xc0\xa9H\xcfy\xe5\x18\xd7\xb2\x95L1-\xda\xfd\t\x98\xbcB\xcb\xb8\x9f\x1ak\xd3$\xb7\xea\x16\x11\x14\x05\xdc\x87\xb6\x85\x90i*\x9f\x84\x1f\x03\x9c\xce\xd4\xbd\xfc\\\x01\xef\xa6)-\xf75\x80v{\x8c^sM\x01\x83\xab\xe6zA\xaba<$\xcf\xbb\x93\xf2\xbf\xd6uV\xce,8b\xa9\xd0\x9as\x0f>J3@\xe4\x0fv\xc7\xa8\xc8cc\x85\xf1Q\xe0)&\x9aa\x19!\xaf\xccm\x00\x0fc\xf9\xa9`\x9er)\xee\x7f\xff%\xe4y\x1b\\\xab\xe9\xaa]-<\x94\xb5;\xd2\xa09\xc5\xc3\xa2\xdc%B0pqf]\xbe\xab\xf0\x8f\xf4\xbe\x92\x0f\x9c\xa6K\xdcp\x94\xa4\x80\x03@\xfck\xd0t4!eg\x07\xeb\xab\xd8\x06\x85\xe5G@\xc6\x92$\\P\xc2\x14\x05m\x01\xdb\xc1\tMv\n\xb6tK_6\xebs\x91\x0f\x82\x1c"*\x15\x12\xa1!\xdd\xbf\xb44\x06\xcc\xad\xaa\x89(\xbb\xee\xb4\xd1\xc9\xea\xc4\x01S\x19w\x85/\x8a\xb4\xc9!\r\xf6\xac\x08=\xcag\xc8\x95\xf3P\xeft#\x00\xed\xbbb0\xf0\xaeI\xaeC:\x9dq\xa8\x96\xac\x91N\x88\x82d\xc3\x14v\xd1~\xf1$"\xb8i>i\xdd\xab;\xed\xc0\xaf\xc0W\xd9\x95O\x8e\x1c\x04v\x9f\xcds\xaf\xbb\xa7\xd2\x1d\xbf\r\xaf/\x0e\xc0\xf2\xb3\x0e\x1a1b\xe5\xa8\xadqd\x97q\x00\x84\xfe\xb5N} \xa2\xf4_\xa2\x1b/\xea[\xcbF\\\xcb@\xca\xbd\xb7\x13\xea]U[i3c<E\xed"\x87u\xba\x81\xd6\xa9.:\xa39f\xe2\xe7i\xb5\xa6R\x01+\xba\x08\xb1?J\xc6\xf5+\xff\xe9\xbe\xfe<\x81L,\x1aI\x17\xbd\x9c\xe0L\xa3\xe0,p\x06Y1\xe4\xdf\xbc?2\\\x82\xd3a\xb2\x93\\\x8a[w&J\xaf\xbe\x1e\xc2\xa1\x92DGy\xafXx\x8a`\x17\xf4\xc8\x16\x83gs5\xf2\xa8OZ\xc3\xd81\x10\x8fo\xbeg\xc5\x0f\x9cy\x94\xc0\x92\xf9\xc2\xd4I9b+\x15j>#\xa40\x93q\xb8v\xde/i\x08\xb9\x9bN\xf5\xd4\n\xa0\x8dQ\xb5*\xed\xee\xbb\xd6\xdbt!\x91\x10\x9c\x04\x86\xaalVyB\xdeS\xcej\xe30D\xd0\t\xc8p\xdd\x88\xc1P\x00\x1f\xaf\xc1\x9cb\x1dA\x1c\xd0\xa3\xb5\xff\xb9\xd4\x81(\x1f[\xcf\xf7\x0f\x14\xfc\x00\x92\xe9\xd5H\xe5\xec\x9eF\xb0\x08W\xa0J\x87\xac\xf78K\xc6\xf50\xbd\x1b\x7f\xd0-o\x871\xf1\xd3\xf0\xc8\xbe\x03z\x7f\xaf\x12\xab?\xdd\xfc\x85ui:\xce\x1b\\3\xe1\x95\xa0MZ\x838~\xa6H\xf4\xa6\x96T\xae\xa6c+\t\xd6u\x97\xa5HA 0\x9e\x85\xca\x83O\x17S\xbb\xd9\xe4-\xcc\x98!(\x1f\xea\x84?\xdd\xfa\xa1\x07\x88S\xaa\xe9H\x00\x92\xc7qj\xbe\xb9@\xdfJ\xfa\xbe)\xf5 \x83\xd4\xd3\xd9\xb2\xd1\xf9\xdf?\x81\x8bL\xf0[\xe2zp]\x97\xec\xb1/\x13\xdaGR\x05K\xb7\x05\x9c\x10G\x94\x90\xcd\xfd \x945\xc2\x86\xa3\xe1\x84\xa0~a^\x82`\x80\xb0K4!p{\xd4o\x85\x18^\x93|2Y\x13\x84j\xfd5\x0c\x8f\xd8\x85&!@|\xa3\x0f\x92$W\x8e\xff\xc2a{#\x8a\xed\xb07\xc0O8o_x\x97ojAA\xed+Y\x00\xb4:q\xbf\xbd\xd8\x84[\x8e\x15\xed!\xc7\xa0j\xa4vR\xa8,?D\x06\xf5\x13\xf7\xa9\x1e\x90}\'\x08\xa4!\xdfR1z\x1c|\x95\xfd7}z\x18?\xf8\xbb\x98\xe6\xae\xb4N\xcdT\x83\x7f\xb0\x02p\xa5\x80*\x90X6\xd3\x08\xba\xcc\x04\xe5\xf8\xc0P(X\xd2a\xef\xf2j-\x1aoB `\x0f\xa4\x97N\x9c\x1d,\x1a\xbf\x9f\x10\xec\xd0\xc7\xbdv\xdb\xc7\xa7\\w\x03?\xd9\xa0t\xa4\xf8r3\xa0*z\xd6.\xa9+{R\x88\x9b[S\x1a\x83\xb8%S\xe3n:\xc6\x81\x95\x80!\xa8\xf1\xf9\x02L\x15\x8aRN\xedw\x02\xbf\xf3j\x17p]\x92\xfd\xde\x99\x19\x91\x08\x8eQ\xdd\x8e\xfd^\x0c\x91z\x00\r\x04@\xb9\xdf\xafq\x0f\x920\nS}\xbf\xdc9\x1a\x1b\xaf\t\xd7\x8do\x13\x9d:j\xe4,\x04\xf9\x06\x02n\x8d\x05\xdcXc\xc6\x99\x8b=*\xb8\x8c3\x88\xe0\xcd]\xb3r\xb3\x95\rr\x9dr>-\xa5\x9d\x9d\xdc\x04\x0eg\x88\xd2\xfc%\x7f\x89\xa4\xde\x05\x90\x84\xfcy\x14\x937^\xc5\x1b\x88#g\x08\xd9\x00\x86\x19z-\x9e0\xfdJWN3\xe9"%\xf9\xb1\xc1\x9d\x81\x0e\x9a"\xd72Kp\x8c\x0cH\x94I\xeb\x05\x14\x92\xec[\x8b\xdc\\\x04W\xb8\xb4\\"\xce\xb9U\xbdbo\x9f=_\x1bq\xa6\xc8\x16\xb4T\x0b\xd4sa\xf5\xc0\xf1\x873J\x95z\xe3\xfe\xc0S\xe9\x98_me\xd0\xb7\x17}\x97\x8eK2\x03_\xef<-\xb4\xcb\x84[\x99h\xed\xd6#/\xcb\x05\r\xa8\xb8\x0cB\x980\x16\x03\xb7 y\xcd\xab\x8c\xd8\xdal\xbc\x08m;^\xc7o&[\x85\xce\x95d*\xd3\x81\xdf@\xb4Y \xfc0\x86\x9fw(\xdcZ\xffAv\xf2tW\xda(7\x8f\xb5\xfc\x7f\x05\x85\x84D\xa2(_ \xf1\xf6\xb3\x1c\xc3\x96FX\xf4\xd4\x0f\xd8`@\x1ae\x8f\xc1q\xb6"Ej\xa2\xae$\x0b$<\xa2\xf5\x89\x95\x8d\xf0\x03\x85@A\x97\xfey\xa2\x085\xc4\x10^}5L[Dl\xa1\xe7\xdb\xc7\xdb\xb4\xd0E\x17\xe8\xf2\x1e\xf9\x85\xb7.]\xbd\xcc\\3@J\xfcC\x1e\xaeu\xa6\\\xf4\xbcE\xde\xa0\xa8\x02;\xf1\xc7\xb67\x06N\x1e\xcdJ\xc8\xd9s2R\rc\xc6d%\xc36\xca\xcdx\xdd\xdbo\xb5m\xcdK\xf9_v\xdd\x88\x86\xd4\xd0\xc6\xdc\xd7\x7fvKu\xaaU\xce\x95\r>\xedsw\x01%\x13\xb2\xba\xb6GC\x7f\x80\xd1\x944@\x8f\xc7>\x9c\xf3\xbfb\xdcK\x99\xee5^\xc7ypv\xbf9\t\x95\xfd\xe1\xeb(\xa3\xee\x92\x94Gl\xb3\xbaUH\xf5\xde\xc8\x8a\xcf\xb3\xd6\xe5\xcd\xd8\xabg\xd3\xe9{A\xa2b\x0e5\x9b\x1a0\xfe5\xa2j\xb9\xf6\xf4UL\xd6\xcc\xaa\r\x87\xd0\xdb\xc4\x7fy*\xceD\xf82\xe5sll\xe5y\xf11\x88N\xda\xa7\xdcx\xd4M\xb2"\xc1{{\x9b\xd3\xfe\xe9\x00v\xb1V\xf4R|\x9er\xca\xea\x06\xc9\x0b. \x1d\xea\'v\xa2Y\xc2a\x86\xf6\xcb`\x1diW\rN\xdd8\xad\xf9\xae\x14\xc3\x06\x84D$\x8fX\x10`\xb1d\xbe1*e*\xae7JL\x9dp\xda\xb0z\xbd\xda\xa0\xfc\x0bsB\xf4\xc0\x8aq K\xdce\x8dt\xc2C\xc6\x9f;9\xb3\xf1\x1av\x16?\xab\xb8\xe2\x8a\xe2\xf0\xf2YdZ5\x95\xaf/\x15e\x14\xeb\x84\xe5\xaess`\xca\xc4\x06\xafB\xa5\x96\xf6\xfb\x08\x11\xe1t\x8b\x9ey\xa5;\xcb\x9a\xb5\xa7]d\x04\xab\xb4\xfec\xbcL\xb2\x8c\x82l6I\xed\xab/s\xa6\\\xf9\x1f\xad\xeb\xc6>\xc6\x94\xc30\xd2dZ\xb8\xcdIi\x03\x16\xb6`f\xc3\xfd\xc9\xf3X\x97\x0f3\xafA\xc7:f\xfb>\xce5\xb5\xbf\xb5\x1e{G7Z\xeeN\xe6\xe8\xd4Gb\x1a\xa3NrF\xec\xce\xb9\xe8\x00\xbb\x191D%*{\x02\x1dt7\x17x7\xd7\xc8%L\x05!<\xe8\xf9=?d\x06\xf7<\ngP\t\x1b\xe2}V.\x8e\x91\xb1\xb0\xbf\xc5_(\xa7I\xfd7\x16\x8c\xce\x11\x83\x06\x98\x9e\xac\x0ce!\xa1\x84<+\xd6\xd9\xc9\x8b\x179E\xcf\xd4\xa0Fb;k\xf3\xe5\xc8Z<\xc0N>\xbc\x81\xb3\xcf`\xb5\x97Y\xcfd\xc6v\x0f\xb8X8\xe9\x1e\x10}\xff{\xe5\xf7\xdf4GY\x80\x08\x1d\xdb\xae8B\x1e\x8c\xc3\xde\xaa\xb98\xfd\xcb\n\x81\xab"\xe9L\xa6CQ1\xad\x82\xd8&\xcf\xe7\x9aP\xea\xb3xH\xef-(\xf1;\xef\xc4\xbf\x88\xaa\xd0\xb5a\x15\x84\x8a\xbau\xa7K-x\x84\xf6\xab\x8eW\xccJ\xa7\xbd\xe7{\xfe\xb5\x13\xb6\x0b\xb0\xed\xaa}\xb2\x9b\xc1IJ\xfd\x9c\xd0\x9d9\xf1\xc1.w\rd\xe9\r\x05\x91\x120H\x93\x8d\x1b\xfbe\xa2w\xe6\x85\xca\x105{\xeb"@\xfc\xc2z\xa9\x07\x82@\xeb\xcb\xa3\x97\xb4\xba\'\xe6\xbe\x12\x90\x99\\2]\xf1\x85\xc0\xdd\x14\x179c\xdb!\xfa\xb7\xe6x\x12Q\x05\x89\x03\xd1\xc5\x88\xa5\x10L\xff\xe9\xd8\xf6\x13\xa8))#\xf2\x89\x90\xc9\x12\xe5\x9cWb\x1e\x011n\xb7\x18\xd6\xdbDZm\xbfC\xf0\x1d]9\xa5\xfe\x9c\xcaRS\xf6\x8f|,\xf28Fc\xaa\xc2\r\xa7\xcc\x936}\x9a\xe2\x1a\x8b\x11q\x85,#\xbf~\x88>\xed`\x84\xa4\xdf\xac\x16&fn\xc9\x90\x1c\xee\x94_\xa6B\x9e\xf6p\xdb\xf2\x1d\x95dTj\xbeT,\x1e$z\xf5*\xea>\x12\xbd\x1f\x82\xe5g.\x0e\x98 \x1e\x91\xb7\xaak\xb2h\xeeK\xdd\xfb\r\xc9\x7f\x9b$\xd6:\x90\xbep/\x90RM\xcf\xb3\xd7\xddM/\xd7j\xb5\xae\xbc0\xba\xa0v9 i\x1b\x10u\xc5\xc5\xa9\xbf3Q)\xf4\xc0\xfd\x97\xe9xX\x95\x05\xa5\xca\xe7\xa4\\\xa3Wb]1\xb7\xa26\xd7\x04\xb1\x90\x8c\x91\xe5\xb1QT^\xefLs\xfd#\x84\t\x05i\xa5T\x99sk\xb0\xe6\xb8\x1c\x1c\xea\x08v\xe5l9\x99\xf0\x1684$\x1b\x96\x05\xc4^p\x82\xe6\x01\xdb,5\x96HH>#\x1e\xebfpy\xf7\xb7\xe0\xd1\xb1Y\x04\xfe\xdb[x^\xb4\x01\'\xcdT\xb4d9\x1a\x8e\x98\x04\xceIL\xf3\xc5\xd2t\x81\xb1\x0b\x96\x0f\xfd\xed\xbfN{\x81c\xeb[\x92f\'\xe7O7_k\x81\x88\x122Z\x19\x1f\x06\x9b\x92\x07PY\x18\x85\xdc\x1c\xd2^\xd2u\x89\xb01<\x9a\xbc\x8e\xa4$\xd09\xf28_\xf2\xc8\x1b\xf4G\xc71\x83|85\\\xfd}_\xc1\xe8ge0\xbd\x0b\n\xbd\xffCo\x0e\xb2\x9dg\xcfX@\xf3S\xda\xbb\xf0tQ\xfe\xb3\xf3\xbd\x7f\xc9L\x07Ga\xb9\x88\xafM\x88\x16.\xcaDXo*,s\x1a\x0bk_\xec\xa1\xe6\xba\x181\xcd\t\x88\x14\xc8\xd0\x88c\x08\xd7\xa2\xd2\xc1\xa9L\xad\x99&\xad\xdf\x1b\x8b\'&\x8e\xec\x94\x0c\xc3\xd7^B\x9c\x01\x93/fkl\xd0\x19f\xc8V\x8ce\x99>Yx\x0c?\x15\xde\xc5\xd0\xd8#\x94\x7f\xf5\r\xd5y\xd3\xb5\x94\x94\xd3\xeb\xdb\x1a\x1an\x9dH\xd9hj\x9cm\xea\x95#W\xa1\xf9\x12[\xf8O\x08\xee\xea\xdb"\x84`\xd9\xe2\x0f\x08\xf00\xa4\xdb\x9a+\xe7S\xef4\xb9L\xa9g\x8a\xc7\xd9\xf9\x9d\xe4L6\xfd\x03M\x00A\xae}j\x16{&\x7f\xcbOj\x97\xa8~0\xc8Y\x1d(\xefZw\x98F\x82\xdb\xe09a\xb3K\xc9L\xfdR\xbe\xecXI\xdc\xe6={b\xb6\xf9cI\xfb\xe5\xeew\xa2)o\x14e\xa8\xf4\xa1\xbe|j\xdcsNx\'\xd6\x0b\xd0\xd6\x13\xf0Su\xce8\xd3\xcf\xfa4\xcfRW?\r\xb6W\xcdl\xb9\x0c\x1c\xc2\xce:\xf5\xfd\xed7\xaa@\xa0y\x81\xbf\xc0M\xfb\xf7X6\xd1,\x86\x08\x84\xa4\x1b\x85\xbe\x1f\x11\\\x9e/Vx\xe4[\xaa\x0e\xe3\xf0L\xba"\xf0\xeb\'\xef\xe5\x83\x9c\x8a\xa1Q\xbd\xc0\xf5\xfc%\xa8\xce\x85zlweh\r<\\\xfd\xbdC\xf5b\x0b\x03\x021\x10z\x94\xfeX\xc8\xe1B\xf6\n\x93\x96\x1f\x18\x86\xfc\xaa#\xa0\xb1L\x8eI\n\xa6\\|0\xcc\x93\xc43\x11>\xbae\xef\xd3P";Ad\x03\x85y\xa9>u\x86\xec\xd3y\xa43\x83\xdf\xa3<\xe8t<\xc4\xad6\xcfp\xae\xc7\xbc\xa7\xc0\xcb\xbc\xc0\xc6/\xdc\x1f\x13^\x0e]\xc5\xde\x0eqQ\x11K\xd8\xc2;\x80\xefK\xae.\xf6\xd1\x1a\x07\x82\xabf\xf3\xa96hH\xbe_\xde\x1d\xcc1E\x9e\xa7\x08\xdc\x98vfq\xfb9Q\xef^-\x8e$\xd50\xb3\x83${\xfa\xff\x8b\x1d\x0e#\xb4U:\t\xa3\x0b\xd3\xaa\x81\xc9\x04e\x9f\xe8K\x98\x14\xd5\xbc:\xf9\xe6\xba\xcae_\xd6\x01k\x12\x80L\xc3\x1f\x11Ft<\xc0\x15\xfd\xae)\x98\x83S\x07\x0b5\\\xe1\x90\xd1\x84\xc8\xba\x95G\xde\xa5\x99x\xca \x0ci/\xa3\x00\xf0,;\xd2U\xb0Pe \x18\x9f<\x82\x98\x01\xb7O\x8c\xce\x15\xa6.\xb98\x10p\x004\'Mkx\x89\xad\x822\xc8\x8d\x9b0b\x8c\xbfGq\xc2S\xf6\xcd5\xcd\xae\xacN!V\xf2\xc9\'3\xfcb\x0f\x87\xd8\xb0\xf689\xd3w\xc0V\xf6\xda\x8fb\x9e\xce\x85\xfe^\xad\x13\xf7\x88\x96\xa2\xf5V}\x8cQ\xa3\x97\xce\xf1@?v\xac\x1b\xce\'\xb3\x10Y\x87\r\x1d\x89x\xdd\n,\xdd-\x06Pxu\xf2\xc6\'i\xcf\xcaAJ\xb8)\xe2\xa3\x92\xc8\x89\xcb\x16\xfc\xf5/\x92\' P\xb4\xfb\xf5\xb4\x12A\xcd\xdb\xcekK)>T\xc7\xfb\x8dO\xa4l\xd8Of7\x17\x08\x8e\x99\xad\xe6\xc5E\x84\x06y\x14\x9e\x98M\x18\xba\x10\x1fdU\x91\x89\xac8d7\x032\x99\xc4\xb3U\xe1\xe0\xab\xd0\x987\xbf\xa4\x7f\xdf\x85\xdd,J\xdc\xef}\xc7\xe70\xd2\xa2\xed\xfe\xdb\x91\x97\t\xf8\x16\xab\xeff9\xb9\xe2\xdbo|\'\x0f\xba\x12\x1c\xa7p~\xd8\xdc;\xdf\x8e\x9c\xa4~"\xea\xc0\x01\x12,\xb9B\x00\x102\xaeL\xe3\xdbh\xd8fL\xa63\xb1,M\xbf\x1a\xb7!{\xb9%\xb1\x0e\xa2\xde\xf0\x90\xef6\xdb\xab\xc1\xa1On\xe4\x8b\xbf\x14\x18;Q]\xfaO]\xb1\x94\xc5$cNo%\xf2\na\xc9\xff\x16\xa7\xbcz\x9b\t^=\xec\xc57\xca\xfa~\xac\xba\xf3\xfd\xa3\x8d\x9c\xff\x18\xe8\xee!\x88\xacb\xf1\x91&.\x8e/\x8b\x07\xdfT\x80\xa1z\xaf.+\x8bTQ\xdc\x87\xa5\x1eO')
|
1
|
+
from flask_babelex import gettext as _
|
2
|
+
|
3
|
+
from . import bot
|
4
|
+
from hiddifypanel.panel.user.user import get_common_data
|
5
|
+
from hiddifypanel.models import User
|
6
|
+
|
7
|
+
|
8
|
+
def prepare_me_info(user):
|
9
|
+
"""
|
10
|
+
Prepare response to the "me" command
|
11
|
+
@param user: User instance
|
12
|
+
@return: A text message
|
13
|
+
"""
|
14
|
+
|
15
|
+
response = _("Dear {}\n\n".format(user.name if user.name is not None else "user") +
|
16
|
+
"Your hiddify information is\n" +
|
17
|
+
"UUID: {}\n".format(user.uuid) +
|
18
|
+
"Last online date: {}\n".format(user.last_online) +
|
19
|
+
"Expire time: {}\n".format(user.expiry_time) +
|
20
|
+
"Usage class: {}\n".format(user.mode)
|
21
|
+
)
|
22
|
+
|
23
|
+
return response
|
24
|
+
|
25
|
+
|
26
|
+
def prepare_help_message():
|
27
|
+
"""
|
28
|
+
Prepare response to the "help" command
|
29
|
+
@return: A text message
|
30
|
+
"""
|
31
|
+
|
32
|
+
# command description used in the "help" command
|
33
|
+
commands = {
|
34
|
+
'hello': 'Get started with the the bot',
|
35
|
+
'help': 'Gives you information about the available commands',
|
36
|
+
'info': 'Return information about your usage',
|
37
|
+
'me': 'Return information about your account'
|
38
|
+
}
|
39
|
+
|
40
|
+
# generate help text out of the commands dictionary defined at the top
|
41
|
+
response = "The following commands are available: \n"
|
42
|
+
for key in commands:
|
43
|
+
response += "/" + key + ": "
|
44
|
+
response += commands[key] + "\n"
|
45
|
+
|
46
|
+
return response
|
47
|
+
|
48
|
+
|
49
|
+
def prepare_hello_message():
|
50
|
+
"""
|
51
|
+
Prepare response to the "hello" command
|
52
|
+
@return: A text message
|
53
|
+
"""
|
54
|
+
|
55
|
+
response = _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
56
|
+
"Welcome to hiddifybot.\n"
|
57
|
+
"Start by clicking the link on the panel or entering your UUID.")
|
58
|
+
|
59
|
+
return response
|
60
|
+
|
61
|
+
|
62
|
+
@bot.message_handler(commands=['me'])
|
63
|
+
def command_me(message):
|
64
|
+
"""
|
65
|
+
TelegramBot command "me"
|
66
|
+
@param message:
|
67
|
+
"""
|
68
|
+
|
69
|
+
text = message.text
|
70
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
71
|
+
if user_uuid:
|
72
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
73
|
+
|
74
|
+
bot.reply_to(message, prepare_me_info(user))
|
75
|
+
else:
|
76
|
+
bot.reply_to(message, "Please enter user_uuid")
|
77
|
+
|
78
|
+
|
79
|
+
@bot.message_handler(commands=['help'])
|
80
|
+
def command_help(message):
|
81
|
+
"""
|
82
|
+
TelegramBot command "help"
|
83
|
+
@param message:
|
84
|
+
"""
|
85
|
+
|
86
|
+
bot.reply_to(message, prepare_help_message())
|
87
|
+
|
88
|
+
|
89
|
+
@bot.message_handler(commands=['hello'])
|
90
|
+
def command_hello(message):
|
91
|
+
"""
|
92
|
+
TelegramBot command "hello"
|
93
|
+
@param message:
|
94
|
+
"""
|
95
|
+
|
96
|
+
bot.reply_to(message, prepare_hello_message())
|
97
|
+
|
98
|
+
|
99
|
+
@bot.message_handler(commands=['info'])
|
100
|
+
def command_info(message):
|
101
|
+
"""
|
102
|
+
TelegramBot command "info"
|
103
|
+
@param message:
|
104
|
+
"""
|
105
|
+
print(message)
|
106
|
+
text = message.text
|
107
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
108
|
+
print(user_uuid, text)
|
109
|
+
if user_uuid:
|
110
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
111
|
+
information = get_common_data(user_uuid, 'multi')
|
112
|
+
|
113
|
+
bot.reply_to(message,
|
114
|
+
_("Your hiddify instance information \n" +
|
115
|
+
"Domain: {} \n".format(information['domain']) +
|
116
|
+
"Usage limit: {} GB\n".format(user.usage_limit_GB) +
|
117
|
+
"Current usage: {} GB\n".format(user.current_usage_GB) +
|
118
|
+
"Expires at: {} \n".format(information['expire_s']) +
|
119
|
+
"Remaining days: {} \n".format(information['expire_days']) +
|
120
|
+
"\n\n Happy using \U0001F389 \U0001F389 \U0001F389 \n"
|
121
|
+
))
|
122
|
+
else:
|
123
|
+
bot.reply_to(message, "Please enter user_uuid")
|
4
124
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
125
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/common.py
CHANGED
@@ -1,5 +1,100 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00w\x11\x00\x00\x12\t\x04\x00\xc5W<\x93?\x14\x12\x1c8\xb2\xc3pIf\x92q\x00\x00\x00\x00\x00\x00\x00\x00x\x88\xe4\xe4\xc7*\x0c\x8c\xb8\\\xb2\x1b\x85\xe7\xa0\xb1\xf97\xb3D"\x89\xe0\x92\x87\x14\x0f\x05\xdak\xe8\x94\x1b>\xb5\xac+\xe1;?\xb4\xc2\xd3V\x8fF>\xcdD\x80\xf8z\xf5\xb5\x88zd\x10\x9a\x18\x03\xe2\xce\x0b\xe1\xd3\x05V\xf5\x13\xe9\x87\xec\xbc\x93Q\x1e\x81\x13~T\xbdb\xf1\xd3\xc6fV\xeb\xeb:(8\x85z\xb3\xc9q\x1a`\xef+|=o\x86\xab\xf7\x15\xa6\x07\xde\xcf\xc1\xd9\x81\xeaR\xcb\xe2\xc0\x90\xe9r\xf6\x9e\xf6j\'0\xb6\x9d\xddi\x12\x89\xe9r\xdd\x14\xed\x94v\x96\x14\x01\xdaj\x1d\xe9\xe0\xff5\x19\xf7\xcb\xe1(9\xf9e9\xd9r\xaf\x1a{\n\x8f\xf4\xd9O8\xdd\xaalG\xaf"F\x168\r\x0670\xd0\x9f\xfe)\x10d9\xdd\xa0\xf0\x95\xb1%B\x97\x9c\r2\xe7\xab\x88\xf7g\xfcv6HLt\xb9\xe3\xc1\x00\xf6\xa1\xc6@\xe9\xaa\xb6\xac"\xc29\x9b^\xd3\xee\x1f\xae\xee}t:\x81 v^\x0c\xe1G\x8f\xd6\x013B\xe8\x89\xb6\x04\xb2\xe1g6\xef\xfa\xd4\x14\x99\xc6\n\xee\xf9\x89\xc2\xa2\xb6|\x9a\xbc\xb0\xa4b\xb5[V\x05\x82\x1c\xd4n\xb5^\xf0\xb2\xaa\x11\xb1i\xf8K\xc4=7\xa1\\2tI\xb0\xb5wn\xe9i\x1a{\xbe\xb6\xdf\xfb\xfc\xbe\xf6n\x9e\x17\xa5\x89\x80*j<E\x1f\xd7\xe2t7\x7fC\x07\x99\xdd\xeb6\xd0\x06\xad\x94\x04U\xccJ\x05^+.\xf6\x99\xc8\xe5\xcd,\x92\xa3\xba\xf4\x87\x18\xd6w\xdb\xf3}\xfeil\x99!\x82{rl\xc9\x0e\xd3U\x89A\xeeT$\x96q:\x18\xa6\x02\xf7\xc8\xc6\xc8=\x8cx5a\x83\x0f\xf0\xec{-\x19\xbb\xae\xfan\xd6\x13\xc0`\xae\xea\xcd\x95\xeb\x93\xff\x99\x82\xc8w\x1bM[;\x8f\xfd\xfa\xb0\xc2Eab\x00\xa0\xec\xc5X\xc1\xd3\xc3@\x99\xee\x16\xdb\x1a\xe6\xa5\x91\xb6\x96%\xc9\xb3\xd8\xff\x06v\xf4\xc3\xfa\x05\xc9\x97Tg\x0fn\x13\xa6\x9ar\xde\x9d\x1dP\xb3\xb9\x84\x03m\x0b`\x04Z\xbf\xea\xae;\xa8i\xf3+\xf7\xaf\xe8\x85\xe5}A\xae\x89q\x1e\x05\x08\x15E\xcd\\[\x8f\x8cZ\x15\x92Re\x01\x12\xdf\xe9\xa6\xbe\xdb\xdb%\xe3\x08E\x13\xd0?\x87\xdbe\'\xf3m\xc3\x91\xcd\xc2\xcfA\xfcpy\x17\xf4"5h\xacK\xab\x0f\x9a;\x9e\xd2\xd3\x1d\xff\t\x98\xbf\xde5\x8eWU\xa1\xa7<\x15a\x11%K\x7f_/V\xdd\xa4\xbe\x07\xb6m\xb4\x88\xaf\xd5\x8c\x82\xac\xbe\xb0\x81\xe5`l3\xa6o\x15\x91\xbf\xf1m\xa9\xd5\xf8\xe1\n\x1c\xac/\xb9h\xfe\xcd\xa7*\x01\xfe:\x9c\x11\xf0\x1d\x1f9\x04U\xddu\xbdr\xf1\xe5j*\x9bL\xae\x11)\xd7\xfd\xaa\xa8\x1cj\xe2 \xb1\xcb\xc9\xa8\xbd\xa63\x91 \xc9\xc9*~\x8d\xa9\x97<\tq;\xb6&A\xceYb\xc9\xf3\x88yBm\xa6Jk\xb4\xbfn\xaa\xc4\xbd\x16bup+X\xbc\xff\xed\xc1\xbc\xfc\xa1\xdcPm\xc6\x1d`4\xd5YS\x0f\x9ca\xbb;\xcc\x89S\xf7\xda\xe6x\xa5\xec\x0f\xa0a\x9b\xd0\xed~0z\xf5\xe8fZ9\xd1\x92\xf4H\x9a\x7f\xd7\xec\xe0\xe6\xb7Z\x83<\xb3\xe9\x08\xcb\x91\x1f\x10\'\x16\xca\x90\xd1u\x9f\xacW\x06\\\xed^\x7f}\xf8\xf3d\xeb 3f\xb8\xe8\xd4=\xc8A\xfdA)\xa0\xc2\xe4\xcb_\xfd5"\x0f\x1a\x05\xa8\xbc\xfc\x8b\xb3\x05\xe2$\xb91$\x8f\xc7\t\x17>I%\x9a\x16\x04\xd8\x8ef\x0c\x00\xef\x03!\xcdM\xd8\xe6\xe2\xf0\xb4\xd6\xde\x9f\xa28\xc1X\xb5\xe1j|S\xd7@2\xc1\xe3\xc3\xaf\x1d\x01\x00\x9c\xa2t\x10l\xc2\xf2\xf3\xbf=4\x1a\xafK\x1b\xa9<32\xc0;\x81L\x9e\xfax\x19\x11\xd4\x11\x0bZ\xdb\n\xc0\xaa\xb4\x1cF\xca\xd8\xf1&\xb2\xe4}\xf1\x0f\xd5L\xab\x0e\x12>>{\xe4\xe2E;\xf4\xec\n\xfe\xe7O\xfb\xf1m\x1b\x1b\x9c\r\x9cK)\xd9FP\x16t42\xd2\xbb\xed+\x94\xde2\x96\xf7{\x94\xbd\x11\xab\xd8E\xc5\xdb\xaf\xcdX\x95g<=e\x0e\x81u\xc4_\xe3\xdd&Y\xf0\xe0o\xdaI\x945\x1e\x8a\x9a\xd2\x85\xa1%\x10`\x83H\xe4x\xb3d\x12\xae9\x10\t8\x7f\xe2\xe5\x13\xe5u{\x18`&_\xce\x19\xe1@it\xfc\x0e!d\x05\x19\xf4<\xed\xdb\xb6\x17\x15\xaa\xf2\x12e\xd8\xfc\x8erCj\x7f\x92\xc1\x99\xc3\xc4\xb3\xef\xc2ag\x0f\xa4\xbb\xdf\x9d\x00F\xf5_\xa50\xbe\x08bg\xffe\x07\x04\x12\xb7\x7f\xc6\xed\x9a\x9e\xf1H\xab\x17\xdd\x00X\x80=M\x135\xf6E\xe0\xb0)\x06K\x84Z-\x01\xb5+\xb4R\xdc\xcd9\xe1\xea\xdf[5\xa3\x99\xb0t?0\x11\xfdq\xd9\x95}\xbf\x17*\xa61P\x03d\x87{}FZ\x19\xe0E\x83;l)\xa6 \xfa\xae\x12zy;>\x1e\xae\xc6\xad\xa4\xde\x17\xd0\xa95\xb6\x0e\x02|B\x99#\x811\xdc\xba\x95\xf0qXW\x90\xb6\xcc\xc5\xec@\x1b\xfbEX\xcdk[\x7f\x9c\xc0\xd6\x91u\xc1\xf7\xaa\xdf\xa8w\xceL\xaf\xa3!\x98\xb3v\x16\xbdI_I\xae\xdf{\x8f\xd6\xad\xb3\x85\x84,\xc1P\x81\x80\xf4\xcb7.G\x88\xe3\xc0\x99m\xffM\xb6D\x7f\x90Z\x1b\x1d\x0b1cb@\xa2\x996d\x85\xddN\xc8n0\x1bGM\xd1\xa1U}K\x86\xd9k\xb7[j%\x13ru\x8e\xba\xf1e\xa9\x8b\xb1\xe1p"%\x83-\x16\x93\xcf\'md7\x96\\\xabMS\xcb\xdf\xf8\x97Z\xec\x80\xba\x19\x17\xca\x8e\x0c\xe6\xac\xed(\xb2@\xd6\x14}\xbco=\xdc\x17\x01r\xef\xc8X\x8e\xf13\xef\xf3\x0b\xf1D_\x84\xd1\x11\xeb\xbaH\xce\x92t\xc0\xfa\xb4\x91\xaa\x00/\xfc\xe3\xfdw\x9d\xf0\'|Z\xa3=\xd9\xe4\x7f8\xe1D\x0b\t\xa2\xbb\xa1\x1f-\xa93hg\xe3\x01\xe13\n\xfa|\x023\xfb\xf4q\x9e\xa4\xab\xba\x0c\xa0\xa0\xfc\xd7\x11\x91VD\x17\xb2\x08}\xf2t\xebY&\xa4\xb1\x11&\xdf1\x8c\xe4&\xa7\xf5\r!\xec\xf3\x93N\xa8F\xac\xf0\x93G\xe3\x93$\x84\x16\xa3\xf7)s\xdbz\t\xcb%\x93g;\xdd\xb9\xcd/\xc6\x05\xa5-u\x0c4\x8b;sr\xb4A\x98n^\xe8\x97\xd7\x91\x1cqzLD\xe4\x10>\x93*0\xd8\xda\x99\xa3\xef\xf8\xddr\x88\x04\x9a\xaa9[\r\xbfW\xcd\xba\xd2\xc6\x83\xb9<\xf9\xa1AV\x10"\xb2\x0c*\xfe\xccUM\xae4X\x0b*\xa3\x83y}gq\xed\x9ds\xa3~\xae\xdf\x16\xa1\x991CS\x93\xdc$\xfc\x07\x0e\x90H\xc9\xa7\xa5\xf4!\xae\xe3`\xe1\xb8e\xf3{U\xe3\xdeLe\xad Re0\x99\xa3\x9aUh\x84\x1a\x1a$Y?D\xc3\x0c\xbb\xa8\xb6\x88NY\xdd\xa0as~\xc5\x8a\x0eu\x00\xf3\xb6\xf4L\xc5\xd1)\x8dH\x00Lk\xdb8x7)^D}\r\x96\xe4{\xf0pc7\xc0\xc0\x8cUZ2k\t;3\x0c\x86\x1e\xfd\xc9cH\x0b@u\xb9\xd7{T\xc5h\xffr\xd6\xa4\xba\xbe\x07\x9eM\x8dH\xe1\xb7(2\xfc\xb2\xc2\xfc}?b: \xc0\xd7\xb42\x9a=\xcf\x0f\xdb\xc7\x15TcGf\xcf\xc2\x8eB9~d\x1f>\xc6\x94\x10\xec \x9f\x13\xfb\x9b\x88<8\x0f\xac\x17h8k\xb0\xb6D:\xc6E\xb3\xe8I\xe0\x8b2\xcek\x12.\x7fR\xe5\xb7\xf6\xe7l\x95\xc6\xbdE(\x84J\xbf\xc6\xec\x10\x14\x9dQf\xba\xbf\xf3o\xa7W~\xdaGvR\x065\xae\xb7\xe0\x87\x8b\xca\x95=\xa8\xde\xe2"\xe7\xc7i\xa1 \xf1\x99\xef\xda\x98\x8b\xa4\x95\xe3\xeb\x93L\x08\xa3*\x1c\x81\x90\xdd\xfa\x15\x9d\x7f\xa2\xc8\x9b\\\x9bL\x8f6n\x94=\xc8]\x9eUy\xd9p\xe8\xab\x8e\x1f\xac\xb0\xd9\xc2\xef gc7\x835\x7f?c\x8e\xe2*\x03\xac\xf7\xe6y\xd2\xa7\xf2\xdd\xf4\x01\x83\x02\r\x00\xe4\xb4\x00l<\xea\x89\xc7\x8a\x1c\xc6!\x98\xf6\x14r\xbe\x87e\xfd\xbf\xd9\xab\x93<\x9b\xb7\xe97\xf8\x7fy)\x98\x1f\xc5\x04.\xd6\xb4\xb8b\xcc\x84\xbe\x1c\n\x17+\x03\xf2\x83\x99\x8c\x81 z\xc9Z\xc3P S+oB\xb7\x96\x83\\\xa9g3\x88\xed\xebZM\xd8\xdf\xc5W5\x0f\xe8\x9b\xa5\xd9\xeb\n\xe07\x96? \xe9\x9f"\x98\x11y\xa2K\xfcn\x04\xac\xfb\x89*n\xcd\xeba\x97k\x1e,^Z\xc4\xa4dC\xa5M\xf1\xa2KZ\x0f4\x8c\xaa\xd3]\xa9\xf7\x97\xcb\x8d7\x96\xce\xb8<\x8e\x8f\xc8|\xa1\xa9o\xc6\xee\xcd\x910\xc3\x82\xf5y\xd8T\xdbh\x83\xe1,iJ\xe4-TO&\x95+\x06\xc8\x8c\n\xff3\xa5\xc7\x07\x06\x1a\xac=\xc3C\x1c\x96\x14`\xfb\xfe\xb7w$\xc4\xc3}\x07@R\xe2c\xdc\xb5\x82\x83\xab\x17Oy\x88\xcb3j\xb1\xe4c\xa4\x83\x88Zu\xf3\xb9\xf5\xeb~\x86\xa6!e\x02u\xf9\x07\xd7\xa4\xa8\xf1H@}\xad\xa9\x14\xde\xd3H\xa1\xd1C%\xf0\x7f\xb3\xb9\x9ae:\xd8v!\xf5cWZR\xff\xbe\x7f\xc3\xae\xe5r\xf7\x19\xf7;\x9e9(\xe9\xc5\xcd\xee\xf9\x8c\xd1w\x84\x8f)\xd7z~\xf0\xf27\x16\xb6\xcd\xc8\xf4\xcf\xc6\x1d\xcaw\xce\xc1\xabaX\xb2I\x9es\x9e\xb6\x85VZ\xf9"\xbew%6]\xb4\x85\xf8,\x8a\xff)jDoGr\xe5O\xbcQ\xc1\xe7N\x0e\x11\x0e(\x97\xee\xda\xf3^s\xa8\x80}\xbfV74\x0fY\x10C\xd5"mg\xd6q\xef\xf8\x06b\xc2\xa8\x1e\xa9d\xaf\x9a\x0en\xeaP\xcfR;\xa5"\x19\x04\xb0z\xe4z\xad\xcc#R{\xaa\x03\xe0\xfd\x00\x07\xea\x00\xcc\x10Ny\x97\xd2\xc6%R\x84VxR\x93;\xb0*=m\x9cR*\xb9\x19w\xf8,\xbb\xa1D\x04>F\xf6rU\xe0\x08\tW\x80u\x88\xe4\x02\x93\xb9\xcfYMNU\xa0i\x90\xa4s\xa8.\x0eD\xbb\x80\x7f)\x1a\x9c\xcbW@\xdao\x95C\x06\xcdp4\x1e9!\xbe\x9b\xd7K\xed~}\x8a\xd1\xe6\x8a$\xba\x90"7\xcc\x85\x8f\x97D\x7f\x96\x85\xefAi\xc3\xe4\x9b\xee>\xe2\xb2\x9bmB\x15\xd4\xbb\xd0l\xf4\xb9[\x98\x1fF\xc8\xb1\x1c\x08\xfa:\x19\x013m\xec\xcdX\xf6pB\xef\xc5\x94\xfe\x02\x85\xae\x12P\xef\xd40\xda\xd3\x8a\x01\x0bLtf\xff\xe8\xa1\xbe\xd3\xd7\xed\xb6m\x15\xf2I\x8c\x8a]\x1eAh\xb7\xe1)\xd55\xd6\xc0\x8c\x8d\xf1\xe9{\x98\x88\xe8\xbf;\xbf\xf5\xedQ\xe7\xf0y\xffC\xf5\xf1\xf6\x19\xa6\xab|.\xd9=%\xac\x1c\xc1|\xbb\xe5gE7\xb3\xd8\xe2\x82|Q\x91\x18\x0b\x8eZ\xd0\x1b\xfc\xc0\x14t\xd9\xad\xba\x86\x1cM\x16_\x07\xf2\x82\x01j\xbaH\'\xe4\x04\x97\xb6\xe2MR\x1b\x07\xdeT\xc0CI\xf0\x1e9\xa2\x97\xefR\xacvS\xe7p\xe0\x81X\x05\xa9\xa5\xd5\xd1\t\x96fT)z\x084+\xda\x82\x8cC\x97\x86\xd3\xce\xd1\xe28\xc6\x9d\xff\x0e\xe5/\x9b\x92\raae\x83\x83\x9c\'U\x93\xadn\xca\xd22A\xad\xee\xd3\xce\x82\x93\xa4\xc9DNb\xd8\xaf-\xa3"\xe9\x04\x8c\xd5y\xf3\xfd\x124Y\xf1\x0f\x1f\x94\xe7_jM1\x08LF\xde\xb5@WL\xd7k\x9bf\xa0x\x15\x97\xddBQ\x83<\xce\x07\xedE(\xdd\xd1\xb2\xc0-\x9aR\x95\xaa\x97\x05\xee\xab\x03V\xc6\xd2\x10g\xff\xa0\xfdF\x1c\xa9\xcc\xf6\x1dK\x10t{\xa6D\x1b\xa5/\x96;\x90S\xf4|m1t\x17O{\x83`\x06\xc3>\xc65\xe8]N]\x00#\xc0\xa5\xb8\x10\xcf~\xbdPEe0\xb1\x86\xe6\xee\xe8wl\xfc\xb9\x86\xd6\x13 \x0e\x86<\x9e\x1b;\xba\x1a \x12\x1aN!\x91\xc7l9\x93\xab\x8e\x911\xc7\xf7zFcL\xe0`\x8e*5\x02\xb4\xca\xe6\x17\xbe\x0c607\xbe\x10\x8f\xc5Ty\x86\xde\x1ehNI4hl\x93\x9b\xb2\xcfs\xda\xbe\xee\xe9\x08\x03\x1e3\xf2\nt\r\x06\x03b\'\xdc\xb9\x03?~\x18\x07J/\x14\xa7\'\xc4\x17\xce\x14(\xcbK\xc9J\xfa[\xce=\x0cC9\x8a\xda\x93\x16\xe7\xd8\x1fS\x16\xd2\xb4He\xdd\x82\t\xbe\x0e\xf9\xff\x14~\x9d\x92@A\x9a\x91\\\xa1\x0b\xfb\xed\xe6\xdb8`\xf75\xbf26K\x94\xee\x08L\xbc\x13\xfe\xc1\xaa\xef\x8ax\x85\x13\xed]{r\xb3n\xad6\xeb\x17\xc9\xda\xb5-{_\xb1\xc3q%F\xebBk\x0bE\x1a]\xc8I\xc0\xe3W\xe1\xda\xb6\x10\x91\xed.\xac.\xb1*\xe0{nc\x11\xd4\x1b\x7f\xefc\xf8\x0f\x99\xf4\xaf\x93\xdf\x17\xee\x11\xd9J\xc4A|\xb0o/I[\xde\xcf\xb9\x05\xf6\x90\xe0t-\xd6\'}\xecj[\\x\x11~*R\xd9\x00g\x84\xde\xa4\x8a\xda;_}G|\xc0OvE\xd1\x8a\xe3\x99<\x8bx}\xc7"+\xcc\x03\xe9\xf6m}r\xa3\x1a\xa2ko\xe6}\x03\xd1\x8cK)\xb8\x86\xd8\x93\x02\xff\xb0\x8d\xa5@\xea\xa6x\xc1\xba\xe3\xae]\xed\xc9\xe6#BcxgON\xb4=\x1c\xf1SM\xba\x00\xf7\xbb\x17:V4"\t\xf4\x81\xa1\x8a\xf9\xdb)H\xd2W \xe2\x8d\x14\x0b\xcf\x19\xcd9T^r\x8b\xf8\xcc\xdf:\xf5\xe0\xe2\xfb:\xde\x8f\x15\x90\xd8\xf2\xc7Y"\xde\xb0\x03\xfd\xa6D\xd5+q>s\\n\xa7o&\xa0T\x8b#\xff\x15@\x9f\xf3\x8a\x16\xf6\x99\xe3\xf6\x1b\xa6#\xbfM\x88\xe0\xf5\xd8zR\xba\xd2\xd8\x90bb \xda7\xe1\xaf~\xbb-\x94\xa8\xcd8\x96\xfb\x0fsFSf\xb0\xebs8\x922\xec\xaf\x83\xc0>9\xbe#\xe0X\x01>\x83\xcd\xa8B\x81\x91\x89$:k\x15x\x80\x87\xf6V}UF\xf30\xc7\xa2(\xb6\x93{\xcf\xf4&#HN\xadf\xab{\x1d\xfdn\x1e\xf8\xa9K6\x04\xdd\xf2\xf7\x12\xc6Y)*\xe5\xbc\xe2\x98\xdc\x91\x87\x1c\xa0\xb4\x01\xda\xc1\xc5A\x984\xba\\\x1a\xb8\xfdHihT\xb0@a\xb4\xca+\x92\xd7\x9bu\xfe\xe6\x98\x15>\xf4\xd1\xc8|T\xa5\xa0\xb8\x84\xc1W\xc6<0\x01g\x1bbY\xc4\xecr\xc2\xb6\xba\xa1\x11\xad\x0c)\xd9Gz\xb7\xca\xd5\x0e\t\xa2h\xc8\x08P\xfa\xa5,\xa3\x89\x8el\xafw\x9a?R\xab\xee:`\xcdx\xe7\x03H\xd0oW\xa6\xee\x93 L\xd8\xf3\xee\xf3\x02\xf9H\xb5(\x1c\x93\xfe\xc8\xf5N&N\x00\xbf\xe2-\xfa\x83\x8d:\x11Pj\xcco\x19:k\x98\xdbks\x9c\xa5\xd9\x10\x0f\x15\xb8\\\xdc\xc5{\xbf\xb6|\xcb$?-\x0bE \x1bv\x1beI\x06\xc1G\x90B^\xf4\xd7q\xbc\xd4!\xefbT\x8a\x84\xf0\x00Z\x88\x1f\xe0\xc9\x12P\xe4-\x838f\x8f\xb6\xc9\x0f\x85\x86Df\xf6\n6\xd3\xff\x8f\xf9\x89\xd2\xcf\xe0\x03\xdf\xf7\xc7\xf3.N\x0b\x87R\x9d\xa1\xc7B\xa4\x03\\7R[sQ\xdbx\xa03\xee\xf3\x1d\x9c\x0c\x9e\xd8\r\xc5\xfe\xf3\xe0+\x1c\xd0F\xcb*\x89\x96\xba\xb6U6\x8d\xa3\xb1\xb3\x04\x14\x18?\x86\xbc\x08N\x07\xf4\xd96U\xe7\x98zT\x94\xe4\x8e\xca\xa2zO\x08\xabt\x0f\xa6\xe4\xbb\xeb(\xc6w\xe9\xec`\xe3\xfc>\x85\xe1\xff\x97\x17\xc4d\xe35\xd3\x19Mz\xce=!\xd2\xf9\xe5\x89-\x81\x94\x99m4I\xc7s\xa9\n`\xe4WL\x89\xdf,.d[\x15(\x1bgPH\xaf\xb7\xc2FS\x16!w4|\xfb\xc0\xbd*\x11\xbeb\xd8\xd2\x82\x80X\xa2,j_\xf8\xcb\xbd\xc5\xd0Z7\x97\xe9\xe6\xe3x\xba~\x80\xf6\xb8J\xd4~"\x8a\xab%\x8d\n\xcd\xf06l\x16\x17\x03"Tb\xf5\xad\xd2\xbf\x10,:v\x89\xa82\xad;\x98\x1el\x19e\xc1?\xea\x9a\xb37\x11\xb0\xed\xcc\xcbz\xa8\xe0My\xe0\xd4\x1b|\xd7\x90\xbb2:+qvN\xf8Y\xad\x16Zj\r\x93\xf9&.\xf7\xed\x7f\x82\x81ch\xabjx\xf8\xfa\x08\xb8@0\xd6\x9b\xe8\xdf QNP\xe4\xe4\x890G\xf2\xf0:\xc4\xd8y\xb1)\xb6P\x91\x0b\xc6\xaa\xaa\xb5\x8fg\x9f\xe6\xda\xb4\x8b\x86\xb6V\x082m\xd0\xbal\xaf\x84\x8e\xa9\x07z,\x8b\xcc\xd9\xe60\xbc\xc2\x12\xa3\xa8H\xff_\xeb\x8a\xe9\xa4\xaf/\r\xbf\xf8K\x08a\xd0\xeb\x04\x13#\xd7c\x91\x8a\xab\xee\xbd\xe9J\x01]\xee\x9c\x0f*R\t`\x17\xaf_\xf8\xaf\xd8\xb1\xca%\x82\xa2\r\xf6\xc2|A\x8e\xc66\x94\xd6Q\xbf+o\xc7\t\xd5\xa5\xfb\x1c\r\xe5\x1d"\x889\xc9\x84U\xae\xb8g\r\x07\xc4\x97%f\xdd\x03\xb5i\xdf\xbct\x84\xd3Q\x8f\xaf\xca9\xcdB%\x16\xa1\xcbGl\x0b\xc1\xd0a:\x1e\x9fn\x80\xad\xbfmhCAV/"h\xcbK0\xd4\xb9\xd9\xe6~\xc9\x87\xaf\x05\xbaV\xf9\x8f\xbc\x05\xdb\xf0\xad\x8a\xb0\xba\n\xb1`\x1b\xb6\x8b\xfa\xbd\xec\xb6\xb2\xfa\x81\xfbK1\x82\xf6\x19S\xa44\x10G\xacx\x8fM\xb2-c\x86\xf3\x04\x8f\t\xb4\x15\xf8\x84%\x98\x88\xc9\xdf]\x86\xf4=\xe5H\xd3fjV#|K\x92\xb1\xd6/;#\x82\xe6\r\xad\xfc\x9f\xa9i\xa6N\xbe\x92\xe2\x8fz\xcf;TT\xa4r\xc3\x99\x01O\xe3\x94\x88\xc6nk\xde\xa2[\x9e\xce\xf6\x8a+\xfa\xb1\xc6.H\x94\x1fvX\xe5\xe5|\xcaga7=\x98X[\x9dW\x9aT\xfd@\x86c\x9f\xa8/a\x1e\xc7pa\xb8\x96\xbb\xd5V\xbc\xccT\xb1\xd7v\x1aw(\x03\xbf\xd6\xc8j\x9d@N#\x1fl\xfd\x9c_\xae\x9e\xa9\xd0\xb5F\x82O\x14\x97\xed\x06\x7f\xb7\xbc\xb5I\x07\xa871\xd7!x\xcc\xe4\'Z\\y)\xe7\n>\xacL,\xf6\x00\xb2\xd5"\xb3\x8dA>\x97\x8bj\xaeI\x80\x91\xed\t\x151\xa4K\xc5(>a\x8c\xde\xd1\x17\xf91_/\x0b\xf6\xc6\xa3\x1dO>\x85ZP\xc4\xfdO!a\xf8`\xce`\x83\x92\xf5\x0e\xfc\xb9\x96\x1bi\x91C\xe7\xd5\xa2\x9e\xd2\xdcK7\xc0\xdb\x16\xab^\xd1\xf4<\x9cQ\x12f\x97\xc6\xa2"\xe8\x18\x92\x8f\x929\xadX>\x07\xdcP}X\xa5O\xadc\x80\xc7\x9aR\xa6y\xba\xbbs\xcd6\x0bk\x14%xlS\xb9N\xd1\xaaI\xe6KN3\xd2\x8f0\xe4\xed\x07\xad\x0f\xacD\x8e\x9a\x95\x13\xa9\xf7\xa3\x98a\xe979Y\x825x\x17\x82%o\x97\x11u\x8e\x04f\xfb\xd8\xe4o\xe5\xb6y\xbb4<9\xe4\xde\xee4\xc8O\xec\xf5\x83\x8e$|\xb7\xe9{')
|
1
|
+
from flask import g, jsonify, abort, render_template, request, send_from_directory
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
from hiddifypanel.panel import hiddify
|
4
|
+
import uuid
|
5
|
+
from flask import g, send_from_directory, url_for,session
|
6
|
+
import traceback
|
7
|
+
import user_agents
|
8
|
+
import hiddifypanel
|
9
|
+
|
10
|
+
def init_app(app):
|
11
|
+
app.jinja_env.globals['ConfigEnum'] = ConfigEnum
|
12
|
+
app.jinja_env.globals['DomainType'] = DomainType
|
13
|
+
app.jinja_env.globals['UserMode'] = UserMode
|
14
|
+
app.jinja_env.globals['hconfig'] = hconfig
|
15
|
+
|
16
|
+
@app.errorhandler(Exception)
|
17
|
+
def internal_server_error(e):
|
18
|
+
if not hasattr(e, 'code') or e.code == 500:
|
19
|
+
trace = traceback.format_exc()
|
20
|
+
import lastversion
|
21
|
+
last_version=lastversion.latest("hiddifypanel",at="pip")
|
22
|
+
|
23
|
+
has_update= "dev" not in hiddifypanel.__version__ and f'{last_version}' != hiddifypanel.__version__
|
24
|
+
return render_template('500.html', error=e, trace=trace,has_update=has_update,last_version=last_version), 500
|
25
|
+
# if e.code in [400,401,403]:
|
26
|
+
# return render_template('access-denied.html',error=e), e.code
|
27
|
+
|
28
|
+
return render_template('error.html', error=e), e.code
|
29
|
+
|
30
|
+
@app.url_defaults
|
31
|
+
def add_proxy_path_user(endpoint, values):
|
32
|
+
|
33
|
+
if 'user_secret' not in values and hasattr(g, 'user_uuid'):
|
34
|
+
values['user_secret'] = f'{g.user_uuid}'
|
35
|
+
if 'proxy_path' not in values:
|
36
|
+
# values['proxy_path']=f'{g.proxy_path}'
|
37
|
+
values['proxy_path'] = hconfig(ConfigEnum.proxy_path)
|
38
|
+
|
39
|
+
@app.route("/<proxy_path>/videos/<file>")
|
40
|
+
def videos(file):
|
41
|
+
print("file", file, app.config['HIDDIFY_CONFIG_PATH'] +
|
42
|
+
'/hiddify-panel/videos/'+file)
|
43
|
+
return send_from_directory(app.config['HIDDIFY_CONFIG_PATH']+'/hiddify-panel/videos/', file)
|
44
|
+
# @app.template_filter()
|
45
|
+
# def rel_datetime(value):
|
46
|
+
# diff=datetime.datetime.now()-value
|
47
|
+
# return format_timedelta(diff, add_direction=True, locale=hconfig(ConfigEnum.lang))
|
48
|
+
|
49
|
+
@app.url_value_preprocessor
|
50
|
+
def pull_secret_code(endpoint, values):
|
51
|
+
# print("Y",endpoint, values)
|
52
|
+
# if values is None:
|
53
|
+
# return
|
54
|
+
|
55
|
+
g.user = None
|
56
|
+
g.user_uuid = None
|
57
|
+
g.is_admin = False
|
58
|
+
|
59
|
+
|
60
|
+
if request.args.get('darkmode')!=None:
|
61
|
+
session['darkmode'] = request.args.get('darkmode','').lower()=='true'
|
62
|
+
g.darkmode=session.get('darkmode', False)
|
63
|
+
|
64
|
+
if request.args.get('pwa')!=None:
|
65
|
+
session['pwa'] = request.args.get('pwa','').lower()=='true'
|
66
|
+
g.pwa=session.get('pwa', False)
|
67
|
+
|
68
|
+
g.user_agent = user_agents.parse(request.user_agent.string)
|
69
|
+
if g.user_agent.is_bot:
|
70
|
+
abort(400, "invalid")
|
71
|
+
g.proxy_path = values.pop('proxy_path', None) if values else None
|
72
|
+
if g.proxy_path != hconfig(ConfigEnum.proxy_path):
|
73
|
+
abort(400, "Invalid Proxy Path")
|
74
|
+
if endpoint == 'static' or endpoint == "videos":
|
75
|
+
return
|
76
|
+
tmp_secret = values.pop('user_secret', None) if values else None
|
77
|
+
try:
|
78
|
+
if tmp_secret:
|
79
|
+
g.user_uuid = uuid.UUID(tmp_secret)
|
80
|
+
except:
|
81
|
+
# raise PermissionError("Invalid secret")
|
82
|
+
abort(400, 'invalid user')
|
83
|
+
g.is_admin = g.user_uuid == uuid.UUID(hconfig(ConfigEnum.admin_secret))
|
84
|
+
bare_path=request.path.replace(g.proxy_path,"").replace(tmp_secret,"").lower()
|
85
|
+
if not g.is_admin:
|
86
|
+
g.user = User.query.filter(User.uuid == f'{g.user_uuid}').first()
|
87
|
+
if not g.user:
|
88
|
+
abort(401, 'invalid user')
|
89
|
+
if endpoint and ("admin" in endpoint or "api" in endpoint):
|
90
|
+
# raise PermissionError("Access Denied")
|
91
|
+
abort(403, 'Access Denied')
|
92
|
+
if "admin" in bare_path or "api" in bare_path:
|
93
|
+
abort(403, 'Access Denied')
|
94
|
+
|
95
|
+
if hconfig(ConfigEnum.telegram_bot_token):
|
96
|
+
from hiddifypanel.panel.commercial.telegrambot import bot
|
97
|
+
g.bot=bot
|
98
|
+
# print(g.user)
|
4
99
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
100
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|