From d4233311e56a96dd315e4ca03b00f85cca8fda07 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Tue, 24 Mar 2026 15:18:52 -0600 Subject: [PATCH] Fix PM+Cert+#10 env label image bug, update super old everything (Stripe/EasyPost/PHPMailer), add Sentry/GlitchTip error monitoring, add test mode domain --- publish.sh | 4 +- settings.json | 3 +- source/includes/footer.html | 3 +- source/includes/head.html | 4 +- source/includes/scripts.html | 17 +- source/pages/index.html | 7 +- source/static/assets/js/shipment.js | 2 +- source/static/composer.json | 8 +- source/static/composer.lock | 1106 +++++++++++++++-- source/static/makeshipment.php | 10 +- .../papertemplate_no10_4x6_certified.png | Bin 35364 -> 49159 bytes .../papertemplate_no10_4x6_certified.svg | 14 +- source/static/payshipment.php | 19 +- source/static/required.php | 10 +- 14 files changed, 1054 insertions(+), 153 deletions(-) diff --git a/publish.sh b/publish.sh index a78ae99..35e56b9 100755 --- a/publish.sh +++ b/publish.sh @@ -2,4 +2,6 @@ sass source/static/assets/sass/main.scss source/static/assets/css/main.css php bin/compile.php -rsync -rv --exclude=settings.php web webhost.netsyms.net:/var/www/certifiedfromhome.com/ +rsync -rv web webhost.netsyms.net:/var/www/test.certifiedfromhome.com/ + +#rsync -rv --exclude=settings.php web webhost.netsyms.net:/var/www/certifiedfromhome.com/ diff --git a/settings.json b/settings.json index fb2f461..796b299 100644 --- a/settings.json +++ b/settings.json @@ -2,7 +2,8 @@ "context": { "site_title": "Certified from Home", "site_root": "https://certifiedfromhome.com/", - "stripe_pk": "pk_live_51NEHz0LeSU0ahZ9MUVOnCSGAibY3M4UHqdRzdxFLMnlmbnMAVJzDz0psztY9AvwpTjRcpXkJT5ljBaY7z6v0w2TT00dA0Lnx2d", + "stripe_pk_live": "pk_live_51NEHz0LeSU0ahZ9MUVOnCSGAibY3M4UHqdRzdxFLMnlmbnMAVJzDz0psztY9AvwpTjRcpXkJT5ljBaY7z6v0w2TT00dA0Lnx2d", + "stripe_pk_test": "pk_test_51NEHz0LeSU0ahZ9MpX1WyzQWkJLvSntsj181vTRXLVqJqdZcQ7i7rLpNu7X6iinaIq1h8UOz4Ypkzh61RZ06CXIs00UhIjvV1M", "navigation": [ { "title": "Home", diff --git a/source/includes/footer.html b/source/includes/footer.html index 2f33b44..f8f84c6 100644 --- a/source/includes/footer.html +++ b/source/includes/footer.html @@ -3,8 +3,7 @@ diff --git a/source/includes/head.html b/source/includes/head.html index ee39d23..d8b0c92 100644 --- a/source/includes/head.html +++ b/source/includes/head.html @@ -3,9 +3,9 @@ {{#title}}{{title}} :: {{/title}}{{site_title}} - + - + diff --git a/source/includes/scripts.html b/source/includes/scripts.html index d65c224..c3fb38f 100644 --- a/source/includes/scripts.html +++ b/source/includes/scripts.html @@ -1,12 +1,7 @@ - - - - - - - - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/source/pages/index.html b/source/pages/index.html index 613d28d..afd75bb 100644 --- a/source/pages/index.html +++ b/source/pages/index.html @@ -276,7 +276,7 @@
  • Send Another Letter
  • - Can't see the file and/or print it? Click here. + Can't see the file and/or print it? Click here. @@ -284,5 +284,10 @@ {{> footer}} {{> scripts}} + + + \ No newline at end of file diff --git a/source/static/assets/js/shipment.js b/source/static/assets/js/shipment.js index fd67fb3..0518631 100644 --- a/source/static/assets/js/shipment.js +++ b/source/static/assets/js/shipment.js @@ -117,7 +117,7 @@ function submitPayment() { "no10_envelope": document.getElementById('no10_envelope').checked ? "1" : "" }, dataType: "json", - timeout: 1000 * 30, + timeout: 1000 * 60, success: function (resp) { if (resp.status == "OK") { // load PDF to print diff --git a/source/static/composer.json b/source/static/composer.json index db80e04..36f05af 100644 --- a/source/static/composer.json +++ b/source/static/composer.json @@ -1,10 +1,10 @@ { "name": "netsyms/www", "require": { - "phpmailer/phpmailer": "^6.0", - "stripe/stripe-php": "^7.71", - "catfan/medoo": "^1.7", - "easypost/easypost-php": "^3.4" + "phpmailer/phpmailer": "^7.0", + "stripe/stripe-php": "^19", + "easypost/easypost-php": "^8", + "sentry/sdk": "^4.0" }, "authors": [ { diff --git a/source/static/composer.lock b/source/static/composer.lock index 66d78b8..3b1ba36 100644 --- a/source/static/composer.lock +++ b/source/static/composer.lock @@ -4,96 +4,41 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7a941c6f682b3194cfb9e60d6455d254", + "content-hash": "a57a12215f807bb83b46418344581ba9", "packages": [ - { - "name": "catfan/medoo", - "version": "v1.7.10", - "source": { - "type": "git", - "url": "https://github.com/catfan/Medoo.git", - "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/catfan/Medoo/zipball/2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", - "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "php": ">=5.4" - }, - "suggest": { - "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform", - "ext-pdo_mysql": "For MySQL or MariaDB database", - "ext-pdo_oci": "For Oracle database", - "ext-pdo_oci8": "For Oracle version 8 database", - "ext-pdo_pqsql": "For PostgreSQL database", - "ext-pdo_sqlite": "For SQLite database", - "ext-pdo_sqlsrv": "For MSSQL database on both Window/Liunx platform" - }, - "type": "framework", - "autoload": { - "psr-4": { - "Medoo\\": "/src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Angel Lai", - "email": "angel@catfan.me" - } - ], - "description": "The lightweight PHP database framework to accelerate development", - "homepage": "https://medoo.in", - "keywords": [ - "database", - "database library", - "lightweight", - "mariadb", - "mssql", - "mysql", - "oracle", - "php framework", - "postgresql", - "sql", - "sqlite" - ], - "time": "2020-02-11T08:20:42+00:00" - }, { "name": "easypost/easypost-php", - "version": "3.4.5", + "version": "8.7.0", "source": { "type": "git", "url": "https://github.com/EasyPost/easypost-php.git", - "reference": "c1aaa1baf82c8f5b330ec4da80d084da458765a5" + "reference": "dec39fe81582e8d6d24873612ab0b83f24906fe4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/EasyPost/easypost-php/zipball/c1aaa1baf82c8f5b330ec4da80d084da458765a5", - "reference": "c1aaa1baf82c8f5b330ec4da80d084da458765a5", + "url": "https://api.github.com/repos/EasyPost/easypost-php/zipball/dec39fe81582e8d6d24873612ab0b83f24906fe4", + "reference": "dec39fe81582e8d6d24873612ab0b83f24906fe4", "shasum": "" }, "require": { - "ext-curl": "*", "ext-json": "*", - "php": ">=5.3.0" + "guzzlehttp/guzzle": "^7.9", + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "overtrue/phplint": "^1.2", - "phpunit/phpunit": "^8" + "allejo/php-vcr-sanitizer": "^1.1", + "php-coveralls/php-coveralls": "^2.7", + "php-vcr/php-vcr": "^1.8.2", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^10", + "roave/security-advisories": "dev-latest", + "rregeer/phpunit-coverage-check": "^0.3.1", + "squizlabs/php_codesniffer": "^3.11" }, "type": "library", "autoload": { - "psr-0": { - "EasyPost": "lib/" + "psr-4": { + "EasyPost\\": "lib/EasyPost/" } }, "notification-url": "https://packagist.org/downloads/", @@ -114,43 +59,438 @@ "easypost", "shipping" ], - "time": "2020-05-07T20:37:59+00:00" + "support": { + "issues": "https://github.com/EasyPost/easypost-php/issues", + "source": "https://github.com/EasyPost/easypost-php/tree/v8.7.0" + }, + "time": "2026-02-25T20:34:43+00:00" }, { - "name": "phpmailer/phpmailer", - "version": "v6.0.7", + "name": "guzzlehttp/guzzle", + "version": "7.10.0", "source": { "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/0c41a36d4508d470e376498c1c0c527aa36a2d59", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-03-10T16:41:02+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + }, + "time": "2024-03-08T09:58:59+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v7.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088", + "reference": "ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088", "shasum": "" }, "require": { "ext-ctype": "*", "ext-filter": "*", + "ext-hash": "*", "php": ">=5.5.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "friendsofphp/php-cs-fixer": "^2.2", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "^4.8 || ^5.7", - "zendframework/zend-eventmanager": "3.0.*", - "zendframework/zend-i18n": "2.7.3", - "zendframework/zend-serializer": "2.7.*" + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^10.0.0@dev", + "squizlabs/php_codesniffer": "^3.13.5", + "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", + "directorytree/imapengine": "For uploading sent messages via IMAP, see gmail example", + "ext-imap": "Needed to support advanced email address parsing according to RFC822", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -160,17 +500,17 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1" + "LGPL-2.1-only" ], "authors": [ - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, { "name": "Marcus Bointon", "email": "phpmailer@synchromedia.co.uk" }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, { "name": "Andy Prevost", "email": "codeworxtech@users.sourceforge.net" @@ -180,20 +520,432 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2019-02-01T15:04:28+00:00" + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v7.0.2" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2026-01-09T18:02:33+00:00" }, { - "name": "stripe/stripe-php", - "version": "v7.71.0", + "name": "psr/http-client", + "version": "1.0.3", "source": { "type": "git", - "url": "git@github.com:stripe/stripe-php.git", - "reference": "5ebe39d814411594b1ff9d79f0598a0de7faa30b" + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/5ebe39d814411594b1ff9d79f0598a0de7faa30b", - "reference": "5ebe39d814411594b1ff9d79f0598a0de7faa30b", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sentry/sdk", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "fcbca864e8d1dc712f3ecfaa95ea89d024fb2e53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/fcbca864e8d1dc712f3ecfaa95ea89d024fb2e53", + "reference": "fcbca864e8d1dc712f3ecfaa95ea89d024fb2e53", + "shasum": "" + }, + "require": { + "sentry/sentry": "^4.0" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a meta package of sentry/sentry. We recommend using sentry/sentry directly.", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php-sdk/issues", + "source": "https://github.com/getsentry/sentry-php-sdk/tree/4.0.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2023-11-06T10:23:19+00:00" + }, + { + "name": "sentry/sentry", + "version": "4.23.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "121a674d5fffcdb8e414b75c1b76edba8e592b66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/121a674d5fffcdb8e414b75c1b76edba8e592b66", + "reference": "121a674d5fffcdb8e414b75c1b76edba8e592b66", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" + }, + "conflict": { + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "monolog/monolog": "^1.6|^2.0|^3.0", + "nyholm/psr7": "^1.8", + "open-telemetry/api": "^1.0", + "open-telemetry/exporter-otlp": "^1.0", + "open-telemetry/sdk": "^1.0", + "phpbench/phpbench": "^1.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "profiling", + "sentry", + "tracing" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/4.23.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2026-03-23T13:15:52+00:00" + }, + { + "name": "stripe/stripe-php", + "version": "v19.4.1", + "source": { + "type": "git", + "url": "https://github.com/stripe/stripe-php.git", + "reference": "095384404587d07de2ad1154c389c4051c5ed92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/095384404587d07de2ad1154c389c4051c5ed92f", + "reference": "095384404587d07de2ad1154c389c4051c5ed92f", "shasum": "" }, "require": { @@ -203,11 +955,9 @@ "php": ">=5.6.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "2.17.1", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^3.3", - "symfony/process": "~3.4" + "friendsofphp/php-cs-fixer": "3.94.0", + "phpstan/phpstan": "^1.2", + "phpunit/phpunit": "^5.7 || ^9.0" }, "type": "library", "extra": { @@ -237,7 +987,149 @@ "payment processing", "stripe" ], - "time": "2021-02-05T21:29:10+00:00" + "support": { + "issues": "https://github.com/stripe/stripe-php/issues", + "source": "https://github.com/stripe/stripe-php/tree/v19.4.1" + }, + "time": "2026-03-06T22:53:13+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b38026df55197f9e39a44f3215788edf83187b80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T15:39:26+00:00" } ], "packages-dev": [], diff --git a/source/static/makeshipment.php b/source/static/makeshipment.php index 773a587..4cf910a 100644 --- a/source/static/makeshipment.php +++ b/source/static/makeshipment.php @@ -30,7 +30,7 @@ try { throw new Exception("Please enter your email address. We use it to send you a receipt with your tracking number and other info. You won't get any spam emails, we promise."); } - $shipmentinfo["from_address"] = \EasyPost\Address::create([ + $shipmentinfo["from_address"] = $easypostClient->address->create([ "verify" => array("delivery"), "name" => $_REQUEST["from_name"], "street1" => $_REQUEST["from_street"], @@ -42,7 +42,7 @@ try { "country" => "US" ]); - $shipmentinfo["to_address"] = \EasyPost\Address::create([ + $shipmentinfo["to_address"] = $easypostClient->address->create([ "verify" => array("delivery"), "name" => $_REQUEST["to_name"], "company" => $_REQUEST["to_company"], @@ -81,12 +81,12 @@ try { if (!empty($_REQUEST["no10_envelope"]) && $_REQUEST["no10_envelope"] == "no10_envelope") { throw new Exception("You can't use your own envelope with Priority Mail Flat Rate. Use a USPS-provided Flat Rate envelope instead."); } - $shipmentinfo["parcel"] = \EasyPost\Parcel::create([ + $shipmentinfo["parcel"] = $easypostClient->parcel->create([ "predefined_package" => "FlatRateEnvelope", "weight" => $weight ]); } else { - $shipmentinfo["parcel"] = \EasyPost\Parcel::create([ + $shipmentinfo["parcel"] = $easypostClient->parcel->create([ "predefined_package" => "Letter", "weight" => $weight ]); @@ -142,7 +142,7 @@ try { $shipmentinfo["options"]["label_date"] = $mailing_date; - $shipment = \EasyPost\Shipment::create($shipmentinfo); + $shipment = $easypostClient->shipment->create($shipmentinfo); $selectedrate = []; for ($i = 0; $i < count($shipment->rates); $i++) { diff --git a/source/static/papertemplate_no10_4x6_certified.png b/source/static/papertemplate_no10_4x6_certified.png index 6ddc5f1fedcb0d053dfbead573ed3d5ef47892ea..ddc4d32dca8f4d021dbb1ad8213f17dde35b612d 100644 GIT binary patch literal 49159 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 literal 35364 zcmeFa2UJv9n>KooR@;E6h=3%;03tyohXNE36(xuWNKz0=B}vYqjbubkzY;8NS}{&5gOJ<(7Iwgp1Ii0thpP$p$w7mcbti>n%cZ!w`f2I z|NRq^7()E>|KQ)m)nDK3{MP&NwZ}WZJRNnEW#`+C3yM@3{QKwqf&YCB`d^U%YxrL) z0Ydo4IF7DD5AB~0203aE4m#G&+{rYV?{R1!Xg?)wG{};2_u{PXVfogVZ_y#BGeVwq zH}o7FZ`GvuMudp- zHYJ=S`h;s_U&A>s<6eWX90$d-QNW6seuHj%ReQH1G8F~}@!9=E|S1zMN<|P$Vhq)I6RyHO>Uy;tY*u}Eq5a7qg&0v&6~z`ArqzR8=0evH{Y6qH`Bo0d^)?o z@`6D5&(Xd@bGshRL?b#&wo`KDi_sDm9UpboX!ey}gK6J&5EaLY6BakPaP30G1L+4i zyAnf=OX4|At_LsI?&#T@CZ(zXAyBopq*LNx(4%=;c<@098fjh5S6pn-3hwoW-#bnf z*?HFR#|YXhC7zTwV+&N0V@T&`2);?N`PO>@KN@SpNL{OdNwNgGYIy*BS*Rb_2u zeW7J(-8N|7=^fFiFW;{$=UVVw*QVao6WWYK&yCyV$I~3XyklF56T^$-Kn*^|f_R#W zqFGK#NftLm8?dA2^ry4MIsW@k%0vz|MGrhLnt1r3_t72sh|ac|$NM_y^_n7R zpIz5e)|1I6=Vc)w+E=jN=oVVuD_F65D$qqV>uJWcLKb3bfIH&IkjQer_Cz5YS2CiCYn&kVtfneah5^ue3R>* z%Mkp*u7Qzg;xFmC{Ons>5P}=lm%Bg!Jq(FvMa3nL!8jq*!B!V^5{ANt`_rXa7V*RKyH1Ef`&4 z8-JALG%f62Lvfp~SLCsqOz7#i@h1Z-Y}^maukHW^r0DTcR@S3~8;9f8FV*wfWcD6@ zyMq^}CsCro{`goAB{tdV&sk}Zx&rK3NwKFZb)^em&5cLX4}dtDh}yv|$oARXVxG;W zl3WnsEDA(q?^E|0T>lz7w3++qqfpLTUpLodCn|r45dHX8Hsmn z6reEr&*xk~U`a&nghR-7qCi-d{q+m?!`|^vceR1UAH(6sUYe~;1@#2=^mXKmJ{ZtT zDykA4s2Fg2YT!^jH}HO%0=b;u0o8_g^c=+Bc)C(N=*qH_`4@~9AIjue+^<|*8g+IV zZ1yNT;{5;?v>M*A?2o@k=)e2vggB=BqUX{SU3ibDk_v|F z7s#XRMnTFaHtr5I)zO*RqRnf8W z+#DZ0Gi(pq97=b9Hxqfq@s`r0RkVZ3hg&Jt?6mT&FupfdXZQ^rj?m-{8_i1zCVe{v zJ&S{>nj3YPQ**T?d3%2b1QeZHLWI4bZFn?N{wRx?ASxvu^^X z-kygJ{{kQ0lldq7Ze~l79_x<|K(xQXJ1=H2sJ_}VhTul`{WPIGqJxT5cOrWTL#B9c z&eTu4<~6^nV&Dl<2i- zJR)e)_$K8)xMFHWA3L^^5HU>Ww#+t+&qSP;kM25KA`bnGeh;CU2$O z)u*62>(}I}FNa&`yeEPiU`)~5$46&n>5vVkXc9eXy?ITB)bS!~68aot4o8uSVB=5B z!2&LP90p4|b8=QSkv2cvM(d`z>sD+i%AJX+S(7xMSz(e~ObxHfm!V#sD-CK%>O6I_ z$=vniW4L6O#YN_xLgg-|gSu(~K0ZpbC;yNw%-lX`@twp03Q4^R;`h{A8I#D9Jby_Z zlD`9M2!a}6k3#ZSc4P`cA-8wT4}#9YY~&yGSpJ)=zijbtSBZ<{ZSizZ_1i4MlBoevY}}k8XRGZ8m~ey?wK`FH zBPQTh(?$HdU#ScdRW#*@i?tGx(|zkB0HAq7Odwq#p)6D|&@NaK_(x}c5lEUxJZdXO z>o(PVSdqggvLfdk|bg^IiBgT-07c!}v%)48NCy5}yvmJ$PimF1X#M zliPaE=G8_5dkHp=P=hJEGINMn<;V?n!whDuL5RX(&|VhrNmur<`b>_@tY736Guz+= z7h&!>FL!+@+{z&D3SXqNkNGr_xrR z)9YCOO2gW>^N5Evb(})L*!r>JVj`%I4D`Mr8NDyf>dm{WD^GCW^N~GTYocQlXIcq) zIE>nQEA1hUfZX9_;uHLg^JZIdp@r{W^Mqh5|AvRY-Is1gk9i%R!y$q2ip3P?H{M_0 z84VMjX*n4^A94|LUtIKS6Ev(DqdT_bwb~Mm#0`=>N|Gv$L_L3AkKgm%4F(&M?IP)) z=AwFnipSiPkFXz`WVf@bpHxY?yU|>QUH1nsAkP<&Q0w!oO(WtCb07S$`w~fTM^1X* zP?}jGyf$(ucw6VNIq!DS`1a-HGRkOK#K{i`ZN8Hxt4ormZKCv6Ib=)7H5lfw+>TYn znR8KJUhd-_mVDNiE-@L0)N-#bN*488{NBx&U{q#f+AsWVKYcD)_HR!<7-)XmaQ02m zjq+t2+Kcav*!?ZhG3kjdF0q9n9l}~1V_hd5k?tldG{p|Ll=O2m!(Kz4j9BqUfEG_l zx8;!C&6UlmI%G@;_IdK`N!FA;pv2RLyFHg7ch0$JE-Lu~r!JxQ_4d|^pb|iSKWvT3 zf}pY9Y_VUP^1ap96ChIX&-33T?fJgTK6U;WhXU(c)Z3tS`F=Z27s^}Q@czoo(UQ!y zQ?`nAK4-=i#(GwJK-g?_qWvxm@3Ky*m4?!!tXGq%&Dhx4tx+#In{@&Kiy`0Y7^K$K z*327@9is%r-Cu3NtQs`_y=`Z!`4>}DGdylqH*g{3_Se0r6mFyAIOPDh%{FCvR`v)? z>A4&!5=Fx(J(oPpZYiCye#+Lsz<^EUXJY=O*g{{VyEugCg->0qE4v}xS_~uwRbxG` z^%vX$aQMl|h%LdDRG*japl9#kR6m8duKZD8lM*2p<6t-UWboZa#m(dkD4#Q}rfvNF zpUrBlf) z=k$)>1!(w_Te4#FLtWN*5BwKSMNkpZszHn=hF+2?ao!xwSlFM4gd2NDd-pLpx1|YB zmswxag3%Eq@;-5}{o8f)I|`e|s=kVwIp6T-tPF8zie)F5%43FPCnxh0O=B~ zCd63Z-=vV(S4VhGG;v#jdQ%W69c5r?5?$e%o1R+;@G4!dQARo;6RHTUZn-|hLGgQ= z6nc)e-~2ELP`k>&Lc2Ry_T#uX3Dho7}uoP5MsnYOnlJozv^V=4Ae4yuOfhF({q3 z>p}P6SZ(4Y>!7Xg+B|8}nbQga5h!rwRBl&LyF5kE4rj{IV`dtDZsR^?)D~nU>wqkD zEUca`t4P?=3Lg1eFGyoc{e%)Z8DXn94>x;zhjZJWBTZ?ebLMUSdPwX@W(AcPRTBoS z>n~y@`Ew#&OtXecmx$ZNF1_K-_KhZ0>m1P2Q~4Z!aUS_q(Bt4s_-(5Va{DZ9<(sNM z!>XKYP~RjVQzCP8$O`{q!e}ZJsFwBjB0_*73jz(7Eb~I_vl+2!1R6I44ax; zm?K#NMjHP>R1RDON1^1CA~4yu#h!|HHO56REN%=RC|!2X+jZ#Qw1 zJHjl7s3x`J%@E1G213h&1agNi;PnmcFb7Z-0a2_@gCRe@efEvWkyh6|@&b%79YIhR z$Ik8l*U6`xn1$E*ob}=ED%;+vN6Diva2P?i1r)cH-@N5ursre_ON63ARTteur?G9! zUxp=_XETW+m!PfZ!YWb&6;VpZ1r`B*<7vQMUWHg9x>w)XnJU|sE z904YcGdyX%XJ97Wc)5)T^GRxT_o`G6qhOml!!a|PN`vY zzcp9VTW#7_xmg&m7djMb1Zp=#pu)2 zoPUgAfN`EqyYB9RW`MwxJ6eF3UMU2nC$B({)uBnj_=_hF626?3J1Xuuy3QA@7Ije=U&O5JZG_| zpD91&)m-CTlw>E<<`dobvCDFkEs}M127@Rcy{ zcx&q!s+wXl>Z4!`u7lMH(=Byb=j{%T(8_yuj34>S)N4m(!_%z&F&Iq#kf-BXW#4BL z1zjuJM3}Z|PUadNw~Ih%h7Z=bOyuMb?fv1!vr`^W5ApIKm-qGO75pw9QJE)_+L~b4 z5d&3*as4%e2kq4@ex$o$JHdaxqPM@F1?%}k`rUNPhq((7{&!eQU$$_*3H2>XYGGqN zfx@20+G-L#_l?B@5^JR@|1FSM~v%gKY^@BtAmP-TZ*rms^=!+uW@hZ+K5O)9nb z4V*|QTg!J|8OJ&`ZVj3ZbM&fin%O%#IyQPj?>`AR{Urow%eHXAA~1J^SQMG}+-zfb zfAtAs)xMLJcHe^N2!iw;f*f8B4~`w*qs|BKi53!xlp&8Q2zh*2k(gX8z-=UB{PSL- zE{qi9J<{B8#e5(Whc1GCbnU%K!}AK(IfJCUqKgZW!sn^iDi&EIvEXfD($R1;Z(G*H zL~;ArJJmGol^XDt%3?y1^HU&A2_@%PV6wGDO;5hom14SM8;z< zVLMx!WY}JiiY%P7@CD5A$#DMz)GO#*3QW+tB84J~3MvX^CQwM4{pztDNqCps-7zQ# zIClgb8CGGgqAaTB(yV`vK zi?WOuVpE_TxhO#o)qmVkoBGutPAB)@?|#a%i@JSb!EIsd1)g1KX0ep`-UvnWk|gNd z`|8pD`uT{F<0do8OqGYczh2z&(|aK%BsVoxyMhReZ_!{6qrG`Y!?#hS*JkHbZ-Mny zw~?%BCyx!Z(e}9+H#)unRcI+0*7TWjEeHRz=nXB^0#ZxNgYVg2JocgKWmh+Wnl3(R z%Q-wReXe@B-C9{HWzT+fRnJ3zEhf0p&>g(_YoCb3*Qzw6x=d$0QD4#&aQ1h7V6FTmO17!GA!2 zJbDEx)7Y`l^rI&G0x?e)J}Ie9dYIh6ej&ULm5U%zs3Qs}I3kyMt^{)C-ql9A=e?dN zfPT)7^_7*@`b%4FiX^MyWzU4JvbPBa`Fgu>O#U_V5b}9Xlva#(eNZ^N%RJVp)~C|% z3xHi`%T9A4ulW~!1BLwUgT7~vG)`~tl_zNJG6D_lLE+h!_u}E>RoeyJhNrr<%6dDb zq@{5|lA5EbX;wjj(qh*Y6{W(0NOMlN^&L=Qk{(|qN4=UFW{nIIw9TNUN&g)rWK2@N zv&yvurk$4u5RTs?B}_)AeMj6WU%Y(ro2%t=5g})}uEa$}7Cm-!UqY$X=hKyiC2<2c zXg7fT6psD1j4bimO3O!|%1<_$h81#dqbcuHCk=19O{HK_UYkD`hPT}HmRCzBM$GL7 z92$IH+EpKtC&1wUp3jWER!>xT9KSDVp{C8#X68%Um<$$x@AmdPuVyLI(v0?Km}u_f zIMxBD8<-Lr9uBwy+P@EkI9%xLk8;M3a~qtTzPI2|m>{?2-&bm4qFS(gUnapJRV`Rn z64Vx);l2*gYn98^;7*&OG@71;iJQ~@E@s)hILmhsiG8=cF{@|PCZ(yZ7m@xeoxBaX z_0XTLsD8$AOkHs#txeX~(a^KQ^xdr#+xQwA)SdR8k?>`AO+CAwD0^OZhav|_{4cxV zMNz>Vh?{%{XFEcQ-wg6)ppT7R-iYQmAN`Gqv&BW0D@mI)bPxrMLD7wdCw2$!*JocbRhF1B$2oswb) z;FFKQ0RJyt9kQ;QTGx=o8pfe}ftvSq5!<8+lFw5j;%Rtf;qoPnHbvM*Qx=a+qEbTT z7^b_VFPTl>lgc62M&Mc$)YR-L$j)tH0`(M6vTrAII-aeBKQs3Gz?*3~SC6 zi&+MGA}FSDn;SPH&|?IAa798D_sJZi6PD70#v9)WguG-yABF2|u~Q5Abj_n*A~;lI zO8~l~=vX2gtcc;FzD~5eVHV(EUE!Kqo$}VqQ0xRfhwPan9I_vORLHq(ylHrR#TUyi zvQnF#ozo~)@_hcQyD^P=qLZgM=by^-uF;{diri?fd+lu6dWk^Zco^XPXNp&_O4G-su^dCv+?hTTP<5{#;tSwdRB`oN3>HiM_ayO8lF0$zH%>vW`4q( z`QDS7O;{VOW*&?wVREnr)}y~^w0+dSM-bzNK7b1fUN@vIz=#%$p*X|kVo2=JK{$$k z3`K&anY@SBsaF7-#1#RFnMx|(N(R7?_hb`HzY;GgRqdC*0wZUNiglg-$a?D4 z@Y`A3D;sqE@9#p5yK3JFeeSJI|1@(F_-WrrJ_4jNh?CiRYz5&hK`yxnrg`>xgLupF z)G(W2d`>VYVyjcaV|0J=$CQuF)_Xo9VNF!lH{H2}(=O0P<(h4m4{3~ibU>Ql_E@O4 zMMI~#;3OM@<~(3ZguLti_uIeu@V~MoGMd@{1RBV@O2x8dK*G826|;dH?;8>)$G3Gl z|3{l|uHSLEvohVzozdA1IJdG$p_pPbrsqk2|8c#TV$@8lx$*c!Se`M?Pv^6vhDBfA z$DwUT=pZb;s^v)0oQ@P(`YbV>$N*A+Z=;DH_g{C=T3y#o;P6-_FH@atD5b3~E5*(j zBmwOs?S@$m&2J%3?jy12uWXv^4-5pk2ucaRrek5zcY=g) z@)`nus8eNnr`?)H-F=rOFK&IqjWWnGa>|azrr**I8#D9B{f#h9+Pt&Tdccc4xJrsY z$7}2@VZEnU#g^531BR4Gj~(mQ>L&CzMxg4s-7_BV9V<~u>#!O4l2%7Sv2&JS$`Mwv z1pg=I)|XUHLaTfR3x7!!`hW#d%w`tp$r4ey-D!I1OpPvJU$_pE*99w3NjFy9{y82* zTPpx-?q2E3w`x9mf@PA_PyxK|=Z~KZ#!cfjehesf?FAmF5|#zZ@0E7%`n{B(DXxg+ z@MvN;Epc_iv-cXUyo_}JL1|{+>n#qakLr{o%*W)m$n?oM#W_P7`7`&s`K!IYIC-$J z{4h|2F{VA;_j>C{0%WU|nUTyP4cpbU7Qnb8qz^)Hy8f=(eul~9>*tqE>}T`hMG-h7 zL9%Ms{oW7K2j%N`Cqd>qHIHn5wofuSAno+*sF@q8IQ7Ysr#`ol7oKIBCn4{&rDtaQ zj|{sh^M>&@WfK%oXePBacYRXDtbacJE`{8SY*wv22l#q3#lys0Q>KXgiHw`kHg059 zFT{Nemd56@uo&t&aD+QOh*}ku)XnE zUuZm&F!nXdSEZq%z#ZpDo-Sk^RoHg4a>tkSDuMAOk&tRqm)@+h-~GS`olAq|ELT;d zp4(yyK(16xStQ}|^<60hn1f9; zLNAX{M9!5PitC&Mw6$D<4ys6k$>+@VBYom&Wp54LOZ`K~%$kIqCPc)o8fXk+fAKbe z`^8Z}hjo!X7P<_XC0Q4*M$g^1aOV%V)QNYn0t(Kdr>&KSd#I10}{=bURV2BjTa(NWfc6C0C(RzTnKIaaQf!LmAJC;Pq(xkY>q=C zs&L@~@4`^q(gv@~#A_u`A5b)zt(aB8KwN5B<3orrfBB{UJwAIu!U{DT_ zl9?SUx17Bdvd_B&&asYWiX#QNg4sS>cR6PA19=}Ab~3id_aJ76HhL!`PSZiwa63P9 z-|9h_!-Y6iblNXwbC+47>2^)bZc@3vl!j0w9fUkt!*AYM#}%^5DR6nng#r!9O1H zbJ0Zxv2AJt59YlZJxrN;$JzLFVY7W$mdJD)1Be%4O*c` zeOGlSS6M~G0BJ4+PtLS!bNDM8x$vQmoMM<{UwcO_vnE*w%i<#|X6cxzuBr}RKrqMkV)S4%LluCVdJU7H7AbLRC8(#6 zf3iwB7{S|d5j*sYvpB4<`h!0wZoO5f_>oJJ_;7_oa9OWRoWsJpvL`dBvxhE^AakM^ zi-w;un9?MQY()L~CuV}_vq+fY|Nrq##{p)rpGmU;7%D~WDFdbJHfz-z+km{E>l{C*h>P?^y13<Z8Z7Jt|+Mxg^xJ$!a5 zB4hr3OfNNPcHQfJ9A}Py(q=9Py@nB`(_WJ9d8NoZ!Ik%&K(tOP1LeHRRa*5(IPN{f zcP6JQyE`tW*mV3BT7Wr{&KlAi=;2D=^c2vPL>ZXkZj6Dt1-e(xUhD9zIA7YD5HWeV zyZ~S8VHa)w%^mFIP;+iB}zTWi3(#?sU1|=5Nl?9MdPKfl*f!eX@JGk0M zhC8P1-8ZV3>bnF-;!0m_aC39m8;^>k7q&-YCyGU_)hbzc%^`f&+fScx)Jfk_&z-oE zt7u@^R!NHW8gqH4I&P>t=#{WJ`rU)uEN-ytvt+b87z`h5FwSqw2g*y=11{lKRjhnp zzTwbWtfqY%6zo4@_eizi(>-45)W^grEVit6>&GyItk;N+hVHBPVTDGlQpt6It1v(jh$c&7W6WYcsaXoDrnae z_Otb#r*wjm<6^x6I_Wnb4sFg=Q76~(Kn+|`v5S-uOr4Zq;_&di&1Q20BW+~3{4C<} z-rds^+6G$e2{Nk;HvMBNNp2+z2A=qIA!QW6f3ScTq-|VW9iQw+5g<ojmj&MZVah;u@0gs6X=`R4m;fBX)9~Ehs`>I4 zIQ5wmLA@bI3fELRJ<57W;EddQlZnlin(RqA*Ew#bTM;o7!_u1HNs#j;BiPi)X&_-) z`@Sff`u){xo3raoh2|#TQpr7=+k){rm(Ox>aX1q`l55bOTt}EIy@Zk$+E*v$35zN< zvrE#@T>MVh0mQwxz)0WeXAO0%e9paR1?5g*T^1|yik^bmM}9CpTf#|J9kM3`Qh6X5 z6+a|3y9#pIsSZ|XPPcsMuaQ7JfgbwCoI^KE6D zZ|b^OvpCq&fE*s7PVmBbym##F7&!!Hv)zU8-Jc$BvoNVPazc&Yvs~qhNQo%AcVYc4 znE4zyPoZgmWgU>)N?Pve?cv;-<1weika2DHW}|)=jRKJoZI_+}f% z0WwXt2KFiqACmWkS#n=?lz)6s@CNxsmeEzu3NZCyvu0`JLy7lFb2-fiT}YMDl82&RuQW+I3c_C7LaLo;=U=zGQ16nWS+Kn z4Ym%q)<0I`HJ(?xy|&-Dd!k#Zkw)GI#*aYl=8okZo6TgofQqf>PM{)w(!t5xO^;f| zj9ee`XwL;x(@&?6#_TKr}!tq334u)8y2X*>KBLQM__8=ZAb#k%{lQ~X<(t` zqq1b^bHpwdpn}yo$w>(gR#r|;9@2owhhSAX^)t}}(M{|$-ZiJEVKr+AT9t)4F(hvc z&l{kM_o^w$VD?>i63{^tBpP%4+@2q;ur4`k52UpvI*<9iEx;JKOm-8dz&!O;E@)&| zRSc>fQQm45ilS ze>zk78<7Gk!*zq~TKYPMI@e9R4{x-<49&fPo14xOs-tx3jT%TsFmG1a*@E>6&q2oW znf3qMNOqgd|KYdoR!o($iviY&!>i5OQ}}QRO`ufU?B^H5$#$y7%9^UifpwGA3 zp{S_MWJ!@9wJpkC%akiy9Kkgbo^n|Hr0BNX=D)%AKV)A?zB_DJeWEm7D+Ra8U5&++ zIY{>~f*o4Qu#NA}^`C(S8|d)1Mz94)`CT(?ry$r{0$XnWU)i=gUI1G~Y7^`Eb=qdR zE2i9IwJx(JAZ$>Z(MkPp;lrYK)e!4tvXFQDQ^{f09wl`beSHfoT03qy9_0W8Q zuo@eq*Gg@|2^S6gundtNm!am7H;7c34F{|Bu7tpQ-Cyy11vxq-jA?YeUZVO*_Pngz zv>jMh`2)814C3M%MfvBpxn3*DNpQEk_dy#R58!@pMEK99=|_N@+~p95&{o9CBdaMQU$IJ5dhloYe#y7e{z&_RQbg<>9Z(H<87BVGPo;|`xTrAdN zOQ$=msgkxDgDqjLCEz}u4}OgJc{#Xp8~TTkzgCE#0%I$%|0?F)!AlQMYnCLCmdm2m(Q@qBH`4;(`A;rIX1;qfKF&U5lJX^s~k4d$#& zNyM_N^Q&0PxS50Q-r8RcQ?`#CD9Vl`8UuGrwe_q=#HU52{;w~w!=Z3F_mu~vv zNzPW3ia~#{3)vVJCKi7yawJJdg4 z0Cq*3wCioTw8RB%?645X2KQk$IjItWu(AWLUK||ou{$zoW~ljYKVLu=#J6X+xi7tl z6qy+UC!sw51vb26#|UpVt^M-z^RtkZZFeF(&(0oz>=kw}KweQXKz1$EW?C135bm;x z8Vf^20HRuqX3-j^F*e)I^Vk;GuaB(CS6I>GxgxYj-|dFtL$YhrWK7HUiNNeYT{T~Q zT>)7qYS(CLHDCxT(NdB+983HKTL0}|$8UoKD^58o=_$MQ2q#tYfg>1#Tc{M|%uZ7M zBcv+O4R^@P&7rWk#0+tsi^~kV^rS1+)e&I()O7*a)@?R94uf?;^qp61#|Vq>mGk4F zT>=2%9GG`x)f_mphHXMSGa;yCwF;bv1C_&?JI%#4QMu&YCEiU{$$sf0D7l)IC)B3i zz{1GX+?F^^XVwle7=A2NO8&29$Qap&R!mJjQ_ANiD#?w5i!7{ZlV%Pn%6JRQzA^m6KVim3DU zqq(UE@f@ky@$!Gl_V0fP_QT@ff4`H>NZ6SwTeNF=zDZlk6Al8I-mg2^6=I|ul{)dmMcNpab^{@Ab!wO5JJHC(FdOrQWb-j zG(J8Hd9I99R?`gj`uw93mE9`;f7@d8-{;%Ah;zM0RBnLgoA_8_zzeq$8*4x{0emEm z!KI|w`U#2thV{HW%d*#Lc5cvkA)0#Z3XkN!s>7orIK;SxB%bFcvR!l6EN! zbUBd~Ce9M-DOSgrksKo zKj-9RF+m^B?L=UC-zU<21DST;_8pnUov+fofB)p#l6&yv1J^Yt8g-qWu6ZAC@9OEI z-guuxct64-^YHnH$tE|M-oYBMz8}VbKKPKLXOfc(lF{H^I>E2e@p0dq*}+toN98Zx z3%hg(_N~lW4h`bUg1s#69qU=Ka28Y;19RoFhI{0lVB!7zSe!?NtBml^!UIY=9R&r~ z1Lg_0LFQ6fgrDciqWN(H-p%}{qzR6;Sn+3f4`-ix@JbZzxD_=?a-N9uz$==&nIG$c zp2Np~pnnCE%F#B~ylk^ZX7P}lU~aM-7n+|_aihAYCDlE5b>;D<9;>UvLiC}U9<)l( z{1PFe{=iE$;H<+7{QvRh?p3Y!fsp}RnQxk!PZUEA&(|bUbJ+N(UZ>SUcYj1lOuRD;6a0@aMycQoO6;3&W2m+8opA3>|x20 zy79@X>U8bN>-U0vq^s9^fe+2$l(rXQg)g8IJXY1*92{GNifj_c9&onLO6_q2CnYHDt( zTU__{ zSw+r2?fw=oxNjpIri;4lp=#bOQmE5)ZEfuy&7fy%thsf=Z5z}BaW;|pCV`Vr> zj&)VA zK8$+s7QCP&G1eHSRv#!=cCmPVIDR^anr-1ean>1Os`&?`2ZV?B$dh2k%Vzd%Fc+v-@$>N?%rXzZf8;6qRCE!{A|!n@^#by~u8dSZ z8A>w+KZ5O`aoZLmk9(C`a^h+<-61OwH01>o_TLlZe+W5(QJDYPUFZKgeDR+xl3fK2 zzvPLo0-SZu=A$0rg9|}v3jwcl1wqyDZ>b0%5V1C2r>U99Z(%P1%}{^;&o5i-BF^A2 z;C2qcBl2oYy#T4%oUfr*)YQ`yDH5$;y!s8-Q6SLhdI3Vfy!C?*zuSn9oabV=Yz=k7 z6YwK0uB4A;XSk?TDJd^|`ZKb|d~ETZkjcAWg5pV9%HM$;$_QDSCOH90egp(yAAntgld20QK zywE>tEjOVR*ulXN=Pg}b-P;nD?k(w29G&Pp{?VFk0t3Si6|=_3O-$18{@NOtF@^0Qg;Os)E>JcBJQ>d`i;&u|7EU z?{;p~Nllb$5D1M)LweXk!IPHyCl2-WqDJqifNjX1c)+hpzmAJg~< zAVxZy6VZ_sj)pCI6#cnpeOf>|JTg1dk@p2a3sT=sZFE5NG~rWl0_S+yQqs`i_o1Wy zVgkNkm#^$e>j%dJv+pRCF?mY-Qxr*Lhm6YSn>^(N`Ps~g7{x*ZRB^d_*xBqDh*iwB%N$U3I}r>&tqW>=lMORpsm{*qtd}j z!wcokk31~9s;e&>4wrMy>OyS$;ok9Nr7_tAT)2r(;`Ko!$GR7EhfEd*T&VnRYG$U% zl>=gdxm?KD3WI9!>;*4GPRs_ePq#+cP{-)ft$jRKVdfPe`Lv1s5;@{%BQScb7+<`9EL2K{H_}o8+%9HJrpd6ytW3Qqp7Z;9YZsnbsNG zaXcWB5 z^}^fprjNUOIw(z19lZb(#S#%*!?#cC$V@@S1N!3nj#d>f*7I_lpi1oF*sBaqALZFq zk({alY0SS9Eiv$z-&0XdT$8VMT?*3RIGB~(TV*a^eI>Q~b|CmgGV#Z@50iKm^Ky?Y zQ(Larh~RnJ$1s19zeFKJp_gw1N~+yPPFlU3<->0TZ9DL(gr6T|4*0^X5CHX`?7Kj-A zS*e!!xLD}-khhK<$D*lpSz6|GrckxXBlJVR30^V9;c4~ghmCD{Li>(O ztB)a#KiBs4d4FO4$*mi%YGlz<;Z0+tBNY*}vQ{Z=w?L`(w8l)eYK#B7hE~b}9}Ts> z1u6@EQAA-crt?OeMcqYZlQiEC!7ORz6NUk;cD+$6OiO6iNn?pfXP0cHW3b=?x!;D_ z%B=~qobUTXudm&XxhxvZ%2bEUu?Q+KZ^Izyz2OI~UQJ5PxNsq8P4Q;i+`@Fwx45@z zo(mGIsw*elM!)ANw0Cwgv@JaIM>-YNdp+2~McOnLXDcV@2KX-E`U$0z3Bb z@(q2dVp)!I%9kNw)%CYG%9a(8YzR-0BMuxv3g{#Cm#nF0BYl7eUfshN5Bt6oJ!{tn z{V?Gj+nL6Ppb!7_`5Rt4*iok`Cqun@p}?g*RgQF^(} z8w)JZ;iIpIV9WBomtcqeK+r$;54SuFA=gFvdVrg%h0`v9m&Z*4PX}I zT8MIT0{a6Oo?x*Ymx{Celm{P-hLspLBIvxYz(@5;K$7&n6ge_%Ln3Zp5t|=jyHuPL za6TryUhgfoiF!9I1!b-~$oM+av%Qddkzek`1{vY?Il%*dMpk<4%0Zlsz`i_T=?s{5 zx~FwtN%LFmlV_0(+g9zI=mGZGq?ByYc=w;5B-%Z=NHWkm>;yIluZbv>ie{Zuw!>{W zQ=TYi4dw})EGa^*uhMDoowRGCP2_}yti_Mly8{CB()j{0AQx501>2 zrO|}EgHfnX$F20`Q59i)fM9E-@Bpa{AtqA)0>z3O zIyM<@kM4VCg3IjnkgRqcjxfQ0smilh_9NF91fx`}=Xj@&K$zP~c{+R(9Dgkf4Vigc zQ!38kGBH_({7`jG>CA;dbDuK0JMCSUxl{EoOAdywZqDbGW{XnQyydit928=1$x1jT zw>e-m9#8W@az`ub;jbDzOg5$nLYbb|TP&aW^+#a*n$Cos$9~tG^Sx6cj`qvGlM**eHJ3{@UYRf14ryoZ^BTl8%$n%ej-Y4w+ldKlld69fW3RlVed4G-4dF^jxaE8`uh3fx1=%~PZ4oUa7nOZT~l^ulBtP#VO6CNIN}dr_e<3?q`w-1 zny|qSwnXk*7%;w-4*oD!sUdn6x2%mlM(@5^O8yj}J4 zC-YtAl$s%yMNW6Qli8`Kv~;0ESE%IUMKc2_;WtNE zqTM(kBs?(RoRcmU;!YWxZ3aXRem_AS(rdqK3%-y$eAZi+c*2e9=y{g-)l#ovS{v2jeqb5* z^_}|XBDLhsUhfUUAdY!!!T{rYZl%kVyv$}tr-qiKNCxj)ROQWHbja6`p#sR6e#g?F zen#GdLJnWUsKbjsHBpyhGHa){=LfvR)?n=1y%^~*-BJ@AEVykSki#D5b{skYbKMUu zk>z%y>o@I8M#g4w1HQeATBceHH+RSC^)7Nd4!3^uPP;u=v1B&dE%f{4bEI>SE9}^F zZ$oXlVp%FI0w|5N{W3OW2kk07VfsR@oyjS8b`=p9@L^4B@n60k9|3v;Uw~4}qPO(c zKe@QP`0*s8fBh3T7ZbkzN?>TZy7_iAWM!DDF*={P#;9&-+??^GzwcB9{oKXIC@3}> z2B-A*bQ=<)=7EL*l$-?a6UbzUjdD8z)r4*f{zW{Y&0Cv&>yd+(xv4NxctEqjVoGA* zSTJ6P3Ba_82jvYo#8TH0TKoc&+e`hA>OM~yQm=Q8+x=n3qjmzA{N#d6;hqv}pL$FF zyos`+_U_>@)BR8ytayL<*Y11Wbwv!hz7v-w&_i!hnE~*Hvm+3Qyr1=0#b(s`JXgw$ z#E{Fm<|9zYF3cR586eMbTl)iGB7E|fV+m7OI`_EVSZKg-1SFAyfsA_hQD4qlBl~G; zqhQ(C;o}jp(n6lkmr40?*y@P{kjwG-U*tJq)rrNtm6escH%wj( z{HzgmGxM3a=acV-LLr_rF!R0%s=^%9j!vhJ+x%Gk4cJoy>^#F-6BG;aLvsuHdbVI@`XtLbTJ++vmFm?!S z-(#|4(B4;#o8z+yZFq|7{}FrBHC^~Cu0bDAWoI#gN}WvcOBJGnoc>H$=TC(%kAGNp z^!^QYw*BQBv2rt&WXub!+_+O9F0GDpbC~{C<&KkFjk(ygOEQhe+uU;aHZy9MP>CQNhDPAadQR{jBy`g| zY+#XzRn1H>v!;{k0t^1GmM-JA1&WDEw@<)qQ?U-KTw_$ZdZ-Lp*_`zBkV%V=P#IW8 za&Sk4km~wqfZ+er-j#+mc`e~j(Q9pOp(+R>@`xLoSVWB)0@$KlZEL82lq!oL0#aqG zO)v?eBAW!s{5U*iE7+KQndeE$C@yEI;K$S7+pgDtZ#`85 z$E5Xu{?Pf53xb}l$Bu*t0NA2R2k7Z6i$*d>$GaFoZvVGZK7=Lm3uwKzkS* z(9}q(!q|j^j;N6w9RD_!o`iW0y0J*JGXfCoZCK55b|I3QC6+NlnsD*P9TbH;dI7(W zBmdcefo<+};F==V5R>E9)I}$d8YWwVE4;|Y@whVjw`D4e?EkvF=f8ACBvdHxBC=hc z6ju~adNpxasC8G!D3(2(Xm5NCY<1BNr9p?zB)=#Em7H_IWF0*sT!@72hk+Q9A%p19 z-{0D!d?w%?e`}7C1DwVwM(fQir@z#_W%5JH=!?psN{e6<#0Of1xRP7Iop?-I$p)rnVPCJ*B7*2!{)Rmt zNQRC;6^=;A4^UJtkUr~vv9u`eWV~ z!gs)T;q$@jtfjAfY{IWLBye<$23V2uf4Gf6$i()5i^X-UWFDfI^_ExNQGRs`U~)T$ zC5q`F>i!>Zt~@nFt*h%z*&C>VDB!H7q|n%YH^{4gOuZdAToBc}cKiFG)VHNV`arC1 zupw$mlX&VZu5_Ttu~DD}_?775B`kiLM`XY4K;}dnGyPoi?QD|ID#Q!I8&)OQp5Sd7 z(-U;FkVdCk8>Y+vQB^jZvQH`{p+9 z6Nl6=uEBO7HH*4h6-v4sY@tR@UGLXriBc z5njLFt-KW}DD-q^R{ov{up~ZFO~Z-C$02nQJVH<80EMSD?(u=>&v)2(tB4 z&c{z4zczV~ows7NIhhNn3fAZbBagx7o~53gj>XqhV6FiXoD4sEKXP}yjt#b7q%-W! zOmq-E7{l)-;0X&m=QL?Udw!`6<&|tUC|2!=`~Ddi1_W1SZ1<;EjQ(^P6YO$L{*vF^ z(y<(0Jz}3Ku(&|dK%yZj;z~f@@~fy4dAYn`S3qyh&FsMXs-W8_djvN3QS2DM=BWxw z*Le5dS_3*FuK1WD`LhJj-0`x&$3qjp(A!OK96f^a6}&2G9GY-SoJrrm>=xxD6Y7$V z_GwLhB#Z(47K@|cWtR>=a@I;z@vk%lY=)`iKi6A?+FQz)cSRtIad2VQuRVtO9X@3b zUOM(_478=mGdt<8{NkB_Hi_}ljm4XA>6|o9J9VQ*Y%5rTw0JqRjnK zTJ%Jv`%dF4A--QQyt$DskGtEod;#Z^Nbex_Pp;3d%B`|CS^)f`NgKwrZvLc!F05#z zHU2>@-f}VeCgX(~%=`Hm*5!{q`UuBgHx2!&;#fjo)Qnk{3_iW2kX3CmcyNfSl=WF}+~x^f)at5VS|C{trMK4q7!e zt?j+)DDS3Ykd<{tqL${ysf6P%+{6 zH;zLfPuUw~7CeuPAPaxkW4+UUW}p7#v1)(W9@-`vX6Z@h=^qTi%|0aaK`{{heQlv{ z&|8Cx6C)f|LF&mqa6Eyh>i=Bn|5i@RzrxK(0~AHz+y7-^P9h5z+S1ph;#NuK%^INW zIk?2bq!EZroP3yH8x~lh-$D%F$sOt_R@SfP4AWCe6$UIM9?wS06rvecw zIWNB;`lpEPAZdhWPU{~8SRvqHTS^co^hT*0JJ$5hF`^KRj)o`~Hg~|{BncEYf5xe> z@4s@U*a#QS8i38_&i8T#xM(uD$1H?{5H%qO+7!U|WQ zeN8vnFY|w87}$Ml2lk!gxB}@~O@7WOE*}RR&uxerLB~ul=nBwnqC)zw!6|z+_%kzHStD zryBFPf8PExdM$!E_5rK&-YXL5MP->-AG~U~X6JC%nFvk7348I!!@4|4W!w{sP~A6W za;qHk;3v`Lho#aMvy5_`G#$|kImbG?Ssyn)PaoQ0gU=j4WX9M?n^RsS(B?9~`zCE$ z$g^<4EpAROq7KcVHS{7MF_%Uz%ffOu;O0*Ut^TY?V0m3FsJFYtF7zyPY9wqnD>ZYW z2(Ee^Ip#TfC7L*SZ%IJwNlYSbZkv^dudi>RSP6TKJUy>3XKCoh;;ScbiI~Ra%aW6XQMsx(^=!v@R5WA`d9efraU%^Y zCzB<7NltDJBdhfoi%-C5NO}XWiI7W0q)Y6Jf zLxc$+kbD!Bb#ere&AxA7v(kdV&1{gFAV`Z+xd>tfRY8DE$V?E#N2yc5^?a!$@(|>z p(&NA+>30u%r^a^%0{m>;=w;I8{uiIlotfXWXV*UK;!oX9{|nSt{mcLW diff --git a/source/static/papertemplate_no10_4x6_certified.svg b/source/static/papertemplate_no10_4x6_certified.svg index 74c49fe..4560e0c 100644 --- a/source/static/papertemplate_no10_4x6_certified.svg +++ b/source/static/papertemplate_no10_4x6_certified.svg @@ -26,9 +26,9 @@ borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:zoom="0.98994949" - inkscape:cx="448.00266" - inkscape:cy="112.63201" + inkscape:zoom="0.49497475" + inkscape:cx="333.35034" + inkscape:cy="359.61431" inkscape:document-units="in" inkscape:current-layer="layer2" showgrid="false" @@ -36,8 +36,8 @@ inkscape:measure-start="24,480" inkscape:measure-end="24,336" inkscape:window-width="1920" - inkscape:window-height="1015" - inkscape:window-x="1920" + inkscape:window-height="1008" + inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" showguides="false" @@ -79,8 +79,8 @@ sodipodi:role="line">USPS CERTIFIED MAIL™shipment->retrieve($_REQUEST["shipmentid"]); $price = 0; $cost = 0; + $selectedRate = null; foreach ($shipment->rates as $rate) { if ($rate->id == $_REQUEST["rateid"]) { + $selectedRate = $rate; $cost = $rate->rate; $retail_rate = $rate->retail_rate ?? ($rate->list_rate ?? $rate->rate); $price = $retail_rate + 1.00; @@ -27,7 +29,7 @@ try { } // make the payment intent but don't capture it yet, in case something goes wrong. - $intent = \Stripe\PaymentIntent::create([ + $intent = $stripeClient->paymentIntents->create([ 'amount' => $price * 100, 'currency' => 'usd', 'payment_method' => $_REQUEST["stripeid"], @@ -63,14 +65,13 @@ try { if (empty($shipment->postage_label)) { // Do this conditionally in case label got purchased but payment somehow failed, // allowing a retry of the payment. - $shipment->buy(['rate' => ['id' => $_REQUEST["rateid"]]]); + $shipment = $easypostClient->shipment->buy($shipment->id, $selectedRate); } $pdffile = date("Ymd") . "_" . hash("sha256", $shipment->id) . ".pdf"; try { - $stripe = new \Stripe\StripeClient($_SETTINGS["stripe_sk"]); - $stripe->paymentIntents->update($intent->id, [ + $stripeClient->paymentIntents->update($intent->id, [ "metadata" => [ "tracking_number" => "$shipment->tracking_code", "from_email" => (empty($shipment->from_address->email) ? "None" : $shipment->from_address->email . ""), @@ -101,7 +102,7 @@ try { $paperimage = imagecreatefrompng(__DIR__ . "/papertemplate_no10.png"); } $labelimage = imagerotate($labelimage, 270, 0); - imagecopyresampled($paperimage, $labelimage, 525, 19, 0, 0, 1200, 1800, 1200, 1800); + imagecopyresampled($paperimage, $labelimage, 525, 19, 0, 0, 1800, 1200, 1800, 1200); } else { if (!empty($shipment->options->certified_mail)) { // envelope with banner @@ -191,7 +192,7 @@ try { $mail->setReplyTo($emailsettings["replyto"]); } $mail->addTo($shipment->from_address->email); - $mail->setSubject("Your CertifiedFromHome Receipt"); + $mail->setSubject(($_SETTINGS["test"] ? "[TEST MODE] " : "") . "Your CertifiedFromHome Receipt"); $body = "Thanks for using CertifiedFromHome.com!\r\nYour card has been charged a total of $" . number_format($price, 2) . ".\r\n"; if (!empty($shipment->options->certified_mail)) { $body .= "You can track your letter with this tracking code: " . $shipment->tracking_code . "\r\n"; @@ -203,7 +204,7 @@ try { . "scroll down and click on \"Return Receipt Electronic\", and fill in the form. USPS will " . "email you a PDF proof of delivery with the recipient's signature and other info.\r\n\r\n"; } - $body .= "Here's a link to your purchased postage, just in case: https://certifiedfromhome.com/pdf/" . $pdffile + $body .= "Here's a link to your purchased postage, just in case: https://" . ($_SETTINGS["test"] ? "test." : "") . "certifiedfromhome.com/pdf/" . $pdffile . "\r\nPlease note that while you can print it more than once, mailing multiple copies is illegal.\r\n"; $body .= "If you need any help, just reply to this email. Thanks again!"; $mail->setBody($body); @@ -216,7 +217,7 @@ try { header("Content-Type: application/json"); exit(json_encode([ "status" => "OK", - "pdf" => "https://certifiedfromhome.com/pdf/" . $pdffile, + "pdf" => "https://" . ($_SETTINGS["test"] ? "test." : "") . "certifiedfromhome.com/pdf/" . $pdffile, "trackingcode" => $shipment->tracking_code ])); } else { diff --git a/source/static/required.php b/source/static/required.php index e23cc34..1f935e7 100644 --- a/source/static/required.php +++ b/source/static/required.php @@ -3,6 +3,11 @@ require_once __DIR__ . "/vendor/autoload.php"; require_once __DIR__ . "/settings.php"; +\Sentry\init([ + 'dsn' => 'https://b1e259ce7e714dfeb49568c31ce99080@bugs.netsyms.net/10', + 'environment' => ($_SETTINGS["test"] ? "test" : "production"), +]); + if ($_SETTINGS["debug"]) { error_reporting(E_ALL); ini_set('display_errors', 'On'); @@ -18,7 +23,8 @@ foreach ($libs as $lib) { require_once $lib; } -\EasyPost\EasyPost::setApiKey($_SETTINGS["easypost_key"]); +$easypostClient = new \EasyPost\EasyPostClient($_SETTINGS["easypost_key"]); +$stripeClient = new \Stripe\StripeClient($_SETTINGS["stripe_sk"]); \Stripe\Stripe::setApiKey($_SETTINGS["stripe_sk"]); -header("Access-Control-Allow-Origin: *"); \ No newline at end of file +header("Access-Control-Allow-Origin: *");