Merge branch 'ent-7122-nuevo-update-manager' into 'develop'

Embebed UMC in Pandora FMS

See merge request artica/pandorafms!3894
This commit is contained in:
Daniel Rodriguez 2021-06-14 11:56:43 +00:00
commit 08011d60b2
1358 changed files with 123477 additions and 6030 deletions

View File

@ -148,7 +148,7 @@ EOF_INDEX
sed -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini
sed -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini
sed -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini
sed -i -e "s/^memory_limit.*/memory_limit = 500M/g" /etc/php.ini
sed -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini
echo "- Setting Public URL: $PUBLICURL"
q=$(mysql -u$DBUSER -p$DBPASS $DBNAME -h$DBHOST -sNe "select token from tconfig;" | grep public_url)

View File

@ -73,7 +73,7 @@ enterprise/extensions/ipam.php
enterprise/extensions/ipam
enterprise/extensions/disabled/visual_console_manager.php
enterprise/extensions/visual_console_manager.php
pandora_console/extensions/net_tools.php
extensions/net_tools.php
enterprise/godmode/agentes/module_manager_editor_web.php
enterprise/include/ajax/web_server_module_debug.php
enterprise/include/class/WebServerModuleDebug.class.php
@ -82,4 +82,11 @@ include/lib/WSManager.php
include/lib/WebSocketServer.php
include/lib/WebSocketUser.php
operation/network/network_explorer.php
operation/vsual_console/pure_ajax.php
operation/visual_console/pure_ajax.php
include/ajax/update_manager.ajax.php
godmode/update_manager/update_manager.css
godmode/update_manager/update_manager.offline.php
godmode/update_manager/update_manager.online.php
include/javascript/update_manager.js
enterprise/include/functions_update_manager.php
include/ajax/rolling_release.ajax.php

View File

