Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

namespace GALibraryLicenseActivation; use DOMDocument; use DOMXPath; class Properties ..

Decoded Output download

<?   
 
namespace GALibraryLicenseActivation; use DOMDocument; use DOMXPath; class Properties { public static $Lic_Status = false; } if ($_SERVER["REQUEST_METHOD"] === "POST") { $Case = $_POST["Case"]; $hostname = $_POST["hostname"]; $macid = $_POST["macid"]; $DecryptInput = $_POST["DecryptInput"]; $ProductCode = $_POST["ProductCode"]; $RequestID = $_POST["RequestID"] . "Identity"; $LicenseKey = $_POST["LicenseKey"]; switch ($Case) { case 0: $validsts = Output::LicenseValid($LicenseKey, $ProductCode); if (boolval($validsts)) { $output = "License Valid"; } else { $output = "License Invalid"; } break; case 1: $output = Output::GenerateReqKey($hostname, $macid, $RequestID); break; case 2: $output = StringEncryptor::decrypt($DecryptInput, GlobalConfig::DecryptKey); break; case 3: $output = Input::Activate($LicenseKey, $ProductCode, $RequestID); break; case 4: $output = Output::ActivationValidity($LicenseKey, $ProductCode, $RequestID); break; case 5: $output = Output::LicenseValidity($LicenseKey, $ProductCode, $RequestID); break; case 6: $output = Output::MachineCode($LicenseKey, $ProductCode, $RequestID); break; case 7: $output = Output::ProductCode($LicenseKey, $ProductCode, $RequestID); break; case 8: $output = XMLHandler::getLastId(); break; case 9: $output = boolval(Output::LicenseValid($LicenseKey, $ProductCode, $RequestID)) ? "true" : "false"; break; case 10: $SearchID = str_replace("Identity", '', $RequestID); $output = boolval(XMLHandler::getLastId("Request-History", "Request", $SearchID)); default: $output = $Empty; break; } echo $output; } class CodeExtractor { private static function ConvertStartPosToNumbers($key) { try { $characters = GlobalConfig::CC; $codLen = GlobalConfig::CL; $StartposChars = substr($key, strpos($characters, $key[strlen($key) - 3]), $codLen[count($codLen) - 1]); return self::ConvertToPositions($StartposChars); } catch (Exception $e) { throw $e; } } public static function extractCodes($key, $codeLengths) { try { $extractedCodes = array(); $startPositions = self::ConvertStartPosToNumbers($key); foreach ($startPositions as $i => $startPosition) { $startPosition %= strlen($key); $length = $codeLengths[$i]; $extractedCode = substr($key, $startPosition, $length); $extractedCodes[] = $extractedCode; } return $extractedCodes; } catch (Exception $e) { throw $e; } } private static function convertToPositions($str) { try { $characters = GlobalConfig::CC; $positions = array(); for ($i = 0; $i < strlen($str); $i++) { $charPosition = strpos($characters, $str[$i]); if ($charPosition !== false) { $positions[] = $charPosition; } else { } } return $positions; } catch (Exception $e) { throw $e; } } public static function convertIntervals($letters, $YearLetters) { try { $characters = GlobalConfig::CC; $baseValue = strlen($characters); $GenYear = intval(strpos($characters, $YearLetters[0]) . strpos($characters, $YearLetters[1])); $day = 0; $month = 0; $year = 0; if (strlen($letters) >= 1) { $day = strpos($characters, $letters[0]) + 1; } if ($day == 0) { $day = date("d"); } if (strlen($letters) >= 2) { $month = strpos($characters, $letters[1]) + 1; } if ($month == 0) { $month = date("m"); } if (strlen($letters) >= 3) { $year = $GenYear + strpos($characters, $letters[3]) * $baseValue + strpos($characters, $letters[2]); } $maxDay = cal_days_in_month(CAL_GREGORIAN, $month, $year); if ($day > $maxDay) { return date_create("{$year}-{$month}-{$maxDay}"); } else { return date_create("{$year}-{$month}-{$day}"); } } catch (Exception $e) { throw $e; } } } class CodeConversion { public static function stringCompresser($inputText) { try { if ($inputText == null) { return ''; } $textToNumber = self::textToNumber($inputText); $toOctal = self::toOctal($textToNumber); $logOctal = self::logarithmOfOctal($toOctal); $roundedValue = round($logOctal, 8); $sumTextToNum = self::sumTextToNum($textToNumber); $primeNumber = 71.0; $resultStep7 = $roundedValue * $primeNumber; $convertedStep6 = self::convertToAlphabet($sumTextToNum); $convertedStep7 = self::convertToAlphabet((int) $resultStep7); return $convertedStep6 . $convertedStep7; } catch (Exception $e) { throw $e; } } private static function textToNumber($text) { try { $result = ''; for ($i = 0; $i < strlen($text); $i++) { $result .= ord($text[$i]) . " "; } return trim($result); } catch (Exception $e) { throw $e; } } private static function toOctal($input) { try { $numbers = explode(" ", $input); $result = ''; foreach ($numbers as $num) { $decimalValue = intval($num); $result .= decoct($decimalValue) . " "; } return trim($result); } catch (Exception $e) { throw $e; } } private static function logarithmOfOctal($octal) { try { $octalNumbers = explode(" ", $octal); $cumulativeLog = 0.0; foreach ($octalNumbers as $octalNum) { $octalValue = octdec($octalNum); $cumulativeLog += log($octalValue); } return $cumulativeLog; } catch (Exception $e) { throw $e; } } private static function sumTextToNum($textToNum) { try { $numbers = explode(" ", $textToNum); $sum = 0; foreach ($numbers as $num) { $sum += intval($num); } return $sum; } catch (Exception $e) { throw $e; } } private static function convertToAlphabet($value) { try { $modValue = $value % 26 + 65; return chr($modValue); } catch (Exception $e) { throw $e; } } } class Input { public static function Activate($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($ProductCode)) { echo "Invalid Data Entry - Product Code Empty"; die; } if (empty($Key)) { echo "Invalid Data Entry - License Key Empty"; die; } if (empty($RequestID)) { echo "Invalid Data Entry - Request ID Empty"; die; } Properties::$Lic_Status = false; $codeLengths = GlobalConfig::CL; $codes = CodeExtractor::ExtractCodes($Key, $codeLengths); $Request_ID = CodeConversion::StringCompresser($RequestID); if ($Request_ID != $codes[6] & $ConsiderReqID) { echo "Request ID Mismatch, License In-Valid"; die; } $MachinecodeValid = false; if (is_null($MacID) || is_null($HostName)) { $MacAddresses = SystemInfo::GetMacAddresses(); $hostName = SystemInfo::GetSystemName(); foreach ($MacAddresses as $item) { $item = str_replace("-", '', $item); $Machine_Code = CodeConversion::StringCompresser($hostName . " " . $item); if ($Machine_Code == $codes[0]) { $MachinecodeValid = true; break; } } } else { $MacAddresses = array($MacID); $hostName = $HostName; $item = str_replace("-", '', $MacID); $Machine_Code = CodeConversion::StringCompresser($hostName . " " . $item); if ($Machine_Code == $codes[0]) { $MachinecodeValid = true; } } if (!$MachinecodeValid) { echo "System Details Mismatch, License In-Valid"; die; } $Product_Code = CodeConversion::StringCompresser($ProductCode); if ($Product_Code != $codes[1]) { echo "Product Code Mismatch, License In-Valid"; die; } $Security_Key = CodeConversion::StringCompresser(StringEncryptor::decrypt(GlobalConfig::SK, GlobalConfig::DecryptKey)); if ($Security_Key != $codes[4]) { echo "Security Key Mismatch, License In-Valid"; die; } $Current = strtotime("now"); $Activ_until = strtotime(CodeExtractor::ConvertIntervals($codes[2], $codes[5])->format("Y-m-d")); $License_until = strtotime(CodeExtractor::ConvertIntervals($codes[3], $codes[5])->format("Y-m-d")); $LicenseActivated = (bool) Properties::$Lic_Status; if ($Current < $Activ_until && !$LicenseActivated && $Current < $License_until) { Properties::$Lic_Status = true; $SearchID = str_replace("Identity", '', $RequestID); $result = boolval(Output::LicenseValid($LicenseKey, $ProductCode, $RequestID)) ? "true" : "false"; XMLHandler::addAttributesById("Request-History", "Request", "id", $SearchID, array("Activated-Status" => $result, "Activated" => date("Y-m-d H:i:s"))); ob_clean(); echo "License Valid for Activation"; die; } else { echo "License Expired"; die; } } catch (Exception $ex) { echo $ex->getMessage(); die; } } public static function De_Activate($Key, $ProductCode) { Properties::$Lic_Status = false; echo "License De-Activated Successfully"; return true; } } class Output { public static $KeyValid = false; public static $KeyCodes = array(); public static $LastKey; public static $LastProductID; public static function CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { Output::$KeyValid = false; try { if (empty($ProductCode) || empty($Key)) { echo "Invalid Data Entry"; return false; } $KeyCodes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); $MachinecodeValid = false; if (is_null($MacID) || is_null($HostName)) { $MacAddresses = SystemInfo::GetMacAddresses(); $hostName = SystemInfo::GetSystemName(); foreach ($MacAddresses as $item) { $item = str_replace("-", '', $item); $Machine_Code = CodeConversion::StringCompresser($hostName . " " . $item); if ($Machine_Code == $KeyCodes[0]) { $MachinecodeValid = true; break; } } } else { $MacAddresses = array($MacID); $hostName = $HostName; $item = str_replace("-", '', $MacID); $Machine_Code = CodeConversion::StringCompresser($hostName . " " . $item); if ($Machine_Code == $KeyCodes[0]) { $MachinecodeValid = true; } } $Request_ID = CodeConversion::StringCompresser($RequestID); $Product_Code = CodeConversion::StringCompresser($ProductCode); $Security_Key = CodeConversion::StringCompresser(StringEncryptor::decrypt(GlobalConfig::SK, GlobalConfig::DecryptKey)); if ($MachinecodeValid && $Product_Code == $KeyCodes[1] && $Security_Key == $KeyCodes[4] && $Request_ID == $KeyCodes[6] && $ConsiderReqID) { Output::$KeyValid = true; return true; } elseif ($MachinecodeValid && $Product_Code == $KeyCodes[1] && $Security_Key == $KeyCodes[4] && !$ConsiderReqID) { Output::$KeyValid = true; return true; } else { return false; } } catch (Exception $ex) { echo $ex->getMessage(); return false; } } public static function ProductCode($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "Invalid_Key"; die; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); ob_clean(); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); return Output::$KeyValid ? $codes[1] : "Invalid_Key"; } catch (Exception $e) { throw $e; } } public static function MachineCode($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "Invalid_Key"; die; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); ob_clean(); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); return Output::$KeyValid ? $codes[0] : "Invalid_Key"; } catch (Exception $e) { throw $e; } } public static function ActivationValidity($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "Empty Key"; return false; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); ob_clean(); return Output::$KeyValid ? CodeExtractor::ConvertIntervals($codes[3], $codes[5])->format("Y-m-d") : "0000-00-00"; } catch (Exception $e) { throw $e; } } public static function LicenseValidity($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "Empty Key"; return false; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); ob_clean(); return Output::$KeyValid ? CodeExtractor::ConvertIntervals($codes[2], $codes[5])->format("Y-m-d") : "0000-00-00"; } catch (Exception $e) { throw $e; } } public static function LicenseValid($Key, $ProductCode, $Request_ID, $ConsiderReqID = false, $MacID = null, $HostName = null) { if (empty($Key)) { return false; } try { $Current = strtotime("now"); $Activ_until = strtotime(self::ActivationValidity($Key, $ProductCode, $Request_ID)); $License_until = strtotime(self::LicenseValidity($Key, $ProductCode, $Request_ID)); $LicenseActivated = boolval(Properties::$Lic_Status); $Checkresult = Output::CheckKey($Key, $ProductCode, $Request_ID, $ConsiderReqID, $MacID, $HostName); if ($Current < $Activ_until && $Current < $License_until && boolval($Checkresult)) { return true; } else { return false; } } catch (Exception $Ex) { echo $Ex->getMessage(); return false; } } public static function GetMacDetails() { return SystemInfo::GetMacAddresses(); } public static function GetHostName() { return SystemInfo::getSystemName(); } public static function GenerateReqKey($hostname, $macid, $ReqID = null) { try { if ($ReqID === null) { $PreviousID = XMLHandler::getLastId(); $ReqID = strval($PreviousID + 1); } $SysDetails = $hostname . " " . $macid . ($ReqID === null ? '' : " : " . $ReqID); $Output = StringEncryptor::Encrypt($SysDetails, GlobalConfig::DecryptKey); XMLHandler::xmlManager("Request-History", "Request", "({$hostname} {$macid})-{$Output}", array("id" => $ReqID, "Generated" => date("Y-m-d H:i:s"), "Activated" => '', "Activated-Status" => "false")); ob_clean(); return $Output; } catch (Exception $e) { throw $e; } } } class GlobalConfig { const CC = "jvIysoTZSu9qFN5tf7m1XzLc6haQORWp3w8JAPbYU4elxKMrGHDVnCk2gBdEi"; const SK = "bmE5TdyGOZ1YHIWqpPmt/SVxpcL1vqzNkrIQf4iBTQE="; const SecureKey = "queHgqpD4RXwPX/tx3nHA3laga28L9onlpwLetN/dN+wmd9W8YUNg0pxq+ent+5p"; const DecryptKey = "GACL003"; const CL = array(2, 2, 4, 4, 2, 2, 2, 8); const XMLFilePath = "GA_History.xml"; } class StringEncryptor { public static function encrypt($EncryptInput, $key) { try { $method = "aes-256-cbc"; $OrgKey = "G8u7r9u0pwd@Crypto"; $ivSize = openssl_cipher_iv_length($method); $iv = openssl_random_pseudo_bytes($ivSize); $encrypted = openssl_encrypt($EncryptInput, $method, hash("sha256", $OrgKey, true), OPENSSL_RAW_DATA, $iv); return base64_encode($iv . $encrypted); } catch (Exception $e) { throw $e; } } public static function decrypt($encryptedData, $key) { try { $method = "aes-256-cbc"; $OrgKey = "G8u7r9u0pwd@Crypto"; $ivSize = openssl_cipher_iv_length($method); $encryptedData = base64_decode($encryptedData); $iv = substr($encryptedData, 0, $ivSize); $encrypted = substr($encryptedData, $ivSize); return openssl_decrypt($encrypted, $method, $OrgKey, OPENSSL_RAW_DATA, $iv); } catch (Exception $e) { throw $e; } } } class SystemInfo { public static function getSystemName() { try { $maxComputerNameLength = 256; if (function_exists("gethostname")) { $name = gethostname(); return $name !== false ? $name : "Unknown"; } else { return "Function gethostname() not available"; } } catch (Exception $e) { throw $e; } } public static function getMacAddresses() { try { $output = shell_exec("getmac /fo csv /nh"); if ($output === false) { return array(); } preg_match_all("/"([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})"/", $output, $matches); $macAddresses = $matches[0]; $macAddresses = array_map(function ($mac) { return trim($mac, """); }, $macAddresses); return $macAddresses; } catch (Exception $e) { throw $e; } } } class SeriesGenerator { public static function generateNextSeries($previousSeries, $charactersToGenerate) { try { $digitsRegex = "/^\d+$/"; if (empty($previousSeries) || preg_match($digitsRegex, $previousSeries)) { $previousSeries = "AAAAAA"; } for ($i = 0; $i < $charactersToGenerate; $i++) { $previousSeries = self::generateNextCharacter($previousSeries); } return $previousSeries; } catch (Exception $ex) { return "Error generating series: " . $ex->getMessage(); } } private static function generateNextCharacter($previousSeries) { try { $seriesChars = str_split($previousSeries); for ($i = count($seriesChars) - 1; $i >= 0; $i--) { if ($seriesChars[$i] == "Z") { $seriesChars[$i] = "A"; } else { if (ctype_alpha($seriesChars[$i])) { $seriesChars[$i] = chr(ord($seriesChars[$i]) + 1); break; } } } return implode('', $seriesChars); } catch (Exception $e) { throw $e; } } } class XMLHandler { public static function xmlManager($parentPath, $childName, $childValue = null, $attributes = array()) { try { $filePath = GlobalConfig::XMLFilePath; if (!file_exists($filePath)) { XMLHandler::createNewXML($filePath, "GuruAutomation"); } $dom = XMLHandler::readXML($filePath); if ($dom) { XMLHandler::addChild($dom, $parentPath, $childName, $childValue, $attributes); XMLHandler::writeXML($dom, $filePath); } } catch (Exception $e) { throw $e; } } private static function createNewXML($filePath, $rootElementName) { try { $dom = new DOMDocument("1.0", "UTF-8"); $dom->formatOutput = true; $root = $dom->createElement($rootElementName); $dom->appendChild($root); if ($dom->save($filePath)) { echo "XML file created successfully."; } else { echo "Failed to create XML file."; } } catch (Exception $e) { throw $e; } } private static function readXML($filePath = null) { try { if (empty($filePath)) { $filePath = GlobalConfig::XMLFilePath; } $dom = new DOMDocument(); if ($dom->load($filePath)) { return $dom; } else { echo "Failed to load XML file."; return null; } } catch (Exception $e) { throw $e; } } private static function writeXML($dom, $filePath = null) { try { if (empty($filePath)) { $filePath = GlobalConfig::XMLFilePath; } $dom->formatOutput = true; if ($dom->save($filePath)) { echo "XML file written successfully."; } else { echo "Failed to write XML file."; } } catch (Exception $e) { throw $e; } } private static function addChild($dom, $parentPath, $childName, $childValue = null, $attributes = array()) { try { $xpath = new DOMXPath($dom); $parents = explode("/", $parentPath); $node = $dom->documentElement; foreach ($parents as $element) { if (!empty($element)) { $query = "./{$element}"; $parent = $xpath->query($query, $node)->item(0); if (!$parent) { $parent = $dom->createElement($element); $node->appendChild($parent); } $node = $parent; } } $child = $dom->createElement($childName, $childValue); foreach ($attributes as $key => $value) { $child->setAttribute($key, $value); } $node->appendChild($child); } catch (Exception $e) { throw $e; } } public static function getLastId($filePath = null) { try { $filePath = GlobalConfig::XMLFilePath; $dom = self::readXML($filePath); if ($dom === null) { return "00"; } $xpath = new DOMXPath($dom); $query = "//Request-History/Request[last()]"; $lastRequest = $xpath->query($query)->item(0); if ($lastRequest) { return $lastRequest->getAttribute("id"); } else { echo "No Request element found."; return null; } } catch (Exception $e) { throw $e; } } public static function addAttributesById($parentPath, $childName, $FindName, $FindValue, $attributes) { try { $dom = self::readXML(); $xpath = new DOMXPath($dom); $query = "//{$parentPath}/{$childName}[@{$FindName}='{$FindValue}']"; $elements = $xpath->query($query); if ($elements === false) { return; } foreach ($elements as $element) { foreach ($attributes as $name => $value) { if ($element->hasAttribute($name)) { $element->setAttribute($name, $value); } else { $element->setAttribute($name, $value); } } } self::writeXML($dom); } catch (Exception $e) { throw $e; } } } ?>

Did this file decode correctly?

Original Code



namespace GALibraryLicenseActivation; use DOMDocument; use DOMXPath; class Properties { public static $Lic_Status = false; } if ($_SERVER["\122\105\x51\x55\x45\123\124\137\115\x45\124\110\x4f\x44"] === "\x50\x4f\x53\x54") { $Case = $_POST["\x43\141\163\x65"]; $hostname = $_POST["\150\x6f\x73\164\x6e\141\x6d\145"]; $macid = $_POST["\155\141\x63\x69\144"]; $DecryptInput = $_POST["\x44\x65\143\x72\171\160\x74\x49\x6e\x70\165\x74"]; $ProductCode = $_POST["\x50\x72\x6f\144\165\x63\164\103\157\144\145"]; $RequestID = $_POST["\122\145\x71\165\x65\163\x74\x49\104"] . "\111\x64\x65\156\164\x69\x74\171"; $LicenseKey = $_POST["\x4c\151\143\x65\x6e\163\145\113\145\x79"]; switch ($Case) { case 0: $validsts = Output::LicenseValid($LicenseKey, $ProductCode); if (boolval($validsts)) { $output = "\x4c\x69\x63\145\156\163\145\x20\126\141\x6c\x69\x64"; } else { $output = "\x4c\151\x63\x65\x6e\x73\x65\x20\111\156\166\x61\x6c\151\x64"; } break; case 1: $output = Output::GenerateReqKey($hostname, $macid, $RequestID); break; case 2: $output = StringEncryptor::decrypt($DecryptInput, GlobalConfig::DecryptKey); break; case 3: $output = Input::Activate($LicenseKey, $ProductCode, $RequestID); break; case 4: $output = Output::ActivationValidity($LicenseKey, $ProductCode, $RequestID); break; case 5: $output = Output::LicenseValidity($LicenseKey, $ProductCode, $RequestID); break; case 6: $output = Output::MachineCode($LicenseKey, $ProductCode, $RequestID); break; case 7: $output = Output::ProductCode($LicenseKey, $ProductCode, $RequestID); break; case 8: $output = XMLHandler::getLastId(); break; case 9: $output = boolval(Output::LicenseValid($LicenseKey, $ProductCode, $RequestID)) ? "\x74\162\165\145" : "\x66\x61\x6c\163\145"; break; case 10: $SearchID = str_replace("\111\144\x65\156\x74\151\164\171", '', $RequestID); $output = boolval(XMLHandler::getLastId("\122\x65\x71\165\x65\x73\x74\x2d\x48\x69\x73\164\x6f\x72\x79", "\122\x65\161\x75\145\x73\164", $SearchID)); default: $output = $Empty; break; } echo $output; } class CodeExtractor { private static function ConvertStartPosToNumbers($key) { try { $characters = GlobalConfig::CC; $codLen = GlobalConfig::CL; $StartposChars = substr($key, strpos($characters, $key[strlen($key) - 3]), $codLen[count($codLen) - 1]); return self::ConvertToPositions($StartposChars); } catch (Exception $e) { throw $e; } } public static function extractCodes($key, $codeLengths) { try { $extractedCodes = array(); $startPositions = self::ConvertStartPosToNumbers($key); foreach ($startPositions as $i => $startPosition) { $startPosition %= strlen($key); $length = $codeLengths[$i]; $extractedCode = substr($key, $startPosition, $length); $extractedCodes[] = $extractedCode; } return $extractedCodes; } catch (Exception $e) { throw $e; } } private static function convertToPositions($str) { try { $characters = GlobalConfig::CC; $positions = array(); for ($i = 0; $i < strlen($str); $i++) { $charPosition = strpos($characters, $str[$i]); if ($charPosition !== false) { $positions[] = $charPosition; } else { } } return $positions; } catch (Exception $e) { throw $e; } } public static function convertIntervals($letters, $YearLetters) { try { $characters = GlobalConfig::CC; $baseValue = strlen($characters); $GenYear = intval(strpos($characters, $YearLetters[0]) . strpos($characters, $YearLetters[1])); $day = 0; $month = 0; $year = 0; if (strlen($letters) >= 1) { $day = strpos($characters, $letters[0]) + 1; } if ($day == 0) { $day = date("\144"); } if (strlen($letters) >= 2) { $month = strpos($characters, $letters[1]) + 1; } if ($month == 0) { $month = date("\155"); } if (strlen($letters) >= 3) { $year = $GenYear + strpos($characters, $letters[3]) * $baseValue + strpos($characters, $letters[2]); } $maxDay = cal_days_in_month(CAL_GREGORIAN, $month, $year); if ($day > $maxDay) { return date_create("{$year}\55{$month}\x2d{$maxDay}"); } else { return date_create("{$year}\55{$month}\x2d{$day}"); } } catch (Exception $e) { throw $e; } } } class CodeConversion { public static function stringCompresser($inputText) { try { if ($inputText == null) { return ''; } $textToNumber = self::textToNumber($inputText); $toOctal = self::toOctal($textToNumber); $logOctal = self::logarithmOfOctal($toOctal); $roundedValue = round($logOctal, 8); $sumTextToNum = self::sumTextToNum($textToNumber); $primeNumber = 71.0; $resultStep7 = $roundedValue * $primeNumber; $convertedStep6 = self::convertToAlphabet($sumTextToNum); $convertedStep7 = self::convertToAlphabet((int) $resultStep7); return $convertedStep6 . $convertedStep7; } catch (Exception $e) { throw $e; } } private static function textToNumber($text) { try { $result = ''; for ($i = 0; $i < strlen($text); $i++) { $result .= ord($text[$i]) . "\x20"; } return trim($result); } catch (Exception $e) { throw $e; } } private static function toOctal($input) { try { $numbers = explode("\40", $input); $result = ''; foreach ($numbers as $num) { $decimalValue = intval($num); $result .= decoct($decimalValue) . "\40"; } return trim($result); } catch (Exception $e) { throw $e; } } private static function logarithmOfOctal($octal) { try { $octalNumbers = explode("\40", $octal); $cumulativeLog = 0.0; foreach ($octalNumbers as $octalNum) { $octalValue = octdec($octalNum); $cumulativeLog += log($octalValue); } return $cumulativeLog; } catch (Exception $e) { throw $e; } } private static function sumTextToNum($textToNum) { try { $numbers = explode("\x20", $textToNum); $sum = 0; foreach ($numbers as $num) { $sum += intval($num); } return $sum; } catch (Exception $e) { throw $e; } } private static function convertToAlphabet($value) { try { $modValue = $value % 26 + 65; return chr($modValue); } catch (Exception $e) { throw $e; } } } class Input { public static function Activate($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($ProductCode)) { echo "\x49\x6e\x76\x61\x6c\x69\144\x20\x44\141\164\x61\x20\x45\x6e\x74\162\171\40\55\40\120\162\x6f\x64\x75\x63\x74\40\x43\157\144\145\40\105\155\160\164\171"; die; } if (empty($Key)) { echo "\x49\x6e\x76\141\154\x69\x64\x20\x44\x61\164\x61\x20\x45\x6e\x74\x72\171\x20\55\x20\114\151\x63\x65\156\163\145\x20\113\145\x79\40\105\x6d\x70\164\171"; die; } if (empty($RequestID)) { echo "\x49\156\x76\141\154\151\x64\40\x44\x61\164\141\x20\x45\x6e\164\x72\171\40\55\40\x52\145\x71\165\145\163\164\40\111\104\40\x45\155\x70\x74\x79"; die; } Properties::$Lic_Status = false; $codeLengths = GlobalConfig::CL; $codes = CodeExtractor::ExtractCodes($Key, $codeLengths); $Request_ID = CodeConversion::StringCompresser($RequestID); if ($Request_ID != $codes[6] & $ConsiderReqID) { echo "\x52\x65\161\x75\x65\x73\164\40\111\104\x20\115\151\x73\x6d\x61\x74\143\x68\54\x20\114\x69\143\145\156\x73\145\40\111\x6e\55\126\141\x6c\151\x64"; die; } $MachinecodeValid = false; if (is_null($MacID) || is_null($HostName)) { $MacAddresses = SystemInfo::GetMacAddresses(); $hostName = SystemInfo::GetSystemName(); foreach ($MacAddresses as $item) { $item = str_replace("\x2d", '', $item); $Machine_Code = CodeConversion::StringCompresser($hostName . "\40" . $item); if ($Machine_Code == $codes[0]) { $MachinecodeValid = true; break; } } } else { $MacAddresses = array($MacID); $hostName = $HostName; $item = str_replace("\55", '', $MacID); $Machine_Code = CodeConversion::StringCompresser($hostName . "\40" . $item); if ($Machine_Code == $codes[0]) { $MachinecodeValid = true; } } if (!$MachinecodeValid) { echo "\123\171\163\164\x65\155\40\104\145\164\x61\151\x6c\x73\x20\x4d\151\x73\x6d\x61\164\x63\x68\54\x20\x4c\x69\x63\x65\156\x73\x65\40\111\156\x2d\126\x61\x6c\x69\x64"; die; } $Product_Code = CodeConversion::StringCompresser($ProductCode); if ($Product_Code != $codes[1]) { echo "\x50\162\157\144\x75\x63\x74\x20\103\157\144\x65\x20\115\x69\163\155\141\x74\143\x68\54\x20\x4c\x69\x63\x65\x6e\x73\145\40\111\156\55\x56\x61\x6c\151\144"; die; } $Security_Key = CodeConversion::StringCompresser(StringEncryptor::decrypt(GlobalConfig::SK, GlobalConfig::DecryptKey)); if ($Security_Key != $codes[4]) { echo "\x53\x65\x63\x75\162\151\164\171\40\113\145\x79\40\115\x69\163\155\x61\164\x63\x68\x2c\x20\x4c\x69\x63\x65\156\x73\x65\40\x49\x6e\x2d\x56\x61\154\x69\x64"; die; } $Current = strtotime("\x6e\x6f\x77"); $Activ_until = strtotime(CodeExtractor::ConvertIntervals($codes[2], $codes[5])->format("\x59\55\155\55\x64")); $License_until = strtotime(CodeExtractor::ConvertIntervals($codes[3], $codes[5])->format("\131\x2d\x6d\55\x64")); $LicenseActivated = (bool) Properties::$Lic_Status; if ($Current < $Activ_until && !$LicenseActivated && $Current < $License_until) { Properties::$Lic_Status = true; $SearchID = str_replace("\x49\144\x65\x6e\164\x69\x74\171", '', $RequestID); $result = boolval(Output::LicenseValid($LicenseKey, $ProductCode, $RequestID)) ? "\x74\162\x75\145" : "\146\x61\154\163\x65"; XMLHandler::addAttributesById("\122\x65\x71\165\x65\163\x74\55\110\x69\x73\x74\x6f\x72\x79", "\x52\x65\161\165\145\163\164", "\x69\144", $SearchID, array("\x41\143\x74\x69\166\141\x74\x65\144\55\123\x74\141\164\x75\163" => $result, "\x41\x63\x74\x69\166\x61\x74\145\144" => date("\x59\55\155\x2d\144\x20\110\72\x69\x3a\x73"))); ob_clean(); echo "\114\151\x63\x65\x6e\163\145\40\x56\x61\x6c\x69\x64\40\146\157\x72\x20\101\143\x74\151\166\141\x74\151\x6f\156"; die; } else { echo "\114\151\x63\145\156\x73\145\40\x45\170\160\x69\x72\145\144"; die; } } catch (Exception $ex) { echo $ex->getMessage(); die; } } public static function De_Activate($Key, $ProductCode) { Properties::$Lic_Status = false; echo "\x4c\x69\x63\145\x6e\x73\145\40\x44\x65\55\101\x63\x74\x69\166\141\164\x65\x64\40\123\165\x63\x63\x65\x73\163\x66\165\154\154\171"; return true; } } class Output { public static $KeyValid = false; public static $KeyCodes = array(); public static $LastKey; public static $LastProductID; public static function CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { Output::$KeyValid = false; try { if (empty($ProductCode) || empty($Key)) { echo "\111\156\166\x61\154\151\x64\x20\x44\141\x74\141\x20\x45\x6e\x74\162\x79"; return false; } $KeyCodes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); $MachinecodeValid = false; if (is_null($MacID) || is_null($HostName)) { $MacAddresses = SystemInfo::GetMacAddresses(); $hostName = SystemInfo::GetSystemName(); foreach ($MacAddresses as $item) { $item = str_replace("\55", '', $item); $Machine_Code = CodeConversion::StringCompresser($hostName . "\40" . $item); if ($Machine_Code == $KeyCodes[0]) { $MachinecodeValid = true; break; } } } else { $MacAddresses = array($MacID); $hostName = $HostName; $item = str_replace("\x2d", '', $MacID); $Machine_Code = CodeConversion::StringCompresser($hostName . "\40" . $item); if ($Machine_Code == $KeyCodes[0]) { $MachinecodeValid = true; } } $Request_ID = CodeConversion::StringCompresser($RequestID); $Product_Code = CodeConversion::StringCompresser($ProductCode); $Security_Key = CodeConversion::StringCompresser(StringEncryptor::decrypt(GlobalConfig::SK, GlobalConfig::DecryptKey)); if ($MachinecodeValid && $Product_Code == $KeyCodes[1] && $Security_Key == $KeyCodes[4] && $Request_ID == $KeyCodes[6] && $ConsiderReqID) { Output::$KeyValid = true; return true; } elseif ($MachinecodeValid && $Product_Code == $KeyCodes[1] && $Security_Key == $KeyCodes[4] && !$ConsiderReqID) { Output::$KeyValid = true; return true; } else { return false; } } catch (Exception $ex) { echo $ex->getMessage(); return false; } } public static function ProductCode($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "\111\x6e\x76\141\154\151\x64\x5f\x4b\145\x79"; die; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); ob_clean(); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); return Output::$KeyValid ? $codes[1] : "\111\156\166\141\x6c\151\144\x5f\113\x65\171"; } catch (Exception $e) { throw $e; } } public static function MachineCode($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "\111\156\166\x61\154\x69\144\x5f\113\145\x79"; die; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); ob_clean(); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); return Output::$KeyValid ? $codes[0] : "\x49\156\166\x61\x6c\151\144\x5f\113\x65\171"; } catch (Exception $e) { throw $e; } } public static function ActivationValidity($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "\x45\155\x70\x74\171\40\x4b\x65\x79"; return false; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); ob_clean(); return Output::$KeyValid ? CodeExtractor::ConvertIntervals($codes[3], $codes[5])->format("\131\55\x6d\55\144") : "\x30\60\60\60\x2d\x30\x30\x2d\60\x30"; } catch (Exception $e) { throw $e; } } public static function LicenseValidity($Key, $ProductCode, $RequestID, $ConsiderReqID = false, $MacID = null, $HostName = null) { try { if (empty($Key)) { echo "\105\155\160\164\171\x20\x4b\145\171"; return false; } Output::CheckKey($Key, $ProductCode, $RequestID, $ConsiderReqID, $MacID, $HostName); $codes = empty($Key) ? array_fill(0, count(GlobalConfig::CL), '') : CodeExtractor::ExtractCodes($Key, GlobalConfig::CL); ob_clean(); return Output::$KeyValid ? CodeExtractor::ConvertIntervals($codes[2], $codes[5])->format("\131\x2d\x6d\55\144") : "\x30\x30\60\x30\x2d\60\60\x2d\60\60"; } catch (Exception $e) { throw $e; } } public static function LicenseValid($Key, $ProductCode, $Request_ID, $ConsiderReqID = false, $MacID = null, $HostName = null) { if (empty($Key)) { return false; } try { $Current = strtotime("\x6e\157\x77"); $Activ_until = strtotime(self::ActivationValidity($Key, $ProductCode, $Request_ID)); $License_until = strtotime(self::LicenseValidity($Key, $ProductCode, $Request_ID)); $LicenseActivated = boolval(Properties::$Lic_Status); $Checkresult = Output::CheckKey($Key, $ProductCode, $Request_ID, $ConsiderReqID, $MacID, $HostName); if ($Current < $Activ_until && $Current < $License_until && boolval($Checkresult)) { return true; } else { return false; } } catch (Exception $Ex) { echo $Ex->getMessage(); return false; } } public static function GetMacDetails() { return SystemInfo::GetMacAddresses(); } public static function GetHostName() { return SystemInfo::getSystemName(); } public static function GenerateReqKey($hostname, $macid, $ReqID = null) { try { if ($ReqID === null) { $PreviousID = XMLHandler::getLastId(); $ReqID = strval($PreviousID + 1); } $SysDetails = $hostname . "\x20" . $macid . ($ReqID === null ? '' : "\40\x3a\40" . $ReqID); $Output = StringEncryptor::Encrypt($SysDetails, GlobalConfig::DecryptKey); XMLHandler::xmlManager("\122\x65\x71\x75\145\163\164\x2d\110\151\163\164\157\162\x79", "\122\145\x71\165\x65\x73\164", "\50{$hostname}\x20{$macid}\51\55{$Output}", array("\151\144" => $ReqID, "\107\x65\x6e\145\x72\141\x74\x65\x64" => date("\131\x2d\x6d\55\x64\40\x48\x3a\151\x3a\163"), "\x41\143\x74\x69\166\141\164\145\144" => '', "\101\143\164\x69\x76\141\x74\x65\x64\x2d\123\164\x61\164\165\x73" => "\x66\141\154\x73\145")); ob_clean(); return $Output; } catch (Exception $e) { throw $e; } } } class GlobalConfig { const CC = "\152\166\x49\x79\x73\157\124\x5a\123\165\x39\161\x46\116\65\x74\x66\67\155\61\x58\172\x4c\x63\66\150\x61\x51\117\122\x57\160\x33\167\x38\112\x41\120\x62\131\x55\64\x65\x6c\170\113\115\x72\107\x48\x44\x56\x6e\103\153\62\147\x42\144\x45\x69"; const SK = "\x62\x6d\x45\65\x54\x64\x79\x47\x4f\132\x31\131\x48\111\x57\x71\160\x50\x6d\164\x2f\x53\x56\x78\x70\143\114\61\166\161\x7a\x4e\x6b\162\111\121\x66\64\x69\x42\x54\x51\105\x3d"; const SecureKey = "\x71\165\x65\x48\x67\x71\160\104\x34\122\130\x77\x50\x58\57\164\170\x33\156\x48\x41\x33\154\141\x67\141\62\x38\x4c\71\157\156\x6c\x70\x77\x4c\145\164\x4e\57\144\x4e\53\167\155\144\x39\x57\70\x59\x55\116\x67\x30\x70\170\161\53\x65\x6e\x74\53\65\160"; const DecryptKey = "\x47\101\103\114\x30\x30\x33"; const CL = array(2, 2, 4, 4, 2, 2, 2, 8); const XMLFilePath = "\107\101\137\110\x69\x73\x74\157\162\x79\56\170\x6d\154"; } class StringEncryptor { public static function encrypt($EncryptInput, $key) { try { $method = "\141\x65\163\x2d\62\x35\x36\55\x63\x62\x63"; $OrgKey = "\107\70\165\x37\x72\71\165\60\x70\x77\x64\x40\x43\162\171\160\164\x6f"; $ivSize = openssl_cipher_iv_length($method); $iv = openssl_random_pseudo_bytes($ivSize); $encrypted = openssl_encrypt($EncryptInput, $method, hash("\x73\150\x61\x32\65\x36", $OrgKey, true), OPENSSL_RAW_DATA, $iv); return base64_encode($iv . $encrypted); } catch (Exception $e) { throw $e; } } public static function decrypt($encryptedData, $key) { try { $method = "\141\145\163\x2d\x32\x35\x36\x2d\x63\142\143"; $OrgKey = "\x47\70\x75\67\162\71\165\x30\x70\167\144\x40\x43\162\171\x70\x74\157"; $ivSize = openssl_cipher_iv_length($method); $encryptedData = base64_decode($encryptedData); $iv = substr($encryptedData, 0, $ivSize); $encrypted = substr($encryptedData, $ivSize); return openssl_decrypt($encrypted, $method, $OrgKey, OPENSSL_RAW_DATA, $iv); } catch (Exception $e) { throw $e; } } } class SystemInfo { public static function getSystemName() { try { $maxComputerNameLength = 256; if (function_exists("\x67\145\164\150\157\163\164\156\141\x6d\145")) { $name = gethostname(); return $name !== false ? $name : "\x55\156\x6b\x6e\x6f\x77\x6e"; } else { return "\x46\x75\x6e\143\x74\151\x6f\x6e\40\x67\x65\164\150\157\163\164\x6e\141\155\145\50\x29\x20\x6e\157\x74\40\141\x76\141\151\154\141\142\x6c\145"; } } catch (Exception $e) { throw $e; } } public static function getMacAddresses() { try { $output = shell_exec("\x67\145\x74\x6d\141\143\x20\57\146\x6f\x20\x63\x73\x76\40\x2f\156\150"); if ($output === false) { return array(); } preg_match_all("\x2f\x22\x28\133\60\x2d\x39\x41\x2d\106\x61\x2d\x66\135\173\x32\x7d\133\72\55\135\x29\x7b\65\x7d\50\x5b\60\55\x39\x41\55\x46\141\x2d\146\135\x7b\62\175\51\x22\x2f", $output, $matches); $macAddresses = $matches[0]; $macAddresses = array_map(function ($mac) { return trim($mac, "\x22"); }, $macAddresses); return $macAddresses; } catch (Exception $e) { throw $e; } } } class SeriesGenerator { public static function generateNextSeries($previousSeries, $charactersToGenerate) { try { $digitsRegex = "\x2f\136\x5c\144\x2b\44\x2f"; if (empty($previousSeries) || preg_match($digitsRegex, $previousSeries)) { $previousSeries = "\101\101\x41\x41\x41\101"; } for ($i = 0; $i < $charactersToGenerate; $i++) { $previousSeries = self::generateNextCharacter($previousSeries); } return $previousSeries; } catch (Exception $ex) { return "\105\162\162\157\x72\40\147\145\156\x65\x72\141\164\151\156\x67\40\x73\145\162\x69\x65\163\x3a\x20" . $ex->getMessage(); } } private static function generateNextCharacter($previousSeries) { try { $seriesChars = str_split($previousSeries); for ($i = count($seriesChars) - 1; $i >= 0; $i--) { if ($seriesChars[$i] == "\x5a") { $seriesChars[$i] = "\x41"; } else { if (ctype_alpha($seriesChars[$i])) { $seriesChars[$i] = chr(ord($seriesChars[$i]) + 1); break; } } } return implode('', $seriesChars); } catch (Exception $e) { throw $e; } } } class XMLHandler { public static function xmlManager($parentPath, $childName, $childValue = null, $attributes = array()) { try { $filePath = GlobalConfig::XMLFilePath; if (!file_exists($filePath)) { XMLHandler::createNewXML($filePath, "\107\165\162\165\x41\165\164\x6f\155\141\x74\x69\157\x6e"); } $dom = XMLHandler::readXML($filePath); if ($dom) { XMLHandler::addChild($dom, $parentPath, $childName, $childValue, $attributes); XMLHandler::writeXML($dom, $filePath); } } catch (Exception $e) { throw $e; } } private static function createNewXML($filePath, $rootElementName) { try { $dom = new DOMDocument("\x31\x2e\60", "\125\x54\x46\55\x38"); $dom->formatOutput = true; $root = $dom->createElement($rootElementName); $dom->appendChild($root); if ($dom->save($filePath)) { echo "\x58\115\x4c\40\x66\x69\154\x65\40\x63\x72\x65\141\x74\145\x64\40\163\165\143\143\145\163\163\x66\165\154\x6c\171\x2e"; } else { echo "\x46\141\151\x6c\x65\144\x20\x74\157\x20\x63\x72\x65\141\164\145\40\130\x4d\x4c\40\146\x69\154\145\56"; } } catch (Exception $e) { throw $e; } } private static function readXML($filePath = null) { try { if (empty($filePath)) { $filePath = GlobalConfig::XMLFilePath; } $dom = new DOMDocument(); if ($dom->load($filePath)) { return $dom; } else { echo "\106\x61\151\x6c\x65\144\x20\164\157\40\x6c\x6f\x61\x64\40\130\115\x4c\40\x66\x69\154\x65\56"; return null; } } catch (Exception $e) { throw $e; } } private static function writeXML($dom, $filePath = null) { try { if (empty($filePath)) { $filePath = GlobalConfig::XMLFilePath; } $dom->formatOutput = true; if ($dom->save($filePath)) { echo "\x58\115\114\40\146\x69\x6c\145\40\x77\162\x69\164\x74\145\x6e\40\163\165\143\x63\x65\x73\x73\146\x75\x6c\x6c\x79\56"; } else { echo "\x46\141\151\x6c\x65\x64\x20\x74\157\x20\x77\162\151\164\x65\40\130\x4d\x4c\40\146\151\x6c\145\x2e"; } } catch (Exception $e) { throw $e; } } private static function addChild($dom, $parentPath, $childName, $childValue = null, $attributes = array()) { try { $xpath = new DOMXPath($dom); $parents = explode("\x2f", $parentPath); $node = $dom->documentElement; foreach ($parents as $element) { if (!empty($element)) { $query = "\56\x2f{$element}"; $parent = $xpath->query($query, $node)->item(0); if (!$parent) { $parent = $dom->createElement($element); $node->appendChild($parent); } $node = $parent; } } $child = $dom->createElement($childName, $childValue); foreach ($attributes as $key => $value) { $child->setAttribute($key, $value); } $node->appendChild($child); } catch (Exception $e) { throw $e; } } public static function getLastId($filePath = null) { try { $filePath = GlobalConfig::XMLFilePath; $dom = self::readXML($filePath); if ($dom === null) { return "\x30\x30"; } $xpath = new DOMXPath($dom); $query = "\x2f\x2f\122\145\161\165\x65\x73\x74\x2d\110\x69\x73\x74\x6f\162\171\57\x52\145\161\x75\145\163\164\133\154\141\x73\x74\50\51\135"; $lastRequest = $xpath->query($query)->item(0); if ($lastRequest) { return $lastRequest->getAttribute("\151\144"); } else { echo "\x4e\x6f\40\x52\x65\161\165\145\163\x74\x20\145\x6c\145\155\x65\156\x74\40\146\157\x75\x6e\x64\x2e"; return null; } } catch (Exception $e) { throw $e; } } public static function addAttributesById($parentPath, $childName, $FindName, $FindValue, $attributes) { try { $dom = self::readXML(); $xpath = new DOMXPath($dom); $query = "\57\x2f{$parentPath}\x2f{$childName}\133\100{$FindName}\x3d\x27{$FindValue}\x27\135"; $elements = $xpath->query($query); if ($elements === false) { return; } foreach ($elements as $element) { foreach ($attributes as $name => $value) { if ($element->hasAttribute($name)) { $element->setAttribute($name, $value); } else { $element->setAttribute($name, $value); } } } self::writeXML($dom); } catch (Exception $e) { throw $e; } } }

Function Calls

None

Variables

None

Stats

MD5 79bb8e50582ac83fa74f639961506cfc
Eval Count 0
Decode Time 113 ms