hiddifypanel 3.0.0.dev64__cp311-cp311-manylinux2014_x86_64.whl → 3.0.0.dev65__cp311-cp311-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/admin/Actions.py +1 -1
  17. hiddifypanel/panel/admin_2.py +33 -3
  18. hiddifypanel/panel/cf_api.py +35 -4
  19. hiddifypanel/panel/common.py +98 -3
  20. hiddifypanel/panel/custom_widgets.py +71 -4
  21. hiddifypanel/panel/database.py +18 -3
  22. hiddifypanel/panel/hiddify_api.py +70 -3
  23. hiddifypanel/panel/usage.py +4 -5
  24. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  25. hiddifypanel/panel/user/user.py +2 -0
  26. hiddifypanel/static/css/custom.css +6 -0
  27. hiddifypanel/templates/500.html +1 -1
  28. hiddifypanel/xray_api.py +109 -3
  29. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  30. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +34 -36
  31. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  32. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  33. pyarmor_runtime_000000/__init__.py +0 -4
  34. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  35. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  36. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  37. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,60 @@
1
- # 2023-04-08T16:23:30.456442
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0b\x00\xa7\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00g\x16\x00\x00\x12\t\x04\x00\xe8\xa3\x85-\x9f\x12\x86\t\xc9\xcb\xd9\xeb\x03cQ\xf7\x00\x00\x00\x00\x00\x00\x00\x00\xef!,\xeaZx\xd1j@\t\x98\x8d\xc2\xcf\xc2\x96S~8#T\xb0\xd0\xc5n\xb5\xe9R\x14\xb4\xafM[\x94\x04\xc0\xd3\x8bs \xe6\x9c\xa1:\xb8\xb1\xf1\x9d\x9c\xb5\x98\xc9\x88h\xfb\x02$\xa2\xaf\xb9\x99J\x87\x88+\xd0n5\xe7\xee-jqn\xef\xa1m\x8b\xda\xaar\xc6f\x93D\x8bL\xf4\x18kv\xf8\xbe\x8d\x1d\x99N\xec\xbd\x98\xfafe\xfb\xca\x1e\xafw\xcf\t\xe4\x06\xed4\'7d\xb3\x85\x89\xd2|\xe0\x9b\xdd\xb3\x86Xx/\xb1\xfb+\x01<\x87\xa7*\xb5\xad\xa8\xfeo\xa2\xa5\xe0\xe0\x00\xf8\xa8:\x02\xe3:\x19\xc8\x93gc\xc8\xe0\xbd\x03\xebb\xa1p\xe6[y\xd1F\x13`\x87z\x14\xb5\x13\xd3\xb12\x1a\xbf)\xf6Wb\x95\xa1\xden\x15\xec\xf7\x97^\xd7\xd8\x88\x16\x8d\xcf\xc3\xf5Y$\xedS\x85\xd1\x7f\xfew\r\xf8\x99$\xf0\xb6xC\x9f/\x1f\xf4b\xdf3(A"\xc6\xd0\xc8\xfan\xba\x19^\xee\xe6\xe9\x9e\xe8\xd3\x86j\x1f\xcczZ\xe4\xab\x08:\xa6g\x92\x03\x81\xd1\x87\xff\x03\x83|k\xff\xe5\x0fq\xa7.\x1b\x85#\xb9a\xc1\xd2Mr\xa0\x8d`\x98\xb0v\xe2\xea:\x02)Y\xe5\x1c\x9be\x87G#+\xed\x0e\xebzrNu\xa7\xdc,;m\xea<^\xfc\x1d\x8d\xcc"R|\x17\xcf\x1fs?\xc1\xd5\xd9\x14\x19\xf0\xb6\x94\x08\x80\n\x07\x9bf\xa9B\x97\x0c\x94\xeb\xf5\xc0X\xa9k\xb3@\x07\x16B\x8b\x16\xf4\x07c\xc1e)\x1a\xed\xfdh\x92l]\x8b\xe7k\xb7\xcfT\x05\xa9\x9f\xa8\xd1jN\xfb\x89\xa4\x19\xf3q\x08!\x15\x9b\xb3\xf0\xe4Qs@!\x8bH\x8b\xc9\xe8q\r\xc1\n\xe0\xab\x14}9\xb4\xa8\xa2.S\xcd\x83Py\x10\x92@"\x0br\xd9\xdf\xdc/\xadt\x03E\xa5\xe8\xcd\xe2!T\xba\x0c\xba\xb8\xdcd\xce(I\x0cG\xe5*N\xbe\xf2T#n\xc8o(\xc1\xf0\x0f\xea\x19go\xec\x18#_\x82s.+\xc9\x88\x97;s\x0c\x0eZ\xc4\xa9[T\xa4\xdah.a\x0bS\xe2i\xdf\xfbg\'f\xda\xfe\xea\x10\x97z;\xa4}\xb5\x8f\xbc\x05\xd1q\xfa\\\xaaBm\x0b\x13\xeb\xc8M\x9f%DF\xbe\xbbT\x80s\xd8NN\xaa\xeb\x9f\x01\x13\x17\xca\x11i<.U\x18J\xdea*\xfcN\xdd\xcf#o)\x02^T\xe7\xdb\xa7\xf1\x7f\x0fl\x07\xef\xa3L\x803\xdd\xf8\x83\x0e\x9d\xebd\x7f\x12\xb48b=&\x81\xc2\xc21t\xf8\x94\xe6\xaa\xeb\xe3\x8e\x9d#\t\xbd\xf4\xb9\xf5\xe5\xde\xb2!f\xbd\xa2ZOo\xfe\xbc\x8c\xd4\x88|\xd5;\xaa)\x8f\xf6\xc5\\\xe7\x9d\x0c\xb2\xf3\xc4\xa1\xf6\xb0\xed\xf0d*L\xa6\xd1\x83\xd1\xfe\x87\xc5\n.\xf2+B\xe3\xae}T\x13\xb6L\x8b\n\xd4/U\x19q\xd4\xd2\xa8w\xcf\xaf\xcb\'EJvHg\x86\xcfV\xefEz\xa5[\xca\xf3\xfc\x02\x06\xd4\xd7Ig\x00\xd7\xae\x9a\xf7\xb7\x8c\xd4\xf9\x18\x0b\xd5V\xdcv\xd0f\xcd\x86\xb3\xef\x97\xe7\x83\xbb5w\xbb\xd7\xd5{\xd0A8\xb1\x06\x10\xdd\xa7\xb8\x13\xa7}<\x8e\x108\x14\xc5\xe0\xc3\xf7\xb2\xf3\x13\xae\xf2\xe15Y\xc1[\x1e\xb3\xf1S\xb7\x9e?3\xce\xe6\x95\x96ho~9&\xcc\x0f\xbf\xe0\xf2\xa2\xcd\xa9\xb1\x01+\xcb\xde\xaf\xb0\xce\xd2\xe4\x08{1\xe1\r\xc8\x17\x80\xe4?%\x04\xc9\xc9-\xc4\xf7\xfa\x00\x13R\xa6\rpI\xc1V\x11x\x10D\xe6\xc1\xaeFEq*\x8b?&!\x8f\x94oz\xc3\xda[\x89)\xfa\xfe>\x14:\xd3\x13\x96:o\xf3\x88`\xba\x1dL\x85\x8al\x11\n|\xac\x11\xe4(\xae\x10\xd8A\x8dK\xc7\x81\xc5\xc9\xba\xee\x96\xf6D\x9d\x18\xcb\r!\x93\xb9\x9fm\x8d\x92g\x90iZi\x14\x0cn\xa2\xb8\xa2\xbctX\xa0Z=\xdb*\xf8A\x7fU\xe7\xbaTu\xc8\x82Um\x13\xcbc\x0f\xeb\xc6{\xfc\x85\x1a\xdf\x85\xe9\xd7\xd0\xa0Z\x08\xce\x1d\x95]\x14\xbc\x0c\x8c\x8f\xc6{\x1f\xf7\xfd_\x14Z\t\xfb1\xe4fa\xb8\xc0\x87#.Q\x97\x9f\xd3\xa2\x1f\x1cc\x02\xae\xf7\xe2V\xb6\x13\x1e\xff\xddv\xf3s6\x8ex\xf1\xd4\xa7K&\xbd+\x01\x97\xe8h\xf7\x1d\xb1\x9d\xc5\x9f-\x05\xfa3|\'\xb3@!\x19+/\xa0\xb6\x13\xa6\xa6\xb0\xe7\xbb\xeb/\xa0\xf93\x13b^\xc2%\xca\xca\'~\xbe\xa1\xbe\x16\xf0\x11\x87\x17z\xdb0\xae\xc0\x1c\x13*O\x7f\xed\x8b\xed\xe1\x1d%*\xf11]cpq\x97\xe6\x89\rH\x89:\xd2"\xa94P\xc2\xf7\x01\xb5\xa3\'\xe9\x94BBa\xd4\xf6\xc9\x10\xc6:~\xe2\xa6\xd1n\xd4\xcf4\x0b\xa4k8\x89\xc6$\xae\xe7\x11\xce\xa2\xacr7\xb1R\x7f\xd2&4\xcb\xab\xde\xd5\xc571\xe75R\xc6DC\x80\\\xd8\xcc\xfe\x1asc\xb6B\xeb\x11\xf4GP\xe7\x08\x07\xdc\xf4\xa1xE$.q`\xe99\xa5\x18\x1fZ\x84\xad\xfa4{i\x9f\x8d_\xffd\x9dB\x18a\xb8w~\xae~\x0b(\x87z\x9d\x7f\xa7\xa2M\x8b\x1b,^\x95d\xc04\xf5\xb4\x0e\x83\xe3ht\xc54\xca\xea\x85&\xa58\xa5\xcb\xb3\'\xca\xdfUiR\xb6\x1a\xd0c\xabJ|\xa4\n\xa0\xa7\xab2\x92\xd8"\x86\x93\xbe\xf9_\xa5\x9e3\xa2\x1ei[ie\x9e\xa5tm\xa2\x02\x12,\xf5\xa0\x8f x\'\x8a\xe1-\x8d@Sj\xe3\xd6G\x00\x96\xdb\xca\xe2mP\xeex>\x15+p&\x94t\xbbf\x9cFpI\x8d\xf5\xd4w\x97\xd9yV\x16\x1epC\x87\xcd\'\xa9{$>o\xbd\xa3\xb1Z\x9a\x83=\xaer\xf3\xa3\x18\xf6_XM\r\xf8\xd1\x02\x82\xc6\x02\x95\xa3\xafw\t\xf9\x1c\x19J9\xb3\xc6\x8bC.\xf8DBm\x0bQMr\x18v\xaa\x12\xb4\x08w\xd8\xae]\xe3\xcc\xb0{\xcd~6P\xc3u\xba\xcalU\x05T\xb0\x95[v\x9e\xf063 u\xfc\x15\xc3\x93\x93\xef\x10\xfe\t\xbdz\xf1\xf7\xd6\xd8\x9d\x89\xac\r\xbb\xe37j\x18\x17\xc1Z0\x06\xec\x0fr\\\xf4\x85`\xf1i\xae\x9e\xa4\x86\xa40M$JI\x1c\xeb\xcbc\xcb\x05To\xfa\xf3.G\xc4r\xaf\'\x16\xc9E\xb5\xd8\x10\xb2;B\xe0\xed\x10\x12mE\xbdMJ\xe1\xbe(\x02\x8af <\x95P<\xefr]:\x80K\xae\xef\x18m\xc1A\xc9VL\xf5\xd1\x84\xab\x827\x0e\x1d\x9e\xd67I\xf1\x8d\xb0\xa8\x07\x7f+\xdf\x1bJ4\xbd\x16\x03\xaa|`\x82[\xfeA\x19\x943\xb7Es\x00Xx<\xfbO\x1agM8-"pgj1\xbfjS\xc2\xcd#Hk\x92\x85\xa4HC\x9f\x03\xdcEC\x87m$\x18\xd9\xd6\x15~\xc8\xe9\x01\xe2{\x83_\x1f\x84\xd5\x10}q\xe3\xf3\xc3lW\x1d\xa1\x98_\xaa8y\xbc=9f\xbaT\xadk\x97\xa3\xe4\xe2\r\x1a\xb0l%\xb1\x7f#\x1e\x98\xae2\xed\x98\x9cB\x8a\xc4\x87>\xb2\x90\xdb"\xe2\xc7R\xb8\x00i\xb6 \xd2(N\xae\xd0\xd4\xfe\x9c\xf6\\h\x85:\xc9}\x00\x03g\xc5\xa3\x00\x8dlf\x8e+\x16*\x91=/Iz]\x93\xc6\x85\x13[/\x9b\xf9]Tg\x99,\x08\x93B\xd4\xc3\xf8\x95A\xb7\x82eQ\xbf^r\x15F\xc8nq\xdc\xca8\xa4\xb1\xfd|\xbd\xd3\xe0\xc7\xd8\x8c/\xb1K\xcd\xde\x02O\xec\xf2\xa7!y:\xa1\xcb\x0f\xe8{\xcc\xc7\x9c\x87\x12\x1c\x15\xed\xa3\xbc\x83\xaa%\xfb\x1e\x03=<.\xcbga\x1b\xc2\x84[\x15R\x86\xe3\xad\xbb\xc9\x99\x83\xa7\xf9hBa\x87i\xd1\x92\x86\x8aM\xcc\xe4\xbb\xa5\x8f\x18~Q\xa6p`v\xdd308\xa9\x08\xbc\xe2#\\\x1e\xd5\xb6t\x95\xdb\x18\xa0\xa7\xf6\xaf\x18\xb4\x83\x95mb\xa6\xb2\xbfE\x80\xc4M\xc3-!\xd9T\x88)\xcf\x8d\xf90\xa6\xf6;F\x0b\x10w\xb9\xcc\xcb\x8b\x8b9~\x06\xc4\x93\x8d\xc6\x11\xf1\x19z\x99>\xe2Kn\xcc\xd5\x89\x12\xfd\x17u\x9e\x96Z\x03\xfc\xba\x80\xa4\xb5(\xe9\x85\xccH;4y\xa5\xa7\x1f\x8a\xacJV\x88\x810\x01\xc0]\x99\x02\xc4\x08\xbd\xe3N\x13\xb1uk@zn\xd9\x9d\xf59\x19j=\x8f\xb1\xf02\xb0\tQ\xb1\x930\xc1\xf3\x0f&]Q\xf7z\xd26\x1d\x83[f&_\xa1Y!\xaf\xd0\xcd\x0b\x14\xa4in\xf4\xfb\xc7\x13/\x06\x9aw\xcf\xc0f\x8bT \x84\xe8\xba\x7f\xd9z\x11\xf1\x15\xb4w\x80\x16\x1bP\xcc\xc7\x8f\x96\x95\x02?S\xa1\x9aq\xeb\x80\xc9\x1eI\xf5}\x0b\xf0\x0f\xa5s\x98i\xbfh\x1c\\\xd9`/\xa0L:\xbd!_%\x90\xc9\xad\xafB\xeaH\xff\\\xe0\xf5\xd7\xc7Y\xa9\x96\xd1\xdb\xb5\x9e\xe6\xf2\xd4zk\xe1\x96\xf3"\xb1\x0c\xb9\xb9&\x1ez\x8eyF\x90\x87]!\xbeV\xf7?V\x01\x19Z\x19\xafM\xb0\t\t\xae\x07\x84\xc9^*\x1fGY\x83<0MT\x83~\xb0\x9a6\xfb\xac\xab\x10P\xe3V\xa83Tr\xc6\xf2\xcb\xa0:U\xdb\x82\xecz\'\xfd\t\xfe\x1b);<\x9b[PA\rf\xf4s\x11\xf5\x11\xdd\x80H\x90C?\t\x84H\xd8Ju\xc0C\xcf\x98j\x87I\x05o\xdb\xe8\xb0\x89"\xe9#\xf8\xfe\x91\x80y\xba\x1b\xc9\x82\xd0\x01CCr\xd4\xa4?\xac4\x9b\xf6\x8d\xbc\x99\xf9c\xa3\xb5\x1dI[\xe7\xc5\x11%\xd9a\x8f\xbfA6\xb6[\xf0Z\xddR\x8e\xae<\xd7\x0f\x06C\xff\x8f\xcc3\x1ap\x1f&\xb46\xd9\'\x9d\x91\x99v[C\x9d\xe6\xb5\xf0\xa7\xbav\xa9\xb3\xfb\xa0`Z\xccH\x98|\xb7\x14\xf8>]\n\xb0qH\x11\xb6\xb8\x97\x8c\x162\xc8\xec\xe61\x9d\xcf/\x82\xcd O\xda\xbbG\x01\xb4\x07G\r)\xe7\xa1`V\xb3\xd8S\xe4k\xf2H}\xb5I\xf89\x85bGvt\x85\xa0>N\xd1\x9a\xc7\xb0\xf7\x89\xde\x93\x1f\x07\x0f\x9f\xc0\xd4\xef\xcb\x99\xc6r\xa6\xd6-W\x92C~\xee\x19\x9c+\xd3o)\xdd\xfb\xa8\x8f\xc4v\xdc\xcbw\xa8\x000\xdb\x9b\x08>\xae\x1c\xac\xc6\x84J\xff\xa7\xd7\xef\x89\x89\x85,,\x98\xeeg\xac\x05\xa0!\x88\xa3\xdd\x83\xe5\xe5\xe0t\x94\xd0\xa0\xdb\xff$\xdd\xed\x034\xff\nx\xd6\xf6n\xf3m\x93\x8bF\n\xc6\xc0\x12\xad\xd6\xc2\xac\xb6\xae\x88\x92\xfd\xa0\xba\xd7\xbcKcaY_\x8d;\xc2\xd1\xce\xd9\x86\x95FF\xcf\xbd{ Y\xde\xdcL\x14\x03\xb0 M\x01\x03R\x19\x03z\x11w\x89Om6\x1e\xc8\x9b2\xd3\x8c+@\xe1H\xd3\xdeYql\\\xc5\n%[\x85\xda\xb3\xa1\xcf6-\xcb\x81\xc3\x9d\xcf\xde\x8b\xc5\x19\xf4G`\xee&\xfc\xbbG\xda`m \xc7\x92\xf9%\x9e\xc8m\xb2\x1a\xa0\x87\xeb\xcaa\xf4X\xed:\x1b\xbf\x16\xa7\xcbB\x8633\xca\xd3\xd8S^\xc0\xaa\xe0\xe9\x90\xa4$\xff\xc8N~\xdcq\x8b\xee\r\xffo#\xcf\xa5\xb1\xb5=\xb4\xf7\xdc\x123\xe0\x7f\x92\xbcU\xcdC\xcd\xd4\x10z{\x89\x95\x80&\x85!\x9b\xc6\'}\xbd\x0cq\xb9[\xcf\xd9\r@N\xdc+\x83\xa5p\xc2\xa1\xc6Qi\x01\x03M@\xa7{8m\xc3[\xf7\x13\xe1\xac\x12e\xc5\xa3\x0b\xe6\xfb\xab\xc9;\x11\xf6B\xe7\t\xa8>\xcb /gRH$\x90\x9c7\r\xd0\x9271\x90l\xee\xf2u\x18\xb1j\xeb\x13\xcfX\xbbM\xd7o\xe43\x80\x88\x9a\xd5{\xa2r\x87"^N|\xf6\xc1\xcf\t\x11\xd9 (\xa3?L\x03,=\xde\\I\xbc.\xd8\xe7\x8b\xf9^\xe2\xcdC\t@\xfe]\xd8\xa7n>\x1aT\x070\xa7\xd9t$83z\x94\x0c\x02\x12\x12i6\x80\xc1\x0f\xed\xc2\x81\x00K\x0eb\x82\x8e\xcfQy\xcf\x84\xeb\xca\xbc\x9b\x85\xfaG\xe9\x8c\xc0zY\xb0\xe9*E\xde\xf9v\x82^/s\xd4\xa4\\\x9d\xef\xe6\xaf=\xd5\x86\xcc\xcdb\xe0\xb4\xd5\x89\xa29\xb3\xb6\xc5\xc0\xab\xc2mqU\x95\xabB\x85x?z\xaa\x98y6\xa8\xdebB\x9a\xea\x9fL\xd0\x97Dt\xc4\x1f\xedgK\\\xe6\x0c\x12\xb2\xa8\x08\xd2\xf2\xba\xa4\x05\xc2}\xb4Bk\xdb\xed3\xdc\x08,\x92^\xe5\x96\x9d\x85\xad\xa5\x1fr,Cx\xdcs\x82\xfaW\xa4\xb0\xffMn\x84\xf4\x08\x1cE\x04\xbc\xf6\x05\n\x0b;pA\xdfk9\xdc\x1a\x15\xc3\x0e\xbbn\xcb\x10\xa3d\xe8m&}yA\x1c\r\xec\x8cR\xe3z[\xd7.7\x80\xba\xadR=\xd6\x92\xe7\x0b\xf80\xfct\xa9\r\xe2pu\xaf)e\xeb\xca\x91}\x11\x9bA}d\xef\xbf9>F\xd7\x7fR"\xbds7\xb8]E\x8e\xcd~\x06\xbf\x93\xb67\xb6\xefTe\xc2\xc6w\xde;bC\x9eU\xfd~g\x94\x96\x13\x14\x9e\xef\xf1\x03db\x91\xb8\xa3~\xd1F\x1f\xe1\x8b\xe7\xa8N\xdc\xdb\x8c\x83\xb0U0\xa6=\x08\x92\x9a\x93I\x9b\x08%{8\x8e|\x8d\xe7\xbdR#\xe6\xb5\xe9\xad^\x81\x9b|\xcd\xa2\xea\xf01\xdbu\ri\xa0/\x88\x0e\xae\xaa\xbb\x96\x8b;\xaf"\t\xe8b\xf3\x05;q\xde\r\xf4r\xbb\xcd\xbe\x9b\r\x86\xd1@\x8d\x99\xf0\xc3\x9f\xac\xdf\xdb\x1ax\x02\x83\x0b\x00}\xb9\x89i\xc0\xfc/$#\xd7l\x0b\xd3\xeb,\xde\x08\xa8.\x8b\r\x94\x83\xc0H4\xad\x16#2\'UN\xf6\x0eM\xaeQ\x17>e;\xefs\x81+~j2\x13{\x84\x12\x15\x93\xd6Xa\xe2:\xac&\x99\x9d$\xfb?\xad\xb0;\x1f\x1e\xa3\xa9+\xf2\x13V;\x11p\xa6\xafrl\xd8\x89\\\x8b\x9f\xb5\xcfhO\xb3\xf5,\xdc(\xb3\xdf\x1bQ\xb5~3\xc4G\xf0/\xaa\x1e[\x9d\xd8?\x8c\x0bu\x03\xac\xd6\xffG\x1f*)\xe5\xee\x15R\xa4\x91\x8aqN\xf3\x90\x88\x02\x85\xf4{W\xd9\r\xe5~\xac\xfe\xdc\x08\x95\xd9\xb5\x0e\x97\x00\x15:;Y\x8eO\x11\xdd\xf2w\xe0\x9a\xfdO\xc3\x85\xc6\xb5Z\xfd\xcf\xf1#\xb2(\x14\x80\xf4\x82\x8e\x95\xad\rR\xff\xe0\xc2p\xe1\xdf\xf1\x88\xff>\xc4{\x9dP\x0bY\xb5\xd7\xe9\x88\xe5\xae\t+\xe71\x91\x88\x8f=\xf8x\xbdD\xcc^M\x92\xdb\xb8\xd2*C\x95\x1f6\x9d\xee!\x0ci\xdc~|Qs$U\xed\xaeO\xc5[\xef\x97\xea\xecvz\x03\xdb\x835\x0f\x8f\xd3\x1b\xc9\x98\xf1\x8b1D\xdd\x90\xb6\\\x13B\xf6\xa1;\xc6C\x93Zq\xf5\x83\x0cLd\xf3\x01\xe5\x94\xab\xe8\xdf(BF\xc3\xf0\xcf\xe3\xe5^\x9e\x82\x9d\xc9\xb7\xb6&\xfb<@f\x89\x15r\x170b\x18\xa5&~\x15\x1a\x96P\x1e\xb6\x8eZ\xc9\x03\x89\xfb\x89\xfc?F\xe0L\xb7\x8aF\x0e\x1e>c\x82*]5P\nj5}\xa3\x0c3zCo\xd24_\xcc\x07\xb2\x80\xbc\xf3\xf7&IV\x8a\x1cn4\x82Hm\x07\x8dxHe\r\xca \x17\x16\x14\xb8}nA\xe23\xd5\xd1\xffQ\xbb\xcc\xaf\xba\xb0D2\xb3\x18\x1ec\xdd\x07l\xdb\xd1\xdd\xf9&\xe9\x92\xd8\x1fRb\x11\xe1;\xf5\x96\xbb\x9a6\x02\x98%\x06n:\x8d<\xc9{\xb1\xff\x84\xfc\xfaF$?\x9azI<"\xf1[s\xe7\x1cd\xdd\xf9\xf6\xc3\xe7\x86\x05T\xec\x07\xc3E\x06\x85I\xfa\xb7\xdb\x847\x95WX\x82\xe5\xebs\xdcMG\xfe\xaaM\xc6 $i\x1c\x92\x1d\x1a\xfbSO\xb8\xa8\xa4i\xfdJpY\x1b8k\xe8\xa2\x86#\xcf\xd9\xa3~\x0b\xc6\xf9\xaa:li$\xdc\xa9^\xa5_>H6y*\xfeh\xad9p\x86/Ja\x80~K?\xd5\xbc\xf3\x94\xdb\xbc\x1eD\x8ct\xfc\xd7\x10\x8bZ\xb7\x82OK/\xecO\xc9%\xafG\xaa{\t\xfd/k\xb4\x1e\x18H\xb1\xc1\xe0\x8f1-\r\xca[\x18\x8e\xdcM\x84/g\xb9_Y\x02(\x0e\xc9\x945j\xf6\xb5W\xf3\n\x19\xe9R\x1f\xfb\x8f\xae\xbc\x7f!\xe0\xebO|\xf2iR\xe9o\xe8U^\xa3\x1c3\x89\x060\x17\xbei\xde\xf690E\x01\x94\xb2\x10\xd4b]u\x92\xb3>\xc1\x1d\x7f7\x96\r\xae"\x00\xcb\x8d=\xce\x80Z\x1b\xe77\xe9\x0b\x19\xc9\x92~\xbaV\xb1\xb2~\xf2\x04\xc7<\xecR\xae\rFeZn\xfc\x8b\xc8&\xca\xa2\xe2,\x8c\x87OK/\x03O\xf5\x02]\xee\xea\xb9\xbeA\x8a\xd2\xff\xb5\x87\xf3\x98j|@\xaf|\xf9\xd94\x9cb\xc6V\x9d\xa8g4(\x8b\x99\xd4\xda\xfe\xb2\xa4\x0f\xa9|fs\x94\xbb}\x1f\x00Y\xa3Tb\xedq\x9a,\xa9\xd5pL\xaf\x83].\xed\x94S\x91\xea^v\xec\x83\xa6,\x0ev\x94\r\xd0\x8d,\xf0\xd4\xb2\x94\xdc\x954\xb8\xcdd\xf0Y\xb76:\xc5\xbd^(\xa4\x03Lo\x18\xe1\xde\x05I"8\xc2X\xdfw=\x97o\xe5Y\x88\x1d\x0b\x88\xcd\x0f\x06\xe3\r8/)\xafr;\xb8V\x95\x0c\t\xeem\x82\xdbK\xad"\xad\xc6\xcf\x91\xa5\x005\x87\x1f\x97\xe6\x87O\xea}s]k(8\xfb\x9a\xc8\xd9\x87\x95u?\xd2h3u!\x84j]\xac{\'\x9a\xc9Q\x8b\xc8\x9f5\x1b\xd7\xbe\xe4_%|G\x13\xbb\x9b n\xb5\xdb\x91_x\xbe\x12I\x94!\xa6\xba\xaaS\x08\xfc*\xf3\x00X\nB\xb2j^\xae\x9a\xca[\x9d\xa8\x1de\x06\x16U\xf38}\xa7\x97>.s\x8a\xe2\xbb\xe6\xb3\x1bd\xb5\xd0j+\xbc<\xa0\xccp\xdcO\xcd6\xd6\x01\x0cK\x19\xa7=A\xc1\x86/\x07\x7f\x04\x1b=\x11+\x8e5\x14J\xb1\x04\x1c\xff\x8be\x1eG\x86_]~\xfet\xcf\xf6\xa9\x96\xb8\xc0\x1c\xf8\xe2\xbc\xab?9\xe3E\x08\xe4\xbb\x18\xd1Azh\x819\xb9Q\xbf\x86\x82\x88\xf20\xba\xc5b\xdb*\x7f\xf5A\t\xff\xaa\x9e\xecnG\xbf\xb8\xdc\x83\x8a\xdfN\x17\x92\x96\xf45\xac\xb7\xc8\xbb2\x8a\x0b\x1e"\xf5\x10\x9f\x0b_#\xee]\xb79\x1e\x99\x99&\x04U\xc45\xa0\x8cDZ#n\xad\xc7\x08u{\xd5t4\x035\xe7\xf6y\x15\xd0\x15\xfa\xad\x8a:\xd4I\xa3\xa60|\xf7\xf9\xfe\x7f\xa7\r\x13\x1d#\x82\x8b\x15V\xa9Tv\x95\x0f[N\x87\x92J\x89\x9dN\x80\xfb\x12+[7\x18E\x00\xd9~\\j,\xf9P\xd4\xc8F\x16\xe1\xb9\x82P\xe83\x8a\xda{\xd7"\xd2\x8aGF\xf8\x9fF\xc8K\xf9\xc7(.\x82\t]\x96(\x84\x9amp\xa8\xc6\xf4\x83WS~\x89\x8b\xef\xcfCf<\xf1\x0c\x03\x8fk\xa0\xe9\x89)\x9f\xe3&/4e\xe4M\x14}\xf2q\x91\x8f\xb4}Q\x8f\xe5 \xfc>\xd3\x9eKF\xe0*\xa9\x8f\x8dl\xf2\x1f~!\xdcRb\xe8\x82\x86\xffs\xec\xac\x92\xbb\xf3{$N\x1a\\\xf3\x16XkM\x12(\xd2\x1e\xaa\x90\xfa\xc4\'^)\xd2\xb8\xb8\xb3\xdcS\x162v\xde 0>q\x94\xb2\xbe?\x02\xcf\xb1\x02s\xbc\x9bgH\xcf\x040P\x90\x0bP\xed\xe0\xeb\xdea!\xd6\xb1\xd8\x10\xed0 \x04\x1f\xc6\xad\xae0_\xf6)\x88\xbb\xf5,\x90\x1f2\xb9\xa8O8g\x1a-\xa92\x14=\xaf\xeb\x01\xce\xf4L\xbfr\xf5^);\x91\xe97av\x1e\xf7\xc9N\\{!d\x9e3u\xffU\xc8\xb3Lp\xd4\xc7E\xb0\x85\x8e\xdf\x1f\xca\x12\x01\x9c\xab\xb5\x13\x06\xe1\xe6\x97\xe1Y\x19;\xbdZ3\xa1\xce\x1b\xee\x8a\xba\x1f\x9d&\x18\x04\xfd\xdf\xce\xd1\xbdJk\xdd_\x07{>j\xfaZ\x11\xbf`\x8a\xa4\x99\xcf"\xa0\xb1\x9a\xdd\r\xae\xce7\xfcdl:!\xdf\x80\x16Z\xa1Q3bRtN\xc8\xec\xe6\x14\xa7\xf8\x90O\xdc\xc3\xdaTH\x90\xf4\xba\xee2\xae-\x99\xbb\xa1\xc11\x1e\x1b\xb4W\x8d\xcc\x93\xe4\xe9\x00N\xe5\xd5#\x1eg?\x97\x08\x1e\xff\xd6|\xb1\x7fj\x12\xd9\xbc\x8b\xa6\xeb\x12\x1fw\x14\xfd\xcb\x8b\xff\xad\xb5\xbb@&\xfe\x94\x89\x9b\xf7<\x9a\xe8\x92a5Ixb\t\x8e\xd1{\xa0J\x98/\xea\x96\x19\x834G\xfd\x1e/\tJe\xef_\x1e\x8beYmYc\x0e\x8a\xf7\xa1\x1f\xf2\xab\xbb\xec\xb23j\xf5$\xb3\xcc\x9e~\x9c\x07l4\xcc\xe1r\x95\xf9I\x01\xfb\xd9hT\xe7\n\xe7\x8e\'|7\x1di2:\xa6\xdeN\x98IFc\xc9J0\xb9\xf8\xdcptA\xde\xec\xf8\xb2\x16\x08\xa0R\xf6E\xb9R\xbe\xa1\xee\xc9\xaf\xfd3\x0c\xcc\xb8\x06\xd7\xc4\xe8p\x01\x1a>\xcb\xa2YZ{/5\xbd#m|y_\xd4\xb8!\xd6\xa1\xfb9\x97\x07VX\xe7-8E\xf6\xf3\xb4\xc1\x9ek\x12*\x8cy\x12\xbb\x04\xff\x9b`Z3|3\x1a\x01\x0b\xab\x18\xa8\xf2#\xf4Z\xd8\xbe\x86\x16TA\x9b\x7f`\xfb\xbc\x9d\xc7uK\x9f\x11\xd5\xcf\xb5yd\xb8~\'\x04\xae\x81\xf4\x92\x1c\x84\x0e\xe9\x81\xe0lZ)?\x03\xb5\xc0\x03u9\xcf\xdd5\xd1.\t-t=\x1b\x10\x1cd\t\x9a\\\n\x0e\xaf\xb15\x10\x8a\xcd\x9aS\x15\x94gdg\x03]\xc6\xe4E?\xe9|\xc4;\xd9\xdb^\xeeCuK\xc0t\x95\xc0\xddp\x0c\xf4\x85\x02\x8dj\xcd\xf9d\xa6[\x1d\xeb\x02\xcbP\n\xc1\x80)\x95}\x960@C\x08\xd9\xf9\x8d\xa4\xdb\xce\xdd"\xe3\xda$\xb9\x8dF\xac!\xcc\xd0\xda|\xdf\xa5\xe2\xbe\x01\x9fEN\xcb\xea\xfb\x8bL\x7f}r\xb7\x02g\xe5\xef\x05\x94G\x0c\x06\xc8!i\xfe \x07\x87\t\x1b\xac\xea\xf3?\x97w\xa2\xdd\xdb\xf1\xfb\xc8\x19\xf3\xb6\x9b\x03\x93x-\xd65\x14\xa7\xd7\x8e\xc4\xaf\xc0-\x84\xcc\xc2\x06\x8d\x92\xb5\x13\x81\x0e"\xcb\x82\x01\xa1\xda\x03\x03X\xf9\xa3\xa2\x7f\xb71\xa9w\x0f\xa3j\x0b\x18\xde&\xd4\x19sV\x9byI\x11\x0f\xfc\x18\xb3G\xea*\x9e\xf8-\x9de@{1\xa4\xcdW\xca\x86\x89\x07\xd8l\x08X\xea\\!\xba\x0b\xa7\xc4\x8b\x12\xe0a\x9a]\xe4\xe51P\xb0\xab\x89\x0f\xdfW\xe4\xbe\xe5\xed:\xc3AwJg=\xe2\x94h\xcf]\xc9\xb9\x0b\xc9GdH,x\x97\xd0\xd7\xcb\x99\x94\xa5\xb5\x05\xf2\xac\xe3\xc5I0\x99Dy\x1e\xcfqsZO\x0b\xc9\x11\xa6\x7f"uS\xb1L\xbb{\x1fI(N\xf2|\x965\x03\x7f\xad\xa4<G\xf0\xee6v\x83plh?i1\x8etJd\xa1\x8a\x83\x05\xd5\xe1\xd4K\xde{\xd4_\xdb\x91\xd9\xb4z\xd4\xdfo\xa8\x04V\xe9\x11\x9d\x03,%T\xd3PyVt\x8a\xe8\xa8]\xa8g\x9e\xf8\xdb\xcfk\xa8\xee\xf4n\xd6\x9a\xb3e\x7f\x1e\x86\xf0\xf8\xfc\xc3\x0e\x89aD\xa8\xf9\xc0\xf3J\xcf\xa1-\xe2"a\xb5\x1c;=o\xf2Q&T\x8a\xbf\x96\xd6\xc1w\x80\xd7{\xcb"O\t\x19\xf9,M\xd79S\x00\xa3\x90\x08-\x19m\xb5\xbc\x10)\x97\xda\x1c\xea\xf3\t\x16\xd8\xd7\xaecs\xd4\xc4\xe4%\xd0VAZn\xdd"\xadP\xb4\xc1\x167\xad\xc0\x8blR\x1e\xc4\xcc\x10\xd4v\xa5B\x99M\xe1\x16;\xa7\xc5\'a\x81\x17\'(\xc5\x86\xe3\xa16\xf8\xab\x81y\ta\xd1O|\xd1W)\xfa\x14\xc9\xa5\x0e\x1cXd\x88\xd5\xdd\x1c\'\xe9\xe5\x87Se"\x9b\x8f\x8e\xbe\x9cM\x9b\xfd\xb0\xdfIH\x1a\x7f\x99\xa5\xc8r\xac\x14\x1b>\x97\x85\xca\xce\x1e?\x06\xa3\x85\x8eZ\xc7}\xd9\x05\xa4\x0e\xefR6Ro\x8e\x96\xf9\xb9\x85\x01\x9b\x07w\xf1\x89\xf6pA\xc0\xb9m\xd6W\xe0R\x89\xa5\x9eq\xf0\xb2*\x1d\xe6\x16\xe5\x03^g\xf8\xd0\x9d<L\xe7\xcf\x9f\x1b\x8d$\xcf\xf6\xbb\x964x\xea\x07\xb0\xbdW\x93Kz\xa2\xef.\x82\x84P\xff\xb4pA\x83b\xe5\xcc\xb4b.\x85\xa17\x8f\xdf\xc7b;[\xfcGd\x824t:)\xc2\xe86\xa6s\x9b\xf5O\xeb\x80"\x81P1\x00\xeeq\n')
1
+ from flask_sqlalchemy import SQLAlchemy
2
+ from sqlalchemy import func, column
3
+
4
+ import datetime
5
+ from flask import Flask
6
+ from datetime import timedelta, date
7
+ from hiddifypanel.panel.database import db
8
+ from sqlalchemy_serializer import SerializerMixin
9
+
10
+ class DailyUsage(db.Model, SerializerMixin):
11
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
12
+ date = db.Column(db.Date, default=datetime.date.today())
13
+ usage = db.Column(db.BigInteger, default=0, nullable=False)
14
+ online = db.Column(db.Integer, default=0, nullable=False)
15
+
16
+ from sqlalchemy import column
17
+
18
+ def get_daily_usage_stats():
19
+ from .user import User
20
+ # Today's usage and online count
21
+ today=date.today()
22
+ today_stats = db.session.query(
23
+ func.coalesce(func.sum(DailyUsage.usage), 0),
24
+ func.coalesce(func.sum(DailyUsage.online), 0)
25
+ ).filter(DailyUsage.date == today).first()
26
+ users_online_today = User.query.filter(User.last_online >= today).count()
27
+
28
+
29
+ # Yesterday's usage and online count
30
+ yesterday = date.today() - timedelta(days=1)
31
+ yesterday_stats = db.session.query(
32
+ func.coalesce(func.sum(DailyUsage.usage), 0),
33
+ func.coalesce(func.sum(DailyUsage.online), 0)
34
+ ).filter(DailyUsage.date == yesterday).first()
35
+ users_online_yesterday = User.query.filter(User.last_online >= yesterday, User.last_online < today).count()
36
+ # Last 30 days' usage and online count
37
+ last_30_days_start = date.today() - timedelta(days=30)
38
+ last_30_days_stats = db.session.query(
39
+ func.coalesce(func.sum(DailyUsage.usage), 0),
40
+ func.coalesce(func.sum(DailyUsage.online), 0)
41
+ ).filter(DailyUsage.date >= last_30_days_start).first()
42
+ users_online_last_month = User.query.filter(User.last_online >= last_30_days_start).count()
43
+
44
+ # Total usage and online count
45
+ total_stats = db.session.query(
46
+ func.coalesce(func.sum(DailyUsage.usage), 0),
47
+ func.coalesce(func.sum(DailyUsage.online), 0)
48
+ ).first()
49
+ ten_years_ago = today - timedelta(days=365*10)
50
+ users_online_last_10_years = User.query.filter(User.last_online >= ten_years_ago).count()
51
+
52
+ # Return the usage stats as a dictionary
53
+ return {
54
+ "today": {"usage": today_stats[0], "online": users_online_today},
55
+ "yesterday": {"usage": yesterday_stats[0], "online": users_online_yesterday},
56
+ "last_30_days": {"usage": last_30_days_stats[0], "online": users_online_last_month},
57
+ "total": {"usage": total_stats[0], "online": users_online_last_10_years}
58
+ }
4
59
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
60
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,173 @@
1
- # 2023-04-08T16:23:30.481330
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0b\x00\xa7\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xfa0\x00\x00\x12\t\x04\x00\xd6\x95\x1c\x9f\x8e\xd5\x8f\x84z\x8fXZ\xe7]\t`\x00\x00\x00\x00\x00\x00\x00\x00<\xf9\xa7\x15E\xc8\xc3\xc7\n!\x93\xd1\x95\xc6[\xa7F\xf8v\xb0L~N\xdd\x9a\x19\xb2su\xf1\xc8\x9eBh\xe2\xcc\xfaU\xa5\xc2\xf1\x01\x87\x93e\xff\xe1\xde/\xdc\xd3~V\xf0\xd6j\xb6\xd7="\xf7X\xa8k\x9e\xdf\xc5+\x11?\xe3)4\x82\x82$\xda\x99\xba\xb1c\xce\xc3H\x83\xa3c\xe5\\b\xfa8&Ym\xc9\x9a\n\x00\xa8\x05\xf4\x0fj\xccQ0\xb9\x94\xc3\xcd\n\x15zF\x9e\x13/;\xb4D"\x1ci\x10\xcb\xe10\xdbU\x96\t_y\x0e\xff\xd8\xa45\xca\x1aQ\x85g\xd1\x89O\xb9\xea\x95\x82P\xc2\xfaD\x11\xd6+\x82\xf2\xfd\x90Q\xabU\\\xdc\xdb\x9d\xe6\x1f\x1d\xf6\x83\x854\x06\x0e\x07\xad\xcd\xa5w+\x8e\xc5\r\xb5\x89\xf8\x8a\xfa\xb9\r\xde_ \xb3\xa9\xca\xdbi{\x95SC8\x90\x85\x1bP3\xdb\xa2Mie\xd1\xce\x85\xbd\xdb:\xc1\xb7q\xe3\xaf\xb7e\xb1_1\xde\\Uk\x84\xd6\xfd\xed\xed\x93\x98\x05\xf3\x04p\xe6Q#\xa6\xb4\x92\xeb\xfb\xa6[9\t\xc0d\xe9:\xa3\x87[\x84Z\x8aA\xbf\'\x17\x13n.\xca\xae\x83\xc9V\x8b&09\x8dJ\x8c6\xae\xa6\x8b\xb9\xbf\x9c\x85\xe3\n\xb6\x97\x1dYBl\xea}\xb0\xdd\x85\xc7\x90\xab~M\xfd?\x03\x12\\\x8fR&\x9e\xb9\xd92\xa9\x17z\xad\x19\xfbB\x03\x10\x15|\x03\xf4!\x9a\xc0U|\xc5\n\x86\x867\xeda\x8a\xc7\xaf__E\xf7\x16\x9el\x9dz\xbe\x08\xac\x19P\xcdV\x8a\'\x85!\xa4\x13n\xe6\xad\xffu>\xb4P\xce\xb0\x0ex&\xd7\xccl\xf1\x00\xf3{y\xd4\xd8\xff\xd4)\x04\xa4\x01t}\x98\xa1\x8c\xc8\xabC^^[\xbc\x8f\xf3\xad\t\x17E\xc2\x93/6\xb3\x1d\xf3\xe2\xce\xf6\x92RS"\xb4\x00\xa37x^l+P\xb6)y\xa8\x90\xbd\xc6=-~\xb5\x06\x8f\xc4$\xbd;\x04\xd1<\x17\x9fe/!@l\xde\x16\xe6\xc8K+\xce\xd2\xb5h\xa8\x04T\xe6+V\xde$EAD\x87u\x0bJ<\x81\x8afp\x02\x13\xd7\xb9\\\x1f\x0f\x90\x15q!\xecgV\xb7\x8aB\xbe\xbe\xa0\x93\x82b\xe7\xc0\xc6\xcfL\x7f.u1#\xfa\x8d\xc5\xd5\x06\xc1^r\x05\x9e\x02\x9e\x8a\xdc\xaa\xed~nm|\x81\xf0s\xdd\x80E\xd1U\xd7\xcb}\x86\x93\xdf/)\x04{E\xd1\x0bU\xc0=\xd5\xa5\x96"A\xc0\xf9\x8e5\xfb\xbe\xc3o\x01bx/\xa0\x171pq\x16\x0f\x90U^st|X\xb4\xfcS\xff\xfeS\x8f\xf5\x1e&\x94\xd5l\xb8@8\x0b)\xa5\xbe\x92\x04W)\x96\xf7\x85R\x80K\x9f|\xbfm?\xab\x81.\xc4\x84\xbe\xe0\xb8\x84\xe9~\xf984\x9ey{\xf6\xf8e[\xa2/\xae\x0b\xe4$\x1e\xd3\x1e\xa7\x90f\xa6\x80\x8c"\x18a\xe8\xdb\x94\x7f\xb4N\xf2\x1dt\x8e\x9d,\x8f\xc2\xe2\x0cz\n\xd8\xf5znb\xce\x04*\xd3\xce\xff\xf1\x15\x7fo\xaaX&e\x1e\x97\x92\x9e\x9b\\\xa5\xa43\xa8x\xabDpZ/\xd5CU\xa5\xb7i\x02{u\x1e\xe4\xbbrk\x1c\xb5\x16\x90\xad\x8f\xe5\xcfo\x9c0\x03x\x9e(w\x82\x91\nR,\xbc\xde\xa0\t\x08\x11\xe0\xb4\xdfWy\xcd-\x16w&\xe08j\xa1\xb9U\x00\xb4L\x99\xd7\xcf\x01$\x9fZ~ak\xbdE\x0c0qg@\x06u\xd6`{\xadM\xdb\xb7\xb8$\xa5\x1db5\x02<\xd2\x8b\x08\x15\xb40w\x95U\xaf.s\t\x05\xe0\x1d\xbb\xeb\xb0\xdcz\xbb,\xe2j\xa5\xcc\xf5\'\xca\x16g\x0b\xeaU\x8byO\xc4\xb7el\x95\x81a$\xe3\x81\x9b0\xe8\xb2t\xd95Ln\xf7<\xe6\x12\xdd\xbc\x13\xd9\x83\x9co\xf1$\xf7\xf7\xdf\x13\tsB\x99P+\x1dr\xca\x1a\xb2\xea/\x9eFy\xee_\xf4\xf9\xae\xa0\x82\x97\x19\xf8\x0c\x7fCA`\xecbmc\xc2\xd3\xfft\x96(E\xf7\ny\\\xf0|\xae\x8c\xb2\xb7\xd0\x83\x948Zg\x88\xdf`\x9dS\xefV\x884\x8f\x86\x89M\x86t\xa3\x98\x02\xa5z}\x0b\x88\xde\xcd\x16.\xd2$;\xcb\x1e\xb3W\xd5 \xa9\xcf\x14,2T\xb8\x19f\xebB\x0b\x01\x85\xcd\xd5m1|\xe1u(\r\xf9Q`\xba\r\x95\x15\xd0\xbf\x96\x94\xb0\xfa\x16\xe0Ux\x90]\xea\x88\xd3G\x1288gBo}\xfa\xec\x13\x89o\xba\xbbF\x98\xc8,x\x06\x81\xc3Z^]\x0ff\xb3\xca\x00\x83w\x96\x06\xa7\x047}?\x05\x8d\xe9b3\x9c\x89i\xf5\x05\xd76\x97m\xeb\xee\x95}\xb4\xc5\xca\xa4\xaaL\xe4\x97rBO\x9aPx\x92\xb7ds\xb6(\x10\x93\x85\x84\xf2e\xc3\x03\x13\xe0\xb6\x12B\x12\x19\x81\x8fp\x96\xb2C\xa3\xde?\x08n\x9e\x00\xb5#x\x89\xf2\x1f\x17\xcb\xd6\x10]h<\xc9V\xea\x01>\x81\xce%P8\xcd^P\xd3\x06\xd7PLC\x8c\xa6\xb8<\x95\xd8\x01\x8bI\xe5\x11\x8a\x0c\xf9\x19\x88A\xbf\xc7IK\x1c%n\x91\xd1\xcc\xf2\xdf\x18\x8e=\xa9\xf8\xe3T\xfc\x08\x88\xe4\xa1\xd5\xee\n\xad\xb0\xc5\x8a\x13/#c\xbbY8\x85\x1db\rI\xbb\xba@\xc5m{\xfd\xd5<\xfb\xa3\x8e\xd4\xd3\xc0\\\xdd\x13`\x83\xb9\xff63\x90}\xe1>\x8e\xa8\xae!|\x88\xf3\x81\x07\xa0\n\xf9\x95\x0b\xf6\x06\x8f\xde\xb5\xe4\x7f\xf7\x9cu\xdb\x15\xb4\xb0\xfbo\x10\xb1\xb0SfyWs\xddL\x9f_4\xdbV\xab\xdb\x1b!HkM\xf5@\xe4\xba%\xbd\xc8C\xf2)6\xa4UM\xe7\x86\xdd\xbd\xbf\xeb^\x92!\xa5\xfdm\x0e\xd2\x16\xad\xc2\x1b\xa4\x9eb\xf0\xa7(cot\x81\x03\x13\xc1\xd0\xe7C\xea\xe8%f2?\x0c\x8d\xe2\x8d\xf3\x9b\x97O\xe0<\xa0\xff\xcf\xb1Xq9\xbf\x81EJo\'U8\x05\xc1\xba8\xa8s\x9b\xae_\x04;!\'\xc6\xab*t\xba\x08\xffyb\x0f\xf52\xb3t\xd0\xde\xf7,\n\x13\x14\x1f\xca\x89S\xa0\x80\x03\xc4c\xcd\xfc\r6\x7f\x07\xc1$\xf8\xd6\x1c\xa6\x1e\xd2\xc1\x7f\xd9\xd6\xc7@T\xa0\xc9\x1b\xf6\x1a\xf2J\xf9\xdf,\xe7\x14\xf1\x8er\xd4\xc3\xbe\xf0\xe4\xebg<\xf9\x13*n\xe1L\x933\xff\x88\x92\xb8*\xef\xf7\xef\xec\x87\xae*$ \xe8-\x01\xf2\xe2)\x1c\xc6\x96\xee\xc7\xf6?\xe2\x9aS\xcb\x90*~\x1e0Y\x9b\x8cn\x91\x8at\xc7\x89\xb9\x14\xc7w`\x11z\xfep\x10\xf8\xb3\x7fGb\x8d\xc9R\xe8A\x94}\xbes\n~Yh\x0e\x93\xefr\xbf\x02\xb1\x17:"Q\xa1L\xce\xe9\x13q\n\t&V\xcd\xfa\xf5\x06\xbfF\xa4>7\x15C/i\xed\x8dU\x94\xb0\xf2\xda\xa14e\'\xc0\x1c\xbb\x87\xcb\xe7\x99\xd0\xdaST7\xba\x1d\x16j\xfe\xe3\x02\x92\xdf\\N\x8e\x10\xc6\xfen\xf9\x05\xd4\x9e0\xa4dvc\x0fC\xd9\t\x14\x18+\xfdtKm\xcf\x15\xbd7We\xe2\xb5\x86<\xd5\xf5YC\xde\xfe\x1bi\x9c\xf9\t)\xa5,#*;\xbf<\xaa\xcf\xce\xdai\x06Pu\xe7e\x9d0\x1a\xd8\xae\xcf\xc5\x06@\xbco\xea\xc8:E\xd5\x14\x03\xa2\xc7\xc3\xfb\x9f\xf6y\xd0i\xb0\xdeRj\x15.\xfc\xe3\xd5z\x06w{\x01\xb32A\xc5\x9d^+s\xe3*\xe1\'\x876uLB\xf0N\xef{v\xd7\xf6D8\x13\xbb\xade\xac\x10\xb2\x82\x99YH\xf8\xf8*Ynt\x0f3q\xcc7\xadK\xe03-\x8e\x81\x10\xae\\\x85P\xf0/\xe3\xbae\x91\x89b\xd6\x1c\xe14\xa1<]\xf1h\x9f\xc5V\n\x16\t \x06\xc7\xec\xc2\x85\xf1\xa0\xf8X\x9b\xc4\x8f\x81V\x82Np\x04\xa1\xe6\xe3V\xd9\x1c\x04~\x98r\x94\x95\xbc\xa1\x8e\x80$\xf5\xa9O+\xb0\x02\xf2\x93\xc9\xa0\xf1\xad\xba+d7j\x9d\x83\xe7\xaaX\x8e}\t#\xf7~\x1e\x06\x82K\x18Bp3\xbc\xf3\x98\x91Q\xcf\x14\xacj8\xe8\xc8\x8dz\x1f\x97\xcbb/\xf8\xb2\xaa\xac\xa6EyR[\x17\x0c,\x1c\xe6\x0b\xc0>D\x0bX\xdc\xbd\xaeS\x91\x80\x16A*!_g!j\x13C\x88`\x04z\xd3\xac\xc4\x0b\x8e\xe2\xbe$\x0b\xe3\xe3\xaa\xba\r\xd4\xe5!\x96\x08\x9a=a\xd1\xcbt\xec\xd8H\xf9\x8eC\xe2i\x84\xef\xbf\xe5\xe5*t\xe1\x91]0\xbe\xc8\x92\x9e\xff\x1f,\t\x18\x81a\x17:\x0e+)AO\xef\xdci\xae\xfeq\x9b\x89\x99\xdb\xfb\x9a\xc3\x8d\xe4\x14\x12\n5\x05\x98\xd9\xa6\x9c\xec\xb3\xb3 G\xa63\xed\xc8\xc4\xa90\xc5\xed\xd7Z(\xe8\x1e\xc9\xcb8\x07\xd8\x06\xe5\xb4)<T\x1a\x17\xcb9\xeeK\x08cg\xbf|\xbd\x05^:Q\xf5\xed<\xc9\x02^{\xb0\x8f\x10\xa6\xc4k0O\xa6\x86\xff\xa4\\\t\'\xf3x\xa5\xf8\xf49q\xd3\x13\xb2\x8d\x03\xba_\x1f\xc1\x14\xe3(\x96\xd6\x8c\x87\x15|q\x88\xaeYc\x1d\xd1\xd4M\x18\x11\x10\x1f\xed-\xc0\xd4y#\xf7+\x9fm\xc1\xc6]E:\xb9\xf9\xbcK\xc7R\x8dx\xa2\xa0\xb8\xcd\x1e\xe4`.z\x0b\x06\xba\xd3\xf4\x07\x89\x1708\xe0ed\xc9\x9a2<C\xfd\x04\xc6\xe2:\x08V\xb7\x0c\x9f\x83[\x98,u \x99Pr$$\xcf\x82\xb7\xd7\xb6S\xab\xc5l\x1bs\xdcMrx\xf9\n\x97\x84C\n\x06\x14\x8dS4aDi\x91h\t\x1c\xe5\xfe\x03&>\x00\x91D,\x91\xb8}\xf83G\xfd\x07|\xbc\xbc\xfc\xdb.l\x8eq\xeb\xe9O\x98\x0fF(=\x0b;\xb2\xcbu\xa4\xf9\x01H\xb4\x94\xff\x8cA\xe4=n\x1fBM\x8d\x00\xd3\x97\xbe\xa9\xb1\xe1*P\xa0\x10:\xa9b\xda\xf7*\xf6D\xa6\t\x9e\xeb\xfb\x02+W\x1c\x97\x16-\x02R\x83\x8c>}\x95\xc1\xc3\x13\xfc \xb0"\xcc/\xd1s(\xbb7\xbaiG\xf0\xa1\xb8\xc3\xc7Y7\x86=\xc0rg\xd2\x1d\xac!.Lq\xe5D\xd9>\xe1Jo\xd5\x9a\xd1\\\x98\xd2\xcd\xe1\x05se\xb5\xc1\x84XaD\x14\x8b\x91\xea\x18\xcd{\xd9\x81\xc7\xb7P\x85V\x17W0c\x02\xd4<\xe7\x19\x02FBqw\x84\xa3>\xd1!\x97u\x08|v\xe7f\x03A\xe2\x8c\x89-=]\xad\xb7\x8d\xdbQ\xdf\x02`\xa2}\xf6\xb2\x17\xe92\xa8\x96\xf8\x87\xdf\xa3\x04\x05\x04.M\xaf\xcde\x16y\xfdp\xf91\xb0\xa5\x19\xea\x85\x85\xc0f\xe5\xf93\x99h\xc8\\\x9f\x9e\xbe}K\xbc}\xb8\xf9\x0bE\x96\xd5rcp\x90\xc9y\x0c&Y\xde\xba\\\x8e\x04\xc5\xd3]*\x98dG\xe4s\xed\xe2F\xdd\x87x\xa9\xf9\xb6J\xa1\xc9\x18\x02\xaak-\xb1W\xfc<0\xcb\x1dO\xc8c\xcd\x1b\xa2|H\x03\x835G\\\xdaj\xfad\x10jF\xa8\xbei\xf6U\xf9\x84\xc5\x81\x17\x145\xc8\x9d\x1c\xfd{\xfe\xca\x1dF\xbaf\xf3\x13%n\xf9.\xe0F\x1aOF\xb3S^\xefu`\xed\x17\x96c\xf1\xe0\x98\xcc]B(,\xb4\xc9\xb48\xd6\x9d\xea\xeb~\xa7\x93\xd3F~*\x97\xb2\xe1\x96S\x13^t\xc6@"\xc4b\xe4\xe6\x1e\x178F\xf8\x1c|\x10f\x119\xe3\x15>\x118\xac\xa0\xbc\xa0\xf6Z\xc3\xa0\x97\xb3X\xb2]\x1b2\x98\xf7\xd0\x17\xea\x8d\xe0 \xae\x8f\xd8\x04U\t\x96X\x01\xa4\xa8\xd4u\xa3!TMv\r+\xa9>tv]H\xb4E\xaf|\xd7\xf1\x1b\xe8\xa0\x9d\xdd\xaa\xf8\xd8\x9c\xf0\xc9\x8a\xeb \xa43\xe0]\x13p\x96\xde\xc2\x0c@tL\xc6o\xf3\xca\x1c\x9c\xf4\x89I\x98\xefI\xfb\xa3\xc7ZK\x16i\x1d\xbb\x1e\x14|\x19a\xec\xe4C+_\xed\x0fQ\xed\xc1\x97\xb2\x16h~46h\x08\x93\xb0e&\xd9\x9a\x8c/\x96\x17\x88+\xfc\xaf\x0c\x018\x07\x19y\xe9\xe0\x8bj?\xddI\xd0\x17\xb1B9E\xe3\xb9\n\x95b\xcf\x8a\xefS\x19\x9b\xfa\xc9\xe7\xd1s\xeb\xaf\xb1Ew\xad\xb4\x8d\xad\\\xf8r\xd3\xe7\xdb\x07\x00nD\xd4\x9f\x07\x8a#D\x0c\x89`\xda\x17\xb35h\xe1\xa1\xd3\x85D\x1b\xee\x1a\xbd\xc00\t\x86`\xfd\x90<\x1e\x8fI\xfd\x14~\xd4\xb8\xff75\xec\xbb#\x83\xd3\xe5\xfbE\xcb\xa6\xa7\x9a\xbc\x03\x7f]\xd8\xd0HA\xe8\x99\xba\xb6\x8a\xcd\xd6\x7f\xc65\x9av\x9aZ2\xf2\x9d\x14]\x86\xf8\x89\xf7\x86\xaak\xd9\xbcF\xcc\xe4\x0ci\x8dp\xf8\x82\xb4\x0e\xc5\xb2\xfe,\xaf"\x0c^r\x05\xef5\xc3\x82\xad-\x96\xe1\x03 \xce\xc5\xd8\x81\x93\t\xf3\x9a\xbe\xe3} \x07\x8ej\x86\xa2\xd8R\xa59\xd1o\xc2\xa2\xac\xf7\x8b\xf8\xe5J\x86#Q\xa3\x12\xc3UC$F_\x1b\xe9\x96\xae\x06<\xb2\xb9\x9e&\xd9\xe4\x92\xda;\x9c3\xdf\xaf\x9b\xa4\x1f\xf2bs\x8d\xc9*\xa2C\x96\xc0\xd4R.5uT\r\x05/\x05\x19\xcfmhGZW(i\'\x12\x1d\x9f\xceF\x9a\xee\xd5\x90M\xf9\xd0+\xd1/p\xd9\x82?@,{>\xb4uU!;\x94\x923@\x80d\x92\x9fL.\xec\x05\x13x\xc4\xb5\xc9`\xf1\x87lbs\x97j\t\x87Y\x9b\xcc\x05Z[\xe5\xde2\xb7j\xe8\xcb+\x9c\xf6!\xc0\x11)\x1aq\xdc\\\xdbw/\x80p\xa4@\xb6\x89_b\xb7\x876H\xec\xf4\xd5:\xc9\x93c\xd5pd\xc8%\xe0\x13\t=\xd6\x8f;G\xccm\xdeY\x8c7\xd1\x8d9\xc5f\x85\nE\xb2\xe7g\xc0\xb1\xcb\xf4~L\xb4\x03\x9aG\xbdP\xef\xea\xd6Hc\xef\xb4Ii\xfcKl\xe8\xa5\x8bV\xfd\xb6(\xf6\x04T\xb4xL\xa3\x9c\xeb05\xbb\xf7L\xa6T\x0bt\xba\x9e\x10e\xf3\xad\r\xdc\xb8j0\\"\x02!\xf0~\xbb\xe7\xbc\x1aF\xdc\xc8\'G\xa9N\x15n\xfe\xe2Sti\xc1\xd1\xb3\xb6E\xf5\x81\xcbU\xda\xbc\xc0^\xee\xb1Q?\xeb\xcdh\xe1\xdd\xf5\xfcG\xcd\xff\x17\xcd\x94\x17H\xf6\n>e\xfe\xc1w@G@C\xaf=E+\xa7\xeb\x0bRjlw\xd2\x87\x89~\xe8\xbfXq\x8d\xef\xc4\x1b1\xf3\xf0\x9dZe\xc2a\x84\x85\xf0\x07\x16\x10\x95\xc6\xb6rd\x00\xcem\xf2\xd64 \x1er]u\xba\x03\x11\xcb\xbcO4l\xabrX-\xf7N\x1c\x16\t\x1b\xc3\xd8L\x9b2+\x86\x01\xd70/`\xdfP%\x82\x97<\x9d\xa1\x0e\x9c\x854\xdc\xa0\xb5Ez\xdd)u\xcb\x9c\x0e\xd1\xa2\xf0?\x08z\xbfO\xe1\x1cd}\xe8\x03B;\x83\xfeG\xfe\x9e\x92\xaa:\xa1Vr=\x88\x07\x1c\x87]\xb3X\xc86\x16\x1bY\xb7d\xd9\x82J\xfeo\xc5\xe8\xbce\xc1\xd8a\xe7kLW\tqZ\xb8\xccc\x92P`B\xc8\x02\x88\x86\xb7\xe4\xfd\x86\xf3P\xa6\xa2\xaaL~\x8d\xbb\xe4\xae\xd2#\xdf\x91\xd7J\t\xa8\x1db\xaca\x0cZtXh\xe6\xc1 {\xfc\xdeW)\xf9\xc2\xd2\xa1(:\xed\xdc\xa6\x16\x06\xc2+\xe9\x01\xc9\xd5\x95\xdf\xbaX\xcdPz%o\x0c\xee\x01B\xb2a7iFY\xb9\x9b\x9d\x0cT\xce\xaf\xe2\x8eK\x19L\xdd\xfc\xcb\xfa]t_\xe4\xf2p\x17\xefQvE\xb7\x1eb\xafD\xec\xc2\x1c\x0cz\xb7\xc8\x05\x84\xab\x88\xb3\x86\xf2\x07NH\x92\x18r\t\xe9\\d\xc8\x84\x8d\xa8\xf5\xd5\x91u\xe7\xb2\xb3\xac\xe9P6N\x05F\x1d\xa7\x07\x12\xb5\x1a$o2\x81\xb3\x83p\xfb\x11\x7f\xab\xacj\x92\x8c\x8a3\xe9\xc7w\xe4\xc2\xcc\xe1\x80\xc1\xfc\x19\x9a\xf4\xab\xcd\xf9\xf7\x8c\xc7\xae\xe0\x14\xbc\xfc\xbb\xee\x89\xba\xaf\xdc\x0c:G\x83V\xb0\xd3\xafq\x8di)\xe6\xff\xfe\x8c\x8d\x9d&u={\xd2\x1c$\x9f\x13\x843\xf0/`J\x07OP\xa8\xc9P\xfbUxT\x7f\xe2\x89o\xa7\xdcU\x00\xb4\x84\x88\xa5\xfct.\xfe\xd2\xc2k\xe4\x9a\x97\xde\xf5\xa6\xd9A\'k\xa6C\xd4[$\xb0\xd0\xb1\xdc\x9d\xf3<\x16\xe1\x98\x8dc<\xffr\x88.\xb4\xb5a\xf7RQ\xe3\x1a\x8f\x10<\x1c\xcf\xc3`\x86\xa2#\xf8\xe8\xf7N\x00\x82l)\xee\xd0\xbe:\xfa.0\x02i\xf8\x93\xc3\x0b\xc0\x9eK\x92\xcc\x13\xcdp\x99\x85\xe1J\xb6\x84\x9c2\xa1\x1fa\xf8p\xde\xf3\x83?M(\xcak\x95\x87\x17\xed\xc0B\xf0&\x07\xb1Y\x92g\x85$U\xb1\x93\x9e>`\t\xbc\xbfU/`P\x87\x10el\xf4\x89{[\xab\xb8\x0e7J\x95h\xaa{\xa9\x0f\xa6]\x00g>\xf9\xfbg\x812\xecv\xcf\\*\xd6k\x06\x04\x95\x80\x8b"\xc2\n\xf8\x81\x06\r\xf05\x99\x99\xfb\r\xbd\xf1\x18\xf3\x1dh\xaa\x91|\x8f&|6)\xf4FR\xfdSj\x8b\x0e\xed\x18\x1f\xb5\x8b\xc3.\xf2y^\xe3\'0\xef\x12\x8d\x03C7\xd4\x0f\xeb\x9ftH\x89\xf2\x05\x81#V\xa6\x05\xbbX\xa2\xca\xcd\xc0JJe\xad\xd7\xd0\xef\xf4}Z\x89\x14\x16\'\xd1\x8fz\rr\xbb\x83\xc4GeT\xb8\xdfD\x0c\x0c\x0c\x919\x9eu\x1ac\x8b\xe2\x0bh\xc0\xe3\x9e\x83\xbe\xf8]oa\x8efT\x83\xbb\x07\xdfRm\x16\xa0\xc6\x94!\xfe\xed\xcb\xc6\x07J\xde\x89\xd6\xe2@\x97g\x06/J\xf7{\xf5\xde\xe0\x07\xa4G.\xdb\xc3h\x0e\xa2\xa4F\x82\x9d\xf3\xb6B\xfe\xc2s\xb0\x12\x10\x10\xf6\xc6\x06b~\x88,I\x8f@V\x1a\xe8\xdd\xa5\x1d\x05,(Z{\x89\x1c\xac\x0c\x02\xe9\xf4j\xe1\x1c\x1e\x80\x8a\xd9\x83r\xcd0\xc3\xcbo\x8f\xdb\xd2\xc9\xe8\xbf\xddU\xa3\x05}g\xa1\x06_\'G\xae\x131y\xda\xd1dH@~?\xa2\xd8\x85\xabe8\xc5 \xed\xd7\xce\xdci\x0fZ\xedv\xee\xc0r\x1f\xb4\xbc\xce~\x90\xf4e\xe7U\x104n\xad\x15\xcf\x17\x8c\xa5\xe0\xc8\xd2\x89j\xda\x0fg\x00\xa4\xa6\xfe\x03\xb6\xbf\x9d\x7f^\xf0#\xeb\x96\x01\xa4\xccS>b\x10\xbc\xfa\xfbJ\xf8\xb0\x83:&\xe1\xb9y=\xfcL\x1a\xc6\x84\x83\x80@\xb1\xef#\xbe\xe2<\n)/\x9a\x7f\xc6f\xb0,W\xdc m:\xf0\x01\xef?;d\xf8\xd7U\x9e\xa7\xd0\x9e?9\xae\xeeK$X\x81e<\x88\xa8Zd"\xb2\xd3U\x11\x10Q\x1eikh\xdfi\xb1\x05S\xca\xb3\xe8\xbb\x17=\xdd\x07\xa6\xfbq\xf5\xf3-\x959>#\xa1\xf3\x85\x90\xbboc\xa7\x08\x8b\x14\x8aqW\xe4\xbao_\xe0\xe7\xd1\xfa\x82M\xc7\x80p\x02\x0f\xe4);\xe72\x1eD\xb3\xeas ;u\x92\x83\x9a;\x81\xa5x\xe9\x96\x0c_O\x81\x89\x88\x99\x14-\x99)\xf7\xbb\x9d\x10}\xab\x84q,\xad+\xee\xb8;9\xcajdsVE|\xed\'E\x86\xb5\xb7\xe3\x1f\x8a\xaf\xe9WL2\xf6>=\xa2W\xa8\x0fz\xeb\xf8\xbe\x00\xf1\xa7?\xacnf\x15\x18U\xff\x8db\xc2\xfc\xe7R\xff\x17\x07\x9a\x12\x1d;\t\x1b\xf65\xc0\x06G\xcb\x8a\xd2\x1b\xb8\xde\xf6\x12\x87c\xb8[l\x84Y%\xa8qq\xe2\x9a\xa72O\x80.\xf0\xaa\xc5\xcbt\xb7\xeeolLm\x08U\x19\xdc\xed\xaf\xd3\xe1\xec\xa5Qg\xe7c\xd1l\x9a7\x9bC\x1c<\xa2\x8c\xd6%\xe5,\x04$$\x01\x0e:\xbd\xbde}\x10(Ac\x97\xf5{<\xcf\x8c^\tcE\x92\x00\x1d#\xf7nK\x9cl\xbd\x93\x03_\xe9\xf7\x8eN\xa5M\xa7\x89m\xd8\rTk\xb7F\xde\xf2\xe2\xdf;\xd1\x0f\x9d$\x02g\xc2@\x94\x1c\xfe1\x90[6MAO\xf7\xa1\xdb\xa2U\xe2\xd3\x83\xa7L2\xb2/\x84\x99a\x11\xfe\xe6=\x8as\x01\xc7\x8c\t\xb3\xcesD\x1b\xf0\xef\xb7\xb2\xd2y\xb7\x10\xae\xe3K\xcf;\x83\xce\xba-\xe6Z\xdb\xeeU\xf9\x96\xb7{\x1dO\x8ajg\x0e\x05\x1b\xf0Em8\x88T\'\x97D\xed\x14`\x82n\\\xcb5\x7f1\x01\xa1\xc3\xc5\xf2\xc7\xa5\x06\xcc\xad\xfc\x91=w\xf1\x9cg\x15b\xdb\xad\\[C\xc8\xfa\xd2[_\xaf\xb2\xc8M\xfd\xa6\xbc#\x00\xffM\xba{D\xe0\x00[\x83|/\x81\x93 \x9c\x81\xba\x19\xd8Q\xb0\xa9}\xe8=\xa9\'<\x88\x07\xbd\xdf\x05T\x86\x10\x9e\x17\x01\xb7[\x9e\xc2EI)r\x05j\x94o2\xfc\x9f\xffq\xf9\xcdUZf\xb9\xb4eS\xd5}\x83s\xaf{\x17\xfd\xee\xa6&sE\xe6\xc6W;L\xeb\xed\xd15\xae{\x04\xce\xfeM\xa4Vpbjf%\x86-\xbcqF\xd1\xc1r\\\x13\x96\xcc1@\xc0]\xf7\xa8}\xee>\x15#W\x9e\xf8\xb4^\xbbmi\xfa\x97\xa0\xf1\x15]=\xbfC\x1e\xfa|x\xf9\x96\x96\xaa\xa6H^\xa4h\x19\xef\x1b\x87\x16\x18>\x90\xa7\xedqE\xdft\x9d\x01\xf8\xaf\r8\xd0^1\x83X\x8c\xfc\x8e\r\xa4"\xc05\xd7&\xbc|\xb12\x95\xbb\x1f\x06&\x00m\xb6\x04\xb7\xbb\xa8^\x83\xe0\xf02\xd847\xaf\xb4ab\xe8\xae2\xeb\xe4\t7R\r\xafL\xec\xe6\x9b\xae\\\xc4\xb8VM\x12\x0e\xef\xb19\xeb\xb3\xe3\xbd\x92A\x9b@\x0e\xe3|\x89\xbd\xe1\x964+_;\x08A\xccY\x1b\xf3y\xcaY}A\x03\xdf\xa3\xe1\x10\x84\x1d\xa1\x91\xe1\xd0Z\xba\x9dp\x19\x95)R8\x874O\xe1wX\x93\xd9\x9d\xb8+\xc6\xf4\x92!\xb3{\x01\x93\x93\xb6\x8d9\x85FM\x85\xb3\x99\xd0\x98XH\xc0<\xcf\x9c\xbd\xcf\xc7\x85\xc3\xb7<*DlT\x85\xfaw\xf7)\xa2\xbf1\xd3\xc5[\x1e\xeb\xb6Nt\x10\xf5\x8c\xcb&\xa5\xc51TN\xf0\xd3\x1f\xa9\xa9\xf8\xa2v\xd1\xfd\x89\x9f\xb5\xc0i-\x08\xb4o\xcf\xa2\x04\xaa\x85\x03k8\x0e\xf1\xf4Oh\xf0\xd9\xce\xb6)\xc5\xb5H\xba\x0fE\xa3u\x8f\x00\x08\x120!\x1c\xaf\x85\x0cv\xc1`\x80xQO\x19\x1bd\xa5KZ7=Q\r:\x7f\xc3\x89\xc2\x04\xbe\x9f?\xc9\x14\xd2^R\x1a5\xe3\x82(\x91\x05\xa7\x8d"\x02|\xd0\xac/Hw1v\xea\xf8VW\xd9\x93\x1d7{\x13\x90\xf8u\x96\x98\xe0\x0b|\xb6:?\x1e\xf4V4\x90;(|y\x8c\x0bp}\xe0\xcd^\xaf\xe4>L\xab\xb9\xe1-\xd1\x17\x16u\x88#\xdc\xdd\x9b^V\xe0\x91S\xb1\xd4\xb2\xd0\xd1WE`i\xed\xa6e\xc93\xd8\xe1\xe8\x06\xa3\xb2\xb8\xeaE\xef\x8f\x85mR\xb02Z\xf4\xd0>\x10\x16\xcf/\x19k)G3\xe8iW\xbbt3\x1b\xbd>\xac\x0b*M\xf4\xf2\x00\xe4\xa9\xebHO6_II|\x13\x92HS`5\xda\xfe\xf52\x0c\xe0 \xdbQ\xfbA\x0b{\xd6\xbe\xd7d<\xa2D\x17\xb0\x95\xb4\xdf%\xef\xae\xbf\xe9\xa6\xd4\r"Y\x02\xa8\xc5\xacB\xd8\xd8\x1d\xcf4\x8f;\x06\x80\x9c{\xaa\xc2)\xea\xd2V\xe1"1mYd\xd9\x83\xed\xecs.W\xd9O\xbas4"\t\xedW\xa1|\xb8\x8d\x9f\x0b\xa8t\xca\x07e\x0c*\x85,\xf5\x8b\xc8=\x82x\xcd\xa4\xe2*m]\xb9+m\xb9\xb3\xf2\x8e>\xaf\x82\x99\x18z\x9fdj\xaf\x18\xb5&1I\x16\xfb\xcaIqh\xab\xac\x12\xc4\xc0\x8a\xf6\xfb\xe6*\x8fV\xf5=,\xb1\xcb\xf3]H\xca\x88.\x8b\x81-\x7f\xfd2\xa0\xd9_/\xe4uB\xbb\xd6\'\x14#o\xe9\x1b\xe0\x86i\xe1\x08\x92\x84\rQ\xf0r\xf7Vw\xf1\x17\xc1Z\x1a\x97\xf5*.\xf3,</,\xcb\x03\xb7Pj\x9e\xd9Z\xb6\xe2Pi"4;0\x1b\xe7\xb2\xcb\x9b5*-\xd0,\x8e\xa3*\x14\xe4\xe5\x8d\xc8\xa5B+/\xe9i\xa2j*`\xadu\x1c|\xca#\x01\xdaX\x0ep,Z\xfee3\xc8\xad\xf7\x05<\xac\x96t\xea\x0f\xdb\xc6\xd0\x88\xe2\x99\xa5*\x9a\x9d\nd\x0f\xeaP\x1c\x9f\x83\xa9\xe2^ *\x10\x93\x98\xbe\xa6\xb89zH\xe5?\xa2\x8b\xc7\xdd\xde\xb1\xf1yyM3t\x97\xf5\xea\xae\xb8f\xb1\xe3M\xd1\x9d\x13\xa9\x0e\x16a\xd9o"An\xbdI\xf8\x9a4\xd6Q2\xea9\xb9\xf3\r\xe3\xab\xb9y\x92&\xae\xd4\xd8`\x1a\xb53\x8c\xbc\r4\xbc\xeea\xc33q\xce\x9b`\xb6qz\xe1\xdbvS\x0c\x9d4\xc07\x7f\x8a1\x870\x94\xe2\x03#\x83V\xc62 \xd1\x17\x1e\xf0B0D\xe6\r\xed\x03\x8e_X\xc7\x98\xec\xab|\x01kp3\x1f\x0547\x8dO\xe0\xe2\r\x19\x95\xceP\x89\xbaI\x1b\x85\xd2\xd3@\xf0\x85\xdfx\xca\xf9%5\xbc!/\'/\xf9v\xd0\xaa\xf4\'\xec^\xeb%\x82\x8a=\xbfCiB\x87d\xa2m0T\xed_\xa9\xd7\x10"\xeegR\x8b\xa1\x93p\xea3\xe0\x8a\xcb\n\xe7c\xca\xc7\xc5\x91\x1bl\x0b \'X\x8c>\x1fk\xee\xbe\xb0\x8c6z\xbe\xcf\x1c\xdf~\x98T\xd0\xce(\xb9c\xf52\xf48\xba\x97\xd9\x0b\xa0\x8f[\x0f\x89p\x90\xd9\xdd\xe5\xd6\x01C\xd7v]\xadx\xb2\x8e\x15\x02\xe5\xd7\xc0\x9f\xb1\x96\xda\xb8\xaei\xff\xabj\xa58]\x05\xde\xae\xe4\xd1\xd9\x80$z\xd2\xa5Bt2\xe4\x90\x06*\xd7\x0f\xf5[\x08\xf0}\xe0c\xb8K+\xdf\xfa\xc5?t9\xf3(`\x86\xe9\xb9}\xfd\xae\xbf<\xf2z{\xe0|uR\xf3\x13{Qu4O\xb7\x8aeE/\x03\xe6l\xd5\x85\xf9\xe2\xa3fH\xe1\xaa\xfc`\x02$+}\xb6%h\xfaz\xf0\xffEf\x80\x18\x1d$\x16wr\xbe\x05\xe6\x98\rJ7\x0f\xf6\xfd\xed\x00/\xe2\xb8\xe0\x18\x97\xd5\x05?\xb2\x9e\xeb4d\xd7[\xe2k\xa8\xf0\xf39\xe8(\xb4r\xbb\x99\xe0\'\x96\xbe\xde]\tl\xdb\x89\xb1\xba"\x19\xee\xa1SW\x11\xe1=\x9a\xf7Q\x88)0x\x0fWD\xe4\x97^\x8d\x97\xd5\xfeR\x0e\xd2Z0+\xc09\xdc\xcfq\xad\x8bm\xd6\x92\xd4N\xa4\x13-:\xf3\xd4j\rU\xd6\xb6\xb1\xfc\xfc\xad`.\xfe\xe9\xc3\xe5\xa4D\xc4\'\x0e\x1d\xe9l\xa8\xec\xe4\x19\xb6\x1a\xc7{O\xeb\xda=> \x9a\xac\x84E3\xa3@\xb9\x19(\xd0|\x04~\x07\xdd\xf8\x07($\xb2\x04\x84\xee\x00^.i\xde\x8a\xacX"\x16\xc36T~\x18f\xfd\x15\xfa}\xce]\xa3\xbc\xcc\x1d\xc7w\xd7`\xb9\xb9\xb1c\xc0D\x12\x08\x14\xe1c\xd0-\xbe\x97\xdd6\xc4\x97\xc2g"\x93,\xd6O\x17pPW+TJH\xfdG\x18:\xee\xa6\x16\xaf\xd2\xef\x8e\xe5\xad\xe0\xe4VAPj\xa2#\xbe\xf9\xb9\xfc\xa5\xba(#+\xec@\x1d\xb4\xad\xb6\xa7\x06\xcc\x88\\N\x86\x0e\xe38\x80\xfb\x9e\xfb\xe4\xf4&{X8\xcd\x90\xfbe#W\xe6\x01\x11\x87\x1e\xd2\xc8\xea\x94\x9a\x19N\xdf\xf0`~\xd3\x04\x11\xd7\xb2\x8d\xc7Qi\x05\x9f\x90\x87\x06Z\x88r\x04\x89\x93\xe1\x1f\x0eu\x93\xf5\x97T\xea\x9f\xd7\xfcZ\xd9\x86oI\xaf\xed\x9d\xadi\x81j\xa6\xa2cZ\xf1\xe81\x91\xf3 \x82M \xf4\xba\xf0\xf7Hw\xea\x0e\x98rbN\xbd\xef\x85\x030\x06\xb4&\xc6v\xe8\xcf\xfd\xe1l\xa2\x01\xbc_\x883\xfa\xa8\x00\x0bXOvC\x88\xdb3AW\xde\x0e\xe8*\xd2\x94\xa4\xde\xe3(B\x82h\xf7$\xc9\x1e\x83\x92{\x13\xcao\x80\xfb\x88\x15OSe\x94\x80f\x11\x87\x86\xea\xc4oP\x9c\x02:n\x1c\x05a\xa6\x8c\xeb\xefx+`t\xe3t\x05\xe48\xec\xd1\'\x1f}\r\xd6\xa1\xa5\x1e \xe2\x8a\x1e\x9fE)i\x81 t\xe3\xe0\\\xba\x17q\x99\xc6\xfa\xce\xf1\xf9,\x1a\xda\xe49\xeb\x15\xda\xab\xed\x0f\x16>$he \xb5\x04\x9d[8\xce\xc5\x02"\xdd\x82I<\xd9\x00d\x97=\xc3\'\x96\xcd\xa1\xb9\xb1\x98\xfbJ\xb0]\nK|8\x10\x0b\xe6FL\xc6\xf1\xdf\xc39\xf1\x19wJ/&*?\x8d\x88\'<\x0bPF\x9cN\x03\xc9h\xf2\xf2\xf8\x1f\xb7\x94\x03U\r\xa9\xb8[Qr_\xcd.\x16\xb8\xd4&C\xbb\x11\xe1\tt\nt;Q;\xf9!\x83V<\xf4\xb3\x98\xfd\xbdy\xde\xbf\x10b\x01g\x05\xcaO\x13|\xb2\xb3\xe1\xc8\xda\x8b\xe7\xde\x96\xbd\xb8\xc8\xc2\xfe^\xe9\xd5\x16\x88\xcan\x84\xaba$i\xcd\xd8h\'\xd7\xb19\xa4\x15\x17d\x9c\xa9d\xa87G\x83\xbcr\x99|\xb1\xda[\x9c\xa0\xcan\xf7\x98\xdcy%\xe4\xc5\x85^\xa9g,Np\xf6@\xb9\xeb\x0b\xc3\xe6\x81\x0e\xb3G\x05\x85\x08-\x90%r\x03+\xe9\'\xa1\xb4 ttG\xe9\x15\xa9\x88\x8bb\xd23\xe0\xcc_v\x17\xa7]D\xfc\x97e\xbd]\xda\xb1\xa5}|\xb2;.\xb1\xbf\xfa\x7f\x81\xcfN\xd2\xf8H\x075\x02d|\xc3N\xa6\xd7F#zM\xbaxj\xfbq\xf7\xe4gY\xc6k\x1d\x979W\xb1\x82e\x95\x96\x17\x8d\x00\x13\x95\'\xf1\xe1\x1d\tlzb\x1ba2\xd9\xc5\x043\xbe\x95\x07`:\x82c\xce\x06D\x17\x82_\x03\x80\x8aQ\xd0\x03\xba\x83m\xfcB\xed6\xd7"Y&La\x89i\xc1\xd4\xd0\x18\xb98l\x1a\x17N\x9c\xa4jtlb\xad\xad[\xed\xc5\xb8,\xa5\xc3\x90\xeao\x17\xe3#\x06\x99@\xe1,\x98\xa8\xc9\xfd\xac\xc7\x9f\xc8_\x0c\xd9\xd8\x0cl\xb6\xe7\xd2\xee)\xbdhQK]\xc2\xf9\x1c\x04;\xba\x9c\x9c\xe1Uy=r-\xa5i\xc2V\xd9\xdb\xa5\x17\xac1\xa9\x94\xe0\xb8\xd9Hf\xe7\xd3\xf6&\xa8\xd0\xfdgP,P\xee\xf6L\xe9\x17\xc3b\xbfJ\x07\xdam\x94\xa6\xfe\xfa\xf0\xc7"f\xb1O\xcf\x1e\xf3\xc8r\x85F\xd9@|R:!C\xbe\xe9\x19\xe5\xa7\xd7\x99\xa2\xa1G\xf3\xa1\xe0E8C\xc1\x90Z?\x11\x16\xd3j\xb7\xe9[\r\x8d\xc6\xdf\xc8+\x87\xc1@\xc3\xfb^\x889\xe3\xb8c\xce\x95]\x05\x9c\x86GD\xb7C\xcdA\xa9\xa8\xe5\xcf\t\xb0\xc0\x11\xbf,96\xc0\x1d\xda6\x18(1GsJD9\x86\xa0\xad\x87\xebp\xb8+\xcf\x03\x964\x8a\xb0\xa2\x1ea\xa8\r\x18n;=\xe9I\xaf7x=\x882\xa9\xc7\xb6\xdaf&w\x90\x03p\xa6A\xf1i}\x80:\xc2%\x806\xbcYU\xba8\x86\x90\xbd\xfe)\xf4\x1c|1~\xba\xf6<\xd8W)\xdce\xd7AS\x86\xda(\xd8\xe1\x18\xe0\xe9\x06\xd7\xe4\xafN\xaa\xc9\xb4\xe6z$D\xee\xfc\xc1\x15\xd8\x06\xc3\xd6\xfc#\x9a\xdf\\\xe8\xfc\xb6E\xe2\xe0\xfd&\x16\xc7\xd5\xcf\xf8U\xfb?Z\\\x02\xb4\xa0\xc7\x9d\x8e\xd2l\xa3\x95\xe8\x85?\xe8\xb3\xe4)}!U*\xb1v\xc38\xb3\x83]\xc6d78Rw\x1e\xcf`\xd5s\xd2[\xff\xeb\xd26\xf7Q*\xcc,\xe2\xf4d\x0c\xcf\xdbB\xe3\x8b\xee\xdb\x165\xca\xe5\xea\xe5\xfc\xe6\xfe&\xbd\x92\xda\xef\xa3d\x8a\xadAk\x9eh\xee\xe3\x87\xcb\x1b\xfa\x8f\x94\xd3z\x1bo>I7\x05](\xbc9\xae\xeb\xb4\x94\xb0a\xdb\xb7\xcd\xf4\x9fE\x1d\xfd\xd2\xd0\xdd\x01\xbf\xe4%v\x95\x9cfE$\xec\xe7\xc6\xee\x02z\x1d\x19\xb0\x8f\x0e\x01(Q\x9c,Og\xfaq9\x91V\x12\x1aT\xfb+\xdd\xb8\xa8t\x88k\xa1\xdb\x80 k\x8e\x11\x14\x18\xa4\x08\xf8L\x90\xea\xfe(\xca\xd1<@\x08\xca,\x06@\xc8=W\xa5h\xcd\x0c\x96B\xd7;Q\xd3Z\x115g \xaa\xf5\xb6\xd0u\x96a\xc6\xf8\x9b\xe1\xac\xea\xec\x8b\x1b\xd6p]\xc2\x0b\x0cz\xd5z\x7f\xc2\xd8\xd1\xcc\xdf\xf0woB\x89\xaba\xb4@E|%\xf5\x9c\xdc\'}\xe7\xd5\x830[x8d\xbf\x0b\xee\xb0t\x1fd\xa6\xf0\xcfjc\x9f%\xecP\x93\xf2\xd2\xdf \x00\x12\x9d{X\x88\xf2\r\xed=\x0c\x87G$\xd9\x14\x8dF\xb9a\xc3Wy[\x00\xce]Q@Gh\xd15\xa4k2!\xee\x00\x83\x82\x81\xd4\xd6\x9d\xb4\x99\xa8\xe6\x933\n\x84L\xe2W~\x1d)\x1c\x81\x89c\x10\xbfh\xe5\x84\x06\xb4\xcf\xc3N\x07=\xa8\xa6\x92[\xe4\xf4"\x0b<Q\xd8\xd5Q\xfa\x84.\x9b,@\x18\xdc\x9ad\x9fl?u\xdc\xd7\xc8;\xff\x9cy\xe6\xe8O\xe4^\xee\xcaR\x85@\xfb\xb8YI\xb5@\x87\x0f\xc3\xd0Ou/\x7f\xd7$3kq8\x94\x1eW\xcb\xe7\xb3j\xc9\xc3I\xe4~\xd7\x17\xcc*\xd6\xac7Vm\xd9\xc3\xdb\x92*\xad\x11\x19MV\xca\x052\x85\xd2\xbf[xa2n9QL\xa7\x8d\xd7Q\xb9\x95S4\x16x\x8aA\xe0\x15\xe3\xd4S\xf78\\\x0f\xe1\xd5\x0c+\x1aK\xd2\xcc\xa7C\xa1\xbc9\xf9w\xael\xdev\x02\x9di\x80Xc\xe2\x02\x85U`XA\x15\x99@\xf0(F\xc3\xe3a\x01\x8c\t\xf8\xaen\x19\xe6\x889\xbf\x01\x13\xd2f\x04\xd6\xe0\xe6\x15\xfc\xa14\x11\xb5w\xbd\x85"Hl\x88\xf3\x07\x07\x07\xc1n\x83\xcf\xbeV\xcf\x8dC";\xb8\x07\x07\xcb!Q\x0e\xb3\xf2nY\xc2\xe2\xdb}N\xdbWn<~\x11e\x1f{\xa30\xe3\xd5"\x08\xce\xec?K\xc1N\x8f\xa4\x1c\xf03\x9ed\xc8\xc2\xfa)\x05-,C\xa6)\xc80\xe8\x86\xf7\x10\xd3}\xa7\x92\x991X\xb2\xac\xee\xa3\xe5\xbd\xb4 \xa0\x80Vv2\x0e\xae [\x9aj\x88\x99\xfe\xf4\xcc\xec\x9aY\x9a\x06O\t`\xb1U\xe7go\xc8\x94V\xde\xc5J\x18\x19\x85<\x92\xf5\xe4\xe4\xa9\'MP\xa0\xab_u\xc3;\xa1\xc6\xbd\xa8\x85\x82\xbe\xc8p\xe2\x97l\xe3\x1fj\xea\x1d+;\xa0\xe1\x93;\x9d-E\xdf\xee\xe7~~\x07\x8e#\xf4\xc8\xf5\x92\x18JuBX\x17\xae\nL\xffU\xb5\xae\xa0\x14\xc8\x95\xf3\xd1\x9e|\xe0\x04/\xd1\xba\x14\xb5\x12\xc8\xb8*\x81\xb3s\xb3\xc7\x9aNL\xba\x06\xe3\xcfh0\xf8\xf7\x80\x9a\xb4\xfe\x89\xe5Kf>1OqKH\xd5\x91yr\xc6\xc3>a\t\xbb\x98\xbf\x8eX\x91\xa2\x13&\xaa\x10\xe0&\x82\xdd\xe5\x17B\x1d\x89\\~\xcc(\xca\xa15&V\xbc\x9a\t\x0f\x1fA\xd5\xde2\x9eQ\x19\x96\xeb~u\xdcT"D\xfb\x8d.\x98\x9aps\xc8n\xcehN\\\xc7\x13\x19\xb0nE\xe0w2x1\xf3\xc5\x03\\\xd1\x12+\x1a\x98I\x81\x11\x03\x87\xecV\xb1y\xd2E\xaeo&\xf2\x9b\xa75\xdb~\x03LA\x1fQ\xbc\x86\xf3\xcd\xa4\x10\x9d9\xd1E\x86z\xe8\xaf]\xc1\x89\xb3lbUY"mH\x15\xc6!\x01\x91w\x07\xcfcIVT\xc1\xc0A\x1a\xab\xb5f?T\xf8?\xdc\x95\x93\xec\xad\xb2\xb2r1e\'\x03g|\xe8b]F\xac\xfc\xa4\x05M7\xc3\xe0%\xff\xd5\x14\xe6\xe2DA\\\x1co\x0e\x93\x1e\xb8u\xff\\\xf9_\xe4\x01\xa4\xcfm\xe1R|\xfe\x1c\xb1~\x01\xfc\x83\x01\xb0\x99\x15\xa6\x1f7\x8aIi\x06\xfc\xba\x17\xec(\xf3k\n\x15cp\xb4\xce\t\xee\x82\x9f%4\x18\xb3\x99\x06\x91\xff\x83\xf18\x14,v^\xd2\x0b\x81c\xc26\x9b\xb1\xac\x99\x83\xc1\xdd1\xcb\xd2]\xe5?UY\xfd\xd6\x8a\x88\xb7DBx\xf9\x14 \xff+\xd93d\xf4\x9eW\x03\x93\x81s\x9c\xbeh\xb7\xed\xb0\xad\xa74\x1dn\xd8\xd6\xad\x99\xd8rf`\x1f6\xa4b\x90gJ\xa0a>e\x9ct\x8coqT\xdeq\xadu\xdc\xd2K\x87\r\x1d\xfe\xf53\xfd\x14\x81v\xa1\x8f{\xef\x15\x9c\x1a4\xe8\xce\x063[\x04\x9feb\xde\x07\xf9"\xfeP\xfd\xdcjH"q}G\xed\xd0\x1d\xe9\xe7\xba\x1c\x92_\xd5t\x94\x9b\xfc\xb4\x9e\tc\xae\x9f?\xa9\x16,\x1d\xb4\xb2(\xd2O\xcb+]k\xf6J\xba\xc2U\x98\xab\xcdD9z\xf7\xdc\xe4k.\x1e\xfc\x10e\xc4\xce\xeb\x04\xe2\x15\xa8\xd3Q\xa9jt\xcb\xce\xe8\x86\xeclo\xbc\xbd\x80\x1d\xf7C\x90\xb4B\\o\xd0\x13"\xc6&#\x94*\xe3\xb4\xe1\x8e\x10&\x93z\xe0[\x18:N\xde\r\xbb\x07\x9dim\xea\x9a\xae\xa0\xb4\xe2\x13\x01p\x01\xf1gy\x83j\x8b\x10LK\x87\xad&\t}\xb3\xeb<\x88C\xd6\xb9I\xf8M\xdb\xfd\xee\xffMl\xc1(B\n\xb7m)\xa5D\x06\x0c\xe7\xab\x1dX&\xa9\x87\xe2\x83\x90\xc1\xab\xb5}+e\x8fA\xceT\xd8t\xb5\xf2s8\x14\x828\xccn\x04Y\xb7\xae6\xd7k\'o\x87\x88\xb0\xd0\x80\xc9\x89\\a#m\x87=D\xb2\xe41\x14B\x85\xb8G\x1e\x81\xc0\xa6\xcf\xae\xc3\xcd\xbce\xa1\x00\x85\x10y\xbb#\xf1X\x10\x88\xd4\xa9\xd9\xc4O\x1d`\x8c\xb5\xeb\r \xa1\xdf\x98\xb8\xcb&\xc7\xfa\xa1\x88\xe2n\x95\xe4\xb0\x8ck\x02!$\xae\xb4i\xf7\xab\x0fcp["\xa5\xd6}\xaa{\xb4\xca\xaf\xa1\xf7+\x87\x9d\xf6%\x87=Mti\xfbrv,\xcd>~A\x8e\xd8\xde\xf2\x94\xcd\x0fnO\x8f\x9bim&N,\x0f\tK\xe3\xd7\xda\x9d\xae\x15\x15i=\xe9^4\xdcy\xd96\x98\xfe\xe0\x1c\xa7~\'[\xfav\xfe\x93s\xedE\x8d\xa0\xba9\xee\xa8\xdf\x9bq"\xd4}\x02\xfeG\x87\x82\xd5"IQ\xcdW\t\xce\xca\x14f\x94\xc3\x1e\x90 \xc9}\xe2P\xf8\xcf\xa7S\xc0\xada\xb9\x95F\xb4\xce\xd0\xa6\x1b\xe6o\xd3E\xa24.\xfb\xc5\xcc"\x18t\xc4\xf51\x11J=\x1f\r\xe5\xb4\xb4\x8e\xce\x1a\xfd?o:\xcf\x17\xb2v\xce\x1a\xcf\xd2w@\xf4\xcel t\xfch\x99\xd8\xad\xd1"\x89\x88\xf9:\xe0Z:M)f\xadq\x0b\xea\xc9\xd5\x02\xb4S\x06\xe3H\x16\x83\xb8\xc7\xf2I\xa5\x0e\x94\xae\x9ai\xb0\xb5\xd6\x99m\x94\x0c\xc0\x8a\xb2\xee\xa4{=\x18\xe0\xddkj,p\xe2p\xe60-\x07\n\xc8\xaa\x06\x85\x14\xea\xc3\xf7\xd0\xa0\x9fZ\x13M\xe3A\x8c\x826\xce\xa2\xa2\x88\x0f9u\xd8\xef\xfb\x92\x13oi\xb8Me-F\xe2\x99\xa2\x9e\x9f+[$\xe5>v\xa2\xb0s\xcaa\xe9+\xfbP=0\xf9\x14\x7f\x8c\xc9\xda\xde\x92\xed\xdb\xf5\xde\x1dq\xd0$\x0ff\x93\xc3K\x91\xf3\xf3\xc8\x0fKh\xa9\x0c\xe3\x02\x9bd\xf0\x02\x93\xf5\x99\x15~\x90\xa1\xd2\x87\xa3w-x\x92\x1a\xe4\xe0\x9b[c\xb6\xa3\xdd7\xcf\xb8\xb9o3\xc4\x07\xe7\x84`\xd3[\xb6h\x9d)\\\x994\x04\x7f\t\xf4X\x89\xfdNE\x0e7\xde\xfbf3\xc6\xec\x9b54\xf2\xc6\x0e\xa8k\x14X8U\x88vV\xc6\x9a]&\xef\xc8\xe0\x8fmY\xdd\xc2\xea\xb6\xa3n\xe3\x10tF\x0f\xfc*\xfd\xf1\x91N\xd8Z\x1c\x0f\xe1\x07\x94}\xbd\xd1\x03\\\x96\xccL\xd7\xca\x1ab\x1f\xc4\xce\xe7\xde \x14\xa8\x00\xc8\xf2\xcd\x1e\xdd\xe8\xb31\x04PP=\xaa?]j\xec\xda%Q\xc0/4SS\xd6\xb1J 9\xc1v?\xb4\xb2U\xb0\x82.\x84\x04\xaa@\xc4\xa5\xb9\xe0\xbe\x95,"\n\xa6\xfb\xf8\x93\x1b\xef}-~\xeb\x19gF\xb9\x05&\xa4\x96y+\xc5x\x99\xdbHaGO\x1e\xd2\x8c"A\x1b\xe2WY8\xd8\x96x\x0c\x8c\xc0:vM\xd1f\xc4`\xf5M,F\xbf\x87\xa61v\x11/o!`\xc0\xf1\xcf\xd4\x1dy\xb8gH\xbb\x03\xb7\xa6\xd1\xb8\xa7l\xe6\xc5\xf1\xa7\xb1\xca\x02\xc2\xd0Bb2\x15\x0fw4\x1fb\x1f|x\xf9\x8e\xe1[\x11\x05\xddRu7\xde\xf9\x0f,\xc1\x83\x06A\x89\x149\x17\xda2\xc4\x16\xf2\xa9G"\xbed\xe8\x06X|\xb3\xca\xa2\x9c\xcdQ\x8a\xe6!\xfa[\xe1m3,\xf50\x92x\x14\xd5\x11\xf7\xe4\x15\xb8\xb6\xe5\xb5\xd3\xde\x9b\t<fI\x80$Z\x15\x1fb\x0e\xa4o$\xf6\x9b\xa71]\x88P\xe5\xe1\xf9U\x1e\xf2B\xe9\xbe\xd0\x7f\x0e\xd3\x1f\xc3\xcf\xac\xdb\x08\xc0\x04\xf8\xa1\xc9\x95\xb1lF\x9c\xdb\x94L\x8c\xc0)G\x1e]X)\x91+B\x89pI\x1b\x91\x91@\x13\x97\xda\x93E\xb2C\x9cR\xe4\x87\xac\xb8\xc3\xbe\xf5\x8a\x85\xba\xf3.\xd6\xdd\xfa\xab\xc8W\xc6h\xcb\xfe\xaa\xe4{\xa2\x14-{G\x13zv\xca7h8\x8bP+\x80\xeb\x8c\x95\x1a&\xef\x9a5\xc5\x12\xd7\xc8;\x85\xc8W\xe4\xdeH\x18\xf2\xf7S4\x10\xf0\xea\xefRM4\x90\xd3e\x8bI\xe7J\x12\x880\xf2\xbcW9[~\xe3\x0b\xde\xe7\xa5j\xb5N\xd4\x02\xec[\xa0]\xe3\xcf\x1e\x00\xc7\xff\xa3\x89R\x85EY\xc9C\xab\xff\xa7R\xbd\xcc\xf0\x88v\xf9\x03,\xacl5\x90\xc8\xf8\xe1\x83}T\x83\xf9O6\r\xe0\xae\xea\xa1M\xa5yh\xc7d\xdcr\xe03\xb0 \xa7g\xa7\xec\xbf\x97\t\xa8i\xc6\x95\xf1k\xcc\xb6\xc15\xbc\x85)\xf6u\x8e\x1e#\n\xcf\x0eE+\xd2K\xdc#\x87Ur#\xc9\x15Y@\x92\xee\x81D\xf0\x99"Am\xa5W\xc3\xcd\x9d88\xc1\x8b\xfa\xbc\x1a/\x16\xd7\xe2\xff\x168\x98\xfc\x89\xe2h\xc7".\xe8\xbf\xcb\xeb\x91\xd8\xc7!0\x89\xadl\x86~R\xda\x11\xa6\xf2\xf7\x03\r\xcesr\x19\xda\xa7\x8fP\x16\x9b\xaa\xe1\xc5\x8c~f\x92U\xf9Gr\xf3\xb8\n\x11\xb31\x0b\xe0\xe3\xda\x1a\x94\xe2\xc9\xf6\x89\xb4^\xfagd\xb4V\x96\xe3R\xde\xb4\xa0\xee\x05x\x8b{\xa9((rApq\xb6:S\xae\x9c;:\xc0&Z\xe4^\xca\x89\nH\xf7Aj\xbe\xab\xa9PH\xddT\xdf_\xb9\xf0!\xa9=;L+mL\x98\x964s\xb1\x90a\xe5\x02\xa9\x89\xf6\x8f\xd2\x02k\x94\xb8\x93\xc5p\x8a\xba\xa7J\xe3\x85B\xfc\x19\x1c\x1d\xde7\xffn\x17pB\xdb*\xc4\x99\xfb1S\xc5\x834\x89\xc5a=:I\x1d>!\xcd?\x02O\xc2\x05C\xdc|,\xa5/\x95\xc50S\x9e\xc2\xe3\xda\xfe\x0b\xd6\xc2;\xa5\xe6\x9e\xd0\x96\x8b\x82"\xb7\x8e\x1c\x9d^\x07\x91t~\xac{\x8a\xbc,\x90\x80m\t9OB\xe7N\xaf\x04\x14\xf4\xb9\xa4k{\xf7\x93\x03&\x1f\t,0\xe7\x81\x0f\x1b\x02ZH\x16UG5Jm\xc5\x91H\xc7\x829j\x0e\x11\x9do\x077\xb4\xe2\xbdZ\xaeU;\xdf\xd73\xa7\xfdke>\xe6\xec$b\xc5\r\xf9\x84W\xccxi_\x01\x94=9\x01q\xb8\xe7\xc6\n=\x8b\x89\x81@\xf1=\x03\xad\xbd\x9c\xce\x19\x13\x97*\xe6`g\xc8\x1e\x91\x1ec\xabX\xcb*\xc4("\x89\x9d\x1e\x9d/\xb7"~\x140\x9eVr\x85\xaf\x86\xf1\x18A\r\xfdH\xa4\xac s\x9a\xd4&iG\x9by\x08\xe67\x00\tI\xdb\xcej\x04@\xa3\x85\x97\xf0b\\\xf9&S\xd8\x892(/\x12\xc0\xf5\x03\xd7\xbe\x8b\xf4\x0eF\xe2[\xa0\x83\xe7\xe6\xe4C0)\xbc\xbe\xd1(\x933\xfdd\xe3\xba\xc2Q\xf0\x1dw\x9e\xcc\x01\x7f\xb81\xf2l*\xb1O\x83N\xe2\x91\xa0\xaf6\xe4\ne\xd5r\xca\xd5\x1d\x15]Sy\xcfC\x15Y\x89\x88@\xaeK\xda\x9fY\xe4I\x8f\xc5%t\x99\xd3\t\x90@`}:\x8fz\xd3\xa5&\xd4\x8c\x9dW\xc5\xd8\x0bmQ\xea2\x9e\x12\x7fp\x95\xc4\x82\x8cU\x1a\xeaD\x81\xa8\xb5\xae\x1c\x1f^-\xbb\x96U>K\xa1G\xd3\xa8cKx2\xc1\xd2\x00\x8d\x1c>\xff\x97a\x9e-\xec\xa9\xce\x8f6\x0b\xf8$\xf3l\x8e\xfa\n\xa3j\xaa\xc7\xd4\xc4\x7f3N*n\xe8*)l\x95C\xbb\x8e\x9d\x91=u\xc8\xc1\xe5\xed\x18S\xde;z\x11?s6oz\xe8\x13\xe5\x9a\xc6\xd2\x13\xc5+$\x91\x9c\xb0\xb1\x08\xa6\xc6\x9f\x06\xc3\xd7\xda\xb3\xd1\xbf\xf7\xecs.8#b\x86F\x94^\x07\xf5=\x02\xaa\xc4\xa5\xf8\xf9\x85\xb6(.\x0f\xb9\'\xc0\xdf\xf3Z\xf3U\xb5Y/\xa5\x8a\xb8\xcaO\xf3\x9e~-\xbd\x11h\xe4\xc2\xac\xec\x1e=\xd7@\x81\x86\x824\x17n\x8a\x06v\x1d\r\x84\x18\xd6\xc0\x8d\xa4\xe7\xeb\x84\xa9\xf1\xda\xf2g\xc7\x08?F<#N\x97\xc3sv\xaa\xb9\xf3\xc6\xbbq:@510\t\xccz\xee\xf9\xcf\x98\\\xe7x\xcd_NSRr_\x85\x7f\xac\xce\x05\n\xa8k\'\x04\xc3\xe7,\xd7\x05#\xf4\x149\x97\r8\xcb\xd9\x89\xa8|\x8e9\x88\x8f\xd8\x07\x02\xb9\xd9%0\xd4\xe0\xbb\x18\x94Az\x85\xac}\xc1\x89\xac\xff\xf6?\x89a\x86U8\xb4Wp\xe1\xfd\xa78p\x8a\x96\xf6j\x80<I\t\x11\xc1\x1d9y\x0f%\xc3\xcf\xcb\xaf\xe4\xcb8m@%I\xc5\xc6\xdb\xf1\x1e>\x91G\xea\xb2\xb08\x91*E\xd2Q\xd1uf\xb0\x91\x7f"\xe84\xd9\xd7\xca\xe7\xf0,~\xc6\x9f\r\xfc\xd8\xb4\xf7\x9d\xa8\x1b2\xb4f\x8d\xdd\x1b\n3Q\x8cB\xfe3H\x19#"W\xe7\xcf?\xa7 \xf6\x99\x82\x00\xab\x84\x05\'\xaac\xbc"\x01\xcf\x1a\x9b\r\xc6?D\xcd`\x1c\xd6\xb1\xb5\xe0\xa6c\xcaw?\x19\xb3\x95h|W\xb3\xc8\xdcpSM\x81\x14\xa7k4\x9e\x07\xc6\xe8\xc9\x94m_S\xfdy\x15y\x00W\x04\x1eH\xd4\xb7ua#YU\x08\xea\xab\xbb\xf4NS\xb3b\xda\xd2\xb3\xc0\xb6k5\x9b\xce\xe4\x81\xab\xf5>\xbe\x04\xe0\x8b\xa6]\x9c"\xed\xf56\xf1\x87a\x1e\x80t.\x07\xb4\r\xd6j}\xb7:\xa84\x00\xd9\x1bFTBe\xf7\xdc\x8e\x80{iGo\xfay<Rm\xba\x93\x7f\xc2v\xba\xb0R\xeb\x08\xaf9)\xb6\xa3=!\x82\xff\xc5\xc8\xe1+4WF\xbb9W\xca*C\xa5X\x88\xb4C\r\xc7;f\x04K^\xe1\xe0e8\xf7|AE\xbc\xb0k\x99\\J\xc3\xe4R\x83n_\x8f\x9d\xfd\xb3\xfe\'\xce\xe51\'H\xdb\x8dZ\x87\x90vH\xa5\xdfhaP\xc8\xd9\xd1\xbcx\x8e\xbe\xb6<@\x96\xf2\x89\xd7\xaf_\xb9\x16x\xe9\xa0\x11\xf1=\xde@4\x17R\xb4|Bw\xc9\x88\xea\x02f\n/\xd8B\x1fra\xcbx\x03"L\'R\xf8+\xe1\x91\x9cw\xab\x8f\xde\xe0O\xa6A\xe0nU\tm8 \xd5{QV\xf2D\xd0a2|0]\xe2\xa0\xe6\x97@\xf7\r;\xc0\x05+\xdaR\xfa\\\x93\xceJ\xb4\xff\xc8\xb9\xa1\xf4\xc9b\x11"\x0f\xa0\x1f1\xd6ve\x0csc\xe4\xa6"\xf2#\xe0Y0\xc0\x1b\xcbC\\\x15\x94\x90\x04\xe4$\xb5\x14\x0b,\xfa\r~\xd9\x0e\xe3\xee\xa4<\xee\x80J\xa6\xa8\xa3cV\xda\xfc\x1d\xdc\xdc]\x90\x95Yg\xc0\xbd\x81\xabv\x12-E\xcd0\x80\xd3\xa2[\xc3K\x0f.\xb2\xf2\x1c\t\x15\xaf\x8c\xb5Z\xfcx:@\x92\xa3\xd6\x11\xd5?G\x86\xc7d"\x83\xab/,\'\xeba\x0e\x1b(\xcd|\x96\xf8\xeaR!*\xda\x9cq\xa3sg\xe4\x1c\x8ab\xa8\xb8\xa2v\xef.\x14\x94\x1c\xb3\x1eP\x80!n\xd9B\x90\xe5\xa4\x17\xe4\xf9\xb1\xd4u\xe9\xace\x15\xfd88\xb3\x15p\x99\rP\xd8\xe6\xccJ$\xe7\xec\xf2\x94C\xfb\x18\xca\xfe"k\x9f\xc2A\xa7o\x08\xff.\x92\xceP\xd4\xc1\x91G\xd4?\xa1R\x0e5\xcf\xa6\x8a\xc8B\xd6H\xbbC\x90?i\xcb01\xbfy\xf8`\xed\xd3\xb0\xbe\xd8e;JV\xff4\xe2\xd3\xc9 \x18|b\x13ui\x85\x07\x92\xf29\xd4L\n\xf8\x82`X\xb44\x95\x8d\xf5\x1a\xd9E\xcd+\xdc\xa7\x17\xadA#\x92\xfbN7*/\x15\xb6&\xa8\x02\xedY\xeb\xe8\x80\x8a\x95US6\x02\x18\x16U\x99\xa1?\x1d\xb9M\xfd\xbd\xf2\x19\xed4\xd7\xaeZ\xbb!T\xb2\x8e\\j+\xa9u\x93\x99\x9b\x02\x96D,\x95)\x8dA\x8eu\x8a\xf5\x98\xcf\xbb]\x92\xfd\xd3\xd8>B\\[\xa8\x1e\x94hsh\xaf\xa3*\xfb\x03>G\xe16\xc9A\x1e{\'f\xeaD\x8e0n\xf3\xd7\x0bh\xd1\xfbbv\x9a\xad\xf7\xfe\x15\x13\x8d\x92R\xb3\x01\xe7d2\xaf?\xcb\x80M\xff\nnNu`\xbb+\xb5T\xab\xd6\x9b\x0f\x90\xab\xe5c\xcf\x97n\x18rYO]\xc1\xbb\xca\xf0\xda\xa8\x87\xf1\xdfC\x95r@b?\xe1t\x93Vef\x82\x96\xd0Q\xecX\r\x0f\x81G`\xd0\xddT7\x12\x1a\x89>\x82@\xe0l$;\x01\xba\xa2$ W\xa3G\xb6\xfbW\x93!)&<\xa4\t\x08\x8e\x05\xb7\xa6\x9c\xad\xdbi\x98\xa4\x08O\xf4\xa0V\xb9rG73\xf3~\xab\xe8\xafve\xe7\xc4\x0c\x98\x02\xcbFj\xdat\xc9\xfa\xff(\x87\xd2\xbe<\x15\xc0\x80poz\xa6Gt\xdd\x1ft\x8e>\x13\\/\xd5\xac\x8fu:iAx\x19\xe20\xd4\x9f\x8f\xb8\x90]e\xf0\x04\xad\xc14;\xe5-)0\xe8QaEu\x00\x07vj\xca\xdc\xedQ\x8d?\x01[\xcaH\xf5\xb4\x8f\xeb\x8e\xd3\x15\xdb\xde\xcd\xf6C1\x85l\xa30\x12\x95\x13\xf2S\xde\xf1\x9d\x154!\xb7\xd3\xd2\x0c\'h\xdfk\xca\xe9"\xfc\xfb\x1f\x18@t<\xc8\xafs\xd6\x8bd7\xb7r]\xce9\xe0&6\xd4\xea\xfc\x95\xd3\x81\'\x1e\xf7\x16\xe8\x8919\xd5Xmq\xefU\xd9\x9a\x7fu\xfb\xa1\xb9i\x85\x84Sg{a\x15N\x912\x1fI\x1a\x1b\xde\x98-\xdb;\xaf\x04;.\x87\x1a?\xa4\xa6\xd2{\xa5v\x8e\xc6\xf8\xce\x82Q$t\xf5\x8dU\xc0\x1a\x85\x1d\xdc\xf3\xa1\x16UT\xbd\xe9T\x19h\xaa\x0f\x8cx\x80\xbf\xb1\x92\xe6\xca\xb1\xb4e+\xdb\x18\xbfi|p\x94?\xbe\x91\xbb#\xf5\x84\xb1\xc2C\x82! 6i\x86+\x84\x1e\xda35;\xf9\x93h\xc0\x1auK\x15^\xbe\x82\x004\xf5C\xd20L\x88\xd3\x08\x1f\xee\xff\xe2UN**\x82\x9e=|>\xa2"\x91\xe1\x17\xcc\x8e\xb2\xba(\xf4Q\x89\x0em\xdc\xf8\xd9\x83\x8f\x83}oO]\x12y#"Z\xef\xc4M\xeb\xec\xed\xb2\xf8r9=\xc8-\x08\xaby<g\x15\xc8\x15\x95\xe3\xee\xa9S\xe3\x80\x9e\x12Ru\xad\x0e\x91\x07\xa1\x14\xa8m\xd6\xd0S\xdfr\xa4\x11\xa2VT\x19\xfb\xc8\t\xfe\xa7\xe5\xf5{u\x05P\xd0S\xb0.\xc6 \xa0Z\xf47\xb5@\xf8\x01*!\xc5\xc9f\x82\xae\x95:\x1b\xb3\xf3\x86N0\xef\x89\xf2\xc3\x19\x17\xf7\xdcfXpe\x927\xad\x14v\xb8\x8a\xe7\xa2~\xf4n:M\xe7y\x8c\xf4+S\xe7\xa7S\'\x8e\x8a)\n\xa5\x08:-Tn\xebo\x86\x19\xe6\x9d,m/\x98\xccR\x05\xa0\xc3\x89\x1etl\x8c6\x84\xcf\x05\x06\x82Q\x957\x86F\x03\xb5\xc7\x0b.q\xd1\xba\xd2\x15\x9a\x84~T\x17\xd9\xab\xf9\x04JK\x00\xfd\xa6"\xd8\xb9\xac\x9f\xb81}\x91\xa3H\xb2\xb4q\x18\xb4\xd19n\xc8\xb8\xbf-\x04\x92\xe0\x19!\xa0]\x80\n\xee\x9d*\xfe/y\x9d`H\xe6\xf6\xf9\xd7\x15J\x04\xce\x98$\xeb)\xd2~v&2\x91\x93\x13\xe5\x19w\x934\xd1\x9c\xfaL\xb8\xc5\xe2\xa8)\xbf\x05\x10H6*\xd6x\xcbw#1\x1a\x11\x95Y\xcf\n\x95\x9aO\x83\xba\x90\xb37:\xf6\x99SM\xde\x88\xd8B\x85\xb1D\x80&EBm"\xda\xbael\x87\xcf\xe8HY\xed\xdf\x07\xab\x0b\'K\xb6\x98\x97\xa7[\xe1\xa7\x82<\xff\x15\x91\x01\xb8\xaf&\xdbR\x17t\xbcW}a{\x14\xf6\xcbw\xdd\xd0\xf9\xc1A\x8a:\xc9\xab\xbe\xbe\xe1\x84\x07\xecX\xc8\xb8\x1a\xdc\xebx\xc5!\xd1\xb6\xf5\x17\x05T \xbe\x96\x80Bs\x90\xdd7a\xae\xa4Y} !*\xa0&\xdd\xbe\x11\xfe\x92\xfa\t1\xe1\x10\xcb}\x13\x9d/\x07\x0b\xb7\xe4Y:\xc3\xacdy\x8d\'\xd0\xba\xc6B\n\x01\xf5\xc1~I1\xb9\xc0\xc3N\x0f\xe7g\xdfXx\xf1e\xfc\xa5\xd8\x0f\x0cX\x1e\xf3\xf6"\x12\xc45\x94\xf4\xd7\xb1r \'6\xe3\x0ba\xfe\xd1p6\xd4s)\x9eR&&\x91\x87b\xe7\\\xe8l[2\xba\x9f\xe2m\xb9\x85\x14z\x9b.3\x8f[\xf6\xf5G\x1bl&qkA\xf4]\xad\x91\xb4\x10@%\xcf\xc3\xb2h\t4\x84\x9b\xed\x8dd\x08\x9a@\xec\nW\xb4\xf7\x19\x03\x8b^\x1dI\x16Y\x89(|&6r47\x05\x156\xa8\x9d\x99+\x88O\xe0\x9f<M)\xe0\r%\xec\xfcT=\x00Nr\xf3i\xe2\xc5\xfbv\xa2\t\xb3\xdc!6_\xbe\xd1\xb7\xb2 \xaf~\xe3\x88\xcc\xc8\x06Z@\xbc8\x01\x9b\xe3\xc5\xb1]\x909\xde\xca\x08\xb3\xeaK\xaeT0\x10B\xff\x914')
1
+ import datetime
2
+ import uuid as uuid_mod
3
+
4
+ from sqlalchemy_serializer import SerializerMixin
5
+ from dateutil import relativedelta
6
+ from hiddifypanel.panel.database import db
7
+ from enum import auto
8
+ from strenum import StrEnum
9
+
10
+
11
+ class UserMode(StrEnum):
12
+ """
13
+ The "UserMode" class is an enumeration that defines five possible modes: "no_reset", "monthly", "weekly",
14
+ "daily", and "disable". These modes represent different settings that can be applied to a user account,
15
+ such as the frequency at which data is reset or whether the account is currently disabled. The class is
16
+ implemented using the "StrEnum" base class and the "auto()" function to generate unique values for each mode.
17
+ """
18
+ no_reset = auto()
19
+ monthly = auto()
20
+ weekly = auto()
21
+ daily = auto()
22
+ disable = auto()
23
+
24
+
25
+ class User(db.Model, SerializerMixin):
26
+ """
27
+ This is a model class for a user in a database that includes columns for their ID, UUID, name, online status,
28
+ account expiration date, usage limit, package days, mode, start date, current usage, last reset time, and comment.
29
+ """
30
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
31
+ uuid = db.Column(db.String(36), default=lambda: str(uuid_mod.uuid4()), nullable=False, unique=True)
32
+ name = db.Column(db.String(512), nullable=False)
33
+ last_online = db.Column(db.DateTime, nullable=False, default=datetime.datetime.min)
34
+ #removed
35
+ expiry_time = db.Column(db.Date, default=datetime.date.today() + relativedelta.relativedelta(months=6))
36
+ usage_limit_GB = db.Column(db.Numeric(6, 9, asdecimal=False), default=1000, nullable=False)
37
+ package_days = db.Column(db.Integer, default=90,nullable=False)
38
+ mode = db.Column(db.Enum(UserMode), default=UserMode.no_reset,nullable=False)
39
+ monthly = db.Column(db.Boolean, default=False)#removed
40
+ start_date = db.Column(db.Date, nullable=True)
41
+ current_usage_GB = db.Column(db.Numeric(6, 9, asdecimal=False), default=0, nullable=False)
42
+ last_reset_time = db.Column(db.Date, default=datetime.date.today())
43
+ comment = db.Column(db.String(512))
44
+ @property
45
+ def remaining_days(self):
46
+ return remaining_days(self)
47
+ @property
48
+ def is_active(self):
49
+ return is_user_active(self)
50
+
51
+ def is_user_active(u):
52
+ """
53
+ The "is_user_active" function checks if the input user object "u" is active by verifying if their mode is not
54
+ "disable", if their usage limit hasn't been exceeded, and if there are remaining days on their account. The
55
+ function returns a boolean value indicating whether the user is active or not.
56
+ """
57
+ is_active=True
58
+ if u.mode == UserMode.disable:
59
+ is_active= False
60
+ elif u.usage_limit_GB < u.current_usage_GB:
61
+ is_active= False
62
+ elif remaining_days(u) < 0:
63
+ is_active= False
64
+ return is_active
65
+
66
+
67
+ def remaining_days(u):
68
+ """
69
+ The "remaining_days" function calculates the number of days remaining for a user's account package based on the
70
+ current date and the user's start date. The function returns the remaining days as an integer value. If the start
71
+ date is not available, the function returns the total package days.
72
+ """
73
+ res=-1
74
+ if u.package_days is None:
75
+ res= -1
76
+ elif u.start_date:
77
+ # print(datetime.date.today(), u.start_date,u.package_days, u.package_days - (datetime.date.today() - u.start_date).days)
78
+ res=u.package_days - (datetime.date.today() - u.start_date).days
79
+ else:
80
+ # print("else",u.package_days )
81
+ res=u.package_days
82
+ return min(res,10000)
83
+
84
+
85
+ package_mode_dic = {
86
+ UserMode.daily: 1,
87
+ UserMode.weekly: 7,
88
+ UserMode.monthly: 30
89
+ }
90
+
91
+
92
+ def days_to_reset(user):
93
+ """
94
+ The "days_to_reset" function calculates the number of days until the user's data usage is reset, based on the
95
+ user's start date and mode of usage. The function returns the remaining days as an integer value. If the start
96
+ date is not available, the function returns the total days for the user's mode.
97
+ """
98
+ # print("start_date",user.start_date, "pack",package_mode_dic.get(user.mode,10000), "total",(datetime.date.today()-user.start_date).days)
99
+ # if user.mode==UserMode.daily:
100
+ # return 0
101
+ if user.start_date:
102
+ days=package_mode_dic.get(user.mode,10000)-(datetime.date.today()-user.start_date).days % package_mode_dic.get(user.mode,10000)
103
+ else:
104
+ days= package_mode_dic.get(user.mode,10000)
105
+ return max(-100000,min(days,100000))
106
+
107
+
108
+ def user_should_reset(user):
109
+ """
110
+ The "days_to_reset" function calculates the number of days until the user's data usage is reset, based on the
111
+ user's start date and mode of usage. The function returns the remaining days as an integer value. If the start
112
+ date is not available, the function returns the total days for the user's mode.
113
+ """
114
+ # print("start_date",user.start_date, "pack",package_mode_dic.get(user.mode,10000), "total",(datetime.date.today()-user.start_date).days)
115
+ # if user.mode==UserMode.daily:
116
+ # return 0
117
+ res=True
118
+ if not user.last_reset_time:
119
+ res=True
120
+ elif not user.start_date or (datetime.date.today()-user.last_reset_time).days==0:
121
+ res=False
122
+ else:
123
+ res=((datetime.date.today()-user.start_date).days % package_mode_dic.get(user.mode,10000))==0
124
+
125
+ return res
126
+
127
+
128
+ def user_by_uuid(uuid):
129
+ return User.query.filter(User.uuid==uuid).first()
130
+
131
+ def user_by_id(id):
132
+ return User.query.filter(User.id==id).first()
133
+
134
+
135
+
136
+ def add_or_update_user(commit=True,**user):
137
+ # if not is_valid():return
138
+ dbuser = User.query.filter(User.uuid == user['uuid']).first()
139
+
140
+ if not dbuser:
141
+ dbuser = User()
142
+ dbuser.uuid = user['uuid']
143
+ # if not is_valid():
144
+ # return
145
+ db.session.add(dbuser)
146
+
147
+ if user.get('expiry_time',''):
148
+ if user.get('last_reset_time',''):
149
+ last_reset_time = datetime.datetime.strptime(user['last_reset_time'], '%Y-%m-%d')
150
+ else:
151
+ last_reset_time = datetime.date.today()
152
+
153
+ expiry_time = datetime.datetime.strptime(user['expiry_time'], '%Y-%m-%d')
154
+ dbuser.start_date= last_reset_time
155
+ dbuser.package_days=(expiry_time-last_reset_time).days
156
+
157
+ elif 'package_days' in user:
158
+ dbuser.package_days=user['package_days']
159
+ if user.get('start_date',''):
160
+ dbuser.start_date=datetime.datetime.strptime(user['start_date'], '%Y-%m-%d')
161
+ else:
162
+ dbuser.start_date=None
163
+ dbuser.current_usage_GB = user['current_usage_GB']
164
+
165
+ dbuser.usage_limit_GB = user['usage_limit_GB']
166
+ dbuser.name = user['name']
167
+ dbuser.comment = user.get('comment', '')
168
+ dbuser.mode = user.get('mode', user.get('monthly', 'false') == 'true')
169
+ # dbuser.last_online=user.get('last_online','')
170
+ if commit:
171
+ db.session.commit()
4
172
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
173
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -97,7 +97,7 @@ class Actions(FlaskView):
97
97
  # domains=[*domains,f'{server_ip}.sslip.io']