@ -37,14 +37,14 @@ require_once $config['homedir'].'/include/functions_update_manager.php';
$current_package = update_manager_get_current_package();
if ($current_package == 0) {
$build_package_version = $build_version;
if ($current_package === null) {
$build_package_version = 'Build '.$build_version;
} else {
$build_package_version = $current_package;
$build_package_version = 'OUM '.$current_package;
}
echo __(
'%s %s - Build %s - MR %s',
'%s %s - %s - MR %s',
get_product_name(),
$pandora_version,
$build_package_version,

View File

@ -0,0 +1,69 @@
<?php
/**
* Static page to lock access to console
*
* @category Wizard
* @package Pandora FMS
* @subpackage Applications.VMware
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
ui_require_css_file('maintenance');
?>
<html>
<body>
<h1>Ups ...</h1>
<div class="responsive">
<p><?php echo __('Maintenance tasks in progress'); ?></p>
<br>
<br>
<?php
html_print_image(
'images/maintenance.png',
false,
[
'class' => 'responsive',
'width' => 800,
]
);
?>
<br>
<br>
<p><?php echo __('You will be automatically redirected when all tasks finish'); ?></p>
</div>
</body>
<script type="text/javascript">
$(document).ready(function() {
setTimeout(
function() {
location.reload();
},
10000
);
})
</script>
</html>

View File

@ -29,24 +29,16 @@
// Begin.
global $config;
require_once $config['homedir'].'/include/functions_update_manager.php';
require_once $config['homedir'].'/include/functions_register.php';
require_once $config['homedir'].'/include/class/WelcomeWindow.class.php';
if (is_ajax()) {
if ((bool) is_ajax() === true) {
// Parse responses, flow control.
$configuration_wizard = get_parameter('save_required_wizard', 0);
$change_language = get_parameter('change_language', 0);
$cancel_wizard = get_parameter('cancel_wizard', 0);
// Console registration.
$cancel_registration = get_parameter('cancel_registration', 0);
$register_console = get_parameter('register_console', 0);
// Newsletter.
$cancel_newsletter = get_parameter('cancel_newsletter', 0);
$register_newsletter = get_parameter('register_newsletter', 0);
// Load wizards.
$load_wizards = get_parameter('load_wizards', '');
@ -58,16 +50,8 @@ if (is_ajax()) {
case 'initial':
return config_wiz_modal(false, false);
case 'registration':
return registration_wiz_modal(false, false);
case 'newsletter':
return newsletter_wiz_modal(false, false);
case 'all':
config_wiz_modal(false, false);
registration_wiz_modal(false, false);
newsletter_wiz_modal(false, false);
return;
default:
@ -90,31 +74,7 @@ if (is_ajax()) {
config_update_value('initial_wizard', 1);
}
// Update Manager registration.
if ($cancel_registration) {
config_update_value('pandora_uid', 'OFFLINE');
}
if ($register_console) {
$feedback = registration_wiz_process();
}
// Newsletter.
if ($cancel_newsletter) {
db_process_sql_update(
'tusuario',
['middlename' => -1],
['id_user' => $config['id_user']]
);
// XXX: Also notify UpdateManager.
}
if ($register_newsletter) {
$feedback = newsletter_wiz_process();
}
if (is_array($feedback)) {
if (is_array($feedback) === true) {
echo json_encode($feedback);
}
@ -123,60 +83,23 @@ if (is_ajax()) {
exit();
}
ui_require_css_file('register');
$initial = isset($config['initial_wizard']) !== true
|| $config['initial_wizard'] != '1';
$newsletter = db_get_value(
'middlename',
'tusuario',
'id_user',
$config['id_user']
);
$show_newsletter = $newsletter == '0' || $newsletter == '';
$registration = isset($config['pandora_uid']) !== true
|| $config['pandora_uid'] == '';
if ($initial && users_is_admin()) {
// Show all forms in order.
// 1- Ask for email, timezone, etc. Fullfill alerts and user mail.
config_wiz_modal(
false,
true,
(($registration === true) ? 'show_registration_wizard()' : null),
null,
true
);
}
if (!$config['disabled_newsletter']) {
if ($registration && users_is_admin()) {
// Prepare registration wizard, not launch. leave control to flow.
registration_wiz_modal(
false,
// Launch only if not being launch from 'initial'.
!$initial,
(($show_newsletter === false) ? 'force_run_newsletter()' : null),
true
);
} else {
if ($show_newsletter) {
// Show newsletter wizard for current user.
newsletter_wiz_modal(
false,
// Launch only if not being call from 'registration'.
!$registration && !$initial,
true
);
}
}
}
$welcome = !$registration && !$show_newsletter && !$initial;
$welcome = !$initial;
try {
$welcome_window = new WelcomeWindow($welcome);
if ($welcome_window !== null) {
@ -271,8 +194,6 @@ if (!$double_auth_enabled
echo '</div>';
}
$newsletter = null;
?>
<script type="text/javascript">

View File

@ -56,6 +56,10 @@ if (is_metaconsole()) {
enterprise_include_once('include/functions_license.php');
}
if ($renew_license_result !== null) {
echo $renew_license_result;
}
if ($update_settings) {
if (!is_metaconsole()) {
// Node.
@ -80,14 +84,23 @@ foreach ($rows as $row) {
$settings->{$row['key']} = $row['value'];
}
echo '<script type="text/javascript">';
?>
<script type="text/javascript">
var texts = {
error_connecting: '<?php echo __('Error while connecting to licence server.'); ?>',
error_license: '<?php echo __('Invalid response while validating license.'); ?>',
error_unknown: '<?php echo __('Unknown error'); ?>',
}
<?php
if (enterprise_installed()) {
print_js_var_enteprise();
}
?>
echo '</script>';
echo '<form method="post">';
</script>
<?php
echo '<form method="post" id="form-license">';
// Retrieve UM url configured (or default).
$url = get_um_url();
@ -147,8 +160,8 @@ if (enterprise_installed() || defined('DESTDIR')) {
}
if (is_metaconsole()) {
ui_require_css_file('pandora_enterprise', '../../'.ENTERPRISE_DIR.'/include/styles/');
ui_require_css_file('register', '../../include/styles/');
ui_require_css_file('pandora_enterprise', ENTERPRISE_DIR.'/include/styles/');
ui_require_css_file('register', 'include/styles/');
} else {
ui_require_css_file('pandora');
ui_require_css_file('pandora_enterprise', ENTERPRISE_DIR.'/include/styles/');

View File

@ -0,0 +1,9 @@
Testing
-------
Using phpunit8 under an unprivileged user:
phpunit8 --cache-result-file=/tmp/ .
Using phpunit (

View File

@ -0,0 +1,84 @@
<?php
/**
* Update Manager Client API for MC distributed updates.
*
* This is an atomic package, this file must be referenced from general product
* menu entries in order to give Update Manager Client work.
*
* DO NOT EDIT THIS FILE. ONLY SETTINGS SECTION.
*
* @category Class
* @package Update Manager
* @subpackage Client
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
global $config;
if (file_exists(__DIR__.'/../../include/config.php') === true) {
include_once __DIR__.'/../../include/config.php';
}
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/resources/helpers.php';
use UpdateManager\API\Server;
$puid = null;
$repo_path = null;
if (is_array($config) === true) {
$puid = $config['pandora_uid'];
$repo_path = $config['remote_config'].'/updates/repo';
if (is_dir($repo_path) === false) {
mkdir($repo_path, 0777, true);
}
}
if (function_exists('db_get_value') === true) {
$license = db_get_value(
db_escape_key_identifier('value'),
'tupdate_settings',
db_escape_key_identifier('key'),
'customer_key'
);
}
if (empty($license) === true) {
$license = 'PANDORA-FREE';
}
try {
$server = new Server(
[
'registration_code' => $puid,
'repo_path' => $repo_path,
'license' => $license,
]
);
$server->run();
} catch (Exception $e) {
echo json_encode(
['error' => $e->getMessage()]
);
}

View File

@ -0,0 +1,28 @@
{
"name": "articapfms/update_manager_client",
"description": "Artica PFMS Update Manager Client",
"type": "library",
"license": "GPL2",
"authors": [
{
"name": "fbsanchez",
"email": "fborja.sanchez@artica.es"
}
],
"autoload": {
"psr-4": {
"UpdateManager\\": "lib/UpdateManager"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"require": {
"php": ">=7.2"
},
"require-dev": {
"phpunit/phpunit": "^8.5.14"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,395 @@
<?php
/**
* Update Manager Client.
*
* This is an atomic package, this file must be referenced from general product
* menu entries in order to give Update Manager Client work.
*
* DO NOT EDIT THIS FILE. ONLY SETTINGS SECTION.
*
* @category Class
* @package Update Manager
* @subpackage Client
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
global $config;
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/resources/helpers.php';
use PandoraFMS\Enterprise\Metaconsole\Synchronizer;
use UpdateManager\UI\Manager;
if (function_exists('check_login') === true) {
check_login();
}
if (function_exists('check_acl') === true
&& function_exists('is_user_admin') === true
) {
if ((bool) check_acl($config['id_user'], 0, 'PM') !== true
&& (bool) is_user_admin($config['id_user']) !== true
) {
db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
include 'general/noaccess.php';
return;
}
}
if (function_exists('db_get_value') === true) {
$license = db_get_value(
db_escape_key_identifier('value'),
'tupdate_settings',
db_escape_key_identifier('key'),
'customer_key'
);
}
if (empty($license) === true) {
$license = 'PANDORA-FREE';
}
if (function_exists('enterprise_hook') === true) {
enterprise_include_once('/include/functions_license.php');
$license_data = enterprise_hook('license_get_info');
if ($license_data !== ENTERPRISE_NOT_HOOK) {
$days_to_expiry = ((strtotime($license_data['expiry_date']) - time()) / (60 * 60 * 24));
if ((int) $license_data['limit_mode'] === 0) {
$limit = db_get_value('count(*)', 'tagente', 'disabled', 0);
} else {
$limit = db_get_value('count(*)', 'tagente_modulo', 'disabled', 0);
}
if ($limit > $license_data['limit']) {
ui_print_warning_message(
__(
'You cannot use update manager %s. You are exceding monitoring limits by %s elements. Please update your license or disable enterprise section by moving enterprise directory to another location and try again.',
$mode_str,
($limit - $license_data['limit'])
)
);
return;
}
if ($days_to_expiry < 0) {
$mode_str = '';
if ($mode === Manager::MODE_ONLINE) {
$mode_str = 'online';
} else if ($mode === Manager::MODE_OFFLINE) {
$mode_str = 'offline';
}
ui_print_warning_message(
__(
'You cannot use update manager %s. This license has expired %d days ago. Please update your license or disable enterprise section by moving enterprise directory to another location and try again.',
$mode_str,
abs($days_to_expiry)
)
);
return;
}
} else {
$license_data = [];
$license_data['count_enabled'] = db_get_value(
'count(*)',
'tagente',
'disabled',
0
);
}
}
// Set dbh.
if (is_array($config) === true && $config['dbconnection'] !== null) {
$dbh = (object) $config['dbconnection'];
} else {
$dbh = null;
}
// Retrieve current definition.
if ($dbh !== null) {
$stm = $dbh->query(
'SELECT `value` FROM `tconfig`
WHERE `token`="current_package"'
);
if ($stm !== false) {
$current_package = $stm->fetch_array();
if ($current_package !== null) {
$current_package = $current_package[0];
}
}
if (empty($current_package) === true) {
// If no current_package is present, use current_package_enterprise.
$stm = $dbh->query(
'SELECT MAX(`value`) FROM `tconfig`
WHERE `token`="current_package_enterprise"'
);
if ($stm !== false) {
$current_package = $stm->fetch_array();
if ($current_package !== null) {
$current_package = $current_package[0];
}
}
}
$mr = 0;
$stm = $dbh->query(
'SELECT MAX(`value`) FROM `tconfig`
WHERE `token`="MR" OR `token`="minor_release"'
);
if ($stm !== false) {
$mr = $stm->fetch_array();
if ($mr !== null) {
$mr = $mr[0];
}
}
$puid = null;
$stm = $dbh->query(
'SELECT `value` FROM `tconfig`
WHERE `token`="pandora_uid"'
);
if ($stm !== false) {
$puid = $stm->fetch_array();
if ($puid !== null) {
$puid = $puid[0];
}
}
} else {
$current_package = 0;
$mr = 0;
$puid = null;
}
if (is_ajax() !== true) {
?>
<script type="text/javascript">
var clientMode = '<?php echo $mode; ?>';
</script>
<?php
if (function_exists('db_get_value_sql') === true) {
$server_version = (string) db_get_value_sql(
'SELECT `version` FROM `tserver` ORDER BY `master` DESC'
);
if ($server_version !== false
&& preg_match('/NG\.(\d\.*\d*?) /', $server_version, $matches) > 0
) {
if ((float) $matches[1] !== (float) $current_package) {
ui_print_warning_message(
__(
'Master server version %s does not match console version %s.',
(float) $matches[1],
(float) $current_package
)
);
}
}
}
}
// Load styles.
if (function_exists('ui_require_css_file') === true) {
ui_require_css_file('pandora', 'godmode/um_client/resources/styles/');
}
if (isset($mode) === false) {
$mode = Manager::MODE_ONLINE;
if (function_exists('get_parameter') === true) {
$mode = (int) get_parameter('mode', null);
} else {
$mode = ($_REQUEST['mode'] ?? Manager::MODE_ONLINE);
}
}
if (is_int($mode) === false) {
switch ($mode) {
case 'offline':
$mode = Manager::MODE_OFFLINE;
break;
case 'register':
$mode = Manager::MODE_REGISTER;
break;
case 'online':
default:
$mode = Manager::MODE_ONLINE;
break;
}
}
$dbhHistory = null;
if (is_array($config) === true
&& (bool) $config['history_db_enabled'] === true
) {
ob_start();
$dbhHistory = db_connect(
$config['history_db_host'],
$config['history_db_name'],
$config['history_db_user'],
$config['history_db_pass'],
$config['history_db_port']
);
ob_get_clean();
if ($dbhHistory === false) {
$dbhHistory = null;
}
}
$url_update_manager = null;
$homedir = sys_get_temp_dir();
$dbconnection = null;
$remote_config = null;
$is_metaconsole = false;
$insecure = false;
$pandora_url = ui_get_full_url('godmode/um_client', false, false, false);
if (is_array($config) === true) {
if (isset($config['secure_update_manager']) === false) {
$config['secure_update_manager'] = null;
}
if ($config['secure_update_manager'] === ''
|| $config['secure_update_manager'] === null
) {
$insecure = false;
} else {
// Directive defined.
$insecure = !$config['secure_update_manager'];
}
if ((bool) is_ajax() === false) {
if ($mode === Manager::MODE_ONLINE
&& ($puid === null || $puid === 'OFFLINE')
) {
ui_print_error_message(__('Update manager online requires registration.'));
}
}
$url_update_manager = $config['url_update_manager'];
$homedir = $config['homedir'];
$dbconnection = $config['dbconnection'];
$remote_config = $config['remote_config'];
if (function_exists('is_metaconsole') === true) {
$is_metaconsole = (bool) is_metaconsole();
}
if ($is_metaconsole === false) {
if ((bool) $config['node_metaconsole'] === true) {
$url_update_manager = $config['metaconsole_base_url'];
$url_update_manager .= 'godmode/um_client/api.php';
}
} else if ($is_metaconsole === true) {
$sc = new Synchronizer();
$url_meta_base = ui_get_full_url('/', false, false, false);
$sc->apply(
function ($node, $sync) use ($url_meta_base) {
try {
global $config;
$sync->connect($node);
$config['metaconsole_base_url'] = db_get_value(
'value',
'tconfig',
'token',
'metaconsole_base_url'
);
if ($config['metaconsole_base_url'] === false) {
// Unset to create new value if does not exist previously.
$config['metaconsole_base_url'] = null;
}
config_update_value(
'metaconsole_base_url',
$url_meta_base
);
$sync->disconnect();
} catch (Exception $e) {
ui_print_error_message(
'Cannot update node settings: ',
$e->getMessage()
);
}
}
);
}
}
$PHPmemory_limit_min = config_return_in_bytes('800M');
$PHPmemory_limit = config_return_in_bytes(ini_get('memory_limit'));
if ($PHPmemory_limit < $PHPmemory_limit_min && $PHPmemory_limit !== '-1') {
$msg = __(
'\'%s\' recommended value is %s or greater. Please, change it on your PHP configuration file (php.ini) or contact with administrator',
'memory_limit',
'800M'
);
if (function_exists('ui_print_warning_message') === true) {
ui_print_warning_message($msg);
} else {
echo $msg;
}
}
$ui = new Manager(
((is_array($config) === true) ? $pandora_url : 'http://'.$_SERVER['SERVER_ADDR'].'/'),
((is_array($config) === true) ? ui_get_full_url('ajax.php') : ''),
((is_array($config) === true) ? 'godmode/um_client/index' : ''),
[
'url' => $url_update_manager,
'insecure' => $insecure,
'license' => $license,
'limit_count' => ((is_array($license_data) === true) ? $license_data['count_enabled'] : null),
'language' => ((is_array($config) === true) ? $config['language'] : null),
'timezone' => ((is_array($config) === true) ? $config['timezone'] : null),
'homedir' => $homedir,
'dbconnection' => $dbconnection,
'historydb' => $dbhHistory,
'current_package' => $current_package,
'MR' => $mr,
'registration_code' => $puid,
'remote_config' => $remote_config,
'propagate_updates' => $is_metaconsole,
'set_maintenance_mode' => function () {
if (function_exists('config_update_value') === true) {
config_update_value('maintenance_mode', 1);
}
},
'clear_maintenance_mode' => function () {
if (function_exists('config_update_value') === true) {
config_update_value('maintenance_mode', 0);
}
},
],
$mode
);
$ui->run();

View File

@ -0,0 +1,261 @@
<?php
/**
* UpdateManager API Server.
*
* @category Class
* @package Update Manager
* @subpackage API Server
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace UpdateManager\API;
use UpdateManager\RepoMC;
/**
* Microserver to populate updates to nodes.
*/
class Server
{
/**
* Repository path.
*
* @var string
*/
private $repoPath;
/**
* MC License to use as verification.
*
* @var string
*/
private $licenseToken;
/**
* Disk repository.
*
* @var RepoMC
*/
private $repository;
/**
* Registration code.
*
* @var string
*/
private $registrationCode;
/**
* Initializes a micro server object.
*
* @param array $settings Values.
*/
public function __construct(array $settings)
{
$this->repoPath = '';
$this->licenseToken = '';
if (isset($settings['repo_path']) === true) {
$this->repoPath = $settings['repo_path'];
}
if (isset($settings['license']) === true) {
$this->licenseToken = $settings['license'];
}
if (isset($settings['registration_code']) === true) {
$this->registrationCode = $settings['registration_code'];
}
}
/**
* Handle requests and reponse as UMS.
*
* @return void
* @throws \Exception On error.
*/
public function run()
{
// Requests are handled via POST to hide the user.
self::assertPost();
$action = self::input('action');
try {
if ($action === 'get_server_package'
|| $action === 'get_server_package_signature'
) {
$this->repository = new RepoMC(
$this->repoPath,
'tar.gz'
);
} else {
$this->repository = new RepoMC(
$this->repoPath,
'oum'
);
}
} catch (\Exception $e) {
self::error(500, $e->getMessage());
}
try {
$this->validateRequest();
switch ($action) {
case 'newest_package':
echo json_encode(
$this->repository->newest_package(
self::input('current_package')
)
);
break;
case 'newer_packages':
echo json_encode(
$this->repository->newer_packages(
self::input('current_package')
)
);
break;
case 'get_package':
$this->repository->send_package(
self::input('package')
);
break;
case 'get_server_package':
$this->repository->send_server_package(
self::input('version')
);
break;
case 'new_register':
echo json_encode(
[
'success' => 1,
'pandora_uid' => $this->registrationCode,
]
);
break;
// Download a package signature.
case 'get_package_signature':
echo $this->repository->send_package_signature(
self::input('package')
);
break;
// Download a server package signature.
case 'get_server_package_signature':
echo $this->repository->send_server_package_signature(
self::input('version')
);
break;
default:
throw new \Exception('invalid action');
}
} catch (\Exception $e) {
if ($e->getMessage() === 'file not found in repository') {
self::error(404, $e->getMessage());
} else {
self::error(500, 'Error: '.$e->getMessage());
}
}
}
/**
* Exit if not a POST request.
*
* @return void
* @throws \Exception If not running using POST.
*/
private static function assertPost()
{
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
self::error(500, 'Error: only POST requests are accepted.');
throw new \Exception('use POST');
}
}
/**
* Validate request.
*
* @return void
* @throws \Exception On error.
*/
private function validateRequest()
{
$reported_license = self::input('license', null);
if ($reported_license !== $this->licenseToken) {
throw new \Exception('Invalid license', 1);
}
}
/**
* Return headers with desired error.
*
* @param integer $err_code Error code.
* @param string $msg Message.
*
* @return void
*/
private static function error(int $err_code, string $msg='')
{
header('HTTP/1.1 '.$err_code.' '.$msg);
if (empty($msg) !== false) {
echo $msg."\r\n";
}
}
/**
* Retrieve fields from request.
*
* @param string $name Variable name.
* @param mixed $default Default value.
*
* @return mixed Variable value.
*/
private static function input(string $name, $default=null)
{
if (isset($_REQUEST[$name]) === true) {
return $_REQUEST[$name];
}
return $default;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,295 @@
<?php
require_once 'constants.php';
/**
* Software repository abstraction layer.
*/
abstract class Repo
{
/**
* Path of the package repository.
*
* @var string
*/
protected $path;
/**
* Files in the package repository.
*
* @var array
*/
protected $files;
/**
* Class Constructor.
*
* @param string $path Path of the package repository.
*
* @return void
* @throws Exception On error.
*/
public function __construct($path=false)
{
if ($path === false) {
throw new Exception('no repository path was provided');
}
$this->path = $path;
$this->files = false;
}
/**
* Load repository files.
*
* @return void
*/
protected abstract function load();
/**
* Reload repository files.
*
* @return void
*/
public abstract function reload();
/**
* Return a list of all the packages in the repository.
*
* @return array The list of packages.
*/
public function all_packages()
{
$this->load();
return array_values($this->files);
}
/**
* Return a list of packages newer than then given package.
*
* @param integer $current_package Current package number.
*
* @return array The list of packages as an array.
*/
public function newer_packages($current_package=0)
{
$this->load();
$new_packages = [];
foreach ($this->files as $utimestamp => $file_name) {
if ($utimestamp <= $current_package) {
break;
}
$new_packages[] = $file_name;
}
// Return newer packages in ascending order so that the client
// can update sequentially!
return array_reverse($new_packages);
}
/**
* Return the name of the newest package.
*
* @param integer $current_package Current package number.
*
* @return string The name of the newest package inside an array.
*/
public function newest_package($current_package=0)
{
$this->load();
$newest_package = [];
reset($this->files);
$newest_utimestamp = key($this->files);
if ($newest_utimestamp > $current_package) {
$newest_package[0] = $this->files[$newest_utimestamp];
}
return $newest_package;
}
/**
* Send back the requested package.
*
* @param string $package_name Name of the package.
*
* @return void
* @throws Exception Exception if the file was not found.
*/
public function send_package($package_name)
{
$this->load();
// Check the file exists in the repo.
if ($package_name == false || ! in_array($package_name, array_values($this->files))) {
throw new Exception('file not found in repository');
}
// Check if the file exists in the filesystem.
$file = $this->path.'/'.$package_name;
if (! file_exists($file)) {
throw new Exception('file not found');
}
// Do not set headers if we are debugging!
if ($_ENV['UM_DEBUG'] == '') {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
ob_clean();
flush();
}
// Do not time out if the file is too big!
set_time_limit(0);
readfile($file);
}
/**
* Send back the signature for the given package.
*
* @param string $package_name Name of the package.
*
* @return void
* @throws Exception Exception if the file was not found.
*/
public function send_package_signature($package_name)
{
$this->load();
// Check the file exists in the repo.
if ($package_name == false || ! in_array($package_name, array_values($this->files))) {
throw new Exception('file not found in repository');
}
// Check if the file exists in the filesystem.
$file = $this->path.'/'.$package_name.SIGNATURE_EXTENSION;
if (! file_exists($file)) {
throw new Exception('file not found');
}
// Send the signature.
readfile($file);
}
/**
* Send back the requested server package. This function simply calls send_package.
* Repos may implement their own version on top of it.
*
* @param string $package_name Name of the package.
*/
function send_server_package($file)
{
$this->send_package($file);
}
/**
* Send back the sinature for the given server package. This function
* simply calls send_package_signature. * Repos may implement their own
* version on top of it.
*
* @param string $package_name Name of the package.
*/
function send_server_package_signature($file)
{
$this->send_package_signature($file);
}
/**
* Return the number of packages in the repository.
*
* @param array $db DB object connected to the database.
*
* @return integer The total number of packages.
*/
public function package_count($db=false)
{
$this->load();
return count($this->files);
}
/**
* Check if a package is in the repository.
*
* @param string $package_name Package name.
*
* @return boolean True if file is in the repository, FALSE if not.
*/
public function package_exists($package_name)
{
$file = $this->path.'/'.$package_name;
if (file_exists($file)) {
return true;
} else {
return false;
}
}
/**
* Check if a package is signed.
*
* @param string $package_name Package name.
* @param string $verify Verify the signature.
*
* @return boolean True if the package is signed, FALSE if not.
*/
public function package_signed($package_name, $verify=false)
{
$file = $this->path.'/'.$package_name;
$file_sig = $file.SIGNATURE_EXTENSION;
// No signature found.
if (!file_exists($file_sig)) {
return false;
}
// No need to verify the signature.
if ($verify === false) {
return true;
}
// Read the signature.
$signature = base64_decode(file_get_contents($file_sig));
if ($signature === false) {
return false;
}
// Compute the hash of the data.
$hex_hash = hash_file('sha512', $file);
if ($hex_hash === false) {
return false;
}
// Verify the signature.
if (openssl_verify($hex_hash, $signature, PUB_KEY, 'sha512') === 1) {
return true;
}
return false;
}
}

View File

@ -0,0 +1,103 @@
<?php
require_once __DIR__.'/Repo.php';
/**
* Disk repository abstraction layer.
*/
class RepoDisk extends Repo
{
/**
* Class Constructor.
*
* @param $path Path of the package repository.
*/
function __construct($path=false, $extension='oum')
{
// Check the repository can be opened.
if (($dh = opendir($path)) === false) {
throw new Exception('error opening repository '.$path);
}
closedir($dh);
parent::__construct($path);
$this->extension = $extension;
}
/**
* Delete a directory and its contents recursively
*/
public static function delete_dir($dirname)
{
if (is_dir($dirname)) {
$dir_handle = @opendir($dirname);
}
if (!$dir_handle) {
return false;
}
while ($file = readdir($dir_handle)) {
if ($file != '.' && $file != '..') {
if (!is_dir($dirname.'/'.$file)) {
@unlink($dirname.'/'.$file);
} else {
self::delete_dir($dirname.'/'.$file);
}
}
}
closedir($dir_handle);
@rmdir($dirname);
return true;
}
/**
* Load repository files.
*/
protected function load()
{
if ($this->files !== false) {
return;
}
// Read files in the repository.
if (($dh = opendir($this->path)) === false) {
throw new Exception('error opening repository');
}
$this->files = [];
while ($file_name = readdir($dh)) {
// Files must contain a version number.
if (preg_match('/(\d+)\_x86_64.'.$this->extension.'$/', $file_name, $utimestamp) === 1
|| preg_match('/(\d+)\.'.$this->extension.'$/', $file_name, $utimestamp) === 1
) {
// Add the file to the repository.
$this->files[$utimestamp[1]] = $file_name;
}
}
closedir($dh);
// Sort them according to the package UNIX timestamp.
krsort($this->files);
}
/**
* Reload repository files.
*/
public function reload()
{
$this->files = false;
$this->load();
}
}

View File

@ -0,0 +1,138 @@
<?php
// phpcs:disable Squiz.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
namespace UpdateManager;
require_once __DIR__.'/RepoDisk.php';
/**
* Class to implement distributed updates.
*/
class RepoMC extends \RepoDisk
{
/**
* Base server name.
*
* @var string
*/
private $FNAME = 'pandorafms_server_enterprise-7.0NG.%s_x86_64.tar.gz';
/**
* Class Constructor.
*
* @param string|null $path Path of the package repository.
* @param string $extension Files to include.
*
* @throws \Exception On error.
*/
public function __construct(?string $path=null, string $extension='oum')
{
parent::__construct($path, $extension);
}
/**
* Get the server package that corresponds to a given version.
*
* @param float $version Version string.
* @param boolean $dry_run Only check if the package exists.
*
* @return boolean
*/
public function send_server_package($version, bool $dry_run=false)
{
$package_name = sprintf($this->FNAME, $version);
$this->load();
// Check if the package exists.
if ($dry_run === true) {
return $this->package_exists($package_name);
}
parent::send_server_package($package_name);
return true;
}
/**
* Return a list of packages newer than then given package.
*
* @param integer $current_package Current package number.
*
* @return array The list of packages as an array.
*/
public function newer_packages($current_package=0)
{
$this->load();
$new_packages = [];
foreach ($this->files as $utimestamp => $file_name) {
if ($utimestamp <= $current_package) {
break;
}
$new_packages[] = [
'file_name' => $file_name,
'version' => $utimestamp,
'description' => 'Update available from the Metaconsole.',
];
}
// Return newer packages in ascending order so that the client
// can update sequentially!
return array_reverse($new_packages);
}
/**
* Retrieve OUM signature.
*
* @param integer $package_name Console package name.
*
* @return string Signature codified in base64.
*/
public function send_package_signature($package_name)
{
$signature_file = $this->path.'/'.$package_name.SIGNATURE_EXTENSION;
$this->load();
if ($this->package_exists($package_name) === true
&& file_exists($signature_file) === true
) {
$signature = file_get_contents($signature_file);
return $signature;
}
return '';
}
/**
* Retrieve server package signature.
*
* @param integer $version Server package version.
*
* @return string Signature codified in base64.
*/
public function send_server_package_signature($version)
{
$package_name = sprintf($this->FNAME, $version);
$signature_file = $this->path.'/'.$package_name.SIGNATURE_EXTENSION;
$this->load();
if ($this->package_exists($package_name) === true
&& file_exists($signature_file) === true
) {
$signature = file_get_contents($signature_file);
return $signature;
}
return '';
}
}

View File

@ -0,0 +1,751 @@
<?php
/**
* Update Manager client
*
* @category Class
* @package Update Manager
* @subpackage Client UI
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace UpdateManager\UI;
use UpdateManager\Client;
/**
* Undocumented class
*/
class Manager
{
const MODE_ONLINE = 0;
const MODE_OFFLINE = 1;
const MODE_REGISTER = 2;
/**
* Current mode (view).
*
* @var integer
*/
private $mode;
/**
* Update Manager Client.
*
* @var Client
*/
private $umc;
/**
* Public url
*
* @var string
*/
private $publicUrl;
/**
* Public url for Ajax calls.
*
* @var string
*/
private $ajaxUrl;
/**
* Ajax page.
*
* @var string
*/
private $ajaxPage;
/**
* AJAX auth code to avoid direct calls.
*
* @var string
*/
private $authCode;
/**
* Undocumented function
*
* @param string $public_url Url to access resources, ui_get_full_url.
* @param string $ajax_url Ajax url, ui_get_full_url('ajax.php').
* @param string|null $page Ajax page (Artica style).
* @param array $settings UMC settings.
* @param integer|null $mode Update Manager mode (online, offline or
* register).
*/
public function __construct(
string $public_url,
string $ajax_url,
?string $page,
array $settings,
?int $mode=null
) {
$this->mode = 0;
$this->publicUrl = '/';
$this->ajaxUrl = '/';
$this->mode = self::MODE_ONLINE;
if (empty($public_url) === false) {
$this->publicUrl = $public_url;
}
if (empty($ajax_url) === false) {
$this->ajaxUrl = $ajax_url;
}
if (empty($page) === false) {
$this->ajaxPage = $page;
}
if (empty($mode) === false) {
$this->mode = $mode;
}
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
if (isset($_SESSION['cors-auth-code']) === true) {
$this->authCode = $_SESSION['cors-auth-code'];
}
if (empty($this->authCode) === true) {
$this->authCode = hash('sha256', session_id().time().rand());
$_SESSION['cors-auth-code'] = $this->authCode;
}
if (session_status() === PHP_SESSION_ACTIVE) {
session_write_close();
}
if ($mode === self::MODE_OFFLINE) {
$settings['offline'] = true;
}
$this->umc = new Client($settings);
}
/**
* Run view.
*
* @return void
*/
public function run()
{
if (isset($_REQUEST['data']) === true) {
$data = json_decode($_REQUEST['data'], true);
if (json_last_error() === JSON_ERROR_NONE) {
foreach ($data as $k => $v) {
$_REQUEST[$k] = $v;
}
}
}
if (isset($_REQUEST['ajax']) === true
&& (int) $_REQUEST['ajax'] === 1
) {
$this->ajax();
return;
}
switch ($this->mode) {
case self::MODE_OFFLINE:
$this->offline();
break;
case self::MODE_REGISTER:
$this->register();
break;
default:
case self::MODE_ONLINE:
$this->online();
break;
}
}
/**
* Update Manager Client Online Mode page.
*
* @return void
*/
public function online()
{
if ($this->umc->isRegistered() === false) {
$this->register();
} else {
View::render(
'online',
[
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'error' => $this->umc->getLastError(),
'asset' => function ($rp) {
echo $this->getUrl($rp);
},
'authCode' => $this->authCode,
'ajax' => $this->ajaxUrl,
'ajaxPage' => $this->ajaxPage,
'progress' => $this->umc->getUpdateProgress(),
'running' => $this->umc->isRunning(),
]
);
}
}
/**
* Update Manager Client Offline Mode page.
*
* @return void
*/
public function offline()
{
View::render(
'offline',
[
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'error' => $this->umc->getLastError(),
'asset' => function ($rp) {
echo $this->getUrl($rp);
},
'authCode' => $this->authCode,
'ajax' => $this->ajaxUrl,
'ajaxPage' => $this->ajaxPage,
'progress' => $this->umc->getUpdateProgress(),
'running' => $this->umc->isRunning(),
'insecure' => $this->umc->isInsecure(),
]
);
}
/**
* Update Manager Client Registration page.
*
* @return void
*/
public function register()
{
View::render(
'register',
[
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'error' => $this->umc->getLastError(),
'asset' => function ($rp) {
echo $this->getUrl($rp);
},
'authCode' => $this->authCode,
'ajax' => $this->ajaxUrl,
'ajaxPage' => $this->ajaxPage,
]
);
}
/**
* Retrieve full url to a relative path if given.
*
* @param string|null $relative_path Relative path to reach publicly.
*
* @return string Url.
*/
public function getUrl(?string $relative_path)
{
return $this->publicUrl.'/'.$relative_path;
}
/**
* Return ajax response.
*
* @return void
*/
public function ajax()
{
if (function_exists('getallheaders') === true) {
$headers = getallheaders();
} else {
$headers = [];
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) === 'HTTP_') {
$headers[str_replace(
' ',
'-',
ucwords(
strtolower(
str_replace(
'_',
' ',
substr($name, 5)
)
)
)
)] = $value;
}
}
}
if ($this->authCode !== $_REQUEST['cors']) {
header('HTTP/1.1 401 Unauthorized');
exit;
}
try {
// Execute target action.
switch ($_REQUEST['action']) {
case 'nextUpdate':
$result = $this->umc->updateNextVersion();
if ($result !== true) {
$error = $this->umc->getLastError();
}
$return = [
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'messages' => $this->umc->getLastError(),
];
break;
case 'latestUpdate':
$result = $this->umc->updateLastVersion();
if ($result !== true) {
$error = $this->umc->getLastError();
}
$return = [
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'messages' => $this->umc->getLastError(),
];
break;
case 'status':
$return = $this->umc->getUpdateProgress();
break;
case 'getUpdates':
$return = $this->getUpdatesList();
break;
case 'uploadOUM':
$return = $this->processOUMUpload();
break;
case 'validateUploadedOUM':
$return = $this->validateUploadedOUM();
break;
case 'installUploadedOUM':
$return = $this->installOUMUpdate();
break;
case 'register':
$return = $this->registerConsole();
break;
case 'unregister':
$return = $this->unRegisterConsole();
break;
default:
$error = 'Unknown action '.$_REQUEST['action'];
header('HTTP/1.1 501 Unknown action');
break;
}
} catch (\Exception $e) {
$error = 'Error '.$e->getMessage();
$error .= ' in '.$e->getFile().':'.$e->getLine();
header('HTTP/1.1 500 '.$error);
}
// Response.
if (empty($error) === false) {
if ($headers['Accept'] === 'application/json') {
echo json_encode(
['error' => $error]
);
} else {
echo $error;
}
return;
}
if ($headers['Accept'] === 'application/json') {
echo json_encode(
['result' => $return]
);
} else {
echo $return;
}
}
/**
* Prints a pretty list of updates.
*
* @return string HTML code.
*/
private function getUpdatesList()
{
$updates = $this->umc->listUpdates();
if (empty($updates) === true) {
if ($updates === null) {
header('HTTP/1.1 403 '.$this->umc->getLastError());
return $this->umc->getLastError();
}
return '';
}
if (count($updates) > 0) {
$next = $updates[0];
$return = '<p><b>'.\__('Next update').':</b><span id="next-version">';
$return .= $next['version'].'</span>';
$return .= ' - <a id="um-package-details-next" ';
$return .= ' class="um-package-details" ';
$return .= 'href="javascript: umShowUpdateDetails(\''.$next['version'].'\');">';
$return .= \__('Show details').'</a></p>';
$updates = array_reduce(
$updates,
function ($carry, $item) {
$carry[$item['version']] = $item;
return $carry;
},
[]
);
// This var stores all update descriptions retrieved from UMS.
$return .= '<script type="text/javascript">';
$return .= 'var nextUpdateVersion = "'.$next['version'].'";';
$return .= 'var lastUpdateVersion = "';
$return .= end($updates)['version'].'";';
$return .= 'var updates = '.json_encode($updates).';';
$return .= '</script>';
$return .= '</div>';
array_shift($updates);
if (count($updates) > 0) {
$return .= '<a href="#" onclick="umToggleUpdateList();">';
$return .= \__(
'%s update(s) available more',
'<span id="updates_left">'.count($updates).'</span>'
);
$return .= '</a>';
$return .= '<div id="update-list">';
foreach ($updates as $update) {
$return .= '<div class="update">';
$return .= '<div class="version">';
$return .= $update['version'];
$return .= '</div>';
$return .= '<a class="um-package-details" ';
$return .= 'href="javascript: umShowUpdateDetails(\''.$update['version'].'\');">';
$return .= \__('details').'</a></p>';
$return .= '</div>';
}
$return .= '</div>';
}
}
return $return;
}
/**
* Validates OUM uploaded by user.
*
* @return string JSON response.
*/
private function processOUMUpload()
{
$return = [];
if (isset($_FILES['upfile']) === true
&& $_FILES['upfile']['error'] === 0
) {
$file_data = pathinfo($_FILES['upfile']['name']);
$server_update = false;
$extension = $file_data['extension'];
$version = $file_data['filename'];
if (preg_match('/pandorafms_server/', $file_data['filename']) > 0) {
$tgz = pathinfo($file_data['filename']);
if ($tgz !== null) {
$extension = $tgz['extension'].'.'.$extension;
$server_update = true;
$matches = [];
if (preg_match(
'/pandorafms_server(.*?)-.*NG\.(\d+\.{0,1}\d*?)_.*/',
$tgz['filename'],
$matches
) > 0
) {
$version = $matches[2];
if (empty($matches[1]) === true) {
$version .= ' OpenSource';
} else {
$version .= ' Enterprise';
}
} else {
$version = $tgz['filename'];
}
}
} else {
if (preg_match(
'/package_(\d+\.{0,1}\d*)/',
$file_data['filename'],
$matches
) > 0
) {
$version = $matches[1];
} else {
$version = $file_data['filename'];
}
}
// The package extension should be .oum.
if (strtolower($extension) === 'oum'
|| strtolower($extension) === 'tar.gz'
) {
$path = $_FILES['upfile']['tmp_name'];
// The package files will be saved in [user temp dir]/pandora_oum/package_name.
if (is_dir(sys_get_temp_dir().'/pandora_oum/') !== true) {
mkdir(sys_get_temp_dir().'/pandora_oum/');
}
if (is_dir(sys_get_temp_dir().'/pandora_oum/') !== true) {
$return['status'] = 'error';
$return['message'] = __('Failed creating temporary directory.');
return json_encode($return);
}
$file_path = sys_get_temp_dir();
$file_path .= '/pandora_oum/'.$_FILES['upfile']['name'];
move_uploaded_file($_FILES['upfile']['tmp_name'], $file_path);
if (is_file($file_path) === false) {
$return['status'] = 'error';
$return['message'] = __('Failed storing uploaded file.');
return json_encode($return);
}
$return['status'] = 'success';
$return['packageId'] = hash('sha256', $file_path);
$return['version'] = $version;
$return['server_update'] = $server_update;
if ($server_update === false) {
$return['files'] = Client::checkOUMContent($file_path);
} else {
$return['files'] = Client::checkTGZContent($file_path);
}
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$_SESSION['umc-uploaded-file-id'] = $return['packageId'];
$_SESSION['umc-uploaded-file-version'] = $version;
$_SESSION['umc-uploaded-file-path'] = $file_path;
$_SESSION['umc-uploaded-type-server'] = $server_update;
if (session_status() === PHP_SESSION_ACTIVE) {
session_write_close();
}
return json_encode($return);
} else {
$return['status'] = 'error';
$return['message'] = __(
'Invalid extension. The package needs to be in `%s` or `%s` format.',
'.oum',
'.tar.gz'
);
return json_encode($return);
}
}
$return['status'] = 'error';
$return['message'] = __('Failed uploading file.');
return json_encode($return);
}
/**
* Verifies uploaded file signature against given one.
*
* @return string JSON result.
*/
private function validateUploadedOUM()
{
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$file_path = $_SESSION['umc-uploaded-file-path'];
$packageId = $_SESSION['umc-uploaded-file-id'];
$signature = $_REQUEST['signature'];
$version = $_SESSION['umc-uploaded-file-version'];
$server_update = $_SESSION['umc-uploaded-type-server'];
if ($packageId !== $_REQUEST['packageId']) {
header('HTTP/1.1 401 Unauthorized');
exit;
}
$valid = $this->umc->validateSignature(
$file_path,
$signature
);
if ($valid !== true) {
$return['status'] = 'error';
$return['message'] = __('Signatures does not match.');
} else {
$return['status'] = 'success';
if ($this->umc->isPropagatingUpdates() === true) {
$this->umc->saveSignature($signature, $file_path);
}
}
return $return;
}
/**
* Process installation of manually uploaded file.
*
* @return string JSON response.
*/
private function installOUMUpdate()
{
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$file_path = $_SESSION['umc-uploaded-file-path'];
$packageId = $_SESSION['umc-uploaded-file-id'];
$version = $_SESSION['umc-uploaded-file-version'];
$server_update = $_SESSION['umc-uploaded-type-server'];
if ($packageId !== $_REQUEST['packageId']) {
header('HTTP/1.1 401 Unauthorized');
exit;
}
unset($_SESSION['umc-uploaded-type-server']);
unset($_SESSION['umc-uploaded-file-path']);
unset($_SESSION['umc-uploaded-file-version']);
if (session_status() === PHP_SESSION_ACTIVE) {
session_write_close();
}
if ($server_update === true) {
// Server update.
$result = $this->umc->updateServerPackage(
[
'version' => $version,
'file_path' => $file_path,
]
);
} else {
// Console update.
$result = $this->umc->updateNextVersion(
[
'version' => $version,
'file_path' => $file_path,
]
);
}
$message = \__('Update %s successfully installed.', $version);
if ($result !== true) {
$message = \__(
'Failed while updating: %s',
$this->umc->getLastError()
);
}
return [
'result' => $message,
'error' => $this->umc->getLastError(),
'version' => $this->umc->getVersion(),
];
}
/**
* Register console into UMS
*
* @return array Result.
*/
private function registerConsole()
{
$email = $_REQUEST['email'];
$rc = $this->umc->getRegistrationCode();
if ($rc === null) {
// Register.
$rc = $this->umc->register($email);
}
return [
'result' => $rc,
'error' => $this->umc->getLastError(),
];
}
/**
* Unregister this console from UMS
*
* @return array Result.
*/
private function unRegisterConsole()
{
$this->umc->unRegister();
return [
'result' => true,
'error' => $this->umc->getLastError(),
];
}
}

