hiddifypanel 3.0.0.dev64__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev66__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/clash_config.yml +1 -0
- 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/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
- hiddifypanel-3.0.0.dev66.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.dev66.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,72 @@
|
|
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"\x0e\x00\x00\x12\t\x04\x00T\x17\x8a\xea\t\x14\x84\xc9\x93+{{?\xd7\xe3s\x00\x00\x00\x00\x00\x00\x00\x00\x85\xdb\xcd\xddl\xaa&A$\xdb7y\xbf\x9d\x1b\t\t\x94\xf5m]\xbbo\xa7\xc4\x1a+\xc9Q\r\x9f8\x06\x98\xdb\xc7C\x0e\t\xd2\xa0\x9b\xff^O\xcf\x06JE\x80\x06\xccEo\xc0\x1f./b!\xf3\x84}Yli\xe2\x11\xd1\xd5\\Q\x95(.N5\x19\x91s\xaa!9\xf4\x03\xba\x14hb_N\xd7\xc6\xfd\x85 \x83\xa6\xa8<N,\xc5\x84;\xd6\x8c_\x19\xf2\x952\xeea\xf8\x14^gw_\x8e\xc7\xd5\xf2\xaag\xec_oD\x97i\xec\xf8\xcaQ\xa1<Uw\xff\xae\xc4\xa50\xb8\xa97\x86\xaa\x05\xf8\xb6\xa2\x00\x99f\xe3W\x88\xa9*+\x9dM\x0b\xb3\xf1Pv\xaa*\xf0\x15]\xd7\'\x99%\x12`LX\x8e\x9b\xc9\xd3\xdap(<$Y\xf4\xd5\x03\xd7\xa8+\\\xe6-\xdb\xf5\xbb6\xe6\xb9\xca(\xf2\xd4\x0c`\x83\xd0$\x8eW\x96\xf4\x0bq\x06\xdb\x9ez\xda\x8c\x1a\x10\x0f\xee\x19\xc2hu\'\xa2+j\xb2\xdf\xc8\x07\t\x0e\xc1\xa1,\x86\x9eiE\xae\x12\xca\x00\x93\x1c\xe3\xa9C\x96\xe6\xd4\x1c\xfb\xa2\xb4,\x85\xe7\xc3\x92K\xd7rN\xb0zG\x82\xfc@\xe93\xed\x14\x0c\xf2\xf9\xc8\x01\xcb\xcdx\x1bn^X,\xbc\x11\xdb\xc7\x11q\xa8h\x98\xcc\xe6\xd5]\x99\xa5\xc5\x80\x93\xcc\xb2=\xf7\x03\xd3\x00\x91\x9d\xd9\x86\x1c\x8b[K\xeb\x87\xf7\xde\xd4\x8a\x99<\xc9\xd2\xc4\xc6\xeb\xf1\x04\xde\xc5{\xbb{lPJ+\x93\x87\xa2\xf9\x91\x8fH-\r\xfc\xa5\x1e\x9f\xf5\xc9\x9e\xc4N\x00\xa7\x8a"\xdb\xf8\xb6r\x13\xdd&\xb1a"\xce(O\xb8M\x0f\xb2-\xfa\xc7Y\x81b\x184\xe2+\xe5\x18\x96\xe4\xa3\xc23\x19xI?\x06\xe3\x8d$\xa8\xb5\xa4[\x95\r\x12\xa5e&\x90\x9f\xf2\xd5V\xf7\x15\x8c\xa72\xa9\xf8m\x0c\x9e\x05d9\xeb\xd2X\r\xbd\x19\xa8ub.\xed3\n\x04\x02\xb2\x07@\xdf}_:\x0c\x18GB\x12\xd4T\x84M\xe3\xd6\x8f\x1b8\x98\xca\xdb\x90g\xe1\xa9\xa6\xe3\x99\x19\x88\xa7\x13\x97;\xb8k\xbe\xae\xa3\xe7\xe8\xbf\xa6a\x19\n\xac\xb0\x80\xb4\xbc\xab8\xc4\x07)w\xa0\xd4\x0b\x0e\x0f`\xf7\xc1\xf6\x9f3\xc2^\xdc9\xbb\xabq\xba\x01\x9f\x9a\xaa\xb1\xcdce\xb6\x9f\xbd\xfe\x9b0]\xf6\xf78\x01\xdd\xa2\xa9gh\xe8\x801z\x9c\x9e\x98\xe8\xfe#@\xc5\xd931\xa3\xd3\x10\xcf_\x9a\x82\x9c\x85\x16\xd8\x10AMF\x97\x12S\xb65\x1c\x84\x15{z\xbeQ\x17_\x19\xd3\x92\r\xdf\x9c\xd8Q\x9a\xebs\x88\x05\xe1\x0e0\xa1\x99\xedW\x80Lr\x94)\xdf\xd0Kvt\x88\xd4\x99\xc4m\x05 \xa2h{\x97\xcd\x9d\xa9U\xd6I\xees\x80B\xa6\x95\x1c\xb0\x105\xfd\x1c\xbb\x8a3\x9e\xc8\xfe\xb5\xb7\xb3\x02X\xa9\xe7\xdc\xe8\x96\xef\xbb\xf8Y ^\x02\x8f\xc2\x91\xd1\xde\x17\xf5\x7f\x9d\xd4P\\\xe4\x0c8\xe6n[x\xa6t\xae\xb9N\xbb\xdc\xd3\xc6\x0f\xb5\x05)n\xf4R\xf9l<\x0b\x80"\x13\x9c\x01\x01tN\'Y\xd3\xc0\x03T\xbc(\xb5fEHhj\x1a\xaeV&zQN\xe4\xe1\xd7L[\x85\xd4%\x0c*\xe8\x95\x04\x7f\xeb\x17#\xf5\xd4\xdc\xe2\xd1\x82h\xc5\xf3\xe3\x08%\xfaN\xc8D\xa5\x08\x1e\x81\xdec4PK$\x16W\xf7\xe6u!\xb6\xe1\x187\x8ft,\xe1\x94#\xca\x1e\xaf\n\t\xde\xc9\xb9\x937\x95\x175X\xe2\xea\x06m!P\xe6P\xa8\xc2\xa0\xf8h\x90+i\xd5\x9f\x1f3\x8b\xd4\x04\xb5S\x06o\xb4\xc5\x14#/F\xb4\xeay[f\xfbPwt\xb2|\x03\xfbg\xb1\xd6\xba\xdd\xd8\x05=\xd4\x0f\xa1g~\t\x924\xc4\xce b\xdb\x97\x8cC\x13\xe8\xa4\x98S\xa5\xcc^\xb0>\x04\xa6"\x95Y\xad\xeaNZ=\x9cI\xe0W?\x9b\xb1\xd3\x90\xfatG\xaeM\xc2"\x03c\x0e@j\xffY4\xf4\xf76\x0by\x0f\x802\xd3v\xf5\x92\xdc\xfe}Qk\x97t-\xc7\xbdhP\x84\x84m\xd5_(\x12c\xcbo1\xe7\x07\xdb\x15o\x8a\xcb\x1eC<\x94\xcf\xe6K\xe4*~\xd0\x8c\xce\xbc2\xe1\xb2\xfeV\xb1\xf3\x1b\xb5\x00<\xac\xab\xd7\x0f\x971\x8b+\rJ\tr\xd9\xd6\x1b\x7f\xe8\xb4\xe4 \xf1L\xca\x804\xef\xf1\xaf\x026\xa7J\xa8\x8d\x0c\xe5\x94V\xfc\xfe$\xd9j\xf3\xf7~o\xbe\x98?A4w\xad\x9c\xa9\x9c\x8fbW\x1f\x0be\xe0O\xfe\x96\x1e\xd8f\xd19\xec|\x9du\xd6Mei\xfcmP\x96\xdf\x17s\x94\xa0\x11\x18\xc0\xa2\xaf`\xb0\xed_\xea6\x02\xed!/\x91x\tA\xac<d+\x9b\xc9\xfa\x0b\x12\x8bs\xeel\x9d\xc4\xf9\x91\x00\x880\xb6\x03\xa4\xde\xc4\x83:\xd6\xc9\xf0\x9fo\x19\xa5\xf4\x82h\r_\x98\xfb\xd5\xd7/\x05\x12\xcci\xfaJ(R\x0b\x17pU\xa1\x9a\xff]\xee\xa6\xe1\xe4\xe3\xfc\xa6u\xb4sn\xa1Nq\xd4[\xfeq\xcb\xa7\x1b\x8a\x0e\x9b\x97x:eb\x86MGc\xb7h\x046\xc0\xbc\x8ff\xdf\x94~IIu\x05\xea\xcb\xfd\x1b{\xe2\x0ek\xd92\x0f\x05\xb9\xc9\xbf\x19\xf2\x7f\x8a\xde\xfb\xe7\x7f\xc2\'\xd3\xcew:\xc5\x7f\xcf\xa7\xe8\x00\x94\xcey\x86\xc6\xc4q\xe9\xabe\xab`\x91U<t\xb6\x9a\xf4\xc6\x1b\xaa\t]\x13"\x9a\x9f\xe1\xeb\xdcT\xf1\x86\xb2l\x0c\x97\\GE\x93A\xc7\xf0\xceF\xfc\x9d\xde\xe5(\\O\x02\xbc\xd3+=\xdb~\x8a\x0f<\xa2\xe6\x82\xd6\xeb$_\x98\xb1\x94S\xaaC\x8b\xa1\xa0\xba\xdeG=\xf0\xb4T\xd4\x8bE\\Q~@\xaa>\x05\xd5X\xb1\xd6\xb5\x93Z\xbd\xb4\xeb\x01\xe4\x97\xda\x96\x9c\xe2\xac\xa9\x8b\xc5:\x96\xea\xe7\xb8H\xbf\x8b\xbe~\x1d\x82\xd8\xb9\xf0\xc7\x83y\xdc/a,\xb9\xb9u\xd6\x83We\xa0]\xd9\x8f\x93,\xe1\xcbm^e4 \xfcZ\x9eD \xec\x1f\xad\x08\xd7\xc0\xb4\xba \xfb\xd8m?T\xdag\xa0wv\xb7\xed\xfa+}\xdb\xea\x19>\xdc:\xdeQ5id\xd2\xbf\xffJ\xa4\xed\xe7\x0b\xfa\x99\xd6\xd0J\x88\xa3.o\xce\x17D}\x8aFh\x12l\xcee\xd3\xb5UW\xcc/\xa1?\xca\x9e\xb3i\x89-\xf1:\x00\x8f\x0f\xe1\x98\xa8=\x17\x12%\xe8\xf1d\xb3o\xaf\xbdR|\xc3\xf8b\x8b\xc4,\xc1\xf8QR\xd8\xbc\x16<O\xd4\xfd\xc0\xc2\x90\x8c\xb9\xc8\xd3\x87Zg\xb8j:\xb0\x01\x90\x90\x0c\x15D\xc7\xff\xfeE\xc2\t\xa6\x85\xccv\xdd\x84\xed\xad\xf3\x8f\x97wS\xcc`\x8f\xfe\x0b\x9bxJ/\xa9\x15\xbf\x82\xbb7H\xec\xe2\xa8e\xdeG\xaf\xdc?\x19\xd8\x1a\x15\xd5\xf3\xa8\xc5\xa1*]\xf0:\xa0\xa4alA\x91U\xb1\x079\xad\xf5\xad`w\x8f+\x8d\xeb\x1c\xb7\xdd\x98\x9a\xd3R(\xa7p\x9f\x84\xe0\x19\xa0\xd4\xbd\x00\x1c\xec\xb9\xb6G\x9b9\x88\x18n\xca\x9c\x06\x1c`\xfb9\xa2\xa1\xad\xbf\xc1%c3\xc1\x92\xa8I|\xb9#\xa7lDsU\x1b\xfa\xae\x9f\xac\xfc\nHiU\x8f\x11\xb7Q\xcfM\xcc\x9a\xbc\xba\xbc\x88\xbeua\x84\xc8\x08)\x19f@t\x1aH\xb2\xa2\x8a\x9e\xd7Y\xdf\xc0\xcbIvD\xb6T\xa3"\x15\xd0\x98\xf9\xeau\x07K\xc3\xe5<l\xf0V\x19\x0eE\xff\xed\xc5\x05\xf0\xfb+q\xeawd\xe37$\'\x10\xe2/\xb3\xf8qq\x85ymt#-2\x11\xa8\x18Ngg)"?\xa3\xe9\x8c\xe3\x8e\xa6)bm\xd5:\x80\x16\x85.\xe4HN\xff|\\\x9f/ 5\xc9\xd2\x838{\xb7\xdf\xe9\x04P}\xc1@\x85%\x96?S\xfd\x0f\xff\xe3\xcc\xdb\xb0!\x14\xc8\xce34\x83\x1bx\xc4\xd7\x06\x85\xc7cf\xa9\x8c\xe0F\x11\xfaw\xc3\x92\x80^2\x9bV\xbfS\x94\xac"\xd6_B\x1d\x15\t\xb8\xc9u\xfbe\x8fieO\xbbME\x9eDw v)][N\x08I\xf1\x88o\xedz\xd4.\xea`\xae\xd9\xdd\x87b\xe2l\xd8\xf8\x81\x05\x8e\x08\x1c\x8b\x1dI\x8dZ\x02\x11\xa6i\xbe3\\:q\xa6\x93BVR\x14\xcaDyN\xec$\x0f\x9e\xdd\xd9K\xb0H\x8av\xd8\\\x1f\x07u\x92\x05o\x94\xba"\x1bU(\x7f\xf3k\xc8\x94\xd5S\x13\x94\xc1\x16~\xc1J\xd2\x0fWq\xfbT\xfe\x89\xed\t\x97\xa0\xa9\x1bU\xaa\x1c/\xab|c\x8dQE&\xaej\x88\t\x06k\x8f\xe7jg>\xf4$pf<\xbe\xa6\xda\x1d\xbfK%\x8e\xba\x10\x8d\xaa1\xdd\x99o\xa9-[\xd5H\xc0[\x04\xb0\xd6\xc2\xae,\xbc\xa3W\x96\x192e\x9d\xac\xdb\xech\x07\xbe\xef\xa4\x81^SK\xe1S<./\x9e\xc5\xf5\x08Y-\x0eK\x11\x10\x86}MU\xba\x19\x04Wd!4\xc3\x0e\x16\x05GC\xba\x1c%\xc096}\xfe\xe8\x823\x89b\x89s\xbeZ\x0fX\x04\xe5\xe8\xferI_\xf8\x16\xb2cR\xc3+\x1c\xb0\x03\x87^p\xb4|\xe3@"\xa7\x03)\x1e\xc8\xc9\x0e\xe9o%\xab\xa7\xa8\xd6A\xf9\xc6Uk\x88B>\xcf\xf8\xe7\x14w\n\x06\x1e~(\x1a+\xd7\x08\xfb\x85,\xcf\xbb%tC\xf6\xaep\xb7V\xc081SI\x8a\x19\xba\xe1\xf9-\xb0*&\xf4M\x99\xb7|\x0f\xf1S\xc4\x14\xe6\xb6k\x14>\xa0\xbb\xcfEQ\xb7\xb7{b;\xf5\xf5\xe2\xc0\xb5gP%\xd2\x0c\xee\xd8UPTl\x17\x1c\x00\xce*\x02!\xcc\xc2\xf4\xf2w\xa9Cf\xa9\x04\xb9\xb1\x85\xf2\x02\x17\xb8\x7f\x89\x8e\xf6\xf46\x00\x05A\x87\xd3\xbe7\x96AA\xa1\xbb^\x17s\x1d\xeeX\xfd2XL\x80\xa0\xc0\x1fo\x97\xb7\xf3lt\x99\x9ck2\xdd\x02c\xb6F\x16r\xc4\xf1\x8a\x17\xe1\xff:\xb6\xd2\xcdx\x8e\xcc\xb04\x14\x0ff\xda\x16\x8f\xc8\x1f?\xa6\x84H\xb5\xd5\xf9\xcb\x195\x1c\xcar\xdc\xc6+\xc9\xb4\xe9\x81P\x9c\x9c\x14(\xc0\xbd=\xc4aq\x1e\xa6\x1e1\xf6\xcb\xe2b\xde\x92o\xefW\xb4\xae\xf1\xd8Cp\x8e\x95H\xb1P\xd5\xc8C\xb3\x1c\xf2\x8a6\xa8\xb3T>\xab\x1cSd3>\x96O\xe4f\x97\x02\x8e\xe8\xcc\x17\xc5\xe4k\x9cm\xe5\x07\x96\x19Ae:\xe9V\x0e\x95m\xd0\xa4\xa1\x03\xf5K$P:3\x02\x0eM#\xf7\xed\xf0\xc5\xcd+A\x86\xafM\x04L5\xca6\x0e\x1d\xb9\x05\xb6\x99\xc7\xb0\xa4 nl\x08T\xff\xcf\xcf\xa4k\x9cP\xf2\xf4\xdb\x10\xf8\xf9\x9b\x85\x83\x14\xd6\xbfL\x82\xee"\'\xad\x07\xe0F6 ]h4/\xc4\xd8!\x82\r\xe6\xb1\xf4\xe7\xf9\xcc\xaa\x9f"\xf1\x08\xb7\x91\xba\xab\xe8h"\xdcMG\xd3\x845\xd6\xad\x8a\x0bk\x83\xa9D\xe8G\xd4\xb0.\xd6\xe2\x9e\xb3\x0c?{ \xf9\xd0\x0ca\n\x9f\xe5\\s>bU\xa9\xb2\xbb\x84\xa0\xae\xb2q\xd2\x1f\xf1S\xd6!K\xb21\xff&*\r\x9b\xf0\xd1\x90\x851\x95\x02L\x12\xffD\xf4<\xdf\xff\x1cb4\xf2\xad\xdfE\xd5[\xf4\x02\'\xf6\xf5/\x85p+Q2\xef\x8eg\xc3\x9bI\xe8!\xff[\xe7\xa3)\'\xcf\x04\xd4\x16$\xb0\xd7\x00\x9d\x07A\xb9\xef\xf9\x1c\xb4"w\xb5O#\xd4[wJ\x15:j\xc1o\xe5\x16\x8e\xbb@w\xf1\xd6\xd36\x96\xc6\x06\x94\xfe3\x88\xf7(\xd2\xb6A\xd2\xc6\x04\xc6;\xa2\x9a\x83>\x1e\xabq\x01\xce\xe4\xcckPH\xca\x9e\x18I\xdf\xa99w\xd1\xb5(\xeb\xe4\xf2\xea\xady?.k\x85ZI\'\x1f\xa9\xfe\xe2b?\x12Ux\x86\xa1N\x9d\xab]\xccs|{v\xb8\xa2[\xe5\t\xd1\x9ea\x98\n\xf1g\xe7\xf2h\x0e)\t\x06\xe7\x9d\xe9^\x99\xc3\x17\xb7\xbf\xc1eGP6M\xe2\x89\xbeH\xbek7]\xd1,Jqz8\xf4M\xfe\xff\x02\xf6J\xa1\x92\xe4b.9K\xe5z\x9byx\xd6:v\xec\xbb\xa2\x90\xe2s\x10\xf8/(Z\xa7\xd7\x14\xa4l\xe2hrL\x02\xea|L\x87p\xf7\xd2A\x01`~\xe5c9\xaf\xdd\x1c\xe6z^?OH\xe4\xb5`\x82`\x15=\xba\xf2(\xaaw\x13M\x10\x866m\x83\x19\x13\xaf\x1f\xc8N6x\xbdD\xdes\x05^D\xb3\xbc\x97gm\x90\xcbs\xcf\xb6\xea\xb3"\xa9\xb5\xcc\xbc\x7f\xd9\xed\xd8\xe9\xd2\xa2Y\xae\xe9\x19J\xd5;^\xa2\xb5PQ\x10-\x05\xdf\x10\xc0[\x11G\xf3\x1c\xd5\x97\xcf\x14\x96\\\x93\xd5\xf1\nD\xa4L\x80C\xfdc=\xa2\xf1]zt8&\x831\xec\xa4\xd2k\xbd\x12\xe9\xde\xdf\x8c\xa7\xa4\xe4s1\x88\x919\xf7\x9ek\xf9]\xa4\xc4\xfb\x1f}\xc8t\x89 \x14YX-`\x99fC4\xc8\xb8\xd4\x9b\x92Ua~\x9c\xa7P\xccH\x80\x96\xec\xe42\xef{:W\x89\x01\x10\xd4B\xb3\xe6\xaars+\x88\xef\xc6\xc5QV!J\xdd\x90<\x0c\\N|\x06\xdb\xdbl\xed\x04\x93D\xaf\x88\x9f\xdal\xe8/\xad\xf2.\xb1P^=\x03\xab\x9e_\xd2d\xdc\xed\xd5\xf5nO\x06\x1f2mW\x80\x87\xf8\x94\xc5\x98^\xbd\xaa`\xa8\xb9\x1a(fJ\xaal\xb2v\xefX\n8\xe4/W\xb6\xce\x90v\xc2\xd0\xa0s\x96\xa8\xd2\xf4l\x04c\xdf\xf9\xd4\xb5\xe2\x95\xe5c\x1a\xa7\xe5 \xb5\xb4j\x9f,m\xc4\x9c\x98\xe6G\xcc\x8e\x9c%\xc4\xba\xf3\x9f\xb5\xd8\x04\x8a\xa0\xe8\xd0aD*)\xb2\xd9\x18\xf7\x05\xa8\xbd\xfa#b\x84Y\xdc\xf5\x85_\xfeK\xbb\x92\xadfG,\xe7\x07\x05G\x8b\xf7\x9e\xb3\xe2RC\xd5\x16?\xe1\xc0\xd0\xb1\xb9\x0f\xb4\xf0\xa2\xac\xd5\xcf\xf6\xb7?\xdb\xe5k\xd4\x1a2\xc7\x92*RC,\xc8$\xfe6N\nie\xac\xa5\x9d\xccL\xec#\xe5q)c\x8e\x98\xbe\x89\xc8k\xfb\x1c\x0e\xc9\x86LmTV-\x02\x85\x19\xfd\x13\xa3\xff`:\xa8\x03\x1b=\xdf\xe5zT\xc15\x06\xd9\x13\x17\xf21\xfdM\xc1\x16\xec\x0c./\xb3\xb3\xc1H}\x07\xdd{\x8b%\xf6\xfa\x87,Y\x92\xef\xc1\xd0h\x0c$xF\x91\xb0H=\xf4)\x13\x84n:\xab\x90\x9b\xe3\xcax=j\xa2\x85\xa4\xfe\x8c\xf3\x9csW\xc5\'\xbf-\xf5\x03:\xc7\xe5\xbb:\x0cv\x8b\xc2\xb1\x7f)~\x17,\x95\x1a\xd9\x15\xd0q\xba\xf5q\xe0O\x9a\x0b\x80\xa7\xb6\xdeQ\xdb\x97\xb6Tf\xe7\xff\x9fX\x8e\xd0\x10OE\xcb\xc8\xaf\xd3 \xfe\x1f\xec\xe8[\x1d\x06\xd8\x9f\x08q\xcc+6\xe8\x9e@@y\x05\x1d\x01V\xa6\xd0{n\x15\xaa\x06\xcf\xc7X\x00\xa7\xe3\x07\xfc\xc3\x03n!\xbc\xb6\xdc\xa2\x90p\xec\x9d+\xb1|s\xc6\x19\xe5n\xbd\x8a28w\xd7\xee\xd3v\xd5@\x84r\x17\x82\x03;\x1b>\xb4*\xa7\xc41\xa9N0\x90\xcd\x13\'\x91\x9e\xc10\xe0\t6\xce\x95\xbd\x97\x7f\x8b`\xf8R\xb9\xb4\xf7B:qd\x04wi\xaa9\x88\xf1;\xd9I\x9dD \x1c\xf3\xe9\x8811\x88\x03C\xb9C\x06\x824\x8f\xaa\x16y\xa7r&')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel import hiddify
|
3
|
+
import json
|
4
|
+
def sync_child_to_parent(parent_link=None):
|
5
|
+
parent_link= parent_link or hconfig(ConfigEnum.parent_panel)
|
6
|
+
if not parent_link:
|
7
|
+
raise ConnectionError("no parent link")
|
8
|
+
|
9
|
+
return send_to_panel(f"{parent_link}/api/v1/sync_child/",'PUT',hiddify.dump_db_to_dict())
|
10
|
+
|
11
|
+
def add_user_usage_to_parent(dbusers_bytes,parent_link=None):
|
12
|
+
uuid_bytes={u.uuid:b for u,b in dbusers_bytes.items()}
|
13
|
+
new_user_data=send_to_panel(parent_link+"api/v1/add_usage/",'PUT',uuid_bytes)
|
14
|
+
|
15
|
+
|
16
|
+
uuid_status={u.uuid:is_user_active(u) for u in dbusers_bytes}
|
17
|
+
hiddify.set_db_from_json(new_user_data,override_child=True,override_child_id=None,remove_users=True)
|
18
|
+
have_change=False
|
19
|
+
for u in User.query.all():
|
20
|
+
if u not in uuid_status:
|
21
|
+
have_change=True
|
22
|
+
break
|
23
|
+
if is_user_active(u)!=uuid_status[u]:
|
24
|
+
have_change=True
|
25
|
+
break
|
26
|
+
if have_change:
|
27
|
+
hiddify.quick_apply_users()
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
def send_to_parent_panel(parent_link=None):
|
36
|
+
send_to_panel(parent_link)
|
37
|
+
|
38
|
+
def send_to_panel(url,method="GET",data=None):
|
39
|
+
try:
|
40
|
+
import requests
|
41
|
+
from requests.adapters import HTTPAdapter
|
42
|
+
from requests.packages.urllib3.util.retry import Retry
|
43
|
+
|
44
|
+
retry_strategy = Retry(
|
45
|
+
total=3,
|
46
|
+
backoff_factor=0.5,
|
47
|
+
status_forcelist=[429, 500, 502, 503, 504],
|
48
|
+
method_whitelist=["HEAD", "GET", "OPTIONS"]
|
49
|
+
)
|
50
|
+
adapter = HTTPAdapter(max_retries=retry_strategy)
|
51
|
+
http = requests.Session()
|
52
|
+
http.mount("https://", adapter)
|
53
|
+
http.mount("http://", adapter)
|
54
|
+
|
55
|
+
headers = {'Content-Type': 'application/json',
|
56
|
+
'Unique-Id': hconfig(ConfigEnum.unique_id)}
|
57
|
+
print(headers)
|
58
|
+
if method=="GET":
|
59
|
+
response = http.get(url,params=data,headers=headers)
|
60
|
+
if method == "PUT":
|
61
|
+
response = http.put(url,json=data,headers=headers)
|
62
|
+
|
63
|
+
res= response.json()
|
64
|
+
print(res)
|
65
|
+
return res
|
66
|
+
except Exception as e:
|
67
|
+
print(e)
|
68
|
+
print(url)
|
69
|
+
print(headers)
|
70
|
+
print(json.dumps(data,indent=4,default=str))
|
4
71
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
72
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/init_db.py
CHANGED
@@ -1,5 +1,395 @@
|
|
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\x00bA\x00\x00\x12\t\x04\x00t\xd9l3;o?\xc1\xf8s\nz\xab\xaar2\x00\x00\x00\x00\x00\x00\x00\x00Y\xea\x8a\x15\xcbb<W,w\x11\xe0\x04\xd0x\xa8\x16F\xa8\x93\xd6Mj\xdf\x9f\xd3,\x1bA:\x85\xa0\xe2l\xdc\xbb\xaa\x89\x1e\x86\x87u\xfa\x1b\xb4`\xe1\x0f\xb4\x827\xecH=\x93E\xd39R&z\xeb\x10\xa7b\xaf\xd9\x96F/\xf3\x1fAc\xf4\xf7\x12\xdd\xe0\x9d\xc9\xd8hqwQ\x10\xd4\x83\xf4]81\xc1\xef\xc9\x1d\x81C\xe0\xaeTq\xcc\xc6\x8f}F!\xc6\xbe\xc7\xfd\x80\xc7\x0bi\xdb\x9dl\x9bq\x7f\xb7\xf3\xc5t\xbd{\x01\xbdh\\\xe3^a\xf9\xb5<\x98Z\x85\xd0XG\xccW\x1d\x978\x81\x8dD5B\x08\xde\xe2\xaaF\x8c\x93\xf2Fn\xdd\xb0pC}Y\xcc\xc2\x10\x07\xb6\\\xc7^\xd0w{\xd7}6\xee\x8a\xfb!x\x04D\x8c\x8bB\x9cL``J\xf8\xd1E\xfd\xcb\xc2Y\x08\xd6\xe2\xc6\xd1\x839\x06\xfci\xdfrh\t|i\xcf\xf3\x8b2\xfc\xb1\xd3\x94\xb6\x96\x85\x17\x88\x1b\'\xbe\xcc\x9d\x9c:w\x03\xa3\xe6\xe3\xc0\x0bE7\xa1\xd0D\x90\xc4N\xbc\x8b\xcdrJ/\' \x87\xfa\xce\x8c(\xc0Z\xc4\xdb\x16\xe7\x8aG\xc5\x05\xcc&\x1d\x96\x9dR`?}7\xfb\x97\xfb\xcb\xdf:\xc8\x0b\x14\xc5\x16\r\x05\xc8\x96\xe1\x01\xc8\xc0OZ\x88\xfci\x88\x9d9\x1fM-\xc9\x11\xc9w\xd7\xdfL\xe6\x9f\xfd\xc3?\x91\xcf\x18\xe4q\x9d\xb2;\xcf\x8bD\x98\x7f\x9axs\xca\xde\xfd\x1ddp\xbe(\xe54\x10\xac\xdd!rU\x1e\x7f\xd3\x87\xdc\xfb\x85\x10^I\x86\xf0\xc4\xbe\xc5\x04\xadsn~*cB41+$\xf8u@ \xf6\xe4\x13\x98,SB\xee\xde\xf6h\xc0l!@n\xeapc\x1d/\xbap\x911ESz\xf8L.\x0b\x1d\x91\xce519\xdb+\\7\xf91\x0cU\xb8\x02n~@(]GE;\xd1\x14\x9d\r\xfb\x07\xc4\x00+\xb8\xbf.\x89\x06\xefa\x8c\xa9\xed\x81r\xd7Dh\xa1\xb3E\'\xf2\x8c&\xf6b\\L\x95\xf4y\x1d\xf8\x8ac\xf7A\xd5\xd7\x80a\x8fn\xbfS\x8b\xb2\x90,:\xd0\xf3AB\xda\xa6:d\n\xc0Ny\xd2f\x17\x06\xe7\x8a\xc1\xd2{Q\xb6\x16\x93~\x02\xe3\xe3R\x9d\x82y\xb17\xbf[\x10!\x04\xe8D\xfam^\xe0O\xa0P\x11\x97_\x98\xee\xa8\xe5SW\xff\xb3{N\x8b9\xb2\xec4\x04\xa7\xd7R\xc9;h\x13\x8af\xda\xda\x98h`\xd5\xb4\x8eK\xbc]\xc3\x0e\xdb\x1b^\xaa\xf2\xdc/y\x11U!a\xd0z\xc5\xfd\xc9\x1e\x0b\r\xdetHaj\xbf\xd2\x0eK\xbf\xac\x93\xf5\x95KK#\xcaKDC\xb4\x08A\xab\xef\xda\xdf\x9b\x089\x19\xf2\xc5-\x9f\xa2]\xa2o\x81qZ\xf9\xe4\xda\xeb\xf7\x1c*\xb0\xd7\x065\xd9\x1f\x8d\tOL\xb1\xce\xe0\xc3\xb0\xa5\xa1\xecq\x9fnz\xf1\\10\x8d\xc7OW\xfb?XB\xcdag\x84sSBW\x92!\xae\x90\x9b\xed#\xd1\x08\xecX\xff\xa0zU5\xc6QW\x80\xa5XN\x04\x9a\xf2\xc7\x94\xcd\xb8f\xdc>\xdd\xcbX\x10\xa6G\xa1\xf8\r\xf5!\xff\xf8\xedp^\x19\\)4l6et\nK\xea8\x83\xf0\xd7B\t\xe2\xd16\xd3\xb8\xe7x\xf5e\x84J\x13\x80\x05z!$\xfd^m\xdb?[0\x1c\xc7\x9a\x07NW\xcc\xe4[\x18\x11C]\x8a0\xd1VHA\xef\xdbB\x16\x7f\x00d#\x15\x88\xcf\x19\xe0\x01\x7f\xa2\xff\x16+\xe7\x9a\xc8\x0e\xc3`2i|\xc2L\xd0v2\xd9cy\xa8\xa6\x93\xf2\xc5\x1e H\x9a\xc1\xe7+\x91\x0e\xb8\x96\xd4N\x15\x00\xf30z\xb4-\n\t\x94\x05\x83X\x9dY\xda\xee\\\xed\xe5\x8b\x86\xa4\x92\xcdrj\r\x8aF\xcd\xf4\\\xa1\xdf\x9d\xb3w\r\xf8\xc6\xb3\xbc\xc5f\x1a\xfbR\n\x8e\x91j\xe5U\xa4\x9f\x05c\xf3\xe4+\x86|\xee\xd9\xa4\x8e@\x17j\x7fy\x96%\xf8=K0\xfb\x1b\x1f\x82\x18B\x1e9\x96\xc1\x01Yh[\xee\xb6h\xa3@\x92\xd3\x8f\xcf\xbc\xd8\x87\x8f>i\x8f\x0b\xd6\x88\xc7t9\x94\xb4\xe6\xfe\xac\xff\xf0D\xd4bv\xb5\xf2+\xd9\xd8h\x0f\xbf]\xb4q\xd8\xa3w\x08*\xa8\xc2\xd8\xe6PQ\xc1oZI\x035\xe4hG\xefw\x15\xfcR\xb2\xad-\x98[\x93\x0ec\x10\xb6\x87\xaa\x8d`\x95\x1f\xd9V\xa8k\xf3\xfdh\x1c*\x03H\xa3\xb5(\xda\xf9g\x96\xce\xb43\xd3\x93\xe1\n\xc3\x7f\xdf\x14\t\xaf\x07\xaa\xbc*\xcal\xfd\x87=\xe7\xed\x1b\x17\xecf\x872\xc9\x13\x9f7\x8dm\xd3\xbd\xda\xe9z{\x1f\xffV\xf1\xa0|\xaa\x01\xf5\xa0\xa2i\xa84\x02\xa1\xaaX\xde\\q<\x84\x8d6|x\x17\xc0d\x00\x82\x93\xd8\x03\xa7\x94>a:\xc2\x19s\xf1R\x8e\xf1{ I\xb3\xfc\x0fN\xa5\x9d\xf6\xdb\xcbk\x9d\xb9\x12S\x84\x99\xa5j<Sb\x84fE\xd7\xea\x87\xd4V\xcet\xb2\xc5\xcd;\xb9\xffZ\xeb\xd7\xe6!\xf2\xb6_\xd027,6/\x9c7\x16*S\x02\xe3f\xa2d/\xc4#\xa59\xd6)\xf8s[{G\xb9L\xdd\xb1|lTW\x9c\rK(4\xbfQ\xc3\n\xe0\x11\xf6\x15q1\xa2\xdd*?\xd0\xf0:\\\xe0p\x17A[`o\xb0\xd9\x03\xaa 4!\xac\x1b\xcc5\xd86\xca\xcb\xbbt\xd5v\xdf\xaf\xe8,@{Fg\xec\x86\x17\xc0\x96\xa0\xc8\x7f\x1dbA\x86r\xe8\xa0\x12\xa4\xd0~\x9a\xb1d0\xb9!\xcb\x1e=\x07t\n\x0f\xed\x13\xb4\xce\xcb%gq\xb9\x15\x88\xf3\xa2r\xa7\xa8\xa0\xbc\x9c\x87\xa0\x1f7\xeb\xe2H\xd9\xdaB\x8c|\xce2\x10\x18\xee\x89@\xfe\xaf\x17\xcc\xb97\x85\x91\xfbg\xf7\x88\xab\xb5\x05\xe2\xcb\xb2\xaf\xbadC\x8f\x10\x18,\xf7\x02\xd2\xe80\xc0\x12\x89\xf6\xd4e\xe3\x97\xfd\xa3\xd1\x03\x08\xabx\xb7$k4\xc7\xbb\xf0\xf6\x1e"\x82\xbe\xb3\x9cx\xed\x17\x88\x18A!\xd3:\x16\xf13s\xe1\x0f\xfe\xc7\xbc\x01\xf4\xf4\xcd\x9f!\x88\x01>\x12-\xcfdD(\xf9\xff\x11\xc6w\x95BR+9\xfd\xca\x03y\xc3\x13j)fn\xd7\x98\xa4\xcc\xbb\xcfi:\x91\re\xce?\x0cs3\xb9td\x9f\xb1\x05G\x93R\xd8$id\x07\x8fXm\xe0"\xe5\xa2\xae!\xcaX\x10\xcf\x8c/73\xc8\x92\xc2\xca\x9c\x16\x91\x91\x14\xab\x9a\xae\x86\x93\xf9\xa8\x16\xad\xe5\xd5i\xa2\xba\xb5\xe7\xac\xc8\x00\xdc%\x0cL\xe91\x9c\xf3\xf3Z\x0f?\x8fV\xed-K\x02\x07HE23\x99\xce\xac\x1f\xdfL2\x9a\xa3H\xdc;G\xbb\xbb5(H\xe5\xef\x86\xdff\xa0S\x05"\x84\xd0z\x82M\xd7\x10p\xb4\xf6;w\xf3,\x19\xc8\xb5c\x14\xf1m\x91\x18}r\x10.\x9b9\x91#\xd6\x04\xae\xc7\xbc\x92rU%\xe6\xb7\xd1\xc1\x14\x8e\xc6\xce^\xcc]d`\x0e\xb13\xd8r\xce\xa7\x91\x98\x99\x97\xee\xebq\x8b\xe0\xc3\x97\xc5\xecSV\x18\xeb6\xe7U\x17z\\?\x08\xbc[\xe1\xb6$\xc0\xfe\xc6\xed\xe7yn\xd68\xa44\x87\x13,j^s\xea\xbdv\xda\rC\x16\x7f\x9a\xeb84\x87\x83>2Kd\xddxW\x89\x08\xc9m:x 8\xc1;\xca\xed\x0fG\x94\x9a\xec\x01\xa7\xe0\x14\x81\xb3\xe7*\xd8\xcfe(~\xf7\xa8\xbd\x90\xca\xa9\x93\x85\xa6\x92\x99\xb0\xca\x10>\x9bq]@gi\xe3z\x8d\xc4FE\xd9\xbd\x96\x1e\xcc\xa2\xc0-\xf1\x9bn\x13\x1e6\xb9t\xd5t\x87Ow\x9f\xbaQ\x94\xb5\xba4ew%\t\xfc\x86\xb4\x9a\x89\xd8v\xe0\r\x83\x9c\xc4-\x05\xf2Mt\xf2\x08\xc9Z=\xa2\xed\xf0a\t\xd5\xd5\x0c)\xcb4\xb81\x03\xcc"\xafw\x06G\x95\x86\x97\xe8\xa0\x08\n\xff\xe2a\xff%\xaf\xf5\xc8F\xec\'g\xcc\x11\xd3P_< I5\xf3\xa0T\xc6\x0f`\x87\xe9sc\x96\x02\x85IV\x8c\xdf\xad\xe5H=Ig:Zb\xe9o\xc4"\x80\x14\x97\xd2\x18<W1i\xc1\xef\xb0\n%\xa3o6\xbc\x88\xf5M\x07G\x92E\xfe\x8c\r~[\xe7MWk8\xac\xfdl\xa6M\x17\x08>s1\xccF\xa9\xcc\x02\x03\x9d\xf3\xd1\xf8\xf2\x80\xbd\xf5\xdf\x9a\xc8@\x80\xf5z6\x01k\xad\xed \xf3\xc8\x1c;\xb8\x02\x03*\x9f\xabf1vt\x9b\xb8\xa1\xbe\x0f\x84\xbb\x9c\xc2\x8bij\x86\x05c\x7f\x10~Zf\t\x9e"\x9a\x90\xf4\x07QM\xcb\x05\xd2Y\x08\xd4q\xbe\xefM\x9e\xe5\xe1\xa9\x10\xcd\xa2\xb4\x92<\x95QC\xc7\xbd\x02=w\xab\xc7\xf4\x8dF\x18\xf7\x1b\x03\xb9s\xd8\t\x96\xa7\xbf\xfa\xda\xa8\x94\xc3B\xd2\x8bm9\x0b\xe5\xb5\x02\xc4L\x9e\xaa\xb12\xdaj\x98GE\xc1\xbey\xc1b\xc3\xd7QG\xbb\x19\xebb\xea\xb9\x0052d\x1b\xdfk\x1c\x0f\xfe\xabL\xc2/\xaf\xe5Q\x16M\xf1\x02\x88W\\\xe0k\xe0)y\x95\xf8\xcdy\x9fD\x00\xd1\x9f\x01\xdc\xed\x18\xdc\x82/Y1\x1c\x1d\xdd\xa5\xcaF\xaa+\xc1?\xc40\xda\x8bORE$\xde=\xc5=!\x8a\xb2S\xcb\x8cQn\x956e\xd6]\xc9,RD>\xb6\x18\xda\xdc\xfe;\xd5\xd2\xb8ZD\x02\xe4\'%\x7fH\x8e\xad8\x7f\xd0J\xcb\xde\x84u\xc7\xc2C\xa2-\xf5\xda;\'\'\x1d5\xa5\x96XK\xef\xd2\xba\x10\x18\x07i(\xe8\x84 \x1b"Q\x06x\x9b\x924\x90\x9c(M\x04;\x85\xa2\xdd\x87\xc9\x19z\xeeM\x9d\x03\xd48\x857\xccI\xd6\xfd\xf7\x1eI\x85|S\xdezi\xbby\x8fPV\xbd\x02\xb7\x9f\xbc6\x05 J.\xebda\xaf[)]]\xacF\x01\xbf\xd8gP\xa3\x11\n;\xd2\xfc|\xfc\x1f\xf9\xfc\x12\xfa\x7f<\'$\x89\xa0c\xee\x92&\xc1\xf9i\xe6\x86\xdfeu \x9e\xa45\x1a\xd2\x97C\xa0.":\xb7I\xd4\x15\x01+w\x1a\xa2m\xb9\xfa\x88\xe7!\xb0\x94\xd2\\\xa4i\xa1\xbd\xde\x0cc\xdb&l\x9aRg\xc9o\xb3\x85\x0cc\xabV\xcb\x93\xa4\x13\xa8\xc6R\x12%\x05$)\xaa\x1d\xfeu\x15\xe9n\xf9\xe8w.\x88G\xaf\xf7\x9an>\xba\x85\xb4\xd16\xea,\xcc\xccm\xde\xd6|T \xecu\x84\xf4Im\x00\x11\xf0\xc4\x07\xd1SA\xd3\x8f/p\x08\x9bI\x9f\x8fW\x0c#\xa2\xcc\xcaC\xe7\x05\x8c\xf1\x0860>\xcc\x03\x14\x082\x13\xbft\xae\x90\x80fyE(\xcf\x93\x90n\xa3\xec\x9f\x17\xdc\\\x9838\x96O6 \xc2\xfa\x10\n\xf4\xf0M\xf8\xdf\xdbB\xa0Se&R?\xe2A/\xf3\xfdSd~\xde\xfc?}\xca=\x05\xd6}\xaf-8\xef\x0e\xcc\x0eh\xf6\xdcz\xb2\xe6\xa3\xaf\x89\x06\x04\xe6\xc5\xcb\xfe\'\xad)\x1b\xc0\xf9\xc4\xe7\xa2\x96\x079\x1d\xae\x08\x1c\x1c{\xfe\x9e\\\xe7\xe8mq\xb4\x04(\xb3:T\\\xeeA\x92\xfa\x84\xea\xa1r\x95\x97\xe8;\xd4\xd7\x03\x01\xa80\xffB\xec\x01hn\x104\x8d\x86K\x14~U}\xdc\x01\x07y\x10\xcdd\x91\xd8\xe3\xd3\x99C\xaaB"\x07\xdb2T0\x08YP}b\t6\x89\xa4\x8e$E\xf9\x9ft\xbch\xaf<\xb5\x07YP\xd0z\x87\xa6 A\x16\x0bFN]\xc5x=\xdd\xc4`\xa4J\x17\x01\x17\x0cl\xe5\t*6\xc0"\x16$k\xfd\xeen\x9d\x9d\x87\xa9qV$\x8f\xc3#\xf7\x19\r\x88W\x92\xdbQ\x13we\x94X\xce\xb7\t\xcb\x03\x7f\xca\xfd\x02V>SB\xc8!1\xa3C\xf4[\xaa1BK\'^\xc9o\x9e\xe8\x01\x95\x15\x85f\xf2\xbcq\x160\xd0s\xc2\xff\x8bO\x88\xd0\xe4\xe01J\xde\xd60\x8a\xc6C\xdda\x911\xe5"bL&\r4;\xf2\xe2\xdb\xa8\xce\xfd\xb8\x1ah\xb1(+\xa2}\xd4S\xffLl\r\xc2\x80\xe7/\xaa\x8aJ\xfc\xd2t\xa7 m&5a\x17\xf3\xb5\x87G\xb0\xcf\x18\xe1\x865\xc1O\xab1\xbd\xc8pnv\x14#\x8d\xb2f\x9fnh\xe7\x10\x13\x9dH\xde\xb7#\xcf\x9c^\x9a+\xf5\xa9\xac\x81\xf4\x80\x8d\xf61\xf9\x9c\xd1\xdb\xf8\x0e\x7f\xd9\x9d\x16\x1a*\xed\xee\xd4\x02\xe2\xfa\x8e\xcayiv\x14\x8f\xf3\xb3u\x8e?\xefN\xfb^\x02\x83Yk\xe9L\xe0{(\xa8\x8d*\xdf\x1cB\x823m\xd0a}^\xfaWWm\x12\xb89X\xb3\x9e\xa94H\x95\x88\x91\nIE\xe4a\xb8\xd7D\x0bD\x9f\x98\xbdT\x98\xcb\x80T\x8aC7@ \xa2\x07\xc0O\x1a\x18d\x84\xe0\xd6E\xc8\xa6\xcb\\\x89y\x14\x1fC\xac\x99H<\x9a\xbf,c5\xa8\x88u\xf3\x80\x17\xcf\x0fj\x83\xd6\xc1\xa8\xd9\xb7\x92+\x8f-\x9dhij\x8eS+\xc5\xfe\xe9\x07L\xb1\xadC\x18\xda\x0c8\x8d\x1c\xf8\x1bqq\xf3\xe6o`\x7fW\xfe\xdfRQ\xe4\x17\x1f}]\x90n"\xbf:\x0f\xdf\x1d\x9a\x0e\xd4`,\x01\x9635\xd3z>SO\xac\xf2\xee\x80\xe7F\x14~w\xee:\xb5\x83\xa2&1\xf4o\xb2\xc7\xa7\xdb\x9f\x95\xaa\n4\xb1\x8c\xe0\x15\xe7W\x82\xa6`?\x1d`B\xb5\xf4\xab\xd0\x87V\x95%\xf1\xdd\xdbs\xe6\x877\xbf\xd32\xb23\xb4y\xb4U\xe7\xd2\xa9\x91\\\xed\xa4\xc3\xb697\xca7\x89`\xd5\xf9\xc6\x10\xc2\x9f\x08 h,k\x80\x9a\xb1}\x80@,P\xda\xcc\xdcE\xa5\xcb\xack\x01\xac\x9e{<\t&\xa9\xb0\xaf\xe9\xee\x1d\xdb\x01\xc7\xec\x84\xfbB\xaa\xe7\xaa\x1bC\xb8~\x0bb`C\xa7A\xf3\xb1\xe75t?@\xf9)\xcdg\xb8\xeb\xa5\xef;\xe8S$\x84l\xc1?\xb9hk\x16A\xb6\x08Q\xda1\x15U|\x96\x8a+\x0c\xd7\xe7\x18\x91i7\x1e\xfe\x9e\xa7@\x1a\x875\xdbg\xf4\x08@9\x1fni\t\x8etW\xb3\xf0\x16\xcb\xa22:t\xbe\xfcs\xf4\x7f\xbe\xac[&\x9bYA,*\x1b?\xedb\xc6\x93RI;\xef{\x06\xe1\x84\xa0\xc0m\xa2K\x9cC\xcb\xe2U\x87\xaa\x1c\xbd\xc1\xee1\xc7\x06\x16\xe0,/\xef*\xbc\xbe\xdcR=\x01\xb2\xc2\xb47\xfa\xde?l\x00\xeb\xec\xaap1\xb2\xda\x81\xaez;p\x89Q\x1e\xf3\x8d\x02\xd6\xa89\xa77\xba\xa1\x87f\xfb\x80\xffVg\x84C\xc5aj\x8b\x06\x8b\xa2\xb3D\x01\x0f\x15!i\xa1\x0e\xb6\xa4\xe4\x15\xbe\xda\xd1\xbf\xb11f\xdb`dj\r\xc9\xbf\x92_fi\xb9\x90\xb9\xd6=\xc4\xc1\xd2\x96o=pQ\x81\xeb\x92\xdf\x86\xfc\x8b\xa5\xc4\xaf\xc6\xb3\xc87\x02\x07\xb9\x89\x99\xd4H89\xc1\x983\xf3\\\xdd\xcd\x13?\x04"\x92\x9b\x05,\xc3\xf05\x91\x0c\xa0\x80\x16h\xe3\xe8B\xe6\xe9\xd8G\xbb\x0b\x83C\xd4\x1d\xa1P \xfd\xf0ZY\x955\xc3\xe5(2\xfc\x12\xf6D\xe2M\xc0\xc0\xbfy\x1dB\xb4\xfc\xfe\xcb\x0el4\xb9E\xa2\x1f\x00\x82\'\xf3\x93Y\x92\xed!\xb1e\n\xb2QBL\xce\xb51\xf0\xf1\xc8\xb5\xf7\xe1\x0c\xc2R\xae\xb9\xff\xc5\x1ct\x01\x16\x19\xfda\x87\x18l\xfb\x00\xf2\xda\xb8X\x13\xee\xcd;\x1atd\xb7\xd6\xd5\xee\x009\n\xdfh)9p\x01z\xf7\xdb\xd5\x07\xd9D\x86\xe7\x9d\x0b=\xce\xd214{\x9f\xeb\xad\xed}\xb8\xaf\x18a\xb6\xa9o9\xc1\xbf\x8a\xc59\xc9\xf9\xbc\xbe\xf7(r\x8cU\x14\x81\x96\xaa\x92\xf3h\x16\\C\x87\x83\x85\xbd\xd9\xf5\xc902yviw\xc9\x99S\x87V+\xef\xab\x1c\x94j"\xecuZ-8\xe7\xbd\x80[?\xd7\x0b+\x87\x83\x9fK\xf3\x0e\xb0\xe2y\xe4\xdf\xbb\x06\xfc\xac:s\xec\x82,\x15|\xedx\xc6\xba!\xfa8D\xa0\xb7\x82\xf5~{?2|A\xe0\xa5s\xbef\x97\\#\x83H\xe2?\xd9p\x96\x8d\xf4\x93b\x9f\xec\x8cl\xfe?\xf5\x97\x12\x14\xfe\xb9`\x0b\xc1b\xca\x83G\xa5\x87\xf4\x1d=\xa5\xb6\x81\xaf\xa6\xb5\x1a\x04\x10[\x08\xd7\xff\xf8h\x1e\xec\x9c\xd5R\x90\x01b\x9f\xae\xa6\xfdb5\x18\x9eM\x1a_N\xeaD\x1cp\xcbw\xa3W7\x84\x8a)\x86\x06[\xe8\xb3\x0cy\xf4\xfe\xd0N\xa6\x860#\x19\x0e7\x89\xbd<\x91\x9d\xbf\x17M\xd8\xb7\xf9\xf5\xf2\xe3\x92\r\x01v\x06\xb8[\xcaB]\xa1>\xce\xfa\xf2}|\x10\x11\xb9K\xdan\x9c\xed\xf0ed\xe8D6\x87\xc8v\nZ\xdf\x86\xf5\x9d(\xa4\x12\x96\xb6\xc0\xe2\x8f\xd6(\x05\xcf\xb0\xf4\xccK\x01\xdf&\xe0\xaf\xf7<\xc7\xda$\x90l\x85\xa6\xc1\x99\xfb\xc7\n0\x85rR7\xe2\xe8\xcd\xf0t\xde\x8cw\xb6\xc2\xf9\')4s\xe2\x9dT\xba\x0b\xbf\xe3\x1e\n!\xd1\x82\xc0\x87\x939^h\x80\xbe\x9c\x1c9[\x1f\x81\xba\x00s\xf2@\x18\xb6+ySsnQ\xbdg|&m<v\xc3\xef\xff!\x81\xe0\xf0\\h!\xd1\x044\x01\xfe\xc8\xb5\xa5\xe1\xf7\xe9NY\x96Jq\x9f\xf9\xc39uK\xfb:\x12\x14\x1a*[\xb5\xb1%\x15\xf0@\xc4\xaf4Gs\xadK\x8a\xbclZ\xf0\x80\xf9\xd0\xd0\xb32JT\x03@5\x8f\x1a\x94k\xe5\xbbc\x81n\xf2\x8aL}\x04+\\\xbc\x11a(o\xfd\\\xb1\x1a\x95\xc5\xe3\xb1/\x19\x8bg?BA0\x0b\xd1?\xad\x90=\x10\x14\xcd\x07\xd9v\xc6\xad\xb0 \xa5Q\xee\x01\xbb|\xe4Q\x8a\x04\xb0""/2\x9fc\xaa\xbe&\xc9\x1b2\x89\xd9R\xb6a\xeb\xd8\xd9\xde\x83i[\x1a\xd1\rU"\xdd\xab?\r\xf0\x8c\xa1\xa9\x97Us\xf7\x9c8\x91\x02i\xc7o\xa1\x81\xd7y/8\xc4\xe72|Aao\xe8\x14\xf9\x8e\xab\x85\x85\x94\r\x05x$8E\xf4\x12)\x89h\xc2\xab\xfe\xc4\x99\xf3\xef\x98y\x9fE"j\xd2\xa2rk\x0eJ\xd6s\xcc+\xb0\x84\x99\xcb\x8e\x8b\x11\xe5M\xca\xceO\x0c\x8f\x93\x9d\xc3\xe1\xb2\xba5]\xa6P\xde:O\xf9\n\x00\xae\xeaC\xee\x0fE\xf1\xf5\xe8\x9c`\xac\x0b\x89\x88\xcb\xb1=\xfd\x98l\xfc\xaf\xf5\x9a\xd5\x7f&iH\xf1\'5\xc9/>\x966?\x99\x12\x19\xf2\xb0P\x85\xd9\xa5\xfcv1!;\xd1Y\xa8s5b\xa1\x1b(\xb1\x93\x8e\xcc\x08\xff\xa5\x02L~jU\x831\xeb\x17\x13\rv\x12\xcc\xac\x1f\xc0\xf7.\xe3Qo\xa1\xee\xee\xe2^\xe6\x1b\xa4\xb1Bw\xfd\xae\xea\x9dj\xac\xbb1\xbaB{]d\xe4\x06"\xe5\x05\xa5[@\xd8H\xd1\x9b\xbf\xddZ\x10$\xf6Nf*B4\xb6J\x9f`\x94\x92\xf6<\xe6\x8f\xf2\x1c\x86\xe3\x83v\xaa\x15\xbfA\xa6\xa1\xb9\xb6\xb1\xdc"=\xa5\xb04\x8d\x90\x99\x92\xa3\xf0,\xf1\xbb\xb5\xb3\x14$\xb5\xe0%\xbaA\xda\xba^y\x9a\xcdb*\x94?\n(\x87\x02F\xf6\xc5\x11))\xae\xbb\xe7rYM\xb8r\xb0\xb4\xe2\x83.\r\xe5\x01j\xe5v\xeb\x00\xa7\xb5\xa2\xca\x8b\xd7\xb3\x90\xda\xe0%eC7E\xcb\xf3\xa7\xdf"P\x0f\x96\xbc\xde?\xd6\x08\x96\xf9k\xa5/\xb7\xee\x85\x03\xfe\xc6\x12\xb2\xbc\xde\xa1c\x0c\xc9\x9d\x10h\xf6O\x17\xa9\xd1\xa2\xbd\xd1<n\x9b\x82\xa9\x96\t\xbe\xed\\\x83\x0b{\x1b|\xc6\x1a\xf6"BH\xc9\x11t\xb7\x07[\xf4g\xef\xb7\x0e\x9e\xec^\xcdN+\xc8}r\xb9\x89GI#\x0f\xf5\xe5Q(\xc2\xd8;\xaf\xad\xc2N\xad\x87\x81a\x9b\xc0\x9dT\xa45\xb6DY\xf9(\xa5V\x05\xb6\x04\x93#\x0cdpU\x86\x97\x10\x8eG\xb1\xc8l/\xc7\xd7\xbdJ\x7f\xf6nf\x9f\x18\xf6\xb2\xacT\xb9$cRWQ\xbej\x0c\x9b\xff\xa0T\x1fjtW_ J\x18\x98\xef\x12\xae:\xcb\x87ZH\x9bn^rN\xf2\x16\x8a(\xca\xa9P\xf6nf\xf4G\x8b\x11\xec\x96\xa2\xc0\xd3\xbfg\x95\xef/\x08\xce4\xda\xde\xb8{`p\xe0B\xd7\xc2n\xa3\x99\x8b$\x1fz-\x1c\xaa\xfd0\x85x\xff\x0bN\xf0v\xd3\xddWIj\xd4n\x83q9\x86\x90\xf0\xa9\n":\xb2\xb8\xb5\x07\x00\x11\xfa\x9fn\x95y\xd9\x9c4D\x9e\xbd1\xe3sB\xb2\xe1\xcd\xa5\x07j\xb33\xbeApbo\x95\x14\x8b\x03a!\xec<\xa64\x94e\xbe\xf1\x9d\xbc\xe7\x94\xc7\xc84\\\xcbq.*\x88\xa9I\xe3\xa78fpG\xbca@rTLJ\xcf\x0b\xa0t\xa8\x13\xb3\x0c\xbdZ\xab\x80<\xae7\x05bn\xe3q-It"\xdcu\r\nJ\x1e\x90\x0ew\xcf\xf6\xb4"\'\xfb$\t\xb2\xc9\x1c68\xa1S\xa1\xc4\x9e\x02WR\xf9\xcb\xf6\xd2\t;\xad\x98\xf1\xbe,\x96\xfe\x18\xe7\x84F\x86\xcf\x97c\x8d\x95[3\xd2\xe7gm\\\xdeE\x843\xef\x9f\xf7\x8d\xf6:[-\x8b\xfa\xd8a\xcdTk\xe3\x94\xf2\xd7\x86b\xbb\xb9\x8fnx!\xc6%\xf2\x9e\x88\xd5\xf7\xa1\x05\xa98d\xe9d%\x10\xe9\xda\xa9\x98\x11\x05\x9c\xfd\xe2s\x83\xd6\xed\xfe\xf3.\xde\xa5\x87\xc3\xe2\x81\xecO\x9d\x0b\xcd\x84/\xaa\xf3a\x98E\xc2nM\x87\x81\x99\x8at\x82V{\x81\xd5Q2\xe68\xa8\xd0;}\xad\xe9\x11\xe4m\xba\xe6\xf9\x83A\xb5\xed\xa6\xd2\x04\xd4l\xc5\xd4\xab&Q\xf3\x8a\xa8\xd0\xc6\xa9\xba\xe3\x07\xffO\x8b\x95\r\x13\xd1j\x81t\xc4p\x91\x9b=\x05\xce-\xb7\x90,\xd9\x85E\xec\xca#\xb8\x90\xed\xe2\x8d\xed\x10Z\x1c\xa4\x0f\xfb\x93Z7\\#\xfe^<4\x912\xa3t~\x99\x1b\xabR\xff\x0by\xcfz\xf3\x0fV(g\xa8\x9a\x96\xe69\xcf\xd1K\x17\x12\x81\xe3@1T\x95\xaaX\x0b\x8e\x9dN\xb6\xf7T[bc\x1fI\xfc\xbf4\xde\xa0\xff\xa8\xeb+]\x1f\x1e\xe0*pc\xe1\xb22\xf2\x9a\'\x93=\xc2IR\xdd\xfc\x1d\x0b\xe9\xa8\xea\xd7\xa5\xd2N\xebz\xcf\x81\xa3\xe2\x9e\x00[\xf9M\x01D.\xc9\xc3\xcd\x7f\xd5XJ\x02\xc6u/\xa4G\x7fG&\xc4\xa8\xb2\xd1\n\xc8O\xa62\xecY\x1cZ\xa9\xe7\x1d\xa4&\xf0\x9d\xce\xfc(f\x1b\x10J\x07c\x06\xde\xa1J\xb1\xb7`\xa8\x0e<\xcf\x8bg]\x89-\x92\r\xe2\xb9\x13<\xf6\xfc\x00\x93\xda\xac\xd4\xfd\xbb\xbd\x8e\xb6\n#R\xcd\xf4\x8az\x9c\xb5\xf6\xf5G\x08\x06dr\xb4{\x10\x91@\xe5\x99\x19W\x0ca\xf05\xe0\\\xaf\xab`.\xe6\xa1\xb8\x08\xde\x90\x08]Q\xf3c\xb5\xcf\xd3\xfd\xad\xd9\xd7\x05&\x83\xfb:\x82V\xaa\xfd_mv\x17\x80z\xbev\xf9\xdf\x15\x9b\xe5\x18\x80\x0e\x18\xce\xbe\xca \xd5\x1e\xf9\xca\x7f\xff(\xa7\xf7\xe3\x01%\x83\xf2\xbf\xbe\xcc8]\xe4;!\xb7\xcf\x81\xce\xc2\xaf\xca\xebp\x10\'G\x87\x1d\x1aN\x06T\x10onntz\xad\xb7\xb2\x10\x9b\xdd#\xc0\x1f=66\x94\x0b\x98\'\xe4\xf1\xe2\xf4\xf6\xcf\r\xf1%\xcc\xa4\x97\x1a0\xdd\xf3R96\x1bf\x10\x0b\xd8s\t\xf2\x9f\x8f\xbf\xa9\xf5\x00h\x8b4;T2\xe5\xf6"6\xdc\x08W\xbbx\xb0\xc3[d\x01M\xc1\xab\x8c.H -\x1f\xb2%a\xf53.I\x1c\x13HZT\xb5\x85\xfe\xda\x80gu\xd0\xc7\x83\x01<}b\xc3\x9e\x04>\x1a8\xfbH\xbd\xb6y\n\x9b\xe0T\xea\xbb\xad4\xdb\xb7\xcboM\xe8_\x8e\x8a)\xf9\xf0\xb8@9\x86z[R!\xb9\x17\xe8\x97\xe9\x89\xf2\xcb\xb8P\x8c\xec*-h\x89q\xc9zv\xdb\x98q[\xc3\x18@\x86\x7f\xe1\xbdQ\x86\x90u\x8a\xead\x05\x02\xc0f\x0f\xcb7-W7\x00U\xaa&\x93=\x1cv\x9a\xc8\x87\x11\xb3@\xe8A\xe6\xa4\x82\xa4\xe3\x00\x80\xfc\x8c\xea\xf7q\xf0\xc0\x13x\xfb-\x16Q\\\xbeM\xb7O;\xe5\x16\x83\xdc\xc9P$\x8d\xa7x\x97\'\x89\x1cp+\xaeb8\xfe\x1ar\xae\xf0`\xfa\xf9\xf8\x98@d\xc3Q\xdf\x19J\n;\xc1 }\xa7*\xdfu\x90\xb7\xed1w\x8dD\xce^\x87\xa6a\x1dx\x1d,\x844<\xef\x0e\x96\x03\x99\xe2x<\x041I~T\n\xc8\xd9\x84N\xd5\xbb\xc4\x08imb\xd0\xfe\x9ff\x8a(#-\x17t\xb2\xbd\xc2\xa4\x8aP;\x08\xf5\x97\x08\xb6:\x91\xea.yO\x18\x97\x01\xff\xa2\xf8/\xa5b\xfc\xfeNP\xfe\xbd\xdc\x17\x97\xc6CH\xe7\x14P$D\xeb\xf4\x15+\x05(\xcd\x0cW\x85<\x87\xc8\x16\x00\x012_\x80B\x94\x8e0\xf0\x03U\x8eA\xd1\x87Z!\xab8\xf73\x8a\x1a\xe7\xf93Pt\xaa\xe3&FR#\x05\xf9\xec,\x01\xce&[\xd8\xf7\x8a\x92\xd4\x86o}6,\xe3q\xcc?.\xbb/z\x01\xfd2\xb9o?\xfd,\xfe\xb2o\xfbh\x04\xc7\xeahx\x07\xa3X\xedWB\xf1\xae\xfeQr\x0f\xb5\xf6\xaaO\x00^\xa3zN\x88\x8dS\x89n\xc6\x98~\xae\x8ea$\xcf\x0f\xb3\x92\x04\x95$\x06\xe5=\xbd\x97,0\xff\x9f\xf3\xbc2\x90\xf5\x89\x17D0\x01\xb9\xfd\xc3p^YS=\xb8p\x10\xb5V=\xb9\xc6p\x87\x11\xbc\xd1\x9c\x9aS\xbchm\xbf\xdd\x8ey\xa3W\xe1\x075\xbc\x02<\xad\xd6"\x89h\xa0C\xf7k_$\x88\xcfa\xd9G\xe8\x89\xcf7\xfa\x0cc\xda\x1e\xc2\x18)6)\x92\x08\xdb\x98M\xe9R\x0b\x7f\xffB\xc2\x0ex\\\xfd15g\xbc\x907\xb6\x9f\x90\x89\xa7|`\x13"\xe1e\x92\x8f\x9e\xc6\x83\xf2C3\xbce\xef\x18\xe5\xce\xaf\xd4\x9d\xa6\x1e\xf0\xf3\xb8Lh\xa6\xd8G\xbb\xb2m\xcb\xc2\xf0\x8f\xb6z\xce/\x18\x80^##8;\xccZ30\xcf\xa52G\x19\x9e\x9cQ\x80\xd3\x1b2\xbb\x00\x01\x97\x082\x90\x1a\xbb\xb8\xee\x0ew\x0bd\x8d\x92\xfb\xba\x12j\x8dy\xf9{\xae`\xdf\x04\x9c\x1c\x89/_|\xacmO\xb3\x93\xb8\'|WW\x08\xb4\xf9\xbf\xe3\xdc\x01iR\xaf\xaa\x04\xc8O\x18\xe7\xe8l\xc1\x0b\x7f\xc3\xe3\'\xb8\x98\xa8k\x16\xc24F\xbbG6\xf7<\xb9ZY\r\x94K\xe1\xfaO"\xbaN\xdf~6_\xd3\x8cB\x82-o\x82\xa0f*\xd3\xfe\x13\xbf)\xc7\xac\xa2aA~K\x8eNp\xebN\xf9\x0ba\x0b\x9e@\xc9j\xb4\x1eW\x80\x12\r+\xa2\xbfA\x9a\xc4\xf1\x88\xfa\x9e\xa1\xcc\x96\x9d\xae\xe7\xb9{o\xa7\xbc\x0f\xce\xbfE^\x99\x14LTt\'S\x87\xd9\r\xce!\xa3\xd7\x94\x84\n\xbc\xc7\x80d|\xc0\xa6\x8e`\x11X^\xb6\xe7\x90I0aJ$\xca3\xf9n\xe7K\x01I\xceC\xf9\x03\xec\xa5\x7f\x8d\xc4\xc7\xbf\xfc\x1d\xc9z\xfc\tW\xf5\x95\xe3~\xd4z\x03T\xee\x1e\x17\xa5\xff\xef\x0f\x15\x04\x9e\xb2\x9b\xaf\x1e^\xcf\x19\x8at\\c\xa54\xd0\x93\xa0*\x17\x01\xe0\xfa\xe4\xc3K\xb3\x98\xb9\xb9\xfd\xa5O3\x92\x98\xca\xe2x\xaf\xd6\'va\xc4\x8e%\xb4H\xc5U\x17\xad\xa7%@\x9bu\x89-\r\xcd4O\xb0\x91;\xaa\xe3Y\xfd8,\xcc\xda<\xe2v\xc4\x9e^+\x8ePU\xdf#\xc2\xf1]\xccRZ\xb8\xa3\x1f1\xe8\x1e\x1c8h\xc3\xd1\x04!\x8by\xaa<o\xcd"\xe9C#\x83\xb8i\x8c\xc3\x90e\xbc\xff;\xd5\xf49\xe5\xb5\xe2\x832\xdf\xdb\xac\xc9\xb2\xda\xa2\xb5\xaa\x9d\x9br\x9db\xd0.\xdcy\x12\x9f\xa3\x95\xd3\xa2V\xb0\x8d}O\xc1\xd6\xc0\x1f\xba\xb2\xca\x8b~\x82\x17Y\xbd\xbe\xe2\x16\r\x19\xe4\'\xef\xc9\xd8KFK]q\t\xe9\xab\xbc\x91\x15\xcf\x81\x90\x18\xc424\x877\xed\x8b\xd5\xb4\xf9\x1d\xc7YX\x80l\xcdT\rd~\xb3\xeb\'\xdbql\xb9\x89\x15yy`,\xa7\x93\xbb\xb5\x8b\x9f\xd7\xc9\xf0\xdcq\xec\xe4}v\x9e\x93v[\xb8\xce\xaa\xecN\x13\xe70\x84S\x17llRk\x9b\xc4\xb1ef1\xafi\xc4V\xb3\x97\x9d\x1beD\x06\xe8\xa3\x1f\x0c\x95\xc3\x98P\x1e\x0c\x87\xef:\x04kL\xdc\xd1\x80\x8b:\xb6\xd2\xc6=z}\xe73\x80\x0f\x15k\xf7\xd5\xc3\xce#\x81\x7f\x1f\x16\x80\xedI])\xa4\xf4\xef\xbdu\xd6\xa4+,x\x90\x03!b\nj\x1b\xf4\xbb{\xf3\x1eq\xb6\xa0x/\xd7.\xba\xb2\x0fl\xf1\xd5I\x8eGg\x8c\xa0\x89\xc5Q\xa1\xb2f\xa1\xea(n\x08\x84\x96\xc3\x0b\x1f\xc1\xcbI\x85\xe6\xe6\xca6>\xdb\xedw]\x86\x8d\x16y\ty\xb9\n\x85\xf4\xc1\x94\xb2\xed\xa7\xb9\xe0\xb4\xb3w\x89\x9f\x8f\xb1\'\x8d\xd9\x0c\xf3\xfb&T\xd1\'n\x8b%.\x1bOu\xad*(W\xa6?\xc1S\xe7\xe3\xa1\x0f\xb3\'#~cw\x00\x16\xb0\xb0\xdap\xba\x01\xb1\xf9R\x99<\xf3\xba\x8f\xc2\x95\xe4\xf3\x8fg\xd01bH\xb5\xa6\xe4f\xb3\r\x1b\xb8\xd1\xfa\x8c\xf5V\x83P\xc0\xa4\xab\xe1\xb2nE\xa5=\xb7\x07\x0e\x8c\x7f\\\xa0\xc8]\xe2_\xc5!\x95\xca\n\x8e\x19M\x03\xe4\xd4KMm\xe5\x01\xc8[m\x1dB\x05\x94\xc3-\xee\xacm\xa9Y\xd7g\xa2\xf4\xe6\x8bxtbkG\xc2D\xc9t\x07\xed+\x08r\t\xa19\x07\x8f\xf1S\xad\n\xb5\xa9\x92\xcfC\xb7\xd5u\xc2\xdeT2\xa1\x8f\xdd\xb9\xdd\x8f\n\xbb\xf9Q\x90l\xa7:^~\xea\x19\xe1\xa1\x1d\xdao6\xf9-\x10\xa6\xfe\xa7P\xd1\x08\x83\xe6wY\x03Q\xe9\x94:\xdd\x82\xbe5N\xeb\x0fY%\x91T\x87\x90\xd4\x15\x80z\xb9\xfc$\xf3Oe\x9f\x97\\\x80\xf9M\xbeUq\x9d\x1b(]\x80\xfeu\x1a1\xd6\xcc\xd3?l3\xd0\xe5u\xd6\x89\xa5\x964\xd7\xdb\xc0\xc04\xcd\x86\x88$p\xae\x9c\xc4e\x07\xdbYR\x87a\xabd\x94\nxR\xb1\x8e\x04\x8f\xd8[\x87\xa18\x08\xb52Z\x19\x11\xa8\xe1>\xe2E\xc9\xfc\x15\xf08\xb1\xe2\x82\x13\x82\x9c+aK\x87U.MF\xe0\xb2\x89\xe6\x1bc\xe3\xadr\x8f\x1fQ.m*\xcbCZ\xd9X\x00\x01\x08\xc0\x11\x14\xf6H\x0b\xbd\xaa\xbf\xaeH6K\xe0\xdb-\x8bX&\xb4\xb5V?\xeeq1;\xf9\xc4B\x10\xaa\xb3\xb4\x8f738P\x0f\xb3\x83\x95\x85~\xa1W\xa1e\xd2\xf6X\xcb\x88\xc0\x15\x99lW\xfd\xc0\n\xd4.\xa7\x11=\x99\x01\xfb\\H\xca\xd9@!\x95\xc0\x85\xa9\x84=\x0c\xa3\xcd\x80\xbd\x92C\xf2c\xd5\xea\x07\x91\x8a\x19\xfd\x89a\x88\xb5\x9c\xeb\x1f\x02\x97C\xf4xm\x99\xd9A\xc9w\xd0$\xcbD\x12i\x17\xc4\t$\xa9\xadh\xc0\x9f\xb3<5\x0bN\x85\x04\x16\x06+\x08\xa4\x8a\xc0\xb1\xb9\x8dQ\xd5\xcc1\xb5\xf72\xdf\x9b6\xc3\xf5HD\xfb\xc9[4\x07L\xf5Z.DK\x81\xf7g\r\x0b~R\xcb\xc4\x89;\xb4m\xc6%h0+s\xaaXU\x9eY\xbe>\xf5\xd7\xff\x9c\xb4\'\xbd\x96\xf18\xe7;\x8e\xd4\x91\xf6l\xfc\x87\xb7\xd29\'p$D\xd6\xc5\xb6\xd5x!\xff\xe0w\x9b\xb6\xf50\xfc[E\xfc/)\xc0\x9fL\xe2\xf9\xee\xca\xa3@?\x19Ul\xa2%\x97=\x03\t\xc2\xcdj\x1e\x7f\x0f\x06\x11vfx\x12\xfb\x0c\xcd\xc2[\xe4D\xd8\x08c+$j\xd1v\x89\xf8)\x15\xbb\x83\xa6>C5|\x0f\xd3\xe48\xcc\xfd\xc5\xb7\xd9e\x98\xfe\x93\xe5\x04sB\xb7\x13\x0b?\tUE\xdb\x00\xcc#\x99#\x0c\xce\x96.\x92\x1b\xe1k\xaf\xaf\x05\xe2\xe4\xbe\x99S\x94\xd88\x1c \x00\xdeP@>\xf6\x85\xbf\xa6m\xe1\x16\x80\xe4\x89\x9f\x9b7\xee\xc7/\xa8\x05\x1d\x9e\x08\x93\xb9\x85*\x1aT\xe2u\xa9\xd9Ap\xbd\xac\x83^a\x1cQ\xe4L\x88\x87V\x9e\xbe\xea\xe3\xdb#\xe3\xfb\xc8\x8a\x1dz\xedU\x9d\xfdO)+\xe8\xee[\xf6\x9f\x82\x1c\x81d\x8av\x048\xe1L\x11m\x9e\x17\xeem\x94~\xc5\xc3\xf0\x99\x1c;J\x90\x98\xd1e\xf3&\xb9\xb1\xdf\xc9d\xb0\xa8\xbb\x16\xd4\x8b\xdd\x83R\x9e\xadh\x0f\x8b[C!t\xaa\xb8\xdb*\xfb\xc6\x9f\xc4"\x18\xd3|\xc1\xbf\xb7\x8a\xc5sY[\x93\xf3\x81\x87\xf3V\x04\x92\x19\x01\xb4-\x9b\xd4\xe0h<\xb06mX\xdb\x80\xa4\xb1\xd7\x11]\xd0\xb4*r\xc3l\x00U\xc7\x10\xbf\xe0\x0fA\x15\xc3\x13h >)#>\x9e\xe5\x98\xee\x85\x03\x91\x98\x8d\x1c\xe10\x92\x97\xb4\xa3\x0f_i\xdf\x0f\x9e\xae=\xc6n%\x0fN\xcf^\x14\x04\xfbq\x91E(L\x05\xdf\x1e3\xc2Wxp\xe5$\xfe\xdc\xaa\x9f\xb4\xa2I\x17\xc5,2?\xc5\xb1\xd7\xc5f=\x8f\xdc\xff\x11\\\xec\xe0\xb2Z\xffs.vF\x9c\xbfw\xa4\xa2s\x9b-\xaf&U\xb7\x8eT\x9c\x9d>e\xdc\x88\xb5\xbf\x86f%hx}\x88\x03(\xed\x98\xa6\x0f}\xcf?\x8f\xd6\xdf\x87\x108)\x06\x95\xa6\x12\x84B\xe2\xfb\\?\x95\xdd\x87b\xdc\xf3/\x13\x86r\xc9\xb2\xf3 \xef=\xf2\xf4m\x9e\x03d\xaa\x1e\xf395h\x99Z_\x92\xbey\xaf\xf8\x83\xa1\x05\x8bg\xe4\xe3\nD\xa0\xb7\xbe\x88\x1eL\xca^\xe0i\x8b\x13\x81\x10\xe2\xc4g\xe3\x00\x00\x87v\x90\xaf]\x15\xd7(4\xf2\x9b\xf0\xbaz[\xd5\x1e\xe2\xe4!\xea\x92o\x9a\xdb\xa2\xd6 \xef\n\xee\x16\xda($\xa0\xc3\x94\xd6\xf2c\xcb\xd0\x7f3\x06\xb1@NA`D\xeaqM~\xace\xb7\xad\xbd\xf3p\xd8\xa2:\xe9l\xc62\xe3\x84\xde\xb2\xb1\xedU\x02\xdcX\x84\xa44%\xd5\xb1\xe4\x0c{2ErL.\x95\xad\x00:\x9e\xbd\xdeYO\x91EN\xbeA\xf9\xf4\xe3\x83\x81\r\xa0\x03\xd6\xd3y\xec\x91\xce\xef\x9f\xaa\xf6\xfax/u\x08\xb3\xd4\xf4,&\xfc0\xfa\x06\xe4\xcf\xe5\xe3\xf3=\xd2\xa2:J\xea\xdb\xc6\xf2\xef\xf0\xd6\xa0\xed\xbe\x18\xef\xdb\x86\xbdB\xda\xd9x\x94F\xc8!\x1c\xc9U\xc1d\xe6\xc3\xb2\xf3r\x95\xc16\x97\x05Ar\xf33\xa9\x13\xef\\n*\r\xe0v\xcew\xb3\xfe\xa6g`\xef\xb5\xcaX\x0b\x0c\x97\xe7b~\x7f\xaf\x95hU]\x89\xd4%\x030\xde]x\xb1\xe5\x01\x08\x00\xcf@(T\x1c\xaf#`\xf6a\xd7\xa8\xe4\x93\x86\xceu\xee\xfeG\xb1\x91R\xafm\'\xd0q\x8a5(zr\x99\x99z2\xd0!\xd6\xd2\xe9\xfcg\xd4\xe26~`H\xf5\xc7\x89\xa0\xddec\x03\xb2s\x07\xf4\xd8\x04C<k\xf2\xbc]9\xe9\xc6\x8ef}Lb\xadd>|p\x03Zl\x8d\x17\x12\x98\xf5\x06`\xbc\x9b?{J\xee\xa2\xb3R\xea\x05\x86\xcd@k\xa3&^\xde{7\xbf\x04R\x8d\xe1\xe0\xd2I=6P\xb7YQ<\xba\xcf\xde\xfd\x18u\xd9P\xdb\xbe\xa0\x13\xbc\x1ew\x9dbI\xfb\x8cL!\\\xcexLc\x9e\xfdZ\x07A\xb9F-\xfeo\x16z\xd7\xa3\xdaO)O~P<\xd4\x066W?\x87\xc7yF\xaec\x16\xaa\xf7\xb8_\xd5N\x14\x0c#~\xc4+b\xa3\xe5a\xd7,y\x93z\xcd\x0e3\xfc\x1fUS\xeb\xc4\xe3a\xbb\x05!\'\xe5\xfd\x17,\x07\xd1\xb3\xd8WNp^.\x80\xfe<\xe8\x04 \x9ez\x90\x9b<al\x9f\x9d\xcegc\xc7q\xeek\xceO\xc3\xc9\xba0\x8f|RQ\xe6\xb3\x01\x9a\xc5x<\xf4q\xeb\x8a\x01f\xd0\xbfH\xcd\x13\x9a\xd6\xbe\xe8\xd0)\xa7\xce\xcfv Y\xf9\x93\xc9\x92\xafG\x86\xc1\x8f\xdc\xa7\x99o\xc2N\xa8*B\xf8\x9f\xcea\x9b$\xa6\xcdYr\x18Yi\xce\x13\xdayoY\x92\x90\x9e\xf5]\xbbfj\xc9`\x97\xe1f-HR\x9b\xb3\xa8\xad4\x90A\x95\x97\x89\x13\x96\xb2B_\x1b\xac\x02\x8e\xbd.\xff5\x19\xb4\xc2&\xaf\xeb\x083\x92}{\xf8\xb1\xff1s\xec\x95\xef\xa1"\xf4\x1e\x19D\x16\xe6\xc2dW\x9b\x10\x94Lk*\xa9\x0ft`\x11\x00\xa5/\xdb\\_\xa0\xbd\x93\xf8/m\x87\xe6\xb4\x18\x0ey\xe4~(\xed\xe0\x1b\\\xc0s/\xfev\xbd"9\xb6\x99y\xcd\xdbC\xb0y:\xbdJ\xf3\xa4\x80A"Z\xc0bl\xa7,\x16 uD\xd2\xef\xb0\xed\xf7\x8c\xa9\x11\xb8\xba\xa2\x8c\xe8{\x15\xc8#9\x05\xdb]\xf4T\xa5\x83>\x14\xbf\x91mn@\xc93\xb1\xab#9\xceFp\x8ex?L\xfb\xean\x07e\xaf\n\xc6y\xb4\xaf\x96\xec\xee\x12\x8bj\x18\x11\xa7\xa88\x1f\xb6\'A\xb4\x02E\x98\xfaj\x0f\x18\xdeaKD-\x01\x7f?\x1b\tY -8\x8cB\xd2:$_\xc2]`\xf6\xbe\x12?O\x8dF\xf6y\x99\xf43\xb4\x0eO\x9f\x1f\x0e\x0f\xeeK1\xe1\xbc^\xea\xb6q IR\xfd\xc9\x93\x19\\j\xf5\xa2\x7fV\xe1\x9c\xcfG@)g^\xc6\xa9\xba\x8c3H 9\x89\x04\x01b\xa2\xaep\x0f]5\xa8b^f\xfaJ\xb6*\xf5/np\x1a\xc5#\xebU\x9d\x02\xe0=3\xe9\x0e}\xf4\x14s\xc8F\xccY\xbd\xd5\xc6c\xfd\xf7 \xe8to\x1dKw\xe3,;K\xff]\x94OL*H1_\xc6t\xf5\xb7\x813\xc8P\x0f4\x05U\x11\xabM\xd3\x87\x9ah8\x11\xe3\x90\xf5\xdfD\xfb\xddl~T\xb1K\xb58\xbd\x11\xf7\xe7\xf7?I\xe1\xf9O\x80\x7f2\x10C\xf5}\xc0\xc5\xb4\x8e\xe8\x1f\x9c}~\xe9\x05\xa8a\x1b\xfdh\xd0\xfaR\x1f\x07|\x81\xf1SV\x93\xc6L2\xb2\xfe\x1eX`=\xca\x8b\x0f\xca\xa7a\xb9\xc3C\x1b1\xd3k\xff\x97"4R\xfc{\xd1\xa9\xde\xdd=^R\xb1\t\xb7\x06q\xb3B\x16y\xa3L\xcc\xc6{Ej\xf9\xd2n\x14\xe7?\xb5\xb3\x7f-\xcd\x9c\xcd\xdeY\xaff$\'\x1b\xc3D\xd15v\x81\xda\xb0zI\xcf\x8c\xca\xd8\xf0\xfe\x02\xf0\xc6h\xb8\xdfI\x15t"j\x00mX\x9c\xd6(\x9dA\xf4/\x86d\xc8)\x14\xca\xf0\x02\xf2\x83\xa0\x8bC\xb5\xb4\xd15\xea\xc7\xbd\xf4\xffG_4\xb5A\x85\x92B\x1f)ld\'\xfa\xee\xdd\xed<\x174\xcb\xd0\xe0\xd4\x8e\x96J\xda\xa3Tw\xb6\x02\x0f\x08\xebNl3|\xa8\xa1\xbd\xf1\xde\x8b\x87\x12??\x9d\xfb\xf2\x94}\t\x1f\x9d\x80\x8a\xc6h;\x8a\xb5\xd8"z<\x84\x1a\xe6\xdb\xc4z\x8ch\x87r\x825[\xc5\xb4\xf4\x03K\x83\xb7I78\xf6\xc4\xc7\xfc\xdf[\x89\xd0\xdf\xd0\xa6\x1e\xa7_\x1f4\xa9Q\x9f"g\x8b+:\x1ao\xe1\x80\xfaR\xf5\x18dQ\xcf\xa2M58\x94\x96\n\xc7B\x8dXo\x07\xbfN\xa2\x04\tB$\xa6\xc3g2d\xd9\xdb<\xee\xfb\xd4\x9c>\xa0\xd5\xef\xad\xe1\x7fR\xb5\x12`tm\xaa,>2\x81}\xf3\xc6\x1dY\xf8q\x1a\x9eW\tb\x14\x96j\xf5\x7fx\xf0\x81K(\x801\xc0\x0f\x98\xa8\xbb\xdb\x11\xce\xf6\xbb\xc7\x97\xa9\x02\x071\xb3\t\xf7\xdbK\x8c\xbd\xc26R\xf4{\x92\x87\x15Y\xaa\x03:\x81\xde\xfd\x00\xbf\xa8\x1a;x\xdc\xd4\xf6\xf9&\x06\xea\x94\xa3\x01}-i7Fz\xc3%\x9f?\xc9\xb1\xfeU\xb75\x12\x07\xf1\xae\xf3\xf6KP\x94\xe9\xa4D\xd0XA\x12\xd5I\x0e\x93Q7\xb3\xd8\xbd\x95\xf6\x90\xbaK\xf3\xb0\x84\xe5\xf5\x9f\xb4n\xb9\xec\x8am\xfdi\x8b\x95\x9b\xf3\xa0\xfe:\xfd\x11\x19!\xa0_\x81\xe5\x1c\xe0!\xa3\x95$\x08\xc5SR\x83j \xcc\xfd+\x1aQ\xc3y\x06\x17Hbz\x96\xb86\xees\xaa\xad\xc5&\xb3:\xe5\xecwU\xb0\xad\xc2\xd93\xbfC$\x854\x8c\xeb\xe6\xdb2\xfbn\xb4E\xc4Q\xf0\x19\xbb\nu)V4\t\xcaZ_\xe3Dm)\xefmd\xf9\xd6\x15\xa2>\xf4Ay\xa0\x1d\xbe\xa3\x0f68\xc5\x81U(\xb8J\tC\xd9I|\xc47C\xcb\x1a\x9bi\'M\x9b\xbc7wf\x94\x1c\xbb7K\xdc[\x1f\xfc%\xba\xb4\xa2ry\x87\xeb\x95\x04~ay\x1d\xff\x9c+\xd0D\xba\xb7n\xbf\xc5fN\x94\x0bS\x02)]\x83\xf6\x14\x00Q\xb8\x81\xe0#B\xab\xda\x89\xfa\x1e\xfe\xaf(\xbd\xb0\xcb\x85\xf7\xad \xf10iF\x89\xa4:1\xff\xb0\x03l+\x94\xd0:gJ\x7fH\xf9\xcb\xb9/9\xc2\xd2\x87\x99t\xbc(\x17\x7fKp\xdc9\x0f&\x1e\xfa\xff#\xf1;Si\xee\xb8\xd7\xa3\x8ffA\xf6\xdec\x91\x10\x02\xe9\x80\x047\x13\r\x8d\xf7J\xe7\xb3\xc9\x91\x17\xbaj+#\tT\xf5\xf3%\xb6\x03\x83\xec\xcaP;#9R\x0fb\xbd\x9c\x99\x8d"\xd9\xc1\xa4\x04\x8d\x86\xb0G\x9c;\x06\xf6\xc2\xb9\xdf&wM\xbe\xa2\'\xcd^\xd71\xf9\x1a\xcd\xe2(\xab@\x15\xf2\xc7\x02\x0eL\xf7c\x16\xb1\x91\x1b<\x8e\xcf\x1a\xc6D\x00\xa3\xa1%P(\xdf\x04rV|5|\x19Y\xe7<\'m\x90/3\x19\xf3rdt\xab\xa5+\x88\xb7\xc2\xa6\x17\xe8\xd4\x8a\xc5\x8f\\\xd5\xc7\xbc\x9c\xec\xa9l\x1d\x92\x83\x13\xf0@\x1e$\x0e\xf9\\\xf4\xd8p\xb4\xac,\x83*\xa2V\x1f\x85G!f\xa5\xce\xfd\n\xd7\x80\xcbW-\xa91\x8e)&y\xa7\x12\xc5>\xf8\xd9\xec\xafW\xae\xcau\xa2,\xef\xfd\x85FF2\xcb\xdc\xba\x1co\xbd\x9f\xf7\xf9\xff\xe9$\xaa\xcd\x91\x9d\xe1\x05\xf2\x07\x8a\xd7\x89\x95\x8fIO\xd0\xd2\x9c\x91\xfc\xed\xdb\xac}\xc3y\x9a\x8ah\t\x87=\xd4\x7fA\xa9\xb5z\x82D\xb8/\x1a&=\xef\x01V\xf3\xcc`\xf8\xf98\xe7+/\xe2\xbb\x8e\xdf\x90+r\x11h\xe5#\xa6\xce\xda\x13\xd0&t}\xd4\xeet\xb5Ch\n\x90+\xcb\x9a\xf0>\x89\x14Bzj3~\x18\x7f\xe8;\xc3\xa6\xb3\xd9n\x8cCyW\xde\xbdG\xfd\x8b\xd0y\x9aNc\x98N\x08\x0eC\x16`\x04\xcfK\xec\x07H\xb1+\x17\x85\xbb\x11\'\xde\xfc\xba\x02\x05\nIZ\xf5\xa3\xddc\xce\xa3\x8b\xfc\x0e\x10[cZ\xea\xd6\x16\t\xa5\xd6\xf3\xac\xa2\\*\xee\x11.G\x83i\xcf,\x8e\xa8\x07\x81\xdf\x9dq\'E\x1c,\x9b\xe1\x14\x0b"z-efA\x98\x103\xe2\xbc\x94r\x87I(\xc2\xf1P8J7Z\xc7N\xe7_\xa5\xdb\xabJ\xa6\x9c\x0e\x8bc\x85X\xdf\xe4\x8f\xcdz\xef(i\xaa\xe5q\xedS\xfa.G\x89\xc7p\xcd/W5\x8aD{y\xf4>\xcd\xd8\x86\x15T\xe1\x1aYA\x15\x05\xe5\xaf\xa0\xfc\xa1x\xa0\x0cS\'\xa8\xfeE\x1e\t\xe3iO\xcd\\\x8fM\xb2\xda%w]Y*\x9b\xf7Q\x8aH\xdf}\xbf\xb95Y\x85L\x0bC\xc4"o\xa1!o\x9c7\x98$\xf7\xe4C|\x94\x8c\x89p\x18\x7f\xac\x92\xf1f\xa1Y\\tL\x8dtq\xb6\xe8\x86\xdcM6|\xc5\x98\x83\x92\xceQi\xcfP\xef\xeb/\x95v3\x0b\t\xe8,&_\xc8%\x8d!\xca\x06\xcf\xa6\xfaX\x08\x8b\x81\x8f\x03\xc6^\x06\r\x1b-^\x93\xc5`1qy\xe5\x00\xf6\xa5\xc4\n\x94k\xdas\xa2\xc7 \xef\xa5\xb3\x9a\x89\xbb\xa8u\x15\x89\x9b>>\xa9\x19~Iy\xfd\x83\x90\xfaL\r%\xdb\x08\xfe8+1\x0c\xa2\xa2[U\xed\x9f\x05\x8a\xf2\x0c1\xb4\xce;\x8c\xcd\xe1\x03\xff\xc1aM\x1f\xf4\x08\x8eL9\xb1\xcf\xca>1\xcc\xce\x1a\xe9x\xd9U\xb6\xd1\xb3\xf8\xf2\xb9\x12\xe6\x1e\x9e\xa2\r\xb6p\xf00\xa7j\xc8\xf4\xc0\xb4\xba\xe2\x91\t\x91\xd67}\xbc\xb5{\xa7\xe2\x14Y\x9bRf\xb5\xb5\xb9A&\x18\x02\xd3/\x0c{\x9d\xe4\xd7u\xc7\xc5\xdal\xd4\xc0\xda\xa1\x8c\x92g\xf3NW\xc4\xfcCWE\xe4\x06\xa1g\xfb\xb94\x96(\x05r\xc0\x97\x9f\xf5\xe0\x89\x9d\x0e\xcf/\x81\xd5\\)\xe4\x88\x7fEa*\xb7!\xabi/\x88}\xdd\x87\xcbK\xde\x1a95f\x88\xacd\xfc\x91$\xf3\xa0A\xae\xb6\xfb\x9aS\x1c31\x7fZg\xac\xa7M\xf3ha\xa9\xe1 \xd4\x88\xad\xda\xb1\x96\xb7\n`H\x95`\x94y\x84\xdf$S\xb3\xfa\xa9\x14\x08\x88\xe2\xcce\xc7\xff\xd0`Z~N\xb3\x7f\xeb\xc4y\xa9_\x1b\xfbHy\x9aJI\x89?1f:$q\xe6)\rX\xaa\xe4SD#\x15&\xdeS/E\xa8>\x1e\xee\xe3\xaf\xdb\xdd_\x85\x90V>\xf7]\xb0\x7f\x17[\x88\xdb\xc0\xb7~\x1bHL\x07\xa6\x0f\x11I\x17!c\xca\'@4f\x13\xd1\xf9\xbc\xe1r\x02>\x05l\x87I\xb6\x14\x8aM\xea\x0f{\xe9#\xc5\xd4\x04iK\xa4\xbc\xb1\xe6\xebC6\xc1[\xfah\xbd|5Z\x1bPA\xe7\r\xc6d\xa5e\x05\x9fD\x858\xc1\x1e\xf2K\x15\xb88\xbd\xd9f\xbc\xfa\xf7B\x86\xa0\x1b\xb7\x86\x16\x98\xbe\xae.\x10\xfc\xc9\xc9\x0b\x8a\xbdw`\xb5]a\xbc\xdc1\x9du\xeb\x9bX\x7f7\x9f}=\xe1\xacK\xb8\xe6\xaaS\x04\xe2!\xcfl\xd4\xc1\x84\x04\xf2\xfd\x88\x0fI[\xe1h\x17\x01\xb2N\x1f]\x01\xc2\xaa\x05;\x0b\x8a\xb8I\xc3\xb4\xfb\xf5\xfe\xf3\xab\xe5\xd7~y\x12\x99\xc6\xcbl\x9b\xd5\xd1\xc3\x0bf\x91+\xf4\x13\xd55tp\x00\xdc\x85\x01\xc2\xd6\x99\xde\x14\xc2\x93\xe8\x03YS\xba\x06\xeaea#H\xceA\xa5\x07\xb0\xef\xc8\x1e\xc9K\xc3`\xea\xce\x7f\xa1\x8fH\x0c\xfa\xc9\x8e\xb3\xf14uE\x94\xde\x7f\x96\xd2E\xebDQ\x18\\HdoX\xa7q{\xf16\x08\x89B\xd2\x84\xfby\x81\x0b\x9f2\xfa\x88\xcfN~\x0c-\xb9\xc4XG\x90\x02\xa5\xa9e\x7f)L\xab|\xcdv\xf6L\x00}\x83\xad`l\x05\xfc\x16\xa8.\xb4^\xd5\xe0\xfc\x91(\xd3i\x1e\xb9n\x13\xcf\xc0M\x0e\xb7\t\xe6\x80\n\xe5T77\xdf\xa3^\xd8\x13\xa5U\x1f\nc\x1b5Ra\x9b\x17N\xc9\xb81\xe0m\xb6\xd1\xec\x93Q*\x07\xfc[\xadN\xaf\xc3\\J<\xfb\x1d:\x92\xeb\x83\xe1gkV\x035\x03c\x16\x1d\x8f\x99\xa2g\xad\x92\xcf=\x8aK\xf3\xbf\x1b\x07\xaco\xb2\x1d\x9c\x1a\xe1;P\x1b`\xe9:\xde\x102Z3\x82\x96\xad\xde\xae\xb8\x06\xf3\xcb_y9\x14\xabY\xa9M\x9f\xe6<3;\xc0~\xdd\xdb\x88\xdc\x96\xed=\xe6\xc2\x8c&/\xf6z\xf0U\xc8\x9a\xddw.h\xb0\x15\xc8w(\xeb\xdf!A4}|w\xed\xdc\x91\xa7#\xc8\xda\xb2\xb8\xaf\xe9\xe8\x02\x1f\xbd\xf8<<\xf3\x9bs\xb3\xcf\xc0\x8e\xfe\xdf\xdc\xdf\xf2z\xf3+,\xb9\xf2\xcf,8\xf1Ai<\x88:^\xd7;X\xeb\xb9\xcdvi\xa1\xff*l9=T\x8c\x84\x80\xac\xe5\x99w\xf6\xe7\x99\xc7^K= \xaa\x83\xf4\xc2\'D\t\xc8e\xda\xab\xadd\xd2\xa6\xf4,\x08\xb3\xd5\xb2\x8c\xeb\xc4\xd58\xc7\r\xb1R!\x89\xd8\x90\x1f\x10\xa2\xc7\x1a\x88p\x979(\xd3\xb0\xf3+P\x12\x87\xa3%f\xf15i}\xed\x86N\x94\x03\xd1\x04\xdf\n\xdd\xd6/T\xe5\xed>\x1d\xdd\xb3\x00\xf2!\t\xd6CZ\xebN\x01!\xb5\x8f\x1bj\xfe\xd1b\xe4J?\xa6\xbf\xce\x9dlj\xb8\x92\xd6\xd7\x13\xe0\xe5\xad\xf2\xc2\xdcI\x16\x0br\x1c\xa5\xda\xaf\x17b\x8c\xa1I4\xbc\xaa\xa3\x08S\xb5U\xcf\xfb\x14w\xd1Tw\xa6\x14\'\\b\xf2\xdf\x85\x84q\x08\x03<irER\xfc\xc44\'\x94\xcf\xf9\x81\x10\xc8x \xff\x9e\x19\xa0C\xa6\x86\xcaoW\xc0{\x0ci\xe2\x86/\x08\xdf\xba\xd4\xf5\x97=3h\xa2\xd5\x85j\xae\xaf\n*\x80\x17A\x12\xdd\x16\x1e\xee\xc3\xe0j\xe8-\x08\x9d\xffb\xbf\xa4Y_\xce\x87\x7f\x02\xbd\x9bK\xf9\x9f\xb2\'\x8e\x86\xec0\xd6\x1b\x04\tF\x81\xa3\xae\xffOH\xc8B\xda\xfa\x85KO\\\xbd5\xf9\xef:\xb1Lk\xfc=N\xf3\x86G\xdaD\x04\x85\x9f\x85\xac\xe4c\x9d\x9f\x17\xb1m\xb9o\x98\x8d\xf9\xb8\xdc\x87}\x04\x01N>\x11so\xb8[C\x8e!\xd7\x9d{\x9d]\n\xd5\x05(\xd4\x84PY\x8c\xb3\x1e\x8f!\x1a\xa0\xf2\x87O\x00\xa0:ih\xd1\xcd|\x06\xe3<r\x0bK\xfa\xef\xb8\xc4\x92\x04\x9c:*(\x1e\x00x\xf2Y\x82B\x1e:\xd8\xb3\x81\x0eZ\x9fQ\x13\x13c|@?7\xee\xe8ox~!$\xfd\x1c\xe9\xdax\xa3\xa9\x89\x1f\x96\x1ep\x9c\xca\xb3\xc0U-;w\xb6jp\xf5z7\xea\xe9n\x05\xaa$;\x92\xaf7\xdd\xb5{\xb7gD\x94H^\xf4\xbf\x0f[\x00\xf7\xdb\xb5\xe5\xbd\x97\x8f:2\xbf\xad\x8e\xfe\xaeo\xb0/\xd8\x97\x0e\x1d.\xd7\xcc\x9f\x157\x1b\xbb\xab\x8e\xe0\x7fd\x8b\xfd!\xb2p\x03v\xf4\x9a\xbd\x13\xf1\n\x9cQ@\xc0\x17k\xb4WSp\xf6\x93\xb0K1A4\xa4;b\x15@R\xfa&l\xf8\x9a\x07\xe3T\xda\xf2\xaa\xca\x96\xca\xfa\xe3T\xfc\xceb\x9b\xcbu\xf5\x16Z\xc7\'\x8bqc(\xcd\x05\xfe\xc5\xbb\x1b\xb4\xda\xf8\x91\xa3KJ\xf3\'\xbb\x97\x82V\xce\xcbUF\xc0\x14Q$\xdca|P$\x83\x9eW\xf1\xad\x88\x9b\x9a\xcb\xb7\xe1\xdc%Mq\xaa)\xb8N\xdee\xc52\xc4\x17B\x8cB\x01\xd6\xe7\xec\x0cb"\xcc~\xb2V\x01\xa7\xe6\xe7\x04\x00l\xa0\xeaR\xfcW\xd8\tJR\xdf\x0b\xbdV\x06a\xcaO\xef\x90\x9b>`Q\x18kt\x1aO&\xa1\xcc|L\x08\x179\xec\x02\xb9\x81\x07\xea\xb3=\xb0"\x8ah\x8b\xf8\xa7YDPs\xff\xb4\xa6fX\xff\x8d\xb6\xa0\xe4\xdb@\xfb\xbf\xf9\xd2\x8f\xda\xff\xd2R\x8f7J\xb2<l|\x03\x1c\x99\xceL\xbd\x07e\xe13GO\x01\xf1u\xd51RW\x8bo\x7fy`\xbbrUwCG\xcf%\xce\xd1\xdbb\xe1I\xef\x1e\xf3 Tu\x8b\xf92\xcf\xb3^\xd5\xf1\x0c&\xe8\xab\xe5v\xc8\x88\xa9t\xfe\x8f\x9a?\x14A\x9di9h\x8b\x85\xbbAH\xe7*\xe5\xd4p Z#\xf4\x14\xdf\x8d\xb9\xc8\xd3\xec`\xaaD6b~#\xeb\x9e\xed\x84\xdb,v\x8da\x93K\x06\xec\x00]\x0f\x93*\xbbeA<) \xf2\xf1M\x191<\xd8\x0b\xbb\xde|\xb0\x1e^\x86\x12\xb5\x89\xad\xaa\x89Z\x95LW\\9\xdeB\xa9\xc1s\xe9\x8b\xaf\xc7SQ\xe1\xa7\r\xbf7\xcbA\xdc{\xdd\xd6}\x89\xe3\x97.\x81\xcb\x80\xc0\xcf\xae|\xe4\x92sG0\xccxaB\x1c\x08\xcaVF\x0b>1)\xd9N\xd4\x93\x87\xacJE\xde\x86\xab\x0c\xe6\x1bM\xf3\x95]\xf5"\x15P[U\x9e\'\xc5b\x95\x83Fu=E\xa27F\xa1\xb2\xdd_!\xbby\xecaU\x05\xe9*&\xcc\xc7\xe0\x85\xf8\xf1\xcd\x08Z\xe0\x15\x93IR\x81b\xb0\x99\xe6\xb4\x88\x81x\xff\xcb%\x1a \xeb@80\xc4#\x00\xa4\'\xfd|\xae,\x9f\xa63\xa6\xa1\x9c\xa5\x08H\xa2X3\xcd\xb7\x0e\x14\xe6\\\x82\xd6\xc1\x07\x9b\x8fe\x8d\x0e\x12\xe1\xfb\x87hm\xc2`#\x17\x17\xcbv\x82\x13\xe3$\x14R\x7f\xc4\xbfh\xa5T\xde\x9b]\x15y!8\xc8"k]\xc9)\x15\xac\xdb\x04\xf9\x97\xc2\x89\xf2\xd9\\\x06\x17\xf2\x9f\xd5\x8f\x9a\xb7I\xa0V+)B\x9f\x96\xd4!b\x01\xaa\x91P\xa3=[L\t#\xf9,\x9d\x07\xd8\xbee3\x9e\x89V\xbbQ\x1f\x02 \xe1\x1b\x9dZ\xae\xda\xb1ln\xf3\xfd\x90SX\x8dJ1t\xacMZ\xdbk{\xa4B\xa0\x03\xc0\xaa,\x96C\xd7z\xb4\x1d\xdd\xf7kY\xff\xb3l\x14b\x90|\x19\xa9\x83Gi/\x92(\xd1\xd7\x0c!\xd9y\xd0\xf5\x16\x1b\xd2*ic\xa7\x82y\x1d\xb7\xc4\xa2\\/)\x88\x0b\x02\x89\xdf`\x1d\x11\x11bhl\x85aI\x8d\x01\x8bP\xe9\x10\x8bR\xca\xb5V&^\xfb\x13y\x98\xb3\xcc\xeb\x89@8\xad\x05mX""x\xf5\x18\x1d20\xe7\xfd\x05A\x01\x8b9\xb3G\x0e\xf0\x8b\x13,d\xd6\xb64\xd3&\xfbn\x94\xbd>\xef\n:9\x15\xca\xd7\xea\xb1\x01\xb3]o\'Ft\xeadPP\xee\xfe\xefS\xbd\xda\x12\xfc\x10N\xfa\xdbC\xdbK8\x13\xea9J\xba\xe4lah\x19\xe6n\x81\xe8\xb5\xb3]\xe6kl#\xfa(\x0e\x80\x98\x8f\xa8P\xfc\xee\xd9\xb6\xdb\xb1\x833\x8bg\xc5\xc3\x89\xebf\n\xc9\xe3\x88\x1d\x02\xbd\x18\r\x8e\xbdtc\xb3tPFY\xac\xd0\xedI\xea\xd5\xbe\xa2\x17\x12\xcd\x81\xb0\xd2\x03\xd8\x8cv\x1cY1\xb4\x9eq\x1f\xf2\x1dj\x0f\x1e\xc9s\xd1\x06{4\x89\x15\'\xb9o\x9aS\xe2>\x10\x8aA\xdaL\xc6\xd3\x9c\xa5\xe9o\x11,>d\x9dDf\xe4\x9cq}\x86\x13\x88\x07\x02\xa1);\xa4\xf2\x1a\x89\x19\x85\x1c\xf7|)\x0c\x80\x1b{\xfc\xdbJ\xf1e\xfb\x07\xfe\xce{5\xe1\xf5\x05k7\xcfwy\x8c\x02)\xf4\xe9\xb6\x85"\x13Q\x13U1O\xaa\xfd\x02\xc9B\xbc\xda>\xb5p\xe0V\xe5;\x11\xf8\xdd\xbf\xc5pN\xa2n\\n\xdco\xbc\x11Z\xcf\xf6\x0ccZk\x89\xe8}\x9e6\x96\xab\x95i\xdc\xb6\x17\x89\xa9N\xdcw\xef\xed\x80\xb6{a\xdd0Vgw\xbf{\x86\xd6\xf5\xf7\xcd\xe5\xed\xe1\xd4PS\x1fgF\xbb\x8e\x86\xee\xbf\xa3m\x9e1!\x93\xae\x85\x81{\xf8x\xbc)u\x0e?\x8b\xfa\x8a\xcc\xf4\xc1\xe4\xb4\xa3\x8f\xd6\xde\xbd9\x18\x84\xefu\xb9\xbd\rv\x1et\x15,\xa1=&\x15\xe2\x97T\x84U\xcat\x04\x8a\xe0\xc7\xb2\xbc\xc4F4\xc0\x8bK\xe8\xc0\xe2Z\xa0\x9c\xe3\xd4\xe1\xecgn9\xbd2uE\xa2\x14&\x87\xd6\x99\xd2\xea\x0b\xac\xd7\xef ]\xb8\x87i\xb2\xc4_ZYz\xc2r\xddA\x1d\xf8\x18Sl\xba\x19\xb6D\xb0\x96u\x977\xa1\xdd\x98p\x84>\xc5B<\x8ba^\xfc{\n\x9c\xf70\xacL\\\xa8\x97wy\x1a\xf0\xd9Ry\xa9Z\x9c\xb36\x16\xd1\'\xfa\xba=\xce\x19a5\x82\xf3\x1e\xa4\x83\xdf\x04\xa2\x84q\x14\x00\x8btp\xc2\x0b\x831\n\x0bs\xe7Nm\xe8\xf2\xb0\\QLf\\c+\xaa]\xc7\xe8\xf2A\xb6\x1a\xcc\xe9\xb8\xd6\x83\x0b\x8b<m\x1dT\x84\xf8\xeaJ\x13\xce\xc2\xcb!ej\x00\xe3\xaf:\x9b{5\xec\xc8\xd51\xbd\x00\x12\xa2\xb4\x1ai\xfa\x8ap\xd5\xc6\xd7r\xd7\xfd\xe6D\xa8S\xc9(\xdf\xaeo\xa8&uA\xa1\xc6\x06\t\\$\x05\xc1\x8b#\xd4\x04\x90n\x84\x10\xda\x97/\xbd\x80\x9el\\D >\x01|ru\x8f\xad\xc1\xb2~0\x8a\x06\xe6\xad\xcczq\x9e\xa1\x1f\xbc\xd2\xd4\x87\x03H\xdb\xce\xdc\xb8\x1c"K\xfd\xb7\xb4\x8a\x87\x9d5L\xc9\x92\xe8>\xa8RuV\xf5a\x7f\xa3\xae\x1a\x8au.M:!y8\xb9\xd6\x04\x11N\xb2\x06\xf3\x91\x9e\x8e\xa6\xa9\xedj\x10Mh\xe1\xee\xed\xcb\xd6\x1f7\xaeWi\xeercP8\xb0\t\xc4i-\x1e\xae\xe8\xd6r\x9dB6\x13G\xd3\x18\x05~U\xb7q\x1b\x12j\xffNK\x81\xbe\xcc\xe2\x925q\xf4*\xa1\xf2>\xf1l\xd1k\x1b\xe8U\x95|SscmmM[_\x97\xaf\xdf \x94\xde\xe5\x8f\xbeo\xcb\xd9\xc3\xa0\xea.l\xcb\x98v\x92&\x92\xac\xcb\xf1\xee6\x86dr"\xfaRn\x0f\xe72\n\n\xab/\xa4$\xbet\xd3\xcc\xf2\x850\xbaO\x99!\x9dHD\x17\xa9\xb4vu\x07\xbe\xc3+\x1d\x11\xbaF\xe8(\xf4\x17\xa7\x18\xdd\xba2\x04< \x81M\xc9\xa4\xdeW\rO\x07\xdey\x814\xce\x01Bkv\xff\xb5Bm\x92ox\xb2\xd1\xf81`%e\xcb>\xd9de{\x9d\x07_\xe0a\x82\xcd1/\x1d\xf2\xd3\xdf\x0f\xb1\t\xd0\xcf\x16\x9ad\xe2\xd0\xc0\x99\xe7ke\x02W\x01\xa0K\x04%v\xbekD<~Dw\xec\x1b\xf8?\xf75m\xf1\xc4\x89\xb7\x01"\xec\xdb\xbc]\x9e\xd4\xb4\xa7Q\xc3\x18\x85-\xbf*-j\xfc\xc05\xbdY>Tg\x97]b\xdb\xb6\x85I_\xe1\xefxZ\x1c\xf4\x0685KW\xdc\xed8?\xe5)gq,\xea\x1e\xa3av\x9fa\xd1\xba6\xaf\xe5\xd5\x7f5\xa1\xbbq&s\x05\xb5\xe9]\xa7|B\xa8!\x1cj\x89\x87h,\xbci\x9eL4N\x01\x80Y2p\xcd\x9c\xd1\xbag)\xd8\xe3\x07\x17\x93Q\xb0\x8c\xef\xa2\x9c%\xaf\x1a\xd1<,\x86n\x06\xb2w\xad\xe7g\x81\xb1X\xff\x8f\xf3\\\x82d\x00\xe5\x96\xb5\xf0>\xe7\xab\'\xde\xa7\xc6\xc5\x17j\xca\xa2\xd4\\<u\x855\xcb\xdb\xd3\xec\xf3\x87g\x0f\xd5+\xc6\xd4\xa4vJ@"\xe6\x84\x15\x075\xe3g\xec\xc2k\xe1\xc7A\xb8\xb9[\xa0:\xcf\x83iE\x9d\x85\xc3\xa6\x9ezK\xd7.E\xc7M\xd0-\x12A#%\xc1\t{\x07\x8c\x1a"Y\x96\xde_\x19\xd2|\xb5^6\x02\xcd<DwD\xc5G\x1e\xbaA\xd0\n\xd6\x01\x1fy^\x8a\t\xe9\x0b\x9c\x16\xe2\xe8\xf3J*\xbb\x9d\x99<\x12g\xd7:\x7fs"\xa27\xcf\x01\xc7\xd9\xf6X\xf0\xf2\x88\x1b~\xf3\x9a\x16_1up\x83K$$\x89\x85\x1b\x8b\xabt\x04\x1e\xdbi\x0f\xe3\\jl\xa3c\xa6\'\xb5G\xc5\xdbo\xc2~\xc5\xa6\x94\x94\xe9x#\x10\x01\x82~\xb3\xbcH\x84V#iW\xd2D\x0f\xf0;$\xcf\x15\xa23\xa59/\xcc\x91\x7f\x9c\x12U\xef^[\xf3\x04\x9cm\x88\xc4\xc1\x0b&\x95N\x0f\xa1W\x93\x17wa\xcb\x92Z\x93\xdb\xd6./1\xf3\n\xd7\xcfm\xe1\xdb\xbdN$7Z\xbbf\xa7|\xdb\x13\x96,\xc3U\xf6\xb7\xa8-\x07\xa2kf\xdd\xed<)g\x08\xc3B\xc2]uX3\xd4\xa5co\xfe\xb3\x96\xddPN\x7f\x98\x99\xe6Wn*\x87\t\xd1E\xf6\x98,fi\x14\x01\x04\x98w%\x04\x97q\xe4\x18i\xcc\xb5Y)\xff]\xa0_\x87\xaf\x13\x98\xdaYQ\xbcOb\xff\xcdK\xb8\xc4\x93S\x1a27\xcd\xc8\x8f\x8e\xcc\xa6\xb9k\x9fJ\xc5\xf3[-\x04[\xe0\x83\x13\x0f\xae\x12\xb4\xf7\x93\x12\t\xda0\x80\xff|9\xc2%%\xb8Nb\xf66\xa8C>\x15Y78\xd3\xc1\x83\xc2C\x05\x9cZ6\x0cU:Ha\xae\xe2.\x0fD\xe2[\x9b\xc2\xea\xef\xcc\xc9M\xff\x0f\x05*\xf0\x11\xe0\x0e)\xbe\xf1H\xc8)H\x8b$\xcfn\xb3\x8dl]O\xdb\x1d\xe6K\xd5\x99\xb4\xfa\xe2\xb2H\xfc\xb2]t\xdf\xe2\x94\'?E\xd3\'\xa8\xe8\xd0\xd2[\x0b\xf2s\x8eH\x14\xfb0\xa7\xfd\xc9}\xea\xd0X*J$\x88k+vG\xa5w\x04\x8f:\xdd\x93X\xb8\xcf\r;\x99 \xae\xdd\x86l\xa4\x83\xc1&\xf0\x0bT&c\x0b\xe8\xd9^\x0c\xcb\x8b/4W^f\xf0\xadx\xd0\xce\xa8\xa7.\x8c\xe2\xf5\xc83\xeb\x9a=J\xad\xa1\xfb0(\xb6\xa4.3|\xdaB\x91#\xbd\xae\xc7\xb7\xa4\xf9P\xce\xde\xd8\xf0\xaa\x94\xb1\x0f\xefV\x92\\Y|\xbfU\x13.H\xfa\x08\xa6\xbe\xa6\xf2g\xb8h\xe1\xac\xf2Q)8cd\xaeI\xb2\x18q\xd8jL\x98-7\xfd\xcc\xd5\xcf\xf27a\x96\xe8\xf8\x8f\x84r\x13\x8ckO\xdf\x84Yl\x9e;Rk\xe6\x94{\x02\xc3\x11\xa5r\xa7\x86z\xb0\x18\xbdh\xdc\xca\x19`\x08>\x8d\x1b\xec\x8e\xf9\xbf\xe7\xc7\xe9\x13\xb6\xe97F\x96}\x8e\xd7\xa4L\x99+\xd1\xf1\xc7\x8b`[g\xfe2G\x11GE\x15\x8eV\xaf\xaey\x12}"\xe7\xb7F\xd0\x1c\x18W5\xc9\x1b\xf9\x05\xf8A\xcd`{X\xc9\x97\xf1/p\x19/\x81\xa2\xf1\xbb\xca\xfc\x99\x04\xb9\x15\x8d\xa3\x96\x82\xf7\xa5\xe6\x18v\xb6\x83>\xe1\x90\xe37\xc0\xd1\xb4\x88\xc7\xde\xe7\xbbE\x98\xee\xa7\'\xae>\xaa\r\x89\xc42\x08\xeb\xd5\x8c\x99\xcf\xb8\xc5N\xf3\xd3\xde)s\xdfL\xd6\x12\x9d\x88\xdb5\xdb\xcd\xda\x92\xbc\xb0aw}\xf6_\x9dG\xf8k\xd2u\xfc\xb5<Z\x16\xccv^+\xfeJN\xbe\xc8\xa0\x80\xecR/\xe8}\xb0\xce]oH\x85\xd4\xe4\xc4%\x10\x8cZ\x82U__+,Qi$\xa8\x8f\x96u\xe4\x81\x00\x8bo\xd1E\xffu\x0c\x95\xd1\x08\x9c\x1a\'\xee*\xa1\x00\x15U_Z\x9fO\xcb],b*\x9d\x13+\xa4\x1c\x11Xr^\xae*\xde#\n\x81_\xd8\xf8T\xb8\xd4P\xdbR\x7fZ4\xc0\xf9XY\x84\xd8 \x8dA\x0f\xb4\x8c\xc5\x910&\xd5JL\x10kp\xd79\r\xb3\xb8\xd55o9\x96\xfd\xe1\x0f!\x01J\x9d\xdc\x8d\\u,\x8eAIG)x\xf9\xec\xdc\x9e\x15\x0b\x92?:\xf0\xea\xc0\xd6\xae\x19\x9d\x88\xb3\x8e\x02<\x1daR\x8d\x04\x94X~\xddS\xe6i\xf6\x18\xc7\x9a\xcf\x0eW\xd5\xd3\x98\x1dD\xa0\xe3\x19\xc3w\xb4\x06)\x7f8\x11\xed\xdaB\xc3\xd8D\xc0my\xef\xf68\x95\xc0A\xc2\xf6\xb6c\x0e\xd2\xfc\xf4(\x14\xf1YK\xd4\xa5\x95.wJ\x84\xb5\xc4\x01f\xca^\xac\r\x17\xffU\xa1\xe84!\x8cYk\x1a\x9e\x97^\xb8\xddlH7:\xa9\xa1%\x049\xb0G\xd5\x1eNb\x07\n\x15\xfe\'\xcf\xa2 \xd1\xd3\xe2\x15\xebv"\x9eR\xf0\x9f\xfa^\xcb+\x06\xcb5[5\xcc\xb1<l\xf6\xd4c\x19\x8be"o\xf8\xb8R\xff\xaf\x05\xd3\xe5%\x8bM6\xafP\x07\x05&\x03\x0b\xce\xe0\xe8R\xfbpp\xaawI\xd2W\xd2VX\xf3\xdeH\x15\x13\x04\xe1\x02X\xb8\xd1\x86\xf7t\xf3\xff+\xc7\xcb!\xf9\xb80\x0e\xbe\x95b,\xfa\xebZ\xc7\xa4E\xa5.}\x1c\xfe\x97\x18;\xe1\xa9\xdbk\xdd\x95\xf3\x031A\xe4.G\xc7\xecv\x95\xe9\xd3\x92\xdbc\xab%\x07(<82\xb3\x90\xa0\xa8\xdb\x14\xfd\xed(\xe4\t\x9b\xea\xce\xbcLs\x15]\x92\xa8H\xc7\x16<d>\xc9EYS\xad\xa77\x8e\x9ft\xa4\x80\xab\x92Y\xa2A\x13H\xc6\xb2\x13\xf3w\x9e\x82Z\xd9\xb9=\xcb\xfa9\x85\xce\xd1Y\xc9\xa6\xa0_\xe4\xedg\x88:\x8c\xbc\xe2\x81Nv3\x08\x83 \x8c\x97\x1d\x18X\xbd\xc8\x00\xd3\xee\x84\x90\x92\xdbk\xfd\nl\xd4\x8a@(\x98\x91\xf2\x81\xb8i\xb2s\xb6v\x08\x05c\x07\xc2\x98\xaaRo\xaeb\xc1\x97[\x1b.6\xe20T\x18n\xe9V\x1am\xc0\xbf\x94\xd8\xf1\xf6v\x97m}^\xd1\xb2\nsD\xbb\x00~\'\r8\xac\x9f\x1d\xc7\xc7\xd7\r\x192Vq\xacv\x8a\x1a\tk\x94>\x07\xfd\xa9Qa9\xb6\xe1\xeb\x98H\xa9dP\x9d\xca\x9a\x0f\xf0\xa5\x81\xc8C:\xad\xb0@\x94f5\xa6:\x9eK!2{\xc1\xb4\xd8\x15\x81t@_%^\xa2\xd0\x1c\xaa(#8\x1c\xbee\xcdX-bS*1\x95\xca\xb5i\xcfx\xecic\x80\xd8\xca^*\xa4(no\xc5\xee\x1a\x8d \x15\xa6\xb8Z\xba\xdd\x97`\xe8\xe3\x82\x14v\n)V\xc0\x9a\xfd\xd5\xf1\xfd\x9e\x9d\xd3\xa2\xb3\xd9U!\x9a\x01\xba\x8b\xc5\xa8^S\\\xbb\x01\xda\xe2\x02=\x8eV\xc4\xd0U\x8eo\x15\xa7\tg\x08S\x0e\x8d\xf7\x93\xd9\x1b\x05\xfa\xdf\x912\xd5\xc3\x85\x0c:[\x94F\xc4O\xecp\x8b\x0b+\x0c\x8fv\xa6\x1d\xf0j\xf6e&\x8e\xfa\x06\xab\xfe~\xe5\xd8\x85Iw\xec\xb5\x92P\x1b\x8e\x80\x8d\xb4\xc4\xf8c\xce\xed\x0b\xf713\xa2h\xfa\xa1:o\x01\x15\x95\xe5O;\xef0\xb1d\xe9^\x8fdr\xaf\xb1G\xce\x90\xf4\xf4\xbaf\xde\xae\xbc\xbd\xe7PW\xec1D\xd1\x01\xb9\xae\x06\x8e\xd08mB\x99\x002\xf17Cw\xca\xaf#\xf8\xea+\x9d.\xf6>}\xbb\x01b\xd7\xe1\x8d\xb46U\x04\xad\x19k\xe3\x84\x1e\xe1\xf3wf`\xb4\xbf\xaa\x0f\xaf(\xda\xb5[%\xf5\xac}\x91\xd9)\x05\x0c&\x19^\xedw\xd0\xf5\xaf|\xf2;\xb6\x93\xf8\x1a\x06ii\x8f)]u\xbbO\x9boS\xec3x1-3K\xaa\x0b\xfbF\xa0\xd2Y\xb4\xb7\xac"\xa0\x9f[W\xfe\xc8y\x0c\xd7hH\x11p\r\x9d\xcc\x8d\x7f\xf4\xfc`\x0e\xe9\x1f\x82\xfc3\x18\xc7\xe3>\x1c\xd6\x1c0\xdb\x9a\x974\xf8\xf6\x03\x87\x96\xfa\t\x1e|\xc9\xb1,\xe2\xf1A3\xeb\xf1H3\\\xa5\xd0\xe4q\xaa|\xc9\x83\xb7\xe4\xe7\xa0\xd82\xaf|\xc8\xc6D\x03\xcdh\'\x03\xc7\xe9vm\x10JC\x82\x17\xf9\xa9\xc3,\xfb`\x9d8XSg!\xbaj9:\xb6L$\xf1\x98\x0e"`\x93\x06\x94\x9f\xd8C\xad(<\x9c\x88\xc0PN3\xadc\xfd\xa9\x84Q\xcd58r=k\\7\x83\xa7\x8a|J\xab\x0eD\xa0\x946!\x9c\xaf!|\xce\xd94I"\xad\x02t$\xad6\xe1\xbb\xac=\xd9JWU\xc2\x9af\x15\xe5l-\xac\xc5R[E\xa3\x90\x06\x02:Mb\x1f\xea\x81\xf8\x0f\x0f.pV\xeaf\xcdCw\x01\x8aZ\xe0\xc5\x9aL\x80\x18\x18_f\xad\xc7\x04\xcf|[\x1foE\x10\x9c\xbe\xe8\xc6\xba\x10\xd4\xb7\x19\x96\n\x03\x81\x91B\x9fiY$1\x876n\x83\xcf\x82\x12c\xf8\xda""\xf5\r\x88\xe6&VD\x0c\r\xe2\xad\x0eX\xc72\xe2\x17\xac\x1c=\xee\xa5\xde\xfb\xe7\xb2ii\xef\xd1WP\xb9i\xad\x00\xe1aH \x0f\xdf\x00\x04\xb6\xb6\xb6zm\x08\xe3\xe6\x9d\x1f\xfa\xf4\x93\x85ouL]\xed\xde\x8a\x93\xdeQ\xfd\x1ei\x05\xc5eC+\xdb\x96\x8b\xb7o\xe20B\xdbj\x01\xd0\x1c56\xb3\x93{C\xdd\x15\xe4t\xab\x98\x1b\x8f\x07\xd9/D\xf0AF\xb7\xa5\x1f\xc9~A~\xd2\xfb\xd2\xd0-c\xa8\xb2\x03\xa3\x0f\xbc\x8a}\x8c1\x82\x10\x1a8p|\xe2B\xef\x178F\xe0\xf7\xdb\xbbM\x89\xba\xeeNV\x16\xddj\x16\x98cua\xb4\x00K\xc9\x89@\x13\xab\x98\x01\\\x93\x88\xbb\xf9d\xa8M\x00\x106q\xb4\xb3\x07\xdb\x8a\x83\xa7\xb9@\xda\xef1\xfe\xcd\\\xb9`\xe7\xfd\xd3\xc0]\xf7\x88\x8f\x98\xa5\xe3\xa2\x12\xb2\x97\x0f\x9e\x04]\xceM\xc9\x07\xf6\xcf0\xd9\xb2x\xbeb\xf9\xdf_\xea\x87-\xfe\x16\xc5\x82\xe3\xa6\x98\r\xb5HX\x8f\xa7\xce\x94|\x8d )rQ\xbe\x0c\xfe&w\x18\xa4\x99\x80\x1a\xd5\x079#\xbd\xb2\x92\xde\xd9\xa4\r\x07_\xb54\xac\xda \xe8\xacR\xcf\xb01\xfe\xa5N\xa7(\xd2xN?^\xc6\x11Q\xbc.\x8fa\xa2\xde\x0c-\x1a\xa0`)\x8d\xb0D\xf5d\x04\x13\xcbh\xad.\xa8\xb9\x1e\xf5\x86\xbcBZ\xa5\xa1\xf0F\x90g\xd8\xa2\xc8\x18\xd3\x96 \xfa\x04}\x97\xde\xc6\xb6\xfa|\x96\xe6\xf3e\xe7CP\x06M{\xdb5\x84,\x1d\x19m\x9cm\x85(k\xaa\xe8\xe2\xef\xbd\xa9\xcb-D\xc4_\xf8*\x10\x91\xb7\x04\x93/|\x1f\xa6V\xc9\r\xcep\x93x\xfaE\x8f\xa6\xe6\x8c]\x9c{\x83\'m8V\x0f\xd1)\x8e\xa7 \xad\x89)1:/\x03\x87\xbc\xe1\xe7\xc9\xd6\xa2\xc1x\xc4v\xd6\x8c\xfd\xdf\xf5uJ\x90[\x92\xecj\xfcr\x04\x91\x83h\xebw\x1b\x9e\xd5\x9cZ\xc1$\x90\x08\x01\xb1\x9e\xbc{^:\xf3\xd5-\xd3\xb7n6\xcal\xd8\xdf\xa1A\x05=7\xbe!N\x8c\xbf\x7f\xa0\x89\x07x\xa8\x82^\x9d\xa4\x92+\x89\xf7\x88\\\xb6\xcd\x9d\x00B\x99\x0c\x16\x8e\x96\xaa\xbd\xd9\t\x8c\xb7\xe8\x96"5x\xe0\xe0`m=\x8e3\xe7g\xea\xb1>\xa2\xbbxI\x12\xbex=\x91\x9c3NsH\x92\xa48;h\x91\x1b\xd0\xbb\xd7\xf3X\x8c\x00^w\xa3\xcc\xd5\x0f\x9a#@\'Y\xd2\x155?<B\x1e~\xa0\xa2\xa60\xded\x85\x82\x86K\xbc\xe1h\x1a9\x9d^\xfe\xf3\x97W6\x10\x8b(%\xd8\x8a\x8d\xf4\xed\xe8\x85\xce*\xbb\xb0L\xd0\x86_\xee[]\x9e\x1e\xe07p\xd3\xc8\xc7\xab\xfd\xdb\xba\xbc\xdfR\xef\xe8\xc6\xf1l\xbb\x90(^!w\xa5bo \x95\x13\xa0\xff\xb7WgKdR\x94y\xfaE\xaaH\xee\x8d\xc1\xa9\x176a\xb0\xc9\xf0}YJ\x11 ~\xfeM"\xe8i\xc9\x8b\x89:\x1d\x1eAR\x11_<\x04"\xdcD\x1f\x11\xf85\xdf\x04\xc5Q\x0f\x8a\xc0\xb9\xf3<\xe4)\x81s\xda\x80\xe7\xc2\xf3\xd4\xeag\xd2(\'\xf7\xee\x9b\xee\xa4)\xa3\x7f\x84-el\xe3t\x1a^~\xba\x1e\xcd\x8d\x1c\xbb\xec)\xf4\x89\x07\x08\x92PF\x87h\x15=\x1a\xe4\xbd\xa1=\xff\x93\xf9\xfe\x9a-\xa2\xf9\x8eq\xe4Vm\xa8\xd9\xe8\xfaY\xec\xd5\x97\x8e.z\xec-\xce\xd5@\x1f\xe5C\xf5\xb0+\xe2AU\xfa\x8cT\xda\xeeN\x06\'\xb3r\x9b\xd3Q\xd2\x80LDa\xa8:\x02\xaa\xfb\xf2\xb9\xd1V>N\x0e9\xa1\xb3\x1a\x97\xfd,Q\xdf4q\x87\xe4\xa1sYF\xac\x84\xc5\xf1&P\x8e!\xa5\xb1\xcf[\xc0U[iq+mk\x13\xf1\x84\xd7\x81\x8f]\xa2^B\xdd\xfa\xf5\xad1\x88Z\xe7\xb0-\x00I\xa9l\x92\xe5\x8b\xbc\xaa\x87\x87O\xad\x17\xb9\xe7\xb1h\x88O\xde\xba9\x8ah\xa9C\x18\xc1\xe5\xc7\xd8,\xc2X\xcdx\xe3\xbb|\xe2\x05\'\xb5\xe4r\xc8\xcd\x91\xa7\xbd=\xbe\xdb(\x99\x10\x12\x1d\x04bC:\x86\xa1\x0f\xdb\x11\xc7T\x1e\x06n`\xb3\xe9\'\x89 \x1a0-\x11\x0cUF\xe2\x9a\xad~\xeb\xfa\xf4r\xda\x85\x08\x9c\xf3\x9f\xcaq\x13|\x8d0\xaf\x08A\n\x8e\xad\xd4\xa3sy\xabVU\xa6k\x04\x97\xf9\xf0\xe9r\x7f\xdf\xe1\xfba;l@\xech\xa4D\xf1\xb10\xa0\x900$\xb7\xd9\xb2X\xcbK\x9b\x1eL\xcdJN\xcd\xce\xfbj\xb23\xa8< \xce=x5\xe1\xbeC"?\x90\x97\x8b\x1e\xbc\xa9\xbb2\xfc7\x00C\x1d%\x8c<X\xc4\xee\x9b\xdd\xdf\xc0\xe7\x17\xd9_\xd0\xf3\xac<\x10j5\xebD\xf25$\xebf\xfc\x15\xb1 \x13\x10\xa7\xce\x9fG\x9dz\x1b\x80)\xc5\xcb\xc7;\x19')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel.database import db
|
3
|
+
import sys
|
4
|
+
from hiddifypanel import Events
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
from dateutil import relativedelta
|
9
|
+
import datetime
|
10
|
+
|
11
|
+
from hiddifypanel.panel import hiddify
|
12
|
+
import random
|
13
|
+
import uuid
|
14
|
+
import urllib
|
15
|
+
import string
|
16
|
+
|
17
|
+
def init_db():
|
18
|
+
db.create_all()
|
19
|
+
|
20
|
+
try:
|
21
|
+
db.engine.execute(f'update proxy set transport="WS" where transport = "ws"')
|
22
|
+
db.engine.execute(f'DELETE from proxy where transport = "h1"')
|
23
|
+
except:
|
24
|
+
pass
|
25
|
+
if hconfig(ConfigEnum.license):
|
26
|
+
add_column(ParentDomain.alias)
|
27
|
+
add_column(User.start_date)
|
28
|
+
add_column(User.package_days)
|
29
|
+
add_column(Child.unique_id)
|
30
|
+
add_column(Domain.alias)
|
31
|
+
add_column(Domain.child_id)
|
32
|
+
add_column(Proxy.child_id)
|
33
|
+
add_column(BoolConfig.child_id)
|
34
|
+
add_column(StrConfig.child_id)
|
35
|
+
|
36
|
+
if len(Domain.query.all())!=0 and BoolConfig.query.count()==0:
|
37
|
+
db.engine.execute(f'DROP TABLE bool_config')
|
38
|
+
db.engine.execute(f'ALTER TABLE bool_config_old RENAME TO bool_config')
|
39
|
+
if len(Domain.query.all())!=0 and StrConfig.query.count()==0:
|
40
|
+
db.engine.execute(f'DROP TABLE str_config')
|
41
|
+
db.engine.execute(f'ALTER TABLE str_config_old RENAME TO str_config')
|
42
|
+
|
43
|
+
try:
|
44
|
+
add_column(User.monthly)
|
45
|
+
db.engine.execute('ALTER TABLE user RENAME COLUMN monthly_usage_limit_GB TO usage_limit_GB')
|
46
|
+
except:
|
47
|
+
pass
|
48
|
+
try:
|
49
|
+
db.engine.execute(f'update str_config set child_id=0 where child_id is NULL')
|
50
|
+
db.engine.execute(f'update bool_config set child_id=0 where child_id is NULL')
|
51
|
+
db.engine.execute(f'update domain set child_id=0 where child_id is NULL')
|
52
|
+
db.engine.execute(f'update proxy set child_id=0 where child_id is NULL')
|
53
|
+
except:
|
54
|
+
pass
|
55
|
+
|
56
|
+
add_column(Domain.cdn_ip)
|
57
|
+
db_version=int(hconfig(ConfigEnum.db_version) or 0)
|
58
|
+
start_version=db_version
|
59
|
+
# print(f"Current DB version is {db_version}")
|
60
|
+
if not Child.query.filter(Child.id==0).first():
|
61
|
+
print(Child.query.filter(Child.id==0).first())
|
62
|
+
db.session.add(Child(unique_id="self",id=0))
|
63
|
+
db.session.commit()
|
64
|
+
|
65
|
+
|
66
|
+
for ver in range(1,40):
|
67
|
+
if ver<=db_version:continue
|
68
|
+
|
69
|
+
db_action=sys.modules[__name__].__dict__.get(f'_v{ver}',None)
|
70
|
+
if not db_action:continue
|
71
|
+
if start_version==0 and ver==10:continue
|
72
|
+
|
73
|
+
print(f"Updating db from version {db_version}")
|
74
|
+
db_action()
|
75
|
+
Events.db_init_event.notify(db_version=db_version)
|
76
|
+
print(f"Updated successfuly db from version {db_version} to {ver}")
|
77
|
+
|
78
|
+
db_version=ver
|
79
|
+
db.session.commit()
|
80
|
+
set_hconfig(ConfigEnum.db_version,db_version,commit=False)
|
81
|
+
|
82
|
+
|
83
|
+
db.session.commit()
|
84
|
+
return BoolConfig.query.all()
|
85
|
+
|
86
|
+
def _v27():
|
87
|
+
# add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
88
|
+
set_hconfig(ConfigEnum.netdata, False)
|
89
|
+
def _v26():
|
90
|
+
add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
91
|
+
|
92
|
+
def _v25():
|
93
|
+
add_config_if_not_exist(ConfigEnum.country, "ir")
|
94
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, "")
|
95
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
96
|
+
add_config_if_not_exist(ConfigEnum.license, "")
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
def _v21():
|
101
|
+
db.session.bulk_save_objects(get_proxy_rows_v1())
|
102
|
+
|
103
|
+
|
104
|
+
def _v20():
|
105
|
+
if hconfig(ConfigEnum.domain_fronting_domain):
|
106
|
+
fake_domains=[hconfig(ConfigEnum.domain_fronting_domain)]
|
107
|
+
|
108
|
+
direct_domain=Domain.query.filter(Domain.mode in [DomainType.direct,DomainType.relay]).first()
|
109
|
+
if direct_domain:
|
110
|
+
direct_host=direct_domain.domain
|
111
|
+
else:
|
112
|
+
direct_host=hiddify.get_ip(4)
|
113
|
+
|
114
|
+
for fd in fake_domains:
|
115
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
116
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='moved from domain fronting',cdn_ip=direct_host))
|
117
|
+
|
118
|
+
def _v19():
|
119
|
+
set_hconfig(ConfigEnum.path_trojan,get_random_string(7,15))
|
120
|
+
set_hconfig(ConfigEnum.path_vless,get_random_string(7,15))
|
121
|
+
set_hconfig(ConfigEnum.path_vmess,get_random_string(7,15))
|
122
|
+
set_hconfig(ConfigEnum.path_ss,get_random_string(7,15))
|
123
|
+
set_hconfig(ConfigEnum.path_grpc,get_random_string(7,15))
|
124
|
+
set_hconfig(ConfigEnum.path_tcp,get_random_string(7,15))
|
125
|
+
set_hconfig(ConfigEnum.path_ws,get_random_string(7,15))
|
126
|
+
|
127
|
+
|
128
|
+
def _v17():
|
129
|
+
for u in User.query.all():
|
130
|
+
if u.expiry_time:
|
131
|
+
if not u.package_days:
|
132
|
+
if not u.last_reset_time:
|
133
|
+
u.package_days=(u.expiry_time-datetime.date.today()).days
|
134
|
+
u.start_date=datetime.date.today()
|
135
|
+
else:
|
136
|
+
u.package_days=(u.expiry_time-u.last_reset_time).days
|
137
|
+
u.start_date=u.last_reset_time
|
138
|
+
u.expiry_time=None
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
def _v16():
|
143
|
+
|
144
|
+
add_config_if_not_exist(ConfigEnum.tuic_enable,False)
|
145
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_enable,False)
|
146
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_fakedomain,"en.wikipedia.org")
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
def _v14():
|
152
|
+
add_config_if_not_exist(ConfigEnum.utls,"chrome")
|
153
|
+
|
154
|
+
def _v13():
|
155
|
+
add_config_if_not_exist(ConfigEnum.telegram_bot_token,"")
|
156
|
+
add_config_if_not_exist(ConfigEnum.package_mode,"release")
|
157
|
+
|
158
|
+
def _v12():
|
159
|
+
db.engine.execute(f'drop TABLE child')
|
160
|
+
db.create_all()
|
161
|
+
db.session.add(Child(id=0,unique_id="default"))
|
162
|
+
|
163
|
+
def _v11():
|
164
|
+
add_column(User.last_online)
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def _v1():
|
170
|
+
|
171
|
+
next10year = datetime.date.today() + relativedelta.relativedelta(years=6)
|
172
|
+
external_ip=hiddify.get_ip(4)
|
173
|
+
rnd_domains=get_random_domains(5)
|
174
|
+
data = [
|
175
|
+
StrConfig(key=ConfigEnum.db_version,value=1),
|
176
|
+
User(name="default",usage_limit_GB=3000,package_days=3650,mode=UserMode.weekly),
|
177
|
+
Domain(domain=external_ip+".sslip.io",mode=DomainType.direct),
|
178
|
+
StrConfig(key=ConfigEnum.admin_secret,value=str(uuid.uuid4())),
|
179
|
+
StrConfig(key=ConfigEnum.http_ports,value="80"),
|
180
|
+
StrConfig(key=ConfigEnum.tls_ports,value="443"),
|
181
|
+
|
182
|
+
StrConfig(key=ConfigEnum.decoy_domain,value=rnd_domains[0]),
|
183
|
+
StrConfig(key=ConfigEnum.proxy_path,value=get_random_string()),
|
184
|
+
BoolConfig(key=ConfigEnum.firewall,value=True),
|
185
|
+
BoolConfig(key=ConfigEnum.netdata,value=True),
|
186
|
+
StrConfig(key=ConfigEnum.lang,value='fa'),
|
187
|
+
|
188
|
+
BoolConfig(key=ConfigEnum.block_iran_sites,value=True),
|
189
|
+
BoolConfig(key=ConfigEnum.allow_invalid_sni,value=True),
|
190
|
+
BoolConfig(key=ConfigEnum.kcp_enable,value=False),
|
191
|
+
StrConfig(key=ConfigEnum.kcp_ports,value="88"),
|
192
|
+
BoolConfig(key=ConfigEnum.auto_update,value=True),
|
193
|
+
BoolConfig(key=ConfigEnum.speed_test,value=True),
|
194
|
+
BoolConfig(key=ConfigEnum.only_ipv4,value=False),
|
195
|
+
|
196
|
+
BoolConfig(key=ConfigEnum.vmess_enable,value=True),
|
197
|
+
BoolConfig(key=ConfigEnum.http_proxy_enable,value=True),
|
198
|
+
StrConfig(key=ConfigEnum.shared_secret,value=str(uuid.uuid4())),
|
199
|
+
|
200
|
+
BoolConfig(key=ConfigEnum.telegram_enable,value=True),
|
201
|
+
# StrConfig(key=ConfigEnum.telegram_secret,value=uuid.uuid4().hex),
|
202
|
+
StrConfig(key=ConfigEnum.telegram_adtag,value=""),
|
203
|
+
StrConfig(key=ConfigEnum.telegram_fakedomain, value=rnd_domains[1]),
|
204
|
+
|
205
|
+
BoolConfig(key=ConfigEnum.ssfaketls_enable,value=False),
|
206
|
+
# StrConfig(key=ConfigEnum.ssfaketls_secret,value=str(uuid.uuid4())),
|
207
|
+
StrConfig(key=ConfigEnum.ssfaketls_fakedomain, value=rnd_domains[2]),
|
208
|
+
|
209
|
+
BoolConfig(key=ConfigEnum.shadowtls_enable,value=False),
|
210
|
+
# StrConfig(key=ConfigEnum.shadowtls_secret,value=str(uuid.uuid4())),
|
211
|
+
StrConfig(key=ConfigEnum.shadowtls_fakedomain, value=rnd_domains[3]),
|
212
|
+
|
213
|
+
BoolConfig(key=ConfigEnum.ssr_enable,value=False),
|
214
|
+
# StrConfig(key=ConfigEnum.ssr_secret,value=str(uuid.uuid4())),
|
215
|
+
StrConfig(key=ConfigEnum.ssr_fakedomain, value=rnd_domains[4]),
|
216
|
+
|
217
|
+
BoolConfig(key=ConfigEnum.tuic_enable,value=False),
|
218
|
+
StrConfig(key=ConfigEnum.tuic_port,value=3048),
|
219
|
+
|
220
|
+
BoolConfig(key=ConfigEnum.domain_fronting_tls_enable,value=False),
|
221
|
+
BoolConfig(key=ConfigEnum.domain_fronting_http_enable,value=False),
|
222
|
+
StrConfig(key=ConfigEnum.domain_fronting_domain,value=""),
|
223
|
+
|
224
|
+
# BoolConfig(key=ConfigEnum.torrent_block,value=False),
|
225
|
+
|
226
|
+
*get_proxy_rows_v1()
|
227
|
+
]
|
228
|
+
fake_domains=['speedtest.net']
|
229
|
+
for fd in fake_domains:
|
230
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
231
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='fake domain',cdn_ip=external_ip))
|
232
|
+
# for c in ConfigEnum:
|
233
|
+
# if c in [d.key for d in data if type(d) in [BoolConfig,StrConfig]]:
|
234
|
+
# continue
|
235
|
+
# if c.type()==bool:
|
236
|
+
# data.append(BoolConfig(key=c,value=False))
|
237
|
+
# else:
|
238
|
+
# data.append(StrConfig(key=c,value=""))
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
db.session.bulk_save_objects(data)
|
243
|
+
|
244
|
+
def _v2():
|
245
|
+
add_config_if_not_exist(ConfigEnum.telegram_lib, "python")
|
246
|
+
add_config_if_not_exist(ConfigEnum.admin_lang, hconfig(ConfigEnum.lang))
|
247
|
+
|
248
|
+
def _v3():
|
249
|
+
add_config_if_not_exist(ConfigEnum.branding_title, "")
|
250
|
+
add_config_if_not_exist(ConfigEnum.branding_site, "")
|
251
|
+
add_config_if_not_exist(ConfigEnum.branding_freetext, "")
|
252
|
+
add_config_if_not_exist(ConfigEnum.v2ray_enable, False)
|
253
|
+
|
254
|
+
|
255
|
+
def _v6():
|
256
|
+
try:
|
257
|
+
Proxy.query.filter(Proxy.name=='tls XTLS direct trojan').delete()
|
258
|
+
Proxy.query.filter(Proxy.name=='tls XTLSVision direct trojan').delete()
|
259
|
+
except:
|
260
|
+
pass
|
261
|
+
# db.session.bulk_save_objects([
|
262
|
+
# *make_proxy_rows(["XTLS direct vless"])
|
263
|
+
# ])
|
264
|
+
|
265
|
+
|
266
|
+
def _v9():
|
267
|
+
try:
|
268
|
+
add_column(User.mode)
|
269
|
+
add_column(User.comment)
|
270
|
+
for u in User.query.all():
|
271
|
+
u.mode= UserMode.monthly if u.monthly else UserMode.no_reset
|
272
|
+
except:
|
273
|
+
pass
|
274
|
+
|
275
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
276
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, '')
|
277
|
+
add_config_if_not_exist(ConfigEnum.unique_id,str(uuid.uuid4()))
|
278
|
+
|
279
|
+
def _v10():
|
280
|
+
all_configs=get_hconfigs()
|
281
|
+
try:
|
282
|
+
db.engine.execute("ALTER TABLE `str_config` RENAME TO `str_config_old`")
|
283
|
+
db.engine.execute("ALTER TABLE `bool_config` RENAME TO `bool_config_old`")
|
284
|
+
except:
|
285
|
+
pass
|
286
|
+
db.create_all()
|
287
|
+
|
288
|
+
rows=[]
|
289
|
+
|
290
|
+
for c,v in all_configs.items():
|
291
|
+
if c.type()==bool:
|
292
|
+
rows.append(BoolConfig(key=c,value=v,child_id=0))
|
293
|
+
else:
|
294
|
+
rows.append(StrConfig(key=c,value=v,child_id=0))
|
295
|
+
|
296
|
+
db.session.bulk_save_objects(rows)
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
|
302
|
+
def get_proxy_rows_v1():
|
303
|
+
return make_proxy_rows([
|
304
|
+
# 'WS Fake vless',
|
305
|
+
# 'WS Fake trojan',
|
306
|
+
# 'WS Fake vmess',
|
307
|
+
# 'grpc Fake vless',
|
308
|
+
# 'grpc Fake trojan',
|
309
|
+
# 'grpc Fake vmess',
|
310
|
+
# "XTLS direct vless",
|
311
|
+
# "XTLS direct trojan",
|
312
|
+
"XTLS direct vless",
|
313
|
+
"WS direct vless",
|
314
|
+
"WS direct trojan",
|
315
|
+
"WS direct vmess",
|
316
|
+
"WS CDN vless",
|
317
|
+
"WS CDN trojan",
|
318
|
+
"WS CDN vmess",
|
319
|
+
"grpc CDN vless",
|
320
|
+
"grpc CDN trojan",
|
321
|
+
"grpc CDN vmess",
|
322
|
+
"tcp direct vless",
|
323
|
+
"tcp direct trojan",
|
324
|
+
"tcp direct vmess",
|
325
|
+
"grpc direct vless",
|
326
|
+
"grpc direct trojan",
|
327
|
+
"grpc direct vmess",
|
328
|
+
# "h1 direct vless",
|
329
|
+
# "h1 direct vmess",
|
330
|
+
"faketls direct ss",
|
331
|
+
"WS direct v2ray",
|
332
|
+
"shadowtls direct ss",
|
333
|
+
"tcp direct ssr",
|
334
|
+
"WS CDN v2ray"]
|
335
|
+
)
|
336
|
+
|
337
|
+
def make_proxy_rows(cfgs):
|
338
|
+
|
339
|
+
for l3 in ["tls_h2","tls", "http", "kcp"]:
|
340
|
+
for c in cfgs:
|
341
|
+
transport,cdn,proto=c.split(" ")
|
342
|
+
if l3=="kcp" and cdn!="direct":
|
343
|
+
continue
|
344
|
+
if proto=="trojan" and l3 not in ["tls",'xtls','tls_h2']:
|
345
|
+
continue
|
346
|
+
if transport in ["grpc","XTLS","faketls"] and l3=="http":
|
347
|
+
continue
|
348
|
+
# if l3 == "tls_h2" and transport =="grpc":
|
349
|
+
# continue
|
350
|
+
enable=l3!="http" or proto=="vmess"
|
351
|
+
if not Proxy.query.filter(Proxy.l3==l3,Proxy.transport==transport,Proxy.cdn==cdn,Proxy.proto==proto).first():
|
352
|
+
yield Proxy(l3=l3,transport=transport,cdn=cdn,proto=proto,enable=enable,name=f'{l3} {c}')
|
353
|
+
|
354
|
+
|
355
|
+
def add_config_if_not_exist(key:ConfigEnum,val):
|
356
|
+
table=BoolConfig if key.type()==bool else StrConfig
|
357
|
+
if table.query.filter(table.key==key).count()==0:
|
358
|
+
db.session.add(table(key=key,value=val,child_id=0))
|
359
|
+
def add_column(column):
|
360
|
+
try:
|
361
|
+
column_type = column.type.compile(db.engine.dialect)
|
362
|
+
db.engine.execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
|
363
|
+
except:
|
364
|
+
pass
|
365
|
+
|
366
|
+
|
367
|
+
def get_random_string(min_=10,max_=30):
|
368
|
+
# With combination of lower and upper case
|
369
|
+
length=random.randint(min_, max_)
|
370
|
+
characters = string.ascii_letters + string.digits
|
371
|
+
result_str = ''.join(random.choice(characters) for i in range(length))
|
372
|
+
return result_str
|
373
|
+
|
374
|
+
def get_random_domains(count=1,retry=3):
|
375
|
+
try:
|
376
|
+
irurl="https://api.ooni.io/api/v1/measurements?probe_cc=IR&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
377
|
+
# cnurl="https://api.ooni.io/api/v1/measurements?probe_cc=CN&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
378
|
+
import requests
|
379
|
+
data_ir=requests.get(irurl).json()
|
380
|
+
# data_cn=requests.get(url).json()
|
381
|
+
from urllib.parse import urlparse
|
382
|
+
domains=[urlparse(d['input']).netloc.lower() for d in data_ir['results'] if d['scores']['blocking_country']==0.0]
|
383
|
+
domains=[d for d in domains if not d.endswith(".ir")]
|
384
|
+
|
385
|
+
return random.sample(domains, count)
|
386
|
+
except Exception as e:
|
387
|
+
print('Error, getting random domains... ',e,'retrying...',retry)
|
388
|
+
if retry<=0:
|
389
|
+
defdomains=["fa.wikipedia.org",'en.wikipedia.org','wikipedia.org','yahoo.com','en.yahoo.com']
|
390
|
+
print('Error, using default domains')
|
391
|
+
return random.sample(defdomains, count)
|
392
|
+
return get_random_domains(count,retry-1)
|
393
|
+
|
4
394
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
395
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|