From 96434e4dda83b30d3e4380136bfaff965338a2ed Mon Sep 17 00:00:00 2001 From: Aurimas R Date: Thu, 21 Aug 2014 00:04:20 +0200 Subject: [PATCH] Revert "Initial commit of the current seime.lt backend codebase" This reverts commit 830e6c3430c93f6e149256ba9b96ea3980507920. --- CONTRIBUTING.md | 3 + README.md | 18 - app/commands/.gitkeep | 0 app/config/app.php | 196 ++ app/config/auth.php | 71 + app/config/cache.php | 89 + app/config/compile.php | 18 + app/config/database.php | 124 + app/config/live/.gitkeep | 0 app/config/mail.php | 124 + app/config/packages/.gitkeep | 0 .../barryvdh/laravel-debugbar/config.php | 146 + app/config/queue.php | 85 + app/config/remote.php | 59 + app/config/services.php | 31 + app/config/session.php | 140 + app/config/testing/cache.php | 20 + app/config/testing/session.php | 21 + app/config/view.php | 31 + app/config/workbench.php | 31 + app/controllers/.gitkeep | 0 app/controllers/BaseController.php | 18 + app/controllers/HomeController.php | 23 + app/database/.gitignore | 1 + app/database/migrations/.gitkeep | 0 ...2014_08_14_223444_create_actions_table.php | 44 + .../2014_08_14_223444_create_items_table.php | 38 + ...8_14_223444_create_members_notes_table.php | 36 + ...2014_08_14_223444_create_members_table.php | 38 + ...223444_create_participation_data_table.php | 38 + ...4_08_14_223444_create_presenters_table.php | 36 + ...14_08_14_223444_create_questions_table.php | 40 + ...8_14_223444_create_registrations_table.php | 36 + ...014_08_14_223444_create_sessions_table.php | 39 + ...444_create_sitting_participation_table.php | 36 + ...014_08_14_223444_create_sittings_table.php | 44 + ...014_08_14_223444_create_speakers_table.php | 35 + ...reate_subquestions_participation_table.php | 36 + ...08_14_223444_create_subquestions_table.php | 37 + .../2014_08_14_223444_create_votes_table.php | 38 + ...23444_create_voting_registration_table.php | 34 + app/database/seeds/.gitkeep | 0 app/database/seeds/DatabaseSeeder.php | 17 + app/filters.php | 90 + app/lang/en/pagination.php | 20 + app/lang/en/reminders.php | 24 + app/lang/en/validation.php | 106 + app/models/Action.php | 23 + app/models/DefaultParameterTrait.php | 27 + app/models/Item.php | 19 + app/models/Member.php | 73 + app/models/Presenter.php | 14 + app/models/Question.php | 46 + app/models/Registration.php | 22 + app/models/Session.php | 14 + app/models/Sitting.php | 42 + app/models/Speech.php | 12 + app/models/Subquestion.php | 29 + app/models/User.php | 26 + app/models/Vote.php | 33 + app/routes.php | 17 + app/start/artisan.php | 13 + app/start/global.php | 81 + app/start/local.php | 3 + app/storage/.gitignore | 1 + app/storage/debugbar/.gitignore | 2 + app/storage/logs/.gitignore | 2 + app/storage/meta/.gitignore | 2 + app/storage/sessions/.gitignore | 2 + app/storage/views/.gitignore | 2 + app/tests/ExampleTest.php | 17 + app/tests/TestCase.php | 19 + app/views/emails/auth/reminder.blade.php | 14 + app/views/hello.php | 42 + artisan | 74 + bootstrap/autoload.php | 75 + bootstrap/paths.php | 57 + bootstrap/start.php | 73 + classes/Action.php | 428 --- classes/DB.php | 139 - classes/Factory.php | 123 - classes/Klausimas_.php | 390 --- classes/Posedis.php | 208 -- classes/Question.php | 263 -- classes/Sesija.php | 82 - classes/Updater.php | 167 -- classes/Updater.php~ | 167 -- classes/abstractions.php | 279 -- classes/utilities.php | 55 - code-docs/code-summary-ENG.md | 54 - code-docs/code-summary-LT.md | 53 - composer.json | 40 + composer.lock | 2432 +++++++++++++++++ cron.php | 42 - db-docs/README-LT.md | 117 - db-docs/seime.lt.mwb | Bin 17210 -> 0 bytes db-docs/seime.lt.new.pdf | Bin 82764 -> 0 bytes db-docs/seime.lt.pdf | Bin 79756 -> 0 bytes db-docs/seime.new.lt.mwb | Bin 17766 -> 0 bytes extensions/QuestionParticipation.php | 243 -- extensions/QuestionStats.php | 39 - extensions/RegistrationLink.php | 62 - extensions/SittingStats.php | 274 -- phpunit.xml | 18 + public/.htaccess | 15 + public/favicon.ico | 0 public/index.php | 49 + public/packages/.gitkeep | 0 .../laravel-debugbar/laravel-debugbar.css | 65 + .../laravel-debugbar/laravel-icon.png | Bin 0 -> 15938 bytes .../maximebf/php-debugbar/debugbar.css | 225 ++ .../maximebf/php-debugbar/debugbar.js | 1080 ++++++++ .../packages/maximebf/php-debugbar/icons.png | Bin 0 -> 500 bytes .../maximebf/php-debugbar/openhandler.css | 60 + .../maximebf/php-debugbar/openhandler.js | 191 ++ .../maximebf/php-debugbar/php-icon.png | Bin 0 -> 3621 bytes .../font-awesome/css/font-awesome.min.css | 4 + .../vendor/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 62856 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 38205 bytes .../fonts/fontawesome-webfont.svg | 414 +++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 80652 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 44432 bytes .../vendor/highlightjs/highlight.pack.js | 1 + .../vendor/highlightjs/styles/github.css | 125 + .../vendor/jquery/dist/jquery.min.js | 5 + .../maximebf/php-debugbar/widgets.css | 186 ++ .../packages/maximebf/php-debugbar/widgets.js | 430 +++ .../php-debugbar/widgets/mails/widget.css | 12 + .../php-debugbar/widgets/mails/widget.js | 40 + .../widgets/sqlqueries/widget.css | 82 + .../php-debugbar/widgets/sqlqueries/widget.js | 94 + .../php-debugbar/widgets/templates/widget.css | 23 + .../php-debugbar/widgets/templates/widget.js | 38 + public/robots.txt | 2 + readme.md | 25 + server.php | 19 + social/cron.php | 144 - social/cron.php~ | 144 - social/template.php | 62 - sqls/available_hours.sql | 7 - sqls/empty_registrations.sql | 6 - sqls/fractions.sql | 5 - sqls/official_participation.sql | 6 - sqls/participated_hours.sql | 8 - update-ENG.php | 157 -- update.php | 157 -- 146 files changed, 8644 insertions(+), 3899 deletions(-) create mode 100644 CONTRIBUTING.md delete mode 100755 README.md create mode 100644 app/commands/.gitkeep create mode 100644 app/config/app.php create mode 100644 app/config/auth.php create mode 100644 app/config/cache.php create mode 100644 app/config/compile.php create mode 100644 app/config/database.php create mode 100644 app/config/live/.gitkeep create mode 100644 app/config/mail.php create mode 100644 app/config/packages/.gitkeep create mode 100644 app/config/packages/barryvdh/laravel-debugbar/config.php create mode 100644 app/config/queue.php create mode 100644 app/config/remote.php create mode 100644 app/config/services.php create mode 100644 app/config/session.php create mode 100644 app/config/testing/cache.php create mode 100644 app/config/testing/session.php create mode 100644 app/config/view.php create mode 100644 app/config/workbench.php create mode 100644 app/controllers/.gitkeep create mode 100644 app/controllers/BaseController.php create mode 100644 app/controllers/HomeController.php create mode 100644 app/database/.gitignore create mode 100644 app/database/migrations/.gitkeep create mode 100644 app/database/migrations/2014_08_14_223444_create_actions_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_items_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_members_notes_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_members_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_participation_data_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_presenters_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_questions_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_registrations_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_sessions_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_sitting_participation_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_sittings_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_speakers_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_subquestions_participation_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_subquestions_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_votes_table.php create mode 100644 app/database/migrations/2014_08_14_223444_create_voting_registration_table.php create mode 100644 app/database/seeds/.gitkeep create mode 100644 app/database/seeds/DatabaseSeeder.php create mode 100644 app/filters.php create mode 100644 app/lang/en/pagination.php create mode 100644 app/lang/en/reminders.php create mode 100644 app/lang/en/validation.php create mode 100644 app/models/Action.php create mode 100644 app/models/DefaultParameterTrait.php create mode 100644 app/models/Item.php create mode 100644 app/models/Member.php create mode 100644 app/models/Presenter.php create mode 100644 app/models/Question.php create mode 100644 app/models/Registration.php create mode 100644 app/models/Session.php create mode 100644 app/models/Sitting.php create mode 100644 app/models/Speech.php create mode 100644 app/models/Subquestion.php create mode 100644 app/models/User.php create mode 100644 app/models/Vote.php create mode 100644 app/routes.php create mode 100644 app/start/artisan.php create mode 100644 app/start/global.php create mode 100644 app/start/local.php create mode 100755 app/storage/.gitignore create mode 100755 app/storage/debugbar/.gitignore create mode 100755 app/storage/logs/.gitignore create mode 100755 app/storage/meta/.gitignore create mode 100755 app/storage/sessions/.gitignore create mode 100755 app/storage/views/.gitignore create mode 100644 app/tests/ExampleTest.php create mode 100644 app/tests/TestCase.php create mode 100644 app/views/emails/auth/reminder.blade.php create mode 100644 app/views/hello.php create mode 100644 artisan create mode 100644 bootstrap/autoload.php create mode 100644 bootstrap/paths.php create mode 100644 bootstrap/start.php delete mode 100755 classes/Action.php delete mode 100755 classes/DB.php delete mode 100755 classes/Factory.php delete mode 100755 classes/Klausimas_.php delete mode 100755 classes/Posedis.php delete mode 100755 classes/Question.php delete mode 100755 classes/Sesija.php delete mode 100755 classes/Updater.php delete mode 100755 classes/Updater.php~ delete mode 100755 classes/abstractions.php delete mode 100755 classes/utilities.php delete mode 100755 code-docs/code-summary-ENG.md delete mode 100755 code-docs/code-summary-LT.md create mode 100644 composer.json create mode 100644 composer.lock delete mode 100755 cron.php delete mode 100755 db-docs/README-LT.md delete mode 100755 db-docs/seime.lt.mwb delete mode 100755 db-docs/seime.lt.new.pdf delete mode 100755 db-docs/seime.lt.pdf delete mode 100755 db-docs/seime.new.lt.mwb delete mode 100755 extensions/QuestionParticipation.php delete mode 100755 extensions/QuestionStats.php delete mode 100755 extensions/RegistrationLink.php delete mode 100755 extensions/SittingStats.php create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/packages/.gitkeep create mode 100644 public/packages/barryvdh/laravel-debugbar/laravel-debugbar.css create mode 100644 public/packages/barryvdh/laravel-debugbar/laravel-icon.png create mode 100644 public/packages/maximebf/php-debugbar/debugbar.css create mode 100644 public/packages/maximebf/php-debugbar/debugbar.js create mode 100644 public/packages/maximebf/php-debugbar/icons.png create mode 100644 public/packages/maximebf/php-debugbar/openhandler.css create mode 100644 public/packages/maximebf/php-debugbar/openhandler.js create mode 100644 public/packages/maximebf/php-debugbar/php-icon.png create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/css/font-awesome.min.css create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/FontAwesome.otf create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 public/packages/maximebf/php-debugbar/vendor/highlightjs/highlight.pack.js create mode 100644 public/packages/maximebf/php-debugbar/vendor/highlightjs/styles/github.css create mode 100644 public/packages/maximebf/php-debugbar/vendor/jquery/dist/jquery.min.js create mode 100644 public/packages/maximebf/php-debugbar/widgets.css create mode 100644 public/packages/maximebf/php-debugbar/widgets.js create mode 100644 public/packages/maximebf/php-debugbar/widgets/mails/widget.css create mode 100644 public/packages/maximebf/php-debugbar/widgets/mails/widget.js create mode 100644 public/packages/maximebf/php-debugbar/widgets/sqlqueries/widget.css create mode 100644 public/packages/maximebf/php-debugbar/widgets/sqlqueries/widget.js create mode 100644 public/packages/maximebf/php-debugbar/widgets/templates/widget.css create mode 100644 public/packages/maximebf/php-debugbar/widgets/templates/widget.js create mode 100644 public/robots.txt create mode 100644 readme.md create mode 100644 server.php delete mode 100755 social/cron.php delete mode 100755 social/cron.php~ delete mode 100755 social/template.php delete mode 100755 sqls/available_hours.sql delete mode 100755 sqls/empty_registrations.sql delete mode 100755 sqls/fractions.sql delete mode 100755 sqls/official_participation.sql delete mode 100755 sqls/participated_hours.sql delete mode 100755 update-ENG.php delete mode 100755 update.php diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6a780c4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contribution Guidelines + +Please submit all issues and pull requests to the [laravel/framework](http://github.com/laravel/framework) repository! diff --git a/README.md b/README.md deleted file mode 100755 index 36e2ac3..0000000 --- a/README.md +++ /dev/null @@ -1,18 +0,0 @@ -## Seime.lt ## - -[Seime.lt](http://seime.lt) projekto posistemės PHP kodas, kuris surenka Lietuvos Respublikos Seimo narių -Seimo posėdžių lankomumo ir balsavimų duomenisfrom iš [Seimo svetainės](http://lrs.lt). - -**** - -PHP backend code of the [Seime.lt](http://seime.lt) project, which scrapes participation & voting data -from the website of the [Lithuanian parliament](http://lrs.lt). - -### Vietoj įžangos / Overview ### - -PHP kodas nėra detaliai dokumentuotas, tad mes siūlome - - -The code is not documented extensively, thus we suggest the following path for understanding it: - - Take a look into our database docs (schema + description), available at - diff --git a/app/commands/.gitkeep b/app/commands/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/config/app.php b/app/config/app.php new file mode 100644 index 0000000..ffdc27d --- /dev/null +++ b/app/config/app.php @@ -0,0 +1,196 @@ + false, + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => '', + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'Europe/Copenhagen', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => 'YourKeyHere', + + 'cipher' => MCRYPT_RIJNDAEL_128, + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => array( + + 'Illuminate\Foundation\Providers\ArtisanServiceProvider', + 'Illuminate\Auth\AuthServiceProvider', + 'Illuminate\Cache\CacheServiceProvider', + 'Illuminate\Session\CommandsServiceProvider', + 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', + 'Illuminate\Routing\ControllerServiceProvider', + 'Illuminate\Cookie\CookieServiceProvider', + 'Illuminate\Database\DatabaseServiceProvider', + 'Illuminate\Encryption\EncryptionServiceProvider', + 'Illuminate\Filesystem\FilesystemServiceProvider', + 'Illuminate\Hashing\HashServiceProvider', + 'Illuminate\Html\HtmlServiceProvider', + 'Illuminate\Log\LogServiceProvider', + 'Illuminate\Mail\MailServiceProvider', + 'Illuminate\Database\MigrationServiceProvider', + 'Illuminate\Pagination\PaginationServiceProvider', + 'Illuminate\Queue\QueueServiceProvider', + 'Illuminate\Redis\RedisServiceProvider', + 'Illuminate\Remote\RemoteServiceProvider', + 'Illuminate\Auth\Reminders\ReminderServiceProvider', + 'Illuminate\Database\SeedServiceProvider', + 'Illuminate\Session\SessionServiceProvider', + 'Illuminate\Translation\TranslationServiceProvider', + 'Illuminate\Validation\ValidationServiceProvider', + 'Illuminate\View\ViewServiceProvider', + 'Illuminate\Workbench\WorkbenchServiceProvider', + 'Barryvdh\Debugbar\ServiceProvider', + + ), + + /* + |-------------------------------------------------------------------------- + | Service Provider Manifest + |-------------------------------------------------------------------------- + | + | The service provider manifest is used by Laravel to lazy load service + | providers which are not needed for each request, as well to keep a + | list of all of the services. Here, you may set its storage spot. + | + */ + + 'manifest' => storage_path().'/meta', + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => array( + + 'App' => 'Illuminate\Support\Facades\App', + 'Artisan' => 'Illuminate\Support\Facades\Artisan', + 'Auth' => 'Illuminate\Support\Facades\Auth', + 'Blade' => 'Illuminate\Support\Facades\Blade', + 'Cache' => 'Illuminate\Support\Facades\Cache', + 'ClassLoader' => 'Illuminate\Support\ClassLoader', + 'Config' => 'Illuminate\Support\Facades\Config', + 'Controller' => 'Illuminate\Routing\Controller', + 'Cookie' => 'Illuminate\Support\Facades\Cookie', + 'Crypt' => 'Illuminate\Support\Facades\Crypt', + 'DB' => 'Illuminate\Support\Facades\DB', + 'Eloquent' => 'Illuminate\Database\Eloquent\Model', + 'Event' => 'Illuminate\Support\Facades\Event', + 'File' => 'Illuminate\Support\Facades\File', + 'Form' => 'Illuminate\Support\Facades\Form', + 'Hash' => 'Illuminate\Support\Facades\Hash', + 'HTML' => 'Illuminate\Support\Facades\HTML', + 'Input' => 'Illuminate\Support\Facades\Input', + 'Lang' => 'Illuminate\Support\Facades\Lang', + 'Log' => 'Illuminate\Support\Facades\Log', + 'Mail' => 'Illuminate\Support\Facades\Mail', + 'Paginator' => 'Illuminate\Support\Facades\Paginator', + 'Password' => 'Illuminate\Support\Facades\Password', + 'Queue' => 'Illuminate\Support\Facades\Queue', + 'Redirect' => 'Illuminate\Support\Facades\Redirect', + 'Redis' => 'Illuminate\Support\Facades\Redis', + 'Request' => 'Illuminate\Support\Facades\Request', + 'Response' => 'Illuminate\Support\Facades\Response', + 'Route' => 'Illuminate\Support\Facades\Route', + 'Schema' => 'Illuminate\Support\Facades\Schema', + 'Seeder' => 'Illuminate\Database\Seeder', + 'Session' => 'Illuminate\Support\Facades\Session', + 'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait', + 'SSH' => 'Illuminate\Support\Facades\SSH', + 'Str' => 'Illuminate\Support\Str', + 'URL' => 'Illuminate\Support\Facades\URL', + 'Validator' => 'Illuminate\Support\Facades\Validator', + 'View' => 'Illuminate\Support\Facades\View', + 'Debugbar' => 'Barryvdh\Debugbar\Facade', + + ), + +); diff --git a/app/config/auth.php b/app/config/auth.php new file mode 100644 index 0000000..eacbbfa --- /dev/null +++ b/app/config/auth.php @@ -0,0 +1,71 @@ + 'eloquent', + + /* + |-------------------------------------------------------------------------- + | Authentication Model + |-------------------------------------------------------------------------- + | + | When using the "Eloquent" authentication driver, we need to know which + | Eloquent model should be used to retrieve your users. Of course, it + | is often just the "User" model but you may use whatever you like. + | + */ + + 'model' => 'User', + + /* + |-------------------------------------------------------------------------- + | Authentication Table + |-------------------------------------------------------------------------- + | + | When using the "Database" authentication driver, we need to know which + | table should be used to retrieve your users. We have chosen a basic + | default value but you may easily change it to any table you like. + | + */ + + 'table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Password Reminder Settings + |-------------------------------------------------------------------------- + | + | Here you may set the settings for password reminders, including a view + | that should be used as your password reminder e-mail. You will also + | be able to set the name of the table that holds the reset tokens. + | + | The "expire" time is the number of minutes that the reminder should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'reminder' => array( + + 'email' => 'emails.auth.reminder', + + 'table' => 'password_reminders', + + 'expire' => 60, + + ), + +); diff --git a/app/config/cache.php b/app/config/cache.php new file mode 100644 index 0000000..ce89842 --- /dev/null +++ b/app/config/cache.php @@ -0,0 +1,89 @@ + 'file', + + /* + |-------------------------------------------------------------------------- + | File Cache Location + |-------------------------------------------------------------------------- + | + | When using the "file" cache driver, we need a location where the cache + | files may be stored. A sensible default has been specified, but you + | are free to change it to any other place on disk that you desire. + | + */ + + 'path' => storage_path().'/cache', + + /* + |-------------------------------------------------------------------------- + | Database Cache Connection + |-------------------------------------------------------------------------- + | + | When using the "database" cache driver you may specify the connection + | that should be used to store the cached items. When this option is + | null the default database connection will be utilized for cache. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Database Cache Table + |-------------------------------------------------------------------------- + | + | When using the "database" cache driver we need to know the table that + | should be used to store the cached items. A default table name has + | been provided but you're free to change it however you deem fit. + | + */ + + 'table' => 'cache', + + /* + |-------------------------------------------------------------------------- + | Memcached Servers + |-------------------------------------------------------------------------- + | + | Now you may specify an array of your Memcached servers that should be + | used when utilizing the Memcached cache driver. All of the servers + | should contain a value for "host", "port", and "weight" options. + | + */ + + 'memcached' => array( + + array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), + + ), + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +); diff --git a/app/config/compile.php b/app/config/compile.php new file mode 100644 index 0000000..d5e5518 --- /dev/null +++ b/app/config/compile.php @@ -0,0 +1,18 @@ + PDO::FETCH_CLASS, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => 'mysql', + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => array( + + 'sqlite' => array( + 'driver' => 'sqlite', + 'database' => __DIR__.'/../database/production.sqlite', + 'prefix' => '', + ), + + 'mysql' => array( + 'driver' => 'mysql', + 'host' => 'localhost', + 'database' => 'seimas', + 'username' => '', + 'password' => '', + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + ), + + 'pgsql' => array( + 'driver' => 'pgsql', + 'host' => 'localhost', + 'database' => 'forge', + 'username' => 'forge', + 'password' => '', + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + ), + + 'sqlsrv' => array( + 'driver' => 'sqlsrv', + 'host' => 'localhost', + 'database' => 'database', + 'username' => 'root', + 'password' => '', + 'prefix' => '', + ), + + ), + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => array( + + 'cluster' => false, + + 'default' => array( + 'host' => '127.0.0.1', + 'port' => 6379, + 'database' => 0, + ), + + ), + +); diff --git a/app/config/live/.gitkeep b/app/config/live/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/config/mail.php b/app/config/mail.php new file mode 100644 index 0000000..76fd9e4 --- /dev/null +++ b/app/config/mail.php @@ -0,0 +1,124 @@ + 'smtp', + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => 'smtp.mailgun.org', + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => 587, + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => array('address' => null, 'name' => null), + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => 'tls', + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => null, + + /* + |-------------------------------------------------------------------------- + | SMTP Server Password + |-------------------------------------------------------------------------- + | + | Here you may set the password required by your SMTP server to send out + | messages from your application. This will be given to the server on + | connection so that the application will be able to send messages. + | + */ + + 'password' => null, + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Mail "Pretend" + |-------------------------------------------------------------------------- + | + | When this option is enabled, e-mail will not actually be sent over the + | web and will instead be written to your application's logs files so + | you may inspect the message. This is great for local development. + | + */ + + 'pretend' => false, + +); diff --git a/app/config/packages/.gitkeep b/app/config/packages/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/config/packages/barryvdh/laravel-debugbar/config.php b/app/config/packages/barryvdh/laravel-debugbar/config.php new file mode 100644 index 0000000..6dc07e2 --- /dev/null +++ b/app/config/packages/barryvdh/laravel-debugbar/config.php @@ -0,0 +1,146 @@ + Config::get('app.debug'), + + /* + |-------------------------------------------------------------------------- + | Storage settings + |-------------------------------------------------------------------------- + | + | DebugBar stores data for session/ajax requests in a directory. + | You can disable this, so the debugbar stores data in headers/session, + | but this can cause problems with large data collectors. + | + */ + 'storage' => array( + 'enabled' => true, + 'path' => storage_path() . '/debugbar', + ), + + /* + |-------------------------------------------------------------------------- + | Vendors + |-------------------------------------------------------------------------- + | + | Vendor files are included by default, but can be set to false. + | This can also be set to 'js' or 'css', to only include javascript or css vendor files. + | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) + | and for js: jquery and and highlight.js + | So if you want syntax highlighting, set it to true. + | jQuery is set to not conflict with existing jQuery scripts. + | + */ + + 'include_vendors' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Ajax Requests + |-------------------------------------------------------------------------- + | + | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), + | you can use this option to disable sending the data through the headers. + | + */ + + 'capture_ajax' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Console Commands + |-------------------------------------------------------------------------- + | + | The Debugbar can listen to Artisan commands. You can view them with the browse button in the Debugbar. + | + */ + + 'capture_console' => false, + + /* + |-------------------------------------------------------------------------- + | DataCollectors + |-------------------------------------------------------------------------- + | + | Enable/disable DataCollectors + | + */ + + 'collectors' => array( + 'phpinfo' => true, // Php version + 'messages' => true, // Messages + 'time' => true, // Time Datalogger + 'memory' => true, // Memory usage + 'exceptions' => true, // Exception displayer + 'log' => true, // Logs from Monolog (merged in messages if enabled) + 'db' => true, // Show database (PDO) queries and bindings + 'views' => true, // Views with their data + 'route' => true, // Current route information + 'laravel' => false, // Laravel version and environment + 'events' => false, // All events fired + 'default_request' => false, // Regular or special Symfony request logger + 'symfony_request' => true, // Only one can be enabled.. + 'mail' => true, // Catch mail messages + 'logs' => false, // Add the latest log messages + 'files' => false, // Show the included files + 'config' => false, // Display config settings + 'auth' => false, // Display Laravel authentication status + ), + + /* + |-------------------------------------------------------------------------- + | Extra options + |-------------------------------------------------------------------------- + | + | Configure some DataCollectors + | + */ + + 'options' => array( + 'auth' => array( + 'show_name' => false, // Also show the users name/email in the debugbar + ), + 'db' => array( + 'with_params' => true, // Render SQL with the parameters substituted + 'timeline' => false, // Add the queries to the timeline + ), + 'mail' => array( + 'full_log' => false + ), + 'views' => array( + 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + ), + 'route' => array( + 'label' => true // show complete route on bar + ), + 'logs' => array( + 'file' => null + ), + ), + + /* + |-------------------------------------------------------------------------- + | Inject Debugbar in Response + |-------------------------------------------------------------------------- + | + | Usually, the debugbar is added just before , by listening to the + | Response after the App is done. If you disable this, you have to add them + | in your template yourself. See http://phpdebugbar.com/docs/rendering.html + | + */ + + 'inject' => true, + +); diff --git a/app/config/queue.php b/app/config/queue.php new file mode 100644 index 0000000..940a4cd --- /dev/null +++ b/app/config/queue.php @@ -0,0 +1,85 @@ + 'sync', + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => array( + + 'sync' => array( + 'driver' => 'sync', + ), + + 'beanstalkd' => array( + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'ttr' => 60, + ), + + 'sqs' => array( + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'queue' => 'your-queue-url', + 'region' => 'us-east-1', + ), + + 'iron' => array( + 'driver' => 'iron', + 'host' => 'mq-aws-us-east-1.iron.io', + 'token' => 'your-token', + 'project' => 'your-project-id', + 'queue' => 'your-queue-name', + 'encrypt' => true, + ), + + 'redis' => array( + 'driver' => 'redis', + 'queue' => 'default', + ), + + ), + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => array( + + 'database' => 'mysql', 'table' => 'failed_jobs', + + ), + +); diff --git a/app/config/remote.php b/app/config/remote.php new file mode 100644 index 0000000..2169c43 --- /dev/null +++ b/app/config/remote.php @@ -0,0 +1,59 @@ + 'production', + + /* + |-------------------------------------------------------------------------- + | Remote Server Connections + |-------------------------------------------------------------------------- + | + | These are the servers that will be accessible via the SSH task runner + | facilities of Laravel. This feature radically simplifies executing + | tasks on your servers, such as deploying out these applications. + | + */ + + 'connections' => array( + + 'production' => array( + 'host' => '', + 'username' => '', + 'password' => '', + 'key' => '', + 'keyphrase' => '', + 'root' => '/var/www', + ), + + ), + + /* + |-------------------------------------------------------------------------- + | Remote Server Groups + |-------------------------------------------------------------------------- + | + | Here you may list connections under a single group name, which allows + | you to easily access all of the servers at once using a short name + | that is extremely easy to remember, such as "web" or "database". + | + */ + + 'groups' => array( + + 'web' => array('production') + + ), + +); diff --git a/app/config/services.php b/app/config/services.php new file mode 100644 index 0000000..c8aba2a --- /dev/null +++ b/app/config/services.php @@ -0,0 +1,31 @@ + array( + 'domain' => '', + 'secret' => '', + ), + + 'mandrill' => array( + 'secret' => '', + ), + + 'stripe' => array( + 'model' => 'User', + 'secret' => '', + ), + +); diff --git a/app/config/session.php b/app/config/session.php new file mode 100644 index 0000000..ae34302 --- /dev/null +++ b/app/config/session.php @@ -0,0 +1,140 @@ + 'file', + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => 120, + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path().'/sessions', + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => array(2, 100), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => 'laravel_session', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => false, + +); diff --git a/app/config/testing/cache.php b/app/config/testing/cache.php new file mode 100644 index 0000000..66a8a39 --- /dev/null +++ b/app/config/testing/cache.php @@ -0,0 +1,20 @@ + 'array', + +); diff --git a/app/config/testing/session.php b/app/config/testing/session.php new file mode 100644 index 0000000..0364b63 --- /dev/null +++ b/app/config/testing/session.php @@ -0,0 +1,21 @@ + 'array', + +); diff --git a/app/config/view.php b/app/config/view.php new file mode 100644 index 0000000..34b8f38 --- /dev/null +++ b/app/config/view.php @@ -0,0 +1,31 @@ + array(__DIR__.'/../views'), + + /* + |-------------------------------------------------------------------------- + | Pagination View + |-------------------------------------------------------------------------- + | + | This view will be used to render the pagination link output, and can + | be easily customized here to show any view you like. A clean view + | compatible with Twitter's Bootstrap is given to you by default. + | + */ + + 'pagination' => 'pagination::slider-3', + +); diff --git a/app/config/workbench.php b/app/config/workbench.php new file mode 100644 index 0000000..87c5e38 --- /dev/null +++ b/app/config/workbench.php @@ -0,0 +1,31 @@ + '', + + /* + |-------------------------------------------------------------------------- + | Workbench Author E-Mail Address + |-------------------------------------------------------------------------- + | + | Like the option above, your e-mail address is used when generating new + | workbench packages. The e-mail is placed in your composer.json file + | automatically after the package is created by the workbench tool. + | + */ + + 'email' => '', + +); diff --git a/app/controllers/.gitkeep b/app/controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/controllers/BaseController.php b/app/controllers/BaseController.php new file mode 100644 index 0000000..2bee464 --- /dev/null +++ b/app/controllers/BaseController.php @@ -0,0 +1,18 @@ +layout)) + { + $this->layout = View::make($this->layout); + } + } + +} diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php new file mode 100644 index 0000000..37935c4 --- /dev/null +++ b/app/controllers/HomeController.php @@ -0,0 +1,23 @@ +increments('id'); + $table->string('number', 20); + $table->time('start_time'); + $table->time('end_time'); + $table->char('type', 20); + $table->text('url')->index('url'); + $table->boolean('total_participants'); + $table->char('outcome', 20)->index('outcome'); + $table->text('voting_topic'); + $table->text('title'); + $table->integer('questions_id')->index('questions_id'); + $table->text('dom'); + $table->unique(['number','questions_id'], 'number'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('actions'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_items_table.php b/app/database/migrations/2014_08_14_223444_create_items_table.php new file mode 100644 index 0000000..472db68 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_items_table.php @@ -0,0 +1,38 @@ +integer('id', true); + $table->boolean('number'); + $table->integer('questions_id')->index('questions_id'); + $table->text('title'); + $table->text('document_url'); + $table->text('related_doc_url'); + $table->unique(['number','questions_id'], 'number'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('items'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_members_notes_table.php b/app/database/migrations/2014_08_14_223444_create_members_notes_table.php new file mode 100644 index 0000000..a5bd1a6 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_members_notes_table.php @@ -0,0 +1,36 @@ +integer('members_id'); + $table->enum('sittings_cadency', array('2008-2012','2012-2016','1996-2000','2000-2004','2004-2008')); + $table->date('cadency_start')->nullable(); + $table->date('cadency_end')->nullable(); + $table->char('notes', 100); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('members_notes'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_members_table.php b/app/database/migrations/2014_08_14_223444_create_members_table.php new file mode 100644 index 0000000..a9d0548 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_members_table.php @@ -0,0 +1,38 @@ +integer('id')->primary(); + $table->char('fraction', 20); + $table->text('image_src'); + $table->char('name', 100); + $table->date('cadency_start'); + $table->date('cadency_end')->index('cadency_end'); + $table->string('notes', 100); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('members'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_participation_data_table.php b/app/database/migrations/2014_08_14_223444_create_participation_data_table.php new file mode 100644 index 0000000..944ff54 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_participation_data_table.php @@ -0,0 +1,38 @@ +bigInteger('id', true)->unsigned(); + $table->integer('sittings_id')->index('sittings_id_2'); + $table->integer('members_id')->index('members_id'); + $table->float('hours_available', 10, 0); + $table->float('hours_present', 10, 0); + $table->boolean('official_presence')->index('official_presence'); + $table->unique(['sittings_id','members_id'], 'sittings_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('participation_data'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_presenters_table.php b/app/database/migrations/2014_08_14_223444_create_presenters_table.php new file mode 100644 index 0000000..07e7725 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_presenters_table.php @@ -0,0 +1,36 @@ +integer('id', true); + $table->boolean('number'); + $table->integer('items_id')->index('items_id'); + $table->text('presenter'); + $table->unique(['number','items_id'], 'number'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('presenters'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_questions_table.php b/app/database/migrations/2014_08_14_223444_create_questions_table.php new file mode 100644 index 0000000..1e5ab5c --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_questions_table.php @@ -0,0 +1,40 @@ +integer('id', true); + $table->dateTime('start_time'); + $table->dateTime('end_time'); + $table->text('url'); + $table->text('title'); + $table->integer('sittings_id')->index('sittings_id_2'); + $table->time('effective_length'); + $table->boolean('number'); + $table->unique(['sittings_id','number'], 'sittings_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('questions'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_registrations_table.php b/app/database/migrations/2014_08_14_223444_create_registrations_table.php new file mode 100644 index 0000000..b75a6fd --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_registrations_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->integer('actions_id'); + $table->integer('members_id'); + $table->boolean('presence'); + $table->unique(['actions_id','members_id'], 'actions_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('registrations'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_sessions_table.php b/app/database/migrations/2014_08_14_223444_create_sessions_table.php new file mode 100644 index 0000000..2245308 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_sessions_table.php @@ -0,0 +1,39 @@ +boolean('id')->primary(); + $table->text('url'); + $table->char('type', 20); + $table->enum('kadencija', array('1996-2000','2000-2004','2004-2008','2008-2012','2012-2016')); + $table->boolean('number'); + $table->date('start_date'); + $table->date('end_date'); + $table->time('effective_length'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('sessions'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_sitting_participation_table.php b/app/database/migrations/2014_08_14_223444_create_sitting_participation_table.php new file mode 100644 index 0000000..31039a4 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_sitting_participation_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->boolean('presence')->index('presence'); + $table->integer('sittings_id')->index('sittings_id_2'); + $table->integer('members_id')->index('members_id'); + $table->unique(['sittings_id','members_id'], 'sittings_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('sitting_participation'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_sittings_table.php b/app/database/migrations/2014_08_14_223444_create_sittings_table.php new file mode 100644 index 0000000..d4fb745 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_sittings_table.php @@ -0,0 +1,44 @@ +integer('id', true); + $table->boolean('number'); + $table->text('type'); + $table->text('transcript_url'); + $table->text('recording_url'); + $table->text('protocol_url'); + $table->dateTime('start_time'); + $table->time('effective_length'); + $table->text('url'); + $table->dateTime('end_time'); + $table->text('participation_url'); + $table->boolean('sessions_id'); + $table->enum('cadency', array('2008-2012','2012-2016','2004-2008','1996-2000','2000-2004'))->default('2012-2016')->index('cadency'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('sittings'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_speakers_table.php b/app/database/migrations/2014_08_14_223444_create_speakers_table.php new file mode 100644 index 0000000..00b42ce --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_speakers_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->integer('members_id'); + $table->integer('actions_id')->index('actions_id'); + $table->unique(['members_id','actions_id'], 'members_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('speakers'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_subquestions_participation_table.php b/app/database/migrations/2014_08_14_223444_create_subquestions_participation_table.php new file mode 100644 index 0000000..5277284 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_subquestions_participation_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->integer('subquestions_id')->index('subquestions_id_2'); + $table->integer('members_id')->index('members_id'); + $table->boolean('presence'); + $table->unique(['subquestions_id','members_id'], 'subquestions_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('subquestions_participation'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_subquestions_table.php b/app/database/migrations/2014_08_14_223444_create_subquestions_table.php new file mode 100644 index 0000000..d8f1462 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_subquestions_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->integer('questions_id')->index('questions_id_2'); + $table->boolean('number')->index('number'); + $table->dateTime('start_time'); + $table->dateTime('end_time'); + $table->unique(['questions_id','number'], 'questions_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('subquestions'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_votes_table.php b/app/database/migrations/2014_08_14_223444_create_votes_table.php new file mode 100644 index 0000000..6f90f5d --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_votes_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->integer('actions_id')->index('actions_id_2'); + $table->integer('members_id')->index('members_id'); + $table->char('fraction', 10); + $table->char('vote', 10)->index('vote'); + $table->unique(['actions_id','members_id'], 'actions_id'); + $table->index(['actions_id','vote'], 'actions_id_3'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('votes'); + } + +} diff --git a/app/database/migrations/2014_08_14_223444_create_voting_registration_table.php b/app/database/migrations/2014_08_14_223444_create_voting_registration_table.php new file mode 100644 index 0000000..0e86ac9 --- /dev/null +++ b/app/database/migrations/2014_08_14_223444_create_voting_registration_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->integer('registration_id'); + $table->integer('voting_id')->unique('voting_id'); + }); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('voting_registration'); + } + +} diff --git a/app/database/seeds/.gitkeep b/app/database/seeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/database/seeds/DatabaseSeeder.php b/app/database/seeds/DatabaseSeeder.php new file mode 100644 index 0000000..1989252 --- /dev/null +++ b/app/database/seeds/DatabaseSeeder.php @@ -0,0 +1,17 @@ +call('UserTableSeeder'); + } + +} diff --git a/app/filters.php b/app/filters.php new file mode 100644 index 0000000..fd0b4bc --- /dev/null +++ b/app/filters.php @@ -0,0 +1,90 @@ + '« Previous', + + 'next' => 'Next »', + +); diff --git a/app/lang/en/reminders.php b/app/lang/en/reminders.php new file mode 100644 index 0000000..e42148e --- /dev/null +++ b/app/lang/en/reminders.php @@ -0,0 +1,24 @@ + "Passwords must be at least six characters and match the confirmation.", + + "user" => "We can't find a user with that e-mail address.", + + "token" => "This password reset token is invalid.", + + "sent" => "Password reminder sent!", + +); diff --git a/app/lang/en/validation.php b/app/lang/en/validation.php new file mode 100644 index 0000000..e621614 --- /dev/null +++ b/app/lang/en/validation.php @@ -0,0 +1,106 @@ + "The :attribute must be accepted.", + "active_url" => "The :attribute is not a valid URL.", + "after" => "The :attribute must be a date after :date.", + "alpha" => "The :attribute may only contain letters.", + "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.", + "alpha_num" => "The :attribute may only contain letters and numbers.", + "array" => "The :attribute must be an array.", + "before" => "The :attribute must be a date before :date.", + "between" => array( + "numeric" => "The :attribute must be between :min and :max.", + "file" => "The :attribute must be between :min and :max kilobytes.", + "string" => "The :attribute must be between :min and :max characters.", + "array" => "The :attribute must have between :min and :max items.", + ), + "boolean" => "The :attribute field must be true or false", + "confirmed" => "The :attribute confirmation does not match.", + "date" => "The :attribute is not a valid date.", + "date_format" => "The :attribute does not match the format :format.", + "different" => "The :attribute and :other must be different.", + "digits" => "The :attribute must be :digits digits.", + "digits_between" => "The :attribute must be between :min and :max digits.", + "email" => "The :attribute must be a valid email address.", + "exists" => "The selected :attribute is invalid.", + "image" => "The :attribute must be an image.", + "in" => "The selected :attribute is invalid.", + "integer" => "The :attribute must be an integer.", + "ip" => "The :attribute must be a valid IP address.", + "max" => array( + "numeric" => "The :attribute may not be greater than :max.", + "file" => "The :attribute may not be greater than :max kilobytes.", + "string" => "The :attribute may not be greater than :max characters.", + "array" => "The :attribute may not have more than :max items.", + ), + "mimes" => "The :attribute must be a file of type: :values.", + "min" => array( + "numeric" => "The :attribute must be at least :min.", + "file" => "The :attribute must be at least :min kilobytes.", + "string" => "The :attribute must be at least :min characters.", + "array" => "The :attribute must have at least :min items.", + ), + "not_in" => "The selected :attribute is invalid.", + "numeric" => "The :attribute must be a number.", + "regex" => "The :attribute format is invalid.", + "required" => "The :attribute field is required.", + "required_if" => "The :attribute field is required when :other is :value.", + "required_with" => "The :attribute field is required when :values is present.", + "required_with_all" => "The :attribute field is required when :values is present.", + "required_without" => "The :attribute field is required when :values is not present.", + "required_without_all" => "The :attribute field is required when none of :values are present.", + "same" => "The :attribute and :other must match.", + "size" => array( + "numeric" => "The :attribute must be :size.", + "file" => "The :attribute must be :size kilobytes.", + "string" => "The :attribute must be :size characters.", + "array" => "The :attribute must contain :size items.", + ), + "unique" => "The :attribute has already been taken.", + "url" => "The :attribute format is invalid.", + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => array( + 'attribute-name' => array( + 'rule-name' => 'custom-message', + ), + 'vote' => ['in' => 'Vote value needs to be one of ":values" '] + ), + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => array(), + +); diff --git a/app/models/Action.php b/app/models/Action.php new file mode 100644 index 0000000..49a45c8 --- /dev/null +++ b/app/models/Action.php @@ -0,0 +1,23 @@ +belongsTo('Seimas\Question', 'questions_id', 'id'); + } + +} \ No newline at end of file diff --git a/app/models/DefaultParameterTrait.php b/app/models/DefaultParameterTrait.php new file mode 100644 index 0000000..7ed087f --- /dev/null +++ b/app/models/DefaultParameterTrait.php @@ -0,0 +1,27 @@ + $value], [$parameter => $validation]); + if ($value === null) { + return $pivotQuery; + } elseif ( + ($validation === null) or + ($validator->passes()) + ) { + return $pivotQuery->wherePivot($parameter, $value); + } else { + throw new \InvalidArgumentException($validator->messages()->first()); + } + } + +} diff --git a/app/models/Item.php b/app/models/Item.php new file mode 100644 index 0000000..3a58213 --- /dev/null +++ b/app/models/Item.php @@ -0,0 +1,19 @@ +belongsTo('Seimas\Question', 'questions_id', $this->primaryKey); + } + + public function presenters() { + return $this->hasMany('Seimas\Presenter', 'items_id', $this->primaryKey); + } + +} \ No newline at end of file diff --git a/app/models/Member.php b/app/models/Member.php new file mode 100644 index 0000000..ac28e49 --- /dev/null +++ b/app/models/Member.php @@ -0,0 +1,73 @@ +defaultPivotParameter( + $this->belongsToMany('Seimas\Sitting', 'sitting_participation', 'members_id', 'sittings_id') + ->withPivot('presence'), + 'presence', + $participated, + 'boolean' + ); + } + + public function sittingsWithData($participated = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Sitting', 'participation_data', 'members_id', 'sittings_id') + ->withPivot('official_presence', 'hours_present', 'hours_available'), + 'official_presence', + $participated, + 'boolean' + ); + } + + public function speeches() { + return $this->belongsToMany('Seimas\Speech', 'speakers', 'members_id', 'actions_id'); + } + + public function votes($voteType = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Vote', 'votes', 'members_id', 'actions_id') + ->withPivot('fraction', 'vote'), + 'vote', + $voteType, + Vote::validVoteRule() + ); + } + + public function registrations($presence = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Registration', 'registrations', 'members_id', 'actions_id') + ->withPivot('presence'), + 'presence', + $presence, + 'boolean' + ); + } + + public function subquestions($participated = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Subquestion', 'subquestions_participation', 'members_id', 'subquestions_id') + ->withPivot('presence'), + 'presence', + $participated, + 'boolean' + ); + } + +} \ No newline at end of file diff --git a/app/models/Presenter.php b/app/models/Presenter.php new file mode 100644 index 0000000..7cde4bf --- /dev/null +++ b/app/models/Presenter.php @@ -0,0 +1,14 @@ +belongsTo('Seimas\Item', 'items_id', $this->primaryKey); + } +} \ No newline at end of file diff --git a/app/models/Question.php b/app/models/Question.php new file mode 100644 index 0000000..84f2fc0 --- /dev/null +++ b/app/models/Question.php @@ -0,0 +1,46 @@ +belongsTo('Seimas\Sitting', 'sittings_id', $this->primaryKey); + } + + public function subquestions() { + return $this->hasMany('Seimas\Subquestion', 'questions_id', $this->primaryKey); + } + + public function actions() { + return $this->hasMany('Seimas\Action', 'questions_id', $this->primaryKey); + } + + public function registrations() { + return $this->hasMany('Seimas\Registration', 'questions_id', $this->primaryKey) + ->where('type', Action::REGISTRATION); + } + + public function votes() { + return $this->hasMany('Seimas\Vote', 'questions_id', $this->primaryKey) + ->where('type', Action::VOTE); + } + + public function speeches() { + return $this->hasMany('Seimas\Speech', 'questions_id', $this->primaryKey) + ->where('type', Action::SPEECH); + } + + public function unanimousVotes() { + return $this->hasMany('Seimas\Vote', 'questions_id', $this->primaryKey) + ->where('type', Action::UNANIMOUS_VOTE); + } + + public function items() { + return $this->hasMany('Seimas\Item', 'questions_id', $this->primaryKey); + } +} \ No newline at end of file diff --git a/app/models/Registration.php b/app/models/Registration.php new file mode 100644 index 0000000..77862a8 --- /dev/null +++ b/app/models/Registration.php @@ -0,0 +1,22 @@ +defaultPivotParameter( + $this->belongsToMany('Seimas\Member', 'registrations', 'actions_id', 'members_id') + ->withPivot('presence'), + 'presence', + $presence, + 'boolean' + ); + } + public function votes() { + return $this->belongsToMany('Seimas\Vote', 'voting_registration', 'registration_id', 'voting_id'); + } +} + diff --git a/app/models/Session.php b/app/models/Session.php new file mode 100644 index 0000000..28b32fb --- /dev/null +++ b/app/models/Session.php @@ -0,0 +1,14 @@ +hasMany('Seimas\Sitting', 'sessions_id', $this->primaryKey); + } +} \ No newline at end of file diff --git a/app/models/Sitting.php b/app/models/Sitting.php new file mode 100644 index 0000000..77fea03 --- /dev/null +++ b/app/models/Sitting.php @@ -0,0 +1,42 @@ +belongsTo('Seimas\Session', 'sessions_id', 'id'); + } + + public function questions() { + return $this->hasMany('Seimas\Question', 'sittings_id', $this->primaryKey); + } + + public function members($participated = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Member', 'sitting_participation', 'sittings_id', 'members_id') + ->withPivot('presence'), + 'presence', + $participated, + 'boolean' + ); + } + + public function membersWithData($participated = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Member', 'participation_data', 'sittings_id', 'members_id') + ->withPivot('official_presence', 'hours_available', 'hours_present'), + 'official_presence', + $participated, + 'boolean' + ); + } +} \ No newline at end of file diff --git a/app/models/Speech.php b/app/models/Speech.php new file mode 100644 index 0000000..7d9623e --- /dev/null +++ b/app/models/Speech.php @@ -0,0 +1,12 @@ +belongsToMany('Seimas\Member', 'speakers', 'actions_id', 'members_id')->first(); + } +} + diff --git a/app/models/Subquestion.php b/app/models/Subquestion.php new file mode 100644 index 0000000..e71f4f0 --- /dev/null +++ b/app/models/Subquestion.php @@ -0,0 +1,29 @@ +belongsTo('Seimas\Question', 'questions_id', $this->primaryKey); + } + + public function members($participated = null) { + return + $this->defaultPivotParameter( + $this->belongsToMany('Seimas\Member', 'subquestions_participation', 'subquestions_id', 'members_id') + ->withPivot('presence'), + 'presence', + $participated, + 'boolean' + ); + } + +} \ No newline at end of file diff --git a/app/models/User.php b/app/models/User.php new file mode 100644 index 0000000..af00a49 --- /dev/null +++ b/app/models/User.php @@ -0,0 +1,26 @@ +defaultPivotParameter( + $this->belongsToMany('Seimas\Member', 'votes', 'actions_id', 'members_id') + ->withPivot('fraction', 'vote'), + 'vote', + $voteType, + self::validVoteRule() + ); + } + + public function registration() { + return $this->belongsToMany('Seimas\Registration', 'voting_registration', 'voting_id', 'registration_id') + ->first(); + } +} \ No newline at end of file diff --git a/app/routes.php b/app/routes.php new file mode 100644 index 0000000..3e10dcf --- /dev/null +++ b/app/routes.php @@ -0,0 +1,17 @@ +client->request('GET', '/'); + + $this->assertTrue($this->client->getResponse()->isOk()); + } + +} diff --git a/app/tests/TestCase.php b/app/tests/TestCase.php new file mode 100644 index 0000000..d367fe5 --- /dev/null +++ b/app/tests/TestCase.php @@ -0,0 +1,19 @@ + + + + + + +

Password Reset

+ +
+ To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.
+ This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes. +
+ + diff --git a/app/views/hello.php b/app/views/hello.php new file mode 100644 index 0000000..6484242 --- /dev/null +++ b/app/views/hello.php @@ -0,0 +1,42 @@ + + + + + Laravel PHP Framework + + + +
+ Laravel PHP Framework +

You have arrived.

+
+ + diff --git a/artisan b/artisan new file mode 100644 index 0000000..5c408ad --- /dev/null +++ b/artisan @@ -0,0 +1,74 @@ +#!/usr/bin/env php +setRequestForConsoleEnvironment(); + +$artisan = Illuminate\Console\Application::start($app); + +/* +|-------------------------------------------------------------------------- +| Run The Artisan Application +|-------------------------------------------------------------------------- +| +| When we run the console application, the current CLI command will be +| executed in this console and the response sent back to a terminal +| or another output device for the developers. Here goes nothing! +| +*/ + +$status = $artisan->run(); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running. We will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$app->shutdown(); + +exit($status); diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php new file mode 100644 index 0000000..6b32931 --- /dev/null +++ b/bootstrap/autoload.php @@ -0,0 +1,75 @@ + __DIR__.'/../app', + + /* + |-------------------------------------------------------------------------- + | Public Path + |-------------------------------------------------------------------------- + | + | The public path contains the assets for your web application, such as + | your JavaScript and CSS files, and also contains the primary entry + | point for web requests into these applications from the outside. + | + */ + + 'public' => __DIR__.'/../public', + + /* + |-------------------------------------------------------------------------- + | Base Path + |-------------------------------------------------------------------------- + | + | The base path is the root of the Laravel installation. Most likely you + | will not need to change this value. But, if for some wild reason it + | is necessary you will do so here, just proceed with some caution. + | + */ + + 'base' => __DIR__.'/..', + + /* + |-------------------------------------------------------------------------- + | Storage Path + |-------------------------------------------------------------------------- + | + | The storage path is used by Laravel to store cached Blade views, logs + | and other pieces of information. You may modify the path here when + | you want to change the location of this directory for your apps. + | + */ + + 'storage' => __DIR__.'/../app/storage', + +); diff --git a/bootstrap/start.php b/bootstrap/start.php new file mode 100644 index 0000000..e8ce2f0 --- /dev/null +++ b/bootstrap/start.php @@ -0,0 +1,73 @@ +detectEnvironment(array( + + 'local' => array('MUKASWARE'), + +)); + +/* +|-------------------------------------------------------------------------- +| Bind Paths +|-------------------------------------------------------------------------- +| +| Here we are binding the paths configured in paths.php to the app. You +| should not be changing these here. If you need to change these you +| may do so within the paths.php file and they will be bound here. +| +*/ + +$app->bindInstallPaths(require __DIR__.'/paths.php'); + +/* +|-------------------------------------------------------------------------- +| Load The Application +|-------------------------------------------------------------------------- +| +| Here we will load this Illuminate application. We will keep this in a +| separate location so we can isolate the creation of an application +| from the actual running of the application with a given request. +| +*/ + +$framework = $app['path.base']. + '/vendor/laravel/framework/src'; + +require $framework.'/Illuminate/Foundation/start.php'; + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/classes/Action.php b/classes/Action.php deleted file mode 100755 index d877a38..0000000 --- a/classes/Action.php +++ /dev/null @@ -1,428 +0,0 @@ -PDO) { - if ($params['dom'] instanceof DOMElement) { - $this->dom = $params['dom']; - } - else { - throw new Exception('No valid DOM Element provided to the Action Object'); - } - $this->number = $params['id']; - $this->url = ''; - $this->questions_id = $this->getParentInfo('getId'); - } - else { - $this->dom = $this->unserialise($this->dom); - } - } - - protected function saveData() { - $this->saveMainData(); - if (!empty($this->additional_data)) { - $this->saveAdditionalData(); - } - } - - public function saveMainData() { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['items']); - unset($array['children']); - unset($array['additional_data']); - $array['dom'] = $this->serialise($this->dom); - $id = $this->Factory->SaveObject('actions', $array, array('id', 'questions_id')); - if ($id != 0) { - $this->id = $id; - } - else { - $this->id = $this->Factory->getVar('SELECT id FROM actions WHERE questions_id = ? and number = ?', array($this->questions_id, $this->number)); - if ($this->id == 0) echo 'blah!'; - } - } - - protected function saveAdditionalData() { - if (empty($this->id)) { - $this->show(); - return; - } - - - switch($this->type) { - - /* speaker saving */ - case 'speech': - if (isset($this->additional_data['speaker'])) { - $data = array('members_id' => $this->additional_data['speaker'], 'actions_id' => $this->getId()); - $this->Factory->saveObject('speakers', $data, array('actions_id')); - } - break; - - /* registration data saving */ - case 'registration': - $data = array(); - foreach ($this->additional_data['participation'] as $members_id => $presence) { - $data[] = array('actions_id' => $this->getId(), 'members_id' => $members_id, 'presence' => $presence); - } - if (!empty($data)) { - $this->Factory->saveObjects('registrations', $data, array('members_id', 'id', 'actions_id')); - } - break; - /* voting data saving */ - case 'voting': - $data = array(); - foreach ($this->additional_data['voting'] as $vote) { - $data[] = array( - 'actions_id' => $this->getId(), - 'members_id' => $vote['id'], - 'fraction' => $vote['fraction'], - 'vote' => $vote['vote']); - } - if (!empty($data)) { - $this->Factory->saveObjects('votes', $data, array('members_id', 'id', 'actions_id')); - } - break; - } - } - - protected function populateData() { - if ($this->PDO) { - $this->populateAdditionalData(); - if (!in_array($this->type, array('voting', 'registration'))) { - //everything should be here, only load and save additional data - return true; - } - elseif (empty($this->additional_data)) { - echo 'here!'; - //no data present for registrations and voting - initial DB run - return false; - } - else { - //all data loaded - we are good to go - return true; - } - } - else { - //not loaded via DB - need to parse additional data - return false; - } - } - - protected function populateAdditionalData() { - - switch($this->type) { - - /* populate speaker data */ - case 'speech': - $speakers = $this->Factory->getArray(self::$speaker_sql, array($this->getId())); - if (is_array($speakers)) { - foreach ($speakers as $speaker) { - $this->additional_data['speaker'] = $speaker['members_id']; - } - } - break; - - /* populate registration data */ - case 'registration': - $registrations = $this->Factory->getArray(self::$registrations_sql, array($this->getId())); - if (is_array($registrations)) { - $this->additional_data['participation'] = array(); - foreach ($registrations as $registered) { - $this->additional_data['participation'][$registered['members_id']] = $registered['presence']; - } - } - break; - - /* populate voting data */ - case 'voting': - $votes = $this->Factory->getArray(self::$votes_sql, array($this->getId())); - if (is_array($votes)) { - $this->additional_data['votes'] = array(); - foreach ($votes as $vote) { - $array = array('id' => $vote['members_id'], 'fraction' => $vote['fraction'], 'vote' => $vote['vote']); - $this->additional_data['votes'][$array['id']] = $array; - } - } - break; - } - } - - public function initialiseChildren($recursive = false) { - return; - } - - protected function scrapeData($reload = FALSE) { - - /* parse additional urls */ - if (!empty($this->url)) { - $function = "get" . ucfirst($this->type) . 'Data'; - $this->$function(); - } - } - - public function parseData() { - $tds = $this->dom->getElementsByTagName('td'); - if ($tds->length != 2) { - log_f('parsing error: Action table td count', $this->getId()); - } - else { - /* Set start time */ - $this->start_time = $this->clean($tds->item(0)->nodeValue); - - /* set end time */ - try { - $this->end_time = $this->getSiblingInfoByPosition($this->number, +1, 'getStartTime'); - } - catch(Exception $e) { - $this->end_time = $this->start_time; - } - - /* determine action type & additional data */ - - $this->title = $this->decode($tds->item(1)->nodeValue); - - if (stripos($this->title, 'Kalbėjo') !== false) { //action type - speech - $this->type = 'speech'; - $this->additional_data['speaker'] = $this->getMemberId($tds->item(1)); - } - - elseif (stripos($this->title, 'bendru sutarimu') !== false) { //action type - voting (together) - $this->type = 'u_voting'; - if (stripos($this->title, 'pritarta') !== false) { - $this->outcome = 'accepted'; - } - else { - $this->outcome = 'rejected'; - } - } - - elseif (stripos($this->title, 'Įvyko registracija') !== false) { //action type - registration - $this->type = 'registration'; - $matches = array(); - preg_match('/užsiregistravo.\s*(\d+)/u', $this->title, $matches); - if (isset($matches[1])) { - $this->total_participants = $matches[1]; - } - - $reg_link = $tds->item(1)->getElementsByTagName('a')->item(0); - if (!is_object($reg_link)) { - log_f('parsing error: question - registration link', $this->getId()); - } - else { - $link = self::BASE_URL . $reg_link->getAttribute('href'); - $this->url = $link; - } - } - elseif (stripos($this->title, 'Įvyko balsavimas') !== false) { //action type voting - $this->type = 'voting'; - - /* general outcome of voting */ - if (stripos($this->title, 'pritarta') !== false) { - $this->outcome = 'accepted'; - } - else { - $this->outcome = 'rejected'; - } - - /* individual outcome of voting */ - $voting_link = $tds->item(1)->getElementsByTagName('a')->item(0); - if (!is_object($voting_link)) { - log_f('parsing error: question - voting link', $this->getId()); - } - else { - $link = self::BASE_URL . $voting_link->getAttribute('href'); - $this->url = $link; - } - } - } - } - - protected function getRegistrationData() { - $reg_dom = $this->getHTMLDOM($this->url); - $xpath = new DOMXPath($reg_dom); - $members = $xpath->query("//table[contains(@cellpadding, '1')]//table[contains(@width, '100%')]/tr"); - $this->additional_data['participation'] = array(); - foreach ($members as $member_data) { - - $tds = $member_data->getElementsByTagName('td'); - if ($tds->length != 2) { - log_f('parsing error: action lankomumo lentele - participation . ', $this->getId()); - } - else { - $member_id = $this->getMemberId($tds->item(1)); - if ($this->clean($tds->item(0)->nodeValue) == '') $participation = 0; - else $participation = 1; - $this->additional_data['participation'][$member_id] = $participation; - } - } - unset($reg_dom); - } - - protected function getVotingData() { - $voting_dom = $this->getHTMLDOM($this->url); - - //get voting topic - $inner_html = $this->decode(DOMinnerHTML($voting_dom->getElementsByTagName('body')->item(0))); - preg_match("/Formuluot.+?\s+(.*?)<\/b>/msu", $inner_html, $matches); - if (isset($matches[1])) { - $this->voting_topic = $matches[1]; - } - - //get voting data - $this->additional_data['voting'] = array(); - $xpath = new DOMXPath($voting_dom); - $voting_dom = $xpath->query("//table[contains(@class, 'basic')]/tr[td]"); - foreach ($voting_dom as $member_data) { - $member = array(); - $td2 = ''; - $td3 = ''; - $td4 = ''; - $tds = $member_data->getElementsByTagName('td'); - if ($tds->length != 5) { - log_f('parsing error: voting data', $this->getId()); - } - else { - $member['id'] = $this->getMemberId($tds->item(0)); - $member['fraction'] = $this->clean($tds->item(1)->nodeValue); - $member['vote'] = ''; - $td2 = $this->clean($tds->item(2)->nodeValue); - $td3 = $this->clean($tds->item(3)->nodeValue); - $td4 = $this->clean($tds->item(4)->nodeValue); - if (!empty($td2)) { - $member['vote'] = 'accept'; - } - elseif (!empty($td3)) { - $member['vote'] = 'reject'; - } - elseif (!empty($td4)) { - $member['vote'] = 'abstain'; - } - else { - $member['vote'] = 'not present'; - } - $this->additional_data['voting'][$member['id']] = $member; - } - } - unset($xpath); - } - - public function getEndTime() { - if (empty($this->end_time)){ - $this->parseData(); - } - if ($this->end_time == $this->start_time) { - $this->end_time = date('H:i:s', strtotime($this->end_time) + 60); - /* - It is possible to obtain the end time from next question, but there's an issue of breaks (not seen in statistics). - Thus, for now we just assume that the last action took 60 seconds. - try { - $end = $this->parent->getSiblingInfoByPosition($this->parent->getId(), 1, 'getStartTime'); - $end_date = substr($end, 0, 10); - if (strtotime($end) > strtotime($end_date . ' ' . $this->end_time)) $this->end_time = date('H:i:s', strtotime($end)); - else $this->end_time = date('H:i:s', strtotime($this->end_time) + 60); - } - catch(Exception $e) { $this->end_time = date('H:i:s', strtotime($this->end_time) + 60); } - */ - } - return $this->end_time; - } - - public function getStartTime() { - if (empty($this->start_time)){ - $this->parseData(); - } - return $this->start_time; - } - - public function getType() { - return $this->type; - } - - public function getNumber() { - return $this->number; - } - - public function getTitle() { - return $this->title; - } - - public function getParticipation() { - if (isset($this->additional_data['participation'])) { - return $this->additional_data['participation']; - } - else { - return false; - } - } - - public function getVoting($type = 'present') { - switch($type) { - case 'accepted': return $this->Factory->getVar('SELECT count(id) FROM votes WHERE actions_id = ? AND vote = ?', array($this->getId(), 'accept')); - case 'rejected': return $this->Factory->getVar('SELECT count(id) FROM votes WHERE actions_id = ? AND vote = ?', array($this->getId(), 'reject')); - case 'abstain': return $this->Factory->getVar('SELECT count(id) FROM votes WHERE actions_id = ? AND vote = ?', array($this->getId(), 'abstain')); - case 'not present': return $this->Factory->getVar('SELECT count(id) FROM votes WHERE actions_id = ? AND vote = ?', array($this->getId(), 'not presen')); - case 'present': return $this->Factory->getVar('SELECT count(id) FROM votes WHERE actions_id = ? AND vote != ?', array($this->getId(), 'not presen')); - } - } - - public function getVotingTopic() { - return $this->voting_topic; - } - - public function getVotingOutcome() { - return $this->outcome; - } - - protected function serialise(DOMElement $dom) { - $newDom = new DOMDocument('1.0', 'UTF-8'); - $root = $newDom->createElement('root'); - $root = $newDom->appendChild($root); - $domNode = $newDom->importNode($dom, true); - $root->appendChild($domNode); - return $newDom->saveXML($root); - } - - protected function unserialise($dom) { - $newDom = new DOMDocument('1.0', 'UTF-8'); - $newDom->loadXML($dom); - return $newDom->getElementsByTagName('tr')->item(0); - } - -} - -?> diff --git a/classes/DB.php b/classes/DB.php deleted file mode 100755 index ea14e85..0000000 --- a/classes/DB.php +++ /dev/null @@ -1,139 +0,0 @@ -setFetchMode(PDO::FETCH_CLASS, $class_name, $construct_params); - $q->execute($exec_params) or $this->throwError($q); - $this->logQuery(func_get_args(), $start_time, microtime(true)); - return $q->fetch(PDO::FETCH_CLASS); - } - - public function createObjects($sql_to_prepare, $exec_params, $class_name, $construct_params = array()) { - $start_time = microtime(true); - $q = parent::prepare($sql_to_prepare); - $q->setFetchMode(PDO::FETCH_CLASS, $class_name, $construct_params); - $q->execute($exec_params) or $this->throwError($q); - $array = array(); - while ($object = $q->fetch(PDO::FETCH_CLASS)) { - $array[$object->getId()] = clone $object; - } - $this->logQuery(func_get_args(), $start_time, microtime(true)); - return $array; - } - - - public function getArray($sql_to_prepare, $exec_params) { - $start_time = microtime(true); - $q = parent::prepare($sql_to_prepare); - $q->execute($exec_params) or $this->throwError($q); - $this->logQuery(func_get_args(), $start_time, microtime(true)); - return $q->fetchAll(PDO::FETCH_ASSOC); - } - - public function getVar($sql_to_prepare, $exec_params) { - $start_time = microtime(true); - $q = parent::prepare($sql_to_prepare); - $q->execute($exec_params) or $this->throwError($q); - //$q->debugDumpParams(); - $this->logQuery(func_get_args(), $start_time, microtime(true)); - $a = $q->fetch(); - return $a[0]; - } - - protected function prepareInsert($table, $keys, $excluded_keys) { - $update_fields = ''; - if (false !== $excluded_keys) { - list($keys, $placeholders, $update_fields) = $this->getPlaceholders($keys, $excluded_keys); - } - else { - list($keys, $placeholders) = $this->getPlaceholders($keys, $excluded_keys); - } - if (empty($update_fields)) $on_duplicate = ''; - else $on_duplicate = 'ON DUPLICATE KEY UPDATE ' . $update_fields; - $sql = "INSERT INTO `$table` $keys VALUES $placeholders $on_duplicate"; - //print_f($sql); - $q = parent::prepare($sql); - return $q; - } - - public function insertOne($table, $data, $excluded_keys = false) { - $start_time = microtime(true); - $q = $this->prepareInsert($table, array_keys($data), $excluded_keys); - foreach ($data as $key => $value) { - $q->bindValue(':' . $key, $value); - } - $q->execute() or $this->throwError($q); - $this->logQuery(func_get_args(), $start_time, microtime(true)); - return $this->lastInsertId(); - } - - public function insertMany($table, $data, $excluded_keys = false) { - - if (!isset($data[0])) throw new Exception('empty data set provided!'); - - $start_time = microtime(true); - $q = $this->prepareInsert($table, array_keys($data[0]), $excluded_keys); - foreach ($data as $row) { - foreach ($row as $key => $value) { - $q->bindValue(':' . $key, $value); - } - $q->execute() or $this->throwError($q); - } - $this->logQuery(func_get_args(), $start_time, microtime(true)); - } - - protected function throwError($handler) { - $error = $handler->errorInfo(); - throw new Exception($error[2]); - return true; - } - - protected function getPlaceholders($keys, $excluded_keys) { - $key_brackets = '(`' . implode('`, `', $keys) . '`)'; - $pl_brackets = '(:' . implode(', :', $keys) . ')'; - if (false === $excluded_keys) { - return array($key_brackets, $pl_brackets); - } - else { - $update_fields = array(); - foreach ($keys as $key) { - if (!in_array($key, $excluded_keys)) { - $update_fields[] = "`$key` = VALUES(`$key`)"; - } - } - $update_fields = implode(', ', $update_fields); - return array($key_brackets, $pl_brackets, $update_fields); - } - } - - protected function logQuery($args, $start_time, $end_time) { - $this->queries[] = array('length' => round(($end_time - $start_time) * 1000, 3) ,'args' => $args[0]); - } - - public function showQueries() { - print_f($this->queries); - } - - public function exec($sql) { - $a = parent::exec($sql); - if (false === $a) { - print_f($this->errorInfo()); - } - } -} -?> diff --git a/classes/Factory.php b/classes/Factory.php deleted file mode 100755 index c100307..0000000 --- a/classes/Factory.php +++ /dev/null @@ -1,123 +0,0 @@ - 'Session', 'sitting' => 'Sitting', 'question' => 'Question', 'action' => 'Action'); - private $allowed_types; - protected $DB = NULL; - - private function __construct($sql_params, $allowed_types) { - - /* populate known Object Types */ - $this->allowed_types = $allowed_types; - - /* initiate DB connection */ - try { - list($dsn, $username, $password, $driver_options) = $sql_params; - $this->DB = new DB($dsn, $username, $password, $driver_options); - } - catch (PDOException $e) { - $this->DB = false; - trigger_error('Connection to DB failed with ' . $e->getMessage(), E_USER_WARNING); - } - } - - static public function getInstance($sql_params, $allowed_types = array()) { - if (empty($allowed_types)) $allowed_types = self::$default_allowed_types; - if (empty(self::$instance)) { - self::$instance = new Factory($sql_params, $allowed_types); - } - return self::$instance; - } - - public function getObject($type, $url = NULL, $id = NULL, Seimas $parent = NULL, $parameters = array()) { - if (isset($this->allowed_types[$type])) { - $class_name = $this->allowed_types[$type]; - - /* if url provided - initiate object without DB */ - if (false !== filter_var($url, FILTER_VALIDATE_URL)) { - return new $class_name($url, $parent, $parameters, $this); - } - elseif (!empty($id)) { - $class = new ReflectionClass($class_name); - $sql = $class->getStaticPropertyValue('create_sql'); - $Object = $this->DB->createObject($sql, array($id), $class_name, array('', $parent, $parameters, $this)); - if ($Object instanceof Seimas) return $Object; - else throw new Exception ('Object with the id provided was not found!'); - } - else { - throw new Exception('No object identifier (url / id) provided'); - } - } - else { - throw new Exception('unknown object type to be initiated'); - } - } - - public function getObjectChildren($class, $child_type, $id, $parent, $parameters = array()) { - //get urls and IDs of all children - $class_name = $this->allowed_types[$child_type]; - try { - $class = new ReflectionClass($class); - $sql = $class->getStaticPropertyValue('children_sql'); - $array = $this->DB->CreateObjects($sql, array($id), $class_name, array('', $parent, $parameters, $this)); - return $array; - } - catch (Exception $e) { - echo $e->getMessage(); - } - } - - public function saveObject($table, $data, $excluded_keys = false) { - - /* try saving 1 object */ - try { - return $this->DB->insertOne($table, $data, $excluded_keys); - } - catch (Exception $e) { - echo $e->getMessage() . '
'; - } - } - - public function saveObjects($table, $data, $excluded_keys = false) { - /* try saving many objects */ - try { - $this->DB->insertMany($table, $data, $excluded_keys); - } - catch (Exception $e) { - echo $e->getMessage(); - } - } - - public function getArray($sql, $exec_params) { - try { - return $this->DB->getArray($sql, $exec_params); - } - catch (Exception $e) { - echo $e->getMessage(); - echo $sql; - } - } - - public function getVar($sql, $exec_params) { - try { - return $this->DB->getVar($sql, $exec_params); - } - catch (Exception $e) { - echo $e->getMessage(); - } - } - - public function showQueries() { - $this->DB->showQueries(); - } - -} - -?> \ No newline at end of file diff --git a/classes/Klausimas_.php b/classes/Klausimas_.php deleted file mode 100755 index 9739ce0..0000000 --- a/classes/Klausimas_.php +++ /dev/null @@ -1,390 +0,0 @@ -PDO) { //if object created not via DB - $this->start_time = $params['start_time']; - $this->title = $this->decode($this->clean($params['title'])); - $this->number = $params['number']; - $this->sittings_id = $this->getParentInfo('getId'); - } - $this->date = date('Y-m-d', strtotime($this->start_time)); - } - - protected function populateData() { - if ($this->PDO) { - //loaded via DB - if (empty($this->end_time)) { - //initial run - let's scrape additional data - return false; - } - else { - //all data loaded, only populate children / etc - $this->PopulateChildren(); - $this->PopulateItems(); - return true; - } - } - else { - //not loaded via DB - scrape all data - return false; - } - } - - protected function populateItems() { - $items = $this->Factory->getArray(self::$items_sql, array($this->getId())); - foreach ($items as $item) { - $presenters = $this->Factory->getArray(self::$presenters_sql, array($item['id'])); - if (false != $presenters) { - $item['presenters'] = $presenters; - } - else { - $item['presenters'] = array(); - } - $this->items[$item['number']] = $item; - } - } - - protected function saveData() { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['items']); - unset($array['children']); - unset($array['date']); - - $this->Factory->SaveObject('questions', $array, array('id')); - $this->saveItems(); - $this->saveChildren(); - } - - protected function saveItems() { - foreach ($this->items as $number => $item) { - $presenters = $item['presenters']; - unset($item['presenters']); - $item['questions_id'] = $this->getId(); - $item['number'] = $number; - $item_id = 0; - $item_id = $this->Factory->saveObject('items', $item, array('id', 'questions_id')); - if (0 == $item_id) { - if (isset($item['id'])) { //some random anomaly of some items being here twice... - $item_id = $item['id']; // if DB returns 0, the item was in DB before, thus ID attrib. should be present in array - } - } - /* save presenters data */ - if (0 != $item_id ) { - foreach ($presenters as $number => $presenter) { - $this->Factory->saveObject('presenters', array('presenter' => $presenter, 'items_id' => $item_id, 'number' => $number), array('id', 'items_id')); - } - } - } - } - - protected function saveChildren() { - - } - - protected function scrapeData() { - $dom = $this->getHTMLDOM($this->url); - $this->getItems($dom); - echo 'here!'; - $this->getActions($dom); - } - - protected function getItems(DOMDocument $dom) { - $xpath = new DOMXPath($dom); - $questions_dom = $xpath->query("//li[preceding::h4 and following::h4]"); - if ($questions_dom->length > 0) { //if more than one inner question - $i = 0; - foreach ($questions_dom as $question_dom) { - //get data for each inner question - $this->items[$i++] = $this->getItemMetaData($question_dom); - } - } - else { - $questions_dom = $xpath->query("//node()[preceding::h4 and following::h4]"); - if ($questions_dom->length > 0) { //if one question only, need to create a new DOMElement (shame on you, XPATH!) - $newDom = new DOMDocument('1.0', 'UTF-8'); - $root = $newDom->createElement('root'); - $root = $newDom->appendChild($root); - $prev = ''; - foreach ($questions_dom as $question_dom) { - if ($question_dom->nodeValue != $prev) { - $domNode = $newDom->importNode($question_dom, true); - $root->appendChild($domNode); - } - $prev = $question_dom->nodeValue; - } - $this->items[0] = $this->getItemMetaData($root); - } - else - log_f('klausimo lentele: metadata not found', $this->getId()); - } - unset($xpath); - } - - protected function getItemMetaData(DOMElement $dom) { - - $data = array(); - - //find document links - $links = $dom->getElementsByTagName('a'); - foreach ($links as $link) { - $db_field = $this->getLinkType($this->decode(str_replace(array(chr(160), chr(194)), ' ', $link->nodeValue))); - $data[$db_field] = $link->getAttribute('href'); - } - - //find title of question - $title = $dom->getElementsByTagName('b')->item(0); - if (is_object($title)) - $data['title'] = $this->decode($title->nodeValue); - - //find speakers - $decoded = $this->decode(DOMinnerHTML($dom)); - $data['presenters'] = array(); - $pos = stripos($decoded, 'Pranešėja'); - if ($pos !== false) { - preg_match_all('/(.*?)<\/b>/u', substr($decoded, $pos + 9), $matches, PREG_SET_ORDER); - foreach ($matches as $match) { - if (isset($match[1])) - $data['presenters'][] = $match[1]; - } - } - return $data; - } - - protected function getLinkType($lithuanian_string) { - switch($lithuanian_string) { - case 'dokumento tekstas': return 'document_url'; - case 'susiję dokumentai': return 'related_doc_url'; - default: return 'other_url'; - } - } - - protected function getActions($dom) { - - $xpath = new DOMXPath($dom); - $actions_dom = $xpath->query("//table[contains(@class, 'basic')]/tr[td]"); - $i = 0; - foreach ($actions_dom as $action_dom) { - /* Action parsing */ - $tds = $action_dom->getElementsByTagName('td'); - if ($tds->length != 2) - log_f('parsing error: Action table td count', $this->getId()); - else { - $this->children[$i]['start_time'] = $this->clean($tds->item(0)->nodeValue); - list($type, $meta) = $this->parseAction($tds->item(1)); - $this->children[$i]['type'] = $type; - $this->children[$i]['meta'] = $meta; - if ($i !== 0) { - $this->children[$i - 1]['end_time'] = $this->children[$i]['start_time']; - } - else { - $this->start_time = $this->date . ' ' . $this->children[$i]['start_time']; - } - $i++; - } - /* Action parsing end */ - } - if ($i > 0) { - /* If at least 1 action - set last action start time = end time & question end_time = action end time */ - $this->children[$i - 1]['end_time'] = $this->children[$i - 1]['start_time']; - $this->end_time = $this->date . ' ' . $this->children[$i - 1]['end_time']; - } - else { - /* if no actions - set end time as the start time of the next question */ - $this->end_time = $this->getSiblingInfoByPosition($this->getId(), +1, 'getStartTime'); - } - unset($xpath); - } - - protected function parseAction(DOMElement $element) { - $meta = array(); - $type = 'other'; - //action type - speech - if (strpos($element->nodeValue, 'Kalbėjo') !== false) { - $type = 'speech'; - $meta['speaker'] = $this->getMemberId($element); - } - //action type - voting (together) - elseif (strpos($element->nodeValue, 'bendru sutarimu') !== false) { - $type = 'u_voting'; - $meta['text'] = $this->decode($element->nodeValue); - if (strpos($element->nodeValue, 'pritarta') !== false) { - $meta['outcome'] = 'accepted'; - } - else { - $meta['outcome'] = 'rejected'; - } - } - //action type - registration - elseif (stripos($element->nodeValue, 'Įvyko registracija') !== false) { - $type = 'registration'; - $matches = array(); - $total_participants = preg_match('/užsiregistravo.*?(\d+)/u', $element->nodeValue, $matches); - if (isset($matches[1])) - $meta['total_participants'] = $matches[1]; - - $reg_link = $element->getElementsByTagName('a')->item(0); - if (!is_object($reg_link)) - log_f('parsing error: question - registration link', $this->getId()); - else { - $link = self::BASE_URL . $reg_link->getAttribute('href'); - $meta['link'] = $link; - $query = parse_url($link, PHP_URL_QUERY); - $variables = array(); - parse_str($query, $variables); - if (isset($variables['p_reg_id'])) - $meta['id'] = -$variables['p_reg_id']; - $meta['participation'] = $this->getRegistrationData($link); - } - } - //action type voting - elseif (stripos($element->nodeValue, 'Įvyko balsavimas') !== false) { - $type = 'voting'; - /* general outcome of voting */ - if (strpos($element->nodeValue, 'pritarta') !== false) { - $meta['outcome'] = 'accepted'; - } - else { - $meta['outcome'] = 'rejected'; - } - /* individual outcome of voting */ - $voting_link = $element->getElementsByTagName('a')->item(0); - if (!is_object($voting_link)) - log_f('parsing error: question - voting link', $this->getId()); - else { - $link = self::BASE_URL . $voting_link->getAttribute('href'); - $meta['link'] = $link; - $query = parse_url($link, PHP_URL_QUERY); - $variables = array(); - parse_str($query, $variables); - if (isset($variables['p_bals_id'])) - $meta['id'] = -$variables['p_bals_id']; - list($meta['voting_topic'], $meta['individual_voting']) = $this->getVotingData($link); - } - } - else { - $meta['text'] = $element->nodeValue; - } - - return array($type, $meta); - } - - protected function getRegistrationData($url) { - $lankomumas_dom = $this->getHTMLDOM($url); - $xpath = new DOMXPath($lankomumas_dom); - $nariai = array(); - $nariai_dom = $xpath->query("//table[contains(@cellpadding, '1')]//table[contains(@width, '100%')]/tr"); - //echo $nariai_dom->length; - foreach ($nariai_dom as $nario_data) { - - $tds = $nario_data->getElementsByTagName('td'); - $participation = false; - $person_id = false; - - $state = $tds->item(0); - if (is_object($state)) { - $value = $this->clean($state->nodeValue); - if (empty($value)) - $participation = 0; - else - $participation = 1; - } - else - log_f('parsing error: action lankomumo lentele - participation . ', $this->getId()); - - $person_id = $this->getMemberId($tds->item(1)); - - if (($participation !== false) && ($person_id !== false)) { - $nariai[$person_id] = $participation; - } - } - unset($lankomumas_dom); - return $nariai; - } - - protected function getVotingData($url) { - $lankomumas_dom = $this->getHTMLDOM($url); - $nariai = array(); - $formuluote = ''; - - //get formuluote - $inner_html = $this->decode(DOMinnerHTML($lankomumas_dom->getElementsByTagName('body')->item(0))); - preg_match("/Formuluot.+?\s+(.*?)<\/b>/msu", $inner_html , $matches); - if (isset($matches[1])) $formuluote = $matches[1]; - - //get voting data - $xpath = new DOMXPath($lankomumas_dom); - $voting_dom = $xpath->query("//table[contains(@class, 'basic')]/tr[td]"); - foreach ($voting_dom as $member) { - $narys = array(); - $td2 = ''; - $td3 = ''; - $td4 = ''; - $tds = $member->getElementsByTagName('td'); - if ($tds->length != 5) log_f('parsing error: voting data', $this->getId ()); - else { - $narys['id'] = $this->getMemberId($tds->item(0)); - $narys['frakcija'] = $this->clean($tds->item(1)->nodeValue); - $td2 = $this->clean($tds->item(2)->nodeValue); - $td3 = $this->clean($tds->item(3)->nodeValue); - $td4 = $this->clean($tds->item(4)->nodeValue); - if (!empty($td2)) $narys['vote'] = 'accept'; - elseif (!empty($td3)) $narys['vote'] = 'reject'; - elseif (!empty($td4)) $narys['vote'] = 'abstain'; - else $narys['vote'] = 'missing'; - $nariai[$narys['id']] = $narys; - } - } - unset($xpath); - return array($formuluote, $nariai); - } - - public function getStartTime() { - return $this->start_time; - } - - public function getEndTime() { - if (empty($this->end_time)) { - $this->initialise(); - } - return $this->end_time; - } -} - -?> diff --git a/classes/Posedis.php b/classes/Posedis.php deleted file mode 100755 index 77f65eb..0000000 --- a/classes/Posedis.php +++ /dev/null @@ -1,208 +0,0 @@ -PDO) { - //loaded via DB - if (empty($this->number) || ($this->end_time == '0000-00-00 00:00:00')) { - //initial run - let's scrape additional data - return false; - } - else { - //all data from DB present - let's only add children, participation & date - $this->populateChildren(); - $this->populateParticipation(); - $this->date = date('Y-m-d', strtotime($this->end_time)); - return true; - } - } - else { - $this->sessions_id = $this->getParentInfo('getId'); - return false; //not loaded via DB - scrape everything - } - } - - protected function populateParticipation() { - $participation = $this->Factory->getArray(self::$participation_sql, array($this->getId())); - foreach ($participation as $pair) { - $this->participation[$pair['members_id']] = $pair['presence']; - } - } - - protected function saveData() { - //added check if the data is correct (e.g. end-time = 0000-00-00 00:00:00 - if ($this->end_time == '0000-00-00 00:00:00') { - $this->clearCache($this->transcript_url); - $this->clearCache($this->recording_url); - $this->clearCache($this->protocol_url); - $this->clearCache($this->participation_url); - $this->clearCache($this->url); - return; - } - else { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['date']); - - /* parse children data */ - $children_array = array(); - foreach ($array['children'] as $child) { - $children_array[] = array('id' => $child->getId(), 'url' => $child->getUrl(), 'sittings_id' => $this->getId()); - } - unset($array['children']); - - /* parse parcitipation data */ - $participation_array = array(); - foreach ($array['participation'] as $member_id => $presence) { - $participation_array[] = array('members_id' => $member_id, 'presence' => $presence, 'sittings_id' => $this->getId()); - } - unset($array['participation']); - $this->Factory->SaveObject('sittings', $array, array('id')); - $this->Factory->SaveObjects('questions', $children_array, array('sittings_id', 'id')); - - $this->Factory->SaveObjects('sitting_participation', $participation_array, array()); - } - } - - protected function scrapeData($reload = FALSE) { - $dom = $this->getHTMLDOM($this->url, $reload); - $this->getMetaData($dom); - $this->extractParticipation($dom); - $this->extractQuestions($dom); - } - - protected function getMetaData($dom) { - - /* title parsing */ - $title = $dom->getElementsByTagName('title')->item(0)->nodeValue; - $matches = array(); - preg_match("/Seimo posėdis\s+Nr\.(\d+)\s+\((\d{4}-\d{2}-\d{2}), (.+)\)/u", $title, $matches); - if (count($matches) < 4) { - throw new Exception('Something wrong with Sitting parsing @' . $this->url); - } - $this->number = trim($matches[1]); - $this->date = trim($matches[2]); - $this->type = trim($matches[3]); - - /* finding links to content */ - $xpath = new DOMXPath($dom); - $a_dom = $xpath->query("//a[.='Protokolas']")->item(0); - if (is_object($a_dom)) $this->protocol_url = $a_dom->getAttribute('href'); - $a_dom = $xpath->query("//a[.='Stenograma']")->item(0); - if (is_object($a_dom)) $this->transcript_url = $a_dom->getAttribute('href'); - $a_dom = $xpath->query("//a[.='Garso įrašas']")->item(0); - if (is_object($a_dom)) $this->recording_url = $a_dom->getAttribute('href'); - unset($xpath); - - } - - protected function extractParticipation($dom) { - $xpath = new DOMXPath($dom); - $a_dom = $xpath->query("//a[.='Lankomumas']")->item(0); - if (is_object($a_dom)) $this->participation_url = self::BASE_URL . $a_dom->getAttribute('href'); - unset($xpath); - if (!empty($this->participation_url)) { - $lankomumas_dom = $this->getHTMLDOM($this->participation_url); - $xpath = new DOMXPath($lankomumas_dom); - $nariai_dom = $xpath->query("//table[contains(@cellpadding, '1')]//table[contains(@width, '100%')]/tr"); - foreach ($nariai_dom as $nario_data) { - - $tds = $nario_data->getElementsByTagName('td'); - $participation = false; - $person_id = false; - - $state = $tds->item(0); - if (is_object($state)) { - $value = $this->clean($state->nodeValue); - if (empty($value)) $participation = 0; - else $participation = 1; - } - else log_f('parsing error: lankomumo lentele - participation . ', $this->getId ()); - $person_id = $this->getMemberId($tds->item(1)); - - if (($participation !== false) && ($person_id !== false)) { - $this->participation[$person_id] = $participation; - } - } - unset($lankomumas_dom); - } - } - - protected function extractQuestions($dom) { - $xpath = new DOMXPath($dom); - $table_dom = $xpath->query("//table[contains(@class,'basic')]/tr[td]"); - $i = 0; - $klausimas = false; - foreach ($table_dom as $row) { - $data = array(); - $url = ''; - $klausimas = false; - $tds = $row->getElementsbyTagName('td'); - if ($tds->length < 3) log_f('parsing error: darbotvarkes lentele', $this->getId()); - else { - $data['start_time'] = $this->getDate() . ' ' . $this->clean($tds->item(0)->nodeValue); - //$data['number'] = $this->clean($tds->item(1)->nodeValue); replaced with actual number in the list - $data['number'] = $i; - $data['title'] = $this->clean($tds->item(2)->nodeValue); - $link_dom = $tds->item(2)->getElementsByTagName('a'); - if (is_object($link_dom->item(0))) { - $url = self::BASE_URL . $link_dom->item(0)->getAttribute('href'); - } - else log_f('parsing error: darbotvarkes lentele - klausimas a', $this->getId()); - - if (!empty($url)) { - $klausimas = $this->Factory->getObject(self::$child_class, $url, '', $this, $data); - $this->children[$klausimas->getId()] = $klausimas; - if ($i++ == 0) $this->start_time = $this->date . ' ' .$klausimas->getStartTime(); - } - } - } - if (is_object($klausimas)) $this->end_time = $klausimas->getEndTime(); - unset($xpath); - unset($table_dom); - } - - public function getDate() { - return $this->date; - } - - public function getParticipation() { - return $this->participation; - } -} - -?> diff --git a/classes/Question.php b/classes/Question.php deleted file mode 100755 index 1585af9..0000000 --- a/classes/Question.php +++ /dev/null @@ -1,263 +0,0 @@ -PDO) { //if object created not via DB - $this->start_time = $params['start_time']; - $this->title = $this->decode($this->clean($params['title'])); - $this->number = $params['number']; - $this->sittings_id = $this->getParentInfo('getId'); - } - $this->date = date('Y-m-d', strtotime($this->start_time)); - } - - protected function populateData() { - if ($this->PDO) { - //loaded via DB - if (empty($this->end_time)) { - //initial run - let's scrape additional data - return false; - } - else { - //all data loaded, only populate children / etc - $this->PopulateChildren(); - $this->PopulateItems(); - return true; - } - } - else { - //not loaded via DB - scrape all data - return false; - } - } - - //modified implementation of abstractions.php - public function populateChildren($initialiseSearch = false) { - $class = get_class($this); - $class_ = new ReflectionClass($class); - $token = $class_->getStaticPropertyValue('child_class'); - $children = $this->Factory->getObjectChildren($class, $token, $this->getId(), $this); - foreach ($children as $child) { - $this->children[$child->getNumber()] = $child; - } - if (empty($this->children) && ($initialiseSearch)) { - $this->scrapeData(); - $this->saveData(); - } - } - - protected function populateItems() { - $class = get_class($this); - $class_ = new ReflectionClass($class); - $items_sql = $class_->getStaticPropertyValue('items_sql'); - $presenters_sql = $class_->getStaticPropertyValue('presenters_sql'); - $items = $this->Factory->getArray($items_sql, array($this->getId())); - foreach ($items as $item) { - $presenters = $this->Factory->getArray($presenters_sql, array($item['id'])); - if (false != $presenters) { - $item['presenters'] = $presenters; - } - else { - $item['presenters'] = array(); - } - $this->items[$item['number']] = $item; - } - } - - protected function saveData() { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['items']); - unset($array['children']); - unset($array['date']); - - $this->Factory->SaveObject('questions', $array, array('id')); - $this->saveItems(); - - foreach ($this->children as $child) { - $child->saveMainData(); - } - } - - protected function saveItems() { - foreach ($this->items as $number => $item) { - $presenters = $item['presenters']; - unset($item['presenters']); - $item['questions_id'] = $this->getId(); - $item['number'] = $number; - $item_id = 0; - $item_id = $this->Factory->saveObject('items', $item, array('id', 'questions_id')); - if (0 == $item_id) { - if (isset($item['id'])) { //some random anomaly of some items being here twice... - $item_id = $item['id']; // if DB returns 0, the item was in DB before, thus ID attrib. should be present in array - } - } - /* save presenters data */ - if (0 != $item_id ) { - foreach ($presenters as $number => $presenter) { - $this->Factory->saveObject('presenters', array('presenter' => $presenter, 'items_id' => $item_id, 'number' => $number), array('id', 'items_id')); - } - } - } - } - - protected function scrapeData($reload = FALSE) { - $dom = $this->getHTMLDOM($this->url, $reload); - $this->getItems($dom); - $this->getActions($dom); - } - - protected function getItems(DOMDocument $dom) { - $xpath = new DOMXPath($dom); - $questions_dom = $xpath->query("//li[preceding::h4 and following::h4]"); - if ($questions_dom->length > 0) { //if more than one inner question - $i = 0; - foreach ($questions_dom as $question_dom) { - //get data for each inner question - $this->items[$i++] = $this->getItemMetaData($question_dom); - } - } - else { - $questions_dom = $xpath->query("//node()[preceding::h4 and following::h4]"); - if ($questions_dom->length > 0) { //if one question only, need to create a new DOMElement (shame on you, XPATH!) - $newDom = new DOMDocument('1.0', 'UTF-8'); - $root = $newDom->createElement('root'); - $root = $newDom->appendChild($root); - $prev = ''; - foreach ($questions_dom as $question_dom) { - if ($question_dom->nodeValue != $prev) { - $domNode = $newDom->importNode($question_dom, true); - $root->appendChild($domNode); - } - $prev = $question_dom->nodeValue; - } - $this->items[0] = $this->getItemMetaData($root); - } - else - log_f('klausimo lentele: metadata not found', $this->getId()); - } - unset($xpath); - } - - protected function getItemMetaData(DOMElement $dom) { - - $data = array(); - - //find document links - $links = $dom->getElementsByTagName('a'); - foreach ($links as $link) { - $db_field = $this->getLinkType($this->decode(str_replace(array(chr(160), chr(194)), ' ', $link->nodeValue))); - $data[$db_field] = $link->getAttribute('href'); - } - - //find title of question - $title = $dom->getElementsByTagName('b')->item(0); - if (is_object($title)) - $data['title'] = $this->decode($title->nodeValue); - - //find speakers - $decoded = $this->decode(DOMinnerHTML($dom)); - $data['presenters'] = array(); - $pos = stripos($decoded, 'Pranešėja'); - if ($pos !== false) { - $matches = array(); - preg_match_all('/(.*?)<\/b>/u', substr($decoded, $pos + 9), $matches, PREG_SET_ORDER); - foreach ($matches as $match) { - if (isset($match[1])) - $data['presenters'][] = $match[1]; - } - } - return $data; - } - - protected function getLinkType($lithuanian_string) { - switch($lithuanian_string) { - case 'dokumento tekstas': return 'document_url'; - case 'susiję dokumentai': return 'related_doc_url'; - default: return 'other_url'; - } - } - - protected function getActions($dom) { - - $xpath = new DOMXPath($dom); - $actions_dom = $xpath->query("//table[contains(@class, 'basic')]/tr[td]"); - $i = 0; - foreach ($actions_dom as $action_dom) { - /* Create Children Actions */ - // dirty hack for avoiding Factory exception of no ID & URL - $this->children[$i] = $this->Factory->getObject(self::$child_class, 'http://fake-url.lt/', '', $this, array('dom' => $action_dom, 'id' => $i)); - $i++; - } - $this->initialiseChildrenParse(); - /* get end_time of a question */ - try { - //try to get the start time of next question - $this->end_time = $this->getSiblingInfoByPosition($this->getId(), +1, 'getStartTime'); - } - catch(Exception $e) { - //if no success - probably last question. Try end time of last children, if any - if ($i > 0) { - $this->end_time = $this->date . ' ' . $this->children[$i - 1]->getEndTime(); - } - else { - //if no actions - set end time as the start time of the next question - $this->end_time = $this->start_time; - } - } - unset($xpath); - } - - protected function initialiseChildrenParse() { - foreach ($this->children as $child) { - $child->parseData(); - } - } - - public function getStartTime() { - return $this->start_time; - } - - public function getEndTime() { - if (empty($this->end_time)) { - $this->initialise(); - } - return $this->end_time; - } - - public function getTitle() { - return $this->title; - } - -} - -?> diff --git a/classes/Sesija.php b/classes/Sesija.php deleted file mode 100755 index 67e7711..0000000 --- a/classes/Sesija.php +++ /dev/null @@ -1,82 +0,0 @@ -PDO) { - $this->populateChildren(); - return true; - } - else return false; - } - - public function saveData() { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['url_token']); - $children_array = array(); - foreach ($array['children'] as $child) { - $children_array[] = array('id' => $child->getId(), 'url' => $child->getUrl(), 'sessions_id' => $this->getId()); - } - unset($array['children']); - $this->Factory->SaveObject('sessions', $array, array('id')); - $this->Factory->SaveObjects('sittings', $children_array, array('id', 'sessions_id')); - } - - public function scrapeData($reload = FALSE) { - $dom = $this->getHTMLDOM($this->url, $reload); - $this->getMetaData($dom); - $this->getSittings($dom); - } - - private function getSittings(DOMDocument $dom) { - $xpath = new DOMXPath($dom); - $sittings = array(); - $sittings_dom = $xpath->query("//table[contains(@class, 'basic')]/tr/td[last()]/a[contains(@href, 'p_fakt_pos_id')]/@href"); - foreach ($sittings_dom as $link) { - $sitting = $this->Factory->getObject(self::$child_class, self::BASE_URL . $link->nodeValue, '', $this); - $sittings[$sitting->getId()] = $sitting; - } - $this->children = $sittings; - unset($xpath); - } - - private function getMetaData(DOMDocument $dom) { - $title = $dom->getElementsByTagName('title')->item(0)->nodeValue; - $matches = array(); - preg_match("/(\d) ((ne)?(eilinė)) Seimo sesija \((.*) - (.*)\)/u", $title, $matches); - $this->number = $matches[1]; - $this->type = $matches[2]; - $this->start_date = trim($matches[5]); - if ($matches[6] != '...') $this->end_date = trim($matches[6]); - else $this->end_date = false; - } - - public function getType() { - return $this->type; - } - - public function getNumber() { - return $this->number; - } -} - -?> diff --git a/classes/Updater.php b/classes/Updater.php deleted file mode 100755 index a7c0b16..0000000 --- a/classes/Updater.php +++ /dev/null @@ -1,167 +0,0 @@ -session = $session; - $this->last_time = microtime(true); - $this->start_time = $this->last_time; - } - - /* Surenkame sesijos posėdžių sąrašą ir viską išsaugome */ - /* Scrape the list of the sittings in the session and save */ - public function updateSittingList() { - $this->session->scrapeData(true); - $this->session->saveData(); - } - - /* Daugiausiai resursų reikalaujantis etapas: rekursiškai keliaujam per objektų medį, - * renkame visus duomenis ir viską saugome */ - /* The heavylifting part:Do the recursive object-tree scraping and save all the obtained data */ - public function obtainData() { - $this->session->initialise(); - $this->session->initialiseChildren(true); - } - - /* Seime.lt skaičiavimai: klausimai skaldomi į dalis ir apskaičiuojamas tikslus lankomumas */ - /* Seime.lt estimations: Participation data is estimated precisely, at sub-question level */ - public function estimateParticipation() { - foreach ($this->session->getChildren() as $sitting) { - foreach ($sitting->getChildren() as $question) { - if (false === $question->populateParticipation()) { - $question->estimateParticipation(); - $question->saveParticipation(); - } - } - } - } - - /* Nustatomi ryšiai tarp registracijų į balsavimus ir pačių balsavimų */ - /* Establish links between registrations for voting and voting themselves */ - public function linkRegistrations() { - foreach ($this->session->getChildren() as $sitting) { - foreach ($sitting->getChildren() as $question) { - foreach ($question->getChildren() as $action) - $action->InitialiseLink(); - } - } - } - - /* Pagalbinė funkcija, grąžinanti SQL užklausas iš aplanko 'sqls/' - /* Helper function: returns SQL commands from files in 'sqls/' folder */ - public function getSQL($script) { - $file = BASE_DIR . 'sqls/' . $script . '.sql'; - if (file_exists($file)) { - return file_get_contents($file); - } - else throw new Exception('SQL file is unavailable: ' . $file); - } - - /* Pagalbinė funkcija, spausdinanti žinutę ir laiką nuo paskutinės žinutės */ - /* Helper function: prints message and elapsed execution time since last message */ - public function announce($message) { - $c_time = microtime(true); - echo $message . ' for session #' . $this->session->getId() . - ' in ' . round(($c_time - $this->last_time), 3) . 's' . - ' (total time: ' . round(($c_time - $this->start_time), 3) . 's)

'; - $this->last_time = $c_time; - flush(); - } - - /* Seimo narių duomenų atnaujinimas - surenkamas aprašymas, vardas, nuotrauka. Išsiunčiamas pranešimas apie naują informaciją */ - /* Updates member info - scrapes description, get name & picture. Notifies via email if new info is added */ - public function updateMember(array $member) { - $url = 'http://www3.lrs.lt/pls/inter/w5_show?p_r=8801&p_k=1&p_a=5&p_asm_id=' . $member['id'] .'&p_kade_id=7'; - if($html = @file_get_contents($url)) { - //clean the HTML - $html = ScrapingUtilities::cleanHTML($html); - //parse the HTML - $dom = new DOMDocument('1.0', 'UTF-8'); - @$dom->loadHTML($html); - //get the name - $name = $dom->getElementsByTagName('title')->item(0)->nodeValue; - $name = str_replace('-', ' - ', $name); - $member['name'] = trim(mb_convert_case($name, MB_CASE_TITLE)); - //get the image src & send email with details - $div = $dom->getElementById('divDesContent'); - $images = $div->getElementsByTagName('img')->item(0); - if (is_object($images)) { - $member['image_src'] = $images->getAttribute('src'); - $this->sendPictureEmail($member); - } - //return the updated data - return $member; - } - else { - throw new Exception('Remote file fetching failed'); - } - } - - /* Išsiunčiamas el. laiškas apie naują Seimo narį - naudojama Seime.lt svetainėje */ - /* Sends an email about new member added - for Seime.lt purposes */ - public function sendPictureEmail(array $member) { - $subject = '[seime.lt] - naujas narys: '. $member['name']; - $headers = 'MIME-Version: 1.0' . "\r\n"; - $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; - $text = ' Pridėtas naujas seimo narys
- Nuotraukos URL: %1$s
- Full dydžio nuotrauka (180x135): /images/people/full/%2$s.jpg
- Thumb (60x45): /images/people/thumbs/%2$s.jpg

- Mekeke!'; - $text = sprintf($text, $member['image_src'], $member['id']); - mail(NOTIF_EMAIL, $subject, wordwrap($text), $headers); - } - - /* Pagalbinis updateMember metodas */ - /* Wrapper for updateMember method */ - public function updateMembers(array $members) { - foreach($members as &$member) { - try { - $member = $this->updateMember($member); - } - catch(Exception $e) { - $this->announce("Updating data failed for $member: " . $e->__toString()); - } - } - return $members; - } - - /* Atnaujinama Seimo narių, kurie pradėjo kadenciją vėliau arba ją baigė per anksti, informacija */ - /* Update details on members who entered late of left early */ - public function getTermDetails() { - $list = array(); - if ($html = @file_get_contents('http://www3.lrs.lt/pls/inter/w5_show?p_r=6113&p_k=1')) { - //clean the HTML - $html = ScrapingUtilities::cleanHTML($html); - //parse the HTML - $dom = new DOMDocument('1.0', 'UTF-8'); - @$dom->loadHTML($html); - $xpath = new DOMXPath($dom); - $r = $xpath->query('//td[a[contains(@href,"p_asm_id")] and (contains(., "iki") or contains(., "nuo"))]'); - if ($r instanceof DOMNodeList) { - foreach ($r as $node) { - preg_match('#p_asm_id=(\d+)#', DOMInnerHTML($node), $matches); - $id = $matches[1]; - $start = '0000-00-00'; - $end = '0000-00-00'; - if (preg_match('#nuo (\d{4} \d{2} \d{2})#', DOMInnerHTML($node), $matches)) { - $start = str_replace(' ', '-', $matches[1]); - } - if (preg_match('#iki (\d{4} \d{2} \d{2})#', DOMInnerHTML($node), $matches)) { - $end = str_replace(' ', '-', $matches[1]); - } - $list[] = array('id' => $id, 'cadency_start' => $start, 'cadency_end' => $end); - } - return $list; - } - else { - $this->announce('UPDATING TERM DETAILS FAILED - HTML not recognized!'); - } - } - } - -} - diff --git a/classes/Updater.php~ b/classes/Updater.php~ deleted file mode 100755 index 44472c7..0000000 --- a/classes/Updater.php~ +++ /dev/null @@ -1,167 +0,0 @@ -session = $session; - $this->last_time = microtime(true); - $this->start_time = $this->last_time; - } - - /* Surenkame sesijos posėdžių sąrašą ir viską išsaugome */ - /* Scrape the list of the sittings in the session and save */ - public function updateSittingList() { - $this->session->scrapeData(true); - $this->session->saveData(); - } - - /* Daugiausiai resursų reikalaujantis etapas: rekursiškai keliaujam per objektų medį, - * renkame visus duomenis ir viską saugome */ - /* The heavylifting part:Do the recursive object-tree scraping and save all the obtained data */ - public function obtainData() { - $this->session->initialise(); - $this->session->initialiseChildren(true); - } - - /* Seime.lt skaičiavimai: klausimai skaldomi į dalis ir apskaičiuojamas tikslus lankomumas */ - /* Seime.lt estimations: Participation data is estimated precisely, at sub-question level */ - public function estimateParticipation() { - foreach ($this->session->getChildren() as $sitting) { - foreach ($sitting->getChildren() as $question) { - if (false === $question->populateParticipation()) { - $question->estimateParticipation(); - $question->saveParticipation(); - } - } - } - } - - /* Nustatomi ryšiai tarp registracijų į balsavimus ir pačių balsavimų */ - /* Establish links between registrations for voting and voting themselves */ - public function linkRegistrations() { - foreach ($this->session->getChildren() as $sitting) { - foreach ($sitting->getChildren() as $question) { - foreach ($question->getChildren() as $action) - $action->InitialiseLink(); - } - } - } - - /* Pagalbinė funkcija, grąžinanti SQL užklausas iš aplanko 'sqls/' - /* Helper function: returns SQL commands from files in 'sqls/' folder */ - public function getSQL($script) { - $file = BASE_DIR . 'sqls/' . $script . '.sql'; - if (file_exists($file)) { - return file_get_contents($file); - } - else throw new Exception('SQL file is unavailable: ' . $file); - } - - /* Pagalbinė funkcija, spausdinanti žinutę ir laiką nuo paskutinės žinutės */ - /* Helper function: prints message and elapsed execution time since last message */ - public function announce($message) { - $c_time = microtime(true); - echo $message . ' for session #' . $this->session->getId() . - ' in ' . round(($c_time - $this->last_time), 3) . 's' . - ' (total time: ' . round(($c_time - $this->start_time), 3) . 's)

'; - $this->last_time = $c_time; - flush(); - } - - /* Seimo narių duomenų atnaujinimas - surenkamas aprašymas, vardas, nuotrauka. Išsiunčiamas pranešimas apie naują informaciją */ - /* Updates member info - scrapes description, get name & picture. Notifies via email if new info is added */ - public function updateMember(array $member) { - $url = 'http://www3.lrs.lt/pls/inter/w5_show?p_r=6113&p_k=1&p_a=5&p_asm_id=' . $member['id'] .'&p_kade_id=6'; - if($html = @file_get_contents($url)) { - //clean the HTML - $html = ScrapingUtilities::cleanHTML($html); - //parse the HTML - $dom = new DOMDocument('1.0', 'UTF-8'); - @$dom->loadHTML($html); - //get the name - $name = $dom->getElementsByTagName('title')->item(0)->nodeValue; - $name = str_replace('-', ' - ', $name); - $member['name'] = trim(mb_convert_case($name, MB_CASE_TITLE)); - //get the image src & send email with details - $div = $dom->getElementById('divDesContent'); - $images = $div->getElementsByTagName('img')->item(0); - if (is_object($images)) { - $member['image_src'] = $images->getAttribute('src'); - $this->sendPictureEmail($member); - } - //return the updated data - return $member; - } - else { - throw new Exception('Remote file fetching failed'); - } - } - - /* Išsiunčiamas el. laiškas apie naują Seimo narį - naudojama Seime.lt svetainėje */ - /* Sends an email about new member added - for Seime.lt purposes */ - public function sendPictureEmail(array $member) { - $subject = '[seime.lt] - naujas narys: '. $member['name']; - $headers = 'MIME-Version: 1.0' . "\r\n"; - $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; - $text = ' Pridėtas naujas seimo narys
- Nuotraukos URL: %1$s
- Full dydžio nuotrauka (180x135): /images/people/full/%2$s.jpg
- Thumb (60x45): /images/people/thumbs/%2$s.jpg

- Mekeke!'; - $text = sprintf($text, $member['image_src'], $member['id']); - mail(NOTIF_EMAIL, $subject, wordwrap($text), $headers); - } - - /* Pagalbinis updateMember metodas */ - /* Wrapper for updateMember method */ - public function updateMembers(array $members) { - foreach($members as &$member) { - try { - $member = $this->updateMember($member); - } - catch(Exception $e) { - $this->announce("Updating data failed for $member: " . $e->__toString()); - } - } - return $members; - } - - /* Atnaujinama Seimo narių, kurie pradėjo kadenciją vėliau arba ją baigė per anksti, informacija */ - /* Update details on members who entered late of left early */ - public function getTermDetails() { - $list = array(); - if ($html = @file_get_contents('http://www3.lrs.lt/pls/inter/w5_show?p_r=6113&p_k=1')) { - //clean the HTML - $html = ScrapingUtilities::cleanHTML($html); - //parse the HTML - $dom = new DOMDocument('1.0', 'UTF-8'); - @$dom->loadHTML($html); - $xpath = new DOMXPath($dom); - $r = $xpath->query('//td[a[contains(@href,"p_asm_id")] and (contains(., "iki") or contains(., "nuo"))]'); - if ($r instanceof DOMNodeList) { - foreach ($r as $node) { - preg_match('#p_asm_id=(\d+)#', DOMInnerHTML($node), $matches); - $id = $matches[1]; - $start = '0000-00-00'; - $end = '0000-00-00'; - if (preg_match('#nuo (\d{4} \d{2} \d{2})#', DOMInnerHTML($node), $matches)) { - $start = str_replace(' ', '-', $matches[1]); - } - if (preg_match('#iki (\d{4} \d{2} \d{2})#', DOMInnerHTML($node), $matches)) { - $end = str_replace(' ', '-', $matches[1]); - } - $list[] = array('id' => $id, 'cadency_start' => $start, 'cadency_end' => $end); - } - return $list; - } - else { - $this->announce('UPDATING TERM DETAILS FAILED - HTML not recognized!'); - } - } - } - -} - diff --git a/classes/abstractions.php b/classes/abstractions.php deleted file mode 100755 index 3bc7f9c..0000000 --- a/classes/abstractions.php +++ /dev/null @@ -1,279 +0,0 @@ - true, - 'output-xhtml' => true, - 'wrap' => 200); - $tidy->parseString($html, $config, 'UTF8'); - $tidy->cleanRepair(); - $dom = new DOMDocument('1.0', 'UTF-8'); - @$dom->loadHTML((string) $tidy); - return $dom; - } - - final protected function clean($string) { - return trim(str_replace(array(' ', 'Â'), '', htmlentities($string, ENT_NOQUOTES, 'UTF-8'))); - } - - final protected function decode($string) { - $string = html_entity_decode($string, ENT_QUOTES, 'UTF-8'); - return preg_replace('/\s+/', ' ', $string); - } - - final protected function getMemberId(DOMElement $dom) { - $variables = array(); - $a = $dom->getElementsByTagName('a')->item(0); - if (is_object($a)) { - $variables = array(); - $query = parse_url($a->getAttribute('href'), PHP_URL_QUERY); - parse_str($query, $variables); - if (isset($variables['p_asm_id'])) { - return $variables['p_asm_id']; - } else { - $member_id = str_replace('a', '', $a->getAttribute('name')); - if (!empty($member_id)) { - return $member_id; - } else { - log_f('parsing error: lankomumo lentele - person a asm_id . ', $this->getId()); - } - } - } - else - log_f('parsing error: lankomumo lentele - person a . ', $this->getId()); - } - -} - -abstract class HTMLObject extends Utilities implements Seimas { - - protected $parent = NULL; - protected $Factory = NULL; - protected $children = array(); - protected $id = ''; - protected $url = ''; - protected $PDO = 0; - - public function __construct($url, Seimas $parent = NULL, $params = NULL, Factory $Factory = NULL) { - /* Determine if not created via PDO */ - if (empty($this->PDO)) { - $this->url = $url; - $query = parse_url($url, PHP_URL_QUERY); - $class_name = get_class($this); - $class = new ReflectionClass($class_name); - $token = $class->getStaticPropertyValue('url_token'); - $this->id = str_replace($token, '', $query); - } - /* Add reference to parent */ - $this->parent = $parent; - /* Add reference to Factory */ - $this->Factory = $Factory; - } - - final public function initialise() { - if (false === $this->getId()) { - throw new Exception('no URL defined!'); - } - elseif (false === $this->populateData()) { - try { - $this->scrapeData(); - $this->saveData(); - } - catch (Exception $e) { - '

Unexpected conditions met!
' . $e->getMessage(); - } - } - } - - public function populateChildren($initialiseSearch = false) { - $class = get_class($this); - $class_ = new ReflectionClass($class); - $child_class = $class_->getStaticPropertyValue('child_class'); - $this->children = $this->Factory->getObjectChildren($class, $child_class, $this->getId(), $this); - if (empty($this->children) && ($initialiseSearch)) { - $this->scrapeData(); - $this->saveData(); - } - } - - public function initialiseChildren($recursive = false) { - foreach ($this->children as $child) { - if ($child instanceof Seimas) { - $child->initialise(); - if ($recursive) { - $child->initialiseChildren(true); - } - } - else - throw new Exception('child does not implement Seimas Interface'); - } - } - - final protected function getParentInfo($function, $parameters = array()) { - if (NULL === $this->parent) { - throw new Exception('no parent available'); - } else { - return call_user_func_array(array($this->parent, $function), $parameters); - } - } - - final protected function getSiblingInfoById($sibling_id, $function, $parameters = array()) { - if (NULL === $this->parent) { - throw new Exception('no parent available'); - } else { - $sibling = $this->parent->getChild($sibling_id); - if (false === $sibling) { - throw new Exception('no sibling with such ID available'); - } else { - return call_user_func_array(array($sibling, $function), $parameters); - } - } - } - - final protected function getSiblingInfoByPosition($current_id, $sibling_position, $function, $parameters = array()) { - if (NULL === $this->parent) { - throw new Exception('no parent available'); - } else { - $sibling = $this->parent->getChildByPosition($current_id, $sibling_position); - if (false === $sibling) { - throw new Exception('no sibling with such ID available'); - } else { - return call_user_func_array(array($sibling, $function), $parameters); - } - } - } - - final protected function getChild($child_id) { - if (isset($this->children[$child_id])) - return $this->children[$child_id]; - else - return false; - } - - final protected function getChildByPosition($child_id, $relative_sibling_position) { - $children = array_keys($this->children); - $child_position = array_search($child_id, $children); - if (false === $child_position) { - return false; - } else { - $sibling_position = $child_position + $relative_sibling_position; - if (!isset($children[$sibling_position])) - return false; - else { - $sibling_id = $children[$sibling_position]; - return $this->getChild($sibling_id); - } - } - } - - final public function getChildren() { - return $this->children; - } - - public function getId() { - return $this->id; - } - - public function getUrl() { - return $this->url; - } - - public function show() { - $a = false; - if ($a = $this->__toString()) { - echo "Class " . get_class($this) . '
'; - print_f($a); - } - else - print_f($this); - } - - public function __toString() { - $array = get_object_vars($this); - unset($array['PDO']); - unset($array['Factory']); - unset($array['parent']); - unset($array['url_token']); - unset($array['additional_data']); - if (is_array($array['children'])) - $array['children'] = $this->cleanChildren($array['children']); - return $array; - } - - protected function cleanChildren($children) { - $array = array(); - foreach ($children as $id => $child) { - if ($child instanceof Seimas) { - $child->class_name = '' . get_class($child) . ' Object'; - $array[$id] = $child->__toString(); - } - } - return $array; - } - - abstract protected function populateData(); - - abstract protected function saveData(); - - abstract protected function scrapeData($reload = FALSE); -} - -Interface Seimas { - - public function initialise(); -} - -?> diff --git a/classes/utilities.php b/classes/utilities.php deleted file mode 100755 index d7468a3..0000000 --- a/classes/utilities.php +++ /dev/null @@ -1,55 +0,0 @@ -childNodes; - foreach ($children as $child) - { - $tmp_dom = new DOMDocument(); - $tmp_dom->appendChild($tmp_dom->importNode($child, true)); - $innerHTML.=trim($tmp_dom->saveHTML()); - } - return $innerHTML; - } - - function print_f($array) { - echo '
';
-	
-		if ($array instanceof DOMNodeList) {
-		print_r($array->length);
-			foreach ($array as $node) {
-				echo $node->nodeValue;
-			}
-		}
-		elseif ($array instanceof DOMNode) {
-			echo $array->nodeValue;
-		}
-		else print_r($array);
-		echo '
'; - } - - function log_f($message, $object_id) { - echo '
' . $message . '
'; - } - - class ScrapingUtilities { - public static function cleanHTML($html) { - $html = @iconv('windows-1257', 'UTF-8//IGNORE', $html); - $html = str_replace('charset=windows-1257"', 'charset=UTF-8"', $html); - $tidy = new tidy(); - $config = array('indent' => true, 'output-xhtml' => true, 'wrap' => 200); - $tidy->parseString($html, $config, 'UTF8'); - $tidy->cleanRepair(); - return (string) $tidy; - } - } - - function __ending($number, $endings = array('narių', 'narys', 'nariai')) { - $count = $number % 100; - if (($count > 9) && ($count < 20)) return $endings[0]; - elseif ($count % 10 == 0) return $endings[0]; - elseif ($count % 10 == 1) return $endings[1]; - else return $endings[2]; - } - diff --git a/code-docs/code-summary-ENG.md b/code-docs/code-summary-ENG.md deleted file mode 100755 index c68aa13..0000000 --- a/code-docs/code-summary-ENG.md +++ /dev/null @@ -1,54 +0,0 @@ -Seime.lt code is licenced under Creative Commons BY-NC-SA 3.0 licence: -http://creativecommons.org/licenses/by-nc-sa/3.0/ - -## DOCUMENTATION OF SEIME.LT CODE a.k.a BEWARE THERE BE DRAGONS ## - -Unfortunately, a full documentation of the code is not yet ready (and, to be honest, -chances are it will not be for a long time). Thus, the navigation through the -code will be mostly up to the reader. Nevertheless, we have a brief summary of what -you can expect. You are always welcome to shoot us an email to info@seime.lt and -we'll do our best to help you out! - -### STRUCTURE OF CODE ### - -- The core of the code is in the folder `classes/`. We note that it's the first -project where we practically tried to apply OOP concepts, so you'll find a lot of -high-coupling and low-cohesion examples. In any way, the following principles will -largely hold: - - - Factory class is responsible for manipulating objects' data in the dabatse, creating objects from DB as well as traversing the main object tree. - - Each of the Seimas work objects (session, sitting, question, action) has its own class. - - Each of the Seimas work objects is a child of the HTMLObject class (abstractions.php), which contains common methods as well defines the overall structure of the way the objects are constructed. - - utilities.php file contains various helper functions. - -- Folder `extensions/` contains classes that add extra functionality to the core object -classes. That is, classes in the `classes/` folder use only the oficial data from the -Lithuanian Seimas website, whereas `extensions/` classes add additional calculations -(such as participation data estimation on sub-question level). You can define which -classes are used in the tree on runtime, by passing parameters to Factory class. - -- Folder `cache/` contains all the HTML files downloaded from http://lrs.lt. -The caching mechanism is implemented in the Utilities class (classes/abstractions.php). - -- Folder `sqls/` contains SQL queries, which are used to populate some of the -SQL tables with additional data. They are used solely by `classes/Updater.php` class. - -### RUNNING THE CODE ### - -If you want to jump right away, all you need to do is create a session object -(you can, actually, start at sitting / question level, too) and initialise it: -```php -getObject('session', SESSION_URL); - //SESSION_URL looks like this: http://www3.lrs.lt/pls/inter/w5_sale.ses_pos?p_ses_id=91 - $s->scrapeData(true); // TRUE = force to redownload data - $this->session->initialise(); //Initialise the session object (populate the fields from HTML) - $this->session->initialiseChildren(true); //Recursively populate all children - $s->saveData(); -?> -``` -However, this will only collect and save to DB the main data. The additional calculations -will not be present. - -For a full information collection / update example, see the file `update-ENG.php` & -the Updater class located at `classes/Updater.php`. diff --git a/code-docs/code-summary-LT.md b/code-docs/code-summary-LT.md deleted file mode 100755 index 192a980..0000000 --- a/code-docs/code-summary-LT.md +++ /dev/null @@ -1,53 +0,0 @@ -Seime.lt kodas pateikiamas su Creative Commons BY-NC-SA 3.0 licencija: -http://creativecommons.org/licenses/by-nc-sa/3.0/ - -## SEIME.LT KODO DOKUMENTACIJA a.k.a BEWARE THERE BE DRAGONS ## - -Pilnos Seime.lt dokumentacijos vis dar neprisiruošėme parengti. Tad naršyti po -kodą kol kas teks pusiau užrištomis akimis. Bet kokiu atveju, žemiau pateikiame -trumpą kodo struktūros santrauką ir kodo pavyzdžių. Sėkmės, o jei iškiltų -neišsprendžiamų klausimų - visada gali parašyti į info@seime.lt! - -### KODO STRUKTŪRA ### - -- Pagrindinis kodas laikomas aplanke `classes/`. Tai buvo pirmasis projektas, -kuriame Seime.lt komanda realiai išbandė OOP, tad jame pilna high-coupling ir -low-cohesion pavyzdžių. Pagrindiniai principai tokie: - - - `Factory` klasė atsakinga už objektų saugojimą / sukūrimą iš DB ir keliavimą objektų medžiu (sibling / parent / etc metodai). - - Kiekvienas Seimo darbo objektas (sesija, posėdis ir t.t.) turi savo klasę. - - Bendri Seimo darbo objektų metodai, veikimo struktūros griaučiai apibrėžti klasėje `HTMLObject (abstractions.php)` - - `utilities.php` faile saugomos pagalbinės klasės ir funkcijos. - -- Aplanke `extensions/` laikomos klasės, kurios prideda papildomo funkcionalumo -prie Seimo darbo klasių. T.y., `classes/` aplanke esančios klasės naudoja tik -"oficialius" Seimo svetainėje pateikiamus duomenis. `Extensions` aplanke esančios -klasės prideda papildomus skaičiavimus (kaip, pvz., sub-klausimų lygio dalyvavimo -statistiką). Tai, kurios klasės naudojamos, nustatoma perduodant Factory klasei -klasių pavadinimus, kaip antrą parametrą. - -- Aplanke `cache/` saugomi visi parsiųsti http://lrs.lt HTML dokumentai. Saugojimo -mechanizmas įgyvendintas Utilities klasėje, `classes/abstractions.php` dokumente. - -- Aplanke `sqls/` saugomos SQL užklausos, kurių pagalba sugeneruojamos kai kurios -SQL lentelės (papildomi duomenys). Jas naudoja `classes/Updater.php` klasė. - -### DARBAS SU KODU ### - -Praktiškai, norint susirinkti duomenis reikia susikurti sesijos objektą -ir jį (bei sub-objektus) inicijuoti: -```php -getObject('session', SESIJOS_URL); - //SESIJOS_URL pavyzdys: http://www3.lrs.lt/pls/inter/w5_sale.ses_pos?p_ses_id=91 - $s->scrapeData(true); // TRUE = iš naujo parsisiųsti HTML failą, net jei yra cache versija - $this->session->initialise(); //Inicijuojamas sesijos objektas (užpildomi laukai pagal HTML informaciją) - $this->session->initialiseChildren(true); //Rekursiškai inicijuojami visi sub-objektai. - $s->saveData(); -?> -``` -Tiesa, taip nebus užpildytos visos SQL lentelės, trūks kai kurios kitos informacijos. - -Pilnas informacijos surinkimo / atnaujinimo pavyzdys pateikiamas `update.php` -Jis naudoja `Updater` klasę, esančią `classes/Updater.php`, kuri sukurta būtent duomenų -surinkimui ar jų atnaujinimui. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..de43f00 --- /dev/null +++ b/composer.json @@ -0,0 +1,40 @@ +{ + "name": "laravel/laravel", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "laravel/framework": "4.2.*", + "guzzlehttp/guzzle": "4.*", + "xethron/migrations-generator": "dev-master", + "barryvdh/laravel-debugbar": "1.x" + }, + "autoload": { + "classmap": [ + "app/commands", + "app/controllers", + "app/models", + "app/database/migrations", + "app/database/seeds", + "app/tests/TestCase.php" + ] + }, + "scripts": { + "post-install-cmd": [ + "php artisan clear-compiled", + "php artisan optimize" + ], + "post-update-cmd": [ + "php artisan clear-compiled", + "php artisan optimize", + "php artisan debugbar:publish" + ], + "post-create-project-cmd": [ + "php artisan key:generate" + ] + }, + "config": { + "preferred-install": "dist" + }, + "minimum-stability": "stable" +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..247b99a --- /dev/null +++ b/composer.lock @@ -0,0 +1,2432 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "439bd4c9b872a2915b577e7727414fbc", + "packages": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v1.6.7", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "ccf9ababfb2b5ddbf8c3ece2ca3fc9989b11ec0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/ccf9ababfb2b5ddbf8c3ece2ca3fc9989b11ec0d", + "reference": "ccf9ababfb2b5ddbf8c3ece2ca3fc9989b11ec0d", + "shasum": "" + }, + "require": { + "laravel/framework": "~4.0", + "maximebf/debugbar": "~1.9", + "php": ">=5.3.0", + "symfony/finder": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-0": { + "Barryvdh\\Debugbar": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "time": "2014-08-09 20:41:59" + }, + { + "name": "classpreloader/classpreloader", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/ClassPreloader.git", + "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877", + "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~0.9", + "php": ">=5.3.3", + "symfony/console": "~2.1", + "symfony/filesystem": "~2.1", + "symfony/finder": "~2.1" + }, + "bin": [ + "classpreloader.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "ClassPreloader": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "keywords": [ + "autoload", + "class", + "preload" + ], + "time": "2014-03-12 00:05:31" + }, + { + "name": "d11wtq/boris", + "version": "v1.0.8", + "source": { + "type": "git", + "url": "https://github.com/d11wtq/boris.git", + "reference": "125dd4e5752639af7678a22ea597115646d89c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/d11wtq/boris/zipball/125dd4e5752639af7678a22ea597115646d89c6e", + "reference": "125dd4e5752639af7678a22ea597115646d89c6e", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "suggest": { + "ext-pcntl": "*", + "ext-posix": "*", + "ext-readline": "*" + }, + "bin": [ + "bin/boris" + ], + "type": "library", + "autoload": { + "psr-0": { + "Boris": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "time": "2014-01-17 12:21:18" + }, + { + "name": "doctrine/annotations", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd", + "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd", + "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": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2014-07-06 15:52:21" + }, + { + "name": "doctrine/cache", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "e16d7adf45664a50fa86f515b6d5e7f670130449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/e16d7adf45664a50fa86f515b6d5e7f670130449", + "reference": "e16d7adf45664a50fa86f515b6d5e7f670130449", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": ">=3.7", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Cache\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2013-10-25 19:04:14" + }, + { + "name": "doctrine/collections", + "version": "v1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2", + "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2014-02-03 23:07:43" + }, + { + "name": "doctrine/common", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b", + "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2014-05-21 19:28:51" + }, + { + "name": "doctrine/dbal", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "fec965d330c958e175c39e61c3f6751955af32d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/fec965d330c958e175c39e61c3f6751955af32d0", + "reference": "fec965d330c958e175c39e61c3f6751955af32d0", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.4", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "symfony/console": "~2.0" + }, + "suggest": { + "symfony/console": "Allows use of the command line interface" + }, + "type": "library", + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2014-01-01 16:43:57" + }, + { + "name": "doctrine/inflector", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/54b8333d2a5682afdc690060c1cf384ba9f47f08", + "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/", + "role": "Creator" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluarlize", + "singuarlize", + "string" + ], + "time": "2013-01-10 21:49:15" + }, + { + "name": "doctrine/lexer", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/2f708a85bb3aab5d99dab8be435abd73e0b18acb", + "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "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": "2013-01-12 18:59:04" + }, + { + "name": "filp/whoops", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "9f451fbc7b8cad5e71300672c340c28c6bec09ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/9f451fbc7b8cad5e71300672c340c28c6bec09ff", + "reference": "9f451fbc7b8cad5e71300672c340c28c6bec09ff", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-0": { + "Whoops": "src/" + }, + "classmap": [ + "src/deprecated" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://github.com/filp/whoops", + "keywords": [ + "error", + "exception", + "handling", + "library", + "silex-provider", + "whoops", + "zf2" + ], + "time": "2014-07-11 05:56:54" + }, + { + "name": "guzzlehttp/guzzle", + "version": "4.1.7", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/448f2c2076cf0fb756230611491c4f7ecb735a29", + "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/streams": "~1.4", + "php": ">=5.4.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2014-08-08 01:30:43" + }, + { + "name": "guzzlehttp/streams", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f", + "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data (Guzzle 4+)", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-08-10 23:57:01" + }, + { + "name": "ircmaxell/password-compat", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "1fc1521b5e9794ea77e4eca30717be9635f1d4f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/1fc1521b5e9794ea77e4eca30717be9635f1d4f4", + "reference": "1fc1521b5e9794ea77e4eca30717be9635f1d4f4", + "shasum": "" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "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": "2013-04-30 19:58:08" + }, + { + "name": "jeremeamia/SuperClosure", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "d05400085f7d4ae6f20ba30d36550836c0d061e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/d05400085f7d4ae6f20ba30d36550836c0d061e8", + "reference": "d05400085f7d4ae6f20ba30d36550836c0d061e8", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~0.9", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "Jeremeamia\\SuperClosure": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom" + } + ], + "description": "Doing interesting things with closures like serialization.", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "time": "2013-10-09 04:20:00" + }, + { + "name": "laravel/framework", + "version": "v4.2.8", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e60ea917ab862254a6db37fa9cb8933138c1e73c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e60ea917ab862254a6db37fa9cb8933138c1e73c", + "reference": "e60ea917ab862254a6db37fa9cb8933138c1e73c", + "shasum": "" + }, + "require": { + "classpreloader/classpreloader": "~1.0", + "d11wtq/boris": "~1.0", + "filp/whoops": "1.1.*", + "ircmaxell/password-compat": "~1.0", + "jeremeamia/superclosure": "~1.0", + "monolog/monolog": "~1.6", + "nesbot/carbon": "~1.0", + "patchwork/utf8": "1.1.*", + "php": ">=5.4.0", + "phpseclib/phpseclib": "0.3.*", + "predis/predis": "0.8.*", + "stack/builder": "~1.0", + "swiftmailer/swiftmailer": "~5.1", + "symfony/browser-kit": "2.5.*", + "symfony/console": "2.5.*", + "symfony/css-selector": "2.5.*", + "symfony/debug": "2.5.*", + "symfony/dom-crawler": "2.5.*", + "symfony/finder": "2.5.*", + "symfony/http-foundation": "2.5.*", + "symfony/http-kernel": "2.5.*", + "symfony/process": "2.5.*", + "symfony/routing": "2.5.*", + "symfony/security-core": "2.5.*", + "symfony/translation": "2.5.*" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/exception": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/foundation": "self.version", + "illuminate/hashing": "self.version", + "illuminate/html": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/pagination": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/remote": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "illuminate/workbench": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "~2.6", + "iron-io/iron_mq": "~1.5", + "mockery/mockery": "~0.9", + "pda/pheanstalk": "~2.1", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "doctrine/dbal": "Allow renaming columns and dropping SQLite columns." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/Illuminate/Queue/IlluminateQueueClosure.php" + ], + "files": [ + "src/Illuminate/Support/helpers.php" + ], + "psr-0": { + "Illuminate": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "The Laravel Framework.", + "keywords": [ + "framework", + "laravel" + ], + "time": "2014-08-05 19:52:17" + }, + { + "name": "maximebf/debugbar", + "version": "1.9.14", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "ab02c692d2bdad1009639f6ba319576af590620c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/ab02c692d2bdad1009639f6ba319576af590620c", + "reference": "ab02c692d2bdad1009639f6ba319576af590620c", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "require-dev": { + "php": ">=5.3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "autoload": { + "psr-0": { + "DebugBar": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug" + ], + "time": "2014-04-25 16:30:40" + }, + { + "name": "monolog/monolog", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "25b16e801979098cb2f120e697bfce454b18bf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/25b16e801979098cb2f120e697bfce454b18bf23", + "reference": "25b16e801979098cb2f120e697bfce454b18bf23", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "require-dev": { + "aws/aws-sdk-php": "~2.4, >2.4.8", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "phpunit/phpunit": "~3.7.0", + "raven/raven": "~0.5", + "ruflin/elastica": "0.90.*" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "raven/raven": "Allow sending log messages to a Sentry server", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be", + "role": "Developer" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2014-06-04 16:30:04" + }, + { + "name": "nesbot/carbon", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "9b42a1aec56011c2ac4d75c0ddad0794762344fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/9b42a1aec56011c2ac4d75c0ddad0794762344fc", + "reference": "9b42a1aec56011c2ac4d75c0ddad0794762344fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Carbon": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "https://github.com/briannesbitt/Carbon", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2014-07-18 03:44:47" + }, + { + "name": "nikic/php-parser", + "version": "v0.9.5", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", + "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + } + }, + "autoload": { + "psr-0": { + "PHPParser": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2014-07-23 18:24:17" + }, + { + "name": "patchwork/utf8", + "version": "v1.1.25", + "source": { + "type": "git", + "url": "https://github.com/nicolas-grekas/Patchwork-UTF8.git", + "reference": "2d43bd047b120279511d45e76e61c5a9812d9a83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nicolas-grekas/Patchwork-UTF8/zipball/2d43bd047b120279511d45e76e61c5a9812d9a83", + "reference": "2d43bd047b120279511d45e76e61c5a9812d9a83", + "shasum": "" + }, + "require": { + "lib-pcre": ">=7.3", + "php": ">=5.3.0" + }, + "suggest": { + "ext-iconv": "Use iconv for best performance", + "ext-intl": "Use Intl for best performance", + "ext-mbstring": "Use Mbstring for best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "Patchwork": "class/", + "Normalizer": "class/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "(Apache-2.0 or GPL-2.0)" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com", + "role": "Developer" + } + ], + "description": "Extensive, portable and performant handling of UTF-8 and grapheme clusters for PHP", + "homepage": "https://github.com/nicolas-grekas/Patchwork-UTF8", + "keywords": [ + "i18n", + "unicode", + "utf-8", + "utf8" + ], + "time": "2014-08-05 08:00:32" + }, + { + "name": "phpseclib/phpseclib", + "version": "0.3.7", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "8b8c62f278e363b75ddcacaf5803710232fbd3e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/8b8c62f278e363b75ddcacaf5803710232fbd3e4", + "reference": "8b8c62f278e363b75ddcacaf5803710232fbd3e4", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phing/phing": "2.7.*", + "phpunit/phpunit": "4.0.*", + "squizlabs/php_codesniffer": "1.*" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", + "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3-dev" + } + }, + "autoload": { + "psr-0": { + "Crypt": "phpseclib/", + "File": "phpseclib/", + "Math": "phpseclib/", + "Net": "phpseclib/", + "System": "phpseclib/" + }, + "files": [ + "phpseclib/Crypt/Random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "phpseclib/" + ], + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2014-07-05 16:36:21" + }, + { + "name": "predis/predis", + "version": "v0.8.7", + "source": { + "type": "git", + "url": "https://github.com/nrk/predis.git", + "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6", + "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-0": { + "Predis": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" + } + ], + "description": "Flexible and feature-complete PHP client library for Redis", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2014-08-01 09:43:10" + }, + { + "name": "psr/log", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2012-12-21 11:40:51" + }, + { + "name": "stack/builder", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/stackphp/builder.git", + "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stackphp/builder/zipball/b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7", + "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.1" + }, + "require-dev": { + "silex/silex": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Stack": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch", + "homepage": "http://wiedler.ch/igor/" + } + ], + "description": "Builder for stack middlewares based on HttpKernelInterface.", + "keywords": [ + "stack" + ], + "time": "2014-01-28 19:42:24" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "2b9af56cc676c338d52fca4c657e5bdff73bb7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/2b9af56cc676c338d52fca4c657e5bdff73bb7af", + "reference": "2b9af56cc676c338d52fca4c657e5bdff73bb7af", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "mockery/mockery": "~0.9.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Chris Corbyn" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "http://swiftmailer.org", + "keywords": [ + "mail", + "mailer" + ], + "time": "2014-06-13 11:44:54" + }, + { + "name": "symfony/browser-kit", + "version": "v2.5.3", + "target-dir": "Symfony/Component/BrowserKit", + "source": { + "type": "git", + "url": "https://github.com/symfony/BrowserKit.git", + "reference": "ecb0e1ac56af2c3f93f4ac8ff2131872bc7db40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/ecb0e1ac56af2c3f93f4ac8ff2131872bc7db40c", + "reference": "ecb0e1ac56af2c3f93f4ac8ff2131872bc7db40c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/dom-crawler": "~2.0" + }, + "require-dev": { + "symfony/css-selector": "~2.0", + "symfony/process": "~2.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\BrowserKit\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "http://symfony.com", + "time": "2014-08-06 06:44:37" + }, + { + "name": "symfony/console", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/Console.git", + "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Console/zipball/cd2d1e4bac2206b337326b0140ff475fe9ad5f63", + "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Console Component", + "homepage": "http://symfony.com", + "time": "2014-08-05 09:00:40" + }, + { + "name": "symfony/css-selector", + "version": "v2.5.3", + "target-dir": "Symfony/Component/CssSelector", + "source": { + "type": "git", + "url": "https://github.com/symfony/CssSelector.git", + "reference": "e24b8215bf39a6a2ce0c262bc5b000724077afa9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/CssSelector/zipball/e24b8215bf39a6a2ce0c262bc5b000724077afa9", + "reference": "e24b8215bf39a6a2ce0c262bc5b000724077afa9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\CssSelector\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "http://symfony.com", + "time": "2014-07-09 09:05:48" + }, + { + "name": "symfony/debug", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Debug", + "source": { + "type": "git", + "url": "https://github.com/symfony/Debug.git", + "reference": "189da713c1f8bb03f9184eb87b43ecbc732284ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Debug/zipball/189da713c1f8bb03f9184eb87b43ecbc732284ac", + "reference": "189da713c1f8bb03f9184eb87b43ecbc732284ac", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.1" + }, + "suggest": { + "symfony/http-foundation": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Debug\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Debug Component", + "homepage": "http://symfony.com", + "time": "2014-07-09 09:05:48" + }, + { + "name": "symfony/dom-crawler", + "version": "v2.5.3", + "target-dir": "Symfony/Component/DomCrawler", + "source": { + "type": "git", + "url": "https://github.com/symfony/DomCrawler.git", + "reference": "9cb8aaea71fabae517ca007ca4b639e96f490c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/9cb8aaea71fabae517ca007ca4b639e96f490c5e", + "reference": "9cb8aaea71fabae517ca007ca4b639e96f490c5e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/css-selector": "~2.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\DomCrawler\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "http://symfony.com", + "time": "2014-08-05 09:00:40" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.5.3", + "target-dir": "Symfony/Component/EventDispatcher", + "source": { + "type": "git", + "url": "https://github.com/symfony/EventDispatcher.git", + "reference": "8faf5cc7e80fde74a650a36e60d32ce3c3e0457b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/8faf5cc7e80fde74a650a36e60d32ce3c3e0457b", + "reference": "8faf5cc7e80fde74a650a36e60d32ce3c3e0457b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0", + "symfony/dependency-injection": "~2.0", + "symfony/stopwatch": "~2.2" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "http://symfony.com", + "time": "2014-07-28 13:20:46" + }, + { + "name": "symfony/filesystem", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Filesystem", + "source": { + "type": "git", + "url": "https://github.com/symfony/Filesystem.git", + "reference": "c1309b0ee195ad264a4314435bdaecdfacb8ae9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Filesystem/zipball/c1309b0ee195ad264a4314435bdaecdfacb8ae9c", + "reference": "c1309b0ee195ad264a4314435bdaecdfacb8ae9c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Filesystem\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "http://symfony.com", + "time": "2014-07-09 09:05:48" + }, + { + "name": "symfony/finder", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Finder", + "source": { + "type": "git", + "url": "https://github.com/symfony/Finder.git", + "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Finder/zipball/090fe4eaff414d8f2171c7a4748ea868d530775f", + "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Finder Component", + "homepage": "http://symfony.com", + "time": "2014-07-28 13:20:46" + }, + { + "name": "symfony/http-foundation", + "version": "v2.5.3", + "target-dir": "Symfony/Component/HttpFoundation", + "source": { + "type": "git", + "url": "https://github.com/symfony/HttpFoundation.git", + "reference": "53296aa0794ebe1e3880e3f2c68fe10ddad6c3e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/53296aa0794ebe1e3880e3f2c68fe10ddad6c3e3", + "reference": "53296aa0794ebe1e3880e3f2c68fe10ddad6c3e3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/expression-language": "~2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Symfony/Component/HttpFoundation/Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "http://symfony.com", + "time": "2014-08-05 09:00:40" + }, + { + "name": "symfony/http-kernel", + "version": "v2.5.3", + "target-dir": "Symfony/Component/HttpKernel", + "source": { + "type": "git", + "url": "https://github.com/symfony/HttpKernel.git", + "reference": "d3e1fa28d23fe00f2b932ca9d1e4371f9053f05e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/d3e1fa28d23fe00f2b932ca9d1e4371f9053f05e", + "reference": "d3e1fa28d23fe00f2b932ca9d1e4371f9053f05e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "psr/log": "~1.0", + "symfony/debug": "~2.5", + "symfony/event-dispatcher": "~2.5", + "symfony/http-foundation": "~2.4" + }, + "require-dev": { + "symfony/browser-kit": "~2.2", + "symfony/class-loader": "~2.1", + "symfony/config": "~2.0", + "symfony/console": "~2.2", + "symfony/dependency-injection": "~2.0", + "symfony/finder": "~2.0", + "symfony/process": "~2.0", + "symfony/routing": "~2.2", + "symfony/stopwatch": "~2.2", + "symfony/templating": "~2.2" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpKernel\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "http://symfony.com", + "time": "2014-08-06 07:03:01" + }, + { + "name": "symfony/process", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Process", + "source": { + "type": "git", + "url": "https://github.com/symfony/Process.git", + "reference": "e0997d2a9a1a763484b34b989900b61322a9b056" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Process/zipball/e0997d2a9a1a763484b34b989900b61322a9b056", + "reference": "e0997d2a9a1a763484b34b989900b61322a9b056", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Process Component", + "homepage": "http://symfony.com", + "time": "2014-08-05 09:00:40" + }, + { + "name": "symfony/routing", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Routing", + "source": { + "type": "git", + "url": "https://github.com/symfony/Routing.git", + "reference": "1c285e6fffaa026c8073a387f403b1052d61ed95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Routing/zipball/1c285e6fffaa026c8073a387f403b1052d61ed95", + "reference": "1c285e6fffaa026c8073a387f403b1052d61ed95", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "psr/log": "~1.0", + "symfony/config": "~2.2", + "symfony/expression-language": "~2.4", + "symfony/yaml": "~2.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Routing Component", + "homepage": "http://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2014-07-28 13:20:46" + }, + { + "name": "symfony/security-core", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Security/Core", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "d6a8860f015e1f8e8e42c2141a4a88b1965c32ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/d6a8860f015e1f8e8e42c2141a4a88b1965c32ec", + "reference": "d6a8860f015e1f8e8e42c2141a4a88b1965c32ec", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "ircmaxell/password-compat": "1.0.*", + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1", + "symfony/expression-language": "~2.4", + "symfony/http-foundation": "~2.4", + "symfony/validator": "~2.2" + }, + "suggest": { + "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Security\\Core\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "http://symfony.com", + "time": "2014-08-05 09:00:40" + }, + { + "name": "symfony/translation", + "version": "v2.5.3", + "target-dir": "Symfony/Component/Translation", + "source": { + "type": "git", + "url": "https://github.com/symfony/Translation.git", + "reference": "ae573e45b099b1e2d332930ac626cd4270e09539" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Translation/zipball/ae573e45b099b1e2d332930ac626cd4270e09539", + "reference": "ae573e45b099b1e2d332930ac626cd4270e09539", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/config": "~2.0", + "symfony/yaml": "~2.2" + }, + "suggest": { + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony Translation Component", + "homepage": "http://symfony.com", + "time": "2014-07-28 13:20:46" + }, + { + "name": "way/generators", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/JeffreyWay/Laravel-4-Generators.git", + "reference": "484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JeffreyWay/Laravel-4-Generators/zipball/484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c", + "reference": "484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c", + "shasum": "" + }, + "require": { + "illuminate/support": "~4.0", + "php": ">=5.4.0" + }, + "require-dev": { + "behat/behat": "~2.5.1", + "behat/mink": "~1.5.0", + "behat/mink-extension": "~1.2.0", + "behat/mink-goutte-driver": "~1.0.9", + "behat/mink-selenium2-driver": "~1.1.1", + "phpspec/phpspec": "~2.0", + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "Way\\Generators": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeffrey Way", + "email": "jeffrey@jeffrey-way.com", + "homepage": "http://jeffrye-way.com", + "role": "Developer" + } + ], + "description": "Rapidly generate resources, migrations, models, and much more.", + "time": "2014-05-27 14:21:26" + }, + { + "name": "xethron/migrations-generator", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Xethron/migrations-generator.git", + "reference": "50114af1d10a6fd2dca0ee31114cbf6c553645db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Xethron/migrations-generator/zipball/50114af1d10a6fd2dca0ee31114cbf6c553645db", + "reference": "50114af1d10a6fd2dca0ee31114cbf6c553645db", + "shasum": "" + }, + "require": { + "doctrine/dbal": "~2.4", + "illuminate/support": "~4.1", + "php": ">=5.3.0", + "way/generators": "2.*" + }, + "require-dev": { + "illuminate/cache": ">=4.1.0", + "illuminate/console": ">=4.1.0", + "mockery/mockery": ">=0.9.0", + "phpunit/phpunit": ">=4.0.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Xethron\\MigrationsGenerator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Breytenbach", + "email": "bernhard@coffeecode.co.za" + } + ], + "description": "Generates Laravel Migrations from an existing database", + "keywords": [ + "artisan", + "generator", + "laravel", + "migration", + "migrations" + ], + "time": "2014-07-27 18:45:48" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "xethron/migrations-generator": 20 + }, + "prefer-stable": false, + "platform": [], + "platform-dev": [] +} diff --git a/cron.php b/cron.php deleted file mode 100755 index 3edd66c..0000000 --- a/cron.php +++ /dev/null @@ -1,42 +0,0 @@ - 'SET NAMES \'UTF8\'')); - list($dsn, $username, $password, $driver_options) = $sql_params; - $db = new DB($dsn, $username, $password, $driver_options); - - $old_sittings = $db->getVar('SELECT COUNT(*) FROM sittings', array()); - - $command = '/usr/local/bin/php -d safe_mode=Off -d open_basedir=/ -d display_errors=true /home/aurimas/domains/lplius.lt/public_html/seime.lt-backend/update.php'; - exec($command, $output, $code); - - $o = implode("\n", $output); - - $new_sittings = $db->getVar('SELECT COUNT(*) FROM sittings', array()); - $prefix = '[seime.lt] [' . date('Y-m-d') . '] '; - if ($old_sittings == $new_sittings) $subject = $prefix . 'Nepridėta posėdžių'; - else { - $subject = $prefix . 'Pridėta posėdžių: ' . ($new_sittings - $old_sittings); - exec('find /home/aurimas/domains/seime.lt/public_html/cache/ -name "*.cache" -type f | xargs rm'); - } - - $headers = 'MIME-Version: 1.0' . "\r\n"; - $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; - - echo '' . $subject . '
'; - print_r($o); - - echo 'mail status:' . var_dump(mail('info@seime.lt', $subject, wordwrap($o), $headers)); - - file_get_contents('http://seime.lt/balsavimas'); - - $backup_command = 'mysqldump -u aurimas -pwindows1257 aurimas_seime | gzip -c > /home/aurimas/domains/seime.lt/public_html/downloads/seime.lt.gz'; - exec($backup_command); -} -else { - echo 'Access denied'; -} - diff --git a/db-docs/README-LT.md b/db-docs/README-LT.md deleted file mode 100755 index 11434eb..0000000 --- a/db-docs/README-LT.md +++ /dev/null @@ -1,117 +0,0 @@ -# SEIME.LT DUOMENŲ DOKUMENTACIJA # - -Šiame dokumente trumpai apibūdinsime Seime.lt SQL duomenų schemą. Tai nebus pilna -ir tiksli dokumentacija, bet jos turėtų užtekti suprasti pagrindinius duomenų -aspektus - visą kitą turėtų būti galima (gana) nesunkiai suprasti ir be tikslių -aprašymų. Bet kuriuo atveju - visada galima parašyti į info@seime.lt ir paprašyti -patikslinti vieną ar kitą detalę. Prieš pradedant skaityti šią dokumentaciją -rekomenduojame susipažinti su duomenų schemos brėžiniu, kuris pateikiamas seime.lt.pdf. - -Šios dokumentacijos struktūra tokia: - -* aptariamas pagrindinis objektų (sesijų, posėdžių, klausimų, veiksmų) medis -* aptariama įvairi oficiali informacija apie objektus -* aptariami papildomi Seime.lt komandos apskaičiuoti duomenys - -Seime.lt duomenys pateikiami su Creative Commons BY-NC-SA licencija: -http://creativecommons.org/licenses/by-nc-sa/3.0/ - -## PAGRINDINIS OBJEKTŲ MEDIS ## - -Seimo darbas vyksta sesijomis - kiekvienais metais vyksta pavasario ir rudens -sesijos, taip pat pagal poreikį organizuojamos neeilinės sesijos. Duomenys apie -Seimo sesijas saugomi lentelėje `SESSIONS`. - -Kiekvienos sesijos metu antradieniais ir ketvirtadieniais vyksta eiliniai Seimo -posėdžiai. Taip pat pagal poreikį organizuojami neeiliniai posėdžiai. Duomenys -apie Seimo posėdžius saugomi lentelėje `SITTINGS`. Kiekvienas posėdis priklauso -vienai iš sesijų ir yra susietas su ja ryšiu `SITTINGS.SESSIONS_ID = SESSIONS.ID`. - -Kiekvieno posėdžio metu yra nagrinėjami darbotvarkėje numatyti klausimai. Duomenys -apie kiekvieną klausimą saugomi lentelėje `QUESTIONS`. Kiekvienas klausimas priklauso -vienam iš posėdžių ir yra susietas su juo ryšiu `QUESTIONS.SITTINGS_ID = SITTINGS.ID`. - -Kiekvieno klausimo metu yra vykdomi "veiksmai" - Seimo narys pasisako, vyksta -registracija į balsavimą, vyksta balsavimas ir t.t. Veiksmų tipai aptariami žemiau. -Duomenys apie kiekvieną veiksmą saugomi lentelėje `ACTIONS`. Kiekvienas veiksmas -priklauso vienam iš klausimų ir yra susietas ryšiu `ACTIONS.QUESTIONS_ID = QUESTIONS.ID`. - -## PAPILDOMA INFORMACIJA APIE POSĖDŽIUS ## - -Seimo Statuto numatyta tvarka yra nustatoma, ar Seimo narys dalyvavo posėdyje: - -> 11 straipsnis. Laikoma, kad Seimo narys dalyvavo Seimo posėdyje, jeigu jis -> užsiregistravo daugiau kaip pusėje iš anksto numatytų ir numatytu laiku įvykusių -> balsavimų dėl teisės akto priėmimo ir užsiregistravo visuose tos dienos Seimo -> posėdžiuose. Laikoma, kad Seimo narys dalyvavo Seimo komiteto ar komisijos posėdyje, -> jeigu jis užsiregistravo posėdžio protokolo priede pasirašytinai. - -Ši oficiali dalyvavimo statistika saugoma lentelėje `SITTING_PARTICIPATION` formatu -`(MEMBERS_ID, SITTINGS_ID, PRESENCE)`, kur pirmieji du laukai yra nuorodos į `SITTINGS` -ir `MEMBERS` lenteles, o `PRESENCE` turi reikšmę 0 (nedalyvavo) arba 1 (dalyvavo). - -## PAPILDOMA INFORMACIJA APIE KLAUSIMUS ## - -Kai kurie svarstomi klausimai turi su susijusius dokumentus (pvz., svarstomo įstatymo -tekstas). Ši informacija saugoma lentelėje `ITEMS`, kuri susieta ryšiu -`ITEMS.QUESTIONS_ID = QUESTIONS.ID`. Be to, kai kuriais atvejais šie dokumentai yra -pristatomi pranešėjų. Ši informacija saugoma lentelėje `PRESENTERS`, kuri susieta ryšiu -`PRESENTERS.ITEMS_ID` = `ITEMS.ID. PRESENTERS` lentelėje pranešėjų vardai saugomi tekstiniu -formatu ir nėra susieti su `MEMBERS` lentele (nes pranešėjai ne visada yra Seimo nariai). -Tačiau ryšys `PRESENTERS.PRESENTER` = `MEMBERS.NAME` dažniausiai veikia be klaidų. - -## PAPILDOMA INFORMACIJA APIE VEIKSMUS ## - -Išskiriami 5 veiksmų tipai: - -- Seimo narių pasisakymai (`ACTIONS.TYPE` = "speech"). Informacija apie tai, kuris -Seimo narys pasisakė saugoma lentelėje `SPEAKERS` su ryšiais `SPEAKERS.ACTIONS_ID = -ACTIONS.ID` ir `SPEAKERS.MEMBERS_ID = MEMBERS.ID`. - -- Registracijos į balsavimus (`ACTIONS.TYPE` = "registration"). Duomenys apie -registracijas saugomi lentelėje `REGISTRATIONS` formatu `(MEMBERS_ID, ACTIONS_ID, presence)`, -kur pirmieji du laukai yra nuorodos į `ACTIONS` ir `MEMBERS` lenteles, o `PRESENCE` turi -reikšmę 0 (neužsiregistravo) arba 1 (užsiregistravo). -- Balsavimai (`ACTIONS.TYPE` = "voting"). Duomenys apie balsavimus saugomi lentelėje -`VOTES` formatu `(MEMBERS_ID, ACTIONS_ID, FRACTION, VOTE)`, kur pirmieji du laukai yra -nuorodos į `ACTIONS` ir `MEMBERS` lenteles, `FRACTION` yra tekstinis laukas su Seimo nario -frakcijos santrumpa ir `VOTE`, kuris įgauna reikšmes "abstain" (susilaikė), "accept" -(balsavo už), "dissappeare" (užsiregistravo, bet nebalsavo), "not presen" -(neužsiregistravo ir nebalsavo) ir "reject" (balsavo prieš). Visos reikšmės, išskyrus -"dissappeare" yra oficialios. "Disappeare" reikšmės apskaičiavimas aprašome žemiau. -- Vienbalsiški balsavimai (`ACTIONS.TYPE` = "u_voting"). Papildomos infomacijos nėra. -- Kiti veiksmai (`ACTIONS.TYPE` = "other"). Visi kiti veiksmai. Tarp šių veiksmų yra -ir alternatyvieji balsavimai (ne už/prieš , bet už A/už B tipo balsavimai), kurių -balsavimo duomenys saugomi taip pat, kaip ir paprastų balsavimų. - -## SEIME.LT KOMANDOS APSKAIČIUOTI DUOMENYS ## - -Vienas pagrindinių Seime.lt projekto tikslų buvo apskaičiuoti tikslesnę nei oficiali -Seimo narių lankomumo statistiką. Tai buvo nuspręsta padaryti suskaidant posėdžių laiką -į mažas dalis tarp registracijų ir skaičiuoti buvimo laiką remiantis šiais intervalais. - -- Visų pirma, buvo identifikuoti laiko intervalai tarp registracijų kiekviename klausime, -kurie saugomi lentelėje `SUBQUESTIONS`, kuri susieta su lentele `QUESTIONS` ryšiu -`SUBQUESTIONS.QUESTIONS_ID = QUESTIONS.ID`. -- Tada buvo rasta, ar Seimo narys dalyvavo posėdyje konkrečiame laiko intervale. -Buvo laikoma, kad Seimo narys dalyvavo posėdžio dalyje tarp dviejų registracijų, jei -užsiregistravo bent vienoje jų. Šie duomenys saugomi lentelėje `SUBQUESTIONS_PARTICIPATION` -formatu `(MEMBERS_ID, SUBQUESTIONS_ID, PRESENCE)`, kur pirmieji du laukai yra nuorodos -į `SUBQUESTIONS` ir `MEMBERS` lenteles, o `PRESENCE` turi reikšmę 0 (dalyvavo) arba 1 (nedalyvavo). -- Visi šie duomenys suagreguojami posėdžių lygmenyje ir saugomi lentelėje `PARTICIPATION_DATA` -formatu `(MEMBERS_ID, SITTINGS_ID, OFFICIAL_PRESENCE, HOURS_AVAILABLE, HOURS_PRESENT)`, kur: - - `MEMBERS_ID` yra nuoroda į `MEMBERS` lentelę; - - `SITTINGS_ID` yra nuoroda į `SITTINGS` lentelę; - - `OFFICIAL_PRESENCE` yra oficiali informacija apie tai, ar Seimo narys dalyvavo -posėdyje (žr. PAPILDOMA INFORMACIJA APIE POSĖDŽIUS aukščiau); - - `HOURS_AVAILABLE` yra visa posėdžio trukmė valandomis; - - `HOURS_PRESENT` yra Seimo nario buvimo posėdyje laikas, apskaičiuotas pagal -`SUBQUESTIONS_PARTICIPATION` lentelės duomenis. - -Seime.lt komanda taip pat norėjo identifikuoti tuos atvejus, kai Seimo nariai -užsiregistruoja į balsavimą, tačiau jame nesudalyvauja (nors jie beveik visada vyksta iš -karto vienas po kito). Tai buvo padaryta identifikuojant pirmą registraciją prieš kiekvieną -balsavimą. Šie registracijų ir balsavimų ryšiai saugomi lentelėje `VOTING_REGISTRATION`, kur -`VOTE_ID` yra nuoroda į `VOTES.ID` lauką, o `REGISTRATION_ID` yra nuoroda į `REGISTRATIONS.ID` lauką. -Taip pat remiantis šiais duomenimis buvo papildyta lentelę `VOTES`, kur laukui `VOTE` nustatyta -reikšmė "dissapeare" tais atvejais, kai Seimo narys užsiregistravo, bet nedalyvavo balsavime. diff --git a/db-docs/seime.lt.mwb b/db-docs/seime.lt.mwb deleted file mode 100755 index 7517b8ba2dac3318d66c5932725f6fdebec6b25f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17210 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 diff --git a/db-docs/seime.lt.new.pdf b/db-docs/seime.lt.new.pdf deleted file mode 100755 index 94dfdaacb0b7999e523b80a81a87e1e38a2cc8ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82764 zcmd4319+v)vM3zewllGf2`9EQv2EL!*tTsunb=MynAkQa$<2H|=Y0FzegD1Be{Y_Z zwfe1Ab#--hRd>}(D*H*8hJls^inQUh@)?SWfS$lw&kTy2n}ANz(8}1sgn;=SBo9SE zKtLyKYT;mL_x@|4>tOiFP~Y0X5Q>Kf%HF}wP}dU5C4JsgBI;zscCXV*=*742>IER6 zjowIy&j%e#yBnH6jK{O}J3^_&P~F9kA0c!^_~m*r{YEto%dPAxMO%za#BsynbVS>i z_x{o%xWVbCmmYoVj?Dh|k1m`a^n>GXrDE&Zae3*M-&QVp;X+^W6eUHT!tx3My+eA0 zJbzSq^S*8>;l91R%?Li6U+usBV0y`dCrtDBaqiFg8uI$%^dhMXNeR~*ub%UD^zvLJ z(8}&^0GGuJK_w;CwIYtEGXtJ(X`e8_0cH(G&2Vdv)bwb*UzpQTe$2?`gO4IM9_Q(` zvh$n652lB^!B@Ie*$X$(54aKY{#TiqWhmxfy3&i=5atllJF~y_^t;s8J22=B36jo7 zcK6p`NBM6p%?`cYaJ_tl8Bp6EzXbJ$9?-D`y0nU22R+M%Xs*)s4m@j+Efl=@-W^>yjd%3RUnQK$dHmiXBC^TB^rwpFp z{d|1x&H3Ye9lo9{@<)(q=qY^1GK=*@0AZmAjM(heMn8-An7=q62-_zaYer!$2%==b z*~);X?M>1pW`k2~*s7HvU$jmZiF%yGJEP-fL<5UMVNr&B-v#AXihR+k??DUJ`S8Sn zE*63+Ku;yq%F87(c@1UAmbh#JnCYBP?KJ|m=$R(PL-wv7(zKjyA zn;I6$@1gCT-)PDX61pT6FZpChg-NXoiTf8?%HV(g;?I(56xA}CIB!`SQAU$G2L@!Q{hkBenH6R^Bq>OXx zdcT{~m%Hb6E1Zj%shn{y2jxK>2rhS?t%ShhUK85jI~bR&#^-O?$Qpt<*Hys+3W*@l zG!(ch%LAz)=83n1lItyz$}a>oT-BESfTr)i)SqmdDF=%!{luVyTALf;cE<_-s-%{mHD2b#~dFZ0O+X zQgZPCGPJMB6A?sL6gTmf>Id`8$<`Pp^74-F9Kh}YbU)cXjX9rsJ*4FUsgRrX4dLu( z-Hr)eA_)v;@2R4%5BvVR!=iC6=$d|ALI~daEBn2>~a*I>wlJtjj%zO`UbQJT7UI*P+|%y6><`&;?%?! zv`=*a`BsrKANq2NMA*{hpng*Qdj&`ZCkG$GQF-R)O!{-QsZ!lrf`q(uj1Xq7U}S$3 zNU(AYNQC~nr3C4)uzhFn(nSg9SFo>6BeVVL%RV-ulQwcEVD!X-)vU4DieOZ-D5812 zDw2#l1*J#{-9QZcmrUPWIW)M1Ktu@E?!3782NJykj1GP1iaX;D+{0V%EpRUjnvL<= zU-ww5j-+!kmYLPcI42jZ$%;!2J=WB6j5pG(pRiykaGPt`BOXlim-{-#frocZr8EV1Pj?IzMaQzLxOz0r;jS z#wtX}t)O#w227h0s+kd>f*(*Bv=ambtaJRy6NL}L!zOavE^PGK-vvJ>X(fm%Zo#Gk z5(7I=^mc8cAt*y|eF>Q_ZU76nnj0PD~gVjhn@1w=GK8lMn#|cf-pu4hU7Ko z$cbf-`rLi==|Nv@;u;nl$4B-B9mruAkFSX$-4FTmuieK`!0Fx`V99ohFahJV2M__Z z1+r**alW#%_ndqmRI_aMbhaX^^PE~@q%(Fx43N?a)kg)%yw*-G8dDJ7aM_;gIY+w1 zip=& zm2SDuJ{88gz|H{1_W=Kj#!p&GGSLj5H#UiD;n&QNI}RMkQ{8jmfisJf_Cvcq_vH(& z(2ArEnw$yfp#-nu4EC1=Ep8{hRIE?mt)vbOq;7;3&fxXs$rmc5{YL_jZyflc+Zo*M z!K+M79WiX>D6EN{s7{$v6$>Ji^X}IvzV@eC^bePQ1QdRQcVUyhrs?u%NT?G|(=Pce zd1{h!$WD+Cxa~DIGA&XEDL<>rs+wQ}4&(1V#95*a2XT%n(zV_*?FhE)FNDLJAut%< zAI?B7>9stIMIuL4c#2kC&*U^Dj9kwdy9&i~G~UQ(TZn!X2L^2ij6_&NXwAcPlpeP97|P2_Ga31bFNkGzBAl&~r|?Go5%2-L|E! z-mB*a2`V*IzREJ?c12JY81V!PC#0qATEn!(KI$_p9T&}|8LU_`b8E~8NWpl?huHOx zx6gtdNN(BQ3l~yf!&xP6;M?7S$jilP&Zl4I5CsJN2Shd-uW`gQT+S2k`#)iCy0@EK z?(lTw$0N6`<)8kLM|a3J;CxA3a4Gk<*q)!2llcyg-gGUFv-iBNvC}61Rai+sHv;z- z+r8t*RKI;6`4XA?u@o*6IW#;n+9(l%eqP1^GhZ+UUBFHbGOx8$i@f($>-Qo)t-_PS zd%dzbvMO%u;lt}47J-s+c z=~s<$u-MgrA0}chQIdG8>s0zD5k)dl;tR2rzYe*mi4kv`nk%FByi19I7(`_gEo9+v zQw!AY+aj65`|x?F8~me<+j~{-iu%f~MrFs$igoGe8am5wo`IPry{}ePfCpF$%Q2*d zaYpFIfY#X5jzgEa*sPVPjxEcY)w*GaY5>j*n%7aFa}ll%&{BETYmsvO^4}{KXIY&Q znroFm4=lkAfwdN z2rced3TXlCHQ)@(@HbPRrnUq=PTnrgV{^Jf^is-mHrWe%Mpvt^LDmNF{|HgBM?d5v ztN1Xv{Nr4!w)p_Os;+4?@jBzbTq+9@$$>W0mnSsrW0CNu|RMzr1$e`hp2W!54QzmZ_r0iDm0kVpY+!@^~P^AJDA!P zmJbrTaZzchPUnngmgid6zb5otKskM&GIeq_x@;tc^vBPa zca#5y8lotF&$elqwlM;r9imS#PIzn}*r~h0N}{o9y(QM7vsQ`hqoBM)wJIHw&#*n! z7Y!i-gE++>jy~%It+PV(5D|dvgn8-{Z_!zMUIo6AD2*@22Jr?D28j3k7=kc@)@`zS-@&&I{)#cHKlMyNf$cn2Yvo?Ptbo-fYnNKtt_`_q{K()M9nt zHKBCR3pdlf`INKa4Vg|Xq1D+MAeuW%xy*uKTe0LfJ_f@xZ)k|>Q-9xd{9SLDhoJ!^ zfy6{}5n1t6fAArT0i$W}rG)q7RtwT6@yo`VF-cs==jkoo%>RB?x_Qf(+2xzaxO>RI zOOFg<#~BlgAU1FG(iDd?rcN-GCi(@7C3hHU=2PYu;SFZo31rFJh#&%0<3rqAqYwgL z=|bmKNXF(HVrJ@36R{2jG1P-Ri;*8;huNSVPsBGwx4-HaWIS=JwQ^E!O| zWbCK}8^?NGs+$6cBTPIv?Hsxfk%l9X+gN;+7nX`9d!(cI9qgPi^ zXeoF^Aurm8jhD1?u8YDg$5g{Uc#L%#y~gO?NnP8VcMR=G@=)p$Y-ya7pwxK8q`kdr6d67qWdZR(6vnR~ zV*klR8Q14EvUv|bygcQ61;LzOZ0B26Jf03VM*<0slWh;88k8Yld=h+q`C-@#i;_=0 z@3ODM*~f0jDVF!_8s|p*Gjx^FwGF9A(e@|oqA8?`1onOsZbPgEn3&l zBl;TwDm@dI-rC3W(Rm=4iT#kZ)uZZv5)H zk~x97DO*zH(%;;R^Oq6LY2zkTK;8K1s$qhP4TC~B1Ib7ezZ2d;*RaZgcYZ7ZbV~r~ zMb8+agD~+`0}n=Ou5TaePqqZH_#7}2w8aFBrPTy!19oy+?mOyt`tjWc*W{$EH!%NN zEq!$oxauw)Yg-ic(`>Q*X|_ndn=Om)W=s8?XjYT*A*67m^$$wXy36GuDCJ*du)t%HfD<~)a8}m52;{a@f zB;Df>*;$K%D0WQzybgI>zBGT0Heg$>^fFCLZY%qzFv*s|FMVD0oC}uBzU=4(=(a*= z$hdmLsfnJpNzit5)(O{$Ydg1{QTP>*+Kg#JXdI-|@SLEd9pF@Fu&sJPLWeKQ--E-% zJxs?}K^9D6Xd)hFV5~I!zhBC(0zWs<#i0nB2=7k^Yl))on{(Nj_X-wyt{qvC-Vsx< z>kt1S?5Q}JT5G$sK;N%e=8+r!ueidu`KE3{nDA`H9>Wd9~ zEc*PiJG3^Q--5hu z`M0kymj$rAn5k=++n%eqrV-8|h_-!Tpx#P2ZN7=Uecv(>wVaH7J1Sx93ARxMaL)qW zTaMIb!`h`X@GnSB{BQVF4Fslh9tIJ4A`53TIm@>mE=F~gLWuX#U%HJ-+1wB)7POmh zm1pXlkOiz`){xu>Hx*+b@a~r3vSrX) z2EUqFSD}1l)Mdm1g2i&)5tUD`Mj67b@`?W_Mveg@{RxSQ&%LxWmh55^_*pYc#2-x_ z`{wm)97ryvOGLPL`&q%Wz@wYYfQG{?Pp8P8NJ}%98cDFIA^JeifG`IO6b`Zkx%Dk= zaei;z1hE8gimJfsLoO;LY5Zm%QoV@nwD?yrHFZy;edH3m>==htCUC=c0oSk7IufgS zeMr~l&OyChT&E?yL zH3e1!T?(%dpbK4{dthG%2KY<4sNwc~JaG*!;qU*%GXRlmT@k9dXF4`$rv z!7Aaq&LoCT!)i^$aO&i6%Y+F+V&^;Hn%gGajmdpvOx28_tj8rW5@1Mj7_)`YIOlSf#nxVR~hx#NFQ_$26^|9 z=Q(d4dp@O^@9}_2Vwi6iXY_75GJ<4i{KeKJT{e(dMi6CGp~cE59UFcT63sQ4M4~cmt~8~^v+s#2NkXO zxNn-0f1~&5MX-#(R)?iDwO|=yj*UoqKWWJ<>Ma=yVbY2=ON$q4!T&WGEy;k!-L#54ZVLgJ>GYRH{B{&@Ar zii00vu|y5G5QBiRZ(TKc`gZB0tizTRdh7X3VCB)mLQFqR@>6S}MHVU2vx^c*bLVL#!qaW}?3U_!#m^kh#=eO%c3&Cxa535X__8?%MW-T}ScR;m`p5*H@u&>3C z@+5e-(8EA}#1WrczFb|Wr8HvF12s&eCGXiVL?G12_wyi*a>wj)gFlmy)A@}I!^%O2 z)kHX8#k5ja{H8x95UThR7}H#J@3(}_P7Ns$ssK7Wvqr$pZ4fP%IE!Ko`N8B}N>fhy z+?%$M8IX7Jk?dz#3j8ny4IT7QD#SMll#$y znHB08Ws2$`9zE)z=9{}^m!Zy?plCBZ9h7ulb5HeTy~B|d!kZXo!|NyfgeGw=$5-_- z&fWz}vZ0~ch1mvIVbBTd2cTwZ|JLT?)BL5t&k#e({&&+<%LSA^R3ah+179rS%$8YV zO>DCT0Ul2Z36~@Tx~b2-R5XZwpUoQPtv%Be_w3Z>A2 zt74i1`yf4v{IG#QhW1+1ND8CV*h$O%@a$kX%3(XSP+Ly=efZ7xaGK0#oJ^nEqj_H8 zl6X1RTFKyvER<&9)HU^zR0?s=QnK(j+KRk7n_5M4XYsF{>GfaqvmP(LniJt=b!sZ<7P3 z^8E=#9ivd{UZ&ckC4OHUrs2a0H-x$Q6#)J$L5me_$HU0oLX>Us#b6bP?fy5;HTIK2Zy*6)PhZB%}7Oe|FgD znnBNO#O91Ki;L6(L84Tgm^6#Bo&2P?6L-zJcn_Pw z2}d5*mx7O$gu1j<{*9CF8X_Wk3n~$omee$C+$w|)6A|6j$s*RBX6O#wD4VwwP`Yt2 z)1&~mxEir`VolmUMe!+Jv~q=Vw51NU3?!ce82nU%tV6lf=2146 zk{+x6`xA`%#)s3pK?;>JmsdDH`>(V9CIyAz^fA598vrZhfXd1U5QMH`t5KxhzWUK5 z38+A1b9H=i5g_+UpEm7y3qDJsPH~=r;HkG#9D<}*WG-gx1p7>dE!*CPRp>9S#~O>P z{v^1t`9iJXTqGAi7#${3mC6AoBvRMDIz5Fg;l%8hEa6o3)X&v^&D2>5@UIvp=t$q3 z%wZw=q7IWe4za{b!GiLOu046Jwc2D~gLJx@C$ZfR& z`clU!Lr3>d4UT&!-2^U??r<)FeU=n9(^(apRqLi3SsfW}MXgo^q6SbI8MAd$c~D2C zEKD`7#@aLs{k9}9SeCqiNe(R*$i`HWHm#?tWNXe2^jW_! z7ja5`B6dDa!UAQ&kdf}h4dSv``Z_poy8zM~xrq~1RVr|?FF34%j5>u9SpJ@ce z(FH~tALyM!`-bXyBsM&;>woO!9|YD3a5^rS=W#YHn?BR@cG^BY9fP_Gx0G5p95n7~ zS7|Vhth$Y%7wb8jHTR_Y@bR5Ctbs{W?-TEeV}n4#AmIgLe>0HJqNJi}NwpkKJG)d^ zms-=<6EPRB^ZlR*xt7QcnV8|c>81_MC9_PeiBBZvVS{(hp3NLFp-!ce6Y9Gasc;72cWnsmyGTUDNinuVzy7)(}!~+NXo|7QfkA+nVwfk9D@{Pb~owVHU?Kjn(1y zER#LuEEdGJ*k|=dYy+B&m!1#~ni{9D^yW!dM7sdKp0$1J@%}}!14W)(Z&i_dadSxR zXJ(|T{AkPao}n_Nshvv!N;dl`!t3q=v`(BzFoz86L?#3QQgh%o!WwK#U4=ut%NgD| zC+XE!7o^bv;~M+LYdjD9;s;Gb@rS(Pgm86(=j(Ut}wJbDW6TOcG; z#OeEPCZfrf%lT2IB7yaf+d~wBOe2V=)T`H)Of79xI5&$CHIPmTw=>dt_7v(ND)!M5 z#f?^f^a=I-PR?mKgHz=!RFq@S@nm>+$1H=8j~QO*eSAutX9uB6m4>#orU$jWZ&cu6 z)w94pbXR~j)1R|6IX&}k>Al}qt5aM{_4y8xF79xB&|sD$P=@sEX2g-nJEtX?u<|{h zxCoF$$r^it@pg`Ll4;gx(HOXPMi4>H#Ou_Ev0%ys=u9wRia>f;B?el&BlL?4_jXu- zTT2l}aQDD#4)x4IZS!){ovX}OH2dfb1g~}altobBtki4$*ApuL9(( z_^aSHUz9(c%jEh=P%0JkoA~2|^GCeUq+ZiLnS!y3F@b1oe#57FCW|%9-1ttP2nH*( z&hbp1(ttP~3de0b6(|`R_8iE?VbF;aFRK6}?20v}=1(O^-ZN$l-4UH0g6A2h&45;Q zZh7q@ai=|8%4koXT&y?3c$#+17G+2=2YwvC-pLSfn46-_qhDWF-u-57|I63B4 zYzve7cWJ6(tw4ReL_0|90G&HQBCV)Vpsa?i4zCR!*!Kvx@mlSIPoiY6 zKCJ;S@G^|*aJije?LQWtQ6LGcQWtyFf|Q!VhG4XH)vJ|&T2yz~IuEo5h3VXvx^}jm z#Q#Mbl)2g7RL;hSMzp&r4He7HknpA$wSsHG_E`!P22CF91>d;`NsRE8hu5x0Ky~P| z`#q1j%nwu!Cx#&QHjy*^lp&#y7``-@KRrEIbh2CuWx#4K&mk0M&Pl_wv@&w4CfK*T zFhViJEG|1%PdYy{AU|+blT9ZX$y;OCwte#(AEEAS4Qto1+$&{Em)tPZ9mGRkY$= zVmzss7HUN&9AUc81)9T{fM79b;lRcnCgVw#XgVdrB?|bmYBO-k`zB3=Y*VuPhXEgO zaUmDQ_D&C_qz)3+B7#$lgJ#>lNcV$(cAx*)6ioFYAsBYLt|1NXN)8AVPyjJj(Qi69y{26t~i# z%Ub6poSmP^=<==3xVj<#NW)2ZD|CYnmfX1u=2e1Fk3>3<-p2w@1DzVO4L*fJPz9E{SWJA@SbO<;ju-+) zcdUcIf%O_9_U`+@(trAoDrgvfiOVC-*pF!Z|z(~8MAONii8P)kLD3JgxEak;E&)A`+K z+Jgeh$e^Gsy_d3L)&y$qml%sVjb;cL6)ZFfCFb|R3=}BHVny>~vPIBp8^ykBFMyv5 zHo8|^isPFQ+Y+3xq)KOm%ch^tQ8xWD?ySp~nQ9HZ-ki7V^A&j`ILzxG6H;Z;#74_C zKiE2sIUE`7{tz~1oC~iD1um6sVl&8?J2hzr8dy8`so?~UIAEQKo}&nf6dG$rD;13S z5)G0jy+RY%j>%<^hnO6{d5m*wwI}RODsZn(8GjH#C z=&IjbU}O4}d*Y<2(;?SzJ1*S926wJyB|{Isv+0Z9qZqr_(L#LX_f)j2$dSqj zBd)4%*0G6tzAEOlbxfts*TV6V1cARg6U0K~dMoeZ?uO$`^In|EZ79`ERM!tY>#8A@ z6w}4$u1qkA>xxB>08Ju`rbTnUV9itxaiuPK&%Qeoe5LqK!X89ZafvZx_0yLi%0&L% zmmoBq^1iEOXt6_X-lF(i*q&BRqvegf#nfM}R^|?D9T&+aL%I`~5{Q9y*;EqP0l~R( z;chA*x~qrDDumyk}uX?8Thv4pE-p#)p3L>UO7XB=l-bCi3*_?xxcjFmG655M2O z5D7b|UvL#s4+R4E7-0{EH5aA;Aa?%M(-(s!RrQ8oHL@xSj0F1H?prlCDJ9eKQr79G z(*XL~orGvW%jUBK(S|-;ES2(#kBhMf?+eep93*0-Fv+z34<7>9oS!}f5HCM{2wDw_ zOn>nqqu#LeFM#9Vv4H6R9#4Dk4;>_1;|;Y@c}RMp59p|mr#Wto!s@H1$l&aRd{94* z+h^HP=e1D&z%pb>O(yqN3+bQ~JnhTd9`~ZQiuJ(`KL%ZCo%LS$6S)#;BKwN0*l@oOdvdff z?4UEvE$vg!@yTiJqoZ+?N)i!xZ{J0C?MzM_QST|&iUVp^i{L_1YwH7kFuvkiRk3v~q636LgD<`^C6eQ9Dn6S3L6Nw!uy}E0(avA{= zP6^VqM~!QZ$!*S_G=91zPvCm!!(Kt2xLtFGZHMtW%y~Sk8>#4)_GayjwC9Hk%?$J7 z7Q~SQ!zHq^8<6@JPwhZb4T_dgVadJ32@50Fy||8;fF5{76|z9h7|{qT?6pS7`^{#X zedf*2WbRC;G`X}YJDC;8KE_c75eMrA-oGNU^B;^VVF6|E0r5UWPgE(0NEg`ZtrLO@OWvl)ma~`b` z+VEwSC~6FKr^rVQV`v`?*mQ!l(lPN--8_4mwZ<&C20Id$xCcr1x~Pn;f5_u> z`DxrcYtjqNpEgL%GR5ytjBG7YZ0kYGc(u2NU7q9@v0cQJo!Gi9Hk zu5*-|1}CFukWgo{4QE*NaToU80MnE+8I|Y{hf0Sw4KLtoul((_tsyn%wxP1IyG^|z ze4!+WWTqKI)?W$li5<$LyDlv(Mu%C#Ts}*8-e$(?4Mt66)a4aSZ6v-(~(({HoU9(A&Vl^}5T)ZFi$&y(+-&rFuM&VDdjj69MH2bdK2oyTF- z(Yc(XKxjc&rcRD%%z{({MwQ7(^788D@!tXh=&{^_34=VK7NloPzK;O&lwl=eb|2H* zAy^kZ#74pR2km_GosM@;Hf9k)~vxkf90% z>q4t#AGgS|OxR&~=keLVR%8(!mt(Kz2t0WKZ@o*nB#X3?ZZ65(w=28#16<);ow^Qa z@P`HZ5koi*f8`KyMf_AHpyFDktVgVUR(lsiF9X5o1IkJqiFD$zsw03KXOO{H9fNU? z^&nMfaU$^O{2PFkPGcx-HJd&%0ZfG5UEoK?Cp~W|RD#neCmpHemWbnQbIIK;y>ky( z@e{2511b+6dnD!l()#8#nPzQqxCu9gRPbgpihU1_SMDw=1-?s3d4aFQBI-du5{@uO zk6RaS88wQc4fcJD}SQYIrzZKVxGz=X-i8Ew0XnBuQG#<%0l04rIf>5jtm=poi_t z^bt!ZW6ETx-xO$d(2dL7X4ukwGD223DH4iC>}%xg0YiQl@#p#Xd-{XC_j`JIn{u1~ za8Vyl{qv$8Go_&Gyo`YQq#*{iTvB=FLUtA&rLHonz4w-Y@zaXyxHf`{+gqk*r*>7nOuPvR2pb9V+dwvALhtx?6Np5 zn|9g{WTn7EaH9}iDNP+u7VI)7K-2Rp<9+Lgu{w-F?e=#o?4HWg+Sl%(@>n*_#p;HL zj0GNZ*2)Ufl{&zj=zViPc#f-`T^&XRzm3&jG5_Z={O3#l@7w=tiNB`*Cn@v4Yx|!c-=8J_O#PpX z;?G)trv47QKXd;~{j=r%iqBuu|7!hzwXOfY|G&2WkJ5kF!apkeufYEu{rov^{|J+R zM=$@V?SBUT_Za@)#_F$_|MM9BUCG~eX<=)tpIh|rd%6(~JqIzu95U9U{ z=n2@F8EDzrIoMd42^bhS=xJG47#P?Y2sD4GEclMrdu@AypFz97Ru{3ecC`5ms=s#k z3-otX72c7s)3vg<`PsF;>+fK}clakmCsTbxc@cr1z~9C$Z)k7rXs2&zPw-RQk^k$s z{#1Ydh!tk|6P3RU7XCTpUs3u^@%d#O3XXaXzmP@D@^`wZm>RrC9y751k}qm#YHadO zq+g!|tu3tW6l`?$-|6@(!XkFMzYK#;z|_HB*3eGS+S10_>L*><|3i4Pz78MoTZ}Ih zJSDGsAY$OUHJ>#PaEV94i5JL_vhIc)10Mh?9sqfD8~A@!0e>0TZ#p0|^Y2spQ(yai zW`B#8X87;JrT=Fr@Y|HpiM=y~osIR+@N5DHJI7yn>~E;@6AJ|?U3+r^hCgQYk0|bp znNhnL8x*jM&UlGM9$zXtb(Q5#z9#vi<-_pEBsbk4`Dl3y0%`1=O+AQRGzh|wP5Bwc zFD<}?e890^9QV#=O4dE>_o%(v?3I-(GqBlGyzdrH(Jq|v?#?Ri&Z;1loW*zUJQf1uYL2Ii7D4hc;yEg|83 z)sQD{4zN{5Q1B>@)(y8*1>jM{_!5*+axD7!V+mzJBGwD(13ZVcnao*m3Rqb-&I(K};x}UA z<6X*Q{lO9yr8Z)?sEuCrmi!i{{dS&~^f!$D7h{K+;}1?}_$luGGpqk%uKcn@{~e2+ z;Xf?)U!VS!#jc~1Tpt}40|>+O@^USc0NOY5aDRUO_ECV~^1=J^cBOK2qr=mEupxAoN!2*IPX)WMz!?S2~^fcHRDZ=XWLss_7|zd&37<3Vs#rmX`x- zY13ICB;x=>`wmW!*wje?44k$Gj3DtP1+Y(RCm-Aha4EOej}HxCH-%FEZ%FlX{J)Wk zo#}Tj{vG(2mx3_d%cMJ-Mp4ds|7N>tcU6%*7aB`?&Gf2H$%u)jn>@EJi0+_oajeoe<^M%7{Xfprzl{IC@btTp@LxnT@m}M9v@@~z-aP~y zASuVh^lw=C_jeAxb0`DrpRD}5BJx+M^M}#(4_WzFre`2vWMHKKMLhiqU?gB-W_*9o z!_QUlD};%Fg_-3)NQCqzeFu`0Miwk*i#&xI%az8AP|Gs?72FlE;P?MQ;lW0(X4m`I zi8K4N$FnST7Gb3dmc>-)Ne?r{7(|NFDae#%Y~cRWQ;mb<1I!k{tHj2E$_Ywgr&@;* zK6{n!qBz{daLM_Zez1owSye{I?6|su4%~b1{t$M+2n`YaUBfQDPKDLi{c7e0-@P9c<}+_%|@^knVIXoKT2w7 zXaML>z6k*2@)=9ma{)ZQ5j@HJ*?tKY z{5}L`0*la8U*lj??F=j%D*GanI4PWRz@z<5XBYs9k1Kn2U-V7vUv9toi_;lc{7^ z-Ft(-7J-iTfzUTF+X7+$kJFs$yw!TQ`Wn48?uKimQ-1{D48O@b2BCkw{xM0`Ap@Jd zyt3r-3Y)}M3krnsDV#dv%|Zk+9)1dHa{5C4N|N;xpct`S=D6yqxknSqr1* z^x>{B(PyvLdbXFSuoT$t4N!;Lx8sL$Gwb`N4@^`(J^e3q6Cg<4T!qr|*hDPT{H~8St z;6D5Z*7#WgU%e|P-EY{gXOUjaJ)Owzl6LAUAJ%Dkh)G|Cy`-rh(VxrdZrRT536{EI zr~$xQx?-|Wci!H!axd7f>ZEqxpIuA6@9#cqo>tw4l)Q~U<0xO#?He1bd4J}iS@gcy zvd}xfS&zJ|tDatupS+8B)5|(d`!V=5_U5jb75IuhXpC&+4ehD7=Z*Qs@%Y|cSpAQc zvm(P==lIFx1#e>B&laz>02mf;0$JD(WqC5MZy&zMNWDlst>$iPA2S_SQ77{bI=x2S zMuorLUA7c;ea=ew{yO8Wm-$xvI{2N@*6~TPeYC5Sh?j27d&wv<3mpgI1|YSY$GZ(g zjEk$gi$*F!d+U)HSYW!;B@7YpQ8{o?u=SHJc-V3+Lqkb}`InXAhZo#|7ma=2oBDf5 z_ig|wTRiyK<>5g0T?G7N$k5N7?(mqu@tCQUo$>?X>G-VW$fyxE$xE8Kbbkk5#62 zs2?#Kok!^z3H_N_3gxz4$IE`<;zP$#i_%fmnbZM3*xmPulrF*VZtVO#4^lx|fFWy= zsUmgTM!95B>lYPOk=_P-&>^@;6=C=vDvfZ13c>o6)*)(mtGI@i5_}mS}_d0F- zownOX;5=7?qIUgcrNON?2+G?rK*r*t!Q$Zy5suf6rYx(|H|xbYdwU8+wL@yH^KP?G z2#ZAgXaoRUC=F7P;J~eE;Zp;a_Oe}M#G^UEZmeg{zE(Us%=y%}hjFPra>Um2EDcNd zQx+AK#EVwc$e!Hcn$LOEiPHKHSC89hCjOGBIbN8Lmj4SpK*PUi#z#_bOU3$eP}1u$ zul_Q1gEVg=!}2h5dJWz(d1UML;esVcC!h(ywz0HM6nl16ZFwL?5zZy3JiVTh?&{c} zmYu+dTKtGvS$byssf_KW9eB#?b zSOrAOy#@o30r`FCK;l7dQK}3b7ZW|p#sA|$N=*Q6KkJ)?zbF|M()BK@r@U6B+%OOM zbytc5>JGNzZ*X@ZsdI}>noP}!j8kB}$yu5tTeCD^YSSRL2Y@dFoB+w5zq z6mg_z&IC8uEHh8&NurH*vI2cCsS=0Qyl;Vx@8PEW!hZg?S)k9UTKh~}@FI6x z2RpgO!%P-q4{S}5O6~YQk5#d2+wGQBiJ_Q}K!v9n4nSZkBolz^SP|Uoik@ziODf2f z*ZDwZ?x$k)9NE7(wv~btSN&)PaYPNv5Pw$OmbW$$<*KuTEcd|8E@>NoxrZ)e+gYs{ z)mSme11HSfqs5wDsQwe^W_6=INaBGVpF=6VSH#uYPz;H%*@e)#moUSIp`TumK;%q0#o$#=K<{-dmf|Ood5bbOCG%K7Kzof;K zBpHqxY3aLw+OT?1HIhG&H`q9SVev49K1h_$`QZhMgk+#VcEcAbhE#IxD7;#*ev z8(Um{aAD5Gn_R4}e7}xpRCV@!=e3SgrVvNDQKYu$ns1t5zCJ?v2v{TKJmP}j*CoT0 zVK&rpV>3p>Xcu(um(s2fb?T~^K*{0*@ZILD2nTC;{QD7|%^&0_#Q12;nrtL-7gF@n z&>hDv$jJkf{pX7bM|8xp9%fpQ$UDOm6JLI#2S3nxG72nc?d_wSn*VH3zlEKeP)E|c zeNP*=jPN1&vEYBDYSuro=Zpw(OjNvY7rDWd#Kz9W z(*wu-LqxkxF;&}@CV}VegShN)%X>g*znz;Yv8ycKgX*Q2YTs%oN1Lp~(+y)mOkYL> zisHEsr_i(;Ud=4K)oBm>9DnQ8WIBoQ=~NdWtI#&(lG>LnO5vsDdq zc+g4^7v1YTB3S0!J>O&yoU~C>K!*UH6sgMnu=2L9gU(Y2q@=ED#uG%zIW=XwNrzv6 zYdrXb-&Ov~0zoCAhaUQAXlJH^Fi{FYaoiy}KgoV1Df;?(^AwKA12xbxKA>AYx@X9d zb=fJxMBMhkk%a;^fpZqTGN$fJt_f@A$caVfu#sM?#+f`vfjJ?NK4eXzHp;jqSQ`Jw}p_C<^?9md79Wc3FeJVm8D&2F4g z+|kU;5Xe04u60tLf-qVZ$X3+w(p>#zF?wp+T7hCz=wutGHa}afOP9{5)TxzCv88FZ zk_dbss06BTwL&vz-|{Yvm1weIAtmCG^n7(`NC10bg&I7~2&>1yZ!MNhJLziEhGQR7 zSo%oxB<`P2T3@bG!p9*+7#!^(FZW6;XKca=s(W7UOCi=1?m_I7sEs(tJTFcR4Bf^9 zB$sf%N;9T)P>AsK8}WArCG1gjWF_h- z3ttn-M=THIOsv38-?c0v z=2gcZKSvGhEnkgv+*y`j1Zjp}piyTc3m7Vm{S$uP6^bukgR|3u8WlGAehaZNnQ&Bm zq3`{v;w5Vs)fXKy7v6D)tfYB0IuEPCQ%Q*)2(hz<>3;&spXo8Zv*RPrCqSu(T4D|2SM@2w`Rg}^qM7KCz z$ct|@FQG?BpL<{~VM=7QAb6W@7sI7xvtw$(h2j4^fJ>J8#ZajM)b5lF<|{YRT7>r5 zNh`3!Ax)SW4+boaU$2`rM>bOB%nX8@HrVbOq?ky~r}g)Q#0E0V&GRl<3GFE0xYBe) zN?R(yCk0Nn7BDhB^^~Kp36^LTH+{u7r=o&WjaAtZ%f&=S+QnjcWq2%E-mX7S9_Vn77*`b0Y6!gXTF8x0NHHS6pqPO$J~ zhBZ^pG>u;iunVK!LWr_slgi!QvgKr1FIc_cgnV;*oY23ivWG;Ik15u{07#~SP=Z%W z`I+~fd}}bZ?&WrRUv%_SOK$>J;dLR0&hghX#y| zicjW=k3h_d$2>VHqqM~(DaBe()v`8uDiZRpWFh>z_?~UAImiPM^t%lkWSZ8yi4v-P6dprM-Tm_{-apD70@Qvj z-a~SLv;+?XC}!81u-I7m=*)4sIzV@+_C@3)8ZV6SU!VyvV@6t3kmUqPEY^;bk@7u^ zMU%vq2nLa>8Dhse7x}gra$|!Xp0g*Fx9p#LgEM2Hq00u3 zq~g3%Xm&MnYNHhT71(UC6LN4b-1gSv2n}!>I3q#b6eLmz#jG;YCb#UALX24GC0p!S zH{u}3rXft5*bS@J1Jags8S-_X2C9HSKSfF3!3=Uc8Xp9z@= z&|9O*8RnxV{9=)T4JGW|Yr;fjh*>MsFB4ikUluVBI|_&DU#V zbc>)qWYOb(&0|7b{le@KJZq!1z{hz-gA%A8xv?D}YfNC%nJ@Ce7-DErISHbL z%}HsjGZ1>?BcZ4jqWgWa=^Orj2=neix{OJ4e1Ws`(!v2+mzmuHU9OA3T)%U=LU(Ib zfZ%!`@y3TVJ)v#VgLGweCZ!$!7xT>Z5YCVhU@S-7<(kF2Qcq4_b8{M7s~mMvpr-($ zR?s%oN=Q#%>s)dR3^x&|#eQgbCH|MTtPsC=Wr6q;0R>^OM^}PDy`>3kf9aQrbIt52 z&Pl2*7n|hJnPBOTaO2?g-say=X150 zyUW=^VF->hzx6E(RRyC7ToQNO#0Z8~ah0Jae3iES~ zDZZ9O{bnh_GZFTnZu*8iuu~Tn6o4c-hf>uboBavqCi zUA12wDp^RUsMv-|0u9~Qqw$rN9Y-TGPk83LZ3{FZu$uFs>b-?Et}3cK(z=CRieG^l zu6}j;WaTQ;OxYq)*=bcZ?MHEx9-nz*V1W6l_2~ru%ZjF}6JRo*e zw-rHz)TSYkUahwJq7_`InVAM(IEF{a({&XyEMr$guL^!%et^KryJ-38tOB0;?TI&5 z6z=pfs}kPG5Zji2rQr>9uj<&qqc1B40hnG#ZkWKhHL_u(1a7KwosRHi5i3kzSwUNV zQ#P1VmqK4=KzqR8sF%90K)=At6Ves3^TR|^HeU-}T9CyuSnXCpXYoXAig@O&rcPG` zmcG60ynpYk;2{#xNZK>~S;1=MM9Zn~$Q2g$c?kzOtc->rayp=m#d&2M2;-A7Df1h@p8YSa2P^y~>@ zL{NjHhG{O-qX*dg1Z1tK)htWDL*$vcp%m8L?6i)-+H9*>BZ}n^ZSc7)m&^RNS>pqi zsK^{ZTSSQVEJhpere`2aFYbq(Aqn)PO{vc9=;lHbobenC<2lOYCibdfZ7rF!bwi{s zg1(E#mzQB2ffIiP@$xB^5P9%ieJCNX)drINNOmSX?eeK^+Dw2aGC2^esuOay-`j^? zZyH|q<^0X?gft4?XCn!x?homWBcLZ!sBGz-9Jmy)A`__XoBGpsf^|1nWb83u2DH;z zGBSJ?4T_cd>7c9hkTfQwQnJbI!h!mkT{iG>VOVZ;nMr@1RaJC*GVz3@kxS4SEBs3Y z9Tizg5x475cp#^?$I5~xoq#}8O;`<`9z z_G62Z2FM$7zKfI{)pU)f97~LwU!v%2`Y1nkOxyu;(0@l{)_@Wjn95nEW;pcw)cYoa zMWYPE5r9k6kDE{#A(>kMiNMClRSKU(~VUtUS4==QjOlu=^6I0 zr2a9ONe!Lk%9(drmYo-u7Lr0oAJv|B0LI@QH`P=*!3)oemky>DN{~U=O>qbn`a%+$ zIF|MCa}n=Nar_5^l35?&n}`ivey;pb$_Wo~A7 z?S<2$))62?tB?6(zuRW+aQrB?*z+(&%)p22j+IpnY9(ryrTfL-=lY4K2a$7Dk@r-R z4QIE0f81TE2W~c>ms6i1{6g;;5ZdHlJw%jW%=Ljxr!dgtT1gOqSbsV6(%GXB2xWkH zTcMNe8!w8S$^c~Pt&nOp@~9Tu)e~(s8|4hMr`aO-L%EdHt_Sh`YJ#7rwI(jhwF>I$ zi`IP9ZMG4rx{wjg5IBR5q4=`)@h~z?Mw@_}%Mns){*o-3#q8T_$&rfo_kceYI|vqE zaj+X}iJcto5Rd(TR!a+G#s@h~rkTGU2r;_I!S;ufamp;yP;+l+D)4S!g=hqYS=Ge881yrjo6M*#^7g}H$S&V7t z%L+@DJf~MKkI)#v40>hE0|V85U?t9$)3c6;49&}{vnD*R#STTD;CV|s6*dxwKL}L) zQJkMi6xGeh_Gd`KBciX1%cuIQ=)j+DX2b4~lM~Rfv|lu`>{g<0&|UU8zE7mQB^iA! zI;yT#Ka5ZeCNwEGM+rXI<=QM$Auaba@dajEtQErFl3<=jQ|Z8}++)TpuiRkj+ENK$ zhE{}=c{}LYgTm5?8_riOQ~Rl+b>$RcN(nyMpaRPK2WxZq1n zjan5NAse0O__+bPyWK4D*gv>#1P4;=HWGi^t%NsPpzZIbums5e8QLRf6eDQ`IIrBK z{&=DkKwWD#(hvnBE(@>P{CX)jV)T6UYX@G_?NL6Xcdf4JJ@90gTvb1qQq%MqT;;j9 z4>^_dGDN3qIXKq~ToNO9 z+{DaCv8@6aWC6>3i_;{Cj4g5ua5uKr#@Ikl@ANeEjR7V0G`Wd&j-UC(bYK{w6)j>! z$2*r$Usjar_r`Y^%kyFM9yDBP;i=(~upCxbwpG`mMhF-Ka1;HMwO^0MV_bRu5cV~# zn78fd`n+&;+qc@z2dyH65$J}IjSV--P3kgg-Db)*U}8Cf^gO3HZB#!kEpV``sZp9^ zP37$5lW4SoHoFd*#b?6FI(Bq;xBIeJIF*8ir!-@oCxx(s6~8I3<`I-E?zW({ynVNK z-8LW!aY9)ON2Bbi@dQK8wE5oIFe_yw>N?SclrP=DKk6{a$s#x8+*&{fD$mb2$qo0as;xiW(g zG~ctE=ylsKMe(-q(#SOjzLI9*M@QtOGnPzKjczCR%)_x?7%NxoQ@?ny<5BMwWGWkg zXasRehTX$o-n#qTVuWmVnfa>OnzZ|}uJTP)u*f%Q7?QTA8LM|ib0}%587Y$zeY&@? zK!(|ahcnfqb4H>6goyN-w07`3%^|JUi-21$NLTGDn1*`LY>!n_O2=NQ2W9Cn9Q$E~ z6~OIMZe$cnRv3`TMXoC2gVrlU6mY9yvp#==4mS!%Kcav;mUb=Sfo-;gA{tFFvPC$7 zi)DGXbFO;=$&u1C{>KSo-3UrItP5nNN7+~JDbOKq?T>#KXgQ0!n&ibFXIoHdb@(+A zH1m+a!uks51@X`%&|8@6h`ueV+xf0`9&ING6V<-+S?5ttS$3@sr+5DrQF_-ph2FHH zoLBn7%MZHRHkd$2+&#thrDmn-u9Qc-SMtaPd!% zTZyC+?^$y;eLXWZTJ^qCA3{B;`@P->24Whh1j5pdsz;IwSPmdI>E2=mts-xvAq?jN zlddOMrqt*ThDYDH8&E6@_QDokQoaK--!{JBBDh-X`kpR=O=r#>{8$&DT2URFWw?pH zWvMc6^%MXdy5^PMX?CVFG~vjY+BAKeR`+-fHW{&;$o_stTYPOet+T)*t%Im5WaIauGwI*4S#k*UpQqZlIsacCG z<@Ju|RuBajb{wKhg_4t3->X)Ql`XLeVvt&8#AE1B6yF|_NV`od34T-~HT+5WmgEn2 z)JTY4sJiCOo);NdrRx7nqiH)=%X#7o#~r# zEMEu_PAs_>rPY4%P$rlmz_=?ip6Vjng+|u5fl&54&xwXB?U1eKGz!DE8Opc2Me;J{BQRU;U!GX3_5?z+1F9zVXt_0&l z`KYS=)luiDrCwGcwDwA2qpnk#)HhHlu`GDMmOIW|cMJae7d{3N+>^`AqA4Rm$Jk4lF{l*QD zWceU@k<$F$H*`7VbmKrSa0#YU{B9Gb;PDVItPleV?+$ENtc)7UyFkYA-gC9g`r^tL zGPi}?LJcQ1FZ&-eI?|g_b5U+Q+fU1wW@r-}Yg4_8+IcqKxmd`QZ(C7nFx(8qFjL_G zRSSmcT{K*MH&!F5GiDsRMB3Q>thrY>F+{+daIWFYh_-?NV?jxNRC1bY$?)`UFC~n8sXWhwfo&z4$;m;jIsX zhN5g8jsC6l6=4oGoN=&QbFGLpuvnBqwDK(JZWLXkoz?Tx78t1LZL>s1-d|mk#1Yu} zbiL%YhzfyjR@0fm%2pe44EbW?s>(en5}SN2VmSyK+k>lcf(%3KTU0#I|A|jf)+c;vSATROTXwF{Bt+Irx)^l`7Ss*xw?sCYH5HTujQV_#?PR=wKLJ=9IMKdP zREG={t8}sLTANN6;;VW58ueso>2UxONx58z08}fE$X?b`U7ELnEuEOSQt!fdy7IiQ zqrzSwlHS~bO|U4@%2DopG#cdk1_|0w0)-+$~WpWTe-ftZW&6Aha{qFOxHw) zMh$678xjlTXR-^VhuIa*9F-(-6vw@}jy9y8sD|u{^vF6DbBXN`HhN0wiH9;WaA8M- z*0GcE8C%{kl14LX5T1o?%5*KrAlA6w9?N_RCDjIQwQHU>+;`~dx5Y|6@`s~KMwoju%?%lTOIIx(LMf(cOllTY<9bm7o0)j3cJ1)?dA=UBDiJAd;IEi-Okko(mezKS*oZ z?k(~m+nI)zGwH@QWAorqKlowiTOu!z!|%wpBoery(KAGCODngEPgJ&-;khm)-rpW< zfhZE{iXekC0E(rxtPnrV)L?N{3uzl-b|l5c8Fx2XY>5)PgiE_jN7*QkH6jw>sV$=M zh?HiLKt+!s8tpO_p|j5~jQS<_CyA#3FR2GbqXHrql%?sRx?{F+to2>-RlsI2*uqS& zs)w5CHqJF~aifm14zoVhb&{I9!&B@NLyS9w36AA_wXrainf~v&7{ABTw9Gs`F6F3G zYj@M-n8LtQldFk>$F%h-6i{@rRiah4ZKd8dzGAn7bTM2g*JK3^sXgFJ^^43OnA2h` zpQEYq1OGg0mnCJ7rJHCHD=jOm_hNDPkXtbvFOf3?dOSZrBBh(K>V&{5u2FYfEVMfv zy|qTLZgYA5OZHTW_I_{fKg_Of-;jy&3*!cY;RhUT%fM_gUk*SPL<$Gi<$M-?Ugr`t z6i9#3xU}I}hHwh+6|q~TnR}+pv5x}bJ6Wommb$HoRIi>OuVI97`#mD_0-8QoCuA%VAI;Yl-#Rj^mAXG*XBPBgNU)NJ)QN zNVMA-%Rri1s z?u0y6xlyNY5sJjuH818niCl&+iCm*y>r=ICC>cSEp{ly=U+a$VsE*gF@Lc#PXK3wT zo}MFlIt`V=KmS)1TQ^}C(#@3`cuhraVU}EYk_cQ75OoVCC{QV5a@O4VwWQWr8|=7< z%0shMW_ot6|6mo-3Dkpqq%u94pz)R>X z%(a?7)rHDi$Cw^SwBeIQrK=hARQUJ(Z;Y9Yyr-Mz35NrTWaQUmnzM&WXDB~`b~Yi7&A}zEwSJ!>a}o$zx9a7NRFC~-rIeFb z;H0~r0b|uOm5i4J@SD5OKoxp~x%AJ8q8@ighQCP?qsGCSqh+A>jJ$^`qv)a&;63u= zON2#;emahnnd{8>%^>2k{ZLI-%k0T(5YpmD#OncxVXJbQ7n2$MQ>3!J3_vFWgU*h^ zmjsIz^ERX5!sRbzb&}xp0S>07t~uBEkZ9kF(apDQb~D#mmBxA2O6tgW2yQfr=JKa1 zRe$O0PQ`73SN5Q~+^m(%Ekd>1nL&ycMm;;kwRq%SJ}~fTXUtP@9q!q<=q0-<&Xuc|MA-N!HYBJ8}W(`TO|H|#TWk8y7ZfP ze2q6Y=Ui?B{4%tg#=c$<+ePSbu3F|prunPJ>Uc}y@f|sbL$76$K*mYAf`yS~m3RQp z1G7wUdavr3ha@p+H6@*JJK7Ymrkx*~F>b5IwHFzset2K99-c`|j*6QPAW5~9pU2ryp_=tKK8!0h z7+VQKn9w7h8}ClVhumC``=ZZ;?Ezo&`ZglS*EQ7Afa7c87WS2!lXP z@#lckeM6)f50n@629@BwPZF>V8h1IESy&`O5B|Vyu3jlJNo!=-9d4O6(U_?GI4>cz zI%&AH3jRq>_|1Q$`>p%Om?damV?#RYc8r`@!G?UKQXkbE48|GWIKFCVv0sZ6yhG30 z3+NlZ%4js&$ zfSdYCrmU|+WcX62M`}BZCn_xI&p*(=VG_ZKpR4IVL?&lB-{OjD+^K~FWo`)6WVlXA zLJ+x;`)UxKEr&u(32oykW1+9)5$$gV;(wES3`1tfKHUxY}mqy4Rg(IT2lz+ zT`g7}tTcf555=wUzs9Ahuphu?^Q`CF~S(1d=X-$Cp=OSUMQV z{&0j@dN`}<0!^e$6Ft;I$g*UN0{P!G-=u9pkFQJB8x!v;8im=Td!ro?kugDKP|eTm~$BrY6;MK?UPO& z?y4g)VYU|}^-yut9UJVBhg~qooklD=$97^ufD@2LpIV_jf0Q;D>v7K_D{k47&9p1< z>5*ssd|I$2s}hXY$*Zm;o_KXIw0cnK+20E%iU9UC5D340}wmk*oYnB0y2Nd)QH*umC7Xc){BNN}s9+p|nyrtepWZInsM@6?yd-nznWWajCVSmi)6 zF*cD5nvr!rn22@sn7D zp5VpTlkv&9ycYf}Z$et!d4$Ev}KM;W^*%_RQ33O4HX4LzYf)*%U6g4t1>blh&;p%4C~H34zcjD zGgbYV%jSNPkz2QKdI=0&dtPe$-)obqKGrm!Iu8 z&YJ;J`~p>U2SW>k>8M<@lr~yTv7|T8$Sk33;pDjIEs3BAuX3PWJXL-g&Pp6HBjPq9 zhe%5+3RZ1m!Jgji=)zZgL(A*}?MJ#8B!q7{UMVvn10mWv>~jx2in6ZRkX(^km&6R- zeR=RH`+8{eXOTzM*GuH~Eb~_u-smp6aS^lF9pdrT__jlUHg0z^68$nG+-~k!s}bN# z2GIf`0tQ?xx{XQYjed!})%i=!Kv$#lnG{=hU26~SvRoBlh9|=-T#9jbsB*Qk?%TtI zjZTu?fU&~N%orCaX80x1%ZGwxn}Gizx7Rj%|BQjXUdgu*_S<(PSCQLiaX1_=kHke` znKI(Zaq^uX8$PAlvyO0?joG%E$PY2N5aj9pU&R5e8;v#jh_Mh|!Y9a+Aa?( zkn@E*8X%3E!~+Cr!#I=Lu5N|vo<6DF7K2ls#AUCEF;<15f6V7mbZZM^gB}fx@e@=Y zZ=UxnHLw15MT3JqsOZ_B>eE&C$LDXMt@-KlI$x<**usi> zXp&J3WEnFQz3JOZ#o#Y;LYwT-*qwZhAZdjZ*&l2mH;(D)no8J3sy&U74uy{g!^h3A z#fr8GIqnj>iQN$RNxpbVFKHv;=8*4_JfQLc^Fg#^;8Pz~u>Y2g;4*ei_> zeYgSsM9iHFJ*j#xFvofgPa7b1_oH`8zkDP4HD2tO4jK7Ocn3niCPr#>tl!Z6EH5r| z9vagRDuq#w>>#TlnE$bN%3J$R(VKDaT+qsd__$uYfmd-M-&8$|9k$Y}EWX0eUP@th zVA{$oR#T*eKE{jEgrGEweZE1sx=DS~$*H^R=qxJkqNY5^Ob?bFK~L;EF0e>GG1-pA zG(SlK=@$A;pbrM>54&K4B;o27%mrXCOwC@ewvlR4a!EmBuM<`R|Q<}C!ud<)a! z+1CkE0^krF3~h8{?9X%*67{aB)NioXSoT%ORQF^cOkh^j|5?5(>YEAB*X@m1W-SX5v;(qpy%*%GX}j#plWnK2HN9M+~o{zw`&u^b_9XznJC$^A&!qe~5#LZ<1g!hgjB`TY!Y9acDmD-n zxq^38#tIy&0&VXF-5=BOudf$My^5?|IX&gR3(2)So|k2YxF^ytivb1DQ zG$Y>@oGjsf79g81*@c*^)5XGf488wJlAA-Mo_9Ql^b51%*6@ zYl4%_k8^}hGa}>nI#z;5h!zy4){Q;Zc4`ub)qevn`~d$ITakqpb7U5uTyU+8U3qxI z)KU@{e6!7ti8#w5tJ}@P%9{=NBaXB!Mcpfc(SDS`CfzerWrjp8cubK;M=N;5Kj=Z()Vbvw}PKb4*cU+^<4+V0j&msl%M*9b1rA_)v!|~eaF-Hu( z2Shqp+|J}gOaB)86GW#q%PKSPyI?Xm=6^LFF*KI1vbVP7w z47I}2^W|C>9==2|p-8Fljy!~Fix0v-8ltmEZ{|2wuVBh>d8;&b<7ZX3&2=JOo!*yE^4eF1KJ*o$OIK z-kq+Q777^7hFLVMhlmk)f{^R$2AiRz=d#x|PVYxz!lcy2oFgY^WPw*WQ8F<8E(teY zQS*}sw{kp*mNq)OolX*l!SWiPm>@gPVvvf6M+E$E4fgp2aq30vZMsTaR`)7b)Zi{V}>U(DHHYE#>tVA29%mJ~#x=89<(gHrq3I?@cLFHt--)y8R9D zsPMR6hSz`uA_$y>qzSZ)l(d3by_V2h@3&aJg=AZ23*5xO6E6vFjpinJ?R?9x;jz`N zYj3(PN)-@8+a2_&>mgDC1}e*|HWz|^xtO;(aHi!yG^lgkuOQMh#~owWW#nTKgYBOQvVM1R+wr~H=H9E<=h zE!8j~p@LJM#ggw))OaJWUf!pa6Ag+KxS6Qino=Y_;%#zv!bBTI0;*K~$TrkcubIE7 zwkOY^>)zLB)aEB8_bdJFH$ zA`bMNb@L7pdI?xTnYM%a=cwr|0x8bipjZL6KJdbt&5am2elx65t%U*5mjhR0lA8}5 zWi;8o069QAv{Y0KNSztdthX3Sd0s}Dq_-O}wwwo^gcv)Dq+CH#MM=vMszgWzp{q`} zMYim+orZwm-t)xqNAqBrv``K+2=ydO;(_~QUpUXksB1T*V$oM$b&@5q+lZGsE$rdR z*IX%Pzt(}`+-mD$8l*1<+XW$nn;{AC_Y*1cElXX6`DF!4yZ%-HfKIYC=xXL#sV%yq zg<|so>&DxU5f$fTqj}0I7AcWX)(%=R_ZMmw&-hdCGsu#aHu!gk5VL@VBVtJ;_xphU z{3DvMby`|AVYXExmcz^?Xb-En?tZyI0eKO|+D?7&$4h9}(mbyM(BVVe<}&QsHm;oR z|qxP|#bOHs}tH=H;XjTA?FO@QI94x|G;Z za>Uwoox(=0R_an~;3P2rqJYE&EcZQbw6-iVg4ii37jk2h9f|UL9v#TuUdp{bG>YjN z$%BzTZlsGLya*?Nf4U<)6DqG44ie#XE(!Fd{ed8I2DSG+opBC)HVeBSQ%lr(fwOqLMu@nf^ zkK&$2>oK5Hf9F?#3cU|BIgIa4cQz^%4Le5n8Grev4IfzNO$j&n*vs&+-eG77*&P0NXIse*yHGsG@aTS$5CKfp3!4y&1Hif(`i6&6h8DeAL6h07|0$~@|TbOV}O z3!Wfl{c<>+0>)s5V6Dy9-Rmq*>sm77CtxM@!~bQ!O94kXmlj7wuv$zW9lGwaP;1i$ z;%4R(v1^m84~ClT@j!TLW1pB-()4}(M1^F{U}sqj*T-AFi&*aVeJ-PnmR@PVkitUZ zpAz2av@=_d&wlek-a0UeED7(2kv#Pjdf?0@UIpu5Bp|LL=)!eLcHC^~PsDfgFx#gm zC`6q_n=a4n>|)Tqk*PU*F)DpVu*-bLiRM7p$2V@C!$yxr^*_ao&>1z`c>4bqw59OAYA!B< zUHcvi9$>3&5kSqw zdQvN_T9No=bG0DKnw!< zR-^Ov>sF@|{sxUq^h7xWn8^5iz%0wZ-X&xWo!5dyLTI^dBsakhDSj&TDN60C>0YH@SbrDHPP z#epA&aegk#dg_G8**#xk9vE@ZT3^=q_VdiqD<(&%UkN&87isKg|}b?dY8A*5K>Uq6JB zo1}4UP&|R@y7(EHGkOkm*~5n7v}&j9ss@SWumokyN%?PZ1J}^K6k|6g0;Qpg-#(H= zlU8ovdpF;gfkKk_SVi*9u2PKn=F|%tOnSIHCvQEM66ehT>2HBK-silH7qp63qmmG= za(abhF_4k_8AKi z{uZEw7K$>^= zU%~X%dc-v<`ufhA&>IV49N1SYJY|QDsGdJVCZ386I8?z!L>Tw5vxNjo70khcIbqJM zKTrw@SDs*BlJL99^4J!PP|coUxK0njde=NQB7P!7d!F$rZ!hBl@-}1M?+?N2b(+kb z(U6}upUPEat+Vj5?K47*b^Pi~s=|JLF1)k#58t#D2Sg7S6M648e4Xv*hJcm{0M3 z#W;@?R2Nz7l_)N*w4&DI87%AV!%}aVHZUa3>##tx+9}+VwU1zs^7XpL#(a*Xh_mqT z@YW)ZAf>ovyDb=S>E~>gWBW4bnZxn$H3#8zuMT%ZKeJaztEt?0^cniM$>j+5I3z|2 zf9CEZ{HbK3gOEd^p35Y$TVw`yn{YZigB#Yw$S&lsdaZs^mH1Or$J0k)8T@8NXb74! zP|BET6Y*dI;)t4m2_6FDqyW#0gY4*0cKL6_9{Q8j)>!mf$sTT2VT8;BcI(E-NgoNt z=CLmBr{v^CsDd5?qk+U|z3)$Obha_06lQg`KXo~>5#Y12h+eUCh&)WJ@ghF-_S~-6 z1x$xH{5{dD@m6c&wAksJ#W+w$LaP|do?Q8So>GLXruC8H*na?(Edz+U?tD9;7$9>< z9^8AJ4t5%ap=3Eh{F)21l2X;2TMD|1EA0+`kq$)N`Y_?Z9l*|tl)ajF!#s{QYS3?H zb%1SuPIo9Th&OM{ju&#|9_R7t&Ea>rCiw=Q)x*=!w7pclVBj50c8s)pCt^rb{hl{q zIDPBeM%mxC+7EjC9vq`m@jBTS+H z4eiut)S)~1uiRm0yKgh3e;Tnzdb1}|!d572B}0N)p+lzGTP$u}(~Zgl{cM0Yg57Q_?UE`K7sxuMIHt_ zJOaxu_}u(97n)L5V$^;PV~HBJ=|ldwQa)6AKp~Y1i#VOatC6=()pHm3`tc6{y{5h;Mt=ooYQz~VHk{x)vvgs4)xNyNZ~O<# zU5@b?1RwMu6kQvS)8Rc0bwDkI(~j!v7|hyNj0U6VAQ%j$xy7svoZA!gaD7*oacu1MrR}DF$vBzs>%0YaoOvsh@Np zf8+61=qnb>kxt@50w@-{OFVjcY-Nblr*f6G5-L>%d5@J~XwjU!MEC5Zw7^9>W+ zc6{sERoV>Z_CXK<`omj~`F1Yq{iH}_&mYqG#lQxxiu&r2I^oAxW#rb^dwwCN(QT^8 z6K3)^c+$nWrbu!DTe{dr$9+nhlQlUt(zfM$IqSOunLHTvB8{1+VoIRc+Fl z_v<8i#|6gZcNTxH$qLStK}Dh}T->8}%`bqS=7lnyisWBCDY6)Q)CYSWd{~L9*_ozy zS@O0?=pZrin7mml|2SG1Z%dg&Fb*7*SIn)2Nqe6xTFGO$RVOei9ehI7)yTzzC^3p; z5Z?qhB3`f;NlZGRpAwRFpe+v#EnX!0HKwo;BsJDNz;I-d&9>)V*;ja&G1CNr zs5~-C@M4-KnPgYiH$*qt&iQ+}p8pP*qAY6->!AiOJV+vKyqZ{<%!W&sThZ`>*X0qV zw9lLke=yT=_KDg;@g4WUgNc+AH@U!m9QF0f^FBZi>u*Y~<_ZFBqFqs=ycE@1DiSuyyP(ui{GZy=p`zE4WH+BNo8m&J4i z&U)ok9G~?G)pjbTDSmnZlm(veIx6MWo%+=2fPA_~A$y@?bS#7TAW%}xa-P=s#8R)9 z65i!k)W3=_G6~ab-P?Hx62#>)7GITIm=if7Y)s9#pLk|zQ@}2=^NdWa|6BXvkS5|`NsArP@PN6HbGDW}N zSdI72u2~6G=!OTxARhZPvZ>GdsyQmPFLLY%-V`L#LJRk}FDebfst7X>w5IZ=inZ>8 zguA~^+4(Xsj3_qN-i@L$-r}_Ihmg@_G?2F%)zH4w8wU1S_`|1hxGauX>`n>{TAzQI zbi8U5dAS$`4+iAXw30H|v`;ZAUuI^so>VxT80XlUIiIW(>Tack-AJrx!0tfOZci%1 zDN&=Y@k~%We4@}-0k>9}3z!MwQ-rXAU*f+|gzX{N&8r{d%i&x>=&3_CHJ$nGIzz=N zQktHBW7ys{at;uU8lUS6p2-t=wS6kcrg@Qe%3WDjtA~Au1r3I)k#>p6Hd41K)O2re zG~P034T`nJq*hfD*6fuEVD+%ELGwt_lS@xFiDU(m@+}-3yxmb2vIGVi{2PxIugeDX z#7PCwdyYixmdYrIvrf2FW$h~_Aa!opWBa)=D1*qV^oI;m>jNvb%XC<>``4DXaOraO zcHKEa$85gU#0zGh4a+pM9Vt){msK{Ho6@9tto-vN{ZyMiLA~$LZ$e2dHrT)*9VI5^ zI@3;7DdD!WVo)7x$_oIDk=N1@xA?z{3?Vh!ufz5NIA)WOWN^9U^webX?5p! zti9NEzO|BQ@apE%pgb$K3)&C*uXn`rJw|cvh4TSY6<4P7Bk{1%U@~vmd|>uoLLj&O z_+9Am?PO*j-MTLQGj#k#r3XWL8q%vtIONQ}BoY6&2N*ei6>TJ|0faXG%{i|nFF%zh zIegl-b+TauQIyL)J6g&|$&V3t$`c}YTByR37W;pU;QQv7N1DACJC#BG>%2VPYSAm` z77&UAom661B}9=f%E6v)pT^t<76}CByA*kDTkQW$^QiVkf?S_j`$3!gTTkrisBC-Jd2rxf?>DoU?mE#!fn z?dO|#$qI(a0VjbazbTo?to@LvW`hj?pz+8$ht9^Fvh#w;HN00IqqRS>CS<;q*y&v& zo0)~#lH0~ZpA4lZVzbS9N>Giht+VDJ-$h+#@E;H#`i>-Y4$dGkCV16ES-J_O0GR-%wEe^LL zNrxEUI42`*e+NG8f5X7e54B>S2-K$?7$wBfSnoDWjcMq1ddsSk;dL4&XBgIhwi`+Z z#D&XebsP*l7)XRI zmfup?hN=%=0~Y%VZ}@@lJo2F(>$--LAC$JM7zm1C%&{fMb1XK2H$Fj82}MJ#R=R6j zkzAt#r&Fd{p^5g_8_kNfWvf<}xv--9TYv8J+}7`d_*wc()<=MR%*GGqmvR zET=;Fy=9GdM&_>teF?P$@N&3bjOScY&9kw6G{9^erF)3yu9QtEo6EuXttW|!a6Ahu zo(=q;ho-W@+3GC7U+;_mxX=BKf=1oQZWCIAVbf)z5WwIpV*G0o7mcGjNN4)a;dL{NHpMk^>K1f+^f zi@q-Q7lV4@X5*`n<@8oZ?Q5CF*tQZMA9r#0TXr@t0lVm^v?h&5RmZjyvij{m5R56k zs8sTDt*4`GWzZY5Jr{=~rc(Eh4S=TUe9^33&2mc+HWB73!;jEYJ7LtQ~M+~b$@ zA3JR+Uu09cNIX0pFa1ZO8Jjl`FEO)sD*ai|6JFw%3udgup`g>Di{i7)3W_Eko&GYh zraruX*_!!GtJ6;E{G*ergSF1twB`?njthFNEH5Fj*hv}j!C8)BLqr6DGIx1!A9O&XaUjQ1Ldz~ZRd6|+WQ!r%D2*zeVGYq8U!3~s zsvNJM1w(tmH`vb(gC{P{>>O84=7BTe z59-hB3=O0Xc!@;y(vqU$@f03p1M$)<=Fs$2khzPExtE?793k%ALUlt65(fA zT&V&|B*!jgQhq;6lr=lW{V*-fBSYW7IF$>$OcF_VZY5!<44Pc2z(w|fEtHX`eP4H6 z%Jmz8@|ofJ5-d=0FU@8P_DS|AD(*Z7EkVDwjKi+RNb(>b)D+bY6Ls7lpjfC6RPRVq zCl#h|MzGq5VTMoNjw1Hte6uJwvrqlSwRmxQ5gEqk?{#Lyi#I(H9=5{29+*?nJYpmI z$*nOXc2Q%%ZTto|#*(jtUWx1M^|N*$5KOr7cu}kRHGTqcIt87U4W0J){ks-}H*k)B zk(>m`0_rX+IyvVNO zJUBQtoVB6+&&+sq$AZm;o2MOL5lNBe{$5po(_oZ0hWZu|b+&jhK<_X(FBnVUdOHiY z7DOsaKnJfPbdsr*g-bvwi=LZKM1$QWDI!IpU(9p7qzmWs{gmdI z(56rYrcKMY*?(Zlv4gD0XJUsx7`AiV8BF})1MqyU3CR6xA5$%I%!cZj>Lj8XL89Q8 zHwisnA09n)G%UnMZJyb|axI2sunM0gNl?OuLT5L)X$chAR;(cLzb6X0;Y-F&((|@SveSNSqhiXO;-^6RR+BO@L!B#LBS>C03%xb(lH&GdJ}1QI)m;X z1PhPkNCe$t|9)O~+x=!2dXrAB<2N_fLkTJj_Fhr3F{jRsP$2@Vp{S;djg`f)WgLSc zKo{yO)#arvew~W@x_r_rysF@b>eWX%KpPE;&8K#4l-5B0?8+GNf|}=Dq^qb%Tgl(a z#&ikC)MfQebPUXn) zol~#8Y>GPH71A`ZJ>&f4CW)s{NzL-vulg-Z`R}~FKvXi3OT%x=(QHgAx?>-L z6C;~x@q_45358=HYj?}k8>X2728pzNd zaU2IqK_%*0U%cRSVIif^BGGFhC81Y%Q1;OQ0(qs|zY|`#?aj}`S+})R86io+lPCCY zM}5=LKc%iZc+a;K$)`{Td!bZ7e)1t$X8>7(41htDAAj}2d;x19xM%n}oQYN3(t_Kz z_bbu{ef%DgH##sOzANUg#rX_?0f&Hh>b#O;pIhsREB);q1QTns6b-Mg?z0>r*t+mH z75rB0!ESxg91`CPwt_%+FDzMtl!DKf_NgMs$KK4*qm}2nDjJ1S2EukQt{)?22BWFl zp+G|>xU_`T(pF1I4(CE6Wg|@QCJA6#+2TT!&R<*IVWfG(Kjl8?zlDA+Dka;znjHGm zrPs3Y6wjyt zA}cK28E#I=L{bF`cBHCfQe!;Tk47KXM)EgU<3qKhhLU?`tZwnF$VfT(yvm=SlktqS z#=FL2sZrfh5vWiZfpyZOAa! z*G>W(ys2F#3pCM_F?Z$a*}{1}CQOv*yC+MR60f(0E4`0&w9Mjste+{shPyBpC?KLK z=GDkF5U99z`qj9gD67C{h+ACjV3}1=(_dh((b|*a+!Vwu?9#A+2L_@d>EyT9yQySv zYCic$o%;b0MW#edwVB2(%H**f=h)egj##Or{<;oda{;%N^axw3N^ph6q&U#Ggt8Ha zczVBxv{muq?-~2MMFG{uoFcLrb9$xD$_)f{yJ;3^RWwA17SeedF;qus{}EEc^3P0s z)AmegFj68JG?G-&9&hpmYBUx|>B{o_TyIFIaWqJ@pr^l2B@OZUtDU!);KkC)&=F<` zpr#oOkEHnKe{fxm{CwEHWh)cxB)+j(`F$dpaFpYYkp6C;Jt_yRlJR7Wc;?D`Vw+$KrbaS|MsB}Eq~BxyAV6o zJL&L^#Rp)NhwIn3mZR{nDd9Ad%?cgB0@z!Ppwiv*8TaQh?Leq}m_tC9Vv-S>xkt72 zx#i;?U?bu#Zt&1cx!KFN-d3SvY*{6Qa{#8>?$njBjqbP=fN&5}S55Pq50woB5y3KEu0YIwNE1H zr!cFHNK}l{j6JJCTLYz&MZNl#R?FW=Ha@a5-mQ+)2_}kSo4h=3Ersf_Upsc1{_}U_ zU@z`I{xd)xx)MsH)LA@JRv}DT+c9u2MAJWs8Ey&Y;vrUt#7N0uTxr)9J1A!*E$Me0 zp6H{Mhr2gT8*p7=#4V(#r|pitB+&*fH-EE#*iBx;>cU-JIlajre1Z#~=mwZe&(p(o zI$(BCrtU;wqDcn#TR8H>LZ(>>yKv_?Kc0}FZxi||&k8r?nlTt#ZrNQQZJCTW(>_8ev5+KIziJ;EIG~k1@Yvk>)kbm=A3NINJrp? z1ue(c%}s*>!%t5H0^0dho85!LOhl%P!r;PVR))spp4h!sb##_cr=CDqk3$vxxxt6} zdr4Lm8*wA^X*aNM(MRizQK;^$RAEFNB(J*Mc_PokH-bL@@uTNLvo`2Q0vMcRinj-i zV3*kaUpubJN7gwK6=Zm3D($B#P#ko6GF=iU%|Mg?>8UX`ecndaSXU_u-krnP>vQK6 zovg!52>PWTpQD}(6VXfMiJ3`l{pJ;B=8uCDS`I_Xv&>_aA$kZ!LNXA`11w|JYp!T_ zIg#lf7;71U1@UEaJ_z>PIp~S+Ka@=~n1;Z{?T$gh3I~$C>p;<`=-!`D5@c- zGx93x(7ZU(5z6(AM9>}(!rDM(qX;fmE`sCn-tvoIy0Pgz!*OC(xs2$3P2Qf9VlG|W z<_Ur5n$Xt`52&$Yk4zHof~ElnKZMNGdt(=Y?=;#XwaqmGKO@Hf@F{colh;Ll{#Tu* zO>q#0eQ&Ggv>TV{=MgrNGWm?GnRV4|Y0t@pFz0U1qku6OR2L7J%tKjfJwO@Ij3wor zygs;4;3myTMnp9{5?(m*nX)X;3Q#R)U0w^~q~9p&h{MWjlbcH!=o+^u)8s}-gAWYK ztbz9h(3rs|@PAgyg;378Cvq(WY~&fDP)&_zK+l}ZT?d~KhTr#V&h)(?=v3~|3(g2w zQYaY6>#lWJSJfF|sm2<$HgrX{AyzD8R%G_ypJSpDM#?7A8ta#G)pJJ~HH#L~ zuUxzrnaGQYo;;RJMLtvBBhV|;6MVqI@N{t4|LU36qJD!~#cY>+6rKGO-aHI4kB;4E z!TDKJxrr_TN1{dU4Nh4S$LpZD5Wr@87qvxHI|gFaJL6m?86#FwFW1|J-(}_7O=WYo zz`*s|H%I3EY)S+bCHLfuR<1$`m6M7hDamK)jDl9ek2;yKbDwqa@zPM+H0;-_&n38S zYn0wV&@URhXGYIxu z`Xx4WzHx%yq*{$E0-9G0vyo4He9+G^`L#E+^7qe?j9!Aqt2Xvp#6-@MUL6$l6T-j+ z&Nz5GTT;)x3)QsO z-u8KrZ{aC=7Lbk>x!wvBm~CFaPlB9H=lz_oEEDMFiV$dy)Yp}#$vTjX+@D(oV zn{-|rAmn)JP!SIO#lHb$rg-f45_tP7@W`b)nd}cn0-mq=B9RCqPoZKFC z-ZL>WJzpWRK~%G{$&usQUFUrOq*r{*hA#tL5c0rt_*<9zNSa+*7uZdlp);Tuq9=&& zhOgJb$dxXw#?MhXU|SjAl~it!s5wLpR_ZBYU03U<1ae4hu5`T#k(jH78Oyf()>3y% z3YUOyUxW7Op$YEFh0J^X8LkZSb2i`&n9(r#GQO8m%ei_Kq))~`dnji_|A{&#?c&mm zZCWfNX*i75qC5EE0@ndcIYh7OmdoHbHQNquNg~w6vbL?&Z83i}GW<}a5YHLDg^+ct z=MK@8nQxn#{Cgie8eJ9w{B2d$7aYtqUMK_xCFJ_MC~1%pZ~5QbyU~-?1J(Zmdk;!G z5>GA)9zuh8tZ(f4F+b5Yrt^)XD>t*&xOe3gi&d&XR(p8XoBUa58qbV}6$k4BQHD_N zta5OOK5zr8oT#GZF;Q$VoH6!#1(Qjz_5<~V#@QEe-q@%m#`jsvF(|u|jIri%!DvkS z6*@uY=XLAfRPtRBhFaB^E{pRSKcoatrWn7ti((WY$ZA?Jv~h3hrZJbs2ph5UBw$?u zj*Mel1>EIRnKqz=D_p|BFTDPB{mkWu>@J`5R?ujb0ilD^z`}4KNd$rgWSfzvgvSY6hA^-U9^kKZ zDMg1cNthKthCkzqPFK&!WPF9dX(?iaS)Ue_2Fc$6lyTt7kGz_{eH!uH>_`IVEBhT5 z6NQE3QIU=eLK$YID#Dy0syHHt30YJ&kwy$s?n6;~g^0sth>0QORt-KV_aj&`QJ3(W zuAqO+`Oym_hFQL3UJK3D=Vdgq8&Z@S9!MsCs^+WIF-e$ywK!Wuq$0r9>o>?4R4g@9 zMJ$)#7Q$^fq`7 zh4m%6NgwM}dOa4{UuCT@lj;JH^Zt(%pB!kpcVDw&x|~#*3zES~nlo^U7mU?*~>z zqrfzh_xt)HT3Q*mU3#Fh?V$FX-##*6+pUo1Wiu zP-nU=KJp>%VnhQ?@3xcgmPh)Zz^1R;QXc=SwwU8QufRW>Mu$6(iv*soC9* zMB3-6AnT}jMhE>4uCTOLy4L48;$*4{KTTZ4SWX8l{EiAMl$${U(NE*M&3)}81#ycC zeAFH9`5V*~G!1R(N0-Gs*EG>e5x$?<-dD^u7hfciK9>1Y6|FpG?hqk%<(fNYoC}#P z8*DtmF|#ol?4Z>yZDhk+cizxfwc`{xo!+;#n`Pibh zW2)=Uzs6JwKBG~}rUAN+TwDIvaMm4jX8CPv&Engb8&Ttnqf$5O)nBQ>%qug26C548 zIo;PHod)E&(gV?40(_oihM)+KkB)qv_#oow2WI?m zY)$tYrGOY?vYL^47OTyIO`4R+2oeZrUy4JR08NVeB?xyg6%mtAeb zz@4CX;!o`g>hgzckUvNluTC_422j|Naa@ip~QCl3VIHOwLVss)fG=i@BL@H^Z< zY8HFweBnedC|bIjtDjH#9j?&uPOZ$2n5OS%0%NCcTX(wlUzeUBCRo624eF>m>sNkA za;X-mdy1`|oSPzJ4LduPw~+B4gS=`|NqT$(CQWelTW;d)^!2Y3)Lrzv@5od)tv#D~ zcT{jxO?@HcmJOWQQyt2#yiBeKCBPBJSZ*(PQUq-)4?G(%16sB2+W^mbJ z(`u_Y=UhkIlb4Lg!wz0E7+gbq{3Z;lj5_$B{yEuI{z0gdMB4%I^ENWIaf2@ZWbJU? zi(Su<=RS~&CqzNl<4zPf9BPQaaoZ;Yi!e95)$3YH9GhTg(uYfljFsNyu@u1tDBV2J zO+hCa1O@n-*G3y=>czX4Y;LqOq&>KVda(tm*5Cxe(2f`E!~%vY>!oj|GMB~Lwn`5@ zx&dlh^~Yh}Hp#v4vvt6|Z_~i~H;3b55IjGY*3rD6{tG{&JOfWhA_UIzl$S#KTbDf{ zxUY_U9^P=vK!y)`SgaDKaGT;wrz935TiKUMduHSan`8>wM&wkq&5)#8SOx8)ZpGVa%2UlVfYSAxoW#b} zAvw%5GC^UjtIsa9O#I|~sFS@)Q`ATS7{R(^Lv1&4-qRQ>E$A>}HvuZ@U0NxXtINQb z=TlxKkW$zC(9vj&^NwsQQ5;*csE0A5-&d)Qa53 z_n}2x$aGWrZdC~b-xe1S)aaJ495Jp!)0@T* zXmbXk0S9t?kHY(ytzoa5cnG$y%+V!LoW%KvDCIiBGl>78i0FmJN|!^NtN!ZBNJTvK z#;g&K_GiKq0MWtiU+)m$KO*LyHYAQmWf`V-{US~`td;sbn(n2tNG+)v>@Qw=D_5va z$Lxlg{AGc4eEg2qy0v0La$jLn1hdRJ!VZnraW?p5tukO+4ymgRHe$OT$Kw}hN?L0D zj6Q=kjj=f^-?crzZ;ZY=b-uUw)GB z)_?Z9pT{bhGo(hWmRu&sDzbUSby$$n8lBnmh9!c%vDwVgmO3H2%}e2Z1A&^gBlJf* zAgF&54bJ%#$00=HP^>elNLk(){2WDrYo!EaYl~As4ej>wvE7?53nxhdI_skuynQYj z+?mVI_0`Hjy7_{u2E%k8-RT=z=wKV*rjV$FjWFvMCp8x|+NkW0#1^|kQwgynEh!4r zD!AEjVu2=>Qyv;$Z-<0Wn%Vvg#$cz!yB~ZlH>{N*PvXl(H}_*{7MS10%R;W>oTKA; z5T(kbyU9Bs*H&3JB0qW8chO04IdeGIk(is^geoQLM@OVzv(VU600IRt8hM=$8d-WY z`q{*Lpu&2BB^ymf4;|ni&<1Po2;}AyloIv#v}~!y{Ci#-|BqTENrsus7K=fWc%&a* zv4mSeqL|I6;y2T=N$bJuuq-n}JPgPLJMM>6b<8-O{jov%F{XT*m-4-u{M@}3uxKki zr^Eh{&V%|6?g!yj+q(KD|8QrRzh3Me#ke`u8cp_(B<8pl8PdGl4SpUN02Rn$Ka zfTjl_>+#dxe=;0H#pq?to~dz4?0_aw?Q5@QP44PgKy0*#heSVE+QFa3ox&+s8mrUih!Hu2Z)W3Gs<+jay zHwO7elOa)Mh#U5TBObX7xtEj|bZFR^cSl>%Q4SG(UxZ&K`Y<<-+$ISE1%z+N z<1@@)q^dcPDFq0$0Q&;)m0-S4APpxhaXX{772>oDl~T=crg{mE-)|el>V|VKAIx?y zQ92p`O*z5cZH)#{B&~9>N61i=TYLK{=rGjpE`-*ULN6SNyfp4mD#|bo^Tng!|ASd( zixKKG&J^!r%&6kuxaF&8*=m|4QomELf#-~b*>5`@+7#iMzT>C>T*HznC0CJrr)8dPcu4^D3C# zr1oiFLQ^lRxU0Hl-W9)T2@7&cB!A8R{cjqB%r&4%(=tobm=^Tz6Q!e#r#d`8urb>C zzj*!N`1ZZf=$E6iP6-QCsa3KvvL%jREBpK5J-8ogy(B$zxbCs zwb17Q{4LjtF7^52@ZezXugB}_fjtw{*MAW(C2Z}fP1ieadqO>bObk`?NgKamQ?UlI zF>9W(&T_J2@L$>$3v`WiuwNsIf^aXDWcx!Uo}bb8eRV&2o9>N)vg$2ctNLhdc33D^ zp`tU2UyLU+a*y3g-~7n~G16xYCIJz*V`(X#k9nzA4JUC2$RE8T`tm)36mj@9pA(o5 zC?yuRfD5SXy25T`Za^AMdSp+-g%?T1(VCH8utvN<-eOjwL4?+3-fvXqg-~Dz7?$p% zGmpNfcOMd(M4nr_NsnINefx4fNI2GTw`$^qD{^jieN#*%>%?(bj-!WQ@OxRwua-#@ zC~=}Z<0!2D=kv4q%+AuII zqG+l9b?7ucrS#f5IYd)wC=C3iL@7C@AA<5r6~D(FE*mI--vJjgGE#CUhf^u5U}<5D z-WhKdK7PZo++U_A?N3RhHBitj-GI-*G1zVWZuUhm@oVG2i!bN|x-5&1^%AAGz9I#>XO^ zt&Id$RJ`;;Z*fTP8A8oMl}e6YS7+VWnelk`@h=CwmwjICbTz*Q`W6$?823j?)9j* zC~2Y=MN+O}FFyj`rpzl;Qi+K}`;bx{uH><2o$%9zx&IZ(tZWhsFk)mC?KBn8W(c^k zg7fdyd8Ijb8Y=W55u8J%L{AudRr@=JXzKgRW4Rfk;uR{Y4Ps$DH_A`~#@gzM6cNit z)s2B&eW;HD6ZQC>=4@0@|X;(+~TU>n%3)=aAcBXte zZzT1@(s!eEbVCrS@SVP&MFDe_Bl7{-PGuPalT!a&9L~_z-HER_#GQ}dt-rv!^K{Z# zKuqVq(!Z3TngZiSI=RN#br}gntlou*Or%qKHLix@YVo~ZTerv3PG=j@f)zSYA_RNb z!8ieGs9!sKV!zwKYUJDH<8>(3#zQMTvooPIdI^J!7q#9SFO_h^K6QYXjY#kO82XM6 z?1MmdnGOw0in^l1Hb8(8Q^o(tSW-Y0)Q|{QO!N!}3w0c4IbMx9l`B;gMlwO@tfX&} za2tr1fZLEZET>Cd6UF({HYy8K(%Y)S#Yi^fDf5H8wG$lR8_zHj4~T z**dHU{k_#!S$B#HfAyLeUN4biz^hE@i_?GHdWGHG-NV)ErUC(Gj@l#OLFSSR5Rok< z5pn%LrM zZsf(I`XhG7W7NALeg?R_4n&Qo^_`m4koh6_7AN0&u594D$kb1szcYXRph z@{HxiRMa?w+S45K^#TaNK8|CaOT)d5U@5Q}*8M>NA(DG*!g-~W(iNgEZ77Qhf)wxM zQqBgSV?81;Hy>*3HjyM#vkC@Awr|GH{0}53vDN~H?s8u^o||qPWX1@_?Vm|>vvtPS>IOn&1r8ZcI&cPlhKZajI+v#R&XqG^~WAOW~ z<6;j+)(+C&+*Hubiiwj;V>rioA5|zyrk5T-hX)=QbV(*+!=Cfc>(6~Tw!7hDGfxbS z?S#&7P)x#QEky4Ipat*s!R?kU*DBzvOg_{-n znmBuo1V{zasPc}++dn>zfcqw%&Bv}vEE#E{kD(mWe~la1H3jxt>ZpLfc=4i&nz+h} zMM2*@`-~W*u!&i}vL?>W%fv-_DL&aV0UQxbBAX#lrMhV+Ncd|S>?5y)o#FJG$jB@d z{--;vY*<+ITSl5{Un%n6HAC%~`9Bj31Hh*T^N>42Y_X=5Ba%&kJ09Jy+a=Y9W%_qX@+e*b{)kKZ4@f5ZxXd=zcf zfP#B>;{vg)29m6_`^RA9W&dl}-T&-&RfHrCSjfpN81l%u&^i*Ezb*+|y~FkEjS2@@ zf0aiIBP>%ArIOF0ylzsB*zVXgvfr}JbCvxyNm?-}KlICyixjLL3mwCs&q zH@8ne%qr5Ah}JFv2_gx>x*MxpEADEjhJH-_X;B={R*6kp`3eb(Vi?ZifCeP5?`NX49uK|`IVNMB~P3E8eIY2rD*hh78- z%tHJ8IK%%?kBcuf=WyVQ_{;3+^Wka}*bbYENd}G(_!;O1VfNaS(IcDtCG{kQ#o9MG zJ%sPZ$@rdZj<|}Q!btaLE7eBL{2HsFZ;{q^f;tbzm2Z=D^1HpHbkQ&zZcZ~xtED_C z^TNnQ4S@m8#8fY`ClTmpRtAar(cTqjc_cSi_j@3?7r>h+;ywluf6@)K7gCLNJWa zslQ<*<(BMQH6P)dq`^QJ>hptlOY zRu&!E^fP02^?>#GM)UmilRNlXyUUaM5R*`;N_I%S*h$oNLng7v_ErArl-R3zm8Jz9 zzoV$0EiP*7fC(amj_8E{D!BV;_@QZU?9y?N$K|N?*dF)75+rBo1tSGAi;2st=)~xzO&y7aQi33k_NfbYWLt{xYIv^S zvE>4+v^lOvDO|>&7VuQcB%cyiDA25DxXn1D7H?S%=dPf_&^>6$P@~)8 z=pJv|q_uZi9I_H5vOELUK{*nWiTTpp{&^TA95Aqk?hT$)J>x8F-EwYOvKjMIoo6$) z@zEgeo_p#o;TixpgYYa{{BP(SmP>niNwzJ6B%$`ly$(zGg@R$M#QigL>>4PuJJ*NY z@c3GwI0ra(qYFH1_6X+wM1eTnz-N$S>MHKEx+=k;jpF>ctz-X{`+Z})T=sB(#7sTI zB?0McdOp{|+fbU0gA z{jE2v{MONAKqb@PNb!J40si1IW+|%QFs#k>sxM8sJiR&$M#F}GtB1N#g3Xs=#Hs-LC1oL!wJTvgJ%V(7 z18`-{)^?1EZQHgvv2ELSGRefYHL-2mwr$(VpLy@SAF96pRGrhk&}(H+i z4BWF9&rA*JDRa)MzGwMkY!u}%wsS7asmn{{0MDM+TLHq)onG&|3F9M>)lbc8i1Q`$ zxIVg%jO%=?(I)tGz}87Cg+WqVFgOBA=s-^wER_8^+{D*H6S4k?Rc`%ry%8y%k|Scp z+dO100JsBhIeb@iD&~C@p#E;Lz2#@T$wOHaEvV?`$_V)29>E2OVPqO8Ud7t=DX%;e8neVudB8W6tsC+=l{~71 z;&U2fKjcdLaij{vNt0JtAQyUHvK7H%gJ|}Co?zd6BdSxxDGlnpBxa=KN@{6qW=H%` z_ovbL>;SsVcURr*x@BHzS(q&6fG%ZMOr#)hF~%LPyu;%d__H9o{V0E% zA#U;2=fhdvSu4zT?iQ-7oRl9`!bUWW2u3;+{kBIpjl^h{(XBEY6)9~l%IB)vOv^AQ zZ!axQqb1+SATl&W(*SVDhVLr+l+!TEsALs?A2ppuBEg&afkTFn<(hXEOr{FMa2}Iq zaf+teND5g0Gy<><4dR;m^i7m3I z_iKBc=K-mrK6si0kzas2;C3q8A5SC$Z49@{7imp^i}&Z$x=zU^E-=&dW0i9XgX$zu zAJW{+@K2OZITJrG4fq`b%NRzMMYSL#%I*{IIubUpimS7LqMoR7kQec* z^9Q_?f`gGXvP4H-_L7g}>o47FK7#B1ob>=9;P>?a?-%=?;+SbaJ>(v&iK#C*ET>}E zAI3IDj!q87`qqDIwgwhI7+LV?@&8uv@$s2hSU4E|OThYX0XH{3os_YSsgoH#BilDm z;jb#4sJWGsvBP(1rSD`cY;0(2Wc-7d_s74DyJcv{e=oYGhYz}X|AE&OjPeZSQb4ZI z(6K)a$8rG&ux1pC$q&o1zm@E&V@dS@e^37iJ;lEFdU1ciESp~HyHAoaS2$=M#j%m( z2`dhB!Z?x0N-3jHWqS*~%6ZvB#*#XDpymQ7ip^uaTf zQ1tRA%cm<7gL7-?LAJHfT~XSZyEJ96V|~fzV^KH0l;q_F`RT#jll#j2%jMmpTpYuF zN$H2AR8s>S#nT;$a&RF>X&*ao8S~KBV!QDueb5u{mF7cdgLwwerPc2>1gjB*^WSY? z=Oei5aX8I;KA~MPB%hR4#7$&fe&Cnl+uhAxRE(ScNG~YdaXTegwP15yFnX_8=S%ml zU{bzh_OETQQoi8e(!Ow}(!NwJ_f6MJ_gDS7&yqN=o*C(dT_{bvbk4_Hzoc)5IM82R zkC&#mAklp9jl=j((|4m^gFbP+F zy?+8}4WB#zAEEO1?*BVfm|6ZiP}u)RpeVW98Gi?bt&Nkgv7@1bxt)`(!@uI?n*0zNsTV^M5G|3fj8iYvR)|urcA&FtRh_Gte_K z;&ZSt;%on-BkrVcWo{^7V`^oLPyY``z|qjy#_6xhKjhyI{H6ak{)Zu?ZzpDKZff@5 zDvD0V)++ey|7!l15c?1DcLd)dZj8^!{7=Y#hxWfG%zx&~-)ZsRqy6Usip~a3|BU}H zpWz>tpuVH=Ut9nGVVgTRItiKSJN$bPQu_ZUS(yGY@V{M&&-mBb|C)iS=0;9tj^8d~ zWMju?V`RW*VPVB*XJY)P{9FIa|6Bg2&cwv@PyKKCSH}45PZoOmf62e=fBCGeZ2z+N zZ=0+P|C0Y>=ij>jvH7?BkIlb!{-ewG-S)4Yzu*7p{_Wpi`fvaK=XL+`{>uL8|F@05 z<=?*j<^OY^znyHWY-9d6zu+_eO-TxW)69R87svkyy?^H@Ci?&K(EpXA{^qWKX)@q5 zurjgzOsu<&t^-`)YGHN&?72&gozXcbzOJAH=gIddlpQcq>k~xy`zOCl zqZ#P8)&wAc2>=om8x$8C6PaIXZ0uea(nV%7poz@mpq&xnBW#vT(jhACx?h(pV1mUc zrV=xA{g-e`b8|DmVAj_Jfbg%$q(c{g+b{TMBxm5&Wv*qQ3oSPQLf>9i)+AB@M=V)z zC{w@K@1v{k>0q3RuyR=V*JlT3dwMou_$dS*vMGIk82@>@>jC=-76Y&fnE6?MUlr&J zBe}jgg8f{jgZ>Q+0FZ!6OAEUW4Q=8}Ue`tLVanvel>^m>C(X#frHJ6U)>UdB6!2zQ zQ(S;Fy)S#01^snZUvY81anb&zx;#ERc~58VS5gKXkd|4HMoX1{!>QUQQ9`C?)5za-a`0DQRv zg1LL5Ng{3IO}$@8X^XNB@)f>2>b>&eyy3lXb$)!AE_Brke=58V<$aY2+N)xv`@+QE zZkYhR+s8BUqh2Rxf4bJjRun`YeZ_uuF|zo5ZKi%TMT~x-)AJlFc# z^>ZowQU?u4$qel%DahpTOO3?Q+ut|Zha7qyiW&FqZ%+mAWksCc)Aa=G=C?Jyx;2ID z?pYW>yEa|w{c!&JQcDv!t(xwFNAv4>sIufrU*-b*iedytkN5zcvSyM-Ho z(4+qV|4@I7216qA>v^~Be>7$M8vdf_dBwZ`+5c#JZ<@HVGq_%b~M%TY-?rm za+C%93zr|M`6$OSW0VW*9$ z70iLqv2BiEPW~nsR5pKWX1~7iUJmDs4v1`C4+FBb9|Bd~bMN>z zW?9L>=taHc5w4I%(ds18`@mjKO!N~`*N}$>C)PHApN1OT;dE)cr1(@T(=9@=oiT?l zT{Z(*$iGgLasnkdu>DDzC1=PRv=49mzkaJeneP2@QnvEZUY`C<<5gwCFK}Su+5#NE zc-W9}OHnrPC;Otk0^?fxy|^g8tp2VX;3TQ*1hSrXj`YQ#&S~%jr}jzs)47R62apET z_o1(|=#0Y=qa!({w7o+4nQ;^psDg;@GHoZAM$9a%KvWv%wQkAiZ!RJ*cU&zUFS@GxF3G@Obpi}=v5LbJ9!~EefyMc z@K(>E9r|=l6JB(Ip`rm|?oKGSZW>larswzeP1!=M=qmKU;Qh^cx(ANPg6P2GKY(XL zz_5xM2OR*foY#wjx<|WAd2716@s};$?8%)cLo&vF zIj5`g0FD*@(5#Ee^x0htAOwF2H%eflnnQ^5lsd0NWF%(`-s-mLydI@q?$~8aUv);iX!lL-foO5gnO=u1-v?7o-ryiJs#R&NY+Z| zq@TtGNdnMPM5UpZF$0k&^2yuX&jsdl5jDcCWW>v9Q}(C?6ZtO{|Y&B!}D=5 zV$#HwVV6I|fIa{zsCQ!N5Y^hITsJrA4w`LC&eZCyce_A{WG(<@i=3X-TT?9O>4yXn z)$UN`&8Er32);COhJ6wO>4k1nH1{Fw16<02km457Sd2X%>{6hKiy=BbMYM%CAwKts zdVlR)1v$={_Ii68vRL*0wr5W!)L21HB)qZ|5jv`<5$Dd_3u{Aqy#}Ua)(AuhsTpL% zE>Dr|pz8jX8mhHC!iJvk5uyGrVLqK8$CN&r9db;vf1H2TT&OzLoP<3q!cmqcBiC zjmX-I)JjSI=PnE{`+j5A6^Vo)t>@DTasWYd)!!oigsL(c6(bBb3t-Nbz~xE12x>3Tu``AWU(xXVX;;~D=|)C7pCx$4ADHZ`@kLSarnic7G>GrZ~rHW?e=fjXiPCG^y)W&t8~4{+o= zMVP~CT`Y`tItNZl$J;($0_h&dK`=Wfx4lx-YY@+r?|Gy@sC+w799(R6#xR=ci6}>fD`7?>rFftJv$XP!jFOyEiq6AKecCv6iLlmEF_;m? zT*08_N)1QrGlwqo>Uh`}q{x0RbY;FPosku7P~S}0DvcIXagHgRw?!LD|TLE7>}zfD`^jW9^A!vE6!*Oyk#% zZ!@aNnKmHY6fPAw98*JzsJC%9U~R|9VzFtq!tFAa1SLABaeyY^TB>? zaY@6^;HwbyGOM)YjEH_t!35$N=PmMUcWS=$tx@8$loOA5xSu@xqIIDL!kkZ%@{>G{ ztc7xdfdZhBws8#7es)K;6D6%~WZ|L>o8tP2!mN8PvV~QQRwGeTwyCJb%04D8V$o9# z<0FQb*`u0rrhySIxn6LZRL+__Zj)K5iezdJ;G|iTU9BrY|4db>;f=sq(!-+QqCr-1 zQph+>msDV!69}KuR;J30`rPM3-ws}S&M@uews8}8z27gtX#?|C8lIQO$(YyUX)p$3 z@3EfhO*oD|$o#aO=|S6!gbB|-9o8a6zyYhJbVJLIDZ2sVakF(H`T>SCT*iK|sR8Ne zabh4HL<51?W2Z>3TH?f#F(y4Et8@UIc%(6m%)t(7W%#M_Yz|IU38EnHxEch_;Z9po zO)KGs{-FJNOdA50_7>hVOkytVAmJyso|KR}MS5M41WOZZUePIgc1%18<-Th0to zEERmVb)EEfN1}{cDmx;lO+QeXiVrs6aKyfQGsDeEXp|}{ir}ZPGt?dTycrMGB#$Q5!~YQWyj1m@-`y; zw$*Q2@{&tgvz}6q!_DOqm!@V4N=P%rjD>bnhvZJm&ce!sH8njba(BR{swmm-!3mw$qdu@z}lLFGWO0+7^P(IR(woOzQdWpXL3#VVta zhGxH9j+CI<4bc|F5&8KtYB&TdUr#qjY;{EC%N?=7i8~d*j2^B=)4Yxhr&VBI`Lmuq z3vNi4v>*v^@D{)R5wGWhx7fqM7JdERt#+8ovhy@bYPF(Le?VeBOgLhteRdrEeZGJ| z$jdrE^ft2DZ3z>!j6fa(yhjguS=)aeMD7Ly7FBC=bilW)jvs zC-K~9)Hv`_!PTzP^nyXBzHCmZrjadWrT=p8xFzOBwljyH)H0U69wG-2m&nnNE8Edj zP5>EYyuIFWu;&037_$spnTN%vQkbZ-tAmwS{K5HkOE#E`pN0i+V63@>3BQC}C&xXz z8G-1Cr`!1M53|a5)Hgb~w3SRyrDj{>!0la3%5fuPQTrFOibV<{`(`5aAY+l&*~FGa zHQld+4ox9s+_C&wWfj7P$`3oy;?+`)`uhaAz~n)We{&y&igW$2`4#(Pl`;F~YQ)yt zCtQoO)sq0z4EX66;MeJ@0)#R34zFF>m5g1}B+l-Im9-^v0;%L2T!9{n8hkz6;TA+JHdLp*taW^LDuH1G{Qr|hZ{*+d6{^P`_|B7^&u_T2^lKjs4Uu>H0^57@ugs-CZec9${sarb}$|o2Chab{Qp|5uiGS0aar4 zC3KMo7K0+OZdrlvt?PI@#hbk)GhXDvec(MNH*PuHkKvc7@G3f8ip$ttWn_kxB1(Sa z*oL(7y~MttC`@SC_VvbBPKqBOfo%|);@WQ*uNP237mMoa=K%LNVbS`h)g*Cxg}3&8 zNBBL7bP!|l2U9YZZYh=Z`x7U!)MtZ0Rz7^j`@1^I_mjDWjbR>j-N2@8s2HRRra-z| zZ2-{zW)V6x(exF#QZX?z&@_VBu|yzC{ZsLBge`niDf+({+WcG{gDVR+DHbMYlO)js zn=}c)j?#l*0K%K{OP(1#9|e|GwG&MQ;N#o(E`qG*6jyW`xo869O-j35b-mC#>Lwnz zBD30$&Dugl+_ZLSsK792aI+wpz2{x3wK2RK045X2k_y1+Krgpl8gPUzP+p((clpg0;c9gtMZ-l5{^dR#b_pb7f|1*PFLLxp@rSrRu2 zKWlZ3204t7pEl2eeL*WIoIP`MFXnI}-)`EXz3Dkv4pt^zP#P-ndmwP1npyaoH<;=AjfV z8P%Zl(-&W;Ad_3Uq6Rff!Ln$-PPDYL)%jCiilev3i`A4LxeAi*@H7tBgaT@_ggmHw zh{ob1m|Ho(Z_l}Ij-vAEF~q?Dj3!6>T(hnXX)_aOBxi1hdk{UHwSF4$$ysMTO~4(s zqWvVtUXHAfhh-cs!O|SL%7t2|gY@_cW&0Swr+jglEEfHP9}P6K)JI^s>A_KMr`Gb2 zVmbq$nM>oIFr$jb?|_wwZPDz$RhYTy^Ac4Z0*N zzF#{1aO@m9cDUZJ#bxMK=4fWGSXS-f!IVMXrD?n6aU4S!43wy!YU8O&kH~Bpb@hw8 zF(Zne(``Dwi(Cp>3dQNX((k-ibyi2Jpt9HO5U2rgA9NGlB~X_-@H?`(2YuC+S_+Qx z1%7JV2QiUVQ`}S6-f3$Mg$j(z;q)*@E3n?xDVF?*ru9XD4yw5Mi?YHP_R&dPk8>6? z3n5XZo9jxaYh{W|%GJ>T2py*;yDOTdy*D(iRcb|$N-s(l1i_K&3qhNkDTM7DPzIBl zPD4S)^`9EeMG(o^&+z*;GZHLOM_rCd0+|GL*(zIL^=abaPZPm?yW_7y2Gg_+&d7*O z>{+M3bHpeaxW|~pEW>P);!v1jDLUA+Q+j|1&SFWi*Iz2VL%8Enir;T@Eyi|3UQ4Ql zS@Bp`NzKmc^$X#XWj#ME&Asj{9ffp*bI$4wK&W76!LQ zx|%1{E(MLrlXmraMJC}8rt+|!Ohu37h;V)*D4LY+vSQ`TWXW+Nz&T2ut+j*v;RTP` z(N!t4Rh#rX~Wcyz^fVDuk<*So+yQX_IhGe2MZ)BC(}uO^Ri!DIJ*Sb zpC&5MuMe8p7M$%wOl6v@)QLO#{lu77fyc9t@$z`KJO)#XK^uLGqIgX@mzjLV8GB(x zb3cj2acX;qhF0sjDd}bM)U@JJcT(kg?u`+7UW7*(5AD+;DFsK(Q>&&tqqdWON~bJP zl%H&82P=(e3H5$>Zcy?2E#lK3GPfjL{6=NJ`Y29NjR!gO1pdls#AUG=fm*&BL7J`{ z(N7|J5(NgqfQR107$`9W^#&QKkh~Ww$qMSu-c4r~tF9(Y?^lA80+uegj0{a~o=iuA@>;;r>1;)Wg2c@4$o5ao>^Q98u>7BgxMGMKsOq|1BR&e)kA8Cv zz3nsy49m2f=Jm5v#b;$fZM*QF9rWTZ%_~$Xa*G&^p0B9tn=n~#~%mP=%TM{Q?vJRYD5qXpLPRhV$%;chxNoJ zwLLAykgb2r?g`!yse;6zmE)`K;Q`YW@)|>x0x+U)P#LLpgEN%~K&B9J=SK-z3{MLv zgv3qi5`L)gcA>7SzJQq*a0)nS&LQgff!*P4*)bk@Ta2e9+iRzXW_E&_TYrus7!$8o zDD;hnM+b!sRkHmodH zk@*<22xPth$Vvr5slB^X6~AFTX+c7p4c_0l4`Qzgv4%Ju)Wa(*_yXh6amfAY$X~*| zudwKN=zM)jorzWzrEDzH3+?6Dco*U~AUOP=o|*}{B0KqZKOPJ~*go8=r~xAQ{rpwa zOj4yns?94`=};C8+n_YKch%$LE7B_&>^`Q4CSNbcXFIEK+`PRjZKaU)Wup+DK8x8g z;bK)r#7PQWavD^0(Y*aq#xKn@Shk)hUA*E#>)ph@ZGwHRPZPk z%V7ltIo<(WyQ=#L)-|>*s$LsiOhvaywTPrS{Yf+*V`(QDINoq@7(AoW0H=;GS?t$T zPPJ&E-9YsA)Unv;d3FR(?LQ^T9eBnY$~$Y$QA72q_a3+X46$s+sVZS<(^X?fF`5k4 z0`b7Q3vIuG1}waQm(=x>qx(EaiPlpaW8M0^Zhk%BKASMeVYaRIESqTSC%G@M+|%YgSYJJSS=qAxH`H^`IF8Q zPjTVmaW%9Kl;Q(C9bqO=V$%dIu}HV7O3(<31Pm8!*NoWCO@C-egyZ{#M~wq;=UQh| z98;`c1KWfke0Y{-DG@s<=bP!eyRf^E@Hb z0pdJd?E5Hx$E;uin3Us?ebh(`_9l2Zv3IK^ll~~NO~^c1WIT_;4_5orSIwp5O=&mjHgfBVf3jwP zl1j&Kr_#xzsob?y-3`DqzUX-Le61yDYR zWE(>T?`5;i$i5+AQTICf}{+s*oCUoPV6uE&n+FL8@ew<1HZeBafDjh*I z?bjaR&Ry4sg&R>lKfa<)E6g2pdG0DKPCEJDMv?k^-|DumQ^Q<*Fu&-!q zn_R)v<{!;kY8k6@f;HN7QO=k?EsH&VDX>B*vZabKU2Vx_xS^7NjCz5lkOWOur>UH{ zGL?q-D*pCbTgF|3-!|mx)?P&QyrpKvhC-n*wdgQiKe;Br?rI z5@~9w<@L?SWpwR;ADYA!urr?`e7qUoVzd|Il2u^8G=UMYy-jQVr_!v+G{#^7(+sqQ zIE)$4Q>=0N!vqCZ=EF zfdTBqSdk32-IoW%iBx(ST@;tx-Ait&o<=PO!TVuzY}T)uG-+c-Fs3w5$?&SU#SRA-7xM?0nx0scQv7@;+9;uTyyKNn>qF8i{4 ze14T$!Yub(S@WnHQ~1fd%Ts++&fibQn0BSN7`cV+yk%-oTrXu0YTZm7k$3EkhyFzI zs~O7JF_6%X2Z|9Vsz9I;OJpuM%g7(ZCPy8B{Qk>Lo^+BKj-cOoxS%J}oU?0obW)ge zu+B~%dqTMw*+3XiIrXettN>F{mx(>pmC_I#{LzZW-6Z?MPr3L;?KX#y=a_VtZnlSJ zF_1_Q>h$f73L<)!B2lBCWBOOP&qyh+BzmHqsFx)~FY>b5Fz_FfU_sYViYBze_@bbJ zsQEAp9BG>I9Hp5M#dzNC7u_xGM@yem;Qq2IHt8&u7R(+=`GXDlL+S!> zs2($1x(}%nGM5z3w~mqW2S()QtD*}7UWOeLs=mYl8@2SBjkW2u-J|AjBrL1&S6g7K zMIzcav5YzEZX~TRsBl`dhScV0DkD9^{{Ei^jAr1HauERDPn?@VeT#X;qYwdrD~3Fj z-c{@$H31D?_tLCd`?e(PO?8?|0dXu!palm2Qyx);$wW3>;*&OF^7D)(i+S-kH6^w7 z*;F+9dSe9kGsFBU`b#4eZ$Ch{qh%uEu_X;G{6h5O1S|23Orr>u=lm2c1u*-Bv_K_R zODw4}kM+5I_e6@H{r6e%2&G)fKvryQYZOxW$cugho++LVRhG_F$;TF|q>9-eSTGI? zdlkuWRu+GJ_MK8cT)uc8`#5}3e8?zd%_(TLW~#xWK!^iT;B=&4g?H+90R*%K?6h~o zn1OpsXk7=nU~B)Jge}y#Rzg9WpetHIPh2@`rWxibl@#qZ3Pp%Dg;cB~pA(SSoux?V$fs)l=`NW&Rvm=VXoixeXz$^!n!{EX0;I04qzqX>n_i6rGXc~@?aGAJgAO=e&G zP!)wxrKDRa=#6=Qpdgy~e0x(+1qO4L<%FTg2hYZ1y&F(M6xGI{WCxDU@XY1LP#BkoReYMcGUP-L#^i`iMxN%)UYM&q2) zx)}fFvyY+k)Tf>%XjPsE`esu5AY(}HdS&V}FK)qJ*?|LlPdNRN!b?TctRhwS#5o5! z6Ir~^Zy*$%j_Vv;Mi%3}=7&L3v-JUEuWXIkE6251|Hjgx@n3=Ls@V=Tg|bP!DIJT4 z$LNr1{<~t1WHqe1O}Fpl`HTx`urQ|KSwSnf zyq&#OpG&Nelh>zt&y7|EO! zS$KA1TDS#xfD|HN2E0=nmnZZQyB=YW1XuGQN^`4j3Kc8mnc9fp7*pnf%0 z+)6k+WdJQoyA3o$N9-w-Z48|SmOjTLy8iow19;67Gg~vSN^}YEABub@G`1nC06v{O zXl)h|w{hu$`;K=4Z##^)Et!j+Tzt;D`JLwIsAz9P7<@kh5ACQ#thHOp^C3eZq$nkQ z#S0$7Dp!zu;+!)SJCru%#3DHt*+2VlS6@pBe)#073@bI_-Pf&x$dcIaIz=Pr?#ziR`6%f*FLzK=(&FND9&fi0k zM1zCPTWSui@7?cL+J-9w+-H`VrAv=EG0iG!)Tv+T1X^>XIi;$Hlo*!h;CW`}fP zp1mUHeqEEyrR1&v=4v<;Ga7WhC`tYsKO#~XA4eRDXw(*;3E7V5d zE5C-<8B;vnr@NSt^b_|qr##6CAy@XEC~%|Z8k?aJPZn2`(et)7f7IZ$*{36`sZ6AV z61r0pFZ~H%y}=RDT1wu*Shb9Sw_pPD=0Zx9CYt$e17)r{*C=Yoc`(Jg9apN52Eo#m zFHsRl8UC>MU%XXbp3s2I^qb0hDF z)sHEIjz15OYK*)~SfZ~?cPS5L?6}j-HDsvg!c=kPM!NKX0$k#uh~$d&l~gZK?~tV@!AD?fW(ZGLA?&yeho>o%r+}%CJ(+ zn`Q-Y;BKur5aq#Y@&r=g$-)sa0lMqfk1lMU4R5PgvAyx2RwY=}2#DTF{9DtPRX0Yf z^#)iuz49RPurrz}S2@TsVD=*{C1Q+7t2tMi#SGo`I3e?0OvoD>w!y~BOFt&Hcf6%$ zdOb< zD_Yd(i2ERTvd?S6w#Athhz?*yYRvqY{nKfclNme|{xP@P=DuWh<8!^4)ik+3VDhx& zbFohvw$JbeP)9_hxdiW;un`YDx}hscqz*zm6TLsS5Z2Gh{h&238PO&9gZJ8OB650z zjBHo0)L^%0Y!t4)XAb9ui0FBy6%MQq!sBK4l!(Llq_x2;W?Or^7;*Lr3@3?MLq`UZ zY>)uqJ)Vq5GlEsleq6CQ0ComVU5O8?cXR5@)|NvvLC*!e+7QO<=$QE@q-!afa=yG5 z?zv}TIk>h?5`@7+@r;lAP@~=B&_bSV2B)^_kV@`FNwp=R1aeO2b{ZiF!&9U(XB)*K z=oIzpHv}GNmk!s!dSm*5o83mHa*HOgHR%mUSKCa+&);uM+#{z? z2fD&_l49qsJP>7Y-2g5rCUgrd9~73Mac<+vrh(=T!r0HZV(;2x%=_5sRZTF%+d4J& z+dimdqu~&dg<^%`4xuj}MFdtIP!lkdayANOhE57+Z)D2a4)`;scD!bBgO2JcR_DRH z_^|Nse8TV<)5vsC$nGmMNUgvan$1o0A%pfp!9O(SU2lm39Vjk{5P2UZl(0s@!$nDr zR^1%loZw9y0J(>$DO2c^JVSzHc@kx_b~f}qs!OGb%tZHSX6-)}LN5cQjqfy=`K7xv z4a#qz?>0vRNhiF%GC`lTq8mg49er-f;`teHrAw=RGqu~KAbDKY0sAa1=Z=+{g zq02QKm)j&w%5T&|)76=T^tkGVXs8{0tV(11$UCl)e+RneHTGDsP4DuSt5$tdoqQu8 z!EL)0M>e*{mSU+6wlTOqyf@|J?n4w^PaSa47g^w%8=h0Vv3y}djyR>b&;+NzGi{nK z6uNJt%Hl0df;qY7J>)7eg>&!Yl7v&aH0WKTTwA+it#{PHVeXJaFin%eZ`!9d$WaLi z8;(xwq>$$u*ZWG@!XZ*1Yrff(K5YyJk!*QZbKk@u3bF|@Whd{|lm^ZsQJj0Kb(CLw z_)uwGx?s!DC>Y#R#mzcB5Fu5x^itR8ulBI7`^ip%@!T#%Sv>7ws`rr00ui{-QMHVY zo|oD%DxK4-(QQf}S*#)2wH;u4^7<=#RAI~U{q zgmAm?RiY~bTa&hBfv=dB2;N1VO5pww)+>WiJ|oOKk2`w;gYj#nMnO|UM*USdsUQ|W zSmy`MFM1c!V~>}fr;V);`Y8A>QfZLgpK+FW)~>|^pT8pBjdcU;R0Ls}YquNt&7L~j z9^uYp?bV-(>%Or-06zP-4f1dF??r&hj>XVi*W$^$(Km8ovbr=G7CF^9F7l5M12L5h zcRMw56{@rX$5VCdP>1qLlY3-hs(%{S6Vgh|+Y&o&LgW=J<<$~vG<#6=6mu3`As*Q@ zENnm=sf4_4D5n7p^?1nbgEBQt0tf$o4GufCiq}vbt$SwIb2!7pCe$EGEU-13uoobe z04_R$O^rlr00OR=1Ow@>2Wymu7gq#_aXacVT$jir?7e|JXIc!{^7LrgE*VwD z+$14dl8K4r&pY{u-6=zP?dE};hXYOYlowcGxLF)jg(Px%vmwf0o6Ui4EOJe zV+}E7zmxZKATqPVCge%JJ>DNKx}ri6uglhJdt^7AX@**Towm@cwzpa6%f*`EUsiuB zixKOFc89>8*=eS~8SQI|58=6s$5td~Nf!xRJ4&CpvtS;ZO9!pPyZ^&vC`tL_-p;$e zxiY(gWL1NrGJ&$L*j6(xl8M8-?dF@m~EH)EM5 zZ?5T&uL;PVHSE%c?Hjhp@!R8FTf*FGlhN;=(D z1wNxT;_>eHCWWUxn?i2!R^5(zc7PXf z!RuC&cI{b7hB19Mi;t!Qu$7^0)av8OScOH4@?pt!mcee>EHdqh7{7rQRTHDUW&5{; zOl^1;RaN2Y^g(UjQ1pF+GGP{Am0o6V9#2>^Mc+X>{5O+A#hEKW@+9W;m6u7+Z>GwW z4#}J0E^a932HvgRe&W*k;o^TFk#VUHcb-vu%V4f`$iLtu9lX=0H}OBO zgf?-F2S%6>xGEulUy*KX!UY%5r2d*C6H_o0X6{9pImGpkAf4bYN)&7^K%8;tWaib2 zn|73>v(yI_KKjh>A=QOI07JsJH!YMmc9x&`SQt~&dP4Q)9lW&WmOlINbk8S~OC`|V zhDA_ls8(6c>5FkSZpfdLO1`hZjOr`+t<@c;~G5A08P=Zt4)D3IJ#QsK}3HZKf-TT zTals&%`t{OUv^AyWh_KMXBe`amHPdn!Y55)%Z61{tevV2_9f}-lEz#;bDh zeV_Bq2^=K@50kI9!H;RA|ENcDE_yO%Kax-6=%(PRP3rPjEG!gPx%qyM*ZD3OUhv;( z>K4wbbh9t3`;w47S`}pRxKkgX=mXt)UhqucitNNM&MA#tcmE zdNjt}Wjf{dz-hejm?D^X`f{g7iTBgx^K)r-ckhS#OUg)6wYbr-wsiH;i*=d&ik0lX z(>HL%_U9Ij+fdjDXMPdx?)5>-4!OMQ! z-~+o?@c}=^Pj;Zlv)Foi5?TqfeQ| z%z<=w{z55up(=q+lvXLSd@=Ms_bh7Cl*z?jR>&Jmzzv-TD#D_1BHC0ip&)*4r~R9& zAd?+;BBR1vD0|NbLZX+%DfDajOidAh*Q2FwQQR7=7YxR-OOP$ODuyQ{JBb7{Etz0-Xr|UTXhCu1VUC zr&L>2fs{b-r#gQ9{y`e974zz0)JP4mg59tz_mL}NpZM84@aX5pN}O^01muh1ip}@( zx>g^9jsp!TmgAtiNj0|5_cp9{pkvSo_9vK_O|U{3-E7#^j7C8j0sqH=XJc5*B-H|8 zL74#hpMNTK5W(jz*?Dh*55~O4%hLkzCrUJ%$g%r-2f5I4y*dbDxBTxQ4w+qWr#ao&Ka zZBo5y8?TWFY+EpB+$iF-)d;>Dtg)ig(F=F0&T^?cZ#J6z5_v;w%8nZd#iX}4CjS_Q zpuoNOYd%C!C>4wPj&3~(l!0MEC@uEF(`F-UOEhWLl>Sc$2C zZ-Dw-YYHvkagdH(ZUFIzizngiqw}5CVm>U`uUduH#_N|pM2sCOVVM9=0l0LLWI4B% zD78L#q0S*C0{CJ|@HJNXUM~(Bf;n=K%d%a};F9d(z50uT$2Iv!l`}~AcQ&!#3_<$Y zGavO1QUams;1Rsm`*m*a~S z(LMA7>&_mW6xC%ODiZr|L7w29#FxWQWlK>92YLfWBHpSxNT%E4)G!v_+Lw9*v83;h z0`w1jR@S$d?qnDfBST;)Th}tmX>{w5ihYI23?us8ranT-<&gwx4~1CSxYN;op3)lg z1xAD9;fV)X6xKnNnCv{|`NKeIHbkn~C+-j4%*g}J+ul+f;lcHC~>3 z{nMO+{2-Hb)NTmX=3ooImZQzAWXyO}Ak}aYcRQ4Q*BgY@(D)~IbfeA-KzEN&7=GyL z%@!8I;D^Fq&|~zLsdCUU#?(&i*AF-I(zufpsUKKy4Z~{FnveFY?3@aS z*p%Q2$wI~6vBghsxM~p4zjrYQ(jTeSR|4zVNBO*yuwv1oufWfQ<;SO6%M6TX5xRm} zPno0zd{A46aBEX6^uJfUVPG-@bN!44Ju#%akqjwkU5Q^0#n?HF$GtTfC`Up@>^T07 z*n9UGYo4(PE-YSLGc;_)H(|OMBD;&Q;dd?rwDm5n!(#=#Lu~9f(a91{i8&_W6xaTN z%uRJygL%UMS?`50zPwDU47oua&n^rdMp@_;jR%MXH9EjDFN%qZ+h6;XBJoFPYX{{7 zit;WerEC#WIc0O{JP~hkR&d><;98vzR@JA+SF$wv*o}MRgb(EY2ifWG>=Hlaei`N3 zaEgT2UoR`=;s39)vw(`D+4eo|?k>RzHnh?w_p^mFum40;T`a5PYr?!e!grxga+Ws73mwNqUAZ z>Y?!g6SnzPU01@cpTd2P;y07M3z}(=(VmSRv-adCQbZBYyL!c_rxrTrS$djb_jY+^ zy(ytU!Ut7>`nDWvtlTLCN*09Rh0mDhSL`tYbXnm54z5C*?1yf&h&VE8FY^4hwoNRhZSZTS z>)YNDooBO$;#bLED4vf!uY6AG8e!M9L~tJ@edt7c?rzS&xVpyNksT6IJa1El?|E)% zRY5Kl&-%uW8H8&;*NlI$Jh!!mj^JuBs2w!C%TE$f!!tXi*IOX5KS#myQlt1v3a`}v z^Hsw9JOy6-_2XyjOzQV>^_ zks;_nr63G?nZrJIddx{i*K|L|(r$Rxz3!bL_lL?44@m7@1U0F;0Q201G3MPphGcnR znD5ytY3X;xn_V$Gnbj4tD&=+%s;A zEADMv0WRYz2Ml}7mu+HfC9ZStfpfagS zZ(ZqHANJU^At7%JhF8&}ONN7JWTER*<_i|02ejTZ8N-Q4Uf|E1)M}U0+@<7``YYag z4n^R82RmZ-n~O+lrcx8{E#<&zL>Dv!lu7*jl=d-YH3yY7nSKZ476O(W(W%X#3Ted$ zB~`492fIWoH%#3RtbS7*)=qosWq-;8eX!V%z)J$o?X2}<=Z5m}%!Ol8Oy8tAQvpmBqOhf;7U_BIkVvh?4Htna|IQ6CgvQC%oB2fA zX%)vCt3%QGy$l|#PIN8duz_`E0;@+?vR?MXBLE`6h4WO6sEQ1{cE(GMwtVRXi4sx* ze0}Eubbb}pV%tWd3GAv%$eTI@J~;Ab`4mK-d(8jVxH{%>l8gwK0qG(p&2uqPm=>I| z*R%b?2W>L-%`Y8Z8sAVvw?rz9vX&w_#`0$^Fh~uCnDhFMOEr0QeobM;rqXvN-F0)~ z;dIknRq=zC3MP$N1jKNKAVqZ_8Ms7{CmKmM7+hlPlOWtdM2waAFp*p$$-^iiWSt4^ zIw~8D+Py*i2x-{9SRJ`b)iK!!SE*dMATMfOZ@q3JzQQ#4wn>=6^A_h25Y~WCTZ}1C zrP={0eheL4KmvEXGzfH!u380aLsFg?bykj=VVYV`s$|><=@*rQPGrg0(#G%;6?+Qp zis81lobPK$6p16JuP7l(r4{|rqo-{hAMz!Ec$=;?8ZoO9&C@hJv7eW?caX`1 zzZ|q|+c0CYoERY!opHg(1IQDRqR@#|?RE01db)(inTCf+kiQEXC|V(fNZxB_P*76$ zPC;KzgHZRUF1i(*i<-n|7W{~`=|{*WWZSul++V>Ue83nOVlMyY{C;Zsg#GDo;aK#T z{(N>+*oNOMm!BLQwE>pIjt&PR-0@NteCC{yj=`ZQM2tww>J~-R--~NFT5~qs|60a} zq~jGuT3C)b1j_S*{Oju|g_n=z)=i~j$lqVx_QK-$hz-nOgi#fb(JS0V3gT-$lB$V-G7)p^S)tcN#(zt+l{c=%lWNr^l_c8P@ipi=eH#rnTJ{8kO zd-NwOEZ_4L`%H7SY80(F+t)5Re|VUDXo4Jl^;Ik_j9tFLpwRYX@!^#!eFnbu7mvviPiYG+) z2M=Br$~a>HE*RSWeOAcWL}c)M-ZewH5K1;wvS4GCl>J|0Sh?YTSG3k zUJZTYw30Zv|FpdHQp4!6IWy|Lb20xho&w-68=_EX;9yTh~>8^G?p14^9hfVt9KCmdgs$gHY8;x|=a%Ps8K4>WmqZ+$Tszopo`2EVfodLKVJR0(b zfnX#d&-I0AA#bXsFN*1&Q>s%c>&wOh;KLy@Db2-#YX>G1h#WV9xMkx6q@1HEO7cZo zy@;84Wpc!_W#Qk3b#>evvgf`1u#Pp}(Zw$1Z7N+DALbO_cJFc8tfFb32T;B|q30qE z%}~NqR5~MVI#zE?oyjVrW#=Lutxv=hEgQBzLXba)+Q);`zg1Rhqy*%xG$Uc1Mr`j%Nid5BcyZaj;ZZ`rr zc5CtT{^gex5EX2yv<#oqTm)(H;G57)SbTG?nOKTJ-?IGxvNNPL0$P5SSJ@bE^^ukt z*t^Ifyy2wyDcgb!4!(+Lvtx1m2BXyMyVl}9WgX4(k}`@RRlV`?P9!*PS4WWVhb{@z zDb&N1mrO5$hSSQ;XEVA&^bG5A^BHUem29-j<_^q~$FGDeaaGVx%xWedL6uG3aT zRz9IE3@rvPvZjvNO3X;eDu;%HS`Cndxry{cTVo(wiyOP7_RjT=J;Kd#6lrI@)NX1J z;eb!0&A&3-ZYzTKEKPi@{8G{5bXx9_gA_0kb_O`0XaKMEI7O^Zm)TIeHI;yOyQD40KAV- zno1pIz5k7zZQ(8Vz_#0&g2>;_1}EFpfdmoeV?(?oPRi@oKC<{h>@UQIQQ(z7fskQ* z?mdR*)K*htT5D1#1!M0fTC2*9y?xB2k}0u+!8f5M0tuV-{7wzk4z>DlA%#PCTXB1D zF+?#ozZ<~0gh%qWJ-C*&7qigIDPX1=k>I5GJjt3XcuzUR{WK}g?01?kvLM`E)nu>1 zJNGZNT*0Nc$K-T`c-qWQPgxLcJ||O^Ly8q?q^1!NmqDh8wg+Pzlv~bornVQV4FMZq z)p07S_w&D#hS5RNoTu}6;2L2!pw~kl=Tvf-EJEIkE9%d^5izu!`-q=`Wr8iIx4h6^ z&4Sv2qefAeM2c^GrP)au)39w!#-94kr1YBVQ{o86+$G}#1fc|{GD7|c7tS)7Dq$a) zTUut%U?QC7q3QJ4^A{ow{r%=;@f8-1SMth9K65rb_giZ#v9r+7GGcq+ojhXkRzpts zL?UqF(yS#~_OJL%xtaDmK{{8$t#1v%Y5`=Y6+h7EjZbw-W&uhNN#TS-$+I*P#Mw4y zM#H%4Cknemt)>idQmhF#U&S&Z{aqO!Zxbn^l?qSQ0|Og{H-^k-=JP0NI9@yJU9M9( zQdkw(m>|9)-i(QOWPS}Z7KtX-W{$L~vY7udhFvcY4k3E|;7w&x8xd1@s;trGD>8$S zsNX@o^;tzu143(XJ_@YUh5yoL?Wc2%mJNbPN_`7CyB%8!B0^e$K1R2yqKgR6^aGgF z+=-q%g9lidjf1@yPVe4W_)AORwq2d#a}FFcZG45;3qgy61GNtnhK4%HsU3NA)vm!l zk6d5!0=9^oZXXGYVtarnYNlL#$yS{6>RTv8?vbh_{apRf$wYRu3wt6>ORHejumrrJ zw#~=4K1ewjvRvCRFy0ZWnvDyOB#@^K`IIj#gw!YyW<#AmV^px#sB-;hHPW#^oj%+| z2a)a_q6log@G1nz&ti`Zf+&Af~A4NKd4IiiAo(yd+7`Z4h}@U8`Ahox&>l(iTgs7SA`@I zm@>O^vKL{hDah?lYqwr>s!!k{b%`xI=@sJQE{;3aBgY(BEi_XL@3Vi3%Ji9X62raj zz27}3v0|lO{up~>fy<CV(3D*p5d4v(|ktF)0q^SSMpMVCj0IL$^RDQ{-3r#da@qC#~Y^E;Tz*tK-IVCYzR zgvSZ6-UBH5$V-cBd|(DD4I*E>4voF!2=8Hzw~0@Iwjc3E5{pyA%vz2N&V!tEsqCjd zv1Y#H)Z^5M+=dd@S7_h`_|C*kSG=#uaz`w}liW$cyjW{6WIvjD5j<^z^+MYHK*k z0O%P$`)Qq~#MN;{N5jhe)E=;*B{;vEk8{7lzKQ=ZSUdtW;6ygrNswO&=tZCrY|cde zQ6fQY_rimZOqsJ*UsJ#FmRRF% zo~Mwe2kiA!YJ@-zEvdN~V|AeR9|FaQwT|P$meipq`t2Z6-{CF8SQ7;UycjznqoAcQ zX7`!pK1nJv5`WC`;9@)aw6a(rLW?yz%ZsryP~q5ZoEFd&z^I zn18C(48#?4<%iT{-BtHD;8qb5V}w-N>l%Y{o@`9fx#m6#ym7lOG$h>;pm-{mmm#t> z2AQ`hU1ym5s=e(Ea0&=~*`e8F;;{gF9n&(H$(gH0M%bi-Q^P$x_xJNSRr8CpvO<|< z<<47e5y|!?lgxt<@3hzozD3$_7PUoDEEL0JClv!u81k+oe^&~{s@&nR2O-g1BBw5{5-PL5zv zfZ9TqN&gbH;1r*Hfy7Hu8^UJhpVGHD?D_c{ZbpvlV^?-eXKc=o1iocD*gUE+uc54? zTyCM~sNk%=!Hved7rG?1!5A@&qU=z{3FxYjb~HU2KfFe|If=2o+d+LaGM;4w167%; zX`i}5AEK}3`yRq801|FJ3ruQsV6KXfLAF`u_HHaaGXhHa=@rhgf!`}>J`)?fQGU6*l%<*L{|1T7zXE}665m601aq5F4WU+2tzUl$?!aD=KDDiR}Q z1c``>P51sO*N_jmlJN z=wp%@CG#4X-%yrDkK{8SkpQ;k>R#3|xowKOZ2zm-hS(DA_F;+`!;@a|pgU%1a8Px; zIa=T9*=|kshbL7!?VtOR%Q@q8WYN{}FFVhl$1*e?%A%W}G4$2GRZ9XW1kcWL$e zWp*YE=Y(UnFGL(!IIh3%qPC)7EXA&}r8ap#6o?cPp%t_i<4jS2klRo~c35ev#Ln$dFi5o$0x3|~62%6NK1S#v zx^>jNxpd|d_}0%fN?R{x1TDUYc&u48iW-etxmG#nX2sS{godRbAmhiKGEm`B1}UdO zzLaxdeKGH?e`v>OajfLU4U8JKYwqA5{o*hFA|T?NMWocE8nCFSsu>gq2|;q?j&{Bt z;q6~n;;(;j=M9E;eISzG=yyoPiaH)$5#Jsa+#C+}ln$>8hg=X!e%il2`t*!R=5J(z z&E!q1An)Km3$tbBfUDezH0b}OC6bK4Z+MAZ-l+>Xm@84?5;pX(JbeRXdHK9WPJJTU z@A@s)ra7b`%CpGVNCl*q{p;Fv&-1qg1wse5=KvLOY*i&#t+Pm!JLXXVQ*ZX@aKN1~ zqvb6MvD$>Z7M*YBXnLss5epNk1ZHzrR0X!r`YGuR%BEy##0`}69eF8dw+O$$k=!_P zu%bJe&L>$#5t!f~?%s~@dc`%|*-lbTWhn-Si9dI98rzV*UfCR-yV2Wk#$_{aOw%W6 z*@2gQfkNTF0GRfctPX&m_GNpzOxT;hctj^&Z`4VNVpP*0(zupI918+-_l|tov;A~F zG%#uq0nBS!-+omw-n)1D8dn~dW^ckEQ&14f0pCfZbW<2J(TE&}jo8uDFn+EbCmZDf z0&Q&^bWH=TjMw;FYi@k3RUg{uA+E`%Y<*UMm@D*)Cl8^s%sd|@Zy2n`kSXGG$><2BH zGDXU?c$}}(OE6&?a!#p|^pFmab-_XR6uJgHNc@K})_V2oN$hU*^s7(P_F7fkEyCfl=@~=i zRo_k2kK71?$PxKz6g{yMbw_EBa5dd#=qm9&G(l**b}@rEPpI3YoyH<55el~APmf;- z*4?|f2TH1BuV0ij`wEGT&qp}{#UjVt816!6IP8I1#`6)K%Kdl|IAZr!vrA+J$$7Rr$JdFO3UFU{PMy-D zUySGw+OYBNPL0lNMJ7AFvRI8H#@wB_b@Y-koQr47u2J>tRf>&1lE~g`cx!a+K2q;)gJp)^f zG{3x#E)B3F4b-j=lZZf_AotSpA*_^RABg}r(5+{;#kr2vqYRM2*RAcB77P~6Cc(5F zwJi|G+tqa|P-m=b#yHZ0uC)9%ILINO@w|2(Ldseklwn4c+`M%dkM>G9CEJf4{^I4O+4)1c&Q zd{NN`BP3fx+oF;8N_k*QsGH!P!L7%iKyWB1I%LTL6XAnU`l$TWNDM41omks~%PENb zlF4-fcg6Fy#etUCFZZIjBXYNRweLO*%n#me>buvYwp6W}uwaO`5)J44n}1e;b0leu zii7ASC%Ml@%Ac^X8?G=AAlNJ~c-7)4j~l_8xVWxIg^^qAMZ%6`MFcNbs4W+BNp+BT z(b!-u5<|d)!4@=MYvVrLDs|h{G7w~70B~{*%;F>AR@`Cs5e{0>lCty9zzeaVyR)*j zr7kI1tLg1#)>mH8$Nlg%(D7J57O{?(m%U2OI!S7QkRSlt2w?e@16~a$pnX zx;GzT_sER{I5-QnkT_WSw0I00_aO$QLB0AL*xP`^H&`8rSA4JOcR;$Cq(PuULME*tASS8*%#yTFWF12aXYmX5W zWPX*seNF|4nSmI6U1I}rHk3)>)&JS(9RE?p_XT5+>q?@UD~?QXq=fV(vR>^`XRIY+ zr1R_t?;WvOSR{dMPEVy}olInLuCNIHl0}|_@&*HR7zne9(G2B{aAKI+EwEJ1ex~7m z;A?5M*iu^vh!{D_qffk!JwHKrU+P7h>UVvM!J5(zZx|IcSzL|HFgMkGcRTuoe1|Ca zn&r3WRduY@oQ>WW3V+GSbco3zuqX|Qt@6GAzI83WuS|NRQR)eb{m(`Zd3M<6@KDhY zM4C`rA@?m%6<7m$(G^_Z?g8$Om6T(F(^G>?o)U`nc;0x&Y^oWi2*gSOW5?mqtrw6p zHCtui)AutLRx1)Wic-Wzujo0?u(;BoXWPT$E^VJPQ;Mv+8VPHqX78$EgB>u&MfPj5 z@IyNy~+jO=pk#e`R_8!Al#0yB~Da> zD=t6aU?Uq+3H17fk}%40b~#Dxr5-R^HGZ_N6CQBJSx zXhGBZ==-^;Avy~Q#x#mxLGBt}dpr9>Y<&lGh1yJazYzDha}a7s#zO#F?DGT!M8qT~ ztwu_I+SNurO&LfsR6O&JSu-hCNY^2paFK;Qr9?|BeA#DG_9*M;Irh|<-4t3xC%wog z4ImL5CVkTyfWeHaXg*tB`10gyX-;V9Y6h+>)|+imG&5FKwO`(Uhg!lUndv%5VOMtdRd|O$hKy>i{Ztlu8#vn@E8SfT|A~y9; zg)8RqT?YUr~{*zCdBZ?mljq|DHWh2HoUneJOm=Y zBH%=4O$ya>-aaO!M)|ikP6wu|t=TtzLu$zb-E^O1%F?7TLhb=dH_n zlcxzX=5QfM$3qSgA9%2EGjDa?48#EpH2Oa_rDd%b@$KdBe6c zg+TjKlPp-h{bt&47YfMdw<8L%4~A4^&Kk;VRaaC-4KyvRkhd>;+u>W zB_2f~OP^d48^3joP$Q=~43Cnvjsk(UlxY>pbnhf!-Rz7=H}gG%n{~{T5`8ASxxA3U zZDcDyj^HuKquOBSf|#EIF6h2iw&33TNb@@2vg4g^R*=IAA(7oIieLmVzvum&E`yZ` zWGInvxcy8LLL;`|2^%G?C5g_*pmf0~u?IUqBID#ep}RXU3q_xJOP1j1*t%9%2bXlh zQs`ar5Ep!*(RML4ieE>1(N+P=n>Y4iKxIytCq6Gwfh#_22_8%$t5k@$u^8-4vXK}! zgUXpIv~0w!N-M(`mIZ1?5|OGPC_)giDWEjl^-@ZCrf{1^JRgG}4IL|^AhjbHg>LPu z9U_p^y!hZ}stx+}9EvM7FD zns!@kIUf|?kZ+jM8{K19G zh2r2_r%?wWMVE~?+pDnqnNRHmamtVh^7?sbdMRMJ?M->ktp^7fhv4XY*-D?82C%6U zpXuGA`1J$$0#FGD)sQM?^XcYJ{yh|A@t2H82Chi_w45Y)H$2Vi7mH?`u;`mF4A3cN zT`>g zqnp4|LJ7jhIo239g@Hb!OeQCs6NI4GKX)cOl7x3fvW8}>bNJ73_auD}r!0kPGKHnt ze<)q%^8u1m6UK!`&Ovu}POb@T{T4NQnYGPZoP~ib@|cKZ0Tgctd1iE=MArW{;fh=V zk`nw9h6mEL6_Pz_@&u*A_KBjcdJ^}EZQRk_&)6Pqs1VyU#_Z*e?E4gBOR~&kMN^Uz zJu_C9<#&}2;uqP~&|c4z1g}7pDz<)G(!3wr#oX>hQGy;pTuwn1fO>lCiD`tC0tv1X zSac(w#%N%EAkloV`OK1^^W-@0U;u8QEnE6#$wJVeT=5RM}C60@Z(TXnSF zi$}x6-qhMm=2d7WtQo-OZcQthG7S)XzYKNhfhO>697&6P&&f>(^eo81vM8=7nW2e1 z`+A^EBUB7lnN7SpIrs#@imrX8+7)8gtj2D}J@!b_@nAhv$%K#Y`*1nNTw4Ls#Qb$(G0{OL3g0j2JvK=P)c z`a&{7uHadA!J*LRZ7iyj;WbELWu1*%@#(G872=so@rx1lk3#1+39@Lj)T2@0#O#8& z{^VCq0tX7WheVR{d5ZfYcW&!3?I)FrvV0>D($6FD1T&G2Fc`@Zl`!%)=IjKhUZv#E zGb|w$#LMC&VLMSr%e6X_nhXA8yGBigGAmDlMM+)+e44_Zjb$H+@26~zx!+iW=TF)b zl0J4sZ+$mVv39>SQVgbBPR0Sa8k~9UW0<##>wrw? z-pU6)zfx&L8ZL1YUN&V)Oj64pgPVztT9(BAtG7F0XB}P-k&_lMM~9A9mSBh%e|jG6OP| z0Y?T5+O{rddQy~vNySwj%eqEStko&(rc<-D4{a#+9+Pt?sOJoCK;t8o&z>+FZ*Z?F zSXfJmIGhdhOE{dWBu-pEIGg6VUfRAQf%(1x&uMzo{gajQn?mt#Rth5v0KoVMvVsZl zUmzp>i2su&28}) zPJ{1X4JU6L{CJ*hW-d!7euK)ku!dOTLbbv<<0r9mI?*79WoSv8Q*b%rf1ruzI$<1P zXC4h#RpNiePM*TUnCDKe?8=7&y1e_waD57sd?qoJdwcqVh_G*fq^jY=k2}{w{gwye z%MEXdi~97^Y_>I@zG->^CCn*Nmm}&Eqk`jOqcTiQY*J8C%4D~zRsKbkv)Gbas4!HX zI6Ny{os^F3BK!#aBF$OG?c2zYdc9R-!XLC3LD)fKL5PKA^=Y?uL3hRxyN_P;=Rc*p z`%`Ye8cd3HxLlH}yltzNy+(8wzeOj$B=|estmRtGqEV7Jj)}fL5(tFyYPbxhOrGNN zzQXdkBz+#EXHrZ5@Lvqkuc-e)K6=M~{F^EA4ng^s{8zxse~Yu>mljtNlKcO_*)S5( zGBL2e<7_xsi8$U-C;u;;4IBG!BFTSnHt&^x3xC4d{JY5i250k&nDS?Y${$Rhzk2(- zf&UR_^WVAs-{EW+|HZ@k8_wo;u>Xd$`7=s}iJjv&V&)H&%`e2vug5Q}%&+|)`X88? zKVJW1|4V0oxAANL51h>JRQz)+{+ycsLi@;S8|vHs4u*uW-Y?b;;8z*>e~+19TQs!MwlXr- zwWYJPF{GmU-H@z}rJlX+J6h|1U+w<_ahU!|Clb_t2PIh={>%0+cZhzw@TX2Y+2|X< zFc2}Z!Z7@2BVuJ?c{gT2^e>Ga!1f;P->(u`{96Ms0RZnno?qL4wD)7cdl&wq0hky# z-c#)_8Vd`6@jcJ}q5)V~+1_X4Uo>_AGxOi;0$AC8h50Y#0Bp?6|IpY0tnaj>zm{WR zWcY_Y7G}Ud%f0*m_qwdi@1Fk69xL-d{a|GS{G*L`=^y^G0hs?Dzjr_0K}>&ZgN>c} z?{NXJv9tZ7FYm$nhdp){)_>SzXJP-lZ!FBemZZP7`>y@UkYC$>#+QYeo%O%a-sxO_ zEB8LY?<>t;>asJi{iE)?#{Tzq*#Q9dzx&1xU}X4v{NCpz+du1aF#M@6b~f7Y3@@AC z*{ERbqW^1-{{leCTUy$^)9!vRg}_Bj&( diff --git a/db-docs/seime.lt.pdf b/db-docs/seime.lt.pdf deleted file mode 100755 index c211124495fc7729f60c21acca72e266222be219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79756 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 diff --git a/db-docs/seime.new.lt.mwb b/db-docs/seime.new.lt.mwb deleted file mode 100755 index 88e180fb12c760b5f885a0b9a39d97a0a33e7c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17766 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 diff --git a/extensions/QuestionParticipation.php b/extensions/QuestionParticipation.php deleted file mode 100755 index bbc9bd3..0000000 --- a/extensions/QuestionParticipation.php +++ /dev/null @@ -1,243 +0,0 @@ -cleanChildren($array['children']); - } - return $array; - } - - - /* - * Wrapper function to be called from outside - */ - public function estimateParticipation() { - //try to get the participation from registration actions - $participation = $this->extractParticipation(); - //if there were no registrations, call upon estimation based on siblings - if (false === $participation) { - $participation = $this->estimateParticipationBySiblings(); - } - $this->participation = $participation; - //$this->show(); - } - - /* - * tries to estimate participation based on its own children - * returns participation array or false, if not successful - */ - protected function extractParticipation() { - $start_time = $this->getStartTime(); - $participation = array(); - $i = 0; - $last_position = false; - //collect all registrations into array $participation - foreach($this->children as $index => $child) { - if ($child->getType() == 'registration') { - $data = array( - 'participation' => $child->getParticipation(), - 'start_time' => $start_time, - 'end_time' => date('Y-m-d', strtotime($start_time)) . ' ' . $child->getEndTime(), //end time in action is only time! - 'number' => $i); - $participation[$i] = $data; - $i++; - $start_time = $data['end_time']; - $last_position = $index; - } - } - //if no registrations found - return false - if (false === $last_position) { - return false; - } - //else - extend the last registration effect till the end of question - else { - $participation[$i - 1]['end_time'] = $this->getEndTime(); - return $participation; - } - } - - /* - * tries to estimate participation based on sibling / parent data - */ - protected function estimateParticipationBySiblings() { - - $participation = array(); - $preceeding_participation = false; - $proceeding_participation = false; - - //first, try to get the question before with data - $a = $this->getSiblingParticipation(-1); - if (false !== $a) { - $a = end($a); - $preceeding_participation = $a['participation']; - } - //then, try to get the question after with data - $a = $this->getSiblingParticipation(1); - if (false !== $a) { - $a = reset($a); - $proceeding_participation = $a['participation']; - } - - if ((false === $preceeding_participation) && (false === $proceeding_participation)) { - //case when no questions had registrations - return Sitting participation data - $participation = $this->getParentInfo('getParticipation'); - echo 'OMFG! it exists!'; - echo $this->getId(); - } - elseif (false === $proceeding_participation) { - //if no data going forward, assume same participation as in question before - $participation = $preceeding_participation; - } - elseif (false === $preceeding_participation) { - //if no data going back, assume same participation as in question afterwards - $participation = $proceeding_participation; - } - else { - //merge data from siblings. If member present in at least one of siblings - assume presence here, too. - foreach ($preceeding_participation as $member => $presence) { - $participation[$member] = $presence; - } - foreach ($proceeding_participation as $member => $presence) { - if ($presence) { - $participation[$member] = 1; - } - elseif (!isset($participation[$member])) { - $participation[$member] = 0; - } - } - } - - $data = array( - 'participation' => $participation, - 'start_time' => $this->getStartTime(), - 'end_time' => $this->getEndTime(), - 'number' => 0); - return array($data); - } - - /* - * helper function for Question::estimateParticipationBySiblings() - */ - protected function getSiblingParticipation($direction) { - $i = 1; - $found = false; - while(!$found) { - try { - $sibling_participation = $this->getSiblingInfoByPosition($this->getId(), $i * $direction, 'getParticipation'); - if (false !== $sibling_participation) { - //if found, return - return $sibling_participation; - } - else { - //else, keep searching - $i++; - } - } - catch(Exception $e) { - return false; //no such sibling found at all - } - } - } - - /* - * public function, returns participation if already estimated before - * OR - * tries to estimate based on internal data only (calls extractParticipation) - * else returns false; - */ - public function getParticipation() { - if (!empty($this->participation)) { - //provide data, if available - return $this->participation; - } - else { - //else try to extract, but do not go into siblings to avoid recursion - $participation = $this->extractParticipation(); - if (false === $participation) { - //if unlucky, return false - return false; - } - else { - //else save it properly and return it - $this->participation = $participation; - return $participation; - } - } - } - - public function saveParticipation() { - if (empty($this->participation)) return; - $id = NULL; - - foreach($this->participation as $subquestion) { - $participation_data = $subquestion['participation']; - $data = array(); - unset($subquestion['participation']); - - //saving of subquestion meta data - if (!isset($subquestion['id'])) { - $subquestion['questions_id'] = $this->getId(); - $id = $this->Factory->saveObject('subquestions', $subquestion, array('id', 'questions_id')); - } - else $id = $subquestion['id']; - - //saving of participation data - if (!empty($id)) { - foreach($participation_data as $member => $presence) { - $data[] = array('subquestions_id' => $id, 'members_id' => $member, 'presence' => $presence); - } - $this->Factory->saveObjects('subquestions_participation', $data, array('id')); - } - else { - echo 'error on saving - where is the ID?'; - } - } - } - - public function populateParticipation() { - - $subquestions = $this->Factory->getArray(self::$subquestions_sql, array($this->getId())); - if (empty($subquestions)) { - return false; - } - else { - foreach ($subquestions as $subquestion) { - $data = $subquestion; - $participation = $this->Factory->getArray(self::$subquestions_participation_sql, array($subquestion['id'])); - if (!empty($participation)) { - $data['participation'] = array(); - foreach ($participation as $row) { - $data['participation'][$row['members_id']] = $row['presence']; - } - } - $this->participation[$data['number']] = $data; - } - return true; - } - } - -} -?> diff --git a/extensions/QuestionStats.php b/extensions/QuestionStats.php deleted file mode 100755 index 7bae11e..0000000 --- a/extensions/QuestionStats.php +++ /dev/null @@ -1,39 +0,0 @@ -items[0])) && (!empty($this->items[0]['presenters']))) { - foreach($this->items[0]['presenters'] as $p) { - $presenters[$p['presenter']] = $p['members_id']; - } - return $presenters; - } - } - - public function getSpeakers() { - $members = array(); - foreach ($this->getChildren() as $action) { - if ($action->getType() == 'speech') { - $member = trim(mb_substr($action->getTitle(), 9)); - $length = strtotime($action->getEndTime()) - strtotime($action->getStartTime()); - (!array_key_exists($member, $members)) ? $members[$member] = $length : $members[$member] += $length; - } - } - return $members; - } - - public function getLastVoting() { - $voting = null; - foreach ($this->getChildren() as $action) { - if ($action->getType() == 'voting') { - $voting = $action; - } - } - return $voting; - } - - } diff --git a/extensions/RegistrationLink.php b/extensions/RegistrationLink.php deleted file mode 100755 index 1e27230..0000000 --- a/extensions/RegistrationLink.php +++ /dev/null @@ -1,62 +0,0 @@ -getType() != 'voting') return; - if (false == $this->populateLink()) { - $this->determineLink(); - $this->saveLink(); - } - } - - protected function determineLink() { - $i = 1; - $found = false; - $sibling_id = 0; - //try to find a registration - while(!$found) { - try { - $sibling_type = $this->getSiblingInfoByPosition($this->getNumber(), -$i, 'getType'); - if ($sibling_type == 'registration') { - $found = true; - $sibling_id = $this->getSiblingInfoByPosition($this->getNumber(), -$i, 'getId'); - } - else { - $i++; - } - } - catch(Exception $e) { - $found = true; - } - } - $this->link = $sibling_id; - } - - protected function saveLink() { - $this->Factory->SaveObject('voting_registration', array('registration_id' => $this->link, 'voting_id' => $this->getId()), array('id')); - } - - protected function populateLink() { - $id = $this->Factory->getVar(self::$link_sql, array($this->getId())); - if (NULL === $id) { - return false; - } - else { - $this->link = $id; - return true; - } - } - -} - -?> diff --git a/extensions/SittingStats.php b/extensions/SittingStats.php deleted file mode 100755 index 4e3aa45..0000000 --- a/extensions/SittingStats.php +++ /dev/null @@ -1,274 +0,0 @@ - 0'; - - protected $voting_results_sql = ' - SELECT outcome, count(actions.id) as count - FROM questions - JOIN actions ON actions.questions_id = questions.id - WHERE questions.sittings_id = ? AND actions.type = "voting" - GROUP BY outcome'; - - public function __construct($url, Seimas $parent = NULL, $params = NULL, Factory $Factory = NULL) { - parent::__construct($url, $parent, $params, $Factory); - $this->initialise(); - $this->initialiseChildren(true); - } - - public function getSpeakers($limit = 0) { - if (empty($this->speakers)) { - $members = array(); - foreach ($this->getChildren() as $child) { - //echo $child->getTitle() . "
"; - foreach ($child->getChildren() as $action) { - if ($action->getType() == 'speech') { - $member = trim(mb_substr($action->getTitle(), 9)); - $length = strtotime($action->getEndTime()) - strtotime($action->getStartTime()); - (!array_key_exists($member, $members)) ? $members[$member] = $length : $members[$member] += $length; - } - } - } - arsort($members); - $this->speakers = $members; - } - return ($limit == 0) ? $this->speakers : array_slice($this->speakers, 0, $limit); - } - - /* - public function getTopQuestions($limit = 3) { - $questions = array(); - $lengths = array(); - foreach ($this->getChildren() as $child) { - $questions[] = $child; - $lengths[] = strtotime($child->getEndTime()) - strtotime($child->getStartTime()); - } - arsort($lengths); - foreach($lengths as $key => &$v) { - $v = $questions[$key]; - } - return array_slice($lengths, 0, $limit); - } */ - - public function getTopQuestions($limit = 3) { - $sql = str_replace('{limit}', intval($limit), $this->topquestions_sql); - $db = Initialisator::getDB(); - $result = $db->getArray($sql,array($this->getId())); - $top = array(); - foreach($result as $row) { - $q = $this->children[$row['id']]; - $q->effective_presence = $row['e_presence']; - $top[] = $q; - } - return $top; - } - - public function getTitle() { - return implode( - " ", - array( - strftime('%Y m. %B %e d.', strtotime($this->date)), - $this->type,'posėdis') - ); - } - - public function getPeriod() { - return date('H:i', strtotime($this->getStartTime())) . ' - ' . date('H:i', strtotime($this->getEndTime())); - } - - public function getLength() { - $l = (strtotime($this->getEndTime()) - strtotime($this->getStartTime())) / 60; - $h = floor($l / 60); - $m = $l % 60; - return sprintf('%1$s val. %2$s min', $h, $m); - } - - public function getStartTime() { - if (empty($this->start_time)) return $this->start_time; - else { - reset($this->children); - $id = key($this->children); - return $this->children["$id"]->getStartTime(); - } - } - - public function getSessionID() { - return $this->sessions_id; - } - - public function getEndTime() { - return $this->end_time; - } - - public function getUrl($type = '') { - switch ($type) { - case '': return $this->url; - case 'protocol': return $this->protocol_url; - case 'transcript': return $this->transcript_url; - case 'recording': return $this->recording_url; - } - } - - public function participation($type) { - switch ($type) { - case 'participated': - return array_sum($this->participation); - case 'total': - return count($this->participation); - case 'percentage': - return round($this->participation('participated') / $this->participation('total') * 100, 0); - case 'time-based': - return $this->Factory->getVar($this->percentage_participation_sql, array($this->getId())); - } - } - - public function getMemberStats($type) { - switch($type) { - case 'full-attendance': - $c = $this->Factory->getVar($this->full_attendance_sql, array($this->getId())); - return (empty($c)) ? 0 : $c; - case 'short-attendance': - $c = $this->Factory->getVar($this->short_attendance_sql, array($this->getId())); - return (empty($c)) ? 0 : $c; - case 'speakers': - return count($this->getSpeakers()); - } - } - - public function getVotings($outcome) { - if (empty($this->votingOutcomes)) { - $this->votingOutcomes = array(); - foreach($this->Factory->getArray($this->voting_results_sql, array($this->getId())) as $row) { $this->votingOutcomes[$row['outcome']] = $row['count']; } - } - switch($outcome) { - case 'all': - return array_sum($this->votingOutcomes); - case 'accepted': - return $this->votingOutcomes['accepted']; - case 'rejected': - return $this->votingOutcomes['rejected']; - } - } - - public function getTopParticipants() { - $sql = ' - SELECT members.id, members.name FROM participation_data - JOIN members ON members_id = members.id - WHERE cadency_end = "0000-00-00" AND sittings_id = ? AND hours_present = hours_available - ORDER BY members.name ASC'; - $participants = array(); - $top = $this->Factory->getArray($sql, array($this->getId())); - if (!empty($top)) { - foreach ($top as $m) { - $participants[] = '' . $m['name'] . ''; - } - } - return $participants; - } - - public function getBottomParticipants() { - $sql = ' - SELECT hours_present FROM participation_data - JOIN members ON members_id = members.id - WHERE cadency_end = "0000-00-00" AND sittings_id = ? AND hours_present > 0 - ORDER BY hours_present ASC LIMIT 4,1'; - $cutoff = $this->Factory->getVar($sql, array($this->getId())); - $sql = ' - SELECT members.id, members.name, round(hours_present / hours_available * 100,0) as participation FROM participation_data - JOIN members ON members_id = members.id - WHERE cadency_end = "0000-00-00" AND sittings_id = ? AND hours_present <= ? AND hours_present > 0 - ORDER BY hours_present ASC, members.name ASC'; - $participants = array(); - $bottom = $this->Factory->getArray($sql, array($this->getId(), $cutoff)); - if (!empty($bottom)) { - foreach ($bottom as $m) { - $participants[] = '' . $m['name'] . ' (' . $m['participation'] . '%)'; - } - } - return $participants; - } - - public function getTopSpeakers() { - $sql = ' - SELECT members.id, members.name, members.notes - FROM members - WHERE name IN (?,?,?,?,?) - ORDER BY FIELD(members.name, ?, ?, ?, ?, ?)'; - - $speakers = $this->getSpeakers(5); - $top = $this->Factory->getArray($sql, array_merge(array_keys($speakers),array_keys($speakers))); - $members = array(); - foreach ($top as $member) { - $members[] = '' . $member['name'] . ' (' . round($speakers[$member['name']] / 60, 0) . ' min)'; - } - return $members; - } - - public function TotalVotePie() { - $total_data = $this->Factory->getArray(' - SELECT vote, count(vote) as count FROM votes - JOIN actions ON actions.id = votes.actions_id - JOIN questions ON actions.questions_id = questions.id - WHERE vote != ? AND sittings_id = ? GROUP BY vote', array('not presen', $this->getId())); - $totals = array(); - $total_count = 0; - foreach ($total_data as $outcome) { - $total_count += $outcome['count']; - $totals[$outcome['vote']] = $outcome['count']; - } - $js_totals = array(); - foreach($totals as $name => $count) { - $data = array('name' => niceVoteName($name), 'y' => $count / $total_count * 100); - if ($name == 'disappeare') { - $data['sliced'] = 1; - $data['selected'] = 1; - } - $js_totals[] = $data; - } - usort($js_totals, array($this, 'sortPieChart')); - return $js_totals; - } - - protected function sortPieChart($a, $b) { - if ($this->getPieOrder($a['name']) > $this->getPieOrder($b['name'])) return 1; - elseif ($this->getPieOrder($a['name']) < $this->getPieOrder($b['name'])) return -1; - else return 0; - } - - protected function getPieOrder($name) { - $v = 1; - switch ($name) { - case 'Balsavo UŽ': $v = 2; break; - case 'Balsavo PRIEŠ': $v = 3; break; - case 'Susilaikė': $v = 4; break; - case 'Neužsiregistravo': $v = 1; break; - case 'Užsiregistravo, tačiau nebalsavo': $v = 5; break; - } - return $v; - } - - } diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..c330420 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,18 @@ + + + + + ./app/tests/ + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..77827ae --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,15 @@ + + + Options -MultiViews + + + RewriteEngine On + + # Redirect Trailing Slashes... + RewriteRule ^(.*)/$ /$1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..f08822d --- /dev/null +++ b/public/index.php @@ -0,0 +1,49 @@ + + */ + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader +| for our application. We just need to utilize it! We'll require it +| into the script here so that we do not have to worry about the +| loading of any our classes "manually". Feels great to relax. +| +*/ + +require __DIR__.'/../bootstrap/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let's turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight these users. +| +*/ + +$app = require_once __DIR__.'/../bootstrap/start.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can simply call the run method, +| which will execute the request and send the response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have whipped up for them. +| +*/ + +$app->run(); diff --git a/public/packages/.gitkeep b/public/packages/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/packages/barryvdh/laravel-debugbar/laravel-debugbar.css b/public/packages/barryvdh/laravel-debugbar/laravel-debugbar.css new file mode 100644 index 0000000..2dd6c8b --- /dev/null +++ b/public/packages/barryvdh/laravel-debugbar/laravel-debugbar.css @@ -0,0 +1,65 @@ +div.phpdebugbar { + font-size: 13px; + font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; +} + +div.phpdebugbar-header { + background: #efefef url(laravel-icon.png) no-repeat 4px 3px; + background-size: 20px; + line-height: 17px; +} +a.phpdebugbar-restore-btn { + background: #efefef url(laravel-icon.png) no-repeat 5px 3px; + background-size: 20px; + width: 16px; + border-right-color: #ccc; +} + +div.phpdebugbar-header > div > * { + font-size: 13px; +} + +div.phpdebugbar-header .phpdebugbar-tab { + padding: 5px 6px; +} + +div.phpdebugbar .phpdebugbar-header select{ + padding: 1px 0; +} + +dl.phpdebugbar-widgets-kvlist dt{ + width: 200px; +} + +dl.phpdebugbar-widgets-kvlist dd { + margin-left: 210px; +} + +ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-value { + height: 20px; + top: 0; + background-color: #f4645f; +} + +ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-label { + top: 2px; +} + +div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter { + background-color: #f4645f; +} + +a.phpdebugbar-tab.phpdebugbar-active { + background: #f4645f; + color: #fff; +} + +a.phpdebugbar-tab.phpdebugbar-active span.phpdebugbar-badge { + background-color: white; + color: #f4645f; +} + +a.phpdebugbar-tab span.phpdebugbar-badge { + background: #f4645f; + color: #fff; +} diff --git a/public/packages/barryvdh/laravel-debugbar/laravel-icon.png b/public/packages/barryvdh/laravel-debugbar/laravel-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec0353a663ce1ec842ac8c7f79a2a2cce167d25 GIT binary patch literal 15938 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 literal 0 HcmV?d00001 diff --git a/public/packages/maximebf/php-debugbar/debugbar.css b/public/packages/maximebf/php-debugbar/debugbar.css new file mode 100644 index 0000000..1da6937 --- /dev/null +++ b/public/packages/maximebf/php-debugbar/debugbar.css @@ -0,0 +1,225 @@ +div.phpdebugbar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + border-top: 0; + font-family: arial, sans-serif; + background: #fff; + z-index: 10000; + font-size: 14px; + color: #000; + text-align: left; +} + +div.phpdebugbar-closed { + width: auto; +} + +div.phpdebugbar * { + + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +a.phpdebugbar-restore-btn { + float: left; + padding: 5px 8px; + font-size: 14px; + color: #555; + text-decoration: none; + border-right: 1px solid #ddd; +} + +div.phpdebugbar-resize-handle { + display: none; + height: 4px; + margin-top: -4px; + width: 100%; + background: none; + border-bottom: 1px solid #ccc; + cursor: n-resize; +} + +div.phpdebugbar-closed, div.phpdebugbar-minimized{ + border-top: 1px solid #ccc; +} + +/* -------------------------------------- */ + +div.phpdebugbar-header { + background: #efefef url(php-icon.png) no-repeat 5px 4px; + padding-left: 29px; + min-height: 26px; + line-height: 16px; +} +div.phpdebugbar-header:before, div.phpdebugbar-header:after { + display: table; + line-height: 0; + content: ""; +} +div.phpdebugbar-header:after { + clear: both; +} +div.phpdebugbar-header-left { + float: left; +} +div.phpdebugbar-header-right { + float: right; +} +div.phpdebugbar-header > div > * { + padding: 5px 8px; + font-size: 14px; + color: #555; + text-decoration: none; +} +div.phpdebugbar-header-left > * { + float: left; +} +div.phpdebugbar-header-right > * { + float: right; +} +div.phpdebugbar-header-right > select { + padding: 0; +} + +/* -------------------------------------- */ + +span.phpdebugbar-indicator, +a.phpdebugbar-indicator, +a.phpdebugbar-close-btn { + border-right: 1px solid #ddd; +} + +a.phpdebugbar-tab.phpdebugbar-active { + background: #ccc; + color: #444; + background-image: linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); + background-image: -o-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); + background-image: -moz-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); + background-image: -webkit-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); + background-image: -ms-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.41, rgb(173,173,173)), color-stop(0.71, rgb(209,209,209))); +} + a.phpdebugbar-tab span.phpdebugbar-badge { + display: none; + margin-left: 5px; + font-size: 11px; + line-height: 14px; + padding: 0px 6px; + background: #ccc; + border-radius: 4px; + color: #555; + font-weight: normal; + text-shadow: none; + vertical-align: middle; + } + a.phpdebugbar-tab i { + display: none; + vertical-align: middle; + } + a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-important { + background: #ed6868; + color: white; + } + +a.phpdebugbar-close-btn { + background: url(icons.png) no-repeat 10px 7px; + width: 16px; + height: 16px; +} + +a.phpdebugbar-open-btn { + background: url(icons.png) no-repeat -14px 8px; + width: 16px; + height: 16px; +} + +a.phpdebugbar-restore-btn { + background: #efefef url(php-icon.png) no-repeat 5px 4px; + width: 16px; + height: 16px; +} + +.phpdebugbar-indicator { + position: relative; + cursor: pointer; +} + .phpdebugbar-indicator span.phpdebugbar-text { + margin-left: 5px; + } + .phpdebugbar-indicator span.phpdebugbar-tooltip { + display: none; + position: absolute; + top: -30px; + background: #efefef; + opacity: .7; + border: 1px solid #ccc; + color: #555; + font-size: 11px; + padding: 2px 3px; + z-index: 1000; + text-align: center; + width: 200%; + right: 0; + } + .phpdebugbar-indicator:hover span.phpdebugbar-tooltip:not(.phpdebugbar-disabled) { + display: block; + } + +select.phpdebugbar-datasets-switcher { + float: right; + display: none; + margin: 2px 0 0 7px; + max-width: 200px; + max-height: 23px; + padding: 0; +} + +/* -------------------------------------- */ + +div.phpdebugbar-body { + border-top: 1px solid #ccc; + display: none; + position: relative; + height: 300px; +} + +/* -------------------------------------- */ + +div.phpdebugbar-panel { + display: none; + height: 100%; + overflow: auto; + width: 100%; +} +div.phpdebugbar-panel.phpdebugbar-active { + display: block; +} + +/* -------------------------------------- */ + +div.phpdebugbar-mini-design a.phpdebugbar-tab { + position: relative; + border-right: 1px solid #ddd; +} + div.phpdebugbar-mini-design a.phpdebugbar-tab span.phpdebugbar-text { + display: none; + } + div.phpdebugbar-mini-design a.phpdebugbar-tab:hover span.phpdebugbar-text { + display: block; + position: absolute; + top: -30px; + background: #efefef; + opacity: .7; + border: 1px solid #ccc; + color: #555; + font-size: 11px; + padding: 2px 3px; + z-index: 1000; + text-align: center; + right: 0; + } + div.phpdebugbar-mini-design a.phpdebugbar-tab i { + display:inline-block; + } diff --git a/public/packages/maximebf/php-debugbar/debugbar.js b/public/packages/maximebf/php-debugbar/debugbar.js new file mode 100644 index 0000000..23cf5ce --- /dev/null +++ b/public/packages/maximebf/php-debugbar/debugbar.js @@ -0,0 +1,1080 @@ +if (typeof(PhpDebugBar) == 'undefined') { + // namespace + var PhpDebugBar = {}; + PhpDebugBar.$ = jQuery; +} + +(function($) { + + if (typeof(localStorage) == 'undefined') { + // provide mock localStorage object for dumb browsers + localStorage = { + setItem: function(key, value) {}, + getItem: function(key) { return null; } + }; + } + + if (typeof(PhpDebugBar.utils) == 'undefined') { + PhpDebugBar.utils = {}; + } + + /** + * Returns the value from an object property. + * Using dots in the key, it is possible to retrieve nested property values + * + * @param {Object} dict + * @param {String} key + * @param {Object} default_value + * @return {Object} + */ + var getDictValue = PhpDebugBar.utils.getDictValue = function(dict, key, default_value) { + var d = dict, parts = key.split('.'); + for (var i = 0; i < parts.length; i++) { + if (!d[parts[i]]) { + return default_value; + } + d = d[parts[i]]; + } + return d; + } + + /** + * Counts the number of properties in an object + * + * @param {Object} obj + * @return {Integer} + */ + var getObjectSize = PhpDebugBar.utils.getObjectSize = function(obj) { + if (Object.keys) { + return Object.keys(obj).length; + } + var count = 0; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + count++; + } + } + return count; + } + + /** + * Returns a prefixed css class name + * + * @param {String} cls + * @return {String} + */ + PhpDebugBar.utils.csscls = function(cls, prefix) { + if (cls.indexOf(' ') > -1) { + var clss = cls.split(' '), out = []; + for (var i = 0, c = clss.length; i < c; i++) { + out.push(PhpDebugBar.utils.csscls(clss[i], prefix)); + } + return out.join(' '); + } + if (cls.indexOf('.') === 0) { + return '.' + prefix + cls.substr(1); + } + return prefix + cls; + }; + + /** + * Creates a partial function of csscls where the second + * argument is already defined + * + * @param {string} prefix + * @return {Function} + */ + PhpDebugBar.utils.makecsscls = function(prefix) { + var f = function(cls) { + return PhpDebugBar.utils.csscls(cls, prefix); + }; + return f; + } + + var csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-'); + + + // ------------------------------------------------------------------ + + /** + * Base class for all elements with a visual component + * + * @param {Object} options + * @constructor + */ + var Widget = PhpDebugBar.Widget = function(options) { + this._attributes = $.extend({}, this.defaults); + this._boundAttributes = {}; + this.$el = $('<' + this.tagName + ' />'); + if (this.className) { + this.$el.addClass(this.className); + } + this.initialize.apply(this, [options || {}]); + this.render.apply(this); + }; + + $.extend(Widget.prototype, { + + tagName: 'div', + + className: null, + + defaults: {}, + + /** + * Called after the constructor + * + * @param {Object} options + */ + initialize: function(options) { + this.set(options); + }, + + /** + * Called after the constructor to render the element + */ + render: function() {}, + + /** + * Sets the value of an attribute + * + * @param {String} attr Can also be an object to set multiple attributes at once + * @param {Object} value + */ + set: function(attr, value) { + if (typeof(attr) != 'string') { + for (var k in attr) { + this.set(k, attr[k]); + } + return; + } + + this._attributes[attr] = value; + if (typeof(this._boundAttributes[attr]) !== 'undefined') { + for (var i = 0, c = this._boundAttributes[attr].length; i < c; i++) { + this._boundAttributes[attr][i].apply(this, [value]); + } + } + }, + + /** + * Checks if an attribute exists and is not null + * + * @param {String} attr + * @return {[type]} [description] + */ + has: function(attr) { + return typeof(this._attributes[attr]) !== 'undefined' && this._attributes[attr] !== null; + }, + + /** + * Returns the value of an attribute + * + * @param {String} attr + * @return {Object} + */ + get: function(attr) { + return this._attributes[attr]; + }, + + /** + * Registers a callback function that will be called whenever the value of the attribute changes + * + * If cb is a jQuery element, text() will be used to fill the element + * + * @param {String} attr + * @param {Function} cb + */ + bindAttr: function(attr, cb) { + if ($.isArray(attr)) { + for (var i = 0, c = attr.length; i < c; i++) { + this.bindAttr(attr[i], cb); + } + return; + } + + if (typeof(this._boundAttributes[attr]) == 'undefined') { + this._boundAttributes[attr] = []; + } + if (typeof(cb) == 'object') { + var el = cb; + cb = function(value) { el.text(value || ''); }; + } + this._boundAttributes[attr].push(cb); + if (this.has(attr)) { + cb.apply(this, [this._attributes[attr]]); + } + } + + }); + + + /** + * Creates a subclass + * + * Code from Backbone.js + * + * @param {Array} props Prototype properties + * @return {Function} + */ + Widget.extend = function(props) { + var parent = this; + + var child = function() { return parent.apply(this, arguments); }; + $.extend(child, parent); + + var Surrogate = function(){ this.constructor = child; }; + Surrogate.prototype = parent.prototype; + child.prototype = new Surrogate; + $.extend(child.prototype, props); + + child.__super__ = parent.prototype; + + return child; + }; + + // ------------------------------------------------------------------ + + /** + * Tab + * + * A tab is composed of a tab label which is always visible and + * a tab panel which is visible only when the tab is active. + * + * The panel must contain a widget. A widget is an object which has + * an element property containing something appendable to a jQuery object. + * + * Options: + * - title + * - badge + * - widget + * - data: forward data to widget data + */ + var Tab = Widget.extend({ + + className: csscls('panel'), + + render: function() { + this.$tab = $('').addClass(csscls('tab')); + + this.$icon = $('').appendTo(this.$tab); + this.bindAttr('icon', function(icon) { + if (icon) { + this.$icon.attr('class', 'fa fa-' + icon); + } else { + this.$icon.attr('class', ''); + } + }); + + this.bindAttr('title', $('').addClass(csscls('text')).appendTo(this.$tab)); + + this.$badge = $('').addClass(csscls('badge')).appendTo(this.$tab); + this.bindAttr('badge', function(value) { + if (value !== null) { + this.$badge.text(value); + this.$badge.show(); + } else { + this.$badge.hide(); + } + }); + + this.bindAttr('widget', function(widget) { + this.$el.empty().append(widget.$el); + }); + + this.bindAttr('data', function(data) { + if (this.has('widget')) { + this.get('widget').set('data', data); + } + }) + } + + }); + + // ------------------------------------------------------------------ + + /** + * Indicator + * + * An indicator is a text and an icon to display single value information + * right inside the always visible part of the debug bar + * + * Options: + * - icon + * - title + * - tooltip + * - data: alias of title + */ + var Indicator = Widget.extend({ + + tagName: 'span', + + className: csscls('indicator'), + + render: function() { + this.$icon = $('').appendTo(this.$el); + this.bindAttr('icon', function(icon) { + if (icon) { + this.$icon.attr('class', 'fa fa-' + icon); + } else { + this.$icon.attr('class', ''); + } + }); + + this.bindAttr(['title', 'data'], $('').addClass(csscls('text')).appendTo(this.$el)); + + this.$tooltip = $('').addClass(csscls('tooltip disabled')).appendTo(this.$el); + this.bindAttr('tooltip', function(tooltip) { + if (tooltip) { + this.$tooltip.text(tooltip).removeClass(csscls('disabled')); + } else { + this.$tooltip.addClass(csscls('disabled')); + } + }); + } + + }); + + // ------------------------------------------------------------------ + + /** + * Dataset title formater + * + * Formats the title of a dataset for the select box + */ + var DatasetTitleFormater = PhpDebugBar.DatasetTitleFormater = function(debugbar) { + this.debugbar = debugbar; + }; + + $.extend(DatasetTitleFormater.prototype, { + + /** + * Formats the title of a dataset + * + * @this {DatasetTitleFormater} + * @param {String} id + * @param {Object} data + * @param {String} suffix + * @return {String} + */ + format: function(id, data, suffix) { + if (suffix) { + suffix = ' ' + suffix; + } else { + suffix = ''; + } + + var nb = getObjectSize(this.debugbar.datasets) + 1; + + if (typeof(data['__meta']) === 'undefined') { + return "#" + nb + suffix; + } + + var filename = data['__meta']['uri'].substr(data['__meta']['uri'].lastIndexOf('/') + 1); + var label = "#" + nb + " " + filename + suffix + ' (' + data['__meta']['datetime'].split(' ')[1] + ')'; + return label; + } + + }); + + // ------------------------------------------------------------------ + + + /** + * DebugBar + * + * Creates a bar that appends itself to the body of your page + * and sticks to the bottom. + * + * The bar can be customized by adding tabs and indicators. + * A data map is used to fill those controls with data provided + * from datasets. + */ + var DebugBar = PhpDebugBar.DebugBar = Widget.extend({ + + className: "phpdebugbar " + csscls('minimized'), + + options: { + bodyPaddingBottom: true + }, + + initialize: function() { + this.controls = {}; + this.dataMap = {}; + this.datasets = {}; + this.firstTabName = null; + this.activePanelName = null; + this.datesetTitleFormater = new DatasetTitleFormater(this); + this.registerResizeHandler(); + }, + + /** + * Register resize event, for resize debugbar with reponsive css. + * + * @this {DebugBar} + */ + registerResizeHandler: function() { + var f = this.resize.bind(this); + this.respCSSSize = 0; + $(window).resize(f); + setTimeout(f, 20); + }, + + /** + * Resizes the debugbar to fit the current browser window + */ + resize: function() { + var contentSize = this.respCSSSize; + if (this.respCSSSize == 0) { + this.$header.find("> div > *:visible").each(function () { + contentSize += $(this).outerWidth(); + }); + } + + var currentSize = this.$header.width(); + var cssClass = "phpdebugbar-mini-design"; + var bool = this.$header.hasClass(cssClass); + + if (currentSize <= contentSize && !bool) { + this.respCSSSize = contentSize; + this.$header.addClass(cssClass); + } else if (contentSize < currentSize && bool) { + this.respCSSSize = 0; + this.$header.removeClass(cssClass); + } + }, + + /** + * Initialiazes the UI + * + * @this {DebugBar} + */ + render: function() { + var self = this; + this.$el.appendTo('body'); + this.$resizehdle = $('
').addClass(csscls('resize-handle')).appendTo(this.$el); + this.$header = $('
').addClass(csscls('header')).appendTo(this.$el); + this.$headerLeft = $('
').addClass(csscls('header-left')).appendTo(this.$header); + this.$headerRight = $('
').addClass(csscls('header-right')).appendTo(this.$header); + var $body = this.$body = $('
').addClass(csscls('body')).appendTo(this.$el); + this.recomputeBottomOffset(); + + // dragging of resize handle + var dragging = false; + this.$resizehdle.on('mousedown', function(e) { + var orig_h = $body.height(), pos_y = e.pageY; + dragging = true; + + $body.parents().on('mousemove', function(e) { + if (dragging) { + var h = orig_h + (pos_y - e.pageY); + $body.css('height', h); + localStorage.setItem('phpdebugbar-height', h); + self.recomputeBottomOffset(); + } + }).on('mouseup', function() { + dragging = false; + }); + + e.preventDefault(); + }); + + // minimize button + this.$closebtn = $('').addClass(csscls('close-btn')).appendTo(this.$headerRight); + this.$closebtn.click(function() { + self.close(); + }); + + // minimize button + this.$restorebtn = $('').addClass(csscls('restore-btn')).hide().appendTo(this.$el); + this.$restorebtn.click(function() { + self.restore(); + }); + + // open button + this.$openbtn = $('').addClass(csscls('open-btn')).appendTo(this.$headerRight).hide(); + this.$openbtn.click(function() { + self.openHandler.show(function(id, dataset) { + self.addDataSet(dataset, id, "(opened)"); + self.showTab(); + }); + }); + + // select box for data sets + this.$datasets = $('
') + .append('Uri:
') + .append('IP:
') + .append(searchBtn) + .appendTo(this.$actions); + }, + + handleFind: function(data) { + var self = this; + $.each(data, function(i, meta) { + var a = $('
') + .text('Load dataset') + .on('click', function(e) { + self.hide(); + self.load(meta['id'], function(data) { + self.callback(meta['id'], data); + }); + e.preventDefault(); + }); + + var method = $('') + .text(meta['method']) + .on('click', function(e) { + self.$table.empty(); + self.find({method: meta['method']}, 0, self.handleFind.bind(self)); + e.preventDefault(); + }); + + var uri = $('') + .text(meta['uri']) + .on('click', function(e) { + self.$table.empty(); + self.find({uri: meta['uri']}, 0, self.handleFind.bind(self)); + e.preventDefault(); + }); + + var ip = $('') + .text(meta['ip']) + .on('click', function(e) { + self.$table.empty(); + self.find({ip: meta['ip']}, 0, self.handleFind.bind(self)); + e.preventDefault(); + }); + + $('') + .append($('').append(a)) + .append($('').append(method)) + .append($('').append(uri)) + .append('' + meta['datetime'] + '') + .append($('').append(ip)) + .appendTo(self.$table); + }); + if (data.length < this.get('items_per_page')) { + this.$loadmorebtn.hide(); + } + }, + + show: function(callback) { + this.callback = callback; + this.$el.show(); + this.$overlay.show(); + this.refresh(); + }, + + hide: function() { + this.$el.hide(); + this.$overlay.hide(); + }, + + find: function(filters, offset, callback) { + var data = $.extend({}, filters, {max: this.get('items_per_page'), offset: offset || 0}); + this.last_find_request = data; + this.ajax(data, callback); + }, + + load: function(id, callback) { + this.ajax({op: "get", id: id}, callback); + }, + + clear: function(callback) { + this.ajax({op: "clear"}, callback); + }, + + ajax: function(data, callback) { + $.ajax({ + dataType: 'json', + url: this.get('url'), + data: data, + success: callback, + ignoreDebugBarAjaxHandler: true + }); + } + + }); + +})(PhpDebugBar.$); diff --git a/public/packages/maximebf/php-debugbar/php-icon.png b/public/packages/maximebf/php-debugbar/php-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb46bf4ef43614df269b2d6b1119a5e5597eb53 GIT binary patch literal 3621 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 literal 0 HcmV?d00001 diff --git a/public/packages/maximebf/php-debugbar/vendor/font-awesome/css/font-awesome.min.css b/public/packages/maximebf/php-debugbar/vendor/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000..449d6ac --- /dev/null +++ b/public/packages/maximebf/php-debugbar/vendor/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/FontAwesome.otf b/public/packages/maximebf/php-debugbar/vendor/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..8b0f54e47e1d356dcf1496942a50e228e0f1ee14 GIT binary patch literal 62856 zcmcfp2Y3_5)&LBzEbU6(wGF`%u_do$I-wUs=poc3^xzP>t859|l91%ydy%{4ZewH9 zLNU#OK%5)jlp7M#adH#VlN(Y~MSVYG)7F`Dsts8mQIv>+ztD)dFw+9OVG%`1 zdML`ns?&x=Qnp|IfM+dm&(}ePcdqmf37+Ghm#p%f+FVKQ2*chjkzF#ZB~9w-bef!xGBr6D7h{6UGOP@t%*!8rhr zqTX&D_txFJckW8F88SgJDOYWQiq1}9HpST zU`<34PZ)C!_3}_&M2)6kC53tq%16Wv<;B!kk^fL$a$g&o8ZTNrRL|U3FQqy}Aw%^t z%FjbIl=r0M9>Z`rYKq77t>{++@-k0@oM~*1+}p2(7`Q4V*n=HYq=vsI?g5v}-nP z3|{}}ibb1(*R0;YdDD}@+q7nj-e?F6nlWp}oWMD=X3yOms||yGW^I(#9B4HL0`>*2 zG{Pq6qjlCmi#Eba+D94TAv}p9V_D5%k=nR0b4*~E)oRv<#|upiMk~z0GGmR=Yz-V5 ze^pq5HgIj2Au?HKwVD>qoJsnJx#u=RZ=|+Tk5lVmJ2z1#N=q3aw}vu8YK7c-N>4=y zwHEjdq-Iky;2wVdD3u7c7HAy@>636rQ}I+R6-Jq%%_eFi6$}s_rB+ajpcD*stEugP zo136*FtrWZo1wQ}7%h+r0@$R$MYWppE&yKBVk^ODoieQIXI-PMCWPv3^jr9p7*cDDu9q6%xx{?3;;b@n3omixrmwx*YNmZf9p3xm@i;8 zp?TpJjUB@J0D^@;Vq@WEgcj}}s2gf=U*-SLs=qz||El20$!O-RlsfnS_J9)6lK^rf z@F|+|fem;DctSVzuQ6lCs>g=*`}C{(m-TP#-`gM6ukSbXXY`l%AL#GuKiB_u|L6U` z^xwJVb4z_|(yht2X53nKYvZlGw+y#3Zk69U@CS95u-8E9*x%q${UiIw^e^w<+#lK> z-M_Ej)SuN~+27uOroXrU-Tp88`)^UVM&1epcn{s0b!+*p&9_2tnQmp>swD94ennAt zcir7`_tDR9d~W}I%Sf-0+(^%nvXRn}u#+RjBRxinMp7g0j<_@8_K4p{{5Im&i2f13 zj`+pr(-A+9_-Vw=5kHRjVZ`?%z8i6aJ1^|@`u}w?=l`!y{JYkcahKF7zYy(4XAHaLAh7>kswf;WDJ8 zodnW*&mk}LA4ATyzs;HS z&jMIk)X1SUY8WQ8mk8qz!5gX{ac?|#KNXah-`{R{t;jx;+arrw4mTM?C=b`)g9B|K zKbe$=Z!xqbc>xxr!#G3cIJ_43-sk>0XiMsaXE3e+56S@N-W&nebhy1GS=0t{!`!CB zeXl$`20SDCO)=z#yl@A)%foXM<_FJ&aY(!S?qN9ajLc&>wDpF%>BD`=97%ujZX|^{ zkUJb;(Bvllh3Ak$Tkm1o9O@S+z@h#=rtsbrEayd0}DguL&kx00m+ja=Bpt$)C)Jj(+GE#@N5{qN_YooPx`~Xe7HP3 z{%{$_+eqqQIN>I3Ngv^P)=&zdhx-v8M)G7X!|w&{r;s|*7v>g7Gy(!cXqP3lRov@8 zR1fWh=MwT9Zqok0{>Y@@?`{gwSN{7?L`gvE7m2*?lX6LUm1893w2Pdz9?n{^!(W2e zdWpaFl9b@u0BLprBcj#q)KgjW@7iqlGG5Yvz*k2E1b+8G7f(?i1&vA9XxDLyUk5nmBs6~80?xA;He-^DJ8RN^C1NybWMO6ExxOV&s>OP-SKlxQUu zNxCEtRJdwMgQQb(MDmQ}tmIiqujCEMHOY0!HkBMipnS7>{u``WKCv$?i#JtM9$^4u7g87d5nYqQ>kup*r>4Q>U zI$1hRI!8KRx>mYFs*@&5bEW0dI%&J~sPvTdy!1usRp|%PFQwl}f0q6xb;-PBD%k|t zY}tI-V%aj;YS{+aQ?dwIjLaxYk`>BoWsR~9*)iEk*+tn)va7OpWS_{smHjSrdP+V0 zJk_4#J?D9@_1xwe?HTK7@=Wl|@+|Uf_B`o%#`BWri=J_T=4`v|*&UBhl-L)Zv5p0%+J>@(~s_AL7X`wDx7eUJT&{SSMK z9pETV%t<)~r{X4Z^SBk<7A}m7;^H_fm&|2x`CJ88%QbUt++pq*cal5LUErSMUf^El zUgJLCKIVSme)FQdBwi!E`Us0Q z%p9T98WOazMw1pS4`!>y8fGSUh&Ik-O^&x{%~AT;IIAusHq0EYwdzPtZ?PI<%-T3( zf;Poyj0@2lgv1zcHAY2Q^wEZ}*a%}ZXpR=04ir-WpbZI&wOaLYTC*`MGSZl6h=r8Y z4d>%cq(*NDHzt{4!;(WH^yY|Ityyc*hFL*fHES(8GA!v5YmA7AiVce8e_;!6kC&7Z?Hyy8O0n%G}drq zY^2^A7ORi2YLl!XIxW$Sg>0fe(yD_8(T0#%Z4_w&Inczd&{N0@YP37MFWzF+MkX06M(8q>71~9GMQF*2ge2%AwMG*R7f)W-5CO{_W(pxQ1Gtd{5P-01VNw=dm{|+^ z6%j+0-eT37Lc+r$ViLp5kx^l=IKzeEl&qvF4E7NA%LH2ey@o@10m4vTyAQN~fSq7A zx?gWNFHF`H8*d3AI~%7r4CUPWFH{<1gk*m_30u(tfF`iWB#nqQTC}hv2E8F#m?SuDFTQn3UEkkc8@TWC!-F{GC^ww z>q*$~q;*EKK82V{VgW}(B4CfL)4q56 z4)D)xH0hF~^)O1fFcUYy3iJruY7hufKutIFVd8R^gr`Ecp*I_TDL24)U$r5ORbRg-pCjNXR?8@hRjlg!)^B z(D!dOu%iM74)q`)qGOHW+C($Zqs|&;iLn3^gGC89>$Oo4U_&EF=f-R>g=zQ41JxU% z^ai~(IaX`22o=$0BPn|0z*CK8 zK%DqkW2^;?Z85-a0Z6ni9$1JOKmq#-j|FR7G;j-Zd_)ZF6-)}K?p{V%Lg*B4TBUeba0p4h(`{lkhnUa;!S@mlEwb3uRAAna%X|R34lqnNUbFX_%$pF{0bXxjWdRmGt^CFZcG*MWq&*% zpD-JDPJjsSWiSA$4WFQ~!(L z(g@%$q;&`!M=`(;0H;FcJiPEeUTy)bGXu%#O;$^MxH}UvXTe-kd`b#g8@(3xP*30x znc%M+5eqCjy*4&-n6xnX2oC%!5s^Uj?t@SuO@S=#uW(bx z{WX6b2|^FDjXG;w?7RqzWiB8Wa4|QJBTGftngtFZz*C@qy(Q$Y1K?iO@DUL*ch+1% z9wK1j&>$1McLEb&Zk8+5#cF{jf&aTxfx3yPAYib-S%s<1oju2WfRYkWB~Tuak9)I+ z(-1(skh!xT*2bHo!{JN-dNJ<8yjM5m zG60rH7zk-~uZGNixK`kLe=CruA#>*j!96b-j;Z)?t?(j4`6Spia^GJE{4Ojx680Zt zNWe8%t069;H$XAk92OS^LR}2VREDV856=$Q!%mO|6<}C_6UCa{zd}W<5upDiblg`Y z4Cvl7f*bc0-6U;-JxByu&zNWdaxxqBk$}(fNs-__0UlzBNj3priZ@%}*dQl4?7A@u zxFO-}z(C>X2fTOs4u7+;J0*%HiJsMQxqoBiu59bC{I)* zIwpEv)GK;ZbY1kl=qJ%1q5%)ugY$R_l;6D`VIDej?~k_t(Uq#ab(*CcOB-jjSFxlRYtLG(g8nl{qO zbOHT5{ZCLqIVOM^&rD@zGV_^TOav3dn3%)Nr_5K(_smbsZ;XR+Nxh{3(y`L%(je&q z=^E)esaBdKO_%0LE2WLn1JX|EJJNqkKa+kfy&=6R{Z;m$EI>A1Hd!`RHd8iFwn+Af zOe@pN;$&u7o$Qe8lVqKiD_fkJ-=Jui1W386V`Pb1S)E zZZ{Xs={O@7&!utMTpf3Udy%`wead~q-Q@bYKfGjKDz6z{L0&7o9`}0EYlm03m(I)J zmEe`?mG4#O)#laVb=0fN>w?#dUN3vS=Jl4>2VS3feeLyw*Uw(Rc{#l9deh#V_egJz z_ayH*-iy4Kd2jIE?ESR2*4ylzxhxHlZ~0u+4bSNe2Avwqk&^$DHRv=KS#CD3;S~8SQm|;x zN%uXOg<%H!6sOWpT07MECb~&~iaal%Kr~kA@W=0ly z{t+$Uxdi~XHN7!e%}J9R(_7UXGlAu{@LgPTdU`T9mC4D=%h61g=2Yj|)i)V?b+ui? zE#uW(1@DS-MfI`{o?I@T&abi;)~M_?7x@=n*uipt?Z;r>c-GlBp66Pcnp(J_b~W~k zJU4;W8IE;z9Xr-_5FpZ3`8gH2s@$By{Co|!66RIRN3*C1^>ST?V>+@U!LTF2up`?- zL$|?lw4^nqr~{nKnUu7&6b%lRrZlCsr~{Z@h76@~^htykcl!R`V4$yrCB3Hbq$wn746_@NOa-3Klzp2l^gn2VQjbAuo0?#JQLL z$Mz}bSE*b<%<3&$R%={A(pBfD{9}jO88R43TRRf@j!umu(~;H5a&uR%M853YmDj$} zIQyjET)Xy-no~>!4446Ue9XYDW$(ym^9NXsBiI!j&bBmH*VjYd5uCtsQXS7>`8HO> zDbN}`0?ouLy46Rz8=vn%p8Uqm@ezB}D0m6pght^=)w6thX?kgz2G3qG5zoOZl-P#$ z;62Eu9_V9|U>i5{jy^LBsJUYYou6NrldH_F$f?R#6Z}L^@PMpQjwrgSs={8Q zoOChE&E(fDVqJZ+_^S(9K%?|z4Qv@&$Gd6owP0l%>_y%&IxVx)7#jOLcGPC4#d!g42=Yrv!#JYwQRKph}ax;`_tIz`20);H(1 zsJH++i<8d1wvyoE7px2R-tQK>V~5{WU|KHT4=~~?>;J-zTfD!37u?D8Q>s%Z8#$yy z%h5wD_x>xdywB+ughWP$WMyPzRwT*3=TpiXGn-0FZKbMbDvnhisqR1g!-dcPCCh&K zU-?&5z+T@$$>=nPF5$IkC4LdF#0#)`=@RwFOYj1u#w%4&w-#zI;XGu*dusADPKoOm z8YZ0Itm0}4+W;2`1!=edNfwuq23(9Y^AiBwidZ$*g5O$1LZ$6+E(!Uc|#A>nDKry|{>zcC#+K%kF13+aeB` z9VD9p6UpVd$^V7B9CH{zE9`mIIchS3J(9JvNG|5m;2dy7E#^4~49g)Y8pA2@Lg!dK zg2BOf!)Nnef3=~Zrna)izq+0-OJ%Z4GBT8|Rd_LG9C|4SxZ~=3jfW$p9$pYw$y_dg z$>JhlV>uJMiW^X%#R@E9a470Q>roqx9zaWQErSDbk~yp(uQ0DT&%cNvuP5iE^LQ+u z26PNWna=x2;dpDwYtF2PX<;eXb5R_ zZZpZ*jjdH0&h{xRQ82^3_v)+fai0dznTkb#fpNA>TZj!$wMBp(y(a5G+OcF=O-IX7 zI1yn7^P5|gEmh6+^=fi-zRxzcYPfTi=c-TFqDL>HS)ZW?kxW)_xu>W{<;ZnRKUuRK|0& z{yIfL1XJ`OLv>qeQ+d6Ac^h59pu}O!d{)1 zv*gVuu9H;FWrMuddxQ0v#UA3Pz#$I+SM%g3Mhc$GgAw6?7&+-zJQ9zbG>QEFIth(L zBY*uBja2)zlewX3ESktVZS|5(mkM&oHz$Xv$b>E&ZkH^c3ZkKeyP{@`J>81Zl|K725KKL~og7cTUw&+r2C zUk9>oB)d(Z#5JNP*mUmDq4TywX6_8%+DKj@yYsN}P;F;x zs~Sy06X}*#uDQ7i4t1y4@e^&gBNN(#@|4_eym;lN^{dj7Q_?EUGMmj-qU3N8NR(vr zL5@U0AW!DyaDfW~n7L>qoU7ycb%~=uC}_($bO;~RAg|+gl_}Tm%SPM9pFM`C+p(U`f$Ogj39`p#D49F9Oe2B)Y(1=eW zw)bneg>cL|gV(T-@p*5{tE=Jcu_#{Qxp*GXIvt3kkYHpQ3rMZzl>31_u>s6-4t1k$ z+%4rq9}T342VUdi$!t^dQ!_JRmu7%?geCz#$k7y78#|!3og3_v;<;Rny}YW5!%{qk zYr=}g#4>emYj$g9vy8LVs?h8`L_|TiBLNz~6T}mIn`7Q#x%%eXmYM^ywlbt>Y*KQW ztPgGNM5|#@Lho##(bo(L9oRr~qe#cANDc%f=kjIw`MHHTDlBJG(mA{ekB4g&=UR+@ z#y>k2b08anAWukZCeRZa(ch0ofCOX(Es0wN+K`%qt+#QuZ7_-y0m}#2?n`dsD*wD% zU9TxGD=jNm!ZzETgs?z(%&2dH6S29assTs?*$2o*DW}7G$(=zkCn=n0K=g91j%PTP zO^O&KdH%vD8V)3XPz7L>;2B8w07~qv;%G|;IoyGV`0yOvTG|Z!pBsQ#a448*<@V{7 zdf2gEhBIedl9SbV5}wF0Z(rH8R)gfF3J%|GPxzE<#INuQA;=Fuj>54gr^1)E;a_nA zo)4mW8(@oc8NVA2@UCNk;D%})%w{#z2H@ok=K_g?v+@cKVge`%egi3pAfR$7s)V8% zDeAC@I!=iS?|Kv_iSmi9WFEB;;){P5Rf%dKM4(>OC~6j+5}g+P=`qz~g~xw9Zi~l? z6U67mcO<+dT5?YEC%uhsrC(z|gAE zO*vJ0Soy8esY(oZgqQLER6n4etX{4*s1K;GsNYi~jhAMuW{;*_b1QI4;QGKH$2>CT zA7i<(=f?Sr+dQskyn1}e_?r{PPpF*GHsRt#zlr~zR50n=$@LGNnX+igA5%|F+cqs@ z+S}6~n7(}aZ!^p@%4hsObLz||W*(ijYF6oN$QX$5KDr7zAHmywn^DlpJ_O|_m=Lh-A{Et-MyoGSNERokiok) zBnhB3NFqWKByj{Ii5OXtL=iv-I)VcRzH|jku>?yL&Y*4VU{JsS#rOmaeBcup%p(vg z?BW3W4M&OsA3!q@+*i8Vuj{V(uR|WXD@)op>iqEmJe@|bq0uaUO$x21Z|quaWJ_xUXAmZ_~hhx4bGFsw0wse^@d)0B zL-DjAP%gua%Yc&7*ptG~HMb>n%yYV^Ir+quNu8Y~X zOsAO}fxX6IZ{=QTe4}1~-O+ORpvERWcIMrGol^hUixhq6Nu^Kwy$j!Uz@hXT4-9Ss z-^eat$rCh}7lHN*%g%HL&}$Su8|+c)fPpL~YD3OWLx-U)QRDO)^r8pth-2Z11unc6 zgng%-ae6tu=(e_wW5-~S1W_f(E39}MY+<0HH}t}`?3|LK9Q9xyw$l+A#;7pmon0@m z&K*)1ESq+ndV%!`g!5xSUcduLyEub)22bZfY4K@?Qx%R1r~Nu#$Db%*0|u7If<;f- zZs~|Wl!(S*4>TT2kOs?S>p%Q{+3%`Sh&B5C`;XrEP=ho`23o%ajYA%X+By!lcghCs z(t*>G`3tf5iS25v9E+7>u>TlY=(eddSF1{x5@z+(?=Ec9VE;d`68_zm&3^yMUl5~Q z0Git}{%n4T8P1e5L>?Gep2ptkLk#cJzMcm|(|{by6<_nIywA5V(E)G8Gcom+3bm`G z563%p(Fbx;4q8>~c*j#Xi_WWWENE06tM5GgA^R;KAldIYrnu%>=<-IpTt0YLpJO5Z z7ka_5=ykNkF$!&QjdCo4<9+{Y{}-4YM?Pfn-Sr?2iLE?(P=OM*pd0w2DX66fl@N?-1iD^%I(}!F>Y{#DE3uA#DGd2hEe5<#MzbG*8eJ9rAVS*a7>X z{S`8p!61R*K0CV=3?EN|rl+Y>-AblM$u#nWsCFL|0B zfQG|)pZ4~I6JVA_-Cz?4mQ3W`hJitlTLhF*gLObK6@qDS+lA0x(4E2J0agpr&cu^; zCO{MD_+OBcSu~yntMX9y*I=$xBgAa|S3PuJ@wbLP?TrDFLn7oI!1w?W6b|fFfXJWR zs>T5*;3zvdesBW5jGjNr;s6}*4v+5OI|y>`@(7+gbxs`u84}+uPY@vw00iu76xufo z;xcky3)%Z&;>+Yhm+!$8%J?!scS9CB;mhtZ2z){+m9XdqJo!a-xeFw$i9EJ~O~`HB z##U^V3ifpbIY!5;!OjkR*D9R>68VYgd@_*MUtkE$$-fkUxcc07c}E{~7;XvDpX)Cb|1|XFuvZq>JsB#)PveQe{;jxBiN^8{5K0jUrRqVzDg~18#Ciz@>FQUv zymy! z&*Od810Fl&u{>a&NYRqnoKmjF>yBohOh1`&!vECeGZ#-?l2ulhSKE~}#We+0>ac&U zetlbytST=DEOI$HMPT2?V*?FMarLpa{zkN(ZYfS}NLFDp%px@Hdbg?*+HWKXULd8 zkEK16c|6zUdZ=x9l%!V#N--vs)1Y?7`7@ zUn0ko6}wEv0^s#bf$8Y;nt{g#G6c;O9Rxkp~37xp$cQT7Cj!TNVhT`^& zI&4Hw_&KKS_Q{rzgsVT3nbUxjS!=s=ByFFeTQM)>Kqhz5aopk1G=ntHm(bZMG8dQ$BhNn1}_Fh1}7Nti)0c zsT@ogRyZ#PtP12$h;{@IwrJG15JZTZim@zu2-s#H3a(^DF9b*f!~-`SXB4TWX_;v% zT*RcM)i;-FDx{sz1Pp>3(E_#;_tAw?r_B|uIG=Ss?X=o8Z{QexDBE<7`o%{7?Ua9oUL)qyK{_Ai_VIOP#S7N&Z?ckpe>SiZNU9u zm_q=i4bJZ5(sVGj!PB!f7mo=XL{82L5inMgk&7V{T*SK~8Nwgw=%`(Z+g00lwVjUA zU=<3WUD{k?Dq6tekKu^y$hJ1`S7AGt=)v}92iHh2woB0rmiQX{&w_)RM|6e?WpRxG1qwgX1Z!msyPF7Ub7d7P6Vlc}3fyKQX z{8za}`FR?A4PT@4^9plwl!99goGkcu9*=ILU}-~rO?{;X|K@0ah;2_8fQ@>SAE*Hu zm0Ehb1*Q3A1^#G9oZ@s=Z~7@U&T;h6C(|Pi z>r_B2x`_Sz(lt28)kCN2v$jPmT?xPQJ9rqtDh3Y{nDII?+Y{^5u5Q$qRByH=X89*( zW+qsbz#re{>&mNY!JH4q<+i%|_71QcjvmY20Be`s_Y9ba=Ca)^9*q@#$RFGQTd(6C zD%WBR767mVjOD@V9ovsqp^2K>2HSzmI?N+AtVd2c@Vk*_I(IXT8ZbX?y>VB zUjx`hNA3vvLF4-_R%7+suyd>U8$5c5_dOFpf9J3&TGE@)C^juSC%r(E5|OF3M9T2A z8F=ALyha5M-v?g!X1a!$w-VTSu>AxDq`vRwfu|HHXh4~0-SQeQgF!}1ZYz~VPn9c zflBaRv=`n3Qn*Usc#Ek45eF0^LSR7lb6Mh?HnDpSg`cyk1F(JR%Ob?7Vgyf{qpy_(zgvuS>Vj=cLo{pa z>7>`QufDBBFQFGv3;F@B7jX-I>9Oo}NgLE_GwF{*7W7V4osfp`C!~n`D{ zw)N2Ge`)&ziIhHfGEX#uH_&MpKf(LB?vesIuAl_mzgzL^#-FF3QCH;Vl;)~*24l45 z5hQEJ5XpdL?T;vL1Qt`RP}9%>a6BA^|X!|NjdB_-jxI_CZ_l=Idxa zYiv&H$kZH3Ka|;-Ec<2Ut6=@}QDUDhSUP#7+LCO}G^NX|nW;%eh5%56KxP0ZU4iv*KA7w1xTwa7;q_g#*D8$PI$hF$~8E;@fbZi2er?M%mste&UVe zXw>l^U;pv=3AlcEd7Zho235`~JX|gRb zKMD8VG5SSkg(gI)?#yI@*VMn7sL4H8YOkr6)!UoP8&pmwgM1I4LNhLF(2)Uk4S`SY@Fxs`Oc(;0h69>rvKnWwBS-<;xgEr(x6DibxmxA2GpmIW%yoQloTB&TirQB-&)3iy;JKCM^{C2fZQ!-8vmGcos@_>` zs?06jUahZ9ZjxoybQv>rMOIl>wlW*yIdawc z1=gI%9Q>fsugF}o-=uuC4DGI?OOHNR`nu}nH;VJ$(-gdSwdhq6NdZ#d`u?6~~Z{9B`t z1-wD7iVv{1TrJ$)^S%f-D(W5jPFReasvb;xyJU+{ge@XLF!sW1Y>t#pxHf&n1 zT#>nH|1Pz8XL!_BlgzYrRr(xN=QBka^;w~<(os*A)DqVV3{f`x~wu*<2rlCTY(;`{I>jL zIg(cYQuReK+EM8DP0?Fb7i+$1ey6Rcv#0a&>5I>wJl%P&@mbk{muvs|59Qaf*EhbW z_U+#I{v1%Pj(mLjABWnTWxgjboH*Xqepc3gw(i1Z<%PWN^t0;pv+-Sq_cH?QCUG% zdPQ{U<|=F`!^+a9%Ut<>^NXIy4^bDT=A~pM$7FvlUt%w-s(;S!0?Is#=3GHno8CWo>lpI)FKe$jT79zST+OkX zwj*_?YR}i6x1XsyQCHPo(E_mQ%IeFS(o1y3!G*H?$*YP&RM{3=S)>NP*O)ZkUffX9 zT;l&u;qy61(`3n|nI*aE+#T^)mAc-5XO|S1md4@P{+a8x;&v0(YMUovWmkUrJ&Pu zXoQi+mlzyVO8Y8*2502splvA@57<9pE;b(RGHHC@z@yN7Q&))11UB+fcs{K&H5xCf zKDlFG%!H&Hbw@N1lr{f|?xO7oSi+$#0O~rDel$eo146*S?V*`hq6(0H%NP%`pACJIXr6*_&%wUIKAOx$>g;p&(WnhH6fYKMq71sza*elGHFyzT zNPIVF5n6Pb9n8$&3wSgMoXv3B$C6Mh1fewGk~#e>zp;A#;b65xG}uIkv|TbiuX_H{ zk&Epb2jy&{55H9X#uX)4CZOX@#Zq2#rw<$&plbvIOi;aXCP=0bJUn3c-RxUQ+%1X* z{>fL~SNpafs_Cq6Q#Z8rzSI7;tgaj)tW-6%1zF{q_Q!hHHYCdG6KgDHrSE2tnfv2@ z*#3!n`zLrG>Rg06WEV2S+hbHQ5ecCgnnkz+d`6wy7t4G@cPx&bJ`uY72A&*2kiR() z6bXoV6U+i~@qib)t=M{V>dOo`ML-S4(`fXOqhDdqDM`!8!N1|({Bm;AN^(==Jist4j@u&|VHkfH@Du$@Qy2AQ$ zyS=B!4Apu-Qm z??=AR!Q1>cw5nx=g{6hW@|2gSS+|amKUv#qsXH{+_oKfB=iXcIlJfGBa)=elxEVFOi~iUHd&I=pcASXucdT%& zI1%%L?ZgRx=S$9)Xz&P5Vg--jbHH8UD3D7bnD#I%oeT0z8Q3~q@{90U0|W>Iq7TOh z1NXBNgAP&M96-(t7<7ax5CV`lsF`;0Kr{)mF%V-31dg>2)dn!v5Y0Px-e3)^bLR_u zAk-tD0EPi=Wb4oq5)tMOdh~ZfmOf-|vv(;;YY^!I0+^8?SJRo`dC@ukP#kZu9gS@X z7R zCS-&8Ac`H_`5nyExf3wSe-KjId?+zTryShb!;;qltDAkOl@Z$Z084;cCoF^bIV@Ee zi3{;N-Umb2864mq;zq|m6=t(Nu}cM>#x8r?A+v@+MLw**Gn*WdKniw(tq8euTdsi8Zq0W~rrMOat z%m0Qa9T0xxB&|C-8&94BV}cy@fj6lSv`8TpH^P5~fbH1MJPwr1O5YI>fq5L>0N%zO zpw)L380LDgt&xsGhe10dgc}3xt5^u(a<_ofE8Q_ik&>4J5mvKj)0vr&g(IvQf*&EM z=Wz@dRD$rSN=YG=v%iJN&b$_g?5u8v$WA1*LC~f?kA!H=1=V$Z2@4m*i z!)jf11|vI|n8CTKI0gr=6lqxSh(fRxsD;zUZFwYAz1w8iX;p%+pFb`A>8H=%KcT*I z^vK~Cl@~X6uZ!LX%cM?9PfXsuNtT-rdYCFNudJd#gZ+NZs4Z-@H~OP-Um>6O(8DSS zoDRl3UI$DI2g5tT@K!iGt*{MN6a;gygZes?bp@Y!A_yRcap%RV1Aj6_&7Kx;2d?wJhEtaB~olpbt#z|334}xAjCm}zo^*y)xKLutVI8W?{JDyFB1Q@ zZ_8I|ht9Q2;aCbEKK)ESZ-CDnes(Q&ErZV-ejfVF;b+G(wNC)OE>Uz9__G-Nz3=RO zZ6z2L7<36;qB{jz2UcO}R4@MkgsPa&d5c9es2Nn#RuU84VO2XdgMo>XE1Z^x!2y&xJLkH-3zbN3m%kH8KljihAJNb-ug>0nsnuBd*6X?d6;)zd+r*T zW2CS(mmnq)+H`6@{E%?I6J&tp0rb`DATh%L%b^w|O)E&6u#ND-5T68qh?oB|I~X|p z2@cFJ@H7ifZHSfthPe--wSjaqP6Yd#K)hyrfmUFjYbnTCJU^_5+x3N53hR# z%hh$(x|pT}S$1`GUZbk5zWG3NVQWdVrl`BPyIbklk4}H?SP7qr0PoF%gUtaaGMsqM zLWgx1?>y+dy%z!%qyh8|Q3L#d1ncPA3r`1b?*eB7@SU5^Ai{UTK*kTiV-(5hX({SM zd~#Y-s|GzOZEb1-=Sncs(wLU4DMm9C=_P4d;9uOpB&F3gYEqmc8a&F?73#_=d%0bO zOpM)LR8XaQxY8$jL6_Ykc&_$lHY{ri9Qr?lgOz-=rM)PkfMXZbcU8L&C61U zPD*?Y2U(X+x>f4h?fglZc;v8 z4XQz@C<#qQf2!cj1MkmH#g|cl&Gf^j-P?oJ;GFSuJ$4<3t(D<3({U9}#P2J0<+>`p zx+3xLwwx_^=b~}Sgz9{Iih9qH1F>&>{Td2=L3RG-`qbw&u{VB6y{SUe(A4wqAe9D; z`f9Wr?Y)Yw${Ma#zj>8d_#v(fJp@s(pg{&fWG{s1xT8FPC^iG04cu0s8#oI-dO3!C z)ukmxrS$QQT{BkW8dtF1<*URuP!?W^j$vPQNohq19dkwZ{d=g!5q!$w3*la{n*$Ow zUgQWyI(rdKs&+03P}IdMxon^wJ+EegJG^7B0Xxyc%CLKZ^bQ;6Uhr6Dl5U z*PMIqT+i`;$Qlk-w;v`8L*z602~b(lJVNvDvqSXW2=x9Z55$h2lomT!MMg4@`|!bbNtJ)t8(lGj!JyO57)!Bt(Pt>F0vKDH>o6MXX+Gi=;uJYQV7SX zDF7jBiywIBDywp93TsRJOKtE~7}!oUH*Z3GK79S*zYT3e^>CeVRgw<&V*iqIh%Zr9 zSC>^(g0^$Bwx+V7sNNq3IoG3kXx`16S5eTqtNx(10=0Et1*sM6Fn;`rt0#cl1;ImD zSRpS5K1Zw^3dHeOM zu@muwpA$d5brnd044QhC_)A~aod2Qw`&c>N|F)9h5%!0F8W~ zOX7qE><;<;HLE}y1wH9Hs3Sy80@-H}q@3Y{UXUS<^Hw5*49O3md?gc|=`UFU{A{4D zfsjB9Qhx~vM5zLGEd^u)kVD*p1(97&Lo5)Q4r>Qeb258EQC(D1Sf$265MffCpAA7} zu0Bx7gPCP)Q$bU99Yk<~t)Ve9xh6@Kl$@ImT2Y@%PG@Hoq@^K<+=iYnHXFSjIS=0spgd563i}N>f zk6XpVsBFQsxjg;O?JtUpi3k7a-Q)VbjFxT zvu)6pLrfF{lxH+gg0LQH5P-V>h`o9|_GVmVuA$1Ut2S;}6C%w{$x2C4(R#2LTireA zGXTz?AH*3;N=>Ee2jA~L^BMn|dECX&Z;-VqG#0AMi!9bMen9!STMt!W*k*AJ@r}uQ zOwxJ#0$W;D`|_L0>bXB)X}$J3c{4?dR8nb)ib(I>Bhm|}!`AHMjyMjLHP^%~-Mo6` zw)brZ^7oZWu@o)zM-Yj0asEV>kgepk&VHgHWG&VNHI`!fX8XTrvGZR*G;ak; z_W2{SfrA;dl|CgNoxWurPdk&P60(Nu^~V4|r@17&e~&0W^3bDNU~(%E9)-op%uY-c z!!*o*9Hxl@^o{X&85^7#&^;#N47#r>34Hv6m?MO%%Dp&A&K~$gK==z0Z!KOreIzYJ zA#wr=C8jcPn25upDggj}Cvm6@vF=Xfc`&lY418P3?p#c^TJ*y6+{M}Iawy-Ig>1DK zY~u>H*|&zM-k0?pe*4j*+qWO>+>w@4$0gOJ?bxYe?;qVB-jj3QZPzMy(gsqpp^5YA zFX&!-O}Fjd=*mbQYb6XH(N}FJ(GedN384c>e;Q10bUcFbZU6}(KwzBws*Q6FYaiCZ zZ#>h|a>fHt=4mJiy?OObZ6j8`8bz?L28{2 zw?jE)-rUJk=AOM;r}^|8;JYqI*Z+LN$?fbzkl5X$ltsyf3BcYCtWMdHv^{aV?~eVu z_U_y-&9MQ@s@g$iq|>$<&YF(d2q6oj0kB)y(C~t={B60uI#4%?j0yP(YC21tkd&N| z!6z;?Xbnq3Q^JzN5~<{SpB&GQAwU;D7aGMQZ2-R`&61Xr&NZyxwPDBF#4vqW>NfgX zxDR65@rf!rQ<9LESY+hLz;MUbg3zK+-;i~|8$#AgK|X~5LkN-i*M)PyeIgfQ&ov|Y zKxE(5B-QHcQhlqzLP;5J54mbj=OuLx1%qt?^bw&`B{My_)@>-2gp*gR(Pz9{PZ%WcbGeJfMYUJa}R{xq( z!4Wm+0@+>hv3$}5nLGtwdB2d)!dJ|$Z2BieX4oF0#rORpS2BDwoUT1t*y&<5l|L z6PbO#Ve63PCayBPXnBxIzSa7(#u8(Wjs~D}bToL~v?1%ZN$GZW z!(kqL9+nsmT)E>$aPm%m1+I3V)#N2Ly7HrVueeoKd$91>F;#VDO?nmAaHRC?IaN1U zZ&vTC^W|P??H8 zt(!nK+>8$!$*cVzZrvGPA673t_b$aqj8zAT<+D#>a3p8$?kzvX?;}qU@g5?BC5kU9 zNte%;U|{64t-UaPaW-@T5p?cToA-<*J~B<&ohWw)w!cW5@;|KTS&P zdM@^C&=Jm7WvQuF;Sk3XkA)rN%thJ7MXHv_mUYKCt3-bAB$=I!*|QU!uBKhZbP#=E z{Sx{zpByqec&nOX;AWqEGK|~B`?q~EWY@agEBCD0xAy$>Ep+Iw{iNP-%OAfs{d|!=I z%ex;^FJ#^vx*H}$k2uZ0HJ)?}>4_CsabMZA&Jc#Ys@R)F(Rw9Lnly(JKiTo73>MNq zq;8P#^nSs+0)*yGh>sxm?VNs(q>+3~)5-AR<@jg7zvM1>+fC`5PU709ONw3o%D0y+ z7|mswByTJ^_0cCMPF%l!bkVeIUby+#Unxi=_cmXCea8A#Yhts;gSNn2s#9Pz3USvXoF>* z1qz5+X8?tr|2n`1gQ*WEI3#r%uqSZ+d-PuzdxCevO7{WvelUFa4`d{OX2>D4?1)DchD@fD zkx%dkAp|kmQ5vKI{Ml#3kIgO2u;~m?lEMpM-UP%pX}gRT#qSnQ+qz-D6$q_np!we% z#v?kG2bBWvH=AG#w*FfNQ__W`u+YjV21KEFU3k~oQ%RRJQ(xlui|RfS2y{pT?e^Yl zoa-{#q3lO}fkjxdhI{XB1CWzLfSViu(}yU&meJ<>;tZL)HC{G=GR2dFGCGgM(hcOp zc<#XBrr@#!>B(h9OJ=BM1i{H1Fk=7*NWK%0{1(am0WAXt1hurZ6dgNxgexm*+I8T# zlzdnWQp*O$sKYg~>3mgubySt5{$3Fhd@G5fmb|miIhNGRb505zc}JO(V|1k3puUlv zVK8KvQ|##wWHRMgrSb{-)fbf+_Ed`@!;qN;Vuv*?H#5f~&5~GivT_Y}>8uM%b55o; z-2&{m$(U)(uo!Ha)=Zn(Y?0OnDswC*yTN9#rXh)#k(r%lO}85C#+)1}!T?>BW?Q-) z$N&gO7?C!&r8$gJd2c<)gch?+dfA|~r&?1?TuPcDJ&%jV_J>m7EhjX#&CG}$0P zV@ffmr)Q^Sg970&18-w9*`%(;t~pG_3l3q!?yMtxnd!T?G&{m;R=oLg7VQ$ITGp7= z0HX<~kKqLViyF`ZX25vy#L&qLUWauretq((&qI0l`2SD>mMinB4LhRCn7V~eVN$Fu zP8}EPK`3b5+K*vxxV7R}@zhr)XmR%Is!M9}cy4h%WV1ykvRAQnh@pe{fv& z4*p=(dxuqWYvqlw>o-&+{ZrCN-X*Vc=MP?M_+-0u_wDcZ{HT^2{IRNumXT-n?|1B1 z=UB5$IlSCH!4a1o75#4VyDL-+@C;qngg&E|n?r_%!H$Fxa>!;Y#Q zJ9