View File

@ -0,0 +1,64 @@
<?php
/**
* Loader for views.
*
* @category Loader
* @package Pandora FMS
* @subpackage Enterprise
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace UpdateManager\UI;
/**
* View class.
*/
class View
{
/**
* Render view.
*
* @param string $view View to be loaded.
* @param array|null $data Array data if necessary for view.
*
* @return void
*/
public static function render(string $view, ?array $data=null)
{
if (is_array($data) === true) {
extract($data);
}
$path = __DIR__.'/../../../views/';
$page = $path.$view.'.php';
if (file_exists($page) === true) {
include $page;
} else {
echo 'view '.$view.' not found';
}
}
}

View File

@ -0,0 +1,133 @@
<?php
/**
* Defines some useful constants.
*
* @file constants.php
* @package UMC distributed updates.
* @subpackage constants
*/
/**
* Application version.
*/
defined('VERSION') || define(
'VERSION',
'4.0'
);
/*
* Application build.
*/
defined('BUILD') || define(
'BUILD',
'20131120'
);
/*
* Extension of open packages (without a leading dot).
*/
defined('OPEN_EXTENSION') || define(
'OPEN_EXTENSION',
'tar.gz'
);
/*
* Extension of server packages (without a leading dot).
*/
defined('SERVER_EXTENSION') || define(
'SERVER_EXTENSION',
'tar.gz'
);
/*
* Package statuses.
*/
defined('PACKAGE_STATUSES') || define(
'PACKAGE_STATUSES',
serialize([ 0 => 'disabled', 1 => 'testing', 2 => 'published'])
);
/*
* License modes.
*/
defined('LICENSE_MODES') || define(
'LICENSE_MODES',
serialize([ 0 => 'trial', 1 => 'client'])
);
/*
* Limit modes.
*/
defined('LIMIT_MODES') || define(
'LIMIT_MODES',
serialize([ 0 => 'agents', 1 => 'modules'])
);
/*
* License types. Offline licenses must be 3, not 2!
*/
defined('LICENSE_TYPES') || define(
'LICENSE_TYPES',
serialize([ 0 => 'console', 1 => 'metaconsole', 3 => 'offline'])
);
/*
* Extension of digital signatures.
*/
defined('SIGNATURE_EXTENSION') || define(
'SIGNATURE_EXTENSION',
'.sig'
);
/*
* Public key used to verify signatures.
*/
defined('PUB_KEY') || define(
'PUB_KEY',
'-----BEGIN CERTIFICATE-----
MIIGbDCCBVSgAwIBAgIRAO+uHm0PBdm1YtvKjFwNqg4wDQYJKoZIhvcNAQELBQAw
gY8xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
AxMuU2VjdGlnbyBSU0EgRG9tYWluIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBD
QTAeFw0xOTEwMDEwMDAwMDBaFw0yMTEwMjAyMzU5NTlaMFgxITAfBgNVBAsTGERv
bWFpbiBDb250cm9sIFZhbGlkYXRlZDEdMBsGA1UECxMUUG9zaXRpdmVTU0wgV2ls
ZGNhcmQxFDASBgNVBAMMCyouYXJ0aWNhLmVzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAvYafsbq6mH/GP9jc1zAHXeuh7kz8WYitCawXx5CYUFvO0ch8
H5v8a7aiLJ+pgrgFyZeZ489a+FJW0wddyMGnch+lGU5BbvoH91BMjZV1CLTOexB2
liid9aAEasFRBWkwIGMo4fkYFjBwBNofFd8y8vUu9550wZ4QbcshNrhk4E932BuZ
P6WWCR0fEoyP0mQRIRMUTAT5WeOYZHkSIJFiQ5JYH5ClVEOogJkO9QTn5t6GT3Py
SKhFYqskOOtHODztXdX/qKE+wZ2yssOEie5VvfmcoTAwkwLVZAY8Q7wqjtkaQ9kv
weonYXq40KpQ2fksPP0x1FL0rrfsROL/tyv/wwIDAQABo4IC9zCCAvMwHwYDVR0j
BBgwFoAUjYxexFStiuF36Zv5mwXhuAGNYeEwHQYDVR0OBBYEFDxO4vgu+Bht6JnH
Xv4uwf459n7cMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQW
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBJBgNVHSAEQjBAMDQGCysGAQQBsjEBAgIH
MCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAEC
ATCBhAYIKwYBBQUHAQEEeDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3Rp
Z28uY29tL1NlY3RpZ29SU0FEb21haW5WYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0Eu
Y3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAhBgNVHREE
GjAYggsqLmFydGljYS5lc4IJYXJ0aWNhLmVzMIIBfQYKKwYBBAHWeQIEAgSCAW0E
ggFpAWcAdwD2XJQv0XcwIhRUGAgwlFaO400TGTO/3wwvIAvMTvFk4wAAAW2Gc+pN
AAAEAwBIMEYCIQDweXVdMk4MVPxu0H7MDSs8g9FFLfjthnFv1GBO9wpOvQIhAKvI
fGbNpA2GWSP+L+opz5KnIwoJSL/JD7CMLbboexZsAHUARJRlLrDuzq/EQAfYqP4o
wNrmgr7YyzG1P9MzlrW2gagAAAFthnPqagAABAMARjBEAiAWnW/bqGiL7elEQASm
YT6V0oQOviCJ4vYi+ekYtyHi1QIgDb3PCSOf9TZXnCx8d48NrD1OvabV9LaOimVF
NPfEZQ4AdQBVgdTCFpA2AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAAAW2Gc+pK
AAAEAwBGMEQCIEoT2BgNg+WrJcqPeNDcBfiWyT8GoJyscj9UxpAXmMJkAiANowLt
4mz/mc4uYjRxwZnA/BMZgOVPMLtMwaA0b1C32TANBgkqhkiG9w0BAQsFAAOCAQEA
MNwCq90OYGnqoQ4vmX9BPe7e5qoQ7asU82u3XH/nA+lMuD5D4pKHFNFcA/KZbmvc
OXcFt0CwbeWOuAbBom8hvFaF8abtkayG27pknQSv4i5YRKF1pEx3hrMgC8c9e32e
ebGE1kQoj1TQkf6e0t7Ss/XvdnSITSo5Onio/g/dUv9MFI1bjcf+8gWWDueTOKyt
FcVU5xb8g3EtXju01C70KVcN9SgHzSmyBrcBSEvJQ7emnZjyg0xdmlytvSo1Y7jf
JWkEbLlOEtYdkgyWy1ZFi/oO5U4UR6X6xgHiJTRZyXvPoS3mk7k+YgAkdOad0vEI
5JdvxQyReDoCO3u4FtKHEA==
-----END CERTIFICATE-----'
);

View File

