From 41042f0249dca54e8cc08f8ff7793851b476e437 Mon Sep 17 00:00:00 2001 From: malle-pietje Date: Wed, 4 Oct 2017 17:26:29 +0200 Subject: [PATCH] API browser version 1.0.23 - changed inclusion of the UniFi API client and Kint classes to leverage composer autoloading --- composer.json | 6 + composer.lock | 124 ++ index.php | 36 +- kint/kint.php | 179 -- phpapi/README.md | 7 - .../art-of-wifi/unifi-api-client/.gitignore | 2 + .../art-of-wifi/unifi-api-client/LICENSE.md | 21 + vendor/art-of-wifi/unifi-api-client/README.md | 209 ++ .../unifi-api-client/composer.json | 31 + .../unifi-api-client/examples/README.md | 15 + .../examples/ap_scanning_state.php | 38 + .../examples/auth_guest_basic.php | 50 + .../examples/auth_guest_with_note.php | 73 + .../examples/config.template.php | 24 + .../examples/create_voucher.php | 50 + .../examples/extend_guest_auth.php | 50 + .../unifi-api-client/examples/list_alarms.php | 36 + .../examples/list_ap_connected_users.php | 42 + .../examples/list_site_health.php | 39 + .../examples/list_social_auth_details.php | 45 + .../examples/test_connection.php | 67 + .../unifi-api-client/examples/toggle_led.php | 56 + .../unifi-api-client/src/Client.php | 47 +- vendor/autoload.php | 7 + vendor/composer/ClassLoader.php | 413 ++++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 86 + vendor/composer/autoload_files.php | 10 + vendor/composer/autoload_namespaces.php | 9 + vendor/composer/autoload_psr4.php | 10 + vendor/composer/autoload_real.php | 70 + vendor/composer/autoload_static.php | 116 + vendor/composer/installed.json | 111 + vendor/kint-php/kint/LICENCE | 20 + vendor/kint-php/kint/README.md | 76 + .../kint-php/kint/build/kint-aante-light.php | 180 ++ .../kint/build/kint-solarized-dark.php | 156 ++ vendor/kint-php/kint/build/kint-solarized.php | 155 ++ vendor/kint-php/kint/build/kint.php | 172 ++ vendor/kint-php/kint/composer.json | 73 + vendor/kint-php/kint/composer.lock | 1966 +++++++++++++++++ vendor/kint-php/kint/init.php | 19 + vendor/kint-php/kint/init_footer.php | 9 + vendor/kint-php/kint/init_header.php | 42 + vendor/kint-php/kint/init_helpers.php | 59 + vendor/kint-php/kint/package-lock.json | 1503 +++++++++++++ .../kint/resources/compiled/aante-light.css | 1 + .../kint/resources/compiled/original.css | 1 + .../kint/resources/compiled/plain.css | 1 + .../kint-php/kint/resources/compiled/rich.js | 1 + .../kint/resources/compiled/rich_microtime.js | 1 + .../resources/compiled/solarized-dark.css | 1 + .../kint/resources/compiled/solarized.css | 1 + vendor/kint-php/kint/src/Kint.php | 638 ++++++ vendor/kint-php/kint/src/Object.php | 221 ++ vendor/kint-php/kint/src/Object/Blob.php | 164 ++ vendor/kint-php/kint/src/Object/Closure.php | 43 + vendor/kint-php/kint/src/Object/Color.php | 265 +++ vendor/kint-php/kint/src/Object/DateTime.php | 24 + vendor/kint-php/kint/src/Object/Instance.php | 50 + vendor/kint-php/kint/src/Object/Method.php | 228 ++ vendor/kint-php/kint/src/Object/Nothing.php | 6 + vendor/kint-php/kint/src/Object/Parameter.php | 71 + .../kint/src/Object/Representation.php | 35 + .../kint/src/Object/Representation/Color.php | 213 ++ .../src/Object/Representation/Docstring.php | 48 + .../src/Object/Representation/Microtime.php | 37 + .../kint/src/Object/Representation/Source.php | 45 + .../src/Object/Representation/SplFileInfo.php | 134 ++ vendor/kint-php/kint/src/Object/Resource.php | 23 + vendor/kint-php/kint/src/Object/Stream.php | 27 + vendor/kint-php/kint/src/Object/Throwable.php | 23 + vendor/kint-php/kint/src/Object/Trace.php | 20 + .../kint-php/kint/src/Object/TraceFrame.php | 66 + vendor/kint-php/kint/src/Parser.php | 470 ++++ vendor/kint-php/kint/src/Parser/Base64.php | 58 + vendor/kint-php/kint/src/Parser/Binary.php | 21 + vendor/kint-php/kint/src/Parser/Blacklist.php | 73 + .../kint-php/kint/src/Parser/ClassMethods.php | 82 + .../kint-php/kint/src/Parser/ClassStatics.php | 130 ++ vendor/kint-php/kint/src/Parser/Closure.php | 68 + vendor/kint-php/kint/src/Parser/Color.php | 35 + .../kint-php/kint/src/Parser/DOMIterator.php | 81 + vendor/kint-php/kint/src/Parser/DOMNode.php | 226 ++ vendor/kint-php/kint/src/Parser/DateTime.php | 31 + vendor/kint-php/kint/src/Parser/FsPath.php | 27 + vendor/kint-php/kint/src/Parser/Iterator.php | 77 + vendor/kint-php/kint/src/Parser/Json.php | 50 + vendor/kint-php/kint/src/Parser/Microtime.php | 65 + vendor/kint-php/kint/src/Parser/Plugin.php | 28 + vendor/kint-php/kint/src/Parser/Serialize.php | 84 + .../kint/src/Parser/SimpleXMLElement.php | 132 ++ .../kint-php/kint/src/Parser/SplFileInfo.php | 25 + .../kint/src/Parser/SplObjectStorage.php | 34 + vendor/kint-php/kint/src/Parser/Stream.php | 45 + vendor/kint-php/kint/src/Parser/Table.php | 57 + vendor/kint-php/kint/src/Parser/Throwable.php | 23 + vendor/kint-php/kint/src/Parser/Timestamp.php | 44 + vendor/kint-php/kint/src/Parser/ToString.php | 37 + vendor/kint-php/kint/src/Parser/Trace.php | 142 ++ vendor/kint-php/kint/src/Parser/Xml.php | 120 + vendor/kint-php/kint/src/Renderer.php | 54 + vendor/kint-php/kint/src/Renderer/Cli.php | 122 + vendor/kint-php/kint/src/Renderer/Plain.php | 169 ++ vendor/kint-php/kint/src/Renderer/Rich.php | 462 ++++ .../kint/src/Renderer/Rich/Binary.php | 24 + .../kint/src/Renderer/Rich/Blacklist.php | 9 + .../kint/src/Renderer/Rich/Callable.php | 63 + .../kint/src/Renderer/Rich/Closure.php | 30 + .../kint-php/kint/src/Renderer/Rich/Color.php | 18 + .../kint/src/Renderer/Rich/ColorDetails.php | 51 + .../kint/src/Renderer/Rich/DepthLimit.php | 9 + .../kint/src/Renderer/Rich/Docstring.php | 39 + .../kint/src/Renderer/Rich/Microtime.php | 48 + .../kint/src/Renderer/Rich/Nothing.php | 9 + .../kint/src/Renderer/Rich/Plugin.php | 116 + .../kint/src/Renderer/Rich/Recursion.php | 9 + .../src/Renderer/Rich/SimpleXMLElement.php | 52 + .../kint/src/Renderer/Rich/Source.php | 52 + .../kint-php/kint/src/Renderer/Rich/Table.php | 100 + .../kint/src/Renderer/Rich/Timestamp.php | 10 + .../kint/src/Renderer/Rich/TraceFrame.php | 39 + vendor/kint-php/kint/src/Renderer/Text.php | 300 +++ .../kint/src/Renderer/Text/Blacklist.php | 17 + .../kint/src/Renderer/Text/DepthLimit.php | 17 + .../kint/src/Renderer/Text/Nothing.php | 13 + .../kint/src/Renderer/Text/Plugin.php | 13 + .../kint/src/Renderer/Text/Recursion.php | 17 + .../kint-php/kint/src/Renderer/Text/Trace.php | 83 + vendor/kint-php/kint/src/SourceParser.php | 434 ++++ 130 files changed, 13332 insertions(+), 230 deletions(-) create mode 100755 composer.json create mode 100644 composer.lock delete mode 100755 kint/kint.php delete mode 100755 phpapi/README.md create mode 100755 vendor/art-of-wifi/unifi-api-client/.gitignore create mode 100755 vendor/art-of-wifi/unifi-api-client/LICENSE.md create mode 100755 vendor/art-of-wifi/unifi-api-client/README.md create mode 100755 vendor/art-of-wifi/unifi-api-client/composer.json create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/README.md create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/ap_scanning_state.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/auth_guest_basic.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/auth_guest_with_note.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/config.template.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/create_voucher.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/extend_guest_auth.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/list_alarms.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/list_ap_connected_users.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/list_site_health.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/list_social_auth_details.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/test_connection.php create mode 100755 vendor/art-of-wifi/unifi-api-client/examples/toggle_led.php rename phpapi/class.unifi.php => vendor/art-of-wifi/unifi-api-client/src/Client.php (97%) create mode 100644 vendor/autoload.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/kint-php/kint/LICENCE create mode 100644 vendor/kint-php/kint/README.md create mode 100644 vendor/kint-php/kint/build/kint-aante-light.php create mode 100644 vendor/kint-php/kint/build/kint-solarized-dark.php create mode 100644 vendor/kint-php/kint/build/kint-solarized.php create mode 100644 vendor/kint-php/kint/build/kint.php create mode 100644 vendor/kint-php/kint/composer.json create mode 100644 vendor/kint-php/kint/composer.lock create mode 100644 vendor/kint-php/kint/init.php create mode 100644 vendor/kint-php/kint/init_footer.php create mode 100644 vendor/kint-php/kint/init_header.php create mode 100644 vendor/kint-php/kint/init_helpers.php create mode 100644 vendor/kint-php/kint/package-lock.json create mode 100644 vendor/kint-php/kint/resources/compiled/aante-light.css create mode 100644 vendor/kint-php/kint/resources/compiled/original.css create mode 100644 vendor/kint-php/kint/resources/compiled/plain.css create mode 100644 vendor/kint-php/kint/resources/compiled/rich.js create mode 100644 vendor/kint-php/kint/resources/compiled/rich_microtime.js create mode 100644 vendor/kint-php/kint/resources/compiled/solarized-dark.css create mode 100644 vendor/kint-php/kint/resources/compiled/solarized.css create mode 100644 vendor/kint-php/kint/src/Kint.php create mode 100644 vendor/kint-php/kint/src/Object.php create mode 100644 vendor/kint-php/kint/src/Object/Blob.php create mode 100644 vendor/kint-php/kint/src/Object/Closure.php create mode 100644 vendor/kint-php/kint/src/Object/Color.php create mode 100644 vendor/kint-php/kint/src/Object/DateTime.php create mode 100644 vendor/kint-php/kint/src/Object/Instance.php create mode 100644 vendor/kint-php/kint/src/Object/Method.php create mode 100644 vendor/kint-php/kint/src/Object/Nothing.php create mode 100644 vendor/kint-php/kint/src/Object/Parameter.php create mode 100644 vendor/kint-php/kint/src/Object/Representation.php create mode 100644 vendor/kint-php/kint/src/Object/Representation/Color.php create mode 100644 vendor/kint-php/kint/src/Object/Representation/Docstring.php create mode 100644 vendor/kint-php/kint/src/Object/Representation/Microtime.php create mode 100644 vendor/kint-php/kint/src/Object/Representation/Source.php create mode 100644 vendor/kint-php/kint/src/Object/Representation/SplFileInfo.php create mode 100644 vendor/kint-php/kint/src/Object/Resource.php create mode 100644 vendor/kint-php/kint/src/Object/Stream.php create mode 100644 vendor/kint-php/kint/src/Object/Throwable.php create mode 100644 vendor/kint-php/kint/src/Object/Trace.php create mode 100644 vendor/kint-php/kint/src/Object/TraceFrame.php create mode 100644 vendor/kint-php/kint/src/Parser.php create mode 100644 vendor/kint-php/kint/src/Parser/Base64.php create mode 100644 vendor/kint-php/kint/src/Parser/Binary.php create mode 100644 vendor/kint-php/kint/src/Parser/Blacklist.php create mode 100644 vendor/kint-php/kint/src/Parser/ClassMethods.php create mode 100644 vendor/kint-php/kint/src/Parser/ClassStatics.php create mode 100644 vendor/kint-php/kint/src/Parser/Closure.php create mode 100644 vendor/kint-php/kint/src/Parser/Color.php create mode 100644 vendor/kint-php/kint/src/Parser/DOMIterator.php create mode 100644 vendor/kint-php/kint/src/Parser/DOMNode.php create mode 100644 vendor/kint-php/kint/src/Parser/DateTime.php create mode 100644 vendor/kint-php/kint/src/Parser/FsPath.php create mode 100644 vendor/kint-php/kint/src/Parser/Iterator.php create mode 100644 vendor/kint-php/kint/src/Parser/Json.php create mode 100644 vendor/kint-php/kint/src/Parser/Microtime.php create mode 100644 vendor/kint-php/kint/src/Parser/Plugin.php create mode 100644 vendor/kint-php/kint/src/Parser/Serialize.php create mode 100644 vendor/kint-php/kint/src/Parser/SimpleXMLElement.php create mode 100644 vendor/kint-php/kint/src/Parser/SplFileInfo.php create mode 100644 vendor/kint-php/kint/src/Parser/SplObjectStorage.php create mode 100644 vendor/kint-php/kint/src/Parser/Stream.php create mode 100644 vendor/kint-php/kint/src/Parser/Table.php create mode 100644 vendor/kint-php/kint/src/Parser/Throwable.php create mode 100644 vendor/kint-php/kint/src/Parser/Timestamp.php create mode 100644 vendor/kint-php/kint/src/Parser/ToString.php create mode 100644 vendor/kint-php/kint/src/Parser/Trace.php create mode 100644 vendor/kint-php/kint/src/Parser/Xml.php create mode 100644 vendor/kint-php/kint/src/Renderer.php create mode 100644 vendor/kint-php/kint/src/Renderer/Cli.php create mode 100644 vendor/kint-php/kint/src/Renderer/Plain.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Binary.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Blacklist.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Callable.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Closure.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Color.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/ColorDetails.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/DepthLimit.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Docstring.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Microtime.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Nothing.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Plugin.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Recursion.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Source.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Table.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/Timestamp.php create mode 100644 vendor/kint-php/kint/src/Renderer/Rich/TraceFrame.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/Blacklist.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/DepthLimit.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/Nothing.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/Plugin.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/Recursion.php create mode 100644 vendor/kint-php/kint/src/Renderer/Text/Trace.php create mode 100644 vendor/kint-php/kint/src/SourceParser.php diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..61c6db2 --- /dev/null +++ b/composer.json @@ -0,0 +1,6 @@ +{ + "require": { + "art-of-wifi/unifi-api-client": "^1.1", + "kint-php/kint": "2.2" + } +} \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..dc07370 --- /dev/null +++ b/composer.lock @@ -0,0 +1,124 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "4c8dabe994dc86394e2893cf347639ca", + "content-hash": "fd05e8c81881169ac60bffe337500634", + "packages": [ + { + "name": "art-of-wifi/unifi-api-client", + "version": "v1.1.15", + "source": { + "type": "git", + "url": "https://github.com/Art-of-WiFi/UniFi-API-client.git", + "reference": "971c77ab5f49cbd54d0eae169da84316011614de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Art-of-WiFi/UniFi-API-client/zipball/971c77ab5f49cbd54d0eae169da84316011614de", + "reference": "971c77ab5f49cbd54d0eae169da84316011614de", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "UniFi_API\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Art of WiFi", + "email": "info@artofowifi.net", + "homepage": "http://artofwifi.net" + } + ], + "description": "API client class for use with Ubiquiti's UniFi controller", + "homepage": "https://github.com/Art-of-WiFi/UniFi-API-client", + "keywords": [ + "UBNT", + "api", + "client", + "controller", + "ubiquiti", + "unifi" + ], + "time": "2017-09-14 10:15:21" + }, + { + "name": "kint-php/kint", + "version": "2.2", + "source": { + "type": "git", + "url": "https://github.com/kint-php/kint.git", + "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kint-php/kint/zipball/b091715eadaf6e1a7ef927f3e81d1004611d2aea", + "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea", + "shasum": "" + }, + "require": { + "php": ">=5.1.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpunit/phpunit": "^4.0", + "symfony/finder": "^2.6" + }, + "type": "library", + "autoload": { + "files": [ + "init.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rokas Šleinius", + "homepage": "https://github.com/raveren" + }, + { + "name": "Jonathan Vollebregt", + "homepage": "https://github.com/jnvsor" + }, + { + "name": "Contributors", + "homepage": "https://github.com/kint-php/kint/graphs/contributors" + } + ], + "description": "Kint - debugging tool for PHP developers", + "homepage": "https://kint-php.github.io/kint/", + "keywords": [ + "debug", + "kint", + "php" + ], + "time": "2017-09-06 17:46:03" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/index.php b/index.php index 5cad654..7c2dca2 100755 --- a/index.php +++ b/index.php @@ -10,7 +10,7 @@ * the currently supported data collections/API endpoints in the README.md file * - this tool currently supports versions 4.x and 5.x of the UniFi Controller software * - * VERSION: 1.0.21 + * VERSION: 1.0.23 * * ------------------------------------------------------------------------------------ * @@ -20,7 +20,8 @@ * with this package in the file LICENSE.md * */ -define('API_BROWSER_VERSION', '1.0.21'); +define('API_BROWSER_VERSION', '1.0.23'); +define('API_CLASS_VERSION', get_client_version()); /** * check whether the PHP curl module is available @@ -83,15 +84,14 @@ } /** - * load the UniFi API client class + * load the UniFi API client and Kint classes using composer autoloader */ -require_once('phpapi/class.unifi.php'); +require('vendor/autoload.php'); /** - * load the Kint class and set relevant options + * set relevant Kint options * more info on Kint usage: http://kint-php.github.io/kint/ */ -require_once('kint/kint.php'); Kint::$display_called_from = false; /** @@ -238,7 +238,7 @@ * create a new instance of the API client class and log in to the UniFi controller * - if an error occurs during the login process, an alert is displayed on the page */ - $unifidata = new UnifiApi($controller['user'], $controller['password'], $controller['url'], $site_id); + $unifidata = new UniFi_API\Client($controller['user'], $controller['password'], $controller['url'], $site_id); $set_debug_mode = $unifidata->set_debug(trim($debug)); $loginresults = $unifidata->login(); @@ -552,6 +552,28 @@ function sites_sort($site_a, $site_b) { return strcmp($site_a->desc, $site_b->desc); } + +/** + * function which returns the version of the included API client class by + * extracting it from the composer.lock file + */ +function get_client_version() +{ + if (is_readable('composer.lock')) { + $composer_lock = file_get_contents('composer.lock'); + $json_decoded = json_decode($composer_lock, true); + + if (isset($json_decoded['packages'])) { + foreach ($json_decoded['packages'] as $package) { + if($package['name'] === 'art-of-wifi/unifi-api-client') { + return substr($package['version'], 1); + } + } + } + } + + return 'unknown'; +} ?> diff --git a/kint/kint.php b/kint/kint.php deleted file mode 100755 index 43242c3..0000000 --- a/kint/kint.php +++ /dev/null @@ -1,179 +0,0 @@ -= 0)); -define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); -define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); -define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); -define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); -define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); -define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); -define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); -define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); -eval(gzuncompress('xmw mE&MZ,9ly%94ɦĘd3ݤeǣ={p?<}K. -/&)3dm6P(' . "\0" . 'BP(:(?Gs4NTLg9%Am nF|0ꦽd:"\'/[Gf:]+i>{AG[,&Pw{P~1$Zd' . "\0" . 'ٰ#xʳlB' . "\0" . '%y|T$EƓɨvEf/~5Ϣ$L٨-~R)Eqw:՚<ɓN -~T*OYܡv":~Feo =?<' . "\0" . 'y~؀bp~dbfFq[T辝xcD`z1Q&y!ZB J$~1q3`bN\'7Ya橗 M|LxLnԣI\'M{$?ҟ^a:}6 ѨN&\\\'y sA^M3Dpfd}tqy!q EDo:] `Et0 -O?q' . "\0" . 'e%H$J_A2-Ev\'iLN !M' . "\0" . '1 ,".g .M:7Qzu@^Ǖ^s\'=Q@Srз' . "\0" . 'D1_CVݢ$T*pB*}Q $ 6 -2.w?9o}vsmvrpQSR{%l6 -V @9NU$=$/`4 -R  +eu{y2Lu_083V\\- RIj ´cΦ' . "\0" . 'N&|zU *|' . "\0" . 'p4' . "\0" . 'TRߐ Hey' . "\0" . ' -^_;U?r ]u:9@8H6~yݏ8??8lY\\{45}nn' . "\0" . 'T l&bT.m&GD`=|KjFj"^V#PS#Jj= $DJ+(FFs4Y\\J Z_x^}{#[ZC:`HddA9L[QiQK]-rZ9F5Yqxk+%Z)M嘦2iM9KYJ`+f $ßb5㪸\\vK([cI2YZGj`1}(*Zjc]͐:mw@7ne=fTI\\_~mGB~\\\\qT2ld ޓy5썱Bu# Ղʶ3:TIPx"b_xKm/Q%.u@mj$_4.X$jCVCIg$WzR RJu,qs[*3!%W^ MK$)Xi-cDy"VK|U+՘O9@ Nr@*<4Q3 T ruS--0 hl}@Xjj' . "\0" . 'SnU1u쉟#&=u4dbxe&^5 _YMujkފPRw(D5K-o NU y+yOv)' . "\0" . 'q=%ŸK"m ~ -ߺ Rh]}J,m1!die],<c+Fq)^fEiOAv+' . "\0" . ':&QDdr>*fEΠIBI.#vx Y HLqY\\<L / xTogYZpUʉg]icF=Ӛ .Ǵ /L;7㻲2+MOX*hVFmY 4DD@ @Ε11f$:RA -jރlt0t`xDoQl48{Rf%`đ䅯;UB7%"֢FM4`:̣fegE{Qp\\2bD`RT*D;x TӉF ptFѩKj#nOF܊Zh 4SEyB?(P[ =D' . "\0" . 'KS:xM P#nPw=wsbzk${m-aƃJef3ط/b2%`80bIxP),I͂)J%NpA2#G\'(KcZDn r1U]EyCmtlU:o9N{+. $,ѡJ)JĚd;AX1.U6h؁HՖ;)jǩ p[o\\,er;k! B=βiIL)_T"Ò)4£Gk(} KRqh,TWcv[' . "\0" . 'ec T -"bǭ׉g*UdRTm ׁ놶[.~h6!*Aϸ ݉=Zf -mrqE۽WE/zԴ@@y' . "\0" . 'S FZ]9Kݺx\'+Qj+ɧ -C&t82w\'$,# @^E<!s1w[*jd}d㧁/TdC1trQEE,Ơ3L벚LK`^6JzYe9mh&N<0 b\\(Xg -n  PF[,i Ai :otPzw/x?E w%{vNh62X͗Aדn0{d#Hj`ۑ8т ,Y2pyKt -ӠBl -5%U:lpɚ QopN -koV3A nԪ-vDa= &ZݹR+{0:Ee7>`e` tl;~A҄8"[w - IȘ$t_b!SJQ\'e7oKam)Wim5b=ͺZ480DG^c wk' . "\0" . '-F3:.yl6Q\\@KHLKV:yEkP1VQ:( ^K-#h=)MCpH7PMC,sħu8δ6 `HspTpgj/ЏRg\'r_E,b]oD-BڀX' . "\0" . ' -ʽqFqffIĢ %%k"d\'~0EWe:Q*  xB w: P 7kpͦ]ZŖN' . "\0" . '<cH:6; L= L&Z`T%S -!9E $ ?wD|f}g.eB:%NoMYD9Np.ƯTaK\\sy5lM9JYl ,Y-ٙ -zI -Fkwl>ht=R,8Yj,/ҿMEedZEE%`NCeKgJ y\\,Lh@1܋Vk% dyrӸoITQp(&}Um8︘9`6;ౝoo*{h. B0(*ɔL~F9i:tO)i4g tԺI)th7uI޾ᦿ8/EgpE֚uzxm/ߞj>}p!"V7fo[}7_0!EN)ҧY/Kʥ#<1LE|łc]ypd")vSXa!%\' h35׬A6ieU֪T:Jߧ-*uO4&ԧ<7ȗ˭Aw 2B]ԩˑqԙt?6eE X8s%C?H{t-h| UNƈr >N$tlP# -n|ƓB{a^4*ЅlAFGYbeO bwe]fJeTrjH}w5FKU%CFeRoG jK ƆVD…%ɠl]ȓ4ǓЙ‚.} -(>ȗ {ʶ/mjLw YG>Sޮ|1(yA؟|؂&OƟ<HOC[7j\\Q77H(Lݵ5st-(}>UZ5m{8]:PldF+Vk7j>` -%TBԤ V(\\HEr; Hҏc@P9Jݪ` ' . "\0" . ' -j(ߚIedEhג2$-$*/#; ζAmƲAΒUuMGdțvY[0x<ޡ$5Vǿ\\vUTTke湬.Vq/Jgl0{+r.Wmj|HފJ ΁(t|eh7E -dRELd\\jO~ZCf 79q}z䵖f9' . "\0" . 'ɸaJRXf%kފ&WL][1Gkw%[K"5p=Vp1ih' . "\0" . '%4\\DlNS.5Ym0e#JFV%' . "\0" . '}Я4gi( -~ ;,)Q5g2!ZK7 {zR"ܩ"2%\\ -Wx -SZڂ2k6rr9ei:ÔX1 -\'?p@e \\-LD󊊶 +U2v;q<Er/rߖy21ڵ3DjҧܶȻ9p\'o߸HUZOGB}=9 Wћ@RKs39"CО -^?:ߜ( ʜ?>.G(᎞JGOd\'>z.\'nyO|s\'т2ǡOEa dzcGvvj ~͏^{߽9;{ߍA>Xu43?s3# M86$Uq?gqsJQg' . "\0" . 'rL[}:veeL 9oDfsii.ʺ XQZ >>?%!N/ xNMR:' . "\0" . 'CAg1,@=O;2rBQشv YP-3ۓ?"l8ex4xq;{u\\dS4!68i^TP^GzѲ.>4: *f"2# -#Zi -sT*vTjEvҮՋzl_DfSݥtߧHHTͰ zdl#%[U% oANn!(2khJ DfUxB6j) z6lUԚdpv`nmPld Yjޠ8zt 9p\\cP_zW' . "\0" . '黫̠0mXc,b-r zc\\Q7r^>RQvvEi +;?BM3-@鰠֦ -Mn -K8TSc~̼dJCwjc ^h̭H w[?KʱLɘ#f)hx 2\'ٹ.TU6!{{;D֕iu ouHnc.E\'bNdpmPT5CbrI;*u`S 輺^oԣwE\'q;Ȏl}4`to?W>/ߞ_S99?:8:9^|bq 4+\'L -+o%Dl˅r&W%+)*|Nid8O0 -ëbߜw\'gpƆe*Mz5 "M>+պE%`D4>n7jQcOϪ!ظ&xYQ]o|/U=' . "\0" . 'ߡ)+v\\&ψyղ` Jspi6-*U@۬\\n]q҄ =LU@gl2zS{N=jn=G/&X :NFJ.%RuzB@ݕRO E,kMA7pf z=d8+h^÷4OT^O0oӄ f*m < ;pB/iZ%n6L-,o2q$MlEڝ.*4' . "\0" . '/ki x;Ykkw?+kZ|6$n~BVHmSfi`@bNtZ0 -4dN&h(Bv׶ҴdِZ6n][U6Ѯ<ՍuJܡ&{Bm&^,[ Qڈ~O?Cf Ie -]0rڼ٠!e5mnnt?3]1mM_vNGiTd -k>}$9ikwu -wCi;f6NfoӬ_AU {wst<4nvX@ oKnO@Lb^xFnzdLzFy(6RdlvTƵ$VCĕD5ҭm,?H>/Y|+%<]|05zy;bDx96[ !VWM[σ In .5(GKTK3cƩ.8)=|ue?miyNVgUgp!! !AYXk\'Ncyxd{S77-ɝ`n7:TZKeׇZ% X노KҎT"\\FK\\ *Lg[/ô۟]ak%P`Qds|<垮?it&N{*˵v1l +pvwV&m&mO~wdώէO:P+N=bS}ʳN)%t?2me|HYr+v2 b1`+AMf\\z4k4tb7Or\'S5!z a* ut)&Xn g@(Lg8ѠqO XEa1 -VLO)#*ѼEA.r ݤE⏳._BۍTN)z`IJ[[$' . "\0" . 'Q\\<򉩻g&\'6VB8RVfNYL%ۍ\'k::zVtD7@+‚p`~:I!46ֺ:(AJ3E;x+ٔ++S=IdLhޅ1|O NR5z[ÉS2ɓlL2o ]a#X&(&M&J:%r%L.X lF뾻tQ*\\(-"-egyO-yXTE)c-g \\X.ACK' . "\0" . 'S' . "\0" . ' zo;ip4\\K,t0A\\,U]eAmk;$ʳ+-k -UpYZQwEKzlnVk0` -#r8R v_DiKz3Ps&!H>WJ#x -]T@Lk^5b]@A^iԷ"a:3A~>^8 -ԅ Ty3_A(AI> ^& A)]d`ȌG**xdsAnDp`^I\'3׺ \\P9F@' . "\0" . '0MxSab뢦KJ%%' . "\0" . '614qh-t XHwjgAlXˡ' . "\0" . 'aH0jQ^ -Ă+v䠈qVT4(+YGM<' . "\0" . 'uB/цA^2kܯ>LE^Jq}Nû(Y.3jDG^`U1 Y=|z󾀭=Sai;]/cʹ]8ڪT¹4#]eoşe2{lC!cY{H`ᴌ0&g:ʼnlڞN&IWF>f=)*gnקC2Ⲹ|vyeQzT}\\|mY2SNYZf86R21iCַiŧSˬ.hWٴ`Ԋ99- j>ZzG#' . "\0" . 'zG\\SV$cjyw|7R%u 6tE0PHmz|.a+zn0=d-Rg&DalHڪ>V5̼oרݼ +iVLsz>{eaz}|dW,|!FՐL&ó"PH,$l)$BlXX8fGr<cu9ɧf{T7B~ClA+KlRngCC I BĪ,tL&0x\\d8$?>u`%aE<1sO$r _R#01Y,(ߥaB}D Į?0p+ܢ^,\\Y& -<_e;8dS: G4u> Dvꦦpe]lkSG:Ģ' . "\0" . 'JȱZ -sM\\I ,zC4/H:XIW]Յ9.l113!(:`{0o, _ڿa5R=\\F`\'Ʉʔk8:30YD{0w^0*L) LjdVL1ānI,lSP2%ɯ m_#MBb[ X- hC> -MFS8vTu' . "\0" . 'n/r(/upҦUk0"7y_dIJuˬ6 4ᙢnVeM9ysw#dmt,L>I>kt5ǽKp+MPa۶N\'Z>:̝JB7 Qw?IO>ȁ2' . "\0" . 'w}W:b!6vC3' . "\0" . ' Jڦ፻tXYBB хPEHlkL³:Khړ30JM9Pg ʪ$`.q"w " ٵ*㩯j5?yK$ɧ?^Ht0cKpKI\'~e"yOOj)L!HҖ9-d7m hW&J]ccrsۺ w0Z/\'A07GiYUsPѶ2x\\)ս}?w!TmlI.IoT;N{ 43Z>][O& SC.E 7A lCqF[~Me}GcEE%Hfh(9XU?)NzWV+/c~})Aϼ93onzL@7m}ktِ/>PKS (XեP(C5$`|d+ Vu0j2d,cRT2c&^ =Bw\'o MQ`F XzJHܐإ0+,V!]l\\pWK7rU;/GxYn\\ӻ[6L x{&ބ2YGTYjzY|Y\\4V^ֿ]W});IFxLNXg;Dg(K?Wf["]**~gxr-wTQRHԃ @<' . "\0" . 'Y)l $\\ wW.pɕضb*\'Nj E$Q+Pa*EЍ2Mxw.yysp=cIԱHWʪ\\G?D8Q՘ZC9_L;WwKD1E0"ć訪{qzQSV-3%*ܩYֽE0GaN/ċZnUjJA -1R23Ub_G/dkqK>6־pWU\'3>4~ޢ*\'bk\'Q. ZNsw/$U8.nA*oTci(*ʆ{cw20m-s><Zq"YHd5KlfkE_ΪBˣg#۷)@g% T+x  `HNZdh|B Cw:+ w*DEЂ q)Lt*zrP4U׍e 5LfS!E6PCelS8|aH(yK%[vZS j|0R v܅A0\'ME[=˶ |zటYVr}4.}uYpF %5F=G -`8SF^F2` ʭ jV%8eZ`hYJW -YAV3OG B=_ovlIJ6$& V0n cȠ%Dz<2^~qK2j Ue]-/b0"UƖ6ЮT腩[Ԫq#\\ -p@*UsP6Z*\\ >G$.5TJZHa\\#5J yhCRt qV-"~ dfB8hЮ^H -+9ktkHC@\\E xP' . "\0" . 'b~ן7\\V>o.?\'+>׶ˏn{eeb)F{zв@X7ka`z>g˓GVP\'F8=Gey\'u0J ӝ>U߲фٌ? \'Z>`RXCXNZ҆V1E7)s L7\'&DE -I^bgx@$j1\\BL@pKy"m0J"A`Dp SV\'KwTz#1ʌ\\y]tRo2_PwJ׀]à*|H3Ydq 3N*ٍQcM.(/¼)Øw K`mf#{+ hmuuĖKN/3O^.rlk ɶ>{Gd^ZQo+ET/-{2WZVaYQRz}u@$WU8E)Rk +iӂJIkю&*7xnƪZ*ۛxyB2gl_&N[)*ڒU;<(khߵn]nH]^q^~he,Oh»KsI;p1.pJ ZN{8JG/u7LGwH*2tIR˟Sd`Q=T8EdXot,0eح"m؛HE>y:Ʊ3/p{QK:XsNϝtlݓ1|N+a\\=_o*ڱz - 1N*Zfu۷,&?L&O+bCeCݮGV75kA6iɌA _<5NDlnRo~([H*90Y!~{%JU4;sdu U/j=zth3($r1|x1VPAFX8·\'Rwj hys(֣ZrǍ{&B7~9-{J)*j} r=ql%VF` BDRZB/LV _u+t' . "\0" . '0 cO{PQG]1跚`ohv:܏ yhkRL?ܐ -Om;v%MX- ,&=[YfiÇD‹yx\\!T$,yԇȆ+cy1MX܄w~gtms;)oc] Ŗ.;WyEzTn<^خO\'O6V{r]bѺT74B:)]`{\\w+N!CȝਯUCeq9w"& LT#5\'|Yw+M"WVk"ߵk8ӐL!Qmu5-e' . "\0" . ';%UhVH\')%aKaQ@cjr6tG,Y9|P ܻ@A:2LMZ-K]E1&5YDvT~uPHUȹ/ VΣ9=F3(#ۇBZK),٬CfM.R%Ű+~ɺ/ҿM~2<ͤE/RTHuiC31:y4`@A$tʃ7Dd_$P7H[=x:Ϝ( fEW -L%D2;\\' . "\0" . 'ƪ67B * -76 3P[#""r;@0)/|\'-J\\싅d\\ZcO^5eURٚ~o"&2<\\Nzʶϔh7LrL]lHp%}Hڻҕc`H.y޺r׻)p $~O*OD62Gw@m -ɫɠ6]i-vswD75j_MI_YhPr}؟{i?y],QnݨEAȮmfO+3γ.\'N7W1;՚ 4knu#Fw@"xQ`̯݇2s{>zMc4z\']y=ԃc&\'ig9jo]((S?~@apȭ%;Ȫ;m9uVw t{©`ۈg?垮i' . "\0" . 'LlE' . "\0" . '8P9/0,v_h37 +{@p 8t;ߒg i6U<Carc$TUiK@X - ]] -^\'mM\'mϳUtSmT W~ŔI 7Qo܊u>-Zt2Nvil -\\(~ ƜPb.xA=X^Jp\'HNQvYǣL1TbV" .`ݨ^2V!M&sm-QRSPq17$)x)ߝ J0 -ҀU d7SҲo_mw Y1aA8`ᮤE\'1,LgyA-"{ň.nZX/oItUйE" Z1R}E ߅[8(\'6ƪOnRC5,NQ.4(<;AIP6VL*.5zJD y_]Pe#:0>|-]U bӢ|a `"~5~;!~nn ' . "\0" . '<1?n_.{#gg)w-86,Lm$0ҿج,lQG <@/NcYH֡@#4U;W`"ع˦e Iò+딿*ɜ2 @ @̶2S=[r>^\'>D+tƸV?? ]LxQ-|MMSRi]z/ -%-XL#JğKmTRnu,ll;wI9KhE}*/%E@Z`)b@ ўx1[ۇw4L?щ}q傐igR+*"ٔ0+ ]WPUlUDM!B 1OrwE+d2n>~WգD)E[⨉sWmB%g|w˥ -gw؜gO,' . "\0" . 'n2x7^j6q(A*\\I^5nmNVrvptߝM2 F8A& CB9oNnր.Va[_Q2[ ߶' . "\0" . 'r5 -/$ܽ1|" ; B{}xض>;D9LsiC n ' . "\0" . 'la> -BBODX^]ljڡ9Ӯ[ 5ʬ4cc(05aF{%ޙKp+S}zjl5_0LT`[F1"{A r&3M2Hzѱ&{1bOsAP>$98`;YR=pE\'_6>/;wymj[{aa,+ N=:{ABٷZm,[o{I4Ű#af<[gm|o˛3͒\'k?$ c5_v!G2NwEvXGv||CKzq{s\\EQnƝ2{3gxKxֺ睡\'(MDFMy7h$EWfXvFIe mLF:t -(S%;b(\\9@i$G ׋:x6L(<+w >ə/h̚g̴6)L_{eZI( J5=qշunf7jiI=v$U},X_>&r[H1*w`q%CKɒ\\[i%\'J?ZI?ʖTkZ-:Vuw8̬$;X -=v,wXDp.Ɨ=ɧ_Vg5K+OPW-Vdkw3NV>JR1=`FI`9e[nG5؋E -Xd&"ɱ]8(.TA}W={Uz+b~}Buq ՊY ݒQK$EV{CW<8B8&N#hE6HvFYyE/֗9Jl1J1 L4&"7JR1RX GIJȥW]EDB9MҶL`-=v' . "\0" . '!>&i{?ŵ68hQ[zWu4aΤ%_64\'\'_;mZ.?2W<{d,/ا$sg8:x CZ2D[_" __߫ßZv[0g㛤+v -q<;G}AvW}i]E|Wd i)W?®GX=::7㕅98:zW *HvB -~΍t[\\k4x^DWڥ;S2=J: VAI.i[@&D>5.iA3DOu[Ʈe]T=wJJJG7BUzuc4DHHg0' . "\0" . '3;DUU6zU@ҫOj+_txgT5 -4-\\I;𶓚p[qn2' . "\0" . '^tW~ez,S»V6#Y{atv7!t-uKRuriojBQy1&`ngT1G 6p=O<^;??:y#.z^+j([</~ h\'ޝBEtXIZ |zL"A ~b*8' . "\0" . ' ]:Ɖc{/Wd #o 9=k -d,V]hjĠ8MaSReA}{h D9Ԥ~Iu!ÂUے4""Yqcax)-z}teas26n1bxw11  "}nFVA!Cv#/;pɛ/BCjPn4GjDJ3i43?>aN -UH#}ThQ&!(L@Z$KM9 ujbOoA$;Gq;\\3"{{`W| bLuvH_/C(zjG+#4eeO w1cvPnͶWǷnC#|n{ꨍivɛo#o6DYZ*|!Eˬq9YPn9գG}_(,^5rSVݴ={ۏߴOxxz<9x#9=99rF"<&n?PZ_xcyeЖjJ.*0t)OE]1T5i9C"0!Iêq7.o[<@JG`.춆Yek3&Ro^' . "\0" . 'Z(Ol,P B vBvX!ؠߢtZ+g*᫥ `Q6FR1rHE$zjh Xx c} f"U2퇬ߍ6ZceaIUQ~^eߙ,|H(\\Ai#jȴr\' -;!%ݬzG̲Iz -\'قICquL* -ċt<ŌZZ y0@|bDZzWZYT?Y}ZQFm柨Y.Ћ -B. -|9iD<!X8AaM|SvZcuP8*DOBU,Lǖ- 6ɮA8%n -ïNID(B_k)Қi]j\\%:ZW: \\~Ѹ_LJZXJFhȔNŋOX-vŵb7}lMbee_W9wCYCh v5*Mdj݆:' . "\0" . 'UxZI.Z.HG\'Ij 6D`U׳LE ;G>*]ZS};Nxh$jѣpӮdjHH:XkG()U QQ\\c`|ew 1;N0jj(KwIrm r -KϖH6NGG7P>' . "\0" . 'Pk֣K{Bcݕ%xtn|IHX«&GR,#Uϣ3ڊ -)XS)0$>l -97V.Ŧ|f9Oie5Yie8ߗdx$44F㻥Cd.\'B hM ?{?۴f|8uY_1ݳ|Nb,!XE#\\\\eg춨WVT`餃Aq1+1REV 86hP5{鋑z#XXz.T寬*X? d:D¿Ė>K6ӽjqg >-:|;HKI%k!;VV@h#LP[-6‹P™W[NfBgF8 ϳi|$T !X]G4k;2pU1אZ\\7 ud\' -p>e֔|b!} r3g`YS#90ͯ9OWm?>~5OS1JDI$K?/ Wj-tu+) Wcǁuqq̀ex!\\cN^[ -{KU8*n*MRTq[9ܑPQ콮3E\\G1KRHլ+xY(ץ3%_-KE' . "\0" . 'P% pcVkv%`l0\'S -q,`\\h{PDCP~cnR= r{F!YH\\"Aم*7L@-B{a]ш6{!"<ʤ2c}nzuֺ8Gi!-ǪzϡeGO0l=)#fU8ރ 1?4̆rj2hj҄ǐDNԼ|粸NYk~Y˫vs:thnv\'js/H6R 0 {!tƀN"c_k#)HPȟюUo?b*^"l%>ߵjk4u;tt5eEavqI!z.?촟7X9~\'5}o}@"F.vbs1@+"eG̓nZ4vvz  8\'hbA6*2gԢhQO;nQ~*픸 -@Y2*dʋDi2(@y΁`~GoZY^p\'^!]3jXÒZ~=jބ#"N8;8;:5&mIړ$oiV\'u)4$܁zVɦ 1e졹1h7y3O' . "\0" . '%(A1 {^w"0˞T+ k|ѸQ[[?OŤZQckn\'ƴ\' m W<f\\׏>;IoL|EkT5d27?߮׳Z' . "\0" . '&{}])/ZX{v a>]Af]Z[Pݥz5ZYjhufu{4z-g.I܈lӥ2t|5`u;⟆ 888' . "\0" . 'A˸*uEtbCV7Btq)=;#4I āqȄE/T5)nws ͂rQDsEF]9v} cKjl,Tì^? -+ud{6% =+ -Ϫ[Je \\Iqx9Q"x!AٟQZCKUsk}vt%no٫ y(Wd>Kr[_lrSF {:RTdc>=VnE4 \\ 9kd0*p=t%N|uRqeHrvUVjg5ENrM6 -Z)6$>[4G<"נ9_ J5XkkC4AVVs1ܭ#ņlaFқ$?A}:+@K)tr:`P:j- \\*l#$XʅUe5AR[|]]0{W.WeǜUUrF}1' . "\0" . 'N3z;K_0"H D lahcq5TV eJV/' . "\0" . 'T-gi:?{ijtp5"9a J:)/ :bLf\'6W I ),+ XicL&y%uīt+W$chڊENQ\\Q-̪N\\Wo?xU?-qtݶ' . "\0" . 'ْ login(); +$results = $unifi_connection->list_alarms(); // returns a PHP array containing alarm objects +``` + +Please refer to the `examples/` directory for some more detailed examples which you can use as a starting point for your own PHP code. + +### NOTE: + +In the example above, `$site_id` is the 8 character short site "name" which is visible in the URL when managing the site in the UniFi controller: + +`https://:8443/manage/site/jl3z2shm/dashboard` + +In this case, `jl3z2shm` is the value required for $site_id. + +## Need help or have suggestions? + +There is still work to be done to add functionality and improve the usability of this class, so all suggestions/comments are welcome. Please use the github [issue](https://github.com/Art-of-WiFi/UniFi-API-client/issues) list or the Ubiquiti Community forums (https://community.ubnt.com/t5/UniFi-Wireless/PHP-class-to-access-the-UniFi-controller-API-updates-and/td-p/1512870) to share your ideas/questions. + +## Contribute + +If you would like to contribute code (improvements), please open an issue and include your code there or else create a pull request. + +## Credits + +This class is largely based on the work done by the following developers: +- domwo: http://community.ubnt.com/t5/UniFi-Wireless/little-php-class-for-unifi-api/m-p/603051 +- fbagnol: https://github.com/fbagnol/class.unifi.php +- and the API as published by Ubiquiti: https://www.ubnt.com/downloads/unifi/5.5.20/unifi_sh_api + +## Important Disclaimer + +Many of these functions are not officially supported by UBNT and as such, may not be supported in future versions of the UniFi controller API. diff --git a/vendor/art-of-wifi/unifi-api-client/composer.json b/vendor/art-of-wifi/unifi-api-client/composer.json new file mode 100755 index 0000000..0c73602 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/composer.json @@ -0,0 +1,31 @@ +{ + "name": "art-of-wifi/unifi-api-client", + "type": "library", + "description": "API client class for use with Ubiquiti's UniFi controller", + "keywords": [ + "ubnt", + "ubiquiti", + "unifi", + "controller", + "api", + "client" + ], + "homepage": "https://github.com/Art-of-WiFi/UniFi-API-client", + "license": "MIT", + "authors": [ + { + "name": "Art of WiFi", + "email": "info@artofowifi.net", + "homepage": "http://artofwifi.net" + } + ], + "require": { + "php": ">=5.4.0", + "ext-curl": "*" + }, + "autoload": { + "psr-4": { + "UniFi_API\\": "src/" + } + } +} \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/README.md b/vendor/art-of-wifi/unifi-api-client/examples/README.md new file mode 100755 index 0000000..07eed1a --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/README.md @@ -0,0 +1,15 @@ +## API client class usage examples +This directory contains some PHP code examples which demonstrate usage of the PHP API client class and can be used as a good starting point for your own custom code. + +### Usage + +Copy the appropriate example file to your working directory together with a copy of the config.template.php file which should be renamed to config.php. +Then update the contents of your new config.php with your controller details and credentials and modify the example file as required to fit your needs. + +### Contribute + +If you would like to share your own example file(s), please open an issue and include your code there or else create a pull request. + +## Important Disclaimer + +Use these examples at your own risk! \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/ap_scanning_state.php b/vendor/art-of-wifi/unifi-api-client/examples/ap_scanning_state.php new file mode 100755 index 0000000..f199ebe --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/ap_scanning_state.php @@ -0,0 +1,38 @@ +'; +$ap_mac = ''; + +/** + * initialize the UniFi API connection class and log in to the controller and do our thing + * spectrum_scan_state() + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); +$data = $unifi_connection->spectrum_scan_state($ap_mac); + +/** + * provide feedback in json format + */ +echo json_encode($data, JSON_PRETTY_PRINT); \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_basic.php b/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_basic.php new file mode 100755 index 0000000..3612984 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_basic.php @@ -0,0 +1,50 @@ +'; + +/** + * the duration to authorize the device for in minutes + */ +$duration = 2000; + +/** + * The site to authorize the device with + */ +$site_id = ''; + +/** + * initialize the UniFi API connection class and log in to the controller + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); + +/** + * then we authorize the device for the requested duration + */ +$auth_result = $unifi_connection->authorize_guest($mac, $duration); + +/** + * provide feedback in json format + */ +echo json_encode($auth_result, JSON_PRETTY_PRINT); \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_with_note.php b/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_with_note.php new file mode 100755 index 0000000..0aa64a7 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/auth_guest_with_note.php @@ -0,0 +1,73 @@ +'; + +/** + * the duration to authorize the device for in minutes + */ +$duration = 2000; + +/** + * The site to authorize the device with + */ +$site_id = ''; + +/** + * the note to attach to the device + */ +$note = 'Note to attach to newly authorized device'; + +/** + * initialize the UniFi API connection class and log in to the controller + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); + +/** + * we authorize the device for the requested duration and attach the note to it's object + */ +$auth_result = $unifi_connection->authorize_guest($mac, $duration); +$getid_result = $unifi_connection->stat_client($mac); +$user_id = $getid_result[0]->_id; +$note_result = $unifi_connection->set_sta_note($user_id, $note); + +/** + * When using older Controller versions (< 5.5.x) to attach a note to a new (unconnected) device, we instead need to take the + * following steps before authorizing the device: + * - first block the device to get an entry in the user collection + * - get the device id from the user collection + * - attach note to the device + * - then unblock the device again **after the authorization has taken place** + */ +//$block_result = $unifi_connection->block_sta($mac); +//$getid_result = $unifi_connection->stat_client($mac); +//$user_id = $getid_result[0]->_id; +//$note_result = $unifi_connection->set_sta_note($user_id, $note); +//$unblock_result = $unifi_connection->unblock_sta($mac); +//$auth_result = $unifi_connection->authorize_guest($mac, $duration); + +/** + * provide feedback in json format + */ +echo json_encode($auth_result, JSON_PRETTY_PRINT); \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/config.template.php b/vendor/art-of-wifi/unifi-api-client/examples/config.template.php new file mode 100755 index 0000000..938e21c --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/config.template.php @@ -0,0 +1,24 @@ +'; + +/** + * initialize the UniFi API connection class and log in to the controller + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); + +/** + * then we create the required number of vouchers for the requested duration + */ +$voucher_result = $unifi_connection->create_voucher($voucher_duration, $voucher_count); + +/** + * provide feedback (the newly created voucher code, without the dash) in json format + */ +echo json_encode($voucher_result, JSON_PRETTY_PRINT); diff --git a/vendor/art-of-wifi/unifi-api-client/examples/extend_guest_auth.php b/vendor/art-of-wifi/unifi-api-client/examples/extend_guest_auth.php new file mode 100755 index 0000000..d1fff47 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/extend_guest_auth.php @@ -0,0 +1,50 @@ +set_debug($debug); +$loginresults = $unifi_connection->login(); + +if ($loginresults === 400) { + print "UniFi controller login failure, please check your credentials in config.php.\n"; +} else { + $guestlist = $unifi_connection->list_guests(); + // print "
"; print_r ($guestlist); print "
"; + // loop thru all known guests + foreach ($guestlist as $guest) { + // print "
"; print_r ($guest); print "
"; + print "
" . $guest->_id . " (" . $guest->mac . "), valid until " . date (DATE_ATOM, $guest->end) . " (" . $guest->end . ")
"; + + // just a sample: only extend validity of guests which have end date after 2017-04-02 + if ($guest->end > 1491166482) { + // extend clients five times = five days + if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n"; + if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n"; + if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n"; + if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n"; + if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n"; + } + } + + $logout_results = $unifi_connection->logout(); +} \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/list_alarms.php b/vendor/art-of-wifi/unifi-api-client/examples/list_alarms.php new file mode 100755 index 0000000..4c82d50 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/list_alarms.php @@ -0,0 +1,36 @@ +'; + +/** + * initialize the UniFi API connection class and log in to the controller and do our thing + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); +$data = $unifi_connection->list_alarms(); + +/** + * provide feedback in json format + */ +echo json_encode($data, JSON_PRETTY_PRINT); \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/list_ap_connected_users.php b/vendor/art-of-wifi/unifi-api-client/examples/list_ap_connected_users.php new file mode 100755 index 0000000..a07ebb7 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/list_ap_connected_users.php @@ -0,0 +1,42 @@ +'; + +/** + * initialize the UniFi API connection class and log in to the controller and pull the requested data + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); +$aps_array = $unifi_connection->list_aps(); + +/** + * output the results in HTML format + */ +header('Content-Type: text/html; charset=utf-8'); +foreach ($aps_array as $ap) { + if ($ap->type === 'uap') { + echo 'AP name:' . $ap->name . ' model:' . $ap->model . ' # connected clients:' . $ap->num_sta . '
'; + } +} \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/list_site_health.php b/vendor/art-of-wifi/unifi-api-client/examples/list_site_health.php new file mode 100755 index 0000000..4ea10dd --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/list_site_health.php @@ -0,0 +1,39 @@ +'; + +/** + * initialize the UniFi API connection class and log in to the controller and pull the requested data + */ + +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); +$result = $unifi_connection->list_health(); + +/** + * output the results in correct json formatting + */ +header('Content-Type: application/json'); +echo (json_encode($result, JSON_PRETTY_PRINT)); \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/list_social_auth_details.php b/vendor/art-of-wifi/unifi-api-client/examples/list_social_auth_details.php new file mode 100755 index 0000000..7557ae3 --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/list_social_auth_details.php @@ -0,0 +1,45 @@ +'; + +/** + * initialize the UniFi API connection class and log in to the controller and do our thing + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); +$data = $unifi_connection->stat_payment(); + +/** + * cycle through the results and print social auth details if set, + * at this stage you can choose to do with the payment objects whatever is needed + */ +echo 'Results from Facebook social auth:
'; +foreach ($data as $payment) { + if (isset($payment->gateway) && $payment->gateway == 'facebook') { + echo 'First name: ' . $payment->first_name . ' Last name: ' . $payment->last_name . ' E-mail address: ' . $payment->email . '
'; + } +} + +echo '

'; \ No newline at end of file diff --git a/vendor/art-of-wifi/unifi-api-client/examples/test_connection.php b/vendor/art-of-wifi/unifi-api-client/examples/test_connection.php new file mode 100755 index 0000000..98c878b --- /dev/null +++ b/vendor/art-of-wifi/unifi-api-client/examples/test_connection.php @@ -0,0 +1,67 @@ +'; + +/** + * other specific variables to be used + */ +$mac = ''; + +/** + * initialize the UniFi API connection class and log in to the controller to do our thing + */ +$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); // initialize the class instance +$set_debug_mode = $unifi_connection->set_debug($debug); +$loginresults = $unifi_connection->login(); + +/** + * using the new method/function + */ +$data = $unifi_connection->locate_ap($mac, true); // uncomment to switch locating on +//$data = $unifi_connection->locate_ap($mac, false); // uncomment to switch locating off (choose either of these two lines!) + +if ($data) { + /** + * provide feedback in json format + */ + echo json_encode($data, JSON_PRETTY_PRINT); +} else { + /** + * method returned false so we display the raw results in json format + */ + echo '
';
+    print_r($unifi_connection->get_last_results_raw(true));
+    echo '
'; +} \ No newline at end of file diff --git a/phpapi/class.unifi.php b/vendor/art-of-wifi/unifi-api-client/src/Client.php similarity index 97% rename from phpapi/class.unifi.php rename to vendor/art-of-wifi/unifi-api-client/src/Client.php index 7d18270..9be8b89 100755 --- a/phpapi/class.unifi.php +++ b/vendor/art-of-wifi/unifi-api-client/src/Client.php @@ -1,50 +1,25 @@ /unifi_sh_api * - * VERSION: 1.1.15 - * - * NOTES: - * - a version of this class is available as an independant package which can be installed using composer: - * https://github.com/Art-of-WiFi/UniFi-API-client - * - this class will only work with UniFi Controller versions 4.x and 5.x. There are no checks to prevent - * you from trying to use it with other versions of the UniFi Controller. - * - * IMPORTANT CHANGES: - * - function/method get_vouchers() has been removed and has been replaced by stat_voucher() - * as of version 1.1.2: - * - functions/methods unset_locate_ap() and set_locate_ap() have deprecated and replaced - * by locate_ap(), but are still available as alias. - * - functions/methods site_ledson() and site_ledsoff() have deprecated and replaced - * by site_leds(), but are still available as alias. - * as of version 1.1.5: - * - list_devices() function/method replaces list_aps which is still available as alias - * - changed class name from unifiapi to UnifiApi (StudlyCaps) - * as of version 1.1.13: - * - all public properties have changed to public properties, please use the appropriate - * getter and setter methods instead. - * - getcookie() method/function has been renamed to get_cookie() for consistency - * as of version 1.1.15: - * - renamed all functions/methods named add_*() to create_*() - * - * ------------------------------------------------------------------------------------ - * - * Copyright (c) 2017, Art of WiFi + * Copyright (c) 2017, Art of WiFi * * This source file is subject to the MIT license that is bundled * with this package in the file LICENSE.md - * */ -define('API_CLASS_VERSION', '1.1.15'); -class UnifiApi +namespace UniFi_API; + +/** + * the UniFi API client class + */ +class Client { /** * private properties @@ -196,13 +171,11 @@ public function logout() */ public function set_site($site) { - - if (strlen($site) === 8 || $site === 'default') { + if (strlen($site) !== 8 && $site !== 'default' && $this->debug) { error_log('The provided (short) site name is probably incorrect'); } $this->site = $site; - return $this->site; } diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 0000000..5b4366d --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * 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 + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // 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; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $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; + } + + /** + * 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); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * 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) + { + // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 + if ('\\' == $class[0]) { + $class = substr($class, 1); + } + + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative) { + return false; + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if ($file === null && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if ($file === null) { + // Remember that this class does not exist. + return $this->classMap[$class] = false; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + 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; + } + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 0000000..1a28124 --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) 2016 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. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..ceb45a4 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,86 @@ + $vendorDir . '/kint-php/kint/src/Kint.php', + 'Kint_Object' => $vendorDir . '/kint-php/kint/src/Object.php', + 'Kint_Object_Blob' => $vendorDir . '/kint-php/kint/src/Object/Blob.php', + 'Kint_Object_Closure' => $vendorDir . '/kint-php/kint/src/Object/Closure.php', + 'Kint_Object_Color' => $vendorDir . '/kint-php/kint/src/Object/Color.php', + 'Kint_Object_DateTime' => $vendorDir . '/kint-php/kint/src/Object/DateTime.php', + 'Kint_Object_Instance' => $vendorDir . '/kint-php/kint/src/Object/Instance.php', + 'Kint_Object_Method' => $vendorDir . '/kint-php/kint/src/Object/Method.php', + 'Kint_Object_Nothing' => $vendorDir . '/kint-php/kint/src/Object/Nothing.php', + 'Kint_Object_Parameter' => $vendorDir . '/kint-php/kint/src/Object/Parameter.php', + 'Kint_Object_Representation' => $vendorDir . '/kint-php/kint/src/Object/Representation.php', + 'Kint_Object_Representation_Color' => $vendorDir . '/kint-php/kint/src/Object/Representation/Color.php', + 'Kint_Object_Representation_Docstring' => $vendorDir . '/kint-php/kint/src/Object/Representation/Docstring.php', + 'Kint_Object_Representation_Microtime' => $vendorDir . '/kint-php/kint/src/Object/Representation/Microtime.php', + 'Kint_Object_Representation_Source' => $vendorDir . '/kint-php/kint/src/Object/Representation/Source.php', + 'Kint_Object_Representation_SplFileInfo' => $vendorDir . '/kint-php/kint/src/Object/Representation/SplFileInfo.php', + 'Kint_Object_Resource' => $vendorDir . '/kint-php/kint/src/Object/Resource.php', + 'Kint_Object_Stream' => $vendorDir . '/kint-php/kint/src/Object/Stream.php', + 'Kint_Object_Throwable' => $vendorDir . '/kint-php/kint/src/Object/Throwable.php', + 'Kint_Object_Trace' => $vendorDir . '/kint-php/kint/src/Object/Trace.php', + 'Kint_Object_TraceFrame' => $vendorDir . '/kint-php/kint/src/Object/TraceFrame.php', + 'Kint_Parser' => $vendorDir . '/kint-php/kint/src/Parser.php', + 'Kint_Parser_Base64' => $vendorDir . '/kint-php/kint/src/Parser/Base64.php', + 'Kint_Parser_Binary' => $vendorDir . '/kint-php/kint/src/Parser/Binary.php', + 'Kint_Parser_Blacklist' => $vendorDir . '/kint-php/kint/src/Parser/Blacklist.php', + 'Kint_Parser_ClassMethods' => $vendorDir . '/kint-php/kint/src/Parser/ClassMethods.php', + 'Kint_Parser_ClassStatics' => $vendorDir . '/kint-php/kint/src/Parser/ClassStatics.php', + 'Kint_Parser_Closure' => $vendorDir . '/kint-php/kint/src/Parser/Closure.php', + 'Kint_Parser_Color' => $vendorDir . '/kint-php/kint/src/Parser/Color.php', + 'Kint_Parser_DOMIterator' => $vendorDir . '/kint-php/kint/src/Parser/DOMIterator.php', + 'Kint_Parser_DOMNode' => $vendorDir . '/kint-php/kint/src/Parser/DOMNode.php', + 'Kint_Parser_DateTime' => $vendorDir . '/kint-php/kint/src/Parser/DateTime.php', + 'Kint_Parser_FsPath' => $vendorDir . '/kint-php/kint/src/Parser/FsPath.php', + 'Kint_Parser_Iterator' => $vendorDir . '/kint-php/kint/src/Parser/Iterator.php', + 'Kint_Parser_Json' => $vendorDir . '/kint-php/kint/src/Parser/Json.php', + 'Kint_Parser_Microtime' => $vendorDir . '/kint-php/kint/src/Parser/Microtime.php', + 'Kint_Parser_Plugin' => $vendorDir . '/kint-php/kint/src/Parser/Plugin.php', + 'Kint_Parser_Serialize' => $vendorDir . '/kint-php/kint/src/Parser/Serialize.php', + 'Kint_Parser_SimpleXMLElement' => $vendorDir . '/kint-php/kint/src/Parser/SimpleXMLElement.php', + 'Kint_Parser_SplFileInfo' => $vendorDir . '/kint-php/kint/src/Parser/SplFileInfo.php', + 'Kint_Parser_SplObjectStorage' => $vendorDir . '/kint-php/kint/src/Parser/SplObjectStorage.php', + 'Kint_Parser_Stream' => $vendorDir . '/kint-php/kint/src/Parser/Stream.php', + 'Kint_Parser_Table' => $vendorDir . '/kint-php/kint/src/Parser/Table.php', + 'Kint_Parser_Throwable' => $vendorDir . '/kint-php/kint/src/Parser/Throwable.php', + 'Kint_Parser_Timestamp' => $vendorDir . '/kint-php/kint/src/Parser/Timestamp.php', + 'Kint_Parser_ToString' => $vendorDir . '/kint-php/kint/src/Parser/ToString.php', + 'Kint_Parser_Trace' => $vendorDir . '/kint-php/kint/src/Parser/Trace.php', + 'Kint_Parser_Xml' => $vendorDir . '/kint-php/kint/src/Parser/Xml.php', + 'Kint_Renderer' => $vendorDir . '/kint-php/kint/src/Renderer.php', + 'Kint_Renderer_Cli' => $vendorDir . '/kint-php/kint/src/Renderer/Cli.php', + 'Kint_Renderer_Plain' => $vendorDir . '/kint-php/kint/src/Renderer/Plain.php', + 'Kint_Renderer_Rich' => $vendorDir . '/kint-php/kint/src/Renderer/Rich.php', + 'Kint_Renderer_Rich_Binary' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Binary.php', + 'Kint_Renderer_Rich_Blacklist' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Blacklist.php', + 'Kint_Renderer_Rich_Callable' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Callable.php', + 'Kint_Renderer_Rich_Closure' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Closure.php', + 'Kint_Renderer_Rich_Color' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Color.php', + 'Kint_Renderer_Rich_ColorDetails' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/ColorDetails.php', + 'Kint_Renderer_Rich_DepthLimit' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/DepthLimit.php', + 'Kint_Renderer_Rich_Docstring' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Docstring.php', + 'Kint_Renderer_Rich_Microtime' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Microtime.php', + 'Kint_Renderer_Rich_Nothing' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Nothing.php', + 'Kint_Renderer_Rich_Plugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Plugin.php', + 'Kint_Renderer_Rich_Recursion' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Recursion.php', + 'Kint_Renderer_Rich_SimpleXMLElement' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php', + 'Kint_Renderer_Rich_Source' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Source.php', + 'Kint_Renderer_Rich_Table' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Table.php', + 'Kint_Renderer_Rich_Timestamp' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/Timestamp.php', + 'Kint_Renderer_Rich_TraceFrame' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/TraceFrame.php', + 'Kint_Renderer_Text' => $vendorDir . '/kint-php/kint/src/Renderer/Text.php', + 'Kint_Renderer_Text_Blacklist' => $vendorDir . '/kint-php/kint/src/Renderer/Text/Blacklist.php', + 'Kint_Renderer_Text_DepthLimit' => $vendorDir . '/kint-php/kint/src/Renderer/Text/DepthLimit.php', + 'Kint_Renderer_Text_Nothing' => $vendorDir . '/kint-php/kint/src/Renderer/Text/Nothing.php', + 'Kint_Renderer_Text_Plugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/Plugin.php', + 'Kint_Renderer_Text_Recursion' => $vendorDir . '/kint-php/kint/src/Renderer/Text/Recursion.php', + 'Kint_Renderer_Text_Trace' => $vendorDir . '/kint-php/kint/src/Renderer/Text/Trace.php', + 'Kint_SourceParser' => $vendorDir . '/kint-php/kint/src/SourceParser.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 0000000..dd77956 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/kint-php/kint/init.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..b7fc012 --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/art-of-wifi/unifi-api-client/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 0000000..ddd8c75 --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,70 @@ += 50600 && !defined('HHVM_VERSION'); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit62243b51e638212a66aa1140e1d261e3::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\ComposerStaticInit62243b51e638212a66aa1140e1d261e3::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire62243b51e638212a66aa1140e1d261e3($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequire62243b51e638212a66aa1140e1d261e3($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 0000000..b5c2b1e --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,116 @@ + __DIR__ . '/..' . '/kint-php/kint/init.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'U' => + array ( + 'UniFi_API\\' => 10, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'UniFi_API\\' => + array ( + 0 => __DIR__ . '/..' . '/art-of-wifi/unifi-api-client/src', + ), + ); + + public static $classMap = array ( + 'Kint' => __DIR__ . '/..' . '/kint-php/kint/src/Kint.php', + 'Kint_Object' => __DIR__ . '/..' . '/kint-php/kint/src/Object.php', + 'Kint_Object_Blob' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Blob.php', + 'Kint_Object_Closure' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Closure.php', + 'Kint_Object_Color' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Color.php', + 'Kint_Object_DateTime' => __DIR__ . '/..' . '/kint-php/kint/src/Object/DateTime.php', + 'Kint_Object_Instance' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Instance.php', + 'Kint_Object_Method' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Method.php', + 'Kint_Object_Nothing' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Nothing.php', + 'Kint_Object_Parameter' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Parameter.php', + 'Kint_Object_Representation' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation.php', + 'Kint_Object_Representation_Color' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation/Color.php', + 'Kint_Object_Representation_Docstring' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation/Docstring.php', + 'Kint_Object_Representation_Microtime' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation/Microtime.php', + 'Kint_Object_Representation_Source' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation/Source.php', + 'Kint_Object_Representation_SplFileInfo' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Representation/SplFileInfo.php', + 'Kint_Object_Resource' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Resource.php', + 'Kint_Object_Stream' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Stream.php', + 'Kint_Object_Throwable' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Throwable.php', + 'Kint_Object_Trace' => __DIR__ . '/..' . '/kint-php/kint/src/Object/Trace.php', + 'Kint_Object_TraceFrame' => __DIR__ . '/..' . '/kint-php/kint/src/Object/TraceFrame.php', + 'Kint_Parser' => __DIR__ . '/..' . '/kint-php/kint/src/Parser.php', + 'Kint_Parser_Base64' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Base64.php', + 'Kint_Parser_Binary' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Binary.php', + 'Kint_Parser_Blacklist' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Blacklist.php', + 'Kint_Parser_ClassMethods' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ClassMethods.php', + 'Kint_Parser_ClassStatics' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ClassStatics.php', + 'Kint_Parser_Closure' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Closure.php', + 'Kint_Parser_Color' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Color.php', + 'Kint_Parser_DOMIterator' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/DOMIterator.php', + 'Kint_Parser_DOMNode' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/DOMNode.php', + 'Kint_Parser_DateTime' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/DateTime.php', + 'Kint_Parser_FsPath' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/FsPath.php', + 'Kint_Parser_Iterator' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Iterator.php', + 'Kint_Parser_Json' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Json.php', + 'Kint_Parser_Microtime' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Microtime.php', + 'Kint_Parser_Plugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Plugin.php', + 'Kint_Parser_Serialize' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Serialize.php', + 'Kint_Parser_SimpleXMLElement' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SimpleXMLElement.php', + 'Kint_Parser_SplFileInfo' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SplFileInfo.php', + 'Kint_Parser_SplObjectStorage' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SplObjectStorage.php', + 'Kint_Parser_Stream' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Stream.php', + 'Kint_Parser_Table' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Table.php', + 'Kint_Parser_Throwable' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Throwable.php', + 'Kint_Parser_Timestamp' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Timestamp.php', + 'Kint_Parser_ToString' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ToString.php', + 'Kint_Parser_Trace' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Trace.php', + 'Kint_Parser_Xml' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Xml.php', + 'Kint_Renderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer.php', + 'Kint_Renderer_Cli' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Cli.php', + 'Kint_Renderer_Plain' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Plain.php', + 'Kint_Renderer_Rich' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich.php', + 'Kint_Renderer_Rich_Binary' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Binary.php', + 'Kint_Renderer_Rich_Blacklist' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Blacklist.php', + 'Kint_Renderer_Rich_Callable' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Callable.php', + 'Kint_Renderer_Rich_Closure' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Closure.php', + 'Kint_Renderer_Rich_Color' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Color.php', + 'Kint_Renderer_Rich_ColorDetails' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/ColorDetails.php', + 'Kint_Renderer_Rich_DepthLimit' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/DepthLimit.php', + 'Kint_Renderer_Rich_Docstring' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Docstring.php', + 'Kint_Renderer_Rich_Microtime' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Microtime.php', + 'Kint_Renderer_Rich_Nothing' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Nothing.php', + 'Kint_Renderer_Rich_Plugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Plugin.php', + 'Kint_Renderer_Rich_Recursion' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Recursion.php', + 'Kint_Renderer_Rich_SimpleXMLElement' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php', + 'Kint_Renderer_Rich_Source' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Source.php', + 'Kint_Renderer_Rich_Table' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Table.php', + 'Kint_Renderer_Rich_Timestamp' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/Timestamp.php', + 'Kint_Renderer_Rich_TraceFrame' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/TraceFrame.php', + 'Kint_Renderer_Text' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text.php', + 'Kint_Renderer_Text_Blacklist' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/Blacklist.php', + 'Kint_Renderer_Text_DepthLimit' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/DepthLimit.php', + 'Kint_Renderer_Text_Nothing' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/Nothing.php', + 'Kint_Renderer_Text_Plugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/Plugin.php', + 'Kint_Renderer_Text_Recursion' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/Recursion.php', + 'Kint_Renderer_Text_Trace' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/Trace.php', + 'Kint_SourceParser' => __DIR__ . '/..' . '/kint-php/kint/src/SourceParser.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit62243b51e638212a66aa1140e1d261e3::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit62243b51e638212a66aa1140e1d261e3::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit62243b51e638212a66aa1140e1d261e3::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 0000000..a186323 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,111 @@ +[ + { + "name": "art-of-wifi/unifi-api-client", + "version": "v1.1.15", + "version_normalized": "1.1.15.0", + "source": { + "type": "git", + "url": "https://github.com/Art-of-WiFi/UniFi-API-client.git", + "reference": "971c77ab5f49cbd54d0eae169da84316011614de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Art-of-WiFi/UniFi-API-client/zipball/971c77ab5f49cbd54d0eae169da84316011614de", + "reference": "971c77ab5f49cbd54d0eae169da84316011614de", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.4.0" + }, + "time": "2017-09-14 10:15:21", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "UniFi_API\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Art of WiFi", + "email": "info@artofowifi.net", + "homepage": "http://artofwifi.net" + } + ], + "description": "API client class for use with Ubiquiti's UniFi controller", + "homepage": "https://github.com/Art-of-WiFi/UniFi-API-client", + "keywords": [ + "UBNT", + "api", + "client", + "controller", + "ubiquiti", + "unifi" + ] + }, + { + "name": "kint-php/kint", + "version": "2.2", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/kint-php/kint.git", + "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kint-php/kint/zipball/b091715eadaf6e1a7ef927f3e81d1004611d2aea", + "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea", + "shasum": "" + }, + "require": { + "php": ">=5.1.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpunit/phpunit": "^4.0", + "symfony/finder": "^2.6" + }, + "time": "2017-09-06 17:46:03", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "init.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rokas Šleinius", + "homepage": "https://github.com/raveren" + }, + { + "name": "Jonathan Vollebregt", + "homepage": "https://github.com/jnvsor" + }, + { + "name": "Contributors", + "homepage": "https://github.com/kint-php/kint/graphs/contributors" + } + ], + "description": "Kint - debugging tool for PHP developers", + "homepage": "https://kint-php.github.io/kint/", + "keywords": [ + "debug", + "kint", + "php" + ] + } +] diff --git a/vendor/kint-php/kint/LICENCE b/vendor/kint-php/kint/LICENCE new file mode 100644 index 0000000..01718d4 --- /dev/null +++ b/vendor/kint-php/kint/LICENCE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Vollebregt (jnvsor@gmail.com), Rokas Šleinius (raveren@gmail.com) + +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. diff --git a/vendor/kint-php/kint/README.md b/vendor/kint-php/kint/README.md new file mode 100644 index 0000000..e17b4a0 --- /dev/null +++ b/vendor/kint-php/kint/README.md @@ -0,0 +1,76 @@ +# Kint - debugging helper for PHP developers + +[![](https://travis-ci.org/kint-php/kint.svg?branch=master)](https://travis-ci.org/kint-php/kint) + +![Screenshot](https://kint-php.github.io/kint/images/intro.png) + +## What am I looking at? + +At first glance Kint is just a pretty replacement for **[var_dump()](http://php.net/manual/en/function.var-dump.php)**, **[print_r()](http://php.net/manual/en/function.print-r.php)** and **[debug_backtrace()](http://php.net/manual/en/function.debug-backtrace.php)**. + +However, it's much, *much* more than that. Even the excellent `xdebug` var_dump improvements don't come close - you will eventually wonder how you developed without it. + +Just to list some of the most useful features: + +## Installation + +One of the main goals of Kint is to be **zero setup**. + +[Download the file](https://raw.githubusercontent.com/kint-php/kint/master/build/kint.php) and simply +```php +');`) - so even if you accidentally leave a dump in production, no one will know. +* Kint has *keyboard shortcuts*! When Kint is visible, press D on the keyboard and you will be able to traverse the tree with arrows, hjkl, and tab keys - and expand/collapse nodes with space or enter. +* Clicking the + sign or the bar will open/close it. +* Double clicking the + sign will open/close it and all its children. +* Triple clicking the + sign in will open/close everything on the page. +* See the tiny arrows on the right of the output? Click them to open the node in a separate tab, or to show the access path for the value. +* There are a couple of real-time modifiers you can use: + * `~d($var)` this call will output in plain text format. + * `+d($var)` will disregard depth level limits and output everything. (Careful, this can hang your browser on large objects!) + * `!d($var)` will expand the output automatically. + * `-d($var)` will attempt to `ob_clean` the previous output. + * You can combine modifiers too: `~+d($var)` +* To change display theme, use `Kint_Renderer_Rich::$theme = '';` where available options are: `'original.css'` (default), `'solarized.css'`, `'solarized-dark.css'` and `'aante-light.css'`. You can also pass the absolute path to a CSS file to use that instead. +* `dd()`, `sd()`, and `ddd()` were removed in Kint 2, but you can make them yourself with [helper aliases](https://kint-php.github.io/kint/advanced/#helperfuncs) +* Read [the full documentation](https://kint-php.github.io/kint/) for more information + +## Authors + +[**Jonathan Vollebregt** (jnvsor)](https://github.com/jnvsor) +[**Rokas Šleinius** (raveren)](https://github.com/raveren) + +## License + +Licensed under the MIT License diff --git a/vendor/kint-php/kint/build/kint-aante-light.php b/vendor/kint-php/kint/build/kint-aante-light.php new file mode 100644 index 0000000..ea09c03 --- /dev/null +++ b/vendor/kint-php/kint/build/kint-aante-light.php @@ -0,0 +1,180 @@ += 0)); +define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); +define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); +define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); +define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); +define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); +define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); +define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); +define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); +eval(gzuncompress('xmw mE&MZ,9ly%94ɦĘd3ݤeǣ={p?<}K. +/&)3dm6P(' . "\0" . 'BP(:(?Gs4NTLg9%Am nF|0ꦽd:"\'/[Gf:]+i>{AG[,&Pw{P~1$Zd' . "\0" . 'ٰ#xʳlB' . "\0" . '%y|T$EƓɨvEf/~5Ϣ$L٨-~R)Eqw:՚<ɓNH}H~hY\'Yq&\\\'y sO^M3Dpfd}t|ry!q ,dla.(3dPo:"QhwQ!|[M +g^)asKD($߮x4-9-7, }:' . "\0" . 'TQXΦN)Q]tn +8)@ +,Nt{ރ]CHo .tibE!Y3 TT.!H(le 06]&8zsz&vEu-5 +5gVL6zl-ہPPAuE5IY*V QsS51؊\\-%FӡhH!8 ZbƋ(R#O+N\'+\\E̞^$8/~yݏ8??8lY\\{l|5jƺ%d +P Nu' . "\0" . '/S,&tB!X C_R H|-PXE?b>y8ʧdBҏbtaL Ii.\\v~KjT-fA!T0C삂i2RfB-(ɩ}ia9[Mf|WƢ8<U}:܍uΦrLSմĜ%DMqD},%S03Oqw|eQ og$r\'ɨf=k}ZC\'P*PliۏVSYKU-vT/ͥWJ#Tl{2' . "\0" . 'q=#柕1^nRuơZPYvF; jQ:OĚOs#+| eq&<ۥ_jXqqu + O@lD+1|)r[)eTr@8R|oY Dr"K?Fg' . "\0" . '/bWZiI$_Ԭ“Oc5@`/W7eLڢC@5aZ.9vV0L_Sʞ9hRZ@C&4WfUsXnE1j}*EosM6Z3ӛ|bڢH3b ,{SbBv̯U?Dh_u) %3+`Gub5R;R +q-IXG22f2l yN9HĪSՖ% \'$d\\ ^롩n3v<Qi lrI5\\<F<@C/9! +6!dq%z ~YfC2$`xUjs[V8+&fYfIYj%ԮӖ 2do(o7Y>IG`OR~hчd0M}%r&bBď4KƗ0/!Б&Rи +3Fi1i IG4nY|e>@vO1Y 5e;UB7%"֢FM4`:`f]gE{Qp\\2bDa +`RTGw0kjˣSFc3vhǠ,/jx٧@<Ś8JhCn3DZ%X/!NKQ7=@Qt-SHN !UVH,o}"Z4fhӗCay-P5yaĒBk%SXf.#+q4;97f +wf~EدUA4D@UuUP#;ѣGլ`A tx?ӶhhPvZqH# `8AH˵+Gp[Dv3 +Zbmq8`^}Ē=Gݶ$e`@٫("$uN`Ke_- /lWy46l(&WN?5#T{b_i]VS{ c ]\\锢X;,WY)ח\'ᢡ 5Uc_iQlV%힝5(V7nܚ[VUv>a3T*L A#!EC@5PR P` )kQYaL;4R ϣ9Qڧf IN6eh4lBA-FɲDJ-h0AZ>?_ t0Ns Kl醊\\ ]A+fuDgg7\'oj}' . "\0" . 'ڰ{zr~xp~A qӮuCm8y{x~rj?=3 O] 䞝SM㗷L6mn%G\\&^21v$:8nA`11i| \\<4BMI[,b&.e[<\\7B[-U>L<=--; [ +0N(LzLnX\\@=hkoa6ˢ\\2 ÇQ?àBec;K$ZdLZЋ/T)I ෥0636yϴ϶pf]nKNX/Png5Ci>B 3ih!y|VQT,fMjr8DW% +UR}p!#V7f^}Ge$Eކ)ҧZ/Kإd$<1LE|5dy0fV$)}oXh!%\'h35AiU֪U:΂&TAҔRPJQc:".y,DDaxR2/GNRgҁڔWFGbẉf r %uAtvb:d#>U2^;IkAdN|ƓB;c^4*ЅlGAFwLYbeOhbe]fnJerjH}w5FKU%CFeV>FCXM~0 H8UVVxy 5 yڙx :@XХ^Pha/_᥽鮳4gJ/3F05/[CԲoɃ\'y.ҧ/W`s"(܇j. +wwms]dq\'yfUV xۢG AV#(?Y +| / H( +W&ȐG]Z]@SA_(.F~q$42Q^(]FCFg%PTCUNR,#+\',`I_iQ&QV鴝jo~Y-mw j0- r +xJWDȶ8=' . "\0" . ':)YP "MofZe%5Hd\\Y^eS[WXҪ,}e}PR )KGܖYYhd &8:Ad+uIocw%S+OYxdFw΁hT䳥HcxfyYſdM!2kH),ޖ(P cEVnPBE4_ \\=rXY:idU2' . "\0" . 'p' . "\0" . 'jIC0~VVˉk +ʂ:ujQ3x&c!)屾{>(ǨGKJQ)u${' . "\0" . 'ᚮ) *"S¥' . "\0" . 'Hp=oga-(:m#go  =s^+z3 1L)uàp\':{$YI?P' . "\0" . '=L[҆L|::K.[ V L\'fBGmޮLSRN U;[pIɠeˈh+;BEP H+,DH +jt+0T* p_sh+ r("RQlG&7ǩR,Yʎzt틆BHӦR[iћqf6OݣP$@Fe x\\W +DI$ЄCGC죗b7\' +2gK:>JS?ɯ޼ tI[^;_z 5qSrtzH򑝝__|wo^w#~C=x?VG<M=?H00(+l\\+Ŝc@hV44bY0V܋xZڹ.xwzgvOI |f5^GՇZJ8X^G`H l.ư0 +Ix^3YH÷8 +W]! eF}{\'S$M F/ug˓}&A5x|5 \\Jʫ()Z/ZŇF$CLDoy#]a`+ DQx4sJю2xV:!]WڵzQ(LL~ +1GK!hm-Z-)_BW quU>Ͱ zdl#%[U +)QWCPZe$kj*\'l;V/l +R@Ll"5 }5Ty$yU>ռAqh+Ar!* rǺz޲' . "\0" . ' wWAa@5i({d Zt[@ +P2J2Ro|쐋0WVkw~"L' . "\0" . 'ɦÂZZVv*4E(- PM!0)J=**;8mLҮ(PDjF"JLK)4X.źŢT' . "\0" . '=9 8?;>x _͘V ܮ5:v%2;47XLZ*CF< 2>[Qݝ=;|<8!}3\'I:L\'eoxf͝*/8͒Gόbe6V,,|K≚Fx20LL|Sb? +1GB% !ls ƛx8 eoqh1ύSEu{k~dta]M.b`Cت-Rx5r2ZF5^hT +~ʁ\'%%iNz9 +U4.xgj%Xyϐ5+@uJ/wyi%|vY8CYQFRbmf%D ɫ5X{1F#,S8 o,).S0&Cd{F07 ʼgVRyV\\T2eK8RzZWB_q]|emJwq|2 ϼNc*xC)1->hX\' 2 ow>1[' . "\0" . ' Z+ʰB5=)x " 39*A +DWQ׍>&|)7]+1.+\'=ydN<:;\\*8呟+q3vıZ+WT(z|Tgb.t_9FTD48FE#]1:$h-/ۊ4ycqG$r߭w4' . "\0" . 'e 8CU҉%maTdDePmDk蟕Z;WNr1+, o)*5#x:vEއEpihKkP{j%YXIJbeums-V}%EɨC~Y=K׶B9EWş!«H!d[ٍ2֍>aBp}9N 4n2tqV%PK47ɱǚ 2]C:ωo$ 1ҢL1io[6~Rd!d}U19w$m0ک JWt^]7ѻ"G8dG>ңxQ0Mu +՗oO믩ޜJs/M>WxЈR~]bNK/ \\.gbx^2hRJAI6 Ld' . "\0" . 's0z({wr~xf glX&aIR @䓼R[THJv5>0- !`< 5˲ǎ*}勯~=WHYɰ#=yFC[4Pj/騧oѐTwf *vXԖ&9`:cA +sTs9z4B-fq6R"twQ.ֳ2p' . "\0" . 'ꮴ~JpE-bq_l <Ȥ7k' . "\0" . '/{!YA{0o>Q%ߦM}y&h4Si$e0Hn`߁z N*q`bnI/`y|PU#An2f.t)WxYH)mZ;]!Z\\KLOY&qwBj +6{OsӂQ!s2ADt}\'\'͆LHԲt3ܢ?xJv?,@nSdU7nt6p(WjLF{ +4ض62#XM/k趟l5Ŕ#-)issaKEiCwn;Ou:*\'O"S@^ӭ\'Iր^PjolwM1Po!s2`fBb\'LOٻ똓q9guN/Vm=tr\'gkδS9zt˳ē\'OiI$Ms:ע_*>Ԓ@-aZ/ew]va0ZLPd8z)t[[.ч؈r o\'4L7,tI6yxwOVY-ӔeaaX #7P6h3nn|#{v>]}(%TyZq ŞSLwJ/YIoc-C̒]Yf;_ m0kYyҖNpD8ٔ m 3D V9N#4&NL6Jt[e8DTe:!t-d|Jƚ.p {Tp"`~JTu|./:rx0&.vnrJqN#T0Z_\'OLET<098y2ub.n' . "\0" . 'h} ܉ 6 M_b9Wߤ =Xt Gb' . "\0" . ' +W, j\\n5(0\\۱&QMG]i)]TZ+Z=֫esZ[н iI&pd6jN"J[*G}MכQ2`D74Aі(MWb$DUb^9bmJ9[9\\1yUW.\\˝ABL``0t0IJ("CfiH;HDgԗ +iI:mS? EMp\\(JhY1B(ê2Ѓ]Y> KL$%n pՎɚmei*L *MM-\\Y-+V*[im|x c*2ЫJV -sx(Y52c;WA^P Vh GhU0S[ᵌ+<[)gYZG7j*7i>=]>QM|=gC 80= QӡcҬh8-&౑4(z_@Ln7`MjupLf3P+L G]N1G2vy~|u!P>f o5ߊFﱫG1޺2uyy9GkKwcjތSPDܔ(Ccú̡/hni)ƶ<~Oe.G0yUQtWN C"3A3Lc\'=/ X-n΋g-+T`)jYS6[;9c"~!F͎ U*|Cr>ekgꭗ +K[|[QU?A4?pfTC7L_F c M h\'Idvr7mCh^&S\'? & nP\\.8EAI&}jTCc\'&)/>z+F}ˣ@ +-ıZ&t"վB>Z$%@u#o- z[3ϻW_"fߞ/~u6G Ί4lT|SbBeAoD˓S +rTww3\\ː"Jp()yE^5^R.)O]% yDk/mh8nBRS;S6j`Z @AUe}!nA \\#E䎳@X: +hkz6 _~d2.BWZߌtEu ϪpQM&:"ZihDԛle-@홢 K|}mJOyVؠΥJ-{+,Cc +&O@F' . "\0" . ' e 19)Nlf vЈ 6I4h6I6W98k_u>%"0q$,G.գl 2DZvBz6q!m1OO/>\\fPvAC,e<ϥ̦+VVɩn\\OP#+/>/' . "\0" . ';r"{|Pͻ㸩-f‡u-q^7H[ť w%.BFjӫs [U\'tQ?!oTl<0 zd[eC2VдeU-HFmXAMbJSիٛW , ֫㋿$+oU5{evߣ*`je Z' . "\0" . ']b+:t;jw"XHdt74.%Vdc2hr\';!...{.iޏy(({"]pwڐ17:`!@.ctD#D`d%v9?Xb/-2Q,#$$3E1o8$' . "\0" . ';f$S75+bcX8I&T]сԞ̅"%KՆ1@VaJ1`*T3$۵b)$tL2ead$ʯH)I~]oIm:jA"Qh:7Ҭ,uc|AϔGyٯk6uZ53%KR^fIf u[r,ߗ' . "\0" . '}nɛC o/&;hcqgIYl?]R[ivh ݶu5t־N=$7|EH9`dT)s9N$}iG9qm Y' . "\0" . 'Q655 oܥ x2f\'.L:w.jDzf[c +=YBS-מa.Qj馀?\'lPV$\'pɼNFXȮׇTO}uSk]$["yN>HEꦃ[["N">+~H~TKq`*ETm!C iqD#b7Uk㔖Mme@+z9(98 +M˚}5>cՆJ՟ j{eNuIz[q"˭fYԟd +wZD_v?7aşbrvI-ڨ ``5n(C;[,**i7loE4COTFǪ/,H9 tлZy[N15?mϙy ̾pS~c"=n;[pΆl}Zj@)(.B&)$ [dn7z P=!` J[6)?L6F9X1Z( 0z  O$m3۠BmÈ`P{B 4E)vPJ, +@9.W5pَ V7 czDRGt捷*kF.Cn, ,qSS\'sЗO~ +U/j2$ +' . "\0" . 'F$X6CEk9nUՄ@>PZc@|ujV.~Kzl$P +*v~1=&HٔMrZ:Gl5z?SʪŪ{4AVB7_;{ScLD~R&l5ѹ\'_fB* ?.=Vi\'Ȗa~ +a^^n^$d_NTWD鞱8p#  8Ǟ5qXԢZBC:B{UQ_Bl-[e k0)QSb!Lil;5pAm0z `c1=t*CCEL=NdOJ5KIOBo8+47!T3~-|0H,OpT98' . "\0" . 'E>J.0b60,H>TaxY)l!dh-re!QDve>(s8]Sbutex\'l |x"(;kK&b8&qӾڼ!CL' . "\0" . 'k#2E R Dr1{%O 0"|GGU ݋;֋R̝n)QNj(-6? + txh%^Ԛ,u{RT*W q"jW>N~AE\'}\\[k_Ɨ%}l?G v1U;\\s,8r Mжʤʞ? JTgTAM31yEQspFQD%_kGrR +h4YW5[F 4xfꦖ }{GJ{u@qy' . "\0" . 'jCΆmizֆ9YoltEÖX[rr"@olzJ{9 ^J7G?xx:{Bh' . "\0" . 'Zy6z/z +ƹIĀKO' . "\0" . 'T7/W;]}x]wt➻{!1pqiu +<' . "\0" . 'T14KC1>|^Z7Jֽ,#P%!wPst_%yFRU2+&JIl桐DUCRmZ.% T"6tнF%Iֆ5t+K)B (B@2BkMMtE\'uT_[_"6^-!Eʧ1G/- +!n676+[{K{P*2d}х(eUx =o{' . "\0" . '3AeHoZ7N v)!%|("0+0ҳ +ͻO1w eAϚ$2 㵀MM69}O)!Y*-wyZVWMg+' . "\0" . 'YCJlIRй G@ A1*$wS`hּ S1t@?X%`!;`o3Ծ1HH(anP܅ڥȣ>>I!y딳o4k Ct' . "\0" . 'or\\ٞ3>rec)0B,PxIIy51Re$4cr| $"k TJ,޺zmBKϪWQg +-2U4+yb&VJ +-y:]gZzccuNR&1Y?Owk3E(9a[ZȜ8ޖQc8Ȍ\'/{jy2vեeLG/LꇥV&9vBlhK<RŏGRWjX78"pAHEjUBD +#< +&v@Q]̓@Ŕ几kjigmK 6r9Gv]JDW_9]_s#\\C"w*ZH\\˽_zyvwYwp=Ypy}W]~tcE,-H0ۅfY ;>8_>]ݷoe:8y0z ӳʬ$[50 n4-' . "\0" . ' tŢvrrԪ6i/L!~ ?e`ؽ941=\'B,AˆǹŠr~ ' . "\0" . 'Tp8LB:+8"QbWXi1x`U + #\\:^>Y($JQf,OGԏ=bs`lz Ÿ=$tԅ{TV=U[F"#O U pWYnzkh*8HvAyMƼ_X8+l0|%~pNH~HFo;\'\\zuz̟!w|?w|=ws`[۵ߘ]P\'Lh]="]T|[.2_}DoؓF +s̊ʗKvخ"1.*L2?]E]IT +HZv7Q9s 6VbU4{eT%ESא/e|偲3Q;i|6zP*̃zSToրA5N%@B:NoGxbhS-}N&gj*{]URhJG/Dg4tō@nߊI8PgCFu3˴ 5DwQ-ֿ1җ(dH/oz"{X׷=F)oU=%/8]{XֿXvsdBMjq!qWf;D]lyN؃-,$Fj[IkQ51X.1DX;O QraWwʿl=)n t܏Mh{fx(6K/) \'>1SoxDK뜻=G5r;n%3iofTMTVU[?빠c+!b7[ ҂}l%|hgBuwL[`g6' . "\0" . '^gx}$O]_獆:RvG~Cܟ~l 8$MF_bYTx~2o۱+9X ljN̤d1eT?̒5N>$^ˤ]q"`ḍ>@6/]e+0܍oB*&X -KW.,,y/6ޥ(^DNwzeU*/P,uAWǘ6oQWҮDsDNYr!a6 +Eѿ>*\\Jg' . "\0" . 'fb2#ڿovQ:K)w9,T\'ZLZF*ŧTf b8IiJODI&ʥ So;$Ivᢉz96!0mLGK,S[Qdz>8M/' . "\0" . '0UmtTnf GEE*' . "\0" . ';`S^r&J_"PZeӕ@  nɂ(Ljk˰˲F35 ="&2<\\Nz6hZL&̀L]CuHp%}ĘUB]d+uIocw%SBIn#U +%.ldp7k<| WMu$D [DZ}njԾjU^˿ͳQVr}؟{ikCf:{*$Q63HUW0g,ʝgq]Onb* Aw25Ch/ypUn(4 taSFd~Y݋:xRX mC}s|C0٠c2}1?tH<ˡU~|Ĩ@GɠEb{EnٙEVE `ly˩K`H]{NZ=!1\'Hx ק<ڊ%y~fQKF9$玠L' . "\0" . '^HX +(DK(D=kH +#a-\\bJs|Io/]:KWgoaP:ik:m{> +On]J 7,GLZԥ9}VmʦtKdeB)cL 04X&ʺ\'WC v5k ^펙=;' . "\0" . ')ʮ yI?JՊQdW֔բK*uHId.ǖz,+AuВq}+JU?/_E?WeˏdݓӿwC=]Zu3?k=x3X$%#j]m_ K#jl /GJ7ZWKal9aC7wVj*ݷ۶vknݧ9XjNC7ɠ@ s@U)- |+qpאVtcJZtb^#G]ŏ،uvGZ\\[4 -rSA~N}P.E \'i^`*% AQyrkcz &\\cRE/}%JNQ+B0CeMnokRX|LĐEL U;b^3Kc +U 9-֛p' . "\0" . '&rz)[[ㇿ{>' . "\0" . 'O Ne RJBz=~X|"qBmh.QF2 #z(rQ[-{>-C^?V~N6 cmAd' . "\0" . '4HS0z-Z[uZdž+8, NFʞ CC[ T' . "\0" . 'l`.~BUAݳ-Q{-78X@K˃[iC5̄W%4;(ݥbPu4dKJtX!F +)>NHe(V¶aިʶp1VTڇRXR "ً,p}oR7Y.vJ{&Rr M CoVɊi' . "\0" . 'x^~U/VEtb(88މ~WTYRL&qU=\\Q+и(8w&Y}&w7y۽\\].}͹{8[ +B +0j&f•,_avD1i%gGGۘ+d-n\\N?tn0>+ěQAAk/n%?|Yi 6t])}qQ{xzB?v߹ >U&@1 +\\R +}' . "\0" . ',' . "\0" . ' +S9 wʀ_̱s2!ԓ772wOi^hǏ' . "\0" . '𩆨ח A£r\'$iT0n|<){1L\'I/t"5\\kwQ) )\\KIxjqWˡ-ςm摃Y`Wx?;' . "\0" . ';V(&`(%(6\'w/6\'$- (>9U7PxY - Xo[\\FJp>TG>M܀!_iCvfj7HxXsW60P! \'"OW,/ЮDP ĜigׄepFg1IfruS%Zo P\\")DU 4,ɖ +S\'1S*,TZ Fm\'`?JUuY^ fٌfش$bHd5}U Ϻ*HA`moOQ֨2Oi-8xdV\\Mk]}݋(\'t6ĪUBj:!^+i)kwL42' . "\0" . '| γǀa6 +x::n t,{dtYXamg\'y/0}K{/+(|HrB;wBF,3t{#u[dE\'eqG" 2f2={ȲySnDuR ?:PKq}H*A#yZR\' @˩:_  ثstT +0L.Q9;Yq^^ 9ʓT +݈m`@| +0̓eDx&&Q&+mrdTL) ñED];NPļcH4ǣHXz_3Ę,I .X' . "\0" . 'ѕSk/}&:C:;ͤ!KE)7Dyc4J`Otu/]vk@rfuׇ\\"r _zIŔDMWGKDʂ}_ KV@z .\'ZWu83Z>,-QЦ##P,DJi!uJe~9\\.?\\}^( 4|OnP.Kjhc)SFQ%vX!=/]=%Ɔh9y}Jqw=M_>_t 3oA3%tL|Rpz}=ڸH4ieqh%"- wZ$ub͙q#3t4g*Dc, &0 GW@GRFydi??)*TWC.{DTW1m1ZX@I ѧf26<t4oA|nX,̈́q +RAN6퀤4ӲW/-:ïB ݨe3Db +/Hz,f #/Z^H@&/ϊ Ch~ S;)hWX+A`+ǜW@ѣ&AW%g\'̌GuS˫<*| +]B@w#' . "\0" . 'D=eyv,;WX˄\\μ,Eį}T(;u>׸W/Ju؁a~fYN̉17ӳ' . "\0" . 'auv)Z"t;bKJ]{pI +>,!Q?44j~̅PL䋙gNyv#WTƶ&FZL<)\\M +A?`V\\' . "\0" . 'QB-}F +L}V>&d/Z1T#Au>T4)wZ@/:$7p/:,)~_6jއ$ \'Kסܡ`1&e_' . "\0" . '݀s.s8^<}-eeAG\'y0H(2z>W&n!O(KAÎ*S񵗎pӒhER\'k?:% c5_v!G2Nw\'>a-{ M3r=-VruFWϰveYwf`TB6%f5)d#T_њa!n\'ȶ1IoR&+L 숡r~M#9J&_7Ea:FYc$gI|A[fִ-$](伹wX4AظetB"' . "\0" . 'oTNA\'7`pfs-j+Oo0wB_}3̙ѻZ:s' . "\0" . 'Gfu}MKP;\\tgo/3w.mG~}~&hK$~{uSk׮p`|T7cY!N_g>ڎO7?H-1꜌W m<3EJGu]GGFr 5bY ANH1ֹ.k`ϋtu*QGRgJ=:۾"Pz0UC&D>5.iA3DOu[Ʈe]T=wJJJG7BUzuc4DHHg0' . "\0" . '3;DUU6zU@ҫOj+_tjT5 +=(5-\\I;p[qn2' . "\0" . '^tW~ez,S»V6#Y{atv7!u-uKRuTriojBQ|y1&`ngT1G 6p=O<^;??:y#.z^+j([<+/~ h\'ޝBEtXIZ ĕzL"A ~b*8' . "\0" . ' ]:c{/Wd #o 9=k +d,V]hjĠ8MaSReA}{h D9Ԥ~Iu!ÂUے4""Yqcax)-nt}[ٳd7X_+` HӤ3)oalY-`o/`{DU -ordl{!y DqlĴ"_[u}XI߾txfM_ٌG , tOfxfOٳ#Wb , \'}~&It偾b+W&@MBo[cTXMF"f,v!!Rm_Tx} zH un ʼ}vs=zޝ^==V}9ZN$0RݵL2>(pp]M@b+O?*pyЮetk~}3tB퀁 Pg EtM" {eC͚Сjݴz%AD:ʐժ^ ؋lӟz!9Rdt-t>HO~-2Mn22|qsބ&;\\"з\'1A,a]x@r)-/^?J/8g*T3Ͱt#ZR{+ +Ǫ;Mms@}KQX\'/lˎՂt ӭVP-oI$qי$[o5dZup!ӘJ! %;)ﶻ ay:uު6SWF#!Sk`h= ;^:KUyœuܐ_Z[4^_o|)&f@[@B(/:8WR藼KwtU5D Ђ1 ʢ#]HԃX`_fr-|yUt|(9d5l(*o݆F +&#XvQ7X ~sGpߦmõ, +TBYKs>isԫGG/dQX<i{z]Mi"~yr5,6 ~h(.- ԔV/]UZaRCⓂ"bvkr(E|a:C-ą-P"[n\\޶iyD\\m .ؑgMP' . "\0" . '*P듗ß٠Y7lZ 2CAE/頵bwWU,WK8l%c䐊HXT@<E&D dY5m+ʀÊR$: +b3YQHҸGԐi3Nv8~C0DSKvY7feNQ:a{#@EIBU38xF6`(%Ib6~a]!Zэ4?Q\\օ\\:+&)@rӈ>x 0Bqš1Q7R 8\'qRUX(-%"76Z!!8k]m]_RpRK_\'՝ Q֒iS5Ӻ?Ը*Jfuu:2+qeU>due5\'' . "\0" . 'K~{2s):ZTkn.#%>;NU75(DsTkV?#B6kTFr uZ\\dW\\Nϓl<`g}]*w|vCKUi$>tw*H:ÇG5];ɮբt2֎"r!zQiM8 Fjn(vnSZS;KC3.͋l6j7z)j+i!KGZ@ey&%j} BvVP]yzr=\'W) s!LON`% oAT{"HJ\'1F U[A}2Zlԫ63b̄@A߁q\'gGAI6C"Տhg0' . "\0" . 'vd"5<4@c!XoC 1F*Ѩ~T KvY hJ.B#Nx@{eiЗؒV j6G{FP@C|&l{K5o+"BYeb{} +ˈ)B\\ +o#aY>fz{!ޫF2sya_s* -~z}j2b9YI~<<_ Z.8VSTsƎ!*,' . "\0" . '-tBd0p6 ;TTQs#xU.{]g%i:yc& +0YW0-P;lKfKZ85f#X=XՋK6h)lJ $`RO!Xfk%0H ]1Z(S;zV=uFB:kE F T.n= &V+[\'ºm4DBDxIo#p/ez%2ݺpuqC/ yYCZJؕ|Z5z3U7-2Y4C)ˎZ֟>`p>zSF6;qc-&6b]ix *ժѩe\\t !+E.-tyeq*x޴t Rz(TQyFI?v}Jƃ,鲝q塿6"ҐWKS3j ' . "\0" . '8JKwi"ݞNR+VԚSŪpH|ɇkEz%*VN}W%(|>tQA\'1#@oєN ^l`51CD#ǾFS֑? . ӡ(UDlw+JR}\\kyl^t])pzXh|V-(mm~W]]n7d%TCl勺"ݧf %?7jvRYܬ?>RN#&2\'Ss2cD] plVsn t@8\\1vpOo(lg]&<\\GdTJ!k;bM{vc3N2"6O;xg%ԕa۴?1|~$Ɏjw5]MYeu}\\)np{hnEkOvYv +VRjK>e KQ[q1|#I?- 7;= 8уpd4 P0jt4?(~7(?vJ e,2E"4F<@P?ͣ7m-ҼOhgn + +}@X,ab5iohYBohN84|8[9\' I7WE}4b] >0ہ;z:ɦ 1WմI1h7y3O' . "\0" . '% h`; eE4@خ?6 []s{Xg=8ehi>\\ưd6:}\\|~q8ؙNz۵g+_Bɸmv׏/E ًuѲ3l$֜[ѓS!@Xbյv=\\4oDb.}تkum+TOWwTGٻVWDg +@ǰNFa$sӡSq4G8MdY/oʔ~;HGص|;ZqkDkߕck0v;B5]<èP9C=I!zh%|=+gGg-\\zZ,.qݤIsH"^HlwjghuWZ+ktfu{^ ++UE_zt;B)$ZN܊+x,@9 yM",Y`l`kThA9՗ҦIICsx18;|Ϛ"rjn' . "\0" . '`fbKd!"8JZ}V¬aY#XC6 ~^g/7^X.䱅fK&lHMOೣt *4ϋK`y%[(v!TQFHK &j܃gja\\ʎ9kh6bp=vM;er +EIA3M\'7m g C`Gb84nfOUg⭠ky +[({AN[o@ǣ~uy,Y jmᩨlZTo#K k7\\};WyyhtQKN JS-"dɸHF[;VX^Qxg,sѝz^.Z| +a=ӖE_~MnO\\ʆ.KwR*n>K!WCm9ϒp +%$gN7' . "\0" . 'l \\1C@K&}l`$餼0lZ[s\'7p-Olvđ*-Q XiܧL&y%Ըt+W$shoE:wh[۶VfYfi+rܷןn<ݪIFП^ +˖ +zlzV mmgTV[;V36YɈ= 0)); +define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); +define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); +define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); +define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); +define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); +define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); +define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); +define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); +eval(gzuncompress('x]w(E[Ѹ1ESIK,kڑ-IN&GRdSbLnʲYwp]K. +&)3d\'lP' . "\0" . ' +BP(tIQDhrQ1Mtti=ziM@^Tl>~y>95"G^tnhM' . "\0" . '0mгgǩ ("' . "\0" . '?ؑn6.kf籕L5 Ɉ7vAO|N ocF"j$/D^' . "\0" . 'Z[ä~8(n>L:S57y%g,w_&l0(&k7pE6v^y6 >&GtnN?i{8g_Ŭ8H|9?||A$ˆp`21f23&QөhwQ!|[ U!\'μR@, BKQH~K] iZr[oX M &u' . "\0" . '~ɩHL9Duiҽ*%' . "\0" . '>. .EM;~˃B\\ # | Q[uBf_ S P]D]C,P2(+`lLܱp͵M*K;7WN֠*Ԝ +nXJ0llBy\' O*a04K\\LW>?,' . "\0" . 'N{WT;\'x0 +.el) f3Lin6%qʹEK3.eA/&J#PT "dRɖ"EN3>PA墂ˆ[M?fl lŵna㛑hH!$ ZbƋ(R#x@+J+\\E̞`,8/~yݏ{8;?h䠽wi\\{l|5jƺ%d +P Nu' . "\0" . '/S,&tBO"X C_R H|-PXEb>y8ʧdBӏbtaL Ii]/[^W~^%5d`0+!RvA4+ mc{PNE]y}TZv VNqzk+JcQ㊪@JjƺVJgS9LjZSbs@D>E) DU@I(X^3dMʾ +VGhVt b6CM ۏvWYKU-vT%ͥWJ#Tl{2' . "\0" . 'q=#柕 ^nRuơZPYvF; jQ:LŚOs#K| eq&<ݤף_jXqqy + O@lD+1|)r[)eTr@8R|oY Dr"K?Ɣg' . "\0" . 'cėZiI$_ԬO5@`/W7eL:C@5aZ.9vV0L_Sʮ9xZZ@C&4WfUsXnE1j}*EosM6Z3ӛ|bڢwH3b ,{7ƅ7_׫ .%ѿŏKR4K8jY|JEH)ĵC&zb5ʈ#%IJ%U J#^;O +V[\\`olJr1zF-vZD>SG5$CIb&n*`Hr9yT*P؄ŕΓ1#>KeqHʐUmY=e.R$f0R~sB[2ȴ{8,3]g4=HqMFM*sm3=4j%~ĻY2y Ʉ4|%Va6Ji{L0ңEۂ8z]Ye䚯f[yKG+"El6}=gB 8X\\F, /vrlsv%}6F֠@L죓 H- "79U +U͢E6|RUo9N{K. $,ѡuR)JĚd;AX1XU6h؁VTՖ;)j p[﮸,er;k! BmN SD()`;Kx +*!ky%D3,Iv_tvUou(9R8/:LB +L*J:zf~EدUA4D@UuUP#ѣjV' . "\0" . 'BhX׋hhPvZqH# `8AH˵+Gp["V||8c>kbIǞq#nGp{IR20B` U|:tQ2X/JqI6~̫;?;x yiχ:6HC=8;;> A흜J_hrOΨͦ[&s#`.f/ QzI Lv;[ Z\\4>@.OiQAwTMJT s1Yd2-kI!p6*N<;-m; [ +0N(LzLXC]hkoa6ˢ\\2 ÇQ?àBec;K$ZdLZЋ/T)I ෥(636yϴ϶pf]nKNX/Png5Cht=R,8Yj,=(Nӿ݈PfkwnS/բ`N +M02 ̥NyI.JK&q|DwCF 2׼Li܍k +7$(m8_N_ĎNw\\ qId +Kh|Nev4mu[]F%ҖBlRтn5-$iL}!m4D{*I<[G9fYknc(fzcB@yˆl|eK6ξҬNϟ)-~w[Y¼p0LVlAQ˾Q&&<HRC;8j\\͉7sH(Lٱ5{=ŝ(.VZ5m[9k:Pld۶+kw4\\"*\\V#Cujvv%KOxJX!|vqhT0G{t !T@avP ;T9IHZU&}EDYvqedeDb`/X4YR*X&*U^!ky4Bv1Or;tØ8"oJwޣ*xʻfeMzzq̗MlM^ibIjA"Ku҂h,*s[ԓ@8mD^%tU/.)dM:d5dZ[SP|f[ _Γ\'Li 0LD + +U^6;w-Swp"9ۗCo<M wjWHS$//~Oc,,WVbsǟ IvdL[ í< (Lp3AY_ PƃQ_GǧA_ׯޜ7Goگ^o\\*C:zuxvpvoVXΦe۳Z` dOx*εN\\X/Q́M7{g~^[ ;yA -vODv_ǩɁXhO}ه/{oeeN_Tut#pGO%ۣR_y' . "\0" . '~w\'9ſhjۣP\'" #;=bGޜF f{:x?9 /&``QWx*839Q%Ǩ3?>ibi|;Ų2&a;"Mi˺ XџQZ >:;!!N/ xUj)`y!c(\\ \'U{@\\d!m(\\Fvt];,QL`6M2Oa֝:| .O)EFhM^TP^EIzѲ.>5:\'Ff"2# +[i £sT*vTjҮՋzlGaDfSݥtߧHHThX\' 2 o[~dÎ-OR' . "\0" . 'eXJĚ}KQ2ǽB*Lm9zJEJ#ѕtsc _謁jM{`|wvIOn6zJky\'*c0HL3\'\'pD9ql,$֊2 +^x}eՙ%-E >%QszhR=FP]G aeQG&Ox9NsZF?~wJ:Q 63(RkvWRN=f3EfOGŽO]В¹.-Msim*y_>Xv[mժﶤB(zh/+u)c"^?ρHXR6ğx5B)l?Qƺ\'@1)6ƽMƂ3Ϊj&9VXa]tkS\'9񍄛6rXZtp)9uv OL]c?0*&n1q/ Q\'A){ΫF=zW~]G#z4/ +I^|sx5UڛiS\\i*bqYJ׏~CVzK̉u?4 L KmV]I=h#)STx҆h aW9Nm $?, UQ`Sx(~WuJZi|nԢǾƳUw!&OC*qM6,?/Jd+x5U;RV2 +EOe$ Z m:[4$U杶Y) +:ֻ@< AzxdAsB2t{^>M4PKtH!]K.l乌2+(_\\QX' . "\0" . 'f,2)n{$pVȷJvjo7`{yI(рiFI`g+TfA7ݒ~\'ǂ`d8=]QBFa S:ڈN9pC>%x?fK;Oh +m*?MlHi \'4<?o6d⸏G⦖iO{UMQ!^wuc?%cwzIަvGsI ƹ" VdB6SϤƶAĐﯓYCdK0J.oq6|HYM[5 CX*bmwM{=yt}U9y3On=ItNl;m݀P{c{gڎzk 񟓙3M6( vުlT9i: ƚsV7\')iSO\'~rֻL>s?ӎXeݝ5f ap!\'}$9Hb躶ݑn Q% JRLM3b+VRZ=vX@ oKnOPLb~x^zdLzAy(6RdnvUƕ$CĕD7ҭm,?L>/Y|+\'<]|R05y;fDx96[ !VWM[5In .5(GKTK3cƩ.8)=|ue?miyNVwUgp!! !AYXkt\'ngyxd{S77-ɝ`4TZKeGZ% X노KҎU"\\FK\\ *Lg[/壴7VG|{"6.;& MnP{<{<ֻ\',זO:[iʲ\'f_d۽UZa(DOV7q>=;V>}B*^W#8MFbO) +;ԗMؤwq!kfݞˬOL3삝7iq5ҬЉ%PM~I8Fp"`yJۛ\\^t]Fd4zHIvKh)9y[XVS11uRUSSBalw66W)ɺddR=^G#nw6:jEXL1Hc)DZR%H)TW~Hcgo%rre\'}W1 ͻz7]oF؅ynZܤ<G[*7]x4W +T{+@ 9+R8lq[hu<ȯ:g٫bW=Ap[*/w##"#azp_QEx2G6WDF1 +6t? b#' . "\0" . 'ӄǡP 7Et*D(A ` ;8%5&.8b=3k(%⒢DjAWG;/ ګ2VdT*$' . "\0" . ' 5whPBBP{ZjFP vϗbȢtk|O gN' . "\0" . ']@HP䩾E9z\\9z*WF+Us BSYɍz*s%L~,l&L!#V|]RƞQ_*&7L05KqL#*CdMtDX<HC teL7,1^V;\'kqpC _hjojY*xVJMoc+Uр^Ui8ƘCRGȕ߹R ZBk8B5/8>ǝ* +e_ J>Vz&:2aUWGN9LA]%j9R]h)A0^XAo/ >!*JF7<6Qɍ<Im#v~ ujI֞' . "\0" . ')P2^5ϯ0/~6J\' [1=vu=?[7P.//hmɾxcL͛q ehLtX79TM-M=ؖERz??5C;=q7iaR^d}f<(4riWd%Cy +,eBM?kjyfk\'3gT1`U?ȝ<1}*PV"[{(Qx2WRVB|i˲/p+ +?u#{63(ܗ<͌jFhu,ɸ!" a$NU$ !Ф߭J˥Sh1LӉ4ͤOwh}z \'8zS@;TRrpA/.>JEd~E{&~Ѳl^6J6\'߲U8ke-_{YW*UJoE]`süѽ(\' x9cQA ^Bһhf z6<%e-|\\yŨx^8VbJ.IPH[t V n,$GH' . "\0" . '% wQh]*\\fzlcS!z8}[YP{(v @jiq޵U:)6siFRފ?e؆B0\'6Я:.i`L0u6=)4bM|2,zRUZ\'%x$Oɇ e\' ,+Eq݋r~q{' . "\0" . '$j QeVYZf86R21iCַiŧˬ.hWٴ`Ԋ99- j{ZzG#' . "\0" . 'zG\\SV$cjywt7R%u 6tE0PHmz|.a+zn0=d-Rg&DalHڪ>V5̼oרݼ +iVLsz>{eaz}|d,|!FՐL&ó"PH,$l)$BlXX8fr<cu9ɧf{T7B~ClA+KlRngCC IBŪ,tL&0x\\d8$?>u`%ay|b + +H]6F `b .8XPK+.' . "\0" . 'A"Y]`VEXKA Ly,w

FRİAZd\'Aж}U8vTu' . "\0" . 'n/r(/upҦUk0"7\'y_dIJuˬ6 4ᙢnVeM9~sw#dmt,L>I>kt5ǽKp+M>Wa۶N\'Z>:̝JB7 Qw?IO>ȁ2' . "\0" . 'w}W:b!6vC3' . "\0" . ' Jڦ፻tXY}BB ѹPEHlkL³:Khړ30JM9PWg ʪ$`.q"w " ٵ*㩯~j5?yK$\'?^Ht0cKpKI\'~e"yOOj)L!HҖ9-d7m hWJ]ccrsuۺ w0Z/\'A0򛃣д wQ9FQm(X<[X_wTz`O\'jXIOv?i~թ|׫EehxX)!whԢj N 8\\Z-?&_2ᆪŢV}fV$N34De~΂M+1s Zg 7=& ߾ G:l%Ω,iR(bo8NB +N{:' . "\0" . '5c jD*eb/O}׻͓զ(bxF XzJHܐإ0+,V!]l\\]pWK7rU;/GxYn\\ӻ[6L x{&v}oBꬣT*A,w5y^(T+O/.GՋxV$L> j/6, +b@SmwL T 1ZB' . "\0" . 'tzU bu0N$uTMgxkxFjn9BPbk\'85;ub8}䗨Pҿ6 -Cr NdI*j#?o]m\\VQMX]mZ:36SrC\\ҳUEd <$(մVv!Sa1AΦlӊ ==e᠘UV`,V "Ptٛ]cz$J6a=P2(Wig٬pJ;~F' . "\0" . 'U2tW$\'t"JY^n_hP~O943CĊ]ע (eߋW.N^bkpZ߇/[^C0iY4R gOfS47ةɇ+j[OGK' . "\0" . 'OSL)2ejyfw&{Rׯy]JHzzX edUT Ilcan@bw‡oP{*f∄C.(,OKf;Aв|!q_|UpHdW惲15U)V\'IO_g\'oe"c+72 V8"cQ %' . "\0" . '@9)s7Zmda' . "\0" . '/3;7˼V)Y4:T9N \'rE~1?' . "\0" . ' 8%T79Җhjԁ ",7ᖕ/R}"`WCf$G&W~ueӸ&`{ի?&*ڽhHux^e\\{]0|rT{7~? #6@V%[\'h,|P=ᗞʻEqk`UcTJd)W3P1cP ag6L HFCj%[P?B*R#oCC<1^+(EևbOh4.ۺǢxHY} +~ۢT-7O#' . "\0" . ' W5ݕ!\\r%n>99b(H\'o +T){%>E+tF.ޛK5Fr_\'pX|u-U*Wg0d0IgT5!֐ne 66/cc5U>j3IŅ\'k%(eIK\'!`oR%&P&E׈VvM=ui] PB=L]*/ % , `nwɫ/Z{@3LTƿĿ^ *Ϩ~QJ@Leye]\\mmT.Gp`ީY<_\\0T8LSNAc+gnj@ *0wQ/ +wG l&yInm؛3v̦Lǡ۴9l-7**> f!Ѽ0eK$k|yvr\'wM,f`|phK Ky|oeGw.?oU-G\'*v/@C74EFeý ;|VҶ얈9Quz +o8BxD$A w21/Jgw3( wޣ*DEЂ q)Lt*zrP4U׍e 5LfS!E6PCelS8|aH(yK%[vZS j|0R Z h-ܞe[Zl=[pO,PSHIMD>F^GP:tJHWP,8##YVa[)#l#ZV5[rS`hYJǢey\'u1J ӝ>U߲фٌ? \'Z>1Tkc(lp~U' . "\0" . 'Z4!P">b=Vj7, 1J^]xQL/$Ȉ[|Hi:0fj +p+,RtbT1+],x@?`+7m>`RXCXNZ҆V1D7)3 L7\'&DEPN +Hcf=D` &gD"FWO& + hFb :cFqO[9B1ne@?I5 .թ.;;AqOUf&f(HU`UVZ!i0ZR$ f c/,u @D{S[8[\'$FP?$ͷ՝[.: ;v>~g-_]v7f m}26ڗȼdw:xVWg{_`#[;d.(6}H..3q +8SO@pQWҦ֢uTn܂U#X}/9|U$7M3xuo7ز{oV+/._\\ +O>=xB=v +95o·-[1 \',rֽtf޾["X]* h7[ yU3ܸª@e2%Vu=?N:y{tl]܃_"=Z.ې#K+`8FV7 j4oƅb]\\r-59w@. E;F+L?ĈL,ޡ#qIeR1yd-\\5s_}q][@{솔Eő6_o¢`&{ m447?픠崼snyq$ϝ_w\\Dyt"CQ((9EZiwe)""d.\'nlLG*q.u5~UZ2 szc$螬~xsBH~^2|+\'vVQ+' . "\0" . '_LK2:pham߲N0 +15C<2ӝ^m Ky1&c9͛aDvX(E@dGrzHإB%ffQ gy== +RYŸ]ԥRaic]N&8Mv# ir-mmz#SUK3B1 4`ha$tR7€d_$pP}xϜm ζI L%(I2=\\' . "\0" . 'ƪYB * +X 3P[Ѓ#""rE0)//|X(-J\\dA]Zcπ5eeYRٚAOt.\' =eyJ-HX^df@&Юѡ:$>xbLV}c`H.{پr߿)p!$~O7*qD62GwHv +Aҫ:]j-vs">D75j_MI_YШ+tW9žezOὴXT! y=QݨEan$f+3β.\'N7W1;վCh/ypUn(4 taSFd~Y݋:xRX mC}s|C0٠`2}1?tH<ˡUA|ĨAɰMb{Eni""_j0Y%0.=v +m{-QRSu~єN%xiį*OiY[޶ߠCppWҢvC^V=bDp7-~f˗ַd0*ܦi[tr)g' . "\0" . '?I/T-FDϓ[c[)' . "\0" . 'z(bA`,wVN8<;AIP6䆃vL*.5zJ;T y_Pe#:0>.]U bӢ|a`"~5~-?77ύmxj' . "\0" . 'OZ-K.>* cY] 53 Di$760ҿج,lQG D+t_<ظV? ]LxUR-|MMS#RiYz/ +%-KXL#JKmTRnu,l]捪l;wI9KhEս}*/%E@Z`)b@ ўx1[;|&5L?1Ӊ}q傐iﭴgR+*"ٔ0, OnWPWlUDAM!C mNʊz:4?yX\\-EqĹ6!ϒ3agbiglݳR\'RQc7<w5d8 $/g + *Ťncwg?lL*;pp1IdؽN@oǻ㳃SFe;>`K{xe)36:74tmJCۍZYwض\'uxo<@2iη&' . "\0" . 'zuW WR}~c9PМ1fU`䝃x @{v' . "\0" . 'hZz}YdṁB' . "\0" . '=<4W8&7I +^@"P81mM&NǙEuMFJZ[x6O0}:ܷjBr͇$G)~Gz' . "\0" . ',d2O?]PEV<9~RKMoqĞ)i!cv.ӳ,7{_Hq7CӶZ[KF +W +PՒ:| +o' . "\0" . ' +]NDxO`^uj%UH߆drovxetٱͺWz2H9qWO$RF lˮSip-#;mp.hbEoa RL1(GH%MD +r:[DYSkE;TAR^|<,eo5M%?\\ 2Q^|jeDgHg>{ɲ:ev(z]F@)8_ݰNx CL0KDO.+W/)S\\hCTPch_Yo0k} +HDg@KPgŵ}<> +tdqpQ)-_5ĺPi>?/ӋŇ˟kwwF)ʥ{Imx,8vb6*Ď^2' . "\0" . '+:$Ug' . "\0" . 'dp-4?b\\3ζ}Ӻp#|нU+|>_Ηa-~ hF?r9bX +NoGV7uÛYɒ&V|]1mU>][>_dNLwӖ93uızL(wL%x#yafv!㨰0 +s;,qWfUw*wW+Uc|="VKY*b+sts⶘J-,LS3 X:n M@s,fBu8z yp_^\'v@RiY+vwlr͖TWn2nCQ1YD  ё-kH%utʗgk!T~_W)NAP4+ ,앃Ћz cΫCQ+o fo[ZCu.s@ ڻ' . "\0" . 'fyޞ<;zeh.gbDGW> y*:k\\᫗UM:RnAo0?,\'ĘF_۰NA : v[a' . "\0" . 'G`և>3\'\\nh0|CH}a-)sa$&SbF*E9.Eᶑ>?#FqWekx̿SYfoeci+zDmzgپVQed+]`j-l:cD*c +-OkAV@/XC ؓ%Pea2' . "\0" . '/nk~/Ʋopߣn$}I}Zup7%àG haGV {)R fy|KfbiI"5O/YҐ#ag;zD]ޏwa_+:܌kgXZ2u;COPJ0*!3qo2*HBhͰ@dۘ7ax)kQ KvP^Z?Imɦ%`/ZS"Z0Xt1пOr}3$g-3k~1ӶJۤ2)EnQq%\\,\' \\[(WU>׽0QK;X Ԓdv1c ~Yޖm!DPjگ5ŕ`a/5/Kfsm)k*x:([REkA[ᄫ2ʒZc㓃Kt C:Znӟ"a{p7 B}÷"ed>Im]y#/hX x2~kWQʕ#6zC)nv;oXYdEl*`kٹ\\TٗܯXp+ Tݷ!T7j\'Tz4=okr_}[CT܈Pq\'oxUݗ|hz2ˇZ?K"<[5x)&( {誂\'" $i60)9+%_P2C-f^)fafЄߗRI\\6FjK(II;xH2IږUeGݎX_;G4RJdVMKK/ >-$](伹wX4AظetB"' . "\0" . 'oTNA˧7`pfs-j+Oov1w:B_}3̙ѻZ:s' . "\0" . 'Gfs}=MKP;\\tgo/3w.mG~{}~&hK$~{uS{׮pprT7cY!N_G>ڎO7?H-1꜌W m<3EJGu]GGFr 5bY ANH1ֹ.k`ϋtu*QGRgJ=̺۾"Pz0UC:SD>5.iA3DOu[Ʈe=T=wJJJG7BUzc4DXHg(3;DUU6zU@ҫOj+_tjT5 +=(uS]v )5? .JEd*' . "\0" . '2ZEfX)wm0&WGh,;:jBYGt~+RlE=bMONΨb jmjҽ?x|wwvxFv]:z%:)WxP`f<`@o5#}"N.U^9zw* +Q=:iN6W"36yiȎG0p#v=_\\54-Я!*!Xu!r4yMIKAX4D$ PZu$}Z VmKHdalOІ j|㥐T緺Mgoy*gz]Կdb^c]a+% Mӳe;+eUr/@Kbɑ-ō ӒeL6naf&A~fӅ7~Ed3,|0p/c=eZF?eώS8^2tϯ,"$A}ޖ +B٫\\' . "\0" . '5={.g m]LRPb5 ۅtHwRQB4Z7ѻ" 6Թ78v*yt~wzp~y`eTio`e}4{)yG@$⬖El222ŅV,US"GXu/ C9;hF˫L|5c,]j"2`92qb#Bj!|HAy>VN)s>H` cex7}^w3EXù*v)W7< f@ѭEJP ).@C>-`2@ַd7sѹ37a,k 5kBuӾ(CVVz%`/겱sLVAXb@JɓH#O?i.#/4\\8WgȄ{p@ߞu}$&طs\\{(g.dZPp[P 6ҍhI(@[vw\';X\\4Ai' . "\0" . '5.GadB--N~*[$% +ZBEI2I⚯3I<$k$ɴ C1A;Cy +u`Rs' . "\0" . ' 151tpS2;),i2Hq%;^ύ}aFMDp.VS1ӫ4w/pPE4ev@f28\\Fa5A=3DQݢ"S p,t?eqd8TKe\\I^b@^R~ÕA ZyQi; V\\85Wuq>rF"<˦ހ?PZ_xwyeЖjJ*0(OIA]1T5i9C"p3@-ą-P"[^\\޶iyD\\kh3:Ro^' . "\0" . 'Z(˃Ogl,P B vBvX!pЦtZ#g*᫭ `Q6FR1rHE$zjh Xx }sf"U2lЋ6ZceaIQQ~^eqН.>$y|.ҡ45dZ S Ԓ^ōY+f4=lAԤNވWwQҺPlheEE:bFQM䆼7">1J"-{ReM,uexrW>èVt#v柨Y.Ћ +B.|9iD<!H8AaM|SvZcuP8*DOBU,Lǖ- 6ͮA8%N +ïj+$HG"`yZgiʹ5Yv+ENJ?o\\_ՇY]Y/a&Dd%@tR_~%\\4FdJ\'UFZ>[y`ӧUyq)sZ+85ְiXD6m PU՚mM8 Fj^(vnSZS\'KޛC3.l6j7)j+i!K;GZ@ey&\'j} BvVP]yzr=\'W) s!MJނvEnOch79fd@ C-63b̄@A߁q\'eGAI6C"Տx g0' . "\0" . 'Z2pU1אZ7XoO-8tɗVIO5R?Fjw' . "\0" . '!IPjX;͇H?w8H?ҏak<' . "\0" . 'MtՃUdc.~wz' . "\0" . 'Zv̮ B d8J!eZ> t`Jho̞ߍ2SaSWnt(; 6 Z$b4Azb hUEȟ~y/+FAq/DG1YW"s٭[]Z!M:R' . "\0" . '\'/;Y%pd]ɧ_0Xq"CqYO9r{2bY=k1Jl(WVN-檦/M8} X)Jtir;uʪXy#/,JSAG=d8{BPB+vtKCz^.OAk4Zq|T4s3MfZQkO!F^!}\'-=R#(\\Uh0gk7JP}䣂N>>cGߢ);ٝ K%48jb$ܳ6:G} A+-  ӥ(UDlw*JR}\\kSyl^tY.pzXh|V-(mm~W]]N7d%TCl勺"ݧf%?7jNRYܬ?j O^)&I7mJZȽg~d4~jqpwh95j-rh(z+NN-ślػ dGK, +Z)dmsu}%?nW>6ifQdɤŨƓ;|XdݦNo%t/W>w+u WѣhMZ>ftR󵒒XJ(X1؃qŐ\'Ml=jAGIOl\\dBE0d+=zIDtR#' . "\0" . '' . "\0" . '/ӿ&Nq!S^ bLQGs <[Z8\\Kn +v E@LFk"gez_ô?e4,WbH|{SN3K' . "\0" . '' . "\0" . '&N-i4:[UQXu~>tl޵bi1聿jtQd޼\'ϒKd9`7Mejp \' 憐UV#8V֙Iih@*&V.bX+Qr>.>\\=8n3q!t|~^kFu!էO>ܥ-{}YB' . "\0" . 'hM/ve@wޣ/k&%lR$Vz&Z?kCXYյ=LdR4哥뺂(Ý֟\'꒬\'>m[ޤ"ӣi.&1Ci#ZY݌66XU1b0! UF![pu;ZWqeZрKE\\r.EtT(եIwôQБ8|!VN1{J7zô||/)J"z1@@pwگ\'/aP za3?O0*fʘKKĚc/}|q!Kf"|?>n#PP%uլE$G$^fFgK7*eYz3&!ǟ +@R҄H쳭o*YR\\o4[Ok1XQyM~]_[%WcTsr5v.ȹ|L>wC/Ot|HץK[\'WY< )*\'m4`M% -,6dn]tHΉ ~3@K)nwQbyq,/l +h].FT,Bw\\)߬/7Qb11gUF_8' . "\0" . '-|tܪ!&TV!֞\\ԟ-  Q峹1KUMl-B[ؽt/kÈ4;n: 54K4\\`Vv<1h_cmV֢%)k ~' . "\0" . '^vWsUOW uAVXԨ85cLV0iSha[o +~ƺG)\\7JAmH0 +뛶$J,(?"`kj~R^rv7x= +>-luTVd JVM' . "\0" . '-h8<\\!;ƀkDr@tZ^4;uD\'Lo8zgNh<@?LӼ _U"Vjcf:mS+q v[? Xmubg:ŽLhY~Rlk²2zd~߁C`H SP>?qI)ͧO eh1:(8 $`_My̯x f ow?Cs#П'));// diff --git a/vendor/kint-php/kint/build/kint-solarized.php b/vendor/kint-php/kint/build/kint-solarized.php new file mode 100644 index 0000000..dabda1d --- /dev/null +++ b/vendor/kint-php/kint/build/kint-solarized.php @@ -0,0 +1,155 @@ += 0)); +define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); +define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); +define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); +define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); +define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); +define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); +define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); +define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); +eval(gzuncompress('x]w(E[Ѹ1ESIK,kڑ-IN&GRdSbLnʲYwp]K. +&)3d\'lP' . "\0" . ' +BP(tIQDhrQ1Mtti=ziM@^Tl>~y>95"G^tnhM' . "\0" . '0mгgǩ ("' . "\0" . '?ؑn6.kf籕L5 Ɉ7vAO|N ocF"j$/D^' . "\0" . 'Z[ä~8(n>L:S57y%g,w_&l0(&k7pE6v^y6 >&GtnN?i{8g_Ŭ8H|9?||A$ˆp`21f23&QөhwQ!|[ U!\'μR@, BKQH~K] iZr[oX M &u' . "\0" . '~ɩHL9Duiҽ*%' . "\0" . '>. .EM;~˃B\\ # | Q[uBf_ S P]D]C,P2(+`lLܱp͵M*K;7WN֠*Ԝ +nXJ0llBy\' O*a04K\\LW>?,' . "\0" . 'N{WT;\'x0 +.el) f3Lin6%qʹEK3.eA/&J#PT "dRɖ"EN3>PA墂ˆ[M?fl lŵna㛑hH!$ ZbƋ(R#x@+J+\\E̞`,8/~yݏ{8;?h䠽wi\\{l|5jƺ%d +P Nu' . "\0" . '/S,&tBO"X C_R H|-PXEb>y8ʧdBӏbtaL Ii]/[^W~^%5d`0+!RvA4+ mc{PNE]y}TZv VNqzk+JcQ㊪@JjƺVJgS9LjZSbs@D>E) DU@I(X^3dMʾ +VGhVt b6CM ۏvWYKU-vT%ͥWJ#Tl{2' . "\0" . 'q=#柕 ^nRuơZPYvF; jQ:LŚOs#K| eq&<ݤף_jXqqy + O@lD+1|)r[)eTr@8R|oY Dr"K?Ɣg' . "\0" . 'cėZiI$_ԬO5@`/W7eL:C@5aZ.9vV0L_Sʮ9xZZ@C&4WfUsXnE1j}*EosM6Z3ӛ|bڢwH3b ,{7ƅ7_׫ .%ѿŏKR4K8jY|JEH)ĵC&zb5ʈ#%IJ%U J#^;O +V[\\`olJr1zF-vZD>SG5$CIb&n*`Hr9yT*P؄ŕΓ1#>KeqHʐUmY=e.R$f0R~sB[2ȴ{8,3]g4=HqMFM*sm3=4j%~ĻY2y Ʉ4|%Va6Ji{L0ңEۂ8z]Ye䚯f[yKG+"El6}=gB 8X\\F, /vrlsv%}6F֠@L죓 H- "79U +U͢E6|RUo9N{K. $,ѡuR)JĚd;AX1XU6h؁VTՖ;)j p[﮸,er;k! BmN SD()`;Kx +*!ky%D3,Iv_tvUou(9R8/:LB +L*J:zf~EدUA4D@UuUP#ѣjV' . "\0" . 'BhX׋hhPvZqH# `8AH˵+Gp["V||8c>kbIǞq#nGp{IR20B` U|:tQ2X/JqI6~̫;?;x yiχ:6HC=8;;> A흜J_hrOΨͦ[&s#`.f/ QzI Lv;[ Z\\4>@.OiQAwTMJT s1Yd2-kI!p6*N<;-m; [ +0N(LzLXC]hkoa6ˢ\\2 ÇQ?àBec;K$ZdLZЋ/T)I ෥(636yϴ϶pf]nKNX/Png5Cht=R,8Yj,=(Nӿ݈PfkwnS/բ`N +M02 ̥NyI.JK&q|DwCF 2׼Li܍k +7$(m8_N_ĎNw\\ qId +Kh|Nev4mu[]F%ҖBlRтn5-$iL}!m4D{*I<[G9fYknc(fzcB@yˆl|eK6ξҬNϟ)-~w[Y¼p0LVlAQ˾Q&&<HRC;8j\\͉7sH(Lٱ5{=ŝ(.VZ5m[9k:Pld۶+kw4\\"*\\V#Cujvv%KOxJX!|vqhT0G{t !T@avP ;T9IHZU&}EDYvqedeDb`/X4YR*X&*U^!ky4Bv1Or;tØ8"oJwޣ*xʻfeMzzq̗MlM^ibIjA"Ku҂h,*s[ԓ@8mD^%tU/.)dM:d5dZ[SP|f[ _Γ\'Li 0LD + +U^6;w-Swp"9ۗCo<M wjWHS$//~Oc,,WVbsǟ IvdL[ í< (Lp3AY_ PƃQ_GǧA_ׯޜ7Goگ^o\\*C:zuxvpvoVXΦe۳Z` dOx*εN\\X/Q́M7{g~^[ ;yA -vODv_ǩɁXhO}ه/{oeeN_Tut#pGO%ۣR_y' . "\0" . '~w\'9ſhjۣP\'" #;=bGޜF f{:x?9 /&``QWx*839Q%Ǩ3?>ibi|;Ų2&a;"Mi˺ XџQZ >:;!!N/ xUj)`y!c(\\ \'U{@\\d!m(\\Fvt];,QL`6M2Oa֝:| .O)EFhM^TP^EIzѲ.>5:\'Ff"2# +[i £sT*vTjҮՋzlGaDfSݥtߧHHThX\' 2 o[~dÎ-OR' . "\0" . 'eXJĚ}KQ2ǽB*Lm9zJEJ#ѕtsc _謁jM{`|wvIOn6zJky\'*c0HL3\'\'pD9ql,$֊2 +^x}eՙ%-E >%QszhR=FP]G aeQG&Ox9NsZF?~wJ:Q 63(RkvWRN=f3EfOGŽO]В¹.-Msim*y_>Xv[mժﶤB(zh/+u)c"^?ρHXR6ğx5B)l?Qƺ\'@1)6ƽMƂ3Ϊj&9VXa]tkS\'9񍄛6rXZtp)9uv OL]c?0*&n1q/ Q\'A){ΫF=zW~]G#z4/ +I^|sx5UڛiS\\i*bqYJ׏~CVzK̉u?4 L KmV]I=h#)STx҆h aW9Nm $?, UQ`Sx(~WuJZi|nԢǾƳUw!&OC*qM6,?/Jd+x5U;RV2 +EOe$ Z m:[4$U杶Y) +:ֻ@< AzxdAsB2t{^>M4PKtH!]K.l乌2+(_\\QX' . "\0" . 'f,2)n{$pVȷJvjo7`{yI(рiFI`g+TfA7ݒ~\'ǂ`d8=]QBFa S:ڈN9pC>%x?fK;Oh +m*?MlHi \'4<?o6d⸏G⦖iO{UMQ!^wuc?%cwzIަvGsI ƹ" VdB6SϤƶAĐﯓYCdK0J.oq6|HYM[5 CX*bmwM{=yt}U9y3On=ItNl;m݀P{c{gڎzk 񟓙3M6( vުlT9i: ƚsV7\')iSO\'~rֻL>s?ӎXeݝ5f ap!\'}$9Hb躶ݑn Q% JRLM3b+VRZ=vX@ oKnOPLb~x^zdLzAy(6RdnvUƕ$CĕD7ҭm,?L>/Y|+\'<]|R05y;fDx96[ !VWM[5In .5(GKTK3cƩ.8)=|ue?miyNVwUgp!! !AYXkt\'ngyxd{S77-ɝ`4TZKeGZ% X노KҎU"\\FK\\ *Lg[/壴7VG|{"6.;& MnP{<{<ֻ\',זO:[iʲ\'f_d۽UZa(DOV7q>=;V>}B*^W#8MFbO) +;ԗMؤwq!kfݞˬOL3삝7iq5ҬЉ%PM~I8Fp"`yJۛ\\^t]Fd4zHIvKh)9y[XVS11uRUSSBalw66W)ɺddR=^G#nw6:jEXL1Hc)DZR%H)TW~Hcgo%rre\'}W1 ͻz7]oF؅ynZܤ<G[*7]x4W +T{+@ 9+R8lq[hu<ȯ:g٫bW=Ap[*/w##"#azp_QEx2G6WDF1 +6t? b#' . "\0" . 'ӄǡP 7Et*D(A ` ;8%5&.8b=3k(%⒢DjAWG;/ ګ2VdT*$' . "\0" . ' 5whPBBP{ZjFP vϗbȢtk|O gN' . "\0" . ']@HP䩾E9z\\9z*WF+Us BSYɍz*s%L~,l&L!#V|]RƞQ_*&7L05KqL#*CdMtDX<HC teL7,1^V;\'kqpC _hjojY*xVJMoc+Uр^Ui8ƘCRGȕ߹R ZBk8B5/8>ǝ* +e_ J>Vz&:2aUWGN9LA]%j9R]h)A0^XAo/ >!*JF7<6Qɍ<Im#v~ ujI֞' . "\0" . ')P2^5ϯ0/~6J\' [1=vu=?[7P.//hmɾxcL͛q ehLtX79TM-M=ؖERz??5C;=q7iaR^d}f<(4riWd%Cy +,eBM?kjyfk\'3gT1`U?ȝ<1}*PV"[{(Qx2WRVB|i˲/p+ +?u#{63(ܗ<͌jFhu,ɸ!" a$NU$ !Ф߭J˥Sh1LӉ4ͤOwh}z \'8zS@;TRrpA/.>JEd~E{&~Ѳl^6J6\'߲U8ke-_{YW*UJoE]`süѽ(\' x9cQA ^Bһhf z6<%e-|\\yŨx^8VbJ.IPH[t V n,$GH' . "\0" . '% wQh]*\\fzlcS!z8}[YP{(v @jiq޵U:)6siFRފ?e؆B0\'6Я:.i`L0u6=)4bM|2,zRUZ\'%x$Oɇ e\' ,+Eq݋r~q{' . "\0" . '$j QeVYZf86R21iCַiŧˬ.hWٴ`Ԋ99- j{ZzG#' . "\0" . 'zG\\SV$cjywt7R%u 6tE0PHmz|.a+zn0=d-Rg&DalHڪ>V5̼oרݼ +iVLsz>{eaz}|d,|!FՐL&ó"PH,$l)$BlXX8fr<cu9ɧf{T7B~ClA+KlRngCC IBŪ,tL&0x\\d8$?>u`%ay|b + +H]6F `b .8XPK+.' . "\0" . 'A"Y]`VEXKA Ly,w

FRİAZd\'Aж}U8vTu' . "\0" . 'n/r(/upҦUk0"7\'y_dIJuˬ6 4ᙢnVeM9~sw#dmt,L>I>kt5ǽKp+M>Wa۶N\'Z>:̝JB7 Qw?IO>ȁ2' . "\0" . 'w}W:b!6vC3' . "\0" . ' Jڦ፻tXY}BB ѹPEHlkL³:Khړ30JM9PWg ʪ$`.q"w " ٵ*㩯~j5?yK$\'?^Ht0cKpKI\'~e"yOOj)L!HҖ9-d7m hWJ]ccrsuۺ w0Z/\'A0򛃣д wQ9FQm(X<[X_wTz`O\'jXIOv?i~թ|׫EehxX)!whԢj N 8\\Z-?&_2ᆪŢV}fV$N34De~΂M+1s Zg 7=& ߾ G:l%Ω,iR(bo8NB +N{:' . "\0" . '5c jD*eb/O}׻͓զ(bxF XzJHܐإ0+,V!]l\\]pWK7rU;/GxYn\\ӻ[6L x{&v}oBꬣT*A,w5y^(T+O/.GՋxV$L> j/6, +b@SmwL T 1ZB' . "\0" . 'tzU bu0N$uTMgxkxFjn9BPbk\'85;ub8}䗨Pҿ6 -Cr NdI*j#?o]m\\VQMX]mZ:36SrC\\ҳUEd <$(մVv!Sa1AΦlӊ ==e᠘UV`,V "Ptٛ]cz$J6a=P2(Wig٬pJ;~F' . "\0" . 'U2tW$\'t"JY^n_hP~O943CĊ]ע (eߋW.N^bkpZ߇/[^C0iY4R gOfS47ةɇ+j[OGK' . "\0" . 'OSL)2ejyfw&{Rׯy]JHzzX edUT Ilcan@bw‡oP{*f∄C.(,OKf;Aв|!q_|UpHdW惲15U)V\'IO_g\'oe"c+72 V8"cQ %' . "\0" . '@9)s7Zmda' . "\0" . '/3;7˼V)Y4:T9N \'rE~1?' . "\0" . ' 8%T79Җhjԁ ",7ᖕ/R}"`WCf$G&W~ueӸ&`{ի?&*ڽhHux^e\\{]0|rT{7~? #6@V%[\'h,|P=ᗞʻEqk`UcTJd)W3P1cP ag6L HFCj%[P?B*R#oCC<1^+(EևbOh4.ۺǢxHY} +~ۢT-7O#' . "\0" . ' W5ݕ!\\r%n>99b(H\'o +T){%>E+tF.ޛK5Fr_\'pX|u-U*Wg0d0IgT5!֐ne 66/cc5U>j3IŅ\'k%(eIK\'!`oR%&P&E׈VvM=ui] PB=L]*/ % , `nwɫ/Z{@3LTƿĿ^ *Ϩ~QJ@Leye]\\mmT.Gp`ީY<_\\0T8LSNAc+gnj@ *0wQ/ +wG l&yInm؛3v̦Lǡ۴9l-7**> f!Ѽ0eK$k|yvr\'wM,f`|phK Ky|oeGw.?oU-G\'*v/@C74EFeý ;|VҶ얈9Quz +o8BxD$A w21/Jgw3( wޣ*DEЂ q)Lt*zrP4U׍e 5LfS!E6PCelS8|aH(yK%[vZS j|0R Z h-ܞe[Zl=[pO,PSHIMD>F^GP:tJHWP,8##YVa[)#l#ZV5[rS`hYJǢey\'u1J ӝ>U߲фٌ? \'Z>1Tkc(lp~U' . "\0" . 'Z4!P">b=Vj7, 1J^]xQL/$Ȉ[|Hi:0fj +p+,RtbT1+],x@?`+7m>`RXCXNZ҆V1D7)3 L7\'&DEPN +Hcf=D` &gD"FWO& + hFb :cFqO[9B1ne@?I5 .թ.;;AqOUf&f(HU`UVZ!i0ZR$ f c/,u @D{S[8[\'$FP?$ͷ՝[.: ;v>~g-_]v7f m}26ڗȼdw:xVWg{_`#[;d.(6}H..3q +8SO@pQWҦ֢uTn܂U#X}/9|U$7M3xuo7ز{oV+/._\\ +O>=xB=v +95o·-[1 \',rֽtf޾["X]* h7[ yU3ܸª@e2%Vu=?N:y{tl]܃_"=Z.ې#K+`8FV7 j4oƅb]\\r-59w@. E;F+L?ĈL,ޡ#qIeR1yd-\\5s_}q][@{솔Eő6_o¢`&{ m447?픠崼snyq$ϝ_w\\Dyt"CQ((9EZiwe)""d.\'nlLG*q.u5~UZ2 szc$螬~xsBH~^2|+\'vVQ+' . "\0" . '_LK2:pham߲N0 +15C<2ӝ^m Ky1&c9͛aDvX(E@dGrzHإB%ffQ gy== +RYŸ]ԥRaic]N&8Mv# ir-mmz#SUK3B1 4`ha$tR7€d_$pP}xϜm ζI L%(I2=\\' . "\0" . 'ƪYB * +X 3P[Ѓ#""rE0)//|X(-J\\dA]Zcπ5eeYRٚAOt.\' =eyJ-HX^df@&Юѡ:$>xbLV}c`H.{پr߿)p!$~O7*qD62GwHv +Aҫ:]j-vs">D75j_MI_YШ+tW9žezOὴXT! y=QݨEan$f+3β.\'N7W1;վCh/ypUn(4 taSFd~Y݋:xRX mC}s|C0٠`2}1?tH<ˡUA|ĨAɰMb{Eni""_j0Y%0.=v +m{-QRSu~єN%xiį*OiY[޶ߠCppWҢvC^V=bDp7-~f˗ַd0*ܦi[tr)g' . "\0" . '?I/T-FDϓ[c[)' . "\0" . 'z(bA`,wVN8<;AIP6䆃vL*.5zJ;T y_Pe#:0>.]U bӢ|a`"~5~-?77ύmxj' . "\0" . 'OZ-K.>* cY] 53 Di$760ҿج,lQG D+t_<ظV? ]LxUR-|MMS#RiYz/ +%-KXL#JKmTRnu,l]捪l;wI9KhEս}*/%E@Z`)b@ ўx1[;|&5L?1Ӊ}q傐iﭴgR+*"ٔ0, OnWPWlUDAM!C mNʊz:4?yX\\-EqĹ6!ϒ3agbiglݳR\'RQc7<w5d8 $/g + *Ťncwg?lL*;pp1IdؽN@oǻ㳃SFe;>`K{xe)36:74tmJCۍZYwض\'uxo<@2iη&' . "\0" . 'zuW WR}~c9PМ1fU`䝃x @{v' . "\0" . 'hZz}YdṁB' . "\0" . '=<4W8&7I +^@"P81mM&NǙEuMFJZ[x6O0}:ܷjBr͇$G)~Gz' . "\0" . ',d2O?]PEV<9~RKMoqĞ)i!cv.ӳ,7{_Hq7CӶZ[KF +W +PՒ:| +o' . "\0" . ' +]NDxO`^uj%UH߆drovxetٱͺWz2H9qWO$RF lˮSip-#;mp.hbEoa RL1(GH%MD +r:[DYSkE;TAR^|<,eo5M%?\\ 2Q^|jeDgHg>{ɲ:ev(z]F@)8_ݰNx CL0KDO.+W/)S\\hCTPch_Yo0k} +HDg@KPgŵ}<> +tdqpQ)-_5ĺPi>?/ӋŇ˟kwwF)ʥ{Imx,8vb6*Ď^2' . "\0" . '+:$Ug' . "\0" . 'dp-4?b\\3ζ}Ӻp#|нU+|>_Ηa-~ hF?r9bX +NoGV7uÛYɒ&V|]1mU>][>_dNLwӖ93uızL(wL%x#yafv!㨰0 +s;,qWfUw*wW+Uc|="VKY*b+sts⶘J-,LS3 X:n M@s,fBu8z yp_^\'v@RiY+vwlr͖TWn2nCQ1YD  ё-kH%utʗgk!T~_W)NAP4+ ,앃Ћz cΫCQ+o fo[ZCu.s@ ڻ' . "\0" . 'fyޞ<;zeh.gbDGW> y*:k\\᫗UM:RnAo0?,\'ĘF_۰NA : v[a' . "\0" . 'G`և>3\'\\nh0|CH}a-)sa$&SbF*E9.Eᶑ>?#FqWekx̿SYfoeci+zDmzgپVQed+]`j-l:cD*c +-OkAV@/XC ؓ%Pea2' . "\0" . '/nk~/Ʋopߣn$}I}Zup7%àG haGV {)R fy|KfbiI"5O/YҐ#ag;zD]ޏwa_+:܌kgXZ2u;COPJ0*!3qo2*HBhͰ@dۘ7ax)kQ KvP^Z?Imɦ%`/ZS"Z0Xt1пOr}3$g-3k~1ӶJۤ2)EnQq%\\,\' \\[(WU>׽0QK;X Ԓdv1c ~Yޖm!DPjگ5ŕ`a/5/Kfsm)k*x:([REkA[ᄫ2ʒZc㓃Kt C:Znӟ"a{p7 B}÷"ed>Im]y#/hX x2~kWQʕ#6zC)nv;oXYdEl*`kٹ\\TٗܯXp+ Tݷ!T7j\'Tz4=okr_}[CT܈Pq\'oxUݗ|hz2ˇZ?K"<[5x)&( {誂\'" $i60)9+%_P2C-f^)fafЄߗRI\\6FjK(II;xH2IږUeGݎX_;G4RJdVMKK/ >-$](伹wX4AظetB"' . "\0" . 'oTNA˧7`pfs-j+Oov1w:B_}3̙ѻZ:s' . "\0" . 'Gfs}=MKP;\\tgo/3w.mG~{}~&hK$~{uS{׮pprT7cY!N_G>ڎO7?H-1꜌W m<3EJGu]GGFr 5bY ANH1ֹ.k`ϋtu*QGRgJ=̺۾"Pz0UC:SD>5.iA3DOu[Ʈe=T=wJJJG7BUzc4DXHg(3;DUU6zU@ҫOj+_tjT5 +=(uS]v )5? .JEd*' . "\0" . '2ZEfX)wm0&WGh,;:jBYGt~+RlE=bMONΨb jmjҽ?x|wwvxFv]:z%:)WxP`f<`@o5#}"N.U^9zw* +Q=:iN6W"36yiȎG0p#v=_\\54-Я!*!Xu!r4yMIKAX4D$ PZu$}Z VmKHdalOІ j|㥐T緺Mgoy*gz]Կdb^c]a+% Mӳe;+eUr/@Kbɑ-ō ӒeL6naf&A~fӅ7~Ed3,|0p/c=eZF?eώS8^2tϯ,"$A}ޖ +B٫\\' . "\0" . '5={.g m]LRPb5 ۅtHwRQB4Z7ѻ" 6Թ78v*yt~wzp~y`eTio`e}4{)yG@$⬖El222ŅV,US"GXu/ C9;hF˫L|5c,]j"2`92qb#Bj!|HAy>VN)s>H` cex7}^w3EXù*v)W7< f@ѭEJP ).@C>-`2@ַd7sѹ37a,k 5kBuӾ(CVVz%`/겱sLVAXb@JɓH#O?i.#/4\\8WgȄ{p@ߞu}$&طs\\{(g.dZPp[P 6ҍhI(@[vw\';X\\4Ai' . "\0" . '5.GadB--N~*[$% +ZBEI2I⚯3I<$k$ɴ C1A;Cy +u`Rs' . "\0" . ' 151tpS2;),i2Hq%;^ύ}aFMDp.VS1ӫ4w/pPE4ev@f28\\Fa5A=3DQݢ"S p,t?eqd8TKe\\I^b@^R~ÕA ZyQi; V\\85Wuq>rF"<˦ހ?PZ_xwyeЖjJ*0(OIA]1T5i9C"p3@-ą-P"[^\\޶iyD\\kh3:Ro^' . "\0" . 'Z(˃Ogl,P B vBvX!pЦtZ#g*᫭ `Q6FR1rHE$zjh Xx }sf"U2lЋ6ZceaIQQ~^eqН.>$y|.ҡ45dZ S Ԓ^ōY+f4=lAԤNވWwQҺPlheEE:bFQM䆼7">1J"-{ReM,uexrW>èVt#v柨Y.Ћ +B.|9iD<!H8AaM|SvZcuP8*DOBU,Lǖ- 6ͮA8%N +ïj+$HG"`yZgiʹ5Yv+ENJ?o\\_ՇY]Y/a&Dd%@tR_~%\\4FdJ\'UFZ>[y`ӧUyq)sZ+85ְiXD6m PU՚mM8 Fj^(vnSZS\'KޛC3.l6j7)j+i!K;GZ@ey&\'j} BvVP]yzr=\'W) s!MJނvEnOch79fd@ C-63b̄@A߁q\'eGAI6C"Տx g0' . "\0" . 'Z2pU1אZ7XoO-8tɗVIO5R?Fjw' . "\0" . '!IPjX;͇H?w8H?ҏak<' . "\0" . 'MtՃUdc.~wz' . "\0" . 'Zv̮ B d8J!eZ> t`Jho̞ߍ2SaSWnt(; 6 Z$b4Azb hUEȟ~y/+FAq/DG1YW"s٭[]Z!M:R' . "\0" . '\'/;Y%pd]ɧ_0Xq"CqYO9r{2bY=k1Jl(WVN-檦/M8} X)Jtir;uʪXy#/,JSAG=d8{BPB+vtKCz^.OAk4Zq|T4s3MfZQkO!F^!}\'-=R#(\\Uh0gk7JP}䣂N>>cGߢ);ٝ K%48jb$ܳ6:G} A+-  ӥ(UDlw*JR}\\kSyl^tY.pzXh|V-(mm~W]]N7d%TCl勺"ݧf%?7jNRYܬ?j O^)&I7mJZȽg~d4~jqpwh95j-rh(z+NN-ślػ dGK, +Z)dmsu}%?nW>6ifQdɤ5w;xI_O]e_)ɺM;SGwk[۝ZKnkIg{Y-;Ǖ:χ_&n-IVnrV :)xZII_hk,%D,E](bVDJK̓h6  $˧xj~6.2gԢxqt$T|:)q_?Dɸ)/Sj(' . "\0" . '9iIokfyxI3[NrM )g$1AXÒZ~5n^m!iAM9!{<8l' . "\0" . '[:7oUQX~t=YMV&=-KfZ z!欚>4ym7pF >b~i8 w{SYZ9\\^뵵1`T Gߪ:32‘-@HE gs0JŇGGʹ]{&"5."2NoY~xh' . "\0" . '4?/ǘ3f/;K( pI3h{4̈́ ]:z#ZO_kG|m+IL_|c]W}:䒬\'>[ޤ"ӣi.&28Ci#ZY݌66XUVdӪX%1LsȀ`_QHyV5\\ݎVG+⟆-Um\\Aj4{W\\+s=#iJm">muum1- cv$#ĤoȄT@hR0-#4g z^ P_]9 cKjl,Tì^? +2俩4EP=_\\Ȓ=+zϪ[I=ԴzIqjUk Q"x!ٟQҏJ]" QzgPBج}uN9kUfSy-=+*OбKڀl+ +ވ jNYJ9o_`Gn{5婐vti#Ǖ!2[glB4m"\'9 # )bF-fO -#M_]+ +g%F55d!' . "\0" . 'Ygj+9qnE9' . "\0" . 'kr.7`>la&sKlDrN9ggϨZJIgt3dެRϋ`ygP@3Bs4`)BLTո J}uua lɎ9h6bp=gl[K 0"HD& pla8`= 0)); +define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); +define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); +define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); +define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); +define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); +define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); +define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); +define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); +eval(gzuncompress('xmw mE&MZ,9ly%94ɦĘd3ݤeǣ={p?<}K. +/&)3dm6P(' . "\0" . 'BP(:(?Gs4NTLg9%Am nF|0ꦽd:"\'/[Gf:]+i>{AG[,&Pw{P~1$Zd' . "\0" . 'ٰ#xʳlB' . "\0" . '%y|T$EƓɨvEf/~5Ϣ$L٨-~R)Eqw:՚<ɓNH}H~hY\'Yq&\\\'y sO^M3Dpfd}t|ry!q ,dla.(3dPo:"QhwQ!|[M +g^)asKD($߮x4-9-7, }:' . "\0" . 'TQXΦN)Q]tn +8)@ +,Nt{ރ]CHo .tibE!Y3 TT.!H(le 06]&8zsz&vEu-5 +5gVL6zl-ہPPAuE5IY*V QsS51؊\\-%FӡhH!8 ZbƋ(R#O+N\'+\\E̞^$8/~yݏ8??8lY\\{l|5jƺ%d +P Nu' . "\0" . '/S,&tB!X C_R H|-PXE?b>y8ʧdBҏbtaL Ii.\\v~KjT-fA!T0C삂i2RfB-(ɩ}ia9[Mf|WƢ8<U}:܍uΦrLSմĜ%DMqD},%S03Oqw|eQ og$r\'ɨf=k}ZC\'P*PliۏVSYKU-vT/ͥWJ#Tl{2' . "\0" . 'q=#柕1^nRuơZPYvF; jQ:OĚOs#+| eq&<ۥ_jXqqu + O@lD+1|)r[)eTr@8R|oY Dr"K?Fg' . "\0" . '/bWZiI$_Ԭ“Oc5@`/W7eLڢC@5aZ.9vV0L_Sʞ9hRZ@C&4WfUsXnE1j}*EosM6Z3ӛ|bڢH3b ,{SbBv̯U?Dh_u) %3+`Gub5R;R +q-IXG22f2l yN9HĪSՖ% \'$d\\ ^롩n3v<Qi lrI5\\<F<@C/9! +6!dq%z ~YfC2$`xUjs[V8+&fYfIYj%ԮӖ 2do(o7Y>IG`OR~hчd0M}%r&bBď4KƗ0/!Б&Rи +3Fi1i IG4nY|e>@vO1Y 5e;UB7%"֢FM4`:`f]gE{Qp\\2bDa +`RTGw0kjˣSFc3vhǠ,/jx٧@<Ś8JhCn3DZ%X/!NKQ7=@Qt-SHN !UVH,o}"Z4fhӗCay-P5yaĒBk%SXf.#+q4;97f +wf~EدUA4D@UuUP#;ѣGլ`A tx?ӶhhPvZqH# `8AH˵+Gp[Dv3 +Zbmq8`^}Ē=Gݶ$e`@٫("$uN`Ke_- /lWy46l(&WN?5#T{b_i]VS{ c ]\\锢X;,WY)ח\'ᢡ 5Uc_iQlV%힝5(V7nܚ[VUv>a3T*L A#!EC@5PR P` )kQYaL;4R ϣ9Qڧf IN6eh4lBA-FɲDJ-h0AZ>?_ t0Ns Kl醊\\ ]A+fuDgg7\'oj}' . "\0" . 'ڰ{zr~xp~A qӮuCm8y{x~rj?=3 O] 䞝SM㗷L6mn%G\\&^21v$:8nA`11i| \\<4BMI[,b&.e[<\\7B[-U>L<=--; [ +0N(LzLnX\\@=hkoa6ˢ\\2 ÇQ?àBec;K$ZdLZЋ/T)I ෥0636yϴ϶pf]nKNX/Png5Ci>B 3ih!y|VQT,fMjr8DW% +UR}p!#V7f^}Ge$Eކ)ҧZ/Kإd$<1LE|5dy0fV$)}oXh!%\'h35AiU֪U:΂&TAҔRPJQc:".y,DDaxR2/GNRgҁڔWFGbẉf r %uAtvb:d#>U2^;IkAdN|ƓB;c^4*ЅlGAFwLYbeOhbe]fnJerjH}w5FKU%CFeV>FCXM~0 H8UVVxy 5 yڙx :@XХ^Pha/_᥽鮳4gJ/3F05/[CԲoɃ\'y.ҧ/W`s"(܇j. +wwms]dq\'yfUV xۢG AV#(?Y +| / H( +W&ȐG]Z]@SA_(.F~q$42Q^(]FCFg%PTCUNR,#+\',`I_iQ&QV鴝jo~Y-mw j0- r +xJWDȶ8=' . "\0" . ':)YP "MofZe%5Hd\\Y^eS[WXҪ,}e}PR )KGܖYYhd &8:Ad+uIocw%S+OYxdFw΁hT䳥HcxfyYſdM!2kH),ޖ(P cEVnPBE4_ \\=rXY:idU2' . "\0" . 'p' . "\0" . 'jIC0~VVˉk +ʂ:ujQ3x&c!)屾{>(ǨGKJQ)u${' . "\0" . 'ᚮ) *"S¥' . "\0" . 'Hp=oga-(:m#go  =s^+z3 1L)uàp\':{$YI?P' . "\0" . '=L[҆L|::K.[ V L\'fBGmޮLSRN U;[pIɠeˈh+;BEP H+,DH +jt+0T* p_sh+ r("RQlG&7ǩR,Yʎzt틆BHӦR[iћqf6OݣP$@Fe x\\W +DI$ЄCGC죗b7\' +2gK:>JS?ɯ޼ tI[^;_z 5qSrtzH򑝝__|wo^w#~C=x?VG<M=?H00(+l\\+Ŝc@hV44bY0V܋xZڹ.xwzgvOI |f5^GՇZJ8X^G`H l.ư0 +Ix^3YH÷8 +W]! eF}{\'S$M F/ug˓}&A5x|5 \\Jʫ()Z/ZŇF$CLDoy#]a`+ DQx4sJю2xV:!]WڵzQ(LL~ +1GK!hm-Z-)_BW quU>Ͱ zdl#%[U +)QWCPZe$kj*\'l;V/l +R@Ll"5 }5Ty$yU>ռAqh+Ar!* rǺz޲' . "\0" . ' wWAa@5i({d Zt[@ +P2J2Ro|쐋0WVkw~"L' . "\0" . 'ɦÂZZVv*4E(- PM!0)J=**;8mLҮ(PDjF"JLK)4X.źŢT' . "\0" . '=9 8?;>x _͘V ܮ5:v%2;47XLZ*CF< 2>[Qݝ=;|<8!}3\'I:L\'eoxf͝*/8͒Gόbe6V,,|K≚Fx20LL|Sb? +1GB% !ls ƛx8 eoqh1ύSEu{k~dta]M.b`Cت-Rx5r2ZF5^hT +~ʁ\'%%iNz9 +U4.xgj%Xyϐ5+@uJ/wyi%|vY8CYQFRbmf%D ɫ5X{1F#,S8 o,).S0&Cd{F07 ʼgVRyV\\T2eK8RzZWB_q]|emJwq|2 ϼNc*xC)1->hX\' 2 ow>1[' . "\0" . ' Z+ʰB5=)x " 39*A +DWQ׍>&|)7]+1.+\'=ydN<:;\\*8呟+q3vıZ+WT(z|Tgb.t_9FTD48FE#]1:$h-/ۊ4ycqG$r߭w4' . "\0" . 'e 8CU҉%maTdDePmDk蟕Z;WNr1+, o)*5#x:vEއEpihKkP{j%YXIJbeums-V}%EɨC~Y=K׶B9EWş!«H!d[ٍ2֍>aBp}9N 4n2tqV%PK47ɱǚ 2]C:ωo$ 1ҢL1io[6~Rd!d}U19w$m0ک JWt^]7ѻ"G8dG>ңxQ0Mu +՗oO믩ޜJs/M>WxЈR~]bNK/ \\.gbx^2hRJAI6 Ld' . "\0" . 's0z({wr~xf glX&aIR @䓼R[THJv5>0- !`< 5˲ǎ*}勯~=WHYɰ#=yFC[4Pj/騧oѐTwf *vXԖ&9`:cA +sTs9z4B-fq6R"twQ.ֳ2p' . "\0" . 'ꮴ~JpE-bq_l <Ȥ7k' . "\0" . '/{!YA{0o>Q%ߦM}y&h4Si$e0Hn`߁z N*q`bnI/`y|PU#An2f.t)WxYH)mZ;]!Z\\KLOY&qwBj +6{OsӂQ!s2ADt}\'\'͆LHԲt3ܢ?xJv?,@nSdU7nt6p(WjLF{ +4ض62#XM/k趟l5Ŕ#-)issaKEiCwn;Ou:*\'O"S@^ӭ\'Iր^PjolwM1Po!s2`fBb\'LOٻ똓q9guN/Vm=tr\'gkδS9zt˳ē\'OiI$Ms:ע_*>Ԓ@-aZ/ew]va0ZLPd8z)t[[.ч؈r o\'4L7,tI6yxwOVY-ӔeaaX #7P6h3nn|#{v>]}(%TyZq ŞSLwJ/YIoc-C̒]Yf;_ m0kYyҖNpD8ٔ m 3D V9N#4&NL6Jt[e8DTe:!t-d|Jƚ.p {Tp"`~JTu|./:rx0&.vnrJqN#T0Z_\'OLET<098y2ub.n' . "\0" . 'h} ܉ 6 M_b9Wߤ =Xt Gb' . "\0" . ' +W, j\\n5(0\\۱&QMG]i)]TZ+Z=֫esZ[н iI&pd6jN"J[*G}MכQ2`D74Aі(MWb$DUb^9bmJ9[9\\1yUW.\\˝ABL``0t0IJ("CfiH;HDgԗ +iI:mS? EMp\\(JhY1B(ê2Ѓ]Y> KL$%n pՎɚmei*L *MM-\\Y-+V*[im|x c*2ЫJV -sx(Y52c;WA^P Vh GhU0S[ᵌ+<[)gYZG7j*7i>=]>QM|=gC 80= QӡcҬh8-&౑4(z_@Ln7`MjupLf3P+L G]N1G2vy~|u!P>f o5ߊFﱫG1޺2uyy9GkKwcjތSPDܔ(Ccú̡/hni)ƶ<~Oe.G0yUQtWN C"3A3Lc\'=/ X-n΋g-+T`)jYS6[;9c"~!F͎ U*|Cr>ekgꭗ +K[|[QU?A4?pfTC7L_F c M h\'Idvr7mCh^&S\'? & nP\\.8EAI&}jTCc\'&)/>z+F}ˣ@ +-ıZ&t"վB>Z$%@u#o- z[3ϻW_"fߞ/~u6G Ί4lT|SbBeAoD˓S +rTww3\\ː"Jp()yE^5^R.)O]% yDk/mh8nBRS;S6j`Z @AUe}!nA \\#E䎳@X: +hkz6 _~d2.BWZߌtEu ϪpQM&:"ZihDԛle-@홢 K|}mJOyVؠΥJ-{+,Cc +&O@F' . "\0" . ' e 19)Nlf vЈ 6I4h6I6W98k_u>%"0q$,G.գl 2DZvBz6q!m1OO/>\\fPvAC,e<ϥ̦+VVɩn\\OP#+/>/' . "\0" . ';r"{|Pͻ㸩-f‡u-q^7H[ť w%.BFjӫs [U\'tQ?!oTl<0 zd[eC2VдeU-HFmXAMbJSիٛW , ֫㋿$+oU5{evߣ*`je Z' . "\0" . ']b+:t;jw"XHdt74.%Vdc2hr\';!...{.iޏy(({"]pwڐ17:`!@.ctD#D`d%v9?Xb/-2Q,#$$3E1o8$' . "\0" . ';f$S75+bcX8I&T]сԞ̅"%KՆ1@VaJ1`*T3$۵b)$tL2ead$ʯH)I~]oIm:jA"Qh:7Ҭ,uc|AϔGyٯk6uZ53%KR^fIf u[r,ߗ' . "\0" . '}nɛC o/&;hcqgIYl?]R[ivh ݶu5t־N=$7|EH9`dT)s9N$}iG9qm Y' . "\0" . 'Q655 oܥ x2f\'.L:w.jDzf[c +=YBS-מa.Qj馀?\'lPV$\'pɼNFXȮׇTO}uSk]$["yN>HEꦃ[["N">+~H~TKq`*ETm!C iqD#b7Uk㔖Mme@+z9(98 +M˚}5>cՆJ՟ j{eNuIz[q"˭fYԟd +wZD_v?7aşbrvI-ڨ ``5n(C;[,**i7loE4COTFǪ/,H9 tлZy[N15?mϙy ̾pS~c"=n;[pΆl}Zj@)(.B&)$ [dn7z P=!` J[6)?L6F9X1Z( 0z  O$m3۠BmÈ`P{B 4E)vPJ, +@9.W5pَ V7 czDRGt捷*kF.Cn, ,qSS\'sЗO~ +U/j2$ +' . "\0" . 'F$X6CEk9nUՄ@>PZc@|ujV.~Kzl$P +*v~1=&HٔMrZ:Gl5z?SʪŪ{4AVB7_;{ScLD~R&l5ѹ\'_fB* ?.=Vi\'Ȗa~ +a^^n^$d_NTWD鞱8p#  8Ǟ5qXԢZBC:B{UQ_Bl-[e k0)QSb!Lil;5pAm0z `c1=t*CCEL=NdOJ5KIOBo8+47!T3~-|0H,OpT98' . "\0" . 'E>J.0b60,H>TaxY)l!dh-re!QDve>(s8]Sbutex\'l |x"(;kK&b8&qӾڼ!CL' . "\0" . 'k#2E R Dr1{%O 0"|GGU ݋;֋R̝n)QNj(-6? + txh%^Ԛ,u{RT*W q"jW>N~AE\'}\\[k_Ɨ%}l?G v1U;\\s,8r Mжʤʞ? JTgTAM31yEQspFQD%_kGrR +h4YW5[F 4xfꦖ }{GJ{u@qy' . "\0" . 'jCΆmizֆ9YoltEÖX[rr"@olzJ{9 ^J7G?xx:{Bh' . "\0" . 'Zy6z/z +ƹIĀKO' . "\0" . 'T7/W;]}x]wt➻{!1pqiu +<' . "\0" . 'T14KC1>|^Z7Jֽ,#P%!wPst_%yFRU2+&JIl桐DUCRmZ.% T"6tнF%Iֆ5t+K)B (B@2BkMMtE\'uT_[_"6^-!Eʧ1G/- +!n676+[{K{P*2d}х(eUx =o{' . "\0" . '3AeHoZ7N v)!%|("0+0ҳ +ͻO1w eAϚ$2 㵀MM69}O)!Y*-wyZVWMg+' . "\0" . 'YCJlIRй G@ A1*$wS`hּ S1t@?X%`!;`o3Ծ1HH(anP܅ڥȣ>>I!y딳o4k Ct' . "\0" . 'or\\ٞ3>rec)0B,PxIIy51Re$4cr| $"k TJ,޺zmBKϪWQg +-2U4+yb&VJ +-y:]gZzccuNR&1Y?Owk3E(9a[ZȜ8ޖQc8Ȍ\'/{jy2vեeLG/LꇥV&9vBlhK<RŏGRWjX78"pAHEjUBD +#< +&v@Q]̓@Ŕ几kjigmK 6r9Gv]JDW_9]_s#\\C"w*ZH\\˽_zyvwYwp=Ypy}W]~tcE,-H0ۅfY ;>8_>]ݷoe:8y0z ӳʬ$[50 n4-' . "\0" . ' tŢvrrԪ6i/L!~ ?e`ؽ941=\'B,AˆǹŠr~ ' . "\0" . 'Tp8LB:+8"QbWXi1x`U + #\\:^>Y($JQf,OGԏ=bs`lz Ÿ=$tԅ{TV=U[F"#O U pWYnzkh*8HvAyMƼ_X8+l0|%~pNH~HFo;\'\\zuz̟!w|?w|=ws`[۵ߘ]P\'Lh]="]T|[.2_}DoؓF +s̊ʗKvخ"1.*L2?]E]IT +HZv7Q9s 6VbU4{eT%ESא/e|偲3Q;i|6zP*̃zSToրA5N%@B:NoGxbhS-}N&gj*{]URhJG/Dg4tō@nߊI8PgCFu3˴ 5DwQ-ֿ1җ(dH/oz"{X׷=F)oU=%/8]{XֿXvsdBMjq!qWf;D]lyN؃-,$Fj[IkQ51X.1DX;O QraWwʿl=)n t܏Mh{fx(6K/) \'>1SoxDK뜻=G5r;n%3iofTMTVU[?빠c+!b7[ ҂}l%|hgBuwL[`g6' . "\0" . '^gx}$O]_獆:RvG~Cܟ~l 8$MF_bYTx~2o۱+9X ljN̤d1eT?̒5N>$^ˤ]q"`ḍ>@6/]e+0܍oB*&X -KW.,,y/6ޥ(^DNwzeU*/P,uAWǘ6oQWҮDsDNYr!a6 +Eѿ>*\\Jg' . "\0" . 'fb2#ڿovQ:K)w9,T\'ZLZF*ŧTf b8IiJODI&ʥ So;$Ivᢉz96!0mLGK,S[Qdz>8M/' . "\0" . '0UmtTnf GEE*' . "\0" . ';`S^r&J_"PZeӕ@  nɂ(Ljk˰˲F35 ="&2<\\Nz6hZL&̀L]CuHp%}ĘUB]d+uIocw%SBIn#U +%.ldp7k<| WMu$D [DZ}njԾjU^˿ͳQVr}؟{ikCf:{*$Q63HUW0g,ʝgq]Onb* Aw25Ch/ypUn(4 taSFd~Y݋:xRX mC}s|C0٠c2}1?tH<ˡU~|Ĩ@GɠEb{EnٙEVE `ly˩K`H]{NZ=!1\'Hx ק<ڊ%y~fQKF9$玠L' . "\0" . '^HX +(DK(D=kH +#a-\\bJs|Io/]:KWgoaP:ik:m{> +On]J 7,GLZԥ9}VmʦtKdeB)cL 04X&ʺ\'WC v5k ^펙=;' . "\0" . ')ʮ yI?JՊQdW֔բK*uHId.ǖz,+AuВq}+JU?/_E?WeˏdݓӿwC=]Zu3?k=x3X$%#j]m_ K#jl /GJ7ZWKal9aC7wVj*ݷ۶vknݧ9XjNC7ɠ@ s@U)- |+qpאVtcJZtb^#G]ŏ،uvGZ\\[4 -rSA~N}P.E \'i^`*% AQyrkcz &\\cRE/}%JNQ+B0CeMnokRX|LĐEL U;b^3Kc +U 9-֛p' . "\0" . '&rz)[[ㇿ{>' . "\0" . 'O Ne RJBz=~X|"qBmh.QF2 #z(rQ[-{>-C^?V~N6 cmAd' . "\0" . '4HS0z-Z[uZdž+8, NFʞ CC[ T' . "\0" . 'l`.~BUAݳ-Q{-78X@K˃[iC5̄W%4;(ݥbPu4dKJtX!F +)>NHe(V¶aިʶp1VTڇRXR "ً,p}oR7Y.vJ{&Rr M CoVɊi' . "\0" . 'x^~U/VEtb(88މ~WTYRL&qU=\\Q+и(8w&Y}&w7y۽\\].}͹{8[ +B +0j&f•,_avD1i%gGGۘ+d-n\\N?tn0>+ěQAAk/n%?|Yi 6t])}qQ{xzB?v߹ >U&@1 +\\R +}' . "\0" . ',' . "\0" . ' +S9 wʀ_̱s2!ԓ772wOi^hǏ' . "\0" . '𩆨ח A£r\'$iT0n|<){1L\'I/t"5\\kwQ) )\\KIxjqWˡ-ςm摃Y`Wx?;' . "\0" . ';V(&`(%(6\'w/6\'$- (>9U7PxY - Xo[\\FJp>TG>M܀!_iCvfj7HxXsW60P! \'"OW,/ЮDP ĜigׄepFg1IfruS%Zo P\\")DU 4,ɖ +S\'1S*,TZ Fm\'`?JUuY^ fٌfش$bHd5}U Ϻ*HA`moOQ֨2Oi-8xdV\\Mk]}݋(\'t6ĪUBj:!^+i)kwL42' . "\0" . '| γǀa6 +x::n t,{dtYXamg\'y/0}K{/+(|HrB;wBF,3t{#u[dE\'eqG" 2f2={ȲySnDuR ?:PKq}H*A#yZR\' @˩:_  ثstT +0L.Q9;Yq^^ 9ʓT +݈m`@| +0̓eDx&&Q&+mrdTL) ñED];NPļcH4ǣHXz_3Ę,I .X' . "\0" . 'ѕSk/}&:C:;ͤ!KE)7Dyc4J`Otu/]vk@rfuׇ\\"r _zIŔDMWGKDʂ}_ KV@z .\'ZWu83Z>,-QЦ##P,DJi!uJe~9\\.?\\}^( 4|OnP.Kjhc)SFQ%vX!=/]=%Ɔh9y}Jqw=M_>_t 3oA3%tL|Rpz}=ڸH4ieqh%"- wZ$ub͙q#3t4g*Dc, &0 GW@GRFydi??)*TWC.{DTW1m1ZX@I ѧf26<t4oA|nX,̈́q +RAN6퀤4ӲW/-:ïB ݨe3Db +/Hz,f #/Z^H@&/ϊ Ch~ S;)hWX+A`+ǜW@ѣ&AW%g\'̌GuS˫<*| +]B@w#' . "\0" . 'D=eyv,;WX˄\\μ,Eį}T(;u>׸W/Ju؁a~fYN̉17ӳ' . "\0" . 'auv)Z"t;bKJ]{pI +>,!Q?44j~̅PL䋙gNyv#WTƶ&FZL<)\\M +A?`V\\' . "\0" . 'QB-}F +L}V>&d/Z1T#Au>T4)wZ@/:$7p/:,)~_6jއ$ \'Kסܡ`1&e_' . "\0" . '݀s.s8^<}-eeAG\'y0H(2z>W&n!O(KAÎ*S񵗎pӒhER\'k?:% c5_v!G2Nw\'>a-{ M3r=-VruFWϰveYwf`TB6%f5)d#T_њa!n\'ȶ1IoR&+L 숡r~M#9J&_7Ea:FYc$gI|A[fִ-$](伹wX4AظetB"' . "\0" . 'oTNA\'7`pfs-j+Oo0wB_}3̙ѻZ:s' . "\0" . 'Gfu}MKP;\\tgo/3w.mG~}~&hK$~{uSk׮p`|T7cY!N_g>ڎO7?H-1꜌W m<3EJGu]GGFr 5bY ANH1ֹ.k`ϋtu*QGRgJ=:۾"Pz0UC&D>5.iA3DOu[Ʈe]T=wJJJG7BUzuc4DHHg0' . "\0" . '3;DUU6zU@ҫOj+_tjT5 +=(5-\\I;p[qn2' . "\0" . '^tW~ez,S»V6#Y{atv7!u-uKRuTriojBQ|y1&`ngT1G 6p=O<^;??:y#.z^+j([<+/~ h\'ޝBEtXIZ ĕzL"A ~b*8' . "\0" . ' ]:c{/Wd #o 9=k +d,V]hjĠ8MaSReA}{h D9Ԥ~Iu!ÂUے4""Yqcax)-nt}[ٳd7X_+` HӤ3)oalY-`o/`{DU -ordl{!y DqlĴ"_[u}XI߾txfM_ٌG , tOfxfOٳ#Wb , \'}~&It偾b+W&@MBo[cTXMF"f,v!!Rm_Tx} zH un ʼ}vs=zޝ^==V}9ZN$0RݵL2>(pp]M@b+O?*pyЮetk~}3tB퀁 Pg EtM" {eC͚Сjݴz%AD:ʐժ^ ؋lӟz!9Rdt-t>HO~-2Mn22|qsބ&;\\"з\'1A,a]x@r)-/^?J/8g*T3Ͱt#ZR{+ +Ǫ;Mms@}KQX\'/lˎՂt ӭVP-oI$qי$[o5dZup!ӘJ! %;)ﶻ ay:uު6SWF#!Sk`h= ;^:KUyœuܐ_Z[4^_o|)&f@[@B(/:8WR藼KwtU5D Ђ1 ʢ#]HԃX`_fr-|yUt|(9d5l(*o݆F +&#XvQ7X ~sGpߦmõ, +TBYKs>isԫGG/dQX<i{z]Mi"~yr5,6 ~h(.- ԔV/]UZaRCⓂ"bvkr(E|a:C-ą-P"[n\\޶iyD\\m .ؑgMP' . "\0" . '*P듗ß٠Y7lZ 2CAE/頵bwWU,WK8l%c䐊HXT@<E&D dY5m+ʀÊR$: +b3YQHҸGԐi3Nv8~C0DSKvY7feNQ:a{#@EIBU38xF6`(%Ib6~a]!Zэ4?Q\\օ\\:+&)@rӈ>x 0Bqš1Q7R 8\'qRUX(-%"76Z!!8k]m]_RpRK_\'՝ Q֒iS5Ӻ?Ը*Jfuu:2+qeU>due5\'' . "\0" . 'K~{2s):ZTkn.#%>;NU75(DsTkV?#B6kTFr uZ\\dW\\Nϓl<`g}]*w|vCKUi$>tw*H:ÇG5];ɮբt2֎"r!zQiM8 Fjn(vnSZS;KC3.͋l6j7z)j+i!KGZ@ey&%j} BvVP]yzr=\'W) s!LON`% oAT{"HJ\'1F U[A}2Zlԫ63b̄@A߁q\'gGAI6C"Տhg0' . "\0" . 'vd"5<4@c!XoC 1F*Ѩ~T KvY hJ.B#Nx@{eiЗؒV j6G{FP@C|&l{K5o+"BYeb{} +ˈ)B\\ +o#aY>fz{!ޫF2sya_s* -~z}j2b9YI~<<_ Z.8VSTsƎ!*,' . "\0" . '-tBd0p6 ;TTQs#xU.{]g%i:yc& +0YW0-P;lKfKZ85f#X=XՋK6h)lJ $`RO!Xfk%0H ]1Z(S;zV=uFB:kE F T.n= &V+[\'ºm4DBDxIo#p/ez%2ݺpuqC/ yYCZJؕ|Z5z3U7-2Y4C)ˎZ֟>`p>zSF6;qc-&6b]ix *ժѩe\\t !+E.-tyeq*x޴t Rz(TQyFI?v}Jƃ,鲝q塿6"ҐWKS3j ' . "\0" . '8JKwi"ݞNR+VԚSŪpH|ɇkEz%*VN}W%(|>tQA\'1#@oєN ^l`51CD#ǾFS֑? . ӡ(UDlw+JR}\\kyl^t])pzXh|V-(mm~W]]n7d%TCl勺"ݧf %?7jvRYܬ?>RN#&2\'Ss2cD] plVsn t@8\\1vpOo(lg]&<\\GdTJ!k;bM{vc3N2"6O;xg%ԕa۴?1|~h<]w$VjꋬÖJqCC\\/Z~i?YorV )xZIIOhk,%D,E](bVDʎ\'h6@: DqO⿃lTdBϨE d#=v$T|)q_?NdTȔX5dQJ4ޤH<{;NrC )g(1A;cZC%gz g -FEԝp:vwqXvtzkn1MH\'I\\ ҈%wNrShγIWIM\'E bʪCsGQacnx' . "\0" . 'g4' . "\0" . '>K&QycD.a=V0qmI\'8VN֙iNl@*x*1,0N}vvרkd2n>~|{{[]gFK.hmrun԰XYٟ\'Vj3gݿ׿W(lr!KxzV>uUpw&"sDBbV?䳵"KFWAxP +}(J/ZztmH6|ht7}yjwEAs*.|Xk֐ >hd=-ęc[;FݘOa b3ĥ7{I6$9\'~gtWRt*tϋ`y[(v!TQFH !&j܃s|Sa\\ʎ9h6bpTglvJ98wr9`BeENwk.-u( xU>T+_dCh!tӽ737o+]uC&g$u>\\thz\\ׯiҭi7K95N +"7Pg)t |bkBRj ʔ*ǭ^>' . "\0" . '[0tL=*.սgjDr@ptR^3uĶ\'HOl4RXVn+s;2`Q3LJ0zUW5Pk+VI\'ƚ89#b:F(\'_[U&^t&Az+,[*k u{[m޳%y\\yhPeEDZt=rwRrAO+Ў?ZM<Ģ\\ >=,vȃ#y/2|$!u[֣\'gh_i,Gu?17'));// diff --git a/vendor/kint-php/kint/composer.json b/vendor/kint-php/kint/composer.json new file mode 100644 index 0000000..64aef4f --- /dev/null +++ b/vendor/kint-php/kint/composer.json @@ -0,0 +1,73 @@ +{ + "name": "kint-php/kint", + "description": "Kint - debugging tool for PHP developers", + "keywords": ["kint", "php", "debug"], + "type": "library", + "homepage": "https://kint-php.github.io/kint/", + "license": "MIT", + "authors": [ + { + "name": "Jonathan Vollebregt", + "homepage": "https://github.com/jnvsor" + }, + { + "name": "Rokas Šleinius", + "homepage": "https://github.com/raveren" + }, + { + "name": "Contributors", + "homepage": "https://github.com/kint-php/kint/graphs/contributors" + } + ], + "require": { + "php": ">=5.1.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpunit/phpunit": "^4.0", + "symfony/finder": "^2.6" + }, + "autoload": { + "files": ["init.php"], + "classmap": ["src/"] + }, + "autoload-dev": { + "classmap": ["tests/"] + }, + "config": { + "platform": { + "php": "5.3.6" + } + }, + "scripts": { + "post-update-cmd": [ + "npm install", + "bundler install --deployment" + ], + "post-install-cmd": "@post-update-cmd", + "clean": [ + "rm -rf resources/compiled/", + "rm -rf build/" + ], + "format": [ + "@format:php", + "@format:js", + "@format:sass" + ], + "format:php": "php-cs-fixer fix", + "format:js": "npm run format:js", + "format:sass": "bundler exec sass-convert -RiF scss -T scss resources/sass/", + "build": [ + "@build:sass", + "@build:js", + "@build:php" + ], + "build:sass": "bundler exec sass --sourcemap=none --update -fCt compressed resources/sass:resources/compiled", + "build:js": "npm run build:js", + "build:php": "php ./build.php" + }, + "suggests": { + "kint-php/kint-twig": "Provides d() and s() functions in twig templates", + "kint-php/kint-js": "Provides a simplified dump to console.log()" + } +} diff --git a/vendor/kint-php/kint/composer.lock b/vendor/kint-php/kint/composer.lock new file mode 100644 index 0000000..238eef5 --- /dev/null +++ b/vendor/kint-php/kint/composer.lock @@ -0,0 +1,1966 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "53aaaa2a153ca821d804f42d4a14bde8", + "content-hash": "0ae989754c1393620a3c858cee497f65", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/annotations", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Annotations\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2015-08-31 12:32:49" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09 13:34:57" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.2.4", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "5191e01d0fa0f579eb709350306cd11ad6427ca6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/5191e01d0fa0f579eb709350306cd11ad6427ca6", + "reference": "5191e01d0fa0f579eb709350306cd11ad6427ca6", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "gecko-packages/gecko-php-unit": "^2.0", + "php": "^5.3.6 || >=7.0 <7.2", + "sebastian/diff": "^1.4", + "symfony/console": "^2.4 || ^3.0", + "symfony/event-dispatcher": "^2.1 || ^3.0", + "symfony/filesystem": "^2.4 || ^3.0", + "symfony/finder": "^2.2 || ^3.0", + "symfony/options-resolver": "^2.6 || ^3.0", + "symfony/polyfill-php54": "^1.0", + "symfony/polyfill-php55": "^1.3", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-xml": "^1.3", + "symfony/process": "^2.3 || ^3.0", + "symfony/stopwatch": "^2.5 || ^3.0" + }, + "conflict": { + "hhvm": "<3.18" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.0.1", + "justinrainbow/json-schema": "^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.4.3", + "satooshi/php-coveralls": "^1.0", + "symfony/phpunit-bridge": "^3.2.2" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "ext-xml": "For better performance.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2017-05-24 21:55:27" + }, + { + "name": "gecko-packages/gecko-php-unit", + "version": "v2.0", + "source": { + "type": "git", + "url": "https://github.com/GeckoPackages/GeckoPHPUnit.git", + "reference": "40a697ec261f3526e8196363b481b24383740c13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GeckoPackages/GeckoPHPUnit/zipball/40a697ec261f3526e8196363b481b24383740c13", + "reference": "40a697ec261f3526e8196363b481b24383740c13", + "shasum": "" + }, + "require": { + "php": "^5.3.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "GeckoPackages\\PHPUnit\\": "src\\PHPUnit" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Additional PHPUnit tests.", + "homepage": "https://github.com/GeckoPackages", + "keywords": [ + "extension", + "filesystem", + "phpunit" + ], + "time": "2016-11-22 11:01:27" + }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20 16:49:30" + }, + { + "name": "paragonie/random_compat", + "version": "v2.0.10", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2017-03-13 16:27:32" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-01-25 08:17:30" + }, + { + "name": "phpspec/prophecy", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-03-02 20:05:34" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03 07:40:28" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26 11:10:40" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27 10:12:30" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-02-06 05:18:07" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29 09:50:25" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22 07:24:03" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18 05:49:44" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17 09:04:28" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03 07:41:43" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "symfony/console", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0e5e18ae09d3f5c06367759be940e9ed3f568359" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0e5e18ae09d3f5c06367759be940e9ed3f568359", + "reference": "0e5e18ae09d3f5c06367759be940e9ed3f568359", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.1" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2015-07-26 09:08:40" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.6.13", + "target-dir": "Symfony/Component/EventDispatcher", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/672593bc4b0043a0acf91903bb75a1c82d8f2e02", + "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.6", + "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", + "symfony/stopwatch": "~2.3" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2015-05-02 15:18:45" + }, + { + "name": "symfony/filesystem", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Filesystem", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "823c035b1a5c13a4924e324d016eb07e70f94735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/823c035b1a5c13a4924e324d016eb07e70f94735", + "reference": "823c035b1a5c13a4924e324d016eb07e70f94735", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Filesystem\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2015-07-08 05:59:48" + }, + { + "name": "symfony/finder", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Finder", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "203a10f928ae30176deeba33512999233181dd28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/203a10f928ae30176deeba33512999233181dd28", + "reference": "203a10f928ae30176deeba33512999233181dd28", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2015-07-09 16:02:48" + }, + { + "name": "symfony/options-resolver", + "version": "v2.6.13", + "target-dir": "Symfony/Component/OptionsResolver", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "31e56594cee489e9a235b852228b0598b52101c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/31e56594cee489e9a235b852228b0598b52101c1", + "reference": "31e56594cee489e9a235b852228b0598b52101c1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\OptionsResolver\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2015-05-13 11:33:56" + }, + { + "name": "symfony/polyfill-php54", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789", + "reference": "7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "94566239a7720cde0820f15f0cc348ddb51ba51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/94566239a7720cde0820f15f0cc348ddb51ba51d", + "reference": "94566239a7720cde0820f15f0cc348ddb51ba51d", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "032fd647d5c11a9ceab8ee8747e13b5448e93874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/032fd647d5c11a9ceab8ee8747e13b5448e93874", + "reference": "032fd647d5c11a9ceab8ee8747e13b5448e93874", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 14:24:12" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "d3a71580c1e2cab33b6d705f0ec40e9015e14d5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/d3a71580c1e2cab33b6d705f0ec40e9015e14d5c", + "reference": "d3a71580c1e2cab33b6d705f0ec40e9015e14d5c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/polyfill-xml", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-xml.git", + "reference": "89326af9d173053826ae8fe26a6f49597ba4e9f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-xml/zipball/89326af9d173053826ae8fe26a6f49597ba4e9f3", + "reference": "89326af9d173053826ae8fe26a6f49597ba4e9f3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-php72": "~1.4" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for xml's utf8_encode and utf8_decode functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/process", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Process", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "57f1e88bb5dafa449b83f9f265b11d52d517b3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/57f1e88bb5dafa449b83f9f265b11d52d517b3e9", + "reference": "57f1e88bb5dafa449b83f9f265b11d52d517b3e9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2015-06-30 16:10:16" + }, + { + "name": "symfony/stopwatch", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Stopwatch", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "a0d91f2f4e2c60bd78f13388aa68f9d7cab8c987" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a0d91f2f4e2c60bd78f13388aa68f9d7cab8c987", + "reference": "a0d91f2f4e2c60bd78f13388aa68f9d7cab8c987", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Stopwatch\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2015-07-01 18:23:01" + }, + { + "name": "symfony/yaml", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Yaml", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "c044d1744b8e91aaaa0d9bac683ab87ec7cbf359" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c044d1744b8e91aaaa0d9bac683ab87ec7cbf359", + "reference": "c044d1744b8e91aaaa0d9bac683ab87ec7cbf359", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Yaml\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2015-07-26 08:59:42" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.1.2" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.3.6" + } +} diff --git a/vendor/kint-php/kint/init.php b/vendor/kint-php/kint/init.php new file mode 100644 index 0000000..700cf98 --- /dev/null +++ b/vendor/kint-php/kint/init.php @@ -0,0 +1,19 @@ + '', + realpath($_SERVER['DOCUMENT_ROOT']) => '', + ); +} diff --git a/vendor/kint-php/kint/init_header.php b/vendor/kint-php/kint/init_header.php new file mode 100644 index 0000000..ddd0def --- /dev/null +++ b/vendor/kint-php/kint/init_header.php @@ -0,0 +1,42 @@ += 0)); +define('KINT_PHP522', (version_compare(PHP_VERSION, '5.2.2') >= 0)); +define('KINT_PHP523', (version_compare(PHP_VERSION, '5.2.3') >= 0)); +define('KINT_PHP524', (version_compare(PHP_VERSION, '5.2.4') >= 0)); +define('KINT_PHP525', (version_compare(PHP_VERSION, '5.2.5') >= 0)); +define('KINT_PHP53', (version_compare(PHP_VERSION, '5.3') >= 0)); +define('KINT_PHP56', (version_compare(PHP_VERSION, '5.6') >= 0)); +define('KINT_PHP70', (version_compare(PHP_VERSION, '7.0') >= 0)); +define('KINT_PHP72', (version_compare(PHP_VERSION, '7.2') >= 0)); diff --git a/vendor/kint-php/kint/init_helpers.php b/vendor/kint-php/kint/init_helpers.php new file mode 100644 index 0000000..d660bfa --- /dev/null +++ b/vendor/kint-php/kint/init_helpers.php @@ -0,0 +1,59 @@ +dl>dt>.kint-popup-trigger,.kint-rich li>dl>dt>.kint-access-path-trigger{background:rgba(248,248,248,0.8)}.kint-rich>dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich>footer>nav,.kint-rich dt.kint-parent>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich>footer.kint-locked>nav,.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#06f;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:red}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger{float:right !important;cursor:pointer;padding:0 3px;color:#aaa;position:relative}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover{color:#d7d7d7}.kint-rich dt.kint-parent>.kint-popup-trigger{font-size:13px}.kint-rich div.access-path{background:#f8f8f8;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px}.kint-rich footer>.kint-popup-trigger{font-size:12px}.kint-rich footer nav{height:10px;width:10px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint-rich ul.kint-tabs>li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#aaa;color:red}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:red}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #d7d7d7;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#aaa}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-rich table td{background:#f8f8f8;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-rich table tr:hover var{color:red}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source:before{display:block;content:attr(data-kint-sourcerange);margin-bottom:0.5em;padding-bottom:0.5em;border-bottom:1px solid #f8f8f8}.kint-rich pre.kint-source>div.kint-highlight{background:#f8f8f8}.kint-rich .kint-microtime-lap{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;width:230px;color:#fdf6e3}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich dt{font-weight:normal}.kint-rich dt.kint-parent{margin-top:4px}.kint-rich dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint-rich>dl>dt{background:#f8f8f8}.kint-rich ul{margin:0;padding-left:0}.kint-rich ul:not(.kint-tabs)>li{border-left:0}.kint-rich ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint-rich ul.kint-tabs li,.kint-rich ul.kint-tabs li+li{margin:0 0 0 4px}.kint-rich ul.kint-tabs li{border-bottom-width:0;height:25px}.kint-rich ul.kint-tabs li:first-child{margin-left:0}.kint-rich ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}.kint-rich ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint-rich ul>li>pre{border:1px solid #d7d7d7}.kint-rich dt:hover+dd>ul{border-color:#aaa}.kint-rich pre{background:#fff;margin-top:4px;margin-left:25px}.kint-rich .kint-popup-trigger:hover{color:red}.kint-rich .kint-source{margin-left:-1px}.kint-rich .kint-source .kint-highlight{background:#cfc}.kint-rich table td{background:#fff}.kint-rich table td>dl{padding:0;margin:0}.kint-rich table td>dl>dt.kint-parent{margin:0}.kint-rich table td:first-child,.kint-rich table td,.kint-rich table th{padding:2px 4px}.kint-rich table dd,.kint-rich table dt{background:#fff}.kint-rich table tr:hover>td{box-shadow:none;background:#cfc} diff --git a/vendor/kint-php/kint/resources/compiled/original.css b/vendor/kint-php/kint/resources/compiled/original.css new file mode 100644 index 0000000..b942f55 --- /dev/null +++ b/vendor/kint-php/kint/resources/compiled/original.css @@ -0,0 +1 @@ +.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#0092db;color:#1d1e1e}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #5cb730}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:8px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#0092db}.kint-rich li>dl>dt>.kint-popup-trigger,.kint-rich li>dl>dt>.kint-access-path-trigger{background:rgba(224,234,239,0.8)}.kint-rich>dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich>footer>nav,.kint-rich dt.kint-parent>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich>footer.kint-locked>nav,.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#0092db;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#5cb730}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger{float:right !important;cursor:pointer;padding:0 3px;color:#0092db;position:relative}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover{color:#b6cedb}.kint-rich dt.kint-parent>.kint-popup-trigger{font-size:13px}.kint-rich div.access-path{background:#c1d4df;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px}.kint-rich footer>.kint-popup-trigger{font-size:12px}.kint-rich footer nav{height:10px;width:10px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint-rich ul.kint-tabs>li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #b6cedb;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#0092db}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #b6cedb;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-rich table td{background:#e0eaef;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-rich table tr:hover var{color:#5cb730}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source:before{display:block;content:attr(data-kint-sourcerange);margin-bottom:0.5em;padding-bottom:0.5em;border-bottom:1px solid #c1d4df}.kint-rich pre.kint-source>div.kint-highlight{background:#c1d4df}.kint-rich .kint-microtime-lap{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;width:230px;color:#fdf6e3}.kint-rich>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}.kint-rich ul.kint-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint-rich>dl.kint-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}.kint-rich .kint-source .kint-highlight{background:#f0eb96} diff --git a/vendor/kint-php/kint/resources/compiled/plain.css b/vendor/kint-php/kint/resources/compiled/plain.css new file mode 100644 index 0000000..1926718 --- /dev/null +++ b/vendor/kint-php/kint/resources/compiled/plain.css @@ -0,0 +1 @@ +.kint-plain{background:rgba(255,255,255,0.9);white-space:pre;display:block;font-family:monospace}.kint-plain i{color:#d00;font-style:normal}.kint-plain u{color:#030;text-decoration:none;font-weight:bold} diff --git a/vendor/kint-php/kint/resources/compiled/rich.js b/vendor/kint-php/kint/resources/compiled/rich.js new file mode 100644 index 0000000..b3d3ad5 --- /dev/null +++ b/vendor/kint-php/kint/resources/compiled/rich.js @@ -0,0 +1 @@ +void 0===window.kintRich&&(window.kintRich=function(){"use strict";var e={selectText:function(e){var t=window.getSelection(),a=document.createRange();a.selectNodeContents(e.lastChild),a.setStart(e.firstChild,0),t.removeAllRanges(),t.addRange(a)},each:function(e,t){Array.prototype.slice.call(document.querySelectorAll(e),0).forEach(t)},hasClass:function(e,t){return!!e.classList&&(void 0===t&&(t="kint-show"),e.classList.contains(t))},addClass:function(e,t){void 0===t&&(t="kint-show"),e.classList.add(t)},removeClass:function(e,t){return void 0===t&&(t="kint-show"),e.classList.remove(t),e},toggle:function(t,a){var o=e.getChildren(t);o&&(void 0===a&&(a=e.hasClass(t)),a?e.removeClass(t):e.addClass(t),1===o.childNodes.length&&(o=o.childNodes[0].childNodes[0])&&e.hasClass(o,"kint-parent")&&e.toggle(o,a))},toggleChildren:function(t,a){var o=e.getChildren(t);if(o){var r=o.getElementsByClassName("kint-parent"),s=r.length;for(void 0===a&&(a=!e.hasClass(t));s--;)e.toggle(r[s],a)}},toggleAll:function(t){for(var a=document.getElementsByClassName("kint-parent"),o=a.length,r=!e.hasClass(t.parentNode);o--;)e.toggle(a[o],r)},switchTab:function(t){var a,o=t.previousSibling,r=0;for(t.parentNode.getElementsByClassName("kint-active-tab")[0].className="",t.className="kint-active-tab";o;)1===o.nodeType&&r++,o=o.previousSibling;a=t.parentNode.nextSibling.childNodes;for(var s=0;s"},openInNewWindow:function(t){var a=window.open();a&&(a.document.open(),a.document.write(e.mktag("html")+e.mktag("head")+e.mktag("title")+"Kint ("+(new Date).toISOString()+")"+e.mktag("/title")+e.mktag('meta charset="utf-8"')+document.getElementsByClassName("kint-script")[0].outerHTML+document.getElementsByClassName("kint-style")[0].outerHTML+e.mktag("/head")+e.mktag("body")+'

'+t.parentNode.outerHTML+"
"+e.mktag("/body")),a.document.close())},sortTable:function(e,t){var a=e.tBodies[0];[].slice.call(e.tBodies[0].rows).sort(function(e,a){if(e=e.cells[t].textContent.trim().toLocaleLowerCase(),a=a.cells[t].textContent.trim().toLocaleLowerCase(),isNaN(e)||isNaN(a)){if(isNaN(e)&&!isNaN(a))return 1;if(isNaN(a)&&!isNaN(e))return-1}else e=parseFloat(e),a=parseFloat(a);return ea?1:0}).forEach(function(e){a.appendChild(e)})},showAccessPath:function(t){for(var a=t.childNodes,o=0;oli:not(.kint-active-tab)",function(t){0===t.offsetWidth&&0===t.offsetHeight||e.keyboardNav.targets.push(t)})},sync:function(t){var a=document.querySelector(".kint-focused");if(a&&e.removeClass(a,"kint-focused"),e.keyboardNav.active){var o=e.keyboardNav.targets[e.keyboardNav.target];e.addClass(o,"kint-focused"),t||e.keyboardNav.scroll(o)}},scroll:function(e){var t=function(e){return e.offsetTop+(e.offsetParent?t(e.offsetParent):0)},a=t(e)-window.innerHeight/2;window.scrollTo(0,a)},moveCursor:function(t){for(e.keyboardNav.target+=t;e.keyboardNav.target<0;)e.keyboardNav.target+=e.keyboardNav.targets.length;for(;e.keyboardNav.target>=e.keyboardNav.targets.length;)e.keyboardNav.target-=e.keyboardNav.targets.length;e.keyboardNav.sync()},setCursor:function(t){e.keyboardNav.fetchTargets();for(var a=0;ar)&&(i[e].min=r),(void 0===i[e].max||i[e].max.kint-microtime-lap"),0),t.forEach(function(t){var e,r=t.parentNode.getAttribute("data-kint-microtime-group"),o=parseFloat(t.innerHTML),a=i[r].avg,n=i[r].max,c=i[r].min;t.parentNode.querySelector(".kint-microtime-avg").innerHTML=a,o===a&&o===c&&o===n||(o>a?(e=(o-a)/(n-a),t.style.background="hsl("+(40-40*e)+", 100%, 65%)"):(e=a===c?0:(a-o)/(a-c),t.style.background="hsl("+(40+80*e)+", 100%, 65%)"))})})); diff --git a/vendor/kint-php/kint/resources/compiled/solarized-dark.css b/vendor/kint-php/kint/resources/compiled/solarized-dark.css new file mode 100644 index 0000000..f172822 --- /dev/null +++ b/vendor/kint-php/kint/resources/compiled/solarized-dark.css @@ -0,0 +1 @@ +.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:#073642}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#268bd2;color:#839496}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #2aa198}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#839496;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:10px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#002b36;border:1px solid #586e75;color:#839496;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:5px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#268bd2}.kint-rich li>dl>dt>.kint-popup-trigger,.kint-rich li>dl>dt>.kint-access-path-trigger{background:rgba(0,43,54,0.8)}.kint-rich>dl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich>footer>nav,.kint-rich dt.kint-parent>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich>footer.kint-locked>nav,.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #586e75}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#93a1a1}.kint-rich pre{color:#839496;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger{float:right !important;cursor:pointer;padding:0 3px;color:#268bd2;position:relative}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover{color:#586e75}.kint-rich dt.kint-parent>.kint-popup-trigger{font-size:13px}.kint-rich div.access-path{background:#073642;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px}.kint-rich footer>.kint-popup-trigger{font-size:12px}.kint-rich footer nav{height:10px;width:10px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#839496;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #586e75}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}.kint-rich ul.kint-tabs>li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#002b36;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #586e75;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #586e75;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#073642;color:#93a1a1}.kint-rich table td{background:#002b36;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source:before{display:block;content:attr(data-kint-sourcerange);margin-bottom:0.5em;padding-bottom:0.5em;border-bottom:1px solid #073642}.kint-rich pre.kint-source>div.kint-highlight{background:#073642}.kint-rich .kint-microtime-lap{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;width:230px;color:#fdf6e3}body{background:#073642;color:#fff}.kint-rich{box-shadow:0 0 5px 3px #073642}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px}.kint-rich footer li{color:#ddd} diff --git a/vendor/kint-php/kint/resources/compiled/solarized.css b/vendor/kint-php/kint/resources/compiled/solarized.css new file mode 100644 index 0000000..e608b1b --- /dev/null +++ b/vendor/kint-php/kint/resources/compiled/solarized.css @@ -0,0 +1 @@ +.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#268bd2;color:#657b83}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #2aa198}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#657b83;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:10px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:5px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#268bd2}.kint-rich li>dl>dt>.kint-popup-trigger,.kint-rich li>dl>dt>.kint-access-path-trigger{background:rgba(253,246,227,0.8)}.kint-rich>dl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich>footer>nav,.kint-rich dt.kint-parent>nav{background:url('data:image/svg+xml;utf8,') no-repeat scroll 0 0/100% auto transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich>footer.kint-locked>nav,.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #93a1a1}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#586e75}.kint-rich pre{color:#657b83;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger{float:right !important;cursor:pointer;padding:0 3px;color:#268bd2;position:relative}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover{color:#93a1a1}.kint-rich dt.kint-parent>.kint-popup-trigger{font-size:13px}.kint-rich div.access-path{background:#eee8d5;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px}.kint-rich footer>.kint-popup-trigger{font-size:12px}.kint-rich footer nav{height:10px;width:10px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#657b83;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#586e75;border-bottom:1px dotted #586e75}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #93a1a1}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}.kint-rich ul.kint-tabs>li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #93a1a1;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #93a1a1;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#eee8d5;color:#586e75}.kint-rich table td{background:#fdf6e3;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source:before{display:block;content:attr(data-kint-sourcerange);margin-bottom:0.5em;padding-bottom:0.5em;border-bottom:1px solid #eee8d5}.kint-rich pre.kint-source>div.kint-highlight{background:#eee8d5}.kint-rich .kint-microtime-lap{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;width:230px;color:#fdf6e3}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px} diff --git a/vendor/kint-php/kint/src/Kint.php b/vendor/kint-php/kint/src/Kint.php new file mode 100644 index 0000000..740a58c --- /dev/null +++ b/vendor/kint-php/kint/src/Kint.php @@ -0,0 +1,638 @@ + 'APPPATH', + * SYSPATH => 'SYSPATH', + * MODPATH => 'MODPATH', + * DOCROOT => 'DOCROOT', + * ); + * + * [!] EXAMPLE #2 (for a semi-universal approach) + * + * Kint::$app_root_dirs = array( + * realpath( __DIR__ . '/../../..' ) => 'ROOT', // go up as many levels as needed + * ); + */ + public static $app_root_dirs = array(); + + /** + * @var int max array/object levels to go deep, if zero no limits are applied + */ + public static $max_depth = 6; + + /** + * @var bool expand all trees by default for rich view + */ + public static $expanded = false; + + /** + * @var bool enable detection when Kint is command line. + * + * Formats output with whitespace only; does not HTML-escape it + */ + public static $cli_detection = true; + + /** + * @var array Kint aliases. Add debug functions in Kint wrappers here to fix modifiers and backtraces + */ + public static $aliases = array( + array('Kint', 'dump'), + array('Kint', 'trace'), + array('Kint', 'dumpArray'), + ); + + /** + * @var array Kint_Renderer descendants. Add to array to extend. + */ + public static $renderers = array( + self::MODE_RICH => 'Kint_Renderer_Rich', + self::MODE_PLAIN => 'Kint_Renderer_Plain', + self::MODE_TEXT => 'Kint_Renderer_Text', + self::MODE_CLI => 'Kint_Renderer_Cli', + ); + + const MODE_RICH = 'r'; + const MODE_TEXT = 't'; + const MODE_CLI = 'c'; + const MODE_PLAIN = 'p'; + + public static $plugins = array( + 'Kint_Parser_Base64', + 'Kint_Parser_Blacklist', + 'Kint_Parser_ClassMethods', + 'Kint_Parser_ClassStatics', + 'Kint_Parser_Closure', + 'Kint_Parser_Color', + 'Kint_Parser_DateTime', + 'Kint_Parser_FsPath', + 'Kint_Parser_Iterator', + 'Kint_Parser_Json', + 'Kint_Parser_Microtime', + 'Kint_Parser_SimpleXMLElement', + 'Kint_Parser_SplFileInfo', + 'Kint_Parser_SplObjectStorage', + 'Kint_Parser_Stream', + 'Kint_Parser_Table', + 'Kint_Parser_Throwable', + 'Kint_Parser_Timestamp', + 'Kint_Parser_ToString', + 'Kint_Parser_Trace', + 'Kint_Parser_Xml', + ); + + private static $plugin_pool = array(); + private static $dump_array = false; + private static $names = array(); + + /** + * Stashes or sets all settings at once. + * + * @param array|null $settings Array of all settings to be set or null to set none + * + * @return array Current settings + */ + public static function settings(array $settings = null) + { + static $keys = array( + 'aliases', + 'app_root_dirs', + 'cli_detection', + 'display_called_from', + 'enabled_mode', + 'expanded', + 'file_link_format', + 'max_depth', + 'mode_default', + 'mode_default_cli', + 'renderers', + 'return', + 'plugins', + ); + + $out = array(); + + foreach ($keys as $key) { + $out[$key] = self::$$key; + } + + if ($settings !== null) { + $in = array_intersect_key($settings, $out); + foreach ($in as $key => $val) { + self::$$key = $val; + } + } + + return $out; + } + + /** + * Prints a debug backtrace, same as Kint::dump(1). + * + * @param array $trace [OPTIONAL] you can pass your own trace, otherwise, `debug_backtrace` will be called + * + * @return mixed + */ + public static function trace($trace = null) + { + if ($trace === null) { + if (KINT_PHP525) { + $trace = debug_backtrace(true); + } else { + $trace = debug_backtrace(); + } + } else { + return self::dump($trace); + } + + Kint_Parser_Trace::normalizeAliases(self::$aliases); + + $trimmed_trace = array(); + + foreach ($trace as $frame) { + if (Kint_Parser_Trace::frameIsListed($frame, self::$aliases)) { + $trimmed_trace = array(); + } + + $trimmed_trace[] = $frame; + } + + return self::dumpArray( + array($trimmed_trace), + array(Kint_Object::blank('Kint::trace()', 'debug_backtrace()')) + ); + } + + /** + * Dumps an array as separate values, and uses $names to seed the parser. + * + * @param array $data Data to be dumped + * @param array[Kint_Object]|null $names Array of Kint_Object to seed the parser with + */ + public static function dumpArray(array $data, array $names = null) + { + self::$names = $names; + self::$dump_array = true; + + $out = self::dump($data); + + self::$names = null; + self::$dump_array = false; + + return $out; + } + + /** + * Dump information about variables, accepts any number of parameters, supports modifiers:. + * + * clean up any output before kint and place the dump at the top of page: + * - Kint::dump() + * ***** + * expand all nodes on display: + * ! Kint::dump() + * ***** + * dump variables disregarding their depth: + * + Kint::dump() + * ***** + * return output instead of displaying it: + * + * @ Kint::dump() + * ***** + * force output as plain text + * ~ Kint::dump() + * + * Modifiers are supported by all dump wrapper functions, including Kint::trace(). Space is optional. + * + * @param mixed $data + * + * @return int|string + */ + public static function dump($data = null) + { + if (!self::$enabled_mode) { + return 0; + } + + $stash = self::settings(); + $num_args = func_num_args(); + + list($params, $modifiers, $callee, $caller, $minitrace) = self::getCalleeInfo( + defined('DEBUG_BACKTRACE_IGNORE_ARGS') + ? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) + : debug_backtrace(), + $num_args + ); + + // set mode for current run + if (self::$enabled_mode === true) { + self::$enabled_mode = self::$mode_default; + if (PHP_SAPI === 'cli' && self::$cli_detection === true) { + self::$enabled_mode = self::$mode_default_cli; + } + } + + if (in_array('~', $modifiers)) { + self::$enabled_mode = self::MODE_TEXT; + } + + if (!array_key_exists(self::$enabled_mode, self::$renderers)) { + $renderer = self::$renderers[self::MODE_PLAIN]; + } else { + $renderer = self::$renderers[self::$enabled_mode]; + } + + // process modifiers: @, +, ! and - + if (in_array('-', $modifiers)) { + while (ob_get_level()) { + ob_end_clean(); + } + } + if (in_array('!', $modifiers)) { + self::$expanded = true; + } + if (in_array('+', $modifiers)) { + self::$max_depth = false; + } + if (in_array('@', $modifiers)) { + self::$return = true; + } + + $renderer = new $renderer(array( + 'num_args' => $num_args, + 'params' => $params, + 'modifiers' => $modifiers, + 'callee' => $callee, + 'caller' => $caller, + 'minitrace' => $minitrace, + 'settings' => self::settings(), + 'stash' => $stash, + )); + + $plugins = array(); + + foreach (self::$plugins as $plugin) { + if ($plugin instanceof Kint_Parser_Plugin) { + $plugins[] = $plugin; + } elseif (is_string($plugin) && is_subclass_of($plugin, 'Kint_Parser_Plugin')) { + if (!isset(self::$plugin_pool[$plugin])) { + $p = new $plugin(); + self::$plugin_pool[$plugin] = $p; + } + $plugins[] = self::$plugin_pool[$plugin]; + } + } + + $plugins = $renderer->parserPlugins($plugins); + + $output = $renderer->preRender(); + + $parser = new Kint_Parser(self::$max_depth, empty($caller['class']) ? null : $caller['class']); + + foreach ($plugins as $plugin) { + $parser->addPlugin($plugin); + } + + // Kint::dump(1) shorthand + if (!self::$dump_array && (!isset($params[0]['name']) || $params[0]['name'] == '1') && $num_args === 1 && $data === 1) { + if (KINT_PHP525) { + $data = debug_backtrace(true); + } else { + $data = debug_backtrace(); + } + + $trace = array(); + + // No need to normalize as we've already called it through getCalleeInfo at this point + foreach ($data as $index => $frame) { + if (Kint_Parser_Trace::frameIsListed($frame, self::$aliases)) { + $trace = array(); + } + + $trace[] = $frame; + } + + $lastframe = reset($trace); + $tracename = $lastframe['function'].'(1)'; + if (isset($lastframe['class'], $lastframe['type'])) { + $tracename = $lastframe['class'].$lastframe['type'].$tracename; + } + $tracebase = Kint_Object::blank($tracename, 'debug_backtrace()'); + + if (empty($trace)) { + $output .= $renderer->render($tracebase->transplant(new Kint_Object_Trace())); + } else { + $output .= $renderer->render($parser->parse($trace, $tracebase)); + } + } else { + $data = func_get_args(); + if ($data === array()) { + $output .= $renderer->render(new Kint_Object_Nothing()); + } + + if (self::$dump_array) { + $data = $data[0]; + } + + static $blacklist = array('null', 'true', 'false', 'array(...)', 'array()', '"..."', 'b"..."', '[...]', '[]', '(...)', '()'); + + foreach ($data as $i => $argument) { + if (isset(self::$names[$i])) { + $output .= $renderer->render( + $parser->parse($argument, self::$names[$i]) + ); + continue; + } + + if (!isset($params[$i]['name']) || is_numeric($params[$i]['name']) || in_array(str_replace("'", '"', strtolower($params[$i]['name'])), $blacklist, true)) { + $name = null; + } else { + $name = $params[$i]['name']; + } + + if (isset($params[$i]['path'])) { + $access_path = $params[$i]['path']; + + if (!empty($params[$i]['expression'])) { + $access_path = '('.$access_path.')'; + } + } else { + $access_path = '$'.$i; + } + + $output .= $renderer->render( + $parser->parse($argument, Kint_Object::blank($name, $access_path)) + ); + } + } + + $output .= $renderer->postRender(); + + if (self::$return) { + self::settings($stash); + + return $output; + } + + self::settings($stash); + echo $output; + + return 0; + } + + /** + * generic path display callback, can be configured in app_root_dirs; purpose is + * to show relevant path info and hide as much of the path as possible. + * + * @param string $file + * + * @return string + */ + public static function shortenPath($file) + { + $file = array_values(array_filter(explode('/', str_replace('\\', '/', $file)), 'strlen')); + + $longest_match = 0; + $match = '/'; + + foreach (self::$app_root_dirs as $path => $alias) { + if (empty($path)) { + continue; + } + + $path = array_values(array_filter(explode('/', str_replace('\\', '/', $path)), 'strlen')); + + if (array_slice($file, 0, count($path)) === $path && count($path) > $longest_match) { + $longest_match = count($path); + $match = $alias; + } + } + + if ($longest_match) { + $file = array_merge(array($match), array_slice($file, $longest_match)); + + return implode('/', $file); + } else { + // fallback to find common path with Kint dir + $kint = array_values(array_filter(explode('/', str_replace('\\', '/', KINT_DIR)), 'strlen')); + + foreach ($file as $i => $part) { + if (!isset($kint[$i]) || $kint[$i] !== $part) { + return ($i ? '.../' : '/').implode('/', array_slice($file, $i)); + } + } + + return '/'.implode('/', $file); + } + } + + public static function getIdeLink($file, $line) + { + return str_replace(array('%f', '%l'), array($file, $line), self::$file_link_format); + } + + /** + * returns parameter names that the function was passed, as well as any predefined symbols before function + * call (modifiers). + * + * @param array $trace + * + * @return array($params, $modifiers, $callee, $caller, $miniTrace) + */ + private static function getCalleeInfo($trace, $num_params) + { + Kint_Parser_Trace::normalizeAliases(self::$aliases); + $miniTrace = array(); + + foreach ($trace as $index => $frame) { + if (Kint_Parser_Trace::frameIsListed($frame, self::$aliases)) { + $miniTrace = array(); + } + + if (!Kint_Parser_Trace::frameIsListed($frame, array('spl_autoload_call'))) { + $miniTrace[] = $frame; + } + } + + $callee = reset($miniTrace); + $caller = next($miniTrace); + if (!$callee) { + $callee = null; + } + if (!$caller) { + $caller = null; + } + + unset($miniTrace[0]); + + foreach ($miniTrace as $index => &$frame) { + if (!isset($frame['file'], $frame['line'])) { + unset($miniTrace[$index]); + } else { + unset($frame['object'], $frame['args']); + } + } + + $miniTrace = array_values($miniTrace); + + if (!isset($callee['file'], $callee['line']) || !is_readable($callee['file'])) { + return array(null, array(), $callee, $caller, $miniTrace); + } + + // open the file and read it up to the position where the function call expression ended + if (empty($callee['class'])) { + $callfunc = $callee['function']; + } else { + $callfunc = array($callee['class'], $callee['function']); + } + + $calls = Kint_SourceParser::getFunctionCalls( + file_get_contents($callee['file']), + $callee['line'], + $callfunc + ); + + $return = array(null, array(), $callee, $caller, $miniTrace); + + foreach ($calls as $call) { + $is_unpack = false; + + // Handle argument unpacking as a last resort + if (KINT_PHP56) { + foreach ($call['parameters'] as $i => &$param) { + if (strpos($param['name'], '...') === 0) { + if ($i === count($call['parameters']) - 1) { + for ($j = 1; $j + $i < $num_params; ++$j) { + $call['parameters'][] = array( + 'name' => 'array_values('.substr($param['name'], 3).')['.$j.']', + 'path' => 'array_values('.substr($param['path'], 3).')['.$j.']', + 'expression' => false, + ); + } + + $param['name'] = 'reset('.substr($param['name'], 3).')'; + $param['path'] = 'reset('.substr($param['path'], 3).')'; + $param['expression'] = false; + } else { + $call['parameters'] = array_slice($call['parameters'], 0, $i); + } + + $is_unpack = true; + break; + } + } + } + + if ($is_unpack || count($call['parameters']) === $num_params) { + if ($return[0] === null) { + $return = array($call['parameters'], $call['modifiers'], $callee, $caller, $miniTrace); + } else { + // If we have multiple calls on the same line with the same amount of arguments, + // we can't be sure which it is so just return null and let them figure it out + return array(null, array(), $callee, $caller, $miniTrace); + } + } + } + + return $return; + } + + public static function composerGetExtras($key = 'kint') + { + $extras = array(); + + if (!KINT_PHP53) { + return $extras; + } + + $folder = KINT_DIR.'/vendor'; + + for ($i = 0; $i < 4; ++$i) { + $installed = $folder.'/composer/installed.json'; + + if (file_exists($installed) && is_readable($installed)) { + $packages = json_decode(file_get_contents($installed), true); + + foreach ($packages as $package) { + if (isset($package['extra'][$key]) && is_array($package['extra'][$key])) { + $extras = array_replace($extras, $package['extra'][$key]); + } + } + + $folder = dirname($folder); + + if (file_exists($folder.'/composer.json') && is_readable($folder.'/composer.json')) { + $composer = json_decode(file_get_contents($folder.'/composer.json'), true); + + if (isset($composer['extra'][$key]) && is_array($composer['extra'][$key])) { + $extras = array_replace($extras, $composer['extra'][$key]); + } + } + + break; + } else { + $folder = dirname($folder); + } + } + + return $extras; + } + + public static function composerGetDisableHelperFunctions() + { + $extras = self::composerGetExtras(); + + return !empty($extras['disable-helper-functions']); + } +} diff --git a/vendor/kint-php/kint/src/Object.php b/vendor/kint-php/kint/src/Object.php new file mode 100644 index 0000000..02dcfa7 --- /dev/null +++ b/vendor/kint-php/kint/src/Object.php @@ -0,0 +1,221 @@ +'; + const OPERATOR_OBJECT = '->'; + const OPERATOR_STATIC = '::'; + + public $name; + public $type; + public $static = false; + public $const = false; + public $access = self::ACCESS_NONE; + public $owner_class; + public $access_path; + public $operator = self::OPERATOR_NONE; + public $reference = false; + public $size = null; + public $depth = 0; + public $representations = array(); + public $value = null; + public $hints = array(); + + public function __construct() + { + } + + public function addRepresentation(Kint_Object_Representation $rep, $pos = null) + { + if (isset($this->representations[$rep->name])) { + return false; + } + + if ($this->value === null) { + $this->value = $rep; + } + + if ($pos === null) { + $this->representations[$rep->name] = $rep; + } else { + $this->representations = array_merge( + array_slice($this->representations, 0, $pos), + array($rep->name => $rep), + array_slice($this->representations, $pos) + ); + } + + return true; + } + + public function replaceRepresentation(Kint_Object_Representation $rep, $pos = null) + { + if ($pos === null) { + $this->representations[$rep->name] = $rep; + } else { + $this->removeRepresentation($rep->name); + $this->addRepresentation($rep, $pos); + } + } + + public function removeRepresentation($name) + { + unset($this->representations[$name]); + } + + public function getRepresentation($name) + { + if (isset($this->representations[$name])) { + return $this->representations[$name]; + } + } + + public function getRepresentations() + { + return $this->representations; + } + + public function clearRepresentations() + { + $this->representations = array(); + } + + public function getType() + { + return $this->type; + } + + public function getModifiers() + { + $out = $this->getAccess(); + + if ($this->const) { + $out .= ' const'; + } + + if ($this->static) { + $out .= ' static'; + } + + if (strlen($out)) { + return ltrim($out); + } + } + + public function getAccess() + { + switch ($this->access) { + case self::ACCESS_PRIVATE: + return 'private'; + case self::ACCESS_PROTECTED: + return 'protected'; + case self::ACCESS_PUBLIC: + return 'public'; + } + } + + public function getName() + { + return $this->name; + } + + public function getOperator() + { + if ($this->operator === self::OPERATOR_ARRAY) { + return '=>'; + } elseif ($this->operator === self::OPERATOR_OBJECT) { + return '->'; + } elseif ($this->operator === self::OPERATOR_STATIC) { + return '::'; + } + + return; + } + + public function getSize() + { + return $this->size; + } + + public function getValueShort() + { + if ($rep = $this->value) { + if ($this->type === 'boolean') { + return $rep->contents ? 'true' : 'false'; + } elseif ($this->type === 'integer' || $this->type === 'double') { + return $rep->contents; + } + } + } + + public function getAccessPath() + { + return $this->access_path; + } + + public static function blank($name = null, $access_path = null) + { + $o = new self(); + $o->name = $name; + $o->access_path = $name; + if ($access_path) { + $o->access_path = $access_path; + } + + return $o; + } + + public function transplant(Kint_Object $new) + { + $new->name = $this->name; + $new->size = $this->size; + $new->access_path = $this->access_path; + $new->access = $this->access; + $new->static = $this->static; + $new->const = $this->const; + $new->type = $this->type; + $new->depth = $this->depth; + $new->owner_class = $this->owner_class; + $new->operator = $this->operator; + $new->reference = $this->reference; + $new->value = $this->value; + $new->representations += $this->representations; + $new->hints = array_merge($this->hints, $new->hints); + + return $new; + } + + public static function isSequential(array $array) + { + return array_keys($array) === range(0, count($array) - 1); + } + + public static function sortByAccess(Kint_Object $a, Kint_Object $b) + { + static $sorts = array( + self::ACCESS_PUBLIC => 1, + self::ACCESS_PROTECTED => 2, + self::ACCESS_PRIVATE => 3, + self::ACCESS_NONE => 4, + ); + + return $sorts[$a->access] - $sorts[$b->access]; + } + + public static function sortByName(Kint_Object $a, Kint_Object $b) + { + $ret = strnatcasecmp($a->name, $b->name); + + if ($ret === 0) { + return is_int($a->name) - is_int($b->name); + } + + return $ret; + } +} diff --git a/vendor/kint-php/kint/src/Object/Blob.php b/vendor/kint-php/kint/src/Object/Blob.php new file mode 100644 index 0000000..1c0874f --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Blob.php @@ -0,0 +1,164 @@ +encoding === false) { + return 'binary '.$this->type; + } elseif ($this->encoding === 'ASCII') { + return $this->type; + } else { + return $this->encoding.' '.$this->type; + } + } + + public function getValueShort() + { + if ($rep = $this->value) { + return '"'.$rep->contents.'"'; + } + } + + public function transplant(Kint_Object $new) + { + $new = parent::transplant($new); + $new->encoding = $this->encoding; + + return $new; + } + + public static function strlen($string, $encoding = false) + { + if (extension_loaded('mbstring')) { + if ($encoding === false) { + $encoding = self::detectEncoding($string); + } + + if ($encoding && $encoding !== 'ASCII') { + return mb_strlen($string, $encoding); + } + } + + return strlen($string); + } + + public static function substr($string, $start, $length = null, $encoding = false) + { + if (extension_loaded('mbstring')) { + if ($encoding === false) { + $encoding = self::detectEncoding($string); + } + + if ($encoding && $encoding !== 'ASCII') { + return mb_substr($string, $start, $length, $encoding); + } + } + + return substr($string, $start, isset($length) ? $length : PHP_INT_MAX); + } + + public static function detectEncoding($string) + { + if (extension_loaded('mbstring')) { + if ($ret = mb_detect_encoding($string, array_diff(self::$char_encodings, array('Windows-1252')), true)) { + return $ret; + } elseif (!in_array('Windows-1252', self::$char_encodings) || preg_match('/[\x00-\x08\x0B\x0C\x0E-\x1F\x81\x8D\x8F\x90\x9D]/', $string)) { + return false; + } else { + return 'Windows-1252'; + } + } + + if (!extension_loaded('iconv')) { + return 'UTF-8'; + } + + $md5 = md5($string); + foreach (self::$char_encodings as $encoding) { + // fuck knows why, //IGNORE and //TRANSLIT still throw notice + if (md5(@iconv($encoding, $encoding, $string)) === $md5) { + return $encoding; + } + } + + return false; + } + + public static function escape($string, $encoding = false) + { + static $show_dep = true; + + if ($show_dep) { + trigger_error('Kint_Object_Blob::escape() is deprecated and will be removed in Kint 3.0. Use renderer-specific escape methods instead.', KINT_PHP53 ? E_USER_DEPRECATED : E_USER_NOTICE); + $show_dep = false; + } + + if (empty($string)) { + return $string; + } + + if (Kint::$enabled_mode === Kint::MODE_TEXT) { + return $string; + } + + if (Kint::$enabled_mode === Kint::MODE_CLI) { + return str_replace("\x1b", '\\x1b', $string); + } + + if ($encoding === false) { + $encoding = self::detectEncoding($string); + } + + $original_encoding = $encoding; + + if ($encoding === false || $encoding === 'ASCII') { + $encoding = 'UTF-8'; + } + + $string = htmlspecialchars($string, ENT_NOQUOTES, $encoding); + + // this call converts all non-ASCII characters into numeirc htmlentities + if ($original_encoding !== 'ASCII' && function_exists('mb_encode_numericentity')) { + $string = mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding); + } + + return $string; + } +} diff --git a/vendor/kint-php/kint/src/Object/Closure.php b/vendor/kint-php/kint/src/Object/Closure.php new file mode 100644 index 0000000..1db1133 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Closure.php @@ -0,0 +1,43 @@ +access_path !== null) { + return parent::getAccessPath().'('.$this->getParams().')'; + } + } + + public function getSize() + { + } + + public function getParams() + { + if ($this->paramcache !== null) { + return $this->paramcache; + } + + $out = array(); + + foreach ($this->parameters as $p) { + $type = $p->getType(); + + $ref = $p->reference ? '&' : ''; + + if ($type) { + $out[] = $type.' '.$ref.$p->getName(); + } else { + $out[] = $ref.$p->getName(); + } + } + + return $this->paramcache = implode(', ', $out); + } +} diff --git a/vendor/kint-php/kint/src/Object/Color.php b/vendor/kint-php/kint/src/Object/Color.php new file mode 100644 index 0000000..e06be01 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Color.php @@ -0,0 +1,265 @@ + 'f0f8ff', + 'antiquewhite' => 'faebd7', + 'aqua' => '00ffff', + 'aquamarine' => '7fffd4', + 'azure' => 'f0ffff', + 'beige' => 'f5f5dc', + 'bisque' => 'ffe4c4', + 'black' => '000000', + 'blanchedalmond' => 'ffebcd', + 'blue' => '0000ff', + 'blueviolet' => '8a2be2', + 'brown' => 'a52a2a', + 'burlywood' => 'deb887', + 'cadetblue' => '5f9ea0', + 'chartreuse' => '7fff00', + 'chocolate' => 'd2691e', + 'coral' => 'ff7f50', + 'cornflowerblue' => '6495ed', + 'cornsilk' => 'fff8dc', + 'crimson' => 'dc143c', + 'cyan' => '00ffff', + 'darkblue' => '00008b', + 'darkcyan' => '008b8b', + 'darkgoldenrod' => 'b8860b', + 'darkgray' => 'a9a9a9', + 'darkgreen' => '006400', + 'darkgrey' => 'a9a9a9', + 'darkkhaki' => 'bdb76b', + 'darkmagenta' => '8b008b', + 'darkolivegreen' => '556b2f', + 'darkorange' => 'ff8c00', + 'darkorchid' => '9932cc', + 'darkred' => '8b0000', + 'darksalmon' => 'e9967a', + 'darkseagreen' => '8fbc8f', + 'darkslateblue' => '483d8b', + 'darkslategray' => '2f4f4f', + 'darkslategrey' => '2f4f4f', + 'darkturquoise' => '00ced1', + 'darkviolet' => '9400d3', + 'deeppink' => 'ff1493', + 'deepskyblue' => '00bfff', + 'dimgray' => '696969', + 'dimgrey' => '696969', + 'dodgerblue' => '1e90ff', + 'firebrick' => 'b22222', + 'floralwhite' => 'fffaf0', + 'forestgreen' => '228b22', + 'fuchsia' => 'ff00ff', + 'gainsboro' => 'dcdcdc', + 'ghostwhite' => 'f8f8ff', + 'gold' => 'ffd700', + 'goldenrod' => 'daa520', + 'gray' => '808080', + 'green' => '008000', + 'greenyellow' => 'adff2f', + 'grey' => '808080', + 'honeydew' => 'f0fff0', + 'hotpink' => 'ff69b4', + 'indianred' => 'cd5c5c', + 'indigo' => '4b0082', + 'ivory' => 'fffff0', + 'khaki' => 'f0e68c', + 'lavender' => 'e6e6fa', + 'lavenderblush' => 'fff0f5', + 'lawngreen' => '7cfc00', + 'lemonchiffon' => 'fffacd', + 'lightblue' => 'add8e6', + 'lightcoral' => 'f08080', + 'lightcyan' => 'e0ffff', + 'lightgoldenrodyellow' => 'fafad2', + 'lightgray' => 'd3d3d3', + 'lightgreen' => '90ee90', + 'lightgrey' => 'd3d3d3', + 'lightpink' => 'ffb6c1', + 'lightsalmon' => 'ffa07a', + 'lightseagreen' => '20b2aa', + 'lightskyblue' => '87cefa', + 'lightslategray' => '778899', + 'lightslategrey' => '778899', + 'lightsteelblue' => 'b0c4de', + 'lightyellow' => 'ffffe0', + 'lime' => '00ff00', + 'limegreen' => '32cd32', + 'linen' => 'faf0e6', + 'magenta' => 'ff00ff', + 'maroon' => '800000', + 'mediumaquamarine' => '66cdaa', + 'mediumblue' => '0000cd', + 'mediumorchid' => 'ba55d3', + 'mediumpurple' => '9370db', + 'mediumseagreen' => '3cb371', + 'mediumslateblue' => '7b68ee', + 'mediumspringgreen' => '00fa9a', + 'mediumturquoise' => '48d1cc', + 'mediumvioletred' => 'c71585', + 'midnightblue' => '191970', + 'mintcream' => 'f5fffa', + 'mistyrose' => 'ffe4e1', + 'moccasin' => 'ffe4b5', + 'navajowhite' => 'ffdead', + 'navy' => '000080', + 'oldlace' => 'fdf5e6', + 'olive' => '808000', + 'olivedrab' => '6b8e23', + 'orange' => 'ffa500', + 'orangered' => 'ff4500', + 'orchid' => 'da70d6', + 'palegoldenrod' => 'eee8aa', + 'palegreen' => '98fb98', + 'paleturquoise' => 'afeeee', + 'palevioletred' => 'db7093', + 'papayawhip' => 'ffefd5', + 'peachpuff' => 'ffdab9', + 'peru' => 'cd853f', + 'pink' => 'ffc0cb', + 'plum' => 'dda0dd', + 'powderblue' => 'b0e0e6', + 'purple' => '800080', + 'rebeccapurple' => '663399', + 'red' => 'ff0000', + 'rosybrown' => 'bc8f8f', + 'royalblue' => '4169e1', + 'saddlebrown' => '8b4513', + 'salmon' => 'fa8072', + 'sandybrown' => 'f4a460', + 'seagreen' => '2e8b57', + 'seashell' => 'fff5ee', + 'sienna' => 'a0522d', + 'silver' => 'c0c0c0', + 'skyblue' => '87ceeb', + 'slateblue' => '6a5acd', + 'slategray' => '708090', + 'slategrey' => '708090', + 'snow' => 'fffafa', + 'springgreen' => '00ff7f', + 'steelblue' => '4682b4', + 'tan' => 'd2b48c', + 'teal' => '008080', + 'thistle' => 'd8bfd8', + 'tomato' => 'ff6347', + 'turquoise' => '40e0d0', + 'violet' => 'ee82ee', + 'wheat' => 'f5deb3', + 'white' => 'ffffff', + 'whitesmoke' => 'f5f5f5', + 'yellow' => 'ffff00', + 'yellowgreen' => '9acd32', + ); + + public $hints = array('color'); + public $color = null; + + public function __construct($color) + { + $this->color = $color; + } + + /** + * Turns HSL color to RGB. Black magic. + * + * @param float $hue Hue + * @param float $saturation Saturation + * @param float $lightness Lightness + * + * @return array RGB array + */ + public static function hslToRgb($hue, $saturation, $lightness) + { + $hue /= 360; + $saturation /= 100; + $lightness /= 100; + + $m2 = ($lightness <= 0.5) ? $lightness * ($saturation + 1) : $lightness + $saturation - $lightness * $saturation; + $m1 = $lightness * 2 - $m2; + + $out = array( + round(self::hueToRgb($m1, $m2, $hue + 1 / 3) * 255), + round(self::hueToRgb($m1, $m2, $hue) * 255), + round(self::hueToRgb($m1, $m2, $hue - 1 / 3) * 255), + ); + + if (max($out) > 255) { + return; + } else { + return $out; + } + } + + /** + * Helper function for hslToRgb. Even blacker magic. + * + * @return float Color value + */ + private static function hueToRgb($m1, $m2, $hue) + { + $hue = ($hue < 0) ? $hue + 1 : (($hue > 1) ? $hue - 1 : $hue); + if ($hue * 6 < 1) { + return $m1 + ($m2 - $m1) * $hue * 6; + } + if ($hue * 2 < 1) { + return $m2; + } + if ($hue * 3 < 2) { + return $m1 + ($m2 - $m1) * (0.66666 - $hue) * 6; + } + + return $m1; + } + + /** + * Converts RGB to HSL. Color inversion of previous black magic is white magic? + * + * @param float $red Red + * @param float $green Green + * @param float $blue Blue + * + * @return array HSL array + */ + public static function rgbToHsl($red, $green, $blue) + { + $clrMin = min($red, $green, $blue); + $clrMax = max($red, $green, $blue); + $deltaMax = $clrMax - $clrMin; + + $L = ($clrMax + $clrMin) / 510; + + if (0 == $deltaMax) { + $H = 0; + $S = 0; + } else { + if (0.5 > $L) { + $S = $deltaMax / ($clrMax + $clrMin); + } else { + $S = $deltaMax / (510 - $clrMax - $clrMin); + } + + if ($clrMax == $red) { + $H = ($green - $blue) / (6.0 * $deltaMax); + } elseif ($clrMax == $green) { + $H = 1 / 3 + ($blue - $red) / (6.0 * $deltaMax); + } else { + $H = 2 / 3 + ($red - $green) / (6.0 * $deltaMax); + } + + if (0 > $H) { + $H += 1; + } + if (1 < $H) { + $H -= 1; + } + } + + return array( + (round($H * 360) % 360 + 360) % 360, + round($S * 100), + round($L * 100), + ); + } +} diff --git a/vendor/kint-php/kint/src/Object/DateTime.php b/vendor/kint-php/kint/src/Object/DateTime.php new file mode 100644 index 0000000..3b4acb6 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/DateTime.php @@ -0,0 +1,24 @@ +dt = clone $dt; + } + + public function getValueShort() + { + $stamp = $this->dt->format('Y-m-d H:i:s'); + if (KINT_PHP522 && intval($micro = $this->dt->format('u'))) { + $stamp .= '.'.$micro; + } + $stamp .= $this->dt->format('P T'); + + return $stamp; + } +} diff --git a/vendor/kint-php/kint/src/Object/Instance.php b/vendor/kint-php/kint/src/Object/Instance.php new file mode 100644 index 0000000..bbb4b97 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Instance.php @@ -0,0 +1,50 @@ +type === 'object' && $b->type === 'object') { + $aclass = $a->classname; + $bclass = $b->classname; + } + + if (is_subclass_of($aclass, $bclass)) { + return -1; + } + + if (is_subclass_of($bclass, $aclass)) { + return 1; + } + + return 0; + } + + public function transplant(Kint_Object $new) + { + $new = parent::transplant($new); + $new->classname = $this->classname; + $new->hash = $this->hash; + $new->filename = $this->filename; + $new->startline = $this->startline; + + return $new; + } + + public function getType() + { + return $this->classname; + } +} diff --git a/vendor/kint-php/kint/src/Object/Method.php b/vendor/kint-php/kint/src/Object/Method.php new file mode 100644 index 0000000..61c0684 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Method.php @@ -0,0 +1,228 @@ +name = $method->getName(); + $this->filename = $method->getFilename(); + $this->startline = $method->getStartLine(); + $this->endline = $method->getEndLine(); + $this->internal = $method->isInternal(); + $this->docstring = $method->getDocComment(); + + foreach ($method->getParameters() as $param) { + $this->parameters[] = new Kint_Object_Parameter($param); + } + + if (KINT_PHP70) { + $this->returntype = $method->getReturnType(); + if ($this->returntype) { + $this->returntype = (string) $this->returntype; + } + } + + if (!$this->returntype && $this->docstring) { + if (preg_match('/@return\s+(.*)\r?\n/m', $this->docstring, $matches)) { + if (!empty($matches[1])) { + $this->returntype = $matches[1]; + } + } + } + + if ($method instanceof ReflectionMethod) { + $this->static = $method->isStatic(); + $this->operator = $this->static ? Kint_Object::OPERATOR_STATIC : Kint_Object::OPERATOR_OBJECT; + $this->abstract = $method->isAbstract(); + $this->final = $method->isFinal(); + $this->owner_class = $method->getDeclaringClass()->name; + $this->access = Kint_Object::ACCESS_PUBLIC; + if ($method->isProtected()) { + $this->access = Kint_Object::ACCESS_PROTECTED; + } elseif ($method->isPrivate()) { + $this->access = Kint_Object::ACCESS_PRIVATE; + } + } + + $docstring = new Kint_Object_Representation_Docstring( + $this->docstring, + $this->filename, + $this->startline + ); + + $docstring->implicit_label = true; + $this->addRepresentation($docstring); + } + + public function setAccessPathFrom(Kint_Object_Instance $parent) + { + static $magic = array( + '__call' => true, + '__callstatic' => true, + '__clone' => true, + '__construct' => true, + '__debuginfo' => true, + '__destruct' => true, + '__get' => true, + '__invoke' => true, + '__isset' => true, + '__set' => true, + '__set_state' => true, + '__sleep' => true, + '__tostring' => true, + '__unset' => true, + '__wakeup' => true, + ); + + $name = strtolower($this->name); + + if ($name === '__construct') { + if (KINT_PHP53) { + $this->access_path = 'new \\'.$parent->getType(); + } else { + $this->access_path = 'new '.$parent->getType(); + } + } elseif ($name === '__invoke') { + $this->access_path = $parent->access_path; + } elseif ($name === '__clone') { + $this->access_path = 'clone '.$parent->access_path; + $this->showparams = false; + } elseif ($name === '__tostring') { + $this->access_path = '(string) '.$parent->access_path; + $this->showparams = false; + } elseif (isset($magic[$name])) { + $this->access_path = null; + } elseif ($this->static) { + if (KINT_PHP53) { + $this->access_path = '\\'.$this->owner_class.'::'.$this->name; + } else { + $this->access_path = $this->owner_class.'::'.$this->name; + } + } else { + $this->access_path = $parent->access_path.'->'.$this->name; + } + } + + public function getValueShort() + { + if (!$this->value || !($this->value instanceof Kint_Object_Representation_Docstring)) { + return parent::getValueShort(); + } + + $ds = explode("\n", $this->value->docstringWithoutComments()); + + $out = ''; + + foreach ($ds as $line) { + if (strlen(trim($line)) === 0 || $line[0] === '@') { + break; + } + + $out .= $line.' '; + } + + if (strlen($out)) { + return rtrim($out); + } + } + + public function getModifiers() + { + $mods = array( + $this->abstract ? 'abstract' : null, + $this->final ? 'final' : null, + $this->getAccess(), + $this->static ? 'static' : null, + ); + + $out = ''; + + foreach ($mods as $word) { + if ($word !== null) { + $out .= $word.' '; + } + } + + if (strlen($out)) { + return rtrim($out); + } + } + + public function getAccessPath() + { + if ($this->access_path !== null) { + if ($this->showparams) { + return parent::getAccessPath().'('.$this->getParams().')'; + } else { + return parent::getAccessPath(); + } + } + } + + public function getParams() + { + if ($this->paramcache !== null) { + return $this->paramcache; + } + + $out = array(); + + foreach ($this->parameters as $p) { + $type = $p->getType(); + if ($type) { + $type .= ' '; + } + + $default = $p->getDefault(); + if ($default) { + $default = ' = '.$default; + } + + $ref = $p->reference ? '&' : ''; + + $out[] = $type.$ref.$p->getName().$default; + } + + return $this->paramcache = implode(', ', $out); + } + + public function getPhpDocUrl() + { + if (!$this->internal) { + return null; + } + + if ($this->owner_class) { + $class = strtolower($this->owner_class); + } else { + $class = 'function'; + } + + $funcname = str_replace('_', '-', strtolower($this->name)); + + if (strpos($funcname, '--') === 0 && strpos($funcname, '-', 2) !== 0) { + $funcname = substr($funcname, 2); + } + + return 'https://secure.php.net/'.$class.'.'.$funcname; + } +} diff --git a/vendor/kint-php/kint/src/Object/Nothing.php b/vendor/kint-php/kint/src/Object/Nothing.php new file mode 100644 index 0000000..31788f8 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Nothing.php @@ -0,0 +1,6 @@ +type_hint; + } + + public function getName() + { + return '$'.$this->name; + } + + public function __construct(ReflectionParameter $param) + { + if (method_exists('ReflectionParameter', 'getType')) { + if ($type = $param->getType()) { + $this->type_hint = (string) $type; + } + } else { + if ($param->isArray()) { + $this->type_hint = 'array'; + } else { + try { + if ($this->type_hint = $param->getClass()) { + $this->type_hint = $this->type_hint->name; + } + } catch (ReflectionException $e) { + preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches); + $this->type_hint = isset($matches[1]) ? $matches[1] : ''; + } + } + } + + $this->reference = $param->isPassedByReference(); + $this->name = $param->getName(); + + if (KINT_PHP523) { + $this->position = $param->getPosition(); + } + + if ($param->isDefaultValueAvailable()) { + $default = $param->getDefaultValue(); + switch (gettype($default)) { + case 'NULL': + $this->default = 'null'; + break; + case 'boolean': + $this->default = $default ? 'true' : 'false'; + break; + case 'array': + $this->default = count($default) ? 'array(...)' : 'array()'; + break; + default: + $this->default = var_export($default, true); + break; + } + } + } + + public function getDefault() + { + return $this->default; + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation.php b/vendor/kint-php/kint/src/Object/Representation.php new file mode 100644 index 0000000..1b30879 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation.php @@ -0,0 +1,35 @@ +label = $label; + + if ($name === null) { + $name = preg_replace('/[^a-z0-9]+/', '_', strtolower($label)); + } + + $this->name = $name; + } + + public function getLabel() + { + if (is_array($this->contents) && count($this->contents) > 1) { + return $this->label.' ('.count($this->contents).')'; + } else { + return $this->label; + } + } + + public function labelIsImplicit() + { + return $this->implicit_label; + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation/Color.php b/vendor/kint-php/kint/src/Object/Representation/Color.php new file mode 100644 index 0000000..679074d --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation/Color.php @@ -0,0 +1,213 @@ +r, $this->g, $this->b); + + return array_search($hex, Kint_Object_Color::$color_map); + case self::COLOR_HEX_3: + if ($this->r % 0x11 === 0 && $this->g % 0x11 === 0 && $this->b % 0x11 === 0) { + return sprintf('#%1X%1X%1X', round($this->r / 0x11), round($this->g / 0x11), round($this->b / 0x11)); + } else { + return false; + } + case self::COLOR_HEX_6: + return sprintf('#%02X%02X%02X', $this->r, $this->g, $this->b); + case self::COLOR_RGB: + return sprintf('rgb(%d, %d, %d)', $this->r, $this->g, $this->b); + case self::COLOR_RGBA: + return sprintf('rgba(%d, %d, %d, %s)', $this->r, $this->g, $this->b, round($this->a, 4)); + case self::COLOR_HSL: + $val = Kint_Object_Color::rgbToHsl($this->r, $this->g, $this->b); + + return vsprintf('hsl(%d, %d%%, %d%%)', $val); + case self::COLOR_HSLA: + $val = Kint_Object_Color::rgbToHsl($this->r, $this->g, $this->b); + + return sprintf('hsla(%d, %d%%, %d%%, %s)', $val[0], $val[1], $val[2], round($this->a, 4)); + case self::COLOR_HEX_4: + if ($this->r % 0x11 === 0 && $this->g % 0x11 === 0 && $this->b % 0x11 === 0 && ($this->a * 255) % 0x11 === 0) { + return sprintf('#%1X%1X%1X%1X', round($this->r / 0x11), round($this->g / 0x11), round($this->b / 0x11), round($this->a * 0xF)); + } else { + return false; + } + case self::COLOR_HEX_8: + return sprintf('#%02X%02X%02X%02X', $this->r, $this->g, $this->b, round($this->a * 0xFF)); + case null: + return $this->contents; + } + + return false; + } + + public function __construct($value) + { + parent::__construct('Color'); + + $this->contents = $value; + $this->setValues($value); + } + + public function hasAlpha($variant = null) + { + if ($variant === null) { + $variant = $this->variant; + } + + switch ($variant) { + case self::COLOR_NAME: + return $this->a !== 1; + case self::COLOR_RGBA: + case self::COLOR_HSLA: + case self::COLOR_HEX_4: + case self::COLOR_HEX_8: + return true; + default: + return false; + } + } + + protected function setValues($value) + { + $value = strtolower(trim($value)); + // Find out which variant of color input it is + if (isset(Kint_Object_Color::$color_map[$value])) { + $variant = self::COLOR_NAME; + } elseif (substr($value, 0, 1) === '#') { + $value = substr($value, 1); + + if (dechex(hexdec($value)) !== $value) { + return; + } + + switch (strlen($value)) { + case 3: + $variant = self::COLOR_HEX_3; + break; + case 6: + $variant = self::COLOR_HEX_6; + break; + case 4: + $variant = self::COLOR_HEX_4; + break; + case 8: + $variant = self::COLOR_HEX_8; + break; + } + } else { + if (!preg_match('/^((?:rgb|hsl)a?)\s*\(([0-9\.%,\s]+)\)$/i', $value, $match)) { + return; + } + + switch ($match[1]) { + case 'rgb': + $variant = self::COLOR_RGB; + break; + case 'rgba': + $variant = self::COLOR_RGBA; + break; + case 'hsl': + $variant = self::COLOR_HSL; + break; + case 'hsla': + $variant = self::COLOR_HSLA; + break; + } + + $value = explode(',', $match[2]); + + if ($this->hasAlpha($variant)) { + if (count($value) !== 4) { + return; + } + } elseif (count($value) !== 3) { + return; + } + + foreach ($value as $i => &$color) { + $color = trim($color); + + if (strpos($color, '%') !== false) { + $color = str_replace('%', '', $color); + + if ($i === 3) { + $color = $color / 100; + } elseif (in_array($variant, array(self::COLOR_RGB, self::COLOR_RGBA))) { + $color = round($color / 100 * 255); + } elseif ($i === 0 && in_array($variant, array(self::COLOR_HSL, self::COLOR_HSLA))) { + $color = $color / 100 * 360; + } + } + + if ($i === 0 && in_array($variant, array(self::COLOR_HSL, self::COLOR_HSLA))) { + $color = ($color % 360 + 360) % 360; + } + } + } + + // Assign the correct properties based on the variant + switch ($variant) { + case self::COLOR_HEX_4: + $this->a = hexdec($value[3]) / 0xF; + // Fallthrough + case self::COLOR_HEX_3: + $this->r = hexdec($value[0]) * 0x11; + $this->g = hexdec($value[1]) * 0x11; + $this->b = hexdec($value[2]) * 0x11; + break; + case self::COLOR_NAME: + $value = Kint_Object_Color::$color_map[$value].'FF'; + case self::COLOR_HEX_8: + $this->a = hexdec(substr($value, 6, 2)) / 0xFF; + // Fallthrough + case self::COLOR_HEX_6: + $value = str_split($value, 2); + $this->r = hexdec($value[0]); + $this->g = hexdec($value[1]); + $this->b = hexdec($value[2]); + break; + case self::COLOR_RGBA: + $this->a = $value[3]; + // Fallthrough + case self::COLOR_RGB: + list($this->r, $this->g, $this->b) = $value; + break; + case self::COLOR_HSLA: + $this->a = $value[3]; + // Fallthrough + case self::COLOR_HSL: + $value = Kint_Object_Color::hslToRgb($value[0], $value[1], $value[2]); + list($this->r, $this->g, $this->b) = $value; + break; + } + + // If something has gone horribly wrong + if ($this->r > 0xFF || $this->g > 0xFF || $this->b > 0xFF || $this->a > 1) { + $this->variant = null; + } else { + $this->variant = $variant; + } + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation/Docstring.php b/vendor/kint-php/kint/src/Object/Representation/Docstring.php new file mode 100644 index 0000000..cd9877e --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation/Docstring.php @@ -0,0 +1,48 @@ +file = $file; + $this->line = $line; + $this->class = $class; + $this->contents = $docstring; + } + + /** + * Returns the representation's docstring without surrounding comments. + * + * Note that this will not work flawlessly. + * + * On comments with whitespace after the stars the lines will begin with + * whitespace, since we can't accurately guess how much of an indentation + * is required. + * + * And on lines without stars on the left this may eat bullet points. + * + * Long story short: If you want the docstring read the contents. If you + * absolutely must have it without comments (ie renderValueShort) this will + * probably do. + * + * @return string Docstring with comments stripped + */ + public function docstringWithoutComments() + { + if (!$this->contents) { + return null; + } + + $string = substr($this->contents, 3, -2); + $string = preg_replace('/^\s*\*\s*?(\S|$)/m', '\1', $string); + + return trim($string); + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation/Microtime.php b/vendor/kint-php/kint/src/Object/Representation/Microtime.php new file mode 100644 index 0000000..0f38ed6 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation/Microtime.php @@ -0,0 +1,37 @@ +group = $group; + $this->lap = $lap; + $this->total = $total; + $this->i = $i; + + if ($i) { + $this->avg = $total / $i; + } + + $this->mem = memory_get_usage(); + $this->mem_real = memory_get_usage(true); + + if (KINT_PHP52) { + $this->mem_peak = memory_get_peak_usage(); + $this->mem_peak_real = memory_get_peak_usage(true); + } + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation/Source.php b/vendor/kint-php/kint/src/Object/Representation/Source.php new file mode 100644 index 0000000..d80969e --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation/Source.php @@ -0,0 +1,45 @@ +filename = $filename; + $this->line = $line; + + $start_line = max($line - $padding, 1); + $length = $line + $padding + 1 - $start_line; + $this->source = self::getSource($filename, $start_line, $length); + if ($this->source !== false) { + $this->contents = implode("\n", $this->source); + } + } + + /** + * Gets section of source code. + * + * @param string $filename Full path to file + * @param int $start_line The first line to display (1 based) + * @param int|null $length Amount of lines to show + * + * @return bool|array + */ + public static function getSource($filename, $start_line = 1, $length = null) + { + if (!$filename or !is_readable($filename)) { + return false; + } + $source = preg_split("/\r\n|\n|\r/", file_get_contents($filename)); + $source = array_combine(range(1, count($source)), $source); + $source = array_slice($source, $start_line - 1, $length, true); + + return $source; + } +} diff --git a/vendor/kint-php/kint/src/Object/Representation/SplFileInfo.php b/vendor/kint-php/kint/src/Object/Representation/SplFileInfo.php new file mode 100644 index 0000000..90ffcb0 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Representation/SplFileInfo.php @@ -0,0 +1,134 @@ +getPathname())) { + return; + } + + $this->perms = $fileInfo->getPerms(); + $this->size = $fileInfo->getSize(); + $this->is_dir = $fileInfo->isDir(); + $this->is_file = $fileInfo->isFile(); + $this->is_link = $fileInfo->isLink(); + $this->owner = $fileInfo->getOwner(); + $this->group = $fileInfo->getGroup(); + $this->ctime = $fileInfo->getCTime(); + $this->mtime = $fileInfo->getMTime(); + + if (($this->perms & 0xC000) === 0xC000) { + $this->typename = 'File socket'; + $this->typeflag = 's'; + } elseif ($this->is_file) { + if ($this->is_link) { + $this->typename = 'File symlink'; + $this->typeflag = 'l'; + } else { + $this->typename = 'File'; + $this->typeflag = '-'; + } + } elseif (($this->perms & 0x6000) === 0x6000) { + $this->typename = 'Block special file'; + $this->typeflag = 'b'; + } elseif ($this->is_dir) { + if ($this->is_link) { + $this->typename = 'Directory symlink'; + $this->typeflag = 'l'; + } else { + $this->typename = 'Directory'; + $this->typeflag = 'd'; + } + } elseif (($this->perms & 0x2000) === 0x2000) { + $this->typename = 'Character special file'; + $this->typeflag = 'c'; + } elseif (($this->perms & 0x1000) === 0x1000) { + $this->typename = 'FIFO pipe file'; + $this->typeflag = 'p'; + } + + parent::__construct('SplFileInfo'); + + $this->path = $fileInfo->getPathname(); + $this->realpath = realpath($this->path); + + if ($this->is_link && method_exists($fileInfo, 'getLinktarget')) { + $this->linktarget = $fileInfo->getLinktarget(); + } + + $this->flags = array($this->typeflag); + + // User + $this->flags[] = (($this->perms & 0400) ? 'r' : '-'); + $this->flags[] = (($this->perms & 0200) ? 'w' : '-'); + $this->flags[] = (($this->perms & 0100) ? (($this->perms & 04000) ? 's' : 'x') : (($this->perms & 04000) ? 'S' : '-')); + + // Group + $this->flags[] = (($this->perms & 0040) ? 'r' : '-'); + $this->flags[] = (($this->perms & 0020) ? 'w' : '-'); + $this->flags[] = (($this->perms & 0010) ? (($this->perms & 02000) ? 's' : 'x') : (($this->perms & 02000) ? 'S' : '-')); + + // Other + $this->flags[] = (($this->perms & 0004) ? 'r' : '-'); + $this->flags[] = (($this->perms & 0002) ? 'w' : '-'); + $this->flags[] = (($this->perms & 0001) ? (($this->perms & 01000) ? 't' : 'x') : (($this->perms & 01000) ? 'T' : '-')); + + $this->contents = implode($this->flags).' '.$this->owner.' '.$this->group.' '.$this->getSize().' '.$this->getMTime().' '; + + if ($this->is_link && $this->linktarget) { + $this->contents .= $this->path.' -> '.$this->linktarget; + } elseif (strlen($this->realpath) < strlen($this->path)) { + $this->contents .= $this->realpath; + } else { + $this->contents .= $this->path; + } + } + + public function getLabel() + { + return $this->typename.' ('.$this->getSize().')'; + } + + public function getSize() + { + static $unit = array('B', 'KB', 'MB', 'GB', 'TB'); + + $size = $this->size; + + if ($this->size) { + $i = floor(log($this->size, 1024)); + $size = round($this->size / pow(1024, $i), 2).$unit[$i]; + } + + return $size; + } + + public function getMTime() + { + $year = date('Y', $this->mtime); + + if ($year !== date('Y')) { + return date('M d Y', $this->mtime); + } else { + return date('M d H:i', $this->mtime); + } + } +} diff --git a/vendor/kint-php/kint/src/Object/Resource.php b/vendor/kint-php/kint/src/Object/Resource.php new file mode 100644 index 0000000..0e30bc4 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Resource.php @@ -0,0 +1,23 @@ +resource_type) { + return $this->resource_type.' resource'; + } else { + return 'resource'; + } + } + + public function transplant(Kint_Object $new) + { + $new = parent::transplant($new); + $new->resource_type = $this->resource_type; + + return $new; + } +} diff --git a/vendor/kint-php/kint/src/Object/Stream.php b/vendor/kint-php/kint/src/Object/Stream.php new file mode 100644 index 0000000..56f50c9 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Stream.php @@ -0,0 +1,27 @@ +stream_meta = $meta; + } + + public function getValueShort() + { + if (empty($this->stream_meta['uri'])) { + return; + } + + $uri = $this->stream_meta['uri']; + + if (KINT_PHP524 && stream_is_local($uri)) { + return Kint::shortenPath($uri); + } else { + return $uri; + } + } +} diff --git a/vendor/kint-php/kint/src/Object/Throwable.php b/vendor/kint-php/kint/src/Object/Throwable.php new file mode 100644 index 0000000..b23ddf8 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Throwable.php @@ -0,0 +1,23 @@ +message = $throw->getMessage(); + } + + public function getValueShort() + { + if (strlen($this->message)) { + return '"'.$this->message.'"'; + } + } +} diff --git a/vendor/kint-php/kint/src/Object/Trace.php b/vendor/kint-php/kint/src/Object/Trace.php new file mode 100644 index 0000000..162cd92 --- /dev/null +++ b/vendor/kint-php/kint/src/Object/Trace.php @@ -0,0 +1,20 @@ +size) { + return 'empty'; + } + + return parent::getSize(); + } +} diff --git a/vendor/kint-php/kint/src/Object/TraceFrame.php b/vendor/kint-php/kint/src/Object/TraceFrame.php new file mode 100644 index 0000000..5d93f6b --- /dev/null +++ b/vendor/kint-php/kint/src/Object/TraceFrame.php @@ -0,0 +1,66 @@ +trace = array( + 'function' => isset($frame['function']) ? $frame['function'] : null, + 'line' => isset($frame['line']) ? $frame['line'] : null, + 'file' => isset($frame['file']) ? $frame['file'] : null, + 'class' => isset($frame['class']) ? $frame['class'] : null, + 'type' => isset($frame['type']) ? $frame['type'] : null, + 'object' => null, + 'args' => null, + ); + + if ($this->trace['class'] && method_exists($this->trace['class'], $this->trace['function'])) { + $func = new ReflectionMethod($this->trace['class'], $this->trace['function']); + $this->trace['function'] = new Kint_Object_Method($func); + } elseif (!$this->trace['class'] && function_exists($this->trace['function'])) { + $func = new ReflectionFunction($this->trace['function']); + $this->trace['function'] = new Kint_Object_Method($func); + } + + foreach ($this->value->contents as $frame_prop) { + if ($frame_prop->name === 'object') { + $this->trace['object'] = $frame_prop; + $this->trace['object']->name = null; + $this->trace['object']->operator = Kint_Object::OPERATOR_NONE; + } + if ($frame_prop->name === 'args') { + $this->trace['args'] = $frame_prop->value->contents; + + if (is_object($this->trace['function'])) { + foreach (array_values($this->trace['function']->parameters) as $param) { + if (isset($this->trace['args'][$param->position])) { + $this->trace['args'][$param->position]->name = $param->getName(); + } + } + } + } + } + + $this->clearRepresentations(); + + if (isset($this->trace['file'], $this->trace['line']) && is_readable($this->trace['file'])) { + $this->addRepresentation(new Kint_Object_Representation_Source($this->trace['file'], $this->trace['line'])); + } + + if ($this->trace['args']) { + $args = new Kint_Object_Representation('Arguments'); + $args->contents = $this->trace['args']; + $this->addRepresentation($args); + } + + if ($this->trace['object']) { + $callee = new Kint_Object_Representation('object'); + $callee->label = 'Callee object ['.$this->trace['object']->classname.']'; + $callee->contents[] = $this->trace['object']; + $this->addRepresentation($callee); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser.php b/vendor/kint-php/kint/src/Parser.php new file mode 100644 index 0000000..f4f47f3 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser.php @@ -0,0 +1,470 @@ +marker = uniqid("kint\0", true); + $this->caller_class = $c; + $this->max_depth = $max_depth; + } + + public function parse(&$var, Kint_Object $o) + { + $o->type = strtolower(gettype($var)); + + if (!$this->applyPlugins($var, $o, self::TRIGGER_BEGIN)) { + return $o; + } + + switch ($o->type) { + case 'array': + return $this->parseArray($var, $o); + case 'boolean': + case 'double': + case 'integer': + case 'null': + return $this->parseGeneric($var, $o); + case 'object': + return $this->parseObject($var, $o); + case 'resource': + return $this->parseResource($var, $o); + case 'string': + return $this->parseString($var, $o); + default: + return $this->parseUnknown($var, $o); + } + } + + private function parseGeneric(&$var, Kint_Object $o) + { + $rep = new Kint_Object_Representation('Contents'); + $rep->contents = $var; + $rep->implicit_label = true; + $o->addRepresentation($rep); + + $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); + + return $o; + } + + private function parseString(&$var, Kint_Object $o) + { + $string = $o->transplant(new Kint_Object_Blob()); + $string->encoding = Kint_Object_Blob::detectEncoding($var); + $string->size = Kint_Object_Blob::strlen($var, $string->encoding); + + $rep = new Kint_Object_Representation('Contents'); + $rep->contents = $var; + $rep->implicit_label = true; + + $string->addRepresentation($rep); + + $this->applyPlugins($var, $string, self::TRIGGER_SUCCESS); + + return $string; + } + + private function parseArray(array &$var, Kint_Object $o) + { + $array = $o->transplant(new Kint_Object()); + $array->size = count($var); + + if (isset($var[$this->marker])) { + --$array->size; + $array->hints[] = 'recursion'; + + $this->applyPlugins($var, $array, self::TRIGGER_RECURSION); + + return $array; + } + + $rep = new Kint_Object_Representation('Contents'); + $rep->implicit_label = true; + $array->addRepresentation($rep); + + if ($array->size) { + if ($this->max_depth && $o->depth >= $this->max_depth) { + $array->hints[] = 'depth_limit'; + + $this->applyPlugins($var, $array, self::TRIGGER_DEPTH_LIMIT); + + return $array; + } + + // Don't even bother with reference checking below 5.2.2. It's an + // absolute nightmare. The foreach loop depends on the array pointer + // which "conveniently" moves about semi-randomly when you alter + // the value you're looping over by means of a reference. + if (KINT_PHP522) { + $copy = array_values($var); + } + + // It's really really hard to access numeric string keys in arrays, + // and it's really really hard to access integer properties in + // objects, so we just use array_values and index by counter to get + // at it reliably for reference testing. This also affects access + // paths since it's pretty much impossible to access these things + // without complicated stuff you should never need to do. + $i = 0; + + // Set the marker for recursion + $var[$this->marker] = $array->depth; + + foreach ($var as $key => &$val) { + if ($key === $this->marker) { + continue; + } + + $child = new Kint_Object(); + $child->name = $key; + $child->depth = $array->depth + 1; + $child->access = Kint_Object::ACCESS_NONE; + $child->operator = Kint_Object::OPERATOR_ARRAY; + + if ($array->access_path !== null) { + if (is_string($key) && (string) (int) $key === $key) { + $child->access_path = 'array_values('.$array->access_path.')['.$i.']'; + } else { + $child->access_path = $array->access_path.'['.var_export($key, true).']'; + } + } + + if (KINT_PHP522) { + $stash = $val; + $copy[$i] = $this->marker; + if ($val === $this->marker) { + $child->reference = true; + $val = $stash; + } + } + + $rep->contents[] = $this->parse($val, $child); + ++$i; + } + + $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); + unset($var[$this->marker]); + + return $array; + } else { + $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); + + return $array; + } + } + + private function parseObject(&$var, Kint_Object $o) + { + if (KINT_PHP53 || function_exists('spl_object_hash')) { + $hash = spl_object_hash($var); + } else { + ob_start(); + var_dump($var); + preg_match('/#(\d+)/', ob_get_clean(), $match); + $hash = $match[1]; + } + + $values = (array) $var; + + $object = $o->transplant(new Kint_Object_Instance()); + $object->classname = get_class($var); + $object->hash = $hash; + $object->size = count($values); + + if (isset($this->object_hashes[$hash])) { + $object->hints[] = 'recursion'; + + $this->applyPlugins($var, $object, self::TRIGGER_RECURSION); + + return $object; + } + + $this->object_hashes[$hash] = $object; + + if ($this->max_depth && $o->depth >= $this->max_depth) { + $object->hints[] = 'depth_limit'; + + $this->applyPlugins($var, $object, self::TRIGGER_DEPTH_LIMIT); + unset($this->object_hashes[$hash]); + + return $object; + } + + // ArrayObject (and maybe ArrayIterator, did not try yet) unsurprisingly + // consist of mainly dark magic. What bothers me most, var_dump sees no + // problem with it, and ArrayObject also uses a custom, undocumented + // serialize function, so you can see the properties in internal functions, + // but can never iterate some of them if the flags are not STD_PROP_LIST. Fun stuff. + if ($var instanceof ArrayObject) { + $ArrayObject_flags_stash = $var->getFlags(); + $var->setFlags(ArrayObject::STD_PROP_LIST); + } + + $reflector = new ReflectionObject($var); + + if ($reflector->isUserDefined()) { + $object->filename = $reflector->getFileName(); + $object->startline = $reflector->getStartLine(); + } + + $rep = new Kint_Object_Representation('Properties'); + + if (KINT_PHP522) { + $copy = array_values($values); + } + + $i = 0; + + // Reflection will not show parent classes private properties, and if a + // property was unset it will happly trigger a notice looking for it. + foreach ($values as $key => &$val) { + // Casting object to array: + // private properties show in the form "\0$owner_class_name\0$property_name"; + // protected properties show in the form "\0*\0$property_name"; + // public properties show in the form "$property_name"; + // http://www.php.net/manual/en/language.types.array.php#language.types.array.casting + + $child = new Kint_Object(); + $child->depth = $object->depth + 1; + $child->owner_class = $object->classname; + $child->operator = Kint_Object::OPERATOR_OBJECT; + $child->access = Kint_Object::ACCESS_PUBLIC; + + $split_key = explode("\0", $key, 3); + + if (count($split_key) === 3 && $split_key[0] === '') { + $child->name = $split_key[2]; + if ($split_key[1] === '*') { + $child->access = Kint_Object::ACCESS_PROTECTED; + } else { + $child->access = Kint_Object::ACCESS_PRIVATE; + $child->owner_class = $split_key[1]; + } + } elseif (KINT_PHP72) { + $child->name = (string) $key; + } else { + $child->name = $key; + } + + if ($this->childHasPath($object, $child)) { + $child->access_path = $object->access_path; + + if (!KINT_PHP72 && is_int($child->name)) { + $child->access_path = 'array_values((array) '.$child->access_path.')['.$i.']'; + } elseif (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $child->name)) { + $child->access_path .= '->'.$child->name; + } else { + $child->access_path .= '->{'.var_export((string) $child->name, true).'}'; + } + } + + if (KINT_PHP522) { + $stash = $val; + $copy[$i] = $this->marker; + if ($val === $this->marker) { + $child->reference = true; + $val = $stash; + } + } + + $rep->contents[] = $this->parse($val, $child); + ++$i; + } + + if (isset($ArrayObject_flags_stash)) { + $var->setFlags($ArrayObject_flags_stash); + } + + usort($rep->contents, array('Kint_Parser', 'sortObjectProperties')); + + $object->addRepresentation($rep); + $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS); + unset($this->object_hashes[$hash]); + + return $object; + } + + private function parseResource(&$var, Kint_Object $o) + { + $resource = $o->transplant(new Kint_Object_Resource()); + $resource->resource_type = get_resource_type($var); + + $this->applyPlugins($var, $resource, self::TRIGGER_SUCCESS); + + return $resource; + } + + private function parseUnknown(&$var, Kint_Object $o) + { + $o->type = 'unknown'; + $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); + + return $o; + } + + public function addPlugin(Kint_Parser_Plugin $p) + { + if (!$types = $p->getTypes()) { + return false; + } + + if (!$triggers = $p->getTriggers()) { + return false; + } + + $p->setParser($this); + + foreach ($types as $type) { + if (!isset($this->plugins[$type])) { + $this->plugins[$type] = array( + self::TRIGGER_BEGIN => array(), + self::TRIGGER_SUCCESS => array(), + self::TRIGGER_RECURSION => array(), + self::TRIGGER_DEPTH_LIMIT => array(), + ); + } + + foreach ($this->plugins[$type] as $trigger => &$pool) { + if ($triggers & $trigger) { + $pool[] = $p; + } + } + } + + return true; + } + + public function clearPlugins() + { + $this->plugins = array(); + } + + /** + * Applies plugins for an object type. + * + * @param mixed &$var variable + * @param Kint_Object &$o Kint object parsed so far + * @param int $trigger The trigger to check for the plugins + * + * @return bool Continue parsing + */ + private function applyPlugins(&$var, Kint_Object &$o, $trigger) + { + $break_stash = $this->parse_break; + $this->parse_break = false; + + $plugins = array(); + + if (isset($this->plugins[$o->type][$trigger])) { + $plugins = $this->plugins[$o->type][$trigger]; + } + + foreach ($plugins as $plugin) { + try { + $plugin->parse($var, $o, $trigger); + } catch (Exception $e) { + trigger_error( + 'An exception ('.get_class($e).') was thrown in '.$e->getFile().' on line '.$e->getLine().' while executing Kint Parser Plugin "'.get_class($plugin).'". Error message: '.$e->getMessage(), + E_USER_WARNING + ); + } + + if ($this->parse_break) { + $this->parse_break = $break_stash; + + return false; + } + } + + $this->parse_break = $break_stash; + + return true; + } + + public function haltParse() + { + $this->parse_break = true; + } + + public function childHasPath(Kint_Object_Instance $parent, Kint_Object $child) + { + if ($parent->type === 'object' && ($parent->access_path !== null || $child->static || $child->const)) { + if ($child->access === Kint_Object::ACCESS_PUBLIC) { + return true; + } elseif ($child->access === Kint_Object::ACCESS_PRIVATE && $this->caller_class && $this->caller_class === $child->owner_class) { + // We can't accurately determine owner class on statics / consts below 5.3 so deny + // the access path just to be sure. See ClassStatics for more info + if (KINT_PHP53 || (!$child->static && !$child->const)) { + return true; + } + } elseif ($child->access === Kint_Object::ACCESS_PROTECTED && $this->caller_class) { + if (is_a($this->caller_class, $child->owner_class, true) || is_a($child->owner_class, $this->caller_class, true)) { + return true; + } + } + } + + return false; + } + + /** + * Returns an array without the recursion marker in it. + * + * DO NOT pass an array that has had it's marker removed back + * into the parser, it will result in an extra recursion + * + * @param array $array Array potentially containing a recursion marker + * + * @return array Array with recursion marker removed + */ + public function getCleanArray(array $array) + { + unset($array[$this->marker]); + + return $array; + } + + private static function sortObjectProperties(Kint_Object $a, Kint_Object $b) + { + $sort = Kint_Object::sortByAccess($a, $b); + if ($sort) { + return $sort; + } + + $sort = Kint_Object::sortByName($a, $b); + if ($sort) { + return $sort; + } + + return Kint_Object_Instance::sortByHierarchy($a->owner_class, $b->owner_class); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Base64.php b/vendor/kint-php/kint/src/Parser/Base64.php new file mode 100644 index 0000000..25bf14e --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Base64.php @@ -0,0 +1,58 @@ +depth = $o->depth + 1; + $base_obj->name = 'base64_decode('.$o->name.')'; + + if ($o->access_path) { + $base_obj->access_path = 'base64_decode('.$o->access_path.')'; + } + + $r = new Kint_Object_Representation('Base64'); + $r->contents = $this->parser->parse($data, $base_obj); + + if (strlen($var) > self::$min_length_soft) { + $o->addRepresentation($r, 0); + } else { + $o->addRepresentation($r); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/Binary.php b/vendor/kint-php/kint/src/Parser/Binary.php new file mode 100644 index 0000000..45632f9 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Binary.php @@ -0,0 +1,21 @@ +encoding, array('ASCII', 'UTF-8'))) { + $o->value->hints[] = 'binary'; + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/Blacklist.php b/vendor/kint-php/kint/src/Parser/Blacklist.php new file mode 100644 index 0000000..b2dd3ec --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Blacklist.php @@ -0,0 +1,73 @@ +blacklist($var, $o); + } + } + + if ($o->depth <= 0) { + return; + } + + foreach (self::$shallow_blacklist as $class) { + if ($var instanceof $class) { + return $this->blacklist($var, $o); + } + } + } + + protected function blacklist(&$var, &$o) + { + if (function_exists('spl_object_hash')) { + $hash = spl_object_hash($var); + } else { + ob_start(); + var_dump($var); + preg_match('/#(\d+)/', ob_get_clean(), $match); + $hash = $match[1]; + } + + $object = $o->transplant(new Kint_Object_Instance()); + $object->classname = get_class($var); + $object->hash = $hash; + $object->clearRepresentations(); + $object->value = null; + $object->size = null; + $object->hints[] = 'blacklist'; + + $o = $object; + + $this->parser->haltParse(); + + return; + } +} diff --git a/vendor/kint-php/kint/src/Parser/ClassMethods.php b/vendor/kint-php/kint/src/Parser/ClassMethods.php new file mode 100644 index 0000000..736ab07 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/ClassMethods.php @@ -0,0 +1,82 @@ +getMethods() as $method) { + $methods[] = new Kint_Object_Method($method); + } + + usort($methods, array('Kint_Parser_ClassMethods', 'sort')); + + self::$cache[$class] = $methods; + } + + if (!empty(self::$cache[$class])) { + $rep = new Kint_Object_Representation('Available methods', 'methods'); + + // Can't cache access paths + foreach (self::$cache[$class] as $m) { + $method = clone $m; + $method->depth = $o->depth + 1; + + if (!$this->parser->childHasPath($o, $method)) { + $method->access_path = null; + } else { + $method->setAccessPathFrom($o); + } + + if ($method->owner_class !== $class) { + $ds = clone $method->getRepresentation('docstring'); + $ds->class = $method->owner_class; + $method->replaceRepresentation($ds); + } + + $rep->contents[] = $method; + } + + $o->addRepresentation($rep); + } + } + + private static function sort(Kint_Object_Method $a, Kint_Object_Method $b) + { + $sort = ((int) $a->static) - ((int) $b->static); + if ($sort) { + return $sort; + } + + $sort = Kint_Object::sortByAccess($a, $b); + if ($sort) { + return $sort; + } + + $sort = Kint_Object_Instance::sortByHierarchy($a->owner_class, $b->owner_class); + if ($sort) { + return $sort; + } + + return $a->startline - $b->startline; + } +} diff --git a/vendor/kint-php/kint/src/Parser/ClassStatics.php b/vendor/kint-php/kint/src/Parser/ClassStatics.php new file mode 100644 index 0000000..fe58b8f --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/ClassStatics.php @@ -0,0 +1,130 @@ +getConstants() as $name => $val) { + $const = Kint_Object::blank($name); + $const->const = true; + $const->depth = $o->depth + 1; + $const->owner_class = $class; + if (KINT_PHP53) { + $const->access_path = '\\'.$class.'::'.$const->name; + } else { + $const->access_path = $class.'::'.$const->name; + } + $const->operator = Kint_Object::OPERATOR_STATIC; + $const = $this->parser->parse($val, $const); + + $consts[] = $const; + } + + self::$cache[$class] = $consts; + } + + $statics = new Kint_Object_Representation('Static class properties', 'statics'); + $statics->contents = self::$cache[$class]; + + // Statics + + if (!KINT_PHP53) { + $static_map = $reflection->getStaticProperties(); + } + + foreach ($reflection->getProperties(ReflectionProperty::IS_STATIC) as $static) { + $prop = new Kint_Object(); + $prop->name = '$'.$static->getName(); + $prop->depth = $o->depth + 1; + $prop->static = true; + $prop->operator = Kint_Object::OPERATOR_STATIC; + + if (KINT_PHP53) { + $prop->owner_class = $static->getDeclaringClass()->name; + } else { + // getDeclaringClass() is broke in old PHP versions, but getProperties() will only + // return accessible properties and we can access them through the parent class so + // we can just put the parent class here. It's not an accurate portrayal of where + // the static comes from, but it shows a working access path so it's good enough + $prop->owner_class = $class; + } + + $prop->access = Kint_Object::ACCESS_PUBLIC; + if ($static->isProtected()) { + $prop->access = Kint_Object::ACCESS_PROTECTED; + } elseif ($static->isPrivate()) { + $prop->access = Kint_Object::ACCESS_PRIVATE; + } + + if ($this->parser->childHasPath($o, $prop)) { + if (KINT_PHP53) { + $prop->access_path = '\\'.$prop->owner_class.'::'.$prop->name; + } else { + $prop->access_path = $prop->owner_class.'::'.$prop->name; + } + } + + if (KINT_PHP53) { + $static->setAccessible(true); + $val = $static->getValue(); + } else { + switch ($prop->access) { + case Kint_Object::ACCESS_PUBLIC: + $val = $static_map[$static->getName()]; + break; + case Kint_Object::ACCESS_PROTECTED: + $val = $static_map["\0*\0".$static->getName()]; + break; + case Kint_Object::ACCESS_PRIVATE: + $val = $static_map["\0".$class."\0".$static->getName()]; + break; + } + } + + $statics->contents[] = $this->parser->parse($val, $prop); + } + + if (empty($statics->contents)) { + return; + } + + usort($statics->contents, array('Kint_Parser_ClassStatics', 'sort')); + + $o->addRepresentation($statics); + } + + private static function sort(Kint_Object $a, Kint_Object $b) + { + $sort = ((int) $a->const) - ((int) $b->const); + if ($sort) { + return $sort; + } + + $sort = Kint_Object::sortByAccess($a, $b); + if ($sort) { + return $sort; + } + + return Kint_Object_Instance::sortByHierarchy($a->owner_class, $b->owner_class); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Closure.php b/vendor/kint-php/kint/src/Parser/Closure.php new file mode 100644 index 0000000..d28d820 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Closure.php @@ -0,0 +1,68 @@ +transplant(new Kint_Object_Closure()); + $o->removeRepresentation('properties'); + + $closure = new ReflectionFunction($var); + + $o->filename = $closure->getFileName(); + $o->startline = $closure->getStartLine(); + + foreach ($closure->getParameters() as $param) { + $o->parameters[] = new Kint_Object_Parameter($param); + } + + $p = new Kint_Object_Representation('Parameters'); + $p->contents = &$o->parameters; + $o->addRepresentation($p, 0); + + $statics = array(); + + if (method_exists($closure, 'getClosureThis') && $v = $closure->getClosureThis()) { + $statics = array('this' => $v); + } + + if (count($statics = $statics + $closure->getStaticVariables())) { + $statics_parsed = array(); + + foreach ($statics as $name => &$static) { + $obj = Kint_Object::blank('$'.$name); + $obj->depth = $o->depth + 1; + $statics_parsed[$name] = $this->parser->parse($static, $obj); + if ($statics_parsed[$name]->value === null) { + $statics_parsed[$name]->access_path = null; + } + } + + $r = new Kint_Object_Representation('Uses'); + $r->contents = $statics_parsed; + $o->addRepresentation($r, 0); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/Color.php b/vendor/kint-php/kint/src/Parser/Color.php new file mode 100644 index 0000000..e9605ac --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Color.php @@ -0,0 +1,35 @@ + 32) { + return; + } + + $trimmed = strtolower(trim($var)); + + if (!isset(Kint_Object_Color::$color_map[$trimmed]) && !preg_match('/^(?:(?:rgb|hsl)[^\)]{6,}\)|#[0-9a-fA-F]{3,8})$/', $trimmed)) { + return; + } + + $rep = new Kint_Object_Representation_Color($var); + + if ($rep->variant) { + $o = $o->transplant(new Kint_Object_Color($rep)); + $o->removeRepresentation($o->value->name); + $o->addRepresentation($rep, 0); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/DOMIterator.php b/vendor/kint-php/kint/src/Parser/DOMIterator.php new file mode 100644 index 0000000..96e11d2 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/DOMIterator.php @@ -0,0 +1,81 @@ +size = $var->length; + if ($o->size === 0) { + $o->replaceRepresentation(new Kint_Object_Representation('Iterator')); + $o->size = null; + + return; + } + + // Depth limit + // Make empty iterator representation since we need it in DOMNode to point out depth limits + if ($this->parser->max_depth && $o->depth + 1 >= $this->parser->max_depth) { + $b = new Kint_Object(); + $b->name = $o->classname.' Iterator Contents'; + $b->access_path = 'iterator_to_array('.$o->access_path.')'; + $b->depth = $o->depth + 1; + $b->hints[] = 'depth_limit'; + + $r = new Kint_Object_Representation('Iterator'); + $r->contents = array($b); + $o->replaceRepresentation($r, 0); + + return; + } + + // In 5.1 you can interate them but they're not traversable. + // DomDoc. The gift that keeps on giving. + if (!$var instanceof Traversable) { + $data = array(); + foreach ($var as $item) { + $data[] = $item; + } + } else { + $data = iterator_to_array($var); + } + + $r = new Kint_Object_Representation('Iterator'); + $o->replaceRepresentation($r, 0); + + foreach ($data as $key => $item) { + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth + 1; + $base_obj->name = $item->nodeName; + + if ($o->access_path) { + if ($var instanceof DOMNamedNodeMap) { + $base_obj->access_path = $o->access_path.'->getNamedItem('.var_export($key, true).')'; + } elseif ($var instanceof DOMNodeList) { + $base_obj->access_path = $o->access_path.'->item('.var_export($key, true).')'; + } else { + $base_obj->access_path = 'iterator_to_array('.$o->access_path.')'; + } + } + + $r->contents[] = $this->parser->parse($item, $base_obj); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/DOMNode.php b/vendor/kint-php/kint/src/Parser/DOMNode.php new file mode 100644 index 0000000..7cf42d4 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/DOMNode.php @@ -0,0 +1,226 @@ + 'DOMNode', + 'firstChild' => 'DOMNode', + 'lastChild' => 'DOMNode', + 'previousSibling' => 'DOMNode', + 'nextSibling' => 'DOMNode', + 'ownerDocument' => 'DOMDocument', + ); + + /** + * Show all properties and methods. + * + * @var bool + */ + public static $verbose = false; + + public function getTypes() + { + return array('object'); + } + + public function getTriggers() + { + return Kint_Parser::TRIGGER_SUCCESS; + } + + public function parse(&$var, Kint_Object &$o, $trigger) + { + if (!$var instanceof DOMNode) { + return; + } + + // Fill the properties + // They can't be enumerated through reflection or casting, + // so we have to trust the docs and try them one at a time + $known_properties = array( + 'nodeValue', + 'childNodes', + 'attributes', + ); + + if (self::$verbose) { + $known_properties = array( + 'nodeName', + 'nodeValue', + 'nodeType', + 'parentNode', + 'childNodes', + 'firstChild', + 'lastChild', + 'previousSibling', + 'nextSibling', + 'attributes', + 'ownerDocument', + 'namespaceURI', + 'prefix', + 'localName', + 'baseURI', + 'textContent', + ); + } + + $childNodes = array(); + $attributes = array(); + + $rep = $o->value; + + foreach ($known_properties as $prop) { + $prop_obj = $this->parseProperty($o, $prop, $var); + $rep->contents[] = $prop_obj; + + if ($prop === 'childNodes') { + $childNodes = $prop_obj->getRepresentation('iterator'); + } elseif ($prop === 'attributes') { + $attributes = $prop_obj->getRepresentation('iterator'); + } + } + + if (!self::$verbose) { + $o->removeRepresentation('methods'); + $o->removeRepresentation('properties'); + } + + // Attributes and comments and text nodes don't + // need children or attributes of their own + if (in_array($o->classname, array('DOMAttr', 'DOMText', 'DOMComment'))) { + return; + } + + // Set the attributes + if ($attributes) { + $a = new Kint_Object_Representation('Attributes'); + foreach ($attributes->contents as $attribute) { + $a->contents[] = self::textualNodeToString($attribute); + } + $o->addRepresentation($a, 0); + } + + // Set the children + if ($childNodes) { + $c = new Kint_Object_Representation('Children'); + + if (count($childNodes->contents) === 1 && ($node = reset($childNodes->contents)) && in_array('depth_limit', $node->hints)) { + $node = $node->transplant(new Kint_Object_Instance()); + $node->name = 'childNodes'; + $node->classname = 'DOMNodeList'; + $c->contents = array($node); + } else { + foreach ($childNodes->contents as $index => $node) { + // Shortcircuit text nodes to plain strings + if ($node->classname === 'DOMText' || $node->classname === 'DOMComment') { + $node = self::textualNodeToString($node); + + // And remove them if they're empty + if (ctype_space($node->value->contents) || $node->value->contents === '') { + continue; + } + } + + $c->contents[] = $node; + } + } + + $o->addRepresentation($c, 0); + } + + if (isset($c) && count($c->contents)) { + $o->size = count($c->contents); + } + + if (!$o->size) { + $o->size = null; + } + } + + protected function parseProperty(Kint_Object $o, $prop, &$var) + { + // Duplicating (And slightly optimizing) the Kint_Parser::parseObject() code here + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth + 1; + $base_obj->owner_class = $o->classname; + $base_obj->name = $prop; + $base_obj->operator = Kint_Object::OPERATOR_OBJECT; + $base_obj->access = Kint_Object::ACCESS_PUBLIC; + + if ($o->access_path !== null) { + $base_obj->access_path = $o->access_path; + + if (preg_match('/^[A-Za-z0-9_]+$/', $base_obj->name)) { + $base_obj->access_path .= '->'.$base_obj->name; + } else { + $base_obj->access_path .= '->{'.var_export($base_obj->name, true).'}'; + } + } + + if (!isset($var->$prop)) { + $base_obj->type = 'null'; + } elseif (isset(self::$blacklist[$prop])) { + $base_obj = $base_obj->transplant(new Kint_Object_Instance()); + $base_obj->hints[] = 'blacklist'; + $base_obj->classname = self::$blacklist[$prop]; + } elseif ($prop === 'attributes') { + $depth_stash = $this->parser->max_depth; + $this->parser->max_depth = 0; + $base_obj = $this->parser->parse($var->$prop, $base_obj); + $this->parser->max_depth = $depth_stash; + } else { + $base_obj = $this->parser->parse($var->$prop, $base_obj); + } + + return $base_obj; + } + + protected static function textualNodeToString(Kint_Object_Instance $o) + { + if (empty($o->value) || empty($o->value->contents) || empty($o->classname)) { + return; + } + + if (!in_array($o->classname, array('DOMText', 'DOMAttr', 'DOMComment'))) { + return; + } + + foreach ($o->value->contents as $property) { + if ($property->name === 'nodeValue') { + $ret = clone $property; + $ret->name = $o->name; + + return $ret; + } + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/DateTime.php b/vendor/kint-php/kint/src/Parser/DateTime.php new file mode 100644 index 0000000..37cbaeb --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/DateTime.php @@ -0,0 +1,31 @@ +transplant(new Kint_Object_DateTime($var)); + } +} diff --git a/vendor/kint-php/kint/src/Parser/FsPath.php b/vendor/kint-php/kint/src/Parser/FsPath.php new file mode 100644 index 0000000..fe817c4 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/FsPath.php @@ -0,0 +1,27 @@ + 2048 || preg_match('/[:?<>"*|]/', $var) || !preg_match('/[\\/\\.\\'.DIRECTORY_SEPARATOR.']/', $var) || !@file_exists($var) || in_array($var, self::$blacklist)) { + return; + } + + $r = new Kint_Object_Representation_SplFileInfo(new SplFileInfo($var)); + $r->hints[] = 'fspath'; + $o->addRepresentation($r, 0); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Iterator.php b/vendor/kint-php/kint/src/Parser/Iterator.php new file mode 100644 index 0000000..ba39d9f --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Iterator.php @@ -0,0 +1,77 @@ +name = $class.' Iterator Contents'; + $b->access_path = 'iterator_to_array('.$o->access_path.', true)'; + $b->depth = $o->depth + 1; + $b->hints[] = 'blacklist'; + + $r = new Kint_Object_Representation('Iterator'); + $r->contents = array($b); + + $o->addRepresentation($r); + + return; + } + } + + $data = iterator_to_array($var); + + if ($data === false) { + return; + } + + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth; + + if ($o->access_path) { + $base_obj->access_path = 'iterator_to_array('.$o->access_path.')'; + } + + $r = new Kint_Object_Representation('Iterator'); + $r->contents = $this->parser->parse($data, $base_obj); + $r->contents = $r->contents->value->contents; + + $primary = reset($o->representations); + if ($primary && $primary === $o->value && $primary->contents === array()) { + $o->addRepresentation($r, 0); + } else { + $o->addRepresentation($r); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/Json.php b/vendor/kint-php/kint/src/Parser/Json.php new file mode 100644 index 0000000..27515d5 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Json.php @@ -0,0 +1,50 @@ +depth = $o->depth; + + if ($o->access_path) { + $base_obj->access_path = 'json_decode('.$o->access_path.', true)'; + } + + $r = new Kint_Object_Representation('Json'); + $r->contents = $this->parser->parse($json, $base_obj); + + if (!in_array('depth_limit', $r->contents->hints)) { + $r->contents = $r->contents->value->contents; + } + + $o->addRepresentation($r, 0); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Microtime.php b/vendor/kint-php/kint/src/Parser/Microtime.php new file mode 100644 index 0000000..e9fe015 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Microtime.php @@ -0,0 +1,65 @@ +name !== 'microtime()' || $o->depth !== 0) { + return; + } + + list($usec, $sec) = explode(' ', $var); + + $time = (float) $usec + (float) $sec; + + if (self::$last !== null) { + $last_time = array_sum(array_map('floatval', explode(' ', self::$last))); + $lap = $time - $last_time; + ++self::$times; + } else { + $lap = null; + self::$start = $time; + } + + self::$last = $var; + + if ($lap !== null) { + $total = $time - self::$start; + $r = new Kint_Object_Representation_Microtime(self::$group, $lap, $total, self::$times); + } else { + $r = new Kint_Object_Representation_Microtime(self::$group); + } + $r->contents = $var; + $r->implicit_label = true; + + $o->removeRepresentation($o->value->name); + $o->addRepresentation($r); + } + + public static function clean() + { + self::$last = null; + self::$start = null; + self::$times = 0; + ++self::$group; + } +} diff --git a/vendor/kint-php/kint/src/Parser/Plugin.php b/vendor/kint-php/kint/src/Parser/Plugin.php new file mode 100644 index 0000000..a1095cf --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Plugin.php @@ -0,0 +1,28 @@ +parser = $p; + } + + /** + * An array of types (As returned by gettype) for all data this plugin can operate on. + * + * @return array List of types + */ + public function getTypes() + { + return array(); + } + + public function getTriggers() + { + return Kint_Parser::TRIGGER_NONE; + } + + abstract public function parse(&$variable, Kint_Object &$o, $trigger); +} diff --git a/vendor/kint-php/kint/src/Parser/Serialize.php b/vendor/kint-php/kint/src/Parser/Serialize.php new file mode 100644 index 0000000..5c388dc --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Serialize.php @@ -0,0 +1,84 @@ + Unserialization can result in code being loaded and executed due to + * > object instantiation and autoloading, and a malicious user may be able + * > to exploit this. + * + * The natural way to stop that from happening is to just refuse to unserialize + * stuff by default. Which is what we're doing for anything that's not scalar. + * + * @var bool + */ + public static $safe_mode = true; + public static $options = array(true); + + public function getTypes() + { + return array('string'); + } + + public function getTriggers() + { + return Kint_Parser::TRIGGER_SUCCESS; + } + + public function parse(&$var, Kint_Object &$o, $trigger) + { + $trimmed = rtrim($var); + + if ($trimmed !== 'N;' && !preg_match('/^(?:[COabis]:\d+[:;]|d:\d+(?:\.\d+);)/', $trimmed)) { + return; + } + + if (!self::$safe_mode || !in_array($trimmed[0], array('C', 'O', 'a'))) { + $blacklist = false; + + // Second parameter only supported on PHP 7 + if (KINT_PHP70) { + // Suppress warnings on unserializeable variable + $data = @unserialize($trimmed, self::$options); + } else { + $data = @unserialize($trimmed); + } + + if ($data === false && substr($trimmed, 0, 4) !== 'b:0;') { + return; + } + } else { + $blacklist = true; + } + + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth + 1; + $base_obj->name = 'unserialize('.$o->name.')'; + + if ($o->access_path) { + $base_obj->access_path = 'unserialize('.$o->access_path; + if (!KINT_PHP70 || self::$options === array(true)) { + $base_obj->access_path .= ')'; + } elseif (self::$options === array(false)) { + $base_obj->access_path .= ', false)'; + } else { + $base_obj->access_path .= ', Kint_Parser_Serialize::$options)'; + } + } + + $r = new Kint_Object_Representation('Serialized'); + + if ($blacklist) { + $base_obj->hints[] = 'blacklist'; + $r->contents = $base_obj; + } else { + $r->contents = $this->parser->parse($data, $base_obj); + } + + $o->addRepresentation($r, 0); + } +} diff --git a/vendor/kint-php/kint/src/Parser/SimpleXMLElement.php b/vendor/kint-php/kint/src/Parser/SimpleXMLElement.php new file mode 100644 index 0000000..abfd974 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/SimpleXMLElement.php @@ -0,0 +1,132 @@ +hints[] = 'simplexml_element'; + + if (!self::$verbose) { + $o->removeRepresentation('properties'); + $o->removeRepresentation('iterator'); + $o->removeRepresentation('methods'); + } + + // Attributes + $a = new Kint_Object_Representation('Attributes'); + + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth; + + if ($o->access_path) { + $base_obj->access_path = '(string) '.$o->access_path; + } + + if ($var->attributes()) { + $attribs = iterator_to_array($var->attributes()); + $attribs = array_map('strval', $attribs); + } else { + $attribs = array(); + } + + // XML attributes are by definition strings and don't have children, + // so up the depth limit in case we're just below the limit since + // there won't be any recursive stuff anyway. + $depth_stash = $this->parser->max_depth; + $this->parser->max_depth = 0; + $a->contents = $this->parser->parse($attribs, $base_obj); + $this->parser->max_depth = $depth_stash; + + $a->contents = $a->contents->value->contents; + + $o->addRepresentation($a, 0); + + // Children + // We need to check children() separately from the values we already parsed because + // text contents won't show up in children() but they will show up in properties. + // + // Why do we still need to check for attributes if we already have an attributes() + // method? Hell if I know! + $children = $var->children(); + + if ($o->value) { + $c = new Kint_Object_Representation('Children'); + + foreach ($o->value->contents as $value) { + if ($value->name === '@attributes') { + continue; + } elseif (isset($children->{$value->name})) { + $i = 0; + + while (isset($children->{$value->name}[$i])) { + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth + 1; + $base_obj->name = $value->name; + if ($value->access_path) { + $base_obj->access_path = $value->access_path.'['.$i.']'; + } + + $value = $this->parser->parse($children->{$value->name}[$i], $base_obj); + + if ($value->access_path && $value->type === 'string') { + $value->access_path = '(string) '.$value->access_path; + } + + $c->contents[] = $value; + + ++$i; + } + } + } + + $o->size = count($c->contents); + + if (!$o->size) { + $o->size = null; + + if (strlen((string) $var)) { + $base_obj = new Kint_Object_Blob(); + $base_obj->depth = $o->depth + 1; + $base_obj->name = $o->name; + if ($o->access_path) { + $base_obj->access_path = '(string) '.$o->access_path; + } + + $value = (string) $var; + + $depth_stash = $this->parser->max_depth; + $this->parser->max_depth = 0; + $value = $this->parser->parse($value, $base_obj); + $this->parser->max_depth = $depth_stash; + + $c = new Kint_Object_Representation('Contents'); + $c->implicit_label = true; + $c->contents = array($value); + } + } + + $o->addRepresentation($c, 0); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/SplFileInfo.php b/vendor/kint-php/kint/src/Parser/SplFileInfo.php new file mode 100644 index 0000000..01f8290 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/SplFileInfo.php @@ -0,0 +1,25 @@ +addRepresentation($r, 0); + $o->size = $r->getSize(); + } +} diff --git a/vendor/kint-php/kint/src/Parser/SplObjectStorage.php b/vendor/kint-php/kint/src/Parser/SplObjectStorage.php new file mode 100644 index 0000000..812b41a --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/SplObjectStorage.php @@ -0,0 +1,34 @@ +getRepresentation('iterator'))) { + return; + } + + $r = $o->getRepresentation('iterator'); + if ($r) { + $o->size = !is_array($r->contents) ? null : count($r->contents); + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/Stream.php b/vendor/kint-php/kint/src/Parser/Stream.php new file mode 100644 index 0000000..886aca7 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Stream.php @@ -0,0 +1,45 @@ +resource_type !== 'stream') { + return; + } + + if (!$meta = stream_get_meta_data($var)) { + return; + } + + $rep = new Kint_Object_Representation('Stream'); + $rep->implicit_label = true; + + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth; + + if ($o->access_path) { + $base_obj->access_path = 'stream_get_meta_data('.$o->access_path.')'; + } + + $rep->contents = $this->parser->parse($meta, $base_obj); + + if (!in_array('depth_limit', $rep->contents->hints)) { + $rep->contents = $rep->contents->value->contents; + } + + $o->addRepresentation($rep, 0); + + $o = $o->transplant(new Kint_Object_Stream($meta)); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Table.php b/vendor/kint-php/kint/src/Parser/Table.php new file mode 100644 index 0000000..b34907a --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Table.php @@ -0,0 +1,57 @@ +value->contents)) { + return; + } + + $array = $this->parser->getCleanArray($var); + + if (count($array) < 2) { + return; + } + + // Ensure this is an array of arrays and that all child arrays have the + // same keys. We don't care about their children - if there's another + // "table" inside we'll just make another one down the value tab + $keys = null; + foreach ($array as $elem) { + if (!is_array($elem) || count($elem) < 2) { + return; + } elseif ($keys === null) { + $keys = array_keys($elem); + } elseif (array_keys($elem) !== $keys) { + return; + } + } + + // Ensure none of the child arrays are recursion or depth limit. We + // don't care if their children are since they are the table cells + foreach ($o->value->contents as $childarray) { + if (empty($childarray->value->contents)) { + return; + } + } + + // Objects by reference for the win! We can do a copy-paste of the value + // representation contents and just slap a new hint on there and hey + // presto we have our table representation with no extra memory used! + $table = new Kint_Object_Representation('Table'); + $table->contents = $o->value->contents; + $table->hints[] = 'table'; + $o->addRepresentation($table, 0); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Throwable.php b/vendor/kint-php/kint/src/Parser/Throwable.php new file mode 100644 index 0000000..57756bc --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Throwable.php @@ -0,0 +1,23 @@ +transplant(new Kint_Object_Throwable($var)); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Timestamp.php b/vendor/kint-php/kint/src/Parser/Timestamp.php new file mode 100644 index 0000000..a27e98b --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Timestamp.php @@ -0,0 +1,44 @@ +value->label = 'Timestamp'; + $o->value->hints[] = 'timestamp'; + } + } +} diff --git a/vendor/kint-php/kint/src/Parser/ToString.php b/vendor/kint-php/kint/src/Parser/ToString.php new file mode 100644 index 0000000..c2b0326 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/ToString.php @@ -0,0 +1,37 @@ +hasMethod('__toString')) { + return; + } + + foreach (self::$blacklist as $class) { + if ($var instanceof $class) { + return; + } + } + + $r = new Kint_Object_Representation('toString'); + $r->contents = (string) $var; + + $o->addRepresentation($r); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Trace.php b/vendor/kint-php/kint/src/Parser/Trace.php new file mode 100644 index 0000000..227c3b2 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Trace.php @@ -0,0 +1,142 @@ +value) { + return; + } + + $trace = $this->parser->getCleanArray($var); + + if (count($trace) !== count($o->value->contents) || !self::isTrace($trace)) { + return; + } + + $o = $o->transplant(new Kint_Object_Trace()); + $rep = $o->value; + + $old_trace = $rep->contents; + + self::normalizeAliases(self::$blacklist); + + $rep->contents = array(); + + foreach ($old_trace as $frame) { + $index = $frame->name; + + if (!isset($trace[$index]['function'])) { + // Something's very very wrong here, but it's probably a plugin's fault + continue; + } + + if (self::frameIsListed($trace[$index], self::$blacklist)) { + continue; + } + + $rep->contents[$index] = $frame->transplant(new Kint_Object_TraceFrame()); + $rep->contents[$index]->assignFrame($trace[$index]); + } + + ksort($rep->contents); + $rep->contents = array_values($rep->contents); + + $o->clearRepresentations(); + $o->addRepresentation($rep); + $o->size = count($rep->contents); + } + + public static function isTrace(array $trace) + { + if (!Kint_Object::isSequential($trace)) { + return false; + } + + static $bt_structure = array( + 'function' => 'string', + 'line' => 'integer', + 'file' => 'string', + 'class' => 'string', + 'object' => 'object', + 'type' => 'string', + 'args' => 'array', + ); + + $file_found = false; + + foreach ($trace as $frame) { + if (!is_array($frame) || !isset($frame['function'])) { + return false; + } + + foreach ($frame as $key => $val) { + if (!isset($bt_structure[$key])) { + return false; + } elseif (gettype($val) !== $bt_structure[$key]) { + return false; + } elseif ($key === 'file') { + $file_found = true; + } + } + } + + return $file_found; + } + + public static function frameIsListed(array $frame, array $matches) + { + if (isset($frame['class'])) { + $called = array(strtolower($frame['class']), strtolower($frame['function'])); + } else { + $called = strtolower($frame['function']); + } + + return in_array($called, $matches, true); + } + + public static function normalizeAliases(array &$aliases) + { + foreach ($aliases as $index => &$alias) { + if (is_array($alias) && count($alias) === 2) { + $alias = array_values(array_filter($alias, 'is_string')); + + if (count($alias) === 2 && + preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $alias[1]) && + preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff\\\\]*$/', $alias[0]) + ) { + $alias = array( + strtolower(ltrim($alias[0], '\\')), + strtolower($alias[1]), + ); + } else { + unset($aliases[$index]); + continue; + } + } elseif (is_string($alias)) { + if (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $alias)) { + $alias = strtolower($alias); + } else { + unset($aliases[$index]); + continue; + } + } else { + unset($aliases[$index]); + } + } + + $aliases = array_values($aliases); + } +} diff --git a/vendor/kint-php/kint/src/Parser/Xml.php b/vendor/kint-php/kint/src/Parser/Xml.php new file mode 100644 index 0000000..08d2529 --- /dev/null +++ b/vendor/kint-php/kint/src/Parser/Xml.php @@ -0,0 +1,120 @@ +access_path); + + if (empty($xml)) { + return; + } + + list($xml, $access_path, $name) = $xml; + + $base_obj = new Kint_Object(); + $base_obj->depth = $o->depth + 1; + $base_obj->name = $name; + $base_obj->access_path = $access_path; + + $r = new Kint_Object_Representation('XML'); + $r->contents = $this->parser->parse($xml, $base_obj); + + $o->addRepresentation($r, 0); + } + + protected static function xmlToSimpleXML($var, $parent_path) + { + try { + $errors = libxml_use_internal_errors(true); + $xml = simplexml_load_string($var); + libxml_use_internal_errors($errors); + } catch (Exception $e) { + if (isset($errors)) { + libxml_use_internal_errors($errors); + } + + return; + } + + if (!$xml) { + return; + } + + if ($parent_path === null) { + $access_path = null; + } else { + $access_path = 'simplexml_load_string('.$parent_path.')'; + } + + $name = $xml->getName(); + + return array($xml, $access_path, $name); + } + + /** + * Get the DOMDocument info. + * + * The documentation of DOMDocument::loadXML() states that while you can + * call it statically, it will give an E_STRICT warning. On my system it + * actually gives an E_DEPRECATED warning, but it works so we'll just add + * an error-silencing '@' to the access path. + * + * If it errors loading then we wouldn't have gotten this far in the first place. + * + * @param string $var The XML string + * @param string $parent_path The path to the parent, in this case the XML string + * + * @return array The root element DOMNode, the access path, and the root element name + */ + protected static function xmlToDOMDocument($var, $parent_path) + { + // There's no way to check validity in DOMDocument without making errors. For shame! + if (!self::xmlToSimpleXML($var, $parent_path)) { + return; + } + + $xml = new DOMDocument(); + $xml->loadXML($var); + $xml = $xml->firstChild; + + if ($parent_path === null) { + $access_path = null; + } else { + $access_path = '@DOMDocument::loadXML('.$parent_path.')->firstChild'; + } + + $name = $xml->nodeName; + + return array($xml, $access_path, $name); + } +} diff --git a/vendor/kint-php/kint/src/Renderer.php b/vendor/kint-php/kint/src/Renderer.php new file mode 100644 index 0000000..4aa3564 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer.php @@ -0,0 +1,54 @@ +parameters = $parameters; + } + + /** + * Returns the first compatible plugin available. + * + * @param array $plugins Array of hints to class strings + * @param array $hints Array of object hints + * + * @return array Array of hints to class strings filtered and sorted by object hints + */ + public function matchPlugins(array $plugins, array $hints) + { + $out = array(); + + foreach ($hints as $key) { + if (isset($plugins[$key])) { + $out[$key] = $plugins[$key]; + } + } + + return $out; + } + + public function parserPlugins(array $plugins) + { + return $plugins; + } + + public function preRender() + { + return ''; + } + + public function postRender() + { + return ''; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Cli.php b/vendor/kint-php/kint/src/Renderer/Cli.php new file mode 100644 index 0000000..d9abdcf --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Cli.php @@ -0,0 +1,122 @@ +windows_output = KINT_WIN; + } + + if (!self::$terminal_width) { + if (!KINT_WIN && self::$detect_width) { + self::$terminal_width = exec('tput cols'); + } + + if (self::$terminal_width < self::$min_terminal_width) { + self::$terminal_width = self::$default_width; + } + } + + $this->header_width = self::$terminal_width; + } + + protected function utf8_to_windows($string) + { + return str_replace( + array('┌', '═', '┐', '│', '└', '─', '┘'), + array("\xda", "\xdc", "\xbf", "\xb3", "\xc0", "\xc4", "\xd9"), + $string + ); + } + + public function colorValue($string) + { + if (!self::$cli_colors) { + return $string; + } else { + return "\x1b[32m".str_replace("\n", "\x1b[0m\n\x1b[32m", $string)."\x1b[0m"; + } + } + + public function colorType($string) + { + if (!self::$cli_colors) { + return $string; + } else { + return "\x1b[35;1m".str_replace("\n", "\x1b[0m\n\x1b[35;1m", $string)."\x1b[0m"; + } + } + + public function colorTitle($string) + { + if (!self::$cli_colors) { + return $string; + } else { + return "\x1b[36m".str_replace("\n", "\x1b[0m\n\x1b[36m", $string)."\x1b[0m"; + } + } + + public function renderTitle(Kint_Object $o) + { + if ($this->windows_output) { + return $this->utf8_to_windows(parent::renderTitle($o)); + } else { + return parent::renderTitle($o); + } + } + + public function preRender() + { + return PHP_EOL; + } + + public function postRender() + { + if ($this->windows_output) { + return $this->utf8_to_windows(parent::postRender()); + } else { + return parent::postRender(); + } + } + + public function escape($string, $encoding = false) + { + return str_replace("\x1b", '\\x1b', $string); + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Plain.php b/vendor/kint-php/kint/src/Renderer/Plain.php new file mode 100644 index 0000000..c3a75e4 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Plain.php @@ -0,0 +1,169 @@ + array(), + 'style' => array( + array('Kint_Renderer_Plain', 'renderCss'), + ), + 'raw' => array(), + ); + + /** + * Path to the CSS file to load by default. + * + * @var string + */ + public static $theme = 'plain.css'; + + /** + * Output htmlentities instead of utf8. + * + * @var bool + */ + public static $disable_utf8 = false; + + protected static $been_run = false; + + protected $mod_return = false; + protected $file_link_format = false; + + public function __construct(array $params = array()) + { + parent::__construct($params); + + if (isset($params['settings']['return'])) { + $this->mod_return = $params['settings']['return']; + } + + if (isset($params['settings']['file_link_format'])) { + $this->file_link_format = $params['settings']['file_link_format']; + } + } + + protected function utf8_to_htmlentity($string) + { + return str_replace( + array('┌', '═', '┐', '│', '└', '─', '┘'), + array('┌', '═', '┐', '│', '└', '─', '┘'), + $string + ); + } + + public function colorValue($string) + { + return ''.$string.''; + } + + public function colorType($string) + { + return ''.$string.''; + } + + public function colorTitle($string) + { + return ''.$string.''; + } + + public function renderTitle(Kint_Object $o) + { + if (self::$disable_utf8) { + return $this->utf8_to_htmlentity(parent::renderTitle($o)); + } else { + return parent::renderTitle($o); + } + } + + protected static function renderCss() + { + if (file_exists(KINT_DIR.'/resources/compiled/'.self::$theme)) { + return file_get_contents(KINT_DIR.'/resources/compiled/'.self::$theme); + } else { + return file_get_contents(self::$theme); + } + } + + public function preRender() + { + $output = ''; + + if (!self::$been_run || $this->mod_return) { + foreach (self::$pre_render_sources as $type => $values) { + $contents = ''; + foreach ($values as $v) { + if (is_callable($v)) { + $contents .= call_user_func($v, $this); + } elseif (is_string($v)) { + $contents .= $v; + } + } + + if (!strlen($contents)) { + continue; + } + + switch ($type) { + case 'script': + $output .= ''; + break; + case 'style': + $output .= ''; + break; + default: + $output .= $contents; + } + } + + if (!$this->mod_return) { + self::$been_run = true; + } + } + + return $output.'
'; + } + + public function postRender() + { + if (self::$disable_utf8) { + return $this->utf8_to_htmlentity(parent::postRender()).'
'; + } else { + return parent::postRender().''; + } + } + + public function ideLink($file, $line) + { + $shortenedPath = $this->escape(Kint::shortenPath($file)); + if (!$this->file_link_format) { + return $shortenedPath.':'.$line; + } + + $ideLink = Kint::getIdeLink($file, $line); + $class = (strpos($ideLink, 'http://') === 0) ? 'class="kint-ide-link" ' : ''; + + return "{$shortenedPath}:{$line}"; + } + + public function escape($string, $encoding = false) + { + if ($encoding === false) { + $encoding = Kint_Object_Blob::detectEncoding($string); + } + + $original_encoding = $encoding; + + if ($encoding === false || $encoding === 'ASCII') { + $encoding = 'UTF-8'; + } + + $string = htmlspecialchars($string, ENT_NOQUOTES, $encoding); + + // this call converts all non-ASCII characters into numeirc htmlentities + if (extension_loaded('mbstring') && $original_encoding !== 'ASCII') { + $string = mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding); + } + + return $string; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich.php b/vendor/kint-php/kint/src/Renderer/Rich.php new file mode 100644 index 0000000..94e0ea5 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich.php @@ -0,0 +1,462 @@ + 'Kint_Renderer_Rich_Blacklist', + 'callable' => 'Kint_Renderer_Rich_Callable', + 'closure' => 'Kint_Renderer_Rich_Closure', + 'color' => 'Kint_Renderer_Rich_Color', + 'depth_limit' => 'Kint_Renderer_Rich_DepthLimit', + 'nothing' => 'Kint_Renderer_Rich_Nothing', + 'recursion' => 'Kint_Renderer_Rich_Recursion', + 'simplexml_element' => 'Kint_Renderer_Rich_SimpleXMLElement', + 'trace_frame' => 'Kint_Renderer_Rich_TraceFrame', + ); + public static $tab_renderers = array( + 'binary' => 'Kint_Renderer_Rich_Binary', + 'color' => 'Kint_Renderer_Rich_ColorDetails', + 'docstring' => 'Kint_Renderer_Rich_Docstring', + 'microtime' => 'Kint_Renderer_Rich_Microtime', + 'source' => 'Kint_Renderer_Rich_Source', + 'table' => 'Kint_Renderer_Rich_Table', + 'timestamp' => 'Kint_Renderer_Rich_Timestamp', + ); + public static $pre_render_sources = array( + 'script' => array( + array('Kint_Renderer_Rich', 'renderJs'), + array('Kint_Renderer_Rich_Microtime', 'renderJs'), + ), + 'style' => array( + array('Kint_Renderer_Rich', 'renderCss'), + ), + 'raw' => array(), + ); + + /** + * Whether or not to render access paths. + * + * Access paths can become incredibly heavy with very deep and wide + * structures. Given mostly public variables it will typically make + * up one quarter of the output HTML size. + * + * If this is an unacceptably large amount and your browser is groaning + * under the weight of the access paths - your first order of buisiness + * should be to get a new browser. Failing that, use this to turn them off. + * + * @var bool + */ + public static $access_paths = true; + + /** + * The maximum length of a string before it is truncated. + * + * Falsey to disable + * + * @var int + */ + public static $strlen_max = 80; + + /** + * Path to the CSS file to load by default. + * + * @var string + */ + public static $theme = 'original.css'; + + /** + * Assume types and sizes don't need to be escaped. + * + * Turn this off if you use anything but ascii in your class names, + * but it'll cause a slowdown of around 10% + * + * @var bool + */ + public static $escape_types = false; + + protected static $been_run = false; + + protected $plugin_objs = array(); + protected $mod_return = false; + protected $callee; + protected $mini_trace; + protected $previous_caller; + protected $file_link_format = false; + protected $show_minitrace = true; + protected $auto_expand = false; + + public function __construct(array $params = array()) + { + parent::__construct($params); + + $params += array( + 'modifiers' => array(), + 'minitrace' => array(), + 'callee' => null, + 'caller' => null, + ); + + $this->callee = $params['callee']; + $this->mini_trace = $params['minitrace']; + $this->previous_caller = $params['caller']; + + if (isset($params['settings']['return'])) { + $this->mod_return = $params['settings']['return']; + } + + if (isset($params['settings']['file_link_format'])) { + $this->file_link_format = $params['settings']['file_link_format']; + } + + if (empty($params['settings']['display_called_from'])) { + $this->show_minitrace = false; + } + + if (!empty($params['settings']['expanded'])) { + $this->auto_expand = true; + } + } + + public function render(Kint_Object $o) + { + if ($plugin = $this->getPlugin(self::$object_renderers, $o->hints)) { + if (strlen($output = $plugin->render($o))) { + return $output; + } + } + + $children = $this->renderChildren($o); + $header = $this->renderHeaderWrapper($o, (bool) strlen($children), $this->renderHeader($o)); + + return '
'.$header.$children.'
'; + } + + public function renderHeaderWrapper(Kint_Object $o, $has_children, $contents) + { + $out = 'auto_expand) { + $out .= ' kint-show'; + } + + $out .= '"'; + } + + $out .= '>'; + + if (self::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { + $out .= ''; + } + + if ($has_children) { + $out .= ''; + } + + $out .= $contents; + + if (!empty($ap)) { + $out .= '
'.$this->escape($ap).'
'; + } + + return $out.''; + } + + public function renderHeader(Kint_Object $o) + { + $output = ''; + + if (($s = $o->getModifiers()) !== null) { + $output .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $output .= ''.$this->escape($s).' '; + + if ($s = $o->getOperator()) { + $output .= $this->escape($s, 'ASCII').' '; + } + } + + if (($s = $o->getType()) !== null) { + if (self::$escape_types) { + $s = $this->escape($s); + } + + if ($o->reference) { + $s = '&'.$s; + } + + $output .= ''.$s.' '; + } + + if (($s = $o->getSize()) !== null) { + if (self::$escape_types) { + $s = $this->escape($s); + } + $output .= '('.$s.') '; + } + + if (($s = $o->getValueShort()) !== null) { + $s = preg_replace('/\s+/', ' ', $s); + + if (self::$strlen_max && Kint_Object_Blob::strlen($s) > self::$strlen_max) { + $s = substr($s, 0, self::$strlen_max).'...'; + } + $output .= $this->escape($s); + } + + return trim($output); + } + + public function renderChildren(Kint_Object $o) + { + $contents = array(); + $tabs = array(); + + foreach ($o->getRepresentations() as $rep) { + $result = $this->renderTab($o, $rep); + if (strlen($result)) { + $contents[] = $result; + $tabs[] = $rep; + } + } + + if (empty($tabs)) { + return ''; + } + + $output = '
'; + + if (count($tabs) === 1 && $tabs[0]->labelIsImplicit()) { + $output .= reset($contents); + } else { + $output .= '
    '; + + foreach ($tabs as $i => $tab) { + if ($i === 0) { + $output .= '
  • '; + } else { + $output .= '
  • '; + } + + $output .= $this->escape($tab->getLabel()).'
  • '; + } + + $output .= '
    '; + + foreach ($contents as $tab) { + $output .= '
  • '.$tab.'
  • '; + } + + $output .= '
'; + } + + return $output.'
'; + } + + protected function renderTab(Kint_Object $o, Kint_Object_Representation $rep) + { + if ($plugin = $this->getPlugin(self::$tab_renderers, $rep->hints)) { + if (strlen($output = $plugin->render($rep))) { + return $output; + } + } + + if (is_array($rep->contents)) { + $output = ''; + foreach ($rep->contents as $obj) { + $output .= $this->render($obj); + } + + return $output; + } elseif (is_string($rep->contents)) { + $show_contents = false; + + // If it is the value representation of a string and its whitespace + // was truncated in the header, always display the full string + if ($o->type !== 'string' || $o->value !== $rep) { + $show_contents = true; + } elseif (preg_match('/(:?[\r\n\t\f\v]| {2})/', $rep->contents)) { + $show_contents = true; + } elseif (self::$strlen_max && Kint_Object_Blob::strlen($rep->contents) > self::$strlen_max) { + $show_contents = true; + } + + if ($o->type === 'string' && $o->value === $rep && $o->encoding === false) { + $show_contents = false; + } + + if ($show_contents) { + return '
'.$this->escape($rep->contents)."\n
"; + } + } elseif ($rep->contents instanceof Kint_Object) { + return $this->render($rep->contents); + } + + return; + } + + protected static function renderJs() + { + return file_get_contents(KINT_DIR.'/resources/compiled/rich.js'); + } + + protected static function renderCss() + { + if (file_exists(KINT_DIR.'/resources/compiled/'.self::$theme)) { + return file_get_contents(KINT_DIR.'/resources/compiled/'.self::$theme); + } else { + return file_get_contents(self::$theme); + } + } + + public function preRender() + { + $output = ''; + + if (!self::$been_run || $this->mod_return) { + foreach (self::$pre_render_sources as $type => $values) { + $contents = ''; + foreach ($values as $v) { + if (is_callable($v)) { + $contents .= call_user_func($v, $this); + } elseif (is_string($v)) { + $contents .= $v; + } + } + + if (!strlen($contents)) { + continue; + } + + switch ($type) { + case 'script': + $output .= ''; + break; + case 'style': + $output .= ''; + break; + default: + $output .= $contents; + } + } + + if (!$this->mod_return) { + self::$been_run = true; + } + } + + return $output.'
'; + } + + public function postRender() + { + if (!$this->show_minitrace) { + return '
'; + } + + $output = '
'; + $output .= ' '; + + if (isset($this->callee['file'])) { + if (!empty($this->mini_trace)) { + $output .= ''; + } + + $output .= 'Called from '.$this->ideLink($this->callee['file'], $this->callee['line']); + } + + $caller = ''; + + if (isset($this->previous_caller['class'])) { + $caller .= $this->previous_caller['class']; + } + if (isset($this->previous_caller['type'])) { + $caller .= $this->previous_caller['type']; + } + if (isset($this->previous_caller['function']) + && !in_array($this->previous_caller['function'], array('include', 'include_once', 'require', 'require_once')) + ) { + $caller .= $this->previous_caller['function'].'()'; + } + + if ($caller) { + $output .= ' ['.$caller.']'; + } + + if (!empty($this->mini_trace)) { + $output .= '
    '; + foreach ($this->mini_trace as $step) { + $output .= '
  1. '.$this->ideLink($step['file'], $step['line']); // closing tag not required + if (isset($step['function']) + && !in_array($step['function'], array('include', 'include_once', 'require', 'require_once')) + ) { + $output .= ' ['; + if (isset($step['class'])) { + $output .= $step['class']; + } + if (isset($step['type'])) { + $output .= $step['type']; + } + $output .= $step['function'].'()]'; + } + } + $output .= '
'; + } + + $output .= '
'; + + return $output; + } + + public function escape($string, $encoding = false) + { + if ($encoding === false) { + $encoding = Kint_Object_Blob::detectEncoding($string); + } + + $original_encoding = $encoding; + + if ($encoding === false || $encoding === 'ASCII') { + $encoding = 'UTF-8'; + } + + $string = htmlspecialchars($string, ENT_NOQUOTES, $encoding); + + // this call converts all non-ASCII characters into numeirc htmlentities + if (extension_loaded('mbstring') && $original_encoding !== 'ASCII') { + $string = mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding); + } + + return $string; + } + + protected function getPlugin(array $plugins, array $hints) + { + if ($plugins = $this->matchPlugins($plugins, $hints)) { + $plugin = end($plugins); + + if (!isset($this->plugin_objs[$plugin])) { + $this->plugin_objs[$plugin] = new $plugin($this); + } + + return $this->plugin_objs[$plugin]; + } + } + + protected function ideLink($file, $line) + { + $shortenedPath = $this->escape(Kint::shortenPath($file)); + if (!$this->file_link_format) { + return $shortenedPath.':'.$line; + } + + $ideLink = Kint::getIdeLink($file, $line); + $class = (strpos($ideLink, 'http://') === 0) ? 'class="kint-ide-link" ' : ''; + + return "{$shortenedPath}:{$line}"; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Binary.php b/vendor/kint-php/kint/src/Renderer/Rich/Binary.php new file mode 100644 index 0000000..7ee26ed --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Binary.php @@ -0,0 +1,24 @@ +'; + + $chunks = str_split($r->contents, self::$line_length); + + foreach ($chunks as $index => $chunk) { + $out .= sprintf('%08X', $index * self::$line_length).":\t"; + $out .= implode(' ', str_split(str_pad(bin2hex($chunk), 2 * self::$line_length, ' '), self::$chunk_length)); + $out .= "\t".preg_replace('/[^\x20-\x7E]/', '.', $chunk)."\n"; + } + + $out .= ''; + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Blacklist.php b/vendor/kint-php/kint/src/Renderer/Rich/Blacklist.php new file mode 100644 index 0000000..8874fc9 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Blacklist.php @@ -0,0 +1,9 @@ +'.$this->renderHeaderLocked($o, 'Blacklisted').''; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Callable.php b/vendor/kint-php/kint/src/Renderer/Rich/Callable.php new file mode 100644 index 0000000..c6292aa --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Callable.php @@ -0,0 +1,63 @@ +owner_class) && strlen($o->name) && !empty(self::$method_cache[$o->owner_class][$o->name])) { + $children = self::$method_cache[$o->owner_class][$o->name]['children']; + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), self::$method_cache[$o->owner_class][$o->name]['header']); + + return '
'.$header.$children.'
'; + } + + $children = $this->renderer->renderChildren($o); + + $header = ''; + + if (($s = $o->getModifiers()) !== null) { + $header .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $function = $this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).')'; + + if (($url = $o->getPhpDocUrl()) !== null) { + $function = ''.$function.''; + } + + $header .= ''.$function.''; + } + + if (!empty($o->returntype)) { + $header .= ': '.$this->renderer->escape($o->returntype).''; + } + + if (($s = $o->getValueShort()) !== null) { + if (Kint_Renderer_Rich::$strlen_max && Kint_Object_Blob::strlen($s) > Kint_Renderer_Rich::$strlen_max) { + $s = substr($s, 0, Kint_Renderer_Rich::$strlen_max).'...'; + } + $header .= ' '.$this->renderer->escape($s); + } + + if ($o instanceof Kint_Object_Method && strlen($o->owner_class) && strlen($o->name)) { + $cache = array( + 'header' => $header, + 'children' => $children, + ); + + if (!isset(self::$method_cache[$o->owner_class])) { + self::$method_cache[$o->owner_class] = array($o->name => $cache); + } elseif (!isset(self::$method_cache[$o->owner_class][$o->name])) { + self::$method_cache[$o->owner_class][$o->name] = $cache; + } + } + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), $header); + + return '
'.$header.$children.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Closure.php b/vendor/kint-php/kint/src/Renderer/Rich/Closure.php new file mode 100644 index 0000000..abca797 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Closure.php @@ -0,0 +1,30 @@ +renderer->renderChildren($o); + + if (!($o instanceof Kint_Object_Closure)) { + $header = $this->renderer->renderHeader($o); + } else { + $header = ''; + + if (($s = $o->getModifiers()) !== null) { + $header .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $header .= ''.$this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).') '; + } + + $header .= 'Closure '; + $header .= $this->renderer->escape(Kint::shortenPath($o->filename)).':'.(int) $o->startline; + } + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), $header); + + return '
'.$header.$children.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Color.php b/vendor/kint-php/kint/src/Renderer/Rich/Color.php new file mode 100644 index 0000000..9296f9d --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Color.php @@ -0,0 +1,18 @@ +renderer->renderChildren($o); + + $header = $this->renderer->renderHeader($o); + $header .= '
'; + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), $header); + + return '
'.$header.$children.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/ColorDetails.php b/vendor/kint-php/kint/src/Renderer/Rich/ColorDetails.php new file mode 100644 index 0000000..ac1aa3d --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/ColorDetails.php @@ -0,0 +1,51 @@ +getColor(Kint_Object_Representation_Color::COLOR_NAME)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HEX_3)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HEX_6)) { + $out .= ''.$color."\n"; + } + + if ($r->hasAlpha()) { + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HEX_4)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HEX_8)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_RGBA)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HSLA)) { + $out .= ''.$color."\n"; + } + } else { + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_RGB)) { + $out .= ''.$color."\n"; + } + if ($color = $r->getColor(Kint_Object_Representation_Color::COLOR_HSL)) { + $out .= ''.$color."\n"; + } + } + + if (!strlen($out)) { + return false; + } + + return '
'.$out.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/DepthLimit.php b/vendor/kint-php/kint/src/Renderer/Rich/DepthLimit.php new file mode 100644 index 0000000..c46b608 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/DepthLimit.php @@ -0,0 +1,9 @@ +'.$this->renderHeaderLocked($o, 'Depth Limit').''; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Docstring.php b/vendor/kint-php/kint/src/Renderer/Rich/Docstring.php new file mode 100644 index 0000000..963513d --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Docstring.php @@ -0,0 +1,39 @@ +contents) as $line) { + $docstring[] = trim($line); + } + + $docstring = implode("\n", $docstring); + + $location = array(); + + if ($r->class) { + $location[] = 'Inherited from '.$this->renderer->escape($r->class); + } + if ($r->file && $r->line) { + $location[] = 'Defined in '.$this->renderer->escape(Kint::shortenPath($r->file)).':'.((int) $r->line); + } + + if ($location) { + if (strlen($docstring)) { + $docstring .= "\n\n"; + } + + $location = ''.implode("\n", $location).''; + } elseif (strlen($docstring) === 0) { + return ''; + } + + return '
'.$this->renderer->escape($docstring).$location.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Microtime.php b/vendor/kint-php/kint/src/Renderer/Rich/Microtime.php new file mode 100644 index 0000000..c51daed --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Microtime.php @@ -0,0 +1,48 @@ +contents); + + // '@' is used to prevent the dreaded timezone not set error + $out = @date('Y-m-d H:i:s', $sec).'.'.substr($usec, 2, 4); + if ($r->lap !== null) { + $out .= "\nSINCE LAST CALL: ".round($r->lap, 4).'s.'; + } + if ($r->total !== null) { + $out .= "\nSINCE START: ".round($r->total, 4).'s.'; + } + if ($r->avg !== null) { + $out .= "\nAVERAGE DURATION: ".round($r->avg, 4).'s.'; + } + + $unit = array('B', 'KB', 'MB', 'GB', 'TB'); + + $out .= "\nMEMORY USAGE: ".$r->mem.' bytes ('; + $i = floor(log($r->mem, 1024)); + $out .= round($r->mem / pow(1024, $i), 3).' '.$unit[$i].')'; + $i = floor(log($r->mem_real, 1024)); + $out .= ' (real '.round($r->mem_real / pow(1024, $i), 3).' '.$unit[$i].')'; + + if ($r->mem_peak !== null && $r->mem_peak_real !== null) { + $out .= "\nPEAK MEMORY USAGE: ".$r->mem_peak.' bytes ('; + $i = floor(log($r->mem_peak, 1024)); + $out .= round($r->mem_peak / pow(1024, $i), 3).' '.$unit[$i].')'; + $i = floor(log($r->mem_peak_real, 1024)); + $out .= ' (real '.round($r->mem_peak_real / pow(1024, $i), 3).' '.$unit[$i].')'; + } + + return '
'.$out.'
'; + } + + public static function renderJs() + { + return file_get_contents(KINT_DIR.'/resources/compiled/rich_microtime.js'); + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Nothing.php b/vendor/kint-php/kint/src/Renderer/Rich/Nothing.php new file mode 100644 index 0000000..e041852 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Nothing.php @@ -0,0 +1,9 @@ +
No argument
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Plugin.php b/vendor/kint-php/kint/src/Renderer/Rich/Plugin.php new file mode 100644 index 0000000..5e2db26 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Plugin.php @@ -0,0 +1,116 @@ +renderer = $r; + } + + /** + * Renders a locked header. + * + * This is a placeholder until Kint 3 when it can be renamed to + * renderLockedHeader after the deprecated static method is removed + */ + public function renderHeaderLocked(Kint_Object $o, $content) + { + $header = '
'; + + if (Kint_Renderer_Rich::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { + $header .= ''; + } + + $header .= ''; + + if (($s = $o->getModifiers()) !== null) { + $header .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $header .= ''.$this->renderer->escape($s).' '; + + if ($s = $o->getOperator()) { + $header .= $this->renderer->escape($s, 'ASCII').' '; + } + } + + if (($s = $o->getType()) !== null) { + $s = $this->renderer->escape($s); + + if ($o->reference) { + $s = '&'.$s; + } + + $header .= ''.$s.' '; + } + + if (($s = $o->getSize()) !== null) { + $header .= '('.$this->renderer->escape($s).') '; + } + + $header .= $content; + + if (!empty($ap)) { + $header .= '
'.$this->renderer->escape($ap).'
'; + } + + return $header.'
'; + } + + public static function renderLockedHeader(Kint_Object $o, $content) + { + static $show_dep = true; + + if ($show_dep) { + trigger_error('Kint_Renderer_Rich_Plugin::renderLockedHeader() is deprecated and will be removed in Kint 3.0. Use renderHeaderLocked instead.', KINT_PHP53 ? E_USER_DEPRECATED : E_USER_NOTICE); + $show_dep = false; + } + + $header = '
'; + + if (Kint_Renderer_Rich::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { + $header .= ''; + } + + $header .= ''; + + if (($s = $o->getModifiers()) !== null) { + $header .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $header .= ''.Kint_Object_Blob::escape($s).' '; + + if ($s = $o->getOperator()) { + $header .= Kint_Object_Blob::escape($s, 'ASCII').' '; + } + } + + if (($s = $o->getType()) !== null) { + $s = Kint_Object_Blob::escape($s); + + if ($o->reference) { + $s = '&'.$s; + } + + $header .= ''.$s.' '; + } + + if (($s = $o->getSize()) !== null) { + $header .= '('.Kint_Object_Blob::escape($s).') '; + } + + $header .= $content; + + if (!empty($ap)) { + $header .= '
'.Kint_Object_Blob::escape($ap).'
'; + } + + return $header.'
'; + } + + abstract public function render($o); +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Recursion.php b/vendor/kint-php/kint/src/Renderer/Rich/Recursion.php new file mode 100644 index 0000000..f364170 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Recursion.php @@ -0,0 +1,9 @@ +'.$this->renderHeaderLocked($o, 'Recursion').''; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php b/vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php new file mode 100644 index 0000000..5f3f50d --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElement.php @@ -0,0 +1,52 @@ +renderer->renderChildren($o); + + $header = ''; + + if (($s = $o->getModifiers()) !== null) { + $header .= ''.$s.' '; + } + + if (($s = $o->getName()) !== null) { + $header .= ''.$this->renderer->escape($s).' '; + + if ($s = $o->getOperator()) { + $header .= $this->renderer->escape($s, 'ASCII').' '; + } + } + + if (($s = $o->getType()) !== null) { + $s = $this->renderer->escape($s); + + if ($o->reference) { + $s = '&'.$s; + } + + $header .= ''.$this->renderer->escape($s).' '; + } + + if (($s = $o->getSize()) !== null) { + $header .= '('.$this->renderer->escape($s).') '; + } + + if ($s === null && $c = $o->getRepresentation('contents')) { + $c = reset($c->contents); + + if ($c && ($s = $c->getValueShort()) !== null) { + if (Kint_Renderer_Rich::$strlen_max && Kint_Object_Blob::strlen($s) > Kint_Renderer_Rich::$strlen_max) { + $s = substr($s, 0, Kint_Renderer_Rich::$strlen_max).'...'; + } + $header .= $this->renderer->escape($s); + } + } + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), $header); + + return '
'.$header.$children.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Source.php b/vendor/kint-php/kint/src/Renderer/Rich/Source.php new file mode 100644 index 0000000..d722678 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Source.php @@ -0,0 +1,52 @@ +source)) { + return false; + } + + $source = $r->source; + + // Trim empty lines from the start and end of the source + foreach ($source as $linenum => $line) { + if (trim($line) || $linenum === $r->line) { + break; + } else { + unset($source[$linenum]); + } + } + + foreach (array_reverse($source, true) as $linenum => $line) { + if (trim($line) || $linenum === $r->line) { + break; + } else { + unset($source[$linenum]); + } + } + + $start = ''; + $highlight = ''; + $end = ''; + + foreach ($source as $linenum => $line) { + if ($linenum < $r->line) { + $start .= $line."\n"; + } elseif ($linenum === $r->line) { + $highlight = '
'.$this->renderer->escape($line).'
'; + } else { + $end .= $line."\n"; + } + } + + $output = $this->renderer->escape($start).$highlight.$this->renderer->escape(substr($end, 0, -1)); + + if ($output) { + reset($source); + + return '
'.$output.'
'; + } + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Table.php b/vendor/kint-php/kint/src/Renderer/Rich/Table.php new file mode 100644 index 0000000..4178b39 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Table.php @@ -0,0 +1,100 @@ +'; + + $firstrow = reset($r->contents); + + foreach ($firstrow->value->contents as $field) { + $out .= ''; + } + + $out .= ''; + + foreach ($r->contents as $row) { + $out .= ''; + + foreach ($row->value->contents as $field) { + $out .= 'getType()) !== null) { + $type = $this->renderer->escape($s); + + if ($field->reference) { + $ref = '&'; + $type = $ref.$type; + } + + if (($s = $field->getSize()) !== null) { + $size .= ' ('.$this->renderer->escape($s).')'; + } + } + + if ($type) { + $out .= ' title="'.$type.$size.'"'; + } + + $out .= '>'; + + switch ($field->type) { + case 'boolean': + $out .= $field->value->contents ? ''.$ref.'true' : ''.$ref.'false'; + break; + case 'integer': + case 'double': + $out .= (string) $field->value->contents; + break; + case 'null': + $out .= ''.$ref.'null'; + break; + case 'string': + $val = $field->value->contents; + if (Kint_Renderer_Rich::$strlen_max && self::$respect_str_length && Kint_Object_Blob::strlen($val) > Kint_Renderer_Rich::$strlen_max) { + $val = substr($val, 0, Kint_Renderer_Rich::$strlen_max).'...'; + } + + $out .= $this->renderer->escape($val); + break; + case 'array': + $out .= ''.$ref.'array'.$size; + break; + case 'object': + $out .= ''.$ref.$this->renderer->escape($field->classname).''.$size; + break; + case 'resource': + $out .= ''.$ref.'resource'; + break; + default: + $out .= ''.$ref.'unknown'; + break; + } + + if (in_array('blacklist', $field->hints)) { + $out .= ' Blacklisted'; + } elseif (in_array('recursion', $field->hints)) { + $out .= ' Recursion'; + } elseif (in_array('depth_limit', $field->hints)) { + $out .= ' Depth Limit'; + } + + $out .= ''; + } + + $out .= ''; + } + + $out .= '
'.$this->renderer->escape($field->name).'
'; + $out .= $this->renderer->escape($row->name); + $out .= '
'; + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/Timestamp.php b/vendor/kint-php/kint/src/Renderer/Rich/Timestamp.php new file mode 100644 index 0000000..873f232 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/Timestamp.php @@ -0,0 +1,10 @@ +'.@date('Y-m-d H:i:s', $r->contents).''; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Rich/TraceFrame.php b/vendor/kint-php/kint/src/Renderer/Rich/TraceFrame.php new file mode 100644 index 0000000..261527f --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Rich/TraceFrame.php @@ -0,0 +1,39 @@ +renderer->renderChildren($o); + + if (!($o instanceof Kint_Object_TraceFrame)) { + $header = $this->renderer->renderHeader($o); + } else { + if (!empty($o->trace['file']) && !empty($o->trace['line'])) { + $header = ''.$this->renderer->escape(Kint::shortenPath($o->trace['file'])).':'.(int) $o->trace['line'].' '; + } else { + $header = 'PHP internal call '; + } + + if ($o->trace['class']) { + $header .= $this->renderer->escape($o->trace['class'].$o->trace['type']); + } + + if (is_string($o->trace['function'])) { + $function = $this->renderer->escape($o->trace['function'].'()'); + } else { + $function = $this->renderer->escape($o->trace['function']->getName().'('.$o->trace['function']->getParams().')'); + + if (($url = $o->trace['function']->getPhpDocUrl()) !== null) { + $function = ''.$function.''; + } + } + + $header .= ''.$function.''; + } + + $header = $this->renderer->renderHeaderWrapper($o, (bool) strlen($children), $header); + + return '
'.$header.$children.'
'; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text.php b/vendor/kint-php/kint/src/Renderer/Text.php new file mode 100644 index 0000000..fa20028 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text.php @@ -0,0 +1,300 @@ + 'Kint_Renderer_Text_Blacklist', + 'depth_limit' => 'Kint_Renderer_Text_DepthLimit', + 'nothing' => 'Kint_Renderer_Text_Nothing', + 'recursion' => 'Kint_Renderer_Text_Recursion', + 'trace' => 'Kint_Renderer_Text_Trace', + ); + + /** + * Parser plugins must be instanceof one of these or + * it will be removed for performance reasons. + */ + public static $parser_plugin_whitelist = array( + 'Kint_Parser_Blacklist', + 'Kint_Parser_Stream', + 'Kint_Parser_Trace', + ); + + /** + * The maximum length of a string before it is truncated. + * + * Falsey to disable + * + * @var int + */ + public static $strlen_max = 0; + + /** + * The default width of the terminal for headers. + * + * @var int + */ + public static $default_width = 80; + + /** + * Indentation width. + * + * @var int + */ + public static $default_indent = 4; + + /** + * Decorate the header and footer. + * + * @var bool + */ + public static $decorations = true; + + public $header_width = 80; + public $indent_width = 4; + + protected $plugin_objs = array(); + protected $previous_caller; + protected $callee; + protected $show_minitrace = true; + + public function __construct(array $params = array()) + { + parent::__construct($params); + + $params += array( + 'callee' => null, + 'caller' => null, + ); + + $this->callee = $params['callee']; + $this->previous_caller = $params['caller']; + $this->show_minitrace = !empty($params['settings']['display_called_from']); + $this->header_width = self::$default_width; + $this->indent_width = self::$default_indent; + } + + public function render(Kint_Object $o) + { + if ($plugin = $this->getPlugin(self::$object_renderers, $o->hints)) { + if (strlen($output = $plugin->render($o))) { + return $output; + } + } + + $out = ''; + + if ($o->depth == 0) { + $out .= $this->colorTitle($this->renderTitle($o)).PHP_EOL; + } + + $out .= $this->renderHeader($o); + $out .= $this->renderChildren($o).PHP_EOL; + + return $out; + } + + public function boxText($text, $width) + { + if (Kint_Object_Blob::strlen($text) > $width - 4) { + $text = Kint_Object_Blob::substr($text, 0, $width - 7).'...'; + } + + $text .= str_repeat(' ', $width - 4 - Kint_Object_Blob::strlen($text)); + + $out = '┌'.str_repeat('─', $width - 2).'┐'.PHP_EOL; + $out .= '│ '.$this->escape($text).' │'.PHP_EOL; + $out .= '└'.str_repeat('─', $width - 2).'┘'; + + return $out; + } + + public function renderTitle(Kint_Object $o) + { + if (($name = $o->getName()) === null) { + $name = 'literal'; + } + + if (self::$decorations) { + return $this->boxText($name, $this->header_width); + } elseif (Kint_Object_Blob::strlen($name) > $this->header_width) { + return Kint_Object_Blob::substr($name, 0, $this->header_width - 3).'...'; + } else { + return $name; + } + } + + public function renderHeader(Kint_Object $o) + { + $output = array(); + + if ($o->depth) { + if (($s = $o->getModifiers()) !== null) { + $output[] = $s; + } + + if ($o->name !== null) { + $output[] = $this->escape(var_export($o->name, true)); + + if (($s = $o->getOperator()) !== null) { + $output[] = $this->escape($s); + } + } + } + + if (($s = $o->getType()) !== null) { + if ($o->reference) { + $s = '&'.$s; + } + + $output[] = $this->colorType($this->escape($s)); + } + + if (($s = $o->getSize()) !== null) { + $output[] = '('.$this->escape($s).')'; + } + + if (($s = $o->getValueShort()) !== null) { + if (self::$strlen_max && Kint_Object_Blob::strlen($s) > self::$strlen_max) { + $s = substr($s, 0, self::$strlen_max).'...'; + } + $output[] = $this->colorValue($this->escape($s)); + } + + return str_repeat(' ', $o->depth * $this->indent_width).implode(' ', $output); + } + + public function renderChildren(Kint_Object $o) + { + if ($o->type === 'array') { + $output = ' ['; + } elseif ($o->type === 'object') { + $output = ' ('; + } else { + return ''; + } + + $children = ''; + + if ($o->value && is_array($o->value->contents)) { + foreach ($o->value->contents as $child) { + $children .= $this->render($child); + } + } + + if ($children) { + $output .= PHP_EOL.$children; + $output .= str_repeat(' ', $o->depth * $this->indent_width); + } + + if ($o->type === 'array') { + $output .= ']'; + } elseif ($o->type === 'object') { + $output .= ')'; + } + + return $output; + } + + public function colorValue($string) + { + return $string; + } + + public function colorType($string) + { + return $string; + } + + public function colorTitle($string) + { + return $string; + } + + public function postRender() + { + if (self::$decorations) { + $output = str_repeat('═', $this->header_width); + } else { + $output = ''; + } + + if (!$this->show_minitrace) { + return $this->colorTitle($output); + } else { + if ($output) { + $output .= PHP_EOL; + } + + return $this->colorTitle($output.$this->calledFrom().PHP_EOL); + } + } + + public function parserPlugins(array $plugins) + { + $return = array(); + + foreach ($plugins as $index => $plugin) { + foreach (self::$parser_plugin_whitelist as $whitelist) { + if ($plugin instanceof $whitelist) { + $return[] = $plugin; + continue 2; + } + } + } + + return $return; + } + + protected function calledFrom() + { + $output = ''; + + if (isset($this->callee['file'])) { + $output .= 'Called from '.$this->ideLink($this->callee['file'], $this->callee['line']); + } + + $caller = ''; + + if (isset($this->previous_caller['class'])) { + $caller .= $this->previous_caller['class']; + } + if (isset($this->previous_caller['type'])) { + $caller .= $this->previous_caller['type']; + } + if (isset($this->previous_caller['function']) + && !in_array($this->previous_caller['function'], array('include', 'include_once', 'require', 'require_once')) + ) { + $caller .= $this->previous_caller['function'].'()'; + } + + if ($caller) { + $output .= ' ['.$caller.']'; + } + + return $output; + } + + public function ideLink($file, $line) + { + return $this->escape(Kint::shortenPath($file)).':'.$line; + } + + protected function getPlugin(array $plugins, array $hints) + { + if ($plugins = $this->matchPlugins($plugins, $hints)) { + $plugin = end($plugins); + + if (!isset($this->plugin_objs[$plugin])) { + $this->plugin_objs[$plugin] = new $plugin($this); + } + + return $this->plugin_objs[$plugin]; + } + } + + public function escape($string, $encoding = false) + { + return $string; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/Blacklist.php b/vendor/kint-php/kint/src/Renderer/Text/Blacklist.php new file mode 100644 index 0000000..f1a5643 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/Blacklist.php @@ -0,0 +1,17 @@ +depth == 0) { + $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; + } + + $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('BLACKLISTED').PHP_EOL; + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/DepthLimit.php b/vendor/kint-php/kint/src/Renderer/Text/DepthLimit.php new file mode 100644 index 0000000..fd53216 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/DepthLimit.php @@ -0,0 +1,17 @@ +depth == 0) { + $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; + } + + $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('DEPTH LIMIT').PHP_EOL; + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/Nothing.php b/vendor/kint-php/kint/src/Renderer/Text/Nothing.php new file mode 100644 index 0000000..c77e7aa --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/Nothing.php @@ -0,0 +1,13 @@ +renderer->colorTitle($this->renderer->boxText('No argument', $this->renderer->header_width)).PHP_EOL; + } else { + return $this->renderer->colorTitle('No argument').PHP_EOL; + } + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/Plugin.php b/vendor/kint-php/kint/src/Renderer/Text/Plugin.php new file mode 100644 index 0000000..71b5091 --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/Plugin.php @@ -0,0 +1,13 @@ +renderer = $r; + } + + abstract public function render($o); +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/Recursion.php b/vendor/kint-php/kint/src/Renderer/Text/Recursion.php new file mode 100644 index 0000000..1a1b7fa --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/Recursion.php @@ -0,0 +1,17 @@ +depth == 0) { + $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; + } + + $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('RECURSION').PHP_EOL; + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/Renderer/Text/Trace.php b/vendor/kint-php/kint/src/Renderer/Text/Trace.php new file mode 100644 index 0000000..d021ded --- /dev/null +++ b/vendor/kint-php/kint/src/Renderer/Text/Trace.php @@ -0,0 +1,83 @@ +depth == 0) { + $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; + } + + $out .= $this->renderer->renderHeader($o).':'.PHP_EOL; + + $indent = str_repeat(' ', ($o->depth + 1) * $this->renderer->indent_width); + + $i = 1; + foreach ($o->value->contents as $frame) { + $framedesc = $indent.str_pad($i.': ', 4, ' '); + + if ($frame->trace['file']) { + $framedesc .= $this->renderer->ideLink($frame->trace['file'], $frame->trace['line']).PHP_EOL; + } else { + $framedesc .= 'PHP internal call'.PHP_EOL; + } + + $framedesc .= $indent.' '; + + if ($frame->trace['class']) { + $framedesc .= $this->renderer->escape($frame->trace['class']); + + if ($frame->trace['object']) { + $framedesc .= $this->renderer->escape('->'); + } else { + $framedesc .= '::'; + } + } + + if (is_string($frame->trace['function'])) { + $framedesc .= $this->renderer->escape($frame->trace['function']).'(...)'; + } elseif ($frame->trace['function'] instanceof Kint_Object_Method) { + $framedesc .= $this->renderer->escape($frame->trace['function']->getName()); + $framedesc .= '('.$this->renderer->escape($frame->trace['function']->getParams()).')'; + } + + $out .= $this->renderer->colorType($framedesc).PHP_EOL.PHP_EOL; + + if ($source = $frame->getRepresentation('source')) { + $line_wanted = $source->line; + $source = $source->source; + + // Trim empty lines from the start and end of the source + foreach ($source as $linenum => $line) { + if (trim($line) || $linenum === $line_wanted) { + break; + } else { + unset($source[$linenum]); + } + } + + foreach (array_reverse($source, true) as $linenum => $line) { + if (trim($line) || $linenum === $line_wanted) { + break; + } else { + unset($source[$linenum]); + } + } + + foreach ($source as $lineno => $line) { + if ($lineno == $line_wanted) { + $out .= $indent.$this->renderer->colorValue($this->renderer->escape($line)).PHP_EOL; + } else { + $out .= $indent.$this->renderer->escape($line).PHP_EOL; + } + } + } + + ++$i; + } + + return $out; + } +} diff --git a/vendor/kint-php/kint/src/SourceParser.php b/vendor/kint-php/kint/src/SourceParser.php new file mode 100644 index 0000000..befc6cf --- /dev/null +++ b/vendor/kint-php/kint/src/SourceParser.php @@ -0,0 +1,434 @@ + true, + T_COMMENT => true, + T_DOC_COMMENT => true, + T_INLINE_HTML => true, + T_OPEN_TAG => true, + T_OPEN_TAG_WITH_ECHO => true, + T_WHITESPACE => true, + ); + + /** + * Things we need to do specially for operator tokens: + * - Refuse to strip spaces around them + * - Wrap the access path in parentheses if there + * are any of these in the final short parameter. + */ + private static $operator = array( + T_AND_EQUAL => true, + T_BOOLEAN_AND => true, + T_BOOLEAN_OR => true, + T_ARRAY_CAST => true, + T_BOOL_CAST => true, + T_CLONE => true, + T_CONCAT_EQUAL => true, + T_DEC => true, + T_DIV_EQUAL => true, + T_DOUBLE_CAST => true, + T_INC => true, + T_INCLUDE => true, + T_INCLUDE_ONCE => true, + T_INSTANCEOF => true, + T_INT_CAST => true, + T_IS_EQUAL => true, + T_IS_GREATER_OR_EQUAL => true, + T_IS_IDENTICAL => true, + T_IS_NOT_EQUAL => true, + T_IS_NOT_IDENTICAL => true, + T_IS_SMALLER_OR_EQUAL => true, + T_LOGICAL_AND => true, + T_LOGICAL_OR => true, + T_LOGICAL_XOR => true, + T_MINUS_EQUAL => true, + T_MOD_EQUAL => true, + T_MUL_EQUAL => true, + T_NEW => true, + T_OBJECT_CAST => true, + T_OR_EQUAL => true, + T_PLUS_EQUAL => true, + T_REQUIRE => true, + T_REQUIRE_ONCE => true, + T_SL => true, + T_SL_EQUAL => true, + T_SR => true, + T_SR_EQUAL => true, + T_STRING_CAST => true, + T_UNSET_CAST => true, + T_XOR_EQUAL => true, + '!' => true, + '%' => true, + '&' => true, + '*' => true, + '+' => true, + '-' => true, + '.' => true, + '/' => true, + ':' => true, + '<' => true, + '=' => true, + '>' => true, + '?' => true, + '^' => true, + '|' => true, + '~' => true, + ); + + private static $strip = array( + '(' => true, + ')' => true, + '[' => true, + ']' => true, + '{' => true, + '}' => true, + T_OBJECT_OPERATOR => true, + T_DOUBLE_COLON => true, + ); + + public static function getFunctionCalls($source, $line, $function) + { + static $up = array( + '(' => true, + '[' => true, + '{' => true, + T_CURLY_OPEN => true, + T_DOLLAR_OPEN_CURLY_BRACES => true, + ); + static $down = array( + ')' => true, + ']' => true, + '}' => true, + ); + static $modifiers = array( + '!', + '@', + '~', + '+', + '-', + ); + + if (KINT_PHP53) { + self::$strip[T_NS_SEPARATOR] = true; + } + + if (KINT_PHP56) { + self::$operator[T_POW] = true; + self::$operator[T_POW_EQUAL] = true; + } + + if (KINT_PHP70) { + self::$operator[T_SPACESHIP] = true; + } + + $tokens = token_get_all($source); + $cursor = 1; + $function_calls = array(); + $prev_tokens = array(null, null, null); + + if (is_array($function)) { + $class = explode('\\', $function[0]); + $class = strtolower(end($class)); + $function = strtolower($function[1]); + } else { + $class = null; + $function = strtolower($function); + } + + // Loop through tokens + foreach ($tokens as $index => $token) { + if (!is_array($token)) { + continue; + } + + // Count newlines for line number instead of using + // $token[2] since it's not available until 5.2.2 + // Also note that certain situations (String tokens after whitespace) + // may not have the correct line number unless you do this manually + $cursor += substr_count($token[1], "\n"); + if ($cursor > $line) { + break; + } + + // Store the last real tokens for later + if (isset(self::$ignore[$token[0]])) { + continue; + } else { + $prev_tokens = array($prev_tokens[1], $prev_tokens[2], $token); + } + + // Check if it's the right type to be the function we're looking for + if ($token[0] !== T_STRING || strtolower($token[1]) !== $function) { + continue; + } + + // Check if it's a function call + if ($tokens[self::realTokenIndex($tokens, $index, 1)] !== '(') { + continue; + } + + // Check if it matches the signature + if ($class === null) { + if ($prev_tokens[1] && in_array($prev_tokens[1][0], array(T_DOUBLE_COLON, T_OBJECT_OPERATOR))) { + continue; + } + } else { + if (!$prev_tokens[1] || $prev_tokens[1][0] !== T_DOUBLE_COLON) { + continue; + } + + if (!$prev_tokens[0] || $prev_tokens[0][0] !== T_STRING || strtolower($prev_tokens[0][1]) !== $class) { + continue; + } + } + + $inner_cursor = $cursor; + $depth = 0; // The depth respective to the function call + $offset = 1; // The offset from the function call + $instring = false; // Whether we're in a string or not + $realtokens = false; // Whether the string contains anything meaningful or not + $params = array(); // All our collected parameters + $shortparam = array(); // The short version of the parameter + $param_start = 1; // The distance to the start of the parameter + + // Loop through the following tokens until the function call ends + while (isset($tokens[$index + $offset])) { + $token = $tokens[$index + $offset]; + + // Ensure that the $inner_cursor is correct and + // that $token is either a T_ constant or a string + if (is_array($token)) { + $inner_cursor += substr_count($token[1], "\n"); + } + + if (!isset(self::$ignore[$token[0]]) && !isset($down[$token[0]])) { + $realtokens = true; + } + + // If it's a token that makes us to up a level, increase the depth + if (isset($up[$token[0]])) { + // If this is the first paren set the start of the param to just after it + if ($depth === 0) { + $param_start = $offset + 1; + } elseif ($depth === 1) { + $shortparam[] = $token; + $realtokens = false; + } + + ++$depth; + } elseif (isset($down[$token[0]])) { + --$depth; + + // If this brings us down to the parameter level, and we've had + // real tokens since going up, fill the $shortparam with an ellipsis + if ($depth === 1) { + if ($realtokens) { + $shortparam[] = '...'; + } + $shortparam[] = $token; + } + } elseif ($token[0] === '"') { + // Strings use the same symbol for up and down, but we can + // only ever be inside one string, so just use a bool for that + if ($instring) { + --$depth; + if ($depth === 1) { + $shortparam[] = '...'; + } + } else { + ++$depth; + } + + $instring = !$instring; + + $shortparam[] = '"'; + } elseif ($depth === 1) { + if ($token[0] === ',') { + $params[] = array( + 'full' => array_slice($tokens, $index + $param_start, $offset - $param_start), + 'short' => $shortparam, + ); + $shortparam = array(); + $param_start = $offset + 1; + } elseif ($token[0] === T_CONSTANT_ENCAPSED_STRING && strlen($token[1]) > 2) { + $shortparam[] = $token[1][0].'...'.$token[1][0]; + } else { + $shortparam[] = $token; + } + } + + // Depth has dropped to 0 (So we've hit the closing paren) + if ($depth <= 0) { + $params[] = array( + 'full' => array_slice($tokens, $index + $param_start, $offset - $param_start), + 'short' => $shortparam, + ); + + break; + } + + ++$offset; + } + + // If we're not passed (or at) the line at the end + // of the function call, we're too early so skip it + if ($inner_cursor < $line) { + continue; + } + + // Format the final output parameters + foreach ($params as &$param) { + $name = self::tokensFormatted($param['short']); + $expression = false; + foreach ($name as $token) { + if (self::tokenIsOperator($token)) { + $expression = true; + break; + } + } + + $param = array( + 'name' => self::tokensToString($name), + 'path' => self::tokensToString(self::tokensTrim($param['full'])), + 'expression' => $expression, + ); + } + + // Get the modifiers + $mods = array(); + --$index; + + while (isset($tokens[$index])) { + if (isset(self::$ignore[$tokens[$index][0]])) { + --$index; + continue; + } elseif (is_array($tokens[$index]) && empty($mods)) { + if ($tokens[$index][0] === T_DOUBLE_COLON || $tokens[$index][0] === T_STRING || (KINT_PHP53 && $tokens[$index][0] === T_NS_SEPARATOR)) { + --$index; + continue; + } else { + break; + } + } elseif (in_array($tokens[$index][0], $modifiers)) { + $mods[] = $tokens[$index]; + --$index; + continue; + } else { + break; + } + } + + $function_calls[] = array( + 'parameters' => $params, + 'modifiers' => $mods, + ); + } + + return $function_calls; + } + + private static function realTokenIndex(array $tokens, $index, $direction) + { + $index += $direction; + + while (isset($tokens[$index])) { + if (!isset(self::$ignore[$tokens[$index][0]])) { + return $index; + } + + $index += $direction; + } + + return null; + } + + /** + * We need a separate method to check if tokens are operators because we + * occasionally add "..." to short parameter versions. If we simply check + * for `$token[0]` then "..." will incorrectly match the "." operator. + * + * @param array|string $token The token to check + * + * @return bool + */ + private static function tokenIsOperator($token) + { + return $token !== '...' && isset(self::$operator[$token[0]]); + } + + private static function tokensToString(array $tokens) + { + $out = ''; + + foreach ($tokens as $token) { + if (is_string($token)) { + $out .= $token; + } elseif (is_array($token)) { + $out .= $token[1]; + } + } + + return $out; + } + + private static function tokensTrim(array $tokens) + { + foreach ($tokens as $index => $token) { + if (isset(self::$ignore[$token[0]])) { + unset($tokens[$index]); + } else { + break; + } + } + + $tokens = array_reverse($tokens); + + foreach ($tokens as $index => $token) { + if (isset(self::$ignore[$token[0]])) { + unset($tokens[$index]); + } else { + break; + } + } + + return array_reverse($tokens); + } + + private static function tokensFormatted(array $tokens) + { + $space = false; + + $tokens = self::tokensTrim($tokens); + + $output = array(); + $last = null; + + foreach ($tokens as $index => $token) { + if (isset(self::$ignore[$token[0]])) { + if ($space) { + continue; + } + + $next = $tokens[self::realTokenIndex($tokens, $index, 1)]; + + if (isset(self::$strip[$last[0]]) && !self::tokenIsOperator($next)) { + continue; + } elseif (isset(self::$strip[$next[0]]) && $last && !self::tokenIsOperator($last)) { + continue; + } + + $token = ' '; + $space = true; + } else { + $space = false; + $last = $token; + } + + $output[] = $token; + } + + return $output; + } +}