Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php $nsjsjsnsn = "\142\141\163\145\66\x34\137\x64\x65\x63\x6f\x64\x65";@eval($nsjsjsnsn..
Decoded Output download
namespace mineceit;
use mineceit\arenas\ArenaHandler;
use mineceit\commands\arenas\CreateArena;
use mineceit\commands\arenas\DeleteArena;
use mineceit\commands\arenas\EventArena;
use mineceit\commands\arenas\SetArenaSpawn;
use mineceit\commands\bans\MineceitBanCommand;
use mineceit\commands\bans\MineceitBanIPCommand;
use mineceit\commands\bans\MineceitBanListCommand;
use mineceit\commands\bans\MineceitPardonCommand;
use mineceit\commands\bans\MineceitPardonIPCommand;
use mineceit\commands\bans\MineceitResetBans;
use mineceit\commands\basic\FlyCommand;
use mineceit\commands\basic\FreezeCommand;
use mineceit\commands\basic\GamemodeCommand;
use mineceit\commands\basic\HealCommand;
use mineceit\commands\basic\HubCommand;
use mineceit\commands\other\MineceitMeCommand;
use mineceit\commands\other\MineceitTellCommand;
use mineceit\commands\basic\MuteCommand;
use mineceit\commands\basic\PlayerInfoCommand;
use mineceit\commands\basic\SetLeaderboardHologram;
use mineceit\commands\basic\StatsCommand;
use mineceit\commands\duels\DuelCommand;
use mineceit\commands\duels\SpecCommand;
use mineceit\commands\kits\ListKits;
use mineceit\commands\other\MineceitTeleportCommand;
use mineceit\commands\ranks\CreateRank;
use mineceit\commands\ranks\DeleteRank;
use mineceit\commands\ranks\ListRanks;
use mineceit\commands\ranks\SetRanks;
use mineceit\data\mysql\AsyncCreateDatabase;
use mineceit\discord\DiscordUtil;
use mineceit\duels\level\classic\ClassicDuelGen;
use mineceit\duels\level\classic\ClassicSpleefGen;
use mineceit\duels\level\classic\ClassicSumoGen;
use mineceit\duels\DuelHandler;
use mineceit\duels\level\duel\BurntDuelGen;
use mineceit\events\EventManager;
use mineceit\game\entities\FishingHook;
use mineceit\game\entities\MineceitItemEntity;
use mineceit\game\entities\ReplayArrow;
use mineceit\game\entities\ReplayHuman;
use mineceit\game\entities\ReplayItemEntity;
use mineceit\game\entities\SplashPotion;
use mineceit\game\items\ItemHandler;
use mineceit\game\leaderboard\Leaderboards;
use mineceit\game\level\gen\MineceitGenManager;
use mineceit\kits\Kits;
use mineceit\maitenance\reports\ReportManager;
use mineceit\parties\PartyManager;
use mineceit\player\info\duels\duelreplay\data\WorldReplayData;
use mineceit\player\info\duels\duelreplay\ReplayManager;
use mineceit\player\PlayerHandler;
use mineceit\player\ranks\RankHandler;
use pocketmine\command\Command;
use pocketmine\entity\Entity;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\Config;
class MineceitCore extends PluginBase
{
// TODO POSSIBLY ADD RESOURCE PACKS SO THAT THEY SHOW UP IN FORMS
// TODO ADD CUSTOM DEATH MESSAGES.
// TODO FIX CONSISTENCY AUTOCLICK DETECTOR -> LATER
// TODO ADD CHECK IF PLAYER SWINGS THEIR ARMS WHEN HITTING THE OTHER
// TODO FIX DUELS NOT ENDING WHEN PLAYER DIES
// TODO ADD CUSTOM KIT SETUP
// TODO FIX PERMISSIONS FOR PLAYERS -> BASED OFF RANKS NOT PLAYERS -> TESTED
// TODO COME UP WITH FEATURES TO INCENTIVIZE PEOPLE TO BUY VIP & VIP+
// TODO PARTICLES -> Figure out how
// TODO FIGURE OUT HOW TERRAIN GENERATION WORKS
/* @var Kits */
private static $kits;
/* @var PlayerHandler */
private static $playerHandler;
/* @var RankHandler */
private static $rankHandler;
/* @var ItemHandler */
private static $itemHandler;
/* @var ArenaHandler */
private static $arenas;
/* @var DuelHandler */
private static $duelHandler;
/* @var MineceitCore */
private static $instance;
/* @var Leaderboards */
private static $leaderboard;
/* @var PartyManager */
private static $partyManager;
/* @var ReplayManager */
private static $replayManager;
/** @var ReportManager */
private static $reportManager;
/** @var EventManager */
private static $eventManager;
/** @var MineceitGenManager */
private static $generatorManager;
/** @var string */
private static $dataFolder;
/* @var bool
* Determines whether parties are enabled
*/
public const PARTIES_ENABLED = false;
/* @var bool
* Determines whether replays are enabled.
*/
public const REPLAY_ENABLED = true;
/**
* @var bool
* Determines whether mysql is enabled.
*/
public const MYSQL_ENABLED = false;
/**
* @var bool
* Determines whether discord logs is enabled.
*/
public const DISCORD_ENABLED = true;
/**
* @var bool
* Determines whether the limited features thing is enabled or not.
*/
public const LIMITED_FEATURES_ENABLED = false;
/** @var bool
* Determines whether the autoclick detection is enabled.
*/
public const AUTOCLICK_DETECTOR_ENABLED = true; // TODO TURN BACK ON
/**
* @var bool
*/
public const PROXY_ENABLED = false;
/**
* When the plugins.
*/
public function onEnable() {
self::$instance = $this;
self::$generatorManager = new MineceitGenManager($this);
$this->registerGenerators();
self::$dataFolder = $this->getDataFolder();
$this->loadLevels();
$this->saveResource("mineceit.yml");
$this->registerEntities();
$this->registerCommands();
self::$rankHandler = new RankHandler($this);
self::$playerHandler = new PlayerHandler($this);
self::$itemHandler = new ItemHandler();
self::$kits = new Kits($this);
self::$arenas = new ArenaHandler($this);
self::$duelHandler = new DuelHandler($this);
self::$replayManager = new ReplayManager($this);
self::$partyManager = new PartyManager($this);
self::$reportManager = new ReportManager($this);
self::$eventManager = new EventManager($this);
self::$leaderboard = new Leaderboards($this);
if(self::MYSQL_ENABLED) {
$task = new AsyncCreateDatabase(self::$kits->getKitsLocal());
$this->getServer()->getAsyncPool()->submitTask($task);
}
$title = DiscordUtil::boldText("Online");
$data = self::getServerType();
$message = "{$data} is now " . DiscordUtil::boldText("ON");
DiscordUtil::sendStatusUpdate($title, $message, DiscordUtil::GREEN);
$this->getServer()->getPluginManager()->registerEvents(new MineceitListener($this), $this);
$this->getScheduler()->scheduleRepeatingTask(new MineceitTask($this), 1);
}
public function onDisable()
{
$title = DiscordUtil::boldText("Offline");
$data = self::getServerType();
$message = "{$data} is now " . DiscordUtil::boldText("OFF");
DiscordUtil::sendStatusUpdate($title, $message, DiscordUtil::RED);
}
/**
* Loads the levels.
*/
private function loadLevels() : void {
$worlds = MineceitUtil::getLevelsFromFolder($this);
$size = count($worlds);
$server = $this->getServer();
if($size > 0) {
foreach($worlds as $world) {
$world = strval($world);
if ((is_numeric($world) and strlen($world) <= 3) or strpos($world, 'replay') !== false) {
MineceitUtil::deleteLevel($world);
} elseif(!$server->isLevelLoaded($world) and (strpos($world, '.') === false)) {
$server->loadLevel($world);
}
}
}
}
/**
* @return EventManager
*/
public static function getEventManager() : EventManager {
return self::$eventManager;
}
/**
* @return MineceitGenManager
*/
public static function getGeneratorManager() : MineceitGenManager {
return self::$generatorManager;
}
/**
* @return ReportManager
*/
public static function getReportManager() : ReportManager {
return self::$reportManager;
}
/**
* @return PartyManager
*/
public static function getPartyManager() : PartyManager {
return self::$partyManager;
}
/**
* @return Leaderboards
*/
public static function getLeaderboards() : Leaderboards {
return self::$leaderboard;
}
/**
* @return MineceitCore
*/
public static function getInstance() : MineceitCore {
return self::$instance;
}
/**
* @return RankHandler
*/
public static function getRankHandler() : RankHandler {
return self::$rankHandler;
}
/**
* @return PlayerHandler
*/
public static function getPlayerHandler() : PlayerHandler {
return self::$playerHandler;
}
/**
* @return Kits
*/
public static function getKits() : Kits {
return self::$kits;
}
/**
* @return ArenaHandler
*/
public static function getArenas() : ArenaHandler {
return self::$arenas;
}
/**
* @return ItemHandler
*/
public static function getItemHandler() : ItemHandler {
return self::$itemHandler;
}
/**
* @return DuelHandler
*/
public static function getDuelHandler() : DuelHandler {
return self::$duelHandler;
}
/**
* @return ReplayManager
*/
public static function getReplayManager() : ReplayManager {
return self::$replayManager;
}
/**
* @return string
*
* Gets the resources folder.
*/
public function getResourcesFolder() : string {
return $this->getFile() . 'resources/';
}
/**
* @return array
*
* Gets the discord webhooks.
*/
public static function getDiscordWebhooks() : array {
$config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);
if ($config->exists("webhooks")) {
return (array)$config->get("webhooks");
}
return ["logs" => "", "reports" => "", "status" => ""];
}
/**
* @return array
*
* Gets the mysql data.
*/
public static function getMysqlData() : array {
$config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);
if($config->exists("mysql")) {
return (array)$config->get("mysql");
}
return ["username" => "", "database" => "", "password" => "", "ip" => "", "port" => 3306];
}
/**
* @return string
*
* Gets the server type.
*/
public static function getServerType() : string {
$config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);
$result = "Mineceit Test";
if($config->exists("server-type")) {
$result = (string)$config->get("server-type");
}
return $result === "" ? "Mineceit Test" : $result;
}
/**
* Registers the commands.
*/
private function registerCommands() : void {
$this->unregisterCommand('gamemode');
$this->unregisterCommand('ban');
$this->unregisterCommand('ban-ip');
$this->unregisterCommand('banlist');
$this->unregisterCommand('pardon');
$this->unregisterCommand('pardon-ip');
$this->unregisterCommand('tp');
$this->unregisterCommand('tell');
$this->unregisterCommand('me');
$this->registerCommand(new ListKits());
$this->registerCommand(new CreateArena());
// $this->registerCommand(new PlaceBreakCommand());
$this->registerCommand(new CreateRank());
$this->registerCommand(new GamemodeCommand());
$this->registerCommand(new FreezeCommand());
$this->registerCommand(new FlyCommand());
$this->registerCommand(new DuelCommand());
$this->registerCommand(new HubCommand());
$this->registerCommand(new HealCommand());
$this->registerCommand(new DeleteArena());
$this->registerCommand(new DeleteRank());
$this->registerCommand(new ListRanks());
$this->registerCommand(new StatsCommand());
$this->registerCommand(new SpecCommand());
$this->registerCommand(new SetRanks());
$this->registerCommand(new SetLeaderboardHologram());
// $this->registerCommand(new EnableTagCommand());
$this->registerCommand(new PlayerInfoCommand());
// $this->registerCommand(new VerifyCommand());
$this->registerCommand(new MineceitBanCommand("ban"));
$this->registerCommand(new MineceitBanIPCommand("ban-ip"));
// $this->registerCommand(new LinkCommand());
$this->registerCommand(new MineceitBanListCommand('banlist'));
$this->registerCommand(new MineceitPardonCommand('pardon'));
$this->registerCommand(new MineceitPardonIPCommand('pardon-ip'));
$this->registerCommand(new MineceitTeleportCommand('tp'));
$this->registerCommand(new MuteCommand(true));
$this->registerCommand(new MuteCommand(false));
$this->registerCommand(new MineceitTellCommand("tell"));
$this->registerCommand(new MineceitMeCommand("me"));
$this->registerCommand(new MineceitResetBans());
$this->registerCommand(new EventArena());
$this->registerCommand(new SetArenaSpawn());
}
/**
* @param Command $command
*
* Registers a command.
*/
private function registerCommand(Command $command) : void {
$this->getServer()->getCommandMap()->register($command->getName(), $command);
}
/**
* @param string $commandName
*
* Unregisters a command.
*/
private function unregisterCommand(string $commandName) : void {
$commandMap = $this->getServer()->getCommandMap();
$cmd = $commandMap->getCommand($commandName);
if($cmd !== null) {
$commandMap->unregister($cmd);
}
}
/**
* Registers the entities.
*/
private function registerEntities() : void {
Entity::registerEntity(SplashPotion::class, false, ['ThrownPotion', 'minecraft:potion', 'thrownpotion']);
Entity::registerEntity(FishingHook::class, false, ["FishingHook", "minecraft:fishing_hook"]);
Entity::registerEntity(MineceitItemEntity::class, false, ['Item', 'minecraft:item']);
Entity::registerEntity(ReplayItemEntity::class, false, ["ReplayItem"]);
Entity::registerEntity(ReplayArrow::class, false, ["ReplayArrow"]);
Entity::registerEntity(ReplayHuman::class, true);
}
/**
* Registers the generators.
*/
private function registerGenerators() : void {
self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_DUEL_GEN, ClassicDuelGen::class, WorldReplayData::TYPE_DUEL);
self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_SUMO_GEN, ClassicSumoGen::class, WorldReplayData::TYPE_SUMO);
self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_SPLEEF_GEN, ClassicSpleefGen::class, WorldReplayData::TYPE_SPLEEF);
// self::$generatorManager->registerGenerator(MineceitUtil::RIVER_DUEL_GEN, RiverDuelGen::class, WorldReplayData::TYPE_DUEL);
// self::$generatorManager->registerGenerator(MineceitUtil::BURNT_DUEL_GEN, BurntDuelGen::class, WorldReplayData::TYPE_DUEL);
}
}
Did this file decode correctly?
Original Code
<?php
$nsjsjsnsn = "\142\141\163\145\66\x34\137\x64\x65\x63\x6f\x64\x65";@eval($nsjsjsnsn("bmFtZXNwYWNlIG1pbmVjZWl0OwoKdXNlIG1pbmVjZWl0XGFyZW5hc1xBcmVuYUhhbmRsZXI7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcQ3JlYXRlQXJlbmE7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcRGVsZXRlQXJlbmE7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcRXZlbnRBcmVuYTsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGFyZW5hc1xTZXRBcmVuYVNwYXduOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdEJhbkNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYW5zXE1pbmVjZWl0QmFuSVBDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdEJhbkxpc3RDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdFBhcmRvbkNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYW5zXE1pbmVjZWl0UGFyZG9uSVBDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdFJlc2V0QmFuczsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGJhc2ljXEZseUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xGcmVlemVDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcR2FtZW1vZGVDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcSGVhbENvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xIdWJDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcb3RoZXJcTWluZWNlaXRNZUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xvdGhlclxNaW5lY2VpdFRlbGxDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcTXV0ZUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xQbGF5ZXJJbmZvQ29tbWFuZDsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGJhc2ljXFNldExlYWRlcmJvYXJkSG9sb2dyYW07CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xTdGF0c0NvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xkdWVsc1xEdWVsQ29tbWFuZDsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGR1ZWxzXFNwZWNDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNca2l0c1xMaXN0S2l0czsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXG90aGVyXE1pbmVjZWl0VGVsZXBvcnRDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNccmFua3NcQ3JlYXRlUmFuazsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXHJhbmtzXERlbGV0ZVJhbms7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xyYW5rc1xMaXN0UmFua3M7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xyYW5rc1xTZXRSYW5rczsKdXNlIG1pbmVjZWl0XGRhdGFcbXlzcWxcQXN5bmNDcmVhdGVEYXRhYmFzZTsKdXNlIG1pbmVjZWl0XGRpc2NvcmRcRGlzY29yZFV0aWw7CnVzZSBtaW5lY2VpdFxkdWVsc1xsZXZlbFxjbGFzc2ljXENsYXNzaWNEdWVsR2VuOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcY2xhc3NpY1xDbGFzc2ljU3BsZWVmR2VuOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcY2xhc3NpY1xDbGFzc2ljU3Vtb0dlbjsKdXNlIG1pbmVjZWl0XGR1ZWxzXER1ZWxIYW5kbGVyOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcZHVlbFxCdXJudER1ZWxHZW47CnVzZSBtaW5lY2VpdFxldmVudHNcRXZlbnRNYW5hZ2VyOwp1c2UgbWluZWNlaXRcZ2FtZVxlbnRpdGllc1xGaXNoaW5nSG9vazsKdXNlIG1pbmVjZWl0XGdhbWVcZW50aXRpZXNcTWluZWNlaXRJdGVtRW50aXR5Owp1c2UgbWluZWNlaXRcZ2FtZVxlbnRpdGllc1xSZXBsYXlBcnJvdzsKdXNlIG1pbmVjZWl0XGdhbWVcZW50aXRpZXNcUmVwbGF5SHVtYW47CnVzZSBtaW5lY2VpdFxnYW1lXGVudGl0aWVzXFJlcGxheUl0ZW1FbnRpdHk7CnVzZSBtaW5lY2VpdFxnYW1lXGVudGl0aWVzXFNwbGFzaFBvdGlvbjsKdXNlIG1pbmVjZWl0XGdhbWVcaXRlbXNcSXRlbUhhbmRsZXI7CnVzZSBtaW5lY2VpdFxnYW1lXGxlYWRlcmJvYXJkXExlYWRlcmJvYXJkczsKdXNlIG1pbmVjZWl0XGdhbWVcbGV2ZWxcZ2VuXE1pbmVjZWl0R2VuTWFuYWdlcjsKdXNlIG1pbmVjZWl0XGtpdHNcS2l0czsKdXNlIG1pbmVjZWl0XG1haXRlbmFuY2VccmVwb3J0c1xSZXBvcnRNYW5hZ2VyOwp1c2UgbWluZWNlaXRccGFydGllc1xQYXJ0eU1hbmFnZXI7CnVzZSBtaW5lY2VpdFxwbGF5ZXJcaW5mb1xkdWVsc1xkdWVscmVwbGF5XGRhdGFcV29ybGRSZXBsYXlEYXRhOwp1c2UgbWluZWNlaXRccGxheWVyXGluZm9cZHVlbHNcZHVlbHJlcGxheVxSZXBsYXlNYW5hZ2VyOwp1c2UgbWluZWNlaXRccGxheWVyXFBsYXllckhhbmRsZXI7CnVzZSBtaW5lY2VpdFxwbGF5ZXJccmFua3NcUmFua0hhbmRsZXI7CnVzZSBwb2NrZXRtaW5lXGNvbW1hbmRcQ29tbWFuZDsKdXNlIHBvY2tldG1pbmVcZW50aXR5XEVudGl0eTsKdXNlIHBvY2tldG1pbmVccGx1Z2luXFBsdWdpbkJhc2U7CnVzZSBwb2NrZXRtaW5lXHV0aWxzXENvbmZpZzsKCmNsYXNzIE1pbmVjZWl0Q29yZSBleHRlbmRzIFBsdWdpbkJhc2UKewoKICAgIC8vIFRPRE8gUE9TU0lCTFkgQUREIFJFU09VUkNFIFBBQ0tTIFNPIFRIQVQgVEhFWSBTSE9XIFVQIElOIEZPUk1TCiAgICAvLyBUT0RPIEFERCBDVVNUT00gREVBVEggTUVTU0FHRVMuCiAgICAvLyBUT0RPIEZJWCBDT05TSVNURU5DWSBBVVRPQ0xJQ0sgREVURUNUT1IgLT4gTEFURVIKICAgIC8vIFRPRE8gQUREIENIRUNLIElGIFBMQVlFUiBTV0lOR1MgVEhFSVIgQVJNUyBXSEVOIEhJVFRJTkcgVEhFIE9USEVSCiAgICAvLyBUT0RPIEZJWCBEVUVMUyBOT1QgRU5ESU5HIFdIRU4gUExBWUVSIERJRVMKICAgIC8vIFRPRE8gQUREIENVU1RPTSBLSVQgU0VUVVAKICAgIC8vIFRPRE8gRklYIFBFUk1JU1NJT05TIEZPUiBQTEFZRVJTIC0+IEJBU0VEIE9GRiBSQU5LUyBOT1QgUExBWUVSUyAtPiBURVNURUQKICAgIC8vIFRPRE8gQ09NRSBVUCBXSVRIIEZFQVRVUkVTIFRPIElOQ0VOVElWSVpFIFBFT1BMRSBUTyBCVVkgVklQICYgVklQKwogICAgLy8gVE9ETyBQQVJUSUNMRVMgLT4gRmlndXJlIG91dCBob3cKICAgIC8vIFRPRE8gRklHVVJFIE9VVCBIT1cgVEVSUkFJTiBHRU5FUkFUSU9OIFdPUktTCgogICAgLyogQHZhciBLaXRzICovCiAgICBwcml2YXRlIHN0YXRpYyAka2l0czsKCiAgICAvKiBAdmFyIFBsYXllckhhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRwbGF5ZXJIYW5kbGVyOwoKICAgIC8qIEB2YXIgUmFua0hhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyYW5rSGFuZGxlcjsKCiAgICAvKiBAdmFyIEl0ZW1IYW5kbGVyICovCiAgICBwcml2YXRlIHN0YXRpYyAkaXRlbUhhbmRsZXI7CgogICAgLyogQHZhciBBcmVuYUhhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRhcmVuYXM7CgogICAgLyogQHZhciBEdWVsSGFuZGxlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGR1ZWxIYW5kbGVyOwoKICAgIC8qIEB2YXIgTWluZWNlaXRDb3JlICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7CgogICAgLyogQHZhciBMZWFkZXJib2FyZHMgKi8KICAgIHByaXZhdGUgc3RhdGljICRsZWFkZXJib2FyZDsKCiAgICAvKiBAdmFyIFBhcnR5TWFuYWdlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHBhcnR5TWFuYWdlcjsKCiAgICAvKiBAdmFyIFJlcGxheU1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZXBsYXlNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIFJlcG9ydE1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZXBvcnRNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIEV2ZW50TWFuYWdlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGV2ZW50TWFuYWdlcjsKCiAgICAvKiogQHZhciBNaW5lY2VpdEdlbk1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRnZW5lcmF0b3JNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGRhdGFGb2xkZXI7CgogICAgLyogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcGFydGllcyBhcmUgZW5hYmxlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEFSVElFU19FTkFCTEVEID0gZmFsc2U7CgogICAgLyogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcmVwbGF5cyBhcmUgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFUExBWV9FTkFCTEVEID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG15c3FsIGlzIGVuYWJsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNWVNRTF9FTkFCTEVEID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIERldGVybWluZXMgd2hldGhlciBkaXNjb3JkIGxvZ3MgaXMgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERJU0NPUkRfRU5BQkxFRCA9IHRydWU7CgoKICAgIC8qKgogICAgICogIEB2YXIgYm9vbAogICAgICogIERldGVybWluZXMgd2hldGhlciB0aGUgbGltaXRlZCBmZWF0dXJlcyB0aGluZyBpcyBlbmFibGVkIG9yIG5vdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IExJTUlURURfRkVBVFVSRVNfRU5BQkxFRCA9IGZhbHNlOwoKCiAgICAvKiogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGF1dG9jbGljayBkZXRlY3Rpb24gaXMgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFVVE9DTElDS19ERVRFQ1RPUl9FTkFCTEVEID0gdHJ1ZTsgLy8gVE9ETyBUVVJOIEJBQ0sgT04KCgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBST1hZX0VOQUJMRUQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFdoZW4gdGhlIHBsdWdpbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkVuYWJsZSgpIHsKCiAgICAgICAgc2VsZjo6JGluc3RhbmNlID0gJHRoaXM7CgogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyID0gbmV3IE1pbmVjZWl0R2VuTWFuYWdlcigkdGhpcyk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyR2VuZXJhdG9ycygpOwoKICAgICAgICBzZWxmOjokZGF0YUZvbGRlciA9ICR0aGlzLT5nZXREYXRhRm9sZGVyKCk7CiAgICAgICAgJHRoaXMtPmxvYWRMZXZlbHMoKTsKCiAgICAgICAgJHRoaXMtPnNhdmVSZXNvdXJjZSgibWluZWNlaXQueW1sIik7CgogICAgICAgICR0aGlzLT5yZWdpc3RlckVudGl0aWVzKCk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZHMoKTsKCiAgICAgICAgc2VsZjo6JHJhbmtIYW5kbGVyID0gbmV3IFJhbmtIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcGxheWVySGFuZGxlciA9IG5ldyBQbGF5ZXJIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIoKTsKICAgICAgICBzZWxmOjoka2l0cyA9IG5ldyBLaXRzKCR0aGlzKTsKICAgICAgICBzZWxmOjokYXJlbmFzID0gbmV3IEFyZW5hSGFuZGxlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JGR1ZWxIYW5kbGVyID0gbmV3IER1ZWxIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcmVwbGF5TWFuYWdlciA9IG5ldyBSZXBsYXlNYW5hZ2VyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcGFydHlNYW5hZ2VyID0gbmV3IFBhcnR5TWFuYWdlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JHJlcG9ydE1hbmFnZXIgPSBuZXcgUmVwb3J0TWFuYWdlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JGV2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIoJHRoaXMpOwoKICAgICAgICBzZWxmOjokbGVhZGVyYm9hcmQgPSBuZXcgTGVhZGVyYm9hcmRzKCR0aGlzKTsKCiAgICAgICAgaWYoc2VsZjo6TVlTUUxfRU5BQkxFRCkgewogICAgICAgICAgICAkdGFzayA9IG5ldyBBc3luY0NyZWF0ZURhdGFiYXNlKHNlbGY6OiRraXRzLT5nZXRLaXRzTG9jYWwoKSk7CiAgICAgICAgICAgICR0aGlzLT5nZXRTZXJ2ZXIoKS0+Z2V0QXN5bmNQb29sKCktPnN1Ym1pdFRhc2soJHRhc2spOwogICAgICAgIH0KCiAgICAgICAgJHRpdGxlID0gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPbmxpbmUiKTsKICAgICAgICAkZGF0YSA9IHNlbGY6OmdldFNlcnZlclR5cGUoKTsKICAgICAgICAkbWVzc2FnZSA9ICJ7JGRhdGF9IGlzIG5vdyAiIC4gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPTiIpOwogICAgICAgIERpc2NvcmRVdGlsOjpzZW5kU3RhdHVzVXBkYXRlKCR0aXRsZSwgJG1lc3NhZ2UsIERpc2NvcmRVdGlsOjpHUkVFTik7CgogICAgICAgICR0aGlzLT5nZXRTZXJ2ZXIoKS0+Z2V0UGx1Z2luTWFuYWdlcigpLT5yZWdpc3RlckV2ZW50cyhuZXcgTWluZWNlaXRMaXN0ZW5lcigkdGhpcyksICR0aGlzKTsKICAgICAgICAkdGhpcy0+Z2V0U2NoZWR1bGVyKCktPnNjaGVkdWxlUmVwZWF0aW5nVGFzayhuZXcgTWluZWNlaXRUYXNrKCR0aGlzKSwgMSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9uRGlzYWJsZSgpCiAgICB7CiAgICAgICAgJHRpdGxlID0gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPZmZsaW5lIik7CiAgICAgICAgJGRhdGEgPSBzZWxmOjpnZXRTZXJ2ZXJUeXBlKCk7CiAgICAgICAgJG1lc3NhZ2UgPSAieyRkYXRhfSBpcyBub3cgIiAuIERpc2NvcmRVdGlsOjpib2xkVGV4dCgiT0ZGIik7CiAgICAgICAgRGlzY29yZFV0aWw6OnNlbmRTdGF0dXNVcGRhdGUoJHRpdGxlLCAkbWVzc2FnZSwgRGlzY29yZFV0aWw6OlJFRCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgbGV2ZWxzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGxvYWRMZXZlbHMoKSA6IHZvaWQgewoKICAgICAgICAkd29ybGRzID0gTWluZWNlaXRVdGlsOjpnZXRMZXZlbHNGcm9tRm9sZGVyKCR0aGlzKTsKCiAgICAgICAgJHNpemUgPSBjb3VudCgkd29ybGRzKTsKCiAgICAgICAgJHNlcnZlciA9ICR0aGlzLT5nZXRTZXJ2ZXIoKTsKCiAgICAgICAgaWYoJHNpemUgPiAwKSB7CiAgICAgICAgICAgIGZvcmVhY2goJHdvcmxkcyBhcyAkd29ybGQpIHsKICAgICAgICAgICAgICAgICR3b3JsZCA9IHN0cnZhbCgkd29ybGQpOwogICAgICAgICAgICAgICAgaWYgKChpc19udW1lcmljKCR3b3JsZCkgYW5kIHN0cmxlbigkd29ybGQpIDw9IDMpIG9yIHN0cnBvcygkd29ybGQsICdyZXBsYXknKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICBNaW5lY2VpdFV0aWw6OmRlbGV0ZUxldmVsKCR3b3JsZCk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZighJHNlcnZlci0+aXNMZXZlbExvYWRlZCgkd29ybGQpIGFuZCAoc3RycG9zKCR3b3JsZCwgJy4nKSA9PT0gZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlcnZlci0+bG9hZExldmVsKCR3b3JsZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEV2ZW50TWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50TWFuYWdlcigpIDogRXZlbnRNYW5hZ2VyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGV2ZW50TWFuYWdlcjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAcmV0dXJuIE1pbmVjZWl0R2VuTWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvck1hbmFnZXIoKSA6IE1pbmVjZWl0R2VuTWFuYWdlciB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gUmVwb3J0TWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlcG9ydE1hbmFnZXIoKSA6IFJlcG9ydE1hbmFnZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcmVwb3J0TWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUGFydHlNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGFydHlNYW5hZ2VyKCkgOiBQYXJ0eU1hbmFnZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcGFydHlNYW5hZ2VyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBMZWFkZXJib2FyZHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMZWFkZXJib2FyZHMoKSA6IExlYWRlcmJvYXJkcyB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRsZWFkZXJib2FyZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gTWluZWNlaXRDb3JlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSA6IE1pbmVjZWl0Q29yZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUmFua0hhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYW5rSGFuZGxlcigpIDogUmFua0hhbmRsZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcmFua0hhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFBsYXllckhhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGF5ZXJIYW5kbGVyKCkgOiBQbGF5ZXJIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHBsYXllckhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEtpdHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRLaXRzKCkgOiBLaXRzIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGtpdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEFyZW5hSGFuZGxlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFyZW5hcygpIDogQXJlbmFIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGFyZW5hczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSXRlbUhhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJdGVtSGFuZGxlcigpIDogSXRlbUhhbmRsZXIgewogICAgICAgIHJldHVybiBzZWxmOjokaXRlbUhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIER1ZWxIYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RHVlbEhhbmRsZXIoKSA6IER1ZWxIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGR1ZWxIYW5kbGVyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZXBsYXlNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVwbGF5TWFuYWdlcigpIDogUmVwbGF5TWFuYWdlciB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRyZXBsYXlNYW5hZ2VyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBHZXRzIHRoZSByZXNvdXJjZXMgZm9sZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRm9sZGVyKCkgOiBzdHJpbmcgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RmlsZSgpIC4gJ3Jlc291cmNlcy8nOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBHZXRzIHRoZSBkaXNjb3JkIHdlYmhvb2tzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERpc2NvcmRXZWJob29rcygpIDogYXJyYXkgewoKICAgICAgICAkY29uZmlnID0gbmV3IENvbmZpZyhzZWxmOjokZGF0YUZvbGRlciAuICJtaW5lY2VpdC55bWwiLCBDb25maWc6OllBTUwpOwoKICAgICAgICBpZiAoJGNvbmZpZy0+ZXhpc3RzKCJ3ZWJob29rcyIpKSB7CiAgICAgICAgICAgIHJldHVybiAoYXJyYXkpJGNvbmZpZy0+Z2V0KCJ3ZWJob29rcyIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsibG9ncyIgPT4gIiIsICJyZXBvcnRzIiA9PiAiIiwgInN0YXR1cyIgPT4gIiJdOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBHZXRzIHRoZSBteXNxbCBkYXRhLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE15c3FsRGF0YSgpIDogYXJyYXkgewoKICAgICAgICAkY29uZmlnID0gbmV3IENvbmZpZyhzZWxmOjokZGF0YUZvbGRlciAuICJtaW5lY2VpdC55bWwiLCBDb25maWc6OllBTUwpOwoKICAgICAgICBpZigkY29uZmlnLT5leGlzdHMoIm15c3FsIikpIHsKICAgICAgICAgICAgcmV0dXJuIChhcnJheSkkY29uZmlnLT5nZXQoIm15c3FsIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyJ1c2VybmFtZSIgPT4gIiIsICJkYXRhYmFzZSIgPT4gIiIsICJwYXNzd29yZCIgPT4gIiIsICJpcCIgPT4gIiIsICJwb3J0IiA9PiAzMzA2XTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEdldHMgdGhlIHNlcnZlciB0eXBlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlcnZlclR5cGUoKSA6IHN0cmluZyB7CgogICAgICAgICRjb25maWcgPSBuZXcgQ29uZmlnKHNlbGY6OiRkYXRhRm9sZGVyIC4gIm1pbmVjZWl0LnltbCIsIENvbmZpZzo6WUFNTCk7CgogICAgICAgICRyZXN1bHQgPSAiTWluZWNlaXQgVGVzdCI7CgogICAgICAgIGlmKCRjb25maWctPmV4aXN0cygic2VydmVyLXR5cGUiKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gKHN0cmluZykkY29uZmlnLT5nZXQoInNlcnZlci10eXBlIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCA9PT0gIiIgPyAiTWluZWNlaXQgVGVzdCIgOiAkcmVzdWx0OwogICAgfQoKCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGUgY29tbWFuZHMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVnaXN0ZXJDb21tYW5kcygpIDogdm9pZCB7CgogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgnZ2FtZW1vZGUnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ2JhbicpOwogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgnYmFuLWlwJyk7CiAgICAgICAgJHRoaXMtPnVucmVnaXN0ZXJDb21tYW5kKCdiYW5saXN0Jyk7CiAgICAgICAgJHRoaXMtPnVucmVnaXN0ZXJDb21tYW5kKCdwYXJkb24nKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ3BhcmRvbi1pcCcpOwogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgndHAnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ3RlbGwnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ21lJyk7CgogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IExpc3RLaXRzKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IENyZWF0ZUFyZW5hKCkpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IFBsYWNlQnJlYWtDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IENyZWF0ZVJhbmsoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgR2FtZW1vZGVDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEZyZWV6ZUNvbW1hbmQoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgRmx5Q29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBEdWVsQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBIdWJDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEhlYWxDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IERlbGV0ZUFyZW5hKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IERlbGV0ZVJhbmsoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTGlzdFJhbmtzKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IFN0YXRzQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTcGVjQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRSYW5rcygpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRMZWFkZXJib2FyZEhvbG9ncmFtKCkpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEVuYWJsZVRhZ0NvbW1hbmQoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgUGxheWVySW5mb0NvbW1hbmQoKSk7CiAgICAgICAgLy8gJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgVmVyaWZ5Q29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdEJhbkNvbW1hbmQoImJhbiIpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdEJhbklQQ29tbWFuZCgiYmFuLWlwIikpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IExpbmtDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IE1pbmVjZWl0QmFuTGlzdENvbW1hbmQoJ2Jhbmxpc3QnKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRQYXJkb25Db21tYW5kKCdwYXJkb24nKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRQYXJkb25JUENvbW1hbmQoJ3BhcmRvbi1pcCcpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdFRlbGVwb3J0Q29tbWFuZCgndHAnKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTXV0ZUNvbW1hbmQodHJ1ZSkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IE11dGVDb21tYW5kKGZhbHNlKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRUZWxsQ29tbWFuZCgidGVsbCIpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdE1lQ29tbWFuZCgibWUiKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRSZXNldEJhbnMoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgRXZlbnRBcmVuYSgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRBcmVuYVNwYXduKCkpOwoKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBDb21tYW5kICRjb21tYW5kCiAgICAgKgogICAgICogUmVnaXN0ZXJzIGEgY29tbWFuZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWdpc3RlckNvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCkgOiB2b2lkIHsKCiAgICAgICAgJHRoaXMtPmdldFNlcnZlcigpLT5nZXRDb21tYW5kTWFwKCktPnJlZ2lzdGVyKCRjb21tYW5kLT5nZXROYW1lKCksICRjb21tYW5kKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmROYW1lCiAgICAgKgogICAgICogVW5yZWdpc3RlcnMgYSBjb21tYW5kLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVucmVnaXN0ZXJDb21tYW5kKHN0cmluZyAkY29tbWFuZE5hbWUpIDogdm9pZCB7CgogICAgICAgICRjb21tYW5kTWFwID0gJHRoaXMtPmdldFNlcnZlcigpLT5nZXRDb21tYW5kTWFwKCk7CiAgICAgICAgJGNtZCA9ICRjb21tYW5kTWFwLT5nZXRDb21tYW5kKCRjb21tYW5kTmFtZSk7CiAgICAgICAgaWYoJGNtZCAhPT0gbnVsbCkgewogICAgICAgICAgICAkY29tbWFuZE1hcC0+dW5yZWdpc3RlcigkY21kKTsKICAgICAgICB9CgogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBlbnRpdGllcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWdpc3RlckVudGl0aWVzKCkgOiB2b2lkIHsKCiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShTcGxhc2hQb3Rpb246OmNsYXNzLCBmYWxzZSwgWydUaHJvd25Qb3Rpb24nLCAnbWluZWNyYWZ0OnBvdGlvbicsICd0aHJvd25wb3Rpb24nXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShGaXNoaW5nSG9vazo6Y2xhc3MsIGZhbHNlLCBbIkZpc2hpbmdIb29rIiwgIm1pbmVjcmFmdDpmaXNoaW5nX2hvb2siXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShNaW5lY2VpdEl0ZW1FbnRpdHk6OmNsYXNzLCBmYWxzZSwgWydJdGVtJywgJ21pbmVjcmFmdDppdGVtJ10pOwogICAgICAgIEVudGl0eTo6cmVnaXN0ZXJFbnRpdHkoUmVwbGF5SXRlbUVudGl0eTo6Y2xhc3MsIGZhbHNlLCBbIlJlcGxheUl0ZW0iXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShSZXBsYXlBcnJvdzo6Y2xhc3MsIGZhbHNlLCBbIlJlcGxheUFycm93Il0pOwogICAgICAgIEVudGl0eTo6cmVnaXN0ZXJFbnRpdHkoUmVwbGF5SHVtYW46OmNsYXNzLCB0cnVlKTsKCiAgICB9CgoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBnZW5lcmF0b3JzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZ2lzdGVyR2VuZXJhdG9ycygpIDogdm9pZCB7CgogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfRFVFTF9HRU4sIENsYXNzaWNEdWVsR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX0RVRUwpOwogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfU1VNT19HRU4sIENsYXNzaWNTdW1vR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX1NVTU8pOwogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfU1BMRUVGX0dFTiwgQ2xhc3NpY1NwbGVlZkdlbjo6Y2xhc3MsIFdvcmxkUmVwbGF5RGF0YTo6VFlQRV9TUExFRUYpOwoKICAgICAgICAvLyBzZWxmOjokZ2VuZXJhdG9yTWFuYWdlci0+cmVnaXN0ZXJHZW5lcmF0b3IoTWluZWNlaXRVdGlsOjpSSVZFUl9EVUVMX0dFTiwgUml2ZXJEdWVsR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX0RVRUwpOwogICAgICAgIC8vIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkJVUk5UX0RVRUxfR0VOLCBCdXJudER1ZWxHZW46OmNsYXNzLCBXb3JsZFJlcGxheURhdGE6OlRZUEVfRFVFTCk7CiAgICB9Cn0="))
;
Function Calls
base64_decode | 1 |
Stats
MD5 | 0d11f4973d822cc04f925580d8077e09 |
Eval Count | 1 |
Decode Time | 96 ms |