@ -0,0 +1,182 @@
<?php
if (function_exists('ui_get_full_url') === false) {
/**
* Get public url.
*
* @param string $url Relative url.
*
* @return string Dependant url.
*/
function ui_get_full_url(string $url='')
{
global $config;
if (is_array($config) === true) {
if (empty($config['homeurl']) === false) {
return $config['homeurl'].'/'.$url;
}
if (empty($config['baseurl']) === false) {
return $config['baseurl'].'/'.$url;
}
}
return $url;
}
}
if (function_exists('__') === false) {
/**
* Override for translation function if not available.
*
* @param string|null $str String to be translated.
*
* @return string
*/
function __(?string $str)
{
if ($str !== null) {
$ret = $str;
try {
$args = func_get_args();
array_shift($args);
$ret = vsprintf($str, $args);
} catch (Exception $e) {
return $str;
}
return $ret;
}
return '';
}
}
if (function_exists('html_print_image') === false) {
/**
* Prints an image HTML element.
*
* @param string $src Image source filename.
* @param boolean $return Whether to return or print.
* @param array $options Array with optional HTML options to set.
* At this moment, the following options are supported:
* align, border, hspace, ismap, vspace, style, title, height,
* longdesc, usemap, width, id, class, lang, xml:lang, onclick,
* ondblclick, onmousedown, onmouseup, onmouseover, onmousemove,
* onmouseout, onkeypress, onkeydown, onkeyup, pos_tree, alt.
* @param boolean $return_src Whether to return src field of image
* ('images/*.*') or complete html img tag ('<img src="..." alt="...">').
* @param boolean $relative Whether to use relative path to image or not
* (i.e. $relative= true : /pandora/<img_src>).
* @param boolean $no_in_meta Do not show on metaconsole folder at first. Go
* directly to the node.
* @param boolean $isExternalLink Do not shearch for images in Pandora.
*
* @return string HTML code if return parameter is true.
*/
function html_print_image(
$src,
$return=false,
$options=false,
$return_src=false,
$relative=false,
$no_in_meta=false,
$isExternalLink=false
) {
$attr = '';
if (is_array($options) === true) {
foreach ($options as $k => $v) {
$attr = $k.'="'.$v.'" ';
}
}
$output = '<img src="'.ui_get_full_url($src).'" '.$attr.'/>';
if ($return === false) {
echo $output;
}
return $output;
}
}
if (function_exists('html_print_submit_button') === false) {
/**
* Render an submit input button element.
*
* The element will have an id like: "submit-$name"
*
* @param string $label Input label.
* @param string $name Input name.
* @param boolean $disabled Whether to disable by default or not. Enabled by default.
* @param array $attributes Additional HTML attributes.
* @param boolean $return Whether to return an output string or echo now (optional, echo by default).
*
* @return string HTML code if return parameter is true.
*/
function html_print_submit_button(
$label='OK',
$name='',
$disabled=false,
$attributes='',
$return=false
) {
if (!$name) {
$name = 'unnamed';
}
if (is_array($attributes)) {
$attr_array = $attributes;
$attributes = '';
foreach ($attr_array as $attribute => $value) {
$attributes .= $attribute.'="'.$value.'" ';
}
}
$output = '<input type="submit" id="submit-'.$name.'" name="'.$name.'" value="'.$label.'" '.$attributes;
if ($disabled) {
$output .= ' disabled="disabled"';
}
$output .= ' />';
if (!$return) {
echo $output;
}
return $output;
}
}
if (function_exists('get_product_name') === false) {
/**
* Returns product name.
*
* @return string PRoduct name.
*/
function get_product_name()
{
return 'UMC';
}
}
// End.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,207 @@
/*
* jQuery Iframe Transport Plugin 1.8.0
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
/*jslint unparam: true, nomen: true */
/*global define, window, document */
(function(factory) {
"use strict";
if (typeof define === "function" && define.amd) {
// Register as an anonymous AMD module:
define(["jquery"], factory);
} else {
// Browser globals:
factory(window.jQuery);
}
})(function($) {
"use strict";
// Helper variable to create unique names for the transport iframes:
var counter = 0;
// The iframe transport accepts four additional options:
// options.fileInput: a jQuery collection of file input fields
// options.paramName: the parameter name for the file form data,
// overrides the name property of the file input field(s),
// can be a string or an array of strings.
// options.formData: an array of objects with name and value properties,
// equivalent to the return data of .serializeArray(), e.g.:
// [{name: 'a', value: 1}, {name: 'b', value: 2}]
// options.initialIframeSrc: the URL of the initial iframe src,
// by default set to "javascript:false;"
$.ajaxTransport("iframe", function(options) {
if (options.async) {
// javascript:false as initial iframe src
// prevents warning popups on HTTPS in IE6:
var initialIframeSrc = options.initialIframeSrc || "javascript:false;",
form,
iframe,
addParamChar;
return {
send: function(_, completeCallback) {
form = $('<form style="display:none;"></form>');
form.attr("accept-charset", options.formAcceptCharset);
addParamChar = /\?/.test(options.url) ? "&" : "?";
// XDomainRequest only supports GET and POST:
if (options.type === "DELETE") {
options.url = options.url + addParamChar + "_method=DELETE";
options.type = "POST";
} else if (options.type === "PUT") {
options.url = options.url + addParamChar + "_method=PUT";
options.type = "POST";
} else if (options.type === "PATCH") {
options.url = options.url + addParamChar + "_method=PATCH";
options.type = "POST";
}
// IE versions below IE8 cannot set the name property of
// elements that have already been added to the DOM,
// so we set the name along with the iframe HTML markup:
counter += 1;
iframe = $(
'<iframe src="' +
initialIframeSrc +
'" name="iframe-transport-' +
counter +
'"></iframe>'
).bind("load", function() {
var fileInputClones,
paramNames = $.isArray(options.paramName)
? options.paramName
: [options.paramName];
iframe.unbind("load").bind("load", function() {
var response;
// Wrap in a try/catch block to catch exceptions thrown
// when trying to access cross-domain iframe contents:
try {
response = iframe.contents();
// Google Chrome and Firefox do not throw an
// exception when calling iframe.contents() on
// cross-domain requests, so we unify the response:
if (!response.length || !response[0].firstChild) {
throw new Error();
}
} catch (e) {
response = undefined;
}
// The complete callback returns the
// iframe content document as response object:
completeCallback(200, "success", { iframe: response });
// Fix for IE endless progress bar activity bug
// (happens on form submits to iframe targets):
$('<iframe src="' + initialIframeSrc + '"></iframe>').appendTo(
form
);
window.setTimeout(function() {
// Removing the form in a setTimeout call
// allows Chrome's developer tools to display
// the response result
form.remove();
}, 0);
});
form
.prop("target", iframe.prop("name"))
.prop("action", options.url)
.prop("method", options.type);
if (options.formData) {
$.each(options.formData, function(index, field) {
$('<input type="hidden"/>')
.prop("name", field.name)
.val(field.value)
.appendTo(form);
});
}
if (
options.fileInput &&
options.fileInput.length &&
options.type === "POST"
) {
fileInputClones = options.fileInput.clone();
// Insert a clone for each file input field:
options.fileInput.after(function(index) {
return fileInputClones[index];
});
if (options.paramName) {
options.fileInput.each(function(index) {
$(this).prop("name", paramNames[index] || options.paramName);
});
}
// Appending the file input fields to the hidden form
// removes them from their original location:
form
.append(options.fileInput)
.prop("enctype", "multipart/form-data")
// enctype must be set as encoding for IE:
.prop("encoding", "multipart/form-data");
}
form.submit();
// Insert the file input fields at their original location
// by replacing the clones with the originals:
if (fileInputClones && fileInputClones.length) {
options.fileInput.each(function(index, input) {
var clone = $(fileInputClones[index]);
$(input).prop("name", clone.prop("name"));
clone.replaceWith(input);
});
}
});
form.append(iframe).appendTo(document.body);
},
abort: function() {
if (iframe) {
// javascript:false as iframe src aborts the request
// and prevents warning popups on HTTPS in IE6.
// concat is used to avoid the "Script URL" JSLint error:
iframe.unbind("load").prop("src", initialIframeSrc);
}
if (form) {
form.remove();
}
}
};
}
});
// The iframe transport returns the iframe content document as response.
// The following adds converters from iframe to text, json, html, xml
// and script.
// Please note that the Content-Type for JSON responses has to be text/plain
// or text/html, if the browser doesn't include application/json in the
// Accept header, else IE will show a download dialog.
// The Content-Type for XML responses on the other hand has to be always
// application/xml or text/xml, so IE properly parses the XML response.
// See also
// https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
$.ajaxSetup({
converters: {
"iframe text": function(iframe) {
return iframe && $(iframe[0].body).text();
},
"iframe json": function(iframe) {
return iframe && $.parseJSON($(iframe[0].body).text());
},
"iframe html": function(iframe) {
return iframe && $(iframe[0].body).html();
},
"iframe xml": function(iframe) {
var xmlDoc = iframe && iframe[0];
return xmlDoc && $.isXMLDoc(xmlDoc)
? xmlDoc
: $.parseXML(
(xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
$(xmlDoc.body).html()
);
},
"iframe script": function(iframe) {
return iframe && $.globalEval($(iframe[0].body).text());
}
}
});
});

View File

@ -0,0 +1,710 @@
/*!jQuery Knob*/
/**
* Downward compatible, touchable dial
*
* Version: 1.2.0 (15/07/2012)
* Requires: jQuery v1.7+
*
* Copyright (c) 2012 Anthony Terrien
* Under MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Thanks to vor, eskimoblood, spiffistan, FabrizioC
*/
(function($) {
/**
* Kontrol library
*/
"use strict";
/**
* Definition of globals and core
*/
var k = {}, // kontrol
max = Math.max,
min = Math.min;
k.c = {};
k.c.d = $(document);
k.c.t = function(e) {
return e.originalEvent.touches.length - 1;
};
/**
* Kontrol Object
*
* Definition of an abstract UI control
*
* Each concrete component must call this one.
* <code>
* k.o.call(this);
* </code>
*/
k.o = function() {
var s = this;
this.o = null; // array of options
this.$ = null; // jQuery wrapped element
this.i = null; // mixed HTMLInputElement or array of HTMLInputElement
this.g = null; // deprecated 2D graphics context for 'pre-rendering'
this.v = null; // value ; mixed array or integer
this.cv = null; // change value ; not commited value
this.x = 0; // canvas x position
this.y = 0; // canvas y position
this.w = 0; // canvas width
this.h = 0; // canvas height
this.$c = null; // jQuery canvas element
this.c = null; // rendered canvas context
this.t = 0; // touches index
this.isInit = false;
this.fgColor = null; // main color
this.pColor = null; // previous color
this.dH = null; // draw hook
this.cH = null; // change hook
this.eH = null; // cancel hook
this.rH = null; // release hook
this.scale = 1; // scale factor
this.relative = false;
this.relativeWidth = false;
this.relativeHeight = false;
this.$div = null; // component div
this.run = function() {
var cf = function(e, conf) {
var k;
for (k in conf) {
s.o[k] = conf[k];
}
s.init();
s._configure()._draw();
};
if (this.$.data("kontroled")) return;
this.$.data("kontroled", true);
this.extend();
this.o = $.extend(
{
// Config
min: this.$.data("min") || 0,
max: this.$.data("max") || 100,
stopper: true,
readOnly:
this.$.data("readonly") || this.$.attr("readonly") == "readonly",
// UI
cursor:
(this.$.data("cursor") === true && 30) ||
this.$.data("cursor") ||
0,
thickness:
(this.$.data("thickness") &&
Math.max(Math.min(this.$.data("thickness"), 1), 0.01)) ||
0.35,
lineCap: this.$.data("linecap") || "butt",
width: this.$.data("width") || 200,
height: this.$.data("height") || 200,
displayInput:
this.$.data("displayinput") == null || this.$.data("displayinput"),
displayPrevious: this.$.data("displayprevious"),
fgColor: this.$.data("fgcolor") || "#87CEEB",
inputColor: this.$.data("inputcolor"),
font: this.$.data("font") || "Arial",
fontWeight: this.$.data("font-weight") || "bold",
inline: false,
step: this.$.data("step") || 1,
// Hooks
draw: null, // function () {}
change: null, // function (value) {}
cancel: null, // function () {}
release: null, // function (value) {}
error: null // function () {}
},
this.o
);
// finalize options
if (!this.o.inputColor) {
this.o.inputColor = this.o.fgColor;
}
// routing value
if (this.$.is("fieldset")) {
// fieldset = array of integer
this.v = {};
this.i = this.$.find("input");
this.i.each(function(k) {
var $this = $(this);
s.i[k] = $this;
s.v[k] = $this.val();
$this.bind("change", function() {
var val = {};
val[k] = $this.val();
s.val(val);
});
});
this.$.find("legend").remove();
} else {
// input = integer
this.i = this.$;
this.v = this.$.val();
this.v == "" && (this.v = this.o.min);
this.$.bind("change", function() {
s.val(s._validate(s.$.val()));
});
}
!this.o.displayInput && this.$.hide();
// adds needed DOM elements (canvas, div)
this.$c = $(document.createElement("canvas"));
if (typeof G_vmlCanvasManager !== "undefined") {
G_vmlCanvasManager.initElement(this.$c[0]);
}
this.c = this.$c[0].getContext ? this.$c[0].getContext("2d") : null;
if (!this.c) {
this.o.error && this.o.error();
return;
}
// hdpi support
this.scale =
(window.devicePixelRatio || 1) /
(this.c.webkitBackingStorePixelRatio ||
this.c.mozBackingStorePixelRatio ||
this.c.msBackingStorePixelRatio ||
this.c.oBackingStorePixelRatio ||
this.c.backingStorePixelRatio ||
1);
// detects relative width / height
this.relativeWidth = this.o.width % 1 !== 0 && this.o.width.indexOf("%");
this.relativeHeight =
this.o.height % 1 !== 0 && this.o.height.indexOf("%");
this.relative = this.relativeWidth || this.relativeHeight;
// wraps all elements in a div
this.$div = $(
'<div style="' + (this.o.inline ? "display:inline;" : "") + '"></div>'
);
this.$.wrap(this.$div).before(this.$c);
this.$div = this.$.parent();
// computes size and carves the component
this._carve();
// prepares props for transaction
if (this.v instanceof Object) {
this.cv = {};
this.copy(this.v, this.cv);
} else {
this.cv = this.v;
}
// binds configure event
this.$.bind("configure", cf)
.parent()
.bind("configure", cf);
// finalize init
this._listen()
._configure()
._xy()
.init();
this.isInit = true;
// the most important !
this._draw();
return this;
};
this._carve = function() {
if (this.relative) {
var w = this.relativeWidth
? (this.$div.parent().width() * parseInt(this.o.width)) / 100
: this.$div.parent().width(),
h = this.relativeHeight
? (this.$div.parent().height() * parseInt(this.o.height)) / 100
: this.$div.parent().height();
// apply relative
this.w = this.h = Math.min(w, h);
} else {
this.w = this.o.width;
this.h = this.o.height;
}
// finalize div
this.$div.css({
width: this.w + "px",
height: this.h + "px"
});
// finalize canvas with computed width
this.$c.attr({
width: this.w,
height: this.h
});
// scaling
if (this.scale !== 1) {
this.$c[0].width = this.$c[0].width * this.scale;
this.$c[0].height = this.$c[0].height * this.scale;
this.$c.width(this.w);
this.$c.height(this.h);
}
return this;
};
this._draw = function() {
// canvas pre-rendering
var d = true;
s.g = s.c;
s.clear();
s.dH && (d = s.dH());
d !== false && s.draw();
};
this._touch = function(e) {
var touchMove = function(e) {
var v = s.xy2val(
e.originalEvent.touches[s.t].pageX,
e.originalEvent.touches[s.t].pageY
);
if (v == s.cv) return;
if (s.cH && s.cH(v) === false) return;
s.change(s._validate(v));
s._draw();
};
// get touches index
this.t = k.c.t(e);
// First touch
touchMove(e);
// Touch events listeners
k.c.d.bind("touchmove.k", touchMove).bind("touchend.k", function() {
k.c.d.unbind("touchmove.k touchend.k");
if (s.rH && s.rH(s.cv) === false) return;
s.val(s.cv);
});
return this;
};
this._mouse = function(e) {
var mouseMove = function(e) {
var v = s.xy2val(e.pageX, e.pageY);
if (v == s.cv) return;
if (s.cH && s.cH(v) === false) return;
s.change(s._validate(v));
s._draw();
};
// First click
mouseMove(e);
// Mouse events listeners
k.c.d
.bind("mousemove.k", mouseMove)
.bind(
// Escape key cancel current change
"keyup.k",
function(e) {
if (e.keyCode === 27) {
k.c.d.unbind("mouseup.k mousemove.k keyup.k");
if (s.eH && s.eH() === false) return;
s.cancel();
}
}
)
.bind("mouseup.k", function(e) {
k.c.d.unbind("mousemove.k mouseup.k keyup.k");
if (s.rH && s.rH(s.cv) === false) return;
s.val(s.cv);
});
return this;
};
this._xy = function() {
var o = this.$c.offset();
this.x = o.left;
this.y = o.top;
return this;
};
this._listen = function() {
if (!this.o.readOnly) {
this.$c
.bind("mousedown", function(e) {
e.preventDefault();
s._xy()._mouse(e);
})
.bind("touchstart", function(e) {
e.preventDefault();
s._xy()._touch(e);
});
if (this.relative) {
$(window).resize(function() {
s._carve().init();
s._draw();
});
}
this.listen();
} else {
this.$.attr("readonly", "readonly");
}
return this;
};
this._configure = function() {
// Hooks
if (this.o.draw) this.dH = this.o.draw;
if (this.o.change) this.cH = this.o.change;
if (this.o.cancel) this.eH = this.o.cancel;
if (this.o.release) this.rH = this.o.release;
if (this.o.displayPrevious) {
this.pColor = this.h2rgba(this.o.fgColor, "0.4");
this.fgColor = this.h2rgba(this.o.fgColor, "0.6");
} else {
this.fgColor = this.o.fgColor;
}
return this;
};
this._clear = function() {
this.$c[0].width = this.$c[0].width;
};
this._validate = function(v) {
return ~~((v < 0 ? -0.5 : 0.5) + v / this.o.step) * this.o.step;
};
// Abstract methods
this.listen = function() {}; // on start, one time
this.extend = function() {}; // each time configure triggered
this.init = function() {}; // each time configure triggered
this.change = function(v) {}; // on change
this.val = function(v) {}; // on release
this.xy2val = function(x, y) {}; //
this.draw = function() {}; // on change / on release
this.clear = function() {
this._clear();
};
// Utils
this.h2rgba = function(h, a) {
var rgb;
h = h.substring(1, 7);
rgb = [
parseInt(h.substring(0, 2), 16),
parseInt(h.substring(2, 4), 16),
parseInt(h.substring(4, 6), 16)
];
return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + a + ")";
};
this.copy = function(f, t) {
for (var i in f) {
t[i] = f[i];
}
};
};
/**
* k.Dial
*/
k.Dial = function() {
k.o.call(this);
this.startAngle = null;
this.xy = null;
this.radius = null;
this.lineWidth = null;
this.cursorExt = null;
this.w2 = null;
this.PI2 = 2 * Math.PI;
this.extend = function() {
this.o = $.extend(
{
bgColor: this.$.data("bgcolor") || "#EEEEEE",
angleOffset: this.$.data("angleoffset") || 0,
angleArc: this.$.data("anglearc") || 360,
inline: true
},
this.o
);
};
this.val = function(v) {
if (null != v) {
this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v;
this.v = this.cv;
this.$.val(this.v);
this._draw();
} else {
return this.v;
}
};
this.xy2val = function(x, y) {
var a, ret;
a =
Math.atan2(x - (this.x + this.w2), -(y - this.y - this.w2)) -
this.angleOffset;
if (this.angleArc != this.PI2 && a < 0 && a > -0.5) {
// if isset angleArc option, set to min if .5 under min
a = 0;
} else if (a < 0) {
a += this.PI2;
}
ret =
~~(0.5 + (a * (this.o.max - this.o.min)) / this.angleArc) + this.o.min;
this.o.stopper && (ret = max(min(ret, this.o.max), this.o.min));
return ret;
};
this.listen = function() {
// bind MouseWheel
var s = this,
mw = function(e) {
e.preventDefault();
var ori = e.originalEvent,
deltaX = ori.detail || ori.wheelDeltaX,
deltaY = ori.detail || ori.wheelDeltaY,
v =
parseInt(s.$.val()) +
(deltaX > 0 || deltaY > 0
? s.o.step
: deltaX < 0 || deltaY < 0
? -s.o.step
: 0);
if (s.cH && s.cH(v) === false) return;
s.val(v);
},
kval,
to,
m = 1,
kv = { 37: -s.o.step, 38: s.o.step, 39: s.o.step, 40: -s.o.step };
this.$.bind("keydown", function(e) {
var kc = e.keyCode;
// numpad support
if (kc >= 96 && kc <= 105) {
kc = e.keyCode = kc - 48;
}
kval = parseInt(String.fromCharCode(kc));
if (isNaN(kval)) {
kc !== 13 && // enter
kc !== 8 && // bs
kc !== 9 && // tab
kc !== 189 && // -
e.preventDefault();
// arrows
if ($.inArray(kc, [37, 38, 39, 40]) > -1) {
e.preventDefault();
var v = parseInt(s.$.val()) + kv[kc] * m;
s.o.stopper && (v = max(min(v, s.o.max), s.o.min));
s.change(v);
s._draw();
// long time keydown speed-up
to = window.setTimeout(function() {
m *= 2;
}, 30);
}
}
}).bind("keyup", function(e) {
if (isNaN(kval)) {
if (to) {
window.clearTimeout(to);
to = null;
m = 1;
s.val(s.$.val());
}
} else {
// kval postcond
(s.$.val() > s.o.max && s.$.val(s.o.max)) ||
(s.$.val() < s.o.min && s.$.val(s.o.min));
}
});
this.$c.bind("mousewheel DOMMouseScroll", mw);
this.$.bind("mousewheel DOMMouseScroll", mw);
};
this.init = function() {
if (this.v < this.o.min || this.v > this.o.max) this.v = this.o.min;
this.$.val(this.v);
this.w2 = this.w / 2;
this.cursorExt = this.o.cursor / 100;
this.xy = this.w2 * this.scale;
this.lineWidth = this.xy * this.o.thickness;
this.lineCap = this.o.lineCap;
this.radius = this.xy - this.lineWidth / 2;
this.o.angleOffset &&
(this.o.angleOffset = isNaN(this.o.angleOffset)
? 0
: this.o.angleOffset);
this.o.angleArc &&
(this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc);
// deg to rad
this.angleOffset = (this.o.angleOffset * Math.PI) / 180;
this.angleArc = (this.o.angleArc * Math.PI) / 180;
// compute start and end angles
this.startAngle = 1.5 * Math.PI + this.angleOffset;
this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc;
var s =
max(
String(Math.abs(this.o.max)).length,
String(Math.abs(this.o.min)).length,
2
) + 2;
(this.o.displayInput &&
this.i.css({
width: ((this.w / 2 + 4) >> 0) + "px",
height: ((this.w / 3) >> 0) + "px",
position: "absolute",
"vertical-align": "middle",
"margin-top": ((this.w / 3) >> 0) + "px",
"margin-left": "-" + (((this.w * 3) / 4 + 2) >> 0) + "px",
border: 0,
background: "none",
font:
this.o.fontWeight + " " + ((this.w / s) >> 0) + "px " + this.o.font,
"text-align": "center",
color: this.o.inputColor || this.o.fgColor,
padding: "0px",
"-webkit-appearance": "none"
})) ||
this.i.css({
width: "0px",
visibility: "hidden"
});
};
this.change = function(v) {
this.cv = v;
this.$.val(v);
};
this.angle = function(v) {
return ((v - this.o.min) * this.angleArc) / (this.o.max - this.o.min);
};
this.draw = function() {
var c = this.g, // context
a = this.angle(this.cv), // Angle
sat = this.startAngle, // Start angle
eat = sat + a, // End angle
sa,
ea, // Previous angles
r = 1;
c.lineWidth = this.lineWidth;
c.lineCap = this.lineCap;
this.o.cursor &&
(sat = eat - this.cursorExt) &&
(eat = eat + this.cursorExt);
c.beginPath();
c.strokeStyle = this.o.bgColor;
c.arc(
this.xy,
this.xy,
this.radius,
this.endAngle,
this.startAngle,
true
);
c.stroke();
if (this.o.displayPrevious) {
ea = this.startAngle + this.angle(this.v);
sa = this.startAngle;
this.o.cursor &&
(sa = ea - this.cursorExt) &&
(ea = ea + this.cursorExt);
c.beginPath();
c.strokeStyle = this.pColor;
c.arc(this.xy, this.xy, this.radius, sa, ea, false);
c.stroke();
r = this.cv == this.v;
}
c.beginPath();
c.strokeStyle = r ? this.o.fgColor : this.fgColor;
c.arc(this.xy, this.xy, this.radius, sat, eat, false);
c.stroke();
};
this.cancel = function() {
this.val(this.v);
};
};
$.fn.dial = $.fn.knob = function(o) {
return this.each(function() {
var d = new k.Dial();
d.o = o;
d.$ = $(this);
d.run();
}).parent();
};
})(jQuery);

View File

@ -0,0 +1,545 @@
/* eslint-disable no-unused-vars */
/* global ajaxPage,texts,ActiveXObject, updates */
/* global $,clientMode */
// Define following functions to customize responses. Do not edit this code.
/* global toggleUpdateList,showUpdateDetails */
/* global handleErrorMessage, handleSuccessMessage */
/* global confirmDialog */
/* global nextUpdateVersion:writable */
var _auxIntervalReference = null;
function evalScript(elem) {
var scripts = elem.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
var script = document.createElement("script");
var data = scripts[i].text;
script.type = "text/javascript";
try {
// doesn't work on ie...
script.appendChild(document.createTextNode(data));
} catch (e) {
// IE has funky script nodes
script.text = data;
}
elem.parentNode.appendChild(script);
}
}
/**
* Executes a request against a target.
* @param {
* url,
* method,
* data,
* sync,
* success,
* error,
* contentType,
* accept
* } settings for AJAX request.
*/
function ajax(settings) {
var html = {
// Default values
url: "",
method: "POST",
data: {},
sync: true,
contentType: "application/json",
accept: "application/json",
success: null,
error: function(c, msg) {
console.error(c + ":" + msg);
},
response: null,
xmlHttp: null,
send: function() {
this.data["ajax"] = 1;
if (window.XMLHttpRequest) {
this.xmlHttp = new XMLHttpRequest();
} else {
this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.method == "GET") {
this.xmlHttp.open(this.method, this.url, this.sync);
this.data = "data=" + encodeURIComponent(JSON.stringify(this.data));
this.data += "&page=" + encodeURIComponent(html.page);
this.data += "&mode=" + clientMode;
} else {
// POST method.
this.xmlHttp.open(this.method, this.url, this.sync);
if (
this.contentType == "application/json" ||
this.contentType == "json"
) {
this.contentType = "application/json";
this.data = "data=" + encodeURIComponent(JSON.stringify(this.data));
this.data += "&page=" + encodeURIComponent(html.page);
this.data += "&mode=" + clientMode;
}
}
// Prepare request.
this.xmlHttp.setRequestHeader(
"Content-type",
"application/x-www-form-urlencoded"
);
this.xmlHttp.setRequestHeader("Accept", this.accept);
// Receiving response.
this.xmlHttp.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status == 200) {
var response;
if (html.accept == "json" || html.accept == "application/json") {
response = JSON.parse(this.response);
} else {
response = this.response;
}
if (html.success) {
html.success(response);
}
} else {
html.error(this.status, this);
}
}
};
// Execute request.
this.xmlHttp.send(this.data);
}
};
[
"url",
"method",
"data",
"sync",
"success",
"error",
"contentType",
"accept",
"page",
"cors"
].forEach(function(i) {
if (settings[i] != undefined) {
html[i] = settings[i];
}
});
html["data"]["cors"] = html["cors"];
// Perform.
html.send();
}
/**
* Prevents user exit or page change.
*/
function preventExit() {
var dbuttons = document.getElementById("um-buttons");
if (dbuttons != null) dbuttons.style.display = "none";
var dprog = document.getElementById("um-progress");
if (dprog != null) dprog.style.display = "block";
// Warning before leaving the page (back button, or outgoinglink)
window.onbeforeunload = function() {
return texts.preventExitMsg;
};
}
/**
* Cancels prevention.
*/
function cleanExit() {
var dbuttons = document.getElementById("um-buttons");
if (dbuttons != null) dbuttons.style.display = "block";
var dprog = document.getElementById("um-progress");
if (dprog != null) dprog.style.display = "none";
window.onbeforeunload = undefined;
}
/**
* Formats a error message.
*
* @param {string} msg
* @returns
*/
function umErrorMsg(msg) {
if (typeof handleErrorMessage == "function") {
return handleErrorMessage(msg);
} else {
return '<div class="um-error"><p>' + msg + "</p></div>";
}
}
/**
* Formats a success message.
*
* @param {string} msg
* @returns
*/
function umSuccessMsg(msg) {
if (typeof handleSuccessMessage == "function") {
handleSuccessMessage(msg);
} else {
return '<div class="success"><p>' + msg + "</p></div>";
}
}
/**
* Updates product to next version.
*
* @param {dictionary} settings:
* url: string
* success: function
* error: function
*/
function updateNext(settings) {
preventExit();
var progressInterval = setInterval(function() {
updateProgress(settings.url, settings.auth);
}, 1000);
ajax({
url: settings.url,
cors: settings.auth,
page: ajaxPage,
data: {
action: "nextUpdate"
},
success: function(d) {
if (typeof d.error == "undefined") {
if (typeof settings.success == "function") settings.success(d.result);
} else {
if (typeof settings.error == "function") settings.error(0, d.error);
}
clearInterval(progressInterval);
cleanExit();
//location.reload();
},
error: function(e, request) {
if (typeof response == "object") {
var r;
try {
r = JSON.parse(request.response);
if (r.error != "undefined") r = r.error;
else r = request.response;
} catch (e) {
// Do not change.
r = request.response;
}
}
if (typeof settings.error == "function") settings.error(e, r);
clearInterval(progressInterval);
cleanExit();
}
});
}
/**
* Updates product to latest version.
* @param {dictionary} settings:
* url: string
* success: function
* error: function
*/
function updateLatest(settings) {
preventExit();
var dprog = document.getElementById("um-progress");
dprog.style.display = "block";
var progressInterval = setInterval(function() {
updateProgress(settings.url, settings.auth);
}, 1000);
ajax({
url: settings.url,
cors: settings.auth,
page: ajaxPage,
data: {
action: "latestUpdate"
},
success: function(d) {
if (typeof handleSuccessMessage == "function") {
handleSuccessMessage(d);
} else {
if (typeof d.error == "undefined") {
if (typeof settings.success == "function") settings.success(d.result);
} else {
if (typeof settings.error == "function") settings.error(0, d.error);
}
}
clearInterval(progressInterval);
cleanExit();
},
error: function(e, request) {
if (typeof request == "object") {
var r;
try {
r = JSON.parse(request.response);
if (r.error != "undefined") r = r.error;
else r = request.response;
} catch (e) {
// Do not change.
r = request.response;
}
}
if (typeof handleErrorMessage == "function") {
handleErrorMessage(r.response);
} else {
if (typeof settings.error == "function") settings.error(e, r);
}
clearInterval(progressInterval);
cleanExit();
}
});
}
/**
* Updates progres bar.
*
* @param {string} url
* @param {string} auth
*/
function updateProgress(url, auth) {
var dprog = document.getElementById("um-progress");
var general_progress = document.getElementById("um-progress-general");
var general_label = document.getElementById("um-progress-general-label");
var task_progress = document.getElementById("um-progress-task");
var task_label = document.getElementById("um-progress-task-label");
var general_action = document.getElementById("um-progress-version");
var task_action = document.getElementById("um-progress-description");
if (general_label.innerText == undefined) {
// Initialize.
general_progress.style.width = "0 %";
general_label.innerText = "0 %";
task_progress.style.width = "0 %";
task_label.innerText = "0 %";
general_action.innerText = "";
task_action.innerText = "";
}
if (general_label.innerText == "100.00 %") {
cleanExit();
if (_auxIntervalReference != null) {
window.clearInterval(_auxIntervalReference);
}
return;
}
ajax({
url: url,
cors: auth,
page: ajaxPage,
data: {
action: "status"
},
success: function(d) {
// Clean.
general_progress.style.width = "0 %";
general_label.innerText = "0 %";
task_progress.style.width = "0 %";
task_label.innerText = "0 %";
general_action.innerText = "";
task_action.innerText = "";
var p;
if (d.result.global_percent == null) {
p = d.result.percent;
} else {
p = d.result.global_percent;
}
general_progress.style.width = p + "%";
if (p != undefined) {
general_label.innerText = p.toFixed(2) + " %";
}
var percent = d.result.percent;
if (percent == null) {
percent = 0;
}
task_progress.style.width = percent + "%";
task_label.innerText = percent.toFixed(2) + " %";
general_action.innerText = d.result.processing;
task_action.innerText = d.result.message;
},
error: function(d) {
dprog.innerHTML = umErrorMsg(d.error);
}
});
}
/**
* Show updates.
*
* @param {string} url Ajax.url
* @param {string} auth CORS
*/
function showProgress(url, auth) {
preventExit();
var dprog = document.getElementById("um-progress");
dprog.style.display = "block";
var dum = document.getElementById("um-loading");
dum.style.display = "none";
_auxIntervalReference = setInterval(function() {
updateProgress(url, auth);
}, 1000);
}
/**
* Search for updates.
*
* @param {string} url
* @param {string} auth CORS
*/
function searchUpdates(url, auth) {
const updates_list = document.getElementById("um-updates");
var um_buttons = document.getElementById("um-buttons");
var op_loading = document.getElementById("um-loading");
var op_msg = document.getElementById("loading-msg");
op_loading.style.display = "block";
op_msg.innerHTML = texts.searchingUpdates;
ajax({
url: url,
cors: auth,
page: ajaxPage,
data: {
action: "getUpdates"
},
accept: "text/html",
success: function(d) {
op_loading.style.display = "none";
if (d != "") {
updates_list.innerHTML = d;
um_buttons.style.display = "block";
} else {
// No updates.
updates_list.innerHTML = texts.alreadyUpdated;
}
evalScript(updates_list);
},
error: function(errno, err) {
op_loading.style.display = "none";
if (err.response) {
updates_list.innerHTML = err.response;
} else {
updates_list.innerHTML = errno;
}
}
});
}
function umConfirm(settings) {
if (typeof confirmDialog == "function") {
confirmDialog(settings);
} else {
if (confirm(settings.message)) {
if (typeof settings.onAccept == "function") settings.onAccept();
} else {
if (typeof settings.onDeny == "function") settings.onDeny();
}
}
}
function umShowUpdateDetails(update) {
var um_update_details = document.getElementById("um-update-details");
var header = document.getElementById("um-update-details-header");
var content = document.getElementById("um-update-details-content");
header.innerText = texts.updateText + " " + updates[update].version;
content.innerText = updates[update].description;
if (typeof showUpdateDetails != "function") {
um_update_details.style.display = "block";
if (typeof $ == "function") {
$("#um-update-details").dialog({
title: update,
width: 650,
height: 600
});
}
} else {
showUpdateDetails(um_update_details, updates[update]);
}
}
function umToggleUpdateList() {
if (typeof toggleUpdateList == "function") {
toggleUpdateList();
} else {
var update_list = document.getElementById("update-list");
if (update_list)
if (update_list.style.maxHeight == "10em") {
update_list.style.maxHeight = "0";
update_list.style.overflowY = "none";
} else {
update_list.style.maxHeight = "10em";
update_list.style.overflowY = "auto";
}
}
}
function umUINextUpdate(version) {
var pkg_version = document.getElementById("pkg_version");
var update_list = document.getElementById("update-list");
var nextVersion = document.getElementById("next-version");
var nextVersionLink = document.getElementById("um-package-details-next");
var updates_left = document.getElementById("updates_left");
var listNextUpdate;
var listNextVersion;
pkg_version.innerText = version;
nextUpdateVersion;
if (update_list) {
do {
listNextUpdate = update_list.children[0];
if (listNextUpdate == null) break;
listNextVersion = listNextUpdate.children[0].innerText;
update_list.removeChild(listNextUpdate);
if (updates_left.innerText > 0) {
updates_left.innerText = updates_left.innerText - 1;
} else {
updates_left.parentNode.parentNode.removeChild(updates_left.parentNode);
update_list.parentNode.removeChild(update_list);
}
} while (
listNextVersion <= version ||
version == null ||
listNextVersion == null
);
nextVersion.innerText = listNextVersion;
nextVersionLink.href =
"javascript: umShowUpdateDetails('" + listNextVersion + "');";
nextUpdateVersion = listNextVersion;
}
if (nextUpdateVersion == null || version >= nextUpdateVersion) {
var updates_list = document.getElementById("um-updates");
var um_buttons = document.getElementById("um-buttons");
updates_list.innerHTML = texts.alreadyUpdated;
um_buttons.innerHTML = "";
}
}
function validateEmail(email) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}

