Guest User

Untitled

a guest
Jul 14th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.98 KB | None | 0 0
  1. <?php
  2. /*
  3. * @ PHP 7.2
  4. * @ Decoder version : 1.0.0.4
  5. * @ Release on : 09/06/2021
  6. * @ Website : http://EasyToYou.eu
  7. */
  8.  
  9. global $WPSAF;
  10. $WPSAF = new WPSAF();
  11. checkupdatewpsafelink();
  12. class WPSAF
  13. {
  14. private $delimeter_wp_safelink = "wApbsCadfEeFlgiHnik";
  15. public function __construct()
  16. {
  17. add_action("admin_menu", [$this, "wp_safelink_menu"]);
  18. add_filter("home_template", [$this, "ch_register_page_template"], 999);
  19. add_filter("page_template", [$this, "ch_register_page_template"], 999);
  20. add_filter("single_template", [$this, "ch_register_page_template"], 999);
  21. add_shortcode("wpsafelink", [$this, "wpsafcode"]);
  22. add_action("init", [$this, "custom_rewrite"]);
  23. add_action("in_admin_footer", [$this, "foot_admin"], 999);
  24. add_action("template_redirect", [$this, "doRewrite"]);
  25. }
  26. public function custom_rewrite()
  27. {
  28. $wpsaf = json_decode(get_settings("wpsaf_options"));
  29. if ($wpsaf->permalink == 1) {
  30. add_rewrite_rule("^" . $wpsaf->permalink1 . "/(.*)?", "index.php", "top");
  31. flush_rewrite_rules();
  32. remove_filter("template_redirect", "redirect_canonical");
  33. }
  34. }
  35. public function wpsafcode($link)
  36. {
  37. $wpsaf = json_decode(get_settings("wpsaf_options"));
  38. $link = array_map("trim", $link);
  39. $link = implode("", $link);
  40. if ($link[0] == "=") {
  41. $link = substr($link, 1, 999);
  42. }
  43. if ($wpsaf->permalink == 1) {
  44. $linkout = home_url() . "/" . $wpsaf->permalink1 . "/" . base64_encode($link);
  45. } else {
  46. if ($wpsaf->permalink == 2) {
  47. $linkout = home_url() . "/?" . $wpsaf->permalink2 . "=" . base64_encode($link);
  48. } else {
  49. $linkout = home_url() . "/?" . base64_encode($link);
  50. }
  51. }
  52. return $linkout;
  53. }
  54. public function wp_safelink_menu()
  55. {
  56. add_menu_page("WP Safelink", "WP Safelink", "manage_options", "wp-safelink", [$this, "wp_safelink_options"], "", "25");
  57. }
  58. public function ch_register_page_template($page_template)
  59. {
  60. global $wpdb;
  61. $wpsaf = json_decode(get_settings("wpsaf_options"));
  62. $urls = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
  63. $URI = str_replace(["http://", "https://"], "", home_url());
  64. $URI = str_replace($URI, "", $urls);
  65. $url = explode("/", $URI);
  66. if (isset($_GET["redir"]) && !empty($_GET["redir"]) || isset($_GET["wpsafelink"])) {
  67. $go = "";
  68. switch ($wpsaf->permalink) {
  69. case 1:
  70. $go = $url[2];
  71. break;
  72. case 2:
  73. $go = $_GET[$wpsaf->permalink2];
  74. break;
  75. case 3:
  76. $url = explode("?", $url[1]);
  77. $go = $url[1];
  78. break;
  79. default:
  80. if (isset($_GET["wpsafelink"])) {
  81. $go = base64_encode($_GET["wpsafelink"]);
  82. }
  83. if (empty($_GET["redir"])) {
  84. $_GET["redir"] = base64_encode(home_url() . "/");
  85. }
  86. echo "\t\t\t<html>\r\n\r\n\t\t\t<head>\r\n\t\t\t\t<title>Landing..</title>\r\n\t\t\t\t<meta name=\"referrer\" content=\"no-referrer\">\r\n\t\t\t</head>\r\n\r\n\t\t\t<body>\r\n\t\t\t\t<form id=\"landing\" method=\"POST\" action=\"";
  87. echo base64_decode($_GET["redir"]);
  88. echo "\">\r\n\t\t\t\t\t<input type=\"hidden\" name=\"go\" value=\"";
  89. echo $go;
  90. echo "\" />\r\n\t\t\t\t</form>\r\n\t\t\t\t<script>\r\n\t\t\t\t\twindow.onload = function() {\r\n\t\t\t\t\t\tdocument.getElementById('landing').submit();\r\n\t\t\t\t\t}\r\n\t\t\t\t</script>\r\n\t\t\t</body>\r\n\r\n\t\t\t</html>\r\n\t\t";
  91. exit;
  92. }
  93. } else {
  94. if ($url[1] == $wpsaf->permalink1 && $url[2] != "" && $wpsaf->permalink == 1 || $_GET[$wpsaf->permalink2] != "" && $wpsaf->permalink == 2 || 0 < count($_GET) && !isset($_GET[$wpsaf->permalink2]) && !isset($_GET["safelink_redirect"]) && ($wpsaf->permalink == 4 || $wpsaf->permalink == 3) || isset($_POST["go"])) {
  95. if (!$this->ceklis()) {
  96. echo "Your license is not valid. <a href=\"https://themeson.com/license/\" target=\"_blank\">get license</a>\r\n\t\t\t\tor <a href=\"http://themeson.com/safelink\">buy it!.</a>";
  97. exit;
  98. }
  99. if (isset($_POST["go"])) {
  100. $safe_id = trim(urldecode($_POST["go"]));
  101. } else {
  102. if ($wpsaf->permalink == 1) {
  103. $safe_id = $url[2];
  104. } else {
  105. if ($wpsaf->permalink == 2) {
  106. $safe_id = trim(urldecode($_GET[$wpsaf->permalink2]));
  107. } else {
  108. list($safe_id) = explode("?", $urls);
  109. }
  110. }
  111. }
  112. if (strlen($safe_id) == 8) {
  113. $sql = "SELECT * FROM " . $wpdb->prefix . "wpsafelink WHERE safe_id='" . $safe_id . "'";
  114. $cek = $wpdb->get_results($sql, "ARRAY_A");
  115. $safe_link = urlencode($cek[0]["link"]);
  116. } else {
  117. if (base64_encode(base64_decode($safe_id, true)) === $safe_id) {
  118. $safe_link = base64_decode($safe_id);
  119. $safe_link = $this->decrypt_link($safe_link) ? $this->decrypt_link($safe_link) : urldecode($safe_link);
  120. } else {
  121. if (strpos($safe_id, $this->delimeter_wp_safelink) !== false) {
  122. $safe_link = $this->decrypt_link($safe_id);
  123. }
  124. }
  125. }
  126. if ($safe_link != "") {
  127. $sql = "SELECT * FROM " . $wpdb->prefix . "wpsafelink WHERE link='" . urldecode($safe_link) . "'";
  128. $cek = $wpdb->get_results($sql, "ARRAY_A");
  129. if ($cek) {
  130. $data = ["date_view" => date("Y-m-d H:i:s"), "view" => $cek[0]["view"] + 1];
  131. $wpdb->update($wpdb->prefix . "wpsafelink", $data, ["ID" => $cek[0]["ID"]]);
  132. } else {
  133. if ($wpsaf->autosave == 1) {
  134. $linkd = urldecode($safe_link);
  135. $safeid = substr(md5($linkd . date("His")), 2, 8);
  136. $data = ["date" => date("Y-m-d H:i:s"), "safe_id" => $safeid, "link" => $linkd];
  137. $wpdb->insert($wpdb->prefix . "wpsafelink", $data, "");
  138. }
  139. }
  140. }
  141. if ($wpsaf->content == "0") {
  142. $args = ["post_type" => "post", "orderby" => "rand", "posts_per_page" => 1];
  143. $the_query = new WP_Query($args);
  144. if ($the_query->have_posts()) {
  145. while ($the_query->have_posts()) {
  146. $the_query->the_post();
  147. }
  148. }
  149. } else {
  150. if ($wpsaf->content == "1") {
  151. $ID = explode(",", $wpsaf->contentid);
  152. shuffle($ID);
  153. foreach ($ID as $id) {
  154. $posts = get_post($id);
  155. setup_postdata($GLOBALS["post"] =& $posts);
  156. }
  157. }
  158. }
  159. $_GET["ads1"] = $wpsaf->ads1;
  160. $_GET["ads2"] = $wpsaf->ads2;
  161. $_GET["logo"] = $wpsaf->logo;
  162. $_GET["image1"] = $wpsaf->image1;
  163. $_GET["image2"] = $wpsaf->image2;
  164. $_GET["image3"] = $wpsaf->image3;
  165. $_GET["delaytext"] = str_replace("{time}", "<span id=\"wpsafe-time\">" . $wpsaf->delay . "</span>", $wpsaf->delaytext);
  166. $_GET["delay"] = $wpsaf->delay;
  167. $_GET["adb"] = $wpsaf->adb;
  168. $_GET["adb1"] = $wpsaf->adb1;
  169. $_GET["adb2"] = $wpsaf->adb2;
  170. $safe_link = ["second_safelink_url" => $wpsaf->second_safelink_url, "safelink" => $safe_link];
  171. $safe_link = json_encode($safe_link);
  172. $_GET["linkr"] = home_url() . "?safelink_redirect=" . base64_encode($safe_link);
  173. $code = base64_encode(json_encode($_GET));
  174. $_GET["code"] = $code;
  175. if ($wpsaf->newsafelink == "on") {
  176. $page_template = dirname(__FILE__) . "/template/template2.php";
  177. } else {
  178. if (!isset($_POST["newwpsafelink"])) {
  179. $page_template = dirname(__FILE__) . "/template/" . $wpsaf->template . ".php";
  180. }
  181. }
  182. } else {
  183. if ($_GET["safelink_redirect"] != "") {
  184. $safelink_redirect = json_decode(base64_decode($_GET["safelink_redirect"]), true);
  185. $link = $safelink_redirect["safelink"];
  186. $link = urldecode(urldecode(trim($link)));
  187. $sql = "SELECT * FROM " . $wpdb->prefix . "wpsafelink WHERE link='" . $link . "'";
  188. $cek = $wpdb->get_results($sql, "ARRAY_A");
  189. if ($cek) {
  190. $click = $cek[0]["click"] + 1;
  191. $data = ["date_click" => date("Y-m-d H:i:s"), "click" => $click];
  192. $wpdb->update($wpdb->prefix . "wpsafelink", $data, ["ID" => $cek[0]["ID"]]);
  193. }
  194. if (!empty($safelink_redirect["second_safelink_url"])) {
  195. $link = $safelink_redirect["second_safelink_url"] . "?wpsafelink=" . $safelink_redirect["safelink"] . "&redir=" . base64_encode($safelink_redirect["second_safelink_url"]);
  196. }
  197. wp_redirect($link);
  198. exit;
  199. }
  200. if ($url[1] == "wpsafelinkk.js") {
  201. header("Content-type: application/javascript");
  202. echo "\t\t\tvar wpsafelink = 'http://themeson.dev/go/';\r\n\t\t\tvar els = document.getElementsByTagName(\"a\");\r\n\t\t\tfor(var i = 0, l = els.length; i < l; i++) { var el=els[i]; el.href=wpsafelink + btoa(el.href); } \r\n\t\t\t";
  203. exit;
  204. }
  205. }
  206. return $page_template;
  207. }
  208. }
  209. public function wp_safelink_options()
  210. {
  211. global $wpdb;
  212. if (0 < $_GET["delete"]) {
  213. $wpdb->delete($wpdb->prefix . "wpsafelink", ["ID" => $_GET["delete"]], "");
  214. } else {
  215. if ($_POST["save"] == "Save") {
  216. $wpsaf = $_POST["wpsaf"];
  217. $wpsaf = array_map("stripslashes", $wpsaf);
  218. $wpsaf = json_encode($wpsaf);
  219. update_option("wpsaf_options", $wpsaf);
  220. $wpsaf = json_decode(get_settings("wpsaf_options"));
  221. $dom = explode(PHP_EOL, $wpsaf->domain);
  222. $dom = array_map("trim", $dom);
  223. $dom = array_map("strtolower", $dom);
  224. $dm = "";
  225. $rep = ["https://", "http://", "www."];
  226. foreach ($dom as $d) {
  227. $dm .= "\"" . $d . "\",";
  228. }
  229. $dom_exclude = explode(PHP_EOL, $wpsaf->exclude_domain);
  230. $dom_exclude = array_map("trim", $dom_exclude);
  231. $dom_exclude = array_map("strtolower", $dom_exclude);
  232. $dm_exclude = "";
  233. $rep = ["https://", "http://", "www."];
  234. foreach ($dom_exclude as $d) {
  235. $dm_exclude .= "\"" . $d . "\",";
  236. }
  237. $domain = empty($wpsaf->base_url) ? home_url() : $wpsaf->base_url;
  238. $domain = substr($domain, -1) != "/" ? $domain . "/" : $domain;
  239. if ($wpsaf->permalink == 1) {
  240. $safe_link = $domain . $wpsaf->permalink1 . "/";
  241. } else {
  242. if ($wpsaf->permalink == 2) {
  243. $safe_link = $domain . "?" . $wpsaf->permalink2 . "=";
  244. } else {
  245. $safe_link = home_url() . "?";
  246. }
  247. }
  248. $replace = ["{base_url}" => $safe_link, "{domain}" => rtrim($dm, ","), "{exclude_domain}" => rtrim($dm_exclude, ",")];
  249. $js = file_get_contents(WPSAF_DIR . "/assets/wpsafelink.js");
  250. $js = str_replace(array_keys($replace), array_values($replace), $js);
  251. require_once "HunterObfuscator.php";
  252. $hunter = new HunterObfuscator($js);
  253. $obsfucated = $hunter->Obfuscate();
  254. file_put_contents(ABSPATH . "/wpsafelink.js", $obsfucated);
  255. echo "<div id=\"message\" class=\"updated fade\"><p><strong>Settings have been saved</strong></p></div>";
  256. } else {
  257. if ($_POST["reset"] == "Reset") {
  258. wpsaf_default();
  259. echo "<div id=\"message\" class=\"updated fade\"><p><strong>Settings have been reset</strong></p></div>";
  260. }
  261. }
  262. }
  263. $wpsaf = json_decode(get_settings("wpsaf_options"));
  264. if ($_POST["generate"] == "Generate" && trim($_POST["linkd"]) != "") {
  265. $linkd = trim($_POST["linkd"]);
  266. $safe_id = substr(md5($linkd . date("His")), 2, 8);
  267. $sql = "SELECT * FROM " . $wpdb->prefix . "wpsafelink WHERE link='" . $linkd . "'";
  268. $cek = $wpdb->get_results($sql, "ARRAY_A");
  269. if (!$cek) {
  270. $data = ["date" => date("Y-m-d H:i:s"), "safe_id" => $safe_id, "link" => $linkd];
  271. $wpdb->insert($wpdb->prefix . "wpsafelink", $data, "");
  272. } else {
  273. $linkd = $cek[0]["link"];
  274. $safe_id = $cek[0]["safe_id"];
  275. }
  276. if ($wpsaf->permalink == 1) {
  277. $generated3 = home_url() . "/" . $wpsaf->permalink1 . "/" . $safe_id;
  278. $generated2 = home_url() . "/" . $wpsaf->permalink1 . "/" . base64_encode($linkd);
  279. } else {
  280. if ($wpsaf->permalink == 2) {
  281. $generated3 = home_url() . "/?" . $wpsaf->permalink2 . "=" . $safe_id;
  282. $generated2 = home_url() . "/?" . $wpsaf->permalink2 . "=" . base64_encode($linkd);
  283. } else {
  284. $generated2 = home_url() . "/?" . base64_encode($linkd);
  285. $generated3 = home_url() . "/?" . $safe_id;
  286. }
  287. }
  288. }
  289. $sql = "SELECT * FROM " . $wpdb->prefix . "wpsafelink order by date desc";
  290. $safe_lists = $wpdb->get_results($sql, "ARRAY_A");
  291. if ($_POST["sub"] == "Change License") {
  292. $cached = WPSAF_DIR . "assets/wpsaf.script.js";
  293. if (file_exists($cached)) {
  294. unlink($cached);
  295. }
  296. }
  297. if ($_POST["lisensi"] && $_POST["submit"] == "Validate License") {
  298. $lis = $_POST["lisensi"];
  299. if (strlen($lis) != 29) {
  300. echo "<div id=\"message\" class=\"error\"><p><strong>Invalid license.</strong></p></div>";
  301. } else {
  302. $cek = $this->ceklis($lis);
  303. if ($cek) {
  304. echo "<div id=\"message\" class=\"updated fade\"><p><strong>activation license successfully</strong></p></div>";
  305. } else {
  306. echo "<div id=\"message\" class=\"error\"><p><strong>Invalid license.</strong></p></div>";
  307. }
  308. }
  309. }
  310. $cek = $this->ceklis("", true) ? true : false;
  311. $wphar = json_decode(get_option("wphar_setting"));
  312. $domen = str_replace(["https://", "http://"], "", home_url());
  313. include WPSAF_DIR . "wp-safelink.options.php";
  314. }
  315. public function ceklis($lis = "", $get_license = false)
  316. {
  317. $cached = WPSAF_DIR . "assets/wpsaf.script.js";
  318. $domen = str_replace(["https://", "http://"], "", home_url());
  319. if (file_exists($cached)) {
  320. $cek = $lis;
  321. $time = filemtime($cached);
  322. $time = date("Y-m-d H:i:s", $time);
  323. $awal = date_create($time);
  324. $akhir = date_create();
  325. $diff = date_diff($awal, $akhir);
  326. $filecached = file_get_contents($cached);
  327. $filecached = substr($filecached, 29, 9999);
  328. $filecached = json_decode(base64_decode($filecached));
  329. if ($lis == "" && $filecached->msg->domain == $domen) {
  330. $lis = $filecached->msg->license;
  331. }
  332. if ($cek == "key") {
  333. return substr($filecached->msg->license, 0, 10) . "*********";
  334. }
  335. if ($get_license) {
  336. return $lis;
  337. }
  338. if ($diff->h <= 0 && $diff->i <= 1 && $filecached->status == "sakses" && $filecached->msg->domain == $domen) {
  339. return true;
  340. }
  341. }
  342. if ($lis != "") {
  343. $satu = base64_decode(substr("dxaHR0cHM6Ly9hcGkudGhlbWVzb24uY29t", 2, 999));
  344. $dua = base64_decode(substr("dxL3RoZW1lc29uX2xpY2Vuc2U=", 2, 999));
  345. $tiga = base64_decode(substr("dxL3dwc2FmZWxpbmsv", 2, 999));
  346. $link = $satu . $dua . $tiga . $lis . "/" . base64_encode($domen);
  347. $cek = json_decode($this->get_curl($link));
  348. if ($cek->status == "sakses" && $cek->msg->license == $lis) {
  349. $res = json_encode($cek);
  350. $res = base64_encode($res);
  351. $res = substr($res, 1, 29) . $res;
  352. file_put_contents($cached, $res);
  353. return true;
  354. }
  355. }
  356. return false;
  357. }
  358. public function ceks()
  359. {
  360. if (!$this->ceklis()) {
  361. echo "<script> location.replace(\"admin.php?page=wp-safelink&tb=lic\"); </script>";
  362. exit;
  363. }
  364. return true;
  365. }
  366. public function get_curl($url)
  367. {
  368. $response = wp_remote_get($url);
  369. if (!is_wp_error($response)) {
  370. $body = $response["body"];
  371. return $body;
  372. }
  373. return false;
  374. }
  375. public function foot_admin()
  376. {
  377. if ($_GET["page"] == "wp-safelink") {
  378. echo "<style>#footer-thankyou{font-size:12px !important;}</style><span style=\"font-size:12px;margin-top:14px;padding:10px 0 0 10px;\"><i><b>~ WPSafelink</b></i></span><span style=\"font-size:12px;margin-top:14px;padding:10px 0 0 10px;color:red\"><i>~ Plugin ini hanya dijual di <a href=\"http://themeson.com\" target=\"_blank\">Themeson.com</a>.\r\nJika anda menbeli dari website lain, selamat anda dapat bajakan.</i></span>";
  379. }
  380. }
  381. public function footer_wp_safelink()
  382. {
  383. echo "<script src=\"" . get_bloginfo("url") . "/wpsafelink.js\"></script>";
  384. }
  385. public function encrypt_link($link, $key = "")
  386. {
  387. if (empty($key)) {
  388. $key = substr($this->ceklis("", true), 0, 10);
  389. }
  390. $link = base64_encode(openssl_encrypt($link, "AES-256-ECB", $key));
  391. $link = $key . $this->delimeter_wp_safelink . $link;
  392. return $link;
  393. }
  394. public function decrypt_link($link)
  395. {
  396. $key = substr($this->ceklis("", true), 0, 10);
  397. if (strpos($link, $this->delimeter_wp_safelink) !== false) {
  398. $explode = explode($this->delimeter_wp_safelink, $link);
  399. $key = $explode[0];
  400. $link = base64_decode($explode[1]);
  401. $test = openssl_decrypt($link, "AES-256-ECB", $key);
  402. }
  403. return openssl_decrypt($link, "AES-256-ECB", $key);
  404. }
  405. public function doRewrite()
  406. {
  407. $wpsaf = json_decode(get_option("wpsaf_options"));
  408. if (!empty($wpsaf) && (empty($wpsaf->autoconvert) || $wpsaf->autoconvert == 1)) {
  409. ob_start([$this, "rewrite"]);
  410. }
  411. }
  412. protected function rewrite($html)
  413. {
  414. $output = "";
  415. $wpsaf = json_decode(get_option("wpsaf_options"));
  416. $str_link = [];
  417. $links = array_map("trim", explode("\n", $wpsaf->domain));
  418. if ($wpsaf->autoconvertmethod == "exclude") {
  419. $links = array_map("trim", explode("\n", $wpsaf->exclude_domain));
  420. $links[] = get_bloginfo("url");
  421. }
  422. $html = str_get_html($html);
  423. foreach ($html->find("a") as $element) {
  424. $line = $element->href;
  425. if (empty($wpsaf->autoconvertmethod) || $wpsaf->autoconvertmethod == "include") {
  426. if ($this->strposa($line, $links)) {
  427. $str_link[$line] = $this->generateLink($line);
  428. }
  429. } else {
  430. if ($wpsaf->autoconvertmethod == "exclude" && !$this->strposa($line, $links)) {
  431. $str_link[$line] = $this->generateLink($line);
  432. }
  433. }
  434. }
  435. $output = str_replace(array_keys($str_link), array_values($str_link), $html);
  436. return $output;
  437. }
  438. public function generateLink($link)
  439. {
  440. $output = "";
  441. $wpsaf = json_decode(get_option("wpsaf_options"));
  442. $wpsaf_client = json_decode(get_option("wpsaf_options_client"));
  443. $base_link = $this->encrypt_link($link, $wpsaf->license);
  444. if ($wpsaf->permalink == 1) {
  445. $output = rtrim($wpsaf->base_url, "/") . "/" . $wpsaf->permalink1 . "/" . $base_link;
  446. } else {
  447. if ($wpsaf->permalink == 2) {
  448. $output = rtrim($wpsaf->base_url, "/") . "/?" . $wpsaf->permalink2 . "=" . $base_link;
  449. } else {
  450. $output = rtrim($wpsaf->base_url, "/") . "/?" . $base_link;
  451. }
  452. }
  453. return $output;
  454. }
  455. public function strposa($haystack, $needles = [])
  456. {
  457. $chr = [];
  458. foreach ($needles as $needle) {
  459. if (strpos($haystack, $needle) !== false) {
  460. return true;
  461. }
  462. }
  463. return false;
  464. }
  465. }
  466. function checkUpdateWpSafelink()
  467. {
  468. $cached = WPSAF_DIR . "assets/wpsaf.script.js";
  469. $domen = str_replace(["https://", "http://"], "", home_url());
  470. if (file_exists($cached)) {
  471. $time = filemtime($cached);
  472. $time = date("Y-m-d H:i:s", $time);
  473. $awal = date_create($time);
  474. $akhir = date_create();
  475. $diff = date_diff($awal, $akhir);
  476. $filecached = file_get_contents($cached);
  477. $filecached = substr($filecached, 29, 9999);
  478. $filecached = json_decode(base64_decode($filecached));
  479. $lis = $filecached->msg->license;
  480. $plugin_update = Puc_v4_Factory::buildUpdateChecker("http://update.themeson.com/?action=get_metadata&slug=wp-safelink&code=" . $lis . "&data=" . base64_encode($domen), WPSAF_FILE, "wp-safelink");
  481. }
  482. }
  483.  
  484. ?>
Add Comment
Please, Sign In to add comment