98
98
  for d in domains:
99
99
  link=f'https://{d}/{proxy_path}/{admin_secret}/admin/'
100
- admin_links+=f"<li><a class='badge ltr share-link' href='{link}'>{link}</a></li>"
100
+ admin_links+=f"<li><a target='_blank' class='badge ltr' href='{link}'>{link}</a></li>"
101
101
 
102
102
  resp= render_template("result.html",
103
103
  out_type="info",
@@ -1,5 +1,35 @@
1
- # 2023-04-08T16:23:30.528998
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0b\x00\xa7\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1c\x0b\x00\x00\x12\t\x04\x00\x90\xda4\x90S\x07\xe4Ab7\xc9\xaah\xfb\xe1\xdb\x00\x00\x00\x00\x00\x00\x00\x00$M\xbcP!\xcd\xa9\xf8C\xcf\xe1y\t0\nR\xb4\x92<\x96J\xe6\xff\x0frE\x1e\xb5H\x10\xb4\xe61L\x1dz)\xd3:\x8f/\x9a"\xe0%E]\x02\xf0\x1fM\x89$\xa8>x\x8b\x99B1\xa5\xdc\xeb\x03\x18\x97\xcb\x9c\x10\x91\xb3)\x1cO\xdb\x88\xda\xef\x94\x9d\x98\xb0](\xa6\xb0\xf0e\xdc\x14\xab\x7f\xb3i\xb0+%\xe1\xc5\x90r29\xfe\x8b\xeakJ\x93\xe7\xada,.\x19\x15\x02\xd1\x9f\x8d\x94C\xdeh>x\xb9\xc1$T\x9a\xa2J-\x91a\xcc\x9f\x02\xfb\xdbt\x9cU}\xe7\xc2\x1a\x00/6\x06\xca\xf7.\xbd:\x88)\x19\xa5k\x06\x85\x11\xd7G\xc1\xc5}x\xa9\x97?Q\xe0K\xe7\xf4\xea\\\x13=\xa0`J*L\xbc\xe0\xc4G\xf0\x86\x83;\x0cw\x9fca\x97<u\\v{Jx\xdd\x916\x0e\xcc\xef\x81F6\'-S(};\xf8g)\xfc\x8fP29\xbbT\xcb\xf1f\xd1\xd9\xa9X\xfa\xb2Ne6\x94dJ\xdf\x9c\xc5@\x8f[\xf7_\xc5\xe9[*\x8f\xd5\xf4eR?\x02\xb3f\x1e\x1dy\xdf\xa6;\xc5\xa9\xfc\xd6\xcd\xcc\x91AA,\x9f\x88\xc8{i\xff\xd2!\xa4\xa9m8\xc2\xdd\x04Hc\xd4$\x85X\xb1\x16\x91\xec\xa1\xf4z\xf6\xb69\x06\xf5=\x8d\xee$8\x19\xc8\xf24\x87\xefV\x80\xf6n\x08d\\W\xb4%:#\x0b\xd8\xa1(;q\x82}k8`\x98\x18Spw\x83[=b\x86\xfb\xed\xa9\xcb(.\xc09St\xba\x19\xbb\x10;`\xf3\xeb\xb0\xd9s\x01\x11O\x18\xd2n;\x07\x88\xfb\xc6\xf6K+\xc3\xe1\xc5\x87\xcbo\xc9Pm\x97KpNiU>\xb9\xb4\x0f\xe2=\xdf\xb1UZ1\x83\x0eC\xfdp/>H\xa3&eM\xf4zJ\xa5\xb1\xb0B\xbb\xc6\xf5z\xfe\xed\xf3\x01m\x85U\xdb\x0e\xfc\xb7W\x9fK\x1a\xb4kz@\xc9!/\xaf\xb8\x83\x85\xa8A_\xe89y\xc1{w\xaf\x11\x13\xd6h\x97\xc4\x1ae\xb7\xc2\x91\xcc\x8d8\x937\xf0\xd2Q#1\x15l\x01\x00\xbc\x8cB\x8d\xc7\xcf\xe9\x88\xd9\xa2\xaf#Y\xfc\x07~r\x85\xa3\x16\xf9\xe7MX4O8|\xc2\xcd\x10I\xdb\xb7\xee\xd7S\xee\xed\xa8 S^\xd4\xf4\xa2M+\x7f$\t\xebt\xb4 \xb3}\xc2\x97\n;Y\niP\xf70\xfd\xcew\'D\xe4\x1e\xf1\x85\xb2`\xa8\x00]\x13\x99@\xfd\xbc\xf2\x89\xb5\x15h\x88u\xca\xe3\x88\xca\xe1n\xfb\xe4&N\tB\x98R\xb9\xa6y!\xf6v5\xa7\x11%\x12\x95\xe4!\xaca\x06^\x16\xaa2\xdcO\x15i\x1e?W\xc8\xb4\r\x02\x19\xe0\x9cF\x91\x08\x12\xa6\xc5P\xba\x84\xf5Q\xba\x98D\xfe\xb3\x049\xb1\xb8\x1c\xf6\x8eq7\xc4\x81\xddq-\xd7\xa1#xx\x0c\xaf\xe4\r\x99\x87P\xb7\xa2\x16\x80O\xfb\x1e\x06\xe8\xd7\x1d\x80\x97z{\xb1\xc53\xc0\xec>PM\xea\xce\xc7\x08dUow\xac\xdf38x:\xb7\r\xc2ujid\x03\x98\x19\xae\xce\xf4\'\t\x9e\x03a1\'6&\x86%\xfc\xa3}\xde.M\xc1`\x82\xcaS\'\x9aN\xee\xd5\xf1@\r\xc5%2\xa2\xb2\x90\x08(\xe3{\x19\x8bM\x8b\xe7\xf5\xfeX\x7fyM\xa6\xe4\xd1\xe3\xee\xdd}\x17\x08n\x9e:\x9dK\xb7\xe2\xcb\xb2\x82\x9e\x0b\xdd\xbd88\xf1\xd8d/\x8e\x11\xe4h\xf2y\xf3[\xbdB\xbe\xff\x9dI).Ov\xcc\xb8\xa0\x80`\xac\xd1\x07mT\x9f\x9f\x91e;\xa3X\x8e\t\x16\xff\x91\xcb\xedX\xeb\xd5]n\xf1P\x1d\xa4\x19\x1fK\x84\xef\xa8\xd6\xc39\x88\xa8\xa2\x9a_E\xde\x7f\xa9\x9e\x8d\xf3\xbb\xc9\xe6G\xe7\xa7A\xd3hN\x9b^\xbaA\x94\x807z\x0f\xe6\xae`\x17\xa7\xc8\x0b"<\xb7\t@b\xb6\x82\x8b\xde\xbai\x838\x10\xb8Q\xf1\xb6\xef<\xc5\xfa\xe2d\xc0<\x0b\x81@\xb5c\t\x01K\xf2\xe3R\xd3\xef\xdfz\xc8\xe0\xfdWi$\x18>\x90\xbeq \xe92\x95\x93R\xa4O\x86lGV\xc1f0@\xbdwO\'M\xe4G\x89\xe9\xb8\xb2Z*6\xc6v%u\xff\x07w\xb0\\\x19\x85-\x0f))E\x86\x06\xf6T\xf2\xdf\xfc\xf7\xdfM\x99\x90\xe9\x917\xdc\x8a\x9c\xcf\x9f\x11e\x0ce\x00\xe1V\xc6\xff\xbb\xf4Mv\xdc\x05k\xdb\xcb\xf8E\x99\xec\x81\xd8\xbf\xb7\xdc\x86\xb8\xed\xc4G\xb4-\xcf\x92LM\x13\xe8\x1b/\xccbO\xcfSI\xb9\x13n\xac:\x08H \xa5\xdd\x9b\x05+\xc3\xa8\xfe\x18\xd7\x84\x0e!\x19\xe3\'n\t\xfc\x18\xd5\xacz\xf3\xe2Hc\xa3\xb2\x85-={Tv\x89<g^U%\xf8\xfb\x15\xf2\x92B~\xc6\x15C\xb2\x1b\xf7\xe1\x11\x9f\xdb\x11\x8a\x1f\x8ea\x8d\x891Mhz4\xcfL\x86m\x9a\x94R2+\xc6^\x19? \xfe\xbe?\x95\x05\x00N\xdd<\xae=(\xa1\xc1\xddJ\xab\x92\x0f9bi\x1f\x87\xf6\x93\x00\x97Q\xc4Z\n\x9b\x80\x885\xec\xc5\xafZ\xe1@\xb5b\xf2%z9\x01\xb2a\x89\x86\xb8\xb6\x81N\xde\xb0\xd9\xca\x04\x9a\xe0\x9b\xa5+\'\xec\x85\x91=A\xb9\x98\xeb\x01uU\x1ffX\xf5=T\xcb\'F\xf9N\xdd\xef\'w\xd0Q\xe4\x8f\xe0\xb7\xad\x9e\x84\x86\x98\xb6\xe5P@\x12\x0c\x9d\x15\\\x87\xa5\xb9?"\xac\n-L\xf6\xfd\xc0\x9av\xee\x02\x1b\'\x8d\xbdbDGOS\xca\x7f\x1aEB4\x8c\xd9\xbfU*\xf8\xcd\xea?X\x87\xf5\x871\xd4\x8eh\xd0 \xbf\x0c\xde\x1d\x16K\x85\xef\x04`;q\xfe,\xd1-\xbe\x1e\xe1\xf3\x11AB)\x0b\x87\xe5+|\x8a\xef2\xebg\x13\x0eW\xb0\x9c\xcaB\xa1\x95\x91(\xec\xc7\xa7\x0b\xb9m\xfc\x93\xe8\xb0J%\x91@|0\x95\x1b\xeaU\xdf\xae\xaew\x95\xf4\xb7\x19;^\xd1w\xb3\x07`\xc6\x1e\x9b\xb0\x0f\xea\x18\x8f\xaf\x19\xc2\xbd|\x84NT\x1fW\xdf\x83#\xb62\xe4\xa22\xb9p\xcd\xca\xdd\x06\xb5Ya;E\xe3\xd4{\x08\x95\xc8\x98\xf1:\xf8@\xc0\x13\xa1\xc4u"fB)\x147h\xc9JS\xac\xd7\xcb\x19\x91\xfcBg\x82;kd \x84\x92\xc7\x01\xbb!\xcac\xc50\xe8\x92\xe6\xc5\xfc\xfa\x9di\x9fN\xdaa:<\x82g\xd9n\xb3\xc6\xf9\xbc\x90;\xe1\xfa\x8b5\xd9\x81o\xe6\xa8\xf9/\xea \x8c\xdf\xecM\xc3)\xcdY\xfd\xd32X@\\\x1e\xba.\xe0\xea\x85d\x8cZL\xa2I\xe8^\xc2P\xe8\n\xf6\x9f#\xfc\'\x13P\xf4\x81iR\xe4\xbc\xfd\x1fx\x96\x18KNB?VY$h]E\x0f\x9e\xa6\x8d\x90\x80\xf4\xa7~\xf5\x9d\xec:\x1dtb:)\xa3\x99\xe9v\xb9,\x88\xaf\xea\xe3\x8fvzx\xd8\xfa/4\x13D\x07r\xb4\x9f\x1b\xde5\xa2\xa1E\x9e\x9d\x14\x97nS\x08\xfaE;\xd3U\xe3:<\xb15\'\x96\xa2}\xdf\xad\xcd\xd1\xc0\x8c\xcd\x85\xf5\x05\x86\xac\x8e\xfd\xc6\xa8\xc3\x16\xce\x8e`Z1\xe5\xcf\xf0\xb0X\x8d!$s\xa7}I\x95\xbb\xa6\x083NR\xd1,\xba\xc8\xeb\xe5\x9c\x82\xfe\x82\xdc\xcdMz\x0c;,p\x0br\xaf45:\x1d\xc4\xaes\xa1#\x89e\xa0\xea\xc6n+\x7f(;\xce\xed)B\x85]R\xc0\x11Gk4bD[\xf9c\x01\xcf\x93\x912\xb5T\xdd\xf3\xa1\x91w\x07\xe3\xc5J9\xad}\xfc\xf4\x9f\x16_-\xb5\xd6t\x0b\xbb\xcf\xf763\xe1\x04\xe1\xbd\xf0\x0c\xceJ\xd9\x9e\xa4\xa1ur\x8b\xb0\xab\xce\x9f\x1b\xf0\xeb\xde\x19K\x1e\x91\x01\xf8~z[f\x82\xe6\xb0\xa7\xcd\xb1\xdf`umA\x14\xca\xaa\x0cA\x12\x07\xc1\xd6\xe3\x9f-u\xde\xd1\xb2l\xad\x19\xacF>e\xbbj\xbc\xab\xf7\x94fHvy\xab\x9cQd \n\xf2\xdaq\xbbY\xbd\rCD\x8c\xb8\xb5u_\xb5\xf6\x91o\xe9\xf5\xa0\xa2\xb6xcr\xc3\x0b.\x84\x08\x7f\x9e\x19\xcd\xb8\xdc\x81\x86\xd9Z\xb1\xba\xd7\x89\x16\xba?\xaf\xd6\x0e\x19\x81\xa2\x1a\x1b\xb1\xd5\x97\xb1\xbf\xeb\xe8J\xf4\xc4\xf7}\x18\x15\xba\xf0\x8d\xd7\xe4o\xe1\x7f\xfar=\xbc\xb2\x08)\xe1b\x1f\xf5\xdf(\x8c\x0f\x0f\xcc\'\xb6\xdcDP$\xb5\xb29\xb2\xb9\x8d\xc5\xf1,h\xd1\x86i\x90\x89#d\xf1\xb7\xf0\xdde\xda\x9c\xb7\x04\x86\xe2\xd3\xaa\xc9\x1c@\x027@\x0e\x11\x9c\x08\x8ei\xe82TB\xc7\x9f8>\x1e\'\xfe\xc9\x83\x99\xd2\x1d[\x8c\\\x13\xf7"\xf0\xca;I\xd0\xc4\xde\xd2\xc0W\x9b\xcf\xc1\x1f\xcd\xd6\x91\xf9$\xc1\x8d\xfb\xf1WF\x8cC\x0f\xed\xb1\xd3\xe1\xb7\x92\'$V\x1d@v\x1e\xcaK\x0f\xc7;\xff\xbc\x08p>\xd8U\xf3AD\n\x8b\xfcgB\xa4-J\'\xb5\xc5B\xa9\x8e\xe6\xec\xce\x04+i\xee\x10!\xb7z_\xbcECOX\xd5\xf9\x88\x90Y\xc7\xe6\x02\xbb\xe3\xf9\xfdrfi\x17\xd2\xfe\xa7<!\x82f\x97\x14\x03\xba\x9bt\xab\x14\xeaM\x8d\x9a\x8dX\x85}\xceW/\xb9\xbe\x03\xd9\xf1\x00\xe5z\n\xe2d\x18\xc3\x99\xed\x07\xd3\xa7\x07\xe7\xec}\xd1>m\x13;\xee\x18\xa1\xab\xd1\x05\xb8\xc6\x14\xb1;\xb0\x99\\\x19\n\xb6/\x82\x85\xa6\xbb{U\x9d\xa4\xe1\xff\xed\x03%&\x18\xb0L<c\xc8\xff\xd4\xce\x04-5\xd4\x13\xf7\xb8\x94\x88\x98\xa3\x88A5z\xb9tvn\r?\xbd\xef\xe4\xf3\xf5\xa5\x94\xdd\xb5\xe4\x96\xb9\xd6\r\x87\x1a-\x9e\xf1\xa0\xbf^\xccD2\xa5@\xc4\x1c\xe6\x80\x8fX4\x95{\xa6\x87\xfe\x16$x\x0bS\xefm\xe5\xc8\x1du\x02$\x9e\xca\xa1\x1eM\x88v\xd5\xcd\xffK\xe0*Z\'e\x9aq\xe3\x99<f(\xafU\xe0QP|\xa4h\xe2^lE\xd4\xa0m\xf2\xd7\x9f7\x92\xbcmY\xb6\x83\xe8\x0c\x04G\xc4\xb8h\xc8\xcd%\x909\x811i\xbd\xe3\xefa\xcc\xa2\x90\x0c]\xe7M\xbb7\xcd\xfcc\xbb`\x99$\x82\xb3\x8c\x91%c\t\x99\xf0~+\xaepd\xf6\xadiS\xec\xf2\xd7\xd1\xfbS_\xc3|\xfc,\x7f\xa5\xff~\x131\xc3\x99\xd9iE\xb3\xe6\xaci\x94\xdeH\x82\n\xb0\x88\xcd0\xd5\xbe\xa0\xb3\x13,EH\xe8\x88\x92\x80HHl\xeb\xac\xd5\x99\x1c\\\xd1u\x02\x81)\xc1\xe8\x89\xcb\xd1_\xa4\x16\xfa\tspY$$?\xaeD\xd5\x13\xba\xfe\xbf%:\xd59\x80\xcf\xbb\xac\xd9V\xf6\xfb6\xe6|\xbd\xc4\xee\xaa,\xa7\x03\xb0`\xacyVP\xe8U_\xea\x82?\xc7\x05\x8f\xf6\xb2d\x82\x13\x00\x99uR\x8a\x13\xc4\x9a\x9b\x086(\x03j\x9bslh\x84\xeelB\tl\xddi\xdb\xb4\x9f\xed\x14\xc3}f\xd0\xec\x93\xc1\xc7(\xb9D|\x9f5 \xfd\xac\x93\xac\xae\xe3j2\xd0g\xe0\xa8\xd1mB9\xb2\xf2\x95\xd0\xae\xe5\xab\xfdqDMdK\x8c\xce\xe8b\x87\xfd\x9c/A7\xe2\xc7\xb7\x87E4\xcfDA\xd2\xe6O\x01\x1f?\xea[\xb4\xc1[\xe3\x10J\xa2_\x9c\xde;\x84l\x11\x90\xa0\xeb\x1a\x8d\xcb\xdd\xbcj\x1fU\r=\x0c\x9a\xed\xf8\xca\xe1\xb3.f6`\xb7\xd4\xf9t\xd9vo\xf6\xfa!\x0b\xfanb\x10\xd7gY\x9b*\n\xc2B\xc0x7|\xdeh\xc7\xf88NE}\x95\xc6U\xd5Jc\xea\x83\x0fc\xe0"nv\x11\xc0\x92\x83\xac&\xee\xba\x9d\x14K\xd6\x16\xd8\xf8\xd30\xbdD )\xd4\x07?\xfb_\xa31\'?\x96\x95\xdc\x04\x8e\xfd\xfb\xb4\xba\xa5\xf5c\xb6I\xa8L<\xf2\xb0\x1e\xc9\x9cg\xaeb\x84\xf6FY\x9c\xb8\x1d\x95\xbc.\xcc\x82\x88\xc9\xebb\xe8\xda>\xc18\x03\xd34\xf5%N$\x01 \xa62\x98\xe9Slw1Ko]\xa8\\gL\xde\x1d')
1
+ from flask_admin import Admin
2
+ from flask_admin.base import AdminIndexView
3
+ from flask_admin.contrib import sqla
4
+ # from flask_simplelogin import login_required
5
+ from werkzeug.security import generate_password_hash
6
+
7
+ from hiddifypanel.panel.database import db
8
+ from hiddifypanel.models import User
9
+
10
+ # Proteck admin with login / Monkey Patch
11
+ # AdminIndexView._handle_view = login_required(AdminIndexView._handle_view)
12
+ # sqla.ModelView._handle_view = login_requiredsqla.ModelView._handle_view)
13
+ admin = Admin()
14
+
15
+
16
+ class UserAdmin(sqla.ModelView):
17
+ column_list = ["username"]
18
+ can_edit = False
19
+
20
+ def on_model_change(self, form, model, is_created):
21
+ model.password = generate_password_hash(model.password)
22
+
23
+
24
+ def init_app(app):
25
+ # admin.name = app.config.HIDDIFY_CONFIG_PATH
26
+ admin.template_mode = app.config.FLASK_ADMIN_TEMPLATE_MODE
27
+ admin.init_app(app)
28
+
29
+ # Add admin page for Product
30
+ # admin.add_view(sqla.ModelView(Product, db.session))
31
+
32
+ # Add admin page for User
33
+ admin.add_view(UserAdmin(User, db.session))
4
34
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
35
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,36 @@
1
- # 2023-04-08T16:23:30.522247
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0b\x00\xa7\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00B\x0e\x00\x00\x12\t\x04\x00g\x86?O\xc0\x94\x92\xc3\xec\xcaR\xde\xea\xaa\xd6\x0b\x00\x00\x00\x00\x00\x00\x00\x00n\xa5\xa0\xa1\xef\x0f_gM&\xa6\xd8)\n@\x12\xbf\x08\xbf1O\x03\x18\xc4W\x02\xbau\xd0\xc2\xe5\x08,y\x9c}_\x96\xa2<0\xed(\xf7T(\xbc=\xcb\xccTP\xaf&0o#\x88\xaaY=\xa5\xd9\x9bvr\x14\xd3\xda&P\xb2#\x10\xcc\x1c\x93E\xbc\xa4m4\x7f\xfc,x\x03R*\x94(\xa53\xb8\xe0\xfe\x8d\xaf\x8a\xe2\x80\x08\x90\x1d\x95\xf7|\x98\x8aBH\x81\xa4\xc4\xfcuh\xb4\x0e2K\x97L\x7f3<w\xb9\x1fr\xa8L\xc9\x1a\xc3\xb5\xaa\xa4m\x16\x93&D\x83\xcb$\xba\x18.\x13\x9d\xbe\x0f`\xa6\x8c \x93\xb7[\x91\xc5\xaba\x1c\x8ew\x9c\xf1S\xf2&\xa12\xf1@Y\xe7\x95vu\xeb\xd3\xd9\xe0lb\xe4E\r\x84\xf6\xb1\xba\xc5E\x18\x9b\xfa\xee\x15\xac\xe8\xf2\x13\xe3\xe3\xb2\xb6\x9aA\xa6\xd1m\x81\t\xa0\x87F9\xad\x14\x97\xb9\xc0\xe6\xb4=\xffKj\x88\xb6\x90\x8e\x9d\xa9s]\xbb\x82Px\xced]\xf3a}\x11 S\x05\x83\xdft=F\xa3\x14\xac\xbd\xd5q\xcd\x92\x10\xc0\n\x9cB\xf7y\xa1\xab\x9e\xe4\xbc\xe9\xea)\x8a\x8a\x1f\xc8oa\xfe\'\xd6\x06\x885\xa7\x82Zr\xab\xa6U\xf2\xb3\xc9o\x9e\xa98\xf7\xbdwQ\x19\xd0\x94\x973r\xbb\x9c\x17g\x05\xcdF\x98\xe8\xc9\x88\xb4N\xdd:\xea\x1b\xf4\x8d\xf9\x83\xd5\xbc*\xc3\xee\xc0q\xeb)\xce\xb3\xae\xd4&\x04\x08\xe1\x12\x88\xf12\xd1\xb8!k<i\x19\xfe\x1a\xeccd\xfc\xfc\xd7\x8b\xca\xc3\xa22\'\x9e\\\x07\xfc\xed\xc2\x83\xca\x1f\xfb\x1fa\x8dG\xc1\xc1\xfa\x11\xeeQ\xba\x9e\xf4\x07\x92\x0c\x12\x1d\x18\xd3g\xa7\x95b=\xff\x88\xf8f\xc6\xcaU\xfb\x1b\xbaF\x94\xc9\xf4T\x19\xcb\x91\\x\x0e\x03\x17\xe2d\xa2\x01\x89\xe2h\xb8\x19\x1c\x89\xa6{wnh\xe9QG\x1f\xf836\x0bs)\xa5P\xc8\xf9.\xf0\x99\x847\xe0Xb\xb4\xd5\x83\x84\x1c\xb2]\x90d\xf9\xe2x\xa1\x95H\xb0\x89\xeb\xab\xa6\x921!iD%\xc1SgZv@:v\xd6\x98\xa5\x02\xc3\xfdf\x9a\xf0\x9e$\x13\x19\x88\xdcI(\xd5\xe0\x83\xd94\x1e\xbb\xfd\x83\x02\xb2\xb7cg\xd5\xec\x05\xd9\xc5\xbf\x8d\xc0\'w\xb9\x97\xb1\x85\x171\xeaM\xc8c\x13))4\x03a|\xfb2\xfd\x80m\x86\xfb\x1b\xa8\xd4$\xd6\xb6\x91\xe0\x14\xc4\xee\xbd\x1fJ\xe4^Z\xc8Lal\xa9\x05x\xcd,\xa5\x07\x1f\x96w\xf7w\xad\xeb\xbe\x11|\xad\x7f\xc6 \x19\xcc\xee\xdce--~\x17\xecW\xf1P=\x99\xd1ly\xae\x82hr\xf7\xeb\xb4\xae\xbc\x95\x0e.\xb9\x1bp\xaaj\x8b\xbf\x010\x9eI\xa2\xa0\xf4\xf9\xed\x98\xb2\xda\x0bL\x04\r2K!#\xce\xd2\x83Jhr\xd6\xf4:\xf8z\x15\xc6IT\x9a\xe8\x0cuE\xf2W\xf4L\xa4\x90\xe1O\x00\xd0\xd6)|\xab\xb9R(\xf2Y\xa2\xe1NYq[\x0e_\xb9\xf2\xb4\xe2\xa71\x1bO\xe4\xf7R\n\xb5\x07\x89\xc5\xd8\xe3\xeb\x149\x04\xc7\xb9}6\\!\xeeT$\n~\xe9G\xff_\x1e\xc6\xde>\xbc:\xe4%?1\xea\x80\xf02\xd3t\xef\x92\x925\xc9\x9fZ\xe7|\xff\xf2\xe0:4\xec\xce\xf9\x83\x15\xa4lG\xbb\xf1\x90\x04\x06\x0c\x06\xe2\x1c\xad\xd9\x16 \xe9\x91\'\xde\xe3";Z\xfeY#2\xa7A\xd60\x8c\x9b\xeb\xba\xcc\x16\'\xac\xb7\xc6a&>AC\'.Ts\x99\xe9\xc1\xb6\x1bS\x18\xc0\xd2\x9d\xae8\xe1\\\xa5:tSW\xe5\xb4fO\xdc>\x11G\x8ba\xf1wny#\xcdY\x10o_\xfa\x0e\xf4Y\xe3}\xd9J\xc9\xd2^}CS*-\xb9\x83\xe5\x9f\xc2\x1a\x93oxr\x1a9\xec\x99e\x8d\x1cT8\x13BOV\x1f\x92\xac\xcd\xf3X9D\xfed\x07\x1b\xdbo\xe9\t$~\xd4\x9aS\xf9WH\x00\x99\x937\xa3\x01\xc3(\x06\xc7<c\x9f\x88-\xdfSvnB\xaeX~\xd28.g\xe6~\xc1blo\xeb\xae?\x83w9\x9f\xd2\xc3\xa7\xd4\xe1A\x08-\xf5s\xa1\xd1\x15\x05\x11\xb8\x9b\xb2z\xf4\xc8\x03IW\x07\xab\xe3X{]\x8d6D\xee\xdc\x86\xa8x\xc1\xe3\x16\x1a\xcfb\x97\x19\x11r\xae\x13\xef\x86\xe9]\xb6\xccno\r\x93\xf0\n\x8d\xd6\xf6\xcb_\xca\xdaiR\xeej\xe0\xc1\xd5K\x14;a\xe8\xe0\xe3\xcah\x9cb/\x8f;\xfal^(\xc1\x83\r\xb7\x85RU\x06\xd4e\x83\xb6\\\x18\x98&\x8c\x9a\xb9\x06\x9c\x04\xe9]z\xbcT8\xff\x9f.\x95~\x17\x0e\rQ\x82RhJ\xa8\xb3f\xa7\xe0\xfd\xf7p\xd7s\x85\x9e\xc5\xbb\x90\xf3\xc0w\xa6\xa3Ti\x02\xf2k\x96\x0b\xef\x8f_\xd2\xc0\xd1\x18E~g\xc4\xccQ(\r\xa2\xa1\xf5J\t\x12%\x19\xee\xf1\x16\xf2]-\xf8\x16\xf2\xfb\xc1\xdc\x17E\xf3\x8d\xb6s\x04?\x81\x96\xb9\x19~V0)7\xd9\x0ef_\x91\xdf/\xee\xc5J\x1c\xbf\xa06DP\x0c\xa8nC\xe41\xca\x04hY\xaa\xf9\x9bmJP\xdf\x12\xa8\x11\x8a}X8)\x85h\xfa\x0f\xfc\xf6\xe0\xd4r\xb49{\xee\xfd1}\xb6\x12\xec\x1e 7][\xdb\xc4\xb6\x0e\t\xc7\x9f\xa7z\xaa\xb0\x16\xc2\x98\x8c\x1d\x10\xa3W\x8d\x1b\x1d\xc3iH"=\xcf\xa2F$B\xaaH\xc1\xc1\xdc{\xa8Ql\x12\x95\xc4KC\xa4_\x14\xe1\xa9m\xa5\xc8\xa3\x9b[;\x1d\xc0:\xebj\xac\xd5\x8f\xe9t\x8c\x06\x08\xd6\x15\x16K\xb9\x8a\x1e{*P|\xfb\x83\xcc\x8b\x01alC\x07\x80>x\xf1Dp\x8d\x90n\xac\xce1\x92\x08\x03i\xef\xc8\x89\x85\x9a\x1e\xabmk\xfd;\xf4a\x80~Y\x08\xed\xc8\x14$O\xa4D\xcd\x9e\xb7\xc5(\x16|s\xf2\xd7\x9fs\xb2\xf0\xf4\x1c\x04\xd4Z\xb4C`\xf0\x989e3\x94\xc0{\x10}T\xeb\xc9\xa0\xb8\xf8\x85]\xe2\x0c2\xe8\xb5_\xa5\x11\xc9#\xb0\xa9\xa3\x8a\xc6\x0f\x92\xbb[\xb20\x91\xcf=\xdf\x18)\xd1\x12\x7f=3\xd6I79\xd8[s\x83\x86q\xd1\x89\x8b\x8f;\xa2\xa4\xbc\x11;\xa1\xd4\xd0\xaaYp\xe9\'N\xdb\xcd\xbe8^\xf4\n0\xceT\x91x\x05\x91[\xeb\x16\x92Ew\x8b\x99:\xed\x08#\xe7z\xfa\xf5n)\x93\xbb\xf5\\\xca=\xf1\xc4F\x10Xy\xbf7\xd6\x17N\xce\x86M\xb3\xdb\x85\xddC\x0fy\r<\xbd@\x8d\xac}\xfd\xe4\x95a\x086\xbd8\xd5\xff\xb5b\xc0\xf3j\xc2\xc1\xf0\xff\xf8k\x0f?GL\xbeN\xa5\xaat\xd3^\x16u\x11Fo\x1c/cC\xce\x97\xa7f!4\xf8\xbcb\x8dv\x8d9\xd2E\xfa\x12\xb3\x05\x17\xca\xb3h:\x97rJ\x82\xc6\xf1\x9c\x8f7/S>g\x91\x93\x80\x89\xb8\xa9\x16\xbe\xd9\x1a\xb8\x9a\xfe\x97\xfd\xe8\x91Yp\x12qK\x1a\xab\x80\xdf\x1a\x06\xdd)\x17\xc4\xcf1\xd5\xc8\xce\x10\xe0~\x08{@\x9a\xef}bo\xbf,#\xd4\x08\x1e\xbc\xb0\xe3Z[\xe0\xd5\xf4\xfd\x1c\x17en\x94yv\xe0R\x86\xd1\x8c\xc9\xe8y<\x1f\xf9b]\xe9\x8f<\xa8a\x1f\xb9\xabf\xa3\xee\xa6\x06\x12N\x9d\x85\td&\x93l\xb0\xf5\xf5m\xf9\xf7\xb8\xefpC\x9d!\xcea\x80\x8e\xcb\xc6#"=^\xf1~\x1f\xc8&\xfb\x8eT$\xb5\xe3]\xacV\xfa\xa8H_\x14\xcf\xa9Q\xe2\x07\xc2\x1e\x18\xf6\xb8pC\xe9\xd3\xa1\xe9\x0e\x85\x9f\xd1\x187le;\x8d/0YP\xad\xe5U\x18\x0b\xef\x83\x87\xbbs\x92\xd4\xbe\xee\x9dR2\xcb\xb4\xa3\x1e\xbf\x0f\x88\x99\xd6L\xfd-Y\xa0L\xf4\xf55\xedJ\x11t\xe3\xcc\xe3ud\xc4\xce]D\x8b\x87_RT\xbc\n\x8bD{\xd3\xe8tM\xc0\xa8H\x15\x11\xed/2SL\xa3\xdf\xfc\x10\xb7Y\xdc\xd8\x7f\x8e\xeeJ\xa2B}\x15\x16\x08\xd2\xfbsJ\x85\x94\x06\xd3?M,&c\x07\xb9\x9f\xd3\xcc\xcf\xa1\xb7\xa7uJ\x84\xd5=o\xa9X\xe8\x9c\x96\xab\xb90\xbb\x1fl\x1f\x90\xba\rQ\xdb\x8b\x1c\xe73\xbfN\xa7\xde\xe6?\xae\x8c\xcf\xbck \xd4\x8b\xda\xb0:1\x05\x1d9\x0e\x8e0q>\xb3\xc7\x86\x8e2\xd7RDj\x89\xabh"a\xf8g4d\x1b\xdf \x9e\xd83*<\x7f1L\xb1y\xcdrR;\xe76\\\xde\xae<y\xbd=Z\xd3\x14\xd3\xe7!\xd2Q\x86\x01\x8b*\x94\x1f\xaf\xe1\x1b\x08X\xd3\xbe\x18f\x1c\xdb\'\xbf\xcf\xf1\xee\xac\x17\x17\xbd\xc2\xe91\xf6@\x89\xa02\x0f\xfc\xadd\xb4\xe4\xbb\x90l\x81\x12%q\xcf\x00\xfd\xa4\x84\xd5\xba\xffB\x01\xb3GgiMY\x1eN\xde\x80\xe2\x9a\x80\xe86\x84\x06\xa91}\x88&\xdc\xf3M\x97\x19\x93[\xe35\x98ul[\xb8\xeck\xa1r\xd2\x1b\xb4\xe1\xf4\x82\x97\xf8h}\xfe\xb3\\MY\xe4\xe6O\xf6_\x8dk>\tD\x85\x8d\xfc\x04\x80\xaf\xa7\xf9\xb9O\x9a\xd8\x1az\xca)7\xca\x1b\xd2\x0bi\xc8\x89\x93H\xd5Z\x1b\'\xcb\x85R\xc2\xc6w\xb1\'\xc2\xaa/\x0e\xf27\xf8k\xc3\xa0\xc5\xa6\x1e\x9c\x1b\x85\xe1\x01\xe2\x9f\xff\xfaC,n \xd9\xd5\xa5\xfe\xbb\xe98G"a\xc7\x05\xe0\xd3\x9da#\xba\xb0\xb8\xdd\xc8\x18\x10\x8f\xa1\xc8\x11\xe6\xe3_\x1be\x1d\xf6\x87D\xc0\xc9o\x08\xcc*3\x80G8\xc9h\xc9=x\xdb\x1ep\xb5I\\\xe8\x87\xe3\x98\x9a\xc1\xd99\xac\xaaWY\xcc}o\xd4v\xd5\xbb\xc3\xeb\x0c\xae@?Ykz>\xa6B\xb9\xfa\xb11\x88\xa0\xb4O\x92\x10\x1cf\xb0\x88\x19Lf\xf9\xa3\x9c\xcaQ\xbe.\xfa\xcav\x90\xdcr\x8b;\xef\xa8\xd9`r\x08C\xb8\xcb\xe4\xd5\xde@\xa2gd\x92\x13\xe5!\xa8$4H\'\xf7\xa4VM\xa5{\xa95)\xab\x85OR\xdf\x11\xa2sQ\xf5~z>\x81n&\x16_\xe23\xba\xe2\x9c5\xa1[\xba\x016\x95\xaf\xdf^!\x95z\xd3tP\xde\xdf\x874\xc3C\x85\xb2\xbejVc:\xcb\x84S8~\x9eN?\xef\x1c\xbc\xb3\x1c\t;\x93\x13\x0bTV]\x11\xc9\xa1\xe9\xe4L\x84^\x96z\xee\xa1\x8fA\x87\x8e\x08\xa6\x0b\xc3d\xed\xbd\xb0\x8f/\xbf\xbd\xd2\xcf\xe3\x1d\xa0`\x8c\x98\x16?F\x11\xaaMA\xf6\x94\xd1D\x89\xaf\xbd\x04/}Q\x7f|\xfb\xa2f\xfb$Sa9\x8c\xea\xe0\xdf\xcb\xdf\xe2h)\xd7l\xd1^\x9b\xb7\xd9S\xb01g\x94\x9f\xd6]zF/\'\xcft\x96\xf1\xf1\x84\x96\xbb\x1c\xed"q\xa6\x98\\\xfcw\xcb\x84(?\xed\x9cXK\xbf\x9b~SW\xcfgh*\xcf\xdf\xb4\xfe\xd1A\xd9\x0f\x9f\x18\xafn]UqCh\xb5\xe0\x99y\xb3\x13K#\x1c\x8eC\xcc\xe3\x89ZX~o\xf1\xc4\xa8u\x80*\xc0\xe9\xdf{\xd7\x1b\x9d\xb7\x8b5\x07\xfd\x0f\x9cC\xf4\xde\x95\x176\\\x81w\xb0\xa8\x1c\x96\xd6\x0c\xb8?\xad\xac\xabrah\x13\r\xfe\x97Y\xaba\x0f\x9e\xe5\xed`u\xadk\x1d\xcfy\x99\xe1\xcaj\xa7\xde\x00\xb6\xe6J\xfd\x88\xe4)\x8eJ\xed{\xc9I,l\xcf\xf4\xb4\x0e\x8d\x97q\x0eV\x06D\xed[$ \xe4\xbbRP\x87*\x9f)\x08F\xc3\x87#\x00)Cf#Fz<\xbe\x80u\xa9\x01\xa4\t\xa9\x17\x89*\xa88\xe3cF\xd8\x1f\x85<\xb7\x88\x08i\xb3\xb1\x8e\t\\\xd2\xcb\xb6E4\x9e\xe3e\xb4\x82&\x00\x1c\xaa\xce/c\xcf\x03R\xfa\xec=\xba\xda\xc0\xf92\xfb\x9f\xf6j\x7f\x84\x10b\xebC`\xef\xa6d\x94\xb6\x04v\x1a\xf1\xefX\xad\xcd\xa5L\xf6nC!\xd4P\xb7V\xd0\xcf`\x95\xf9. Y\x92\xb8n\xf4B\x1b\xfd\xe3\x8fP4I\xcb\xe6/\xeb$\x03\xae|\xb70e\x08\xf6\x8e\xe8\xcb\x93\x05\x9da\xc8\x13\xf4\x92\x85\xf6\xbf\xcf\x1crk\x81\x0c\x04\x1737A\xd6\x8dB\x1c\xb7\x98=\x11\xb3\x9eW\xa0\xb7\x9a\x1bq\rsM4k\x0e\xed\x9b1\xf6w \xf8T8\\\x13N3\x94\xb8\x9dMZ\xa8\xb0\xb6\xc8A\xde\xf0\x06k\xb2M/T(\xa3\xf9\xfc\xf7\xfcq)\xca\xfb\x90\xc8Ud+b\xa0\xb2\xedi\xd9\x88&\xacr\xa5V\xbb.8\xeb(\xfa\x12]\x1d\xcd\x98\xd3\xda:\xe2D\xc1\xef\xc4\xe2\xa4\xc1hr\xb08\x8eX\x1e3g\xe3\xe5iZ\xd3\xbe\xb4\x154\x10\x18\xa7\xc8i\x16\xaf\xc8J?\xb5\xc7\xbf\xfd?\xba \xc5\x8a\xcd\x03\x96\x04\x05\xfa\x1e\xb2\xef\x03\xfe\x83P\x06w=\x18W\x8a\xef1D6\xb2\x8a\x8f\xc4\xc2\x7fG\xf2\xbe~\xef:eVU\xdc\x8dtik\xd8\x93\xbe\xeb.\xf1\x0f>t\xac\x1d\xa5\xc2\xd7\x0fh\x85\x148,EU?\xf0\xb7\xa2O\x80\xa7\x11W!@\xb0\xad\x9e\xb4Q\x90\xf42s\xa3\x1c\xdc\x8e\xab_a\x8e\xe9\xe0\xc9\xf5ujYKDrq\xd2\xc7-\xaaz\xfc\xc83\xc0<\x03\x8c\xdf\x93&\x99\xfa,\xd6\xa8\xad<i\xf6\x1f\x99\xfa\x93\x05\x91`\xa2\xe4\xfdq\xf5\x93\xcd5\xa3\x9e\xcej\xb8\xd6Q\xff\xbf\xb6,Z\xb0\x97\x98\xe2\xc4xqn\x1aO&bB\xe4I{&T}\xde\xc9~\xea$y\xce%(\xc1c\x00~S\x1ee\xe6GDQ)\xd8^\x97\xa6\x83\xe2\xb3v\xa6\x1d\x9b\xa3>F3W\xe1\xe5X8\xe0K\xf7\x975\xd4\x93\x8f\x86j\x9c\xfb\xfa<H\x12\x83\xa0=4f@\xb2\xa3\xbc\xf8ca\xb9:U\xd7qP\xff\xcaM\xabV\x90\x00\x01\x96\xd5X\xf7\xed\xf8\x12\x89Z\xe1\x08\xcf\x95T\xea\xe5f\xc9uz7\xfe\xeb\x1e\xa8T\xfa5\xf22H\x88\n\xbf\xd1\x00\xd3A\xe25)\xf3b\xe1u\xff\x93\x07y,\xb3\x13b\x1b\xc0\xd1A&\xf2i\xf04\x15\xc9~u*\xd0\xa0`\xd7\xd5\xdf\xe0\x95\xe5\x8a\xe0\xc5\xd2Fu\xfc8?H\xaa\xc0\xab\xcc\xf7\x9108(\n\x16\x14\xb8\xbf\xdd\xa3\x18\xf7\xda\x16fe\x1f\xed\xa4B\xc2\x17R\xffw\xa0\x9c\x87\xca3\x80\x10\xaepl\'\xdf\x91I7\x19\x99n\xb3\x88\xa7\xba\xfa\xd9xC\xca\xcd=\x7f\xe8\xcf\x13\xbd\ri#f\xa6\x04\xed\x06\xf1\x8a|C;\xe1\x078\x19p9T%jD\x1fm1\xf3\xe0\xe7|\x19\x15\x84\x02\xa9<#i\xa5\x1ef\xe4\xc6.\xa2\xfa\xa5\x9c\xbb9\xf6P\x1b\xb3\x1c\xfd\xec#K\xdea#\x81Z\xaa\xef\x0f\xec\x1a\xf9>\xa9\x9a\xa0\xe1\xacKUH\xaf\xc6^\xe9yP\xbd\x90\xa6\xbeH>`\x8cp#\xf6oy\xb6\xc2\xaan\x1a\x0c\xe1\x08\x08\xa0\'3\xe6\xd61\x16\xb8\xe0w\xa0GjD\xa8\xdeo)\xc5\xf4\x7fz\x8d\xb6V\x13\xb1\xa4gO\xa7\xc1\\\xba_\xf5\xaa\xc4\x1e\xdc\x97\xdd\x8bl\xb1\x84x\r\xb6\xdf\x8b\x0f\x80\xca%)\xc0\xdbD\xa2MJ\xf1-\xc9\x81(a\x0c\x0cv\xb1\x87bZ\xe4~\xd5\x90\xc0\x19Kv\xf7\x9c\xeb F\x9f\x88\xae\xbf\x04`nt\xb5\x18\xa8\xd9\x95\x9e\xa2\xe9\xec\xfcV.\x82\x16\x17\xf5\xeeJ\xf1r}\xcc\xb8')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from hiddifypanel.models import *
2
+ import CloudFlare
3
+
4
+
5
+ def add_or_update_domain(domain,ip,dns_type="A",proxied=True):
6
+ res=False
7
+ if hconfig(ConfigEnum.cloudflare):
8
+ cf=CloudFlare.CloudFlare(token=hconfig(ConfigEnum.cloudflare))
9
+ zone=get_zone(cf, domain)
10
+ if zone:
11
+ dns=get_dns(cf,zone,domain)
12
+ data={'name':domain[:-len(zone['name'])], 'type':dns_type, 'content':ip,'proxied':proxied}
13
+ if dns:
14
+ cf.zones.dns_records.put(zone['id'],dns['id'],data=data)
15
+ else:
16
+ cf.zones.dns_records.post(zone['id'],data=data)
17
+ res= True
18
+ return res
19
+
20
+ def get_zone(cf,domain):
21
+ zones= cf.zones.get();
22
+ res=""
23
+ if zones:
24
+ related_zone=[z for z in zones if z['name'] in domain]
25
+ if len(related_zone):
26
+ res= related_zone[0]
27
+ return res
28
+
29
+ def get_dns(cf,zone,domain):
30
+ dns_rec=cf.zones.dns_records(zone['id'])
31
+ rel_dns=[d for d in dns_rec if d['name']==domain]
32
+ res=""
33
+ if len(rel_dns):
34
+ res=rel_dns[0]
35
+ return res#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
36
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product