View File

@ -0,0 +1,458 @@
/* exported form_upload */
/* global $,ajax,cleanExit,preventExit,umConfirm,umErrorMsg */
/* global texts,ajaxPage,insecureMode */
/**
*
* @param {string} url
* @param {string} auth
* @param {string} current_package
*/
function form_upload(url, auth, current_package) {
// Thanks to: http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/
var ul = $("#form-offline_update ul");
$("#form-offline_update div").prop("id", "drop_file");
$("#drop_file").html(
texts.dropZoneText +
"&nbsp;&nbsp;&nbsp;<a>" +
texts.browse +
"</a>" +
'<input name="upfile" type="file" id="file-upfile" accept=".oum, .tar.gz" class="sub file" />'
);
$("#drop_file a").click(function() {
// Simulate a click on the file input button to show the file browser dialog
$(this)
.parent()
.find("input")
.click();
});
// Initialize the jQuery File Upload plugin
$("#form-offline_update").fileupload({
url: url,
// This element will accept file drag/drop uploading
dropZone: $("#drop_file"),
// This function is called when a file is added to the queue;
// either via the browse button, or via drag/drop:
add: function(e, data) {
let number_update = data.files[0].name.match(/package_(\d+\.*\d*)\.oum/);
if (number_update === null) {
number_update = data.files[0].name.match(
/pandorafms_server.*NG\.(\d+\.*\d*?)_.*\.tar\.gz/
);
}
if (number_update === null) {
umConfirm({
message:
'<span class="warning"></span><p>' + texts.invalidPackage + "</p>",
title: texts.warning,
size: 700,
onAccept: function() {
location.reload();
},
onDeny: function() {
cancelUpdate();
}
});
} else {
$("#drop_file").slideUp();
var tpl = $(
"<li>" +
'<input type="text" id="input-progress" ' +
'value="0" data-width="55" data-height="55" ' +
'data-fgColor="#82b92e" data-readOnly="1" ' +
'data-bgColor="#3E4043" />' +
"<p></p><span></span>" +
"</li>"
);
// Append the file name and file size
tpl
.find("p")
.text(data.files[0].name)
.append("<i>" + formatFileSize(data.files[0].size) + "</i>");
// Add the HTML to the UL element
ul.html("");
data.context = tpl.appendTo(ul);
// Initialize the knob plugin
tpl.find("input").val(0);
tpl.find("input").knob({
draw: function() {
$(this.i).val(this.cv + "%");
}
});
// Listen for clicks on the cancel icon
tpl.find("span").click(function() {
if (tpl.hasClass("working") && typeof jqXHR != "undefined") {
jqXHR.abort();
}
tpl.fadeOut(function() {
tpl.remove();
$("#drop_file").slideDown();
});
});
// Automatically upload the file once it is added to the queue
data.context.addClass("working");
var jqXHR = data.submit();
}
},
progress: function(e, data) {
// Calculate the completion percentage of the upload
var progress = parseInt((data.loaded / data.total) * 100, 10);
// Update the hidden input field and trigger a change
// so that the jQuery knob plugin knows to update the dial
data.context
.find("input")
.val(progress)
.change();
if (progress == 100) {
data.context.removeClass("working");
// Class loading while the zip is extracted
data.context.addClass("loading");
}
},
fail: function(e, data) {
// Something has gone wrong!
data.context.removeClass("working");
data.context.removeClass("loading");
data.context.addClass("error");
var response = data.response();
if (response != null) {
$("#drop_file").prop("id", "log_zone");
// Success messages
var log_zone = $("#log_zone");
log_zone.html("<div>" + response.jqXHR.responseText + "</div>");
$("#log_zone").slideDown(400, function() {
$("#log_zone").height(200);
$("#log_zone").css("overflow", "auto");
});
}
},
done: function(e, data) {
var res;
try {
res = JSON.parse(data.result);
} catch (e) {
res = {
status: "error",
message: data.result
};
}
if (res.status == "success") {
data.context.removeClass("loading");
data.context.addClass("suc");
ul.find("li")
.find("span")
.unbind("click");
// Transform the file input zone to show messages
$("#drop_file").prop("id", "log_zone");
// Success messages
var log_zone = $("#log_zone");
log_zone.html("<div>" + texts.uploadSuccess + "</div>");
log_zone.append("<div>" + texts.uploadMessage + "</div>");
log_zone.append("<div>" + texts.clickToStart + "</div>");
var file_list =
"<h2>" + texts.fileList + "</h2><div class='file_list'>";
if (res.files) {
res.files.forEach(function(e) {
file_list += "<div class='file_entry'>" + e + "</div>";
});
}
file_list += "</div>";
log_zone.append(file_list);
// Show messages
$("#log_zone").slideDown(400, function() {
$("#log_zone").height(200);
$("#log_zone").css("overflow", "auto");
});
// Bind the the begin of the installation to the package li
ul.find("li").css("cursor", "pointer");
ul.find("li").click(function() {
ul.find("li").unbind("click");
ul.find("li").css("cursor", "default");
// Changed the data that shows the file li
data.context.find("p").text(texts.updatingTo + res.version);
data.context
.find("input")
.val(0)
.change();
let number_update = res.version;
let server_update = res.server_update;
let target_version = Math.round(parseFloat(current_package)) + 1;
if (number_update === null) {
umConfirm({
message:
'<span class="warning"></span><p>' +
texts.invalidPackage +
"</p>",
title: texts.warning,
size: 535,
onAccept: function() {
location.reload();
},
onDeny: function() {
cancelUpdate();
}
});
} else if (Math.round(parseFloat(number_update)) != target_version) {
umConfirm({
message:
'<span class="warning"></span><p>' +
(server_update
? texts.unoficialServerWarning
: texts.unoficialWarning) +
"</p>",
title: texts.warning,
size: 535,
onAccept: function() {
if (insecureMode) {
// Begin the installation
install_package(
url,
auth,
res.packageId,
res.version,
server_update
);
} else {
// Verify sign. (optional)
umConfirm({
message:
"<p>" +
texts.verifysigns +
"<br><textarea id='signature'></textarea></p>",
title: texts.verifysigntitle,
cancelText: texts.ignoresign,
size: 535,
onAccept: function() {
// Send validation
ajax({
url: url,
cors: auth,
page: ajaxPage,
data: {
action: "validateUploadedOUM",
packageId: res.packageId,
signature: $("#signature").val()
},
success: function(d) {
var result = d.result;
if (result.status == "success") {
// Begin the installation
install_package(
url,
auth,
res.packageId,
res.version,
server_update
);
} else {
cancelUpdate(result.message);
}
},
error: function(e, request) {
cancelUpdate(e.error);
console.error(request);
}
});
},
onDeny: function() {
// Begin the installation
install_package(
url,
auth,
res.packageId,
res.version,
server_update
);
}
});
}
},
onDeny: function() {
cancelUpdate();
}
});
} else {
// Begin the installation
install_package(
url,
auth,
res.packageId,
res.version,
server_update
);
}
});
} else {
// Something has gone wrong!
data.context.removeClass("loading");
data.context.addClass("error");
ul.find("li")
.find("span")
.click(function() {
window.location.reload();
});
// Transform the file input zone to show messages
$("#drop_file").prop("id", "log_zone");
// Error messages
$("#log_zone").html("<div>" + res.message + "</div>");
// Show error messages
$("#log_zone").slideDown(400, function() {
$("#log_zone").height(75);
$("#log_zone").css("overflow", "auto");
});
}
}
});
// Prevent the default action when a file is dropped on the window
$(document).on("drop_file dragover", function(e) {
e.preventDefault();
});
}
// Helper function that formats the file sizes
function formatFileSize(bytes) {
if (typeof bytes !== "number") {
return "";
}
if (bytes >= 1000000000) {
return (bytes / 1000000000).toFixed(2) + " GB";
}
if (bytes >= 1000000) {
return (bytes / 1000000).toFixed(2) + " MB";
}
return (bytes / 1000).toFixed(2) + " KB";
}
/**
* Start to install package.
*
* @param {string} url
* @param {string} auth
* @param {string} packageId
* @param {boolean} serverUpdate
*/
function install_package(url, auth, packageId, version, serverUpdate) {
umConfirm({
message:
(serverUpdate ? texts.ensureServerUpdate : texts.ensureUpdate) +
version +
". " +
texts.ensure,
title: texts.updatingTo + version,
onAccept: function() {
// Schedule update progress using notify from UMC.
preventExit();
var progressInterval = setInterval(function() {
updateOfflineProgress(url, auth);
}, 1000);
ajax({
url: url,
cors: auth,
page: ajaxPage,
data: {
action: "installUploadedOUM",
packageId: packageId
},
success: function(d) {
// Succesfully installed.
clearInterval(progressInterval);
cleanExit();
var response = d.result;
document.getElementById("log_zone").innerText = response.result;
$("#input-progress")
.val(100)
.change();
},
error: function(e, request) {
clearInterval(progressInterval);
cleanExit();
console.log(e);
console.log(request);
}
});
},
onDeny: function() {
cancelUpdate();
}
});
}
/**
* Updates log_zone and installation progress.
*/
function updateOfflineProgress(url, auth) {
var log_zone = $("log_zone");
var general_progress = $("#input-progress");
var general_label = $("#result li p");
ajax({
url: url,
cors: auth,
page: ajaxPage,
data: {
action: "status"
},
success: function(d) {
$(general_progress)
.val(d.result.percent)
.change();
general_label.innerText = d.result.processing;
log_zone.innerText = d.result.message;
},
error: function(d) {
log_zone.innerHTML = umErrorMsg(d.error);
}
});
}
/**
* Cancel update.
*/
function cancelUpdate(reason = "") {
console.error(reason);
var taskStatusLogContainer = $("#result li");
taskStatusLogContainer.addClass("error");
taskStatusLogContainer.find("p").text(texts.rejectedUpdate + " " + reason);
taskStatusLogContainer.find("span").on("click", function() {
location.reload();
});
}

View File

@ -0,0 +1,67 @@
/*
* ---------------------------------------------------------------------
* - CALENDAR TOOLTIP -
* ---------------------------------------------------------------------
*/
/* Calendar background */
table.scw {
background-color: #82b92e;
border: 0 !important;
border-radius: 4px;
}
/* Week number heading */
td.scwWeekNumberHead {
color: #111;
}
td.scwWeek {
color: #111 !important;
}
/* Today selector */
td.scwFootDisabled {
background-color: #000;
color: #ffffff;
}
tfoot.scwFoot {
color: #111;
}
.scwFoot :hover {
color: #3f3f3f !important;
}
table.scwCells {
background-color: #fff !important;
color: #3c3c3c !important;
}
table.scwCells:hover {
background-color: #fff !important;
}
td.scwCellsExMonth {
background-color: #eee !important;
color: #3c3c3c !important;
}
td.scwCellsWeekend {
background-color: #3c3c3c !important;
color: #fff !important;
border: 0 !important;
}
td.scwInputDate {
background-color: #777 !important;
color: #ffffff !important;
border: 0 !important;
}
td.scwFoot {
background-color: #fff !important;
color: #3c3c3c !important;
border: 0 !important;
}

View File

@ -0,0 +1,3 @@
.box {
background-color: orange;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,23 @@
.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-draggable.ui-resizable {
padding: 0;
}
.ui-dialog .ui-widget-header {
margin: 0;
}
.ui-dialog-content {
height: 100%;
}
.ui-button.ui-corner-all.ui-widget.ui-button-icon-only.ui-dialog-titlebar-close {
margin-top: -10px;
}
.ui-button.ui-corner-all.ui-widget.ui-button-icon-only.ui-dialog-titlebar-close:hover {
background: url("../images/icono_cerrar.png") no-repeat center center;
}
.ui-button-icon.ui-icon.ui-icon-closethick {
background: url("../images/icono_cerrar.png") no-repeat center center !important;
}

View File

@ -1,6 +1,23 @@
.update_text p {
font-size: 11pt;
}
.update_text a {
font-size: 11pt;
color: #82b92e;
}
.update_manager_warning p {
font-size: 10pt;
}
.ui-widget-content,
.ui-widget-content p {
font-size: 12pt;
}
.fileupload_form {
background-color: #373a3d;
background-image: -moz-linear-gradient(center top, #373a3d, #313437);
background-image: -moz-linear-gradient(center, #373a3d, #313437);
border-radius: 3px;
margin: 0px;
padding: 30px;
@ -48,6 +65,7 @@
#drop_file input {
display: none;
}
.fileupload_form ul {
border-bottom: 1px solid #3d4043;
border-top: 1px solid #2b2e31;
@ -57,7 +75,7 @@
}
.fileupload_form ul li {
background-color: #333639;
background-image: -moz-linear-gradient(center top, #333639, #303335);
background-image: -moz-linear-gradient(center, #333639, #303335);
border-bottom: 1px solid #2b2e31;
border-top: 1px solid #3d4043;
padding: 15px;
@ -89,7 +107,7 @@
top: 15px;
}
.fileupload_form ul li span {
background: url("../../images/check-cross.png") no-repeat scroll 0 0
background: url("../images/check-cross.png") no-repeat scroll 0 0
rgba(0, 0, 0, 0);
cursor: pointer;
height: 12px;
@ -106,12 +124,11 @@
height: 16px;
}
.fileupload_form ul li.loading span {
background: url("../../images/spinner.gif") no-repeat scroll 0 0
rgba(0, 0, 0, 0);
background: url("../images/spinner.gif") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
height: 16px;
}
.fileupload_form ul li.suc span {
background: url("../../images/check-cross.png") no-repeat scroll 0 0
background: url("../images/check-cross.png") no-repeat scroll 0 0
rgba(0, 0, 0, 0);
height: 12px;
}
@ -119,7 +136,7 @@
color: #5a8629;
}
.fileupload_form ul li.error span {
background: url("../../images/check-cross.png") no-repeat scroll 0 -12px rgba(0, 0, 0, 0);
background: url("../images/check-cross.png") no-repeat scroll 0 -12px rgba(0, 0, 0, 0);
height: 16px;
}
.fileupload_form ul li.error p {
@ -138,7 +155,7 @@
}
#box_online {
background-image: url("../../images/update_manager_background.jpg");
background-image: url("../images/update_manager_background.jpg");
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
@ -175,15 +192,6 @@ div#box_online * {
font-size: 12pt;
}
.update_text p {
font-size: 11pt;
}
.update_text a {
font-size: 11pt;
color: #82b92e;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
float: left;
padding-left: 19px;
@ -201,7 +209,7 @@ a.update_manager_button {
}
a.update_manager_button:after {
content: url(../../images/update_manager_button.png);
content: url(../images/update_manager_button.png);
padding-left: 10px;
}
@ -257,10 +265,6 @@ div#box_online.box_online_meta * {
margin-bottom: 10px;
}
.update_manager_warning p {
font-size: 10pt;
}
.update_manager_warning img {
padding-right: 20px;
width: 90px;
@ -269,7 +273,6 @@ div#box_online.box_online_meta * {
a.update_manager_button_open {
padding: 5px 10px;
font-size: 16px;
border-radius: 4px;
text-decoration: none;
border: 1px solid #82b92e;
color: #82b92e;
@ -280,3 +283,36 @@ a.update_manager_button_open:hover {
color: #fff;
background-color: #82b92e;
}
#um-update-details-header {
background-image: url(../images/pandora_logo.png);
}
.um-progress-bar {
background-color: #8bb92e !important;
}
.um-error {
color: #e63c52;
}
.um-success {
color: #8bb92e;
}
.dz-success-mark svg {
background: #8bb92e;
border-radius: 50%;
}
.newsletter_div {
font-size: 12pt;
margin: 5px 20px;
float: left;
padding-top: 23px;
}
.register_update_manager {
margin: 5px 0 10px;
float: left;
padding-left: 15px;
}

View File

@ -0,0 +1,206 @@
.um-box,
.um-box * {
box-sizing: border-box;
}
.um-box {
border: 1px solid gray;
width: 90%;
height: 90%;
margin: 5% auto;
padding: 2em;
}
#update-list {
max-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
transition: max-height 0.15s ease-in-out;
}
.update {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
}
#um-loading {
background-image: url(../images/spinner.gif);
height: 1.3em;
background-repeat: no-repeat;
background-size: contain;
text-indent: 6em;
}
#um-buttons {
margin-top: 2em;
}
#um-buttons button {
margin: 0 1em 1em 1em;
border: none;
padding: 10px;
cursor: pointer;
background: #efefef;
}
#um-buttons button:hover {
background: #ddd;
}
#um-buttons button:active {
background: #ccc;
}
.ui-widget.ui-widget-content {
border: none;
}
#um-update-details {
display: none;
background: #fff;
margin: 0;
padding: 0;
width: 100%;
}
#um-update-details * {
font-size: 16pt;
}
#um-update-details-header {
color: #fff;
background-color: #343434;
background-repeat: no-repeat;
background-position: 50% 20%;
height: 3em;
text-align: center;
display: block;
padding-top: 5.7em;
width: 100%;
}
#um-update-details-content {
padding: 2em;
}
#um-progress {
width: 100%;
min-width: 450px;
box-sizing: border-box;
padding: 2em 3em;
display: none;
}
.um-progress-bar-container {
box-sizing: border-box;
padding: 0;
height: 1.4em;
width: 90%;
border: 1px solid #ddd;
text-align: center;
}
#um-progress .um-progress-bar-container span {
font-size: 0.8em;
line-height: 1.5em;
font-weight: bolder;
color: #343434;
position: absolute;
}
.um-progress-bar {
box-sizing: border-box;
margin: 0;
height: 100%;
width: 0%;
background-color: #1f282b;
}
#box_offline form {
background-color: #373a3d;
background-image: -moz-linear-gradient(top, #373a3d, #313437);
border-radius: 3px;
font-family: "PT Sans Narrow", sans-serif;
margin: 0px;
padding: 30px;
}
#box_offline form div#upload {
width: 90%;
height: 90%;
margin: 0 auto;
background-color: #e6e6e6;
border: 20px solid rgba(0, 0, 0, 0);
border-radius: 3px;
color: #707070;
font-size: 16px;
font-weight: bold;
margin-bottom: 30px;
padding: 40px 50px;
text-align: center;
text-transform: uppercase;
}
div#upload span.browse {
background-color: #82b92e;
border-radius: 2px;
color: #ffffff;
cursor: pointer;
display: inline-block;
font-size: 14px;
line-height: 1;
padding: 12px 26px;
}
.dz-upload {
display: block;
background-color: red;
height: 10px;
width: 0%;
}
.dz-success-mark,
.dz-error-mark {
display: none;
}
span.warning {
min-width: 10em;
min-height: 10em;
background: url(../images/icono_warning.png);
background-repeat: no-repeat;
background-position: center;
background-size: 80%;
margin: 0em 1em 0em 0em;
}
.ui-dialog-content.ui-widget-content {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.ui-dialog-content.ui-widget-content p {
word-break: keep-all;
}
.license_text {
text-align: left;
}
.license_text input {
width: 290px;
font-size: 11pt;
}
.license_text a {
font-size: 11pt;
color: #82b92e;
}
input.error {
border: 1px solid #ff3333;
}
textarea#signature {
margin-top: 1em;
}

View File

@ -0,0 +1,559 @@
<?php
// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
/**
* Test file. UMC.
*/
namespace UpdateManager;
// Load classes.
require_once __DIR__.'/../vendor/autoload.php';
// Load Config class from UMC to read test.ini settings.
require_once __DIR__.'/../../src/lib/Config.php';
require_once __DIR__.'/../../src/lib/License.php';
require_once __DIR__.'/../../src/lib/DB.php';
/**
* Test the Client class.
*/
class ClientTest extends \PHPUnit\Framework\TestCase
{
/**
* Settings.
*
* @var \Config
*/
private $conf;
/**
* Development license.
*
* @var string
*/
private $development_license;
/**
* Customer license.
*
* @var string
*/
private $customer_license;
/**
* UMS dbh
*
* @var \DB
*/
private $ums_dbh;
/**
* Creates a couple of OUM files to test update process.
*
* @return void
*/
private function generateOUMs()
{
$path = sys_get_temp_dir().'/oum/';
$target = 'src/repo/test';
$online = (bool) $this->conf->token('online');
if ($online === true) {
$target = '/var/www/html/updatemanager/repo/test';
} else if (substr($target, 0, 1) !== '/') {
$target = __DIR__.'/../../'.$target;
}
// OUM 1.
system('rm -rf '.$path);
mkdir($path, 0777, true);
mkdir($path.'/extras');
mkdir($path.'/extras/delete_files');
system('echo -e "la cosa del vivir\nmola mucho\n" >'.$path.'1');
system('cd '.$path.' && zip '.$target.'/test_1.zip -r * >/dev/null');
system('cp '.$target.'/test_1.zip /tmp/test_prueba.zip');
system('mv '.$target.'/test_1.zip '.$target.'/test_1.oum');
$this->ums_dbh->insert(
'um_packages',
[
'version' => 1,
'description' => 'test1',
'file_name' => '../test/test_1.oum',
'status' => 'testing',
]
);
// OUM 2.
system('rm -rf '.$path);
mkdir($path, 0777, true);
mkdir($path.'/extras');
mkdir($path.'/extras/delete_files');
mkdir($path.'/extras/mr');
system('echo "file2" > '.$path.'2');
system('echo -e "create table tete (id int);\n" >'.$path.'extras/mr/1.sql');
system('cd '.$path.' && zip '.$target.'/test_2.zip -r * >/dev/null');
system('mv '.$target.'/test_2.zip '.$target.'/test_2.oum');
$this->ums_dbh->insert(
'um_packages',
[
'version' => 2,
'description' => 'test2',
'file_name' => '../test/test_2.oum',
'status' => 'testing',
]
);
// OUM 3.
system('rm -rf '.$path);
mkdir($path, 0777, true);
mkdir($path.'/extras');
mkdir($path.'/extras/delete_files');
mkdir($path.'/extras/mr');
system('echo "file3" > '.$path.'3');
file_put_contents($path.'extras/delete_files/delete_files.txt', "1\n");
system('echo -e "create table teta (id int);\n" >'.$path.'extras/mr/2.sql');
system('echo -e "create table teto (id int);\n" >>'.$path.'extras/mr/2.sql');
system('cd '.$path.' && zip '.$target.'/test_3.zip -r * >/dev/null');
system('mv '.$target.'/test_3.zip '.$target.'/test_3.oum');
$this->ums_dbh->insert(
'um_packages',
[
'version' => 3,
'description' => 'test3',
'file_name' => '../test/test_3.oum',
'status' => 'testing',
]
);
// OUM 4.
system('rm -rf '.$path);
mkdir($path, 0777, true);
mkdir($path.'/extras');
mkdir($path.'/extras/delete_files');
mkdir($path.'/extras/mr');
system('echo "file4" > '.$path.'4');
file_put_contents($path.'extras/delete_files/delete_files.txt', "1\n");
system('echo -e "drop table teta;\n" >'.$path.'extras/mr/3.sql');
system('cd '.$path.' && zip '.$target.'/test_4.zip -r * >/dev/null');
system('mv '.$target.'/test_4.zip '.$target.'/test_4.oum');
$this->ums_dbh->insert(
'um_packages',
[
'version' => 4,
'description' => 'test4',
'file_name' => '../test/test_4.oum',
'status' => 'testing',
]
);
$this->ums_dbh->insert(
'um_packages',
[
'version' => 5,
'description' => 'test5',
'file_name' => 'unexistent.oum',
'status' => 'published',
]
);
// Cleanup.
system('rm -rf '.$path);
}
/**
* Base settings.
*
* @return void
*/
public function setup(): void
{
// Load the conf.
try {
$this->conf = new \Config('client/conf/test.ini');
} catch (\Exception $e) {
$this->fail($e->xdebug_message);
}
// Verify endpoint has all needed stuff, like licenses and OUM packages.
$this->ums_dbh = new \DB(
$this->conf->token('dbhost'),
$this->conf->token('dbname'),
$this->conf->token('dbuser'),
$this->conf->token('dbpass')
);
if ((bool) $this->ums_dbh === false) {
$this->fail(
'Failed to prepare environment '.$this->conf->token('dbhost')
);
}
// Cleanup.
foreach (['Development', 'Customer'] as $company) {
$id = $this->ums_dbh->select_value(
'SELECT id FROM um_licenses WHERE company=?',
[$company]
);
if ($id > 0) {
$this->ums_dbh->delete(
'um_licenses',
$id
);
}
}
// Load minimum examples.
$this->ums_dbh->insert(
'um_licenses',
[
'company' => 'Development',
'license_key' => 4,
'expiry_date' => date('Y-m-d', strtotime(date('Y-m-d', time()).' + 365 day')),
'developer' => 1,
]
);
$this->ums_dbh->insert(
'um_licenses',
[
'company' => 'Customer',
'license_key' => 5,
'expiry_date' => date('Y-m-d', strtotime(date('Y-m-d', time()).' + 365 day')),
'developer' => 0,
]
);
$rs = \License::all_licenses(
$this->ums_dbh,
1,
0,
['company' => 'Development'],
[
'column' => 'company',
'dir' => 'asc',
],
['*']
);
$this->development_license = $rs[0]['license_key'];
$this->assertEquals(1, $rs[0]['developer'], 'Not a developer license');
$rs = \License::all_licenses(
$this->ums_dbh,
1,
0,
['company' => 'Customer'],
[
'column' => 'company',
'dir' => 'asc',
],
['*']
);
$this->customer_license = $rs[0]['license_key'];
$this->base = $this->conf->token('homedir');
system('rm -rf '.$this->base.'/open');
system('rm -rf '.$this->base.'/enterprise');
$this->generateOUMs();
}
/**
* Cleanup.
*
* @return void
*/
public function teardown():void
{
foreach (['test1', 'test2', 'test3', 'test4', 'test5'] as $t) {
$id = $this->ums_dbh->select_value(
'SELECT id FROM um_packages WHERE description=?',
[$t]
);
$this->ums_dbh->delete(
'um_packages',
$id
);
}
// Cleanup.
foreach (['Development', 'Customer'] as $company) {
$id = $this->ums_dbh->select_value(
'SELECT id FROM um_licenses WHERE company=?',
[$company]
);
if ($id > 0) {
$this->ums_dbh->delete(
'um_licenses',
$id
);
}
}
system('rm -rf '.sys_get_temp_dir().'/oum');
system('rm -rf '.$this->base.'/open');
system('rm -rf '.$this->base.'/enterprise');
system('rm -rf '.$this->base);
system('rm -f '.sys_get_temp_dir().'/test*.oum');
}
/**
* Test client.
*
* @return void
*/
public function testInvalidClient()
{
try {
$this->umc_invalid = new Client([]);
} catch (\Exception $e) {
$this->umc_invalid = new Client(
[
'host' => $this->conf->token('umc_host'),
'port' => $this->conf->token('umc_port'),
'remote_config' => sys_get_temp_dir().'/oum',
'endpoint' => 'notexists',
'license' => 'UNKNOWN',
'insecure' => false,
'dbconnection' => null,
'homedir' => $this->base.'/unexistent',
'proxy' => [
'user' => '',
'host' => '',
'port' => '',
'password' => '',
],
]
);
$this->assertFalse(
$this->umc_invalid->test()
);
$this->umc_invalid = new Client(
[
'host' => $this->conf->token('umc_host'),
'port' => $this->conf->token('umc_port'),
'endpoint' => 'notexists',
'license' => 'UNKNOWN',
'insecure' => true,
'homedir' => $this->base.'/unexistent',
]
);
$this->assertNull(
$this->umc_invalid->listUpdates()
);
return;
}
$this->fail('Expected exception not found');
}
/**
* Test opensource updates.
*
* @return void
*/
public function atestOpen()
{
if (is_dir($this->base.'/open/') === false) {
mkdir($this->base.'/open/', 0777, true);
}
$dbh_open = new \mysqli(
$this->conf->token('dbhost'),
$this->conf->token('dbuser'),
$this->conf->token('dbpass')
);
if ($dbh_open->select_db('open') === false) {
$dbh_open->query('create database open');
$dbh_open->select_db('open');
}
$umc_open = new Client(
[
'host' => $this->conf->token('umc_host'),
'port' => $this->conf->token('umc_port'),
'endpoint' => ($this->conf->token('endpoint') ?? ''),
'license' => 'PANDORA-FREE',
'insecure' => true,
'homedir' => $this->base.'/open',
'dbconnection' => $dbh_open,
'registration_code' => 'unregistered',
'current_package' => 0,
'MR' => 0,
]
);
$this->assertEquals(
true,
$umc_open->test(),
($umc_open->getLastError() ?? '')
);
$open = $umc_open->listUpdates();
$this->assertEquals(
'190916',
$open[0]['version'],
($umc_open->getLastError() ?? '')
);
$this->assertEquals(
false,
$umc_open->updateNextVersion(),
($umc_open->getLastError() ?? '')
);
if (strpos(
($umc_open->getLastError() ?? ''),
'open.tusuario'
) <= 0
) {
$this->fail(($umc_open->getLastError() ?? ''));
}
$this->assertEquals(0, $umc_open->getMR());
$umc_open->getDBH()->query('DROP DATABASE `open`');
}
/**
* Test enterprise updates.
*
* @return void
*/
public function testEnterprise()
{
if (is_dir($this->base.'/enterprise/') === false) {
mkdir($this->base.'/enterprise/', 0777, true);
}
$dbh_ent = new \mysqli(
$this->conf->token('dbhost'),
$this->conf->token('dbuser'),
$this->conf->token('dbpass')
);
if ($dbh_ent->select_db('ent') === false) {
$dbh_ent->query('create database ent');
$dbh_ent->select_db('ent');
$dbh_ent->query(
'create table tconfig(
`id_config` int(10) unsigned NOT NULL auto_increment,
`token` varchar(100),
`value` text NOT NULL,
primary key (`id_config`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
);
}
$umc_enterprise = new Client(
[
'host' => $this->conf->token('umc_host'),
'port' => $this->conf->token('umc_port'),
'remote_config' => sys_get_temp_dir().'/oum',
'endpoint' => $this->conf->token('endpoint'),
'license' => $this->development_license,
'insecure' => true,
'homedir' => $this->base.'/enterprise',
'dbconnection' => $dbh_ent,
'tmp' => sys_get_temp_dir(),
]
);
$this->assertEquals(
true,
$umc_enterprise->test(),
($umc_enterprise->getLastError() ?? '')
);
$ent = $umc_enterprise->listUpdates();
$this->assertEquals(
1,
$ent[0]['version'],
($umc_enterprise->getLastError() ?? '')
);
$this->assertEquals(
true,
$umc_enterprise->updateNextVersion(),
($umc_enterprise->getLastError() ?? '')
);
$this->assertEquals(
1,
$umc_enterprise->getVersion(),
($umc_enterprise->getLastError() ?? '')
);
$this->assertEquals(0, $umc_enterprise->getMR());
$umc_enterprise->updateLastVersion();
$this->assertEquals(
4,
$umc_enterprise->getVersion(),
($umc_enterprise->getLastError() ?? '')
);
// Verify MR had worked.
$this->assertEquals(3, $umc_enterprise->getMR());
// Verify delete files has worked.
$this->assertTrue(
file_exists($this->base.'/enterprise/3'),
'File '.$this->base.'/enterprise/3 should exist'
);
$this->assertFalse(
file_exists($this->base.'/enterprise/1'),
'File '.$this->base.'/enterprise/1 should not exist'
);
// Customer.
$umc_enterprise = new Client(
[
'host' => $this->conf->token('umc_host'),
'port' => $this->conf->token('umc_port'),
'remote_config' => sys_get_temp_dir().'/oum',
'endpoint' => $this->conf->token('endpoint'),
'license' => $this->customer_license,
'insecure' => true,
'homedir' => $this->base.'/enterprise',
'dbconnection' => $dbh_ent,
'tmp' => sys_get_temp_dir(),
]
);
$this->assertFalse(
$umc_enterprise->updateNextVersion()
);
// Cleanup.
$umc_enterprise->getDBH()->query('DROP DATABASE `ent`');
}
}

View File

@ -0,0 +1,80 @@
<?php
if ($argv === null) {
header('Location: /');
exit(0);
}
// UMC dependencies.
require_once __DIR__.'/vendor/autoload.php';
chdir(__DIR__.'/../../');
$cnf_file = 'include/config.php';
if (file_exists($cnf_file) === false) {
exit(0);
}
ini_set('display_errors', 1);
require_once $cnf_file;
// PandoraFMS dependencies.
require_once __DIR__.'/vendor/autoload.php';
use PandoraFMS\Core\Config;
use PandoraFMS\Core\DBMaintainer;
global $config;
error_reporting(E_ALL ^ E_NOTICE);
try {
$historical_dbh = null;
if (isset($config['history_db_enabled']) === true
&& (bool) $config['history_db_enabled'] === true
) {
$dbm = new DBMaintainer(
[
'host' => $config['history_db_host'],
'port' => $config['history_db_port'],
'name' => $config['history_db_name'],
'user' => $config['history_db_user'],
'pass' => $config['history_db_pass'],
]
);
$historical_dbh = $dbm->getDBH();
}
$current_mr = db_get_value('value', 'tconfig', 'token', 'MR');
echo 'MR: '.$current_mr."\n";
if ((bool) $historical_dbh === true) {
echo 'current historyDB MR: '.Config::get('MR', 'unknown', true)."\n";
}
$umc = new UpdateManager\Client(
[
'homedir' => $config['homedir'],
'dbconnection' => $config['dbconnection'],
'historydb' => $historical_dbh,
'MR' => (int) $current_mr,
]
);
if ($umc->applyAllMRPending() !== true) {
echo ($umc->getMR() + 1).': '.$umc->getLastError();
}
$current_mr = $umc->getMR();
echo 'current MR: '.$current_mr."\n";
if ((bool) $historical_dbh === true) {
echo 'current historyDB MR: '.Config::get('MR', 'unknown', true)."\n";
}
} catch (Exception $e) {
echo $e->getMessage().' in '.$e->getFile().':'.$e->getLine()."\n";
}

View File

@ -0,0 +1,7 @@
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit6482daa1e61704139ecfb6f76b39fab6::getLoader();

View File

@ -0,0 +1 @@
../phpunit/phpunit/phpunit

View File

@ -0,0 +1,479 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
private $vendorDir;
// PSR-4
private $prefixLengthsPsr4 = array();
private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array();
// PSR-0
private $prefixesPsr0 = array();
private $fallbackDirsPsr0 = array();
private $useIncludePath = false;
private $classMap = array();
private $classMapAuthoritative = false;
private $missingClasses = array();
private $apcuPrefix;
private static $registeredLoaders = array();
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*/
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
(array) $paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return bool|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return self[]
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*/
function includeFile($file)
{
include $file;
}

View File

@ -0,0 +1,550 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions
{
private static $installed = array (
'root' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '48d86a9697ae4e37c97520db416201371e48a5ac',
'name' => 'articapfms/update_manager_client',
),
'versions' =>
array (
'articapfms/update_manager_client' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '48d86a9697ae4e37c97520db416201371e48a5ac',
),
'doctrine/instantiator' =>
array (
'pretty_version' => '1.4.0',
'version' => '1.4.0.0',
'aliases' =>
array (
),
'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b',
),
'myclabs/deep-copy' =>
array (
'pretty_version' => '1.10.2',
'version' => '1.10.2.0',
'aliases' =>
array (
),
'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
'replaced' =>
array (
0 => '1.10.2',
),
),
'phar-io/manifest' =>
array (
'pretty_version' => '2.0.1',
'version' => '2.0.1.0',
'aliases' =>
array (
),
'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133',
),
'phar-io/version' =>
array (
'pretty_version' => '3.1.0',
'version' => '3.1.0.0',
'aliases' =>
array (
),
'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
),
'phpdocumentor/reflection-common' =>
array (
'pretty_version' => '2.2.0',
'version' => '2.2.0.0',
'aliases' =>
array (
),
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
),
'phpdocumentor/reflection-docblock' =>
array (
'pretty_version' => '5.2.2',
'version' => '5.2.2.0',
'aliases' =>
array (
),
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
),
'phpdocumentor/type-resolver' =>
array (
'pretty_version' => '1.4.0',
'version' => '1.4.0.0',
'aliases' =>
array (
),
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
),
'phpspec/prophecy' =>
array (
'pretty_version' => '1.12.2',
'version' => '1.12.2.0',
'aliases' =>
array (
),
'reference' => '245710e971a030f42e08f4912863805570f23d39',
),
'phpunit/php-code-coverage' =>
array (
'pretty_version' => '7.0.14',
'version' => '7.0.14.0',
'aliases' =>
array (
),
'reference' => 'bb7c9a210c72e4709cdde67f8b7362f672f2225c',
),
'phpunit/php-file-iterator' =>
array (
'pretty_version' => '2.0.3',
'version' => '2.0.3.0',
'aliases' =>
array (
),
'reference' => '4b49fb70f067272b659ef0174ff9ca40fdaa6357',
),
'phpunit/php-text-template' =>
array (
'pretty_version' => '1.2.1',
'version' => '1.2.1.0',
'aliases' =>
array (
),
'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686',
),
'phpunit/php-timer' =>
array (
'pretty_version' => '2.1.3',
'version' => '2.1.3.0',
'aliases' =>
array (
),
'reference' => '2454ae1765516d20c4ffe103d85a58a9a3bd5662',
),
'phpunit/php-token-stream' =>
array (
'pretty_version' => '4.0.4',
'version' => '4.0.4.0',
'aliases' =>
array (
),
'reference' => 'a853a0e183b9db7eed023d7933a858fa1c8d25a3',
),
'phpunit/phpunit' =>
array (
'pretty_version' => '8.5.14',
'version' => '8.5.14.0',
'aliases' =>
array (
),
'reference' => 'c25f79895d27b6ecd5abfa63de1606b786a461a3',
),
'sebastian/code-unit-reverse-lookup' =>
array (
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'aliases' =>
array (
),
'reference' => '1de8cd5c010cb153fcd68b8d0f64606f523f7619',
),
'sebastian/comparator' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '1071dfcef776a57013124ff35e1fc41ccd294758',
),
'sebastian/diff' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '14f72dd46eaf2f2293cbe79c93cc0bc43161a211',
),
'sebastian/environment' =>
array (
'pretty_version' => '4.2.4',
'version' => '4.2.4.0',
'aliases' =>
array (
),
'reference' => 'd47bbbad83711771f167c72d4e3f25f7fcc1f8b0',
),
'sebastian/exporter' =>
array (
'pretty_version' => '3.1.3',
'version' => '3.1.3.0',
'aliases' =>
array (
),
'reference' => '6b853149eab67d4da22291d36f5b0631c0fd856e',
),
'sebastian/global-state' =>
array (
'pretty_version' => '3.0.1',
'version' => '3.0.1.0',
'aliases' =>
array (
),
'reference' => '474fb9edb7ab891665d3bfc6317f42a0a150454b',
),
'sebastian/object-enumerator' =>
array (
'pretty_version' => '3.0.4',
'version' => '3.0.4.0',
'aliases' =>
array (
),
'reference' => 'e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2',
),
'sebastian/object-reflector' =>
array (
'pretty_version' => '1.1.2',
'version' => '1.1.2.0',
'aliases' =>
array (
),
'reference' => '9b8772b9cbd456ab45d4a598d2dd1a1bced6363d',
),
'sebastian/recursion-context' =>
array (
'pretty_version' => '3.0.1',
'version' => '3.0.1.0',
'aliases' =>
array (
),
'reference' => '367dcba38d6e1977be014dc4b22f47a484dac7fb',
),
'sebastian/resource-operations' =>
array (
'pretty_version' => '2.0.2',
'version' => '2.0.2.0',
'aliases' =>
array (
),
'reference' => '31d35ca87926450c44eae7e2611d45a7a65ea8b3',
),
'sebastian/type' =>
array (
'pretty_version' => '1.1.4',
'version' => '1.1.4.0',
'aliases' =>
array (
),
'reference' => '0150cfbc4495ed2df3872fb31b26781e4e077eb4',
),
'sebastian/version' =>
array (
'pretty_version' => '2.0.1',
'version' => '2.0.1.0',
'aliases' =>
array (
),
'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019',
),
'symfony/polyfill-ctype' =>
array (
'pretty_version' => 'v1.22.1',
'version' => '1.22.1.0',
'aliases' =>
array (
),
'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e',
),
'theseer/tokenizer' =>
array (
'pretty_version' => '1.2.0',
'version' => '1.2.0.0',
'aliases' =>
array (
),
'reference' => '75a63c33a8577608444246075ea0af0d052e452a',
),
'webmozart/assert' =>
array (
'pretty_version' => '1.9.1',
'version' => '1.9.1.0',
'aliases' =>
array (
),
'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389',
),
),
);
private static $canGetVendors;
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @return bool
*/
public static function isInstalled($packageName)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return true;
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
*
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: array<string, array{pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
return self::$installed;
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: array<string, array{pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: array<string, array{pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
}
}
}
$installed[] = self::$installed;
return $installed;
}
}

View File

@ -0,0 +1,19 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,594 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php',
'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php',
'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php',
'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php',
'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php',
'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php',
'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php',
'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php',
'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php',
'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php',
'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php',
'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php',
'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php',
'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php',
'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php',
'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php',
'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php',
'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php',
'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php',
'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php',
'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php',
'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php',
'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php',
'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php',
'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php',
'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php',
'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php',
'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php',
'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php',
'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php',
'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php',
'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php',
'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php',
'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php',
'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php',
'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php',
'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php',
'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php',
'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php',
'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php',
'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php',
'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php',
'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php',
'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php',
'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php',
'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php',
'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php',
'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php',
'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php',
'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php',
'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php',
'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php',
'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php',
'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php',
'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php',
'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php',
'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php',
'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php',
'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php',
'PHPUnit\\Framework\\InvalidParameterGroupException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php',
'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php',
'PHPUnit\\Framework\\MockObject\\Api' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php',
'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php',
'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php',
'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php',
'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php',
'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php',
'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php',
'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator.php',
'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php',
'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php',
'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php',
'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php',
'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php',
'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php',
'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php',
'PHPUnit\\Framework\\MockObject\\MockClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php',
'PHPUnit\\Framework\\MockObject\\MockMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php',
'PHPUnit\\Framework\\MockObject\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php',
'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php',
'PHPUnit\\Framework\\MockObject\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php',
'PHPUnit\\Framework\\MockObject\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockType.php',
'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/MockedCloneMethod.php',
'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php',
'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php',
'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php',
'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php',
'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/UnmockedCloneMethod.php',
'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php',
'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/OutputError.php',
'PHPUnit\\Framework\\PHPTAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php',
'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php',
'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php',
'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php',
'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php',
'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php',
'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php',
'PHPUnit\\Framework\\SyntheticSkippedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php',
'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php',
'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php',
'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',
'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php',
'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php',
'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php',
'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php',
'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php',
'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php',
'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Warning.php',
'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php',
'PHPUnit\\Runner\\AfterIncompleteTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php',
'PHPUnit\\Runner\\AfterLastTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php',
'PHPUnit\\Runner\\AfterRiskyTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php',
'PHPUnit\\Runner\\AfterSkippedTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php',
'PHPUnit\\Runner\\AfterSuccessfulTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php',
'PHPUnit\\Runner\\AfterTestErrorHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php',
'PHPUnit\\Runner\\AfterTestFailureHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php',
'PHPUnit\\Runner\\AfterTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php',
'PHPUnit\\Runner\\AfterTestWarningHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php',
'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php',
'PHPUnit\\Runner\\BeforeFirstTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php',
'PHPUnit\\Runner\\BeforeTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php',
'PHPUnit\\Runner\\DefaultTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php',
'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php',
'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
'PHPUnit\\Runner\\Hook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/Hook.php',
'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/NullTestResultCache.php',
'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
'PHPUnit\\Runner\\ResultCacheExtension' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php',
'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php',
'PHPUnit\\Runner\\TestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestHook.php',
'PHPUnit\\Runner\\TestListenerAdapter' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php',
'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResultCache.php',
'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php',
'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php',
'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php',
'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception.php',
'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php',
'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php',
'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php',
'PHPUnit\\Util\\Annotation\\DocBlock' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php',
'PHPUnit\\Util\\Annotation\\Registry' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/Registry.php',
'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php',
'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php',
'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php',
'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php',
'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php',
'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception.php',
'PHPUnit\\Util\\FileLoader' => $vendorDir . '/phpunit/phpunit/src/Util/FileLoader.php',
'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php',
'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php',
'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php',
'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php',
'PHPUnit\\Util\\InvalidDataSetException' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidDataSetException.php',
'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php',
'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php',
'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php',
'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php',
'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php',
'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php',
'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php',
'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php',
'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php',
'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php',
'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php',
'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php',
'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php',
'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php',
'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php',
'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php',
'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php',
'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php',
'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php',
'PHPUnit\\Util\\XdebugFilterScriptGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php',
'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php',
'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php',
'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScope.php',
'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php',
'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Abstract.php',
'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Ampersand.php',
'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/AndEqual.php',
'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Array.php',
'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ArrayCast.php',
'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/As.php',
'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/At.php',
'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Backtick.php',
'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/BadCharacter.php',
'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/BooleanAnd.php',
'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/BooleanOr.php',
'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/BoolCast.php',
'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/break.php',
'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Callable.php',
'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Caret.php',
'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Case.php',
'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Catch.php',
'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Character.php',
'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Class.php',
'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/ClassC.php',
'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/ClassNameConstant.php',
'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Clone.php',
'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/CloseBracket.php',
'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/CloseCurly.php',
'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/CloseSquare.php',
'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/CloseTag.php',
'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Coalesce.php',
'PHP_Token_COALESCE_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/CoalesceEqual.php',
'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Colon.php',
'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Comma.php',
'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Comment.php',
'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ConcatEqual.php',
'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Const.php',
'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/ConstantEncapsedString.php',
'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Continue.php',
'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/CurlyOpen.php',
'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Dec.php',
'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Declare.php',
'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Default.php',
'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Dir.php',
'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Div.php',
'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/DivEqual.php',
'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/DNumber.php',
'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Do.php',
'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/DocComment.php',
'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Dollar.php',
'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php',
'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Dot.php',
'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/DoubleArrow.php',
'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/DoubleCast.php',
'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/DoubleColon.php',
'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/DoubleQuotes.php',
'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Echo.php',
'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Ellipsis.php',
'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Else.php',
'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Elseif.php',
'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Empty.php',
'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php',
'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Enddeclare.php',
'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Endfor.php',
'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Endforeach.php',
'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Endif.php',
'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Endswitch.php',
'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Endwhile.php',
'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/EndHeredoc.php',
'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Equal.php',
'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Eval.php',
'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/ExclamationMark.php',
'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Exit.php',
'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Extends.php',
'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/File.php',
'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Final.php',
'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Finally.php',
'PHP_Token_FN' => $vendorDir . '/phpunit/php-token-stream/src/Fn.php',
'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/For.php',
'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Foreach.php',
'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Function.php',
'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/FuncC.php',
'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Global.php',
'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Goto.php',
'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Gt.php',
'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/HaltCompiler.php',
'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/If.php',
'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Implements.php',
'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Inc.php',
'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Include.php',
'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/IncludeOnce.php',
'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/InlineHtml.php',
'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Instanceof.php',
'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Insteadof.php',
'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Interface.php',
'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/IntCast.php',
'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Isset.php',
'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsEqual.php',
'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php',
'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsIdentical.php',
'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotEqual.php',
'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotIdentical.php',
'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php',
'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Includes.php',
'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Line.php',
'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/List.php',
'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Lnumber.php',
'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/LogicalAnd.php',
'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalOr.php',
'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalXor.php',
'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Lt.php',
'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/MethodC.php',
'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Minus.php',
'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MinusEqual.php',
'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ModEqual.php',
'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Mult.php',
'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MulEqual.php',
'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Namespace.php',
'PHP_Token_NAME_FULLY_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameFullyQualified.php',
'PHP_Token_NAME_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameQualified.php',
'PHP_Token_NAME_RELATIVE' => $vendorDir . '/phpunit/php-token-stream/src/NameRelative.php',
'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/New.php',
'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/NsC.php',
'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/NsSeparator.php',
'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/NumString.php',
'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ObjectCast.php',
'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/ObjectOperator.php',
'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/OpenBracket.php',
'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/OpenCurly.php',
'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/OpenSquare.php',
'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/OpenTag.php',
'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/OpenTagWithEcho.php',
'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/OrEqual.php',
'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php',
'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Percent.php',
'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Pipe.php',
'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Plus.php',
'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PlusEqual.php',
'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Pow.php',
'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PowEqual.php',
'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Print.php',
'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Private.php',
'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Protected.php',
'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Public.php',
'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/QuestionMark.php',
'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Require.php',
'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/RequireOnce.php',
'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Return.php',
'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Semicolon.php',
'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Sl.php',
'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SlEqual.php',
'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Spaceship.php',
'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Sr.php',
'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SrEqual.php',
'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/StartHeredoc.php',
'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Static.php',
'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/String.php',
'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/StringCast.php',
'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/StringVarname.php',
'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Switch.php',
'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Stream.php',
'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/CachingFactory.php',
'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Throw.php',
'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Tilde.php',
'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Trait.php',
'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/TraitC.php',
'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Try.php',
'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Unset.php',
'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/UnsetCast.php',
'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Use.php',
'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/UseFunction.php',
'PHP_Token_Util' => $vendorDir . '/phpunit/php-token-stream/src/Util.php',
'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Var.php',
'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Variable.php',
'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/While.php',
'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Whitespace.php',
'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/XorEqual.php',
'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Yield.php',
'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/YieldFrom.php',
'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php',
'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php',
'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php',
'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php',
'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php',
'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php',
'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php',
'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php',
'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php',
'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php',
'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php',
'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php',
'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php',
'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php',
'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php',
'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php',
'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php',
'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php',
'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php',
'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php',
'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php',
'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php',
'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php',
'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php',
'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php',
'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php',
'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php',
'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php',
'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php',
'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php',
'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php',
'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php',
'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php',
'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php',
'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php',
'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php',
'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php',
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php',
'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php',
'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php',
'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php',
'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php',
'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/VersionConstraint.php',
'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php',
'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php',
'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php',
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PCOV.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php',
'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php',
'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php',
'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php',
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php',
'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php',
'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php',
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php',
'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php',
'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php',
'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php',
'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php',
'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php',
'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php',
'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php',
'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php',
'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php',
'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php',
'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php',
'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php',
'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php',
'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php',
'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php',
'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php',
'SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php',
'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php',
'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php',
'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php',
'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php',
'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php',
'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php',
'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php',
'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php',
'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php',
'SebastianBergmann\\FileIterator\\Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
'SebastianBergmann\\FileIterator\\Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
'SebastianBergmann\\FileIterator\\Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php',
'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php',
'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php',
'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php',
'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php',
'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php',
'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php',
'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php',
'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php',
'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php',
'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php',
'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php',
'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php',
'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php',
'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php',
'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php',
'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/Exception.php',
'SebastianBergmann\\Timer\\RuntimeException' => $vendorDir . '/phpunit/php-timer/src/RuntimeException.php',
'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/CallableType.php',
'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php',
'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/GenericObjectType.php',
'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/IterableType.php',
'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/NullType.php',
'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/ObjectType.php',
'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php',
'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/SimpleType.php',
'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/Type.php',
'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php',
'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/UnknownType.php',
'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/VoidType.php',
'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php',
'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php',
'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php',
'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php',
'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php',
'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php',
'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php',
'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php',
'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php',
);

View File

@ -0,0 +1,11 @@
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
);

View File

@ -0,0 +1,9 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);

View File

@ -0,0 +1,17 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'),
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
'UpdateManager\\' => array($baseDir . '/lib/UpdateManager'),
'Tests\\' => array($baseDir . '/tests'),
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
);

View File

@ -0,0 +1,75 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit6482daa1e61704139ecfb6f76b39fab6
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit6482daa1e61704139ecfb6f76b39fab6', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit6482daa1e61704139ecfb6f76b39fab6', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire6482daa1e61704139ecfb6f76b39fab6($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire6482daa1e61704139ecfb6f76b39fab6($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}

View File

@ -0,0 +1,680 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6
{
public static $files = array (
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
);
public static $prefixLengthsPsr4 = array (
'p' =>
array (
'phpDocumentor\\Reflection\\' => 25,
),
'W' =>
array (
'Webmozart\\Assert\\' => 17,
),
'U' =>
array (
'UpdateManager\\' => 14,
),
'T' =>
array (
'Tests\\' => 6,
),
'S' =>
array (
'Symfony\\Polyfill\\Ctype\\' => 23,
),
'P' =>
array (
'Prophecy\\' => 9,
),
'D' =>
array (
'Doctrine\\Instantiator\\' => 22,
'DeepCopy\\' => 9,
),
);
public static $prefixDirsPsr4 = array (
'phpDocumentor\\Reflection\\' =>
array (
0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src',
1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src',
2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src',
),
'Webmozart\\Assert\\' =>
array (
0 => __DIR__ . '/..' . '/webmozart/assert/src',
),
'UpdateManager\\' =>
array (
0 => __DIR__ . '/../..' . '/lib/UpdateManager',
),
'Tests\\' =>
array (
0 => __DIR__ . '/../..' . '/tests',
),
'Symfony\\Polyfill\\Ctype\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
),
'Prophecy\\' =>
array (
0 => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy',
),
'Doctrine\\Instantiator\\' =>
array (
0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator',
),
'DeepCopy\\' =>
array (
0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy',
),
);
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php',
'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php',
'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php',
'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php',
'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php',
'PHPUnit\\Framework\\Constraint\\ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php',
'PHPUnit\\Framework\\Constraint\\Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php',
'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php',
'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php',
'PHPUnit\\Framework\\Constraint\\Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php',
'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php',
'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php',
'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php',
'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php',
'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php',
'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php',
'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php',
'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php',
'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php',
'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php',
'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php',
'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php',
'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php',
'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php',
'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php',
'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php',
'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php',
'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php',
'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php',
'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php',
'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php',
'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php',
'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php',
'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php',
'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php',
'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php',
'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php',
'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php',
'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php',
'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php',
'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php',
'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php',
'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php',
'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php',
'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php',
'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php',
'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php',
'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php',
'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php',
'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php',
'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php',
'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php',
'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php',
'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php',
'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php',
'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php',
'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php',
'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php',
'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php',
'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php',
'PHPUnit\\Framework\\InvalidParameterGroupException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php',
'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php',
'PHPUnit\\Framework\\MockObject\\Api' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php',
'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php',
'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php',
'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php',
'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php',
'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php',
'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php',
'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php',
'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator.php',
'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php',
'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php',
'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php',
'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php',
'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php',
'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php',
'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php',
'PHPUnit\\Framework\\MockObject\\MockClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php',
'PHPUnit\\Framework\\MockObject\\MockMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php',
'PHPUnit\\Framework\\MockObject\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php',
'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php',
'PHPUnit\\Framework\\MockObject\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php',
'PHPUnit\\Framework\\MockObject\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockType.php',
'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/MockedCloneMethod.php',
'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php',
'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php',
'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php',
'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php',
'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php',
'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php',
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php',
'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/UnmockedCloneMethod.php',
'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php',
'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/OutputError.php',
'PHPUnit\\Framework\\PHPTAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php',
'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php',
'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php',
'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php',
'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php',
'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php',
'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php',
'PHPUnit\\Framework\\SyntheticSkippedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php',
'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php',
'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php',
'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php',
'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php',
'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php',
'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php',
'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php',
'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php',
'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php',
'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Warning.php',
'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php',
'PHPUnit\\Runner\\AfterIncompleteTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php',
'PHPUnit\\Runner\\AfterLastTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php',
'PHPUnit\\Runner\\AfterRiskyTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php',
'PHPUnit\\Runner\\AfterSkippedTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php',
'PHPUnit\\Runner\\AfterSuccessfulTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php',
'PHPUnit\\Runner\\AfterTestErrorHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php',
'PHPUnit\\Runner\\AfterTestFailureHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php',
'PHPUnit\\Runner\\AfterTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php',
'PHPUnit\\Runner\\AfterTestWarningHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php',
'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php',
'PHPUnit\\Runner\\BeforeFirstTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php',
'PHPUnit\\Runner\\BeforeTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php',
'PHPUnit\\Runner\\DefaultTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php',
'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php',
'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
'PHPUnit\\Runner\\Hook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/Hook.php',
'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/NullTestResultCache.php',
'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
'PHPUnit\\Runner\\ResultCacheExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php',
'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php',
'PHPUnit\\Runner\\TestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestHook.php',
'PHPUnit\\Runner\\TestListenerAdapter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php',
'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResultCache.php',
'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php',
'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php',
'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php',
'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception.php',
'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php',
'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php',
'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php',
'PHPUnit\\Util\\Annotation\\DocBlock' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php',
'PHPUnit\\Util\\Annotation\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/Registry.php',
'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php',
'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php',
'PHPUnit\\Util\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php',
'PHPUnit\\Util\\ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php',
'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php',
'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception.php',
'PHPUnit\\Util\\FileLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/FileLoader.php',
'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php',
'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php',
'PHPUnit\\Util\\Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php',
'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php',
'PHPUnit\\Util\\InvalidDataSetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidDataSetException.php',
'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php',
'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php',
'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php',
'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php',
'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php',
'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php',
'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php',
'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php',
'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php',
'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php',
'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php',
'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php',
'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php',
'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php',
'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php',
'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php',
'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php',
'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php',
'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php',
'PHPUnit\\Util\\XdebugFilterScriptGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php',
'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml.php',
'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php',
'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php',
'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScope.php',
'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php',
'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Abstract.php',
'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ampersand.php',
'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/AndEqual.php',
'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Array.php',
'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ArrayCast.php',
'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/As.php',
'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/At.php',
'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Backtick.php',
'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BadCharacter.php',
'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanAnd.php',
'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanOr.php',
'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BoolCast.php',
'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/break.php',
'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Callable.php',
'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Caret.php',
'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Case.php',
'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Catch.php',
'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Character.php',
'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Class.php',
'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassC.php',
'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassNameConstant.php',
'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Clone.php',
'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseBracket.php',
'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseCurly.php',
'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseSquare.php',
'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseTag.php',
'PHP_Token_COALESCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Coalesce.php',
'PHP_Token_COALESCE_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CoalesceEqual.php',
'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Colon.php',
'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comma.php',
'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comment.php',
'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConcatEqual.php',
'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Const.php',
'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConstantEncapsedString.php',
'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Continue.php',
'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CurlyOpen.php',
'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dec.php',
'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Declare.php',
'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Default.php',
'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dir.php',
'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Div.php',
'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DivEqual.php',
'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DNumber.php',
'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Do.php',
'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DocComment.php',
'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dollar.php',
'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php',
'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dot.php',
'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleArrow.php',
'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleCast.php',
'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleColon.php',
'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleQuotes.php',
'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Echo.php',
'PHP_Token_ELLIPSIS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ellipsis.php',
'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Else.php',
'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Elseif.php',
'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Empty.php',
'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php',
'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Enddeclare.php',
'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endfor.php',
'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endforeach.php',
'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endif.php',
'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endswitch.php',
'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endwhile.php',
'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EndHeredoc.php',
'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Equal.php',
'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Eval.php',
'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ExclamationMark.php',
'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Exit.php',
'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Extends.php',
'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/File.php',
'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Final.php',
'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Finally.php',
'PHP_Token_FN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Fn.php',
'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/For.php',
'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Foreach.php',
'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Function.php',
'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/FuncC.php',
'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Global.php',
'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Goto.php',
'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Gt.php',
'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/HaltCompiler.php',
'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/If.php',
'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Implements.php',
'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Inc.php',
'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Include.php',
'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IncludeOnce.php',
'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/InlineHtml.php',
'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Instanceof.php',
'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Insteadof.php',
'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Interface.php',
'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IntCast.php',
'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Isset.php',
'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsEqual.php',
'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php',
'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsIdentical.php',
'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotEqual.php',
'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotIdentical.php',
'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php',
'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Includes.php',
'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Line.php',
'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/List.php',
'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lnumber.php',
'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalAnd.php',
'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalOr.php',
'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalXor.php',
'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lt.php',
'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MethodC.php',
'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Minus.php',
'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MinusEqual.php',
'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ModEqual.php',
'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Mult.php',
'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MulEqual.php',
'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Namespace.php',
'PHP_Token_NAME_FULLY_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameFullyQualified.php',
'PHP_Token_NAME_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameQualified.php',
'PHP_Token_NAME_RELATIVE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameRelative.php',
'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/New.php',
'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsC.php',
'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsSeparator.php',
'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NumString.php',
'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectCast.php',
'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectOperator.php',
'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenBracket.php',
'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenCurly.php',
'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenSquare.php',
'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTag.php',
'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTagWithEcho.php',
'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OrEqual.php',
'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php',
'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Percent.php',
'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pipe.php',
'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Plus.php',
'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PlusEqual.php',
'PHP_Token_POW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pow.php',
'PHP_Token_POW_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PowEqual.php',
'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Print.php',
'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Private.php',
'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Protected.php',
'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Public.php',
'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/QuestionMark.php',
'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Require.php',
'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/RequireOnce.php',
'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Return.php',
'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Semicolon.php',
'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sl.php',
'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SlEqual.php',
'PHP_Token_SPACESHIP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Spaceship.php',
'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sr.php',
'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SrEqual.php',
'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StartHeredoc.php',
'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Static.php',
'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/String.php',
'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringCast.php',
'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringVarname.php',
'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Switch.php',
'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Stream.php',
'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CachingFactory.php',
'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Throw.php',
'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Tilde.php',
'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Trait.php',
'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TraitC.php',
'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Try.php',
'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Unset.php',
'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UnsetCast.php',
'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Use.php',
'PHP_Token_USE_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UseFunction.php',
'PHP_Token_Util' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Util.php',
'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Var.php',
'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Variable.php',
'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/While.php',
'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Whitespace.php',
'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/XorEqual.php',
'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Yield.php',
'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/YieldFrom.php',
'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php',
'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php',
'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php',
'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php',
'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php',
'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php',
'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php',
'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php',
'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php',
'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php',
'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php',
'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php',
'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php',
'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php',
'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php',
'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php',
'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php',
'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php',
'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php',
'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php',
'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php',
'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php',
'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php',
'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php',
'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php',
'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php',
'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php',
'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php',
'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php',
'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php',
'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php',
'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php',
'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php',
'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php',
'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php',
'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php',
'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php',
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php',
'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php',
'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php',
'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php',
'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php',
'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php',
'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/VersionConstraint.php',
'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php',
'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php',
'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php',
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php',
'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PCOV.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug.php',
'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php',
'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php',
'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php',
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php',
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php',
'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php',
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php',
'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php',
'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php',
'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
'SebastianBergmann\\CodeCoverage\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php',
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
'SebastianBergmann\\CodeCoverage\\Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util.php',
'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php',
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php',
'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php',
'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php',
'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php',
'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php',
'SebastianBergmann\\Comparator\\DoubleComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DoubleComparator.php',
'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php',
'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php',
'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php',
'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php',
'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php',
'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php',
'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php',
'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php',
'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php',
'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php',
'SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php',
'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php',
'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php',
'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php',
'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php',
'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php',
'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php',
'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php',
'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php',
'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php',
'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php',
'SebastianBergmann\\FileIterator\\Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
'SebastianBergmann\\FileIterator\\Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
'SebastianBergmann\\FileIterator\\Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
'SebastianBergmann\\GlobalState\\Blacklist' => __DIR__ . '/..' . '/sebastian/global-state/src/Blacklist.php',
'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php',
'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php',
'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php',
'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php',
'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php',
'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php',
'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php',
'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php',
'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php',
'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php',
'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php',
'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php',
'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php',
'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php',
'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php',
'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/Exception.php',
'SebastianBergmann\\Timer\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-timer/src/RuntimeException.php',
'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php',
'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/CallableType.php',
'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php',
'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/GenericObjectType.php',
'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/IterableType.php',
'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/NullType.php',
'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/ObjectType.php',
'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php',
'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/SimpleType.php',
'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/Type.php',
'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php',
'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/UnknownType.php',
'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/VoidType.php',
'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php',
'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php',
'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php',
'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php',
'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php',
'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php',
'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php',
'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php',
'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php',
'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6482daa1e61704139ecfb6f76b39fab6::$classMap;
}, null, ClassLoader::class);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
<?php return array (
'root' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '48d86a9697ae4e37c97520db416201371e48a5ac',
'name' => 'articapfms/update_manager_client',
),
'versions' =>
array (
'articapfms/update_manager_client' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '48d86a9697ae4e37c97520db416201371e48a5ac',
),
'doctrine/instantiator' =>
array (
'pretty_version' => '1.4.0',
'version' => '1.4.0.0',
'aliases' =>
array (
),
'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b',
),
'myclabs/deep-copy' =>
array (
'pretty_version' => '1.10.2',
'version' => '1.10.2.0',
'aliases' =>
array (
),
'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
'replaced' =>
array (
0 => '1.10.2',
),
),
'phar-io/manifest' =>
array (
'pretty_version' => '2.0.1',
'version' => '2.0.1.0',
'aliases' =>
array (
),
'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133',
),
'phar-io/version' =>
array (
'pretty_version' => '3.1.0',
'version' => '3.1.0.0',
'aliases' =>
array (
),
'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
),
'phpdocumentor/reflection-common' =>
array (
'pretty_version' => '2.2.0',
'version' => '2.2.0.0',
'aliases' =>
array (
),
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
),
'phpdocumentor/reflection-docblock' =>
array (
'pretty_version' => '5.2.2',
'version' => '5.2.2.0',
'aliases' =>
array (
),
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
),
'phpdocumentor/type-resolver' =>
array (
'pretty_version' => '1.4.0',
'version' => '1.4.0.0',
'aliases' =>
array (
),
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
),
'phpspec/prophecy' =>
array (
'pretty_version' => '1.12.2',
'version' => '1.12.2.0',
'aliases' =>
array (
),
'reference' => '245710e971a030f42e08f4912863805570f23d39',
),
'phpunit/php-code-coverage' =>
array (
'pretty_version' => '7.0.14',
'version' => '7.0.14.0',
'aliases' =>
array (
),
'reference' => 'bb7c9a210c72e4709cdde67f8b7362f672f2225c',
),
'phpunit/php-file-iterator' =>
array (
'pretty_version' => '2.0.3',
'version' => '2.0.3.0',
'aliases' =>
array (
),
'reference' => '4b49fb70f067272b659ef0174ff9ca40fdaa6357',
),
'phpunit/php-text-template' =>
array (
'pretty_version' => '1.2.1',
'version' => '1.2.1.0',
'aliases' =>
array (
),
'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686',
),
'phpunit/php-timer' =>
array (
'pretty_version' => '2.1.3',
'version' => '2.1.3.0',
'aliases' =>
array (
),
'reference' => '2454ae1765516d20c4ffe103d85a58a9a3bd5662',
),
'phpunit/php-token-stream' =>
array (
'pretty_version' => '4.0.4',
'version' => '4.0.4.0',
'aliases' =>
array (
),
'reference' => 'a853a0e183b9db7eed023d7933a858fa1c8d25a3',
),
'phpunit/phpunit' =>
array (
'pretty_version' => '8.5.14',
'version' => '8.5.14.0',
'aliases' =>
array (
),
'reference' => 'c25f79895d27b6ecd5abfa63de1606b786a461a3',
),
'sebastian/code-unit-reverse-lookup' =>
array (
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'aliases' =>
array (
),
'reference' => '1de8cd5c010cb153fcd68b8d0f64606f523f7619',
),
'sebastian/comparator' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '1071dfcef776a57013124ff35e1fc41ccd294758',
),
'sebastian/diff' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '14f72dd46eaf2f2293cbe79c93cc0bc43161a211',
),
'sebastian/environment' =>
array (
'pretty_version' => '4.2.4',
'version' => '4.2.4.0',
'aliases' =>
array (
),
'reference' => 'd47bbbad83711771f167c72d4e3f25f7fcc1f8b0',
),
'sebastian/exporter' =>
array (
'pretty_version' => '3.1.3',
'version' => '3.1.3.0',
'aliases' =>
array (
),
'reference' => '6b853149eab67d4da22291d36f5b0631c0fd856e',
),
'sebastian/global-state' =>
array (
'pretty_version' => '3.0.1',
'version' => '3.0.1.0',
'aliases' =>
array (
),
'reference' => '474fb9edb7ab891665d3bfc6317f42a0a150454b',
),
'sebastian/object-enumerator' =>
array (
'pretty_version' => '3.0.4',
'version' => '3.0.4.0',
'aliases' =>
array (
),
'reference' => 'e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2',
),
'sebastian/object-reflector' =>
array (
'pretty_version' => '1.1.2',
'version' => '1.1.2.0',
'aliases' =>
array (
),
'reference' => '9b8772b9cbd456ab45d4a598d2dd1a1bced6363d',
),
'sebastian/recursion-context' =>
array (
'pretty_version' => '3.0.1',
'version' => '3.0.1.0',
'aliases' =>
array (
),
'reference' => '367dcba38d6e1977be014dc4b22f47a484dac7fb',
),
'sebastian/resource-operations' =>
array (
'pretty_version' => '2.0.2',
'version' => '2.0.2.0',
'aliases' =>
array (
),
'reference' => '31d35ca87926450c44eae7e2611d45a7a65ea8b3',
),
'sebastian/type' =>
array (
'pretty_version' => '1.1.4',
'version' => '1.1.4.0',
'aliases' =>
array (
),
'reference' => '0150cfbc4495ed2df3872fb31b26781e4e077eb4',
),
'sebastian/version' =>
array (
'pretty_version' => '2.0.1',
'version' => '2.0.1.0',
'aliases' =>
array (
),
'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019',
),
'symfony/polyfill-ctype' =>
array (
'pretty_version' => 'v1.22.1',
'version' => '1.22.1.0',
'aliases' =>
array (
),
'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e',
),
'theseer/tokenizer' =>
array (
'pretty_version' => '1.2.0',
'version' => '1.2.0.0',
'aliases' =>
array (
),
'reference' => '75a63c33a8577608444246075ea0af0d052e452a',
),
'webmozart/assert' =>
array (
'pretty_version' => '1.9.1',
'version' => '1.9.1.0',
'aliases' =>
array (
),
'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389',
),
),
);

View File

@ -0,0 +1,26 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 70200)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

View File

@ -0,0 +1,41 @@
{
"active": true,
"name": "Instantiator",
"slug": "instantiator",
"docsSlug": "doctrine-instantiator",
"codePath": "/src",
"versions": [
{
"name": "1.4",
"branchName": "master",
"slug": "latest",
"upcoming": true
},
{
"name": "1.3",
"branchName": "1.3.x",
"slug": "1.3",
"aliases": [
"current",
"stable"
],
"maintained": true,
"current": true
},
{
"name": "1.2",
"branchName": "1.2.x",
"slug": "1.2"
},
{
"name": "1.1",
"branchName": "1.1.x",
"slug": "1.1"
},
{
"name": "1.0",
"branchName": "1.0.x",
"slug": "1.0"
}
]
}

View File

@ -0,0 +1,3 @@
patreon: phpdoctrine
tidelift: packagist/doctrine%2Finstantiator
custom: https://www.doctrine-project.org/sponsorship.html

View File

@ -0,0 +1,48 @@
name: "Coding Standards"
on:
pull_request:
branches:
- "*.x"
push:
branches:
- "*.x"
env:
COMPOSER_ROOT_VERSION: "1.4"
jobs:
coding-standards:
name: "Coding Standards"
runs-on: "ubuntu-20.04"
strategy:
matrix:
php-version:
- "7.4"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"
tools: "cs2pr"
- name: "Cache dependencies installed with Composer"
uses: "actions/cache@v2"
with:
path: "~/.composer/cache"
key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}"
restore-keys: "php-${{ matrix.php-version }}-composer-locked-"
- name: "Install dependencies with Composer"
run: "composer install --no-interaction --no-progress"
# https://github.com/doctrine/.github/issues/3
- name: "Run PHP_CodeSniffer"
run: "vendor/bin/phpcs -q --no-colors --report=checkstyle | cs2pr"

View File

@ -0,0 +1,91 @@
name: "Continuous Integration"
on:
pull_request:
branches:
- "*.x"
push:
branches:
- "*.x"
env:
fail-fast: true
COMPOSER_ROOT_VERSION: "1.4"
jobs:
phpunit:
name: "PHPUnit with SQLite"
runs-on: "ubuntu-20.04"
strategy:
matrix:
php-version:
- "7.1"
- "7.2"
- "7.3"
- "7.4"
- "8.0"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
with:
fetch-depth: 2
- name: "Install PHP with XDebug"
uses: "shivammathur/setup-php@v2"
if: "${{ matrix.php-version == '7.1' }}"
with:
php-version: "${{ matrix.php-version }}"
coverage: "xdebug"
ini-values: "zend.assertions=1"
- name: "Install PHP with PCOV"
uses: "shivammathur/setup-php@v2"
if: "${{ matrix.php-version != '7.1' }}"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
ini-values: "zend.assertions=1"
- name: "Cache dependencies installed with composer"
uses: "actions/cache@v2"
with:
path: "~/.composer/cache"
key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}"
restore-keys: "php-${{ matrix.php-version }}-composer-locked-"
- name: "Install dependencies with composer"
run: "composer update --no-interaction --no-progress"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit --coverage-clover=coverage.xml"
- name: "Upload coverage file"
uses: "actions/upload-artifact@v2"
with:
name: "phpunit-${{ matrix.php-version }}.coverage"
path: "coverage.xml"
upload_coverage:
name: "Upload coverage to Codecov"
runs-on: "ubuntu-20.04"
needs:
- "phpunit"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
with:
fetch-depth: 2
- name: "Download coverage files"
uses: "actions/download-artifact@v2"
with:
path: "reports"
- name: "Upload to Codecov"
uses: "codecov/codecov-action@v1"
with:
directory: reports

View File

@ -0,0 +1,50 @@
name: "Performance benchmark"
on:
pull_request:
branches:
- "*.x"
push:
branches:
- "*.x"
env:
fail-fast: true
COMPOSER_ROOT_VERSION: "1.4"
jobs:
phpbench:
name: "PHPBench"
runs-on: "ubuntu-20.04"
strategy:
matrix:
php-version:
- "7.4"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
ini-values: "zend.assertions=1"
- name: "Cache dependencies installed with composer"
uses: "actions/cache@v2"
with:
path: "~/.composer/cache"
key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}"
restore-keys: "php-${{ matrix.php-version }}-composer-locked-"
- name: "Install dependencies with composer"
run: "composer update --no-interaction --no-progress"
- name: "Run PHPBench"
run: "php ./vendor/bin/phpbench run --iterations=3 --warmup=1 --report=aggregate"

View File

@ -0,0 +1,45 @@
name: "Automatic Releases"
on:
milestone:
types:
- "closed"
jobs:
release:
name: "Git tag, release & create merge-up PR"
runs-on: "ubuntu-20.04"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
- name: "Release"
uses: "laminas/automatic-releases@v1"
with:
command-name: "laminas:automatic-releases:release"
env:
"GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }}
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
- name: "Create Merge-Up Pull Request"
uses: "laminas/automatic-releases@v1"
with:
command-name: "laminas:automatic-releases:create-merge-up-pull-request"
env:
"GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }}
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
- name: "Create new milestones"
uses: "laminas/automatic-releases@v1"
with:
command-name: "laminas:automatic-releases:create-milestones"
env:
"GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }}
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}

View File

@ -0,0 +1,47 @@
name: "Static Analysis"
on:
pull_request:
branches:
- "*.x"
push:
branches:
- "*.x"
env:
COMPOSER_ROOT_VERSION: "1.4"
jobs:
static-analysis-phpstan:
name: "Static Analysis with PHPStan"
runs-on: "ubuntu-20.04"
strategy:
matrix:
php-version:
- "7.4"
steps:
- name: "Checkout code"
uses: "actions/checkout@v2"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"
tools: "cs2pr"
- name: "Cache dependencies installed with composer"
uses: "actions/cache@v2"
with:
path: "~/.composer/cache"
key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}"
restore-keys: "php-${{ matrix.php-version }}-composer-locked-"
- name: "Install dependencies with composer"
run: "composer install --no-interaction --no-progress"
- name: "Run a static analysis with phpstan/phpstan"
run: "vendor/bin/phpstan analyse --error-format=checkstyle | cs2pr"

View File

@ -0,0 +1,35 @@
# Contributing
* Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard)
* The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php)
* Any contribution must provide tests for additional introduced conditions
* Any un-confirmed issue needs a failing test case before being accepted
* Pull requests must be sent from a new hotfix/feature branch, not from `master`.
## Installation
To install the project and run the tests, you need to clone it first:
```sh
$ git clone git://github.com/doctrine/instantiator.git
```
You will then need to run a composer installation:
```sh
$ cd Instantiator
$ curl -s https://getcomposer.org/installer | php
$ php composer.phar update
```
## Testing
The PHPUnit version to be used is the one installed as a dev- dependency via composer:
```sh
$ ./vendor/bin/phpunit
```
Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement
won't be merged.

View File

@ -0,0 +1,19 @@
Copyright (c) 2014 Doctrine Project
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,38 @@
# Instantiator
This library provides a way of avoiding usage of constructors when instantiating PHP classes.
[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator)
[![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master)
[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator)
[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator)
[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator)
## Installation
The suggested installation method is via [composer](https://getcomposer.org/):
```sh
php composer.phar require "doctrine/instantiator:~1.0.3"
```
## Usage
The instantiator is able to create new instances of any class without using the constructor or any API of the class
itself:
```php
$instantiator = new \Doctrine\Instantiator\Instantiator();
$instance = $instantiator->instantiate(\My\ClassName\Here::class);
```
## Contributing
Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out!
## Credits
This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which
has been donated to the doctrine organization, and which is now deprecated in favour of this package.

View File

@ -0,0 +1,42 @@
{
"name": "doctrine/instantiator",
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
"type": "library",
"license": "MIT",
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
"instantiate",
"constructor"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "https://ocramius.github.io/"
}
],
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"ext-phar": "*",
"ext-pdo": "*",
"doctrine/coding-standard": "^8.0",
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
}
},
"autoload-dev": {
"psr-0": {
"DoctrineTest\\InstantiatorPerformance\\": "tests",
"DoctrineTest\\InstantiatorTest\\": "tests",
"DoctrineTest\\InstantiatorTestAsset\\": "tests"
}
}
}

View File

@ -0,0 +1,68 @@
Introduction
============
This library provides a way of avoiding usage of constructors when instantiating PHP classes.
Installation
============
The suggested installation method is via `composer`_:
.. code-block:: console
$ composer require doctrine/instantiator
Usage
=====
The instantiator is able to create new instances of any class without
using the constructor or any API of the class itself:
.. code-block:: php
<?php
use Doctrine\Instantiator\Instantiator;
use App\Entities\User;
$instantiator = new Instantiator();
$user = $instantiator->instantiate(User::class);
Contributing
============
- Follow the `Doctrine Coding Standard`_
- The project will follow strict `object calisthenics`_
- Any contribution must provide tests for additional introduced
conditions
- Any un-confirmed issue needs a failing test case before being
accepted
- Pull requests must be sent from a new hotfix/feature branch, not from
``master``.
Testing
=======
The PHPUnit version to be used is the one installed as a dev- dependency
via composer:
.. code-block:: console
$ ./vendor/bin/phpunit
Accepted coverage for new contributions is 80%. Any contribution not
satisfying this requirement wont be merged.
Credits
=======
This library was migrated from `ocramius/instantiator`_, which has been
donated to the doctrine organization, and which is now deprecated in
favour of this package.
.. _composer: https://getcomposer.org/
.. _CONTRIBUTING.md: CONTRIBUTING.md
.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator
.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard
.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php

View File

@ -0,0 +1,4 @@
.. toctree::
:depth: 3
index

Some files were not shown because too many files have changed in this diff Show More