hermes_pps - Version 15.04.29

Version Notes

Feature Release

Download this release

Release Info

Developer Sebastian Ertner
Extension hermes_pps
Version 15.04.29
Comparing to
See all releases


Version 15.04.29

Files changed (86) hide show
  1. app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Grid/Renderer/Icon.php +78 -0
  2. app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Exception.php +35 -0
  3. app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Hermes.php +190 -0
  4. app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit.php +78 -0
  5. app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit/Form.php +155 -0
  6. app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Notice.php +27 -0
  7. app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Products.php +35 -0
  8. app/code/community/Netresearch/Hermes/Helper/Data.php +53 -0
  9. app/code/community/Netresearch/Hermes/Helper/Order.php +272 -0
  10. app/code/community/Netresearch/Hermes/Helper/Validate/Order.php +173 -0
  11. app/code/community/Netresearch/Hermes/Model/Client.php +650 -0
  12. app/code/community/Netresearch/Hermes/Model/Client/Exception.php +70 -0
  13. app/code/community/Netresearch/Hermes/Model/Client/Response.php +33 -0
  14. app/code/community/Netresearch/Hermes/Model/Client/Soap.php +47 -0
  15. app/code/community/Netresearch/Hermes/Model/Config.php +495 -0
  16. app/code/community/Netresearch/Hermes/Model/Config/Exception.php +1 -0
  17. app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel.php +39 -0
  18. app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel/Collection.php +38 -0
  19. app/code/community/Netresearch/Hermes/Model/Observer.php +452 -0
  20. app/code/community/Netresearch/Hermes/Model/Parcel.php +527 -0
  21. app/code/community/Netresearch/Hermes/Model/Shipping/Carrier/Hermes.php +116 -0
  22. app/code/community/Netresearch/Hermes/Model/System/Config/Source/Payment/Methods.php +54 -0
  23. app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelFileFormatOptions.php +65 -0
  24. app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelPlacements.php +49 -0
  25. app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/Methods.php +71 -0
  26. app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest.php +88 -0
  27. app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest/fixtures/.gitkeep +0 -0
  28. app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest.php +386 -0
  29. app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/expectations/productClasses.yaml +5 -0
  30. app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/fixtures/.gitkeep +0 -0
  31. app/code/community/Netresearch/Hermes/Test/Controller/AbstractControllerTest.php +78 -0
  32. app/code/community/Netresearch/Hermes/Test/Controller/ConfigControllerTest.php +80 -0
  33. app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest.php +384 -0
  34. app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/.gitkeep +1 -0
  35. app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/parcels.yaml +58 -0
  36. app/code/community/Netresearch/Hermes/Test/Controller/PermissionsDeniedControllerTest.php +34 -0
  37. app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest.php +221 -0
  38. app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/.gitkeep +0 -0
  39. app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/dummy +0 -0
  40. app/code/community/Netresearch/Hermes/Test/Helper/DataTest.php +9 -0
  41. app/code/community/Netresearch/Hermes/Test/Helper/OrderTest.php +326 -0
  42. app/code/community/Netresearch/Hermes/Test/Helper/OrderTest/fixtures/.gitkeep +0 -0
  43. app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest.php +119 -0
  44. app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest/fixtures/.gitkeep +0 -0
  45. app/code/community/Netresearch/Hermes/Test/Model/ClientTest.php +464 -0
  46. app/code/community/Netresearch/Hermes/Test/Model/ClientTest/expectations/productInformation.yaml +1 -0
  47. app/code/community/Netresearch/Hermes/Test/Model/ConfigTest.php +480 -0
  48. app/code/community/Netresearch/Hermes/Test/Model/ConfigTest/expectations/config.yaml +5 -0
  49. app/code/community/Netresearch/Hermes/Test/Model/ObserverTest.php +550 -0
  50. app/code/community/Netresearch/Hermes/Test/Model/ObserverTest/fixtures/.gitkeep +1 -0
  51. app/code/community/Netresearch/Hermes/Test/Model/OrderTest.php +526 -0
  52. app/code/community/Netresearch/Hermes/Test/Model/OrderTest/expectations/orderList.yaml +2 -0
  53. app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/orderList.yaml +13 -0
  54. app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/parcels.yaml +43 -0
  55. app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/shipments.yaml +37 -0
  56. app/code/community/Netresearch/Hermes/Test/Model/ParcelTest.php +593 -0
  57. app/code/community/Netresearch/Hermes/Test/Model/ParcelTest/fixtures/shipments.yaml +37 -0
  58. app/code/community/Netresearch/Hermes/Test/Model/Shipping/Carrier/HermesTest.php +135 -0
  59. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Payment/Methods.php +62 -0
  60. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest.php +65 -0
  61. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest/expectations/testToOptionArray.yaml +6 -0
  62. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/Methods.php +57 -0
  63. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest.php +77 -0
  64. app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest/expectations/testToOptionArray.yaml +3 -0
  65. app/code/community/Netresearch/Hermes/Test/var/fixtures/orderList1.yaml +306 -0
  66. app/code/community/Netresearch/Hermes/Test/var/fixtures/parcels.yaml +68 -0
  67. app/code/community/Netresearch/Hermes/Test/var/fixtures/shipments.yaml +34 -0
  68. app/code/community/Netresearch/Hermes/controllers/ConfigController.php +38 -0
  69. app/code/community/Netresearch/Hermes/controllers/ParcelController.php +241 -0
  70. app/code/community/Netresearch/Hermes/controllers/ShipmentController.php +94 -0
  71. app/code/community/Netresearch/Hermes/etc/adminhtml.xml +57 -0
  72. app/code/community/Netresearch/Hermes/etc/config.xml +253 -0
  73. app/code/community/Netresearch/Hermes/etc/system.xml +234 -0
  74. app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php +72 -0
  75. app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl +1379 -0
  76. app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl +1379 -0
  77. app/design/adminhtml/default/default/layout/hermes.xml +47 -0
  78. app/design/adminhtml/default/default/template/hermes/sales/order/shipment/create/hermes.phtml +81 -0
  79. app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/comments.phtml +77 -0
  80. app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/hermes.phtml +155 -0
  81. app/design/adminhtml/default/default/template/hermes/system/config/notice.phtml +45 -0
  82. app/design/adminhtml/default/default/template/hermes/system/config/products.phtml +108 -0
  83. app/design/frontend/default/default/template/email/order/shipment/track.phtml +50 -0
  84. app/etc/modules/Netresearch_Hermes.xml +9 -0
  85. app/locale/de_DE/Netresearch_Hermes.csv +145 -0
  86. doc/Netresearch_Hermes/Benutzerdokumentation.pdf +927 -0
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Grid/Renderer/Icon.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Thomas Birke <thomas.birke@netresearch.de>
29
+ */
30
+ class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
31
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
32
+ {
33
+ public function getHermesStatusOutput($row)
34
+ {
35
+ $status = array(
36
+ 'queued' => 0,
37
+ 'failed' => 0,
38
+ 'canceled' => 0,
39
+ 'sent' => 0
40
+ );
41
+ /** @var Mage_Sales_Model_Order_Shipment $shipment */
42
+ foreach ($row->getShipmentsCollection() as $shipment) {
43
+ /* @var $parcel Netresearch_Hermes_Model_Shipment */
44
+ $parcel = Mage::getModel('hermes/parcel')->load($shipment->getId(), 'shipment_id');
45
+ if ($parcel && $parcel->getId()) {
46
+ if ($parcel->isFailed() || $parcel->isCancelFailed()) {
47
+ $status['failed']++;
48
+ } elseif ($parcel->isProcessed() || $parcel->isClosed()) {
49
+ $status['sent']++;
50
+ } elseif ($parcel->isCanceled() || $parcel->isQueuedToCancel()) {
51
+ $status['canceled']++;
52
+ } else {
53
+ $status['queued']++;
54
+ }
55
+ }
56
+ }
57
+ if (0 < $status['failed']) {
58
+ $longMessage = Mage::helper('hermes')->__('%d parcels could not be transmitted to Hermes', $status['failed']);
59
+ $image = 'logo_small_failed.png';
60
+ } elseif (0 < $status['sent']) {
61
+ $longMessage = Mage::helper('hermes')->__('%d parcels were transmitted to Hermes', $status['sent']);
62
+ $image = 'logo_small.png';
63
+ } elseif (0 < $status['queued']) {
64
+ $longMessage = Mage::helper('hermes')->__('%d parcels are queued for transmission to Hermes', $status['queued']);
65
+ $image = 'logo_small_grey.png';
66
+ } else {
67
+ return '';
68
+ }
69
+ return ' <div class="hermes_status"><img src="' . $this->getSkinUrl('images/hermes/'.$image) . '" alt="Hermes" title="' . $longMessage . '" />'
70
+ . '</div>';
71
+ }
72
+
73
+ public function render(Varien_Object $row)
74
+ {
75
+ return parent::render($row) . $this->getHermesStatusOutput($row);
76
+ }
77
+ }
78
+
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Exception.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes Block Order Shipment Exception
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception
32
+ extends Mage_Core_Exception
33
+ {
34
+ //put your code here
35
+ }
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Order/Shipment/Create/Hermes.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Sales Order Shipment Create Hermes Block
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes extends Mage_Adminhtml_Block_Template
32
+ {
33
+
34
+ /**
35
+ *
36
+ * @var Mage_Sales_Model_Shipment
37
+ */
38
+ protected $shipment = null;
39
+
40
+ /**
41
+ *
42
+ * @var Netresearch_Hermes_Helper_Validate_Order
43
+ */
44
+ protected $hermes_validate_order = null;
45
+
46
+ /**
47
+ * Get Magento shipment
48
+ *
49
+ * @return Mage_Sales_Model_Order_Shipment
50
+ */
51
+ public function getMageShipment()
52
+ {
53
+ return Mage::registry('current_shipment');
54
+ }
55
+
56
+ /**
57
+ * Check if shipping method is allowed
58
+ *
59
+ * @return boolean
60
+ */
61
+ public function isAllowedShippingMethod()
62
+ {
63
+ return Mage::getModel('hermes/config')
64
+ ->isAllowedShippingMethod($this->getMageShipment()->getOrder()->getShippingMethod());
65
+ }
66
+
67
+ /**
68
+ * Get validate order helper
69
+ *
70
+ * @return Netresearch_Hermes_Helper_Validate_Order
71
+ */
72
+ public function getValidateOrderHelper()
73
+ {
74
+ if (null == $this->hermes_validate_order) {
75
+ $this->hermes_validate_order = Mage::helper("hermes/validate_order");
76
+ }
77
+ return $this->hermes_validate_order;
78
+ }
79
+
80
+ /**
81
+ * Check if it is a valid hermes shipment
82
+ *
83
+ * @return boolean
84
+ */
85
+ public function isValidHermesShipment()
86
+ {
87
+ return $this->getValidateOrderHelper()
88
+ ->setOrder($this->getMageShipment()->getOrder())
89
+ ->isValidHermesShipment();
90
+ }
91
+
92
+ /**
93
+ * Get validation errors
94
+ *
95
+ * @return array
96
+ */
97
+ public function getValidationErrors()
98
+ {
99
+ return $this->getValidateOrderHelper()->getValidationErrors();
100
+ }
101
+
102
+ /**
103
+ * checks if the merchand is a tiered price merchand
104
+ *
105
+ * @return boolean
106
+ */
107
+ public function isTieredPriceMerchand()
108
+ {
109
+ return Mage::getModel('hermes/config')
110
+ ->isTieredPriceMerchant();
111
+ }
112
+
113
+ /**
114
+ * retrieves all possible Hermes product classes
115
+ * for the destination country
116
+ *
117
+ * @return array the product classes or empty array
118
+ * if shipment is not supported by hermes
119
+ * @throws Exception in case the destination country code
120
+ * is not found in Hermes product list or
121
+ * the product_classes node is missing for the country
122
+ */
123
+ public function getParcelClassesForCountry()
124
+ {
125
+ $parcelClasses = array();
126
+ if ($this->isValidHermesShipment()) {
127
+ $productsList = Mage::getModel('hermes/config')
128
+ ->getListOfProductsProducts();
129
+ $destinationCountryCode = Mage::helper('hermes')
130
+ ->getIso3CodeByIso2Code(
131
+ $this->getMageShipment()
132
+ ->getOrder()
133
+ ->getShippingAddress()
134
+ ->getCountryId());
135
+ if (!array_key_exists($destinationCountryCode, $productsList))
136
+ throw new Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception(
137
+ sprintf('destination country %s is not found in Hermes Product List', $destinationCountryCode));
138
+ if (!array_key_exists('product_classes', $productsList[$destinationCountryCode]))
139
+ throw new Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception(
140
+ sprintf('product_classes not found for %s in Hermes Product List', $destinationCountryCode));
141
+
142
+ $parcelClasses[''] = 'Standard';
143
+
144
+ if (array_key_exists('all', $productsList[$destinationCountryCode]['product_classes'])) {
145
+ unset($productsList[$destinationCountryCode]['product_classes']['all']);
146
+ $defaultProductClasses = array_values(Mage::getModel('hermes/config')->getAllProductClasses());
147
+ foreach ($defaultProductClasses as $defaultProductClass) {
148
+ $productsList[$destinationCountryCode]['product_classes'][$defaultProductClass] = $defaultProductClass;
149
+ }
150
+ }
151
+ foreach (array_keys($productsList[$destinationCountryCode]['product_classes']) as $value) {
152
+ $parcelClasses[$value] = $value;
153
+ }
154
+ }
155
+ return $parcelClasses;
156
+ }
157
+
158
+ /**
159
+ * Get the Hermes parcel associated with the current shipment.
160
+ *
161
+ * @return Netresearch_Hermes_Model_Parcel
162
+ */
163
+ public function getParcel()
164
+ {
165
+ return Mage::getModel('hermes/parcel')->load(
166
+ $this->getMageShipment()->getEntityId(), 'shipment_id'
167
+ );
168
+ }
169
+
170
+ /**
171
+ *
172
+ * @return boolean
173
+ */
174
+ public function isPdfEnabled()
175
+ {
176
+ return Mage::getModel('hermes/config')
177
+ ->isPdfEnabled();
178
+ }
179
+
180
+ /**
181
+ *
182
+ * @return boolean
183
+ */
184
+ public function isJpegEnabled()
185
+ {
186
+ return Mage::getModel('hermes/config')
187
+ ->isJpegEnabled();
188
+ }
189
+
190
+ }
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Christoph Aßmann <christoph.assmann@netresearch.de>
29
+ */
30
+ class Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit
31
+ extends Mage_Adminhtml_Block_Widget_Form_Container
32
+ {
33
+ public function __construct()
34
+ {
35
+ $this->_headerText = $this->helper('hermes')->__('Edit Receiver Data');
36
+ parent::__construct();
37
+
38
+ $this->_removeButton('delete');
39
+
40
+ $parcel = Mage::getModel('hermes/parcel')->load(
41
+ $this->getRequest()->getParam('id')
42
+ );
43
+ /* @var $parcel Netresearch_Hermes_Model_Parcel */
44
+ if ($parcel->canBeResumed()) {
45
+ $this->_addButton('saveandresume', array(
46
+ 'label' => Mage::helper('hermes')->__('Save parcel and resume'),
47
+ 'onclick' => '$(\'parcel_save_and_resume\').setValue(1); editForm.submit();',
48
+ 'class' => 'save',
49
+ ), 2);
50
+
51
+ }
52
+ }
53
+
54
+ protected function _prepareLayout()
55
+ {
56
+ $block = $this->getLayout()->createBlock(
57
+ 'hermes/adminhtml_sales_parcel_edit_form'
58
+ );
59
+
60
+ /* @var $block Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit_Form */
61
+ $this->setChild('form', $block);
62
+
63
+ /* avoid rendering of non-existing child block */
64
+ $this->_blockGroup = null;
65
+
66
+ return parent::_prepareLayout();
67
+ }
68
+
69
+ public function getBackUrl()
70
+ {
71
+ $parcel = Mage::getModel('hermes/parcel')->load(
72
+ $this->getRequest()->getParam('id')
73
+ );
74
+ return $this->getUrl('adminhtml/sales_shipment/view', array(
75
+ 'shipment_id' => $parcel->getShipmentId()
76
+ ));
77
+ }
78
+ }
app/code/community/Netresearch/Hermes/Block/Adminhtml/Sales/Parcel/Edit/Form.php ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Block_Adminhtml_Sales_Parcel_Edit_Form
4
+ extends Mage_Adminhtml_Block_Widget_Form
5
+ {
6
+ protected $parcel;
7
+
8
+ public function __construct()
9
+ {
10
+ parent::__construct();
11
+ $this->setId('parcel_form');
12
+ $this->setTitle(Mage::helper('hermes')->__('Parcel Information'));
13
+
14
+ $this->parcel = Mage::getModel('hermes/parcel')->load(
15
+ $this->getRequest()->getParam('id')
16
+ );
17
+ }
18
+
19
+ protected function _prepareForm()
20
+ {
21
+ $parcelClasses = Mage::getModel('hermes/config')->getAllProductClassesasKeyValue();
22
+ array_unshift($parcelClasses, array('value' => '', 'label' => Mage::helper('hermes')->__('use default')));
23
+
24
+ $form = new Varien_Data_Form(array(
25
+ 'id' => 'edit_form',
26
+ 'action' => $this->getUrl('*/parcel/save'),
27
+ 'method' => 'post'
28
+ ));
29
+
30
+ $form->setHtmlIdPrefix('parcel_');
31
+
32
+ $fieldset = $form->addFieldset('receiver_data', array(
33
+ 'legend' => Mage::helper('hermes')->__('Receiver Data')
34
+ ));
35
+
36
+ $fieldset->addField('id', 'hidden', array(
37
+ 'name' => 'parcel_id'
38
+ ));
39
+
40
+ $fieldset->addField('save_and_resume', 'hidden', array(
41
+ 'name' => 'save_and_resume'
42
+ ));
43
+
44
+ $fieldset->addField('receiver_firstname', 'text', array(
45
+ 'name' => 'receiver[firstname]',
46
+ 'label' => Mage::helper('hermes')->__('First Name'),
47
+ 'title' => Mage::helper('hermes')->__('First Name'),
48
+ 'note' => Mage::helper('hermes')->__('Leave empty if receiver is a company'),
49
+ 'required' => false
50
+ ));
51
+
52
+ $fieldset->addField('receiver_lastname', 'text', array(
53
+ 'name' => 'receiver[lastname]',
54
+ 'label' => Mage::helper('hermes')->__('Last Name/Company'),
55
+ 'title' => Mage::helper('hermes')->__('Last Name/Company'),
56
+ 'note' => Mage::helper('hermes')->__(
57
+ 'If you enter a company name, you could submit the c/o in field <em>%s</em>',
58
+ Mage::helper('hermes')->__('Additional Address Data')
59
+ ),
60
+ 'required' => true
61
+ ));
62
+
63
+ $fieldset->addField('receiver_address_add', 'text', array(
64
+ 'name' => 'receiver[address_add]',
65
+ 'label' => Mage::helper('hermes')->__('Additional Address Data'),
66
+ 'title' => Mage::helper('hermes')->__('Additional Address Data'),
67
+ 'required' => false
68
+ ));
69
+
70
+ $fieldset->addField('receiver_street', 'text', array(
71
+ 'name' => 'receiver[street]',
72
+ 'label' => Mage::helper('hermes')->__('Street Address'),
73
+ 'title' => Mage::helper('hermes')->__('Street Address'),
74
+ 'note' => Mage::helper('hermes')->__('May contain house number'),
75
+ 'required' => true,
76
+ ));
77
+
78
+ $fieldset->addField('receiver_house_number', 'text', array(
79
+ 'name' => 'receiver[house_number]',
80
+ 'label' => Mage::helper('hermes')->__('House Number'),
81
+ 'title' => Mage::helper('hermes')->__('House Number'),
82
+ 'required' => false
83
+ ));
84
+
85
+ $fieldset->addField('receiver_postcode', 'text', array(
86
+ 'name' => 'receiver[postcode]',
87
+ 'label' => Mage::helper('hermes')->__('Zip/Postal Code'),
88
+ 'title' => Mage::helper('hermes')->__('Zip/Postal Code'),
89
+ 'required' => true
90
+ ));
91
+
92
+ $fieldset->addField('receiver_city', 'text', array(
93
+ 'name' => 'receiver[city]',
94
+ 'label' => Mage::helper('hermes')->__('City'),
95
+ 'title' => Mage::helper('hermes')->__('City'),
96
+ 'required' => true
97
+ ));
98
+
99
+ // only display field if country is IRL!
100
+ if ($this->parcel->getReceiverCountryCode() === 'IRL') {
101
+ $fieldset->addField('receiver_district', 'text', array(
102
+ 'name' => 'receiver[district]',
103
+ 'label' => Mage::helper('hermes')->__('District'),
104
+ 'title' => Mage::helper('hermes')->__('District'),
105
+ 'required' => true
106
+ ));
107
+ }
108
+
109
+ // display readonly!
110
+ $fieldset->addField('receiver_country_code', 'text', array(
111
+ 'name' => 'receiver[country_code]',
112
+ 'label' => Mage::helper('hermes')->__('Country Code'),
113
+ 'title' => Mage::helper('hermes')->__('Country Code'),
114
+ 'required' => true
115
+ ))->setReadonly(true);
116
+
117
+ $fieldset->addField('receiver_email', 'text', array(
118
+ 'name' => 'receiver[email]',
119
+ 'label' => Mage::helper('hermes')->__('Email'),
120
+ 'title' => Mage::helper('hermes')->__('Email'),
121
+ 'note' => Mage::helper('hermes')->__('Let Hermes send an email containing the tracking link'),
122
+ 'required' => false
123
+ ));
124
+
125
+ $fieldset->addField('receiver_telephone_number', 'text', array(
126
+ 'name' => 'receiver[telephone_number]',
127
+ 'label' => Mage::helper('hermes')->__('Telephone'),
128
+ 'title' => Mage::helper('hermes')->__('Telephone'),
129
+ 'required' => false
130
+ ));
131
+
132
+ $fieldset->addField('receiver_telephone_prefix', 'text', array(
133
+ 'name' => 'receiver[telephone_prefix]',
134
+ 'label' => Mage::helper('hermes')->__('Telephone Prefix'),
135
+ 'title' => Mage::helper('hermes')->__('Telephone Prefix'),
136
+ 'required' => false
137
+ ));
138
+
139
+ if (Mage::getModel('hermes/config')->isTieredPriceMerchant()) {
140
+ $fieldset->addField('parcel_class', 'select', array(
141
+ 'name' => 'parcel_class',
142
+ 'label' => Mage::helper('hermes')->__('Parcel class'),
143
+ 'title' => Mage::helper('hermes')->__('Parcel class'),
144
+ 'values' => $parcelClasses
145
+ ));
146
+ }
147
+
148
+ $form->setValues($this->parcel->getData());
149
+ $form->getElement('save_and_resume')->setValue('0');
150
+ $this->setForm($form);
151
+ $form->setUseContainer(true);
152
+
153
+ return parent::_prepareForm();
154
+ }
155
+ }
app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Notice.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Block_Adminhtml_System_Config_Notice extends Mage_Adminhtml_Block_Abstract
4
+ implements Varien_Data_Form_Element_Renderer_Interface
5
+ {
6
+ protected $_template = 'hermes/system/config/notice.phtml';
7
+
8
+ /**
9
+ * Render fieldset html
10
+ *
11
+ * @param Varien_Data_Form_Element_Abstract $fieldset
12
+ * @return string
13
+ */
14
+ public function render(Varien_Data_Form_Element_Abstract $fieldset)
15
+ {
16
+ $originalData = $fieldset->getOriginalData();
17
+ $this->addData(array(
18
+ 'fieldset_label' => $fieldset->getLegend(),
19
+ ));
20
+ return $this->toHtml();
21
+ }
22
+
23
+ public function getVersion()
24
+ {
25
+ return (string) Mage::getConfig()->getNode('modules')->children()->Netresearch_Hermes->version;
26
+ }
27
+ }
app/code/community/Netresearch/Hermes/Block/Adminhtml/System/Config/Products.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Block_Adminhtml_System_Config_Products extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
4
+ implements Varien_Data_Form_Element_Renderer_Interface
5
+ {
6
+ protected $_template = 'hermes/system/config/products.phtml';
7
+
8
+ public function render(Varien_Data_Form_Element_Abstract $fieldset)
9
+ {
10
+ $config = Mage::getModel('hermes/config');
11
+ /* @var $config Netresearch_Hermes_Model_Config */
12
+
13
+ $products = $config->getListOfProductsProducts();
14
+ ksort($products);
15
+
16
+ $this->addData(array(
17
+ 'fieldset_label' => $fieldset->getLegend(),
18
+ 'list_of_products_dated' => $config->getListOfProductsData('dated'),
19
+ 'list_of_products_products' => $products
20
+ ));
21
+
22
+ $html = $this->_getHeaderHtml($fieldset);
23
+ $html.= $this->toHtml();
24
+ $html .= $this->_getFooterHtml($fieldset);
25
+
26
+ return $html;
27
+ }
28
+
29
+ public function getCountryName($code)
30
+ {
31
+ $country = Mage::getModel('directory/country');
32
+ Mage::getResourceModel('directory/country')->loadByCode($country, $code);
33
+ return $country->getName();
34
+ }
35
+ }
app/code/community/Netresearch/Hermes/Helper/Data.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Data Helper for Hermes module
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Helper_Data extends Mage_Core_Helper_Data
32
+ {
33
+ /**
34
+ * log to a separate log file
35
+ *
36
+ * @param string $message
37
+ * @param int $level
38
+ * @param bool $force
39
+ * @return Netresearch_Hermes_Helper_Data
40
+ */
41
+ public function log($message, $level=null, $force=false)
42
+ {
43
+ if ($force || Mage::getModel('hermes/config')->isLoggingEnabled()) {
44
+ Mage::log($message, $level, 'hermes.log', $force);
45
+ }
46
+ return $this;
47
+ }
48
+
49
+ public function getIso3CodeByIso2Code($iso2Code)
50
+ {
51
+ return Mage::getModel('directory/country')->load($iso2Code)->getIso3Code();
52
+ }
53
+ }
app/code/community/Netresearch/Hermes/Helper/Order.php ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Order Helper for Hermes module
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Helper_Order extends Mage_Core_Helper_Data
32
+ {
33
+
34
+ protected $parcelValidator = null;
35
+
36
+
37
+ /**
38
+ * create shipments and parcels for orders in the given collection
39
+ *
40
+ * @param Mage_Sales_Model_Mysql4_Order_Collection $orders
41
+ * @param string $parcelClass
42
+ * @param boolean $notifyCustomer
43
+ *
44
+ * @return array List of error/success messages
45
+ */
46
+ public function shipOrders($orders, $parcelClass=null, $notifyCustomer = false)
47
+ {
48
+ $result = array(
49
+ 'success' => array(),
50
+ 'errors' => array()
51
+ );
52
+ foreach ($orders as $order) {
53
+ if ($this->orderCanBeShipped($order)) {
54
+ $messages = $this->shipOrder($order, $parcelClass, $notifyCustomer);
55
+ // array_merge didn't worked here, do it manually
56
+ if (array_key_exists('success', $messages)) {
57
+ $result['success'][$order->getIncrementId()] = $messages['success'];
58
+ }
59
+ if (array_key_exists('errors', $messages)) {
60
+ $result['errors'][$order->getIncrementId()] = $messages['errors'];
61
+ }
62
+ } else {
63
+ $result['errors'][$order->getIncrementId()] = Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.');
64
+ }
65
+ }
66
+ return $result;
67
+ }
68
+
69
+
70
+ /**
71
+ * create shipment and parcel for a given order
72
+ *
73
+ * @param Mage_Sales_Model_Order $order
74
+ * @param string $parcelClass
75
+ * @param boolean $notifyCustomer
76
+ *
77
+ * @return array List of error/success messages
78
+ */
79
+ protected function shipOrder(Mage_Sales_Model_Order $order, $parcelClass, $notifyCustomer)
80
+ {
81
+ $messages = array();
82
+ $parcelValidator = $this->getOrderValidator();
83
+ $parcelValidator->setOrder($order);
84
+ $success = false;
85
+ $message = null;
86
+ if ($parcelValidator->isValidHermesShipment()) {
87
+ try {
88
+ $shipment = $this->createShipment($order);
89
+ /** @var $shipment Mage_Sales_Model_Order_Shipment */
90
+ $parcel = $this->createParcel($shipment, $parcelClass);
91
+
92
+ if ($parcel && $parcel->getId()) {
93
+ $success = true;
94
+ $shipment->sendEmail($notifyCustomer);
95
+
96
+ } else {
97
+ $message = Mage::helper('hermes')->__('Could not generate Hermes parcel.') . var_export($parcel->getId(), true);
98
+ }
99
+ } catch (Exception $e) {
100
+ $message = $e->getMessage();
101
+ }
102
+ } else {
103
+ $message = Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.');
104
+ }
105
+ $messages[$success ? 'success' : 'errors'] = $message;
106
+ return $messages;
107
+ }
108
+
109
+
110
+ /**
111
+ * gets the order validation helper
112
+ *
113
+ * @return Netresearch_Hermes_Helper_Validate_Order
114
+ */
115
+ protected function getOrderValidator()
116
+ {
117
+ if (is_null($this->parcelValidator)) {
118
+ $this->parcelValidator = Mage::helper("hermes/validate_order");
119
+ }
120
+ return $this->parcelValidator;
121
+ }
122
+
123
+
124
+ /**
125
+ * create parcel for a shipment
126
+ *
127
+ * @param Mage_Sales_Model_Order_Shipment $shipment
128
+ * @param string $parcelClass
129
+ *
130
+ * @return Netresearch_Hermes_Model_Parcel
131
+ */
132
+ public function createParcel($shipment, $parcelClass=null)
133
+ {
134
+ /** @var $parcel Netresearch_Hermes_Model_Parcel */
135
+ $parcel = Mage::getModel('hermes/parcel')
136
+ ->setShipment($shipment)
137
+ ->setParcelClass($parcelClass)
138
+ ->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
139
+ $parcelValidator = Mage::helper("hermes/validate_order");
140
+ /* @var $parcelValidator Netresearch_Hermes_Helper_Validate_Order */
141
+ if ($parcelValidator->setOrder($shipment->getOrder())->isShippedAsCod()) {
142
+ $parcel->setIncludeCashOnDelivery('1');
143
+ $grandTotalEurocent = 100 * $shipment->getOrder()->getGrandTotal();
144
+ $parcel->setAmountCashOnDeliveryEurocent((int) $grandTotalEurocent);
145
+ }
146
+ return $parcel->save();
147
+ }
148
+
149
+ /**
150
+ * Create shipment.
151
+ *
152
+ * @param Mage_Sales_Model_Order $order
153
+ * @return Mage_Sales_Model_Order_Shipment $shipment
154
+ */
155
+ public function createShipment(Mage_Sales_Model_Order $order)
156
+ {
157
+ /* @var $shipment Mage_Sales_Model_Order_Shipment */
158
+ $shipment = Mage::getModel('sales/service_order', $order)
159
+ ->prepareShipment($this->getQtys($order));
160
+ $shipment->register();
161
+ $shipment->save();
162
+ $order->save();
163
+ return $shipment;
164
+ }
165
+
166
+
167
+ /**
168
+ * Get order quantities.
169
+ *
170
+ * @param Mage_Sales_Model_Order $order
171
+ * @return array $qtys
172
+ */
173
+ public function getQtys(Mage_Sales_Model_Order $order)
174
+ {
175
+ $qtys = array();
176
+ foreach ($order->getAllItems() as $item) {
177
+ $qtys[$item->getId()] = $item->getQtyToShip();
178
+ }
179
+ return $qtys;
180
+ }
181
+
182
+ /**
183
+ * Checks if an order can be shipped
184
+ *
185
+ * @param Mage_Sales_Model_Order $order
186
+ * @return boolean - true if the order can be shipped, false otherwise
187
+ */
188
+ protected function orderCanBeShipped($order)
189
+ {
190
+ $currentPaymentMethod =$order->getPayment()->getMethod();
191
+ $paymentMethodsForAutoMode = Mage::getModel('hermes/config')->getAutocreatePaymentMethods();
192
+ if (!in_array($currentPaymentMethod, $paymentMethodsForAutoMode)) {
193
+ return false;
194
+ }
195
+ if (0 < $order->getShipmentsCollection()->count()) {
196
+ return false;
197
+ }
198
+ foreach ($order->getItemsCollection() as $item) {
199
+ if ($item->getIsVirtual()) {
200
+ return false;
201
+ }
202
+ }
203
+
204
+ return true;
205
+ }
206
+
207
+
208
+
209
+ /**
210
+ * retrieves orders
211
+ *
212
+ * @return Mage_Sales_Model_Mysql4_Order_Collection
213
+ */
214
+ public function getOrderCollection()
215
+ {
216
+ $config = Mage::getModel('hermes/config');
217
+ $automaticOrderStatus = $config->getAutocreateOrderStatuses();
218
+ $installationDate = $config->getInstallationDate();
219
+ $maxDaysInPast = $config->getMaxDaysInPast();
220
+ $maxOrderDaysInPastExpression = new Zend_Db_Expr(
221
+ 'DATE_SUB(CURRENT_DATE, INTERVAL ' . $maxDaysInPast . ' DAY)'
222
+ );
223
+ $collection = Mage::getModel('sales/order')
224
+ ->getCollection()
225
+ ->addAttributeToFilter('status', array('in' => $automaticOrderStatus))
226
+ ->addAttributeToFilter('created_at', array('gteq' => $maxOrderDaysInPastExpression))
227
+ ->addAttributeToFilter('created_at', array('gteq' => $installationDate))
228
+ ->setOrder('entity_id', 'ASC');
229
+ return $collection;
230
+ }
231
+
232
+
233
+ /**
234
+ * checks if the order is shipped partially
235
+ * @return boolean
236
+ */
237
+ public function isPartialShipment($shipment)
238
+ {
239
+ $order = $shipment->getOrder();
240
+ //Check if it is a cod order
241
+ $orderHelper = Mage::helper('hermes/validate_order');
242
+ $orderHelper->setOrder($order);
243
+ if (false === $orderHelper->isShippedAsCod()) {
244
+ return false;
245
+ }
246
+ //Build shipment item array
247
+ $shipment_items = array();
248
+ foreach ($shipment->getItemsCollection()->getItems() as $shipment_item) {
249
+
250
+ //Ignore doublette simple/configurable shipment items
251
+ if ((float) $shipment_item->getPrice()==0) {
252
+ continue;
253
+ }
254
+ $shipment_items[$shipment_item->getSku()] = $shipment_item->getQty();
255
+ }
256
+
257
+ //Loop through every order item and look if it is existing in the shipment too
258
+ foreach ($order->getAllItems() as $order_item) {
259
+ //Ignore doublette simple/configurable order items
260
+ if ((float) $order_item->getPrice()==0 || '' !=$order_item->getParentItemId() || $order_item->getIsVirtual()) {
261
+ continue;
262
+ }
263
+ if (false === isset($shipment_items[$order_item->getSku()])) {
264
+ return true;
265
+ }
266
+ if ($shipment_items[$order_item->getSku()] != (int) $order_item->getQtyOrdered()) {
267
+ return true;
268
+ }
269
+ }
270
+ return false;
271
+ }
272
+ }
app/code/community/Netresearch/Hermes/Helper/Validate/Order.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Order Validate Helper for Hermes module
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Helper_Validate_Order extends Mage_Core_Helper_Data
32
+ {
33
+ /**
34
+ *
35
+ * @var Mage_Sales_Model_Order
36
+ */
37
+ protected $order;
38
+
39
+ /**
40
+ *
41
+ * @var array
42
+ */
43
+ protected $validation_errors = array();
44
+
45
+ /**
46
+ * set order
47
+ *
48
+ * @param Mage_Sales_Model_Order $order
49
+ *
50
+ * @return Netresearch_Hermes_Helper_Validate_Order
51
+ */
52
+ public function setOrder($order)
53
+ {
54
+ $this->validation_errors = array();
55
+ $this->order = $order;
56
+ return $this;
57
+ }
58
+
59
+ /**
60
+ * get order
61
+ *
62
+ * @return Mage_Sales_Model_Order
63
+ */
64
+ public function getOrder()
65
+ {
66
+ return $this->order;
67
+ }
68
+
69
+ /**
70
+ * check if order is valid to be shipped with hermes
71
+ *
72
+ * @return boolean
73
+ */
74
+ public function isValidHermesShipment()
75
+ {
76
+ $check = true;
77
+
78
+ //Check if the order is a COD-Order and Amount is greater than 2.500€
79
+ if ($this->isShippedAsCod() && $this->getOrder()->getGrandTotal() > 2500) {
80
+ $check = false;
81
+ $this->validation_errors[] = $this->__('Hermes COD shipments are not allowed for grand totals greater than 2.500€.');
82
+ }
83
+
84
+ //Check if the order is a COD-Order and target country is an allowed COD country
85
+ if ($this->isShippedAsCod() && false === $this->isAllowedCodCountry()) {
86
+ $check = false;
87
+ $this->validation_errors[] = $this->__('Hermes COD shipments are not allowed to %s.',
88
+ $this->getOrder()->getShippingAddress()->getCountryModel()->getName()
89
+ );
90
+ }
91
+
92
+ //check if country is in available countries list
93
+ if (false === $this->isAllowedCountry()) {
94
+ $check = false;
95
+ $this->validation_errors[] = $this->__('"%s" is not supported by Hermes.',
96
+ $this->getOrder()->getShippingAddress()->getCountryModel()->getName()
97
+ );
98
+ }
99
+
100
+ return $check;
101
+ }
102
+
103
+ /**
104
+ * check if order is shipped by COD
105
+ *
106
+ * @return boolean
107
+ */
108
+ public function isShippedAsCod()
109
+ {
110
+ return Mage::getModel("hermes/config")
111
+ ->isPaymentMethodForCod($this->getOrder()->getPayment()->getMethod(), $this->getOrder()->getStoreId());
112
+ }
113
+
114
+ /**
115
+ * check if order is shipped to an allowed country
116
+ *
117
+ * @return boolean
118
+ */
119
+ public function isAllowedCountry()
120
+ {
121
+ $receiverIso3CountryCode = Mage::helper('hermes')->getIso3CodeByIso2Code(
122
+ $this->getOrder()->getShippingAddress()->getCountryId()
123
+ );
124
+
125
+ if (false === Mage::getModel("hermes/config")->isAllowedCountry($receiverIso3CountryCode))
126
+ return false;
127
+ }
128
+
129
+ /**
130
+ * check if order is shipped to an allowed cod country
131
+ *
132
+ * @return boolean
133
+ */
134
+ public function isAllowedCodCountry()
135
+ {
136
+ $receiverIso3CountryCode = Mage::helper('hermes')->getIso3CodeByIso2Code(
137
+ $this->getOrder()->getShippingAddress()->getCountryId()
138
+ );
139
+
140
+ if (false === Mage::getModel("hermes/config")->isAllowedCodCountry($receiverIso3CountryCode))
141
+ return false;
142
+ }
143
+
144
+ /**
145
+ * get validation errors
146
+ */
147
+ public function getValidationErrors()
148
+ {
149
+ return $this->validation_errors;
150
+ }
151
+
152
+ /**
153
+ * reset validation errors
154
+ */
155
+ public function resetValidationErrors()
156
+ {
157
+ $this->validation_errors = array();
158
+ return $this;
159
+ }
160
+
161
+ /**
162
+ * check if order was created after Hermes installation
163
+ *
164
+ * @param Mage_Sales_Model_Order $order
165
+ * @return boolean
166
+ */
167
+ public function isCreatedAfterHermesInstallation()
168
+ {
169
+ $installDate = Mage::getModel("hermes/config")->getInstallationDate();
170
+ $orderDate = strtotime($this->getOrder()->getCreatedAtDate());
171
+ return ($installDate <= $orderDate);
172
+ }
173
+ }
app/code/community/Netresearch/Hermes/Model/Client.php ADDED
@@ -0,0 +1,650 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @author Thomas Birke <thomas.birke@netresearch.de>
20
+ * @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ * @link http://www.netresearch.de/magento/
23
+ */
24
+
25
+
26
+ /**
27
+ * Hermes API client
28
+ *
29
+ * @category Netresearch
30
+ * @package Netresearch_Hermes
31
+ * @author Thomas Birke <thomas.birke@netresearch.de>
32
+ * @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
33
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
34
+ * @link http://www.netresearch.de/magento/
35
+ */
36
+ class Netresearch_Hermes_Model_Client
37
+ {
38
+ /**
39
+ *
40
+ * @var Netresearch_Hermes_Model_Client_Soap
41
+ */
42
+ protected $soapClient;
43
+
44
+ /**
45
+ * @var string
46
+ */
47
+ protected $userToken;
48
+
49
+ /**
50
+ * @var string
51
+ */
52
+ protected $partnerToken;
53
+
54
+ /* property namespace */
55
+ const PROPERTY_NS = 'http://props.hermes_api.service.hlg.de';
56
+
57
+ /* maximum count of orders being accepted by soap method propsImportOrders */
58
+ const IMPORT_ORDERS_MAX_COUNT = 500;
59
+
60
+ /* label positioning */
61
+ const PRINT_POSITION_UPPER_LEFT = 1;
62
+ const PRINT_POSITION_UPPER_RIGHT = 2;
63
+ const PRINT_POSITION_LOWER_LEFT = 3;
64
+ const PRINT_POSITION_LOWER_RIGHT = 4;
65
+
66
+ /**
67
+ * Restructure single items of the soap response
68
+ *
69
+ * @param array $config The array to hold the restructured data
70
+ * @param stdClass $parcelFormat Information regarding package size and weight
71
+ * @param stdClass $destination Information regarding allowed shipping destinations
72
+ * @param string $price The shipping costs for the current format/destination combination
73
+ */
74
+ protected function setProductConfig(array &$config, stdClass $parcelFormat, stdClass $destination, $price)
75
+ {
76
+ if (!isset($config[$destination->countryCode])) {
77
+ $config[$destination->countryCode] = array('product_classes' => array());
78
+ }
79
+
80
+ $parcelClass = $parcelFormat->parcelClass;
81
+ if (!$parcelClass) {
82
+ $parcelClass = 'all';
83
+ }
84
+
85
+ if (!isset($config[$destination->countryCode]['product_classes'][$parcelClass])) {
86
+ $config[$destination->countryCode]['product_classes'][$parcelClass] = array(
87
+ 'weightMinKg' => null,
88
+ 'weigthMaxKg' => null,
89
+ 'shortestPlusLongestEdgeCmMin' => null,
90
+ 'shortestPlusLongestEdgeCmMax' => null,
91
+ 'thridEdgeCmMax' => null,
92
+ 'exclusions' => null,
93
+ 'netPriceEurcent' => $price
94
+ );
95
+ }
96
+
97
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['weightMinKg'] =
98
+ $parcelFormat->weightMinKg;
99
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['weigthMaxKg'] =
100
+ $parcelFormat->weigthMaxKg;
101
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['shortestPlusLongestEdgeCmMin'] =
102
+ $parcelFormat->shortestPlusLongestEdgeCmMin;
103
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['shortestPlusLongestEdgeCmMax'] =
104
+ $parcelFormat->shortestPlusLongestEdgeCmMax;
105
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['thridEdgeCmMax'] =
106
+ $parcelFormat->thridEdgeCmMax;
107
+ $config[$destination->countryCode]['product_classes'][$parcelClass]['exclusions'] =
108
+ $destination->exclusions;
109
+ }
110
+
111
+ /**
112
+ * Iterate through soap response in order to prepare data for storage
113
+ *
114
+ * @param array $productInformation The soap response
115
+ * @return array The restructured product information
116
+ */
117
+ protected function iterateUserProducts(array $productInformation)
118
+ {
119
+ $userProducts = array();
120
+
121
+ foreach ($productInformation as $product) {
122
+ // $destinations = $product->productInfo->deliveryDestinations->DeliveryDestination;
123
+ // if (!is_array($destinations)) {
124
+ // $this->setProductConfig($userProducts, $product->productInfo->parcelFormat, $destinations, $product->netPriceEurcent);
125
+ // continue;
126
+ // }
127
+
128
+ foreach ($product->productInfo->deliveryDestinations->DeliveryDestination as $destination) {
129
+ $this->setProductConfig($userProducts, $product->productInfo->parcelFormat, $destination, $product->netPriceEurcent);
130
+ }
131
+ }
132
+
133
+ return $userProducts;
134
+ }
135
+
136
+ /**
137
+ * Store the user's available products to config
138
+ *
139
+ * @param array $productInformation The products as given in soap response
140
+ */
141
+ protected function storeListOfProducts(stdClass $productInformation)
142
+ {
143
+ // restructure products
144
+ $userProducts = $this->iterateUserProducts(
145
+ $productInformation->products->ProductWithPrice
146
+ );
147
+ $this->getConfig()->setListOfProductsProducts($userProducts);
148
+
149
+ // store other information
150
+ $this->getConfig()->setListOfProductsData(
151
+ 'number_of_products',
152
+ $productInformation->numberOfProducts
153
+ );
154
+ $this->getConfig()->setListOfProductsData(
155
+ 'dated',
156
+ $productInformation->dated
157
+ );
158
+ $this->getConfig()->setListOfProductsData(
159
+ 'label_acceptance_terms_and_conditions',
160
+ $productInformation->labelAcceptanceTermsAndConditions
161
+ );
162
+ $this->getConfig()->setListOfProductsData(
163
+ 'label_acceptance_liability_limit',
164
+ $productInformation->labelAcceptanceLiabilityLimit
165
+ );
166
+ $this->getConfig()->setListOfProductsData(
167
+ 'url_terms_and_conditions',
168
+ $productInformation->urlTermsAndConditions
169
+ );
170
+ $this->getConfig()->setListOfProductsData(
171
+ 'net_price_cash_on_delivery_eurocent',
172
+ $productInformation->netPriceCashOnDeliveryEurocent
173
+ );
174
+ $this->getConfig()->setListOfProductsData(
175
+ 'settlement_type',
176
+ $productInformation->settlementType
177
+ );
178
+ $this->getConfig()->setListOfProductsData(
179
+ 'url_hermes_logogram',
180
+ $productInformation->urlHermesLogogram
181
+ );
182
+ $this->getConfig()->setListOfProductsData(
183
+ 'url_liability_informations',
184
+ $productInformation->urlLiabilityInformations
185
+ );
186
+ $this->getConfig()->setListOfProductsData(
187
+ 'url_packaging_guidelines',
188
+ $productInformation->urlPackagingGuidelines
189
+ );
190
+ $this->getConfig()->setListOfProductsData(
191
+ 'url_portal_b2c',
192
+ $productInformation->urlPortalB2C
193
+ );
194
+ $this->getConfig()->setListOfProductsData(
195
+ 'vat_info',
196
+ $productInformation->vatInfo
197
+ );
198
+ Mage::getModel('core/config')->removeCache();
199
+ }
200
+
201
+ /**
202
+ * get module configuration object
203
+ *
204
+ * @return Netresearch_Hermes_Model_Config
205
+ */
206
+ public function getConfig()
207
+ {
208
+ return Mage::getModel('hermes/config');
209
+ }
210
+
211
+ /**
212
+ * get Hermes api
213
+ *
214
+ * @param string $userToken
215
+ * @param string $partnerToken
216
+ * @return Netresearch_Hermes_Model_Client_Soap
217
+ */
218
+ public function getSoapClient($userToken = null, $partnerToken = null)
219
+ {
220
+ if (is_null($this->soapClient)) {
221
+ $this->soapClient = Mage::getModel('hermes/client_soap');
222
+ $this->soapClient->addSoapInputHeader(
223
+ new SoapHeader(
224
+ self::PROPERTY_NS, 'PartnerId', $this->getConfig()->getPartnerId()
225
+ ), $permanent = true
226
+ );
227
+ $this->soapClient->addSoapInputHeader(
228
+ new SoapHeader(
229
+ self::PROPERTY_NS, 'PartnerPwd', $this->getConfig()->getPartnerPwd()
230
+ ), $permanent = true
231
+ );
232
+ }
233
+
234
+ if (null !== $userToken) {
235
+ $this->soapClient->addSoapInputHeader(
236
+ new SoapHeader(
237
+ self::PROPERTY_NS, 'UserToken', $userToken
238
+ ), $permanent = true
239
+ );
240
+ }
241
+
242
+ if (null !== $partnerToken) {
243
+ $this->soapClient->addSoapInputHeader(
244
+ new SoapHeader(
245
+ self::PROPERTY_NS, 'PartnerToken', $partnerToken
246
+ ), $permanent = true
247
+ );
248
+ }
249
+
250
+ return $this->soapClient;
251
+ }
252
+
253
+ public function getLastResponse()
254
+ {
255
+ return $this->getSoapClient()->getLastResponse();
256
+ }
257
+
258
+ /**
259
+ * Service propsCheckAvailability
260
+ *
261
+ * checks availability of all required API components
262
+ * and returns the api version in case of success and an error message otherwise
263
+ *
264
+ * @throws Netresearch_Hermes_Model_Client_Exception if api is not available
265
+ * @return string API version
266
+ */
267
+ public function getApiVersion()
268
+ {
269
+ try {
270
+ $soapClient = $this->getSoapClient();
271
+ return $soapClient
272
+ ->propsCheckAvailability()
273
+ ->propsCheckAvailabilityReturn;
274
+ } catch (SoapFault $e) {
275
+ $this->logCommunication('GET API VERSION', Zend_Log::ERR);
276
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
277
+ }
278
+ }
279
+
280
+ /**
281
+ * check if web service is available
282
+ *
283
+ * @return boolean
284
+ */
285
+ public function isAvailable()
286
+ {
287
+ try {
288
+ /**
289
+ * the service returns the current api version, otherwise it is not available
290
+ */
291
+ return 0 < preg_match('/\d+(\.\d+)*/', $this->getApiVersion());
292
+ } catch (Netresearch_Hermes_Model_Client_Exception $e) {
293
+ return false;
294
+ }
295
+ }
296
+
297
+ /**
298
+ * Query all Hermes products
299
+ *
300
+ * @throws Netresearch_Hermes_Model_Client_Exception if api is not available
301
+ * @return stdClass
302
+ */
303
+ public function getProductInformation()
304
+ {
305
+ try {
306
+ $soapClient = $this->getSoapClient();
307
+ return $soapClient
308
+ ->propsProductlnformation()
309
+ ->propsProductlnformationReturn;
310
+ } catch (SoapFault $e) {
311
+ $this->logCommunication('LOAD PRODUCTS', Zend_Log::ERR, true);
312
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
313
+ }
314
+ $this->logCommunication('LOAD PRODUCTS');
315
+ }
316
+
317
+ /**
318
+ * Query the Hermes user's available products and update config
319
+ *
320
+ * @throws Netresearch_Hermes_Model_Client_Exception if api is not available
321
+ * @return stdClass
322
+ */
323
+ public function updateListOfProducts()
324
+ {
325
+ try {
326
+ $this->login();
327
+
328
+ $soapClient = $this->getSoapClient($this->userToken);
329
+ $userProducts = $soapClient
330
+ ->propsListOfProductsATG()
331
+ ->propsListOfProductsATGReturn;
332
+
333
+ $this->logCommunication('UPDATE CUSTOMERS PRODUCT LIST');
334
+ $this->storeListOfProducts($userProducts);
335
+
336
+ return $userProducts;
337
+ } catch (SoapFault $e) {
338
+ $this->logCommunication('UPDATE CUSTOMERS PRODUCT LIST', Zend_Log::ERR, true);
339
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
340
+ }
341
+ }
342
+
343
+ /**
344
+ * get user token of Hermes web service
345
+ *
346
+ * @return string
347
+ */
348
+ public function getUserToken()
349
+ {
350
+ return $this->userToken;
351
+ }
352
+
353
+ /**
354
+ * get partner token of Hermes web service
355
+ *
356
+ * @return string
357
+ */
358
+ public function getPartnerToken()
359
+ {
360
+ return $this->partnerToken;
361
+ }
362
+
363
+ /**
364
+ * Authenticate Hermes user if not authenticated yet and set the
365
+ * properties userToken and partnerToken
366
+ *
367
+ * @throws Netresearch_Hermes_Model_Client_Exception if credentials are missing or wrong
368
+ * @return string User Token
369
+ */
370
+ public function login()
371
+ {
372
+ if (false == $this->isAvailable()) {
373
+ throw new Netresearch_Hermes_Model_Client_Exception('Hermes API is currently not available. Please try again later.');
374
+ }
375
+ if (!$this->userToken) {
376
+ $soapClient = $this->getSoapClient();
377
+ try {
378
+ $response = $soapClient->propsUserLogin(array(
379
+ 'login' => array(
380
+ 'benutzername' => $this->getConfig()->getUsername(),
381
+ 'kennwort' => $this->getConfig()->getPassword()
382
+ )
383
+ ));
384
+ } catch (SoapFault $e) {
385
+ $this->logCommunication('LOGIN', Zend_Log::ERR, true);
386
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
387
+ }
388
+ $this->logCommunication('LOGIN');
389
+
390
+ $this->userToken = $response->propsUserLoginReturn;
391
+
392
+ $headers = $soapClient->getLastSoapOutputHeaderObjects();
393
+ if (is_array($headers) && array_key_exists('PartnerToken', $headers)) {
394
+ $this->partnerToken = $headers['PartnerToken'];
395
+ }
396
+ }
397
+
398
+ return $this->userToken;
399
+ }
400
+
401
+ public function logCommunication($prefix, $level=3, $force=false)
402
+ {
403
+ Mage::helper('hermes')->log(
404
+ $prefix . ':' . PHP_EOL . '== REQUEST ==' . PHP_EOL
405
+ . $this->getSoapClient()->getLastRequest()
406
+ . '== RESPONSE ==' . PHP_EOL
407
+ . $this->getSoapClient()->getLastResponse()
408
+ . PHP_EOL,
409
+ $level, $force
410
+ );
411
+ }
412
+
413
+ /**
414
+ * set parcels status "in transmission" to avoid duplicate transmission if sendParcels is called by different
415
+ * processes in parallel
416
+ *
417
+ * @param array $parcelIds Ids of parcels to be transmitted
418
+ * @return void
419
+ */
420
+ protected function _setParcelsStatusInTransmission($parcelCollection)
421
+ {
422
+ $resource = Mage::getModel('hermes/parcel')->getResource();
423
+ $resource->beginTransaction();
424
+ $parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION)->save();
425
+ $resource->commit();
426
+ }
427
+
428
+ /**
429
+ * send up to 500 parcels to Hermes
430
+ *
431
+ * @param array $parcels
432
+ * @return stdClass SOAP response
433
+ */
434
+ public function sendParcels(array $parcelIds)
435
+ {
436
+ if (self::IMPORT_ORDERS_MAX_COUNT < count($parcelIds)) {
437
+ throw new Netresearch_Hermes_Model_Client_Exception(sprintf(
438
+ 'Exceeded maximum order limit: SOAP method propsImportOrders does accept up to %d orders per call (you tried to send %d)',
439
+ self::IMPORT_ORDERS_MAX_COUNT,
440
+ count($parcelIds)
441
+ ));
442
+ }
443
+ $parcelCollection = Mage::getModel('hermes/parcel')->getCollection()
444
+ ->addFieldToFilter('id', array('in' => $parcelIds))
445
+ ->addFieldToFilter('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
446
+
447
+ $parcelData = $this->getConvertedParcelData($parcelIds);
448
+ if (0 == count($parcelData)) {
449
+ $parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED)->save();
450
+ throw new Netresearch_Hermes_Model_Client_Exception(
451
+ 'None of the given parcels could be sent to Hermes'
452
+ );
453
+ }
454
+ try {
455
+ $this->login();
456
+ $this->_setParcelsStatusInTransmission($parcelCollection);
457
+ $response = $this->getSoapClient($this->userToken, $this->partnerToken)->propsImportOrders(
458
+ array(
459
+ 'requestedOrders' => array(
460
+ 'propsOrders' => $parcelData
461
+ )
462
+ )
463
+ );
464
+
465
+ } catch (SoapFault $e) {
466
+ $parcelCollection->setDataToAll('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED)->save();
467
+ $this->logCommunication('IMPORT ORDERS', 3, true);
468
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
469
+ }
470
+ $this->logCommunication('IMPORT ORDERS');
471
+ return $response;
472
+ }
473
+
474
+ /**
475
+ * convert parcels into Hermes data structure and return that
476
+ *
477
+ * @param array $parcelIds
478
+ * @return array
479
+ */
480
+ public function getConvertedParcelData($parcelIds)
481
+ {
482
+ $parcel = Mage::getModel('hermes/parcel');
483
+ $parcelData = array();
484
+ foreach ($parcelIds as $parcelId) {
485
+ $parcel->load($parcelId);
486
+ if (!$parcel->getId()) {
487
+ /* skip non-persistent parcels */
488
+ continue;
489
+ }
490
+ $parcelData[] = array(
491
+ 'orderNo' => $parcel->getHermesOrderNo(),
492
+ 'receiver' => $this->getReceiverData($parcel),
493
+ 'clientReferenceNumber' => $parcel->getShipment()->getIncrementId(),
494
+ 'parcelClass' => $parcel->getParcelClass(),
495
+ 'amountCashOnDeliveryEurocent' => $parcel->getAmountCashOnDeliveryEurocent(),
496
+ 'includeCashOnDelivery' => 1 == $parcel->getIncludeCashOnDelivery(),
497
+ 'withBulkGoods' => false
498
+ );
499
+ }
500
+ return $parcelData;
501
+ }
502
+
503
+ /**
504
+ * get parcel receiver data to be sent to Hermes in order to save a new parcel
505
+ *
506
+ * @param Netresearch_Hermes_Model_Parcel $parcel
507
+ * @return array
508
+ */
509
+ protected function getReceiverData($parcel)
510
+ {
511
+ $address = array(
512
+ 'firstname' => $parcel->getReceiverFirstname(),
513
+ 'lastname' => $parcel->getReceiverLastname(),
514
+ 'street' => $parcel->getReceiverStreet(),
515
+ 'houseNumber' => $parcel->getReceiverHouseNumber(),
516
+ 'postcode' => $parcel->getReceiverPostcode(),
517
+ 'city' => $parcel->getReceiverCity(),
518
+ 'countryCode' => $parcel->getReceiverCountryCode(),
519
+ );
520
+ if (false == is_null($parcel->getReceiverAddressAdd())){
521
+ $address['addressAdd'] = $parcel->getReceiverAddressAdd();
522
+ }
523
+ if (false == is_null($parcel->getReceiverEmail())){
524
+ $address['email'] = $parcel->getReceiverEmail();
525
+ }
526
+ // houseNumber is not set explicitly, use empty string for transmission
527
+ if (is_null($address['houseNumber'])) {
528
+ $address['houseNumber'] = '';
529
+ }
530
+ return $address;
531
+ }
532
+
533
+ /**
534
+ * get jpeg label for given parcel
535
+ *
536
+ * @param Netresearch_Hermes_Model_Parcel $parcel
537
+ *
538
+ * @throws Netresearch_Hermes_Model_Client_Exception
539
+ * @return Netresearch_Hermes_Model_Client_Response
540
+ */
541
+ public function getLabelJpeg(Netresearch_Hermes_Model_Parcel $parcel)
542
+ {
543
+ $this->login();
544
+ try {
545
+ $result = $this->getSoapClient($this->userToken, $this->partnerToken)
546
+ ->propsOrderPrintLabelJpeg(array('orderNo' => $parcel->getHermesOrderNo()));
547
+ $this->logCommunication('PRINT JPEG');
548
+ // if (false === $parcel->isClosed()) {
549
+ // $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
550
+ // $parcel->save();
551
+ // }
552
+ return Mage::getModel('hermes/client_response')
553
+ ->setResult($result->propsOrderPrintLabelJpegReturn->jpegData);
554
+ } catch (SoapFault $e) {
555
+ $this->logCommunication('PRINT JPEG', 3, true);
556
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
557
+ }
558
+ }
559
+
560
+ /**
561
+ * get pdf label for given parcel
562
+ *
563
+ * @param Netresearch_Hermes_Model_Parcel $parcel
564
+ * @param int $position
565
+ *
566
+ * @throws Netresearch_Hermes_Model_Client_Exception
567
+ * @return Netresearch_Hermes_Model_Client_Response
568
+ */
569
+ public function getLabelPdf(Netresearch_Hermes_Model_Parcel $parcel, $position)
570
+ {
571
+ $this->login();
572
+ try {
573
+ $result = $this->getSoapClient($this->userToken, $this->partnerToken)
574
+ ->propsOrderPrintLabelPdf(array(
575
+ 'orderNo' => $parcel->getHermesOrderNo(),
576
+ 'printPosition' => $position
577
+ ));
578
+ $this->logCommunication('PRINT SINGLE PDF');
579
+ // if (false === $parcel->isClosed()) {
580
+ // $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
581
+ // $parcel->save();
582
+ // }
583
+ return Mage::getModel('hermes/client_response')
584
+ ->setResult($result->propsOrderPrintLabelPdfReturn->pdfData);
585
+
586
+ } catch (SoapFault $e) {
587
+ $this->logCommunication('PRINT SINGLE PDF', 3, true);
588
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
589
+ }
590
+ }
591
+
592
+ /**
593
+ * get pdf labels for given parcel
594
+ *
595
+ * @param string $hermesParcelId
596
+ * @return Netresearch_Hermes_Model_Client_Response
597
+ */
598
+ public function getLabelsPdf($hermesParcelId)
599
+ {
600
+ $this->login();
601
+ try {
602
+ $result = $this->getSoapClient($this->userToken, $this->partnerToken)
603
+ ->propsOrdersPrintLabelsPdf(array('orderNo' => $hermesParcelId));
604
+ $this->logCommunication('PRINT SINGLE PDF');
605
+ $failedItems = array();
606
+ $successItems = array();
607
+ $exceptions = array();
608
+ foreach ($result->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->orderRes as $orderRes) {
609
+ if (property_exists($orderRes, 'exceptionItems') && count($orderRes->exceptionItems)) {
610
+ $failedItems[] = $orderRes->orderNo;
611
+ $exceptions[$orderRes->orderNo] = $orderRes->exceptionItems;
612
+ } else {
613
+ $successItems[] = $orderRes->orderNo;
614
+ }
615
+ }
616
+ return Mage::getModel('hermes/client_response')
617
+ ->setResult($result->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->pdfData)
618
+ ->setSuccessCount(count($successItems))
619
+ ->setSuccessItems($successItems)
620
+ ->setErrorCount(count($failedItems))
621
+ ->setFailedItems($failedItems)
622
+ ->setExceptions($exceptions);
623
+ } catch (SoapFault $e) {
624
+ $this->logCommunication('PRINT SINGLE PDF', 3, true);
625
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
626
+ }
627
+ }
628
+
629
+ /**
630
+ * cancel parcel
631
+ *
632
+ * @param Netresearch_Hermes_Model_Parcel $parcel
633
+ *
634
+ * @throws Netresearch_Hermes_Model_Client_Exception
635
+ * @return boolean Cancellation success
636
+ */
637
+ public function cancel(Netresearch_Hermes_Model_Parcel $parcel)
638
+ {
639
+ $this->login();
640
+ try {
641
+ $result = $this->getSoapClient($this->userToken, $this->partnerToken)
642
+ ->propsOrderDelete(array('orderNo' => $parcel->getHermesOrderNo()));
643
+ $this->logCommunication('CANCEL');
644
+ return $result->propsOrderDeleteReturn;
645
+ } catch (SoapFault $e) {
646
+ $this->logCommunication('CANCEL', 3, true);
647
+ throw Netresearch_Hermes_Model_Client_Exception::soapFault($e);
648
+ }
649
+ }
650
+ }
app/code/community/Netresearch/Hermes/Model/Client/Exception.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes API client exception
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Client_Exception extends Mage_Core_Exception
32
+ {
33
+ public static function soapFault(SoapFault $e)
34
+ {
35
+ if (isset($e->detail)
36
+ && isset($e->detail->ServiceException)
37
+ && isset($e->detail->ServiceException->exceptionItems)
38
+ && isset($e->detail->ServiceException->exceptionItems->ExceptionItem)
39
+ && isset($e->detail->ServiceException->exceptionItems->ExceptionItem->errorCode)
40
+ && isset($e->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage)
41
+ ) {
42
+ return new self(
43
+ $e->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage,
44
+ $e->detail->ServiceException->exceptionItems->ExceptionItem->errorCode
45
+ );
46
+ }
47
+ return new self('Unexpected SoapFault (maybe an empty response?)');
48
+ }
49
+
50
+ public static function createSoapFault($errorMessage, $errorCode)
51
+ {
52
+ return new NetresearchSoapFault($errorMessage, $errorCode);
53
+ }
54
+ }
55
+
56
+ class NetresearchSoapFault extends SoapFault
57
+ {
58
+ public $detail;
59
+
60
+ public function __construct($errorMessage, $errorCode, $faultcode = 'dummycode', $faultstring = 'dummystring')
61
+ {
62
+ parent::__construct($faultcode, $faultstring);
63
+ $this->detail = new stdClass();
64
+ $this->detail->ServiceException = new stdClass();
65
+ $this->detail->ServiceException->exceptionItems = new stdClass();
66
+ $this->detail->ServiceException->exceptionItems->ExceptionItem = new stdClass();
67
+ $this->detail->ServiceException->exceptionItems->ExceptionItem->errorMessage = $errorMessage;
68
+ $this->detail->ServiceException->exceptionItems->ExceptionItem->errorCode = $errorCode;
69
+ }
70
+ }
app/code/community/Netresearch/Hermes/Model/Client/Response.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes client response
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Client_Response extends Mage_Core_Model_Abstract
32
+ {
33
+ }
app/code/community/Netresearch/Hermes/Model/Client/Soap.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes SOAP client
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Client_Soap extends Zend_Soap_Client
32
+ {
33
+ protected $response;
34
+
35
+ public function __construct()
36
+ {
37
+ $config = Mage::getModel('hermes/config');
38
+ /* @var $config Netresearch_Hermes_Model_Config */
39
+
40
+ parent::__construct($config->getWsdl(), array(
41
+ 'encoding' => 'UTF-8',
42
+ 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE,
43
+ 'soap_version' => SOAP_1_1,
44
+ 'features' => SOAP_SINGLE_ELEMENT_ARRAYS
45
+ ));
46
+ }
47
+ }
app/code/community/Netresearch/Hermes/Model/Config.php ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Configuration for Hermes module
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Config
32
+ {
33
+ /*
34
+ * Product classes
35
+ */
36
+ const PRODUCT_CLASS_EXTRA_SMALL = 'XS';
37
+ const PRODUCT_CLASS_SMALL = 'S';
38
+ const PRODUCT_CLASS_MEDIUM = 'M';
39
+ const PRODUCT_CLASS_LARGE = 'L';
40
+ const PRODUCT_CLASS_EXTRA_LARGE = 'XL';
41
+
42
+ const ORDER_MAX_DAYS_IN_PAST = 90;
43
+
44
+ protected $store = null;
45
+
46
+ /**
47
+ * @return Mage_Core_Model_Store
48
+ */
49
+ protected function getDefaultStore()
50
+ {
51
+ if (null === $this->store) {
52
+ $this->store = Mage::app()->getStore(0)->load(0);
53
+ }
54
+
55
+ return $this->store;
56
+ }
57
+
58
+
59
+ /**
60
+ * if Hermes is enabled at all
61
+ *
62
+ * @return boolean
63
+ */
64
+ public function isEnabled()
65
+ {
66
+ return (1 == Mage::getStoreConfig('hermes/general/active'));
67
+ }
68
+
69
+ /**
70
+ * if logging of requests and responses is enabled
71
+ *
72
+ * @return boolean
73
+ */
74
+ public function isLoggingEnabled()
75
+ {
76
+ return (1 == Mage::getStoreConfig('hermes/general/logging_enabled'));
77
+ }
78
+
79
+ /**
80
+ * if we are in production mode
81
+ *
82
+ * @return boolean
83
+ */
84
+ public function isProductionMode()
85
+ {
86
+ return (false === $this->isTestMode());
87
+ }
88
+
89
+ /**
90
+ * if we are in sandbox mode
91
+ *
92
+ * @return boolean
93
+ */
94
+ public function isTestMode()
95
+ {
96
+ return (1 == Mage::getStoreConfig('hermes/general/testmode'));
97
+ }
98
+
99
+ /**
100
+ * get Hermes partner id
101
+ *
102
+ * @return string
103
+ */
104
+ public function getPartnerId()
105
+ {
106
+ return Mage::getStoreConfig('hermes/account/partner_id');
107
+ }
108
+
109
+ /**
110
+ * get Hermes partner password
111
+ *
112
+ * @return string
113
+ */
114
+ public function getPartnerPwd()
115
+ {
116
+ return Mage::getStoreConfig('hermes/account/api_pwd');
117
+ }
118
+
119
+ /**
120
+ * get Hermes user name
121
+ *
122
+ * @return string
123
+ */
124
+ public function getUsername()
125
+ {
126
+ return Mage::getStoreConfig('hermes/account/username');
127
+ }
128
+
129
+ /**
130
+ * get Hermes user password
131
+ *
132
+ * @return string
133
+ */
134
+ public function getPassword()
135
+ {
136
+ return Mage::getStoreConfig('hermes/account/password');
137
+ }
138
+
139
+
140
+ /**
141
+ * get wsdl for API requests
142
+ *
143
+ * @return string wsdl path
144
+ */
145
+ public function getWsdl()
146
+ {
147
+ return Mage::getBaseDir('base') . '/' . Mage::getStoreConfig(
148
+ $this->isTestMode() ? 'hermes/test/wsdl' : 'hermes/prod/wsdl'
149
+ );
150
+ }
151
+
152
+ /**
153
+ * get disabled shipping methods
154
+ *
155
+ * @param int $storeId
156
+ *
157
+ * @return string
158
+ */
159
+ public function getDisabledShippingMethods($storeId = 0)
160
+ {
161
+ return Mage::getStoreConfig('hermes/shipment_options/disabled_shipping_methods', $storeId);
162
+ }
163
+
164
+ /**
165
+ * get payment methods for COD
166
+ *
167
+ * @param int $storeId
168
+ *
169
+ * @return string
170
+ */
171
+ public function getPaymentMethodsForCod($storeId = 0)
172
+ {
173
+ return Mage::getStoreConfig('hermes/shipment_options/cod_payment_methods', $storeId);
174
+ }
175
+
176
+ /**
177
+ * Get the user's products as stored in config
178
+ * @return array
179
+ */
180
+ public function getListOfProductsProducts()
181
+ {
182
+ return Zend_Json::decode(Mage::getStoreConfig('hermes/api_data/props_list_of_products_atg/products'));
183
+ }
184
+
185
+ /**
186
+ * Get additional data (other than products) as stored in config
187
+ * @param string $key
188
+ */
189
+ public function getListOfProductsData($key)
190
+ {
191
+ $known_keys = array(
192
+ 'number_of_products','dated','label_acceptance_terms_and_conditions',
193
+ 'label_acceptance_liability_limit','url_terms_and_conditions',
194
+ 'net_price_cash_on_delivery_eurocent','settlement_type',
195
+ 'url_hermes_logogram','url_liability_informations',
196
+ 'url_packaging_guidelines','url_portal_b2c','vat_info'
197
+ );
198
+
199
+ if (!in_array($key, $known_keys)) {
200
+ throw new InvalidArgumentException("'$key' is not a known config key");
201
+ }
202
+
203
+ return Mage::getStoreConfig("hermes/api_data/props_list_of_products_atg/$key");
204
+ }
205
+
206
+ /**
207
+ * Store the user products as queried from api
208
+ * @param array $userProducts
209
+ */
210
+ public function setListOfProductsProducts(array $userProducts)
211
+ {
212
+ $path = 'hermes/api_data/props_list_of_products_atg/products';
213
+ $value = Zend_Json::encode($userProducts);
214
+ $this->getDefaultStore()->setConfig($path, $value);
215
+ Mage::getConfig()->saveConfig($path, $value);
216
+ return $this;
217
+ }
218
+
219
+ /**
220
+ * Set additional data (other than products) as queried from api
221
+ * @param string $key
222
+ * @param string $value
223
+ */
224
+ public function setListOfProductsData($key, $value)
225
+ {
226
+ $known_keys = array(
227
+ 'number_of_products','dated','label_acceptance_terms_and_conditions',
228
+ 'label_acceptance_liability_limit','url_terms_and_conditions',
229
+ 'net_price_cash_on_delivery_eurocent','settlement_type',
230
+ 'url_hermes_logogram','url_liability_informations',
231
+ 'url_packaging_guidelines','url_portal_b2c','vat_info'
232
+ );
233
+
234
+ if (!in_array($key, $known_keys)) {
235
+ throw new InvalidArgumentException("'$key' is not a known config key");
236
+ }
237
+
238
+ if (false == is_null($value)) {
239
+ $path = 'hermes/api_data/props_list_of_products_atg/' . $key;
240
+ $this->getDefaultStore()->setConfig($path, $value);
241
+ Mage::getConfig()->saveConfig($path, $value);
242
+ }
243
+ return $this;
244
+ }
245
+
246
+ /**
247
+ * Check if shipping method is disabled
248
+ *
249
+ * @param string $shippingCode
250
+ * @return boolean
251
+ */
252
+ public function isAllowedShippingMethod($shippingCode, $storeId = 0)
253
+ {
254
+ $disabledShippingMethods = explode(",", $this->getDisabledShippingMethods($storeId));
255
+ return !in_array(
256
+ $shippingCode,
257
+ $disabledShippingMethods);
258
+ }
259
+
260
+ /**
261
+ * Check if it a payment method for COD
262
+ *
263
+ * @param string $paymentMethodCode
264
+ * @return boolean
265
+ */
266
+ public function isPaymentMethodForCod($paymentMethodCode, $storeId = 0)
267
+ {
268
+ $codPaymentMethods = explode(",", $this->getPaymentMethodsForCod($storeId));
269
+ return in_array(
270
+ $paymentMethodCode,
271
+ $codPaymentMethods);
272
+ }
273
+
274
+ /**
275
+ * get all available product classes
276
+ *
277
+ * @return array
278
+ */
279
+ public function getAllProductClasses()
280
+ {
281
+ return array(
282
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
283
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
284
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
285
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
286
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
287
+ );
288
+ }
289
+
290
+
291
+ /**
292
+ * return key => $value array of product classes
293
+ * @return array
294
+ */
295
+ public function getAllProductClassesasKeyValue()
296
+ {
297
+ $productClasses = array();
298
+ foreach ($this->getAllProductClasses() as $productClass) {
299
+ $productClasses[$productClass] = $productClass;
300
+ }
301
+ return $productClasses;
302
+ }
303
+
304
+ /**
305
+ * get all allowed shipping countries
306
+ *
307
+ * @return array
308
+ */
309
+ public function getAllowedCountries()
310
+ {
311
+ return explode(",", Mage::getStoreConfig("hermes/general/allowed_countries"));
312
+ }
313
+
314
+ /**
315
+ * get all allowed shipping countries for COD
316
+ *
317
+ * @return array
318
+ */
319
+ public function getAllowedCodCountries()
320
+ {
321
+ return explode(",", Mage::getStoreConfig("hermes/general/allowed_cod_countries"));
322
+ }
323
+
324
+ /**
325
+ * Check if it is an allowed country
326
+ *
327
+ * @param string $paymentMethodCode
328
+ * @return boolean
329
+ */
330
+ public function isAllowedCountry($iso3CountryCode)
331
+ {
332
+ return in_array(
333
+ $iso3CountryCode,
334
+ $this->getAllowedCountries());
335
+ }
336
+
337
+ /**
338
+ * Check if it is an allowed country for COD
339
+ *
340
+ * @param string $paymentMethodCode
341
+ * @return boolean
342
+ */
343
+ public function isAllowedCodCountry($iso3CountryCode)
344
+ {
345
+ return in_array(
346
+ $iso3CountryCode,
347
+ $this->getAllowedCodCountries());
348
+ }
349
+
350
+ /**
351
+ * Check if merchant is accounted by "Staffelpreis" / "Tiered prices"
352
+ *
353
+ * @return boolean
354
+ */
355
+ public function isTieredPriceMerchant()
356
+ {
357
+ return ("Abrechnung zum Staffelpreis"
358
+ == $this->getListOfProductsData("settlement_type"));
359
+ }
360
+
361
+ /**
362
+ * Check if merchant is accounted by "Durchschnittspreis" / "Flatrate"
363
+ *
364
+ * @return boolean
365
+ */
366
+ public function isFlatrateMerchant()
367
+ {
368
+ return (false === $this->isTieredPriceMerchant());
369
+ }
370
+
371
+ /**
372
+ *
373
+ * @return boolean
374
+ */
375
+ public function isHermesMailEnabled()
376
+ {
377
+ return (1 == Mage::getStoreConfig('hermes/shipment_options/hermes_mail'));
378
+ }
379
+
380
+ /**
381
+ *
382
+ * @return boolean
383
+ */
384
+ public function isPdfEnabled()
385
+ {
386
+ $labelOptions = explode(',',Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option'));
387
+ return (!in_array('', $labelOptions) && in_array('pdf', $labelOptions));
388
+ }
389
+
390
+ /**
391
+ *
392
+ * @return boolean
393
+ */
394
+ public function isJpegEnabled()
395
+ {
396
+ $labelOptions = explode(',',Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option'));
397
+ return (!in_array('', $labelOptions) && in_array('jpeg', $labelOptions));
398
+ }
399
+
400
+ /**
401
+ *
402
+ * @return boolean
403
+ */
404
+ public function getPdfLabelPosition()
405
+ {
406
+ return Mage::getStoreConfig('hermes/shipment_label_options/shipment_label_option_pdf');
407
+ }
408
+
409
+ /**
410
+ * get tracking link (pattern or for given parcel
411
+ *
412
+ * @param Netresearch_Hermes_Model_Parcel|string $parcel_or_orderNo Parcel or hermesOrderNo
413
+ * @return string|null Tracking Url, NULL if hermesOrderNo of given parcel is empty
414
+ */
415
+ public function getTrackingUrl($parcel_or_orderNo=null)
416
+ {
417
+ $link = Mage::getStoreConfig('hermes/tracking/url');
418
+ if ($parcel_or_orderNo instanceof Netresearch_Hermes_Model_Parcel) {
419
+ if (0 < strlen($parcel_or_orderNo->getHermesOrderNo())) {
420
+ $parcel_or_orderNo = $parcel_or_orderNo->getHermesOrderNo();
421
+ } else {
422
+ return null;
423
+ }
424
+ }
425
+ if (is_string($parcel_or_orderNo) && 0 < strlen($parcel_or_orderNo)) {
426
+ $link = str_replace('%orderNo%', $parcel_or_orderNo, $link);
427
+ }
428
+ return $link;
429
+ }
430
+
431
+ /**
432
+ * if an email should be sent after tracking link creation
433
+ *
434
+ * @return boolean
435
+ */
436
+ public function isTrackingLinkMailEnabled()
437
+ {
438
+ return 1 == Mage::getStoreConfig('hermes/email_options/send_email_tracking_link');
439
+ }
440
+
441
+ /**
442
+ * get support mail address
443
+ *
444
+ * @return string
445
+ */
446
+ public function getSupportMail()
447
+ {
448
+ return Mage::getStoreConfig('hermes/info/support_mail');
449
+ }
450
+
451
+ /**
452
+ * if autocreation mode is active
453
+ *
454
+ * @return array
455
+ */
456
+ public function isAutocreateEnabled()
457
+ {
458
+ return 1 == Mage::getStoreConfig('hermes/autocreate/enabled');
459
+ }
460
+
461
+ /**
462
+ * get order statuses being enabled for automatic shipment creation and Hermes parcel transmission
463
+ *
464
+ * @return array
465
+ */
466
+ public function getAutocreateOrderStatuses()
467
+ {
468
+ return explode(',', Mage::getStoreConfig('hermes/autocreate/order_status'));
469
+ }
470
+
471
+ /**
472
+ * get payment methods being enabled for automatic shipment creation and Hermes parcel transmission
473
+ *
474
+ * @return array
475
+ */
476
+ public function getAutocreatePaymentMethods()
477
+ {
478
+ return explode(',', Mage::getStoreConfig('hermes/autocreate/payment_methods'));
479
+ }
480
+
481
+ public function getInstallationDate()
482
+ {
483
+ return Mage::getStoreConfig('hermes/general/installation_date');
484
+ }
485
+
486
+ /**
487
+ * get the maximum allowed days in past for created at in the past
488
+ *
489
+ * @return int
490
+ */
491
+ public function getMaxDaysInPast()
492
+ {
493
+ return self::ORDER_MAX_DAYS_IN_PAST;
494
+ }
495
+ }
app/code/community/Netresearch/Hermes/Model/Config/Exception.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Netresearch_Hermes_Model_Mysql4_Parcel
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Mysql4_Parcel extends Mage_Core_Model_Mysql4_Abstract
32
+ {
33
+ protected function _construct()
34
+ {
35
+ $this->_init('hermes/parcel', 'id');
36
+ }
37
+
38
+ }
39
+
app/code/community/Netresearch/Hermes/Model/Mysql4/Parcel/Collection.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Netresearch_Hermes_Model_Mysql4_Parcel_Collection
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Mysql4_Parcel_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
32
+ {
33
+ protected function _construct()
34
+ {
35
+ $this->_init('hermes/parcel');
36
+ }
37
+
38
+ }
app/code/community/Netresearch/Hermes/Model/Observer.php ADDED
@@ -0,0 +1,452 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Model_Observer
4
+ {
5
+ /**
6
+ * @var Netresearch_Hermes_Model_Config
7
+ */
8
+ protected $config;
9
+
10
+ public function __construct()
11
+ {
12
+ $this->config = Mage::getModel('hermes/config');
13
+ }
14
+
15
+ /**
16
+ * Perform automatic mode
17
+ *
18
+ * @param Varien_Event_Observer $observer
19
+ *
20
+ * @return null
21
+ */
22
+ protected function saveHermesShipmentDataAutoMode($observer)
23
+ {
24
+ return null;
25
+ }
26
+
27
+ /**
28
+ * Perform manual mode
29
+ *
30
+ * @param Varien_Event_Observer $observer
31
+ * @param array $data request data
32
+ *
33
+ * @return Netresearch_Hermes_Model_Parcel The parcel object or false if hermes shipping is not applicable
34
+ */
35
+ protected function saveHermesShipmentDataManualMode($observer, array $data)
36
+ {
37
+ if (false === array_key_exists('ship_with_hermes', $data) || '0' === $data['ship_with_hermes']) {
38
+ return false;
39
+ }
40
+
41
+ $shipment = $observer->getShipment();
42
+ /* @var $shipment Mage_Sales_Model_Order_Shipment */
43
+ $order = $shipment->getOrder();
44
+
45
+ $parcelClass = null;
46
+ if (isset($data['parcel_class']) &&
47
+ in_array($data['parcel_class'], $this->config->getAllProductClasses())
48
+ ) {
49
+ $parcelClass = $data['parcel_class'];
50
+ }
51
+
52
+ /** @var Netresearch_Hermes_Model_Parcel $parcel */
53
+ $parcel = Mage::getModel('hermes/parcel')->load($shipment->getId(), 'shipment_id');
54
+
55
+ if (!$parcel || !$parcel->getId()) {
56
+ return Mage::helper('hermes/order')->createParcel($shipment, $parcelClass);
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Update list of products as scheduled in cron
62
+ *
63
+ * @param Varien_Event_Observer $observer
64
+ *
65
+ * @return Netresearch_Hermes_Model_Client
66
+ */
67
+ public function updateListOfProducts($observer)
68
+ {
69
+ $client = Mage::getModel('hermes/client');
70
+ /* @var $client Netresearch_Hermes_Model_Client */
71
+
72
+ return $client->updateListOfProducts();
73
+ }
74
+
75
+ /**
76
+ * Read data stored with shipment and persist hermes specific data
77
+ *
78
+ * @event sales_order_shipment_save_after
79
+ *
80
+ * @param Varien_Event_Observer $observer
81
+ *
82
+ * @return Netresearch_Hermes_Model_Parcel if save is successful, false otherwise
83
+ */
84
+ public function saveHermesShipmentData($observer)
85
+ {
86
+ if (!$this->config->isEnabled()) {
87
+ return false;
88
+ }
89
+
90
+ if (!$this->config->isAllowedShippingMethod($observer->getShipment()->getOrder()->getShippingMethod())) {
91
+ return false;
92
+ }
93
+
94
+ $data = Mage::app()->getRequest()->getPost();
95
+ if (empty($data)) {
96
+ return $this->saveHermesShipmentDataAutoMode($observer);
97
+ } else {
98
+ return $this->saveHermesShipmentDataManualMode($observer, $data);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * get ids of parcels to be submitted
104
+ *
105
+ * @return array
106
+ */
107
+ public function getParcelIdsToSubmit()
108
+ {
109
+ return array_merge(
110
+ Mage::getModel('hermes/parcel')->getCollection()
111
+ ->addFieldToFilter('status_code', 0)
112
+ ->getAllIds(),
113
+ Mage::getModel('hermes/parcel')->getCollection()
114
+ ->addFieldToFilter('status_code', Netresearch_Hermes_Model_Parcel::STATUS_QUEUED)
115
+ ->getAllIds(),
116
+ Mage::getModel('hermes/parcel')->getCollection()
117
+ ->addFieldToFilter('status_code', array('null' => true))
118
+ ->getAllIds()
119
+ );
120
+ }
121
+
122
+ /**
123
+ * transmit parcels to Hermes
124
+ *
125
+ * @param Varien_Event_Observer $observer
126
+ *
127
+ * @return array Result of parcel transmission
128
+ * @throws Netresearch_Hermes_Model_Client_Exception
129
+ */
130
+ public function transmitParcels($observer)
131
+ {
132
+ $parcelIds = $this->getParcelIdsToSubmit();
133
+ $chunkedParcelIds = array_chunk($parcelIds, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT);
134
+ $errorCount = 0;
135
+
136
+ foreach ($chunkedParcelIds as $currentParcelIds) {
137
+ $results = Mage::getModel('hermes/client')->sendParcels($currentParcelIds);
138
+
139
+ if (!$results
140
+ || !$results->propsImportOrdersReturn
141
+ || !$results->propsImportOrdersReturn->orderResponses
142
+ || !$results->propsImportOrdersReturn->orderResponses->OrderResponse
143
+ || count($currentParcelIds) != count($results->propsImportOrdersReturn->orderResponses->OrderResponse)
144
+ ) {
145
+ throw new Netresearch_Hermes_Model_Client_Exception('Got invalid response from Hermes web service');
146
+ }
147
+ $results = $results->propsImportOrdersReturn->orderResponses->OrderResponse;
148
+ foreach ($currentParcelIds as $offset => $parcelId) {
149
+ /** @var Netresearch_Hermes_Model_Parcel $parcel */
150
+ $parcel = Mage::getModel('hermes/parcel')->load($parcelId);
151
+ $result = $results[$offset];
152
+ $parcel->setHermesOrderNo($result->orderNo);
153
+ $parcel->setErrorCode(null);
154
+ $parcel->setErrorMessage(null);
155
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
156
+ $comment = Mage::helper('hermes')->__('Successfully transmitted to Hermes') . ' [' . $result->orderNo . ']';
157
+ if (property_exists($result, 'exceptionItems')
158
+ && is_object($result->exceptionItems)
159
+ && property_exists($result->exceptionItems, 'ExceptionItem')
160
+ ) {
161
+ $errorCodes = array();
162
+ $errorMessages = array();
163
+ foreach ($result->exceptionItems->ExceptionItem as $exception) {
164
+ $errorCodes[] = $exception->errorCode;
165
+ $errorMessages[] = $exception->errorMessage;
166
+ }
167
+ if (count($errorCodes) || count($errorMessages)) {
168
+ $parcel->setErrorCodes($errorCodes);
169
+ $parcel->setErrorMessages($errorMessages);
170
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
171
+ $errorCount++;
172
+ $comment = Mage::helper('hermes')->__(
173
+ 1 == count($errorMessages)
174
+ ? 'An error occured during transmission to Hermes' : 'Some errors occured during transmission to Hermes'
175
+ );
176
+ $comment = '<span class="error">' . $comment . ':</span><br />' . implode('<br />', $errorMessages);
177
+ }
178
+ }
179
+ $parcel->save();
180
+
181
+ $parcel->addTrack();
182
+
183
+ $parcel->getShipment()->addComment('HERMES::' . $comment);
184
+ $parcel->getShipment()->getCommentsCollection()->save();
185
+ }
186
+ }
187
+ return array('parcels' => count($parcelIds), 'errors' => $errorCount);
188
+ }
189
+
190
+ /**
191
+ * fetching orders and creating shipments and hermes parcels
192
+ *
193
+ * @return array
194
+ */
195
+ public function createParcelsForHermes($observer)
196
+ {
197
+ $result = array();
198
+ if (Mage::getModel('hermes/config')->isAutocreateEnabled()) {
199
+ $orderHelper = Mage::helper('hermes/order');
200
+ $orders = $orderHelper->getOrderCollection();
201
+ $result = $orderHelper->shipOrders($orders);
202
+ }
203
+ return $result;
204
+ }
205
+
206
+ /**
207
+ * Throws exception if enterted data was not valid
208
+ *
209
+ * @event sales_order_shipment_save_before
210
+ *
211
+ * @param Varien_Event_Observer $observer
212
+ */
213
+ public function checkShipment($observer)
214
+ {
215
+ $data = Mage::app()->getRequest()->getPost();
216
+ $shipment = $observer->getShipment();
217
+ //Check if shipping method is disabled
218
+ if (array_key_exists('ship_with_hermes', $data) && $data['ship_with_hermes'] == 1) {
219
+ if (false === Mage::getModel('hermes/config')->isAllowedShippingMethod(
220
+ $shipment->getOrder()->getShippingMethod())
221
+ ) {
222
+ return;
223
+ }
224
+ // Return false if payment method is COD and partial shipment
225
+ if (true === Mage::getModel('hermes/config')->isEnabled() &&
226
+ true === Mage::helper('hermes/order')->isPartialShipment($shipment)
227
+ ) {
228
+ $this->_setValidationFailure(Mage::helper('hermes')->__(
229
+ 'Partial shipment is not allowed for cash on delivery shipments which should be shipped with Hermes.'));
230
+ }
231
+ }
232
+ }
233
+
234
+ /**
235
+ *
236
+ *
237
+ * @param string $errorMessage
238
+ */
239
+ protected function _setValidationFailure($errorMessage)
240
+ {
241
+ $this->_validationFails = true;
242
+ /* @var $messageCollection Mage_Core_Model_Message_Collection */
243
+ $messageCollection = Mage::getSingleton('adminhtml/session')
244
+ ->getMessages();
245
+ $messages = $messageCollection->getItemsByType(Mage_Core_Model_Message::SUCCESS);
246
+ /* @var $message Mage_Core_Model_Message_Abstract */
247
+ foreach ($messages as $message) {
248
+ $messageCollection->deleteMessageByIdentifier($message->getIdentifier());
249
+ }
250
+ Mage::throwException($errorMessage);
251
+ }
252
+
253
+ /**
254
+ * Adds the Hermes parcel form to shipment creation
255
+ *
256
+ * @event core_block_abstract_to_html_after
257
+ *
258
+ * @param Varien_Event_Observer $observer
259
+ *
260
+ * @return Netresearch_Hermes_Model_Observer
261
+ */
262
+ public function addShipmentCreationForm(Varien_Event_Observer $observer)
263
+ {
264
+ /** @var Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking $block */
265
+ $block = $observer->getBlock();
266
+ /** @var Varien_Object $transport */
267
+ $transport = $observer->getTransport();
268
+
269
+ if ($this->config->isEnabled()
270
+ && $block instanceof Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking
271
+ ) {
272
+ /** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes $hermesForm */
273
+ $hermesForm = $block->getLayout()->createBlock(
274
+ 'hermes/adminhtml_sales_order_shipment_create_hermes',
275
+ 'hermes_form', array('template' => 'hermes/sales/order/shipment/create/hermes.phtml'));
276
+ $formHtml = $hermesForm->renderView();
277
+
278
+ $html = $transport->getHtml() . $formHtml;
279
+ $transport->setHtml($html);
280
+ }
281
+
282
+ return $this;
283
+ }
284
+
285
+ /**
286
+ * Adds the Hermes parcel form to shipment view
287
+ *
288
+ * @event core_block_abstract_to_html_after
289
+ *
290
+ * @param Varien_Event_Observer $observer
291
+ *
292
+ * @return Netresearch_Hermes_Model_Observer
293
+ */
294
+ public function addShipmentViewInfo(Varien_Event_Observer $observer)
295
+ {
296
+ /** @var Mage_Adminhtml_Block_Sales_Order_Shipment_View_Tracking $block */
297
+ $block = $observer->getBlock();
298
+ /** @var Varien_Object $transport */
299
+ $transport = $observer->getTransport();
300
+
301
+ if ($this->config->isEnabled()
302
+ && $block instanceof Mage_Adminhtml_Block_Sales_Order_Shipment_View_Tracking
303
+ ) {
304
+ /** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes $hermesForm */
305
+ $hermesForm = $block->getLayout()->createBlock(
306
+ 'hermes/adminhtml_sales_order_shipment_create_hermes',
307
+ 'hermes_view', array('template' => 'hermes/sales/order/shipment/view/hermes.phtml'));
308
+ $formHtml = $hermesForm->renderView();
309
+
310
+ $html = $transport->getHtml() . $formHtml;
311
+ $transport->setHtml($html);
312
+ }
313
+
314
+ return $this;
315
+ }
316
+
317
+ /**
318
+ * Adds the Hermes mass action to the sales order grid
319
+ *
320
+ * @event adminhtml_block_html_before
321
+ *
322
+ * @param Varien_Event_Observer $observer
323
+ *
324
+ * @return Netresearch_Hermes_Model_Observer
325
+ */
326
+ public function addOrderGridMassActionAndIcon(Varien_Event_Observer $observer)
327
+ {
328
+ /** @var Mage_Adminhtml_Block_Sales_Order_Grid $block */
329
+ $block = $observer->getBlock();
330
+ if ($this->config->isEnabled()
331
+ && $block instanceof Mage_Adminhtml_Block_Sales_Order_Grid
332
+ && Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments')
333
+ ) {
334
+ /* provide parcel class selection for tier price merchants */
335
+ if ($this->config->isTieredPriceMerchant()) {
336
+ $parcelClasses = $this->config->getAllProductClassesasKeyValue();
337
+ array_unshift($parcelClasses, array('value' => '', 'label' => Mage::helper('hermes')->__('use default')));
338
+ $additionalOptions = array(
339
+ 'parcelClass' => array(
340
+ 'name' => 'parcelClass',
341
+ 'type' => 'select',
342
+ 'label' => Mage::helper('hermes')->__('Parcel class'),
343
+ 'values' => $parcelClasses
344
+ )
345
+ );
346
+ } else {
347
+ $additionalOptions = array();
348
+ }
349
+ /* add checkbox to notify customer */
350
+ $additionalOptions['notifyCustomer'] = array(
351
+ 'name' => 'notifyCustomer',
352
+ 'type' => 'checkbox',
353
+ 'label' => Mage::helper('hermes')->__('Notify Customer by Email'),
354
+ );
355
+
356
+ $block->getMassactionBlock()->addItem('create_hermes_shipments', array(
357
+ 'label' => Mage::helper('hermes')->__('Create shipment(s) for Hermes'),
358
+ 'url' => $block->getUrl('adminhtml/shipment/createShipments'),
359
+ 'additional' => $additionalOptions
360
+ ));
361
+
362
+ /* Add frame callback to column, so we can add our icon html rather unobstrusive */
363
+ $column = $block->getColumn('real_order_id');
364
+ $column->setFrameCallback(array($this, 'renderHermesIcon'));
365
+ $block->addColumn('real_order_id', $column->toArray());
366
+ }
367
+
368
+ return $this;
369
+ }
370
+
371
+ /**
372
+ * Frame callback added to the real_order_id column in the sales_order_grid
373
+ *
374
+ * @param string $renderedValue
375
+ * @param Mage_Sales_Model_Order $row
376
+ * @param Mage_Adminhtml_Block_Widget_Grid_Column $column
377
+ * @param boolean $isExport
378
+ *
379
+ * @return string
380
+ */
381
+ public function renderHermesIcon($renderedValue, $row, $column, $isExport)
382
+ {
383
+ if ($isExport === false
384
+ && $column->getId() === 'real_order_id'
385
+ ) {
386
+ /** @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon $renderer */
387
+ $renderer = Mage::getBlockSingleton('hermes/adminhtml_sales_order_grid_renderer_icon');
388
+ $renderedValue = $renderedValue . $renderer->getHermesStatusOutput($row);
389
+ }
390
+ return $renderedValue;
391
+ }
392
+
393
+ /**
394
+ * Adds the Hermes mass action to the sales shipment grid
395
+ *
396
+ * @event adminhtml_block_html_before
397
+ *
398
+ * @param Varien_Event_Observer $observer
399
+ *
400
+ * @return Netresearch_Hermes_Model_Observer $this
401
+ */
402
+ public function addShipmentGridMassActionAndColumns(Varien_Event_Observer $observer)
403
+ {
404
+ /** @var Mage_Adminhtml_Block_Sales_Shipment_Grid $block */
405
+ $block = $observer->getBlock();
406
+ if ($this->config->isEnabled()
407
+ && $block instanceof Mage_Adminhtml_Block_Sales_Shipment_Grid
408
+ && Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments')
409
+ ) {
410
+ $block->getMassactionBlock()->addItem('cancelHermesParcels', array(
411
+ 'label' => Mage::helper('hermes')->__('Cancel Hermes shipments'),
412
+ 'url' => $block->getUrl('adminhtml/parcel/massCancel'),
413
+ )
414
+ );
415
+
416
+ $logo = '<img src="' . $block->getSkinUrl('images/hermes/logo_small.png') .
417
+ '" alt="Hermes" title="Hermes" height="12" align="top" id="hermes_logo_small" />';
418
+
419
+ $block->addColumn('status_code', array(
420
+ 'header' => $logo . Mage::helper('hermes')->__('Hermes Status'),
421
+ 'index' => 'status_code',
422
+ 'type' => 'options',
423
+ 'options' => Mage::getSingleton('hermes/parcel')->getStatusCodes(),
424
+ 'sortable' => true,
425
+ 'is_system' => false,
426
+ ));
427
+
428
+ }
429
+ return $this;
430
+ }
431
+
432
+ /**
433
+ * Adds join for the hermes parcel table to the shipment grid collection,
434
+ * so the data is available for the custom columns
435
+ *
436
+ * @event sales_order_shipment_grid_collection_load_before
437
+ *
438
+ * @param Varien_Event_Observer $observer
439
+ *
440
+ * @return Netresearch_Hermes_Model_Observer $this
441
+ */
442
+ public function addParcelsToShipmentGridCollection(Varien_Event_Observer $observer)
443
+ {
444
+ /** @var Mage_Sales_Model_Resource_Order_Shipment_Grid_Collection $collection */
445
+ $collection = $observer->getOrderShipmentGridCollection();
446
+ $collection->getSelect()->joinLeft(
447
+ array('hermes' => $collection->getTable('hermes/parcel')),
448
+ 'entity_id=hermes.shipment_id'
449
+ );
450
+ return $this;
451
+ }
452
+ }
app/code/community/Netresearch/Hermes/Model/Parcel.php ADDED
@@ -0,0 +1,527 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Netresearch_Hermes_Model_Parcel
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Thomas Birke <thomas.birke@netresearch.de>
29
+ * @author Christoph Aßmann <christoph.assmann@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_Parcel extends Mage_Core_Model_Abstract
32
+ {
33
+ /** @var integer Parcel in queue. The code means marked as new. */
34
+ const STATUS_QUEUED = 1;
35
+
36
+ /** @var integer Parcel successfully created */
37
+ const STATUS_PROCESSED = 2;
38
+
39
+ /** @var integer Parcel in queue to be canceled */
40
+ const STATUS_CANCEL_QUEUED = 3;
41
+
42
+ /** @var integer Parcel canceled */
43
+ const STATUS_CANCELED = 4;
44
+
45
+ /** @var integer Parcel creation failed on Hermes web service */
46
+ const STATUS_NEW_FAILED = -2;
47
+
48
+ /** @var integer Parcel cancellation failed */
49
+ const STATUS_CANCEL_FAILED = -4;
50
+
51
+ /** @var integer Parcel transmission is done and can't be changed anymore (because label was printed) */
52
+ const STATUS_CLOSED = 5;
53
+
54
+ /** @var integer Parcel currenctly transmitted */
55
+ const STATUS_IN_TRANSMISSION = 20;
56
+
57
+ protected $shipment;
58
+
59
+ /**
60
+ * Constructor
61
+ *
62
+ * @see lib/Varien/Varien_Object#_construct()
63
+ * @return Netresearch_Hermes_Model_Parcel
64
+ */
65
+ protected function _construct()
66
+ {
67
+ $this->_init('hermes/parcel');
68
+ }
69
+
70
+ /**
71
+ * get associated shipment
72
+ *
73
+ * @return Mage_Sales_Model_Shipment
74
+ */
75
+ public function getShipment()
76
+ {
77
+
78
+
79
+ if (is_null($this->shipment) || $this->shipment->getId() != $this->getShipmentId()) {
80
+ $this->setShipment(Mage::getModel('sales/order_shipment')->load($this->getShipmentId()));
81
+ }
82
+ return $this->shipment;
83
+ }
84
+
85
+ /**
86
+ * set shipment this parcel is based on
87
+ *
88
+ * @throw Netresearch_Hermes_Model_Client_Exception if transformation is not possible due to some reason
89
+ *
90
+ * @param Mage_Sales_Model_Order_Shipment $shipment
91
+ * @return Netresearch_Hermes_Model_Parcel
92
+ */
93
+ public function setShipment(Mage_Sales_Model_Order_Shipment $shipment)
94
+ {
95
+ $this->shipment = $shipment;
96
+ $this->setShipmentId($shipment->getId());
97
+ $this->setShipmentIncrementId($shipment->getIncrementId());
98
+ $shippingAddress = $shipment->getShippingAddress();
99
+ $this->convertReceiverLastname()
100
+ ->convertReceiverStreet()
101
+ ->convertDistrict()
102
+ ->convertCountryCode()
103
+ ->convertEmail()
104
+ ->setReceiverCity($shippingAddress->getCity())
105
+ ->setReceiverFirstname($shippingAddress->getFirstname())
106
+ ->setReceiverTelephoneNumber($shippingAddress->getTelephone())
107
+ ->setReceiverTelephonePrefix()
108
+ ->setReceiverPostcode($shippingAddress->getPostcode())
109
+ ->setClientReferenceNumber($shipment->getIncrementId())
110
+ ->convertCompany($shipment->getCompany());
111
+ $this->validate();
112
+
113
+ return $this;
114
+ }
115
+
116
+ /**
117
+ * set concatenation of middlename and lastname as receiver lastname
118
+ *
119
+ * @return Netresearch_Hermes_Model_Parcel
120
+ */
121
+ public function convertReceiverLastname()
122
+ {
123
+ $this->setReceiverLastname(trim($this->getShipment()->getShippingAddress()->getMiddlename()
124
+ . ' ' . $this->getShipment()->getShippingAddress()->getLastname()
125
+ ));
126
+ return $this;
127
+ }
128
+
129
+ /**
130
+ * set shipping address street (including house number) and address_add
131
+ *
132
+ * @return Netresearch_Hermes_Model_Parcel
133
+ */
134
+ public function convertReceiverStreet()
135
+ {
136
+ $this->setReceiverStreet(
137
+ $this->getShipment()->getShippingAddress()->getStreet1()
138
+ );
139
+
140
+ /**
141
+ * Magento returns street lines as follows:
142
+ * -1 = concatenated by \n
143
+ * 0 or null = as array
144
+ * > 0 = single line with given number
145
+ */
146
+ $street = $this->getShipment()->getShippingAddress()->getStreet(0);
147
+ /* strip street itself */
148
+ unset($street[0]);
149
+ $addressAdd = trim(implode(' ', $street));
150
+ $this->setReceiverAddressAdd(strlen($addressAdd) ? $addressAdd : null);
151
+
152
+ return $this;
153
+ }
154
+
155
+ /**
156
+ * set district for parcels to Ireland
157
+ *
158
+ * @return Netresearch_Hermes_Model_Parcel
159
+ */
160
+ public function convertDistrict()
161
+ {
162
+ $address = $this->getShipment()->getShippingAddress();
163
+ if ('IE' == $address->getCountryId()) {
164
+ $this->setReceiverDistrict($address->getRegion());
165
+ }
166
+ return $this;
167
+ }
168
+
169
+ /**
170
+ * set 3-letter country code
171
+ *
172
+ * @return Netresearch_Hermes_Model_Parcel
173
+ */
174
+ public function convertCountryCode()
175
+ {
176
+ $countryId = $this->getShipment()->getShippingAddress()->getCountryId();
177
+ $this->setReceiverCountryCode(
178
+ Mage::helper('hermes')->getIso3CodeByIso2Code($countryId)
179
+ );
180
+ return $this;
181
+ }
182
+
183
+ /**
184
+ * if hermes should send a mail containing tracking information, we have to submit customer's email
185
+ *
186
+ * @return Netresearch_Hermes_Model_Parcel
187
+ */
188
+ public function convertEmail()
189
+ {
190
+ if (Mage::getModel('hermes/config')->isHermesMailEnabled()) {
191
+ $this->setReceiverEmail(
192
+ $this->getShipment()->getOrder()->getCustomerEmail()
193
+ );
194
+ }
195
+ return $this;
196
+ }
197
+
198
+ public function convertCompany()
199
+ {
200
+ $company = $this->getShipment()->getShippingAddress()->getCompany();
201
+ if (strlen($company)) {
202
+ if (0 == strlen(trim($this->getReceiverAddressAdd()))) {
203
+ $this->setReceiverAddressAdd(
204
+ trim($this->getReceiverFirstname() . ' ' . $this->getReceiverLastname())
205
+ );
206
+ }
207
+ $this->setReceiverFirstname(null);
208
+ $this->setReceiverLastname($company);
209
+ }
210
+ }
211
+
212
+ /**
213
+ * validate according to Hermes API requirements
214
+ *
215
+ * @return void
216
+ */
217
+ public function validate()
218
+ {
219
+ if (25 < strlen(trim($this->getReceiverLastname()))) {
220
+ throw new Netresearch_Hermes_Model_Client_Exception('Field receiver_lastname must not be longer than 25 characters');
221
+ }
222
+ }
223
+
224
+ /**
225
+ * parcel transmission is queued
226
+ *
227
+ * @return boolean
228
+ */
229
+ public function isQueued()
230
+ {
231
+ return self::STATUS_QUEUED == $this->getStatusCode();
232
+ }
233
+
234
+ /**
235
+ * parcel transmission is processed
236
+ *
237
+ * @return boolean
238
+ */
239
+ public function isProcessed()
240
+ {
241
+ return self::STATUS_PROCESSED == $this->getStatusCode();
242
+ }
243
+
244
+ /**
245
+ * parcel is queued to be canceled
246
+ *
247
+ * @return boolean
248
+ */
249
+ public function isQueuedToCancel()
250
+ {
251
+ return self::STATUS_CANCEL_QUEUED == $this->getStatusCode();
252
+ }
253
+
254
+ /**
255
+ * parcel is queued to be canceled
256
+ *
257
+ * @return boolean
258
+ */
259
+ public function isCanceled()
260
+ {
261
+ return self::STATUS_CANCELED == $this->getStatusCode();
262
+ }
263
+
264
+ /**
265
+ * Returns all statuses an there translated labels
266
+ *
267
+ * @return array
268
+ */
269
+ public function getStatusCodes()
270
+ {
271
+ return array(
272
+ self::STATUS_QUEUED => Mage::helper('hermes')->__('new (queued)'),
273
+ self::STATUS_NEW_FAILED => Mage::helper('hermes')->__('new (failed)'),
274
+ self::STATUS_PROCESSED => Mage::helper('hermes')->__('processed'),
275
+ self::STATUS_CANCEL_QUEUED => Mage::helper('hermes')->__('cancel (queued)'),
276
+ self::STATUS_CANCEL_FAILED => Mage::helper('hermes')->__('cancel (failed)'),
277
+ self::STATUS_CANCELED => Mage::helper('hermes')->__('canceled'),
278
+ self::STATUS_IN_TRANSMISSION => Mage::helper('hermes')->__('in transmission'),
279
+ self::STATUS_CLOSED => Mage::helper('hermes')->__('closed'),
280
+ );
281
+ }
282
+
283
+ /**
284
+ * Returns status caption.
285
+ *
286
+ * @return string
287
+ */
288
+ public function getStatusText()
289
+ {
290
+ $statuses = $this->getStatusCodes();
291
+ if (!array_key_exists($this->getStatusCode(), $statuses)) {
292
+ return $this->getStatusCode();
293
+ }
294
+ return $statuses[$this->getStatusCode()];
295
+ }
296
+
297
+ /**
298
+ * parcel transmission is failed
299
+ *
300
+ * @return boolean
301
+ */
302
+ public function isFailed()
303
+ {
304
+ return self::STATUS_NEW_FAILED == $this->getStatusCode();
305
+ }
306
+
307
+ /**
308
+ * parcel transmission is failed
309
+ *
310
+ * @return boolean
311
+ */
312
+ public function isCancelFailed()
313
+ {
314
+ return self::STATUS_CANCEL_FAILED == $this->getStatusCode();
315
+ }
316
+
317
+ /**
318
+ * if parcel transmission can be resumed or repeated
319
+ *
320
+ * @return boolean
321
+ */
322
+ public function canBeResumed()
323
+ {
324
+ return in_array(
325
+ $this->getStatusCode(),
326
+ array(
327
+ self::STATUS_PROCESSED,
328
+ self::STATUS_CANCEL_QUEUED,
329
+ self::STATUS_CANCELED,
330
+ self::STATUS_NEW_FAILED
331
+ )
332
+ );
333
+ }
334
+
335
+ /**
336
+ * repeat parcel transmission
337
+ *
338
+ * @return Netresearch_Hermes_Model_Parcel
339
+ */
340
+ public function repeatTransmission()
341
+ {
342
+ if (!in_array($this->getStatusCode(), array(self::STATUS_CLOSED, self::STATUS_IN_TRANSMISSION))) {
343
+ $this->setStatusCode(self::STATUS_QUEUED);
344
+ }
345
+ return $this;
346
+ }
347
+
348
+ /**
349
+ * parcel in transmission
350
+ *
351
+ * @return boolean
352
+ */
353
+ public function isInTransmission()
354
+ {
355
+ return self::STATUS_IN_TRANSMISSION == $this->getStatusCode();
356
+ }
357
+
358
+ /**
359
+ * is parcel is closed (when label was printed
360
+ *
361
+ * @return boolean
362
+ */
363
+ public function isClosed()
364
+ {
365
+ return self::STATUS_CLOSED == $this->getStatusCode();
366
+ }
367
+
368
+ public function setErrorCodes($codes)
369
+ {
370
+ $this->setErrorCode(json_encode($codes));
371
+ return $this;
372
+ }
373
+
374
+ public function getErrorCodes()
375
+ {
376
+ return json_decode($this->getErrorCode());
377
+ }
378
+
379
+ public function setErrorMessages($messages)
380
+ {
381
+ $this->setErrorMessage(json_encode($messages));
382
+ return $this;
383
+ }
384
+
385
+ public function getErrorMessages()
386
+ {
387
+ return json_decode($this->getErrorMessage());
388
+ }
389
+
390
+ public function getTrackingUrl()
391
+ {
392
+ return Mage::getModel('hermes/config')->getTrackingUrl($this);
393
+ }
394
+
395
+ /**
396
+ * gets the label of parcel and sets the state to closed (if neccessary)
397
+ *
398
+ * @param type $format the fileformat of the label
399
+ * @return string the label
400
+ * @throws Exception
401
+ */
402
+ public function getLabel($format, $labelPosition = null)
403
+ {
404
+ $label = null;
405
+ $format = strtolower(trim($format));
406
+ try {
407
+ switch ($format) {
408
+ case Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF: {
409
+ if (is_null($labelPosition)) {
410
+ $labelPosition = Mage::getModel('hermes/config')->getPdfLabelPosition();
411
+ }
412
+ $label = Mage::getModel('hermes/client')->getLabelPdf($this, $labelPosition)->getResult();
413
+ break;
414
+ }
415
+ case Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG: {
416
+ $label = Mage::getModel('hermes/client')->getLabelJpeg($this)->getResult();
417
+ break;
418
+ }
419
+ }
420
+ if (!is_null($label) && !$this->isClosed()) {
421
+ $this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
422
+ $this->save();
423
+ }
424
+ }
425
+ catch (Exception $e) {
426
+ Mage::logException($e);
427
+ throw $e;
428
+ }
429
+ return $label;
430
+ }
431
+
432
+ /**
433
+ * add track (to provide tracking url)
434
+ *
435
+ * @return Netresearch_Hermes_Model_Parcel
436
+ */
437
+ public function addTrack()
438
+ {
439
+ if (0 < strlen($this->getHermesOrderNo())) {
440
+ $shipment = $this->getShipment();
441
+ $recentTrack = $shipment->getTracksCollection()->getLastItem();
442
+ if (!$recentTrack || $recentTrack->getNumber() != $this->getHermesOrderNo()) {
443
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
444
+ $track = Mage::getModel('sales/order_shipment_track')
445
+ ->setNumber($this->getHermesOrderNo())
446
+ ->setCarrierCode(Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE)
447
+ ->setTitle($carrier->getConfigData('title'));
448
+ $shipment->addTrack($track)
449
+ ->save();
450
+ $this->notifyCustomer();
451
+ }
452
+ }
453
+ return $this;
454
+ }
455
+
456
+ /**
457
+ *
458
+ * removes tracks
459
+ *
460
+ * @return \Netresearch_Hermes_Model_Parcel
461
+ */
462
+ public function removeTrack()
463
+ {
464
+ if (0 < strlen($this->getHermesOrderNo())) {
465
+ $tracks = Mage::getModel('sales/order_shipment_track')
466
+ ->getCollection()
467
+ ->addFieldToFilter('carrier_code', Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE)
468
+ ->addFieldToFilter('order_id', $this->getShipment()->getOrderId())
469
+ ->load();
470
+ foreach ($tracks as $track) {
471
+ if ($track->getNumber() == $this->getHermesOrderNo()) {
472
+ $track->delete();
473
+ }
474
+ }
475
+ }
476
+ return $this;
477
+ }
478
+
479
+ /**
480
+ * send tracking information to the customer
481
+ *
482
+ * @return Netresearch_Hermes_Model_Parcel
483
+ */
484
+ public function notifyCustomer()
485
+ {
486
+ if (Mage::getModel('hermes/config')->isTrackingLinkMailEnabled()) {
487
+ $this->getShipment()
488
+ ->sendEmail(true)
489
+ ->setEmailSent(true)
490
+ ->save();
491
+ }
492
+ return $this;
493
+ }
494
+
495
+ public function cancel()
496
+ {
497
+ $cancellationComment = 'HERMES::' . Mage::helper('hermes')->__('Hermes parcel cancellation succeeded');
498
+
499
+ if (is_null($this->getHermesOrderNo())) {
500
+ /* simply set parcel to state canceled, if it was not transmitted to Hermes, yet */
501
+
502
+ $this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
503
+ $this->save();
504
+
505
+ /* add shipment comment */
506
+ $this->getShipment()->addComment($cancellationComment);
507
+ $this->getShipment()->getCommentsCollection()->save();
508
+ } else {
509
+ /* send cancellation request to Hermes */
510
+
511
+ $this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
512
+ if (Mage::getModel('hermes/client')->cancel($this)) {
513
+ $cancellationComment .= ' [' . $this->getHermesOrderNo() . ']';
514
+ $this->removeTrack();
515
+ $this->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
516
+ $this->setHermesOrderNo(null);
517
+ $this->save();
518
+
519
+ /* add shipment comment */
520
+ $this->getShipment()->addComment($cancellationComment);
521
+ $this->getShipment()->getCommentsCollection()->save();
522
+ } else {
523
+ throw new Exception('Parcel cancellation failed');
524
+ }
525
+ }
526
+ }
527
+ }
app/code/community/Netresearch/Hermes/Model/Shipping/Carrier/Hermes.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @author Thomas Birke <thomas.birke@netresearch.de>
20
+ * @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ * @link http://www.netresearch.de/magento/
23
+ */
24
+
25
+
26
+ /**
27
+ * Netresearch_Hermes_Model_Shipping_Carrier_Hermes
28
+ *
29
+ * @category Netresearch
30
+ * @package Netresearch_Hermes
31
+ * @author Thomas Birke <thomas.birke@netresearch.de>
32
+ * @copyright 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
33
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
34
+ * @link http://www.netresearch.de/magento/
35
+ */
36
+ class Netresearch_Hermes_Model_Shipping_Carrier_Hermes extends Mage_Shipping_Model_Carrier_Abstract
37
+ {
38
+ const CODE = 'hermes';
39
+
40
+ protected $_code = self::CODE;
41
+
42
+ public function getAllowedMethods()
43
+ {
44
+ return array($this->_code => 'Hermes');
45
+ }
46
+
47
+ public function isActive()
48
+ {
49
+ return true;
50
+ }
51
+
52
+ public function isTrackingAvailable()
53
+ {
54
+ return true;
55
+ }
56
+
57
+ /**
58
+ * we won't use this carrier for shipping rates collection,
59
+ * so we just return an empty result
60
+ *
61
+ * @see Mage_Shipping_Model_Carrier_Abstract::collectRates()
62
+ *
63
+ * @param Mage_Shipping_Model_Rate_Request $request
64
+ * @return void
65
+ */
66
+ public function collectRates(Mage_Shipping_Model_Rate_Request $request)
67
+ {
68
+ return Mage::getModel('shipping/rate_result');
69
+ }
70
+
71
+ /**
72
+ * get tracking information
73
+ *
74
+ * @see Mage_Usa_Model_Shipping_Carrier_Abstract::getTrackingInfo()
75
+ * @return Mage_Shipping_Model_Tracking_Result|false
76
+ */
77
+ public function getTrackingInfo($tracking)
78
+ {
79
+ $result = $this->getTracking($tracking);
80
+
81
+ if ($result instanceof Mage_Shipping_Model_Tracking_Result) {
82
+ if ($trackings = $result->getAllTrackings()) {
83
+ return $trackings[0];
84
+ }
85
+ } elseif (is_string($result) && 0 < strlen($result)) {
86
+ return $result;
87
+ }
88
+
89
+ return false;
90
+ }
91
+
92
+ /**
93
+ * @see Mage_Usa_Model_Shipping_Carrier_Dhl::getTracking()
94
+ * @return Mage_Shipping_Model_Tracking_Result
95
+ */
96
+ public function getTracking($trackings)
97
+ {
98
+ if (!is_array($trackings)) {
99
+ $trackings = array($trackings);
100
+ }
101
+
102
+ $result = Mage::getModel('shipping/tracking_result');
103
+ foreach ($trackings as $trackingNumber) {
104
+ $status = Mage::getModel('shipping/tracking_result_status');
105
+ $status->setCarrierTitle('Hermes');
106
+ $status->setCarrier('hermes');
107
+ $status->setTracking($trackingNumber);
108
+ $status->setPopup(true);
109
+ $status->setUrl(Mage::getModel('hermes/config')->getTrackingUrl($trackingNumber));
110
+ $result->append($status);
111
+ }
112
+
113
+ return $result;
114
+ }
115
+ }
116
+
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Payment/Methods.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes System Config Payment Methods Source
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_System_Config_Source_Payment_Methods
32
+ {
33
+ /**
34
+ * Get payment methods.
35
+ *
36
+ * @return array $methods
37
+ */
38
+ public function toOptionArray()
39
+ {
40
+ $methods = array(array('value' => '', 'label' => ''));
41
+ foreach (Mage::getStoreConfig('payment') as $code => $payment):
42
+ $payment = new ArrayObject($payment);
43
+ if (!$payment->offsetExists('title') ||
44
+ !$payment->offsetExists('active') ||
45
+ (int) $payment->offsetGet('active') !== 1):
46
+ continue;
47
+ endif;
48
+ $methods[$code] = array(
49
+ 'label' => Mage::helper('payment')->__($payment->offsetGet('title')),
50
+ 'value' => $code);
51
+ endforeach;
52
+ return $methods;
53
+ }
54
+ }
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelFileFormatOptions.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch _Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes System Config Shipment Label file format Source
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions
32
+ {
33
+
34
+ const PDF = 'pdf';
35
+
36
+ const JPEG = 'jpeg';
37
+
38
+ /**
39
+ * Get possible label formats e.g. pdf, jpeg as value => label array
40
+ *
41
+ * @return array $formats
42
+ */
43
+ public function toOptionArray()
44
+ {
45
+ $formatOptions = array(
46
+ array('value' => self::PDF, 'label' => 'PDF'),
47
+ );
48
+
49
+ return $formatOptions;
50
+ }
51
+
52
+ /**
53
+ * gets all label file formats
54
+ *
55
+ * @return array the fileformats
56
+ */
57
+ static public function getLabelFileFormats()
58
+ {
59
+ return array(
60
+ self::PDF,
61
+ self::JPEG
62
+ );
63
+ }
64
+
65
+ }
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/LabelPlacements.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch _Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes API client unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements
32
+ {
33
+
34
+ /**
35
+ * Get label placement options as value => label array
36
+ *
37
+ * @return array $methods
38
+ */
39
+ public function toOptionArray()
40
+ {
41
+ $placementOptions = array(
42
+ array('value' => 1, 'label' => Mage::helper('hermes')->__('top left')),
43
+ array('value' => 2, 'label' => Mage::helper('hermes')->__('top right')),
44
+ array('value' => 3, 'label' => Mage::helper('hermes')->__('bottom left')),
45
+ array('value' => 4, 'label' => Mage::helper('hermes')->__('bottom right'))
46
+ );
47
+ return $placementOptions;
48
+ }
49
+ }
app/code/community/Netresearch/Hermes/Model/System/Config/Source/Shipping/Methods.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes System Config Shipment Methods Source
26
+ *
27
+ * @deprecated
28
+ * @category Netresearch
29
+ * @package Netresearch_Hermes
30
+ * @author André Herrn <andre.herrn@netresearch.de>
31
+ */
32
+ class Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods
33
+ extends Mage_Adminhtml_Model_System_Config_Source_Shipping_Allmethods
34
+ {
35
+ /**
36
+ * Get shipping methods.
37
+ *
38
+ * @return array $methods
39
+ */
40
+ public function toOptionArray($isActiveOnlyFlag = false)
41
+ {
42
+ $methods = array(array('value' => '', 'label' => ''));
43
+
44
+ $carriers = new Mage_Shipping_Model_Config();
45
+ $carriers = $carriers->getAllCarriers();
46
+
47
+ foreach ($carriers as $carrier)
48
+ {
49
+ try {
50
+ $className = Mage::getStoreConfig('carriers/'.$carrier->getId().'/model');
51
+ if ($className)
52
+ {
53
+ $obj = Mage::getModel($className);
54
+ foreach ($obj->getAllowedMethods() as $key=>$method)
55
+ {
56
+ $code = $carrier->getId()."_".$key;
57
+ $title = $method." (".$carrier->getId().")";
58
+ $methods[$code] = array(
59
+ 'label' => $title,
60
+ 'value' => $code);
61
+ }
62
+ }
63
+ }
64
+ catch (Exception $e) {
65
+ //Some carries seem to be fake carrier and have no valid methods (f.e. M2E)
66
+ }
67
+ }
68
+
69
+ return $methods;
70
+ }
71
+ }
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Test for Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Block_Adminhtml_Sales_Order_Grid_Renderer_IconTest extends EcomDev_PHPUnit_Test_Case
32
+ {
33
+ /**
34
+ * @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes
35
+ */
36
+ protected $block;
37
+
38
+ public function setUp()
39
+ {
40
+ $this->block = Mage::getSingleton('core/layout')
41
+ ->createBlock('hermes/adminhtml_sales_order_grid_renderer_icon');
42
+ parent::setUp();
43
+ }
44
+
45
+ /**
46
+ * @test
47
+ * @loadFixture ../../../../../../../../var/fixtures/parcels
48
+ */
49
+ public function testRender()
50
+ {
51
+ $this->assertInstanceOf('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Grid_Renderer_Icon', $this->block);
52
+ $row = new Varien_Object();
53
+ $row->setShipmentsCollection(array());
54
+ $this->assertEmpty($this->block->getHermesStatusOutput($row));
55
+
56
+ $row->setShipmentsCollection(array(
57
+ new Varien_Object(array('id' => 1)), // no parcel
58
+ new Varien_Object(array('id' => 2)), // empty (STATUS_QUEUED)
59
+ new Varien_Object(array('id' => 3)), // STATUS_QUEUED
60
+ new Varien_Object(array('id' => 4)), // STATUS_PROCESSED
61
+ ));
62
+
63
+ $pattern = ' <div class="hermes_status"><img src="%s" alt="Hermes" title="%s" /></div>';
64
+ $imagePath = $this->block->getSkinUrl('images/hermes/logo_small.png');
65
+ $message = Mage::helper('hermes')->__('%d parcels were transmitted to Hermes', 1);
66
+
67
+ $this->assertEquals(
68
+ sprintf($pattern, $imagePath, $message),
69
+ $this->block->getHermesStatusOutput($row)
70
+ );
71
+
72
+ $row->setShipmentsCollection(array(
73
+ new Varien_Object(array('id' => 1)), // no parcel
74
+ new Varien_Object(array('id' => 2)), // empty (STATUS_QUEUED)
75
+ new Varien_Object(array('id' => 3)), // STATUS_QUEUED
76
+ new Varien_Object(array('id' => 4)), // STATUS_PROCESSED
77
+ new Varien_Object(array('id' => 7)), // STATUS_NEW_FAILED
78
+ new Varien_Object(array('id' => 16)), // STATUS_CANCELED
79
+ ));
80
+
81
+ $message = Mage::helper('hermes')->__('%d parcels could not be transmitted to Hermes', 1);
82
+ $imagePath = $this->block->getSkinUrl('images/hermes/logo_small_failed.png');
83
+ $this->assertEquals(
84
+ sprintf($pattern, $imagePath, $message),
85
+ $this->block->getHermesStatusOutput($row)
86
+ );
87
+ }
88
+ }
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Grid/Renderer/IconTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest.php ADDED
@@ -0,0 +1,386 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes Sales Order Shipment Create Hermes Block unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Block_Adminhtml_Sales_Order_Shipment_Create_HermesTest extends EcomDev_PHPUnit_Test_Case
32
+ {
33
+ /**
34
+ * @var Netresearch_Hermes_Helper_Validate_Order
35
+ */
36
+ protected $helper;
37
+
38
+ /**
39
+ * @var Netresearch_Hermes_Model_Config
40
+ */
41
+ protected $config;
42
+
43
+ /**
44
+ * @var Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes
45
+ */
46
+ protected $block;
47
+
48
+ /**
49
+ * @var Mage_Core_Model_Store
50
+ */
51
+ protected $store;
52
+
53
+ public function setUp()
54
+ {
55
+ $this->helper = Mage::helper('hermes/validate_order');
56
+ $this->config = Mage::getModel('hermes/config');
57
+ $this->store = Mage::app()->getStore(0)->load(0);
58
+ $this->block = Mage::getSingleton('core/layout')
59
+ ->createBlock('hermes/adminhtml_sales_order_shipment_create_hermes');
60
+ $this->block->getValidateOrderHelper()->resetValidationErrors();
61
+ parent::setUp();
62
+ }
63
+
64
+ public function testBlockExists()
65
+ {
66
+ $this->assertTrue('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes'
67
+ == get_class($this->block));
68
+ }
69
+
70
+ /**
71
+ * @test
72
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
73
+ */
74
+ public function testIsAllowedShippingMethod()
75
+ {
76
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
77
+ Mage::register("current_shipment", $shipment);
78
+ $this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
79
+ $this->assertTrue($this->block->isAllowedShippingMethod());
80
+
81
+ $this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', 'flatrate_flatrate');
82
+ $this->assertFalse($this->block->isAllowedShippingMethod());
83
+
84
+ $this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
85
+ }
86
+
87
+ /**
88
+ * @test
89
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
90
+ */
91
+ public function testIsValidHermesShipmentValid()
92
+ {
93
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
94
+ Mage::unregister("current_shipment");
95
+ Mage::register("current_shipment", $shipment);
96
+ $this->assertTrue($this->block->isValidHermesShipment());
97
+ $this->assertEmpty($this->block->getValidationErrors());
98
+ }
99
+
100
+ /**
101
+ * @test
102
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
103
+ */
104
+ public function testIsValidHermesShipmentValidCod()
105
+ {
106
+ //set checkmo to cod and amount < 2500
107
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
108
+ Mage::unregister("current_shipment");
109
+ Mage::register("current_shipment", $shipment);
110
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
111
+ $this->assertTrue($this->block->isValidHermesShipment());
112
+ $this->assertEmpty($this->block->getValidationErrors());
113
+ }
114
+
115
+ /**
116
+ * @test
117
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
118
+ */
119
+ public function testIsValidHermesShipmentInvalidCod()
120
+ {
121
+ //set checkmo to cod and an amount > 2500
122
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
123
+ $shipment = Mage::getModel('sales/order_shipment')->load(4);
124
+ Mage::unregister("current_shipment");
125
+ Mage::register("current_shipment", $shipment);
126
+ $this->assertFalse($this->block->isValidHermesShipment());
127
+ $this->assertNotEmpty($this->block->getValidationErrors());
128
+ }
129
+
130
+ /**
131
+ * @test
132
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
133
+ */
134
+ public function testIsValidHermesShipmentInvalidUsa()
135
+ {
136
+ //check usa customer
137
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
138
+ $shipment = Mage::getModel('sales/order_shipment')->load(3);
139
+ Mage::unregister("current_shipment");
140
+ Mage::register("current_shipment", $shipment);
141
+ $this->assertFalse($this->block->isValidHermesShipment());
142
+ $this->assertNotEmpty($this->block->getValidationErrors());
143
+
144
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
145
+ }
146
+
147
+ /**
148
+ * @test
149
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
150
+ */
151
+ public function testIsValidHermesShipmentValidUk()
152
+ {
153
+ //check usa customer
154
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
155
+ $shipment = Mage::getModel('sales/order_shipment')->load(5);
156
+ Mage::unregister("current_shipment");
157
+ Mage::register("current_shipment", $shipment);
158
+ $valid = $this->block->isValidHermesShipment();
159
+ $this->assertEquals(array(), $this->block->getValidationErrors());
160
+ $this->assertTrue($valid);
161
+ }
162
+
163
+ /**
164
+ * checks if the merchand is tiered price merchand
165
+ */
166
+ public function testIsTieredPriceMerchant()
167
+ {
168
+ $this->assertTrue(is_bool($this->block->isTieredPriceMerchand()));
169
+ }
170
+
171
+ /**
172
+ * special case: germany -> the product classes contains 'all' as value
173
+ * @test
174
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
175
+ * @loadExpectation productClasses
176
+ */
177
+ public function testGetParcelClassesForCountryDeu()
178
+ {
179
+ $this->loadAndRegisterShipment(2);
180
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
181
+ $mock->expects($this->any())
182
+ ->method('getListOfProductsProducts')
183
+ ->will($this->returnValue(array(
184
+ 'DEU' => array(
185
+ 'product_classes' => array(
186
+ 'all' => array('all')
187
+ )
188
+ )
189
+ )));
190
+ $mock->expects($this->any())
191
+ ->method('getAllProductClasses')
192
+ ->will($this->returnValue(array(
193
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
194
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
195
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
196
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
197
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
198
+ )));
199
+
200
+ $this->replaceByMock('model', 'hermes/config', $mock);
201
+ $parcelClasses = $this->block->getParcelClassesForCountry();
202
+ $this->assertTrue(is_array($parcelClasses));
203
+ $this->assertTrue(sizeof($parcelClasses) > 0);
204
+ $expectedParcelClasses = $this->expected('DEU')->getProductClasses();
205
+ $this->assertEquals(sizeof($expectedParcelClasses), sizeof($parcelClasses));
206
+ // special case: all in case of germany
207
+ foreach (array_keys($parcelClasses) as $parcelClass) {
208
+ $this->assertTrue(in_array($parcelClass, $expectedParcelClasses));
209
+ }
210
+ }
211
+
212
+ /**
213
+ * @test
214
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
215
+ * @loadExpectation productClasses
216
+ *
217
+ */
218
+ public function testGetParcelClassesForCountryGBR()
219
+ {
220
+ $this->loadAndRegisterShipment(5);
221
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
222
+ $mock->expects($this->any())
223
+ ->method('getListOfProductsProducts')
224
+ ->will($this->returnValue(array(
225
+ 'GBR' => array(
226
+ 'product_classes' => array(
227
+ 'XS' => array('XS'),
228
+ 'S' => array('S'),
229
+ 'M' => array('M'),
230
+ 'L' => array('L')
231
+ )
232
+ )
233
+ )));
234
+
235
+ $this->replaceByMock('model', 'hermes/config', $mock);
236
+ $parcelClasses = $this->block->getParcelClassesForCountry();
237
+ $this->assertTrue(is_array($parcelClasses));
238
+ $expectedParcelClasses = $this->expected('GBR')->getProductClasses();
239
+ $this->assertEquals(sizeof($expectedParcelClasses), sizeof($parcelClasses));
240
+ foreach (array_keys($parcelClasses) as $parcelClass) {
241
+ $this->assertTrue(in_array($parcelClass, $expectedParcelClasses));
242
+ }
243
+ }
244
+
245
+ /**
246
+ * special case: country is not supported by hermes -> possible products
247
+ * should be empty
248
+ *
249
+ * @test
250
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
251
+ */
252
+ public function testGetParcelClassesForCountryUSA()
253
+ {
254
+ $this->loadAndRegisterShipment(3);
255
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
256
+ $mock->expects($this->any())
257
+ ->method('isAllowedCountry')
258
+ ->will($this->returnValue(false));
259
+ $this->replaceByMock('model', 'hermes/config', $mock);
260
+ $parcelClasses = $this->block->getParcelClassesForCountry();
261
+ $this->assertTrue(is_array($parcelClasses));
262
+ $this->assertTrue(sizeof($parcelClasses) === 0);
263
+ $this->assertFalse(array_key_exists('', $parcelClasses));
264
+ }
265
+
266
+ /**
267
+ * special case: if the cod is greater than > 2500€, the shipment is not
268
+ * a valid hermes shipment -> product classes should be empty in this case
269
+ *
270
+ * @test
271
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
272
+ */
273
+ public function testGetParcelClassesForCountryIsEmptyDueToInvalidCod()
274
+ {
275
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
276
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
277
+ $mock->expects($this->any())
278
+ ->method('getListOfProductsProducts')
279
+ ->will($this->returnValue(array(
280
+ 'DEU' => array(
281
+ 'product_classes' => array(
282
+ 'all' => array('all')
283
+ )
284
+ )
285
+ )));
286
+ $this->replaceByMock('model', 'hermes/config', $mock);
287
+ $mock->expects($this->any())
288
+ ->method('isPaymentMethodForCod')
289
+ ->will($this->returnValue(true));
290
+ $this->loadAndRegisterShipment(4);
291
+ $parcelClasses = $this->block->getParcelClassesForCountry();
292
+ $this->assertTrue(is_array($parcelClasses));
293
+ $this->assertTrue(sizeof($parcelClasses) === 0);
294
+ $this->assertFalse(array_key_exists('', $parcelClasses));
295
+ }
296
+
297
+ /**
298
+ * special case: country is not supported by hermes -> possible products
299
+ * should be empty
300
+ *
301
+ * @test
302
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
303
+ */
304
+ public function testGetParcelClassesThrowsExceptionIfDestinationNotFound()
305
+ {
306
+ $this->loadAndRegisterShipment(3);
307
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
308
+ $mock->expects($this->any())
309
+ ->method('getListOfProductsProducts')
310
+ ->will($this->returnValue(array()));
311
+ $this->replaceByMock('model', 'hermes/config', $mock);
312
+ $this->setExpectedException('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception');
313
+ $parcelClasses = $this->block->getParcelClassesForCountry();
314
+
315
+ }
316
+
317
+ /**
318
+ * special case: country is not supported by hermes -> possible products
319
+ * should be empty
320
+ *
321
+ * @test
322
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
323
+ */
324
+ public function testGetParcelClassesThrowsExceptionIfProductClassesNotFound()
325
+ {
326
+ $this->loadAndRegisterShipment(2);
327
+ $mock = $this->getMock('Netresearch_Hermes_Model_Config');
328
+ $mock->expects($this->any())
329
+ ->method('getListOfProductsProducts')
330
+ ->will($this->returnValue(array('DEU' => array())));
331
+ $this->replaceByMock('model', 'hermes/config', $mock);
332
+ $this->setExpectedException('Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Exception');
333
+ $parcelClasses = $this->block->getParcelClassesForCountry();
334
+
335
+ }
336
+
337
+ /**
338
+ * @loadFixture ../../../../../../../../var/fixtures/orderList1
339
+ * @loadFixture ../../../../../../../../var/fixtures/parcels
340
+ */
341
+ public function testGetParcel()
342
+ {
343
+ $shipment_id = 2;
344
+ $this->loadAndRegisterShipment($shipment_id);
345
+ $parcel = $this->block->getParcel();
346
+
347
+ $this->assertInstanceOf(
348
+ 'Netresearch_Hermes_Model_Parcel',
349
+ $parcel
350
+ );
351
+
352
+ $this->assertEquals(
353
+ $shipment_id,
354
+ $parcel->getData('shipment_id')
355
+ );
356
+ }
357
+
358
+ public function testIsPdfEnabled()
359
+ {
360
+ $this->assertEquals(Mage::getModel('hermes/config')
361
+ ->isPdfEnabled(), $this->block->isPdfEnabled());
362
+ }
363
+
364
+ /**
365
+ *
366
+ * @return boolean
367
+ */
368
+ public function testIsJpegEnabled()
369
+ {
370
+ $this->assertEquals(Mage::getModel('hermes/config')
371
+ ->isJpegEnabled(), $this->block->isJpegEnabled());
372
+ }
373
+
374
+
375
+
376
+ /**
377
+ * load and register a shipment identified by it's id
378
+ * @param integer $shipmentId
379
+ */
380
+ protected function loadAndRegisterShipment($shipmentId)
381
+ {
382
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
383
+ Mage::unregister("current_shipment");
384
+ Mage::register("current_shipment", $shipment);
385
+ }
386
+ }
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/expectations/productClasses.yaml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ DEU:
2
+ product_classes: ["", 'XS', 'S', 'M', 'L', 'XL']
3
+
4
+ GBR:
5
+ product_classes: ["", 'XS', 'S', 'M', 'L']
app/code/community/Netresearch/Hermes/Test/Block/Adminhtml/Sales/Order/Shipment/Create/HermesTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Controller/AbstractControllerTest.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class Netresearch_Hermes_Test_Controller_AbstractControllerTest
4
+ extends EcomDev_PHPUnit_Test_Case_Controller
5
+ {
6
+ const FAKE_USER_ID = 999999999;
7
+
8
+ public function tearDown()
9
+ {
10
+ $adminSession = Mage::getSingleton('admin/session');
11
+ $adminSession->unsetAll();
12
+ if ($adminSession->getCookie()) {
13
+ $adminSession->getCookie()->delete($adminSession->getSessionName());
14
+ }
15
+ parent::tearDown();
16
+ }
17
+
18
+ /**
19
+ * _workaroundAdminMenuIssue
20
+ *
21
+ * @see https://github.com/IvanChepurnyi/EcomDev_PHPUnit/issues/26
22
+ * @return void
23
+ */
24
+ protected function _workaroundAdminMenuIssue()
25
+ {
26
+ $menuBlock = $this->getBlockMock('adminhtml/page_menu', array('_toHtml'));
27
+ $menuBlock->expects($this->any())
28
+ ->method('_toHtml')
29
+ ->will($this->returnCallback(array($this, 'getAdminhtmlPageMenuTemplate')));
30
+ $this->replaceByMock('block', 'adminhtml/page_menu', $menuBlock);
31
+ }
32
+
33
+ public static function getAdminhtmlPageMenuTemplate()
34
+ {
35
+ if (function_exists('drawMenuLevel')) {
36
+ return '';
37
+ }
38
+ return Mage::getBlockSingleton('adminhtml/page_menu')->renderView();
39
+ }
40
+
41
+ protected function _fakeLogin()
42
+ {
43
+ $this->_workaroundAdminMenuIssue();
44
+ $this->_registerUserMock();
45
+ $this->_allowGlobalAccess();
46
+ Mage::getSingleton('adminhtml/url')->turnOffSecretKey();
47
+ $session = Mage::getSingleton('admin/session');
48
+
49
+ // segmentation fault when trying to delete old session id:
50
+ // Mage_Core_Model_Session_Abstract_Varien::regenerateSessionId()
51
+ // workaround: use <session_save><![CDATA[db]]></session_save>
52
+ Mage::getConfig()->setNode(Mage_Core_Model_Session::XML_NODE_SESSION_SAVE, 'db');
53
+
54
+ $user = $session->login('fakeuser', 'fakeuser_pass');
55
+ }
56
+
57
+ protected function _allowGlobalAccess()
58
+ {
59
+ $session = $this->getModelMock('admin/session', array('isAllowed'));
60
+ $session->expects($this->any())
61
+ ->method('isAllowed')
62
+ ->will($this->returnValue(true));
63
+ $this->replaceByMock('singleton', 'admin/session', $session);
64
+ }
65
+
66
+ /**
67
+ * Creates a mock object for admin/user Magento Model
68
+ *
69
+ * @return My_Module_Test_Controller_Adminhtml_Controller
70
+ */
71
+ protected function _registerUserMock()
72
+ {
73
+ $user = $this->getModelMock('admin/user');
74
+ $user->expects($this->any())->method('getId')->will($this->returnValue(self::FAKE_USER_ID));
75
+ $this->replaceByMock('model', 'admin/user', $user);
76
+ return $this;
77
+ }
78
+ }
app/code/community/Netresearch/Hermes/Test/Controller/ConfigControllerTest.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Hermes ConfigController unittest
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Thomas Birke <thomas.birke@netresearch.de>
29
+ */
30
+ class Netresearch_Hermes_Test_Controller_ConfigControllerTest
31
+ extends EcomDev_PHPUnit_Test_Case_Controller
32
+ {
33
+ protected function setUp()
34
+ {
35
+ parent::setUp();
36
+ $this->mockAdminUserSession();
37
+ }
38
+
39
+ /**
40
+ * Logged in to Magento with fake user to test an adminhtml controllers
41
+ */
42
+ /**
43
+ * Test whether fake user successfully logged in
44
+ */
45
+ public function testLoggedIn()
46
+ {
47
+ $this->assertTrue(Mage::getSingleton('admin/session')->isLoggedIn());
48
+ }
49
+
50
+ public function testUpdateListOfProducts()
51
+ {
52
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
53
+ $client = $this->getModelMock('hermes/client', array('updateListOfProducts'));
54
+ $this->replaceByMock('model', 'hermes/client', $client);
55
+
56
+ // client does nothing
57
+ $this->dispatch('adminhtml/config/updateListOfProducts');
58
+ $this->assertRequestRoute('adminhtml/config/updateListOfProducts');
59
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
60
+ $this->assertEquals('error: The list of products could not be updated.', $error);
61
+
62
+ // client pretends to have updated product list
63
+ $client->expects($this->any())
64
+ ->method('updateListOfProducts')
65
+ ->will($this->returnValue(true));
66
+
67
+ $this->dispatch('adminhtml/config/updateListOfProducts');
68
+ $success = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
69
+ $this->assertEquals('success: The list of products was successfully updated.', $success);
70
+
71
+ $message = 'Login failed';
72
+ $client->expects($this->any())
73
+ ->method('updateListOfProducts')
74
+ ->will($this->throwException(new Netresearch_Hermes_Model_Client_Exception($message)));
75
+
76
+ $this->dispatch('adminhtml/config/updateListOfProducts');
77
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
78
+ $this->assertEquals("error: $message", $error);
79
+ }
80
+ }
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest.php ADDED
@@ -0,0 +1,384 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Test_Controller_ParcelControllerTest
4
+ extends EcomDev_PHPUnit_Test_Case_Controller
5
+ {
6
+ protected function setUp()
7
+ {
8
+ parent::setUp();
9
+ $this->mockAdminUserSession();
10
+ }
11
+
12
+ /**
13
+ * @loadFixture ../../../var/fixtures/parcels
14
+ */
15
+ public function testEditAction()
16
+ {
17
+ $parcel_id = '6';
18
+ $this->getRequest()->setQuery('id', $parcel_id);
19
+ $this->dispatch('adminhtml/parcel/edit');
20
+ $this->assertRequestRoute('adminhtml/parcel/edit');
21
+ $this->assertLayoutBlockCreated('parcel_edit');
22
+ }
23
+
24
+ public function testSaveActionException()
25
+ {
26
+ // mock parcel so it will not be saved
27
+ $mockParcel = $this->getMock('Netresearch_Hermes_Model_Parcel', array('save'));
28
+ // define response of save method
29
+ $mockParcel->expects($this->any())
30
+ ->method('save')
31
+ ->will($this->throwException(new Zend_Db_Adapter_Exception()));
32
+ $this->replaceByMock('model', 'hermes/parcel', $mockParcel);
33
+
34
+ // dispatch request
35
+ $this->dispatch('adminhtml/parcel/save');
36
+ $this->assertRequestRoute('adminhtml/parcel/save');
37
+
38
+ // assert that error message gets displayed on failure
39
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
40
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('Receiver data could not be updated.'), $error);
41
+ }
42
+
43
+ public function testTransmitHermesParcelsActionWhenDisabled()
44
+ {
45
+ $this->markTestIncomplete('Incomplete - acl mock missing');
46
+ Mage::app()->getStore(0)->load(0)->setConfig('hermes/general/active', 0);
47
+
48
+ $uri = 'adminhtml/parcel/transmitHermesParcels';
49
+ $this->dispatch($uri);
50
+ $this->assertRequestRoute($uri);
51
+ $this->assertRequestControllerName('parcel');
52
+ $this->assertRequestActionName('transmitHermesParcels');
53
+ $this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
54
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
55
+ $this->assertEquals(
56
+ 'error: '. Mage::helper('hermes')->__('Hermes is disabled in configuration. Please enable it before trying to submit parcels.'),
57
+ $error
58
+ );
59
+ }
60
+
61
+ public function testTransmitHermesParcelsActionWhenEnabled()
62
+ {
63
+ $this->markTestIncomplete('Incomplete - acl mock missing');
64
+ Mage::app()->getStore(0)->load(0)->setConfig('hermes/general/active', 1);
65
+
66
+ $this->assertEquals(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
67
+
68
+ $observer = $this->getModelMock('hermes/observer', array('transmitParcels'));
69
+ $observer->expects($this->any())
70
+ ->method('transmitParcels')
71
+ ->will($this->returnValue(true));
72
+ $this->replaceByMock('model', 'hermes/observer', $observer);
73
+
74
+ $uri = 'adminhtml/parcel/transmitHermesParcels';
75
+ $url = Mage::getSingleton('adminhtml/url')->getUrl($uri);
76
+ $this->dispatch($uri);
77
+ $this->assertRequestRoute($uri);
78
+ $this->assertRequestControllerName('parcel');
79
+ $this->assertRequestActionName('transmitHermesParcels');
80
+ $this->assertEquals(1, Mage::getSingleton('adminhtml/session')->getMessages()->count());
81
+ $warning = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
82
+ $this->assertEquals('warning: ' . sprintf(Mage::helper('hermes')->__('No parcels were transfered to Hermes.'),0), $warning);
83
+ $this->reset();
84
+
85
+ $observer->expects($this->any())
86
+ ->method('transmitParcels')
87
+ ->will($this->throwException(new Netresearch_Hermes_Model_Client_Exception('foo')));
88
+ $this->replaceByMock('model', 'hermes/observer', $observer);
89
+
90
+ $this->dispatch($uri);
91
+ $this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
92
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
93
+ $this->assertEquals('error: foo', $error);
94
+ $this->reset();
95
+
96
+ $observer = $this->getModelMock('hermes/observer', array('transmitParcels'));
97
+ $observer->expects($this->once())
98
+ ->method('transmitParcels')
99
+ ->will($this->returnValue(array('parcels' => 10, 'errors' => 2)));
100
+ $this->replaceByMock('model', 'hermes/observer', $observer);
101
+
102
+ $this->dispatch($uri);
103
+ $this->assertNotEmpty(Mage::getSingleton('adminhtml/session')->getMessages());
104
+ $error = Mage::getSingleton('adminhtml/session')->getMessages(true)->toString();
105
+ $this->assertEquals('error: '. sprintf(Mage::helper('hermes')->__('Tried to transfer %d parcels to Hermes, but %d of them raised an error.'), 10, 2), $error);
106
+ $this->reset();
107
+ }
108
+
109
+ public function testGetLabelIsRedirectedIfParcelIdIsNotPresent()
110
+ {
111
+ $uri = 'adminhtml/parcel/getLabel/parcelId/fvbhb';
112
+ $this->dispatch($uri);
113
+ $this->assertResponseHttpCode(302);
114
+ }
115
+
116
+ /**
117
+ * @loadFixture ../../../var/fixtures/parcels
118
+ */
119
+ public function testGetLabel()
120
+ {
121
+
122
+ $uri = 'adminhtml/parcel/getLabel/parcelId/7/format/pdf';
123
+ $expected = base64_encode('Should be a pdf');
124
+ $parcelMock = $this->getModelMock('hermes/parcel', array('getLabel'));
125
+ $parcelMock->expects($this->any())
126
+ ->method('getLabel')
127
+ ->will($this->returnValue($expected));
128
+
129
+ $this->replaceByMock('model', 'hermes/parcel', $parcelMock);
130
+ $this->replaceByMock('model', 'hermes/parcel', $parcelMock);
131
+ $this->dispatch($uri);
132
+
133
+ $this->assertRequestRoute('adminhtml/parcel/getLabel');
134
+ $this->assertRequestControllerName('parcel');
135
+ $this->assertRequestActionName('getLabel');
136
+ $this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
137
+ $this->assertNotRedirect();
138
+ $this->getResponse()->getOutputBody();
139
+ $this->assertEquals($this->getResponse()->getOutputBody(), $expected);
140
+
141
+ $uri = 'adminhtml/parcel/getLabel/parcelId/7/format/jpeg';
142
+ $expected = base64_encode('Should be a pdf');
143
+ $parcelMock = $this->getModelMock('hermes/parcel', array('getLabel'));
144
+ $parcelMock->expects($this->any())
145
+ ->method('getLabel')
146
+ ->will($this->returnValue($expected));
147
+
148
+ $this->replaceByMock('model', 'hermes/parcel', $parcelMock);
149
+ $this->dispatch($uri);
150
+
151
+ $this->assertRequestRoute('adminhtml/parcel/getLabel');
152
+ $this->assertRequestControllerName('parcel');
153
+ $this->assertRequestActionName('getLabel');
154
+ $this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
155
+ $this->assertNotRedirect();
156
+ $this->getResponse()->getOutputBody();
157
+ $this->assertEquals($this->getResponse()->getOutputBody(), $expected);
158
+
159
+
160
+ $parcelMock->expects($this->any())
161
+ ->method('getLabel')
162
+ ->will($this->throwException(new Exception('dummy exception')));
163
+ $this->replaceByMock('model', 'hermes/parcel', $parcelMock);
164
+ $this->dispatch($uri);
165
+ $this->assertGreaterThan(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
166
+ }
167
+
168
+
169
+
170
+
171
+
172
+ /**
173
+ * @loadFixture ../../../var/fixtures/parcels
174
+ */
175
+ public function testRepeatParcelTransmission()
176
+ {
177
+ /* cleanup messages */
178
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
179
+
180
+ $uri = 'adminhtml/parcel/repeatTransmission/parcelId/6';
181
+
182
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipmentId', 'save'));
183
+ $parcel->expects($this->once())
184
+ ->method('save');
185
+ $parcel->expects($this->any())
186
+ ->method('getShipmentId')
187
+ ->will($this->returnValue(3));
188
+ $this->replaceByMock('model', 'hermes/parcel', $parcel);
189
+
190
+ $this->dispatch($uri);
191
+
192
+ $this->assertRequestRoute('adminhtml/parcel/repeatTransmission');
193
+ $this->assertRequestControllerName('parcel');
194
+ $this->assertRequestActionName('repeatTransmission');
195
+ $this->assertEquals(6, $this->getRequest()->getParam('parcelId'));
196
+ $this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
197
+
198
+ $messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
199
+
200
+ $success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
201
+ $expectedSuccess = Mage::helper('hermes')->__('Parcel transmission was resumed');
202
+ $this->assertEquals(1, count($success));
203
+ $this->assertEquals($expectedSuccess, $success[0]->getText());
204
+
205
+ $warnings = $messages->getItemsByType(Mage_Core_Model_Message::WARNING);
206
+ $this->assertEquals(1, count($warnings));
207
+ $expectedWarning = Mage::helper('hermes')->__(
208
+ 'Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
209
+ Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
210
+ );
211
+ $this->assertEquals($expectedWarning, $warnings[0]->getText());
212
+ }
213
+
214
+ /**
215
+ * @loadFixture parcels
216
+ */
217
+ public function testCancel()
218
+ {
219
+ $uri = 'adminhtml/parcel/cancel/parcelId/8';
220
+
221
+ $client = $this->getModelMock('hermes/client', array('cancel'));
222
+ $client->expects($this->once())
223
+ ->method('cancel')
224
+ ->will($this->returnValue(true));
225
+ $this->replaceByMock('model', 'hermes/client', $client);
226
+
227
+ $this->dispatch($uri);
228
+
229
+ $this->assertRequestRoute('adminhtml/parcel/cancel');
230
+ $this->assertRequestControllerName('parcel');
231
+ $this->assertRequestActionName('cancel');
232
+ $this->assertEquals(8, $this->getRequest()->getParam('parcelId'));
233
+ $this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
234
+ }
235
+
236
+ /**
237
+ * @loadFixture parcels
238
+ */
239
+ public function testCancelCatchException()
240
+ {
241
+ $uri = 'adminhtml/parcel/cancel/parcelId/7';
242
+
243
+ $client = $this->getModelMock('hermes/client', array('cancel'));
244
+ $client->expects($this->any())
245
+ ->method('cancel')
246
+ ->will($this->throwException(new Exception('dummy exception')));
247
+ $this->replaceByMock('model', 'hermes/client', $client);
248
+ $this->dispatch($uri);
249
+ $this->assertGreaterThan(0, Mage::getSingleton('adminhtml/session')->getMessages()->count());
250
+ }
251
+
252
+
253
+ /**
254
+ * @loadFixture ../../../var/fixtures/parcels
255
+ */
256
+ public function testCancelNotSucceeded()
257
+ {
258
+ $uri = 'adminhtml/parcel/cancel/parcelId/7';
259
+
260
+ $client = $this->getModelMock('hermes/client', array('cancel'));
261
+ $client->expects($this->once())
262
+ ->method('cancel')
263
+ ->will($this->returnValue(false));
264
+ $this->replaceByMock('model', 'hermes/client', $client);
265
+
266
+ $this->dispatch($uri);
267
+
268
+ $this->assertRequestRoute('adminhtml/parcel/cancel');
269
+ $this->assertRequestControllerName('parcel');
270
+ $this->assertRequestActionName('cancel');
271
+ $this->assertEquals(7, $this->getRequest()->getParam('parcelId'));
272
+ $this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/14');
273
+ }
274
+
275
+
276
+ /**
277
+ * @loadFixture parcels
278
+ */
279
+ public function testCancelOfParcelWithoutHermesOrderNo()
280
+ {
281
+ $uri = 'adminhtml/parcel/cancel/parcelId/8';
282
+ $this->dispatch($uri);
283
+
284
+ $this->assertRequestRoute('adminhtml/parcel/cancel');
285
+ $this->assertRequestControllerName('parcel');
286
+ $this->assertRequestActionName('cancel');
287
+ $this->assertEquals(8, $this->getRequest()->getParam('parcelId'));
288
+ $this->assertRedirectTo('adminhtml/sales_shipment/view/shipment_id/3');
289
+ }
290
+
291
+ /**
292
+ * @loadFixture ../../../var/fixtures/parcels
293
+ * @loadFixture ../../../var/fixtures/shipments
294
+ */
295
+ public function testMassCancelActionFails()
296
+ {
297
+ $uri = 'adminhtml/parcel/massCancel';
298
+
299
+ /* try to cancel not existing shipments */
300
+ $invalidParams = array(
301
+ array(
302
+ 'shipmentIds' => array(),
303
+ 'expectedMessages' => array(Mage::helper('hermes')->__('Please select at least one shipment')),
304
+ ),
305
+ array(
306
+ 'shipmentIds' => 22,
307
+ 'expectedMessages' => array(Mage::helper('hermes')->__('Please select at least one shipment')),
308
+ ),
309
+ array(
310
+ 'shipmentIds' => array(22),
311
+ 'expectedMessages' => array(Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', 1)),
312
+ ),
313
+ array(
314
+ 'shipmentIds' => array(10),
315
+ 'expectedMessages' => array(
316
+ Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', 1),
317
+ )
318
+ ),
319
+ );
320
+ foreach ($invalidParams as $invalidCall) {
321
+ $shipmentIds = $invalidCall['shipmentIds'];
322
+ $expectedMessages = $invalidCall['expectedMessages'];
323
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
324
+ $this->getRequest()->setPost('shipment_ids', $shipmentIds);
325
+ $this->dispatch($uri);
326
+
327
+ $this->assertRequestRoute('adminhtml/parcel/massCancel');
328
+ $this->assertRequestControllerName('parcel');
329
+ $this->assertRequestActionName('massCancel');
330
+ $this->assertEquals($shipmentIds, $this->getRequest()->getParam('shipment_ids'));
331
+ $this->assertRedirectTo('adminhtml/sales_shipment/index');
332
+
333
+ $messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
334
+ $success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
335
+ $error = $messages->getItemsByType(Mage_Core_Model_Message::ERROR);
336
+ $this->assertEquals(count($expectedMessages), count($error), var_export($shipmentIds, true));
337
+ foreach ($expectedMessages as $expectedMessage) {
338
+ $this->assertEquals(
339
+ 'error: ' . $expectedMessage,
340
+ current($error)->toString()
341
+ );
342
+ next($error);
343
+ }
344
+ $this->assertEquals(array(), $success);
345
+ }
346
+ }
347
+
348
+ /**
349
+ * @loadFixture parcels
350
+ */
351
+ public function testMassCancelActionSuccess()
352
+ {
353
+ $this->markTestSkipped('skipped due to errors');
354
+ $uri = 'adminhtml/parcel/massCancel';
355
+
356
+ $commentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
357
+ $commentsCollection->expects($this->any())
358
+ ->method('save')
359
+ ->will($this->returnSelf());
360
+ $this->replaceByMock('resource_model', 'sales/order_shipment_comment_collection', $commentsCollection);
361
+
362
+ /* cancel shipment */
363
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
364
+ $this->getRequest()->setPost('shipment_ids', array(3));
365
+ $this->dispatch($uri);
366
+
367
+ $this->assertRequestRoute('adminhtml/parcel/massCancel');
368
+ $this->assertRequestControllerName('parcel');
369
+ $this->assertRequestActionName('massCancel');
370
+ $this->assertEquals(array(3), $this->getRequest()->getParam('shipment_ids'));
371
+ $this->assertRedirectTo('adminhtml/sales_shipment/index');
372
+
373
+ $messages = Mage::getSingleton('adminhtml/session')->getMessages(true);
374
+ $success = $messages->getItemsByType(Mage_Core_Model_Message::SUCCESS);
375
+ $error = $messages->getItemsByType(Mage_Core_Model_Message::ERROR);
376
+
377
+ $this->assertEquals(0, count($error));
378
+ $this->assertEquals(1, count($success));
379
+ $this->assertEquals(
380
+ 'success: ' . Mage::helper('hermes')->__('Canceled %s Hermes shipments', 1),
381
+ current($success)->toString()
382
+ );
383
+ }
384
+ }
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/.gitkeep ADDED
@@ -0,0 +1 @@
 
1
+ directory is mandatory for shared fixtures…
app/code/community/Netresearch/Hermes/Test/Controller/ParcelControllerTest/fixtures/parcels.yaml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 46
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: EUR
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+
12
+ sales/shipment:
13
+ - entity_id: 2
14
+ increment_id: 1000000001
15
+ order_id: 31
16
+ shipping_address_id: 46
17
+
18
+ - entity_id: 3
19
+ increment_id: 1000000002
20
+ order_id: 31
21
+ shipping_address_id: 46
22
+
23
+ hermes/parcel:
24
+ - id: 7
25
+ shipment_id: 2
26
+ shipping_method: 'flatrate_flatrate'
27
+ receiver_firstname: 'Hubertus'
28
+ receiver_postcode: '04229'
29
+ receiver_lastname: 'von Fürstenberg'
30
+ receiver_address_add: '21. Etage'
31
+ receiver_street: 'An der Tabaksmühle 3a'
32
+ receiver_city: 'Leipzig'
33
+ receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
34
+ receiver_country_code: 'DEU'
35
+ parcel_class: 'M'
36
+ includeCashOnDelivery: false
37
+ status_code: 2 # STATUS_PROCESSED
38
+
39
+ - id: 8
40
+ shipment_id: 3
41
+ hermes_order_no: 8
42
+ status_code: 2 # STATUS_PROCESSED
43
+
44
+ sales/order_address:
45
+ - entity_id: 45
46
+ parent_id: 31
47
+ address_type: 'shipping'
48
+ firstname: 'Hubertus'
49
+ postcode: '04229'
50
+ lastname: 'Fürstenberg'
51
+ street: 'An der Tabaksmühle 3a'
52
+ city: 'Leipzig'
53
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
54
+ country_id: 'DE'
55
+ prefix: 'Prof. Dr.'
56
+ middlename: 'von'
57
+ suffix: 'MdL'
58
+ company: 'Verein zur Abschaffung'
app/code/community/Netresearch/Hermes/Test/Controller/PermissionsDeniedControllerTest.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_Test_Controller_PermissionsDeniedControllerTest
4
+ extends EcomDev_PHPUnit_Test_Case_Controller
5
+ {
6
+ protected function setUp()
7
+ {
8
+ parent::setUp();
9
+ $this->mockAdminUserSession();
10
+ }
11
+
12
+ protected function _allowGlobalAccess()
13
+ {
14
+ $session = $this->getModelMock('admin/session', array('isAllowed'));
15
+ $session->expects($this->any())
16
+ ->method('isAllowed')
17
+ ->will($this->returnCallback(array($this, 'fakePermission')));
18
+ $this->replaceByMock('singleton', 'admin/session', $session);
19
+ }
20
+
21
+ public static function fakePermission($path)
22
+ {
23
+ return 'sales/shipment' === $path;
24
+ }
25
+
26
+ public function testCheckSectionAllowed()
27
+ {
28
+ $this->dispatch('adminhtml/parcel/transmitHermesParcels');
29
+ $this->assertRedirect();
30
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
31
+ }
32
+
33
+
34
+ }
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest.php ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes Shipment Controller Test
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Controller_ShipmentControllerTest
32
+ extends EcomDev_PHPUnit_Test_Case_Controller
33
+ {
34
+ protected function setUp()
35
+ {
36
+ parent::setUp();
37
+ $this->mockAdminUserSession();
38
+ }
39
+
40
+ /**
41
+ * @test
42
+ * @loadFixture ../../../var/fixtures/orderList1
43
+ */
44
+ public function createShipmentActionFailsDueToWrongParameters()
45
+ {
46
+ // mock parcel so it will not be saved
47
+ $mockOrderHelper = $this->getMock(
48
+ 'Netresearch_Hermes_Helper_Order',
49
+ array('shipOrders')
50
+ );
51
+ $mockOrderHelper->expects($this->any())
52
+ ->method('shipOrders')
53
+ ->will($this->returnValue(array('success' => array(),
54
+ 'errors' => array('foo')
55
+ )));
56
+
57
+ $this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
58
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
59
+
60
+ // test for errors if no order_ids passed to massAction
61
+ $this->dispatch('adminhtml/shipment/createShipments');
62
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('error');
63
+ $this->assertGreaterThan(0, count($errorMessages));
64
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('No order was selected!'), current($errorMessages)->toString());
65
+ $this->getRequest()->setPost('order_ids', array());
66
+ $this->dispatch('adminhtml/shipment/createShipments');
67
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
68
+ $successMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
69
+ $this->assertGreaterThan(0, count($errorMessages));
70
+ $this->assertEquals(0, count($successMessages));
71
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('No order was selected!'), current($errorMessages)->toString());
72
+
73
+ // test for errors if invalid order_ids were passed to mass action
74
+ $invalidOrderIds = array(1,2,3,4);
75
+ $this->getRequest()->setPost('order_ids', $invalidOrderIds);
76
+ $this->dispatch('adminhtml/shipment/createShipments');
77
+ $this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
78
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
79
+ $successMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
80
+ $this->assertEquals(0, count($successMessages));
81
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', sizeof($invalidOrderIds)),
82
+ current($errorMessages)->toString());
83
+
84
+ $this->dispatch('adminhtml/shipment/createShipments');
85
+ $messages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('error');
86
+ $this->assertGreaterThan(0, count($messages));
87
+ }
88
+
89
+
90
+ /**
91
+ *
92
+ * @loadFixture ../../../var/fixtures/orderList1
93
+ */
94
+ public function testCreateShipmentActionSucceeded()
95
+ {
96
+
97
+ // mock parcel so it will not be saved
98
+ $mockOrderHelper = $this->getMock(
99
+ 'Netresearch_Hermes_Helper_Order',
100
+ array('shipOrders')
101
+ );
102
+
103
+ // test for success messages if valid order_id (and order) is passed to mass action
104
+ $mockOrderHelper->expects($this->any())
105
+ ->method('shipOrders')
106
+ ->will($this->returnValue(array(
107
+ 'success' => array('foo'),
108
+ 'errors' => array()
109
+ )));
110
+
111
+ $this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
112
+
113
+ $this->getRequest()->setPost('order_ids', array(36));
114
+ $this->dispatch('adminhtml/shipment/createShipments');
115
+ $successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
116
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
117
+ $this->assertEquals(0, count($errorMessages));
118
+ $this->assertGreaterThan(0, count($successMessages));
119
+ $this->assertEquals('success: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) created', 1),
120
+ current($successMessages)->toString());
121
+
122
+ $warningMessages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('warning');
123
+ $this->assertEquals(
124
+ 'warning: ' . Mage::helper('hermes')->__(
125
+ 'Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
126
+ Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
127
+ ), current($warningMessages)->toString()
128
+ );
129
+
130
+ $this->assertRedirect();
131
+ }
132
+
133
+
134
+ /**
135
+ *
136
+ * @loadFixture ../../../var/fixtures/orderList1
137
+ */
138
+ public function testCreateShipmentActionFailedDueToInvalidParcel()
139
+ {
140
+ $this->markTestIncomplete('Incomplete - acl mock missing');
141
+ Mage::getSingleton('adminhtml/session')->getMessages(true);
142
+
143
+ $mockOrderHelper = $this->getMock(
144
+ 'Netresearch_Hermes_Helper_Order',
145
+ array('shipOrders')
146
+ );
147
+
148
+ $mockOrderHelper->expects($this->any())
149
+ ->method('shipOrders')
150
+ ->will($this->returnValue(array('success' => array(),
151
+ 'errors' => array('foo')
152
+ )));
153
+
154
+ $this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
155
+
156
+ $this->getRequest()->setPost('order_ids', array(37));
157
+ Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
158
+
159
+ $this->dispatch('adminhtml/shipment/createShipments');
160
+
161
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
162
+ $successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
163
+ $this->assertEquals(2, count($errorMessages));
164
+ $this->assertEquals(0, count($successMessages));
165
+ reset($errorMessages);
166
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('Order 0 threw error:', 1) . ' foo',
167
+ current($errorMessages)->toString());
168
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', 1),
169
+ next($errorMessages)->toString());
170
+
171
+ }
172
+
173
+ /**
174
+ *
175
+ * tests with one valid order and one invalid order
176
+ *
177
+ * @loadFixture ../../../var/fixtures/orderList1
178
+ */
179
+ public function testMassActionPartiallySucceeded()
180
+ {
181
+ $this->markTestIncomplete('Incomplete - acl mock missing');
182
+ $mockOrderHelper = $this->getMock(
183
+ 'Netresearch_Hermes_Helper_Order',
184
+ array('shipOrders')
185
+ );
186
+
187
+ $mockOrderHelper->expects($this->any())
188
+ ->method('shipOrders')
189
+ ->will($this->returnValue(array('success' => array('foo'),
190
+ 'errors' => array('foo')
191
+ )));
192
+
193
+ $this->replaceByMock('helper', 'hermes/order', $mockOrderHelper);
194
+
195
+ $this->getRequest()->setPost('order_ids', array(36, 37));
196
+ Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
197
+
198
+ $this->dispatch('adminhtml/shipment/createShipments');
199
+ $messages = Mage::getSingleton('adminhtml/session')->getMessages(true)->getItemsByType('success');
200
+
201
+ $this->assertGreaterThan(0, count($messages));
202
+
203
+ $this->getRequest()->setPost('order_ids', array(37));
204
+ Mage::app()->getStore(0)->load(0)->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
205
+ $this->dispatch('adminhtml/shipment/createShipments');
206
+
207
+ $errorMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('error');
208
+ $this->assertEquals(2, count($errorMessages));
209
+ reset($errorMessages);
210
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('Order 0 threw error:', 1) . ' foo',
211
+ current($errorMessages)->toString());
212
+ $this->assertEquals('error: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', 1),
213
+ next($errorMessages)->toString());
214
+
215
+ $successMessages = Mage::getSingleton('adminhtml/session')->getMessages()->getItemsByType('success');
216
+ $this->assertEquals(1, count($successMessages));
217
+ $this->assertEquals('success: ' . Mage::helper('hermes')->__('%d Hermes shipment(s) created', 1),
218
+ current($successMessages)->toString());
219
+ }
220
+
221
+ }
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Controller/ShipmentControllerTest/fixtures/dummy ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Helper/DataTest.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Netresearch_Hermes_Test_Helper_DataTest extends EcomDev_PHPUnit_Test_Case
3
+ {
4
+ public function testTrue()
5
+ {
6
+ $this->assertTrue(true);
7
+ }
8
+ }
9
+
app/code/community/Netresearch/Hermes/Test/Helper/OrderTest.php ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Netresearch_Hermes_Test_Helper_OrderTest extends EcomDev_PHPUnit_Test_Case
3
+ {
4
+ /**
5
+ * @test
6
+ * @loadFixture ../../../var/fixtures/orderList1
7
+ */
8
+ public function shipOrders()
9
+ {
10
+ $parcel = Mage::getModel('hermes/parcel');
11
+ $parcel->setId(777);
12
+
13
+ $shipment = Mage::getModel('sales/order_shipment');
14
+ $shipment->setId(7777);
15
+
16
+ $orders = Mage::getModel('sales/order')->getCollection();
17
+
18
+
19
+ $helperMock = $this->getHelperMock('hermes/order', array('createShipment', 'createParcel', 'orderCanBeShipped'));
20
+ $helperMock->expects($this->atLeastOnce())
21
+ ->method('createShipment')
22
+ ->with($this->isInstanceOf('Mage_Sales_Model_Order'))
23
+ ->will($this->returnValue($shipment));
24
+ $helperMock->expects($this->atLeastOnce())
25
+ ->method('createParcel')
26
+ ->will($this->returnValue($parcel));
27
+ $helperMock->expects($this->any())
28
+ ->method('orderCanBeShipped')
29
+ ->will($this->returnValue(true));
30
+
31
+ $this->replaceByMock('helper', 'hermes/order', $helperMock);
32
+
33
+ $shipmentMock = $this->getModelMock('sales/order_shipment', array('sendEmail'));
34
+ $shipmentMock->expects($this->any())
35
+ ->method('sendEmail')
36
+ ->will($this->returnValue(true));
37
+ $this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
38
+
39
+ $helper = Mage::helper('hermes/order');
40
+ $result = $helper->shipOrders($orders);
41
+ $this->assertEquals(array(
42
+ 'success' => array(
43
+ 100000055 => null,
44
+ 100000057 => null,
45
+ 100000058 => null,
46
+ 100000059 => null,
47
+ 100000060 => null,
48
+ 100000061 => null,
49
+ 100000062 => null,
50
+ 100000063 => null
51
+ ),
52
+ 'errors' => array(100000056 => Mage::helper('hermes')->__('This order is not automatically shippable by Hermes.'))
53
+ ), $result);
54
+ }
55
+
56
+
57
+ /**
58
+ * @test
59
+ */
60
+ public function createParcel()
61
+ {
62
+ $this->markTestIncomplete("Not a single assertion here.");
63
+
64
+ /** @var Netresearch_Hermes_Helper_Validate_Order */
65
+ $validationHelper = $this->getHelperMock('hermes/validate_order', array(
66
+ 'setOrder',
67
+ 'isShippedAsCod',
68
+ 'isValidHermesShipment'
69
+ ));
70
+
71
+ $validationHelper->expects($this->any())
72
+ ->method('isShippedAsCod')
73
+ ->will($this->returnValue(true));
74
+
75
+
76
+ /** @var Mage_Sales_Model_Order */
77
+ $order = $this->getModelMock('sales/order', array('getGrandTotal'));
78
+ $order->expects($this->any())->method('getGrandTotal')->will($this->returnValue(33));
79
+ $this->replaceByMock('model', 'sales/order', $order);
80
+
81
+ /** @var Mage_Sales_Model_Order_Shipment */
82
+ $shipment = $this->getModelMock('sales/order_shipment', array('getOrder'));
83
+ $shipment->expects($this->any())->method('getOrder')->will($this->returnValue($order));
84
+ $this->replaceByMock('model', 'sales/order_shipment', $shipment);
85
+
86
+ $validationHelper->expects($this->any())
87
+ ->method('setOrder')
88
+ ->with($this->equalTo($order))
89
+ ->will($this->returnSelf());
90
+
91
+ $this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
92
+
93
+ /** @var Netresearch_Hermes_Model_Parcel */
94
+ $parcel = $this->getModelMock('hermes/parcel', array(
95
+ 'setShipment',
96
+ 'setParcelClass',
97
+ 'setStatusCode',
98
+ 'setIncludeCashOnDelivery',
99
+ 'setAmountCashOnDeliveryEurocent',
100
+ 'save'
101
+ ));
102
+ $parcel->expects($this->any())
103
+ ->method('setShipment')
104
+ ->will($this->returnSelf());
105
+ $parcel->expects($this->any())
106
+ ->method('setParcelClass')
107
+ ->with('XXXXL')
108
+ ->will($this->returnSelf());
109
+ $parcel->expects($this->any())
110
+ ->method('setStatusCode')
111
+ ->will($this->returnSelf());
112
+ $parcel->expects($this->any())
113
+ ->method('setIncludeCashOnDelivery')
114
+ ->will($this->returnSelf());
115
+ $parcel->expects($this->any())
116
+ ->method('setAmountCashOnDeliveryEurocent')
117
+ ->will($this->returnSelf());
118
+ $parcel->expects($this->any())
119
+ ->method('save')
120
+ ->will($this->returnSelf());
121
+ $this->replaceByMock('model', 'hermes/parcel', $parcel);
122
+
123
+ Mage::helper('hermes/order')->createParcel($shipment, 'XXXXL');
124
+
125
+ /** @var Netresearch_Hermes_Helper_Validate_Order */
126
+ $validationHelper = $this->getHelperMock('hermes/validate_order', array(
127
+ 'setOrder',
128
+ 'isShippedAsCod'
129
+ ));
130
+ $validationHelper->expects($this->any())
131
+ ->method('setOrder')
132
+ ->with($this->equalTo($order))
133
+ ->will($this->returnSelf());
134
+ $validationHelper->expects($this->any())
135
+ ->method('isShippedAsCod')
136
+ ->will($this->returnValue(false));
137
+ $this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
138
+
139
+ /** @var Netresearch_Hermes_Model_Parcel */
140
+ $parcel = $this->getModelMock('hermes/parcel', array(
141
+ 'setShipment',
142
+ 'setParcelClass',
143
+ 'setStatusCode',
144
+ 'setIncludeCashOnDelivery',
145
+ 'setAmountCashOnDeliveryEurocent',
146
+ 'save'
147
+ ));
148
+ $parcel->expects($this->any())
149
+ ->method('setShipment')
150
+ ->will($this->returnSelf());
151
+ $parcel->expects($this->any())
152
+ ->method('setParcelClass')
153
+ ->with(null)
154
+ ->will($this->returnSelf());
155
+ $parcel->expects($this->any())
156
+ ->method('setStatusCode')
157
+ ->will($this->returnSelf());
158
+ $parcel->expects($this->any())
159
+ ->method('save')
160
+ ->will($this->returnSelf());
161
+ $parcel->expects($this->never())
162
+ ->method('setIncludeCashOnDelivery');
163
+ $this->replaceByMock('model', 'hermes/parcel', $parcel);
164
+
165
+ $parcel = Mage::helper('hermes/order')->createParcel($shipment);
166
+ }
167
+
168
+ /**
169
+ * @test
170
+ * @loadFixture ../../../var/fixtures/orderList1
171
+ */
172
+ public function testGetOrderCollection()
173
+ {
174
+ $config = $this->getModelMock('hermes/config', array(
175
+ 'getAutocreateOrderStatuses',
176
+ 'getInstallationDate',
177
+ 'getMaxDaysInPast'
178
+ ));
179
+ $config->expects($this->any())
180
+ ->method('getAutocreateOrderStatuses')
181
+ ->will($this->returnValue(array('processed', 'pending')));
182
+ $config->expects($this->any())
183
+ ->method('getInstallationDate')
184
+ ->will($this->returnValue('2011-01-01'));
185
+
186
+ // calculation of difference from current date to one to the fixtures (order_id: 38)
187
+ $oldDate = strtotime('2011-01-02') ;
188
+ $currentDate = strtotime(date('Y-m-d')) ;
189
+
190
+ $daysDiff = ($currentDate - $oldDate) / 86400;
191
+ $config->expects($this->any())
192
+ ->method('getMaxDaysInPast')
193
+ ->will($this->returnValue($daysDiff));
194
+
195
+ $this->replaceByMock('model', 'hermes/config', $config);
196
+
197
+ $orderHelper = Mage::helper('hermes/order');
198
+ $collection = $orderHelper->getOrderCollection();
199
+ $this->assertEquals(1, $collection->count());
200
+ }
201
+
202
+ /**
203
+ * @test
204
+ * @loadFixture ../../../var/fixtures/orderList1
205
+ */
206
+ public function testCollectionIsEmptyIfAutocreateStatesAreMisconfigured()
207
+ {
208
+ $config = $this->getModelMock('hermes/config', array(
209
+ 'getAutocreateOrderStatuses',
210
+ 'getInstallationDate',
211
+ ));
212
+
213
+ $config->expects($this->any())
214
+ ->method('getAutocreateOrderStatuses')
215
+ ->will($this->returnValue(array()));
216
+
217
+ $config->expects($this->any())
218
+ ->method('getInstallationDate')
219
+ ->will($this->returnValue('2011-01-01'));
220
+
221
+ $this->replaceByMock('model', 'hermes/config', $config);
222
+
223
+ $orderHelper = Mage::helper('hermes/order');
224
+ $collection = $orderHelper->getOrderCollection();
225
+ $this->assertEquals(0, $collection->count());
226
+ }
227
+
228
+ /**
229
+ * @test
230
+ * @loadFixture ../../../var/fixtures/orderList1
231
+ */
232
+ public function testCollectionIsEmptyIfOrdersWereBeforeInstallationDate()
233
+ {
234
+ $config = $this->getModelMock('hermes/config', array(
235
+ 'getAutocreateOrderStatuses',
236
+ 'getInstallationDate',
237
+ ));
238
+
239
+ $config->expects($this->any())
240
+ ->method('getAutocreateOrderStatuses')
241
+ ->will($this->returnValue(array('processed', 'pending')));
242
+
243
+ $config->expects($this->any())
244
+ ->method('getInstallationDate')
245
+ ->will($this->returnValue('2020-01-01'));
246
+
247
+ $this->replaceByMock('model', 'hermes/config', $config);
248
+
249
+ $orderHelper = Mage::helper('hermes/order');
250
+ $collection = $orderHelper->getOrderCollection();
251
+ $this->assertEquals(0, $collection->count());
252
+ }
253
+
254
+ /**
255
+ * @test
256
+ * @loadFixture ../../../var/fixtures/orderList1
257
+ */
258
+ public function testGetQtys()
259
+ {
260
+ $orderHelper = Mage::helper('hermes/order');
261
+ $order = Mage::getModel('sales/order')->load(38);
262
+ $this->assertEquals(0, count($orderHelper->getQtys($order)));
263
+ }
264
+
265
+ /**
266
+ * @test
267
+ * @loadFixture ../../../var/fixtures/orderList1
268
+ */
269
+ public function testIsPartialShipment()
270
+ {
271
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
272
+ $helper = Mage::helper('hermes/order');
273
+ $this->assertFalse($helper->isPartialShipment($shipment));
274
+
275
+
276
+ $validationHelper = $this->getHelperMock('hermes/validate_order', array('isShippedAsCod'));
277
+ $validationHelper->expects($this->any())
278
+ ->method('isShippedAsCod')
279
+ ->will($this->returnValue(true));
280
+ $this->replaceByMock('helper', 'hermes/validate_order', $validationHelper);
281
+
282
+ $shipment = Mage::getModel('sales/order_shipment')->load(9);
283
+ $this->assertFalse($helper->isPartialShipment($shipment));
284
+
285
+
286
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
287
+ $order = $shipment->getOrder();
288
+
289
+ $item1 = new Mage_Sales_Model_Order_Item();
290
+ $item1->setSku('0815');
291
+ $item1->setParentItemId('');
292
+ $item1->setPrice(100);
293
+ $item1->setQtyOrdered(1);
294
+ $item1->setIsVirtual(0);
295
+ $item2 = new Mage_Sales_Model_Order_Item();
296
+ $item2->setSku('4711');
297
+ $item2->setParentItemId('');
298
+ $item2->setPrice(200);
299
+ $item2->setQtyOrdered(10);
300
+ $item2->setIsVirtual(0);
301
+
302
+ $order
303
+ ->addItem($item1)
304
+ ->addItem($item2);
305
+
306
+ $shipmentItem1 = new Mage_Sales_Model_Order_Shipment_Item();
307
+ $shipmentItem1->setSku('0815');
308
+ $shipmentItem1->setPrice(100);
309
+ $shipmentItem1->setOrderItem($item1);
310
+ $shipmentItem1->getOrderItem()->setQtyShipped(1);
311
+ $shipmentItem2 = new Mage_Sales_Model_Order_Shipment_Item();
312
+ $shipmentItem2->setSku('4711');
313
+ $shipmentItem2->setPrice(100);
314
+ $shipmentItem2->setOrderItem($item2);
315
+
316
+ $shipment
317
+ ->addItem($shipmentItem1)
318
+ ->addItem($shipmentItem2);
319
+
320
+ $shipment->setOrder($order);
321
+
322
+ $this->assertTrue($helper->isPartialShipment($shipment));
323
+ }
324
+
325
+ }
326
+
app/code/community/Netresearch/Hermes/Test/Helper/OrderTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Netresearch_Hermes_Test_Helper_Validate_OrderTest extends EcomDev_PHPUnit_Test_Case
3
+ {
4
+ protected $helper;
5
+ protected $config;
6
+ protected $store;
7
+
8
+ protected function setUp()
9
+ {
10
+ parent::setUp();
11
+ $this->helper = Mage::helper('hermes/validate_order');
12
+ $this->config = Mage::getModel('hermes/config');
13
+ $this->store = Mage::app()->getStore(0)->load(0);
14
+ }
15
+
16
+ /**
17
+ * @test
18
+ * @loadFixture ../../../../var/fixtures/orderList1
19
+ */
20
+ public function testGetOrder()
21
+ {
22
+ $order = Mage::getModel('sales/order')->load(31);
23
+ $this->helper->setOrder($order);
24
+ $this->assertEquals(100000055, $this->helper->getOrder()->getIncrementId());
25
+ }
26
+
27
+ /**
28
+ * @test
29
+ * @loadFixture ../../../../var/fixtures/orderList1
30
+ */
31
+ public function testIsShippedAsCod()
32
+ {
33
+ $order = Mage::getModel('sales/order')->load(31);
34
+ $this->helper->setOrder($order);
35
+ $this->assertFalse($this->helper->isShippedAsCod());
36
+
37
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
38
+ $this->assertTrue($this->helper->isShippedAsCod());
39
+
40
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
41
+ }
42
+
43
+ /**
44
+ * @test
45
+ * @loadFixture ../../../../var/fixtures/orderList1
46
+ */
47
+ public function testIsValidHermesShipment()
48
+ {
49
+ $order = Mage::getModel('sales/order')->load(31);
50
+ $this->helper->setOrder($order);
51
+ $this->assertTrue($this->helper->isValidHermesShipment());
52
+ $this->assertEquals(0, count($this->helper->getValidationErrors()), "An validation error was encountered");
53
+ $this->helper->resetValidationErrors();
54
+
55
+ //set checkmo to cod and amount < 2500
56
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
57
+ $this->assertTrue($this->helper->isValidHermesShipment());
58
+ $this->assertEquals(0, count($this->helper->getValidationErrors()), "An validation error was encountered");
59
+ $this->helper->resetValidationErrors();
60
+
61
+ //set checkmo to cod and an amount > 2500
62
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
63
+ $order->setGrandTotal(2501);
64
+ $this->helper->setOrder($order);
65
+ $this->assertFalse($this->helper->isValidHermesShipment());
66
+ $this->assertEquals(1, count($this->helper->getValidationErrors()), "More/less then one validation error was encountered");
67
+ $this->helper->resetValidationErrors();
68
+
69
+ //check usa customer
70
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
71
+ $order = Mage::getModel('sales/order')->load(32);
72
+ $this->helper->setOrder($order);
73
+ $this->assertFalse($this->helper->isValidHermesShipment());
74
+ $this->assertEquals(1, count($this->helper->getValidationErrors()), "More/less then one validation error was encountered");
75
+ $this->helper->resetValidationErrors();
76
+
77
+ //check usa customer with cod
78
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
79
+ $this->assertFalse($this->helper->isValidHermesShipment());
80
+ $this->assertEquals(2, count($this->helper->getValidationErrors()), "More/less then two validation error was encountered");
81
+ $this->helper->resetValidationErrors();
82
+
83
+ //check usa customer with cod and amount < 2500
84
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'checkmo');
85
+ $order->setGrandTotal(2501);
86
+ $this->helper->setOrder($order);
87
+ $this->assertFalse($this->helper->isValidHermesShipment());
88
+ $this->assertEquals(3, count($this->helper->getValidationErrors()), "More/less then three validation error was encountered");
89
+ $this->helper->resetValidationErrors();
90
+
91
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', '');
92
+ }
93
+
94
+ /**
95
+ * @test
96
+ */
97
+ public function isCreatedAfterHermesInstallation()
98
+ {
99
+ $order = Mage::getModel('sales/order');
100
+ $order->setCreatedAt('2012-04-01');
101
+ $this->helper->setOrder($order);
102
+
103
+ $config = $this->getModelMock('hermes/config', array('getInstallationDate'));
104
+ $config->expects($this->any())
105
+ ->method('getInstallationDate')
106
+ ->will($this->returnValue(strtotime('2. April 2012')));
107
+ $this->replaceByMock('model', 'hermes/config', $config);
108
+
109
+ $this->assertFalse($this->helper->isCreatedAfterHermesInstallation());
110
+
111
+ $order->setCreatedAt('2012-04-03');
112
+ $this->helper->setOrder($order);
113
+
114
+
115
+
116
+ $this->assertTrue($this->helper->isCreatedAfterHermesInstallation());
117
+ }
118
+ }
119
+
app/code/community/Netresearch/Hermes/Test/Helper/Validate/OrderTest/fixtures/.gitkeep ADDED
File without changes
app/code/community/Netresearch/Hermes/Test/Model/ClientTest.php ADDED
@@ -0,0 +1,464 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes API client unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_ClientTest extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ /**
34
+ * @var Mage_Core_Model_Store
35
+ */
36
+ protected $store;
37
+
38
+ /**
39
+ * @var Netresearch_Hermes_Model_Client
40
+ */
41
+ protected $client;
42
+ protected $mockClient;
43
+
44
+ public function setUp()
45
+ {
46
+ $this->store = Mage::app()->getStore(0)->load(0);
47
+ $this->client = Mage::getModel('hermes/client');
48
+ /* mock soap client */
49
+ $this->mockClient = $this->getMock(
50
+ 'Netresearch_Hermes_Model_Client_Soap',
51
+ array('propsCheckAvailability', 'propsUserLogin', 'getLastSoapOutputHeaderObjects', 'getLastResponse', 'propsProductlnformation', 'propsListOfProductsATG'),
52
+ array(),
53
+ 'SoapClient' . md5(time().rand()),
54
+ true
55
+ );
56
+
57
+ $client = $this->getModelMock('hermes/client', array('isAvailable'));
58
+ $client->expects($this->any())
59
+ ->method('isAvailable')
60
+ ->will($this->returnValue(true));
61
+ $this->replaceByMock('model', 'hermes/client', $client);
62
+ $this->availableClient = Mage::getModel('hermes/client');
63
+ }
64
+
65
+ public function testGetSoapClient()
66
+ {
67
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
68
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
69
+
70
+ $client = Mage::getModel('hermes/client');
71
+ $soapClient = $client->getSoapClient('userToken', 'partnerToken');
72
+ /* @var $soapClient Netresearch_Hermes_Model_Client_Soap */
73
+
74
+ // check if we get back a soap client
75
+ $this->assertInstanceOf(
76
+ 'Netresearch_Hermes_Model_Client_Soap',
77
+ $soapClient
78
+ );
79
+
80
+ // check if soap headers are set accordingly
81
+ // -> currently not possible as soap headers are, once set, not readable
82
+ }
83
+
84
+ public function testClientAlias()
85
+ {
86
+ $this->assertModelAlias('hermes/client', 'Netresearch_Hermes_Model_Client');
87
+ $this->assertNotEmpty(Mage::getModel('hermes/client'), 'Client not available');
88
+ }
89
+
90
+ public function testWsdlLoading()
91
+ {
92
+ $this->store->setConfig('hermes/general/testmode', 0);
93
+ $prodWsdl = Mage::getModel('hermes/config')->getWsdl();
94
+ $this->assertFileExists(Mage::getModel('hermes/config')->getWsdl());
95
+
96
+ $this->store->setConfig('hermes/general/testmode', 1);
97
+ $testWsdl = Mage::getModel('hermes/config')->getWsdl();
98
+ $this->assertFileExists(Mage::getModel('hermes/config')->getWsdl());
99
+
100
+ $this->assertNotEquals($testWsdl, $prodWsdl, 'expected to find differing wsdl files for prod and test');
101
+ return;
102
+ $this->markTestIncomplete(
103
+ 'This test has not been implemented yet.'
104
+ );
105
+ return;
106
+
107
+ $this->assertFileExists(Mage::getModel('hermes/config')->getTestWsdl());
108
+ }
109
+
110
+ public function testApiIsAvailable()
111
+ {
112
+ $soapClient = $this->mockClient;
113
+ $soapClient->expects($this->any())
114
+ ->method('addSoapInputHeader')
115
+ ->will($this->returnValue($soapClient));
116
+
117
+ /* simulate valid response */
118
+ $response = new StdClass();
119
+ $response->propsCheckAvailabilityReturn = '1.0.0.0001';
120
+
121
+ $soapClient->expects($this->any())
122
+ ->method('propsCheckAvailability')
123
+ ->will($this->returnValue($response));
124
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
125
+ $this->assertTrue($this->client->isAvailable(), 'expected the web service to be available');
126
+ }
127
+
128
+ public function testApiIsNotAvailable()
129
+ {
130
+ $soapClient = $this->mockClient;
131
+ $soapClient->expects($this->any())
132
+ ->method('addSoapInputHeader')
133
+ ->will($this->returnValue($soapClient));
134
+
135
+ /* simulate wrong response */
136
+ $response = new StdClass();
137
+ $response->propsCheckAvailabilityReturn = '...';
138
+
139
+ $soapClient->expects($this->any())
140
+ ->method('propsCheckAvailability')
141
+ ->will($this->returnValue($response));
142
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
143
+ $this->assertFalse($this->client->isAvailable(), 'expected the web service to be not available');
144
+
145
+ $soapClient->expects($this->any())
146
+ ->method('propsCheckAvailability')
147
+ ->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
148
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
149
+ $this->assertFalse($this->client->isAvailable(), 'expected the web service to be not available');
150
+ }
151
+
152
+ public function testGetProductInformation()
153
+ {
154
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
155
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
156
+
157
+ // prepare propsListOfProductsATG mock response
158
+ $response = new StdClass();
159
+ $response->propsProductlnformationReturn = new StdClass();
160
+ $response->propsProductlnformationReturn->numberOfProducts = 5;
161
+ $response->propsProductlnformationReturn->products = new StdClass();
162
+ $response->propsProductlnformationReturn->productInfoList = array();
163
+
164
+ $soapClient = $this->mockClient;
165
+ $soapClient->expects($this->any())
166
+ ->method('propsProductlnformation')
167
+ ->will($this->returnValue($response));
168
+
169
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
170
+
171
+ $this->assertObjectHasAttribute(
172
+ 'productInfoList',
173
+ $this->availableClient->getProductInformation()
174
+ );
175
+ }
176
+
177
+ public function testGetProductInformationException()
178
+ {
179
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
180
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
181
+
182
+ $soapClient = $this->mockClient;
183
+
184
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
185
+ $soapClient->expects($this->any())
186
+ ->method('propsProductlnformation')
187
+ ->will($this->throwException($soapFault));
188
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
189
+
190
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
191
+
192
+ $this->availableClient->getProductInformation();
193
+ }
194
+
195
+ public function testUpdateListOfProducts()
196
+ {
197
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
198
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
199
+
200
+ $this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
201
+ $this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
202
+
203
+ // mock soap client
204
+ $soapClient = $this->mockClient;
205
+
206
+ // prepare propsUserLogin mock response
207
+ $loginResponse = new StdClass();
208
+ $loginResponse->propsUserLoginReturn = 'userToken';
209
+ $soapClient->expects($this->any())
210
+ ->method('propsUserLogin')
211
+ ->will($this->returnValue($loginResponse));
212
+
213
+ // prepare propsListOfProductsATG mock response
214
+
215
+ $response = new StdClass();
216
+ $response->propsListOfProductsATGReturn = new StdClass();
217
+ $response->propsListOfProductsATGReturn->numberOfProducts = 5;
218
+ $response->propsListOfProductsATGReturn->products = new StdClass();
219
+
220
+ $productInfo = new StdClass();
221
+ $productInfo->netPriceEurcent = 1102;
222
+ $productInfo->productInfo = new StdClass();
223
+ $productInfo->productInfo->parcelFormat = new stdClass();
224
+ $productInfo->productInfo->parcelFormat->parcelClass = "";
225
+ $productInfo->productInfo->parcelFormat->shortestPlusLongestEdgeCmMin = '0';
226
+ $productInfo->productInfo->parcelFormat->shortestPlusLongestEdgeCmMax = '30';
227
+ $productInfo->productInfo->parcelFormat->thridEdgeCmMax = null;
228
+ $productInfo->productInfo->parcelFormat->weightMinKg = '0.000';
229
+ $productInfo->productInfo->parcelFormat->weigthMaxKg = '25.000';
230
+
231
+ $productInfo->productInfo->deliveryDestinations = new StdClass();
232
+ $productInfo->productInfo->deliveryDestinations->DeliveryDestination = array(new StdClass());
233
+ $productInfo->productInfo->deliveryDestinations->DeliveryDestination[0]->exclusions = '';
234
+ $productInfo->productInfo->deliveryDestinations->DeliveryDestination[0]->countryCode = 'DEU';
235
+ $response->propsListOfProductsATGReturn->products->ProductWithPrice = array($productInfo);
236
+
237
+ $response->propsListOfProductsATGReturn->dated = '2012-04-13T08:34:53+00:00';
238
+ $response->propsListOfProductsATGReturn->labelAcceptanceTermsAndConditions =
239
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/label_acceptance_terms_and_conditions');
240
+ $response->propsListOfProductsATGReturn->labelAcceptanceLiabilityLimit =
241
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/label_acceptance_liability_limit');
242
+ $response->propsListOfProductsATGReturn->urlTermsAndConditions =
243
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_terms_and_conditions');
244
+ $response->propsListOfProductsATGReturn->netPriceCashOnDeliveryEurocent =
245
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/net_price_cash_on_delivery_eurocent');
246
+ $response->propsListOfProductsATGReturn->settlementType =
247
+ 'Abrechnung zum Durchschnittspreis';
248
+ $response->propsListOfProductsATGReturn->urlHermesLogogram =
249
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_hermes_logogram');
250
+ $response->propsListOfProductsATGReturn->urlLiabilityInformations =
251
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_liability_informations');
252
+ $response->propsListOfProductsATGReturn->urlPackagingGuidelines =
253
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_packaging_guidelines');
254
+ $response->propsListOfProductsATGReturn->urlPortalB2C =
255
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/url_portal_b2c');
256
+ $response->propsListOfProductsATGReturn->vatInfo =
257
+ Mage::getStoreConfig('default/hermes/api_data/props_list_of_products_atg/vat_info');
258
+
259
+ $soapClient->expects($this->any())
260
+ ->method('propsListOfProductsATG')
261
+ ->will($this->returnValue($response));
262
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
263
+
264
+ $mageConfig = $this->getMock(
265
+ 'Mage_Core_Model_Config',
266
+ array('saveConfig'),
267
+ array(),
268
+ 'Config' . md5(time().rand()),
269
+ true
270
+ );
271
+ $this->replaceByMock('model', 'core/config', $mageConfig);
272
+
273
+ // check for response in general
274
+ $listOfProducts = $this->availableClient->updateListOfProducts();
275
+ $this->assertObjectHasAttribute(
276
+ 'numberOfProducts',
277
+ $listOfProducts
278
+ );
279
+
280
+ // check that product data have been stored correctly
281
+ $config = Mage::getModel('hermes/config');
282
+ /* @var $config Netresearch_Hermes_Model_Config */
283
+
284
+ $products = $config->getListOfProductsProducts();
285
+ $this->assertEquals(
286
+ '1102',
287
+ $products['DEU']['product_classes']['all']['netPriceEurcent']
288
+ );
289
+
290
+ // check that general data have been stored correctly (especially new timestamp)
291
+ $this->assertEquals(
292
+ $listOfProducts->dated,
293
+ $config->getListOfProductsData('dated')
294
+ );
295
+
296
+ $this->assertEquals(
297
+ 'Abrechnung zum Durchschnittspreis',
298
+ $listOfProducts->settlementType
299
+ );
300
+ }
301
+
302
+ public function testFailingRequestUpdateListOfProducts()
303
+ {
304
+ $soapClient = $this->mockClient;
305
+
306
+ $response = new stdClass();
307
+ $response->propsUserLoginReturn = 'UserToken';
308
+ $soapClient->expects($this->any())
309
+ ->method('propsUserLogin')
310
+ ->will($this->returnValue($response));
311
+
312
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
313
+ $soapClient->expects($this->any())
314
+ ->method('propsListOfProductsATG')
315
+ ->will($this->throwException($soapFault));
316
+
317
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
318
+
319
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'bar');
320
+
321
+ $this->availableClient->updateListOfProducts();
322
+ }
323
+
324
+ public function testUpdateListOfProductsException()
325
+ {
326
+ // check for exception handling
327
+ $soapClient = $this->mockClient;
328
+
329
+ $response = new stdClass();
330
+ $response->propsUserLoginReturn = 'UserToken';
331
+ $soapClient->expects($this->any())
332
+ ->method('propsUserLogin')
333
+ ->will($this->returnValue($response));
334
+
335
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
336
+ $soapClient->expects($this->any())
337
+ ->method('propsListOfProductsATG')
338
+ ->will($this->throwException($soapFault));
339
+
340
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
341
+
342
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
343
+
344
+ $this->availableClient->updateListOfProducts();
345
+ }
346
+
347
+ public function testGetResponse()
348
+ {
349
+ $soapClient = $this->mockClient;
350
+ $soapClient->expects($this->any())
351
+ ->method('getLastResponse')
352
+ ->will($this->returnValue(42));
353
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
354
+ $this->assertEquals(42, $this->client->getLastResponse());
355
+ }
356
+
357
+ public function testLogin()
358
+ {
359
+ /* simulate success response header */
360
+ $responseHeader = array('PartnerToken' => 'partnerToken');
361
+
362
+ /* simulate success response */
363
+ $response = new StdClass();
364
+ $response->propsUserLoginReturn = 'userToken';
365
+
366
+ try {
367
+ $soapClient = $this->mockClient;
368
+ $soapClient->expects($this->any())
369
+ ->method('getLastSoapOutputHeaderObjects')
370
+ ->will($this->returnValue($responseHeader));
371
+ $soapClient->expects($this->any())
372
+ ->method('propsUserLogin')
373
+ ->will($this->returnValue($response));
374
+
375
+ // all subsequent calls to Mage::getModel('hermes/client_soap')
376
+ // will return the mockClient
377
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
378
+
379
+ // assert that login return user token
380
+ $this->assertEquals(
381
+ $response->propsUserLoginReturn,
382
+ $this->availableClient->login(),
383
+ 'got wrong (or no) user token'
384
+ );
385
+
386
+ // assert that user token property was set in client
387
+ $this->assertEquals(
388
+ $response->propsUserLoginReturn,
389
+ $this->availableClient->getUserToken(),
390
+ 'got wrong (or no) user token'
391
+ );
392
+
393
+ // assert that partner token property was set in client
394
+ $this->assertSame(
395
+ $responseHeader['PartnerToken'],
396
+ $this->availableClient->getPartnerToken(),
397
+ 'got wrong (or no) partner token'
398
+ );
399
+ } catch (SoapFault $e) {
400
+ $this->fail('failed to login');
401
+ }
402
+
403
+ // assert that an exception is thrown when propsUserLogin is called
404
+ $this->setUp();
405
+
406
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
407
+ $soapClient->expects($this->any())
408
+ ->method('propsUserLogin')
409
+ ->will($this->throwException($soapFault));
410
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
411
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'bar');
412
+ $this->availableClient->login();
413
+ }
414
+
415
+ /**
416
+ * test login when API is not available
417
+ *
418
+ * @test
419
+ */
420
+ public function testLoginWithApiNotAvailable()
421
+ {
422
+ $soapClient = $this->mockClient;
423
+
424
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('bar', 0);
425
+ $soapClient->expects($this->any())
426
+ ->method('propsCheckAvailability')
427
+ ->will($this->throwException($soapFault));
428
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
429
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'Hermes API is currently not available. Please try again later.');
430
+ $this->client->login();
431
+ }
432
+
433
+ /**
434
+ * temporary test method for doing HRMA-20 QA, actually querying soap api.
435
+ * to include in phpunit, use annotation "test" and run
436
+ * $ phpunit --colors --filter qaApiIsAvailable UnitTests.php
437
+ */
438
+ public function qaApiIsAvailable()
439
+ {
440
+ $this->store->setConfig('hermes/general/testmode', 1);
441
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
442
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
443
+
444
+ $this->assertTrue($this->client->isAvailable());
445
+ }
446
+ /**
447
+ * temporary test method for doing HRMA-19 QA, actually querying soap api.
448
+ * to include in phpunit, use annotation "test" and run
449
+ * $ phpunit --colors --filter qaApiLogin UnitTests.php
450
+ */
451
+ public function qaApiLogin()
452
+ {
453
+ $this->store->setConfig('hermes/general/testmode', 1);
454
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
455
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
456
+
457
+ $this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
458
+ $this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
459
+
460
+ $this->availableClient->login();
461
+ $this->assertNotNull($this->availableClient->getUserToken());
462
+ }
463
+ }
464
+
app/code/community/Netresearch/Hermes/Test/Model/ClientTest/expectations/productInformation.yaml ADDED
@@ -0,0 +1 @@
 
1
+ productInfoList: 5
app/code/community/Netresearch/Hermes/Test/Model/ConfigTest.php ADDED
@@ -0,0 +1,480 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes API client unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_ConfigTest extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ /**
34
+ * @var Mage_Core_Model_Store
35
+ */
36
+ protected $store;
37
+
38
+ /**
39
+ * @var Netresearch_Hermes_Model_Config
40
+ */
41
+ protected $config;
42
+
43
+ public function setUp()
44
+ {
45
+ $this->store = Mage::app()->getStore(0)->load(0);
46
+ $this->config = Mage::getModel('hermes/config');
47
+ }
48
+
49
+ protected function setConfig($storeId = 0)
50
+ {
51
+ $this->store = Mage::app()->getStore($storeId)->load($storeId);
52
+ }
53
+
54
+ public function testConfigNodesPresent()
55
+ {
56
+ // $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'active');
57
+ // $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'testmode');
58
+ // $this->assertConfigNodeHasChild('default/netresearch_hermes/general', 'logging_enabled');
59
+ // $this->assertConfigNodeHasChild('default/netresearch_hermes/account', 'partner_id');
60
+ // $this->assertConfigNodeHasChild('default/netresearch_hermes/account', 'api_pwd');
61
+ }
62
+
63
+ public function testIsEnabled()
64
+ {
65
+ $path = 'hermes/general/active';
66
+
67
+ //Check if module is initially disabled
68
+ $this->store->resetConfig();
69
+ $this->assertFalse($this->config->isEnabled());
70
+
71
+ $this->store->setConfig($path, 1);
72
+ $this->assertTrue($this->config->isEnabled());
73
+
74
+ $this->store->setConfig($path, 0);
75
+ $this->assertFalse($this->config->isEnabled());
76
+ }
77
+
78
+ public function testIsLoggingEnabled()
79
+ {
80
+ $path = 'hermes/general/logging_enabled';
81
+
82
+ //Check if logging is initially enabled
83
+ $this->assertTrue($this->config->isLoggingEnabled());
84
+
85
+ $this->store->setConfig($path, 1);
86
+ $this->assertTrue($this->config->isLoggingEnabled());
87
+
88
+ $this->store->setConfig($path, 0);
89
+ $this->assertFalse($this->config->isLoggingEnabled());
90
+ }
91
+
92
+ public function testIsProductionMode()
93
+ {
94
+ $path = 'hermes/general/testmode';
95
+
96
+ //Check if testmode is initially enabled
97
+ $this->assertTrue($this->config->isTestMode());
98
+
99
+ $this->store->setConfig($path, 0);
100
+ $this->assertFalse($this->config->isTestMode());
101
+ $this->assertTrue($this->config->isProductionMode());
102
+
103
+ $this->store->setConfig($path, 1);
104
+ $this->assertFalse($this->config->isProductionMode());
105
+ $this->assertTrue($this->config->isTestMode());
106
+ }
107
+
108
+ public function testGetPartnerId()
109
+ {
110
+ $path = 'hermes/account/partner_id';
111
+ $previousValue = Mage::getStoreConfig($path);
112
+ $this->assertEquals($previousValue, $this->config->getPartnerId());
113
+ $testValue = 'humbug_' . rand(0, 1000);
114
+ $this->store->setConfig($path, $testValue);
115
+ $this->assertEquals($testValue, $this->config->getPartnerId());
116
+ $this->store->setConfig($path, $previousValue);
117
+ }
118
+
119
+ public function testGetPartnerPwd()
120
+ {
121
+ $path = 'hermes/account/api_pwd';
122
+ $previousValue = Mage::getStoreConfig($path);
123
+ $this->assertEquals($previousValue, $this->config->getPartnerPwd());
124
+ $testValue = 'humbug_' . rand(0, 1000);
125
+ $this->store->setConfig($path, $testValue);
126
+ $this->assertEquals($testValue, $this->config->getPartnerPwd());
127
+ $this->store->setConfig($path, $previousValue);
128
+ }
129
+
130
+ public function testGetUsername()
131
+ {
132
+ $path = 'hermes/account/username';
133
+ $previousValue = Mage::getStoreConfig($path);
134
+ $this->assertEquals($previousValue, $this->config->getUsername());
135
+ $testValue = 'humbug_' . rand(0, 1000);
136
+ $this->store->setConfig($path, $testValue);
137
+ $this->assertEquals($testValue, $this->config->getUsername());
138
+ $this->store->setConfig($path, $previousValue);
139
+ }
140
+
141
+ public function testGetPassword()
142
+ {
143
+ $path = 'hermes/account/password';
144
+ $previousValue = Mage::getStoreConfig($path);
145
+ $this->assertEquals($previousValue, $this->config->getPassword());
146
+ $testValue = 'humbug_' . rand(0, 1000);
147
+ $this->store->setConfig($path, $testValue);
148
+ $this->assertEquals($testValue, $this->config->getPassword());
149
+ $this->store->setConfig($path, $previousValue);
150
+ }
151
+
152
+ public function testGetDisabledShippingMethods()
153
+ {
154
+ $this->assertEquals('', Mage::getStoreConfig('hermes/shipment_options/disabled_shipping_methods'), "Disabled Shipping Methods are not empty by default");
155
+ }
156
+
157
+ public function testCodOrders()
158
+ {
159
+ $this->assertEquals('', Mage::getStoreConfig('hermes/shipment_options/cod_payment_methods'), "Payment Methods for COD Orders are not empty by default");
160
+ }
161
+
162
+ public function testIsAllowedShippingMethod()
163
+ {
164
+ $path = 'hermes/shipment_options/disabled_shipping_methods';
165
+
166
+ //Test if unexisting "custom_shipping_method" is allowed
167
+ $this->assertTrue($this->config->isAllowedShippingMethod('custom_shipping_method'));
168
+
169
+ //Set "flatrate_flatrate" to now allowed and test if it is not allowed
170
+ $this->store->setConfig($path, 'flatrate_flatrate');
171
+ $this->assertFalse($this->config->isAllowedShippingMethod('flatrate_flatrate'),
172
+ "Expected 'flatrate_flatrate' shipping method to be disabled"
173
+ );
174
+
175
+ //Reset not allowed shipping methods and test if "flatrate_flatrate" is allowed now
176
+ $this->store->setConfig($path, '');
177
+ $this->assertTrue($this->config->isAllowedShippingMethod('flatrate_flatrate'),
178
+ "Expected 'flatrate_flatrate' shipping method was not disabled"
179
+ );
180
+
181
+ //Check multistore compatibility
182
+ $this->setConfig(1);
183
+ $this->store->setConfig($path, 'flatrate_flatrate');
184
+ $this->assertTrue($this->config->isAllowedShippingMethod('flatrate_flatrate', 0));
185
+ $this->assertFalse($this->config->isAllowedShippingMethod('flatrate_flatrate', 1));
186
+ $this->store->setConfig($path, '');
187
+ $this->setConfig(0);
188
+ }
189
+
190
+ public function testIsPaymentMethodForCod()
191
+ {
192
+ $path = 'hermes/shipment_options/cod_payment_methods';
193
+
194
+ //Test if unexisting "custom_payment_method" is allowed
195
+ $this->assertFalse($this->config->isPaymentMethodForCod('custom_payment_method'));
196
+
197
+ //Set "checkmo" to cod payment method
198
+ $this->store->setConfig($path, 'checkmo');
199
+ $this->assertTrue($this->config->isPaymentMethodForCod('checkmo'),
200
+ "Expected 'checkmo' payment method is not detected as COD order"
201
+ );
202
+
203
+ //Reset cod payment methods and test if "checkmo" is not detected as cod order anymore
204
+ $this->store->setConfig($path, '');
205
+ $this->assertFalse($this->config->isPaymentMethodForCod('checkmo'),
206
+ "Expected 'checkmo' payment method is detected as COD order"
207
+ );
208
+
209
+ //Check multistore compatibility
210
+ $this->setConfig(1);
211
+ $this->store->setConfig($path, 'checkmo');
212
+ $this->assertFalse($this->config->isPaymentMethodForCod('checkmo', 0));
213
+ $this->assertTrue($this->config->isPaymentMethodForCod('checkmo', 1));
214
+ $this->store->setConfig($path, '');
215
+ $this->setConfig(0);
216
+ }
217
+
218
+ public function testGetAllProductClasses()
219
+ {
220
+ $this->assertTrue(true === is_array($this->config->getAllProductClasses()));
221
+ $this->assertEquals(
222
+ array(
223
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_SMALL,
224
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_SMALL,
225
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_MEDIUM,
226
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_LARGE,
227
+ Netresearch_Hermes_Model_Config::PRODUCT_CLASS_EXTRA_LARGE
228
+ ),
229
+ $this->config->getAllProductClasses(),
230
+ 'Not all product classes were returned'
231
+ );
232
+ }
233
+
234
+ public function testGetAllowedCountries()
235
+ {
236
+ $this->assertTrue(true === is_array($this->config->getAllowedCountries()));
237
+ $this->assertEquals(
238
+ explode(",", "BEL,DNK,DEU,EST,FIN,FRA,IRL,ITA,LVA,LIE,LTU,LUX,MCO,NLD,POL,AUT,PRT,SWE,CHE,SVK,SVN,ESP,CZE,HUN,GBR"),
239
+ $this->config->getAllowedCountries(),
240
+ 'Array of Hermes countries doesn\'t correspond to exptected countries'
241
+ );
242
+ }
243
+
244
+ /**
245
+ * @loadExpectation config
246
+ */
247
+ public function testGetAllowedCodCountries()
248
+ {
249
+ $this->assertTrue(true === is_array($this->config->getAllowedCodCountries()));
250
+ $this->assertEquals(
251
+ $this->expected('allowed_cod_countries')->getCountryCodes(),
252
+ $this->config->getAllowedCodCountries(),
253
+ 'Array of Hermes COD countries doesn\'t correspond to exptected countries'
254
+ );
255
+ }
256
+
257
+ public function testGetListOfProductsDataException()
258
+ {
259
+ $this->setExpectedException(
260
+ 'InvalidArgumentException',
261
+ '\'netresearch\' is not a known config key'
262
+ );
263
+
264
+ $this->config->getListOfProductsData('netresearch');
265
+ }
266
+
267
+ public function testSetListOfProductsDataException()
268
+ {
269
+ $this->setExpectedException(
270
+ 'InvalidArgumentException',
271
+ '\'netresearch\' is not a known config key'
272
+ );
273
+
274
+ $this->config->setListOfProductsData('netresearch', 'netresearch');
275
+ }
276
+
277
+ public function testIsTieredPriceMerchant()
278
+ {
279
+ $path = 'hermes/api_data/props_list_of_products_atg/settlement_type';
280
+
281
+ $this->store->setConfig($path, 'Abrechnung zum Staffelpreis');
282
+ $this->assertTrue(true === $this->config->isTieredPriceMerchant());
283
+
284
+ $this->store->setConfig($path, 'Abrechnung zum Durchschnittspreis');
285
+ $this->assertFalse(true === $this->config->isTieredPriceMerchant());
286
+ }
287
+
288
+ public function testIsFlatrateMerchant()
289
+ {
290
+ $path = 'hermes/api_data/props_list_of_products_atg/settlement_type';
291
+
292
+ $this->store->setConfig($path, 'Abrechnung zum Durchschnittspreis');
293
+ $this->assertTrue(true === $this->config->isFlatrateMerchant());
294
+
295
+ $this->store->setConfig($path, 'Abrechnung zum Staffelpreis');
296
+ $this->assertFalse(true === $this->config->isFlatrateMerchant());
297
+ }
298
+
299
+ /**
300
+ * @loadExpectation config
301
+ */
302
+ public function testIsAllowedCodCountry()
303
+ {
304
+ $path = 'hermes/general/allowed_cod_countries';
305
+ $expectedAllowedCodCountries = $this->expected('allowed_cod_countries')->getCountryCodes();
306
+ $expectedNotAllowedCodCountries = $this->expected('not_allowed_cod_countries')->getCountryCodes();
307
+
308
+ foreach ($expectedAllowedCodCountries as $codCountryCode) {
309
+ $this->assertTrue(true === $this->config->isAllowedCodCountry($codCountryCode));
310
+ }
311
+
312
+ foreach ($expectedNotAllowedCodCountries as $codCountryCode) {
313
+ $this->assertFalse(true === $this->config->isAllowedCodCountry($codCountryCode));
314
+ }
315
+ }
316
+
317
+ public function testIsPdfEnabled()
318
+ {
319
+ $path = 'hermes/shipment_label_options/shipment_label_option';
320
+
321
+ $this->store->setConfig($path, 'pdf');
322
+ $this->assertTrue(true === $this->config->isPdfEnabled());
323
+
324
+ // $this->store->setConfig($path, "jpeg,pdf");
325
+ // $this->assertTrue(true === $this->config->isPdfEnabled());
326
+ //
327
+ // $this->store->setConfig($path, 'jpeg');
328
+ // $this->assertFalse(false === $this->config->isPdfEnabled());
329
+ }
330
+
331
+ public function testIsJpegEnabled()
332
+ {
333
+ $path = 'hermes/shipment_label_options/shipment_label_option';
334
+
335
+ $this->store->setConfig($path, 'jpeg');
336
+ $this->assertTrue(true === $this->config->isJpegEnabled());
337
+
338
+ // $this->store->setConfig($path, 'jpeg,pdf');
339
+ // $this->assertTrue(true === $this->config->isJpegEnabled());
340
+ //
341
+ // $this->store->setConfig($path, 'pdf');
342
+ // $this->assertFalse(false === $this->config->isJpegEnabled());
343
+
344
+ }
345
+
346
+ public function testGetTrackingUrl()
347
+ {
348
+ $expected = 'https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=%orderNo%';
349
+ $this->assertSame($expected, $this->config->getTrackingUrl());
350
+ $parcel = Mage::getModel('hermes/parcel');
351
+ $this->assertNull($this->config->getTrackingUrl($parcel));
352
+ $this->assertNull($parcel->getTrackingUrl());
353
+ $parcel->setHermesOrderNo('1234567890');
354
+ $expected = 'https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=1234567890';
355
+ $this->assertSame($expected, $this->config->getTrackingUrl($parcel));
356
+ $this->assertSame($expected, $parcel->getTrackingUrl());
357
+ }
358
+
359
+ public function testIsTrackingLinkMailEnabled()
360
+ {
361
+ $path = 'hermes/email_options/send_email_tracking_link';
362
+
363
+ $this->store->resetConfig();
364
+
365
+ $this->store->setConfig($path, 1);
366
+ $this->assertTrue($this->config->isTrackingLinkMailEnabled());
367
+
368
+ $this->store->setConfig($path, 0);
369
+ $this->assertFalse($this->config->isTrackingLinkMailEnabled());
370
+ }
371
+
372
+ public function testGetSupportMail()
373
+ {
374
+ $path = 'hermes/info/support_mail';
375
+
376
+ $this->store->resetConfig();
377
+ $previousValue = Mage::getStoreConfig($path);
378
+
379
+ $this->store->setConfig($path, 'hermes@trash-mail.com');
380
+ $this->assertSame('hermes@trash-mail.com', $this->config->getSupportMail());
381
+
382
+ $this->store->setConfig($path, 'hermes1@trash-mail.com');
383
+ $this->assertSame('hermes1@trash-mail.com', $this->config->getSupportMail());
384
+
385
+ $this->store->setConfig($path, $previousValue);
386
+ $this->assertEquals($previousValue, $this->config->getSupportMail());
387
+ }
388
+
389
+ /**
390
+ * test isAutocreateEnabled
391
+ *
392
+ * @test
393
+ */
394
+ public function isAutocreateEnabled()
395
+ {
396
+ $path = 'hermes/autocreate/enabled';
397
+
398
+ //Check if auto creation is initially disabled
399
+ $this->store->resetConfig();
400
+ $this->assertFalse($this->config->isAutocreateEnabled());
401
+
402
+ $this->store->setConfig($path, 1);
403
+ $this->assertTrue($this->config->isAutocreateEnabled());
404
+
405
+ $this->store->setConfig($path, 0);
406
+ $this->assertFalse($this->config->isAutocreateEnabled());
407
+ }
408
+
409
+ /**
410
+ * test getAutocreateOrderStatuses
411
+ *
412
+ * @test
413
+ */
414
+ public function getAutocreateOrderStatuses()
415
+ {
416
+ $path = 'hermes/autocreate/order_status';
417
+
418
+ $this->store->resetConfig();
419
+ $previousValue = Mage::getStoreConfig($path);
420
+
421
+ $this->store->setConfig($path, 'processing,pending');
422
+ $this->assertSame(array('processing', 'pending'), $this->config->getAutocreateOrderStatuses());
423
+
424
+ $this->store->setConfig($path, 'processing');
425
+ $this->assertSame(array('processing'), $this->config->getAutocreateOrderStatuses());
426
+
427
+ $this->store->setConfig($path, $previousValue);
428
+ }
429
+
430
+ /**
431
+ * test getAutocreatePaymentMethods
432
+ *
433
+ * @test
434
+ */
435
+ public function getAutocreatePaymentMethods()
436
+ {
437
+ $path = 'hermes/autocreate/payment_methods';
438
+
439
+ $this->store->resetConfig();
440
+ $previousValue = Mage::getStoreConfig($path);
441
+
442
+ $this->store->setConfig($path, 'checkmo,ccsave');
443
+ $this->assertSame(array('checkmo', 'ccsave'), $this->config->getAutocreatePaymentMethods());
444
+
445
+ $this->store->setConfig($path, 'checkmo');
446
+ $this->assertSame(array('checkmo'), $this->config->getAutocreatePaymentMethods());
447
+
448
+ $this->store->setConfig($path, $previousValue);
449
+ }
450
+
451
+ /**
452
+ * @test
453
+ */
454
+ public function getInstallationDate()
455
+ {
456
+ $path = 'hermes/general/installation_date';
457
+
458
+ $this->store->resetConfig();
459
+ $previousValue = Mage::getStoreConfig($path);
460
+
461
+ $this->store->setConfig($path, 'gestern');
462
+ $this->assertSame('gestern', $this->config->getInstallationDate());
463
+
464
+ $this->store->setConfig($path, 'vorgestern');
465
+ $this->assertSame('vorgestern', $this->config->getInstallationDate());
466
+
467
+ $this->store->setConfig($path, $previousValue);
468
+ }
469
+
470
+ /**
471
+ *@test
472
+ */
473
+ public function getMaxDaysInPast()
474
+ {
475
+ $maxDaysInPast = $this->config->getMaxDaysInPast();
476
+ $this->assertTrue(is_numeric($maxDaysInPast));
477
+ $this->assertGreaterThan(0, $maxDaysInPast);
478
+
479
+ }
480
+ }
app/code/community/Netresearch/Hermes/Test/Model/ConfigTest/expectations/config.yaml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ allowed_cod_countries:
2
+ country_codes: ['DEU']
3
+
4
+ not_allowed_cod_countries:
5
+ country_codes: ['USA', 'MEX']
app/code/community/Netresearch/Hermes/Test/Model/ObserverTest.php ADDED
@@ -0,0 +1,550 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes observer unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_ObserverTest extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ protected $codPaymentMethods;
34
+
35
+ /**
36
+ * @var Mage_Core_Model_Store
37
+ */
38
+ protected $store;
39
+
40
+ /**
41
+ * @var Netresearch_Hermes_Model_Config
42
+ */
43
+ protected $config;
44
+
45
+ protected $mockClient;
46
+
47
+ protected $mockParcel;
48
+
49
+ /**
50
+ * Set shipment to event object
51
+ *
52
+ * @param Mage_Sales_Model_Order_Shipment $shipment
53
+ * @return Varien_Event_Observer
54
+ */
55
+ protected function prepareEvent(Mage_Sales_Model_Order_Shipment $shipment)
56
+ {
57
+ $event = new Varien_Event_Observer();
58
+ $event->setData('shipment', $shipment);
59
+
60
+ return $event;
61
+ }
62
+
63
+ public function setUp()
64
+ {
65
+ $this->store = Mage::app()->getStore(0)->load(0);
66
+ $this->store->setConfig('hermes/general/active', '1');
67
+
68
+ $this->config = Mage::getModel('hermes/config');
69
+
70
+ $this->codPaymentMethods = $this->store->getConfig('hermes/shipment_options/cod_payment_methods');
71
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', 'cod');
72
+
73
+ /* mock soap client */
74
+ $this->mockClient = $this->getMock(
75
+ 'Netresearch_Hermes_Model_Client_Soap',
76
+ array('propsUserLogin', 'propsListOfProductsATG', 'getLastSoapOutputHeaderObjects'),
77
+ array(),
78
+ 'SoapClient' . md5(time().rand()),
79
+ true
80
+ );
81
+
82
+ $client = $this->getModelMock('hermes/client', array('isAvailable'));
83
+ $client->expects($this->any())
84
+ ->method('isAvailable')
85
+ ->will($this->returnValue(true));
86
+ $this->replaceByMock('model', 'hermes/client', $client);
87
+
88
+ parent::setUp();
89
+ }
90
+
91
+ public function tearDown()
92
+ {
93
+ $this->store->setConfig('hermes/shipment_options/cod_payment_methods', $this->codPaymentMethods);
94
+ }
95
+
96
+ public function testUpdateProductList()
97
+ {
98
+ $observer = Mage::getModel('hermes/observer');
99
+
100
+ $client = $this->getModelMock('hermes/client', array('updateListOfProducts'));
101
+
102
+ $response = new stdClass();
103
+ $response->dated = '1999-02-01';
104
+
105
+ $client->expects($this->any())
106
+ ->method('updateListOfProducts')
107
+ ->will($this->returnValue($response));
108
+
109
+ $this->replaceByMock('model', 'hermes/client', $client);
110
+
111
+ // run observer method
112
+ /* @var $observer Netresearch_Hermes_Model_Observer */
113
+ $updatedList = $observer->updateListOfProducts(new Varien_Event_Observer());
114
+ $this->assertEquals($response->dated, $updatedList->dated);
115
+ }
116
+
117
+ public function testSaveHermesShipmentDataObserverDefined()
118
+ {
119
+ $this->assertEventObserverDefined(
120
+ 'adminhtml',
121
+ 'sales_order_shipment_save_after',
122
+ 'hermes/observer',
123
+ 'saveHermesShipmentData'
124
+ );
125
+ }
126
+
127
+ /**
128
+ * @loadFixture ../../../var/fixtures/orderList1
129
+ */
130
+ public function testNotSaveHermesShipmentData()
131
+ {
132
+ $observer = Mage::getModel('hermes/observer');
133
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
134
+ $event = $this->prepareEvent($shipment);
135
+
136
+ // simulate POST data
137
+ $data = array(
138
+ 'form_key' => '5PebJQbzONhCGGRI',
139
+ 'comment_text' => '',
140
+ 'shipment' => array(
141
+ 'items' => array('99' => '2') // item #99, qty 2
142
+ )
143
+ );
144
+ Mage::app()->getRequest()->setPost($data);
145
+
146
+ // (1) check behaviour when we don't know anything about Hermes shipping
147
+ $this->assertFalse($observer->saveHermesShipmentData($event));
148
+
149
+ // simulate POST data
150
+ $data = array(
151
+ 'form_key' => '5PebJQbzONhCGGRI',
152
+ 'ship_with_hermes' => '0',
153
+ 'parcel_class' => 'standard',
154
+ 'comment_text' => '',
155
+ 'shipment' => array(
156
+ 'items' => array('99' => '2') // item #99, qty 2
157
+ )
158
+ );
159
+
160
+ // (1) check behaviour when shipping should not be done with hermes
161
+ Mage::app()->getRequest()->setPost($data);
162
+ $this->assertFalse($observer->saveHermesShipmentData($event));
163
+
164
+ // (2) check behaviour when shipping method is amongst disabled methods
165
+ $this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', 'flatrate_flatrate');
166
+ $data['ship_with_hermes'] = '1';
167
+ Mage::app()->getRequest()->setPost($data);
168
+ $this->assertFalse($observer->saveHermesShipmentData($event));
169
+ $this->store->setConfig('hermes/shipment_options/disabled_shipping_methods', '');
170
+
171
+ // (3) check behaviour when extension is disabled
172
+ $this->store->setConfig('hermes/general/active', '0');
173
+ Mage::app()->getRequest()->setPost($data);
174
+ $this->assertFalse($observer->saveHermesShipmentData($event));
175
+ $this->store->setConfig('hermes/general/active', '1');
176
+ }
177
+
178
+
179
+ /**
180
+ * @loadFixture ../../../var/fixtures/orderList1
181
+ */
182
+ public function testSaveHermesShipmentData()
183
+ {
184
+ $observer = Mage::getModel('hermes/observer');
185
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
186
+ $event = $this->prepareEvent($shipment);
187
+
188
+ $this->assertNotEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
189
+
190
+ // mock parcel so it will not be saved
191
+ $mockParcel = $this->getModelMock('hermes/parcel', array('save'));
192
+
193
+ // define response of save method
194
+ $mockParcel->expects($this->any())
195
+ ->method('save')
196
+ ->will($this->returnSelf());
197
+
198
+ // all subsequent calls to Mage::getModel('hermes/parcel')
199
+ // will return the mockParcel
200
+ $this->replaceByMock('model', 'hermes/parcel', $mockParcel);
201
+
202
+ // simulate POST data
203
+ $data = array(
204
+ 'form_key' => '5PebJQbzONhCGGRI',
205
+ 'ship_with_hermes' => '1',
206
+ 'parcel_class' => 'S',
207
+ 'shipment' => array(
208
+ 'items' => array('99' => '2')
209
+ ),
210
+ 'comment_text' => ''
211
+ );
212
+
213
+ // simulate normal save
214
+ Mage::app()->getRequest()->setPost($data);
215
+ $parcel = $observer->saveHermesShipmentData($event);
216
+ $this->assertInstanceOf(
217
+ 'Netresearch_Hermes_Model_Parcel',
218
+ $parcel
219
+ );
220
+ $this->assertEquals($data['parcel_class'], $parcel->getParcelClass());
221
+ $this->assertNull($parcel->getIncludeCashOnDelivery());
222
+ $this->assertNull($parcel->getAmountCashOnDeliveryEurocent());
223
+
224
+ // simulate save with invalid parcel class
225
+ // -> parcel should be saved with empty parcel_class
226
+ $data['parcel_class'] = 'humbug';
227
+
228
+ Mage::app()->getRequest()->setPost($data);
229
+ $parcel = $observer->saveHermesShipmentData($event);
230
+ $this->assertInstanceOf(
231
+ 'Netresearch_Hermes_Model_Parcel',
232
+ $parcel
233
+ );
234
+ $this->assertNull($parcel->getParcelClass());
235
+
236
+
237
+ // simulate save by third party that does not provide hermes information
238
+ // -> parcel should not be generated
239
+ unset($data['ship_with_hermes']);
240
+ unset($data['parcel_class']);
241
+ unset($data['shipment']);
242
+
243
+ Mage::app()->getRequest()->setPost($data);
244
+ $this->assertFalse($observer->saveHermesShipmentData($event));
245
+ }
246
+
247
+ /**
248
+ * In auto mode, no post data are given.
249
+ * TODO: expand test in future sprints
250
+ *
251
+ * @loadFixture ../../../var/fixtures/orderList1
252
+ */
253
+ public function testSaveHermesShipmentDataAutoMode()
254
+ {
255
+ $observer = Mage::getModel('hermes/observer');
256
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
257
+ $event = $this->prepareEvent($shipment);
258
+
259
+ $this->assertNotEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
260
+
261
+ $parcel = $observer->saveHermesShipmentData($event);
262
+ $this->assertNull($parcel);
263
+ }
264
+
265
+ /**
266
+ * @loadFixture ../../../var/fixtures/orderList1
267
+ */
268
+ public function testSaveHermesShipmentDataCod()
269
+ {
270
+ $observer = Mage::getModel('hermes/observer');
271
+ $shipment = Mage::getModel('sales/order_shipment')->load(6);
272
+ $event = $this->prepareEvent($shipment);
273
+
274
+ $this->assertEquals('cod', $event->getShipment()->getOrder()->getPayment()->getMethod());
275
+
276
+ // mock parcel so it will not be saved
277
+ $mockParcel = $this->getModelMock('hermes/parcel', array('save'));
278
+
279
+ // define response of save method
280
+ $mockParcel->expects($this->any())
281
+ ->method('save')
282
+ ->will($this->returnSelf());
283
+
284
+ // all subsequent calls to Mage::getModel('hermes/parcel')
285
+ // will return the mockParcel
286
+ $this->replaceByMock('model', 'hermes/parcel', $mockParcel);
287
+
288
+ // simulate POST data
289
+ $data = array(
290
+ 'form_key' => '5PebJQbzONhCGGRI',
291
+ 'ship_with_hermes' => '1',
292
+ 'parcel_class' => 'XL',
293
+ 'shipment' => array(
294
+ 'items' => array('99' => '2')
295
+ ),
296
+ 'comment_text' => ''
297
+ );
298
+
299
+ // simulate normal save
300
+ Mage::app()->getRequest()->setPost($data);
301
+ $parcel = $observer->saveHermesShipmentData($event);
302
+ $this->assertInstanceOf(
303
+ 'Netresearch_Hermes_Model_Parcel',
304
+ $parcel
305
+ );
306
+ $grandTotalEurocent = 100 * $event->getShipment()->getOrder()->getGrandTotal();
307
+ $this->assertEquals('1', $parcel->getIncludeCashOnDelivery());
308
+ $this->assertEquals((int)$grandTotalEurocent, $parcel->getAmountCashOnDeliveryEurocent());
309
+ }
310
+
311
+ /**
312
+ * test getter for list of ids of parcels to submit
313
+ *
314
+ * @loadFixture ../../../var/fixtures/parcels
315
+ */
316
+ public function testGetParcelIdsToSubmit()
317
+ {
318
+ $this->assertEquals(
319
+ array(1, 2),
320
+ Mage::getModel('hermes/observer')->getParcelIdsToSubmit()
321
+ );
322
+ }
323
+
324
+ /**
325
+ * _mockClientForImportOrders
326
+ *
327
+ * @return void
328
+ */
329
+ protected function _mockClientForImportOrders($orders)
330
+ {
331
+ $result = new StdClass();
332
+ $result->propsImportOrdersReturn = new StdClass();
333
+ $result->propsImportOrdersReturn->orderResponses = new StdClass();
334
+ $result->propsImportOrdersReturn->orderResponses->OrderResponse = $orders;
335
+
336
+ $client = $this->getModelMock('hermes/client', array('sendParcels'));
337
+ $client->expects($this->once())
338
+ ->method('sendParcels')
339
+ ->will($this->returnValue($result));
340
+ $this->replaceByMock('model', 'hermes/client', $client);
341
+ }
342
+
343
+ /**
344
+ * test parcel submission
345
+ *
346
+ * @test
347
+ * @loadFixture ../../../var/fixtures/parcels
348
+ */
349
+ public function transmitParcelsSuccessfully()
350
+ {
351
+ $orders = array(new StdClass(), new StdClass());
352
+ $orders[0]->orderNo = '22';
353
+ $orders[1]->orderNo = '23';
354
+ $this->_mockClientForImportOrders($orders);
355
+
356
+ /* avoid saving shipment comments */
357
+ $shipmentCommentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
358
+ $this->replaceByMock('resource', 'sales/order_shipment_comment_collection', $shipmentCommentsCollection);
359
+
360
+
361
+ $shipmentMock = $this->getModelMock('sales/order_shipment', array('getCommentsCollection', 'addComment'));
362
+ $shipmentMock->expects($this->any())
363
+ ->method('getCommentsCollection')
364
+ ->will($this->returnValue($shipmentCommentsCollection));
365
+ $this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
366
+
367
+ /* execute test subject */
368
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'addTrack'));
369
+ $parcel->expects($this->any())
370
+ ->method('getShipment')
371
+ ->will($this->returnValue($shipmentMock));
372
+
373
+ $parcel->expects($this->any())
374
+ ->method('addTrack')
375
+ ->will($this->returnValue($parcel));
376
+ $this->replaceByMock('model', 'hermes/parcel', $parcel);
377
+
378
+
379
+ $this->assertEquals(
380
+ array('parcels' => 2, 'errors' => 0),
381
+ Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer())
382
+ );
383
+
384
+ /* check results for the first parcel */
385
+ $this->assertEquals('2', $parcel->getId());
386
+ $this->assertEquals('23', $parcel->getHermesOrderNo());
387
+ $this->assertEquals(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED, $parcel->getStatusCode());
388
+ $this->assertEmpty($parcel->getErrorCode());
389
+ }
390
+
391
+ /**
392
+ * test parcel submission
393
+ *
394
+ * @test
395
+ * @loadFixture ../../../var/fixtures/parcels
396
+ */
397
+ public function transmitParcelsWithError()
398
+ {
399
+ $orders = array(new stdClass(), new stdClass());
400
+ $orders[0]->orderNo = '24';
401
+
402
+ $orders[1]->orderNo = '22';
403
+ $orders[1]->exceptionItems = new StdClass();
404
+ $orders[1]->exceptionItems->ExceptionItem = array(new StdClass(), new StdClass());
405
+ $orders[1]->exceptionItems->ExceptionItem[0] = new StdClass();
406
+ $orders[1]->exceptionItems->ExceptionItem[0]->errorCode = 123;
407
+ $orders[1]->exceptionItems->ExceptionItem[0]->errorMessage = 'Foobar';
408
+ $orders[1]->exceptionItems->ExceptionItem[1] = new StdClass();
409
+ $orders[1]->exceptionItems->ExceptionItem[1]->errorCode = 256;
410
+ $orders[1]->exceptionItems->ExceptionItem[1]->errorMessage = 'xyz';
411
+ $this->_mockClientForImportOrders($orders);
412
+
413
+ /* expect shipments comments to be set */
414
+ /*
415
+ $shipment = $this->getModelMock('sales/order_shipment', array('addComment'));
416
+ $shipment->expects($this->any())
417
+ ->method('addComment')
418
+ ->with($this->equalTo(
419
+ 'HERMES::<span class="error">Some errors occured during transmission to Hermes:</span><br />Foobar<br />xyz'
420
+ ));
421
+ $this->replaceByMock('model', 'sales/order_shipment', $shipment);
422
+ */
423
+
424
+ /* avoid saving shipment comments */
425
+ $shipmentCommentsCollection = $this->getResourceModelMock('sales/order_shipment_comment_collection', array('save'));
426
+ $this->replaceByMock('resource', 'sales/order_shipment_comment_collection', $shipmentCommentsCollection);
427
+
428
+ $shipmentMock = $this->getModelMock('sales/order_shipment', array('getCommentsCollection', 'addComment'));
429
+ $shipmentMock->expects($this->any())
430
+ ->method('getCommentsCollection')
431
+ ->will($this->returnValue($shipmentCommentsCollection));
432
+ $this->replaceByMock('model', 'sales/order_shipment', $shipmentMock);
433
+
434
+ /* execute test subject */
435
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'addTrack'));
436
+ $parcel->expects($this->any())
437
+ ->method('getShipment')
438
+ ->will($this->returnValue($shipmentMock));
439
+
440
+ $parcel->expects($this->any())
441
+ ->method('addTrack')
442
+ ->will($this->returnValue($parcel));
443
+ $this->replaceByMock('model', 'hermes/parcel', $parcel);
444
+
445
+ /* execute test subject */
446
+ $parcel = Mage::getModel('hermes/parcel')->load(2);
447
+ $this->assertEquals(
448
+ array('parcels' => 2, 'errors' => 1),
449
+ Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer())
450
+ );
451
+
452
+ /* check results for the second parcel */
453
+ $this->assertEquals('2', $parcel->getId());
454
+ $this->assertEquals('22', $parcel->getHermesOrderNo());
455
+ $this->assertEquals(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED, $parcel->getStatusCode());
456
+ $this->assertNotEmpty($parcel->getErrorCode());
457
+ $this->assertEquals(array(123, 256), $parcel->getErrorCodes());
458
+
459
+ }
460
+
461
+ /**
462
+ * @test
463
+ * @loadFixture ../../../var/fixtures/parcels
464
+ */
465
+ public function testFailedRequest()
466
+ {
467
+ $client = $this->getModelMock('hermes/client', array('sendParcels'));
468
+ $client->expects($this->once())
469
+ ->method('sendParcels')
470
+ ->will($this->returnValue(false));
471
+ $this->replaceByMock('model', 'hermes/client', $client);
472
+
473
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
474
+ Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer());
475
+ }
476
+
477
+ /**
478
+ * test
479
+ *
480
+ * @test
481
+ * @loadFixture ../../../var/fixtures/orderList1
482
+ */
483
+ public function createParcelsForHermes()
484
+ {
485
+
486
+ $config = $this->getModelMock('hermes/config',
487
+ array('isAutocreateEnabled',
488
+ 'getAutocreateOrderStatuses',
489
+ 'getInstallationDate',
490
+ 'isPaymentMethodForCod'
491
+ ));
492
+ $config->expects($this->any())
493
+ ->method('isAutocreateEnabled')
494
+ ->will($this->returnValue(true));
495
+ $config->expects($this->any())
496
+ ->method('getAutocreateOrderStatuses')
497
+ ->will($this->returnValue(array('processed', 'pending')));
498
+ $config->expects($this->any())
499
+ ->method('getInstallationDate')
500
+ ->will($this->returnValue(strtotime('2011-01-01')));
501
+ $config->expects($this->any())
502
+ ->method('isPaymentMethodForCod')
503
+ ->will($this->returnValue(strtotime(false)));
504
+ $this->replaceByMock('model', 'hermes/config', $config);
505
+
506
+ $parcel = Mage::getModel('hermes/parcel');
507
+ $parcel->setId(777);
508
+
509
+ $shipment = Mage::getModel('sales/order_shipment');
510
+ $shipment->setId(7777);
511
+
512
+ $helper = $this->getHelperMock('hermes/order', array('createShipment', 'createParcel'));
513
+ $helper->expects($this->any())
514
+ ->method('createShipment')
515
+ ->with($this->isInstanceOf('Mage_Sales_Model_Order'))
516
+ ->will($this->returnValue($shipment));
517
+ $helper->expects($this->any())
518
+ ->method('createParcel')
519
+ ->will($this->returnValue($parcel));
520
+
521
+ $this->replaceByMock('helper', 'hermes/order', $helper);
522
+ $store = Mage::app()->getStore(0)->load(0);
523
+ //Check if auto creation is initially disabled
524
+ $store->resetConfig();
525
+
526
+
527
+ $path = 'hermes/autocreate/order_status';
528
+ $store->setConfig($path, 'processing,pending');
529
+
530
+ $store->setConfig($path, 1);
531
+ $result = Mage::getModel('hermes/observer')->createParcelsForHermes(new Varien_Event_Observer());
532
+ $this->assertTrue(is_array($result));
533
+ $this->assertGreaterThan(0, count($result));
534
+
535
+ }
536
+
537
+ public function testCreateHermesParcelsIsEmptyIfAutocreateIsDisabled()
538
+ {
539
+ $config = $this->getModelMock('hermes/config',
540
+ array('isAutocreateEnabled'));
541
+ $config->expects($this->any())
542
+ ->method('isAutocreateEnabled')
543
+ ->will($this->returnValue(false));
544
+ $this->replaceByMock('model', 'hermes/config', $config);
545
+ $result = Mage::getModel('hermes/observer')->createParcelsForHermes(new Varien_Event_Observer());
546
+ $this->assertTrue(is_array($result));
547
+ $this->assertEquals(0, count($result));
548
+ }
549
+
550
+ }
app/code/community/Netresearch/Hermes/Test/Model/ObserverTest/fixtures/.gitkeep ADDED
@@ -0,0 +1 @@
 
1
+ directory is mandatory for shared fixtures…
app/code/community/Netresearch/Hermes/Test/Model/OrderTest.php ADDED
@@ -0,0 +1,526 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes API client unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_OrderTest extends EcomDev_PHPUnit_Test_Case
32
+ {
33
+ protected $store;
34
+ protected $client;
35
+
36
+ public function setUp()
37
+ {
38
+ parent::setUp();
39
+ $this->store = Mage::app()->getStore(0)->load(0);
40
+ $client = $this->getModelMock('hermes/client', array('isAvailable'));
41
+ $client->expects($this->any())
42
+ ->method('isAvailable')
43
+ ->will($this->returnValue(true));
44
+ $this->replaceByMock('model', 'hermes/client', $client);
45
+ $this->client = Mage::getModel('hermes/client');
46
+ }
47
+
48
+ /**
49
+ * Retrieves list of order ids for some purpose
50
+ *
51
+ * this test case is just a test implementation to show how fixtures and expectations work
52
+ *
53
+ * @test
54
+ * @loadFixture orderList
55
+ * @loadExpectation
56
+ */
57
+ public function orderList()
58
+ {
59
+ $collection = Mage::getModel('sales/order')->getCollection();
60
+ // Check that number of items the same as expected value
61
+ $this->assertEquals(
62
+ $this->_getExpectations()->getCount(),
63
+ $collection->count()
64
+ );
65
+ $order = Mage::getModel('sales/order')->load(1);
66
+ $this->assertEquals('1000000001', $order->getIncrementId());
67
+ $this->assertEquals('1', $order->getBillingAddressId());
68
+ $this->assertTrue(is_object($order->getBillingAddress()), 'Adresse sollte ein Objekt sein');
69
+ $this->assertEquals(42, $order->getBillingAddress()->getId());
70
+ $this->assertEquals('Hubertus', $order->getBillingAddress()->getFirstname());
71
+ $this->assertEquals('Hubertus ', $order->getBillingAddress()->getName());
72
+ }
73
+
74
+ /**
75
+ * test limits of parcel count (should be 500 max.)
76
+ *
77
+ * @test
78
+ */
79
+ public function testImportOrdersBelowCountLimit()
80
+ {
81
+ $parcelIds = range(101, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT+100);
82
+ $client = Mage::getModel('hermes/client');
83
+ $this->setExpectedException(
84
+ 'Netresearch_Hermes_Model_Client_Exception',
85
+ 'None of the given parcels could be sent to Hermes'
86
+ );
87
+ $client->sendParcels($parcelIds);
88
+ }
89
+
90
+ /**
91
+ * test limits of parcel count (should be 500 max.)
92
+ *
93
+ * @test
94
+ */
95
+ public function testImportOrdersOverCountLimit()
96
+ {
97
+ $parcelIds = range(1, Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT + 1);
98
+ $client = Mage::getModel('hermes/client');
99
+ $this->setExpectedException(
100
+ 'Netresearch_Hermes_Model_Client_Exception',
101
+ sprintf(
102
+ 'Exceeded maximum order limit: SOAP method propsImportOrders does accept up to %d orders per call (you tried to send %d)',
103
+ Netresearch_Hermes_Model_Client::IMPORT_ORDERS_MAX_COUNT,
104
+ count($parcelIds)
105
+ )
106
+ );
107
+ $client->sendParcels($parcelIds);
108
+ }
109
+
110
+ /**
111
+ * test transformation of parcels into Hermes orders
112
+ *
113
+ * @test
114
+ * @loadFixture parcels
115
+ */
116
+ public function testParcelDataTransformation()
117
+ {
118
+ $this->markTestSkipped('skipped due to bug');
119
+ $expected = array(
120
+ array(
121
+ 'orderNo' => null,
122
+ 'receiver' => array(
123
+ 'firstname' => 'Hubertus',
124
+ 'lastname' => 'von Fürstenberg',
125
+ 'street' => 'An der Tabaksmühle 3a',
126
+ 'houseNumber' => '',
127
+ 'postcode' => '04229',
128
+ 'addressAdd' => '21. Etage',
129
+ 'city' => 'Leipzig',
130
+ 'countryCode' => 'DEU',
131
+ 'email' => 'hubertus.von.fuerstenberg@trash-mail.com'
132
+ ),
133
+ 'clientReferenceNumber' => '1000000001',
134
+ 'parcelClass' => 'M',
135
+ 'amountCashOnDeliveryEurocent' => '0',
136
+ 'includeCashOnDelivery' => false,
137
+ 'withBulkGoods' => false
138
+ )
139
+ );
140
+ $this->assertEquals($expected, Mage::getModel('hermes/client')->getConvertedParcelData(array(1)));
141
+ }
142
+
143
+ /**
144
+ * propsImportOrders LIVE mode
145
+ *
146
+ * this test calls the real Hermes API
147
+ * therefor it should not be executed regularly
148
+ *
149
+ * @loadFixture parcels
150
+ */
151
+ public function propsImportOrdersLIVE()
152
+ {
153
+ $this->store->setConfig('hermes/account/partner_id', 'EXT000159');
154
+ $this->store->setConfig('hermes/account/api_pwd', '171a49c0d02d394a134b17f911332563');
155
+
156
+ $this->store->setConfig('hermes/account/username', 'ProPS_DP_120404112737');
157
+ $this->store->setConfig('hermes/account/password', 'ProPS_DP_120404112737');
158
+
159
+ $this->store->setConfig('hermes/general/testmode', 1);
160
+ $response = Mage::getModel('hermes/client')->sendParcels(array(1));
161
+ die(var_dump(__FILE__ . ' on line ' . __LINE__ . ':', $response));
162
+ }
163
+
164
+ /**
165
+ * test import orders
166
+ *
167
+ * @test
168
+ * @loadFixture parcels
169
+ */
170
+ public function propsImportOrders()
171
+ {
172
+ /* mock client */
173
+ $client = $this->getMock(
174
+ 'Netresearch_Hermes_Model_Client',
175
+ array('login', 'getConvertedParcelData'),
176
+ array(),
177
+ 'Client' . md5(time().rand()),
178
+ true
179
+ );
180
+ $client->expects($this->once())
181
+ ->method('login')
182
+ ->will($this->returnValue(true));
183
+ $client->expects($this->once())
184
+ ->method('getConvertedParcelData')
185
+ ->will($this->returnValue(array('foo' => 'bar')));
186
+ $this->replaceByMock('model', 'hermes/client', $client);
187
+
188
+ /* mock soap client */
189
+ $soapClient = $this->getMock(
190
+ 'Netresearch_Hermes_Model_Client_Soap',
191
+ array('propsImportOrders'),
192
+ array(),
193
+ 'SoapClient' . md5(time().rand()),
194
+ true
195
+ );
196
+ $soapClient->expects($this->once())
197
+ ->method('propsImportOrders')
198
+ ->with($this->equalTo(array('requestedOrders' => array('propsOrders' => array('foo' => 'bar')))));
199
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
200
+
201
+ $client = Mage::getModel('hermes/client');
202
+ try {
203
+ $client->sendParcels(array(1));
204
+ } catch (SoapFault $e) {
205
+ $this->fail();
206
+ }
207
+ }
208
+
209
+ /**
210
+ * test failing order import
211
+ *
212
+ * @test
213
+ * @loadFixture parcels
214
+ */
215
+ public function testFailingOrderImport()
216
+ {
217
+ $soapClient = $this->getModelMock('hermes/client_soap', array('propsImportOrders', 'propsUserLogin', 'getLastSoapOutputHeaderObjects'));
218
+
219
+ // mock propsImportOrders method
220
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
221
+ $soapClient->expects($this->any())
222
+ ->method('propsImportOrders')
223
+ ->will($this->throwException($soapFault));
224
+
225
+ // mock propsUserLogin method
226
+ $response = new stdClass();
227
+ $response->propsUserLoginReturn = 'UserToken';
228
+
229
+ $soapClient->expects($this->any())
230
+ ->method('propsUserLogin')
231
+ ->will($this->returnValue($response));
232
+
233
+ $response = array('PartnerToken' => 'PartnerToken');
234
+ $soapClient->expects($this->any())
235
+ ->method('getLastSoapOutputHeaderObjects')
236
+ ->will($this->returnValue($response));
237
+
238
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
239
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', ' receiver_lastname');
240
+ Mage::getModel('hermes/client')->sendParcels(array(1));
241
+ }
242
+
243
+ public function testGetSingleJpeg()
244
+ {
245
+ $soapClient = $this->getModelMock('hermes/client_soap', array('propsOrderPrintLabelJpeg', 'propsUserLogin', 'getLastSoapOutputHeaderObjects'));
246
+
247
+ /* simulate response (propsOrderPrintLabelJpeg) */
248
+ $expectedJpeg = 'ThisShouldBeAJpegLabel';
249
+ $expected = new StdClass();
250
+
251
+ $expected->propsOrderPrintLabelJpegReturn = new StdClass();
252
+ $expected->propsOrderPrintLabelJpegReturn->jpegData = $expectedJpeg;
253
+ $soapClient->expects($this->any())
254
+ ->method('propsOrderPrintLabelJpeg')
255
+ ->will($this->returnValue($expected));
256
+
257
+ // mock login
258
+ $response = new stdClass();
259
+ $response->propsUserLoginReturn = 'UserToken';
260
+
261
+ $soapClient->expects($this->any())
262
+ ->method('propsUserLogin')
263
+ ->will($this->returnValue($response));
264
+
265
+ $response = array('PartnerToken' => 'PartnerToken');
266
+ $soapClient->expects($this->any())
267
+ ->method('getLastSoapOutputHeaderObjects')
268
+ ->will($this->returnValue($response));
269
+
270
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
271
+
272
+ /* expect parcel to be closed */
273
+ $parcel = $this->getModelMock('hermes/parcel', array('load', 'setStatusCode', 'save'));
274
+ // $parcel->expects($this->once())
275
+ // ->method('setStatusCode')
276
+ // ->with(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
277
+ // $this->replaceByMock('model', 'hermes/parcel', $parcel);
278
+ // $parcel->setHermesOrderNo(1)->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
279
+
280
+ /* execute test subject */
281
+ $response = $this->client->getLabelJpeg($parcel);
282
+ $this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
283
+ $this->assertEquals($expectedJpeg, $response->getResult());
284
+
285
+ /**
286
+ * test exception handling
287
+ */
288
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
289
+ $soapClient->expects($this->any())
290
+ ->method('propsOrderPrintLabelJpeg')
291
+ ->will($this->throwException($soapFault));
292
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
293
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'foo');
294
+ $this->client->getLabelJpeg($parcel);
295
+ }
296
+
297
+ public function testGetSinglePdf()
298
+ {
299
+ $soapClient = $this->getModelMock('hermes/client_soap', array(
300
+ 'propsOrderPrintLabelPdf',
301
+ 'propsUserLogin',
302
+ 'getLastSoapOutputHeaderObjects'
303
+ ));
304
+
305
+ /* simulate response */
306
+ $expectedPdf = 'ThisShouldBeAPdfLabel';
307
+ $expected = new StdClass();
308
+ $expected->propsOrderPrintLabelPdfReturn = new StdClass();
309
+ $expected->propsOrderPrintLabelPdfReturn->pdfData = $expectedPdf;
310
+ $soapClient->expects($this->any())
311
+ ->method('propsOrderPrintLabelPdf')
312
+ ->will($this->returnValue($expected));
313
+
314
+ // mock login
315
+ $response = new stdClass();
316
+ $response->propsUserLoginReturn = 'UserToken';
317
+ $soapClient->expects($this->any())
318
+ ->method('propsUserLogin')
319
+ ->will($this->returnValue($response));
320
+
321
+ $response = array('PartnerToken' => 'PartnerToken');
322
+ $soapClient->expects($this->any())
323
+ ->method('getLastSoapOutputHeaderObjects')
324
+ ->will($this->returnValue($response));
325
+
326
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
327
+
328
+ /* expect parcel to be closed */
329
+ $parcel = $this->getModelMock('hermes/parcel', array('load', 'setStatusCode', 'save'));
330
+ // $parcel->expects($this->once())
331
+ // ->method('setStatusCode')
332
+ // ->with(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
333
+ // $this->replaceByMock('model', 'hermes/parcel', $parcel);
334
+ // $parcel->setHermesOrderNo(1)->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
335
+
336
+ /* execute test subject */
337
+ $response = $this->client->getLabelPdf(
338
+ $parcel,
339
+ Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT
340
+ );
341
+ $this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
342
+ $this->assertEquals($expectedPdf, $response->getResult());
343
+
344
+ /**
345
+ * test exception handling
346
+ */
347
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
348
+ $soapClient->expects($this->any())
349
+ ->method('propsOrderPrintLabelPdf')
350
+ ->will($this->throwException($soapFault));
351
+
352
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
353
+
354
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception', 'foo');
355
+
356
+ $client = Mage::getModel('hermes/client');
357
+ $client->getLabelPdf($parcel, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
358
+ }
359
+
360
+ public function testGetMergedPdf()
361
+ {
362
+ $soapClient = $this->getModelMock('hermes/client_soap', array(
363
+ 'propsOrdersPrintLabelsPdf',
364
+ 'propsUserLogin',
365
+ 'getLastSoapOutputHeaderObjects'
366
+ ));
367
+
368
+ /* simulate response */
369
+ $expectedPdf = 'ThisShouldBeAPdfLabel';
370
+ $expected = new StdClass();
371
+ $expected->propsOrdersPrintLabelsPdfResponse = new StdClass();
372
+ $expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn = new StdClass();
373
+ $expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->pdfData = $expectedPdf;
374
+ $expectedOrderResponses = array(new StdClass(), new StdClass());
375
+ $expectedOrderResponses[0]->orderNo = '1';
376
+ $expectedOrderResponses[1]->orderNo = '2';
377
+ $expectedOrderResponses[1]->exceptionItems = array(new StdClass());
378
+ $expectedOrderResponses[1]->exceptionItems[0]->errorCode = 123;
379
+ $expectedOrderResponses[1]->exceptionItems[0]->errorMessage = 'Some error message';
380
+ $expectedOrderResponses[1]->exceptionItems[0]->errorType = 'U';
381
+ $expected->propsOrdersPrintLabelsPdfResponse->propsOrdersPrintLabelsPdfReturn->orderRes = $expectedOrderResponses;
382
+ $soapClient->expects($this->any())
383
+ ->method('propsOrdersPrintLabelsPdf')
384
+ ->will($this->returnValue($expected));
385
+
386
+ // mock login
387
+ $response = new stdClass();
388
+ $response->propsUserLoginReturn = 'UserToken';
389
+
390
+ $soapClient->expects($this->any())
391
+ ->method('propsUserLogin')
392
+ ->will($this->returnValue($response));
393
+
394
+ $response = array('PartnerToken' => 'PartnerToken');
395
+ $soapClient->expects($this->any())
396
+ ->method('getLastSoapOutputHeaderObjects')
397
+ ->will($this->returnValue($response));
398
+
399
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
400
+
401
+ $response = $this->client->getLabelsPdf(array(1, 2));
402
+ $this->assertInstanceOf('Netresearch_Hermes_Model_Client_Response', $response);
403
+ $this->assertEquals(1, $response->getSuccessCount());
404
+ $this->assertEquals(array(1), $response->getSuccessItems());
405
+ $this->assertEquals(1, $response->getErrorCount());
406
+ $this->assertEquals(array(2), $response->getFailedItems());
407
+ $this->assertEquals($expectedPdf, $response->getResult());
408
+
409
+ $soapFault = Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0);
410
+ $soapClient->expects($this->any())
411
+ ->method('propsOrdersPrintLabelsPdf')
412
+ ->will($this->throwException($soapFault));
413
+
414
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
415
+ $this->setExpectedException('Netresearch_Hermes_Model_Client_Exception');
416
+ $this->client->getLabelsPdf(1);
417
+ }
418
+
419
+ /**
420
+ * should cancel transmitted parcel
421
+ *
422
+ * @test
423
+ */
424
+ public function shouldCancelParcel()
425
+ {
426
+ /* fake response */
427
+ $response = new stdClass();
428
+ $response->propsOrderDeleteReturn = true;
429
+ $soapClient = $this->getModelMock('hermes/client_soap', array(
430
+ 'propsOrderDelete',
431
+ ));
432
+ $soapClient->expects($this->once())
433
+ ->method('propsOrderDelete')
434
+ ->with(array('orderNo' => '123'))
435
+ ->will($this->returnValue($response));
436
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
437
+
438
+ /* fake availability and login */
439
+ $client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
440
+ $client->expects($this->once())
441
+ ->method('login');
442
+ $this->replaceByMock('model', 'hermes/client', $client);
443
+
444
+ /* expect parcel to be canceled */
445
+ $parcel = Mage::getModel('hermes/parcel');
446
+ $parcel->setHermesOrderNo(123);
447
+ $parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
448
+
449
+ /* execute test subject */
450
+ $this->assertTrue($client->cancel($parcel));
451
+ }
452
+
453
+ /**
454
+ * should fail to cancel transmitted parcel
455
+ *
456
+ * @test
457
+ */
458
+ public function shouldFailCancelParcel()
459
+ {
460
+ /* fake response */
461
+ $response = new stdClass();
462
+ $response->propsOrderDeleteReturn = false;
463
+ $soapClient = $this->getModelMock('hermes/client_soap', array(
464
+ 'propsOrderDelete',
465
+ ));
466
+ $soapClient->expects($this->once())
467
+ ->method('propsOrderDelete')
468
+ ->with(array('orderNo' => '123'))
469
+ ->will($this->returnValue($response));
470
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
471
+
472
+ /* fake availability and login */
473
+ $client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
474
+ $client->expects($this->once())
475
+ ->method('login');
476
+ $this->replaceByMock('model', 'hermes/client', $client);
477
+
478
+ /* expect parcel to be canceled */
479
+ $parcel = Mage::getModel('hermes/parcel');
480
+ $parcel->setHermesOrderNo(123);
481
+ $parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
482
+
483
+ /* execute test subject */
484
+ $this->assertFalse($client->cancel($parcel));
485
+ }
486
+
487
+ /**
488
+ * cancellation should throw Netresearch_Hermes_Model_Client_Exception
489
+ *
490
+ * @test
491
+ */
492
+ public function shouldThrowCancellationException()
493
+ {
494
+ /* fake response */
495
+ $response = new stdClass();
496
+ $response->propsOrderDeleteReturn = false;
497
+ $soapClient = $this->getModelMock('hermes/client_soap', array(
498
+ 'propsOrderDelete',
499
+ ));
500
+ $soapClient->expects($this->any())
501
+ ->method('propsOrderDelete')
502
+ ->will($this->throwException(
503
+ Netresearch_Hermes_Model_Client_Exception::createSoapFault('foo', 0)
504
+ ));
505
+ $this->replaceByMock('model', 'hermes/client_soap', $soapClient);
506
+
507
+ /* fake availability and login */
508
+ $client = $this->getModelMock('hermes/client', array('isAvailable', 'login'));
509
+ $client->expects($this->once())
510
+ ->method('login');
511
+ $this->replaceByMock('model', 'hermes/client', $client);
512
+
513
+ /* expect parcel to be canceled */
514
+ $parcel = Mage::getModel('hermes/parcel');
515
+ $parcel->setHermesOrderNo(123);
516
+ $parcel->setData('status_code', Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
517
+
518
+ $this->setExpectedException(
519
+ 'Netresearch_Hermes_Model_Client_Exception',
520
+ 'foo'
521
+ );
522
+
523
+ /* execute test subject */
524
+ $client->cancel($parcel);
525
+ }
526
+ }
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/expectations/orderList.yaml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ count: 3
2
+ order_ids: [1, 2, 3]
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/orderList.yaml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 1
4
+ increment_id: 1000000001
5
+ billing_address_id: 1
6
+ - entity_id: 2
7
+ - entity_id: 3
8
+
9
+ sales/order_address:
10
+ - entity_id: 42
11
+ parent_id: 1
12
+ address_type: 'billing'
13
+ firstname: 'Hubertus'
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/parcels.yaml ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 45
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: EUR
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+
12
+
13
+ sales/shipment:
14
+ - entity_id: 2
15
+ increment_id: 1000000001
16
+ order_id: 31
17
+ shipping_address_id: 45
18
+
19
+
20
+ hermes/parcel:
21
+ - id: 1
22
+ shipment_id: 2
23
+ shipping_method: 'flatrate_flatrate'
24
+ parcel_class: 'M'
25
+ includeCashOnDelivery: false
26
+
27
+
28
+ sales/order_address:
29
+ - entity_id: 45
30
+ parent_id: 31
31
+ address_type: 'shipping'
32
+ firstname: 'Hubertus'
33
+ postcode: '04229'
34
+ lastname: 'Fürstenberg'
35
+ street: 'An der Tabaksmühle 3a'
36
+ city: 'Leipzig'
37
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
38
+ country_id: 'DE'
39
+ prefix: 'Prof. Dr.'
40
+ middlename: 'von'
41
+ suffix: 'MdL'
42
+ company: 'Verein zur Abschaffung der Beseitigung'
43
+
app/code/community/Netresearch/Hermes/Test/Model/OrderTest/fixtures/shipments.yaml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 42
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: EUR
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+
12
+ sales/shipment:
13
+ - entity_id: 2
14
+ increment_id: 100000077
15
+ order_id: 31
16
+ shipping_address_id: 45
17
+
18
+ sales/order_address:
19
+ - entity_id: 45
20
+ parent_id: 31
21
+ address_type: 'shipping'
22
+ firstname: 'Hubertus'
23
+ postcode: '04229'
24
+ lastname: 'Fürstenberg'
25
+ street: 'An der Tabaksmühle 3a'
26
+ city: 'Leipzig'
27
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
28
+ country_id: 'DE'
29
+ prefix: 'Prof. Dr.'
30
+ middlename: 'von'
31
+ suffix: 'MdL'
32
+ company: 'Verein zur Abschaffung der Beseitigung'
33
+
34
+ sales/order_payment:
35
+ - entity_id: 23
36
+ parent_id: 31
37
+ method: 'checkmo'
app/code/community/Netresearch/Hermes/Test/Model/ParcelTest.php ADDED
@@ -0,0 +1,593 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes parcel unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_ParcelTest extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ /**
34
+ * test if shipment address is set in parcel.
35
+ * street, district and email are excluded as they have their own test methods
36
+ * @see testStreetConcatenation()
37
+ * @see testIrelandDistrict()
38
+ * @see testEmail()
39
+ * @loadFixture shipments
40
+ */
41
+ public function testTransformation()
42
+ {
43
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
44
+ /* @var $shipment Mage_Sales_Model_Order_Shipment */
45
+ $shippingAddress = $shipment->getShippingAddress();
46
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
47
+
48
+ $lastname = $shippingAddress->getMiddlename() ?
49
+ $shippingAddress->getMiddlename() . ' ' . $shippingAddress->getLastname() :
50
+ $shippingAddress->getLastname();
51
+
52
+ $this->assertEquals($shipment->getId(), $parcel->getShipmentId());
53
+ $this->assertEquals($shippingAddress->getFirstname(), $parcel->getReceiverFirstname());
54
+ $this->assertEquals($lastname, $parcel->getReceiverLastname());
55
+ // $parcel->getReceiverStreet(); $parcel->getReceiverAddressAdd();
56
+ $this->assertEquals($shippingAddress->getPostcode(), $parcel->getReceiverPostcode());
57
+ $this->assertEquals($shippingAddress->getCity(), $parcel->getReceiverCity());
58
+ // $parcel->getDistrict();
59
+ $this->assertEquals($shippingAddress->getCountryModel()->getIso3Code(), $parcel->getReceiverCountryCode());
60
+ // $parcel->getReceiverEmail();
61
+ $this->assertEquals($shippingAddress->getTelephone(), $parcel->getReceiverTelephoneNumber());
62
+ $this->assertNull($parcel->getReceiverTelephonePrefix());
63
+ }
64
+
65
+ /**
66
+ * test if shipment address is set in parcel if address contains a company name.
67
+ *
68
+ * @loadFixture shipments
69
+ */
70
+ public function testTransformationWithCompanyName()
71
+ {
72
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
73
+ /* @var $shipment Mage_Sales_Model_Order_Shipment */
74
+ $shippingAddress = $shipment->getShippingAddress();
75
+ $shippingAddress->setFirstname('Apu')
76
+ ->setMiddlename(null)
77
+ ->setLastname('Nahasapeemapetilon')
78
+ ->setCompany('Kwik-E-Mart');
79
+
80
+ $shipment->getShippingAddress()->setStreet(array(
81
+ 'line1',
82
+ 'line2',
83
+ 'line3'
84
+ ));
85
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
86
+ $this->assertEquals('', $parcel->getReceiverFirstname());
87
+ $this->assertEquals($shippingAddress->getCompany(), $parcel->getReceiverLastname());
88
+ $this->assertEquals('line1', $parcel->getReceiverStreet());
89
+ $this->assertEquals('line2 line3', $parcel->getReceiverAddressAdd());
90
+
91
+ $shipment->getShippingAddress()->setStreet(array('street'));
92
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
93
+ $this->assertEquals('', $parcel->getReceiverFirstname());
94
+ $this->assertEquals($shippingAddress->getCompany(), $parcel->getReceiverLastname());
95
+ $this->assertEquals('street', $parcel->getReceiverStreet());
96
+ $this->assertEquals('Apu Nahasapeemapetilon', $parcel->getReceiverAddressAdd());
97
+ }
98
+
99
+ /**
100
+ * test if shipments of parcels are loaded correctly
101
+ *
102
+ * @loadFixture shipments
103
+ */
104
+ public function testShipmentLoading()
105
+ {
106
+ $parcel = Mage::getModel('hermes/parcel')->setShipmentId(2);
107
+ $this->assertEquals('Fürstenberg', $parcel->getShipment()->getShippingAddress()->getLastname());
108
+ }
109
+
110
+ /**
111
+ * test if exception is thrown for lastnames with more than 25 characters
112
+ *
113
+ * @loadFixture shipments
114
+ */
115
+ public function testLastnameOverflow()
116
+ {
117
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
118
+ $this->assertEquals('Fürstenberg', $shipment->getShippingAddress()->getLastname());
119
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
120
+ $this->assertEquals('von Fürstenberg', $parcel->getReceiverLastname());
121
+
122
+ $shipment->getShippingAddress()->setMiddlename('Leipzig');
123
+ $mediumLengthLastName = 'an der Weißen Elster';
124
+ $shipment->getShippingAddress()->setLastname($mediumLengthLastName);
125
+ $this->assertEquals($mediumLengthLastName, $shipment->getShippingAddress()->getLastname());
126
+ $this->setExpectedException(
127
+ 'Netresearch_Hermes_Model_Client_Exception',
128
+ 'Field receiver_lastname must not be longer than 25 characters'
129
+ );
130
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
131
+ }
132
+
133
+ /**
134
+ * test if exception is thrown for middle and lastnames with more than 25 characters
135
+ *
136
+ * @loadFixture shipments
137
+ */
138
+ public function testMiddleAndLastnameOverflow()
139
+ {
140
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
141
+ $overlongName = 'Leipzig an der Weißen Elster';
142
+ $shipment->getShippingAddress()->setLastname($overlongName);
143
+ $this->assertEquals($overlongName, $shipment->getShippingAddress()->getLastname());
144
+ $this->setExpectedException(
145
+ 'Netresearch_Hermes_Model_Client_Exception',
146
+ 'Field receiver_lastname must not be longer than 25 characters'
147
+ );
148
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
149
+ }
150
+
151
+ /**
152
+ * test if street is concatenated correctly
153
+ *
154
+ * @loadFixture shipments
155
+ */
156
+ public function testStreetConcatenation()
157
+ {
158
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
159
+ $shipment->getShippingAddress()->setStreet(array(
160
+ 'line1',
161
+ 'line2',
162
+ 'line3'
163
+ ));
164
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
165
+ $this->assertEquals('line1', $parcel->getReceiverStreet());
166
+ $this->assertEquals('line2 line3', $parcel->getReceiverAddressAdd());
167
+
168
+ $shipment->getShippingAddress()->setStreet(array(
169
+ 'line1',
170
+ 'line2',
171
+ ));
172
+ $parcel->setShipment($shipment);
173
+ $this->assertEquals('line1', $parcel->getReceiverStreet());
174
+ $this->assertEquals('line2', $parcel->getReceiverAddressAdd());
175
+
176
+ $shipment->getShippingAddress()->setStreet(array(
177
+ 'line1'
178
+ ));
179
+ $parcel->setShipment($shipment);
180
+ $this->assertEquals('line1', $parcel->getReceiverStreet());
181
+ $this->assertNull($parcel->getReceiverAddressAdd());
182
+ }
183
+
184
+ /**
185
+ * test if district is set for ireland shipments
186
+ *
187
+ * @loadFixture shipments
188
+ */
189
+ public function testIrelandDistrict()
190
+ {
191
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
192
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
193
+
194
+ $shipment->getShippingAddress()->setRegion('Kilkenny');
195
+ $shipment->getShippingAddress()->setCountryId('DE');
196
+ $parcel->setShipment($shipment);
197
+ $this->assertNull($parcel->getReceiverDistrict());
198
+
199
+ $shipment->getShippingAddress()->setCountryId('IE');
200
+ $parcel->setShipment($shipment);
201
+ $this->assertEquals('Kilkenny', $parcel->getReceiverDistrict());
202
+ }
203
+
204
+ /**
205
+ * test if country codes are converted correctly
206
+ *
207
+ * @loadFixture shipments
208
+ */
209
+ public function testCountryCodes()
210
+ {
211
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
212
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
213
+
214
+ $shipment->getShippingAddress()->setCountryId('AT');
215
+ $parcel->setShipment($shipment);
216
+ $this->assertEquals('AUT', $parcel->getReceiverCountryCode());
217
+
218
+ $shipment->getShippingAddress()->setCountryId('BE');
219
+ $parcel->setShipment($shipment);
220
+ $this->assertEquals('BEL', $parcel->getReceiverCountryCode());
221
+
222
+ $shipment->getShippingAddress()->setCountryId('DE');
223
+ $parcel->setShipment($shipment);
224
+ $this->assertEquals('DEU', $parcel->getReceiverCountryCode());
225
+
226
+ $shipment->getShippingAddress()->setCountryId('DK');
227
+ $parcel->setShipment($shipment);
228
+ $this->assertEquals('DNK', $parcel->getReceiverCountryCode());
229
+
230
+ $shipment->getShippingAddress()->setCountryId('IE');
231
+ $parcel->setShipment($shipment);
232
+ $this->assertEquals('IRL', $parcel->getReceiverCountryCode());
233
+ }
234
+
235
+ /**
236
+ * test if email is set according to mail sending option
237
+ *
238
+ * @loadFixture shipments
239
+ */
240
+ public function testEmail()
241
+ {
242
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
243
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
244
+ $store = Mage::app()->getStore(0)->load(0);
245
+
246
+ $path = 'hermes/shipment_options/hermes_mail';
247
+ $previousValue = Mage::getStoreConfig($path);
248
+ $store->setConfig($path, 0);
249
+ $parcel->setShipment($shipment);
250
+ $this->assertNull($parcel->getReceiverEmail());
251
+
252
+ $store->setConfig($path, 1);
253
+ $parcel->setShipment($shipment);
254
+ $this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $parcel->getReceiverEmail());
255
+
256
+ $store->setConfig($path, $previousValue);
257
+ }
258
+
259
+ public function testStatusGetter()
260
+ {
261
+ $parcel = Mage::getModel('hermes/parcel');
262
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
263
+ $this->assertTrue($parcel->isQueued(), 'parcel should be queued');
264
+ $this->assertFalse($parcel->isClosed(), 'parcel should not be closed');
265
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
266
+
267
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
268
+ $this->assertTrue($parcel->isProcessed(), 'parcel should be processed');
269
+ $this->assertFalse($parcel->isClosed(), 'parcel should not be closed');
270
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
271
+
272
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
273
+ $this->assertTrue($parcel->isQueuedToCancel(), 'parcel should be queued to be canceled');
274
+ $this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
275
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
276
+
277
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
278
+ $this->assertTrue($parcel->isCanceled(), 'parcel should be canceled');
279
+ $this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
280
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
281
+
282
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_FAILED);
283
+ $this->assertTrue($parcel->isCancelFailed(), 'parcel cancellation should have failed');
284
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
285
+
286
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
287
+ $this->assertTrue($parcel->isFailed(), 'parcel transmission should have failed');
288
+ $this->assertTrue($parcel->canBeResumed(), 'parcel should be resumable');
289
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
290
+
291
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
292
+ $this->assertTrue($parcel->isInTransmission(), 'parcel should be in transmission');
293
+ $this->assertFalse($parcel->canBeResumed(), 'parcel should NOT be resumable');
294
+
295
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CLOSED);
296
+ $this->assertTrue($parcel->isClosed(), 'parcel should be closed');
297
+ $this->assertFalse($parcel->isInTransmission(), 'parcel should not be in transmission');
298
+ $this->assertFalse($parcel->canBeResumed(), 'parcel should NOT be resumable');
299
+
300
+ $this->assertEquals(8, count($parcel->getStatusCodes()));
301
+ }
302
+
303
+ public function testErrors()
304
+ {
305
+ $parcel = Mage::getModel('hermes/parcel');
306
+ $parcel->setErrorCode(499);
307
+ $this->assertEquals(499, $parcel->getErrorCode());
308
+
309
+ $parcel->setErrorCodes(array(499, 501));
310
+ $this->assertEquals(array(499, 501), $parcel->getErrorCodes());
311
+
312
+ $parcel->setErrorMessages(array('foo', 'bar'));
313
+ $this->assertEquals(array('foo', 'bar'), $parcel->getErrorMessages());
314
+
315
+ $parcel->setErrorCode(json_encode(array('1', '2')));
316
+ $this->assertEquals(array('1', '2'), $parcel->getErrorCodes());
317
+
318
+ $parcel->setErrorMessage(json_encode(array('foo', 'bar')));
319
+ $this->assertEquals(array('foo', 'bar'), $parcel->getErrorMessages());
320
+ }
321
+
322
+ public function testGetStatusCodes()
323
+ {
324
+ $parcel = Mage::getModel('hermes/parcel');
325
+ $this->assertTrue(is_array($parcel->getStatusCodes()));
326
+ $this->assertTrue(count($parcel->getStatusCodes()) > 0);
327
+ }
328
+
329
+ public function testGetStatusText()
330
+ {
331
+ $parcel = Mage::getModel('hermes/parcel');
332
+
333
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
334
+ $this->assertEquals("new (queued)", $parcel->getStatusText());
335
+
336
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_PROCESSED);
337
+ $this->assertEquals("processed", $parcel->getStatusText());
338
+
339
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED);
340
+ $this->assertEquals("cancel (queued)", $parcel->getStatusText());
341
+
342
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCELED);
343
+ $this->assertEquals("canceled", $parcel->getStatusText());
344
+
345
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_FAILED);
346
+ $this->assertEquals("cancel (failed)", $parcel->getStatusText());
347
+
348
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED);
349
+ $this->assertEquals("new (failed)", $parcel->getStatusText());
350
+
351
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION);
352
+ $this->assertEquals("in transmission", $parcel->getStatusText());
353
+
354
+ $parcel->setStatusCode('foo');
355
+ $this->assertEquals('foo', $parcel->getStatusText());
356
+ }
357
+
358
+ public function testRepeatTransmission()
359
+ {
360
+ $parcel = Mage::getModel('hermes/parcel');
361
+ foreach (array(
362
+ Netresearch_Hermes_Model_Parcel::STATUS_CANCEL_QUEUED,
363
+ Netresearch_Hermes_Model_Parcel::STATUS_CANCELED,
364
+ Netresearch_Hermes_Model_Parcel::STATUS_NEW_FAILED,
365
+ ) as $sourceState) {
366
+ $parcel->setStatusCode($sourceState);
367
+ $parcel->repeatTransmission();
368
+ $this->assertEquals(
369
+ Netresearch_Hermes_Model_Parcel::STATUS_QUEUED,
370
+ $parcel->getStatusCode()
371
+ );
372
+ }
373
+
374
+ /* if state is in_transmission or closed the state shouldn't be reverted
375
+ * to new_queued
376
+ *
377
+ */
378
+ foreach (array(
379
+ Netresearch_Hermes_Model_Parcel::STATUS_IN_TRANSMISSION,
380
+ Netresearch_Hermes_Model_Parcel::STATUS_CLOSED
381
+ ) as $sourceState) {
382
+ $parcel->setStatusCode($sourceState);
383
+ $parcel->repeatTransmission();
384
+ $this->assertEquals(
385
+ $sourceState,
386
+ $parcel->getStatusCode()
387
+ );
388
+ }
389
+
390
+
391
+ }
392
+
393
+ /**
394
+ *
395
+ * @loadFixture ../../../var/fixtures//parcels.yaml
396
+ */
397
+ public function testGetHermesOrderNo()
398
+ {
399
+ $parcel = Mage::getModel('hermes/parcel')->load(7);
400
+ $this->assertEquals(8, $parcel->getHermesOrderNo());
401
+ $parcel = Mage::getModel('hermes/parcel')->load(8);
402
+ $this->assertNull($parcel->getHermesOrderNo());
403
+ }
404
+
405
+ /**
406
+ *
407
+ * @loadFixture ../../../var/fixtures/parcels.yaml
408
+ */
409
+ public function testGetTrackingUrl()
410
+ {
411
+ $parcel = Mage::getModel('hermes/parcel')->load(7);
412
+ $this->assertEquals(Mage::getModel('hermes/config')->getTrackingUrl($parcel),
413
+ $parcel->getTrackingUrl()
414
+ );
415
+ }
416
+
417
+ /**
418
+ *
419
+ * @loadFixture ../../../var/fixtures/parcels.yaml
420
+ */
421
+ public function testGetLabel()
422
+ {
423
+
424
+ /* simulate response */
425
+ $expectedPdf = 'ThisShouldBeALabel';
426
+ $expected = new Netresearch_Hermes_Model_Client_Response();
427
+
428
+ $expected->setResult($expectedPdf);
429
+
430
+ $client = $this->getModelMock('hermes/client', array('getLabelJpeg', 'getLabelPdf'));
431
+ $client->expects($this->any())
432
+ ->method('getLabelJpeg')
433
+ ->will($this->returnValue($expected));
434
+ $client->expects($this->any())
435
+ ->method('getLabelPdf')
436
+ ->will($this->returnValue($expected));
437
+ $this->replaceByMock('model', 'hermes/client', $client);
438
+ $parcel = Mage::getModel('hermes/parcel')->load(7);
439
+
440
+ $this->assertTrue(is_string($parcel->getLabel('jpeg')));
441
+ $this->assertEquals(Mage::getModel('hermes/client')->getLabelJpeg($parcel)->getResult(), $parcel->getLabel('jpeg'));
442
+ $path = 'hermes/shipment_label_options/hermes/shipment_label_options/shipment_label_option_pdf';
443
+ Mage::app()->getStore(0)->load(0)->setConfig($path, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
444
+ $this->assertEquals(Mage::getModel('hermes/client')
445
+ ->getLabelPdf($parcel, Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT)->getResult(), $parcel->getLabel('pdf'));
446
+ $this->assertTrue($parcel->isClosed());
447
+
448
+
449
+ $client->expects($this->any())
450
+ ->method('getLabelJpeg')
451
+ ->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
452
+ $client->expects($this->any())
453
+ ->method('getLabelPdf')
454
+ ->will($this->throwException(Netresearch_Hermes_Model_Client_Exception::createSoapFault('Dummy Fault', 303)));
455
+ $this->replaceByMock('model', 'hermes/client_soap', $client);
456
+ $this->setExpectedException('NetresearchSoapFault');
457
+ $parcel->getLabel('jpeg');
458
+ $parcel->getLabel('pdf', Netresearch_Hermes_Model_Client::PRINT_POSITION_UPPER_LEFT);
459
+ }
460
+
461
+ public function testAddTrack()
462
+ {
463
+ $hermesOrderNo = '987234';
464
+
465
+ $config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
466
+ $config->expects($this->any())
467
+ ->method('isTrackingLinkMailEnabled')
468
+ ->will($this->returnValue(true));
469
+ $this->replaceByMock('model', 'hermes/config', $config);
470
+
471
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'notifyCustomer'));
472
+ $parcel->setHermesOrderNo($hermesOrderNo);
473
+
474
+ $shipment = $this->getModelMock('sales/order_shipment', array('addTrack', 'save'));
475
+
476
+ $parcel->expects($this->once())
477
+ ->method('notifyCustomer')
478
+ ->will($this->returnSelf());
479
+ $parcel->expects($this->once())
480
+ ->method('getShipment')
481
+ ->will($this->returnValue($shipment));
482
+
483
+ $track = $this->getModelMock('sales/order_shipment_track', array('setNumber', 'setCarrierCode', 'setTitle'));
484
+ $track->expects($this->once())
485
+ ->method('setNumber')
486
+ ->with($this->equalTo($hermesOrderNo))
487
+ ->will($this->returnSelf());
488
+ $track->expects($this->once())
489
+ ->method('setCarrierCode')
490
+ ->with($this->equalTo('hermes'))
491
+ ->will($this->returnSelf());
492
+ $track->expects($this->once())
493
+ ->method('setTitle')
494
+ ->with($this->equalTo('Hermes'))
495
+ ->will($this->returnSelf());
496
+ $this->replaceByMock('model', 'sales/order_shipment_track', $track);
497
+
498
+ $shipment->expects($this->once())
499
+ ->method('addTrack')
500
+ ->with($track)
501
+ ->will($this->returnSelf());
502
+
503
+ $parcel->addTrack();
504
+ }
505
+
506
+
507
+ /**
508
+ *
509
+ * @loadFixture shipments
510
+ */
511
+ public function testRemoveTrack()
512
+ {
513
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
514
+ /* @var $shipment Mage_Sales_Model_Order_Shipment */
515
+ $shippingAddress = $shipment->getShippingAddress();
516
+ $shippingAddress->setFirstname('Apu')
517
+ ->setMiddlename(null)
518
+ ->setLastname('Nahasapeemapetilon')
519
+ ->setCompany('Kwik-E-Mart');
520
+ $shipment->getShippingAddress()->setStreet(array(
521
+ 'line1',
522
+ 'line2',
523
+ 'line3'
524
+ ));
525
+ $parcel = Mage::getModel('hermes/parcel')->setShipment($shipment);
526
+ $parcel->setHermesOrderNo('4711');
527
+ $tracks = $shipment->getAllTracks();
528
+ $parcel->addTrack();
529
+ $this->assertTrue((sizeof($parcel->getShipment()->getAllTracks()) > sizeof($tracks)));
530
+ $parcel->removeTrack();
531
+ $shipment = Mage::getModel('sales/order_shipment')->load(2);
532
+ $this->assertEquals(sizeof($tracks), sizeof($shipment->getAllTracks()));
533
+ }
534
+
535
+ public function testNotAddTrack()
536
+ {
537
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipment', 'notifyCustomer'));
538
+ $parcel->setHermesOrderNo(null);
539
+ $shipment = $this->getModelMock('sales/order_shipment', array('addTrack'));
540
+ $shipment->expects($this->never())
541
+ ->method('addTrack')
542
+ ->will($this->returnSelf());
543
+
544
+ $parcel->addTrack();
545
+ }
546
+
547
+ public function testNotNotifyCustomer()
548
+ {
549
+ /**
550
+ * nothing should happen if tracking mail is disabled
551
+ */
552
+ $config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
553
+ $config->expects($this->any())
554
+ ->method('isTrackingLinkMailEnabled')
555
+ ->will($this->returnValue(false));
556
+ $this->replaceByMock('model', 'hermes/config', $config);
557
+
558
+ Mage::getModel('hermes/parcel')->notifyCustomer();
559
+ }
560
+
561
+ public function testNotifyCustomer()
562
+ {
563
+ $parcel = $this->getModelMock('hermes/parcel', array('getShipment'));
564
+ $parcel->setHermesOrderNo('1234567890');
565
+
566
+ $config = $this->getModelMock('hermes/config', array('isTrackingLinkMailEnabled'));
567
+
568
+ /**
569
+ * customer should be notified if tracking mail is enabled
570
+ */
571
+ $config->expects($this->any())
572
+ ->method('isTrackingLinkMailEnabled')
573
+ ->will($this->returnValue(true));
574
+ $this->replaceByMock('model', 'hermes/config', $config);
575
+
576
+ $shipment = $this->getModelMock('sales/order_shipment', array('sendEmail', 'setEmailSent', 'save'));
577
+ $shipment->expects($this->once())
578
+ ->method('sendEmail')
579
+ ->with($this->equalTo(true))
580
+ ->will($this->returnSelf());
581
+ $shipment->expects($this->once())
582
+ ->method('setEmailSent')
583
+ ->with($this->equalTo(true))
584
+ ->will($this->returnSelf());
585
+
586
+ $parcel->expects($this->once())
587
+ ->method('getShipment')
588
+ ->will($this->returnValue($shipment));
589
+
590
+ $parcel->notifyCustomer();
591
+ }
592
+ }
593
+
app/code/community/Netresearch/Hermes/Test/Model/ParcelTest/fixtures/shipments.yaml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 42
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: 'EUR'
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
12
+
13
+ sales/shipment:
14
+ - entity_id: 2
15
+ increment_id: 100000077
16
+ order_id: 31
17
+ shipping_address_id: 45
18
+
19
+ sales/order_address:
20
+ - entity_id: 45
21
+ parent_id: 31
22
+ address_type: 'shipping'
23
+ firstname: 'Hubertus'
24
+ postcode: '04229'
25
+ lastname: 'Fürstenberg'
26
+ street: 'An der Tabaksmühle 3a'
27
+ city: 'Leipzig'
28
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
29
+ country_id: 'DE'
30
+ prefix: 'Prof. Dr.'
31
+ middlename: 'von'
32
+ suffix: 'MdL'
33
+
34
+ sales/order_payment:
35
+ - entity_id: 23
36
+ parent_id: 31
37
+ method: 'checkmo'
app/code/community/Netresearch/Hermes/Test/Model/Shipping/Carrier/HermesTest.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes carrier unittest
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Thomas Birke <thomas.birke@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_Shipping_Carrier_HermesTest extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ public function testIsActive()
34
+ {
35
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
36
+ $this->assertTrue($carrier->isActive());
37
+ }
38
+
39
+ public function testIsTrackingAvailable()
40
+ {
41
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
42
+ $this->assertTrue($carrier->isTrackingAvailable());
43
+ }
44
+
45
+ public function testCollectRates()
46
+ {
47
+ $request = Mage::getModel('shipping/rate_request');
48
+ $result = Mage::getModel('shipping/rate_result');
49
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
50
+ $this->assertEquals($result, $carrier->collectRates($request));
51
+ }
52
+
53
+ public function testGetTrackingInfo()
54
+ {
55
+ $trackingResult = $this->getModelMock('shipping/tracking_result', array('getAllTrackings'));
56
+ $trackingResult->expects($this->any())
57
+ ->method('getAllTrackings')
58
+ ->will($this->returnValue(array('bar')));
59
+
60
+ $carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
61
+ $carrier->expects($this->any())
62
+ ->method('getTracking')
63
+ ->will($this->returnValue($trackingResult));
64
+ $this->assertEquals('bar', $carrier->getTrackingInfo('foo'));
65
+
66
+ $trackingResult = 'xyz';
67
+ $carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
68
+ $carrier->expects($this->any())
69
+ ->method('getTracking')
70
+ ->will($this->returnValue($trackingResult));
71
+ $this->assertEquals('xyz', $carrier->getTrackingInfo('abc'));
72
+
73
+ $trackingResult = '';
74
+ $carrier = $this->getModelMock('hermes/shipping_carrier_hermes', array('getTracking'));
75
+ $carrier->expects($this->any())
76
+ ->method('getTracking')
77
+ ->will($this->returnValue($trackingResult));
78
+ $this->assertFalse($carrier->getTrackingInfo('abc'));
79
+ }
80
+
81
+ public function testGetHermesTracking()
82
+ {
83
+ $trackings = array('123', 'abc');
84
+
85
+ $status = $this->getModelMock('shipping/tracking_result_status', array(
86
+ 'setCarrierTitle',
87
+ 'setCarrier',
88
+ 'setPopup'
89
+ ));
90
+ $status->expects($this->exactly(2))
91
+ ->method('setCarrierTitle')
92
+ ->with($this->equalTo('Hermes'))
93
+ ->will($this->returnSelf());
94
+ $status->expects($this->exactly(2))
95
+ ->method('setCarrier')
96
+ ->with($this->equalTo('hermes'))
97
+ ->will($this->returnSelf());
98
+ $status->expects($this->exactly(2))
99
+ ->method('setPopup')
100
+ ->with($this->equalTo(true))
101
+ ->will($this->returnSelf());
102
+ $this->replaceByMock('model', 'shipping/tracking_result_status', $status);
103
+
104
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
105
+ $result = $carrier->getTracking($trackings);
106
+
107
+ $this->assertInstanceOf('Mage_Shipping_Model_Tracking_Result', $result);
108
+ $tracks = $result->getAllTrackings();
109
+
110
+ $this->assertEquals(2, count($tracks));
111
+ $this->assertEquals('abc', $tracks[1]->getTracking());
112
+ $this->assertEquals(
113
+ Mage::getModel('hermes/config')->getTrackingUrl('abc'),
114
+ $tracks[1]->getUrl()
115
+ );
116
+ }
117
+
118
+ public function testGetSingleHermesTracking()
119
+ {
120
+ $trackings = 'wrgl';
121
+
122
+ $carrier = Mage::getModel('hermes/shipping_carrier_hermes');
123
+ $result = $carrier->getTracking($trackings);
124
+
125
+ $this->assertInstanceOf('Mage_Shipping_Model_Tracking_Result', $result);
126
+ $tracks = $result->getAllTrackings();
127
+
128
+ $this->assertEquals(1, count($tracks));
129
+ $this->assertEquals('wrgl', $tracks[0]->getTracking());
130
+ $this->assertEquals(
131
+ Mage::getModel('hermes/config')->getTrackingUrl('wrgl'),
132
+ $tracks[0]->getUrl()
133
+ );
134
+ }
135
+ }
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Payment/Methods.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes System Config Payment Methods Source Test
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_System_Config_Source_Payment_Methods extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ public function testSourceClassExists()
34
+ {
35
+ $this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Payment_Methods'));
36
+ return new Netresearch_Hermes_Model_System_Config_Source_Payment_Methods();
37
+ }
38
+
39
+ /**
40
+ * @depends testSourceClassExists
41
+ */
42
+ public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Payment_Methods $sourcePaymentMethods)
43
+ {
44
+ $this->assertTrue(method_exists($sourcePaymentMethods, "toOptionArray"));
45
+ $this->assertTrue(is_array($sourcePaymentMethods->toOptionArray()));
46
+
47
+ $options = $sourcePaymentMethods->toOptionArray();
48
+ $this->assertNotEmpty($options);
49
+ $this->assertTrue(
50
+ count($options) > 0,
51
+ sprintf(
52
+ "Payment methods calculated (%s) num is not bigger 0",
53
+ count($options)
54
+ )
55
+ );
56
+ }
57
+
58
+ protected function _getPaymentProviders()
59
+ {
60
+ return Mage::getStoreConfig('payment');
61
+ }
62
+ }
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch_Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes System Config Shipment LabelPlacements Options Source Test
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_LabelPlacementsTest
32
+ extends EcomDev_PHPUnit_Test_Case_Config
33
+ {
34
+
35
+ /**
36
+ * tests if the the source class (Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions)
37
+ * is present
38
+ * @return Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements()
39
+ */
40
+ public function testSourceClassExists()
41
+ {
42
+ $this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements'));
43
+ return new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements();
44
+ }
45
+
46
+ /**
47
+ * @depends testSourceClassExists
48
+ * @loadExpectation
49
+ */
50
+ public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements $sourceLabelPlacementOptions)
51
+ {
52
+ $this->assertTrue(method_exists($sourceLabelPlacementOptions, "toOptionArray"));
53
+ $this->assertTrue(is_array($sourceLabelPlacementOptions->toOptionArray()));
54
+ $options = $sourceLabelPlacementOptions->toOptionArray();
55
+ $this->assertNotEmpty($options);
56
+ $this->assertEquals($this->expected()->getCount(), count($options), "label options are smaller than expected");
57
+ $labelPlacementOptions = $this->expected()->getLabelValues();
58
+ foreach ($options as $option) {
59
+ $this->assertTrue(in_array($option['value'],
60
+ array_keys($labelPlacementOptions)),
61
+ "Shipment label options are smaller than expected");
62
+ }
63
+ }
64
+
65
+ }
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/LabelPlacementsTest/expectations/testToOptionArray.yaml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ count: 4
2
+ label_values:
3
+ 1 : 'top left'
4
+ 2 : 'top right'
5
+ 3 : 'bottom left'
6
+ 4 : 'bottom right'
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/Methods.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+
24
+ /**
25
+ * Hermes System Config Shipment Methods Source Test
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author André Herrn <andre.herrn@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_Methods extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+ public function testSourceClassExists()
34
+ {
35
+ $this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods'));
36
+ return new Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods();
37
+ }
38
+
39
+ /**
40
+ * @depends testSourceClassExists
41
+ */
42
+ public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods $sourceShipmentOptions)
43
+ {
44
+ $this->assertTrue(method_exists($sourceShipmentOptions, "toOptionArray"));
45
+ $this->assertTrue(is_array($sourceShipmentOptions->toOptionArray()));
46
+
47
+ $options = $sourceShipmentOptions->toOptionArray();
48
+ $this->assertNotEmpty($options);
49
+ $this->assertTrue(count($options) >= count($this->_getCarriers()), "Shipping methods were smaller then Magento Shipping Carriers");
50
+ }
51
+
52
+ protected function _getCarriers()
53
+ {
54
+ $carriers = new Mage_Shipping_Model_Config();
55
+ return $carriers->getAllCarriers();
56
+ }
57
+ }
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch_Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Hermes System Config Shipment Label Options Source Test
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Michael Lühr <michael.luehr@netresearch.de>
29
+ */
30
+ class Netresearch_Hermes_Test_Model_System_Config_Source_Shipping_ShipmentLabelFormatTest
31
+ extends EcomDev_PHPUnit_Test_Case_Config
32
+ {
33
+
34
+ /**
35
+ * tests if the the source class (Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions)
36
+ * is present
37
+ * @return Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods
38
+ */
39
+ public function testSourceClassExists()
40
+ {
41
+ $this->assertTrue(class_exists('Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions'));
42
+ return new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions();
43
+ }
44
+
45
+ /**
46
+ * @depends testSourceClassExists
47
+ * @loadExpectation
48
+ */
49
+ public function testToOptionArray(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions $sourceLabelFormatOptions)
50
+ {
51
+ $this->assertTrue(method_exists($sourceLabelFormatOptions, "toOptionArray"));
52
+ $this->assertTrue(is_array($sourceLabelFormatOptions->toOptionArray()));
53
+ $options = $sourceLabelFormatOptions->toOptionArray();
54
+ $this->assertNotEmpty($options);
55
+ $this->assertEquals($this->expected()->getCount(), count($options), "Shipment label options are smaller than expected");
56
+ $expectedLabelValues = $this->expected()->getLabelValues();
57
+ foreach ($options as $option) {
58
+ $this->assertTrue(in_array($option['value'],
59
+ array_keys($expectedLabelValues)),
60
+ "Shipment label options are smaller than expected");
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @depends testSourceClassExists
66
+ *
67
+ */
68
+ public function testGetLabelFileFormats()
69
+ {
70
+ $fileFormats = Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::getLabelFileFormats();
71
+ $this->assertTrue(is_array($fileFormats));
72
+ $this->assertGreaterThan(0, sizeof($fileFormats));
73
+ $this->assertContains(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF, $fileFormats);
74
+ $this->assertContains(Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG, $fileFormats);
75
+ }
76
+
77
+ }
app/code/community/Netresearch/Hermes/Test/Model/System/Config/Source/Shipping/ShipmentLabelFormatTest/expectations/testToOptionArray.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ count: 1
2
+ label_values:
3
+ 'pdf': 'pdf'
app/code/community/Netresearch/Hermes/Test/var/fixtures/orderList1.yaml ADDED
@@ -0,0 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 42
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: 'EUR'
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
12
+
13
+ - entity_id: 32
14
+ increment_id: 100000056
15
+ shipping_address_id: 43
16
+ base_grand_total: 177.55
17
+ grand_total: 177.55
18
+ currency: 'EUR'
19
+ customer_gender: 1
20
+ shipping_method: 'flatrate_flatrate'
21
+ customer_email: 'willi.usa.customer@trash-mail.com'
22
+
23
+ - entity_id: 33
24
+ increment_id: 100000057
25
+ shipping_address_id: 43
26
+ base_grand_total: 2500.01
27
+ grand_total: 2500.01
28
+ currency: 'EUR'
29
+ customer_gender: 1
30
+ shipping_method: 'flatrate_flatrate'
31
+ customer_email: 'willi.usa.customer@trash-mail.com'
32
+
33
+ - entity_id: 34
34
+ increment_id: 100000058
35
+ shipping_address_id: 48
36
+ base_grand_total: 150.77
37
+ grand_total: 150.77
38
+ currency: 'EUR'
39
+ customer_gender: 1
40
+ shipping_method: 'flatrate_flatrate'
41
+ customer_email: 'trinity@trash-mail.com'
42
+
43
+ - entity_id: 35
44
+ increment_id: 100000059
45
+ shipping_address_id: 49
46
+ base_grand_total: 303.77
47
+ grand_total: 303.77
48
+ currency: 'EUR'
49
+ customer_gender: 1
50
+ shipping_method: 'flatrate_flatrate'
51
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
52
+
53
+ - entity_id: 36
54
+ increment_id: 100000060
55
+ shipping_address_id: 49
56
+ base_grand_total: 303.77
57
+ grand_total: 303.77
58
+ currency: 'EUR'
59
+ customer_gender: 1
60
+ shipping_method: 'flatrate_flatrate'
61
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
62
+
63
+ - entity_id: 37
64
+ increment_id: 100000061
65
+ shipping_address_id: 49
66
+ base_grand_total: 3501.00
67
+ grand_total: 3501.00
68
+ currency: 'EUR'
69
+ customer_gender: 1
70
+ shipping_method: 'flatrate_flatrate'
71
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
72
+
73
+ - entity_id: 38
74
+ status: 'processed'
75
+ increment_id: 100000062
76
+ shipping_address_id: 49
77
+ base_grand_total: 501.00
78
+ grand_total: 501.00
79
+ currency: 'EUR'
80
+ customer_gender: 1
81
+ shipping_method: 'flatrate_flatrate'
82
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
83
+ created_at: '2012-05-02'
84
+
85
+ - entity_id: 39
86
+ status: 'pending'
87
+ increment_id: 100000063
88
+ shipping_address_id: 49
89
+ base_grand_total: 501.00
90
+ grand_total: 501.00
91
+ currency: 'EUR'
92
+ customer_gender: 1
93
+ shipping_method: 'flatrate_flatrate'
94
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
95
+ created_at: '2011-01-01'
96
+
97
+ sales/shipment:
98
+ - entity_id: 2
99
+ increment_id: 100000077
100
+ order_id: 31
101
+ shipping_address_id: 45
102
+
103
+ - entity_id: 3
104
+ increment_id: 100000078
105
+ order_id: 32
106
+ shipping_address_id: 46
107
+
108
+ - entity_id: 4
109
+ increment_id: 100000079
110
+ order_id: 33
111
+ shipping_address_id: 47
112
+
113
+ - entity_id: 5
114
+ increment_id: 100000080
115
+ order_id: 34
116
+ shipping_address_id: 48
117
+
118
+ - entity_id: 6
119
+ increment_id: 100000081
120
+ order_id: 35
121
+ shipping_address_id: 49
122
+
123
+ - entity_id: 7
124
+ increment_id: 100000082
125
+ order_id: 36
126
+ shipping_address_id: 49
127
+
128
+ - entity_id: 8
129
+ increment_id: 100000083
130
+ order_id: 38
131
+ shipping_address_id: 49
132
+
133
+ - entity_id: 9
134
+ increment_id: 100000084
135
+ order_id: 37
136
+ shipping_address_id: 49
137
+
138
+ sales/order_address:
139
+ - entity_id: 45
140
+ parent_id: 31
141
+ address_type: 'shipping'
142
+ firstname: 'Hubertus'
143
+ postcode: '04229'
144
+ lastname: 'Fürstenberg'
145
+ street: 'An der Tabaksmühle 3a'
146
+ city: 'Leipzig'
147
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
148
+ country_id: 'DE'
149
+ prefix: 'Prof. Dr.'
150
+ middlename: 'von'
151
+ suffix: 'MdL'
152
+ company: ''
153
+
154
+ - entity_id: 46
155
+ parent_id: 32
156
+ address_type: 'shipping'
157
+ firstname: 'Willi'
158
+ postcode: '12345'
159
+ lastname: 'Usa'
160
+ street: 'Washington Street 11'
161
+ city: 'New York'
162
+ email: 'willi.usa.customer@trash-mail.com'
163
+ country_id: 'US'
164
+ prefix: 'Master'
165
+ middlename: ''
166
+ suffix: ''
167
+ company: ''
168
+
169
+ - entity_id: 47
170
+ parent_id: 33
171
+ address_type: 'shipping'
172
+ firstname: 'Hubertus'
173
+ postcode: '04229'
174
+ lastname: 'Fürstenberg'
175
+ street: 'An der Tabaksmühle 3a'
176
+ city: 'Leipzig'
177
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
178
+ country_id: 'DE'
179
+ prefix: 'Prof. Dr.'
180
+ middlename: 'von'
181
+ suffix: 'MdL'
182
+ company: ''
183
+
184
+ - entity_id: 48
185
+ parent_id: 34
186
+ address_type: 'shipping'
187
+ firstname: 'James'
188
+ postcode: '11 ftN'
189
+ lastname: 'Covington'
190
+ street: '77 Minory'
191
+ city: 'London'
192
+ email: 'trinity@trash-mail.com'
193
+ country_id: 'GB'
194
+
195
+ - entity_id: 49
196
+ parent_id: 35
197
+ address_type: 'shipping'
198
+ firstname: 'Hubertus'
199
+ postcode: '04229'
200
+ lastname: 'Fürstenberg'
201
+ street: 'An der Tabaksmühle 3a'
202
+ city: 'Leipzig'
203
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
204
+ country_id: 'DE'
205
+ prefix: 'Prof. Dr.'
206
+ middlename: 'von'
207
+ suffix: 'MdL'
208
+ company: ''
209
+
210
+ - entity_id: 50
211
+ parent_id: 36
212
+ address_type: 'shipping'
213
+ firstname: 'Hubertus'
214
+ postcode: '04229'
215
+ lastname: 'Fürstenberg'
216
+ street: 'An der Tabaksmühle 3a'
217
+ city: 'Leipzig'
218
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
219
+ country_id: 'DE'
220
+ prefix: 'Prof. Dr.'
221
+ middlename: 'von'
222
+ suffix: 'MdL'
223
+ company: ''
224
+
225
+ - entity_id: 51
226
+ parent_id: 37
227
+ address_type: 'shipping'
228
+ firstname: 'Hubertus'
229
+ postcode: '04229'
230
+ lastname: 'Fürstenberg'
231
+ street: 'An der Tabaksmühle 3a'
232
+ city: 'Leipzig'
233
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
234
+ country_id: 'DE'
235
+ prefix: 'Prof. Dr.'
236
+ middlename: 'von'
237
+ suffix: 'MdL'
238
+ company: ''
239
+
240
+ - entity_id: 52
241
+ parent_id: 38
242
+ address_type: 'shipping'
243
+ firstname: 'Hubertus'
244
+ postcode: '04229'
245
+ lastname: 'Fürstenberg'
246
+ street: 'An der Tabaksmühle 3a'
247
+ city: 'Leipzig'
248
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
249
+ country_id: 'DE'
250
+ prefix: 'Prof. Dr.'
251
+ middlename: 'von'
252
+ suffix: 'MdL'
253
+ company: ''
254
+
255
+ - entity_id: 53
256
+ parent_id: 39
257
+ address_type: 'shipping'
258
+ firstname: 'Hubertus'
259
+ postcode: '04229'
260
+ lastname: 'Fürstenberg'
261
+ street: 'An der Tabaksmühle 3a'
262
+ city: 'Leipzig'
263
+ email: 'hubertus.von.fuerstenberg@trash-mail.com'
264
+ country_id: 'DE'
265
+ prefix: 'Prof. Dr.'
266
+ middlename: 'von'
267
+ suffix: 'MdL'
268
+ company: ''
269
+
270
+ sales/order_payment:
271
+ - entity_id: 23
272
+ parent_id: 31
273
+ method: 'checkmo'
274
+
275
+ - entity_id: 24
276
+ parent_id: 32
277
+ method: 'checkmo'
278
+
279
+ - entity_id: 25
280
+ parent_id: 33
281
+ method: 'checkmo'
282
+
283
+ - entity_id: 26
284
+ parent_id: 34
285
+ method: 'checkmo'
286
+
287
+ - entity_id: 27
288
+ parent_id: 35
289
+ method: 'cod'
290
+
291
+ - entity_id: 28
292
+ parent_id: 36
293
+ method: 'checkmo'
294
+
295
+ - entity_id: 29
296
+ parent_id: 37
297
+ method: 'cod'
298
+
299
+ - entity_id: 30
300
+ parent_id: 38
301
+ method: 'checkmo'
302
+
303
+ - entity_id: 31
304
+ parent_id: 39
305
+ method: 'checkmo'
306
+
app/code/community/Netresearch/Hermes/Test/var/fixtures/parcels.yaml ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ hermes/parcel:
3
+ - id: 1
4
+ shipment_id: 2
5
+ shipping_method: 'flatrate_flatrate'
6
+ receiver_firstname: 'Hubertus'
7
+ receiver_postcode: '04229'
8
+ receiver_lastname: 'von Fürstenberg'
9
+ receiver_address_add: '21. Etage'
10
+ receiver_street: 'An der Tabaksmühle 3a'
11
+ receiver_city: 'Leipzig'
12
+ receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
13
+ receiver_country_code: 'DEU'
14
+ parcel_class: 'M'
15
+ includeCashOnDelivery: false
16
+ # (empty status)
17
+ - id: 2
18
+ shipment_id: 3
19
+ status_code: 1 # STATUS_QUEUED
20
+
21
+ - id: 3
22
+ shipment_id: 4
23
+ status_code: 2 # STATUS_PROCESSED
24
+
25
+ - id: 4
26
+ shipment_id: 5
27
+ status_code: -4 # STATUS_CANCEL_FAILED
28
+
29
+ - id: 5
30
+ shipment_id: 6
31
+ status_code: 20 # STATUS_IN_TRANSMISSION
32
+ parcel_class: 'M'
33
+
34
+
35
+ - id: 6
36
+ shipment_id: 7
37
+ status_code: -2 # STATUS_NEW_FAILED
38
+ shipping_method: 'flatrate_flatrate'
39
+ receiver_firstname: 'Hubertus'
40
+ receiver_postcode: '04229'
41
+ receiver_lastname: 'von Fürstenberg'
42
+ receiver_address_add: '21. Etage'
43
+ receiver_street: 'An der Tabaksmühle 3a'
44
+ receiver_city: 'Leipzig'
45
+ receiver_email: 'hubertus.von.fuerstenberg@trash-mail.com'
46
+ receiver_country_code: 'IRL'
47
+ parcel_class: 'XL'
48
+ includeCashOnDelivery: false
49
+
50
+
51
+
52
+ - id: 7
53
+ shipment_id: 14
54
+ hermes_order_no: 8
55
+ status_code: 2 # STATUS_PROCESSED
56
+
57
+
58
+ - id: 8
59
+ shipment_id: 15
60
+ status_code: 2 # STATUS_PROCESSED
61
+
62
+ - id: 9
63
+ shipment_id: 16
64
+ status_code: 4 # STATUS_FAILED
65
+
66
+ - id: 10
67
+ shipment_id: 17
68
+ status_code: 5 # STATUS_CLOSED
app/code/community/Netresearch/Hermes/Test/var/fixtures/shipments.yaml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tables:
2
+ sales/order:
3
+ - entity_id: 31
4
+ increment_id: 100000055
5
+ shipping_address_id: 42
6
+ base_grand_total: 119.00
7
+ grand_total: 119.00
8
+ currency: 'EUR'
9
+ customer_gender: 1
10
+ shipping_method: 'flatrate_flatrate'
11
+ customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
12
+
13
+ sales/shipment:
14
+ - entity_id: 14
15
+ increment_id: 100000078
16
+ order_id: 31
17
+ shipping_address_id: 45
18
+
19
+ - entity_id: 15
20
+ increment_id: 100000077
21
+ order_id: 31
22
+ shipping_address_id: 45
23
+
24
+ - entity_id: 16
25
+ increment_id: 100000078
26
+ order_id: 31
27
+ shipping_address_id: 45
28
+
29
+ - entity_id: 17
30
+ increment_id: 100000078
31
+ order_id: 31
32
+ shipping_address_id: 45
33
+
34
+
app/code/community/Netresearch/Hermes/controllers/ConfigController.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Netresearch_Hermes_ConfigController extends Mage_Adminhtml_Controller_Action
3
+ {
4
+ protected function _isAllowed()
5
+ {
6
+ return Mage::getSingleton('admin/session')
7
+ ->isAllowed('system/hermes');
8
+ }
9
+
10
+ protected function _checkSectionAllowed($section)
11
+ {
12
+ if (false == Mage::getSingleton('admin/session')->isAllowed('system/hermes/' . $section)) {
13
+ $this->forward('denied');
14
+ }
15
+ }
16
+
17
+ public function updateListOfProductsAction()
18
+ {
19
+ $this->_checkSectionAllowed('update_list_of_products');
20
+ $client = Mage::getModel('hermes/client');
21
+ /* @var $client Netresearch_Hermes_Model_Client */
22
+
23
+ try {
24
+ if (null === $client->updateListOfProducts()) {
25
+ Mage::getSingleton('adminhtml/session')->addError(
26
+ Mage::helper('hermes')->__('The list of products could not be updated.')
27
+ );
28
+ } else {
29
+ Mage::getSingleton('adminhtml/session')->addSuccess(
30
+ Mage::helper('hermes')->__('The list of products was successfully updated.')
31
+ );
32
+ }
33
+ } catch (Exception $e) {
34
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
35
+ }
36
+ $this->_redirectReferer();
37
+ }
38
+ }
app/code/community/Netresearch/Hermes/controllers/ParcelController.php ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Netresearch_Hermes_ParcelController extends Mage_Adminhtml_Controller_Action
4
+ {
5
+ protected function _isAllowed()
6
+ {
7
+ return Mage::getSingleton('admin/session')
8
+ ->isAllowed('sales/shipment/transmit_parcels');
9
+ }
10
+
11
+ protected function _checkSectionAllowed($section)
12
+ {
13
+ if (false == Mage::getSingleton('admin/session')->isAllowed('sales/shipment/' . $section)) {
14
+ return $this->_redirect('denied');
15
+ }
16
+ }
17
+
18
+ public function editAction()
19
+ {
20
+ return $this->loadLayout()->renderLayout();
21
+ }
22
+
23
+ public function transmitHermesParcelsAction()
24
+ {
25
+ $this->_checkSectionAllowed('transmit_parcels');
26
+
27
+ if (true === Mage::getModel('hermes/config')->isEnabled()) {
28
+ try {
29
+ $result = Mage::getModel('hermes/observer')->transmitParcels(new Varien_Event_Observer());
30
+ if (0 < $result['errors']) {
31
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__(
32
+ 'Tried to transfer %d parcels to Hermes, but %d of them raised an error.',
33
+ $result['parcels'],
34
+ $result['errors']
35
+ ));
36
+ } else if(0 < $result['parcels']) {
37
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('hermes')->__(
38
+ 'Successfully transfered %d parcels to Hermes.',
39
+ $result['parcels']
40
+ ));
41
+ } else {
42
+ Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('hermes')->__(
43
+ 'No parcels were transfered to Hermes.',
44
+ $result['parcels']
45
+ ));
46
+ }
47
+ } catch (Exception $e) {
48
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
49
+ }
50
+ } else {
51
+ $message = Mage::helper('hermes')->__('Hermes is disabled in configuration. Please enable it before trying to submit parcels.');
52
+ Mage::getSingleton('adminhtml/session')->addError($message);
53
+ }
54
+ $this->_redirectReferer();
55
+ }
56
+
57
+ public function saveAction()
58
+ {
59
+ $post = $this->getRequest()->getPost('receiver');
60
+ $id = $this->getRequest()->getPost('parcel_id');
61
+ $resumeParcel = (bool)$this->getRequest()->getPost('save_and_resume');
62
+
63
+ try {
64
+ $parcel = Mage::getModel('hermes/parcel')->load($id);
65
+
66
+ /* @var $parcel Netresearch_Hermes_Model_Parcel */
67
+ if ($resumeParcel && $parcel->canBeResumed()) {
68
+ $parcel->setStatusCode(Netresearch_Hermes_Model_Parcel::STATUS_QUEUED);
69
+ }
70
+
71
+ if (Mage::getModel('hermes/config')->isTieredPriceMerchant()) {
72
+ $parcel->setParcelClass($this->getRequest()->getPost('parcel_class'));
73
+ }
74
+ $parcel
75
+ ->setReceiverFirstname($post['firstname'])
76
+ ->setReceiverLastname($post['lastname'])
77
+ ->setReceiverStreet($post['street'])
78
+ ->setReceiverHouseNumber($post['house_number'])
79
+ ->setReceiverAddressAdd($post['address_add'])
80
+ ->setReceiverPostcode($post['postcode'])
81
+ ->setReceiverCity($post['city'])
82
+ ->setReceiverDistrict(isset($post['district']) ? $post['district'] : null)
83
+ ->setReceiverEmail($post['email'])
84
+ ->setReceiverTelephoneNumber($post['telephone_number'])
85
+ ->setReceiverTelephonePrefix($post['telephone_prefix'])
86
+ ->save();
87
+
88
+ Mage::getSingleton('adminhtml/session')->addSuccess(
89
+ Mage::helper('hermes')->__('Receiver data successfully updated.')
90
+ );
91
+ if ($resumeParcel) {
92
+ $this->addResumeMessages();
93
+ }
94
+ } catch (Exception $e) {
95
+ Mage::logException($e);
96
+ Mage::getSingleton('adminhtml/session')->addError(
97
+ Mage::helper('hermes')->__('Receiver data could not be updated.')
98
+ );
99
+ }
100
+
101
+ return $this->_redirect('adminhtml/sales_shipment/view', array(
102
+ 'shipment_id' => $parcel->getShipmentId()
103
+ ));
104
+ }
105
+
106
+ /**
107
+ * add admin messages to inform user about delayed transmission
108
+ *
109
+ * @return void
110
+ */
111
+ protected function addResumeMessages()
112
+ {
113
+ $session = Mage::getSingleton('adminhtml/session');
114
+ $session->addSuccess(
115
+ Mage::helper('hermes')->__('Parcel transmission was resumed')
116
+ );
117
+ $session->addWarning(
118
+ Mage::helper('hermes')->__(
119
+ 'Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
120
+ Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
121
+ )
122
+ );
123
+ }
124
+
125
+ public function getLabelAction()
126
+ {
127
+ $parcelId = $this->getRequest()->getParam('parcelId');
128
+ $format = strtolower(trim($this->getRequest()->getParam('format')));
129
+ $labelPosition = $this->getRequest()->getParam('labelPosition');
130
+ if (!in_array($format, Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::getLabelFileFormats())) {
131
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__('format is not supported'));
132
+ $this->_redirectReferer();
133
+ }
134
+ $contentType = '';
135
+ if ($format == Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF) {
136
+ $contentType = 'application/pdf';
137
+ }
138
+ if ($format == Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::JPEG) {
139
+ $contentType = 'image/jpeg';
140
+ }
141
+ $parcel = $this->getParcel($parcelId);
142
+ try {
143
+ $this->getResponse()->setBody($parcel->getLabel($format, $labelPosition));
144
+ $this->getResponse()->setHeader('Content-type', $contentType, true);
145
+ } catch (Exception $e) {
146
+ Mage::logException($e);
147
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
148
+ $this->_redirectReferer();
149
+ }
150
+ return $this->getResponse();
151
+ }
152
+
153
+ public function repeatTransmissionAction()
154
+ {
155
+ $parcelId = $this->getRequest()->getParam('parcelId');
156
+ $parcel = $this->getParcel($parcelId);
157
+ $parcel->repeatTransmission()->save();
158
+
159
+ $this->addResumeMessages();
160
+
161
+ $this->_redirect('adminhtml/sales_shipment/view/shipment_id/' . $parcel->getShipmentId());
162
+ }
163
+
164
+ public function cancelAction()
165
+ {
166
+ $parcelId = $this->getRequest()->getParam('parcelId');
167
+ $parcel = $this->getParcel($parcelId);
168
+ try {
169
+ $parcel->cancel();
170
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('hermes')->__('Parcel cancellation succeeded'));
171
+ } catch (Exception $e) {
172
+ Mage::logException($e);
173
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('hermes')->__($e->getMessage()));
174
+ }
175
+ $this->_redirect('adminhtml/sales_shipment/view/shipment_id/' . $parcel->getShipmentId());
176
+ }
177
+
178
+ /**
179
+ *
180
+ * @param int $parcelId the id of the parcel
181
+ * @return Netresearch_Hermes_Model_Parcel the parcel
182
+ */
183
+ protected function getParcel($parcelId)
184
+ {
185
+ if (false == is_numeric($parcelId)) {
186
+ $this->_redirect('noroute');
187
+ }
188
+ $parcel = Mage::getModel('hermes/parcel');
189
+ $parcel->load($parcelId);
190
+ if (!$parcel->getId()) {
191
+ $this->_redirect('noroute');
192
+ }
193
+ return $parcel;
194
+ }
195
+
196
+ /**
197
+ * cancel Hermes shipments
198
+ */
199
+ public function massCancelAction()
200
+ {
201
+ /* collect parcels */
202
+ $shipmentIds = $this->getRequest()->getParam('shipment_ids');
203
+ if (!is_array($shipmentIds) || 0 == count($shipmentIds)) {
204
+ Mage::getSingleton('adminhtml/session')->addError(
205
+ Mage::helper('hermes')->__('Please select at least one shipment')
206
+ );
207
+ return $this->_redirect('adminhtml/sales_shipment/index');
208
+ }
209
+ $parcels = Mage::getModel('hermes/parcel')->getCollection()
210
+ ->addFieldToFilter('shipment_id', array('in' => $shipmentIds));
211
+ $successCount = 0;
212
+
213
+ /* cancel parcels */
214
+ foreach ($parcels as $parcel) {
215
+ try {
216
+ $parcel->cancel();
217
+ $successCount++;
218
+ } catch (Exception $e) {
219
+ Mage::getSingleton('adminhtml/session')->addError(
220
+ Mage::helper('hermes')->__('Failed to cancel Hermes shipment %s', $parcel->getShipment()->getIncrementId())
221
+ . ': ' .
222
+ Mage::helper('hermes')->__($e->getMessage())
223
+ );
224
+ }
225
+ }
226
+ if (0 < $successCount) {
227
+ Mage::getSingleton('adminhtml/session')->addSuccess(
228
+ Mage::helper('hermes')->__('Canceled %s Hermes shipments', $successCount)
229
+ );
230
+ }
231
+
232
+ /* calculate error count based on the requested count of shipments */
233
+ $errorCount = count($shipmentIds) - $successCount;
234
+ if (0 < $errorCount) {
235
+ Mage::getSingleton('adminhtml/session')->addError(
236
+ Mage::helper('hermes')->__('Failed to cancel %s Hermes shipments', $errorCount)
237
+ );
238
+ }
239
+ $this->_redirect('adminhtml/sales_shipment/index');
240
+ }
241
+ }
app/code/community/Netresearch/Hermes/controllers/ShipmentController.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Netresearch Hermes
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade this extension to
16
+ * newer versions in the future.
17
+ *
18
+ * @category Netresearch
19
+ * @package Netresearch_Hermes
20
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
21
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
22
+ */
23
+
24
+ /**
25
+ * Hermes Shipment controller
26
+ *
27
+ * @category Netresearch
28
+ * @package Netresearch_Hermes
29
+ * @author Michael Lühr <michael.luehr@netresearch.de>
30
+ */
31
+ class Netresearch_Hermes_ShipmentController
32
+ extends Mage_Adminhtml_Controller_Action
33
+ {
34
+
35
+ /**
36
+ * uses for semi-automatic shipping
37
+ * creates shipments and according hermes parcels for one or more
38
+ * orders (= massActio)
39
+ */
40
+ public function createShipmentsAction()
41
+ {
42
+ $orderIds = $this->getRequest()->getParam('order_ids');
43
+ $notifyCustomer = $this->getRequest()->getParam('notifyCustomer');
44
+ $parcelClass = Mage::getModel('hermes/config')->isTieredPriceMerchant() ? $this->getRequest()->getParam('parcelClass') : '';
45
+
46
+ $parcelSuccessCount = 0;
47
+ $parcelErrorCount = 0;
48
+
49
+ if (!is_array($orderIds) || sizeof($orderIds) <= 0) {
50
+ Mage::getSingleton('adminhtml/session')->addError(
51
+ Mage::helper('hermes')->__('No order was selected!'));
52
+ } else {
53
+ $orders = Mage::getModel('sales/order')
54
+ ->getCollection()
55
+ ->addFieldToFilter('entity_id', array('in' => $orderIds))
56
+ ->load();
57
+ if (0 < $orders->count()) {
58
+ $orderHelper = Mage::helper('hermes/order');
59
+ $createdShipments = $orderHelper->shipOrders($orders, $parcelClass, $notifyCustomer);
60
+ $parcelErrorCount = sizeof($createdShipments['errors']);
61
+ $parcelSuccessCount = sizeof($createdShipments['success']);
62
+ foreach ($createdShipments['errors'] as $orderNumber=>$error) {
63
+ Mage::getSingleton('adminhtml/session')->addError(
64
+ Mage::helper('hermes')->__('Order %s threw error: %s', $orderNumber, $error)
65
+ );
66
+ }
67
+ } else {
68
+ $parcelErrorCount = sizeof($orderIds);
69
+ }
70
+
71
+ }
72
+ if (0 < $parcelSuccessCount) {
73
+ Mage::getSingleton('adminhtml/session')->addSuccess(
74
+ Mage::helper('hermes')->__('%d Hermes shipment(s) created', $parcelSuccessCount)
75
+ );
76
+ Mage::getSingleton('adminhtml/session')->addWarning(
77
+ Mage::helper('hermes')->__(
78
+ 'Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href="%s">trigger prompt transmission</a>.',
79
+ Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/parcel/transmitHermesParcels')
80
+ ));
81
+ }
82
+ if (0 < $parcelErrorCount) {
83
+ Mage::getSingleton('adminhtml/session')->addError(
84
+ Mage::helper('hermes')->__('%d Hermes shipment(s) could not be created', $parcelErrorCount)
85
+ );
86
+ }
87
+ $this->_redirectReferer();
88
+ }
89
+
90
+ protected function _isAllowed()
91
+ {
92
+ return Mage::getSingleton('admin/session')->isAllowed('sales/shipment/create_hermes_shipments');
93
+ }
94
+ }
app/code/community/Netresearch/Hermes/etc/adminhtml.xml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * @category Acl
5
+ * @package Netresearch_Hermes
6
+ * @author Christoph Aßmann <christoph.assmann@netresearch.de>
7
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ */
10
+ -->
11
+ <config>
12
+ <acl>
13
+ <resources>
14
+ <admin>
15
+ <children>
16
+ <sales>
17
+ <children>
18
+ <shipment>
19
+ <children>
20
+ <transmit_parcels translate="title">
21
+ <title>Transmit Parcel Data to Hermes</title>
22
+ </transmit_parcels>
23
+ <create_hermes_shipments translate="title">
24
+ <title>Create shipment(s) for Hermes</title>
25
+ </create_hermes_shipments>
26
+ </children>
27
+ </shipment>
28
+ </children>
29
+ </sales>
30
+ <system>
31
+ <children>
32
+ <config>
33
+ <children>
34
+ <hermes>
35
+ <title>Hermes Settings</title>
36
+ </hermes>
37
+ </children>
38
+ </config>
39
+ <hermes translate="title" module="hermes">
40
+ <title>Hermes</title>
41
+ <sort_order>20</sort_order>
42
+ <children>
43
+ <update_list_of_products translate="title">
44
+ <title>Update List of Hermes Products</title>
45
+ </update_list_of_products>
46
+ <configuration translate="title">
47
+ <title>Settings</title>
48
+ </configuration>
49
+ </children>
50
+ </hermes>
51
+ </children>
52
+ </system>
53
+ </children>
54
+ </admin>
55
+ </resources>
56
+ </acl>
57
+ </config>
app/code/community/Netresearch/Hermes/etc/config.xml ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Netresearch_Hermes>
5
+ <version>15.04.29</version>
6
+ </Netresearch_Hermes>
7
+ </modules>
8
+ <global>
9
+ <helpers>
10
+ <hermes>
11
+ <class>Netresearch_Hermes_Helper</class>
12
+ </hermes>
13
+ </helpers>
14
+ <models>
15
+ <hermes>
16
+ <class>Netresearch_Hermes_Model</class>
17
+ <resourceModel>hermes_mysql4</resourceModel>
18
+ </hermes>
19
+ <hermes_mysql4>
20
+ <class>Netresearch_Hermes_Model_Mysql4</class>
21
+ <entities>
22
+ <parcel>
23
+ <table>hermes_parcel</table>
24
+ </parcel>
25
+ </entities>
26
+ </hermes_mysql4>
27
+ </models>
28
+ <blocks>
29
+ <hermes>
30
+ <class>Netresearch_Hermes_Block</class>
31
+ </hermes>
32
+ </blocks>
33
+ <resources>
34
+ <hermes_setup>
35
+ <setup>
36
+ <module>Netresearch_Hermes</module>
37
+ </setup>
38
+ </hermes_setup>
39
+ </resources>
40
+ <sales>
41
+ <shipping>
42
+ <carriers>
43
+ <hermes>
44
+ <class>Netresearch_Hermes_Model_Shipping_Carrier_Hermes</class>
45
+ </hermes>
46
+ </carriers>
47
+ </shipping>
48
+ </sales>
49
+ </global>
50
+ <adminhtml>
51
+ <translate>
52
+ <modules>
53
+ <Netresearch_Hermes>
54
+ <files>
55
+ <hermes>Netresearch_Hermes.csv</hermes>
56
+ </files>
57
+ </Netresearch_Hermes>
58
+ </modules>
59
+ </translate>
60
+ <events>
61
+ <sales_order_shipment_save_before>
62
+ <observers>
63
+ <check_shipment>
64
+ <class>hermes/observer</class>
65
+ <method>checkShipment</method>
66
+ </check_shipment>
67
+ </observers>
68
+ </sales_order_shipment_save_before>
69
+ <sales_order_shipment_save_after>
70
+ <observers>
71
+ <save_hermes_shipment_data>
72
+ <class>hermes/observer</class>
73
+ <method>saveHermesShipmentData</method>
74
+ </save_hermes_shipment_data>
75
+ </observers>
76
+ </sales_order_shipment_save_after>
77
+ <core_block_abstract_to_html_after>
78
+ <observers>
79
+ <hermes_sales_order_shipment_create_tracking>
80
+ <class>hermes/observer</class>
81
+ <method>addShipmentCreationForm</method>
82
+ </hermes_sales_order_shipment_create_tracking>
83
+ <hermes_sales_order_shipment_view_tracking>
84
+ <class>hermes/observer</class>
85
+ <method>addShipmentViewInfo</method>
86
+ </hermes_sales_order_shipment_view_tracking>
87
+ </observers>
88
+ </core_block_abstract_to_html_after>
89
+ <adminhtml_block_html_before>
90
+ <observers>
91
+ <hermes_sales_order_grid>
92
+ <class>hermes/observer</class>
93
+ <method>addOrderGridMassActionAndIcon</method>
94
+ </hermes_sales_order_grid>
95
+ <hermes_shipment_grid>
96
+ <class>hermes/observer</class>
97
+ <method>addShipmentGridMassActionAndColumns</method>
98
+ </hermes_shipment_grid>
99
+ </observers>
100
+ </adminhtml_block_html_before>
101
+ <sales_order_shipment_grid_collection_load_before>
102
+ <observers>
103
+ <hermes_shipment_grid_collection>
104
+ <class>hermes/observer</class>
105
+ <method>addParcelsToShipmentGridCollection</method>
106
+ </hermes_shipment_grid_collection>
107
+ </observers>
108
+ </sales_order_shipment_grid_collection_load_before>
109
+ </events>
110
+ <layout>
111
+ <updates>
112
+ <hermes>
113
+ <file>hermes.xml</file>
114
+ </hermes>
115
+ </updates>
116
+ </layout>
117
+ <menu>
118
+ <sales>
119
+ <children>
120
+ <shipment>
121
+ <children>
122
+ <transmit_parcels translate="title" module="hermes">
123
+ <title>Transmit Parcel Data to Hermes</title>
124
+ <action>adminhtml/parcel/transmitHermesParcels</action>
125
+ <sort_order>10</sort_order>
126
+ </transmit_parcels>
127
+ </children>
128
+ </shipment>
129
+ </children>
130
+ </sales>
131
+ <system>
132
+ <children>
133
+ <hermes>
134
+ <title>Hermes</title>
135
+ <sort_order>12</sort_order>
136
+ <children>
137
+ <update_list_of_products translate="title" module="hermes">
138
+ <title>Update List of Products</title>
139
+ <action>adminhtml/config/updateListOfProducts</action>
140
+ <sort_order>20</sort_order>
141
+ </update_list_of_products>
142
+ <configuration translate="title">
143
+ <title>Configuration</title>
144
+ <action>adminhtml/system_config/edit/section/hermes</action>
145
+ <sort_order>30</sort_order>
146
+ </configuration>
147
+ </children>
148
+ </hermes>
149
+ </children>
150
+ </system>
151
+ </menu>
152
+ </adminhtml>
153
+ <admin>
154
+ <routers>
155
+ <adminhtml>
156
+ <args>
157
+ <modules>
158
+ <hermes after="Mage_Adminhtml">Netresearch_Hermes</hermes>
159
+ </modules>
160
+ </args>
161
+ </adminhtml>
162
+ </routers>
163
+ </admin>
164
+ <crontab>
165
+ <jobs>
166
+ <update_list_of_products>
167
+ <schedule><cron_expr>0 1 * * *</cron_expr></schedule>
168
+ <run><model>hermes/observer::updateListOfProducts</model></run>
169
+ </update_list_of_products>
170
+ <create_parcels_for_hermes>
171
+ <schedule>
172
+ <cron_expr>0,15,30,45 * * * *</cron_expr>
173
+ </schedule>
174
+ <run>
175
+ <model>hermes/observer::createParcelsForHermes</model>
176
+ </run>
177
+ </create_parcels_for_hermes>
178
+ <transmit_parcels_for_hermes>
179
+ <schedule>
180
+ <cron_expr>2,17,32,47 * * * *</cron_expr>
181
+ </schedule>
182
+ <run>
183
+ <model>hermes/observer::transmitParcels</model>
184
+ </run>
185
+ </transmit_parcels_for_hermes>
186
+ </jobs>
187
+ </crontab>
188
+ <default>
189
+ <carriers>
190
+ <hermes>
191
+ <active>1</active>
192
+ <model>hermes/shipping_carrier_hermes</model>
193
+ <title>Hermes</title>
194
+ </hermes>
195
+ </carriers>
196
+ <hermes>
197
+ <general>
198
+ <active>0</active>
199
+ <testmode>1</testmode>
200
+ <logging_enabled>1</logging_enabled>
201
+ <!-- installation_date: see /app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php -->
202
+ <installation_date></installation_date>
203
+ </general>
204
+ <account>
205
+ <partner_id>EXT000159</partner_id>
206
+ <api_pwd>171a49c0d02d394a134b17f911332563</api_pwd>
207
+ </account>
208
+ <api_data>
209
+ <props_list_of_products_atg>
210
+ <number_of_products>5</number_of_products>
211
+ <dated>2012-04-10T12:49:51.264Z</dated>
212
+ <label_acceptance_terms_and_conditions><![CDATA[Ich akzeptiere die AGB der Hermes Logistik Gruppe Deutschland GmbH.]]></label_acceptance_terms_and_conditions>
213
+ <label_acceptance_liability_limit><![CDATA[Mir ist bekannt, dass die Hermes Logistik Gruppe Deutschland GmbH nur Pakete bis zu einem Wert von EUR 500,00 pro Paket entgegennimmt. ]]></label_acceptance_liability_limit>
214
+ <url_terms_and_conditions><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/AGB]]></url_terms_and_conditions>
215
+ <net_price_cash_on_delivery_eurocent><![CDATA[350]]></net_price_cash_on_delivery_eurocent>
216
+ <settlement_type><![CDATA[Abrechnung zum Staffelpreis]]></settlement_type>
217
+ <url_hermes_logogram><![CDATA[https://profipaketservice.hlg.de/wps/themes/html/Hermes-Standard/img/hlg_prips_api2_vkr.gif]]></url_hermes_logogram>
218
+ <url_liability_informations><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/AGB]]></url_liability_informations>
219
+ <url_packaging_guidelines><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/VERPACKUNGSRICHTLINIEN]]></url_packaging_guidelines>
220
+ <url_portal_b2c><![CDATA[https://profipaketservice.hlg.de/wps/portal/PROPS_DEU/]]></url_portal_b2c>
221
+ <vat_info><![CDATA[Unsere Preise verstehen sich zzgl. 19% MwSt.]]></vat_info>
222
+ <products>{"DEU":{"product_classes":{"all":{"weightMinKg":"0.000","weigthMaxKg":"31.500","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":310,"thridEdgeCmMax":50,"exclusions":"","netPriceEurcent":1102}}},"BEL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"DNK":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Gr\u00f6nland, F\u00e4r\u00f6er","netPriceEurcent":1975}}},"EST":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"FIN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Aland","netPriceEurcent":1975}}},"FRA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"GBR":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"IRL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"ITA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer San Marino, Livigno, Vatikanstadt","netPriceEurcent":1975}}},"LVA":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"LTU":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"LUX":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"MCO":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"NLD":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer \u00dcberseegebiete","netPriceEurcent":1975}}},"AUT":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"POL":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"PRT":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Azoren, Madeira","netPriceEurcent":1975}}},"SWE":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"SVK":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"SVN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"ESP":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"au\u00dfer Ceuta, Lanzarote, Fuerteventura, Gran Canaria, Teneriffa, La Gomera, La Palma, El Hierro, Melilla","netPriceEurcent":1975}}},"CZE":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}},"HUN":{"product_classes":{"XS":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":0,"shortestPlusLongestEdgeCmMax":30,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1000},"S":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":31,"shortestPlusLongestEdgeCmMax":50,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1100},"M":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":51,"shortestPlusLongestEdgeCmMax":80,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1400},"L":{"weightMinKg":"0.000","weigthMaxKg":"25.000","shortestPlusLongestEdgeCmMin":81,"shortestPlusLongestEdgeCmMax":120,"thridEdgeCmMax":null,"exclusions":"","netPriceEurcent":1975}}}}</products>
223
+ </props_list_of_products_atg>
224
+ </api_data>
225
+ <general>
226
+ <allowed_countries>BEL,DNK,DEU,EST,FIN,FRA,IRL,ITA,LVA,LIE,LTU,LUX,MCO,NLD,POL,AUT,PRT,SWE,CHE,SVK,SVN,ESP,CZE,HUN,GBR</allowed_countries>
227
+ <allowed_cod_countries>DEU</allowed_cod_countries>
228
+ </general>
229
+ <test>
230
+ <wsdl>app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl</wsdl>
231
+ </test>
232
+ <prod>
233
+ <wsdl>app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl</wsdl>
234
+ </prod>
235
+ <tracking>
236
+ <url>https://www.myhermes.de/wps/portal/paket/SISYR?auftragsNummer=%orderNo%</url>
237
+ </tracking>
238
+ <info>
239
+ <support_mail>hermes.support@netresearch.de</support_mail>
240
+ </info>
241
+ <autocreate>
242
+ <enabled>0</enabled>
243
+ </autocreate>
244
+ </hermes>
245
+ </default>
246
+ <phpunit>
247
+ <suite>
248
+ <modules>
249
+ <Netresearch_Hermes />
250
+ </modules>
251
+ </suite>
252
+ </phpunit>
253
+ </config>
app/code/community/Netresearch/Hermes/etc/system.xml ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * @category Config
5
+ * @package Netresearch_Hermes
6
+ * @author Christoph Aßmann <christoph.assmann@netresearch.de>
7
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ */
10
+ -->
11
+ <config>
12
+ <sections>
13
+ <hermes translate="label" module="hermes">
14
+ <label>Hermes</label>
15
+ <tab>sales</tab>
16
+ <sort_order>335</sort_order>
17
+ <show_in_default>1</show_in_default>
18
+ <show_in_website>1</show_in_website>
19
+ <show_in_store>1</show_in_store>
20
+ <groups>
21
+ <support translate="label">
22
+ <label>Information</label>
23
+ <frontend_type>text</frontend_type>
24
+ <frontend_model>hermes/adminhtml_system_config_notice</frontend_model>
25
+ <sort_order>0</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>1</show_in_store>
29
+ </support>
30
+ <global translate="label">
31
+ <label>List of Products</label>
32
+ <frontend_type>text</frontend_type>
33
+ <frontend_model>hermes/adminhtml_system_config_products</frontend_model>
34
+ <sort_order>1</sort_order>
35
+ <show_in_default>1</show_in_default>
36
+ <show_in_website>0</show_in_website>
37
+ <show_in_store>0</show_in_store>
38
+ </global>
39
+ <general translate="label">
40
+ <label>Basic Configuration</label>
41
+ <frontend_type>text</frontend_type>
42
+ <sort_order>10</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>0</show_in_website>
45
+ <show_in_store>0</show_in_store>
46
+ <fields>
47
+ <active translate="label">
48
+ <label>Enabled</label>
49
+ <frontend_type>select</frontend_type>
50
+ <source_model>adminhtml/system_config_source_yesno</source_model>
51
+ <sort_order>100</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>0</show_in_website>
54
+ <show_in_store>0</show_in_store>
55
+ </active>
56
+ <testmode translate="label">
57
+ <label>Test mode</label>
58
+ <comment><![CDATA[By choosing 'yes' the sandbox mode will be activated. Please notice, that all generated parcels will be ignored by Hermes.]]></comment>
59
+ <frontend_type>select</frontend_type>
60
+ <source_model>adminhtml/system_config_source_yesno</source_model>
61
+ <sort_order>300</sort_order>
62
+ <show_in_default>1</show_in_default>
63
+ <show_in_website>0</show_in_website>
64
+ <show_in_store>0</show_in_store>
65
+ </testmode>
66
+ <logging_enabled translate="label comment">
67
+ <label>Log requests and responses of the web service.</label>
68
+ <comment><![CDATA[Please ensure that the Magento-Log is activated]]></comment>
69
+ <frontend_type>select</frontend_type>
70
+ <source_model>adminhtml/system_config_source_yesno</source_model>
71
+ <sort_order>400</sort_order>
72
+ <show_in_default>1</show_in_default>
73
+ <show_in_website>0</show_in_website>
74
+ <show_in_store>0</show_in_store>
75
+ </logging_enabled>
76
+ </fields>
77
+ </general>
78
+
79
+ <account translate="label" module="hermes">
80
+ <label>Account</label>
81
+ <frontend_type>text</frontend_type>
82
+ <sort_order>21</sort_order>
83
+ <show_in_default>1</show_in_default>
84
+ <show_in_website>0</show_in_website>
85
+ <show_in_store>0</show_in_store>
86
+ <fields>
87
+ <username>
88
+ <label>Username of the client</label>
89
+ <frontend_type>text</frontend_type>
90
+ <sort_order>400</sort_order>
91
+ <show_in_default>1</show_in_default>
92
+ <show_in_website>0</show_in_website>
93
+ <show_in_store>0</show_in_store>
94
+ <validate>required-entry</validate>
95
+ </username>
96
+ <password>
97
+ <label>Password of the client</label>
98
+ <frontend_type>text</frontend_type>
99
+ <sort_order>800</sort_order>
100
+ <show_in_default>1</show_in_default>
101
+ <show_in_website>0</show_in_website>
102
+ <show_in_store>0</show_in_store>
103
+ <validate>required-entry</validate>
104
+ </password>
105
+ </fields>
106
+ </account>
107
+
108
+ <shipment_options translate="label" module="hermes">
109
+ <label>Shipment Options</label>
110
+ <frontend_type>text</frontend_type>
111
+ <sort_order>30</sort_order>
112
+ <show_in_default>1</show_in_default>
113
+ <show_in_website>1</show_in_website>
114
+ <show_in_store>1</show_in_store>
115
+ <fields>
116
+ <disabled_shipping_methods translate="label">
117
+ <label>Disabled shipping methods</label>
118
+ <comment>Please select shipping methods which should not be used for Hermes shipping.</comment>
119
+ <frontend_type>multiselect</frontend_type>
120
+ <source_model>Netresearch_Hermes_Model_System_Config_Source_Shipping_Methods</source_model>
121
+ <sort_order>10</sort_order>
122
+ <show_in_default>1</show_in_default>
123
+ <show_in_website>1</show_in_website>
124
+ <show_in_store>1</show_in_store>
125
+ </disabled_shipping_methods>
126
+ <cod_payment_methods translate="label">
127
+ <label>Payment methods allowed for cash on delivery</label>
128
+ <frontend_type>multiselect</frontend_type>
129
+ <source_model>Netresearch_Hermes_Model_System_Config_Source_Payment_Methods</source_model>
130
+ <sort_order>20</sort_order>
131
+ <show_in_default>1</show_in_default>
132
+ <show_in_website>1</show_in_website>
133
+ <show_in_store>1</show_in_store>
134
+ </cod_payment_methods>
135
+ <hermes_mail translate="label">
136
+ <label>Let Hermes send an email containing the tracking link</label>
137
+ <frontend_type>select</frontend_type>
138
+ <source_model>adminhtml/system_config_source_yesno</source_model>
139
+ <sort_order>30</sort_order>
140
+ <show_in_default>1</show_in_default>
141
+ <show_in_website>0</show_in_website>
142
+ <show_in_store>0</show_in_store>
143
+ </hermes_mail>
144
+ </fields>
145
+ </shipment_options>
146
+
147
+ <shipment_label_options translate="shipment label" module="hermes">
148
+ <label>Shipment Label Options</label>
149
+ <sort_order>40</sort_order>
150
+ <show_in_default>1</show_in_default>
151
+ <show_in_website>0</show_in_website>
152
+ <show_in_store>0</show_in_store>
153
+ <fields>
154
+ <shipment_label_option_pdf translate="shipment label placement">
155
+ <label>shipment label placement</label>
156
+ <comment>Please select placement for shipment label.</comment>
157
+ <frontend_type>select</frontend_type>
158
+ <source_model>Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements</source_model>
159
+ <sort_order>2</sort_order>
160
+ <show_in_default>1</show_in_default>
161
+ <show_in_website>0</show_in_website>
162
+ <show_in_store>0</show_in_store>
163
+ </shipment_label_option_pdf>
164
+ </fields>
165
+ </shipment_label_options>
166
+
167
+ <email_options translate="email options" module="hermes">
168
+ <label>e-mail options</label>
169
+ <sort_order>50</sort_order>
170
+ <show_in_default>1</show_in_default>
171
+ <show_in_website>0</show_in_website>
172
+ <show_in_store>0</show_in_store>
173
+ <fields>
174
+ <send_email_automatic_mode translate="label">
175
+ <label>send shipping e-mail immediately if automatic mode is used</label>
176
+ <frontend_type>select</frontend_type>
177
+ <source_model>adminhtml/system_config_source_yesno</source_model>
178
+ <sort_order>500</sort_order>
179
+ <show_in_default>1</show_in_default>
180
+ <show_in_website>0</show_in_website>
181
+ <show_in_store>0</show_in_store>
182
+ </send_email_automatic_mode>
183
+ <send_email_tracking_link translate="label">
184
+ <label>send shipping e-mail if tracking link is available</label>
185
+ <frontend_type>select</frontend_type>
186
+ <source_model>adminhtml/system_config_source_yesno</source_model>
187
+ <sort_order>510</sort_order>
188
+ <show_in_default>1</show_in_default>
189
+ <show_in_website>0</show_in_website>
190
+ <show_in_store>0</show_in_store>
191
+ </send_email_tracking_link>
192
+ </fields>
193
+ </email_options>
194
+
195
+ <autocreate translate="label" module="hermes">
196
+ <label>Automatic shipment creation</label>
197
+ <sort_order>60</sort_order>
198
+ <show_in_default>1</show_in_default>
199
+ <show_in_website>0</show_in_website>
200
+ <show_in_store>0</show_in_store>
201
+ <fields>
202
+ <enabled translate="label">
203
+ <label>Enabled</label>
204
+ <frontend_type>select</frontend_type>
205
+ <source_model>adminhtml/system_config_source_yesno</source_model>
206
+ <sort_order>0</sort_order>
207
+ <show_in_default>1</show_in_default>
208
+ <show_in_website>0</show_in_website>
209
+ <show_in_store>0</show_in_store>
210
+ </enabled>
211
+ <order_status translate="label">
212
+ <label>Allowed order status codes for automatic shipment</label>
213
+ <frontend_type>multiselect</frontend_type>
214
+ <source_model>Mage_Adminhtml_Model_System_Config_Source_Order_Status</source_model>
215
+ <sort_order>10</sort_order>
216
+ <show_in_default>1</show_in_default>
217
+ <show_in_website>0</show_in_website>
218
+ <show_in_store>0</show_in_store>
219
+ </order_status>
220
+ <payment_methods translate="label">
221
+ <label>Payment methods allowed for automatic shipment</label>
222
+ <frontend_type>multiselect</frontend_type>
223
+ <source_model>Netresearch_Hermes_Model_System_Config_Source_Payment_Methods</source_model>
224
+ <sort_order>20</sort_order>
225
+ <show_in_default>1</show_in_default>
226
+ <show_in_website>0</show_in_website>
227
+ <show_in_store>0</show_in_store>
228
+ </payment_methods>
229
+ </fields>
230
+ </autocreate>
231
+ </groups>
232
+ </hermes>
233
+ </sections>
234
+ </config>
app/code/community/Netresearch/Hermes/sql/hermes_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Netresearch Hermes
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * DISCLAIMER
13
+ *
14
+ * Do not edit or add to this file if you wish to upgrade this extension to
15
+ * newer versions in the future.
16
+ *
17
+ * @category Netresearch
18
+ * @package Netresearch_Hermes
19
+ * @copyright Copyright (c) 2012 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
20
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
21
+ */
22
+
23
+ /**
24
+ * Database setup script
25
+ *
26
+ * @category Netresearch
27
+ * @package Netresearch_Hermes
28
+ * @author Thomas Birke <thomas.birke@netresearch.de>
29
+ */
30
+
31
+ $installer = $this;
32
+ $installer->startSetup();
33
+
34
+ $installer->run("
35
+ -- DROP TABLE IF EXISTS {$this->getTable('hermes_parcel')};
36
+
37
+ CREATE TABLE IF NOT EXISTS {$this->getTable('hermes_parcel')} (
38
+ `id` int(10) unsigned NOT NULL auto_increment,
39
+ `shipment_id` int(10) NOT NULL,
40
+ `hermes_order_no` varchar(50),
41
+ `hermes_shipping_id` varchar(16),
42
+ `hermes_creation_date` datetime,
43
+ `hermes_status_text` varchar(255),
44
+ `hermes_status` int(11),
45
+ `receiver_firstname` varchar(255),
46
+ `receiver_lastname` varchar(25),
47
+ `receiver_street` varchar(27),
48
+ `receiver_house_number` varchar(5),
49
+ `receiver_address_add` varchar(255),
50
+ `receiver_postcode` varchar(255),
51
+ `receiver_city` varchar(30),
52
+ `receiver_district` varchar(255),
53
+ `receiver_country_code` varchar(3),
54
+ `receiver_email` varchar(255),
55
+ `receiver_telephone_number` varchar(255),
56
+ `receiver_telephone_prefix` varchar(50),
57
+ `parcel_class` varchar(3),
58
+ `amount_cash_on_delivery_eurocent` int(11) NOT NULL default 0,
59
+ `include_cash_on_delivery` int(1) NOT NULL default 0,
60
+ `error_code` varchar(10),
61
+ `error_message` varchar(1000),
62
+ `status_code` int NOT NULL default 0,
63
+ PRIMARY KEY (`id`),
64
+ UNIQUE KEY `shipment_id` (`shipment_id`)
65
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Hermes Shipments';
66
+
67
+ -- set installation timestamp
68
+ REPLACE INTO {$this->getTable('core_config_data')} (scope, scope_id, path, value) VALUES ('default', 0, 'hermes/general/installation_date', NOW());
69
+ ");
70
+
71
+ $installer->endSetup();
72
+
app/code/community/Netresearch/Hermes/var/ProPS.prod.wsdl ADDED
@@ -0,0 +1,1379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <wsdl:definitions targetNamespace="http://hermes_api.service.hlg.de" xmlns:impl="http://hermes_api.service.hlg.de" xmlns:intf="http://hermes_api.service.hlg.de" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <wsdl:types>
4
+ <schema targetNamespace="http://hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
5
+ <import namespace="http://validate.hermes_api.service.hlg.de"/>
6
+ <import namespace="http://props.hermes_api.service.hlg.de"/>
7
+ <element name="propsGetCollectionOrdersResponse">
8
+ <complexType>
9
+ <sequence>
10
+ <element name="propsGetCollectionOrdersReturn" nillable="true" type="tns2:ListOfPropsCollectionOrders"/>
11
+ </sequence>
12
+ </complexType>
13
+ </element>
14
+ <element name="propsOrderDelete">
15
+ <complexType>
16
+ <sequence>
17
+ <element name="orderNo" nillable="true" type="xsd:string"/>
18
+ </sequence>
19
+ </complexType>
20
+ </element>
21
+ <element name="propsOrderDeleteResponse">
22
+ <complexType>
23
+ <sequence>
24
+ <element name="propsOrderDeleteReturn" type="xsd:boolean"/>
25
+ </sequence>
26
+ </complexType>
27
+ </element>
28
+ <element name="propsCollectionRequest">
29
+ <complexType>
30
+ <sequence>
31
+ <element name="collectionOrder" nillable="true" type="tns2:PropsCollectionOrder"/>
32
+ </sequence>
33
+ </complexType>
34
+ </element>
35
+ <element name="propsCollectionRequestResponse">
36
+ <complexType>
37
+ <sequence>
38
+ <element name="propsCollectionRequestReturn" nillable="true" type="xsd:string"/>
39
+ </sequence>
40
+ </complexType>
41
+ </element>
42
+ <element name="propsOrderPrintLabelPdf">
43
+ <complexType>
44
+ <sequence>
45
+ <element name="orderNo" nillable="true" type="xsd:string"/>
46
+ <element name="printPosition" nillable="true" type="xsd:short"/>
47
+ </sequence>
48
+ </complexType>
49
+ </element>
50
+ <element name="propsOrderPrintLabelPdfResponse">
51
+ <complexType>
52
+ <sequence>
53
+ <element name="propsOrderPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
54
+ </sequence>
55
+ </complexType>
56
+ </element>
57
+ <element name="propsCollectionCancel">
58
+ <complexType>
59
+ <sequence>
60
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
61
+ </sequence>
62
+ </complexType>
63
+ </element>
64
+ <element name="propsCollectionCancelResponse">
65
+ <complexType>
66
+ <sequence>
67
+ <element name="propsCollectionCancelReturn" type="xsd:boolean"/>
68
+ </sequence>
69
+ </complexType>
70
+ </element>
71
+ <element name="propsOrderSaveAndPrintLabelPdf">
72
+ <complexType>
73
+ <sequence>
74
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
75
+ <element name="printPosition" nillable="true" type="xsd:short"/>
76
+ </sequence>
77
+ </complexType>
78
+ </element>
79
+ <element name="propsOrderSaveAndPrintLabelPdfResponse">
80
+ <complexType>
81
+ <sequence>
82
+ <element name="propsOrderSaveAndPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
83
+ </sequence>
84
+ </complexType>
85
+ </element>
86
+ <element name="init">
87
+ <complexType>
88
+ <sequence>
89
+ <element name="arg_0_0" nillable="true" type="xsd:anyType"/>
90
+ </sequence>
91
+ </complexType>
92
+ </element>
93
+ <element name="initResponse">
94
+ <complexType>
95
+ <sequence/>
96
+ </complexType>
97
+ </element>
98
+ <element name="propsGetPropsOrder">
99
+ <complexType>
100
+ <sequence>
101
+ <element name="orderNo" nillable="true" type="xsd:string"/>
102
+ <element name="shippingId" nillable="true" type="xsd:string"/>
103
+ </sequence>
104
+ </complexType>
105
+ </element>
106
+ <element name="propsGetPropsOrderResponse">
107
+ <complexType>
108
+ <sequence>
109
+ <element name="propsGetPropsOrderReturn" nillable="true" type="tns2:PropsOrderLong"/>
110
+ </sequence>
111
+ </complexType>
112
+ </element>
113
+ <element name="propsOrderSave">
114
+ <complexType>
115
+ <sequence>
116
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
117
+ </sequence>
118
+ </complexType>
119
+ </element>
120
+ <element name="propsOrderSaveResponse">
121
+ <complexType>
122
+ <sequence>
123
+ <element name="propsOrderSaveReturn" nillable="true" type="xsd:string"/>
124
+ </sequence>
125
+ </complexType>
126
+ </element>
127
+ <element name="propsOrdersPrintLabelsPdf">
128
+ <complexType>
129
+ <sequence>
130
+ <element name="requestedOrderNumbers" nillable="true" type="tns2:RequestedOrderNumbers"/>
131
+ </sequence>
132
+ </complexType>
133
+ </element>
134
+ <element name="propsOrdersPrintLabelsPdfResponse">
135
+ <complexType>
136
+ <sequence>
137
+ <element name="propsOrdersPrintLabelsPdfReturn" nillable="true" type="tns2:MultipleShippingLabelsPdf"/>
138
+ </sequence>
139
+ </complexType>
140
+ </element>
141
+ <element name="propsUserLogin">
142
+ <complexType>
143
+ <sequence>
144
+ <element name="login" nillable="true" type="tns5:HermesLogin"/>
145
+ </sequence>
146
+ </complexType>
147
+ </element>
148
+ <element name="propsUserLoginResponse">
149
+ <complexType>
150
+ <sequence>
151
+ <element name="propsUserLoginReturn" nillable="true" type="xsd:string"/>
152
+ </sequence>
153
+ </complexType>
154
+ </element>
155
+ <element name="propsOrderPrintLabelJpeg">
156
+ <complexType>
157
+ <sequence>
158
+ <element name="orderNo" nillable="true" type="xsd:string"/>
159
+ </sequence>
160
+ </complexType>
161
+ </element>
162
+ <element name="propsOrderPrintLabelJpegResponse">
163
+ <complexType>
164
+ <sequence>
165
+ <element name="propsOrderPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
166
+ </sequence>
167
+ </complexType>
168
+ </element>
169
+ <element name="propsListOfProductsATG">
170
+ <complexType>
171
+ <sequence/>
172
+ </complexType>
173
+ </element>
174
+ <element name="propsListOfProductsATGResponse">
175
+ <complexType>
176
+ <sequence>
177
+ <element name="propsListOfProductsATGReturn" nillable="true" type="tns2:ListOfProducts"/>
178
+ </sequence>
179
+ </complexType>
180
+ </element>
181
+ <element name="propsReadShipmentStatus">
182
+ <complexType>
183
+ <sequence>
184
+ <element name="shippingId" nillable="true" type="xsd:string"/>
185
+ </sequence>
186
+ </complexType>
187
+ </element>
188
+ <element name="propsReadShipmentStatusResponse">
189
+ <complexType>
190
+ <sequence>
191
+ <element name="propsReadShipmentStatusReturn" nillable="true" type="tns2:ShippingStatus"/>
192
+ </sequence>
193
+ </complexType>
194
+ </element>
195
+ <element name="propsGetPropsOrders">
196
+ <complexType>
197
+ <sequence>
198
+ <element name="searchCriteria" nillable="true" type="tns2:PropsOrderSearchCriteria"/>
199
+ </sequence>
200
+ </complexType>
201
+ </element>
202
+ <element name="propsGetPropsOrdersResponse">
203
+ <complexType>
204
+ <sequence>
205
+ <element name="propsGetPropsOrdersReturn" nillable="true" type="tns2:ListOfPropsOrders"/>
206
+ </sequence>
207
+ </complexType>
208
+ </element>
209
+ <element name="propsProductlnformation">
210
+ <complexType>
211
+ <sequence/>
212
+ </complexType>
213
+ </element>
214
+ <element name="propsProductlnformationResponse">
215
+ <complexType>
216
+ <sequence>
217
+ <element name="propsProductlnformationReturn" nillable="true" type="tns2:ListOfProductInfos"/>
218
+ </sequence>
219
+ </complexType>
220
+ </element>
221
+ <element name="propsCheckAvailability">
222
+ <complexType>
223
+ <sequence/>
224
+ </complexType>
225
+ </element>
226
+ <element name="propsCheckAvailabilityResponse">
227
+ <complexType>
228
+ <sequence>
229
+ <element name="propsCheckAvailabilityReturn" nillable="true" type="xsd:string"/>
230
+ </sequence>
231
+ </complexType>
232
+ </element>
233
+ <element name="propsOrderSaveAndPrintLabelJpeg">
234
+ <complexType>
235
+ <sequence>
236
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
237
+ </sequence>
238
+ </complexType>
239
+ </element>
240
+ <element name="propsOrderSaveAndPrintLabelJpegResponse">
241
+ <complexType>
242
+ <sequence>
243
+ <element name="propsOrderSaveAndPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
244
+ </sequence>
245
+ </complexType>
246
+ </element>
247
+ <element name="destroy">
248
+ <complexType>
249
+ <sequence/>
250
+ </complexType>
251
+ </element>
252
+ <element name="destroyResponse">
253
+ <complexType>
254
+ <sequence/>
255
+ </complexType>
256
+ </element>
257
+ <element name="propsImportOrders">
258
+ <complexType>
259
+ <sequence>
260
+ <element name="requestedOrders" nillable="true" type="tns2:RequestedOrders"/>
261
+ </sequence>
262
+ </complexType>
263
+ </element>
264
+ <element name="propsImportOrdersResponse">
265
+ <complexType>
266
+ <sequence>
267
+ <element name="propsImportOrdersReturn" nillable="true" type="tns2:ImportResult"/>
268
+ </sequence>
269
+ </complexType>
270
+ </element>
271
+ <element name="propsGetCollectionOrders">
272
+ <complexType>
273
+ <sequence>
274
+ <element name="collectionDateFrom" nillable="true" type="xsd:dateTime"/>
275
+ <element name="collectionDateTo" nillable="true" type="xsd:dateTime"/>
276
+ <element name="onlyMoreThan2ccm" type="xsd:boolean"/>
277
+ </sequence>
278
+ </complexType>
279
+ </element>
280
+ </schema>
281
+ <schema targetNamespace="http://props.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
282
+ <import namespace="http://exception.common.service.hlg.de"/>
283
+ <import namespace="http://common.hermes_api.service.hlg.de"/>
284
+ <complexType name="ListOfPropsCollectionOrders">
285
+ <sequence>
286
+ <element name="orders" nillable="true" type="tns2:ArrayOfPropsCollectionOrderLong"/>
287
+ </sequence>
288
+ </complexType>
289
+ <complexType name="PropsCollectionOrderLong">
290
+ <sequence>
291
+ <element name="moreThan2ccm" nillable="true" type="xsd:string"/>
292
+ <element name="volume" nillable="true" type="xsd:double"/>
293
+ <element name="collectionAdress" nillable="true" type="tns3:Address"/>
294
+ <element name="timeframe" nillable="true" type="xsd:string"/>
295
+ <element name="collectionType" nillable="true" type="xsd:string"/>
296
+ <element name="numberOfParcels" nillable="true" type="xsd:int"/>
297
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
298
+ </sequence>
299
+ </complexType>
300
+ <complexType name="ArrayOfPropsCollectionOrderLong">
301
+ <sequence>
302
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsCollectionOrderLong" nillable="true" type="tns2:PropsCollectionOrderLong"/>
303
+ </sequence>
304
+ </complexType>
305
+ <complexType name="PropsCollectionOrder">
306
+ <sequence>
307
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
308
+ <element name="numberOfParcelsClass_L" nillable="true" type="xsd:int"/>
309
+ <element name="numberOfParcelsClass_M" nillable="true" type="xsd:int"/>
310
+ <element name="numberOfParcelsClass_S" nillable="true" type="xsd:int"/>
311
+ <element name="numberOfParcelsClass_XL" nillable="true" type="xsd:int"/>
312
+ <element name="numberOfParcelsClass_XLwithBulkGoods" nillable="true" type="xsd:int"/>
313
+ <element name="numberOfParcelsClass_XS" nillable="true" type="xsd:int"/>
314
+ </sequence>
315
+ </complexType>
316
+ <complexType name="ShippingLabelPdf">
317
+ <sequence>
318
+ <element name="pdfData" type="xsd:base64Binary"/>
319
+ <element name="orderNo" nillable="true" type="xsd:string"/>
320
+ </sequence>
321
+ </complexType>
322
+ <complexType name="PropsOrder">
323
+ <sequence>
324
+ <element name="orderNo" nillable="true" type="xsd:string"/>
325
+ <element name="receiver" nillable="true" type="tns3:Address"/>
326
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
327
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
328
+ <element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
329
+ <element name="includeCashOnDelivery" type="xsd:boolean"/>
330
+ <element name="withBulkGoods" type="xsd:boolean"/>
331
+ </sequence>
332
+ </complexType>
333
+ <complexType name="PropsOrderLong">
334
+ <sequence>
335
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
336
+ <element name="ebayNumber" nillable="true" type="xsd:string"/>
337
+ <element name="shipper" nillable="true" type="tns3:Address"/>
338
+ <element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
339
+ <element name="trackingFlag" nillable="true" type="xsd:short"/>
340
+ <element name="orderNo" nillable="true" type="xsd:string"/>
341
+ <element name="shippingId" nillable="true" type="xsd:string"/>
342
+ <element name="printDate" nillable="true" type="xsd:dateTime"/>
343
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
344
+ <element name="status_text" nillable="true" type="xsd:string"/>
345
+ <element name="status" nillable="true" type="xsd:short"/>
346
+ <element name="receiver" nillable="true" type="tns3:Address"/>
347
+ </sequence>
348
+ </complexType>
349
+ <complexType name="RequestedOrderNumbers">
350
+ <sequence>
351
+ <element name="orderNumbers" nillable="true" type="tns2:ArrayOf_xsd_nillable_string"/>
352
+ </sequence>
353
+ </complexType>
354
+ <complexType name="ArrayOf_xsd_nillable_string">
355
+ <sequence>
356
+ <element maxOccurs="unbounded" minOccurs="0" name="string" nillable="true" type="xsd:string"/>
357
+ </sequence>
358
+ </complexType>
359
+ <complexType name="MultipleShippingLabelsPdf">
360
+ <sequence>
361
+ <element name="pdfData" type="xsd:base64Binary"/>
362
+ <element name="orderRes" nillable="true" type="tns2:ArrayOfOrderResponse"/>
363
+ </sequence>
364
+ </complexType>
365
+ <complexType name="OrderResponse">
366
+ <sequence>
367
+ <element name="orderNo" nillable="true" type="xsd:string"/>
368
+ <element name="exceptionItems" nillable="true" type="tns2:ArrayOf_tns4_nillable_ExceptionItem"/>
369
+ </sequence>
370
+ </complexType>
371
+ <complexType name="ArrayOf_tns4_nillable_ExceptionItem">
372
+ <sequence>
373
+ <element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
374
+ </sequence>
375
+ </complexType>
376
+ <complexType name="ArrayOfOrderResponse">
377
+ <sequence>
378
+ <element maxOccurs="unbounded" minOccurs="0" name="OrderResponse" nillable="true" type="tns2:OrderResponse"/>
379
+ </sequence>
380
+ </complexType>
381
+ <complexType name="ShippingLabelJpeg">
382
+ <sequence>
383
+ <element name="jpegData" type="xsd:base64Binary"/>
384
+ <element name="orderNo" nillable="true" type="xsd:string"/>
385
+ </sequence>
386
+ </complexType>
387
+ <complexType name="ListOfProducts">
388
+ <sequence>
389
+ <element name="numberOfProducts" type="xsd:int"/>
390
+ <element name="products" nillable="true" type="tns2:ArrayOfProductWithPrice"/>
391
+ <element name="dated" nillable="true" type="xsd:dateTime"/>
392
+ <element name="labelAcceptanceTermsAndConditions" nillable="true" type="xsd:string"/>
393
+ <element name="labelAcceptanceLiabilityLimit" nillable="true" type="xsd:string"/>
394
+ <element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
395
+ <element name="netPriceCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
396
+ <element name="settlementType" nillable="true" type="xsd:string"/>
397
+ <element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
398
+ <element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
399
+ <element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
400
+ <element name="urlPortalB2C" nillable="true" type="xsd:string"/>
401
+ <element name="vatInfo" nillable="true" type="xsd:string"/>
402
+ <element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
403
+ </sequence>
404
+ </complexType>
405
+ <complexType name="ProductWithPrice">
406
+ <sequence>
407
+ <element name="netPriceEurcent" nillable="true" type="xsd:int"/>
408
+ <element name="validAt" nillable="true" type="xsd:dateTime"/>
409
+ <element name="productInfo" nillable="true" type="tns2:ProductInfo"/>
410
+ </sequence>
411
+ </complexType>
412
+ <complexType name="ProductInfo">
413
+ <sequence>
414
+ <element name="parcelFormat" nillable="true" type="tns2:ParcelFormat"/>
415
+ <element name="deliveryDestinations" nillable="true" type="tns2:ArrayOfDeliveryDestination"/>
416
+ </sequence>
417
+ </complexType>
418
+ <complexType name="ParcelFormat">
419
+ <sequence>
420
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
421
+ <element name="shortestPlusLongestEdgeCmMax" nillable="true" type="xsd:int"/>
422
+ <element name="shortestPlusLongestEdgeCmMin" nillable="true" type="xsd:int"/>
423
+ <element name="thridEdgeCmMax" nillable="true" type="xsd:int"/>
424
+ <element name="weightMinKg" nillable="true" type="xsd:decimal"/>
425
+ <element name="weigthMaxKg" nillable="true" type="xsd:decimal"/>
426
+ </sequence>
427
+ </complexType>
428
+ <complexType name="DeliveryDestination">
429
+ <sequence>
430
+ <element name="exclusions" nillable="true" type="xsd:string"/>
431
+ <element name="countryCode" nillable="true" type="xsd:string"/>
432
+ </sequence>
433
+ </complexType>
434
+ <complexType name="ArrayOfDeliveryDestination">
435
+ <sequence>
436
+ <element maxOccurs="unbounded" minOccurs="0" name="DeliveryDestination" nillable="true" type="tns2:DeliveryDestination"/>
437
+ </sequence>
438
+ </complexType>
439
+ <complexType name="ArrayOfProductWithPrice">
440
+ <sequence>
441
+ <element maxOccurs="unbounded" minOccurs="0" name="ProductWithPrice" nillable="true" type="tns2:ProductWithPrice"/>
442
+ </sequence>
443
+ </complexType>
444
+ <complexType name="ServiceCharge">
445
+ <sequence>
446
+ <element name="displayname" nillable="true" type="xsd:string"/>
447
+ <element name="amountEurocent" nillable="true" type="xsd:short"/>
448
+ <element name="currency" nillable="true" type="xsd:string"/>
449
+ </sequence>
450
+ </complexType>
451
+ <complexType name="ArrayOfServiceCharge">
452
+ <sequence>
453
+ <element maxOccurs="unbounded" minOccurs="0" name="ServiceCharge" nillable="true" type="tns2:ServiceCharge"/>
454
+ </sequence>
455
+ </complexType>
456
+ <complexType name="ShippingStatus">
457
+ <sequence>
458
+ <element name="shippingId" nillable="true" type="xsd:string"/>
459
+ <element name="statusText" nillable="true" type="xsd:string"/>
460
+ <element name="statusDateTime" nillable="true" type="xsd:dateTime"/>
461
+ </sequence>
462
+ </complexType>
463
+ <complexType name="PropsOrderSearchCriteria">
464
+ <sequence>
465
+ <element name="identNo" nillable="true" type="xsd:string"/>
466
+ <element name="orderNo" nillable="true" type="xsd:string"/>
467
+ <element name="lastname" nillable="true" type="xsd:string"/>
468
+ <element name="city" nillable="true" type="xsd:string"/>
469
+ <element name="from" nillable="true" type="xsd:dateTime"/>
470
+ <element name="to" nillable="true" type="xsd:dateTime"/>
471
+ <element name="postcode" nillable="true" type="xsd:string"/>
472
+ <element name="countryCode" nillable="true" type="xsd:string"/>
473
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
474
+ <element name="ebayNumber" nillable="true" type="xsd:string"/>
475
+ <element name="status" nillable="true" type="tns2:ArrayOf_xsd_nillable_short"/>
476
+ </sequence>
477
+ </complexType>
478
+ <complexType name="ArrayOf_xsd_nillable_short">
479
+ <sequence>
480
+ <element maxOccurs="unbounded" minOccurs="0" name="short" nillable="true" type="xsd:short"/>
481
+ </sequence>
482
+ </complexType>
483
+ <complexType name="ListOfPropsOrders">
484
+ <sequence>
485
+ <element name="orders" nillable="true" type="tns2:ArrayOfPropsOrderShort"/>
486
+ </sequence>
487
+ </complexType>
488
+ <complexType name="PropsOrderShort">
489
+ <sequence>
490
+ <element name="orderNo" nillable="true" type="xsd:string"/>
491
+ <element name="shippingId" nillable="true" type="xsd:string"/>
492
+ <element name="creationDate" nillable="true" type="xsd:dateTime"/>
493
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
494
+ <element name="status_text" nillable="true" type="xsd:string"/>
495
+ <element name="status" nillable="true" type="xsd:short"/>
496
+ <element name="firstname" nillable="true" type="xsd:string"/>
497
+ <element name="lastname" nillable="true" type="xsd:string"/>
498
+ <element name="postcode" nillable="true" type="xsd:string"/>
499
+ <element name="city" nillable="true" type="xsd:string"/>
500
+ <element name="countryCode" nillable="true" type="xsd:string"/>
501
+ <element name="bulkGoodsServiceAmount" nillable="true" type="xsd:int"/>
502
+ </sequence>
503
+ </complexType>
504
+ <complexType name="ArrayOfPropsOrderShort">
505
+ <sequence>
506
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsOrderShort" nillable="true" type="tns2:PropsOrderShort"/>
507
+ </sequence>
508
+ </complexType>
509
+ <complexType name="ListOfProductInfos">
510
+ <sequence>
511
+ <element name="productInfoList" nillable="true" type="tns2:ArrayOfProductInfo"/>
512
+ <element name="dated" nillable="true" type="xsd:dateTime"/>
513
+ <element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
514
+ <element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
515
+ <element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
516
+ <element name="urlPortalB2C" nillable="true" type="xsd:string"/>
517
+ <element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
518
+ <element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
519
+ </sequence>
520
+ </complexType>
521
+ <complexType name="ArrayOfProductInfo">
522
+ <sequence>
523
+ <element maxOccurs="unbounded" minOccurs="0" name="ProductInfo" nillable="true" type="tns2:ProductInfo"/>
524
+ </sequence>
525
+ </complexType>
526
+ <complexType name="RequestedOrders">
527
+ <sequence>
528
+ <element name="propsOrders" nillable="true" type="tns2:ArrayOfPropsOrder"/>
529
+ </sequence>
530
+ </complexType>
531
+ <complexType name="ArrayOfPropsOrder">
532
+ <sequence>
533
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsOrder" nillable="true" type="tns2:PropsOrder"/>
534
+ </sequence>
535
+ </complexType>
536
+ <complexType name="ImportResult">
537
+ <sequence>
538
+ <element name="orderResponses" nillable="true" type="tns2:ArrayOfOrderResponse"/>
539
+ </sequence>
540
+ </complexType>
541
+ </schema>
542
+ <schema targetNamespace="http://common.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
543
+ <complexType name="Address">
544
+ <sequence>
545
+ <element name="addressAdd" nillable="true" type="xsd:string"/>
546
+ <element name="email" nillable="true" type="xsd:string"/>
547
+ <element name="houseNumber" nillable="true" type="xsd:string"/>
548
+ <element name="countryCode" nillable="true" type="xsd:string"/>
549
+ <element name="lastname" nillable="true" type="xsd:string"/>
550
+ <element name="city" nillable="true" type="xsd:string"/>
551
+ <element name="district" nillable="true" type="xsd:string"/>
552
+ <element name="postcode" nillable="true" type="xsd:string"/>
553
+ <element name="street" nillable="true" type="xsd:string"/>
554
+ <element name="telephoneNumber" nillable="true" type="xsd:string"/>
555
+ <element name="firstname" nillable="true" type="xsd:string"/>
556
+ <element name="telephonePrefix" nillable="true" type="xsd:string"/>
557
+ </sequence>
558
+ </complexType>
559
+ </schema>
560
+ <schema targetNamespace="http://exception.common.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
561
+ <complexType name="ServiceException">
562
+ <sequence>
563
+ <element name="exceptionItems" nillable="true" type="tns4:ArrayOfExceptionItem"/>
564
+ </sequence>
565
+ </complexType>
566
+ <complexType name="ExceptionItem">
567
+ <sequence>
568
+ <element name="errorCode" type="xsd:int"/>
569
+ <element name="errorMessage" nillable="true" type="xsd:string"/>
570
+ <element name="errorType" nillable="true" type="xsd:string"/>
571
+ </sequence>
572
+ </complexType>
573
+ <complexType name="ArrayOfExceptionItem">
574
+ <sequence>
575
+ <element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
576
+ </sequence>
577
+ </complexType>
578
+ <element name="ServiceException" nillable="true" type="tns4:ServiceException"/>
579
+ </schema>
580
+ <schema targetNamespace="http://validate.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
581
+ <complexType name="HermesLogin">
582
+ <sequence>
583
+ <element name="benutzername" nillable="true" type="xsd:string"/>
584
+ <element name="kennwort" nillable="true" type="xsd:string"/>
585
+ </sequence>
586
+ </complexType>
587
+ </schema>
588
+ </wsdl:types>
589
+
590
+ <wsdl:message name="propsGetPropsOrdersRequest">
591
+ <wsdl:part element="impl:propsGetPropsOrders" name="parameters"/>
592
+
593
+ </wsdl:message>
594
+
595
+ <wsdl:message name="propsOrderSaveAndPrintLabelPdfRequest">
596
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelPdf" name="parameters"/>
597
+
598
+ </wsdl:message>
599
+
600
+ <wsdl:message name="propsOrderPrintLabelPdfRequest">
601
+ <wsdl:part element="impl:propsOrderPrintLabelPdf" name="parameters"/>
602
+
603
+ </wsdl:message>
604
+
605
+ <wsdl:message name="propsGetPropsOrderResponse">
606
+ <wsdl:part element="impl:propsGetPropsOrderResponse" name="parameters"/>
607
+
608
+ </wsdl:message>
609
+
610
+ <wsdl:message name="propsOrderDeleteRequest">
611
+ <wsdl:part element="impl:propsOrderDelete" name="parameters"/>
612
+
613
+ </wsdl:message>
614
+
615
+ <wsdl:message name="propsGetCollectionOrdersRequest">
616
+ <wsdl:part element="impl:propsGetCollectionOrders" name="parameters"/>
617
+
618
+ </wsdl:message>
619
+
620
+ <wsdl:message name="propsGetPropsOrderRequest">
621
+ <wsdl:part element="impl:propsGetPropsOrder" name="parameters"/>
622
+
623
+ </wsdl:message>
624
+
625
+ <wsdl:message name="propsOrderSaveAndPrintLabelJpegResponse">
626
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelJpegResponse" name="parameters"/>
627
+
628
+ </wsdl:message>
629
+
630
+ <wsdl:message name="propsListOfProductsATGResponse">
631
+ <wsdl:part element="impl:propsListOfProductsATGResponse" name="parameters"/>
632
+
633
+ </wsdl:message>
634
+
635
+ <wsdl:message name="propsOrderPrintLabelJpegResponse">
636
+ <wsdl:part element="impl:propsOrderPrintLabelJpegResponse" name="parameters"/>
637
+
638
+ </wsdl:message>
639
+
640
+ <wsdl:message name="propsCollectionRequestRequest">
641
+ <wsdl:part element="impl:propsCollectionRequest" name="parameters"/>
642
+
643
+ </wsdl:message>
644
+
645
+ <wsdl:message name="propsProductlnformationResponse">
646
+ <wsdl:part element="impl:propsProductlnformationResponse" name="parameters"/>
647
+
648
+ </wsdl:message>
649
+
650
+ <wsdl:message name="propsReadShipmentStatusResponse">
651
+ <wsdl:part element="impl:propsReadShipmentStatusResponse" name="parameters"/>
652
+
653
+ </wsdl:message>
654
+
655
+ <wsdl:message name="propsCheckAvailabilityResponse">
656
+ <wsdl:part element="impl:propsCheckAvailabilityResponse" name="parameters"/>
657
+
658
+ </wsdl:message>
659
+
660
+ <wsdl:message name="propsImportOrdersResponse">
661
+ <wsdl:part element="impl:propsImportOrdersResponse" name="parameters"/>
662
+
663
+ </wsdl:message>
664
+
665
+ <wsdl:message name="destroyResponse">
666
+ <wsdl:part element="impl:destroyResponse" name="parameters"/>
667
+
668
+ </wsdl:message>
669
+
670
+ <wsdl:message name="propsCheckAvailabilityRequest">
671
+ <wsdl:part element="impl:propsCheckAvailability" name="parameters"/>
672
+
673
+ </wsdl:message>
674
+
675
+ <wsdl:message name="initRequest">
676
+ <wsdl:part element="impl:init" name="parameters"/>
677
+
678
+ </wsdl:message>
679
+
680
+ <wsdl:message name="propsUserLoginRequest">
681
+ <wsdl:part element="impl:propsUserLogin" name="parameters"/>
682
+
683
+ </wsdl:message>
684
+
685
+ <wsdl:message name="propsCollectionRequestResponse">
686
+ <wsdl:part element="impl:propsCollectionRequestResponse" name="parameters"/>
687
+
688
+ </wsdl:message>
689
+
690
+ <wsdl:message name="propsOrderPrintLabelJpegRequest">
691
+ <wsdl:part element="impl:propsOrderPrintLabelJpeg" name="parameters"/>
692
+
693
+ </wsdl:message>
694
+
695
+ <wsdl:message name="propsOrderSaveAndPrintLabelJpegRequest">
696
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelJpeg" name="parameters"/>
697
+
698
+ </wsdl:message>
699
+
700
+ <wsdl:message name="propsListOfProductsATGRequest">
701
+ <wsdl:part element="impl:propsListOfProductsATG" name="parameters"/>
702
+
703
+ </wsdl:message>
704
+
705
+ <wsdl:message name="propsCollectionCancelRequest">
706
+ <wsdl:part element="impl:propsCollectionCancel" name="parameters"/>
707
+
708
+ </wsdl:message>
709
+
710
+ <wsdl:message name="propsCollectionCancelResponse">
711
+ <wsdl:part element="impl:propsCollectionCancelResponse" name="parameters"/>
712
+
713
+ </wsdl:message>
714
+
715
+ <wsdl:message name="propsOrderDeleteResponse">
716
+ <wsdl:part element="impl:propsOrderDeleteResponse" name="parameters"/>
717
+
718
+ </wsdl:message>
719
+
720
+ <wsdl:message name="propsGetCollectionOrdersResponse">
721
+ <wsdl:part element="impl:propsGetCollectionOrdersResponse" name="parameters"/>
722
+
723
+ </wsdl:message>
724
+
725
+ <wsdl:message name="propsOrderPrintLabelPdfResponse">
726
+ <wsdl:part element="impl:propsOrderPrintLabelPdfResponse" name="parameters"/>
727
+
728
+ </wsdl:message>
729
+
730
+ <wsdl:message name="propsUserLoginResponse">
731
+ <wsdl:part element="impl:propsUserLoginResponse" name="parameters"/>
732
+
733
+ </wsdl:message>
734
+
735
+ <wsdl:message name="propsGetPropsOrdersResponse">
736
+ <wsdl:part element="impl:propsGetPropsOrdersResponse" name="parameters"/>
737
+
738
+ </wsdl:message>
739
+
740
+ <wsdl:message name="propsOrderSaveAndPrintLabelPdfResponse">
741
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelPdfResponse" name="parameters"/>
742
+
743
+ </wsdl:message>
744
+
745
+ <wsdl:message name="initResponse">
746
+ <wsdl:part element="impl:initResponse" name="parameters"/>
747
+
748
+ </wsdl:message>
749
+
750
+ <wsdl:message name="propsOrderSaveRequest">
751
+ <wsdl:part element="impl:propsOrderSave" name="parameters"/>
752
+
753
+ </wsdl:message>
754
+
755
+ <wsdl:message name="propsOrdersPrintLabelsPdfRequest">
756
+ <wsdl:part element="impl:propsOrdersPrintLabelsPdf" name="parameters"/>
757
+
758
+ </wsdl:message>
759
+
760
+ <wsdl:message name="propsImportOrdersRequest">
761
+ <wsdl:part element="impl:propsImportOrders" name="parameters"/>
762
+
763
+ </wsdl:message>
764
+
765
+ <wsdl:message name="destroyRequest">
766
+ <wsdl:part element="impl:destroy" name="parameters"/>
767
+
768
+ </wsdl:message>
769
+
770
+ <wsdl:message name="ServiceException">
771
+ <wsdl:part element="tns4:ServiceException" name="fault"/>
772
+
773
+ </wsdl:message>
774
+
775
+ <wsdl:message name="propsOrderSaveResponse">
776
+ <wsdl:part element="impl:propsOrderSaveResponse" name="parameters"/>
777
+
778
+ </wsdl:message>
779
+
780
+ <wsdl:message name="propsOrdersPrintLabelsPdfResponse">
781
+ <wsdl:part element="impl:propsOrdersPrintLabelsPdfResponse" name="parameters"/>
782
+
783
+ </wsdl:message>
784
+
785
+ <wsdl:message name="propsReadShipmentStatusRequest">
786
+ <wsdl:part element="impl:propsReadShipmentStatus" name="parameters"/>
787
+
788
+ </wsdl:message>
789
+
790
+ <wsdl:message name="propsProductlnformationRequest">
791
+ <wsdl:part element="impl:propsProductlnformation" name="parameters"/>
792
+
793
+ </wsdl:message>
794
+
795
+ <wsdl:portType name="ProPS">
796
+ <wsdl:operation name="propsGetCollectionOrders">
797
+ <wsdl:input message="impl:propsGetCollectionOrdersRequest" name="propsGetCollectionOrdersRequest"/>
798
+
799
+ <wsdl:output message="impl:propsGetCollectionOrdersResponse" name="propsGetCollectionOrdersResponse"/>
800
+
801
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
802
+
803
+ </wsdl:operation>
804
+
805
+ <wsdl:operation name="propsOrderDelete">
806
+ <wsdl:input message="impl:propsOrderDeleteRequest" name="propsOrderDeleteRequest"/>
807
+
808
+ <wsdl:output message="impl:propsOrderDeleteResponse" name="propsOrderDeleteResponse"/>
809
+
810
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
811
+
812
+ </wsdl:operation>
813
+
814
+ <wsdl:operation name="propsCollectionRequest">
815
+ <wsdl:input message="impl:propsCollectionRequestRequest" name="propsCollectionRequestRequest"/>
816
+
817
+ <wsdl:output message="impl:propsCollectionRequestResponse" name="propsCollectionRequestResponse"/>
818
+
819
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
820
+
821
+ </wsdl:operation>
822
+
823
+ <wsdl:operation name="propsOrderPrintLabelPdf">
824
+ <wsdl:input message="impl:propsOrderPrintLabelPdfRequest" name="propsOrderPrintLabelPdfRequest"/>
825
+
826
+ <wsdl:output message="impl:propsOrderPrintLabelPdfResponse" name="propsOrderPrintLabelPdfResponse"/>
827
+
828
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
829
+
830
+ </wsdl:operation>
831
+
832
+ <wsdl:operation name="propsCollectionCancel">
833
+ <wsdl:input message="impl:propsCollectionCancelRequest" name="propsCollectionCancelRequest"/>
834
+
835
+ <wsdl:output message="impl:propsCollectionCancelResponse" name="propsCollectionCancelResponse"/>
836
+
837
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
838
+
839
+ </wsdl:operation>
840
+
841
+ <wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
842
+ <wsdl:input message="impl:propsOrderSaveAndPrintLabelPdfRequest" name="propsOrderSaveAndPrintLabelPdfRequest"/>
843
+
844
+ <wsdl:output message="impl:propsOrderSaveAndPrintLabelPdfResponse" name="propsOrderSaveAndPrintLabelPdfResponse"/>
845
+
846
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
847
+
848
+ </wsdl:operation>
849
+
850
+ <wsdl:operation name="init">
851
+ <wsdl:input message="impl:initRequest" name="initRequest"/>
852
+
853
+ <wsdl:output message="impl:initResponse" name="initResponse"/>
854
+
855
+ </wsdl:operation>
856
+
857
+ <wsdl:operation name="propsGetPropsOrder">
858
+ <wsdl:input message="impl:propsGetPropsOrderRequest" name="propsGetPropsOrderRequest"/>
859
+
860
+ <wsdl:output message="impl:propsGetPropsOrderResponse" name="propsGetPropsOrderResponse"/>
861
+
862
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
863
+
864
+ </wsdl:operation>
865
+
866
+ <wsdl:operation name="propsOrderSave">
867
+ <wsdl:input message="impl:propsOrderSaveRequest" name="propsOrderSaveRequest"/>
868
+
869
+ <wsdl:output message="impl:propsOrderSaveResponse" name="propsOrderSaveResponse"/>
870
+
871
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
872
+
873
+ </wsdl:operation>
874
+
875
+ <wsdl:operation name="propsOrdersPrintLabelsPdf">
876
+ <wsdl:input message="impl:propsOrdersPrintLabelsPdfRequest" name="propsOrdersPrintLabelsPdfRequest"/>
877
+
878
+ <wsdl:output message="impl:propsOrdersPrintLabelsPdfResponse" name="propsOrdersPrintLabelsPdfResponse"/>
879
+
880
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
881
+
882
+ </wsdl:operation>
883
+
884
+ <wsdl:operation name="propsUserLogin">
885
+ <wsdl:input message="impl:propsUserLoginRequest" name="propsUserLoginRequest"/>
886
+
887
+ <wsdl:output message="impl:propsUserLoginResponse" name="propsUserLoginResponse"/>
888
+
889
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
890
+
891
+ </wsdl:operation>
892
+
893
+ <wsdl:operation name="propsOrderPrintLabelJpeg">
894
+ <wsdl:input message="impl:propsOrderPrintLabelJpegRequest" name="propsOrderPrintLabelJpegRequest"/>
895
+
896
+ <wsdl:output message="impl:propsOrderPrintLabelJpegResponse" name="propsOrderPrintLabelJpegResponse"/>
897
+
898
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
899
+
900
+ </wsdl:operation>
901
+
902
+ <wsdl:operation name="propsListOfProductsATG">
903
+ <wsdl:input message="impl:propsListOfProductsATGRequest" name="propsListOfProductsATGRequest"/>
904
+
905
+ <wsdl:output message="impl:propsListOfProductsATGResponse" name="propsListOfProductsATGResponse"/>
906
+
907
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
908
+
909
+ </wsdl:operation>
910
+
911
+ <wsdl:operation name="propsReadShipmentStatus">
912
+ <wsdl:input message="impl:propsReadShipmentStatusRequest" name="propsReadShipmentStatusRequest"/>
913
+
914
+ <wsdl:output message="impl:propsReadShipmentStatusResponse" name="propsReadShipmentStatusResponse"/>
915
+
916
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
917
+
918
+ </wsdl:operation>
919
+
920
+ <wsdl:operation name="propsGetPropsOrders">
921
+ <wsdl:input message="impl:propsGetPropsOrdersRequest" name="propsGetPropsOrdersRequest"/>
922
+
923
+ <wsdl:output message="impl:propsGetPropsOrdersResponse" name="propsGetPropsOrdersResponse"/>
924
+
925
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
926
+
927
+ </wsdl:operation>
928
+
929
+ <wsdl:operation name="propsProductlnformation">
930
+ <wsdl:input message="impl:propsProductlnformationRequest" name="propsProductlnformationRequest"/>
931
+
932
+ <wsdl:output message="impl:propsProductlnformationResponse" name="propsProductlnformationResponse"/>
933
+
934
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
935
+
936
+ </wsdl:operation>
937
+
938
+ <wsdl:operation name="propsCheckAvailability">
939
+ <wsdl:input message="impl:propsCheckAvailabilityRequest" name="propsCheckAvailabilityRequest"/>
940
+
941
+ <wsdl:output message="impl:propsCheckAvailabilityResponse" name="propsCheckAvailabilityResponse"/>
942
+
943
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
944
+
945
+ </wsdl:operation>
946
+
947
+ <wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
948
+ <wsdl:input message="impl:propsOrderSaveAndPrintLabelJpegRequest" name="propsOrderSaveAndPrintLabelJpegRequest"/>
949
+
950
+ <wsdl:output message="impl:propsOrderSaveAndPrintLabelJpegResponse" name="propsOrderSaveAndPrintLabelJpegResponse"/>
951
+
952
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
953
+
954
+ </wsdl:operation>
955
+
956
+ <wsdl:operation name="destroy">
957
+ <wsdl:input message="impl:destroyRequest" name="destroyRequest"/>
958
+
959
+ <wsdl:output message="impl:destroyResponse" name="destroyResponse"/>
960
+
961
+ </wsdl:operation>
962
+
963
+ <wsdl:operation name="propsImportOrders">
964
+ <wsdl:input message="impl:propsImportOrdersRequest" name="propsImportOrdersRequest"/>
965
+
966
+ <wsdl:output message="impl:propsImportOrdersResponse" name="propsImportOrdersResponse"/>
967
+
968
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
969
+
970
+ </wsdl:operation>
971
+
972
+ </wsdl:portType>
973
+
974
+ <wsdl:binding name="ProPSSoapBinding" type="impl:ProPS">
975
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
976
+
977
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
978
+
979
+ <wsdl:operation name="propsGetCollectionOrders">
980
+ <wsdlsoap:operation soapAction="propsGetCollectionOrders"/>
981
+
982
+ <wsdl:input name="propsGetCollectionOrdersRequest">
983
+ <wsdlsoap:body use="literal"/>
984
+
985
+ </wsdl:input>
986
+
987
+ <wsdl:output name="propsGetCollectionOrdersResponse">
988
+ <wsdlsoap:body use="literal"/>
989
+
990
+ </wsdl:output>
991
+
992
+ <wsdl:fault name="ServiceException">
993
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
994
+
995
+ </wsdl:fault>
996
+
997
+ </wsdl:operation>
998
+
999
+ <wsdl:operation name="propsOrderDelete">
1000
+ <wsdlsoap:operation soapAction="propsOrderDelete"/>
1001
+
1002
+ <wsdl:input name="propsOrderDeleteRequest">
1003
+ <wsdlsoap:body use="literal"/>
1004
+
1005
+ </wsdl:input>
1006
+
1007
+ <wsdl:output name="propsOrderDeleteResponse">
1008
+ <wsdlsoap:body use="literal"/>
1009
+
1010
+ </wsdl:output>
1011
+
1012
+ <wsdl:fault name="ServiceException">
1013
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1014
+
1015
+ </wsdl:fault>
1016
+
1017
+ </wsdl:operation>
1018
+
1019
+ <wsdl:operation name="propsCollectionRequest">
1020
+ <wsdlsoap:operation soapAction="propsCollectionRequest"/>
1021
+
1022
+ <wsdl:input name="propsCollectionRequestRequest">
1023
+ <wsdlsoap:body use="literal"/>
1024
+
1025
+ </wsdl:input>
1026
+
1027
+ <wsdl:output name="propsCollectionRequestResponse">
1028
+ <wsdlsoap:body use="literal"/>
1029
+
1030
+ </wsdl:output>
1031
+
1032
+ <wsdl:fault name="ServiceException">
1033
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1034
+
1035
+ </wsdl:fault>
1036
+
1037
+ </wsdl:operation>
1038
+
1039
+ <wsdl:operation name="propsOrderPrintLabelPdf">
1040
+ <wsdlsoap:operation soapAction="propsOrderPrintLabelPdf"/>
1041
+
1042
+ <wsdl:input name="propsOrderPrintLabelPdfRequest">
1043
+ <wsdlsoap:body use="literal"/>
1044
+
1045
+ </wsdl:input>
1046
+
1047
+ <wsdl:output name="propsOrderPrintLabelPdfResponse">
1048
+ <wsdlsoap:body use="literal"/>
1049
+
1050
+ </wsdl:output>
1051
+
1052
+ <wsdl:fault name="ServiceException">
1053
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1054
+
1055
+ </wsdl:fault>
1056
+
1057
+ </wsdl:operation>
1058
+
1059
+ <wsdl:operation name="propsCollectionCancel">
1060
+ <wsdlsoap:operation soapAction="propsCollectionCancel"/>
1061
+
1062
+ <wsdl:input name="propsCollectionCancelRequest">
1063
+ <wsdlsoap:body use="literal"/>
1064
+
1065
+ </wsdl:input>
1066
+
1067
+ <wsdl:output name="propsCollectionCancelResponse">
1068
+ <wsdlsoap:body use="literal"/>
1069
+
1070
+ </wsdl:output>
1071
+
1072
+ <wsdl:fault name="ServiceException">
1073
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1074
+
1075
+ </wsdl:fault>
1076
+
1077
+ </wsdl:operation>
1078
+
1079
+ <wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
1080
+ <wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelPdf"/>
1081
+
1082
+ <wsdl:input name="propsOrderSaveAndPrintLabelPdfRequest">
1083
+ <wsdlsoap:body use="literal"/>
1084
+
1085
+ </wsdl:input>
1086
+
1087
+ <wsdl:output name="propsOrderSaveAndPrintLabelPdfResponse">
1088
+ <wsdlsoap:body use="literal"/>
1089
+
1090
+ </wsdl:output>
1091
+
1092
+ <wsdl:fault name="ServiceException">
1093
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1094
+
1095
+ </wsdl:fault>
1096
+
1097
+ </wsdl:operation>
1098
+
1099
+ <wsdl:operation name="init">
1100
+ <wsdlsoap:operation soapAction="init"/>
1101
+
1102
+ <wsdl:input name="initRequest">
1103
+ <wsdlsoap:body use="literal"/>
1104
+
1105
+ </wsdl:input>
1106
+
1107
+ <wsdl:output name="initResponse">
1108
+ <wsdlsoap:body use="literal"/>
1109
+
1110
+ </wsdl:output>
1111
+
1112
+ </wsdl:operation>
1113
+
1114
+ <wsdl:operation name="propsGetPropsOrder">
1115
+ <wsdlsoap:operation soapAction="propsGetPropsOrder"/>
1116
+
1117
+ <wsdl:input name="propsGetPropsOrderRequest">
1118
+ <wsdlsoap:body use="literal"/>
1119
+
1120
+ </wsdl:input>
1121
+
1122
+ <wsdl:output name="propsGetPropsOrderResponse">
1123
+ <wsdlsoap:body use="literal"/>
1124
+
1125
+ </wsdl:output>
1126
+
1127
+ <wsdl:fault name="ServiceException">
1128
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1129
+
1130
+ </wsdl:fault>
1131
+
1132
+ </wsdl:operation>
1133
+
1134
+ <wsdl:operation name="propsOrderSave">
1135
+ <wsdlsoap:operation soapAction="propsOrderSave"/>
1136
+
1137
+ <wsdl:input name="propsOrderSaveRequest">
1138
+ <wsdlsoap:body use="literal"/>
1139
+
1140
+ </wsdl:input>
1141
+
1142
+ <wsdl:output name="propsOrderSaveResponse">
1143
+ <wsdlsoap:body use="literal"/>
1144
+
1145
+ </wsdl:output>
1146
+
1147
+ <wsdl:fault name="ServiceException">
1148
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1149
+
1150
+ </wsdl:fault>
1151
+
1152
+ </wsdl:operation>
1153
+
1154
+ <wsdl:operation name="propsOrdersPrintLabelsPdf">
1155
+ <wsdlsoap:operation soapAction="propsOrdersPrintLabelsPdf"/>
1156
+
1157
+ <wsdl:input name="propsOrdersPrintLabelsPdfRequest">
1158
+ <wsdlsoap:body use="literal"/>
1159
+
1160
+ </wsdl:input>
1161
+
1162
+ <wsdl:output name="propsOrdersPrintLabelsPdfResponse">
1163
+ <wsdlsoap:body use="literal"/>
1164
+
1165
+ </wsdl:output>
1166
+
1167
+ <wsdl:fault name="ServiceException">
1168
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1169
+
1170
+ </wsdl:fault>
1171
+
1172
+ </wsdl:operation>
1173
+
1174
+ <wsdl:operation name="propsUserLogin">
1175
+ <wsdlsoap:operation soapAction="propsUserLogin"/>
1176
+
1177
+ <wsdl:input name="propsUserLoginRequest">
1178
+ <wsdlsoap:body use="literal"/>
1179
+
1180
+ </wsdl:input>
1181
+
1182
+ <wsdl:output name="propsUserLoginResponse">
1183
+ <wsdlsoap:body use="literal"/>
1184
+
1185
+ </wsdl:output>
1186
+
1187
+ <wsdl:fault name="ServiceException">
1188
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1189
+
1190
+ </wsdl:fault>
1191
+
1192
+ </wsdl:operation>
1193
+
1194
+ <wsdl:operation name="propsOrderPrintLabelJpeg">
1195
+ <wsdlsoap:operation soapAction="propsOrderPrintLabelJpeg"/>
1196
+
1197
+ <wsdl:input name="propsOrderPrintLabelJpegRequest">
1198
+ <wsdlsoap:body use="literal"/>
1199
+
1200
+ </wsdl:input>
1201
+
1202
+ <wsdl:output name="propsOrderPrintLabelJpegResponse">
1203
+ <wsdlsoap:body use="literal"/>
1204
+
1205
+ </wsdl:output>
1206
+
1207
+ <wsdl:fault name="ServiceException">
1208
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1209
+
1210
+ </wsdl:fault>
1211
+
1212
+ </wsdl:operation>
1213
+
1214
+ <wsdl:operation name="propsListOfProductsATG">
1215
+ <wsdlsoap:operation soapAction="propsListOfProductsATG"/>
1216
+
1217
+ <wsdl:input name="propsListOfProductsATGRequest">
1218
+ <wsdlsoap:body use="literal"/>
1219
+
1220
+ </wsdl:input>
1221
+
1222
+ <wsdl:output name="propsListOfProductsATGResponse">
1223
+ <wsdlsoap:body use="literal"/>
1224
+
1225
+ </wsdl:output>
1226
+
1227
+ <wsdl:fault name="ServiceException">
1228
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1229
+
1230
+ </wsdl:fault>
1231
+
1232
+ </wsdl:operation>
1233
+
1234
+ <wsdl:operation name="propsReadShipmentStatus">
1235
+ <wsdlsoap:operation soapAction="propsReadShipmentStatus"/>
1236
+
1237
+ <wsdl:input name="propsReadShipmentStatusRequest">
1238
+ <wsdlsoap:body use="literal"/>
1239
+
1240
+ </wsdl:input>
1241
+
1242
+ <wsdl:output name="propsReadShipmentStatusResponse">
1243
+ <wsdlsoap:body use="literal"/>
1244
+
1245
+ </wsdl:output>
1246
+
1247
+ <wsdl:fault name="ServiceException">
1248
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1249
+
1250
+ </wsdl:fault>
1251
+
1252
+ </wsdl:operation>
1253
+
1254
+ <wsdl:operation name="propsGetPropsOrders">
1255
+ <wsdlsoap:operation soapAction="propsGetPropsOrders"/>
1256
+
1257
+ <wsdl:input name="propsGetPropsOrdersRequest">
1258
+ <wsdlsoap:body use="literal"/>
1259
+
1260
+ </wsdl:input>
1261
+
1262
+ <wsdl:output name="propsGetPropsOrdersResponse">
1263
+ <wsdlsoap:body use="literal"/>
1264
+
1265
+ </wsdl:output>
1266
+
1267
+ <wsdl:fault name="ServiceException">
1268
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1269
+
1270
+ </wsdl:fault>
1271
+
1272
+ </wsdl:operation>
1273
+
1274
+ <wsdl:operation name="propsProductlnformation">
1275
+ <wsdlsoap:operation soapAction="propsProductlnformation"/>
1276
+
1277
+ <wsdl:input name="propsProductlnformationRequest">
1278
+ <wsdlsoap:body use="literal"/>
1279
+
1280
+ </wsdl:input>
1281
+
1282
+ <wsdl:output name="propsProductlnformationResponse">
1283
+ <wsdlsoap:body use="literal"/>
1284
+
1285
+ </wsdl:output>
1286
+
1287
+ <wsdl:fault name="ServiceException">
1288
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1289
+
1290
+ </wsdl:fault>
1291
+
1292
+ </wsdl:operation>
1293
+
1294
+ <wsdl:operation name="propsCheckAvailability">
1295
+ <wsdlsoap:operation soapAction="propsCheckAvailability"/>
1296
+
1297
+ <wsdl:input name="propsCheckAvailabilityRequest">
1298
+ <wsdlsoap:body use="literal"/>
1299
+
1300
+ </wsdl:input>
1301
+
1302
+ <wsdl:output name="propsCheckAvailabilityResponse">
1303
+ <wsdlsoap:body use="literal"/>
1304
+
1305
+ </wsdl:output>
1306
+
1307
+ <wsdl:fault name="ServiceException">
1308
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1309
+
1310
+ </wsdl:fault>
1311
+
1312
+ </wsdl:operation>
1313
+
1314
+ <wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
1315
+ <wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelJpeg"/>
1316
+
1317
+ <wsdl:input name="propsOrderSaveAndPrintLabelJpegRequest">
1318
+ <wsdlsoap:body use="literal"/>
1319
+
1320
+ </wsdl:input>
1321
+
1322
+ <wsdl:output name="propsOrderSaveAndPrintLabelJpegResponse">
1323
+ <wsdlsoap:body use="literal"/>
1324
+
1325
+ </wsdl:output>
1326
+
1327
+ <wsdl:fault name="ServiceException">
1328
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1329
+
1330
+ </wsdl:fault>
1331
+
1332
+ </wsdl:operation>
1333
+
1334
+ <wsdl:operation name="destroy">
1335
+ <wsdlsoap:operation soapAction="destroy"/>
1336
+
1337
+ <wsdl:input name="destroyRequest">
1338
+ <wsdlsoap:body use="literal"/>
1339
+
1340
+ </wsdl:input>
1341
+
1342
+ <wsdl:output name="destroyResponse">
1343
+ <wsdlsoap:body use="literal"/>
1344
+
1345
+ </wsdl:output>
1346
+
1347
+ </wsdl:operation>
1348
+
1349
+ <wsdl:operation name="propsImportOrders">
1350
+ <wsdlsoap:operation soapAction="propsImportOrders"/>
1351
+
1352
+ <wsdl:input name="propsImportOrdersRequest">
1353
+ <wsdlsoap:body use="literal"/>
1354
+
1355
+ </wsdl:input>
1356
+
1357
+ <wsdl:output name="propsImportOrdersResponse">
1358
+ <wsdlsoap:body use="literal"/>
1359
+
1360
+ </wsdl:output>
1361
+
1362
+ <wsdl:fault name="ServiceException">
1363
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1364
+
1365
+ </wsdl:fault>
1366
+
1367
+ </wsdl:operation>
1368
+
1369
+ </wsdl:binding>
1370
+
1371
+ <wsdl:service name="ProPSService">
1372
+ <wsdl:port binding="impl:ProPSSoapBinding" name="ProPS">
1373
+ <wsdlsoap:address location="https://hermesapi2.hlg.de/Hermes_API_Web/1_4/services/ProPS"/>
1374
+
1375
+ </wsdl:port>
1376
+
1377
+ </wsdl:service>
1378
+
1379
+ </wsdl:definitions>
app/code/community/Netresearch/Hermes/var/ProPS.test.wsdl ADDED
@@ -0,0 +1,1379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <wsdl:definitions targetNamespace="http://hermes_api.service.hlg.de" xmlns:impl="http://hermes_api.service.hlg.de" xmlns:intf="http://hermes_api.service.hlg.de" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <wsdl:types>
4
+ <schema targetNamespace="http://hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns2="http://props.hermes_api.service.hlg.de" xmlns:tns5="http://validate.hermes_api.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
5
+ <import namespace="http://validate.hermes_api.service.hlg.de"/>
6
+ <import namespace="http://props.hermes_api.service.hlg.de"/>
7
+ <element name="propsGetCollectionOrdersResponse">
8
+ <complexType>
9
+ <sequence>
10
+ <element name="propsGetCollectionOrdersReturn" nillable="true" type="tns2:ListOfPropsCollectionOrders"/>
11
+ </sequence>
12
+ </complexType>
13
+ </element>
14
+ <element name="propsOrderDelete">
15
+ <complexType>
16
+ <sequence>
17
+ <element name="orderNo" nillable="true" type="xsd:string"/>
18
+ </sequence>
19
+ </complexType>
20
+ </element>
21
+ <element name="propsOrderDeleteResponse">
22
+ <complexType>
23
+ <sequence>
24
+ <element name="propsOrderDeleteReturn" type="xsd:boolean"/>
25
+ </sequence>
26
+ </complexType>
27
+ </element>
28
+ <element name="propsCollectionRequest">
29
+ <complexType>
30
+ <sequence>
31
+ <element name="collectionOrder" nillable="true" type="tns2:PropsCollectionOrder"/>
32
+ </sequence>
33
+ </complexType>
34
+ </element>
35
+ <element name="propsCollectionRequestResponse">
36
+ <complexType>
37
+ <sequence>
38
+ <element name="propsCollectionRequestReturn" nillable="true" type="xsd:string"/>
39
+ </sequence>
40
+ </complexType>
41
+ </element>
42
+ <element name="propsOrderPrintLabelPdf">
43
+ <complexType>
44
+ <sequence>
45
+ <element name="orderNo" nillable="true" type="xsd:string"/>
46
+ <element name="printPosition" nillable="true" type="xsd:short"/>
47
+ </sequence>
48
+ </complexType>
49
+ </element>
50
+ <element name="propsOrderPrintLabelPdfResponse">
51
+ <complexType>
52
+ <sequence>
53
+ <element name="propsOrderPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
54
+ </sequence>
55
+ </complexType>
56
+ </element>
57
+ <element name="propsCollectionCancel">
58
+ <complexType>
59
+ <sequence>
60
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
61
+ </sequence>
62
+ </complexType>
63
+ </element>
64
+ <element name="propsCollectionCancelResponse">
65
+ <complexType>
66
+ <sequence>
67
+ <element name="propsCollectionCancelReturn" type="xsd:boolean"/>
68
+ </sequence>
69
+ </complexType>
70
+ </element>
71
+ <element name="propsOrderSaveAndPrintLabelPdf">
72
+ <complexType>
73
+ <sequence>
74
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
75
+ <element name="printPosition" nillable="true" type="xsd:short"/>
76
+ </sequence>
77
+ </complexType>
78
+ </element>
79
+ <element name="propsOrderSaveAndPrintLabelPdfResponse">
80
+ <complexType>
81
+ <sequence>
82
+ <element name="propsOrderSaveAndPrintLabelPdfReturn" nillable="true" type="tns2:ShippingLabelPdf"/>
83
+ </sequence>
84
+ </complexType>
85
+ </element>
86
+ <element name="init">
87
+ <complexType>
88
+ <sequence>
89
+ <element name="arg_0_0" nillable="true" type="xsd:anyType"/>
90
+ </sequence>
91
+ </complexType>
92
+ </element>
93
+ <element name="initResponse">
94
+ <complexType>
95
+ <sequence/>
96
+ </complexType>
97
+ </element>
98
+ <element name="propsGetPropsOrder">
99
+ <complexType>
100
+ <sequence>
101
+ <element name="orderNo" nillable="true" type="xsd:string"/>
102
+ <element name="shippingId" nillable="true" type="xsd:string"/>
103
+ </sequence>
104
+ </complexType>
105
+ </element>
106
+ <element name="propsGetPropsOrderResponse">
107
+ <complexType>
108
+ <sequence>
109
+ <element name="propsGetPropsOrderReturn" nillable="true" type="tns2:PropsOrderLong"/>
110
+ </sequence>
111
+ </complexType>
112
+ </element>
113
+ <element name="propsOrderSave">
114
+ <complexType>
115
+ <sequence>
116
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
117
+ </sequence>
118
+ </complexType>
119
+ </element>
120
+ <element name="propsOrderSaveResponse">
121
+ <complexType>
122
+ <sequence>
123
+ <element name="propsOrderSaveReturn" nillable="true" type="xsd:string"/>
124
+ </sequence>
125
+ </complexType>
126
+ </element>
127
+ <element name="propsOrdersPrintLabelsPdf">
128
+ <complexType>
129
+ <sequence>
130
+ <element name="requestedOrderNumbers" nillable="true" type="tns2:RequestedOrderNumbers"/>
131
+ </sequence>
132
+ </complexType>
133
+ </element>
134
+ <element name="propsOrdersPrintLabelsPdfResponse">
135
+ <complexType>
136
+ <sequence>
137
+ <element name="propsOrdersPrintLabelsPdfReturn" nillable="true" type="tns2:MultipleShippingLabelsPdf"/>
138
+ </sequence>
139
+ </complexType>
140
+ </element>
141
+ <element name="propsUserLogin">
142
+ <complexType>
143
+ <sequence>
144
+ <element name="login" nillable="true" type="tns5:HermesLogin"/>
145
+ </sequence>
146
+ </complexType>
147
+ </element>
148
+ <element name="propsUserLoginResponse">
149
+ <complexType>
150
+ <sequence>
151
+ <element name="propsUserLoginReturn" nillable="true" type="xsd:string"/>
152
+ </sequence>
153
+ </complexType>
154
+ </element>
155
+ <element name="propsOrderPrintLabelJpeg">
156
+ <complexType>
157
+ <sequence>
158
+ <element name="orderNo" nillable="true" type="xsd:string"/>
159
+ </sequence>
160
+ </complexType>
161
+ </element>
162
+ <element name="propsOrderPrintLabelJpegResponse">
163
+ <complexType>
164
+ <sequence>
165
+ <element name="propsOrderPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
166
+ </sequence>
167
+ </complexType>
168
+ </element>
169
+ <element name="propsListOfProductsATG">
170
+ <complexType>
171
+ <sequence/>
172
+ </complexType>
173
+ </element>
174
+ <element name="propsListOfProductsATGResponse">
175
+ <complexType>
176
+ <sequence>
177
+ <element name="propsListOfProductsATGReturn" nillable="true" type="tns2:ListOfProducts"/>
178
+ </sequence>
179
+ </complexType>
180
+ </element>
181
+ <element name="propsReadShipmentStatus">
182
+ <complexType>
183
+ <sequence>
184
+ <element name="shippingId" nillable="true" type="xsd:string"/>
185
+ </sequence>
186
+ </complexType>
187
+ </element>
188
+ <element name="propsReadShipmentStatusResponse">
189
+ <complexType>
190
+ <sequence>
191
+ <element name="propsReadShipmentStatusReturn" nillable="true" type="tns2:ShippingStatus"/>
192
+ </sequence>
193
+ </complexType>
194
+ </element>
195
+ <element name="propsGetPropsOrders">
196
+ <complexType>
197
+ <sequence>
198
+ <element name="searchCriteria" nillable="true" type="tns2:PropsOrderSearchCriteria"/>
199
+ </sequence>
200
+ </complexType>
201
+ </element>
202
+ <element name="propsGetPropsOrdersResponse">
203
+ <complexType>
204
+ <sequence>
205
+ <element name="propsGetPropsOrdersReturn" nillable="true" type="tns2:ListOfPropsOrders"/>
206
+ </sequence>
207
+ </complexType>
208
+ </element>
209
+ <element name="propsProductlnformation">
210
+ <complexType>
211
+ <sequence/>
212
+ </complexType>
213
+ </element>
214
+ <element name="propsProductlnformationResponse">
215
+ <complexType>
216
+ <sequence>
217
+ <element name="propsProductlnformationReturn" nillable="true" type="tns2:ListOfProductInfos"/>
218
+ </sequence>
219
+ </complexType>
220
+ </element>
221
+ <element name="propsCheckAvailability">
222
+ <complexType>
223
+ <sequence/>
224
+ </complexType>
225
+ </element>
226
+ <element name="propsCheckAvailabilityResponse">
227
+ <complexType>
228
+ <sequence>
229
+ <element name="propsCheckAvailabilityReturn" nillable="true" type="xsd:string"/>
230
+ </sequence>
231
+ </complexType>
232
+ </element>
233
+ <element name="propsOrderSaveAndPrintLabelJpeg">
234
+ <complexType>
235
+ <sequence>
236
+ <element name="propsOrder" nillable="true" type="tns2:PropsOrder"/>
237
+ </sequence>
238
+ </complexType>
239
+ </element>
240
+ <element name="propsOrderSaveAndPrintLabelJpegResponse">
241
+ <complexType>
242
+ <sequence>
243
+ <element name="propsOrderSaveAndPrintLabelJpegReturn" nillable="true" type="tns2:ShippingLabelJpeg"/>
244
+ </sequence>
245
+ </complexType>
246
+ </element>
247
+ <element name="destroy">
248
+ <complexType>
249
+ <sequence/>
250
+ </complexType>
251
+ </element>
252
+ <element name="destroyResponse">
253
+ <complexType>
254
+ <sequence/>
255
+ </complexType>
256
+ </element>
257
+ <element name="propsImportOrders">
258
+ <complexType>
259
+ <sequence>
260
+ <element name="requestedOrders" nillable="true" type="tns2:RequestedOrders"/>
261
+ </sequence>
262
+ </complexType>
263
+ </element>
264
+ <element name="propsImportOrdersResponse">
265
+ <complexType>
266
+ <sequence>
267
+ <element name="propsImportOrdersReturn" nillable="true" type="tns2:ImportResult"/>
268
+ </sequence>
269
+ </complexType>
270
+ </element>
271
+ <element name="propsGetCollectionOrders">
272
+ <complexType>
273
+ <sequence>
274
+ <element name="collectionDateFrom" nillable="true" type="xsd:dateTime"/>
275
+ <element name="collectionDateTo" nillable="true" type="xsd:dateTime"/>
276
+ <element name="onlyMoreThan2ccm" type="xsd:boolean"/>
277
+ </sequence>
278
+ </complexType>
279
+ </element>
280
+ </schema>
281
+ <schema targetNamespace="http://props.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns3="http://common.hermes_api.service.hlg.de" xmlns:tns4="http://exception.common.service.hlg.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
282
+ <import namespace="http://exception.common.service.hlg.de"/>
283
+ <import namespace="http://common.hermes_api.service.hlg.de"/>
284
+ <complexType name="ListOfPropsCollectionOrders">
285
+ <sequence>
286
+ <element name="orders" nillable="true" type="tns2:ArrayOfPropsCollectionOrderLong"/>
287
+ </sequence>
288
+ </complexType>
289
+ <complexType name="PropsCollectionOrderLong">
290
+ <sequence>
291
+ <element name="moreThan2ccm" nillable="true" type="xsd:string"/>
292
+ <element name="volume" nillable="true" type="xsd:double"/>
293
+ <element name="collectionAdress" nillable="true" type="tns3:Address"/>
294
+ <element name="timeframe" nillable="true" type="xsd:string"/>
295
+ <element name="collectionType" nillable="true" type="xsd:string"/>
296
+ <element name="numberOfParcels" nillable="true" type="xsd:int"/>
297
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
298
+ </sequence>
299
+ </complexType>
300
+ <complexType name="ArrayOfPropsCollectionOrderLong">
301
+ <sequence>
302
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsCollectionOrderLong" nillable="true" type="tns2:PropsCollectionOrderLong"/>
303
+ </sequence>
304
+ </complexType>
305
+ <complexType name="PropsCollectionOrder">
306
+ <sequence>
307
+ <element name="collectionDate" nillable="true" type="xsd:dateTime"/>
308
+ <element name="numberOfParcelsClass_L" nillable="true" type="xsd:int"/>
309
+ <element name="numberOfParcelsClass_M" nillable="true" type="xsd:int"/>
310
+ <element name="numberOfParcelsClass_S" nillable="true" type="xsd:int"/>
311
+ <element name="numberOfParcelsClass_XL" nillable="true" type="xsd:int"/>
312
+ <element name="numberOfParcelsClass_XLwithBulkGoods" nillable="true" type="xsd:int"/>
313
+ <element name="numberOfParcelsClass_XS" nillable="true" type="xsd:int"/>
314
+ </sequence>
315
+ </complexType>
316
+ <complexType name="ShippingLabelPdf">
317
+ <sequence>
318
+ <element name="pdfData" type="xsd:base64Binary"/>
319
+ <element name="orderNo" nillable="true" type="xsd:string"/>
320
+ </sequence>
321
+ </complexType>
322
+ <complexType name="PropsOrder">
323
+ <sequence>
324
+ <element name="orderNo" nillable="true" type="xsd:string"/>
325
+ <element name="receiver" nillable="true" type="tns3:Address"/>
326
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
327
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
328
+ <element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
329
+ <element name="includeCashOnDelivery" type="xsd:boolean"/>
330
+ <element name="withBulkGoods" type="xsd:boolean"/>
331
+ </sequence>
332
+ </complexType>
333
+ <complexType name="PropsOrderLong">
334
+ <sequence>
335
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
336
+ <element name="ebayNumber" nillable="true" type="xsd:string"/>
337
+ <element name="shipper" nillable="true" type="tns3:Address"/>
338
+ <element name="amountCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
339
+ <element name="trackingFlag" nillable="true" type="xsd:short"/>
340
+ <element name="orderNo" nillable="true" type="xsd:string"/>
341
+ <element name="shippingId" nillable="true" type="xsd:string"/>
342
+ <element name="printDate" nillable="true" type="xsd:dateTime"/>
343
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
344
+ <element name="status_text" nillable="true" type="xsd:string"/>
345
+ <element name="status" nillable="true" type="xsd:short"/>
346
+ <element name="receiver" nillable="true" type="tns3:Address"/>
347
+ </sequence>
348
+ </complexType>
349
+ <complexType name="RequestedOrderNumbers">
350
+ <sequence>
351
+ <element name="orderNumbers" nillable="true" type="tns2:ArrayOf_xsd_nillable_string"/>
352
+ </sequence>
353
+ </complexType>
354
+ <complexType name="ArrayOf_xsd_nillable_string">
355
+ <sequence>
356
+ <element maxOccurs="unbounded" minOccurs="0" name="string" nillable="true" type="xsd:string"/>
357
+ </sequence>
358
+ </complexType>
359
+ <complexType name="MultipleShippingLabelsPdf">
360
+ <sequence>
361
+ <element name="pdfData" type="xsd:base64Binary"/>
362
+ <element name="orderRes" nillable="true" type="tns2:ArrayOfOrderResponse"/>
363
+ </sequence>
364
+ </complexType>
365
+ <complexType name="OrderResponse">
366
+ <sequence>
367
+ <element name="orderNo" nillable="true" type="xsd:string"/>
368
+ <element name="exceptionItems" nillable="true" type="tns2:ArrayOf_tns4_nillable_ExceptionItem"/>
369
+ </sequence>
370
+ </complexType>
371
+ <complexType name="ArrayOf_tns4_nillable_ExceptionItem">
372
+ <sequence>
373
+ <element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
374
+ </sequence>
375
+ </complexType>
376
+ <complexType name="ArrayOfOrderResponse">
377
+ <sequence>
378
+ <element maxOccurs="unbounded" minOccurs="0" name="OrderResponse" nillable="true" type="tns2:OrderResponse"/>
379
+ </sequence>
380
+ </complexType>
381
+ <complexType name="ShippingLabelJpeg">
382
+ <sequence>
383
+ <element name="jpegData" type="xsd:base64Binary"/>
384
+ <element name="orderNo" nillable="true" type="xsd:string"/>
385
+ </sequence>
386
+ </complexType>
387
+ <complexType name="ListOfProducts">
388
+ <sequence>
389
+ <element name="numberOfProducts" type="xsd:int"/>
390
+ <element name="products" nillable="true" type="tns2:ArrayOfProductWithPrice"/>
391
+ <element name="dated" nillable="true" type="xsd:dateTime"/>
392
+ <element name="labelAcceptanceTermsAndConditions" nillable="true" type="xsd:string"/>
393
+ <element name="labelAcceptanceLiabilityLimit" nillable="true" type="xsd:string"/>
394
+ <element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
395
+ <element name="netPriceCashOnDeliveryEurocent" nillable="true" type="xsd:int"/>
396
+ <element name="settlementType" nillable="true" type="xsd:string"/>
397
+ <element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
398
+ <element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
399
+ <element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
400
+ <element name="urlPortalB2C" nillable="true" type="xsd:string"/>
401
+ <element name="vatInfo" nillable="true" type="xsd:string"/>
402
+ <element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
403
+ </sequence>
404
+ </complexType>
405
+ <complexType name="ProductWithPrice">
406
+ <sequence>
407
+ <element name="netPriceEurcent" nillable="true" type="xsd:int"/>
408
+ <element name="validAt" nillable="true" type="xsd:dateTime"/>
409
+ <element name="productInfo" nillable="true" type="tns2:ProductInfo"/>
410
+ </sequence>
411
+ </complexType>
412
+ <complexType name="ProductInfo">
413
+ <sequence>
414
+ <element name="parcelFormat" nillable="true" type="tns2:ParcelFormat"/>
415
+ <element name="deliveryDestinations" nillable="true" type="tns2:ArrayOfDeliveryDestination"/>
416
+ </sequence>
417
+ </complexType>
418
+ <complexType name="ParcelFormat">
419
+ <sequence>
420
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
421
+ <element name="shortestPlusLongestEdgeCmMax" nillable="true" type="xsd:int"/>
422
+ <element name="shortestPlusLongestEdgeCmMin" nillable="true" type="xsd:int"/>
423
+ <element name="thridEdgeCmMax" nillable="true" type="xsd:int"/>
424
+ <element name="weightMinKg" nillable="true" type="xsd:decimal"/>
425
+ <element name="weigthMaxKg" nillable="true" type="xsd:decimal"/>
426
+ </sequence>
427
+ </complexType>
428
+ <complexType name="DeliveryDestination">
429
+ <sequence>
430
+ <element name="exclusions" nillable="true" type="xsd:string"/>
431
+ <element name="countryCode" nillable="true" type="xsd:string"/>
432
+ </sequence>
433
+ </complexType>
434
+ <complexType name="ArrayOfDeliveryDestination">
435
+ <sequence>
436
+ <element maxOccurs="unbounded" minOccurs="0" name="DeliveryDestination" nillable="true" type="tns2:DeliveryDestination"/>
437
+ </sequence>
438
+ </complexType>
439
+ <complexType name="ArrayOfProductWithPrice">
440
+ <sequence>
441
+ <element maxOccurs="unbounded" minOccurs="0" name="ProductWithPrice" nillable="true" type="tns2:ProductWithPrice"/>
442
+ </sequence>
443
+ </complexType>
444
+ <complexType name="ServiceCharge">
445
+ <sequence>
446
+ <element name="displayname" nillable="true" type="xsd:string"/>
447
+ <element name="amountEurocent" nillable="true" type="xsd:short"/>
448
+ <element name="currency" nillable="true" type="xsd:string"/>
449
+ </sequence>
450
+ </complexType>
451
+ <complexType name="ArrayOfServiceCharge">
452
+ <sequence>
453
+ <element maxOccurs="unbounded" minOccurs="0" name="ServiceCharge" nillable="true" type="tns2:ServiceCharge"/>
454
+ </sequence>
455
+ </complexType>
456
+ <complexType name="ShippingStatus">
457
+ <sequence>
458
+ <element name="shippingId" nillable="true" type="xsd:string"/>
459
+ <element name="statusText" nillable="true" type="xsd:string"/>
460
+ <element name="statusDateTime" nillable="true" type="xsd:dateTime"/>
461
+ </sequence>
462
+ </complexType>
463
+ <complexType name="PropsOrderSearchCriteria">
464
+ <sequence>
465
+ <element name="identNo" nillable="true" type="xsd:string"/>
466
+ <element name="orderNo" nillable="true" type="xsd:string"/>
467
+ <element name="lastname" nillable="true" type="xsd:string"/>
468
+ <element name="city" nillable="true" type="xsd:string"/>
469
+ <element name="from" nillable="true" type="xsd:dateTime"/>
470
+ <element name="to" nillable="true" type="xsd:dateTime"/>
471
+ <element name="postcode" nillable="true" type="xsd:string"/>
472
+ <element name="countryCode" nillable="true" type="xsd:string"/>
473
+ <element name="clientReferenceNumber" nillable="true" type="xsd:string"/>
474
+ <element name="ebayNumber" nillable="true" type="xsd:string"/>
475
+ <element name="status" nillable="true" type="tns2:ArrayOf_xsd_nillable_short"/>
476
+ </sequence>
477
+ </complexType>
478
+ <complexType name="ArrayOf_xsd_nillable_short">
479
+ <sequence>
480
+ <element maxOccurs="unbounded" minOccurs="0" name="short" nillable="true" type="xsd:short"/>
481
+ </sequence>
482
+ </complexType>
483
+ <complexType name="ListOfPropsOrders">
484
+ <sequence>
485
+ <element name="orders" nillable="true" type="tns2:ArrayOfPropsOrderShort"/>
486
+ </sequence>
487
+ </complexType>
488
+ <complexType name="PropsOrderShort">
489
+ <sequence>
490
+ <element name="orderNo" nillable="true" type="xsd:string"/>
491
+ <element name="shippingId" nillable="true" type="xsd:string"/>
492
+ <element name="creationDate" nillable="true" type="xsd:dateTime"/>
493
+ <element name="parcelClass" nillable="true" type="xsd:string"/>
494
+ <element name="status_text" nillable="true" type="xsd:string"/>
495
+ <element name="status" nillable="true" type="xsd:short"/>
496
+ <element name="firstname" nillable="true" type="xsd:string"/>
497
+ <element name="lastname" nillable="true" type="xsd:string"/>
498
+ <element name="postcode" nillable="true" type="xsd:string"/>
499
+ <element name="city" nillable="true" type="xsd:string"/>
500
+ <element name="countryCode" nillable="true" type="xsd:string"/>
501
+ <element name="bulkGoodsServiceAmount" nillable="true" type="xsd:int"/>
502
+ </sequence>
503
+ </complexType>
504
+ <complexType name="ArrayOfPropsOrderShort">
505
+ <sequence>
506
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsOrderShort" nillable="true" type="tns2:PropsOrderShort"/>
507
+ </sequence>
508
+ </complexType>
509
+ <complexType name="ListOfProductInfos">
510
+ <sequence>
511
+ <element name="productInfoList" nillable="true" type="tns2:ArrayOfProductInfo"/>
512
+ <element name="dated" nillable="true" type="xsd:dateTime"/>
513
+ <element name="urlHermesLogogram" nillable="true" type="xsd:string"/>
514
+ <element name="urlLiabilityInformations" nillable="true" type="xsd:string"/>
515
+ <element name="urlPackagingGuidelines" nillable="true" type="xsd:string"/>
516
+ <element name="urlPortalB2C" nillable="true" type="xsd:string"/>
517
+ <element name="urlTermsAndConditions" nillable="true" type="xsd:string"/>
518
+ <element name="serviceChargeList" nillable="true" type="tns2:ArrayOfServiceCharge"/>
519
+ </sequence>
520
+ </complexType>
521
+ <complexType name="ArrayOfProductInfo">
522
+ <sequence>
523
+ <element maxOccurs="unbounded" minOccurs="0" name="ProductInfo" nillable="true" type="tns2:ProductInfo"/>
524
+ </sequence>
525
+ </complexType>
526
+ <complexType name="RequestedOrders">
527
+ <sequence>
528
+ <element name="propsOrders" nillable="true" type="tns2:ArrayOfPropsOrder"/>
529
+ </sequence>
530
+ </complexType>
531
+ <complexType name="ArrayOfPropsOrder">
532
+ <sequence>
533
+ <element maxOccurs="unbounded" minOccurs="0" name="PropsOrder" nillable="true" type="tns2:PropsOrder"/>
534
+ </sequence>
535
+ </complexType>
536
+ <complexType name="ImportResult">
537
+ <sequence>
538
+ <element name="orderResponses" nillable="true" type="tns2:ArrayOfOrderResponse"/>
539
+ </sequence>
540
+ </complexType>
541
+ </schema>
542
+ <schema targetNamespace="http://common.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
543
+ <complexType name="Address">
544
+ <sequence>
545
+ <element name="addressAdd" nillable="true" type="xsd:string"/>
546
+ <element name="email" nillable="true" type="xsd:string"/>
547
+ <element name="houseNumber" nillable="true" type="xsd:string"/>
548
+ <element name="countryCode" nillable="true" type="xsd:string"/>
549
+ <element name="lastname" nillable="true" type="xsd:string"/>
550
+ <element name="city" nillable="true" type="xsd:string"/>
551
+ <element name="district" nillable="true" type="xsd:string"/>
552
+ <element name="postcode" nillable="true" type="xsd:string"/>
553
+ <element name="street" nillable="true" type="xsd:string"/>
554
+ <element name="telephoneNumber" nillable="true" type="xsd:string"/>
555
+ <element name="firstname" nillable="true" type="xsd:string"/>
556
+ <element name="telephonePrefix" nillable="true" type="xsd:string"/>
557
+ </sequence>
558
+ </complexType>
559
+ </schema>
560
+ <schema targetNamespace="http://exception.common.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
561
+ <complexType name="ServiceException">
562
+ <sequence>
563
+ <element name="exceptionItems" nillable="true" type="tns4:ArrayOfExceptionItem"/>
564
+ </sequence>
565
+ </complexType>
566
+ <complexType name="ExceptionItem">
567
+ <sequence>
568
+ <element name="errorCode" type="xsd:int"/>
569
+ <element name="errorMessage" nillable="true" type="xsd:string"/>
570
+ <element name="errorType" nillable="true" type="xsd:string"/>
571
+ </sequence>
572
+ </complexType>
573
+ <complexType name="ArrayOfExceptionItem">
574
+ <sequence>
575
+ <element maxOccurs="unbounded" minOccurs="0" name="ExceptionItem" nillable="true" type="tns4:ExceptionItem"/>
576
+ </sequence>
577
+ </complexType>
578
+ <element name="ServiceException" nillable="true" type="tns4:ServiceException"/>
579
+ </schema>
580
+ <schema targetNamespace="http://validate.hermes_api.service.hlg.de" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
581
+ <complexType name="HermesLogin">
582
+ <sequence>
583
+ <element name="benutzername" nillable="true" type="xsd:string"/>
584
+ <element name="kennwort" nillable="true" type="xsd:string"/>
585
+ </sequence>
586
+ </complexType>
587
+ </schema>
588
+ </wsdl:types>
589
+
590
+ <wsdl:message name="propsGetPropsOrdersRequest">
591
+ <wsdl:part element="impl:propsGetPropsOrders" name="parameters"/>
592
+
593
+ </wsdl:message>
594
+
595
+ <wsdl:message name="propsOrderSaveAndPrintLabelPdfRequest">
596
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelPdf" name="parameters"/>
597
+
598
+ </wsdl:message>
599
+
600
+ <wsdl:message name="propsOrderPrintLabelPdfRequest">
601
+ <wsdl:part element="impl:propsOrderPrintLabelPdf" name="parameters"/>
602
+
603
+ </wsdl:message>
604
+
605
+ <wsdl:message name="propsGetPropsOrderResponse">
606
+ <wsdl:part element="impl:propsGetPropsOrderResponse" name="parameters"/>
607
+
608
+ </wsdl:message>
609
+
610
+ <wsdl:message name="propsOrderDeleteRequest">
611
+ <wsdl:part element="impl:propsOrderDelete" name="parameters"/>
612
+
613
+ </wsdl:message>
614
+
615
+ <wsdl:message name="propsGetCollectionOrdersRequest">
616
+ <wsdl:part element="impl:propsGetCollectionOrders" name="parameters"/>
617
+
618
+ </wsdl:message>
619
+
620
+ <wsdl:message name="propsGetPropsOrderRequest">
621
+ <wsdl:part element="impl:propsGetPropsOrder" name="parameters"/>
622
+
623
+ </wsdl:message>
624
+
625
+ <wsdl:message name="propsOrderSaveAndPrintLabelJpegResponse">
626
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelJpegResponse" name="parameters"/>
627
+
628
+ </wsdl:message>
629
+
630
+ <wsdl:message name="propsListOfProductsATGResponse">
631
+ <wsdl:part element="impl:propsListOfProductsATGResponse" name="parameters"/>
632
+
633
+ </wsdl:message>
634
+
635
+ <wsdl:message name="propsOrderPrintLabelJpegResponse">
636
+ <wsdl:part element="impl:propsOrderPrintLabelJpegResponse" name="parameters"/>
637
+
638
+ </wsdl:message>
639
+
640
+ <wsdl:message name="propsCollectionRequestRequest">
641
+ <wsdl:part element="impl:propsCollectionRequest" name="parameters"/>
642
+
643
+ </wsdl:message>
644
+
645
+ <wsdl:message name="propsProductlnformationResponse">
646
+ <wsdl:part element="impl:propsProductlnformationResponse" name="parameters"/>
647
+
648
+ </wsdl:message>
649
+
650
+ <wsdl:message name="propsReadShipmentStatusResponse">
651
+ <wsdl:part element="impl:propsReadShipmentStatusResponse" name="parameters"/>
652
+
653
+ </wsdl:message>
654
+
655
+ <wsdl:message name="propsCheckAvailabilityResponse">
656
+ <wsdl:part element="impl:propsCheckAvailabilityResponse" name="parameters"/>
657
+
658
+ </wsdl:message>
659
+
660
+ <wsdl:message name="propsImportOrdersResponse">
661
+ <wsdl:part element="impl:propsImportOrdersResponse" name="parameters"/>
662
+
663
+ </wsdl:message>
664
+
665
+ <wsdl:message name="destroyResponse">
666
+ <wsdl:part element="impl:destroyResponse" name="parameters"/>
667
+
668
+ </wsdl:message>
669
+
670
+ <wsdl:message name="propsCheckAvailabilityRequest">
671
+ <wsdl:part element="impl:propsCheckAvailability" name="parameters"/>
672
+
673
+ </wsdl:message>
674
+
675
+ <wsdl:message name="initRequest">
676
+ <wsdl:part element="impl:init" name="parameters"/>
677
+
678
+ </wsdl:message>
679
+
680
+ <wsdl:message name="propsUserLoginRequest">
681
+ <wsdl:part element="impl:propsUserLogin" name="parameters"/>
682
+
683
+ </wsdl:message>
684
+
685
+ <wsdl:message name="propsCollectionRequestResponse">
686
+ <wsdl:part element="impl:propsCollectionRequestResponse" name="parameters"/>
687
+
688
+ </wsdl:message>
689
+
690
+ <wsdl:message name="propsOrderPrintLabelJpegRequest">
691
+ <wsdl:part element="impl:propsOrderPrintLabelJpeg" name="parameters"/>
692
+
693
+ </wsdl:message>
694
+
695
+ <wsdl:message name="propsOrderSaveAndPrintLabelJpegRequest">
696
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelJpeg" name="parameters"/>
697
+
698
+ </wsdl:message>
699
+
700
+ <wsdl:message name="propsListOfProductsATGRequest">
701
+ <wsdl:part element="impl:propsListOfProductsATG" name="parameters"/>
702
+
703
+ </wsdl:message>
704
+
705
+ <wsdl:message name="propsCollectionCancelRequest">
706
+ <wsdl:part element="impl:propsCollectionCancel" name="parameters"/>
707
+
708
+ </wsdl:message>
709
+
710
+ <wsdl:message name="propsCollectionCancelResponse">
711
+ <wsdl:part element="impl:propsCollectionCancelResponse" name="parameters"/>
712
+
713
+ </wsdl:message>
714
+
715
+ <wsdl:message name="propsOrderDeleteResponse">
716
+ <wsdl:part element="impl:propsOrderDeleteResponse" name="parameters"/>
717
+
718
+ </wsdl:message>
719
+
720
+ <wsdl:message name="propsGetCollectionOrdersResponse">
721
+ <wsdl:part element="impl:propsGetCollectionOrdersResponse" name="parameters"/>
722
+
723
+ </wsdl:message>
724
+
725
+ <wsdl:message name="propsOrderPrintLabelPdfResponse">
726
+ <wsdl:part element="impl:propsOrderPrintLabelPdfResponse" name="parameters"/>
727
+
728
+ </wsdl:message>
729
+
730
+ <wsdl:message name="propsUserLoginResponse">
731
+ <wsdl:part element="impl:propsUserLoginResponse" name="parameters"/>
732
+
733
+ </wsdl:message>
734
+
735
+ <wsdl:message name="propsGetPropsOrdersResponse">
736
+ <wsdl:part element="impl:propsGetPropsOrdersResponse" name="parameters"/>
737
+
738
+ </wsdl:message>
739
+
740
+ <wsdl:message name="propsOrderSaveAndPrintLabelPdfResponse">
741
+ <wsdl:part element="impl:propsOrderSaveAndPrintLabelPdfResponse" name="parameters"/>
742
+
743
+ </wsdl:message>
744
+
745
+ <wsdl:message name="initResponse">
746
+ <wsdl:part element="impl:initResponse" name="parameters"/>
747
+
748
+ </wsdl:message>
749
+
750
+ <wsdl:message name="propsOrderSaveRequest">
751
+ <wsdl:part element="impl:propsOrderSave" name="parameters"/>
752
+
753
+ </wsdl:message>
754
+
755
+ <wsdl:message name="propsOrdersPrintLabelsPdfRequest">
756
+ <wsdl:part element="impl:propsOrdersPrintLabelsPdf" name="parameters"/>
757
+
758
+ </wsdl:message>
759
+
760
+ <wsdl:message name="propsImportOrdersRequest">
761
+ <wsdl:part element="impl:propsImportOrders" name="parameters"/>
762
+
763
+ </wsdl:message>
764
+
765
+ <wsdl:message name="destroyRequest">
766
+ <wsdl:part element="impl:destroy" name="parameters"/>
767
+
768
+ </wsdl:message>
769
+
770
+ <wsdl:message name="ServiceException">
771
+ <wsdl:part element="tns4:ServiceException" name="fault"/>
772
+
773
+ </wsdl:message>
774
+
775
+ <wsdl:message name="propsOrderSaveResponse">
776
+ <wsdl:part element="impl:propsOrderSaveResponse" name="parameters"/>
777
+
778
+ </wsdl:message>
779
+
780
+ <wsdl:message name="propsOrdersPrintLabelsPdfResponse">
781
+ <wsdl:part element="impl:propsOrdersPrintLabelsPdfResponse" name="parameters"/>
782
+
783
+ </wsdl:message>
784
+
785
+ <wsdl:message name="propsReadShipmentStatusRequest">
786
+ <wsdl:part element="impl:propsReadShipmentStatus" name="parameters"/>
787
+
788
+ </wsdl:message>
789
+
790
+ <wsdl:message name="propsProductlnformationRequest">
791
+ <wsdl:part element="impl:propsProductlnformation" name="parameters"/>
792
+
793
+ </wsdl:message>
794
+
795
+ <wsdl:portType name="ProPS">
796
+ <wsdl:operation name="propsGetCollectionOrders">
797
+ <wsdl:input message="impl:propsGetCollectionOrdersRequest" name="propsGetCollectionOrdersRequest"/>
798
+
799
+ <wsdl:output message="impl:propsGetCollectionOrdersResponse" name="propsGetCollectionOrdersResponse"/>
800
+
801
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
802
+
803
+ </wsdl:operation>
804
+
805
+ <wsdl:operation name="propsOrderDelete">
806
+ <wsdl:input message="impl:propsOrderDeleteRequest" name="propsOrderDeleteRequest"/>
807
+
808
+ <wsdl:output message="impl:propsOrderDeleteResponse" name="propsOrderDeleteResponse"/>
809
+
810
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
811
+
812
+ </wsdl:operation>
813
+
814
+ <wsdl:operation name="propsCollectionRequest">
815
+ <wsdl:input message="impl:propsCollectionRequestRequest" name="propsCollectionRequestRequest"/>
816
+
817
+ <wsdl:output message="impl:propsCollectionRequestResponse" name="propsCollectionRequestResponse"/>
818
+
819
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
820
+
821
+ </wsdl:operation>
822
+
823
+ <wsdl:operation name="propsOrderPrintLabelPdf">
824
+ <wsdl:input message="impl:propsOrderPrintLabelPdfRequest" name="propsOrderPrintLabelPdfRequest"/>
825
+
826
+ <wsdl:output message="impl:propsOrderPrintLabelPdfResponse" name="propsOrderPrintLabelPdfResponse"/>
827
+
828
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
829
+
830
+ </wsdl:operation>
831
+
832
+ <wsdl:operation name="propsCollectionCancel">
833
+ <wsdl:input message="impl:propsCollectionCancelRequest" name="propsCollectionCancelRequest"/>
834
+
835
+ <wsdl:output message="impl:propsCollectionCancelResponse" name="propsCollectionCancelResponse"/>
836
+
837
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
838
+
839
+ </wsdl:operation>
840
+
841
+ <wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
842
+ <wsdl:input message="impl:propsOrderSaveAndPrintLabelPdfRequest" name="propsOrderSaveAndPrintLabelPdfRequest"/>
843
+
844
+ <wsdl:output message="impl:propsOrderSaveAndPrintLabelPdfResponse" name="propsOrderSaveAndPrintLabelPdfResponse"/>
845
+
846
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
847
+
848
+ </wsdl:operation>
849
+
850
+ <wsdl:operation name="init">
851
+ <wsdl:input message="impl:initRequest" name="initRequest"/>
852
+
853
+ <wsdl:output message="impl:initResponse" name="initResponse"/>
854
+
855
+ </wsdl:operation>
856
+
857
+ <wsdl:operation name="propsGetPropsOrder">
858
+ <wsdl:input message="impl:propsGetPropsOrderRequest" name="propsGetPropsOrderRequest"/>
859
+
860
+ <wsdl:output message="impl:propsGetPropsOrderResponse" name="propsGetPropsOrderResponse"/>
861
+
862
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
863
+
864
+ </wsdl:operation>
865
+
866
+ <wsdl:operation name="propsOrderSave">
867
+ <wsdl:input message="impl:propsOrderSaveRequest" name="propsOrderSaveRequest"/>
868
+
869
+ <wsdl:output message="impl:propsOrderSaveResponse" name="propsOrderSaveResponse"/>
870
+
871
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
872
+
873
+ </wsdl:operation>
874
+
875
+ <wsdl:operation name="propsOrdersPrintLabelsPdf">
876
+ <wsdl:input message="impl:propsOrdersPrintLabelsPdfRequest" name="propsOrdersPrintLabelsPdfRequest"/>
877
+
878
+ <wsdl:output message="impl:propsOrdersPrintLabelsPdfResponse" name="propsOrdersPrintLabelsPdfResponse"/>
879
+
880
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
881
+
882
+ </wsdl:operation>
883
+
884
+ <wsdl:operation name="propsUserLogin">
885
+ <wsdl:input message="impl:propsUserLoginRequest" name="propsUserLoginRequest"/>
886
+
887
+ <wsdl:output message="impl:propsUserLoginResponse" name="propsUserLoginResponse"/>
888
+
889
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
890
+
891
+ </wsdl:operation>
892
+
893
+ <wsdl:operation name="propsOrderPrintLabelJpeg">
894
+ <wsdl:input message="impl:propsOrderPrintLabelJpegRequest" name="propsOrderPrintLabelJpegRequest"/>
895
+
896
+ <wsdl:output message="impl:propsOrderPrintLabelJpegResponse" name="propsOrderPrintLabelJpegResponse"/>
897
+
898
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
899
+
900
+ </wsdl:operation>
901
+
902
+ <wsdl:operation name="propsListOfProductsATG">
903
+ <wsdl:input message="impl:propsListOfProductsATGRequest" name="propsListOfProductsATGRequest"/>
904
+
905
+ <wsdl:output message="impl:propsListOfProductsATGResponse" name="propsListOfProductsATGResponse"/>
906
+
907
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
908
+
909
+ </wsdl:operation>
910
+
911
+ <wsdl:operation name="propsReadShipmentStatus">
912
+ <wsdl:input message="impl:propsReadShipmentStatusRequest" name="propsReadShipmentStatusRequest"/>
913
+
914
+ <wsdl:output message="impl:propsReadShipmentStatusResponse" name="propsReadShipmentStatusResponse"/>
915
+
916
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
917
+
918
+ </wsdl:operation>
919
+
920
+ <wsdl:operation name="propsGetPropsOrders">
921
+ <wsdl:input message="impl:propsGetPropsOrdersRequest" name="propsGetPropsOrdersRequest"/>
922
+
923
+ <wsdl:output message="impl:propsGetPropsOrdersResponse" name="propsGetPropsOrdersResponse"/>
924
+
925
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
926
+
927
+ </wsdl:operation>
928
+
929
+ <wsdl:operation name="propsProductlnformation">
930
+ <wsdl:input message="impl:propsProductlnformationRequest" name="propsProductlnformationRequest"/>
931
+
932
+ <wsdl:output message="impl:propsProductlnformationResponse" name="propsProductlnformationResponse"/>
933
+
934
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
935
+
936
+ </wsdl:operation>
937
+
938
+ <wsdl:operation name="propsCheckAvailability">
939
+ <wsdl:input message="impl:propsCheckAvailabilityRequest" name="propsCheckAvailabilityRequest"/>
940
+
941
+ <wsdl:output message="impl:propsCheckAvailabilityResponse" name="propsCheckAvailabilityResponse"/>
942
+
943
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
944
+
945
+ </wsdl:operation>
946
+
947
+ <wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
948
+ <wsdl:input message="impl:propsOrderSaveAndPrintLabelJpegRequest" name="propsOrderSaveAndPrintLabelJpegRequest"/>
949
+
950
+ <wsdl:output message="impl:propsOrderSaveAndPrintLabelJpegResponse" name="propsOrderSaveAndPrintLabelJpegResponse"/>
951
+
952
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
953
+
954
+ </wsdl:operation>
955
+
956
+ <wsdl:operation name="destroy">
957
+ <wsdl:input message="impl:destroyRequest" name="destroyRequest"/>
958
+
959
+ <wsdl:output message="impl:destroyResponse" name="destroyResponse"/>
960
+
961
+ </wsdl:operation>
962
+
963
+ <wsdl:operation name="propsImportOrders">
964
+ <wsdl:input message="impl:propsImportOrdersRequest" name="propsImportOrdersRequest"/>
965
+
966
+ <wsdl:output message="impl:propsImportOrdersResponse" name="propsImportOrdersResponse"/>
967
+
968
+ <wsdl:fault message="impl:ServiceException" name="ServiceException"/>
969
+
970
+ </wsdl:operation>
971
+
972
+ </wsdl:portType>
973
+
974
+ <wsdl:binding name="ProPSSoapBinding" type="impl:ProPS">
975
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
976
+
977
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
978
+
979
+ <wsdl:operation name="propsGetCollectionOrders">
980
+ <wsdlsoap:operation soapAction="propsGetCollectionOrders"/>
981
+
982
+ <wsdl:input name="propsGetCollectionOrdersRequest">
983
+ <wsdlsoap:body use="literal"/>
984
+
985
+ </wsdl:input>
986
+
987
+ <wsdl:output name="propsGetCollectionOrdersResponse">
988
+ <wsdlsoap:body use="literal"/>
989
+
990
+ </wsdl:output>
991
+
992
+ <wsdl:fault name="ServiceException">
993
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
994
+
995
+ </wsdl:fault>
996
+
997
+ </wsdl:operation>
998
+
999
+ <wsdl:operation name="propsOrderDelete">
1000
+ <wsdlsoap:operation soapAction="propsOrderDelete"/>
1001
+
1002
+ <wsdl:input name="propsOrderDeleteRequest">
1003
+ <wsdlsoap:body use="literal"/>
1004
+
1005
+ </wsdl:input>
1006
+
1007
+ <wsdl:output name="propsOrderDeleteResponse">
1008
+ <wsdlsoap:body use="literal"/>
1009
+
1010
+ </wsdl:output>
1011
+
1012
+ <wsdl:fault name="ServiceException">
1013
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1014
+
1015
+ </wsdl:fault>
1016
+
1017
+ </wsdl:operation>
1018
+
1019
+ <wsdl:operation name="propsCollectionRequest">
1020
+ <wsdlsoap:operation soapAction="propsCollectionRequest"/>
1021
+
1022
+ <wsdl:input name="propsCollectionRequestRequest">
1023
+ <wsdlsoap:body use="literal"/>
1024
+
1025
+ </wsdl:input>
1026
+
1027
+ <wsdl:output name="propsCollectionRequestResponse">
1028
+ <wsdlsoap:body use="literal"/>
1029
+
1030
+ </wsdl:output>
1031
+
1032
+ <wsdl:fault name="ServiceException">
1033
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1034
+
1035
+ </wsdl:fault>
1036
+
1037
+ </wsdl:operation>
1038
+
1039
+ <wsdl:operation name="propsOrderPrintLabelPdf">
1040
+ <wsdlsoap:operation soapAction="propsOrderPrintLabelPdf"/>
1041
+
1042
+ <wsdl:input name="propsOrderPrintLabelPdfRequest">
1043
+ <wsdlsoap:body use="literal"/>
1044
+
1045
+ </wsdl:input>
1046
+
1047
+ <wsdl:output name="propsOrderPrintLabelPdfResponse">
1048
+ <wsdlsoap:body use="literal"/>
1049
+
1050
+ </wsdl:output>
1051
+
1052
+ <wsdl:fault name="ServiceException">
1053
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1054
+
1055
+ </wsdl:fault>
1056
+
1057
+ </wsdl:operation>
1058
+
1059
+ <wsdl:operation name="propsCollectionCancel">
1060
+ <wsdlsoap:operation soapAction="propsCollectionCancel"/>
1061
+
1062
+ <wsdl:input name="propsCollectionCancelRequest">
1063
+ <wsdlsoap:body use="literal"/>
1064
+
1065
+ </wsdl:input>
1066
+
1067
+ <wsdl:output name="propsCollectionCancelResponse">
1068
+ <wsdlsoap:body use="literal"/>
1069
+
1070
+ </wsdl:output>
1071
+
1072
+ <wsdl:fault name="ServiceException">
1073
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1074
+
1075
+ </wsdl:fault>
1076
+
1077
+ </wsdl:operation>
1078
+
1079
+ <wsdl:operation name="propsOrderSaveAndPrintLabelPdf">
1080
+ <wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelPdf"/>
1081
+
1082
+ <wsdl:input name="propsOrderSaveAndPrintLabelPdfRequest">
1083
+ <wsdlsoap:body use="literal"/>
1084
+
1085
+ </wsdl:input>
1086
+
1087
+ <wsdl:output name="propsOrderSaveAndPrintLabelPdfResponse">
1088
+ <wsdlsoap:body use="literal"/>
1089
+
1090
+ </wsdl:output>
1091
+
1092
+ <wsdl:fault name="ServiceException">
1093
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1094
+
1095
+ </wsdl:fault>
1096
+
1097
+ </wsdl:operation>
1098
+
1099
+ <wsdl:operation name="init">
1100
+ <wsdlsoap:operation soapAction="init"/>
1101
+
1102
+ <wsdl:input name="initRequest">
1103
+ <wsdlsoap:body use="literal"/>
1104
+
1105
+ </wsdl:input>
1106
+
1107
+ <wsdl:output name="initResponse">
1108
+ <wsdlsoap:body use="literal"/>
1109
+
1110
+ </wsdl:output>
1111
+
1112
+ </wsdl:operation>
1113
+
1114
+ <wsdl:operation name="propsGetPropsOrder">
1115
+ <wsdlsoap:operation soapAction="propsGetPropsOrder"/>
1116
+
1117
+ <wsdl:input name="propsGetPropsOrderRequest">
1118
+ <wsdlsoap:body use="literal"/>
1119
+
1120
+ </wsdl:input>
1121
+
1122
+ <wsdl:output name="propsGetPropsOrderResponse">
1123
+ <wsdlsoap:body use="literal"/>
1124
+
1125
+ </wsdl:output>
1126
+
1127
+ <wsdl:fault name="ServiceException">
1128
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1129
+
1130
+ </wsdl:fault>
1131
+
1132
+ </wsdl:operation>
1133
+
1134
+ <wsdl:operation name="propsOrderSave">
1135
+ <wsdlsoap:operation soapAction="propsOrderSave"/>
1136
+
1137
+ <wsdl:input name="propsOrderSaveRequest">
1138
+ <wsdlsoap:body use="literal"/>
1139
+
1140
+ </wsdl:input>
1141
+
1142
+ <wsdl:output name="propsOrderSaveResponse">
1143
+ <wsdlsoap:body use="literal"/>
1144
+
1145
+ </wsdl:output>
1146
+
1147
+ <wsdl:fault name="ServiceException">
1148
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1149
+
1150
+ </wsdl:fault>
1151
+
1152
+ </wsdl:operation>
1153
+
1154
+ <wsdl:operation name="propsOrdersPrintLabelsPdf">
1155
+ <wsdlsoap:operation soapAction="propsOrdersPrintLabelsPdf"/>
1156
+
1157
+ <wsdl:input name="propsOrdersPrintLabelsPdfRequest">
1158
+ <wsdlsoap:body use="literal"/>
1159
+
1160
+ </wsdl:input>
1161
+
1162
+ <wsdl:output name="propsOrdersPrintLabelsPdfResponse">
1163
+ <wsdlsoap:body use="literal"/>
1164
+
1165
+ </wsdl:output>
1166
+
1167
+ <wsdl:fault name="ServiceException">
1168
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1169
+
1170
+ </wsdl:fault>
1171
+
1172
+ </wsdl:operation>
1173
+
1174
+ <wsdl:operation name="propsUserLogin">
1175
+ <wsdlsoap:operation soapAction="propsUserLogin"/>
1176
+
1177
+ <wsdl:input name="propsUserLoginRequest">
1178
+ <wsdlsoap:body use="literal"/>
1179
+
1180
+ </wsdl:input>
1181
+
1182
+ <wsdl:output name="propsUserLoginResponse">
1183
+ <wsdlsoap:body use="literal"/>
1184
+
1185
+ </wsdl:output>
1186
+
1187
+ <wsdl:fault name="ServiceException">
1188
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1189
+
1190
+ </wsdl:fault>
1191
+
1192
+ </wsdl:operation>
1193
+
1194
+ <wsdl:operation name="propsOrderPrintLabelJpeg">
1195
+ <wsdlsoap:operation soapAction="propsOrderPrintLabelJpeg"/>
1196
+
1197
+ <wsdl:input name="propsOrderPrintLabelJpegRequest">
1198
+ <wsdlsoap:body use="literal"/>
1199
+
1200
+ </wsdl:input>
1201
+
1202
+ <wsdl:output name="propsOrderPrintLabelJpegResponse">
1203
+ <wsdlsoap:body use="literal"/>
1204
+
1205
+ </wsdl:output>
1206
+
1207
+ <wsdl:fault name="ServiceException">
1208
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1209
+
1210
+ </wsdl:fault>
1211
+
1212
+ </wsdl:operation>
1213
+
1214
+ <wsdl:operation name="propsListOfProductsATG">
1215
+ <wsdlsoap:operation soapAction="propsListOfProductsATG"/>
1216
+
1217
+ <wsdl:input name="propsListOfProductsATGRequest">
1218
+ <wsdlsoap:body use="literal"/>
1219
+
1220
+ </wsdl:input>
1221
+
1222
+ <wsdl:output name="propsListOfProductsATGResponse">
1223
+ <wsdlsoap:body use="literal"/>
1224
+
1225
+ </wsdl:output>
1226
+
1227
+ <wsdl:fault name="ServiceException">
1228
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1229
+
1230
+ </wsdl:fault>
1231
+
1232
+ </wsdl:operation>
1233
+
1234
+ <wsdl:operation name="propsReadShipmentStatus">
1235
+ <wsdlsoap:operation soapAction="propsReadShipmentStatus"/>
1236
+
1237
+ <wsdl:input name="propsReadShipmentStatusRequest">
1238
+ <wsdlsoap:body use="literal"/>
1239
+
1240
+ </wsdl:input>
1241
+
1242
+ <wsdl:output name="propsReadShipmentStatusResponse">
1243
+ <wsdlsoap:body use="literal"/>
1244
+
1245
+ </wsdl:output>
1246
+
1247
+ <wsdl:fault name="ServiceException">
1248
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1249
+
1250
+ </wsdl:fault>
1251
+
1252
+ </wsdl:operation>
1253
+
1254
+ <wsdl:operation name="propsGetPropsOrders">
1255
+ <wsdlsoap:operation soapAction="propsGetPropsOrders"/>
1256
+
1257
+ <wsdl:input name="propsGetPropsOrdersRequest">
1258
+ <wsdlsoap:body use="literal"/>
1259
+
1260
+ </wsdl:input>
1261
+
1262
+ <wsdl:output name="propsGetPropsOrdersResponse">
1263
+ <wsdlsoap:body use="literal"/>
1264
+
1265
+ </wsdl:output>
1266
+
1267
+ <wsdl:fault name="ServiceException">
1268
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1269
+
1270
+ </wsdl:fault>
1271
+
1272
+ </wsdl:operation>
1273
+
1274
+ <wsdl:operation name="propsProductlnformation">
1275
+ <wsdlsoap:operation soapAction="propsProductlnformation"/>
1276
+
1277
+ <wsdl:input name="propsProductlnformationRequest">
1278
+ <wsdlsoap:body use="literal"/>
1279
+
1280
+ </wsdl:input>
1281
+
1282
+ <wsdl:output name="propsProductlnformationResponse">
1283
+ <wsdlsoap:body use="literal"/>
1284
+
1285
+ </wsdl:output>
1286
+
1287
+ <wsdl:fault name="ServiceException">
1288
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1289
+
1290
+ </wsdl:fault>
1291
+
1292
+ </wsdl:operation>
1293
+
1294
+ <wsdl:operation name="propsCheckAvailability">
1295
+ <wsdlsoap:operation soapAction="propsCheckAvailability"/>
1296
+
1297
+ <wsdl:input name="propsCheckAvailabilityRequest">
1298
+ <wsdlsoap:body use="literal"/>
1299
+
1300
+ </wsdl:input>
1301
+
1302
+ <wsdl:output name="propsCheckAvailabilityResponse">
1303
+ <wsdlsoap:body use="literal"/>
1304
+
1305
+ </wsdl:output>
1306
+
1307
+ <wsdl:fault name="ServiceException">
1308
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1309
+
1310
+ </wsdl:fault>
1311
+
1312
+ </wsdl:operation>
1313
+
1314
+ <wsdl:operation name="propsOrderSaveAndPrintLabelJpeg">
1315
+ <wsdlsoap:operation soapAction="propsOrderSaveAndPrintLabelJpeg"/>
1316
+
1317
+ <wsdl:input name="propsOrderSaveAndPrintLabelJpegRequest">
1318
+ <wsdlsoap:body use="literal"/>
1319
+
1320
+ </wsdl:input>
1321
+
1322
+ <wsdl:output name="propsOrderSaveAndPrintLabelJpegResponse">
1323
+ <wsdlsoap:body use="literal"/>
1324
+
1325
+ </wsdl:output>
1326
+
1327
+ <wsdl:fault name="ServiceException">
1328
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1329
+
1330
+ </wsdl:fault>
1331
+
1332
+ </wsdl:operation>
1333
+
1334
+ <wsdl:operation name="destroy">
1335
+ <wsdlsoap:operation soapAction="destroy"/>
1336
+
1337
+ <wsdl:input name="destroyRequest">
1338
+ <wsdlsoap:body use="literal"/>
1339
+
1340
+ </wsdl:input>
1341
+
1342
+ <wsdl:output name="destroyResponse">
1343
+ <wsdlsoap:body use="literal"/>
1344
+
1345
+ </wsdl:output>
1346
+
1347
+ </wsdl:operation>
1348
+
1349
+ <wsdl:operation name="propsImportOrders">
1350
+ <wsdlsoap:operation soapAction="propsImportOrders"/>
1351
+
1352
+ <wsdl:input name="propsImportOrdersRequest">
1353
+ <wsdlsoap:body use="literal"/>
1354
+
1355
+ </wsdl:input>
1356
+
1357
+ <wsdl:output name="propsImportOrdersResponse">
1358
+ <wsdlsoap:body use="literal"/>
1359
+
1360
+ </wsdl:output>
1361
+
1362
+ <wsdl:fault name="ServiceException">
1363
+ <wsdlsoap:fault name="ServiceException" use="literal"/>
1364
+
1365
+ </wsdl:fault>
1366
+
1367
+ </wsdl:operation>
1368
+
1369
+ </wsdl:binding>
1370
+
1371
+ <wsdl:service name="ProPSService">
1372
+ <wsdl:port binding="impl:ProPSSoapBinding" name="ProPS">
1373
+ <wsdlsoap:address location="https://sandboxapi.hlg.de/Hermes_API_Web/1_4/services/ProPS"/>
1374
+
1375
+ </wsdl:port>
1376
+
1377
+ </wsdl:service>
1378
+
1379
+ </wsdl:definitions>
app/design/adminhtml/default/default/layout/hermes.xml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * @category Layout
5
+ * @package Netresearch_Hermes
6
+ * @author André Herrn <andre.herrn@netresearch.de>
7
+ * @copyright Copyright (c) 2010 Netresearch GmbH & Co.KG <http://www.netresearch.de/>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ */
10
+ -->
11
+ <layout>
12
+ <adminhtml_sales_order_index>
13
+ <reference name="head">
14
+ <action method="addCss"><name>hermes.css</name></action>
15
+ </reference>
16
+ </adminhtml_sales_order_index>
17
+ <adminhtml_sales_order_shipment_view>
18
+ <reference name="head">
19
+ <action method="addCss"><name>hermes.css</name></action>
20
+ <action method="addJs"><script>netresearch/hermes/adminhtml/hermes.js</script></action>
21
+ </reference>
22
+ <reference name="form">
23
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="hermes/sales/order/shipment/view/comments.phtml">
24
+ <action method="setParentType"><type>shipment</type></action>
25
+ </block>
26
+ </reference>
27
+ </adminhtml_sales_order_shipment_view>
28
+ <adminhtml_sales_order_shipment_new>
29
+ <reference name="head">
30
+ <action method="addCss"><name>hermes.css</name></action>
31
+ <action method="addJs"><script>netresearch/hermes/adminhtml/hermes.js</script></action>
32
+ </reference>
33
+ </adminhtml_sales_order_shipment_new>
34
+ <adminhtml_sales_shipment_index>
35
+ <reference name="head">
36
+ <action method="addCss"><name>hermes.css</name></action>
37
+ </reference>
38
+ </adminhtml_sales_shipment_index>
39
+ <adminhtml_parcel_edit>
40
+ <reference name="content">
41
+ <block type="hermes/adminhtml_sales_parcel_edit" name="parcel_edit"/>
42
+ </reference>
43
+ <reference name="head">
44
+ <action method="setTitle" translate="title" module="hermes"><title>Edit Hermes Parcel Data</title></action>
45
+ </reference>
46
+ </adminhtml_parcel_edit>
47
+ </layout>
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/create/hermes.phtml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (false === Mage::helper('hermes/order')->isPartialShipment($this->getMageShipment())): ?>
3
+ <div id="hermes-form" class="field-row grid">
4
+ <?php if (true === $this->isValidHermesShipment()): ?>
5
+ <fieldset id="hermes-selector">
6
+ <?php
7
+ $shipWithHermes = $this->isAllowedShippingMethod();
8
+ $isShippedAsCod = $this->getValidateOrderHelper()->isShippedAsCod();
9
+ ?>
10
+ <legend><?php echo $this->__('Ship with Hermes?')?></legend>
11
+ <?php if (true === $isShippedAsCod): ?>
12
+ <div class="notice-msg" style="padding-left:35px;">
13
+ <small><?php echo $this->__('Please note');?>:<br /><?php echo $this->__('In case of cash on delivery, the order can not be shipped partially.'); ?></small>
14
+ </div>
15
+ <?php endif; ?>
16
+ <input type="radio" name="ship_with_hermes" id="ship_with_hermes_yes" value="1" checked="checked" onchange="handleHermesFormDisplay(this);" />
17
+ <label for="ship_with_hermes_yes"><?php echo $this->__('Yes')?></label>
18
+ <br />
19
+ <input type="radio" name="ship_with_hermes" id="ship_with_hermes_no" value="0" onchange="handleHermesFormDisplay(this);" <?php if ($shipWithHermes === false):?> checked="checked"<?php endif;?> />
20
+ <label for="ship_with_hermes_no"><?php echo $this->__('No')?></label>
21
+ </fieldset>
22
+ <div id="inner-hermes-form" <?php if ($shipWithHermes === false):?> style="display:none;"<?php endif;?>>
23
+ <table class="data" cellspacing="0" cellpadding="0">
24
+ <col width="25%" />
25
+ <col width="75%" />
26
+ <tbody>
27
+ <?php if ($this->isTieredPriceMerchand()): ?>
28
+ <tr class="odd">
29
+ <td>
30
+ <label for="parcel_class"><?php echo $this->__('Please select a product class')?></label>
31
+ </td>
32
+ <td>
33
+ <?php
34
+ $parcelClasses = $this->getParcelClassesForCountry();
35
+ if (count($parcelClasses) > 0):
36
+ ?>
37
+ <select name="parcel_class" id="parcel_class">
38
+ <?php foreach ($parcelClasses as $parcelClassValue => $parcelClassLabel): ?>
39
+ <option value="<?php echo $parcelClassValue; ?>"><?php echo $this->escapeHtml($parcelClassLabel); ?></option>
40
+ <?php endforeach; ?>
41
+ </select>
42
+ <?php endif; ?>
43
+ </td>
44
+ </tr>
45
+ <?php endif; ?>
46
+ <tr class="even">
47
+ <td><?php print $this->__('COD shipment') ?></td>
48
+ <td>
49
+ <?php print ($isShippedAsCod) ? $this->__('Yes') : $this->__('No'); ?>
50
+ </td>
51
+ </tr>
52
+ <? if ($isShippedAsCod): ?>
53
+ <tr class="odd">
54
+ <td><?php print $this->__('Grand Total') ?></td>
55
+ <td>
56
+ <?php print $this->helper('checkout')
57
+ ->formatPrice($this->getValidateOrderHelper()
58
+ ->getOrder()
59
+ ->getGrandTotal()); ?>
60
+ </td>
61
+ </tr>
62
+ <? endif; ?>
63
+ </tbody>
64
+ </table>
65
+ </div>
66
+ <?php else: ?>
67
+ <?php foreach ($this->getValidationErrors() as $error_message): ?>
68
+ <div class="notice-msg" style="padding-left:35px;">
69
+ <small><?php echo $this->__('Please note');?>:<br /><?php echo $error_message; ?></small>
70
+ </div>
71
+ <?php endforeach; ?>
72
+ <?php endif;?>
73
+ </div>
74
+ <?php else: ?>
75
+ <?php
76
+ if (0 < sizeof($this->getValidateOrderHelper()->getOrder()->getShipmentsCollection())): ?>
77
+ <div class="notice-msg" style="padding-left:35px;">
78
+ <small><?php echo $this->__('Please note');?>:<br /><?php echo $this->__('This order can not be shipped with Hermes, because it is partially shipped and cash on delivery order.'); ?></small>
79
+ </div>
80
+ <?php endif; ?>
81
+ <?php endif; ?>
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/comments.phtml ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php if ($_entity = $this->getEntity()): ?>
28
+ <div id="comments_block">
29
+ <span class="field-row">
30
+ <label class="normal" for="history_comment"><?php echo Mage::helper('sales')->__('Comment Text') ?></label>
31
+ <textarea name="comment[comment]" rows="3" cols="5" style="height:6em; width:99%;" id="history_comment"></textarea>
32
+ </span>
33
+ <div class="f-left">
34
+ <?php if ($this->canSendCommentEmail()): ?>
35
+ <input name="comment[is_customer_notified]" type="checkbox" id="history_notify" value="1" />
36
+ <label class="normal" for="history_notify"><?php echo Mage::helper('sales')->__('Notify Customer by Email') ?></label><br />
37
+ <?php endif; ?>
38
+ <input name="comment[is_visible_on_front]" type="checkbox" id="history_visible" value="1" /><label class="normal" for="history_visible"> <?php echo Mage::helper('sales')->__('Visible on Frontend') ?></label>
39
+ </div>
40
+ <div class="f-right">
41
+ <?php echo $this->getChildHtml('submit_button') ?>
42
+ </div>
43
+ <div class="clear"></div>
44
+ <ul class="note-list">
45
+ <?php foreach ($_entity->getCommentsCollection(true) as $_comment): ?>
46
+ <li>
47
+ <strong><?php echo $this->helper('core')->formatDate($_comment->getCreatedAtDate(), 'medium') ?></strong>
48
+ <?php echo $this->helper('core')->formatTime($_comment->getCreatedAtDate(), 'medium') ?><span class="separator">|</span><small><?php echo $this->helper('sales')->__('Customer') ?>
49
+ <strong class="subdue">
50
+ <?php if ($_comment->getIsCustomerNotified()): ?>
51
+ <?php echo $this->helper('sales')->__('Notified') ?>
52
+ <img src="<?php echo $this->getSkinUrl('images/ico_success.gif') ?>" width="16" height="16" alt="" />
53
+ <?php else: ?>
54
+ <?php echo $this->helper('sales')->__('Not Notified') ?>
55
+ <?php endif; ?>
56
+ </strong></small>
57
+ <br/>
58
+ <?php if ('HERMES::' == substr($_comment->getComment(), 0, 8)): ?>
59
+ <img src="<?php echo $this->getSkinUrl('images/hermes/logo_small.png') ?>" alt="Hermes" title="Hermes" style="margin-top: 3px;float: left" />
60
+ <div style="margin-left:30px"><?php echo substr($_comment->getComment(), 8) ?></div>
61
+ <?php else: ?>
62
+ <?php echo $this->escapeHtml($_comment->getComment(), array('b','br','strong','i','u')) ?>
63
+ <?php endif; ?>
64
+ </li>
65
+ <?php endforeach; ?>
66
+ </ul>
67
+ <script type="text/javascript">
68
+ function submitComment() {
69
+ submitAndReloadArea($('comments_block').parentNode, '<?php echo $this->getSubmitUrl() ?>')
70
+ }
71
+
72
+ if ($('submit_comment_button')) {
73
+ $('submit_comment_button').observe('click', submitComment);
74
+ }
75
+ </script>
76
+ </div>
77
+ <?php endif; ?>
app/design/adminhtml/default/default/template/hermes/sales/order/shipment/view/hermes.phtml ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /** @var $this Netresearch_Hermes_Block_Adminhtml_Sales_Order_Shipment_Create_Hermes */ ?>
2
+ <div id="hermes-form" class="field-row grid">
3
+ <?php if (!is_null($this->getParcel()->getId())): ?>
4
+ <?php
5
+ $parcel = $this->getParcel();
6
+ $isShippedAsCod = $this->getValidateOrderHelper()
7
+ ->setOrder($parcel->getShipment()->getOrder())
8
+ ->isShippedAsCod();
9
+ ?>
10
+ <div id="inner-hermes-form">
11
+ <table class="data" cellspacing="0" cellpadding="0">
12
+ <col width="34%" />
13
+ <col width="33%" />
14
+ <col width="33%" />
15
+ <?php $line=0; ?>
16
+ <?php $rowClass = array('odd', 'even'); ?>
17
+ <tbody>
18
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
19
+ <?php $line++ ?>
20
+ <td><?php echo $this->__('COD shipment') ?></td>
21
+ <td colspan="2">
22
+ <?php echo ($isShippedAsCod) ? $this->__('Yes') : $this->__('No'); ?>
23
+ </td>
24
+ </tr>
25
+ <?php if ($isShippedAsCod): ?>
26
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
27
+ <?php $line++ ?>
28
+ <td><?php echo $this->__('Grand Total') ?></td>
29
+ <td colspan="2">
30
+ <?php echo $this->helper('checkout')->formatPrice(
31
+ $this->getValidateOrderHelper()->getOrder()->getGrandTotal()
32
+ ); ?>
33
+ </td>
34
+ </tr>
35
+ <?php endif; ?>
36
+ <?php if ($this->isTieredPriceMerchand() && 0 < strlen(trim($parcel->getParcelClass()))): ?>
37
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
38
+ <?php $line++ ?>
39
+ <td><?php echo $this->__('Parcel class') ?></td>
40
+ <td colspan="2"><?php echo $this->escapeHtml($parcel->getParcelClass()); ?></td>
41
+ </tr>
42
+ <?php endif; ?>
43
+ <?php if ($parcel->isProcessed()): ?>
44
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
45
+ <?php $line++ ?>
46
+ <td><?php echo $this->__('Hermes order no') ?></td>
47
+ <td colspan="2"><?php echo $this->escapeHtml($parcel->getHermesOrderNo()); ?></td>
48
+ </tr>
49
+ <?php endif; ?>
50
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
51
+ <?php $line++ ?>
52
+ <td><?php echo $this->__('Parcel Data')?></td>
53
+ <td>
54
+ <dl class="parcel-data">
55
+ <dt><em><?php echo $this->__('Address'); ?></em></dt>
56
+ <dd>
57
+ <?php echo $this->escapeHtml($parcel->getReceiverFirstname()); ?>
58
+ <?php echo $this->escapeHtml($parcel->getReceiverLastname()); ?><br />
59
+ <?php if (0 < strlen($parcel->getReceiverAddressAdd())): ?>
60
+ <?php echo $this->escapeHtml($parcel->getReceiverAddressAdd()); ?><br />
61
+ <?php endif; ?>
62
+ <?php echo $this->escapeHtml($parcel->getReceiverStreet()); ?>
63
+ <?php echo $this->escapeHtml($parcel->getReceiverHouseNumber()); ?><br />
64
+ <?php echo $this->escapeHtml($parcel->getReceiverPostCode()); ?>
65
+ <?php echo $this->escapeHtml($parcel->getReceiverCity()); ?><br />
66
+ <?php echo $this->escapeHtml($parcel->getReceiverCountryCode()); ?><br />
67
+ </dd>
68
+ </dl>
69
+ </td>
70
+ <td>
71
+ <dl class="parcel-data">
72
+ <?php if (0 < strlen($parcel->getReceiverEmail())): ?>
73
+ <dt><em><?php echo $this->__('Email'); ?></em></dt>
74
+ <dd><?php echo $this->escapeHtml($parcel->getReceiverEmail()); ?><br /></dd>
75
+ <?php endif; ?>
76
+ <?php if (0 < strlen($parcel->getReceiverTelephoneNumber())): ?>
77
+ <dt><em><?php echo $this->__('Telephone'); ?></em></dt>
78
+ <dd><?php echo $this->escapeHtml($parcel->getReceiverTelephoneNumber()); ?></dd>
79
+ <?php endif; ?>
80
+ </dl>
81
+ </td>
82
+ </tr>
83
+ <tr class="<?php echo $rowClass[$line%2]; ?>">
84
+ <?php $line++ ?>
85
+ <td><strong><?php echo $this->__('Status')?></strong></td>
86
+ <td colspan="2"><strong><?php echo $this->escapeHtml($parcel->getStatusText()); ?></strong></td>
87
+ </tr>
88
+ </tbody>
89
+ </table>
90
+ </div>
91
+
92
+
93
+ <?php if ($parcel->isProcessed() || $parcel->getHermesOrderNo()): ?>
94
+
95
+ <?php $location = $this->getUrl('adminhtml/parcel/getLabel', array(
96
+ 'parcelId' => $parcel->getId(),
97
+ 'format' => Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelFileFormatOptions::PDF
98
+ ));
99
+ $labelPlacementOptionsModel = new Netresearch_Hermes_Model_System_Config_Source_Shipping_LabelPlacements();
100
+ $defaultPosition = Mage::getModel('hermes/config')->getPdfLabelPosition();
101
+ ?>
102
+ <form action="<?php echo $location; ?>" method="get" style="display:none;float:right;margin-top:2px" id="hermes_pdf_form">
103
+ <div>
104
+ <label for="labelPosition" style="margin-top: 2px; text-align: right; width: 400px;">
105
+ <?php echo $this->__('label position'); ?>:&nbsp;
106
+ </label>
107
+ <select name="labelPosition" id="labelPosition">
108
+ <?php foreach($labelPlacementOptionsModel->toOptionArray() as $option): ?>
109
+ <?php $selected = ($option['value'] == $defaultPosition) ? ' selected="selected"' : '' ?>
110
+ <option value="<?php echo $option['value']; ?>"<?php echo $selected ?>>
111
+ <?php echo $this->escapeHtml($this->__($option['label'])); ?>
112
+ </option>
113
+ <?php endforeach; ?>
114
+ </select>
115
+ <button id="hermes_pdf" type="button" class="scalable save" onclick="$('hermes_pdf_form').submit();$('hermes_pdf_form').hide();$('hermes_parcel_buttons').show()">
116
+ <span><?php echo $this->__('Print'); ?></span>
117
+ </button>
118
+ <button id="hermes_pdf" type="button" class="scalable cancel" onclick="$('hermes_pdf_form').hide();$('hermes_parcel_buttons').show()">
119
+ <span><?php echo $this->__('Cancel'); ?></span>
120
+ </button>
121
+ </div>
122
+ </form>
123
+
124
+ <?php endif; ?>
125
+
126
+ <p class="form-buttons" id="hermes_parcel_buttons">
127
+ <?php if ($parcel->isProcessed() || $parcel->getHermesOrderNo()): ?>
128
+ <button id="hermes_pdf" type="button" class="scalable save" onclick="$('hermes_pdf_form').show();$('hermes_parcel_buttons').hide()">
129
+ <span><?php echo $this->__('Print'); ?></span>
130
+ </button>
131
+ <?php endif; ?>
132
+ <?php if (false == $parcel->isClosed()): ?>
133
+ <?php if ($parcel->getHermesOrderNo() xor $parcel->isQueued()): ?>
134
+ <?php $location = $this->getUrl('adminhtml/parcel/cancel', array('parcelId' => $parcel->getId())); ?>
135
+ <button id="cancel_shipment" type="button" class="scalable cancel" onclick="if (confirm('<?php echo $this->__('Do you really want to cancel that Hermes parcel?') ?>')) setLocation('<?php echo $location ?>')">
136
+ <span><?php echo $this->__('Cancel shipment') ?></span>
137
+ </button>
138
+ <?php endif; ?>
139
+
140
+ <?php if ($parcel->canBeResumed() && false === $parcel->isProcessed()): ?>
141
+ <?php $location = $this->getUrl('adminhtml/parcel/repeatTransmission', array('parcelId' => $parcel->getId())); ?>
142
+ <button id="resume_shipment" type="button" class="scalable save" onclick="setLocation('<?php echo $location ?>')" style="">
143
+ <span><?php echo $this->__('Resume shipment') ?></span>
144
+ </button>
145
+ <?php endif; ?>
146
+
147
+ <?php $location = $this->getUrl('adminhtml/parcel/edit', array('id' => $this->getParcel()->getId())); ?>
148
+ <button id="edit_shipment" type="button" class="scalable save"
149
+ onclick="setLocation('<?php echo $location ?>')" style="">
150
+ <span><?php echo $this->__('Edit') ?></span>
151
+ </button>
152
+ <?php endif; ?>
153
+ </p>
154
+ <?php endif; ?>
155
+ </div>
app/design/adminhtml/default/default/template/hermes/system/config/notice.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <table cellspacing="0" class="switcher" width="100%" class="form-list">
2
+ <col width="220px" />
3
+ <col />
4
+ <thead>
5
+ <tr>
6
+ <th colspan="2">
7
+ <img src="<?php echo $this->getSkinUrl('images/hermes/logo_small.png') ?>" alt="Hermes" title="Hermes" />
8
+ <?php echo $this->escapeHtml($this->getFieldsetLabel()) ?>
9
+ </th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
13
+ <tr>
14
+ <td><?php echo $this->__('Version'); ?></td>
15
+ <td><?php echo $this->getVersion(); ?></td>
16
+ </tr>
17
+ <!--
18
+ <tr>
19
+ <td><?php echo $this->__('Find more at'); ?></td>
20
+ <td><a href="http://www.netresearch.de/magento/hermes">http://www.netresearch.de/magento/hermes/</a></td>
21
+ </tr>
22
+ <tr>
23
+ <td><?php echo $this->__('Documentation'); ?></td>
24
+ <td><a href="http://www.netresearch.de/fileadmin/user_upload/partner-hermes/downloads/Hermes_Modul_Dokumentation.pdf"><?php echo $this->__('End user documentation'); ?></a></td>
25
+ </tr>
26
+ -->
27
+ <tr>
28
+ <td class=label><?php echo $this->__('Need support? Contact us:'); ?></td>
29
+ <?php
30
+ $mageVersion = Mage::getVersion();
31
+ if (is_callable('Mage::getEdition')) {
32
+ $mageVersion = Mage::getEdition() . ' ' . $mageVersion;
33
+ }
34
+ $bodyInfo = array(
35
+ '',
36
+ '===',
37
+ 'Magento version: ' . $mageVersion,
38
+ 'Hermes app version: ' . $this->getVersion(),
39
+ 'Shop URI: ' . Mage::getBaseUrl()
40
+ );
41
+ ?>
42
+ <td><a href="mailto:<?php echo Mage::getModel('hermes/config')->getSupportMail(); ?>?body=<?php echo rawurlencode(implode("\n", $bodyInfo)) ?>"><?php echo Mage::getModel('hermes/config')->getSupportMail() ?></a></td>
43
+ </tr>
44
+ </tbody>
45
+ </table>
app/design/adminhtml/default/default/template/hermes/system/config/products.phtml ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /* @var $this Netresearch_Hermes_Block_Adminhtml_System_Config_Products */ ?>
2
+ <tr><td><span>
3
+ <?php echo $this->__('Last Update') ?>:
4
+ <?php echo $this->formatDate($this->getListOfProductsDated(), Mage_Core_Model_Locale::FORMAT_TYPE_FULL, true); ?>
5
+ </span></td></tr></tbody></table>
6
+ <style>
7
+ .hermes_product_list tr.even {
8
+ background: #ffffff;
9
+ border: 0px;
10
+ }
11
+ </style>
12
+ <?php if ($this->getListOfProductsProducts()): ?>
13
+ <table class="switcher" width="100%" cellspacing="0">
14
+ <tbody class="hermes_product_list">
15
+ <?php $rowClass = 'odd'; ?>
16
+ <?php foreach ($this->getListOfProductsProducts() as $countryCode => $productClasses): ?>
17
+ <?php $currentCount = count($productClasses['product_classes']); ?>
18
+ <?php if (false == isset($parcelClasses) || count($parcelClasses) < $currentCount): ?>
19
+ <?php $parcelClasses = array_keys($productClasses['product_classes']); ?>
20
+ <?php endif; ?>
21
+ <?php endforeach; ?>
22
+ <tr>
23
+ <td colspan="2">&nbsp;</td>
24
+ <?php foreach ($parcelClasses as $parcelClass): ?>
25
+ <th><?php echo $parcelClass ?></th>
26
+ <?php endforeach; ?>
27
+ <td>&nbsp;</td>
28
+ </tr>
29
+ <?php foreach ($this->getListOfProductsProducts() as $countryCode => $productClasses): ?>
30
+ <?php $rowClass = $rowClass=='odd' ? 'even' : 'odd'; ?>
31
+ <?php $detailsAction = "$$('.hermes_product_details_$countryCode').invoke('toggle');$('hermes_product_details_link_$countryCode').toggle();return false;"; ?>
32
+ <tr class="country_products <?php echo $rowClass; ?> pointer" onclick="<?php echo $detailsAction ?>">
33
+ <th><?php print($this->getCountryName($countryCode)); ?></th>
34
+ <th><?php echo $this->__('Net Price'); ?></th>
35
+ <?php foreach ($parcelClasses as $parcelClass): ?>
36
+ <?php $currentProductClasses = $productClasses['product_classes']; ?>
37
+ <td>
38
+ <?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
39
+ <?php echo number_format((int) $currentProductClasses[$parcelClass]['netPriceEurcent']/100, 2) ?> €
40
+ <?php else: ?>
41
+ -
42
+ <?php endif; ?>
43
+ </td>
44
+ <?php endforeach; ?>
45
+ <td><a id="hermes_product_details_link_<?php echo $countryCode ?>" href="#">Details</a></td>
46
+ </tr>
47
+ <tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?> pointer" onclick="<?php echo $detailsAction ?>" style="display:none">
48
+ <td>&nbsp;</td>
49
+ <th class="product_field"><?php print($this->__('Weight (min, max)')) ?>:</th>
50
+ <?php foreach ($parcelClasses as $parcelClass): ?>
51
+ <?php $currentProductClasses = $productClasses['product_classes']; ?>
52
+ <td>
53
+ <?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
54
+ <?php echo $currentProductClasses[$parcelClass]['weightMinKg'] ?> kg -
55
+ <?php echo $currentProductClasses[$parcelClass]['weigthMaxKg'] ?> kg
56
+ <?php else: ?>
57
+ -
58
+ <?php endif; ?>
59
+ </td>
60
+ <?php endforeach; ?>
61
+ <td>&nbsp;</td>
62
+ </tr>
63
+ <tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?> pointer" onclick="<?php echo $detailsAction ?>" style="display:none">
64
+ <td>&nbsp;</td>
65
+ <th class="product_field"><?php print($this->__('Edges')) ?>:</th>
66
+ <?php foreach ($parcelClasses as $parcelClass): ?>
67
+ <?php $currentProductClasses = $productClasses['product_classes']; ?>
68
+ <td>
69
+ <?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
70
+ <?php echo $currentProductClasses[$parcelClass]['shortestPlusLongestEdgeCmMin'] ?> cm,
71
+ <?php echo $currentProductClasses[$parcelClass]['shortestPlusLongestEdgeCmMax'] ?>
72
+ cm<?php if ($currentProductClasses[$parcelClass]['thridEdgeCmMax']): ?>,
73
+ <?php echo $currentProductClasses[$parcelClass]['thridEdgeCmMax']; ?> cm
74
+ <?php endif; ?>
75
+ <?php else: ?>
76
+ -
77
+ <?php endif; ?>
78
+ </td>
79
+ <?php endforeach; ?>
80
+ <td>&nbsp;</td>
81
+ </tr>
82
+ <tr class="hermes_product_details_<?php echo $countryCode ?> <?php echo $rowClass ?>" style="display:none">
83
+ <td>&nbsp;</td>
84
+ <th class="product_field"><?php print($this->__('Exclusions')) ?>:</th>
85
+ <?php foreach ($parcelClasses as $parcelClass): ?>
86
+ <?php $currentProductClasses = $productClasses['product_classes']; ?>
87
+ <td>
88
+ <?php if (array_key_exists($parcelClass, $currentProductClasses)): ?>
89
+ <?php if (array_key_exists('exclusions', $currentProductClasses[$parcelClass]) && 0<strlen($currentProductClasses[$parcelClass]['exclusions'])): ?>
90
+ <?php echo $currentProductClasses[$parcelClass]['exclusions'] ?>
91
+ <?php else: ?>
92
+ -
93
+ <?php endif; ?>
94
+ <?php else: ?>
95
+ -
96
+ <?php endif; ?>
97
+ </td>
98
+ <?php endforeach; ?>
99
+ <td>&nbsp;</td>
100
+ </tr>
101
+ <?php endforeach; ?>
102
+ <?php
103
+ /* already included by parent template:
104
+ </tbody>
105
+ </table>
106
+ */
107
+ ?>
108
+ <?php endif; ?>
app/design/frontend/default/default/template/email/order/shipment/track.phtml ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php $_shipment=$this->getShipment() ?>
28
+ <?php $_order=$this->getOrder() ?>
29
+ <?php if ($_shipment && $_order && $_shipment->getAllTracks()): ?>
30
+ <table cellspacing="0" cellpadding="0" border="0" width="650" style="border:1px solid #EAEAEA;">
31
+ <thead>
32
+ <tr>
33
+ <th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Shipped By') ?></th>
34
+ <th align="center" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Tracking Number') ?></th>
35
+ </tr>
36
+ </thead>
37
+ <tbody>
38
+ <?php $i=0; foreach ($_shipment->getAllTracks() as $_item): $i++ ?>
39
+ <tr <?php echo $i%2?'bgcolor="#F6F6F6"':'' ?>>
40
+ <td align="left" valign="top" style="padding:3px 9px"><?php echo $_item->getTitle() ?></td>
41
+ <?php if (Netresearch_Hermes_Model_Shipping_Carrier_Hermes::CODE == $_item->getCarrierCode()): ?>
42
+ <td align="center" valign="top" style="padding:3px 9px"><a href="<?php echo Mage::getModel('hermes/config')->getTrackingUrl($_item->getNumber()) ?>"><?php echo $_item->getNumber() ?></a></td>
43
+ <?php else: ?>
44
+ <td align="center" valign="top" style="padding:3px 9px"><?php echo $_item->getNumber() ?></td>
45
+ <?php endif; ?>
46
+ </tr>
47
+ <?php endforeach ?>
48
+ </tbody>
49
+ </table>
50
+ <?php endif; ?>
app/etc/modules/Netresearch_Hermes.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Netresearch_Hermes>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </Netresearch_Hermes>
8
+ </modules>
9
+ </config>
app/locale/de_DE/Netresearch_Hermes.csv ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Basic Configuration","Basiskonfiguration"
2
+ "Configuration","Konfiguration"
3
+ "Enabled","Aktiviert"
4
+ "Test mode","Testmodus"
5
+ "Sandbox mode","Sandbox"
6
+ "Log requests and responses of the web service.","Webservice-Anfragen und -Antworten protokollieren"
7
+ "Please ensure that the Magento-Log is activated","Bitte stellen Sie sicher, dass das Magento-Log ebenfalls aktiviert ist."
8
+ "Account","Stammdaten"
9
+ "Partner ID","Partner ID"
10
+ "API Password","API Passwort"
11
+ "Shipment Options","Versandoptionen"
12
+ "Disabled shipping methods","Deaktivierte Versandarten"
13
+ "Please select shipping methods which should not be used for Hermes shipping.","Bitte wählen Sie die Versandarten, deren Lieferungen nicht an Hermes übertragen werden sollen."
14
+ "Ship with Hermes?","Mit Hermes versenden?"
15
+ "Product classes","Produktklassen"
16
+ "COD shipment","Nachnahme-Sendung"
17
+ "Payment methods allowed for cash on delivery","Zahlungsarten für Nachnahme"
18
+ "shipment label placement", "Platzierung des Sendungslabels"
19
+ "Please select a file format for shipment label.", "Bitte wählen Sie ein Dateiformat für das Sendungslabel aus"
20
+ "Please select placement for shipment label.", "Bitte wählen Sie die Platzierung des Sendungslabels aus"
21
+ "Username of the client", "Benutzername des Auftraggebers"
22
+ "Password of the client", "Passwort des Auftraggebers"
23
+ "Update List of Products","Produktliste aktualisieren"
24
+ "List of Products","Produktliste"
25
+ "Last Update","Letzte Aktualisierung"
26
+ "Net Price Eurocent","Netto-Preis (Eurocent)"
27
+ "Net Price","Netto-Preis"
28
+ "Weight (min, max)","Gewicht (min, max)"
29
+ "Edges","Kantenlängen"
30
+ "Edges (shortest+longest min, shortest+longest max, third max)","Kantenlängen (längste+kürzeste min, längste+kürzeste max, dritte max)"
31
+ "Exclusions","Einschränkungen"
32
+ "Hermes COD shipments are not allowed for grand totals greater than 2.500€.","Nachnahme-Sendungen für einen Bestellwert über 2.500€ sind bei Hermes nicht möglich."
33
+ """%s"" is not supported by Hermes.","""%s"" wird von Hermes nicht unterstützt"
34
+ "Hermes COD shipments are not allowed to %s.","Nachnahme-Sendungen nach %s werden von Hermes nicht unterstützt."
35
+ "Error","Fehler"
36
+ "Please note","Bitte beachten Sie"
37
+ "Product information could not be updated (%d: %s).","Die Liste der Hermes-Produkte konnte nicht abgerufen werden (%d: %s)."
38
+ "The list of products could not be updated (%d: %s).","Die Produktliste konnte nicht abgerufen werden (%d: %s)."
39
+ "Tried to transfer %d parcels to Hermes, but %d of them raised an error.","Bei der Ãœbertragung von %d Hermes-Sendung(en) traten %d Fehler auf."
40
+ "Successfully transfered %d parcels to Hermes.","Es wurden %d Sendungen erfolgreich an Hermes übertragen"
41
+ "Grand Total","Bestellwert"
42
+ "Yes","Ja"
43
+ "No", "Nein"
44
+ "Please select a product class", "Bitte wählen Sie eine Produktklasse"
45
+ "product classes", "Produktklassen"
46
+ "Parcel class", "Paketklasse"
47
+ "Cancel shipment","Versand abbrechen"
48
+ "Resume shipment","Versand wiederaufnehmen"
49
+ "Edit","Bearbeiten"
50
+ "None of the given parcels could be sent to Hermes","Keine der vorliegenden Sendungen konnte an Hermes übertragen werden"
51
+ "An error occured during transmission to Hermes","Bei der Ãœbertragung an Hermes ist ein Fehler aufgetreten"
52
+ "Some errors occured during transmission to Hermes","Bei der Ãœbertragung an Hermes sind Fehler aufgetreten"
53
+ "Successfully transmitted to Hermes","Die Ãœbertragung an Hermes war erfolgreich"
54
+ "Hermes is disabled in configuration. Please enable it before trying to submit parcels.","Hermes ist in deaktiviert. Bitte aktivieren Sie es vor der Ãœbertragung von Sendungen in der Konfiguration."
55
+ "None of the given parcels could be sent to Hermes","Es konnten keine Sendungen an Hermes übertragen werden"
56
+ "Save parcel and resume","Sendung speichern und wiederaufnehmen"
57
+ "Receiver Data","Empfängeradresse"
58
+ "Edit Receiver Data","Empfängeradresse bearbeiten"
59
+ "Receiver data successfully updated.","Die Empfängeradresse wurde aktualisiert."
60
+ "Receiver data could not be updated.","Die Empfängeradresse konnte nicht aktualisiert werden."
61
+ "Address","Anschrift"
62
+ "First Name","Vorname"
63
+ "Leave empty if receiver is a company","Bei Versand an eine Firma leer lassen"
64
+ "Last Name","Nachname"
65
+ "Last Name/Company","Nachname/Firma"
66
+ "If you enter a company name, you could submit the c/o in field <em>%s</em>","Wenn Sie einen Firmennamen angeben, können Sie den Namen des Empfängers im Feld <em>%s</em> angeben"
67
+ "Street Address","Straße"
68
+ "May contain house number","Darf die Hausnummer enthalten"
69
+ "House Number","Hausnummer"
70
+ "Additional Address Data","Adresszusatz"
71
+ "Zip/Postal Code","Postleitzahl"
72
+ "City","Stadt"
73
+ "Country Code","Ländercode"
74
+ "Email","E-Mail"
75
+ "Telephone","Telefon"
76
+ "Telephone Prefix","Vorwahl"
77
+ "Let Hermes send an email containing the tracking link","Lassen Sie Hermes eine E-Mail mit einem Link zur Sendungsverfolgung versenden"
78
+ "Current parcel is not editable.","Der aktuelle Versand kann nicht mehr bearbeitet werden."
79
+ "Transmit Parcel Data to Hermes","Sendungsdaten an Hermes übertragen"
80
+ "new (queued)","Neu (wartend)"
81
+ "new (failed)","Neu (fehlerhaft)"
82
+ "processed","Erfolgreich"
83
+ "cancel (failed)","Abbruch (fehlerhaft)"
84
+ "canceled","Abgebrochen"
85
+ "in transmission","Wird übertragen"
86
+ "closed","Gedruckt"
87
+ "Hermes order no", "Hermes Bestellnummer"
88
+ "Shipment Label Options","Versand-Label-Optionen"
89
+ "Hermes Settings", "Hermes-Einstellungen"
90
+ "bottom left", "unten links"
91
+ "bottom right", "unten rechts"
92
+ "top left", "oben links"
93
+ "top right", "oben rechts"
94
+ "Hermes API is currently not available. Please try again later.", "Die Hermes API ist zur Zeit nicht verfügbar. Bitte versuchen Sie es später erneut."
95
+ "Parcel cancellation succeeded", "Versand erfolgreich abgebrochen"
96
+ "Parcel cancellation failed", "Abbruch des Versandes fehlgeschlagen"
97
+ "sent","gesendet"
98
+ "failed","fehlerhaft"
99
+ "%d failed","%d fehlerhaft"
100
+ "%d parcels","%d Pakete"
101
+ "%d parcels could not be transmitted to Hermes","%d Sendungen konnten nicht an Hermes übertragen werden"
102
+ "%d parcels were transmitted to Hermes","%d Sendungen wurden an Hermes übertragen"
103
+ "Parcel Data", "Sendungsdaten"
104
+ "e-mail options", "E-Mail-Optionen"
105
+ "send shipping e-mail immediately if automatic mode is used", "Sendungsmail beim automatischen Modus sofort senden"
106
+ "send shipping e-mail if tracking link is available", "Sendungsmail senden, wenn Tracking-Link bekannt ist"
107
+ "Version", "Version"
108
+ "Find more at", "mehr unter"
109
+ "Documentation", "Dokumentation"
110
+ "Need support? Contact us:","Unterstützung nötig? Schreiben Sie an:"
111
+ "End user documentation", "Benutzerdokumentation"
112
+ "Parcel transmission was resumed", "Der Versand wurde wieder aufgenommen"
113
+ "Shipment will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href=""%s"">trigger prompt transmission</a>.", "Der Versandauftrag wird in Kürze wiederaufgenommen. Sie können die Übertragung auch <a href=""%s"">manuell starten</a>."
114
+ "Hermes parcel cancellation succeeded", "Stornierung des Hermesauftrags erfolgreich"
115
+ "Automatic shipment creation","Automatische Erstellung von Sendungen"
116
+ "Allowed order status codes for automatic shipment","Bestellstatus für automatische Erstellung von Sendungen"
117
+ "Payment methods allowed for automatic shipment","Zahlungsarten für automatische Erstellung von Sendungen"
118
+ "No parcels were transfered to Hermes.", "Es wurden keine Sendungen an Hermes übertragen."
119
+ "Create shipment(s) for Hermes","Sendung(en) für erstellen"
120
+ "%d Hermes shipment(s) created", "%d Hermes-Sendung(en) erstellt"
121
+ "%d Hermes shipment(s) could not be created", "%d Hermes-Sendung(en) konnte(n) nicht erstellt werden",
122
+ "notify customer", "Kunden informieren"
123
+ "Create shipment(s) for Hermes","Sendung(en) für Hermes erstellen"
124
+ "Shipment(s) will be transmitted to Hermes within a short time. If you are in a hurry, you could <a href=""%s"">trigger prompt transmission</a>.", "Der Versandauftrag wird in Kürze aufgenommen. Sie können die Übertragung auch <a href=""%s"">manuell starten</a>."
125
+ "Successfully created Hermes parcel", "Hermes Sendung erfolgreich erstellt"
126
+ "Order %s threw error: %s","Bestellung %s führte zu Fehler: %s"
127
+ "Edit Hermes Parcel Data","Hermes-Sendungsdaten bearbeiten"
128
+ "The list of products was successfully updated.", "Die Produktliste wurde erfolgreich aktualisiert"
129
+ "use default", "Standard benutzen"
130
+ "Print", "Drucken"
131
+ "label position", "Position des Labels"
132
+ "No parcels were transfered to Hermes.", "Es wurden keine Sendungen an Hermes übertragen."
133
+ "Please select at least one shipment","Bitte wählen Sie mindestens eine Sendung aus"
134
+ "Failed to cancel Hermes shipment %s","Abbruch der Sendung %s schlug fehl"
135
+ "Canceled %s Hermes shipments","%s Hermes-Sendungen wurden abgebrochen"
136
+ "Failed to cancel %s Hermes shipments","%s Hermes-Sendungen konnten nicht abgebrochen werden"
137
+ "Cancel Hermes shipments","Hermes-Sendungen abbrechen"
138
+ "Cancel", "Abbrechen"
139
+ "This order is not automatically shippable by Hermes.","Diese Bestellung kann nicht automatisch mit Hermes versendet werden"
140
+ "By choosing 'yes' the sandbox mode will be activated. Please notice, that all generated parcels will be ignored by Hermes.", "Falls 'JA' ausgewählt ist, wird der Testmodus aktiviert. Alle im Testmodus erstellten Sendungen werden nicht von Hermes bearbeitet."
141
+ "In case of cash on delivery, the order can not be shipped partially.", "Im Fall von Nachnahme kann die Bestellung nicht in Teillieferungen versendet werden."
142
+ "Partial shipment is not allowed for cash on delivery shipments which should be shipped with Hermes.", "Teilsendungen sind nicht erlaubt für Nachnahmesendungen die mit Hermes versendet werden sollen."
143
+ "This order can not be shipped with Hermes, because it is partially shipped and cash on delivery order.", "Die Bestellung kann nicht mit Hermes verschickt werden, da sie schon teilweise versandt wurde und es sich um eine Nachnahme-Sendung handelt."
144
+ "Do you really want to cancel that Hermes parcel?","Möchten Sie diese Hermes-Sendung tatsächlich abbrechen?"
145
+ "%d parcels are queued for transmission to Hermes","%d Sendungen warten auf Ãœbertragung zu Hermes"
doc/Netresearch_Hermes/Benutzerdokumentation.pdf ADDED
@@ -0,0 +1,4457 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ %PDF-1.4
2
+ %���� ReportLab Generated PDF document http://www.reportlab.com
3
+ 1 0 obj
4
+ << /F1 2 0 R /F2 3 0 R /F3 60 0 R /F4 62 0 R >>
5
+ endobj
6
+ 2 0 obj
7
+ << /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
8
+ endobj
9
+ 3 0 obj
10
+ << /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
11
+ endobj
12
+ 4 0 obj
13
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 33 /Length 9345 /Subtype /Image
14
+ /Type /XObject /Width 210 >>
15
+ stream
16
+ Gb"/+B2i+"REiSGQ(0+42nMX>1RUpK:F=1W-HY[L@O#)6;f"5oj+80/?A\&h_8[L#E5R2,;f-jL^%W#2,GB]#C'YP"+X&nTpUr&CgX(0l1OJi9]]V@;1A^E_^[f%`qn1g1Y=I*#,5hjaHDst'h^+b-S"+8UbZ9YoA`LA=Z'h[JD(8WYP!'i+<.ti36i*(/q\8dOVZOH-DKO"'G"u=XRloFL4k2)DegN^a0D_DH\@ZKbB9g97@beAMmo[f3([u-a@t2hdrc^9t:RUS,Vi?.mb^;WpjOZ%ThK^jJM\j8qMX(63@n+4Lp<Do)o,8?>+;P5O]J4t>/6Q+YH%S&<8:9+jg*Ju`gOXQeh7a!Qk,lELrn!cs4B&5Vhb[HgBD8CSB5cQ60\(r!j&Q/eOHc:3lIB[m9>7n(g+%ceOm,<nm&QiE`?*!'LWn*jSZ<FgbD!O%nX1r"2P$U7**($7<=qU@Vu;KCIId7D76oJSp!0P[mBZ=8dPK.2P>1&3%:YqjYucq3ZVn$&I!f_o\3oeRD'?qHO8W2kkHA$Y5@ofQ+arFd;HWB71&j%<ph)77IMt<CPN]h)71HmO_pg?BXN]"IGeF#!f"g37:]CuECn09b[792'k0&`@>B@'S7DDo(ePH`pClIhge]h!aNkJJe:jg<iqn5j2%SrS:d4hJLnQ(F1$Ok!Z3ri&cW"nXA-Zk(?R;AHQNMB&^SW4^f71Lc=oID!Vb3q(G\%;ZcZHMX!?a`RTRjBGN,_m>Wqs-XVeHkY.0*C,5f8\/cGT67aTB:+mP/[56J=":P+GKV$!kaYf`=DiNm,/DH&+1j7J=bt(.Rm3PCI`SA>A%Ge]0IdAlu605`u8tl^pC:gh>0.)CV;HW4c;_oD_M4<`qIKYP@Q<EhYqGp7m7_ITSsdgn[2$,g!p,b,""*B3b\YeY"UfR^t/YJV/k)d]GMmR4W0=`nF$!Dh<L//l]>DX!:P0-pi*nPJ@?>F=+L@tV1e;6bhZO>rL4[Llp%;,I[E1mgD&eRNPPF:r88+&LLUPMckG[-84?g*7<Lt374im^X#8tp^4-#Ar^F[Bb?5s0kf@`o@m#4gf*"jl<ChBRqWth_e*lZU%*6].9buM3QcuT<FXqm?"b:'_7GsF<BCblP9Wg:-Xa\*TNZM&O%k8XpaWE4tGC&<M]W4N[SSO@ZDNYuX5h)?KX_:e$ci\f"3pom&DI56/3M3W$QhtJTkKfR_5GkbO9P(o0_YR7Vo2dT"IMb<'3N6@f>4/PsaY#-fc7@2]0!)"Q?WpVWGL^)g]5[!ANpDYcdGs0X7OONQ*#r7@oLQ<*BPdMt-hVi`C29%Pp=5$eq@uW?/"V'd:V"h02;9UMX-_%2MKC-X1O3Ka%'DLVXc@%oUIJ3kK+MeZ5mZsj2nNW"*O:UjZEp[];b`Eb%?cA:'(9!p.g-pTj4hcP:*k;b,6"HehVWB7OAl';PP%d6lZ]>0pQC;]P;r3(bR)PRlD.<`Od[&PPSs3N/LEZlVN)Q-',*]&Vl^(-D74Rl:Xjs'[s+pYS:r!bLJmBtG;c#LgY5na<"Blu]O*k/pkGPLAglh(V[UgJ6bR`Q8u.6d+pZ4@[#&UA*,@TM=;a/uI*>Cen,ds6DKO%([*()/aj.7a:Gte)2Mr$pM]f@Y<@Ml?+5^,Ahbq=t/*,+K\Xt(]j*ZG4*WU->5E\Nb)J!f2c9QmOo=1^WEP\>GO+JSn]n;Q?Ci+#Z6_pt0&@-M%JLk<EEJ9.%'-f9Wp<[5`&K15t.%=.8?'CA;*;M_nq=Bu0LoAt9(O>h1I=24`>rAD+6,!ajm-\:I@5*#d4+&Y3/AeS/NOH6s]rS3G]:/htV6pa^lh,Rp:>aj^$NGdJV@2-?3X5in9ijWH%GchtNdVZaM0'st)G3b"*ounE>>$6)Pgo?0B+[rF.8_fr^S%f5,*c>;F'K))/Zm\dH0AOAaD#?+d$`S?fsbc#*4`PfcTK2gL2!H\6(&)X"L>\@]*E[_V,6o+3\,VH41k9BV-3(`(a,XYi71G3.n%CAG&/Lb$c(60ZBW[j<?VIe7h#4,??q&MZfhDI:&^nV$CSjF@qN!T7YG:f#k5j]bi1DY?5D_!%/(cAR6T"/UbIp!Z8+!\n4CQhT]!V4O+SL-#UY5c6*7;m_JEWOeus`<i90UW'+!6,E7m`p=?'mj$)'':_5$Cin"e]!P&Fn-MhgJeXR'3_[Bcb\T*%TVJdotb[M^NkX"#U"'M@KW';me;kfDX?)1Srsp"\p\'T.Pfd5Eq-kb780VQ1]F\CT1h5b$V;*5op"o-b_)!lC"VIqcK4D/DEg6cTbMSV(ugge6s08P@AlE9O76K*uju)_CDkZcSMNkBQT!TN8,$dR[)LS^5+s0PT`!N$Ga,D)R\SG,><MDPB4;H2A.*Dk*?rq2=4ud:io_Zmo!H44cTOKN\@^nMm>ORP_/O@6E"F$3782EM%d^mqV%H`AZD9/X*):V5BL.]10HF7d*]0mT'gcKtsCD&"1DV!m^fGh.:Oh:1sSf=4Af\BP-lIr@e%R]6!5Z:#@`CYMBJST3i]O%;=^bmo^'=R6Mo?UXknDn35Q<qm?kH$fa*&23TNmXT;gg2<enA0j)DtbJ!c`Q^<OXE)(;b#uP@n4*tUJTf[INn?@]AkqEn%<Bs7]GXG)pPam%akg>j6OBfTX_0L!5(t'q??P!EW!\i;X@!B-LU:?<;!qQ0_%aXg8oBs9sf_GQdDP5B+RPGZ)?!^sc,0>g$:!T'p[0nLg[>V*NKiQ+iZ=J,]C02&eQ7);tj1;'Ah%EMqaO)WG2%(t[ipcU"d.G2JC10B8!1=*[\^1f5=[(^dT5Tq>[7nh&bN>9@%?6R+qFO&VFLDAR/=A)V(igtq'pD9`/$"D-I7["55uCc^EER9Q3H(HO&:n4u1YiY69[bCJgMO3Y(I6Kc6OpZLf%s!#<YK4sH2\Eg?+B!nDa\6d67J1beV$Bl@)e408;Tf[g$/bE#TCM.1Ah;]&HKB+WfYS?KQVLp]&V_BUHf2$lY*7%%W^T!!.^]Y05PTcIc5l#H"O@gEsW>.bOI#86O2LO=<OocbCh--258FVDF$MSHPYW-HL(8(cp6P$*!a2rGOr%Z$.'f?4qA_q6)\te<WHk5l,79`H*71t)j"!.g[W%)'3ir**),TVjP-%HQcWB0WbGQ@!dgE31WAY>(=_,!TnbPEqVM)['#k<2',:N5+q=.E.H!Ok-#AHZ38C(:p/58*7Ln?3CYPX-$qui7]'5M]eVbr`fk$jp&L`a9Sf^hSod^G614?c6h^m/4#\Rn*g2_bAQp7.f<TS1aRA5X=VBT_B*]G@&)45g.-OoC,"SYG.Fc(f4KQgWImPYGj2t2kD1.S3`a?<RiB+=I=EsA1a<^1A%=^<=t@qfX+ph:RjJ7m0!Iq+^jF)uEo(5))!bKD[t1Hmuma:eX7&DJu(/kSr'Gk_Dl0eO$A=JJ;R,nOMk9n>KjbL]KJ,SK?JYPj]d[a>q,[lCu\3k<+J4#q.N8kLsH2*Ab2]$6e?"#O6&/[!-ST/q5lfVZn'3+&o+XXpgfg(hOXW^Sl)O'o-c?cS0Cpr_:?NQcDSnT4:/@'BV_d/8?A=35\6-keuf:_E%XmfO@Y?G:U]QN+@^E-H7s^WT\3>eH5^RD$-*eW9lCWoeZ*$nTpqQYa)r1fH-3c0&fh7o_3t'bUDM&B<d`:.[^_aM2lWI&#VA/cTK1c_m;F[tMGiJE`4YCnERqP<SJMEo/5NN8M\KHk>-,?:;i;T!c6Fg@Bk8Fj1!\o#chU1!*seZ.WA/PKW"V.?=l[#D@p[UQ06$"m?GndE-[GPKR-Lh<Ka=/VX)V6AC;5g"g-K@F#f`DdP`&"-DVimb3GeiN:kj-SS[67!%PoJNA>1&egJ&oAJOlN3`]jW)G67QB[];+j+gWkW08\YD`\.%4L<GT0n8ggf3hP$:/!Mdm6^);?`6?/0lq-KXJf0jRJEF*$#ni9Pcg/&%?H6_%$^c%,Qd=$Fqao,'\S<]T"UJYKZ^oe1m/8Xcjk-)doaE37FdmCCodR"R6&[3b),(5HK+d5P5^ef-Lpj&G`e/S8/i6f(+l%+fO-o_KIS?\`>M_Z\E/X".uF^)c>5c5tpHgOmVUj[JqG\jc:!Z$d5S$F8DT(iNAc'cL/EtcL1?n*LFr:Fj@RPW7VDmO8Nu2h&\YkH23/I5dS;H[]I,nZ4DCcY$l5RW@i?!,;CXddLI9t304hVT3_X&Gj^/lP&o^Bi(t,.BXAu,o&Q#lo!F@]3G8R%kb_Stb>H&J&/rW<.kN9\[G,/Y8`[4bZlK%P]tM>:ANR`-9?X93md$<NDE2HN.[VBY(2CHlL.]9U*eEXg&?`Y!4E8)$E4VKf%(NHVFAL$BNWPM^0%7Xi3]#A2W;C]__KGnTUubDb1)oLMEEuLID*prb>uQ#KK2=sar)up!9LKI9P`S3B"Vb[ZO>UF87:Z_]>J9atVd';-MjLT>GQt8Or1d(<d9e&W&FR&TO#MQYiY_sM+@%#1G)DsD5_]:c@]KO1S3;(Y0I#FrE`*d"k<<<6*hI__e/B>@7ttT!%th07^r$^UYZ$ERg_(6`am-@H]%5#K^Qo1=('.Lg>=B8.9oIYc5A!Aj,]I$"ME9_l`X1N`riq><Xom2,,H0r./@kM=K\kV,pO!O)7+c_$&C`l35u%YErOi@\Q2/D\3<d4UQ)\P-FpSB>'_LlLAor8=,D[5c/dJhXJdSToIt1c)lcoVpE9J^Yk1Oel5WY?_;CE7#hAX*U2f8h%QSF,F6^pB#iB%%\+]O(Rmc$iLPnPNn$.U/mD;4K=o.h7h&6*<HLrI"#H4qXGpE/SLlQ/=@##C2Z;)\::h>7^Rn\s)$H!Bde:s^R$;QUB*/PW<R4C,uh;`e#D2I.Pt8Rj:1LSl?@&QSrFp1fN4W9_H`<cNQ13C[9Z&U"<)F_PGnpL.=QDdticNU1mCXQ??'?%Z&uETZOY99R_E;Gsi--DZr-e1N=Mn;LPG3HX=ARCI4j^DK4RT[Amm2_=W)^4U`%S%Wr+OIX,fAOT&.L-:G#%1NgW6V9o51RS2(GCs`!SCTB4A,@N2"9he(Esq%7"P-1<ca5m:"U.<tQ3Io_jQ7,UJVGP0FrNi+&ZUhO$cl'G0c-t=gY56"?t6ghCHmdG=a6`f]V.lQLkpXV_/ksp=orTsC6M@dTrgWG]n*QhDCY>i:*)K@h[[;'=]LGU\A!MgkSEoZZB&%,MoO7C?Ap;)&'.*TZ3Qr[J9IW9ZS@rbE8?O:7+^+[F^:W%laf<:mX-[^*?sjJ8Vj/YM'ONi0>aJjL.91:KZ2FuZr#VJa^j'd3o_ARGMKJ]4!tP,936=uq>A3Vm*`f8mHY]FDh;*pM)d%GDq41HVD^`s6Q1Oa>K/_2:%jD6_<1_Rb>nfV8#Kq[Q"U][,*taM5s%4m]iO8/fH;U+&`N/N'd8LR=*kr(rt=W6)\@/W!(9Op0KUWukD@2S#%ObG:LR#f5.K"M]gELX2K[Yb>;OI)6(NJXru1TQ%!#5Q*^Df$gmPOWGCiCMGQ&5#DtE?j28?deDtlRH]9oeIi_2iP9Khd_kW0^8EHW%b\8KY?Xl#Yd`ZmM1qiMp!*nGeE*6B,1gKK5^TA=i.HM;l-^tm%i?KtJ7io3l6".@5S8=-E"'o7YcCAfbl6Rr.;Yp?Yn>fOu;5t5<BYE2Ij)dMLB7o*N\JSaiAO^faF2`cE9QOoCt:!T7lDs='cH$4H!,)7lPCGuP:L0PSO*!>j$h+-2OTrgC;6<!@[5*!<^:2ZZ28],TlD6lA.Mu!0o.hcC2->/\3dfp<uYnDeh@YWs[`X$pp;fnd[iaT7P9KiDD2=F?Ff;jSl;97I[bB1rHg4\ma`-6V@ebOZ=l]37q;?eCfo*[3=*a]9`o"TXoci;SXWrW8&`UPI[_LmV>a?Bd$E4o#`-$rGhK:/%4Zja;OV67g3'^7"Qs3KF#GL:'.+G`:Q,)#hTpO]Km,fDe9!?=RkJg_gB"&VSV#1*jRRSKdTfXV7MR)XaY[";+&U2hP0Uer7iDXZdE5rotrHLQ03%;qMeR)`WZaPT=)=>@Y96<';]8Z;#X(qO8S<ln&2\2oC,S]+I&Z^#5U<@UY0bYfdH-m/l;%Ei7:jO$>8+NEo%WJCR88AX&>Bo-_V@:>iR2`iKA+ZVF?Gt`TcFmT6qp/WYCLCOo?lG.VFCe?sSU*M7*<&1cn^014UJGGqs'hDDgiciB>h=?p((G<O]8&`DT?dksSDfF@gMV7Db^>p(E>+`gYb\TTNll;P#;;9lN>lt,s&A'a)Ei=bP?Y/R<PugqJl-&8J&K's_5C`8qZ,J]Z$^\$3S,c7m$kADT!.NPTg^6X%:=$Tf*_IWib?'MFo!RgA0_T:d2c.6S='e/lDoAKN#c0L?\ro!m;+#NcYUa9)qf]H>W%9Y?jq+MNB0u(c#A7Xji!ZjqK9ZMi&u$?9KKS,3[lA:PlpVQr!["]QCVI_\P3sC'3?0Z[g<.PFk^5^g%MEtj+<WKH3=+;p7[P`#-c=&t#Zuej@+r>$\'3-\O'f-rE>+_5USI-d6ILPqQ^qF;Y^Jb>Sg=`6rUM0.ObnS-!.0X)Y78[U\qLmlr0"q$.+9h?B'+f93W?C:Vp_md3p)ZM8?-AAPKS*Gq#22ML9VR=r0eP<8>8Vs<S]h3=Qp7^9\f1FrejfZ$TAo8"E"1``pW_bF+i(+ja.aY_TF0&kp5h%'V6:0^CadVS'gIqQlj(MMo%YALWKul`$^Mqg!pPt*To*N@A+(dJQffo%)<2O8jsqDD-d*;P@VYQgoK%FIZ(Z;j(me4'seoi9c6Hh3B.o*,CJ9-G.W4q;W[DQU-A%imd8,5p2Q)!nCjN0AZ'_[&<+m",[r3P6Gho<A.V]-R/eT;"Pt@p%Q[bFTJe_fLQfuK;5\&;TlhdX&BJ&kD`)M53*oE)T4E4:0M!eI*f@Du0^MpFTc1!TRDFIr&A81sg?irW_Ji0re0Y8O"-F5+*UAI;\q-5'58\nW2sWWXpl2Cq6<u=CWZ,%&ZDM)X7)<a<Rs")('dH3UqK?Fl3@D2e6oY)k[/.[qV>kQgF%!$r?Wba4"oUg4^;6N"^-O*(6b0B+6J^,>$[$V+=)Xhf><rOU2ms=qI$\E9\NCp:VlHbOTKOD/['mAljY.>\P=s*AZ0ud"I_E1@:G\2+EClSkG/+7e6jLq7>smE"?[L#:;DuoCb"/F*OA/q;Lo<`_"@6^nTXaFIs(ZEVpO""sUXA!@kp/B*6YTdXcZRtP!nWRrkW`e+6;9!uPVaN-A]j!LU'If1f4mh$PR\_Vlh*g7E.$'=iHbBoSlWQE:eVD#"kQu,CHFV)Rp%nHe2F[Rq:$c^CW?[Ih(pGAm/X9]H=GTS`T:,W>F5G-*TYG8Y\.Et4K)tBN/<D5E64$)M-)L:G*m1CFPZ5:h8:Vpo('(H+C_X;4aXpd]ZL9-#$N6&S<MD[ngU&*KFhZV*BQ]?3b6,AIn,k>b#b<6"'OjK]PZ8lIG!%@Thq7AI0O^*lZ3dV(.%G9M"mO3hsutRF3CUe,Ei-;m'+e*3/6og$h&*no5sN<rg]SI.ID<K9qOl*IM?&WbF8Z:Mi]JT4u$)9eQ>jP;c6Ik<*CN4:qo'ohEc*h(kq]##H[RYqMj7jkQtrA[LU/s1u^:<2VUN(d+uU$9hg1_X4:se<\';)#D\$7V-!SuRjqoD2h7MrThi^3#hIW%S=8`N9%5+!M9gaj\>+Eimc_f(cj/VL&q!da]gQc-[OEq6g[.:u-H3P#YS6Hgbu,4LE,BGTj<eW[1iPs=;@+48@oG0W"nJIonPO.>;l4t<HUemn*KW3D>$Bn6<8`+->=V%J'6p7R]b<;,L9f_"nC3]Xb-ZOP>?H.cgG<i\A2(6=rM5^&\Vb[6W8B,;HYZO6k1I\gL=^hFW9fj0noOXr:q=?9/Mjj],GuqA/&.aUHq("]2[J*c[Hk:-dgkJ_i8+)&!29sIia=2qp`3+k<TH3<jk/_X%^b9`IF-0l#<mA#olf*KBg)oW4SObdT^^?P@"I*-U<^aoc.&>>4BjHp1)Yac&.+"A61d;GeC\Stq:#DNKaS8\W!7W\IU3L?97E["$5`qD,2/F5m@Bhqp3HQ%o0*-X,Vb5`-k<@KfJCXnbVhUYC.#=[qms;KR@c)f5%t472kCH;j+st2-c*`mIp6Me>)h_cpWDdp.j+;b@3$lbpWVoC8Sk.j2uYh=q@=*/h[:i@ag=["Y,\-;ragEBMq"]XKX-IR8l5h`i9n=+NU)Q%Vc0-cU'<:oD,_]d-7<BWC4Ksg;rq]2_-KLMI2Z+XkpOhEfVhbK>[eIk(t\Q*k`_6q9%^%q?q5H_lA\pNi!qds[3),QD/@f6reuQD+)='Aa%n#c%^?abkcS,ST:X($#;QPqT[iOR9gCms=6]Dg/lm/,rcq^QGno,O"f.\;)E;"bjH7jKOP%-!ZJh"/Wo)VcG)g9j3hpM/HrOqOZ`)g/a@B#NRTcY$I!\@23ku2jEIfKp`KKo^DMcHE.K*`U+`^<K_sJ.[\'?(TIg:7[D8^g`M?/Ip0!>R)`<coeX/i;1"7?`'3d(9-_='Yd+btC=?L@:::KI#lL@MCnm2X72#f\-JKEj%Q;/P^W\pXhLANHA'ptsdnRGRKW*I1JqU%@Xi!k_PD/ZQWKX(uo[\*_A)^I?_%**i$g4,(EE,>b)FUuYk/j'-^Kh?lN._hKn8RAdseXM)W*;$bo@hasD;PJR/^N$*Bu`JXh:N-d>B/M-7+(le#*]sX8jYl>l-?EZj?*5^#d6tZS)&e#B^F0NPeFlK2M!Hm='*]nQZHK+@tS++i,J.oE\BB]hX$1b3L!%A,^5(9/T>/Reqd+F!W2QNdo^9;&K@6ic,DgVW`[;>Ndlc5![oVag[Uc-i#[S>-YT0+b+=^YgoJ7*A:0d.n;9>BdoY2252V;Jrk:F9WebI%!:.ktMM..0sh'MruVh42D>'kL45R@/nhM$*]gGp.05pd"t+p?Vt"E<G4qk4_kqG6EV3j_8R.CHL<78^BcPoC?lKBTUP,njq&"+bRd8"4Wm]^9))ul^\)E)?oAdGo)/7*rIF0n*s.Gb?2`u_ZEu\)X=EB"nV*._':]jZeoAmjkI)+=0Dk*R\<;)9;*;rRUM#L42ooBj$WfTTnpnP$RUOC%Tb\?>>KT5b*-1/R%BG*S!S%E"khRS.B2Rm_b/D]JdIgFm-IuUCaqHUGn>TN=Kcq*80mWgl@tN-Otm#G9PhA@7*!6b`k;A$J<b`!Q*=n41/Q\m=kQrDgB"_`Ef_hS5og@UEg`/VF;Tr#._%Si3OOWnHS"Fsbhh83$l3\"lGLsSj9*CD+,<U'kN&=(L4>MTXnuq78i8cKA5uT0V5@kC`kK6K2_$j(H;[RAgtURRW=p$_(*H$lgl>4h-^][HMCKJ*HN1+frrOS<0:;~>endstream
17
+ endobj
18
+ 5 0 obj
19
+ << /Contents 146 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
20
+ /Type /Page >>
21
+ endobj
22
+ 6 0 obj
23
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 703.7286 159.9429 715.7286 ] /Subtype /Link /Type /Annot >>
24
+ endobj
25
+ 7 0 obj
26
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 703.7286 532.5827 715.7286 ] /Subtype /Link /Type /Annot >>
27
+ endobj
28
+ 8 0 obj
29
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 685.7286 129.3829 697.7286 ] /Subtype /Link /Type /Annot >>
30
+ endobj
31
+ 9 0 obj
32
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 685.7286 532.5827 697.7286 ] /Subtype /Link /Type /Annot >>
33
+ endobj
34
+ 10 0 obj
35
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 667.7286 142.1429 679.7286 ] /Subtype /Link /Type /Annot >>
36
+ endobj
37
+ 11 0 obj
38
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 667.7286 532.5827 679.7286 ] /Subtype /Link /Type /Annot >>
39
+ endobj
40
+ 12 0 obj
41
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Rect [ 82.69291 649.7286 157.1729 661.7286 ] /Subtype /Link /Type /Annot >>
42
+ endobj
43
+ 13 0 obj
44
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Rect [ 527.0227 649.7286 532.5827 661.7286 ] /Subtype /Link /Type /Annot >>
45
+ endobj
46
+ 14 0 obj
47
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Rect [ 82.69291 631.7286 186.6329 643.7286 ] /Subtype /Link /Type /Annot >>
48
+ endobj
49
+ 15 0 obj
50
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Rect [ 527.0227 631.7286 532.5827 643.7286 ] /Subtype /Link /Type /Annot >>
51
+ endobj
52
+ 16 0 obj
53
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Rect [ 82.69291 613.7286 161.6229 625.7286 ] /Subtype /Link /Type /Annot >>
54
+ endobj
55
+ 17 0 obj
56
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Rect [ 527.0227 613.7286 532.5827 625.7286 ] /Subtype /Link /Type /Annot >>
57
+ endobj
58
+ 18 0 obj
59
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Rect [ 82.69291 595.7286 180.5329 607.7286 ] /Subtype /Link /Type /Annot >>
60
+ endobj
61
+ 19 0 obj
62
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Rect [ 527.0227 595.7286 532.5827 607.7286 ] /Subtype /Link /Type /Annot >>
63
+ endobj
64
+ 20 0 obj
65
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Rect [ 82.69291 577.7286 347.8229 589.7286 ] /Subtype /Link /Type /Annot >>
66
+ endobj
67
+ 21 0 obj
68
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Rect [ 527.0227 577.7286 532.5827 589.7286 ] /Subtype /Link /Type /Annot >>
69
+ endobj
70
+ 22 0 obj
71
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Rect [ 82.69291 559.7286 177.1729 571.7286 ] /Subtype /Link /Type /Annot >>
72
+ endobj
73
+ 23 0 obj
74
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Rect [ 527.0227 559.7286 532.5827 571.7286 ] /Subtype /Link /Type /Annot >>
75
+ endobj
76
+ 24 0 obj
77
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Rect [ 82.69291 541.7286 285.5829 553.7286 ] /Subtype /Link /Type /Annot >>
78
+ endobj
79
+ 25 0 obj
80
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Rect [ 527.0227 541.7286 532.5827 553.7286 ] /Subtype /Link /Type /Annot >>
81
+ endobj
82
+ 26 0 obj
83
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 523.7286 116.5829 535.7286 ] /Subtype /Link /Type /Annot >>
84
+ endobj
85
+ 27 0 obj
86
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 527.0227 523.7286 532.5827 535.7286 ] /Subtype /Link /Type /Annot >>
87
+ endobj
88
+ 28 0 obj
89
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 82.69291 505.7286 181.6229 517.7286 ] /Subtype /Link /Type /Annot >>
90
+ endobj
91
+ 29 0 obj
92
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 527.0227 505.7286 532.5827 517.7286 ] /Subtype /Link /Type /Annot >>
93
+ endobj
94
+ 30 0 obj
95
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Rect [ 102.6929 487.7286 211.6629 499.7286 ] /Subtype /Link /Type /Annot >>
96
+ endobj
97
+ 31 0 obj
98
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Rect [ 527.0227 487.7286 532.5827 499.7286 ] /Subtype /Link /Type /Annot >>
99
+ endobj
100
+ 32 0 obj
101
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Rect [ 82.69291 469.7286 221.0829 481.7286 ] /Subtype /Link /Type /Annot >>
102
+ endobj
103
+ 33 0 obj
104
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Rect [ 527.0227 469.7286 532.5827 481.7286 ] /Subtype /Link /Type /Annot >>
105
+ endobj
106
+ 34 0 obj
107
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Rect [ 82.69291 451.7286 201.6329 463.7286 ] /Subtype /Link /Type /Annot >>
108
+ endobj
109
+ 35 0 obj
110
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Rect [ 521.4627 451.7286 532.5827 463.7286 ] /Subtype /Link /Type /Annot >>
111
+ endobj
112
+ 36 0 obj
113
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Rect [ 82.69291 433.7286 275.0529 445.7286 ] /Subtype /Link /Type /Annot >>
114
+ endobj
115
+ 37 0 obj
116
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Rect [ 521.4627 433.7286 532.5827 445.7286 ] /Subtype /Link /Type /Annot >>
117
+ endobj
118
+ 38 0 obj
119
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Rect [ 82.69291 415.7286 247.7829 427.7286 ] /Subtype /Link /Type /Annot >>
120
+ endobj
121
+ 39 0 obj
122
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Rect [ 521.4627 415.7286 532.5827 427.7286 ] /Subtype /Link /Type /Annot >>
123
+ endobj
124
+ 40 0 obj
125
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Rect [ 82.69291 397.7286 194.9929 409.7286 ] /Subtype /Link /Type /Annot >>
126
+ endobj
127
+ 41 0 obj
128
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Rect [ 521.4627 397.7286 532.5827 409.7286 ] /Subtype /Link /Type /Annot >>
129
+ endobj
130
+ 42 0 obj
131
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Rect [ 82.69291 379.7286 227.2229 391.7286 ] /Subtype /Link /Type /Annot >>
132
+ endobj
133
+ 43 0 obj
134
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Rect [ 521.4627 379.7286 532.5827 391.7286 ] /Subtype /Link /Type /Annot >>
135
+ endobj
136
+ 44 0 obj
137
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Rect [ 82.69291 361.7286 171.0829 373.7286 ] /Subtype /Link /Type /Annot >>
138
+ endobj
139
+ 45 0 obj
140
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Rect [ 521.4627 361.7286 532.5827 373.7286 ] /Subtype /Link /Type /Annot >>
141
+ endobj
142
+ 46 0 obj
143
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Rect [ 82.69291 343.7286 188.8529 355.7286 ] /Subtype /Link /Type /Annot >>
144
+ endobj
145
+ 47 0 obj
146
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Rect [ 521.4627 343.7286 532.5827 355.7286 ] /Subtype /Link /Type /Annot >>
147
+ endobj
148
+ 48 0 obj
149
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 62.69291 325.7286 271.6229 337.7286 ] /Subtype /Link /Type /Annot >>
150
+ endobj
151
+ 49 0 obj
152
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /Rect [ 521.4627 325.7286 532.5827 337.7286 ] /Subtype /Link /Type /Annot >>
153
+ endobj
154
+ 50 0 obj
155
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 82.69291 307.7286 176.0829 319.7286 ] /Subtype /Link /Type /Annot >>
156
+ endobj
157
+ 51 0 obj
158
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Rect [ 521.4627 307.7286 532.5827 319.7286 ] /Subtype /Link /Type /Annot >>
159
+ endobj
160
+ 52 0 obj
161
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Rect [ 82.69291 289.7286 158.8429 301.7286 ] /Subtype /Link /Type /Annot >>
162
+ endobj
163
+ 53 0 obj
164
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Rect [ 521.4627 289.7286 532.5827 301.7286 ] /Subtype /Link /Type /Annot >>
165
+ endobj
166
+ 54 0 obj
167
+ << /Annots [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
168
+ 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R
169
+ 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R
170
+ 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R
171
+ 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R ] /Contents 147 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
172
+ /Trans << >> /Type /Page >>
173
+ endobj
174
+ 55 0 obj
175
+ << /Contents 148 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
176
+ /Type /Page >>
177
+ endobj
178
+ 56 0 obj
179
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 68.69291 120.8661 0 ] /Rect [ 409.0329 697.7286 413.4809 709.7286 ] /Subtype /Link /Type /Annot >>
180
+ endobj
181
+ 57 0 obj
182
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 62.69291 508.7286 124.3829 520.7286 ] /Subtype /Link /Type /Annot >>
183
+ endobj
184
+ 58 0 obj
185
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 85 0 R /XYZ 62.69291 457.4598 0 ] /Rect [ 129.9429 508.7286 226.6429 520.7286 ] /Subtype /Link /Type /Annot >>
186
+ endobj
187
+ 59 0 obj
188
+ << /A << /S /URI /Type /Action /URI (http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job#cron.sh) >> /Border [ 0 0 0 ] /Rect [ 276.6529 508.7286 356.6829 520.7286 ] /Subtype /Link /Type /Annot >>
189
+ endobj
190
+ 60 0 obj
191
+ << /BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
192
+ endobj
193
+ 61 0 obj
194
+ << /Annots [ 56 0 R 57 0 R 58 0 R 59 0 R ] /Contents 149 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
195
+ /Trans << >> /Type /Page >>
196
+ endobj
197
+ 62 0 obj
198
+ << /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font >>
199
+ endobj
200
+ 63 0 obj
201
+ << /Contents 150 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
202
+ /Type /Page >>
203
+ endobj
204
+ 64 0 obj
205
+ << /Contents 151 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
206
+ /Type /Page >>
207
+ endobj
208
+ 65 0 obj
209
+ << /Contents 152 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
210
+ /Type /Page >>
211
+ endobj
212
+ 66 0 obj
213
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 27 /Length 7285 /Subtype /Image
214
+ /Type /XObject /Width 88 >>
215
+ stream
216
+ s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPeD=9ARJ!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;8&WlPFkXp6"'b5CBam),Rfu.u[nlpPi]:M7&+HX7daUhuR`k-iX"@GiAS4SM^?HYqZ,dX:7)J3i/Lq=d/jc65B*Zgf8%ISN+`fVrWng$&,9.1ho"Ip&*Lkrr?m1MuJ-trrBhp5PVg@r(4!.jWkUT_lC,VJj8f%Xo4r=2MUs%HFR>XGC+GL%DZM#N02CHN)^<fJ,#It)b*jj%YO1&j=<9YR`[)!En9""Xo!D\9+;2!`_g#bo!a*I?iC[d>Lpjor'12](J4W,#tD&qlQ?#nrrDt&CL6h'G'?b<95J*t9-gcp&-Mfg48qHu5rOY!XRX:SA_T8cIV1iP,InosIYPG19,W5"V:V<0D<>oZG\_ZQqm@i%_GR@`HH6$_5Q:^"8,OYO\+ctRn&,/*nTAFq2bpuJ#"Td]oAtsn85GY\+'tKfFL8Nj['B4>?3oSKBa)+)B-EUnEP!4Rett:oNF1CcDrp*Dlf;$AL0nH]oD\e85Q2:T>Plu9pYl,Pppr]K.+Q)GA,cOX+9)>!WGX9ZgEjMBHY8X(j+Z&Im'nUb&..EX44Z$oOk=F_gV]-lm4&Ff1'.B^cX*J$N-V6uqU`p4Ro6/>X"IMln6TJaNQj]+R[!ZnKr!U:0jI8jgEL3;Lu%hPcZL8,Y(&d-bje_o1]IG,Ud+YV8h8H7lV=Pu.D*4l!0QF+<23'cN)d7b!&I.)7DsB<V3rSsaI=-9%/n?-do<bW<\m(X*0i9uICM0&ZrU;1WE61do@j1Nn4iD_YHXb#EaIUOIYWhGM!\b8VN/f#l+*TuJ_0rB!!c7&6[>h%H#hBHf'(<Xg5j#L!'6>.?Je1_/=FU_eGMPhR`@EcG?"SB+8?(t8`DaB[heOLN:;ndC%=J>d^P'FE>WOmO-F[Q\GN2YReFlPrl:B'rI<GC5IP)%!'Zb,rr<&h!O&fr`hZ)U0"@OK*i*l/hP>'':@b3_X#ik?fZ)qtF4VE%?IqUR-Bd)`qnM'MqdqM\>q`tl!TF`-m4"7Ce@57`o/BI9f]euQ`CDPc*Q3\(Y?"4*<dA^]i_=cj'V7kPocN#i!!I(!957,grr@Rp#DDOi\FGTBOii\POrPtSrr=T\U:l#5oWVG)Wmg%Boss3pEF2kJcYI6)s4I~>endstream
217
+ endobj
218
+ 67 0 obj
219
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 29 /Length 8330 /Subtype /Image
220
+ /Type /XObject /Width 150 >>
221
+ stream
222
+ s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPkFQ3..3!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;:hZ>C@i&B]HL'bf]>E9=&Nl^[.Khn'\O,i@hbA!2+-mp_85Qh*p@Jo'Wm6rku_INk)Z4h_]&S^?,N2l?VW$4cRKk.H4o6'!fu\m(AC+$%epN%iNMKHM)^DRFM6:_I%Ba!'o1dn0n;:n[^sD0=h)_TPQjf'S#o68U#)kHZ(`!ESIOh,*Xf!jG,+nr\*lbW$K_A"k57Qbacl<8.2+=jX28n3cm6TV2nC!S_'V)DT6[V%c6h0p\t5\rrDgemXOF>&,l_Sr\m@F-20Xr%>Xr`!g!?])lP"/m-!qOL3nIP&fEV/]B&"0/hHAOZ%_--'c,(teVF6nJhakXHIR:HIk-_Or&+BZp/jDQanbc.q%Nc._I%Ba!'o1dn0n;:n[^sD0=h)_TPQjf'S#o6<*_9)3#ZMm\-SD*:;JZTYrNebC6EETcIJhUBs%jfdQ#)E].=!Go:t#O+3_J15;+?JAV7\,Im5SN14T'lmXOF>&,l_Sr\m@F-20Xr%>Xr`!g!?])m%\o,*0]YVs\/VAH"+mE&5fWXZIJKH^;+3=JI&;ojq7F5#Q[HXV@gGC1#l+Rp.M2o(,2I7gfHl-VNn*r;;6J!//)Lrdh<R!8p`S!980N_I%Ba!'o1dn0n;:n[a;m)U@J)mc'[bZ90]ceg_akERaJB)Jo7VT4o%ioA!+1`)CT=<1fYbm@;PgAdNN=.t#+Q4dHTO;:k!fh9/%PQe_T@co*!D$:"H+O8)B9J*7g^rWODC2c.\pBi'_IoA/QdbO[Htq"eKXZ#-Al75208I)T=M(h*\?o(N,[V-90JbE^>$*UVLG$lW2Dr;D!<Ttg)`h#@B$2BVi(5Q#D[pe1%)kSk'3"X!_&8@iu8HOZciH-s"J82mt46K]Kj",p2L:URW8LQ/srCFNL>KjBh*NcMdVWHBr[F*"C.0%]GI:C4KW^H_<:rr@_dkPg%:rrCtSrrD)$J&5Q6rr>=:J++ld!:dY$IAPW5Dg19eE+cV=,WkP'L@+;3n(N3UT!gQq7U39li4IaQOhE:m(95#Uq>UG_kkZp/FaYhp)A*9gOU;?LNK2-4"0UGOmmUma..6T3#M+6SrrA2<MY\e8EhsX:g.-j#.Q(cPZ>@PULAN7F&%(6k-#mDTWr`S1EX8jY^!eh:95!"\D6COam.91;gRbprj.Q=MVu.bX#Q4Ypchmp,r%#q/j\r?cePimCq&Z[P22)AePD/E'G<G0N`B(-O^QU8&fuA36;K:/2%+<8WX]@rKg?[mX\#prQo4&Y#EcLDOM>mP]`e"-i5Wpq'!!+>E!"(sL(skM2#H!"/,_+cNo#sbWepibVQEr\'e(FY,jE[gj+k/+AY:AV:Pg%8?NXL!sc@+tfiiQ28,j+0+6mt9C\Cu7fA(XkWJ&3q5J'\^"rrBi*rrBospdR(Nq>oiQp^&&;;H[<P.k9GKq2OO(B("m^?fZL>rZfp1I,@!FGFF+Bq%RC+,Rt'iXZ\>Vc#2"<nX`;ugPI+(#RfAiA+Akj\,7Hh#Q4Ypchmp,r$_RFKO[:I!2(C$rr@S3rr@aY4M)75F"4cslh^Fl]SYcQBucLee)gR88"3e"ZV@PnWBpE<$gp]0[u>bn1\e:WGu@"O""&3N,T+j6e`_MPN+a=*"4KL(&jPl\rXk+lrd]<-rW5Uh'alP1/)%,.n(3'%YO,">8NKqY[nXTscB!j*6ZfdAlfV7<^t?8BStg0X:u#j\pLuBYE*['!S8B8+Vf"^+oY:/j1_9E`l(@_W+8A_5!!pSqrr>;I1]IFU,Q@`N*`\#ZZ`Ep%!1;>QL/.$#jo.c<afaMqkP:>)ce7H.Mt:f_]su$PHqC:T7%\2h`4gD<0Aje)o^q/a/(-Z@(skM2#H!"/,_+cCr$**br;cK9qui)Y.=Yo<2tk"Yq2bDW&,uVn^G#.?m.dba_8Y7qH00('0Rk^HeK"Q6e8?.m996b"6pO0CC$IF5rk3*q5N*I+5Ni?LJ)DT%iCEej)@-3@o[!F<O8LH>Y7fBVBDDK,R4C,3-ZqrMrr=:g-.hVJoDHdjq<4e*aM0KjK;TfF;>WksHI)L6)@-3@o[!F<O8LF+!/+iIrrA]5RK!8;OoGE8B.TLQh;qPsOj7X\iMUV+r/*ZA3Uha%op1++*;!;)[B7-5]%brT'G.-b`tAPQPEUMVl:i#]dYB,._m2i&Wm@94VRj4^s4I~>endstream
223
+ endobj
224
+ 68 0 obj
225
+ << /Contents 153 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.5929cf3293b6bd13fad6c6716df5b8f2 66 0 R /FormXob.a0f0a8dc77b6c2aa79f4cea5d277ce75 67 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
226
+ /Type /Page >>
227
+ endobj
228
+ 69 0 obj
229
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 349 /Length 13024 /Subtype /Image
230
+ /Type /XObject /Width 508 >>
231
+ stream
232
+ Gb"/lH]/rbSX>-/+X"9;#4f,'fXV,>iYXXo%a#eEbiNrf"#_,%+LQst7%DR(K'XY28`<2YGJp(<j.%6hUn!a8"537I7?\?Qaco?<5!gN=f-D)&/$G:#=s>D9BDIk$P.4.Vf#-Q$3N5M5Wk5;R]<fsb4oKg(JZS+=WiiMhrjnu(\#7aXzzzzzzzz!!&rZGAl/(&-P9u4`ESN&4CpJk7[tae0f3!5nHG4!p:4"6.@9$5!]`JI0/RF"@:NbQG`O1%aKq_boPc+kDkH(ZTm8Dif<@bmC2'-VFV_W2EPP%43o\#n5![l5Bh=&p(.?mPSVFtcJS3PCd`&*GHKH?Mn@-eOjNna;9ni*D+-OY+:,iP=J!'oW8uJT@.rN_[p5V5b-bE`ZSVSIID(FG]Zl.:[<`LaRks3D0PC!%Eh%%sU-FfS<9DsO^*mb).M3JT*Ic`UD6RkG>[5KmIWBKYqaD&!d>:sHkA/9:K4d4*(2;eq?jso;;1emp4ATpmn<=b*e@(U20W(#Mi^U=QkJrKK`qeS,4M4G.>,Z2bq)u3fr6^6F>&0/i6g*2^B5]%]&4B#tR@LH,(@"Y>fW_=1HSW6RY>'+B[_\'XFp0TZ@@>Hf\EJSUO,g]%b=BoG<LYrF2Fd%qZH:\OS8[;T]o`F`&06VhEkZ^`oV#5hI*tJo1$TP'QEB@uMbHVGs&mVX002aIIb:kn3oAZF>iu>0E'?Q!--!5N?VaCdISQ?V@alMu^YB73#e#fN>oi+_gV>e@+:'?)q4+XY2VU>X)u\>fV;noDR79(%!n($5WT3n#oD'9LpP.n_q>A2l5LE[#I(j`E31h=L&n;fMn'?#VB=WYAEjFhNr4?"Hqd,;Tc5(YUqfX`b+1A^kS)amFQT:[VCMiiJ!6lNQmb>SR"@87bbNXD++:,jO_"e+!&G6@":CmY+T>:7*5nN\qS50\!;4kZ""@3UlM1X#;#ljtUVmu?%!rtTO_>+'2o`=4X!7V7D%ffEJE'=7eIDGXY!;-BU!s$gUS.>Tr+)jCD5^gHD!!)Zmk5t_6#Fl;):`jX?!'ktJq#CEf!TsObe;"MpIq3MP_;L-Y6mg?L)X`Zg(/#PTZ_%0TWN;(+CZoGaF6[Nt)Re)6L90]&K'^V?`ag%%QB^!c,`0Nt"Zc$nLDnOZL@%.ZG)Q9"i@tuupYNW=]uej5fgWJoE'fD'gA-l+-:aaf7k3[,LM-6ZYo;>1E-p5A,F8TBjURR:2N*^/eJ&BGeX!=bf:9#S7J#FLDcNOsE-o#F>M!I'dH?j96k&,R*i*#c2odN8*0Z/I2nFg9r2/Ql<J1;h+nIHdXMLp:5RLqR[S>t?M;3_4f<FlJXZm"GZhWR`a?nqIO2"Xo1cuUuaG>teef8Uda:iZk;/7S:N;AHC8D-:%56NVPq;n']_;NQdfK!9e@Qe>QYNh'-hgD&S]J$NPes7];?o+u).eF74R&d;i,3(^l^Rut+AenP+cRId%h/U.`VDJLpq;ZkkFI4OSK2Jl:kWeY_j]@VSM/].l[[>OdGHR>a4@u:Uc&7V0)C$+AcWN/so!'Xoq3gp=B<^fs\^edOA'16)1(l1o3AH$\lbd9.7XNlJE^d8OWN;e7>0E+H80u\Si=oP`6=u/lU,?-+Aeg/=@M'h2W#FdAk6GUX82VA9V7S`BT:^52[>'L_$;T=91cR[>ZYgsN3_VS!oh:6W-FhQ9T6`duZYD:5)nk#"\m`.0,f]Wtp#ftlm\$Cp'$<0(a%][;F6n6a[NRE8diY">1:(-Xja+S"gm/`o;9/8UqDQcT7!l"N(Jt<]QL9b(4WfDGpRH5PFP**bK/rOeQsj*EK=t=qZQAEZ9]noY7tYDDFs2%FZAc(eAuJ0'A)FsPebP?9jj!2"l[7FsRLPA%iY+D9r3<p`fK%MGMH4;g=jFiO^-f3NYp;7KEIMNC([LuI?;ipKcH#rJ8lqOT1)S<+gX0AEfflJbCIjl%LpSFV?tVQ.f@V0DH@-Adj*]%<Caq0g"-JEDlcd3iSY+PB.$ICd5?i5.ntrIlB_M1dMs6a#Nq:L':WbZS[V:*5[[&S)o?FC>1,")?5Q;1E?D(NJpK-V,H]`<^s.\JCOuYB:"`sTKTYX)<p3OVeg'8:dc:DH(Q^2o,la3tr;u[KMq1]qh[VC1hC#Aa;<!4ZK_8349k$AbjS.sjmbibJ-Y_;`sVr`hZI\aTQr7d>Yn%ES</@d[N89>@+qUERl,Q/[Z9D@hpK?KaV+,kSC]#&V$LA?,E+6jZ@_3giJ1jg`oOn'9VY)$q(.dOg>E2TEd1]I(\1DPa,S8],llo1G>:Npib4lIdbjK1pe2i!<??VnQ6ef@HVN+KlBr`qn]c:R]2G8/`B0elbYaP!rR_jN)PR9rR.Kl*`hrF;IV8ut`mGhlUH*7E(!oHa>T/jM'E1<BA%A:a=QH3jM3$?ErX!!)Zmk5t_6LX%o0imlWdJfokELHEer"onXo`&6`(c-=MZcX42$JODuepa`P(^?U##>YaK8l?Y6W31eL;8_9G/B#6Fg445^@-P.3Z15TR6e8Y3DRe&tcAnP`m()BGO,kQZAok(_(cs>/oArpso&Ib9OBho$Af:7?Paq`=.M\e%0a@HG#F/1r/-?L&H]br(8:[$i7lcgh6iL9@,__,6+Ug$A6/YN^)XuF8[KR#2^clNg;-A(3?,OHp'iL9?k?bZI3gM`")OiU)W"1@I>E&eN#bDrrbKUW9rS92F^AL:Z'^2DRBDnI5+A+H$tl^nKM4JNZSD<C)-igGcV<ifF'F=GroS-Xf10:C\N(O;CYTPs/>D]a>1?ZqgZ1HjN[d<.*\rGnYf39J?n[\(oP'Nq8Y_`N>.Z.8U,0diD>&g'=,DpLQ"rFXP5@1Jn\7n_aj@o<9IdjfY2Cj`*H-]r2i(Cg8\07NHB>AqX%di7B>-cc-2A+BqT)kVC+P,HccY&#pJTat,GWi%d4)IFPW:6q%ZKn_WDm57\^,CIDXY3]Qn$/J%4<T:#+T2rXF/?>PWOI5q*>>P4k+.`8!>GiN%m6Z/7PmE+?YuT8jrJeP*01QM80mV,.3#U!=dg)0%*SHu-$.k^Ik*p;7bfkltWPguC@@bb<p29@pfJiPB#Y)->pZ]nK2`B_!DM+.!@V]<pc^Q`f2MR8J*`G]Y[gC[ZD:m45*uMUuYMN;VI)C[J@HM*?h*P+H]^^=nNUL7A+/kK*qd_X%Sa_t>8CJ*0KqAE7Dbc0iA)[#t2saP4Pn1cm.V17oRL%4#E0]^Jrr.AWb<\Xt"$h'^qHUR>?dK`22u9)R/bgpgro*,"YgLLGmaZ.n]aT>D-;tG`e>)-%ZbLSICOc7l8%Pj($%8<h<_:"!D;-GWn,(.hN&gqc\+Q`\B4>(iAo4"q:SOY[o\l\f-1_Y-F_d<aFT249]P*m3aA]E`CJujR<;mf,;;FApWq+6S5l\8aOa4,m?i.9+ki2Fj)/b<o.a,%-S`oZooo@+^8+jj^c2"4Tqeat98uY.*_p*IT[d$SCiqcre(S;f*fEbY?'5N!Y'#@;]nPs#8e<7&\'>l:Go;Gq1QBQSns2nV*HaTrgk\)0M/;C3IDf"1Z-f4:T!MFd,G",uZW.4`dK5G3i?i>]#76OAqM0n-=+#`Cfd+"IPZ$g<k>KY?6iK(n_s7Hb,^%KT%-b?H]M88qL<W79;%KpoFb]o;57ma-pOh%Hslj^<H:Em\@>5j(<oJri[,i_!=GF)TVroM=i:S0h!lI779n`X0(3VORYI;3RkT1Y&Z=V[F9?Mg\Br7!dTT5,PAMiS#dg\"?f'oj4Xs)?NIHWS>G+#gYT2UQ3>InVf]WV(QNp>Vtl>:ZV-T8L"do*Ki<>#md5\ma.?EIZ+*elB"W`2`?S=*a`hp,KK*lQ4O2gQ77)pS+Dhh*mH+IW%?V^@0p*rJjb\J3HLF<UZc3hp($I%fkF.a\q-&nbQ'&@j8gV0t3/Y&fHPa4'Zil1;VPZYp2P+B%>VCnia_]Yb1`qZA!U#rQGk)kYbX)o\h/2an)mp?$=KgB?m"Z"\$?,K^Q*BGrDe=DtN*^F]tp(12>q`M-]CP)NPZk\_d5NTs[[Q'DB/j\t:3m7ciC3qS'jfa]%MJc"[pXG3V3%f'*k!?<h?a.t7;7U@FdHkQBA@C8^EQq[WKr%c=27FQSO+A;WLE11fOo`Q,HFh-7Lte@k'Z+ukq,<C(Qi>.873h[/QJ=LUrcOmg&6hp($1[4Z^]_lbdf"c(?6ituk&BH`M#d)V!n)Zeqp#UCW)JCWYm%H#r<AW'jV8JDb-TI+gVH&dcQVrd?PCX*`m/mZ%F2)Q*oAG=laIbeaQI_"Nqm(,95`l0EM%^(:dB%CVD&[.F]7s48@pDoY7kNO"9T(/L9oUBl8Ht[Z?YPE0`Fq9RZ`RjSK[Ot'iO/E],ZtEZ@gh:c,'>aYCnPsous*.19Rq:VUNiFEjIPSLX8#2U)m^X%bjjNjsUC#aFO]>h.aJ6`?W3A5#AS398,<1.bpH:&RcL/b^iuO6G#@!OT((qLA@/(Ee$/aj[5B4fDZUkTl]u+ILc9OJ^YfZK4r&cQTQX+[HBNVUo4E9@KR+S`ONRd-)AM-gfn$rCrcFi=XOlKZ$Jl:Tf$SKo/mm$);\GL0Yi9G5$;G3&,YMU@'C<+qX$A7@(f?8#ZD+@4gk3fDV`Q^;b32$j^bGsBB7lj8A8N0tWOY+=Xkc!36In0F\LV>&EaLcY_\ecA]kUqaoMY9NDn)A39n#7<(2qIGXonGLjp"Ooermb=(FkDMV4*fJ3a+cB?$]0g10RWGXN2no5>N8T\.(:%V0tcHc5HF6;'Kp76s*.3/kX$)HSYtT;Z>7aXSt=LB,E\*BL#t^K*)$LuZ6S`[iFYCu-XCX[R0hK8s4V7l?+bFPm+J]j1(qF@A/o<EK*g@&?#KoR`tS;/l$>/.9Xs6_$PtFc4*OFVN'p-%+/iI`L<GG3>]uo+,hu&rcdd-54XD@YF1rmTickNuEA!GWQ:)1;:Tc_XeQ6*@J,[)o)i9N,5#AlJ%$qWYo,VNU#r`Oo39b`Fb"T>-HmjS1:a#qP#`;Hrj2<D0J+&-t#_F1Tc@o3BJ)e]K"@3Sek5sf["@:NbE'?Q!7"#."'*LVN-ZD78&4CpJk7[tae0f3!5nHG4!p:4"6.@9$5#FFSs81[tLtq4jJP'GUc6nL)31X9#^-E5IZ2HoBde*^-a9\;3'G'1#Rns#2K#e4fms*c<U3K5ln,E%aOV'S1n\FrgnW;%Glun!%#b:@.i-_8D#j:*tn[epd&NJ\<_"gCg&C+YXrkD$cYMQdX3"E+ZbUenuqf^h4[;Pug=!J(`*u.f44M7Hs?&Oa2i-DO'D]Y3_MQBY*I'eS*_YK2sc6nL)FT2#`.mHLa8DB(=aI*WeINXpNare&lM9F;_*W3oOH+!T:=8!$b4!$AR-m$8$o+1e3IN4Nr^MufZ]]Y#o0m?r-W-/*Z'>M(3Gs42YDGK'M'm\f$S$@Z^M,#]tHY(*`p"JXT2l$'@Q(PfO-iQ97n5)_P<KC"fb,H3R3EpQc"AOl?b/b.I&_18n&"#@qc<3&f\q=a7JBVWYOh5MT"^-j:=SL>!;:`aboQ*L[I)c?P'?*="s2!U6Nrt06OUgTAK@5"H_[Ce@j57U#I.Fd@0/S=C.Sk+>;HDprh41uR-bS0-CKn.&?[2(c)mauV5nS15esr`]Q.'E$>,ZK@`kmC,U2&+#15$*-ls7s?6)6FjFU'!F\l:Q)^*C0+dQ>U?1Sku__"iuqc6nL)E;oM8r`+F6+-Y^<s#KamPI/K^VITnM\V2&rMrsbDa08OipniaJnS_dIAoFeV^+^k!N@d9^\bYc:?A6BcCJJ/2`^7"'@C:@ubQ\n%Ccr?tTVW*34/`OeXn^^`h%@?>g#;ak4gfHt^%(@38.1sVGi3tDGR3J>]C3*%nY8rqN$%;NIk(D<k"iZjO*jaJ&rb,npY#?ub5%*GpA.GFN;T<-k1%KMOdahSRkLnTk1(\4W-W!.f=\I?A]q(=a]N6E6<J)2#/)6..W_s%U-!%*6eW$MJucgYYVl<klUHXTZDfG@4LP[LNj:T-[2Grpo,S@3:D=?(r;Z`Ao&H,M.B[=UbHFS=SGp*+Fo@$#Xk)0Z@@<]O/QRhSa7K0_r31;BQ%uQD[5VIf09M^R>.lVga'Q;.k;B#0lU%pL@C:@ubQ\mrl%.Is>2,.IK@aRl9\U/m7F?6,)6=iiDgY_EdKAYo*]Tc?*l@`fqW=^IA+(R\!%dKe0/kG<(T01T<S*g,l`X40Kk.n:c1Bc[8BF!oV(hGa:X>XGWt3IE2-\[e$[(R9Km>[YjZ9<M$`_IOS[fVsD1r@m4V5UGG4:u.>.>3@A!IlmU=32XF"P.&llBZn,GQ,ZJb'lmS50h0l25JtPPf[jTG6!VT2I?B6sA^5TD33:\F>N&KIiWMZ9@hV30U*nX!K]cIPHuqC,XYgb<tjYr&8.Lf8`V,.Ln'6$WD)kHO$j=;cW7&dF\V&kOcVY"Z#kr]cFKSJ03?sAac9h\`B<:Y'o>/Q6"@W<,:lJC@*Ebj&:7W,B1BWJb+`X+e8T&TDtZY`3g8\f%^6!=+C2[]A=1@A(`pNk;s_ET-tc/q1&,4gl8"GhZsb.k5<T`ms^JUN)"O1c?DBi5#FFqo0<*J-O:n@E5(@`o82HMSH%RE?R(Ac_"iuqc6nL)FT1*GRijHfk;s_ET-tc/q-Ub!+>O#]4!$AR-m%Ai-A^I@qLM7L"O8A#JuDK'I"EJsq?5(k#_K!Ni-^,!M#%8"-O>=&:Z-VP+Gfjsc6imLW))?!JfomGKN$/\F7).V&-UCkE6%bS!8nbT*rqrti-YNTqLJ/<!9s[3#6:\53$/-n52^egJGOff!<DBec3F?J%h:ULC:M%+=Ku=(@rOgh(`?:+)u[ZQnqBV]CICo^O',NF9>7DNU?`_W=<HWLqJCp^Xh,+:GB(n'rVc]/XlX?o12_$"cZ">tV)Vgf<P;]pYHS#R6TF9,iSd'u<l/'n_h#Ka$cu(g+<$AgL@^%Y&)hhG7!1N;)jIKE*;$Q0&!-M'h/Eaf8g:%iW#et,n2#onc>C[&8tF(UH4Ts4RlddY%1\iP03gX0?I\bM$.,HWkBp]C-(?@Zs%(r@f,$Bk2jPE%<77.#$EbMC1LloZ<YAaV&YpRr\Pf;^[)?-\qUYVG7']BR[De&Zki+!4TEj_Oo1q!%^eQ,#TWe?a>)`&S(`5a6h3D#.b+(ptem=3!A_R'=R[<U4>IYuf3]"2c1V&q&\hLb+[1/%B'*4bR(2N'X3Iap%!thL5Ie[hCj*YpJ`0d]1[.A."Ga\M'N28gHqi+A_3A%MdBePk:r8<2sn_ujH'2qm2i%@1NHp,?uU]'nWDk!M8A"91>n>%FC.CBu'A>,=AlEh@4g,M='2ulp???!UuiXZOm7t'.cI"&*YnsjX%,kio-DiuCB[HS<-@P*u='n^ou5OW@tYF1@@!@gJj38^/[]^"C`+.n7qhm[+>Q5DR[0?3h]8g4X[*s3-Cm+do&eX7tU,&R4*4,&T"a8#^8UVb:]!.[Lio)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDf*rqrti-YNTqLJ/<!9s[3#6:\53$/-n52^egJGOff!<DBec3F?J%lbX2TK_:]!.aoro)SjV6SCF63IKFqpP^`00Q`_D5Q:FjPESd)q;g+DgI-jNGUXDO]3PEM$-n;YEqS_J*BSHd3-]CWC?g5$8;NUATifk4ecGCc^#j^1p>@^a3+=TAK,m%FJ,]8sfsu`"H/X69pkX`g,;79dc&%-`'r-2-AZ*#-5C1XmG7?K@$c,\h2E<4@oP_GAcBa6/r6$bkf.[-45Psiu"2Fj4J+/d85PiZj.q4dbd-W^moGYF)HkYIgSF8;HGOKE-Rg6t4hnSrI?eP;BM_Dbbj*r%sm2u9*++EAGrg/*m.9;96h/4H&YL.^B(TqCoV\3h%[dF%fhnS@SI&HM,^H-JrNNX=krnNOos7kH;5'bm!+8DmB@[5$]m5>%<)SP6[l$H4ubj@BNG5bhWrRE96qnbRIi5K%F55r[m*<3YNo0qX9LN`*rHM-QUhu7f.gBc/A<7^lbe:!F;J!oV8!%6ImpuBiPdt_:Tq(oMSJ)^1*I,^VKrRtVkoQU;j=8qIOIrMuE<icoO]%oi+?DFgO2^`T3[thH[gi^q+%.r@f@Ue?TTgMnab^Od!%mU#>rLa"i07E+mJ*Ac(fDkJa57uq*YtAQjFrLI.N=%`h.Sardk.C)rGPoCY?2G*on`,bo\Vn6#jY+/G';._NI-;bUY?hr](IS%uWMpCBc"9ne'FX`+/:^KGo:`dP_>M6i`"Pp1q3MUS+Cb*5h;T_*I"2]Xo)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDCG/!gBgW3aUAj9d\-h')%^QSgt-<58=`;3TLC@F;f!$tQ`kMJ(14siMRr8;QWk#9l2=sWMS*fdFYZ8$hVlc#2<s8(YL7#Xn]j*.d/3_/;&DuM_RiI&hT2GN?>cXemRcNtm2r(bh(Sf8\5qU50"cX/m0l3lW:)a!Tl^QSiJ+aUs";VZ9,Rk"09#nc>J#6.L\qKK6@jI^pIift1tIX^S#lcnSFo<5lOlEq9Qpmisd:='["f<[?ZfT2pI.0&=Ta3_Sho&BhIPK-J5HLf;0oXW/3hg"Ih[q97/qO?M0kBF333^I[Dhm<<\l264VEP>prk8tU(HKr`Hq$WOBmB9j0qX1uaMLVLl9n"GtTG-sToAd=MKTeL>R=1Uo#5WPL?9/#MM3G,YiIC@5#9SEiiS<5DbfgL1P6K;>HH5jO)tnpK*IhN?k;u0&4'@cf?Fb%FU);hskJ-cJHgeW=%_n22cljn*I&K$empo_:F@f6i^]!l]gf8eN$_VS!I-;dP:)6+:i-a`@r(\"mRG`GmJGOff!<DBec3F?J%lbX2TK_:]!.aoro)SjV"3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDf*rqrt39>Mf!9c8"3$/,#>Qa-k!7V7D%ffEJE'=7eIDGXY!;-BU!s$gUS.>Tr+)jCD5^gHD!!)Zmk5t_6#Fl;):`jX?!'ktJq#CEf!TsObe-DKS!)OaukPU0<?R#i.+?CP2358kG:cZgk45]EP!.[0FEB]Tec3J:hS.F]mF8hB:9=K3aTEmM!as$$IDRH9"^Us<0`Q%]JGdgldO9NpbEi>r.YMZim4E*Ko&'frNW35aLroch6_"ge5S9Fmcm;$TtYk^ho>U>SjFqBq?fm]W;A91S4[G#f5-0gQ[:g8&pbJ&1ll8jFWUDlW'k<gP7hYDoNj@^q5983q%Du#qWKc_"(mSFEm_"mj4D@%04YEqrmXUNWN@;4i:;VLr]q!^b8_"ge5WoSPW+RUmA#L)>73ER=YZVd9->EN2=NK4h:#E$cq/IVNG'AHE%gn)rG`#ea/cE8sTD2Z5acbAZ1$;2Shq,7!=S>C:.%Sa@$E;nr0(5`7?LItAhkPNEJT%f)M4=[m4"hk$9KgE7O[Jj'.]p<6\,10]%N9uP25CJISXj*oN1if*.GI+d^#jDR=J$ho2M1,jE93)N3%E(FL[).k4.gH8Z)OW1rAHmWM]TdU=KjQGH$(MNk^j5*5a`kJ`=^u&-W6k.J)A()W_0*Q305+Opi3o^UP1<(rVf;O>[qOZ@G(o%?2pPJoemnUPi]tTal<p;gaB0N2Q,QbSeDe<0,$@N"^\Q_QOhgch$(Q3gCi7;fFI)N^(Pr,D4nW_Q5nn4R-sY-pM/<uIIUn4CV/k=_^;X(7B2htSKtbG6BCljdNopeGSXfNMf;=kC't9IVc6%=A6,tQ8K!dQ[.RBo$mgD1sq,s/OX1*"S'9)Fi#MG)T=0jKI]rc,6-VD>O.&[$3>>01R'6j+#m_56"69jaOj'1A^k9l.S>0ej>Pg[kWl\jAIL^DsDL%CuN<6G#nD`fi=o52t@hQSq!X.Kr8qOfuu><1aAaF-/$mr5VfT=)Y&:$6Uh=l_R"<3s+X13tlljqg,)cRYSNc@>Qc2)><ma-Pb5W!(C-5=365J[S:&#I>:+_8Yip0a&J6D9_4fYt:`lMHZ4ub+IEC-X1D`ZJ2"V`RIUp='-)n\o/sd>Yimsi_tAi[`mpt(/LRKhg>&uYn1]7$ZS@0!iMS"4iAQ5cO[b7eT]dCg5b!KP<(_ak;D\^aXM*XV4GB!q/MP4q+qB:5*SEWrsnd[WK2o>cA,#Bo:[-RmJP"#J!_07+"@<:LN9>ro6IJcoFa,*b+YQTkP=r#A)M__LR@\RH^AXC0L-4h5*SG*pMcbl7CppV!6)eM:_#5CCI?tPh,]TU/[sN`XW@Zp!mZRA_"ds_i3`(hIttY3^E_!PdTPS?RZTi*9j7dZ#3Q)uJFh'q4`=tQi-ZonE5(#%S$bA.fX_WiQPA3;>";%S.Y[Jf6<),'`j:o[,B5Jg(s?9RrU??0n#3<jZR2b'[VG\nGR]M3L6'cfrCW?_H*t2=UcDfKI\>@Oa',UUef(%hcnVQ]r5dnN,>Slopi.]6f3IKoq$X=1rMZ%PeDf[j/M0cdFQBp3b/E`GK\Jq&D#[p'o&&g2?fMGq/=C9j59!mAIUj#TShi.VMMhlpJ(']]3$3G\kFJ7D>g6=Aq=&r-c%V!]>%tsp^;g("nj9BNJo.>I]/b53/'k]n1hkut0spYop1>/n!dtf>/6%H6a4.tgYk[@e`^8SPBuL1`>>*q&kZ+-s^<MG4%h65arK22_`:&l-T>iF33[J`aTiGF,nOX\[EQk->/IPk[mA_q`q@7]p>TWW\1l`F$:<rbZ0oB(GBe742Pf!7C92sdDb;%9Y7DeM/$a$`5W0U$#ke8ZZH]pejm3ioHm74Rsq.s.eebP%Gk"%\NGbPntLRt=<c7_;P+.JY,I"r[<N0(crqP.6!$(Kl4P?d=qDc`3\h>(N5Il?:[caqNO]/_[^fPu@8EQ7fN1O?k4.JLXQ;_#V342rh0nN48#%@LP1k&50,<uKc#r2>p([O5X[,JRMa-:R@W\Lj1t:Y0sk;h1"=bfo5cB0IDPL==G'*hqTkq;-M5rbbf*=l-rn$1=icT:F<*bWBcaMPl]Uq9Z2#Hmf7!%MunaE'BKgc3J:hS.F_3o)W(rk<h73S_pQhF:OfONe?qs*,n)l$fHC\#Fl=_!j4Oj["kSIB]i/#Xh86,d$0$qllQL>M.FE;r_=I0SO#*Al[;D;g#81e5CsqF*,4QY@%8n2mQ"QX!'K:7i<Q*<>o+JN358Z\$r@(s&*8o8HscQ?nWi4\Z+VmiG937bNe?qs*)`?2*'Z,2?t`h<^H.gEJFgTsE'BLRL@_h5j0SI<N..&YO7U2-E'BLR](=IRcMhct-VgKboPm&S%aKiM89MZH-#P\X++C?XO]^No3$0-\C$381n=>QYV?=(LOTd`r2ZN=`cf2a;7Uq.HdI&>BfZIbN`VG86_lmr&p[.Gj0#07%^@NRAlk/DRi<T%uNSO@!lV"F`_Tn4eg)..Uk5G+@&Uk,NKC_(kr(REL+<u@-?`5K,*\&,Ko>])cX\k@5e#$e:Z1-%o+5W51S#jt?gb5iIb0:n[dd^r%A/prCa;bmg'MN:ZORpalRrifCc;Egm`S7ub'I<!+g`?O[KB#qHq+=G[KN6IiA@U!jSmJTWmc=gK=;P-k[-'9CSFe1kP`:0W3WqD-NF42KDaU>ZT$5ZRT3'h)PiW,4"1UTBS1hjGj\YuGOBe9T_8O4G$6p;r,\a+XO2f3,.J#1kVh7G`=[R'GC`e*AZ*U^p3.KVsq;=4IEP=*'W1jf=MLH#'[+?LmDlI]4cM-T1PTJDG]E3a"qNca/]+>glps)>i$Kj&i3$0-<.aIe<FMJlq-74,o)X$9`\2`YaI]&W:mk:m[A=R!UE'?6VFdsPeN@1m7`70iC/o'U>XDj$A[sq%Y&@l^,VdRZF'$G[:odbe!`L5%Z7W:ON:6h=k]jY9D]fD24`YF?l^7Bjs4-g5?lMPl_/=?1pRs>VM;eMicMqIG&]:a&lae$TE2mhi.DNFCiqUf=/3$0-\C$.hiUtf.\m%jYU<`L62C^'!Sj5Bi=idF;;r$8SlfUZC2a!P$,q;=4l+3Ga<S6t6q-<n=^i&E\<as$(4ghK#2fa?"0a2.RJ%Ya?*WW%Q7c3MD+q+qQEk?%Jaa]<@E3"F5hE[Ytc%c?4HF;ic$0A8eC+]@aSYI<q)b5#?3>Csp+GFT3:TniXX\(b0rYfu$QBHN`T:_dq5Zk(FeW!YL+g'?dC<!Ad&m=Y!2WWLJ$p;-P)<<;8Mq\[X]Mr117kpIt@I-<_45.$C0r08c;K"LUJ&$0$H''BA,"O;er0qY:)0];s[f$oe/Jb&nI!p;rJ7%U$cIm@4E.">q1&C(N"$ChXo'61b]=))(?(]P58MLkAmpV?UO51/90OotW]Q5]2OHiV4&q9V=1haZBcY]=DJ:$^he!6;nNcp%!W_j0t0Wc)ot5(I/$Ht].^o95#GK(G]1_"l>@r#ICT<P\FW4uaXW.c>\f+.Nj<'lZ@D&'bEY$90-]#Nl1g"e6+jKC],D_P3P2?mU9*B!3>IhsIQM=FRi0@R9,?@HVjH#ljtNJb&mBl3#<:!2pDf*rqrti-YNTqLJ/<!9s[3#6:\5L@_0>r!IuG!<A;TnDE2J]*SH;c@PQf!9s[3#6:\53$/-n52^egJGOff!<DD;G.tUhF61c5^Ms4'H<''rp2N7r5a#NF00J_!?)V*,+6N_+oG6E@Ni2`hpc'>qT[tm\o7c30"pVq)*h3`@cs&oP_c9K?#VD,/!<@ER_te%JB7DnKKC]*DHAp5Hrg1.O9fjqs%fjslps'CggBgl@o)Si;$gmlUmJ/@&G5WmT?lA,0!$pOlDuft("3q,OW"1j0!2)O6HiS]nJF`dAl3#<:!2pDGcVgq<".!pj!'l^KB.6pX!R!GE!$FkaZ]qR"EBX@fA]]7aZ?7>9#6:\R=jL!S0#[Pc!0nkr=j#<L3$/-nZ=H*kft%aX!ru;dXCit`q#SYu*rmETqQlCk#-.TOAXj82OG(Bd"fMe"$Obd.!`U52^B><3p#q'HJFfI_E;gJ8G:bkL)rQ*W+*$FlrpubsV<@'@OjIBl:?VmA+55o+V+Xmm>S6.;mj1$HC$;]g-ZfI>q>VPJo8i5~>endstream
233
+ endobj
234
+ 70 0 obj
235
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 334 /Length 12451 /SMask 71 0 R
236
+ /Subtype /Image /Type /XObject /Width 506 >>
237
+ stream
238
+ Gb"/lH]27NI@-#n+eVA'"+Al(m&!42\pjjqJXR]]gF27f2I$q=[>%]pi]'2#"T_;s+_`4?L6*"VW%"\X8\'p7B2+eY-qYXOb'"6aZ0N]98LpuG$I+pYh;qiV.<.pN[d9*fjE;U-0ltX1a5,Qmn(aK&_[k2^S=)BYk+)%6\T9FmSXT]]zzzzz!.YCtfW^bd#_M:5_"Ims&0V1b-O>;0+g=*q&4?eTm0S@e63qC'&-NS3@!dJJL_+$([bnf;=qmC[Rc_8-=Cb,*BL<"8@I)%F&)WolWPdUF00**?AeAMA8!cubpcsi<&-P:@//C4Shsedq,r?dV\[bA:D"$F.UpdI_c9-s5?F9)+Jfq^_Ks'LhH<9[0hDZ;5/(C23X-W/FV)VC<.5I*(1G`cHn)EEh,r7>/3I*SK[s(g!01.RrE+KPeOf]phLr[Hb\8SoA\Fq*f/*>VN^Uo*X+p`d6+r4p?mC.>W/>q/FD*.lYM77M>1'u9m8Y-NV%+C*fPB%JZ_GOLmB\'V?[YcrO:M8VM'.VHueXA*4=^@<%4-o373O_e$n(O>EP6=/_NPpEcYP"0<:)MXQVqZGOU:IF"EE]]j1t_Kf0R)JX[kE$^V"V7[fZAajl(MiDRW9@RFK9;n[k?FIGN\B>5nHF/Z#JH5CIo13\Rh+@1_,ji0KhF/YHGsR4lJ'#IJUIATC(*f[:su#D_#[s'YsDF6$+dr_=i0uioH$GBb$IV;>BirnlDr@`pW0JhVAG!p&m[+)2hpMA[CXC_pe>VW[aQF'ea^/nHg;NKO-XIYHr+R@f'hBmTd5>ch=p+3nNbi]>O=F6$+dr`V/hjL3#46q7KGT8l#;@Pk6a`LJO5:]>eK(8o1-nH-WgnPBO-Oh;6]:oMb^P>O-Y`#MTmpd?.NNgCj]U&:Okm-O>;0+g=*q&4?eTm0S@e63qC'&-NS3@!dJJL_-</p;[16T_GEqq\oM8d*#gD!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s!uS[Kcd<!Gi8H&-@jDrkQ<)K7O,%N_C-A1"`,O/94oGZ^q*3M6`]7>A1C](%&D4/QZe!8'^L]+@e3%1YKgI-_9QqSm:GH7`Cd5VumF[Z$V-?gnXYJoU73mO"IF$c:k9:(Tp-h2U0q3\qhisl*@(iI<)aLJ(8=C+WXl+mbZ%?,Z>a\LTKWW;7F-r+=#Q7bMG24X%UjQGf6R2DE?UYd040[?,o)'K@i@%3cB@dY+k>:H1aVTN6H-WqRs!Hin"@1%u>NP<_Xl$8/l[<6?c+f*[l8Z'i/<!ad?3VSq't3`_2m_=#DfoO:K>4,OK;-gD<^6)+^OQe/9S"f-sO8J<"V?rlC@k>6Y:pP>QC?U98&sb\1@kC"qK,cZRN+VMqkE\N[MkX<n8PK*TUpjj,(0;33^"bVY*2fmKH7g@iNKd[1#9cg@JH@A64!7`DqprmJhcgdosJdS,qXc<V4?eh!*CZZ`5A\1r;>,dS.Ga0#eV.M^[O[/K7kc3#otC-=L&SE6k%C$iaYQoj/r-IWVKmFs%#'f/a!F6K?ikPJ)32+Hh^S)`UCG/=gJ+Se]4CMcb#?qJ`;\p`R+lWR"q8&\NSXkW#UltjKN=j87]M@O93CX-3rB7tQb(Z&73_'BPZniJQTBf9h*>r-ZU;7@N@OPJX*V#BQ[c3&0I9htCOq5a\a%?C=AbW],Z3W7NtQ<DFW/2skO<;*uMe2ggj3O\`lM#VF+\uS(uFCT21R4t27=3U(!WH(uHjuQ:U4e_fa7t7qjG+?/uD/V(e-Jc*?+nMXQ9XbA[UCI]ChHc\UmB+*&XlM%_p9"KS4!=.#b;`PubYck0*9Rpe9pnnF.k]D"7BRAjr2qX+QhJ'tgY682PRF,<A,_SRYjDfF^f;mFqQ2:"9CmN="cF'q:U8St\a=Ntr>D#9G>U*(GML*5$qh%;/L*7,&_aU?DMM(YK=3F7gk>Sj<EdpQ^A&F8g#04t[l5Bh"`o%BY2(\AHG6ntT?"NkosoT!9BU.6DpgH83ck2nO&g?Y<jZ76X>#-`%NB8pgJ*l#01LmYXj.c53nB(WbK'&&q"'m-)e(ANX7>akiO3s-/>V\=#0L\L7o=bT$;=[0DJpT54O-SgceGk@2-^g?O"'78illMp;1BTG_!F6!3rYNeH*'O$n,q6'U!$]5Y:s=H`maf'/K!gC[H93O*`#Y1Bo1%d-H\N9P9,t%%MS:a[k<eIYt9/Ebl(t5)oX_\pEtAdTDr#U3m>FOmgIXL^%25F,NDmIE5/;IIrG`h)dPo#@EbjtZmp69Nc8^Y$W`I36fC'SpJAf?b:[JYrOb:/3T7cgV$6'C%LfQ[")W\X!I>4S8JKARC_$LW!n\Oo+9\.;rRd7-"@3See)>rHY6+biPPAYbX&lLMbflS=GE,'_ip[n*Lp?5k2geBa+mOA489g`Qf1FT+dE.&+[eF;t4AVV*mU?feOpH$djH&[sQ_p[YB4kjKPU,lIg@]@YSBsXQokol\4HW=-4R#WH')pP_b*=KO9BXWn-W-$t<9?c%4A=r^l?YB[Gb3:68_:T%ab2me(L=UkiI^J:M5#[;7(_:bT+g?mlpH7npmFZ":7h*U!ssHnJ+;O;GM[U8FGWCW6=6HmmtT/Fj=^/%5:$/#kj,&1h<8Cd+5?*6^%Kr\+u(X`-#E5^C!I)9j*@t)j,"T'/mGc#p%'3W=7&DMZ8cK3;kN^ljFY*?YJ'Q(A,UG`<10`%^651:D:@ZPXasnf%WLA54[djJ2&am8,Hn5`a'SM7X!7)mU]9K+;r-n3J-g;VjLACi2SF#*8)@;BHY;^R4`hA5@scV"TDnJ\QS2^3M<EL3mtr*FF,&dXn?%,tZ;mdd6s"P8Q-bkrA(1$b>-6*]:??95a$E@(PO=aWjgDeaH!_&#i<_Y8egBq"PM[h&G.;@]\raGuLUWiLXkuA5gUBm>HI@TJ"I2M):74gTKDhpd^<^""afrEk*ZMQrs6)26GY\gI:;S+-^]!l\QS)PV>uHMBl<u`NF*=aDDUl4?Y=W?1C\R&0]@XLPf?bkRo@TqS>a`&Sm9,p-iUF(o);ctrf=,?dTDl"F27rOqP3Qi6X@Wf_X6Uh,lJe&s[Q<;R6=6II9mbqTC`84Q`h_W"L=;R*(sR'*BfQ(Vg,6KB@:d;tTK7*-N@'h#38LB"UVFQN*ca#4l2o=bTO(9ofoqB7g9pIDD,,Nh]ROlM\SUoGTgs7sg8I9ok4-<HXmg(Np%31[G4Z<[n&`o[Q-e,SDNbc]hr[("q6>Dnaf#STHukpkI`=:DGLkn*o-VUA8md%i;6p,8E46>1/)/Cob_V;DKY/c22GM>aEFl;H95:+)L/]&d!9i<&/dh'5GA?$t0jS(WN58(_7MQdTMA)c@YKhi<Gt:.hhO^-7o=[#n74hN=DfB_dhktc:U:NNqmclSqCKj@@04d3%>U'!*E->160pRsrH#-<RA/TO2_Jc`=)IId2k,<Ig-lPf*&&`RR*f\F6qo%a-0*"-RE\L[4L>qMh?>Pr\l0#d"\7fMQ%H?fbZ^6Yt$;Ba%U=u35MlkoP3VWD[<r_<m0A^ke],*gN<$JT\[4/gCe:jPJM+`tAjHYgA7hhOo7<U'4OZ/E]+0GK0+Sm-Y(Qrd1G4q$rZ2MY"(JgVbH/cc!..PeZ0e<ipS3/O=Thcth2_<9+:p57=']-5iN9&-Zip+G'Cj,KSW52>@[\%FUH"a`.pJH!=@Mc/tlDJb`G-0?-E*#:"oLcY.]Z]S]o*Ki%3]9,QL10nTd5Yc\drIGu@ajO.bG4S>8";T$<DVr>D950NO.t$T*[5Au4;th4pHA.F4Ab;Eckjf&l<ML'DN726!U-6#f+OEE1kt96'*U9&qfT<.-qP]Qd[HYi#r[cRXop&=jXXETF8XBU>^/Zi6ClT8YU'idCW!Bjr+%"$T6BpirNZ=#;l<#PdA8gra(e0%7k5W%3dt>i:b+F4R:Scq]/i0OG4f^QUYc/W\P(_X&$O>)Cm>m$-YUK:,;No`C>H2L`N!ddbk>'5<cqJF]83Io]U8#4;[Il/3]:i=_sm.dS29`?QI;a2d5<Aq%*=`27TU\f,S"bS[Z2CtUP\%a:,aJoZ$k0njmaIl$XhM.=[o!4IGW5rfY/gqn*/1:[?A_qU2c0<Fg[;Z8a,KYl&>gc.3t&g(VgAtDUXe2Uhm<l]SS1j,\g5D?f\00IG3@Ap;cm$eqFJJ-71(&KH-Ak<j,[MSM,$ob!EXTj/CV+m_75taMRd;3Z-C&b,Bm)lf!I0iXWXP/i1*//q#c5N,DnJMHbO!hU`]:U["n(7XLIX[q?&J?eDn=WG_@=ksY)fqs:2NOa3Z@eS!S2j$TiicQ'D)q4Nu#b+0?M6giT(1n)cYA8Oq/6XD@l5c(51.L.1_)ThXcSbKLW\?E$X-Ft=X0=EK=/L3q$ai#XM8^DG:T<)SQh4uBid:KY)>G<-`fi7bpH_5KTOSuGtkgJPQjKW48d_sG]C47dR-o4A)hY"r5?$PN7U;Y[W-aglA9-2>.*]Xol\Dr.Miejr,=#l$WdH<sLgA7YA_5-qmeT,#(g0.=$ElXN0l=QY-:?Y@#Z"_5\ej(Z5l->2=ZKHFK4J[uo5*3;Dri_/OnUV]$4c2]BHAJXsp1P_l/l'#BVfKN/>.l.:)X>>lVu+gc/#$54Z4ZhRrj#,!%<&Bb&g`BFiY:R7Wg!@g;;4=X/V[dEDa`4'MF[BpQVHJ3-qDT6FS3k+g=\jea7`G1;n>UI8eS#DI-?WHM<$;_Ud$.&9^(f<leUc8_B7MS4aQbuq=CL[T-dEu8A55HPQ#focpQ=UDNO?MTs'Z_GGC?.Ir'W&gpo4RcA4*8-qWVq[-QQ;3K`+9T(IekT8DVj0KnYr#87$ghNJ!14FtYbMb,Hl,/B&!5INdsjN-#\B19!pPU,lIg@]@YS4IJb8Uj;+RF'PWf=TGPKKlo#3p93N8mmIJ%KTl`T%O$HJ$kUc#_H_B4L+ih=$@`4JfpKiCekTF&OKlPJfoj\!o"@k6%fg%Sfe:_KY[9a5nG1B[O2?4#U-E85nHEiJaJ:T1&^#/(-tnhf.U*t,d9F/-cD!,\+;BY;%c\(LQ?QU67#5*gCn]rf`'HCs+qjj!o&&CfUf#Tde5d%4[G;8[eDng4]*T&m@V+V+A)^iHQLh2W"[&A2n/cjJg^qAms/;fU.u!Kc[Pau(WR>1?HZUZf=$rF.?6RGDU$G^qWfe<R3RJTPIF$DeY$j.kQ.97LB#h\4=RR%g%(gH*#H'X4KptG-`$.EopaJdFAR9qW(+mlf_HO:_`*$_6&kXZ%3FG/DTV).GIhg"f\Z58p-bG_[\%jC2l^B&[/J8JqTngn`?/1-9)m,+^%q#5b`8;i/s9H!pI8/Sh/Y$0WH**,Ft0M][]Hr5*P>sm'/tC6elD7tK<pUTPZ7#eNN84'1G1\3F\C._X&_dmlTeF)>pEaC]QMc0Mo#Qq>8(O%a+<#mo4h1ai2lN@SHJ!?I).e/"Le%eYWYi2V!T9$p$10k,$hQWs#D3-2`ELm2a-d">J_Z3aRnh0P-<#%%TmjbagkVcGO%ZHR_<i]qV/?;h0j?*DC;DmmaPB;[A->4h,'N>jKHmi.2f-<[8A(65jmj!&P/Y+@tb0_QnbD:)t!g-/5SH*cB8@eE!NiG4KptG-\Ul*4Sg_3is3J"=[2\gqK&5"ai(c<!QCJ[Xe3&Fa0Bb`b%GhPm'QP+?af'0X3@3,&:)1"O+)CeoM!c-Om+ErgF:6$]9G3X<P[sO;8>$jklEjA:iq6!U=r7&>g<H!H^l.I.6(5g5e/s`gl8&Dp7;Mt-gHAhrUkq1<?9s9P-4SOrprp]Gu"<0Zt[^me=+2"bep'A3MgQ,j\n*E4_'`VP[.03b?HR!Xg_VBIQ_F9(/XD>#-UO2<QeB?[o8H(*^\Rs<<7Lj-E=:5!qlXUqbVBbWoA'hpm[cPedZ+SElHNLFW"6]k<QR>?eC@T_"O?)[O:?n[/L%$Vq(=S!NE.:oUfKVjuN6K^$3P[Vs!2;cOS+ibXo(u^eD1a*.q$XgL#6cL>$t>jo8etXL@E<U`F[>Y*.Cr2P$7JQdTKH$CDhf_A\!L!BU*SFF_t!SLcf5]gjf!"U1CujmILn2i7^lHQLh2W"[&AJ+M2d<6+G*iW>M'XoDW^/,hN57W5m;dcl"?aqoC"VHr>RhiN/0l#URuX.Pb>+ZAe]0jAg=9f$qPREV[oWc;=m49X2Ie^)A>`kKkpHN_ca`rUY^F0er2FJ]Z15]lkF2m-5CM0knc7q?_:/?lhNJaJ:T+`77E?`f>oqkUN@I9caHa3l?Us#Am3g"CSE.qJ@`;=*hndrcU8=QS=!oN<]8ZtsQLOVd&lRBO\TXrj*1:$e?D1(-_"7$k,T;DfN_d5V9Zk1&bX2%%:td/ggK+:`&)aq)j4>k7=Cf>$lra+<G;Wib\6FUjYBo*(mj'%l(4_"L0e&@VW#TDbOVM!N+Dk2,nuJ+I=QYj4IB4;N@<YeB4Nm>3kID?$M`cemCMopb1L3'">8mruN>IR]M'L$_#6CerOe@JaDZq4e'i'%l(4_"L0e&@VUXoreop8RQnk"5=K36JDEi^J,7cJaGT2CerOeC&9R>7M$ksm6(tr:Xf\j,83IVFT"NP8cm`\"@7\PfUa2k,)!c*"@3SB"L]Z`Jd<O(4[BWI#_D@LJfmAcCekTF&OKlPJfoj\_@t[r3cgT0#_H_BI'>a6!;Hc,#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s"")(UfqQlu0:t/R-dE31r&;%&cBprIYdS&!;m\Llu`qZ`YdEs!pLUd'[&F0rd^%gTm3>LC[eWifEL(qtjl!bJ3/2=`:oGL@&j?@sdl2NCM0?[K=5W_B[eG%Ltmq'#kh,9Y;DA7i'O::J9js[SL3bUt_.BeUp9Y:g.aE+=br,GT`U;VL*8=@a0RC0ri[dl]=)3foq8E2Y.[V&]T5W%pThg(bff6]6`mM"T5n8=JGS$Hf8/)R0i]h"'OC9BQ%d,j;ZWKdTA1qSfNqF1V7WbP0LA`BII2)Pc6],EOK#_p\=QGmul(7rTYiC3jJumJi$p5j)'s(l%#A\X8bo$A,BgAL<F%A't$lBJs"Q*2ki04Zs'2)TjmKAmYS!hP.bKJDO,BVQ</;(U"tn<!1g#n1H/b>[`Ts);NptL^C-IaRgUI\i_8+8G;U!JNZTm6%Rp=T?8Y^S`7:`s@[6>E(DlbF-iM=B9EB[YoX+#YXBs6B(N+TOMSoSYp&uJ_)cG6b8"j_LlA;Q9GK'C&m7XJ^5VLR?[[5J>JUr:)ZjU3L0/Qq!mG3b$IY&kL'!^=2SOZJG'eA-5E3J"t]q#aXPIWhA&(0.?GGYeD`h1/pXu<mVP@L\R(a%gWa7epjXA%6q5<#^Ilq('Dq2,?eG(1j:G4cg,*h_-K8_X=I5au/.!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-_"Ia.+b8q\!($\?!s!uS[Kcd<!Gi8H&-CK*!$DEK4TI_Q@!_m(&Emuc:Cc6.qtd"3<e`6ub?t8>a5c4+553j0c'q.XK_SJVG.V)]9+u+P?/aMFCKn8bgUhC]`5KS!$BYmLMG1:SgV!\kJh.qsbB*jt!7)5jq!W%TqU/"i9i#-PpVW?tk@7^a*'!`ao[Tud;f#ot&$Y7K(#'8$^]!$*a\4%+b)aT``AISb47@'3I-\QBbTD6+^]*J9XgnD_IeTGKGiG]HY?V[/7"K7M&R_TC<,?Isb`D/)B#foPPEV2WL]?6rs,UO>o\ESTIJ;kG*BO$-IeWS#H"[.m59:W17"K7M&R_TCP\`!(cWX(>Y\E^k%mKbrrVujdlT]l=j0?)-nG:Y4[iYOh&&%hEgHYT!?Z$[L7"K7M&R_TC<,=3^+"<eH*:M:`s7;5"q6A[=o?SJ+jjs\IJ*\,0s6fo37G.V0D*+q,]Csn/^Y\?A!\?3Td.YHlI?Mgg>oOR[0A6?K1K.4N,;6h*aZKAaHKQ).qUJYsjj.<449+^Vs5_IP:/7ArRm_gFpCUf4d=\kdQY]R#V]X$kGPuh7pO4nV2R[Q(r[V'I^U`a854L`5+8a=/IJdH#mZYE7s87d>'Q\`.8JLB3*s%ZG4_]9,EKX+*^A$L]LQA"Y^1Zo@h`if?k5<PSp+nm`$.'79*kK4rCY+6i`AE$Q@cHR.aiR-EVo[q+<rk,Y[YJ`D-LbMTA'[@5gg<2?W/)HUG)/ANeH7W2[Kcd<!Gi8H&-CK*!$DEK4TI_Q@!_m(&A[u>!$T^Q[TEKHf)""(jkl'82s5Dl^Kh#i8UB"^QLF?hYJG-Y!Ha^#[JfqFo5!\EgF$@'@t%4B8rLX$K7hk%ctU_]Y'T3;nc-5iLE]4.?K\eu!1K[<D/]DiM.(bOpL9T":VKEFpaT#%0Ze67IIG.KTgQ#DNrS1Jf8mR,qW$Oe0D!pu!"I?)[[5.^Rba3Qr%tWoT:>=;a3hY--2%8cCL_9&Hi5<>NkIG5H2?liUF2'C42u2?!Am*'gKq).9P/b)`'B_4gO"\S23[Lt*?%.ir5eD,'2rNr?@;)0ji`uC?2j0-5N0)P!1KS4D'/S&aL$B@iRm!C[-dSu+$+CVlKl%h_XlB^?$l%RpV_P.-7AWV.Y&l0IG8C!U6@4kjB(iU]cZIqY'T-tO^lGhe>iQEc[YrQLEBj9HM,^_9DirJ5SG[PgLia$T.K-C$i&B21QpXu)Lq^FF6Cl-=hV'<qsV<"m^qrYgJn4_d?D"o*ln3GWq.#Za@5uMhRRt*)S]P]clC[Z\cTWP"jg\^4`h'\]*b3p@!_m(&A[u>!$Qm[!<>FdgB.G/!4E+4#Q\`P!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKRbGY#69:Ol+66_!5LOt4TI_Q@!_m(&A[u>!$Qm[!<>FdgB.G/!4E+4#Q\`P!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKE/Fc!!n-&Cd3+(-p\CId<,.kqoUgj7lb_SCq%"V!:in'p<Y5?*l&#b4Z#mQp<P<r\i%>)Fhm^t1jRi"X!dT9n*Mnl3nit-"-eB(TkSi&p9X.:mD4:V4Z#n%gAZ_N@!h)D4LP-u-h"\'ik^7=^.RN$$UHUihim6c%R-7:j_T+6q\&:/%qn7G0$:FX&%2`4!KV)9GYJ)cFmLO'ORX+Dp/:QTjno-2@;=Ho#PW]niVjq_]SVVl,jG+Y^\UeZD>X(nJaK-YkRH:ePOCKgS0XS&jWm(NA>;06Z_Fs))D<D\(D.0AkfA]ecL"9tn]?A(jGkYFGBoYnY!"+m4SQ#%)se,9[[4!iZn-'@a2Wrr05UYp4g7*A"MJ7@=SCi,3L7<p]ibf_mY`lbHC8C*>Z\Ot4D,E+O<!lfHMoMR@rZFf)XJ:U[a/,[aC"-pRI.%LZA^s>(HH\Ugj">2otXi/1?"8jn%Zagm&2NE`#763g@j.`JaK-YnC[Fme[@CGCTP<!%7Xr2P@1pUGljAO'hppDgm>?>^3T$hCA5JjO7$;?2qU-jk4Zs:H9RtG:/i3O:,:'d`qD6gr2khl<_o;!q-)MG=6bA(TdT?^p6h29f[+3<cT`H`[-lFne)d6E(ImMT[a4?ANpWqNb1*HXJ+4QfD-t_!kG\&+D7Xb[1NU!0U?h^aJ%W1n^8niGQF?`[bXYn`>Hp?`"?g5k=NqSh0,(GBr8a(9-+!FqPN'UZVrdn/hcIAUF#C6n<71`o4Vlc.Mbi]HpR.O^iSM#NnNLiqm;l9$TiY;SC2)G;Bol3*\I%"X:XC>pcb65Z\o-t?2NO`Hq:5A4.Z5\>jnl'FgKU;lEP>(MhZ'lE(@8VA5WV>fm7f%!):jc&>_-g;DI6DWG]&#d-;f1<+59.Yi3DZ$Eb8("D43Oh]5X`$o4]13^$4DAHgnkqP0mNc<:g!e?HFpg<a<&Tqd6YL_HiKefHJuF9MW0T?7>O&bhkrQf'Oug(U)R8bosOX1U0+8"J4<gQ4Rn^hEH5"<e$8Z(3\i(2MFdYEEV<X3>L(M[C#=N;@dRS4TW!HVWlod97+/ifH,>?C_'7h]=*3a*nVN[!c/BAe%<'O4"t(lJaK.FHIVY9^HF,&YWXg;`qH0#QYqd:5TR'l1_%2m$fD->*h!;f"8Dl)LSho]!']>?m;r;nG$b1a[/@PXEo2F^rBoD8:!bfN*l&"C[_;!REnUWMHNCP[n:;Xc^%%*&lDn_nJ#k-F/H=.fbV,LAGMdg_;jg?UT$+R(gM?X#33HVKEcs+'`s9$Xn:BH#^%Kp?eouS.r*Y`>C8L=Ho!LBdId"rLDIND]-lq3Nl,iBcFV8L$hub%T^AL&HkNqYU:F'[ek'dDD0!"XAbT?qj[E0]I=4&rXQY60crUWa9m/_UMA)"Uh=SUF\kNnfiO3%9/8G5-/jc>iUp8t_OC,W[l@si!2C3W7G0>Amb8[(@.&+m*n(Lq>9Whf+)f%T3]Tdu=a)1<q)GnY!)hugZ/qqCB0R0@iU]<n!X"iZt$5BN/nSk0tbq+P^U:TBUdHN5/OC"jGO^*R)N8Nr>JXJm&O7r*Lr12>D<4Y1rDZ!YN^>rgM[$8Od?4fM2.m/_UM;qo2&!o!hP!4IZ[_=djmJF0%EYW[LI@!cQ*C_,G+fH-IcgB73N[YL`rp&I:,m@e6u4b+(<@scT:Jfk>n\a[Q2^ORVf\Al,9"T\<$[YL`rp&I:,m@e6u4b+&NHY==6&)[QB*h!;f"8Dl)LSho]!']>?mGE<NmT+,ZhFrrp;*hhU(Un].He5Z/b7q(4m\7O(/g?"Xmu?`;/.m9<]d:QB@XG*NUg:Np]:X=hriPjJ0!RQi%sVpfFaJf\/MkCrW+U[Q*ZMD@k0,D/:fVu#3kLd#]_dO5f&c2Z)g#,Alg%6TS%V9PgC9LiZ@3I@PH)0N7D2DfhS!ftDD""1.UB+OJfZg-WF^GN3<aq%_e\!W0q%l<8]-X(VBHG_?.gGPQdftd3ZE1-1_uJNX,hk's.XJhC:7p:W9EZ%ea^_?7CKD"mdA5,;oA=SEs_o*M<D=6*[n@-r%uK5/JMSFZa)m?^PO#VF<[d0>eRpVnLK2l/)N[)+'^IDg,R_YF\cgl;ESgsYQ2>FIB4^K%"$UZDfk-TeY_^S%F3Gr;*0WYe!BS89,I":'rqig0k:07[0Fc,gLj:_!%]W!gHLeK??::Y>M`N0gqKf)p2")NWnd;-_c8Fa\\7;C!5P>W$b!N/U6CjEDP9QJgR@Qm)k<hnh<tOb=J*^7W*&O]`3F4KHu#EFokpkc]A>knT2P_l9R=VMf))3t*PLN05*R72HmYcR8rf[_q:\$e%0u%YmEIDsMM:@knrM#R-\n?YL/Yg&(%5hl'A])245RCo3i;t^BR"9=kQ%/W1Z@6>!r)c(%uf^p60YG270_KKp].aXVSVs+5(N$oBs9aN%q'`t)JfrB"5"Z`#297T!4IZ[_=djmi/d7o:C)OpLuuPfgK1fi4c6bh]%mMiR)AXE1tWkb#I$?J%CQN2!Gi9@KC&\e!8Bli@!_kq_"Q,3fH.g54LP.@/b^*sjWmqmdcQ,&(5aUg>K_pVb.`JJ@Jfit[drJ@*mB3ZG.(>t\7T9"qD2QM2[BVKD4e@gn(H.?$k_6@6dGBMlf5=>4gE/IGtX')Xs^qs-Rrl<;quWQPgTK`/R(2Q&.6*ZHhhl+ho^:.l\'Mk(2%7%jJla-DsYel6u!35$hp`0IujD8Z3]>^f(S7JPQMkaRiGllg`s@"B0=\(B7SNmqP0_RZjN];6DZVWDqr3dJ;kc;9q>nMS$Q+8F8KJYjtnj8/8-3A=)cO+gjZEi615_$VsVYGNuluo"1l_nMu^PMa0rHqbhVN+6h4idfg:.'>U@.J'<>VRrB4AnXLFf%V(Ko"q[-Tsd`/JUo")461Hl&h+gtHmXE.@f\Ec`f#R$3*T:+X%^THa'H@r,6baCKB16,ARZ#6a&Y5TAORST.,(*(!k$cbl"\Q2b:fTOP:/)I+&$UDgZ.;Ct(\&\CX&j9_$`4WXGfF3ct(KV@']<nm!Q7_hVZhc99MK7rO8$ICj=kd-om+cF3ILB_T9sL:L$`'Tgb3K:?l-^fb\)&a^VD8N2Y%@QJ($B4Me6BW^ebb4>*5)N6q9SFYEpY1Lgo#35NFs(!c]3r<]8'5Pf_.b+[nf1/A'NtQ+,j&kA3Z9A>Na+#]4)Af[8N7B(M%NegS^[;.XAq.+?0%FcE>9R1i=*XIB`dVeF:u]Y_6-NInMl/Sd-c2gL,AAR`2]us!.qZ5%&_N)SRR(^^%),1_$kun,[>99nVg6HiVngdpRM&+2ITs1tWkb#Q1j?kQsNd"OUKL@!_kRn-s1E!"]4a*WR;cYWVtO#[huZJ.TNi!!"0mm/[2R!8@SUKE/Fc!!iUA%fd.BfH(#8"L(#h5R:bE!.YWrp&G(9JF*@;63,aB!/(?\#65#1C_$LW!n\Oo+9\o3!'gftHN8R-W+gSY!9ePTD%?UHzzzzz!!!!1#lbto19Bm~>endstream
239
+ endobj
240
+ 71 0 obj
241
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 334 /Length 75
242
+ /Subtype /Image /Type /XObject /Width 506 >>
243
+ stream
244
+ Gb"0;0`_7S!5bE.WTS%&TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzJ2]*9^/P~>endstream
245
+ endobj
246
+ 72 0 obj
247
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 748.4786 0 ] /Rect [ 128.8789 215.5069 356.8608 227.5069 ] /Subtype /Link /Type /Annot >>
248
+ endobj
249
+ 73 0 obj
250
+ << /Annots [ 72 0 R ] /Contents 154 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.818e77063536b529a26e1bb99104d9d8 70 0 R /FormXob.a92d560cd4d454961c737621457fb30c 69 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
251
+ /Trans << >> /Type /Page >>
252
+ endobj
253
+ 74 0 obj
254
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 63 /Length 18587 /SMask 75 0 R
255
+ /Subtype /Image /Type /XObject /Width 659 >>
256
+ stream
257
+ Gb"07G>MLJegL=E9\!3_CAsTH;fCeuF\VUPJ(%]p^7NMj]<?-l\G!<B#%OmY+EB/D$mlf1)iTUXB:Bm"#q"gD###LR-OC(na<ETQA!3X_UUSQ063p-g_$,JYo;c0Q9De(`ce<0:]maT9$"&5`a6*Q2lkg0&"Thd+K8'ZEjk!FJcKo]jXNgCoSF*pG5?0"6s$N(%cT4W2]Nm6%k/.S/=3iod/Sm1]KmI+dlojWk6F19:B<T(n![[!AQ=Y#Ds7?AZ1I'QTiD%b2S3I>2ZpK\T+Sh=_/0KsUSn`L\Y'9R7/+2`d=7i'SVaQGtV@/q(Xuq3Yhsq+=*u7\W2MNT:[^J)VaueAX!6+mbY8(Xmj5/k5SPacCHc45mZAI.ug=)[eG^]PrJUh0aI!fPIYOU]:r2,S8%bZr>r%EC4[b\uIU>4`2-*ILs0*/W;A$dj^],_nc4m`<c_%hhl$<7<$92mhi/@'5ApY+',FtUfnO%\UU(l\>k$TItQ?`(\2oqV%5%r^F@^XFtX)inL<_(%SS6d%"H7uJUcMdqT:j1-j^%d#F[cmK\,Lrd7'!^:h0g.8ZdCuSc0`Yk>Q0:[Rr!o@IReOd*3YtsFgos:5u^@in.6kpHc]Cg*X701'>be7G`I,^C]8S,T9WRM(g@GuR%7,Lh-1WKq+mT?)@E8\NO%EC$I/`6ft1H2ELa,^1GoV@%^d0)r^7bl'R=07\,:E9E-pc7L?ng@PDeEqZVfr&ISA=NdBo3X_+f<InXY-C1gM>j6Dq\9?jkN]58\Wi!X).%bJrFQWS_!gT-(cZ&b$VfWcF"SBfW.,=r57G/bm1D91qOkKeQ\gYGS$)3E%!@U<"ESPHDnMH9&F1R>HMjjOGWElR/52%UhgRo!VOg$Z5ObBXnOd<LpLk(]!q('e`?++%VBR7sUYmF(mdoOu*o#P,5WMVkQf0QF?M)Q?<<i@5^%S=ZTCF^XCN2f=A(pnV1[gJ*kr@0$H-?,sld@\dS@'7@9TTNYX<Q'.VYV\/7Ba3aE".A"</([$Vq5h9@jn</F%l4%]S^7p'2fJH+'\N:KQX03W^<ct!^;=1I@(g<J@_1X/pb\Oc,,Uk#npqq[]WH*7`s4dbH]=P;HSP+V,Ip'p]E2D3ksAT\^=G@6Or+^hhp)9CIR.M#2,VVjo<?`IU!kL=C?j/;uPTr>^YAl1e.k@,Q#aYH+i\>Gi*k9\,;+`HsF,Z7ORWc_$E1]cc10I?F[&!iW(J13^.uMKP/1B?bl]gjJf3nd'kRaZ=7s:RAUOu^n>H*S3Nkg7ct%XL*!DqE8%)X'ju4aF;F,NU\KZbRS5LuCm[&b!iC8-X8M;FQ;;;7%DT)+J)!/))JDI@C@8SrmeR(Xk6@EF#NsZ5_\0o$d-51N*RE`d=rhOYge1G`nU<rMccE_`2.D='gB'sTaeS(6kDlCmP60M$pGHlm&U/&-m(]V,kh2'-_j0;jluZdnTI][$N3FTK8,?^dr&IRqP+a(1!8O`4FJd)%*oainkNP;d]+N#"IGV;7aD7CA\bm'F5+)So_Mr2^,?Iud7hCnZJ-r$5O(3`;g2FXr-V16$d,q0Z,+\)@:lZK8YI>ZOPgVV3XCLh@/9UQb/jeW=`4X)GnsB/pf;3=PR@!Ed=s/J"BjI+S'Sqc_rchqO`!Ipdk._"bVteq0na]OLW]l-6%6B!*StrsA1!+X%0sBT1@P@^b^4=fD`?/3gYdk9iSpZQujQ;$\%<o<IH*7(EH,7)q-sB2C_YhIg?WViDWOnI+S&Zhk$UtUjdkE)2?Y0d2q1l2(Mk1M3dGaf2r6b7*4(YSY)r;_7'?n,,]VX;lJVa%`G@!/:0>2+UTm?:?%K?*SnAHo/RJFm6lN?-1YTB]p!$_T2`VtWRl8D[XHJp^A1Z2<Aj6gb$"b3JZ3NS],YqhkaGhB>"*D1VH>c%**rA6Ec&GK&BL3]RnR^bZ@b/,>5<V]a6I>!hDb?m>N0=5$bmDQsk[=`Bu2WW9Y`!t&C]'DDN0*c"g?CC6&O7IM"d+6RjZ+V#V2mJ<:][2#_e0^1VkajT#BPVe+GI+dSHO]KY[lASAXM#3cF!(Fo]U"[0GoLW)0+qOd4#\Bj(k?g-]Pqt38ds-(@"QHs(LZa6pZ<O#@1[Yp0)?IQ[-*(ef=-"(kX_SQn1IL!OcM=Td3N\#2QqZT&:EL#*o]B_N`SROLO(@78U(W:icjt5:smr/d:u-,QbUbJ].RqJb-(oP(r:(P<[2W[/51(I0+.$Vp)UWL6@dF`+n@@c(m1joX@9ch92]'8(d23]ctYW?SJuLi.mD:;r_BE5DF;aA`p;-0A"Z/:?K?>$&k5"^,Yd+6*8<S.^ln%l5'q$E@f`HOnA;X%)>\VhAC=u;:+P!JqM$rMrWG%K..RO#*un[T"OJ?cChRNrANF:G1<:^3Qu1j!KcsB.@??ms<49N2n$mWVch%\e0M%a&3>$5rfe^)dfF-qtQ`e)<K[CSQOda<r?OAf3U"/P?7Q?q@Lg/oH?SB:iZA=u+=nUtk8W0ODXeS<Ep^^9*3,o?$$hVlfQV#>T%N[R=SjrZ(j(i:a'DGs;J:V8??06uJ%.MDDH>U$QN`db6II"U@NNfdKUb/dsA#q7,W6:[/ml;Y"Q"/T$@dT/2RreUJnlfc8ZIq_in;<cj/RO;)&A@^4)1%99!nWqT%ShsLC.O7D,!S!H07r7Vi:TbGroU,-O*9eS+OD4j\1-X_f!@]^-kDR4NRoM&WQjh#?GF37IerfUX$XeojGeG1G&?A-1\o5l]'IdfU7?@hPI0UEO[%I7,hMX^Y_ooWX*cOE*XL^g7R(K#!Zef1-mC$-UCRQtP3OgBkb7a!a%uS]h;kN/&8Y^V0L&A&]";&@5J`mKg]ndc/Y7ESVX@oRD&sKjH[LL9m0-49c,5;eIbh#:KJ""nBd7snhs^j'T4"N9KqTf+^5Y'QaaKZ%R=2Y/H%0PPH\pkFS9i8k`7Qd+s+<N.0pB(=h#)@R*pQ5/2fr"^C>\Q8-giM;M&W%eZ9G@V1;TC(10QbZ^OL-L`#rOs3H8i5qY/)YDZ6+<lQa?pSduC4@<#D$\6$M9,:?V7f8^m68m*M:*VZ$Q%it74b+`Qn_[EiQa;dJAS6,ZKD3N.Y(Hsa'kcLH%3R%9iQD*-J&QZ@1bfsgNmihWM[lA/A8DL]S,-N:U6XRbDV(V_3>>Tm`MO]G)/![d:^ET4E,LBqV#pMUBir^[C$KSo$O7XE@mQn5O4EBGQ]u`u67`*EM_V)f/+GpjXd3N]&=`-)V5qMS"cZ.u?,ONTEmXp!n]rEQh@FHs`bVWi*bP\s;dPdjOEhc0-$^1X`(N4LnnA[HiILl)3Ig^U$F21Ig!s+N?9+gur\tlor0q.<S\bnRO:B/=ZEY5=c_2J5\:pJ?0gHZ"iL&@Hj$>6m?=3eL3gggY'pnL*iJn"ac[b9[)-Y_iuk1F9cq&;9]&Utpk(\K^q:EoXhFdpC:4gWF/1YF;TL,[3Q">g#oT0(AI=2K6J\hY;jP4kqLl7WXhLMRV&iE`+Kh&1MbLSu!b#=dM"Ln"F<`CF2]N4QCCG?7/^]6TDI\5i4;D]URg5Q^.L\^POujRg\;M:_dX/=?gSEFg]MqH)KT(0@`#\6n>:+'GF`"MBS%]d)+IDtjD5I".[2d=]#%j#donY;"sPXi%b8J-Q8W>a*cRX_8J_ZgYC-n00I@Sk/Fol=/(\Gmiu!F>&fNp[_OZJ2@,I?M?d.1OB`0<B95:J&YIjbNM7Nl'aQ&mV)%NDXNlU^,nQZhbe4Ya([&TJ!ARE'9U((Va>P#Gf"WnQh&If7lGbQUiB1*PRejpT\=F(rGa,A$lR:VK*j2Um@ZEEi$O_SE%aEEmCQ%uQ8PjY(c[dfFr2/)2\LdfH0C%emp/'Mfa5rfeP"<R:MO%Kgh3KH1'J_[k2-!!UuJ7]*kNRO%iEGrk1<n*'T=g&Ts:b!j@57S*i9bXU*FK(iDaoMZ1+DN2u>_c'*#KTiJ4?b<^RVrTipHq%K'*u;I/FPW*lFmFTO5F"Tm$%:bscscYJF48^JY@5t5q`r0^L;+qRF7,t?Ym6XJZ/5g[[^qm5XB=^.4JVc([e?-BLtipo;o=U6Ga51DjjJ\7F"rbESG=H`B-[c86F4(YSY)r;_7'?o[80R&QKlIj<Zkjl6uA'3,O4]-L\&V./C4$u?7Y<6U6G9QAG0=Us7g%s.SE?@/Z/ul,B[YB)n#P*3nr`l3GiQSFL2h5+4h8B/-FOZ?NEl.TXdp"(ni0BEk*tmQ-n`.A6)gUVOQ@O]LE=4`N8_-BAr2=b!/>PpP[`V\Kk`Jg/3nCct3\i?.4/<bDo7$AN%DAok@'+VEaO-d':2!smmJqXJfrrQG8a#qkn%"j%CB3SOGfA0m$]iurfp@PE%O<Xe_Dsuq)_on'CBnh8FFfX1L/Yq\(Vne[-#UI^aD5c%d_@&X4&!0_DZt_Y?IYTKr;IM1E<OJgV1#fc'nUnVp_]Iu"?[1#mVqXmNtoDoEDdkJZ/:tQ0_ojGS:Eg07lHkOhBh(kQ\rMkA)H:aMD"j]PFKMjKY%.m$^>oB)(D8hl'M].8.nhmj=g,jY"K*k)/`M_f-ta88.Z;1TH_e"g>BE)q/ln$frXuKS_MeWUt.j?PSYUX]7dc>0hB4rq4H$cCi^%^l9EkWpJ7==<`"tSjbHoh<I!R*(e`c^/u\:7L'b2pY/`YnPc;9\A"1NXmsfD9PPOZ3U;LEUqc9X`FiAiWSe8G1er%3#%C/2Q*376\33k6.\\Lo6`/(]j4:#'d;3f>\$HJf[422E/J27"h`^&"K@t,$afACYE/cD[AY!N>4Ifn=EEA)\=pDn&.aKJt/]&Pk4k@\L9G?rq].-#0"EpO0kbLaEnp*\^@,Yo5'0LLoM*uk@,,jsQr3^V9K*^4pr0;7K&;#/)o`W3V-[?J*"gG3teoBA.;:>C2SD%cU9s12\lj<6kF2+Mk2cHjqQm^fdC;9%?#jk(@`Q`kagHkF_^q-WDqIjB^F^V;u-^WdFQ6oFaBVjpeIpn#D#]o7j_pYGtUG'SADk@Teum\QuaA]NNBqZq2Vpgki9r%.7$Y"LhrA\@D,NdX35q78N+(PcK2s-pt`AW=bQ\Bt6TdI\4DD%a<%X=[0%MjOH"hS/EhKL^;P1mu:qk>lHSGT;'dJ):0SrcI0bo(ZS/:Tq3YDj.[GKHtQLr$T.*h/s$bnpY8XM0lG.g:$N2E9oR<E6*aS;+TqjqH(=Xh/s$bnpY8XM0lG.g:$N2E8]A!JGk9_XR1-YFqK)h>J+D3MiPuPUb3,s3,mfkJHH,e*&qoq^juRm%NIHIi4smG#7__5E8\N_!s];U3,mfkJHH,e*&qoqfK\TgmDU%$n:im7i=0^47,.%*"roUAi4smGLSDS?q[F#T3,mfkJ`BB'7bk1ei4smG#7__\!\iW*rGn!Z"33$(YB0Ut!I$)TrJYs/s5=o5$9AD:mT3a*ZLRt?'TR$=5lm4:QaaB1m<+G=-LB5__B"PE2ZQqgc;sb<>*AHk.-MY0\7`Mqi5CUbHVfB#Yl?cX?K_)r_Ik+]Dp>OHFp&(jB:ess)B`o$SV%OKoToZM\8c<q(l>ITL*m>D0708MT*[SPgpgj6C]l);Oe%UQ'E0s@oV"YTSN.Re/1+;!$R+rF'Alak`3#\*1#eeY$H?9lSGV9,8OEG&qJl;@X/]/PA*n;T;.^i>4Z-L':37mpDJ<hh+B<::"\-TYG:On$*A+"OOhGsdb:DFm9+ZjrB7'UaKC_/T)2;^7g1@1Lr_Kb-_r4Di0i"(a=N_?Ur-(m0XgKu[K%oJO><L.3],*Z\?aI=>Q5h9,q;uJ((\=OnDW"5*39kfHbq!JLh?':H<B!WlAR?,TBH*(3S6r^kRH%Qb3en39+K26;&<os'FBrApQu)"qP5@\f7&rC_rQ*4u[g:*X,agRfaK^&(4DRD_\M)e3XKI'+O:9IX"!cDi`Mng(4Ti,",SPY%iRa9k<hX7DdQ4gcJ2SgL8\u*$28pV-[J97sm>.obl.N:-8sW#&NN2;HCP\CaZMr+kmB1Rjl?6K7H?Vju"@:JX"$sT&NjcUe$u%:Yh#-5Chc']rXe8<Aih"p,L?eqtg9.mL7Zj7:aCf+QMlL@6d-B^!nhVfFW33D-9Xtm/<gsh-KE]K,Ch/)-CB!d'_]s69X3Y.pa:LeEK>c"TbA]Wed]4d5,Ci#O4?i5(3OYNdQM^-=g8BrTSc$H.m+9E7IpnZAAm&SP(gcO\2K=XNneiSAG"]Mmc3JGCb1?>M`4`k.*:4":r:5GnIHX8-=4ViM3\!!\@_YH$["BVnDQ:3HI"()3St.(G:=./]F>Y^aoPM:Q%-:Tk30l8,B7M1nQroR(AV)I`!W"1o#c;T)fLj0\&hR*Ys/$mp+e:8Q-lDmh8rBUJCH5<j;n%<pW$a]aP0)Dp^a1["=pkm#P]1m=p<3kM5URa[-o>89&bs'<M#'^g5P6^0?6S6No2F38J4/VpaFJk1jD(m?[O0m8"2q=79/5Ft:`PGWf@9K2)Tob=BKp/J5rt*dar[&iUD.t<kW6;C'+Xu:8od^B/9"PhrM/2:hPOI;#5UAaVI!u-,@J0b3ls&5Wm_,E>trKI2>$EqZ2T?Jo0t!gTrs^'ootJF=^tJU;/P7%\uU-0jfeK\T9nG/^KEsFKJQmMERi(ags"9r4gKM@+[/`imHh`3T*AVCF0IKD$>Fm?%-2p%8[rN88$[0F(AdBX'hS]]K+V.mn\Zb.LuaQFHP8Qd%7h9.??$-Gp=>@Y/',!#j0nc[>W,ag't-NGA*7)P^XKU1p,mN'\%/AjL7Xf#E9:XLl_pKlFN39-4&k>r^c\;^J^u*U4LV3Jas1e,`e[>E15O!hd/d<%=e"($H/A9>b5[p:(!6G@rTap*$84.*Dd>%?)3^"Mp&R0@$fZ!8amCG<fB[mU.eP^Nd*NogqNXc.an2&:E@^<\`VF'QgHc7Cm9t<RY#d?_:Lh*.,f6BU3jU:3P!2`E?]THWbcd*j[XPt.#!O-m>F59[Ni*[nYT;4mZu0D?eg9CPe:aS[l(5m_/Nl6K9msMG2TGTS/?-n%d8p)P`;P$&><1%IAtaZ;[ZuPi%MdY1XRh0s1eu<":qQXq+^HqE)3*Tu)JV;[esF%_[$2S(kZ]MooFaZGc?2o!#<N;V/_c@jfp0_AN6r(n'7H4ShD*]O+F?OHH6-.0N?^JRO^.."C8pZN=kbX3I<7e*^;(.R8:-&)ZXt01\__RGHbAs\T76Q8b;u;J-=(lJ9H>U(4_*R5GLbrj_-'./\7iY#:=d#A-?lKSj4MS.nlNC;2Zb8D7E\IM0L4>b#][o`\9TSq#?=m1`#!enjsMQ2?D8`L^u1UL0i"[:G(JQ/$H4*@.KfJmW^ool!b,W"d=sG>rFsG6h4Of.<cCuF`'(7O`b:(O.f'bE,E/WAC)VZrXRU:VWO&U9<_r[($Q\u#h@We:TU'"sa2n$PnO429XH)(o.`Tm',NIf/?#aI+(U=:#atKAdFt]SMNK88'O]://dqJugk:WS&NfK0]p8?T7Z-B(8NtGM;=`&C>j^*6oNqY?0HUckoLbW5-ZbB?f_BPN?_Q,")a=/+uS[G>?B\,aV!.S\P,roL1ndlkI-Mc2DdLNs+\SnKV\M8*I<faL@nce=Jb%SV6"&*")ckU)30aFOQ`@X@\B02R=knQF$0(n$TFTUY=OO8>fiZ:k%dB^F>oQK'Nm)HuWOYNS%:r=h/q`_jcI!_NXL0_[C&eJFHPFQZkGd>iX%ujnkX-Esm6Z6>O"=I(_2N>T=m:>EIYKL0BIc/-r>??]l'mHj;?XdMTs(+>YO#Xm&]H,R3U^cE%#.dTt/[8=ZPLrW2Da@oUBg9[UHDRON!SA5%qaERARB&D?@O1e)Rj'j9X$,7rS6mi]giT4K8Sh78W;+DrQ[+bcO);7hIQ)98U172>DV1OC@M[ia.dS-+"N6imM"l9=*>!ETSM"&%L</W1"H13i;(s9Aq6s]a((Y;^e,Y8r3,pBc?u14LP%gh'nZ8',;uNM5m[@'#1L[$n)&YW^Iq3*bpuV#?88!mlahsX\qM&Eq,9p(mK,2o%*]3`#eJX%2;T=dj-^gR:!refAZgb,d$@Htgja-aLpfRPPj'PdaWYo3!=JIZR/*L*kmZb3/Yq<Ku+=/a;IL:W,dU!!nc&4cq=o/BfT+u>2Tpf/9@"t<FZ`q3C$qq&\SOV\AVk>6M4bgTd!n>a/@rF1g2"O?H]NB%MSB-R/W'Zdc-BNlTm'k'7kr:*M#@;9t19rtK?@q)fI9uQl:fR_t&O#s).H5!5Amf-&rV/2;f+d=!#8"@rRfXi&0a0:(c8^=%+L6E?ClJA1qi%OV-%0U.`*$77P*O0mh\UAgKNT*^1lMDZ#)b_JUm;-sC>ET7,0I"Lqq@M<[H')%<R[bX;:%\RYpS*>o[a8:q<9/%hZ/5Q=Z)Cu9bb](1m&*m^Sl]bVE=@Dr*:k\2)KDkDoU=%/AqBE's;jaCZeM$5u-NrfBVO,:sWuQme*@4%WbbB[[%MX/'r+[-2m/Hf>u/6pIq[M&\#.D9VIZ$=3E^,_)_W+:u^VtV:qEp7n5%HM*Pa*R7#!(=Rk12\./?s(=mg8<+'Z;f?t6s$QNUfini$!d3ONVk)Uq6W0e\?!DV:d0U?:M0D=6Y1%rk.*Ic%kGk8WEmA+n#6K6ie=-C)&i*Pr+TfC#!j<Dl&MJe4B(iB`354l2P)0LHcB8G,f)'-r+;0l0(O1hNl\YUTDonZ(V"*=Ei@7hn3D06(Tln%W<nG%O`KT,cJk,6a(>m%smC\h.ClT`OZT=N?Mg5-L;XuZ3cAT5/7VQ*R0cS4'E.mSn0W=,JcFE9=KZCrG@_G]El5m.Za`q1XJ&hXr^[o@*m_c9BoqiOOQVYf'c^<\<@WfuGR8#-SXF@',!#W:'9%8;TZ7YW'\0-cJLmkrMI,#(cVRi<F6)htd19.(-O8@,nTkYkPq&9^Y`5MDH;H3V_CZW:\s>r<Al9$KJ`$krpS*E9+]B\3`k*K(-,\m6e(V)"3+NZ/!SOqZrT&/ZN1GD*KDPr<@(7XS$(=;Q7&NX-kRlO3U]99=a%I0u+cT-2A4V8pd(",@2m_Ze2(j\O,/hBbG7LNlr\@8KofVF&t)]E25>W$#3:_sM[DUBh%@NG!M#ECf7"$gn:PZB"HQ6]mGra&%d8ng*]_"H$(iN`kZ0='^L#j$H2Fb5oP`i24;GHUKTm\e<59q;KrS=D]6%ro#fF@OeMTdYVH\*cB\H:2/Oc&UJ9od4i4u3C5<>+BTm*qeHg_f@(=K7cReAF8e&qV'*_&HA=f45dhED0#+m8?UHWBQ7d>*RcG<ck`VI._SRgAl*\o63bG(Mq2#N,5i[Sg)"b6/g^9p'83OEjVlat].W\*Ylq"U3QI$Mbn_$CWX)aWna`]"TqQO=aETf..W;88,eC+?L#kDZL;qM_)$LYtkHco6cfItQ/,Ap`/:nb#tTE=H3Vp\nd'B8[mWkAm/giA>[V6-@-La,Lberc=Z*"Rjp^*$?[!&'A`-3h)NCMAs%mh[du%c!Q1:0Mk,\2Vd",jm7o=5o2l7PQ*-&a'r6[t=gN010j3Y!!k3f@LpLT]2'ebo@Upf*?#("kD)Rmh`QWnr%[Q`6JE+:KsVp92,[kL?[OEfs*i'6tN]\(5DV)8#\EnkML5/mEhp)h/hpZ_dd1fd\HX^cq2Kk-Wjpj+H,\]2H+ZIV+DD]hJ-C,@IY6'8MjIk..#\dWBhLV]YnKnUSZpR?6N*ML;DkHD0T`7qUDKCC,U)!9JF9/n8ZWJH]4AqJ,06\oB>naV?_F%+YSVH'*^%aR@Qn@1F]BR#s4uB+7;]S;0+B0"F2;kn02HHipI%,[D:b.:!N`"KD"JeL"+Ya/SCn8P#dS^!OC1<jeiY,+<>Ykgt]sM^.CsnL'9)HjZ20r+uIRWbfB=ld/KPEUq0Nr5ie.HKRu:mKUp"8:n^'+niPe=iJ%X2^U_Ssh*;>_"SD:VB@:9XVO7fRRC;<)hshU%!l675mNG!$TaCo2-p^EaL2)I%8\?QQPe.o#gsUY5$&lBL'`nI_eOch&DAMr.hKWDneA^eJ6BG%^jIsR)@o_:YG$=8b/\O[!N8]<hO9"OI3>YI17C:EmG$BpIBnu'SJJ)&RCt=546:!r.7j7%V.MIH8Bu@ii^7r6REQpjMaY<lA,M#p8R.I>mZ#+OKQWin!7LqY[_Wb-eQOQ&'IuYhUSjUt\:3rrgm_tc*OqgUE6]kF4j-V67,KK<F)\G#I3oA?#]Bp84_7B]-X>&WDZ*_E))h+id-0PLm`/U?.Z!f.M;-$^AiXV;@gp1:P.qHlD`4[^#>m0$)TtG.dZ1eEkhbI@A,:)[dF<ucj$gs;Z.TW'E`;)j,m3&f">!TXl.&Vpr%93XHC'N/r%C7JE[r`+P!@"pBI)!&]8gXMal4-u^ZCQr%9J2X$OO>+u-aIK;KhRSJ?H"ZN>l<XXUh%UC2qU_aq&T443L8'TFFeD^Z_3@J.rdXf&DbVOAs!HS/"^o8Th6%/Ed*\WZ=RJ](t4]:E;Z(j_8)@/%IjCShjeca=Mr@c":KfmE_i;iFnqFJ3P`uAKUCH_e5B">c2:-<'3%mnK92B"l%D>1Bgr>n%')/i4/ImKFT^X;>Y8LgjV?W\?oB-FYd35=r!TF)ZRP)HJ@GskKQUMU8m,A=,=$]Y])36D"/NU5LmrJcDfV<[[sN;s9N0<EmuU21L#<&<E>4P!U(I`Me)WVR_<^Mq/JXo9:)iVR^Mt=\5mVH8E?B(kPo,2\X_3dA-kA^octm"NrU77ee*G8Gj/7A[*:n3aU>-Iai`:"s@)OY[LF$^QC:L1Dif`3F>jYq+5;=>6`$IL:[Rfk"Z03c:(8oEo/$c@Y+$X7XY;?VYJ:;fkg'puT[_BI6dDRQCS^&-%G#^Ckl:,A/B3>g_F"&YdB;UaC\T>?.g?/ks5A_='2.dR9eV5mXb[1$1F>J7Uq,KH<9n1/_"3]oEA_pC;X3%cDnJ,0AT;Ud5Loc*FP?lL9"sY].I;<0\"M@gD[n,/<e3%pJ7?VT\#?UuPpOl[_>&QgaJn7Q1R;m2h*"9$0(OI*8LqP:YraJN?9+WY<mr.]q*1A<s2XmYob87sdaA:)sRW!hg'f'B2io\<[kDX"u>u)N/8,WClo:`!Jg:6?ZnXJ?0L+_Y+V43$+r>[@m=8G!rL#&g)Dl=B(%T8rY5=WdQF^=0<6\MSQWj[c'"i$j4cZ>um",aB;M=6deL/s/lBD1Fs4/a]Ch8fgU%cCj+e:`OPO"Y0^&9[Yf[IkM+W]I33IABDNY)Tm<BD?K#%QKd-=5^',b4b)C^?<<ZB6C<r/m\"\BrH3SE'V!J0I`:]/_*Ug1GlB.oJTZgaP0mt)(<-cd(8B(BPjVn<mrt6L<>a]^<U,g6\g[P'1C3WR*rrY2ZOD5':m,/9XHcj(>m5!WiM`-j(>lE_A$T+KbQZl+j#7cP)jcY0=`SS+`?3gH%d&se]^p;RE.c%EKdXF:-7N8YaPCMYB2:4"=VFIjBi;q"/Ot;&GPS,aD:OX+E1k;o7WHCO0k'PP\N(;9;spZ>.B-6aI/l\r)+Ptn,/GlmiXRB!?1qCGRo]1)s;c16JSaH\9BmYH5_?.gT69SL0[(UcGo02DuZ),4Tpdnr6fZA\C3uqEg$=Xhde7[>nJ2s"ZHTSgrqDV;Qn6RZS*!j*(\0&\/ON=m;BjAO.ur!c;\Z!AIB--A43`:RG9U=hrpR<]k`OG-#)\5fN\a+#dqR[$@:/8iaceLdIjMh9NJ+**HM"BXj2:B']rr%8$[1-9?_m=]da8"moq,6_B5$nD@-0GE^u>O*a(^&'Cane766o@3k/MhNQd9jBT8s,Q+.P`7LjF]<!WDLHJR:?hn[%SfZlFXs!(mpPYH$C6^KlsJ'C5GgECHJ?A>Va?^3/*?H)_OYB0Ut5mD=ELdV2cmumTpMrAGo/>^/H[!?uT?CUI"TY)\F^[[qKJP0QCq9iGs\5rb3.'LT;+O'W?=5h2mA%YkE_1u^Lm6@aAp`\1*Yo9XP&'_g(?mjj[(4fj+.P]p0)"RN8"G0rdfUl75S3ts/PohAEVO#q.C`%2Z7KRUga)4Fj)_bOK$!QsA7$/5.I:gVH;rI1Zm_(j,<g:3?5hl^X'I.M8Q\5830;lX6m.CbWL>4rrq3,T=^-0QmV-p@%(Z&-*Zha!KXo.]J%Rm'N^[-*'IjTRBIlVAL=1gDP&`QROh.ng\!]8D-1[.8S5$p?r5UVaZfN;3,Xb@=qh]Faos2JcF'aQ.ZkeF4mr0c"n/eG7\R(o`ts..osNmuI1(+:gA+jbE*Q!b=JGsM.c8'H0CKuXe-TX-%dqf2c;+Bp?G";)PI,(guI+D[Y6Xm8C/?T>Sfr(h">s4@Ba*^Vo!.`tuC*rp:2kYdALl!Fqo)f\6OAQME?H"/?Ys$KkTV9-CllmLY[O]3^_M#N)[E%nrO+)^D/3k@-IE#T8n.*aJmS`?=KT:`XfHGql;"uIg;WP5gPU.f07DQ!X>UpU2B073`nDlNit<m[Z[E=[IXfPe\;ka%eVBP4!=VlOIu&_H_ooo0NqbXf9lkm:Kil@p+r:G,pJAOufaBK1/@UArr$HiSWKlQ#pufKnN:*K+FJJIqSKs8#GI5hl]-#:"-OQ\0]Vgc3"Z-pfO'^[-*'IjXO3<l,l8@lFCDHg0gFq5,&QD?ZS`&NBO/!D_E0FqoO7p,^5Y'0c"gqK<j:@n-NTHh$ZVrh^SVD?ZS`&U3]1K/O]/Fr>Xtj.?Xf@r^jJ+N3[<T>%9/Lg*1.@)UlT!s];U3,n4'+N3[>YMW:]`3#\R0]MN=JHH,e*'!X$!/l8X9gRrM`;TL=Rc2&5!s];U348kHM468N2n\)YDg9/=hS+dMLms#!#7__5E8^L(+<k^a^OQ+J*A69e4q[X<Ha+:@-hcK8p&lq,HYs$?i7h2EJ?<M2btubdN4?pKa5=X]cf=P7!>kHdJF0*p2ZjkFVgua+ccs6/I!a!PYSHQ9)%)gi&bhl$Jd]*XjmF?uO<].$'cn1*b3f!.4^j5()hK3Z#u9KiJ.)6B_"Q0IRt1s^;\6Vlh^A-U!kpg/$DJolI:A7b;_d:'R$`-qp+>LH"^K\-!k+0`g^IH_SV!fWmh:%e!T0J("`-VSDMEb?@`47K:/4RD!\WgQ6$sdA#CCDuHNFu'4Z<HZnEhZ3&3XIi'78f0.XG+?B!YjZIZ4`FYYPDL52%CXi550j/<5'p"tnig;nddaB[=q"cr>t6Vl$>q:0bSgI3N(r8E/(WAFloR%`_P*8d+-LUoW?4^%8mB14qa^4>3OXI/P?4X$/q>@-ZE+a/JVn6pSu3g(DMY].`BSMVVaUpYfP4n^XMY/_DjHH"q2(>XWoVB(P&J2TF7rGf/nn"B5'+d9R%ZpN;A*_=s8cK1it'6;`FQ^Vm!K4M#Osk\7tX5FZqDATj*Kg8.1UD9kd&)IHg#l.*iR-cuQ*pSs>d*Pp`T<$I\7;3uIimdl.!Fd*:Z#NYZ!AMV1jhkZK.NO(e/>VWh'ge_7CUh3jd3+.s,4LPXPF*=?(/QbqE$ZVr1\[G:'lbk:Z>&;;S9(/D/8p'br&:_P2^GJ[,^[C&jn+F%rHo68_dp,%R7sBuM%A'0TBWN&<5\^uha2K8_[WcIf9uVqceLTQdBR4tC(N<fT#hV<Rn);Q7\a'ln1bK$p2<5K`"h9YY#U[jYN1&KUj&<-3;9u7OCu(pZEibh_JP0RfPLH;WIQnHeN0EPl>?X+Wo?J#+8uD-;'npN[29qj'%),s.D8@:M19J0pB67bUoiOlE#Zri_iNG(5lr",Ah=6p:IB3:>hs"GuNoE2X_fai4+HC=uP=qtBb5Ihr*0%/1]V!o;6lL!RY,u>>5.p=3b#C3RUI4_X#9'`H%q+*<Brtr"C7j,-[rbJ/8#CInmN]^=3_IBuNT1t=R@9fCG)q+5N7*#Ua^\Q])QjMN@J0%qfVNGm1n:^Dd'G?8E-HVT/dt,g-YR4L<K^MWihp+t&;^0Cm"pic2_@2iQh+F;c5m:d-d;7MVFHFafO)D\kReBW5EDWh7a3YNm'XZfbX`iUqlT)Bf#.iH3W*l./%^/oVM\]FccjVWcHbDN0'j6;[#\77GdP,a#7-'%/T]BS&+@tdC.`ItD3Dqf>9%rp70=Nr84:5*cH05Gr(u$']:Y/e'^;]3C=CfDDk8$7C&^!;@qK\`JiYbNhf\C#K&u*u5g;)Q-!d^YkF$373oIebQVLjn*;%Yo*l53^C"',;Z$R*@#s)Z%%++SX3N;7MW(*/Fc#!#"&X=>/HJ()1U[:X%Np)HrN5K!4+?aQJ4q=MG7d'[V)b6erl[lr]q+APljJAOSG:fP$lM0H4i3Nfao28!VeF[-$8]BV8hMVpU>@^nP1ZOSNf3E!b/f7Q4kG2bnnB@P;H`_%+'&9KFn/$\9o3ID%BA>;cDL>6a\_RS7bC#GanE;f/'DOB"au_UW)n8O@W&6ZiT,i18T*4/7f"o1(N0FafRO2Vic?-E&nU$&(C$tEs,o0"USs`Y5]KdGWT+CP?SsckOU4W4[lGUn'UET%P)Fl$C4&qgb10c3o?>R`M6NblhLe@Mm@HEo;,]+iZQ!IQXH_NAo?Pl:cU=lMG_^;u/eHsqfeaGaIN?Aa>"rCU)MVAP[j!TGToA+3&e?>bZd7_?ZX(`b9&H20&66BBW`n`_OL1F&,9BekiE(:;6@Q*Am/:[PL"QE5.5sBHq8qmr&X<oT;U3\B3NhJQ_0TSRhs"nr.6;L&-2Qo0eqnc-B==p+d%8P/U\R?TU#S!iJ9-0A3hOZ*_*[%PXXC^<1m(o?/6Kj(QdJ&a,Y%g6qj72!7+KRf\5.p,rW+6H7=bLD>'I9d*Q'A8=h4Du4L"AVBhYE>Vn`cIpRE;r,5#%'N]Wo&/FOC@R&pnS>?$$op1=dbB!4u<UYSB`9>+S7jn8V+"/UZL:(tCBn?5i9+"iQtM=rQ]Yp:]mDVm7Q$cc=lEBmu>kZ*%&F*foQSR%5+-e>D-m7f$C4AE<EDJJf9g=jA)_@L=o/h=Rter\1X<`S$QV(ib0Ln<(cOi;tXu'1#Ue=*l:[n!P[<Xs=P&X<5YtPl(DIYdrZk@=hBbF]QPiA7i(0lLtG%7+TD@roa8>DEjtG)J`";$4+hPcV]S4%hU@1dhYFciZk&+e(idkHNmFR_aiBc/b^iQ8u/@ZPFu=%WY9J*8stmlU3fVLY4;F]E$;<L%=1:U?h]FXh>L(^i0B`+Tu%`Li<enhm$[on,G1=_Dect90bKs$+"!G-0ju`U55(Y)jb>Lh9*5o1FUu'L%h69mehJQ;)OVBsjuVr0I+g0X3772$HtrCH?e3bW&FAk/Yt'l_:H[X*=BJYgAH9r7Bpk>SB-n[C:8jkFp6JqcPq[m%1cmdR&@ZY,oAhI"Fj-njNRDe''[rM"?0D)\K!')[lPQbN9HCVeK!L1l]]$SYP/cn[Z/69gd@\I^p+.E:&mY$7ERt_mIbPhNiY^#r]YJssib4]FSX"5dP^=d^-3*+7:@CnHii%A(3G[Q(-!3SqH'(2>*iho[52Yjq4X7PibYZ+j0Pso6@.K]rmDoBsIHBt@b0&5`1n-YIjmfS139m)<d*gZOiqkOJ2P>&#S=FMqTjs<Ia?k=MS,`)gqA9\6NnKuJOZ(9$)^hN?eG9&.cneJ^S>)?R$D$uVa&Vl,9A,fFNXK$f+KRIYmtRkFIm37g<0uti(n&f04C71G%ta3)c:Mh47pH[AH`GopO9![of%JMN!XR']4HBMDX1OBSO#=&ZrKp[&cr=A&0rDpd(OL_;>%A*9[AK>n9@*g/R@39"YYmOJ?T,L%gN.P,=W_I:mKG1(1V]<]ZJL`.l$7R^n@qBu@u8Bmg4Kdmd:&;3YA7<fn*FB6&J;MIV9.Sa.iu0/BckD"&+)NPG'lQ<((`Etk,=%2E'Ku\fsK_+fl;%p[tiksk#(jEbQ7l0O*=<GU?B(4p]hQ.be@P`htODMcXJHr-Fs3Aqm\"tP8W3&Jpcp'=7o@+a&J#-#6tLeCc7hZ`s#`#-N^`;`-TLIpHZQ=MJAokfqZl3>6l+q3^1[3<9u\=iXsMBp8WnJ"QK/:%]3PC,>5ZGL?J^mF*q6Z:["1<eBq8?kasLPpQkUQ685c"-4fg:?R?Br>q,.Y,Zb/<-u&HepC3.*4?6-_2U1V(1Mj]V_@A7p`XpSI;rDeSTO[bmU9(B+VPYX&P+e&M7l"Y-es^sAdIoM)$hQo7(FiRP(QVOG0tL+l?B6/h1bpH3rMBM.&4l5s,>sjTR[uJYd(*@erCGW2G0E,(hgAap4L@:[*8/tAE5gf6E?4XL3oFsIE\?`l<X8Rid'kOlA$\Z4]h(hb^?$n^Aj+o3/7;n1p16MEIWa/V_;9de3_K70b/o:7QJmOlIRNM!0rd*7FpgDE3N(4Nl1D]&NnT#6.L*\OWEk>s_5TYrSb@CsM8`>nB;"m_)7Wsoa3``eV>c%B0Q?2RT)"k4a76*P9rF6AUtpq]ftak-QqjWjFH6.Vp$+a;5bX7DP(nH=R80`>:a9YCjn4NL2UMHa!f1>Q(Xgc6FCY8ngeM:[K4o/d=Vh&iEm8ImFkLoNP_/\W^ojo64^@H7A53Gp4]2FNGkP_uE+T[@bg\qsRE7d.%Q;<f*70%s?[DI2@;o,cKbIc=`=K$\Qp.WgaLlQ0#$HsE&lt),k]6;K<e:TTno'VScJ?Vje&CYkUa*fpj]b)\ZWS.u+KQ(m7^9HB35$.5=p<d&W7F4J+Rl;`dk9SASnr%V/-4DiM5FCZr(BW2aW93/W'K`&cUt]ql_ZR\d+0C1FnF3SJph04`WTeIpRlbQA?JROn*FB6&cF[`lk6]a+W0]k=l1@4.K-9%IrGR#l:?8ZZ\OU:Q]M*QW.J@6hSF2PnT>B"i$pM/)Q6GRp'?QD?o:'YD=8'CaTV2D[21s6pNVqX%]WW_MoVqiaKD>G-3`.N-bLR?a&J#-J]qLUBJ^V[i5.Yi7/LZ*B<j>Lr>u/jgVP*pKAP3`hp>VL#98i-ij+/%WH=!_TSa7,2j[!ggi^8Cq)tD&q"eH<,:3$KnSJB0g,he1H8bT4.#!d9Q1hIQ)VqcV^Nc$KfH[6lVFkL793H(76_k&mE5W/(X9l45,.K#n,!F.BT0qg)fM/scDYsc((3\eE!t9W'WGAHA,iC(KSL?<5Q.]F`*Hocch?"O(Ph=Ad%-k(%bOYc!90H8cPuSj;!pu"S0'odTo:'a([uKhGTW2OH4XJ@BH%V=ZaCtgWnDl>Jq_K)=,$u!0c!(>c7aKf41pdm!G_'<Z3L"ah*"3p>8gm>j=qZ?bpk0\LNRjAC8R'<p;-?+cnjIQ#"'4B1:FNJ-MY0dNniT/WXYMpbfolN/9kBU/&$851@$hgIK@g!u.9"C&CJ4)BIT;k^pdR\*XhQn&`:7G_02;3AQI@'jfQ_fiGQ;dc%q%rdo$I]Hf^bd-b*n(IZ565P'\Z`.YXckJqEp'@[&u8.%TKuR&J+ciP;-]bpudd=-%TjWbdsU(3HLuBr045[o`3`Vf;dQIDuF9q/&4pS=9"H%bBceD!n)GZ^l0A_<JX'T?%o._DQgQ5m(Q_K&6?Q3;$O`.WBG:GYG<paBn>mgm0e4IG_A<qJAE)&O%,^FSoiA(G'iql]L^ANUlM35rRHHEU69(s9m&E^c1tlgXfkE5%uNkIk.7?I#\DW1%^r*SQcP/kX7*j/FtoeE509Z[!,D5<(7XIPl#S/UEJ2RXm)Zg$iHqbR"IZ/':igT#,Gd")&9h([)-I-N4Oi6J_6_\nPk9SplN"nb2'`7_Nc,fkNi<k81RUq`3B9*V$b3E:"Df0:pJAJ[4nOP&B.dJHaj)OkM%1!A:aI0)/uZtbre[:`qQ.B:+oR##ZY.rVF2g?nO/NENa?XCs73YV);/NV>%O`6`rOkd/TWW%!(CZGLOn*k0G*kjLJX51S$55#+BDqBL9QFFW)$3Yk]!8#[@+?sH32!_4h.`O4*c`tpWTb6IeQ:8MQ'CDp\nn01Ye=&kR0V$GlCNhac07/Qg!hoTDsthsA90=\^V-7./pG_fT"IuhXhKM?iLXqd9>euBMs#m$<HJX)#)<!F:"6S"+;e;F[j="I.1pK0GJ/rT2c1b9fG9WOCGcjVl5-K9SfsW7%p2AJId8\=W-YYS,VNC=H"S's8RookU/H"4PNj&S<d$<sONns_?U"UX9Ig-6j0QJ8)o!bbU;,_(oe?6ch8"k@h:X#*0.eRKBk3=&)Y"mcdpEmfJiJp&CWUER(N!F4F5&c&rDT"2l/&SN,nDq>7N]F5PJ^r4a9,NNF)nK6>*V>u`jPQhkc9Fmg/;4k-eR<p)$2s[$K2)S\:kVoDD2qKfj6lToSfD#^8so:AF"EHYch9l6gR[d]<W5ok#n<mi6;,b#77t2d8aIH.E:YRcD3S;J;.&g\XV$8A"g'u:P+-tG#JTQG+sJ4CLbe8nBbWPPM7;t6$*j1^1Aj8H^N`JjTpE^3k1h*/(EK.;9@`NGVG5U2:7h3"b`05[&L#c_=.kr!*(k[_#E'"(/!jNZ[-h=HOd^p!KTSPUkdW+V<(.6+[f>icQ5LWm;ZkDU..O&D4$nD[0LDTd?1ghMMr"MCLp$.KIQ1(kt$$in@=rae(34.f[?9'&SUVN$]#Xrk+M4@J`b0Hp)]9YgP72Z3F3ajhKbYT'^BXA1.KNiel5]]5QC)IJUt7_gHP<3koHO_Zps+=*n<HsA.I21"6*(YV/=7PN4An;$F/8J~>endstream
258
+ endobj
259
+ 75 0 obj
260
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 63 /Length 44
261
+ /Subtype /Image /Type /XObject /Width 659 >>
262
+ stream
263
+ Gb"0;!<E0#!.pmDX)1Bm!<<*"zzzzzzzzz*#Y'JPX>~>endstream
264
+ endobj
265
+ 76 0 obj
266
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 93 0 R /XYZ 62.69291 395.4327 0 ] /Rect [ 347.8029 587.2098 490.6529 599.2098 ] /Subtype /Link /Type /Annot >>
267
+ endobj
268
+ 77 0 obj
269
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 117 0 R /XYZ 62.69291 748.4786 0 ] /Rect [ 101.8129 494.2098 287.4629 506.2098 ] /Subtype /Link /Type /Annot >>
270
+ endobj
271
+ 78 0 obj
272
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 147.9786 0 ] /Rect [ 112.4812 419.2098 298.7678 431.2098 ] /Subtype /Link /Type /Annot >>
273
+ endobj
274
+ 79 0 obj
275
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 138.5029 362.2098 222.9729 374.2098 ] /Subtype /Link /Type /Annot >>
276
+ endobj
277
+ 80 0 obj
278
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 245.7629 362.2098 310.2329 374.2098 ] /Subtype /Link /Type /Annot >>
279
+ endobj
280
+ 81 0 obj
281
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 483.6827 344.2098 532.0712 356.2098 ] /Subtype /Link /Type /Annot >>
282
+ endobj
283
+ 82 0 obj
284
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 68 0 R /XYZ 62.69291 714.9786 0 ] /Rect [ 85.69291 332.2098 118.4829 344.2098 ] /Subtype /Link /Type /Annot >>
285
+ endobj
286
+ 83 0 obj
287
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 141.2729 332.2098 205.7429 344.2098 ] /Subtype /Link /Type /Annot >>
288
+ endobj
289
+ 84 0 obj
290
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 73 0 R /XYZ 62.69291 169.7569 0 ] /Rect [ 132.3829 284.2098 196.8529 296.2098 ] /Subtype /Link /Type /Annot >>
291
+ endobj
292
+ 85 0 obj
293
+ << /Annots [ 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R ] /Contents 155 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.5d743eefc8f98bc7a43b5e59bf2de6b9 74 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
294
+ /Trans << >> /Type /Page >>
295
+ endobj
296
+ 86 0 obj
297
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 266 /Length 12842 /SMask 87 0 R
298
+ /Subtype /Image /Type /XObject /Width 509 >>
299
+ stream
300
+ Gb"/l$]lB1H0;ja98+Q)W`UAu.4UF5.`3%lKrS+(K-:Vi(_^#n,<Tuh@CK-XD/JoIAk!Un*`e$'YUgAX2NA2T/:7"I)NPSt($dU7d27eHAQ]:C(8I;FN#l(3CZJT`1im$Q3KJWZdsXu8hac#[a8]4Jfr%VqkFA`jmf)skB<H+k"onW'zzzzzzzzz!!pcbV%:FN0GlA*#2+dJ@'E<BA02#._(oS`I2E@sbEP<d@5&NL;[1p1_-jK@).XfnK>B<SFcu]_]-iEX8=*9HoO1WPn\W]l4I3,n<t%suacBDulGMt9iN-IXh7lger7;P/jl(]kUn=;,lmRgM]<1(3L7YR=&7@3E9Nf&@qb-ZZ89_XCcm#n9OaYF<U22WMV3uT3ZVe7!_dK\c>J4S)V-rX=0X87=XQOY6\k2X:'q.*t<UrY7CH<qGRbdNXL.9IGQ&b%K@=QsC6Hr^p@U=2LP3i&dOe_2:.c_gp6=MCLHObjKiiN(bbHHctn\dFu^GE0f--GM+4>4:I_st[<)ML:\`8l/udi;EmShM"_"uARZe.oUcXXPP20iE2<)V7b31:EJuV2nZGpV':pfau#hP1*\(en]TbYGP+!lq9k0$!s,1]2Y4-`!U*po%m3Jq)=FJqbA!RUY-AHl](e2o$70pUkLlqj_t7@'m+V,0N`0m5M>5o[A*`_()DQl/HsYJ3M'8T)3.t3PX-95@$/KB[U2Iq?J0P)Dn(C#/de#A5><uZREBgt$A#JX2A'M-3[:dTL`O6l-o#P;XnMfqZEG<%kdZ3S#6oh2A9F,bB?Ehb>PD;+7j0W\70,.(Ka:kJ56CW%L%*kp=]Mc2mF+T!<Pc<Ip*"\g#JRPHflpo+:A16_/!PJDfa3mkgHg0kSkB6m%td;Yoosn(8UT`9H4)5k`]!5ArbQFNcY4o"r>LD6r>fsVB);TBEj6:)&OWP)ELlK4nl*<V^76:d4q(J!X/kTnRs/?&Ye=QjgpZX9A7(H2k/Mf%=ZbBA?u998=`p>;ZL8*+o^N[3!"BID[dPI<k(?.6[U5Hhq];ErD[i_SI@o\@J0ta0X3Ko[qprf;jU/5@-!]rEQFNK(L)_6A=Qp:l9ciK`l[id"IJU)5X+F\.0Bp"=?RuGaCb&s&0DeWahUN\1d!XI=eH]cc[k#Z]H+[VS]i6-O0N\Gn6LRVe*\,BFk1?FJ*<loV99qm;'5#["J\?OlJ\b`u!/'XU?nb][%'gCr_-iZda?C":K4W1Jq_/iqQ731pql^&$!(]9gaaO6j!'l]uliR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE3liR5QVL\"8!'mE;<qc9r?SBd?f;tYL*Q+GmY2,m#QP971mMtp>eD!?d!=/7`bN2^*Kn5Kc,CsIT3uEt)N+D';n_sk8<!8`UL]XM`@!.3>Nl]ppXr71`bXo&i/#>]E\.1g"R/u!-Y,216<QQMMIJ^=8\&.f79>Is/NeZ-=Q1TT=8DY&Te>Q1X\C>]!<BkB,cRqZViZY3lhmG8E&;%2cDBkbN:<7lbBV=^MZPReSdEBn,Ge!0k;<TOq_>9tcqkOK60^Hm4"fF`<&3MZ+h6)$^l)1r?oLsA3VIWT$n0,lQAK>p%3sjRjPa+DD@j+$Z,)'>DnaPd-N.^6m'm[#B4T9FuHb4\]670_]c':#WJ(CMKqr2l2F'`*8b/c_#W"bZE(7I>ZMS&d.7`$stktkM3V?lejN7'E5(M8uMPW3orDr))D+aO\<LA_P=qjarQ#o^[[A9F0mDO0XH?I$eG=,P<E+W@'<T'@bZepM_jb._fo_%+Ti'M"E0+N$g$Bp'Aq3A(WIp,b_+7%7Zo?BUdSns`YF,59*M7EUb!(8ppmlCL"<2i+q@eQW4K,*3.DCi/&F8*Qajk"C#Gp8mY.AQd]=UhCoQDZTu`cejsS\EAZSg"5(h/u>hF2ZC1]m4!31Q;r!NePYKDNtTcThl$K^#NYt9EoU#F_;?i!iKBs"+u':9Of)>cmLn??a&6mN&K#e\agTr2R9OSJX:8a;\d?Fn%@umUP3>Tt"(qH$j>j.DE='^me51G+k#P7D7lc5Nqss<W*O^%qY%O&0!iB,#g=u&l;f&kI0?"^6aA]/+Wt%r7JC_84GU.dj;1qW'nqcA07!5Ab1"+sC</W?bTdACdNP&0BQZ55FCS1"S&We:W-2X,[ER5m?s#ZS4;nKLDc2*,.M>Mo!Q[R_#ZV/j)6NkX,'fWItMS;t2XY;/i(b1buc[]UrKX1'MFi3ie=ADe[^]$$I?ZIWdm>K:3c"p`E[(9mMjRnf:.b=<GcNQik%?u9V(SAU#RI+2t3V0B^kWrl!n-B:3YgA0:?`0k"GTuc/"X@h5erZ.ibj(8h<Qt.?L")&2HsipZp6?p1Wr)2NIP&O6#bN)rjSGtFMhb-JGmT;>;V@Db26?_AZY'h\V5b!Zg:J0mrN+AUDt;85c<RDgQi:fI^$8f>ihodl_B5KW@BD`CbU1h\b,c<=_DT99h`#hNK9DR7XRSDG(7rJbB8Gm(?U6.)A_A#`o6K6jAL)GdSRMPA&46)U#O'9g@Q?dRGDG\0d7UQe'rf[G=gZ9S$nZ)D2fd/0P:%*FK2SVa)U?%I(&!"O=Q[^8pfG$,,aZ43=Ju68"5*o%Z/FMAJSK`%!rtT`JF!@<5c0?:p(+h6$4I,k_4nA?aaP92!'lde;"cPK]N?^#:RjCq655-kLCTFl2a!&K'R2e\*_)"p4MqU=,>Ek/b'm#>PL]eG$DNcd![]C>0>p]\8Sf%R';\S5Kd[<+->IcBW@?Jo'U*di=5Xs6GSk-E`)-.\>e!%.4*gBB$;hN4:"8Yd;H)NLCj6dG0%^i&R)G2?64@Ft`-1Fq.39`AFYAP+'o.$s?EcjI-Lmn8^bad80[`pVU$SC8IJWm;o-?4.U+"YL'pEm*?JtWqGShk^n-h6<N&28Y./Q-8hu<>YUsMV]R]L)4;mW#p4=U+p?J++XrUndO4?4Wr7:4t3O\kZI6Z]&q;CB\6kbZ^@B2^G7[[m4V^M6NuG&>PY4k*0O8R)aEL's_(RCcSdE]di-[cDIM3_*ZlC-i=%7)citkBY??UX$#+RVm0=H8!\>5$Y.3+bm9u@XILMf?TpK7gi,$dU0$@ZYK@#%fj%T5:?7p?"h<POVRXcUtE)g/XL6Zon'['$fnj[C[]aGCd'!$Ee#rNYXQ[eotm^hlj'nioZJ]k@1,38hH_e9C<Fehdk%?i8Xf(m;;(afrL)-c-Y%0VE@Ab%p<T6hF8"s'&fW?;,LcOe<<mbC:Fhu)ooWNCXnL8OD&[]eTkD$OSPB0Pc[f(j*hP6$\$\62HecYV%R*E9MPetU-N948XZ_%_]6S1-X5iP`c6HlEadq95"Wtd:/Q;(CoTN;(K*SLsQBp*n!tR:m58W,Ii2AF&,ZF??&=3Khi<%?'[#89g9hdH/G#nFVELV=no@100Dt$o[C1c55k'=#92Z"3@DcA+DAtM'[N3r<J0`&ir9l4b6F`OV=ifU1>$Tu=u?0m%/lm!Anq=VnL.+NXLkFhcplbr[NGcc^dJiG$L^4ggSI^*!#&b<fI2L6Q;B[&hdc?dUc@K0t(oG20g[hZF^kk\*(K*QXBk0r*G6@>.nk<\*T?r]"pok;[bquSlW*+9p(>C/mkeu5QhUrY1q5"#pn'58t.o3uWBcAqCq/,0qsm$l)0M^=f540N(,+YlqHN]bs)k!ttf0eG+>^_ncWZL@/>WEZd1R9Ze9<e]$Xfl,b[?'$=UUt#bJH$jX(=k@(tYEa'Qc(@/Bk9377\2.jM,Fp1O$uTk*=kA%ro2C"Prg+5F0'i)g6GC_"e]ZJ%J8fiB\fiO'/+@'^BE#hK90k\':u=SJAcMDedmHJi7un]K$gZu>r'/OmFL5t#'.`],S`O%5T"gjVG:t):D#Sa]3LpBD]e/&PLP*JAhq?Q[^aseg%#SPW+`b,Z%6TU;(-[D_q9XlloZn!&;TpjJn=)tRbK_oI@;0-Tf[#^H%oAhm_,[gTio>'01L.0aV!IBQ;R^)NXJJS/X#ILq"81nr+]lm>oge,nD-11QX6fCu\$E2)iljlZ[;(d=>\A^MY@f(rLdQW+0CTC^G0q;THD&TL6Zt7D[C"<I/F=+I^s%Pp4NOPR*u.rk"].cV9Ti6064@H*fWeq^+c4Gn:d(GY[$RA`fun\KI?gA/fh6Z\+&^b4c^ij=?&SNuUA<X+Am%$]h^jpd0>4](0C,MnoO=OXo;c=@pXs6:O6YkD#da?ke"5K-=0Q8Y]urH[0eEbkP$PaP)&lr5A\NX3=1O\<i!^EH5.t#3:#3DV9he[.#$6qfBDssWZ]RsY\m;:>8$Cf]rPt]r$a#H:B'/4,bFT*[fe+[kR5j9*p&`REpAi0f*D)uR1Qp84R["Q71:W8h;7or_^!'6&GRLRJ+=9[YD]sk@:Kj;MF_Z/GfIkMiimsD!Zg!`KC\H.sGO*C;ZAW#^/Xr[p5Bm"K<e:joTl+/EDj['G>:lJ`Q+(dB5;frkG0]Au'>7[P%[tXH[[Nu?8^o(]o2Aj0fZf,;@p@kMO^aZ*m(A(LKa>u';s%A\breW,btgG3E/"b/-ono0eBr&!]V8Nnp<h*0;n(<,):Hhp2Sj?<LX'II?@L+$\9_;Yq-.PMS*&HAJ"uU6Hbo^<^0Td[LXg3PT5EYYO^5?#Q4D>D/E&0bLW+oSpTg!.V%gim$2#mg;"dIs,9nF'NZ<$G>?fa=SXp"iL/m*AI"4:s>t@*Ghda,>[t[$`R([m_lu;P_X5WFBpTU*;jnsS'Xh*ZJ*SSbB>3K)[\hqZ%2UA_!M_W8[^i(F90&bIMZk1%s]>u%>aKq6%;.cEU/7s??E.B`LYXQ[e-)]$`'N#Zq);e%#-b$>'Q+G3Jm43S1rNj^KHgW8q$TFR,]RA<>/>)=b%UJ\-1Lf5a?.@E=k2VT&WXCr,6HoL'ccQ:#L>A-]*Y`K]Q9(T?1\7s@+-[FVl[r?8Ob,P<TtZ3tb5UVg.$"gk-jmCV`?_%N(O/+_*_)"pi^>(&nYDfh6eQtNPug_P4F-l"E>5,qn=-B8@AKd9o@`Ue;I$GU74KYSUnA8dffsK9`7W]ZM%,.e$FWXI,bCeJlsJ\08Nc5fn-h6<N&28Y./Pa@9Nhgc.>Um-$CIdA]b!QaJ,/2ma2c4lGUPsWY[p$GnKbf`o@`Ue;I&,tDKm"4.`>0W6)=">#h07C1MW$1\e@$U?h<kpYXiX*04&I>$u%KX',aQ8`D-&UHf5Sg;EHcphXDB1AB6,RS2c/fB?bB/+eQk3A@V%3g!?,G-:0n[AZcG;h!mJ1.SS&0A3Xkl\r!!Y)N`:DW@l(V_2PLG"09Kaqtr<\%c],;NP6mkK>1*65G?b=E,`$rfl)!!ae7o-'A9",i[.brQ7U^Mm]&o.s0m#RpD7?i%$:FdWCceBIh#MA61ts$Omu<q5k_5\Z6(q]ao7%@qHIsW?^LL?R6EW=9MQ-D"gU]L!un,f+T%"MbPn>W5k_5_Z6(s3aF:\cdlpgdeiZ+(f/k1U,eO!/VUZgdM$C7M1I1Z/VA@i<4o-Uud4)b$o/U=tER6W$[VhQ/r9Bd6k-%Ms`ej8p:R1b]B\S"'TOD]m$D[WjjYp:s[-*!D]+&0TQMod-2dGD&L6]Zhrm%("?[,SWo1i^VZ>kl:)((YaA*1)sAiLq1<<Lp8R[Rc:c(F=']RPcIYl*VRi>u;N%bg&L+/cDokSr[H+X[(j[:<3MMb3*O)irUM\&p8\Z9P,TY(HkoSi:9Wc9(J/2skWN(H';5^P;os?T!rDW2W5ZMlT(91V0/21O]'cr^VH@I/4*1k/dX@o.=aWllWm2DjClrg%fl<b9r0op5t*k4dO"L^1lF=pLJVfW#MerHV:-0\?E:9p@:Z,ARA$f@#mhqT>'Mgnj.Oa%;*!p$suZ$lq@"fnkD=R&1t<ofW)=7Qo_EmfBPIi=0e/;m]<cohXhbOG@a^XnoNK6,92gDWe'M,9hhqnd)U8us+W%%/euso2Keb@MVAo723S^-k*mEgEdHY%^0*M4A:N(KMnAh":V0:*A)bna6ar?F3;k/$H$e6"Abu"I8gCcKOFo>Mo5n'F4Z-ZH/`!^.Ut1c9._8B;QQ/N(?KBtFp[jDZ0BMP2'7Dq'h^R(\F]I14s$A[fqc*aOO.'6_^Tc^m3\t>so$-0Sn!6HJ8hY%TRbuS'Pk*tPP7u[4?(KI40ZQdkf+iK&O]$JfFkgDOY_b?+kfqpb>&bR$>9"V=IE3c,pUK&(AA>I\i]<n<l[]MCW=0Gpc4Vc,MPY_e6H+Y$Hf?Wu]'UW?Y127Y;[UM?ZNAlqHJA!t_4[(0AUi@LrO38k]bdt]23@d8WC?OPb<DXV^;s4olHM!X=CLlhndg,Rpf*#./of5r?b;'8kq?]>c,)-SW8t,[8:F&^m;n'D:cq54HAcCi=XEXGR93DGS'9dMFr-?jk+cs9L,7"rV$(Y3%7=n;Q[RcE^9k*sb.d=OJL/t[qtFPPn=n,?DdiS5K2r2CrSImj1gf#Afrl=8Ialjmq`k"?cKmd[:1$&K?h%4nLVN&so,5J4gV!-U<)0(_$K!BsGMFm4QT@?qhbLp)<8K5f'Sf68hBHmZ*:/F>VVnn=b5R*e(,QNHE10C1S5L2M9=*u#BD\9$>1rZC'Oe^;mD%bg#Cs-`_4[(0AcGaJ>Ou.nOSu21lpjc%Z9S#7&*Q^b![gkEkr2@oKCU[7C7G7a&Ls^)hSM5CcSEW@aTn\hp5l_Z*m(+#Pgo(L;U8Q>([SH.T@T06mpbAdO5tEn!L5u6l7i,eeZp:$[]`kRf/NGM8e?us_=cdHL)V,Yn:OaEQi0uJ&C'rM6M@GaZ6(q]ao:;oqj@CJfCE^hH8Uu:JXcIIIULYZ7SBecSa,'+R[:Uh'ci02#^7($RsQ/^?_(POD:+Tih'Lfmn[D-A?E:W[JWK#t'`4d_aDhta:VA&Zp>))dlJ?IMgpp>UV&Ec_Y#\q;:N&(mmf5q>ra#&HWUcN@^CCKZ^M4ng;,`D>:Yt\,J(+?U6X[g!=T4+bS:>eKT(gg:_Z\/37E"=]rq1ugro%f]p8\D'+#Pptrcd4i6<j9GZBLlBil_:!a3IU8qr6di;#b8[EH'Sq'Fr35eNii'VA@k"]'*G(MCd;`T768;S217X5AFqqr@9JgKN2QErBu:qgRf?+qb^:Uln<_kX<L<!ljn\/!L]sP6-+Mn<1RGIqt&YSX2ko!qlhKmFV?Y/M%j<Yc`!fq_aM=K<LB.@aF;^aFVDTQc^5Y,>^(heB?bB/+eQk3A@V%C2q]RV(^>W/@*r,YA01dO5hpnV!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0(u!rtT`JF!@<5c0A62gJdb(^q1f`CfjAG7MK2Ci$c3+TMLO6/6pH%C.&fOF7*/#I9s6+Su-=%V.dK5kY3Y*6<RuJF!@<30=)t!8.SWE8iMIj(mi?EZP+])Q=p29)\)14>s]\^XC&t,nC!+7***<:QYOT:s+5]M$3l)P9e4u7t6#D,=nOi1$uQD+UAkRVNn^IgpQ1>In,:\7OmT(?/+=Plg7O%ghP.ckqN'&fc<O5ZrA@KqS[]4\+f/c#67:#acLot6_Y's,,qnJeu9A%Msk:NDYi$<Pa0B$eXjVj$(j+k"ug!IM,qg63jG^C!tkY88.8(PI4?t#12<eTGH^nmJ]B?iLQVqsH7,"q*>AZSS5M9SSa<BiWsZRme,]PY9lae%P#ke$qQ8;&S?N,NY3@*gFt#JR;YJ@am,]Rlk=-kr?M;'h<<Nic#9YlL8G5c+lBg#B]g,HDCd4l9b%*_CHKZUNWl048L[5,)((qqjo(Pr8qVt]\il1DmYO&JcfiS3mTRlm\^AEgOMVoZT!2P=%ahI\$F&Fn4,3F&j3.?a'nq:9/;05pBm(:/K1]aoNrZ]*)GfW&KBd)oM&*a;sPqE&e"52!+OF7*/#I9s6+Su-=%V.dK5kY3Y*6<RuJF!@<30=)t!8.SWE$5#q!O<49i'?ul!b<AQ^k(ib"NWb,J<L,hGCCF2k23>fmQW4UliR5IZ'TmtkL%5?hPh./4oc_k`*N)m3j&>-)qR0To^CQ*s.u8_c"$8G4&l:6#68`&0)O)?S0Tq0J5Z=5V>,D#VOhRQT.Q^]9R^'F$6]3G!)DllT4,F42CD5lol#ADb,Y3T<q[d9o'b!S;a)B%!!#bLADbC0h"Q4!PbENqMCIO"r<U05oT4J$5iRX4m!E(2A6&E=!Qr2oh[O*<!5OH'm*";I$$^l`jp`Gj[=+aoH+cb)k#g@C!$n,fbJ#-LDdQILr>VD7A[^QD$((T7/b\9Hs7\uc"*L]aC``Y=FHRdDYp%6HqM4D>!'$)=+O!UgnTcX&F[5X$!$'(/7Y'h-!'$)=Mu_N9!,s(X)$.#R!8p-91BM)/!5O0PB*?:>!.Y_Mfd@rZ?n`EK3fBKo=8qOf_&U@/*rs*,lt6IB4og*8g!9qcI/j6PZC_^OqZ$U+A3V;(p&P.5aF6U/liR5IacLr:V2E]jc,\G]p&@%r5_goLQ@8Iq!U1u4C\j_bf4tt5UUCh+6a:";PLs59"X#i=+T%0EEN-6NHKBWP#<HB'[HpQTR]0WeSQF@kJQbj>cp#S?`;q):&gdEQQ2+q2f(6]V3++rn*!c1G@BTP9?;"58<iLR4-tRnr>iC*oo$h%CTkR4&/aPO')cl49djCtQ;jJd?`HaJLI:a51nBU5*F)jSpB$Y#+%O"/$qZ62L!84hfDC$gJE'l_U<Hld]m%QhS"Gu-LPO;SI>5#'WMn)#K\T?jcqncUqrQ3:6VpCcohdts7c@+^=mQ>,\mLAc9!'DMmp;JJQ8fXo>q.1tJA3W.S6&k5lo=)S0_CSLRBnH7ohg%Son-G\*+LYTbl-`n11M%Dl-aPLal<3'@R,Q,8(-]kA:_Cg2I>7DDhP1g;J.(uB+PA[nrK/0MksQor#1NO"@I&4W>3d^9]SZCr@e2V.dI01rKG>H@1M%CUfiJ:i,l?"3)MH04!1X265/ir&WTSpL/Fj(f_Ndm'ZHjo\F&fPpS+*b4F)!APoD'k`a>5,\We8-(++W($^[-lIXBY"USctRD"7CkME?:JJEU]*=Ie_d-IFWqaCE;9\Q)Ze5oECa6_pFp`TYEZuD'+;T`*`3IG40akraAj5)r18G:.L'ai.?S[ma*NUUg=u;ADd&+Iau2r:aaWCl-XA@T50^)b5D?-4E66dPd6?gnc05i7*%QjSOidGY4)mk=:s/p!,*dBrJV<XO#+`F+2l/S-ib.qA3V<s2gGB'*6<RuJF!@<30=)t!8.SWE$5#q!O<49i'?ul!b<AQ^kncOPE90+(^q1N`Cfh)!!'qHa?BS(A.$CA81;7P_V8J_0\n1L\Dqd@Q!0Q%#I4jQ$B^6Ecb6QYgQi@VUH?F_`290:#o;A=qn+hT,*757:oNa\r#Stg/O9"gIh!7N+T!;;&D8^S]IV>9?#AZ;q*u6mDn5DVfDbQtBAYUhj#,l's7"fq^R4lN4PKnf-ju.8%A/?.2on0R2fqdhnS\S5<u^u(><hu\n\9MHq&d(N4oFYg+]#9%aksc+qBOl8\bZ!W]W]G#K/LUFA\[$nBn%XNq!7MM-.=4HN6)B8Ud-hPAPg9D)Isqc)^>1T2?1_S$L8H>@3>?iIsQ2!>4;.^eh=J(DS,`(4Z=%`^oh&WRD8*T*rV=qD/5^agZq#/Ult'OBU_JDm"9CIA:Nn'J+U"_qR`WUr6t-OIZMQ3\U"X]LJ&:npm"M[A<Tdc?[_q+BA[n*?g]=Y\4^MI\9*l"I&Z>ZX=99hMbiG_8$&m/7pRi_CtD<Zk[%L6>ZnIOIVQHS]u_$4qeQ19B4OW<e9kKrM1`84f#O[oreJ5H1KLaQmL.bUp[#<)(gC7o\?\Eo6+S5F5Ioe>5$$>2h:LCFF8j4^7^8=&q=WtOpnR@tI'e"`'JWK.S,))7aKCB&qp,-.:Cq0DmF:'0o]`U/Wp/5D2N74bh>SYMfCJREoO:#2F6AI92`>5YeJ@9*qoaG.od=i^hS2H%;YeMt_`bY'=*o&6\#cD:Z@fXXc-eoSK$X!'m9%35LP`Rl@6!Qq=Z&Z1WZT`#OF<4.M!SKZ^WFM'lb>SHkP\Ihm%(l]<q3T&n\>*Ba)8P%D!m)!DZ;C>SG8_+<]k_lm)kC'14%-ULpPUDo1:ERqcimYjSmV_EOsM2ehbr*h7JPn&@c\jCfN6'PLB.OTa/JuUK2#`U$'U.V;qB!Bo)b48j4Xl5MMeh]_s6/4e\kc8$%qB]l7/T]O02oF&5%9+Su[t>\A.A?Y90*L&@#2ZM=&&bfu=Rg?+kGV6YU/2KNpUI=Y1>Qa;T)?J]5hQOZ!iJn;?)VoLbO50Z5$clT&SqPPV]<H%#%\!8>B*[`!\.6Vs<hELT:fa$braSt:J^[,Gua[^5p7rdnGl%sK"87ClYNtB,T2ZEC8MC4.'4gAMsrBKHeDj?g<0>)0>Y<R#lD,)-`j[Yo8RPlkWX>'o,l/(N$9?m$o0=uX-'cu>!X<9E3SnnZjQ;G\lbM>4MHhutJ1sCE_I!+?].@.P&Pl[QcLN@S5AZKIt0Hel<KCUmLfe9H%W6XVaE(.pG_V3bAmX@rOgENt9E^JNnX-5$u?k_EKd199+V%qU=olB.rWTuUEElHl$dDj?O/aVh6!o@'bEF!R'N/"Z;di7nSH[-.>GIujS"iL1Q.SU1Ykmap/dLD?;\%_`"+"M0q+L5?6nm_FEEFOWgT-'Qo-X?@:JSan'@T<%[[_%u8H01o24?#jT98_doIHD#?F#(Lf3Ga/)g_%NMk$I)h'!pPs9hZ"@6ePQT#4$qfP&ACEaWkC2E<s03THCVaqf2I3<m%,9&'$[__1G!r>,aX_:QrQ[kEgTbB;Y#k^007]h=AWPl(ot2o6XZ";Vm^fD=b/NghZf%S42]N^Ee\"<a*[oG4a3&m]`.a9a5gOMk9-BGDUZl-bOLu<qk`ulh$kD[/(r2`FG^H\#@UW2on0R2am?m[GKhOKrt*/htfiET&*QfqK;dk^9OkiOO!I\IX&O$:T<o7m=V3tm$`=ihrl7[pC_Z\bL_l%DfP^bQduZa`eg\V2dG3d_KAA5p3uU2lh@BE^ANDWiHfM6@Gn09'e`pBg#0R69%F*JUjLc+Cp-uRc/k&BrNP6oSCGRd7Th0qW]V8-Bf2-p<JB_[L<A!F1^1u"%mQjG^;s4olHM!X=CLlhndg,Rpf*"c%rorSn,+V7eE=PTDJlA%)CCr-kDm.aMY]#>_q82kiJ3;4jm@;lPI+L]7=/^1fL'pGn))osm`k9DHLMf=#Kau^!Vdpn(h=_a)^>/tcMODu&_VZIoeYdFs7`?Wqks.*4oVqZ*H1q\q.Fma,6bA5e^m03?!.)%oM<'S90>B8h:,TFpso,qg,3c<II+(]T;2X#HtnM]m<]"h\p4Bcr^Pj$WSuB7Oh,sBM8PLsW']qK40_]N.<Xk-q\]9A,4ES:;ctQ)W]hEROMi\M#)2@2l$o0"AUitM+4-GS-f+#[kOL/&.f\uSSU!DO3,"f]j:SDjce`-]['HO1f)2kpWN,tdEY^0`F?+,4;.sFMp$=F"%^"$A]lD@rO48g9;[?8<f?YT:+PdU^J)cQMq,h)([jO,l48afiHZSS&`TMD?mc^+nrGtjZ7LE[i'X%@]2>mU>j52;e^WYBLV4D,9R:ck>N7-!3[-$4?WbJP.G8XnSpCasIWKnU:gMHPhB+2t=QO?%<cEpt?o7fSMQOf5$B.chEE)0L``oHHANFJFB]HftCXE9.7GW<-!5c@"jV5LL#aSt2nlV.3X-W0m-2bo3=`P93fD8(<R<RcShc->\4#2^-[o)kbB0j7b//Lq[7mVA^9IuAa/U6T?deSg:-(pC-g0>?"TW9fLj3kb&)Pb(3QOm;T,io4a%&jd#4&(1oLrJTS2;h$#*r\p/A"9%CdX1q`ge)RaWli-^fKjVKsG]oeXL[#pAI`cR"j-(Kabp2o`YE=<f="^4Gb_(hD<e=+]a&cF*=!q@]=rlregTo,8_rZNHY4j\eroO^iH+u9k<*H0aLCI<GfNStY<*&jMC)r=_e-tcH$!#AXkG^Cifq5q?I6QfncaE])54igIe`Oq>F4Z^`cKX*S?<2>Mn[qkCA=$<2YiKLu5-iB0$<-t!g>99j4hNFtK^[TZ^ZW9;:DP5EMKps9hh48g6+S5F5B6QB#?mhaJUd^Is#Tka\"EQkX=ITV>hH<4f[UEASo8NooDFI6cRE[7(8`0U6l$pBhg)]Gl$f-GY[K!jZ4G@mOo5Y^mg3KX/cTapHeI(@T0N=?G7WMS%C+;bhK<GhNE8%<J$LS8-a8EN?hUZUH5A-F62!UU+gV.E=8sD=("OrdFPiF7lJ_[/8#\ZE0\I_:iHp)DAH&laV<+8Pn-7PNl%[:Yq(KD`Q?3LrrIs]jKf@(:82jNADu*aAdOd`XkIhlOhB;\<h%7,IV8IDQR"uT\;@@R75kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@6n8(D!!!"n#I4j?!1<no%fcTt!jW=:!1>#pZ4?p8+DsI<!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B(Q!!<=6@5kY3Y+B)5hqZ$TrP"p8T#64`(zzz!!!QPrW<6)T4.~>endstream
301
+ endobj
302
+ 87 0 obj
303
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 266 /Length 71
304
+ /Subtype /Image /Type /XObject /Width 509 >>
305
+ stream
306
+ Gb"0;!=]#/!5bE.WG`:P'EA+5zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#7MZJ'Qn*p~>endstream
307
+ endobj
308
+ 88 0 obj
309
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 28 /Length 7472 /Subtype /Image
310
+ /Type /XObject /Width 109 >>
311
+ stream
312
+ s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPhED$'e_!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;4$H?,"e\6#1?2@%K^+9X1o:9/,_MqkCF3i@*6k]jq'BINSRiMlQb2Qcnn+qqB*j!27(^_VS;<Z36qA8D2O5S<8m3]mSXP7<r@u-r/LKq?hIn;8XlhNV'cSqYn)H@Rl=+;"SA-O:TZc7K3>o7]lXT+8bR-!;p,@_1)6_fo?n6d#grGd]Nn+mK)_3\/WOf)r$1DCnaJCVq<%>ip'U<PbV*_`J(3bZZ26eRQ(6Hi@*6k]jq'BINSRiMkg7aNEc;25PO.:!;O.Vdr#NWg.LAgXGT=7UC<]CN8oKh!8"6ukgiH?o91q&,f>"@^N[)A!C.LhhR8\3?'BtHqWZbd\X,2p2Pj4GfDLM5n<@\FhQd(\^CU>E`R4\c#tD&qlQ?#nrrDt&=T6FL)IDY[p.hm4jb/Ragj.3bIk$O3PYJ44_5FoH$CfC5`66Fr\A^rb0gBud^AcCNnh0]]nC,/.jo/gUpe!D^mo]SihhV43iopCBKVMTIooK(HJ,V((Y)0'PP/u$,.:`K,G5^:U1\X0\rFsiE_%53A-tbu3iDXq'A(r#K`DWOk]qnWanEGCt\`'Z8_Z'Th/",;aP\T+4Z2Xg=&,uXKdJj1Q7]lXT+8bR-!;p,)D(<U'/BD7EjEMSNgROYPkAE#5%Ym0r>(r97*PM;:DTOK;;9C0U$-qtk24Tsj.CW6Prr<9#G"fFE>#*3^K'nuj1]A#H>Plu9pYl,Ppq#[:4fH],kgA5A#fNhjW-kg9r/rfF#sFMsY;uJU]m!ch41m(]I:fuRq&ScpWtSO9<i7IKJ!$=6L4q*K`EQ]sS>X:EW3,td#a/.RD%PZn&*%uuD0<e'\4PVkN?glQ6]1UV.pDa=[ArMkgAYIK770!,FHn3]gJ.\Ji#Yf]`(S4Sg)m\)a1,NgE6%XSI-Pn9P&=_SrrCM6?L:02\O>_pe>hELrWqb#eELZS8UUO<i#X6fM._Q#N\+R*NCEuOaT-c-VT7[4MAM"18>L1uO_;Hil^hnHW2]d9Qi-f3GPi)g[U]=;5*t1,!!)ORpdo)g6snZn,>kfj\DRlkAs#2G,]c)IW\VZjhW!R]a%W#p?J@mjf^c`SX8BZiL\ArAkL08-!8nnFSg9U^Um3f,=X<n4-c'`#br%UMnWYK%Ppf9P-i9_4,G+Sqe5?1(0DYJDn+\.,foQ(-?[qtU`/f`8BO2@P0o="'L40u2:3i_F^<bq[e;JU&/*;6I"/%dJ?Je1!P;g0VpOC!_SAg!$V>'ui^cX"A9&'>o@fHGB`Hml$fKY"ig^lhE3<XR)o@HQ&F^VN:Kq"\lm]Eb;NQcjZ"V+a>hfJhN~>endstream
313
+ endobj
314
+ 89 0 obj
315
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 27 /Length 7860 /Subtype /Image
316
+ /Type /XObject /Width 157 >>
317
+ stream
318
+ s4IA0!"_al8O`[\!<E0k!([(is5<rU7<iNY!!#_f!%IsK!!iQ-!s/H(!!!!-!!!!_;%N^.!!!!"!<<*";%Wd2!!!!"!!!B?;%`j3!!!!"!!!B?z8OGif:i^JdBl%>\s5FVA8OGjP:f:(Y8PDPQ!<E0#&KG4uE,5RU!!$kRFE18L66KB5=s+((!!*'$!!rWZ!#f9UF)XEA:eUihzzzzzzp=93Ezdk,!IE,5LSzzzzzzzzzzz!"O$O=]te*!A"3N!#0'J=]te*!C-Vb!#/mE=]te*!E9%!!#0X!E-)'[!GDH5!#/pV@:T?<!IOkI!%`.i;F:Ea!N5tu!"NX@;F:Ea!Or+0!"NI;;F:Ea!QY6@!"O0^B64+R!S@AP"qkfaBl3nN#ODEj#!QR/F(51M%P.S[!+]V]@r22G%ZgYj!^:I<De&hJ&C:CW!%;>rEc_9]&GQ5*!$kZL=s*eFz>C6DN1rfRr#.%E7=s*eFzF2\+ZZU=cn*qWQ;=s*eFz-^4T2(_?ZIXaXAT=s*eFzo25Ph!!!!"(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE_z!!*,F!!$MOEcqE_z!!*,F!!$MOEcqE_z!!*,F!!%1PB64+Rz!!!!$!<<*$!!!%R!u_<>"u-@n#t>9L$sX8.%rW$S&q^l3'q,pa(onQ3)n-hM*lB*j+iY`t,fD$!-bh)j.^1HP/Xe=%0R>J81J]j62AnGt37KuB4,#fN4tJpC5f#bo6Vp147F"C284,sq9!:nI9bC,b:MWdl;8,ri<!u\[<`<(B=I**u>1QpL>nLBr?V=d?@=r$\A%?-uAaF%5BHCkGC/&JTCjU#]DP_9^E6N=YEpn)LFU`L5G:.VjGrp=>HV/Z]I8PGlIoCkpJPC_dK0Y)KKe8$%LD#CFM"6D[MT^pdN1Z)bNc'nVO>i:?Oo1C!PJ39PQ$\g"QSk-BR-^6]R\?3sS5Yt.ScYM:T<FoATj"0CUB74AUoC2<VG=$3Vt-e(WKaDmX#$gZXO=5EY&CL,YR@\fZ)4gJZTtl+[+Md^[W&];\-KOl\Xg<E]/%"r]Z7^J^088r^[8hF_1'6k_[jZ:`1P"]`\,:(a1TKFa[jPab1"P$b[&I:c/m6McYUr]d.5SldWa/"e,%S+eU5q1f)=45fR2@6g&'L7gN_L4h"KR2hK.R0hsoX0iGmj4iq)3<jETcLjoX\ekE>%6kpP`glG`(Ultl&VmMtZhn(.!;nXK*$o5!u"ogSR3pF,eVq%NT5qZcrur;6HhrqcZp!!!%(!qQP2"mlP/#ic7n$e5\Z%`f2F&[rE*'WDie(R#^B)Li^t*G$;B+A!`a,:"Oq-28iq.)m_e.uGnB/k.Lb0_7%h1RBrY2D-q134Cp@4#/p74eY'g5QjA,6<Za+7&*2i7cR#=8K(2V91MZ[9l*RP:Q/,<;5R6r;nZ/M<R+Xs=5R-B=mfJc>P_V+?3XaF?kQlb@NAr&A1(q>Ahn!WBKBilC-uc+Ce8J:DGG+GE):ONE_gaOFA-gJG!pO=GWC%(H74+^Hk^u7IJ\K\J)5_$J\?Z9K9q7DKl)QFLHgSAM%#73MV!ctN1Q#ZNa[u8O<K_dOku86PF7YXPu3huQNif7R(8WJRVJ<YS/IjdS]@=mT6$YsTcTp"U<01%UiN;%VAuK&Vo>U&WG\_&Wtqc%XMCs&Y%Y"%YS+2&Z+I<'ZXpL)[1Kb-[^rr0\7W97\eD[?]>2(G]l1VT^E:5c^s^'#_M5s:`')'W`V.=$a0NdLa`>O&b;IK\bl#`EcH"86d$E(/dV700e3MP:ef<9LfDF4eg#(N3gW&$[h6>b5hjiVgiJQWGj*9X'j_!X[k>CG4krS)\lQ5C&m/687maCR8n=T6'nmq>YoH3`$p!<?-pNH=$q%WY_qPj@2r&=QPrPAJcs$Qhd!!!$%!\=F<"B>VB#)WYZ#e:8f$Khg!%2TL+%mU\.&T&/3'9a-/'tY7+(Z$"t)?1Wb*#fnH*\nft+@./B,"j.U,Z#d^-;#XS-p9"9.OQ_`/.!m"/`/2$0<Hpj0lo*K1GCWm1ugI*2NTk.3&io'3S$6e4)mAH4U4-s5++WD5Uete6+'%+6U=*D7*7rZ7T2en8)-Y.8RtFB9(#?X9Qs2o:'",0:Q/+K;&E0e;Pd<.<&7MM<P_^m=&E';=Q*D_>&mh/>Qe<V?'\f)?RfFT@(p'+@T-bXA*RU5AV+MhB,YFGBXDK)C/8UbC[,`GD2)q-D^',iE5-CQEa*T6F8'dqFd$uVG:e%7Gf=rjH<kkFHguKqI>*,EIhdIhJ>@a2JhVfLK=Z_bKgLLtL<#(,LeER6M9_!>Mbf9BN6[ECN_YWEO3NcFO\CoGP09&HPY.2JQ-5JPQVEhWR*_7bRT>mqS)'U.SS+NGT(JYeTS&q3U)'K^UTC8:V+7BuVWOecW/@Q\W\gaaX5p@sXdlPAY@"M$Yq**qZN[]1[-tEg[d:Kp\H08V].glr]md]$^[]-$_MuJ"`E:.*aAp@EbD=D'cM,](d\>6Per/1Ig9]Shh\G*Uj0@_Zk^i$om<e=-nt5S2pX8nbrA+EQ!!$nIBl3nNz"uZG]Q]V7J=L\>2<C$TbN"l<m-s$BK(8q35:^mC)<&jp[n=osb[DDnEW:^,m!<<*$!!!!"!!N?0!"f2K!$_Is!':0P!*K;9!.+^+!29J'!7(Z.!<<-=!AsmU!H/"!!NlIL!V$4+!]^<h!eg]X!nIGR""XOV",6oc"69S#"@rZC"L/*m"WdhK"d&u4"pkK)#)<E(#7Cc4#F#JK#UB[o#eLBL$!7M5$2b--$E+=5$X4"J$l07p%+u(Q%AXIB%X/EC%oNqU&2k*#&L%gV&f)+D'+ttB'G_CP'd=Bn(,ZlE(Ju"-(ipQ")4VU%)U047*!I=X*CLq1*f;$n+4q]e+Y=kk,)RU,,OZnS-!_i6-IaE,-r_W5.GlVS.s3C2/J]r)0#TE80Rb`a1.F&Q1`S@]2?5Z12tK$"3V>H149dq_4siKU5ZL*j6BX^F7,LH@7la+V8YSi49GpQ-:7Y2B;(kgq;pSGh<d\!$=Z9NP>Q7uB?I`FO@CTf"A>a#bB;K;jC9MG5D8gEnE9VCmF;T/.G>rh]HC]FQIIVf[JPq++KYW=iLc^IlMo(I3O&qGkP5:EjQE6I2RVSEjSiWMlU)0U6V?EgtWW9+'Xp_HMZ6lq<[SF>G\qI_k^;RhM_[FF;a&^</bFd%qcf*:Me/-[ffKS"]gelp-i)8Q,j?D]XkSNL_leq0Fn!iiio1\g"p@A""qO@Cur]1#Y!!!!#!!N?1!"o8O!%%\$!'gN[!+5eI!/1EA!3cID!8mkR!>PVj!D``6!KR8c!Rh)D!ZV8.!bqe#!ke["!u1o*"*4R>"4[M["?cm/"KDUb"W[bL"dT>B"r.>D#+GhT#:Bap#J(0F#ZM)*#keQs$)%\$$<%;9$P*Va$e#ME%&"+=%=&EH%U'@g%n7)E&3CH7&N^T>&k*GX'3Gq0'Qk,p'q,mm(<IA'(]YDF)*]"u)M]7`)qH!Z*@r5b*f;%%+7LDL+^?3,,1.Wq,Y]Qq-.4---XS8N..o%-.[;Mt/3YX%/b1O@0<m3r0mk`f1K$%r2)R9B2^C@*3?U@-4"39J4[;2-5@d$+6'XdC6e"O!7Nb2o8:!k/9&WG^9ib#S:Y8Mc;J/q8<<Q?(=05U0>%1^P>pE[2?ghE+@`Dq9AZ'/[BTd*<CPQa0DM2s6EJnlNFIRG#GI)Q]HII7RIJeSYJLc>lKOTZ9LS0JhMW0SLN[g+9O`cj-Pf&f&QkYt%RqA3%T"(G%U'd[%V-Ko%W3*(#X8]5tY>)7nZCA3f[HY/]\Mh%T]S+!M^XU)J_^ECN`dc&^akk4'bt$(Zd(@_Qe3DLhf@AQQgOe6jhb)ifj"TRJk;VWtlXfI@n%%uYoJ?2ips&[^rJ:LR!!!!$!!rW=!$D7q!($Ze!,hjo!2]b8!9O:h!AFOW!J:EW!T*qj!_!0:!j_sq""FCe"0)Ik">g7/"NLZ\"_@kH"q:cJ#/:B`#CZp;#Y><.#pBV<$3gie$Mt3X$i^Wj%202H%QP$I%r`'m&@`<_&ebnu'7U]Y'`Ac`(5iu2(b$=#):f_2)j)+]*EaFM+"\TT+V#[t,5NPV,k*,L-LrPX./bV#.hjNZ/Mo(N04-DX0pFH!1Xe2R2B+SB3,L[D3la>W4Y&^(5F4X^64?4R7#FFX7hS?q8Y\oH9Ku76:?GA:;41>W<*E;:="%19=p8,V>k23>?ghEF@f9hpAfGBfBhN4)Cl3*aDqT,cF#\:.G,0@hH5q:eI@l"#JLlEHKY`D'Lg5fgMuAX]O.qbZP=UrZQLU?]R[TaaSjB"`U#r,ZV2(sKW?J;-XL#'RYW&iZZ`UWD[h$!Y\m)f@]oBcG^nS[h_jJCK`c/uGaXYGZbJML,c9T]td%Je,dco6_eJHdaf.bi7feqJ;gF1hqh$W!1hV@#'i1]+Yi`Y:qj9F\sjf%<ak<eA=kgJ^]l<<KnleLism9&ckma(?Xn3QR=nZVLoo,.)CoR?Hfp#,P*pHeQFpnddcq?6Z$qdB=3r4;i;rXSq8s'#I&!!$P@F(51Mz!"))3Ci=>:9LD2Jzzzzzzzzzzzzzzzzzzz!!$kPF^kCOz!"o83!"<aS:/:ii!"o83!9eBD:fIDp!#>P7!;^b[;agZd!"],1!>&jW7S*R[!"],1!?bo]6q[L[!#tt=!AJh56V[U]!"8i-!DI*G7T'3d!"o83!Ea)F8l,Kf!"Ju/!GZ1`<Drkt!"o83!I/R":eUih!"o83!K(i<6;dd`!#P\9!M!_B78j0d!"o83!OR/d<*'&"!"Ju/!QK/&;H3\s!$hOE!Rtn'92Y`i!"8i-!Vg2:6q%(U!"],1!X*CW:.tWf!#>P7!Yf?j8Q5Zi!#,D5!\+1>!+>kJ!+u:C!%e1E!(-`S!)*A[!(6f0!+>jM!(-a)!-/'N!-8-0!9=-#!+u9`!)*A[!(6ff!9=-#!,2Eb!)*A[!(6f\!(-`S!%e1_!+>kJ!-S?R!-8-U!9O9%!,Z(WJoUi6!)*A[!(6h/!+Q"L!+>kF!$D88!(-`S0WQnl0`1nn!)*A[!(6fS!,hjR!,hjX!$D88!(-`S!)!<1!,MXR!-/&^!)*A[!(6f\!(-`S!$D8/!,hjR!,hjX!,2FD!,hj2!(-`S!$D8O!,hjR!,hjX?YP+4D6dbsQu@72<bMU_">U*;"@<5S"?lrK!$DC["<%7l">g6@"@3/T"?Q`D"?Fco\*O);!)*A[!(6fV!+>kJ!+Gp[!)*A[!(6f[!,MXH!-J9^!+c.J!%e1E!(-`S!)*A[!(6f0!+Q"I!,MXR!-/'R!!$kQDe&hJz"qUb7S6l6r!!'eTAUja\zzz!!%+PG]Woc!!#B)E-ZJ<B4uB06#^dZALnrqDIY:M+>PW*0ED.-!(-_l"pP;:"UG><#71\B$4IUX$k!FO)%mSn'HJ)6*ZZ.=*$?LZ-QjTa,9.[O2^p:30f1^D+"''33&3TK1GglegAjSA#mgnH$Odj]%2^iD*$I'm1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?s1eUH#QPeDSHAm:!!3`5!tbS6_uLkZ!!*6(!<E3%!<<*"z!!*-'"9eu7#RLhGs24oF&-)b4!s8T-!sJi2"98E&I/sBO!!El;&g8tq"qsjB#9n.%14bR]#U;[@_%fkqn0Bf!Ee4T)()If*)C6^X-n-W&2)[BQ3BBMq77Kd<8P2o\<E<1'=^#<GAS,RgBkh^2F`qtRH$Y*rKnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!;ioB+]k3(smlLFH:o_%qPq"add_uLk[!!<6&!<E3%!<E3$z!!*-'"9eu7#RLhGs24oF&HDk5!X&W.":#)5"98H(G5qXF!tbY>+Ya065u@kqE>'NOJHurVOeK%r#pV6(n.fDQd0^X71uTbN(Dn#.-7:2j.Q'+C3&s#e6q'R884cEP<)lt#=BSg;A7]@cBPD4&FEMbNG^4UeK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>_/RjlYail0@j2o_%qPq"addg&MN`!<<05!tbMt!;9\c:qhieHWt29UI9YY-<Q\X/C$=2roj:F"/tLb#rblb%S8R^rrC(hVRo'ViYUd[XC(fDPe'8f?!jVTa@.]te;nMH^P-r2XX@,b4`B-K'bmVrgIl]Y[_L@X<LW'g.rYg&Hlr9C8)*]Tq>%;q!5M\9!99>Z$hr1hb](DtKSifRQ#KCr!,rHdp!69SYtX\gmSmYgPLKpheDs4o9rI-jSMrIdifj"AjD4_/<rW/lRihP3J,VGug\#L\q6Br"^fUO9j-=B)8!_j7G"EQrne`K_fR*H5Y4+]fIf<"9*cCM3c_jHGZtacqPPa%%[Hu?=Qh_*fI]`VM5;kb$$NC,(Ef[]pht-GLrr@SQrrC(h8KtTg-\W,,6Lb-Saj/m-IPib1ar#M\NBYi:q2+qBlU"Nfgu""ta8(2f<r7?Jrr>8A5PPTc!;pku\*DlBo4.e#J?StQa!pN47TpBTCcBT&c:1&(+3K`\\%%G9dMCQa8H)G+9,/RZ5E-u7qYi.kr5SPZILFL"LAekfrrA[\+8c:lr]*L'ol'[%Z2Xg>=8r9\Q!7+-JaGeBd@!fc6:i;`e!e[Med_-EEW!Oa8';Hh*PnQnGrCl@c&JZtRp5\4^YAF"q>%;q!5M\9!99;l^K1@7T:6r#"b6M3;o`Y^cC'CF`2t*3A+P4,T@:1m/5aGBO!knU`#R]Vf-CHUY$.=PnU68,G.6CcIc%2UccqOM!l+a8*2Dot\,?0VrrCt-rrDT3S48WIW[4aH,EYKb>DC6!!'MbD.sng(_A!2U7N8\G'O$"2pqJKR$cdU.k_O]FX+/I?O8]3qrr=%6mJ=<ir7M#Li%+g-n]I!S[>[5f10%`R2J%EaHP;$+!nKoh#YMIik$Zri(o6uZgAG(OhrXbIhm_n.oCHJl!._9Q!66SGLT"J8$h_(bQaXHqQ(gU<O"DH88`q^Qp9&?$hY"#0#s?_fhq%RPk_Q3HC\-%Jj2B=*VV>I/chQAn)c%%gQ?_FABS6S/1\8:f6fJA'k#l0-Kj@G>&dn=^.ViUUV+4BXfCJqAJn[_2<9^E#(Up%7"3dY4r3JXtqdl46(bCUJ+4d^s!4K!okOK/\pab$2WLd6RNq9:.bPhfIo/_!cKd=B^n.-[<'+!PNVPpO-rW,1fjdK!?8JB295IAn]ro]k2r`QF3U6kRQrrD6JqnM'MqcY*5l$`R3n.-UZ&]WT"C.N`rDp84]HQ=og2#$N1QiMP:2@(Nd)8R=(>4pSuIq;FTI_WMo#_-VWrd?H7rW2(Sif`XG[;<.=Jo3VhO'7ji`GjL*Nc(MX&.kf3E4P78Se&?7=JDfUAE,:R<Su:)#bGa)Y#e2!fDYg3qNm*,obinGincPP2CaQ73;4]ZRN_3?NoCpee5B]gDH)dHO69iS76g.mSD=+q?VgG@rmRdgbNuV/rr@Rp*<%B#g^0HJ?-:-Mp\t575+M.:IhJiAbke'=FkXd[e9W0^=0L"Lnu9D"HN*C.,qRUTC.n$q!.]>$nNPl]lC`sY;uIs/rAga9&Ye;(RZ4G^@Xa=&f<'B''Rs[irdMVorWn!h6iMKe^]"8p&)pTOR@dGZ0"Y5RqN""i8jVGn(riAH$a>*[!2B=4l0Vfn75+#,J'Z10J&*6#Zp3a%qu6ZS*]<o(C&\/tOFQ0(?,+;AP2f6cV2a$UYDsJq62f;5f25c2ErQ,J;kKNY!&+*p4tA<el1/k!kPkM^s4I~>endstream
319
+ endobj
320
+ 90 0 obj
321
+ << /Contents 156 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.0f3214fba97c402fe6a90d13753efe28 86 0 R /FormXob.32fba5fba0ae35bed4505744fbc5cafc 89 0 R /FormXob.e8adaea23b9f6040e62cced2232e9b74 88 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
322
+ /Type /Page >>
323
+ endobj
324
+ 91 0 obj
325
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 443 /Length 12751 /SMask 92 0 R
326
+ /Subtype /Image /Type /XObject /Width 648 >>
327
+ stream
328
+ Gb"0W:MV4IhB25Not6fmTl8?e)0GDRY58:_W>De*7ej8:?2!bq)LU3miaE]B_h4<L_B'JR4Y2c$#K*m#QW_4df;tGHg6J(kR?8AL=b!a,qN^^K&BprE+sXED<:s6ZVUV5%!<<*"zzzzz^o?,gj^5^t;k^;lG3]),o"4e6rr&l^rVcE(I/<Ig^UcD\+\nsrgGgSSf]R<\s3Y.!JEQ!5F89ahkkgUfLHCQ%hMh#4IWt'U"*gL\pQNA6jn&;pQHP&`J(?ZY+U/3ip65;rX(n[3pXaon76cX3Vn2+_ESEk0\F4;3M7kM62#1)-AlC>]qTm&#rqZE:j+l'32O3=/m7q71%8F0e^\m)cn#_!$_0Q%AGA7)R:*u#]l9BPWVs7p+b"$+Bg@"67mWD9sd;f,/Y>T(jGOAHPAH3V^le&t^XWAI0]OtgQ3F(jCH78[;mQZe'3Ao@)VfB3WZQia$Dp"]%F^KGmBblXgRHZs%AEJ\ns3:@8e^'facI(><o_3d)2jHo+5F]iC&'Eh\!2-_q0%V2pg[0<IZi/r,I+jWFI[c2BoK)\hmT.Z$L-;=;h&^5d=%sb$5M5S,DDCC1LE?.R3-=$!bRrT`KlP7/e^'e6@<;j[m9r/B?K^AG:Uc,Ff_Z3%i2$XNZe%6]1A/gTR1"3>FW\Ap>Y]b]8Fn$0f'Z;+q&uI,d'scOS3HR=s*5tJ7iY<%gV'KLk>$JDFSaU4G7QcBkG.pHcK,-4-/,2CJ05?Gjh][DJ[rF'IC8BL8M2sBaoZ8AcmQorWFn./c1>48O3Xo`9W#CbYOdo^:1)lVF#i,nf/FbdbB9gihS"s*X?mH$JaU\BSa4qi1EQkKjIp5_T+(JM;)5P*hq.>OeZO&W;@gBGkJEbcT`.IA<Vk*YpKhkX@)CF^0@ui'LZJ$!%.A(+F*ZBKkbmE^XR5`@cWMHVNa'fjd\1mApGH&WSigIjSiAS\hKCl,o".A(qTcA,GJe'"kGblWIJY\[EqedhHc]iL$)br-o'b:kArb]&p1Ap-`5`oLSD>'+pCE>^cZ3kT;MU&,[.F$f7b<#8N]?ua=HgLl2;Qf-F=)KuBrZsAf=A8KI9?Ne;98IeCG34,n5qm7#OL:taT1g.4_?;_DIH.UdfKM=*dPI^\jYj;;#gRrzzVsrREJ0uP-!?_l_$ik:gAH7PH[+D/UzzzzzzzzJC!7g5QB>mU*tnn4@t[YMP;MV&uWf^78XafM,WK@U*tnn`$o_0;%uGriY8r).#O`IEJe"%'Lbl`39B('^A7.,KB>DtqW@RJs7-]T?@MpD9t,7H^O#\Il/@t)nP[jao/)5''Lbl`VAtrG5Q'Xc:3#oUr-]=H^]!t,^BdPrbDN#Bb*/1@jDm-"rUduL*k##3++O12hu),CDHdSie<U('lQ<`K<b_@#ht18opM,^GfW.&<g[`B,IS>p3T?)4Tpa5`br1U5D*2;ohiV.aQO*<-t53VD.^RD2Sm]IsqU*t:I@4jJpheb(Gi?*Q8c9S]?F_2rkjdUE645HroZ`6;)idGBd!ql!Ab&l@,1mgGE\@9>8=m+hf5/)5@RZ]1YU*u5e\6SGZWS1%$PGrOX<NIFT]4sHu"a<h2Y%'E\4e/@/'!:VDU,"`[])VUSKV(sYU=e46a)^@tf3oN%V94X9;\VYtPX7ChI!K?W[s?K"hIsX99sj_aAf>a`p37%ZdH>tFbG@Q?HRn2uhK^%08JYs(PIi?&U*rW75%cLoba6NEf&Po9I@6W!cM'4U?S7USA\M!OF*C&M'Lh9/kKN$=Jk*AA/3_BbRGE"6H//F=g,j_=m/$9lU-7qWplp]%j`=?778]:93A-XsPBiCjf_EbWo_NTXHhQq.:e7tcNiCGIe:RqcCr*d[Z?1njqm"TXdtQ'PQ2M4C]..)k<YRu"B$.s#HsB6qqfJYAlS-*QX=/t#.*Kg0jmlfrDG=51'Ld:JjYQ#(U*tnn.!lZ=X=/t#-uk,L<YRu"PW2)a.uL&L8t;(-np^fCSk(T&56:g\5qW7)*-)nsifM=`&;OKpJ2lUF!5p%I!?_l_$ik:gAH7NR/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bs+3I22ep=/P@b2b>@B_.@LJ*R15qs`R^;nnABb6LZm';&NaL#d8Vq-_<UifhQiOB`8G+"XrrHu^)?P07:qK=*7s+)\7<Y4%)[=#UX_:D3rn1+X];_o`4"iI#p8_d]%S0Z`AQl\eiJ?EJ+WMVH\NCEOjg_o`4"krSM\M7YG/eo)MpA@d(t]tUL^l;fk((<tpPYZo_dlM<-dhTCktZ]jMA`Pq-=If&g*lJgei0#K6N**,7*Mm"c]_;&pGP&adWD:P&d%F09Hg`Y9B<l^E[Ragc7\"*tg+ISk$/=0G=e\sG6n#rcF\m0,be$Z&f1Ri9Nf)&$W?7<?(<^'X/n,)C%3JliM+PYOB;fc]cfCb6N`ma<-NKZ1@*1(:acfNp9<Kj\W=MDN:'"88-1kmrSRuQRFn3Y7YYk#Uk_>W$@^he(5&@J@Wl!3YBUu*5Tb:+7:T;P".DuNt[D#M->9XkVmAe'7:XaJ%0,F?<j#O<)=-acOim8`1i7J_i9Eg<lN6MLJiCl\Gk'lpjV.,TNSVp3+aY&=D8=0f<%Ur>)BR9U4P+0:\(rc/atlZJefjf?/8m;_6,C&I#3M-MZ?T]VXkj`5LYfCa97R<c#ISPG?WS(5`.AJpsR9eM3d&(YIoY"51\NRIdX]=.UkZ0OK\gU,h"bK7#bo!;??jZ8(\=`@H+:7SpVnn)ANhPSN0>]Mj+I'EO^0B+MFE[d%GgT`E#]<m@BB$&7i-'uNl#>6Z_T>1+($d%M7o"gL4`$^m[+h8Rn5$2inpuF1],aZEk#>6Z_T3R,)jDnAu@**!>PKU1l>Ri8+/@eH%++V>%qL)&*>R#^<j>$_R+dW3P%_2uJEQD\kLdNcs5TFe^!90*`!"aoj#(S\o1'#69QT7S)J]45WI8$&6jrD)/moI4Zr]YL-q-_<UifhQiOB`8G+"XrrHu^)?P07:qK-ck@:G0OOE]L4KYa4GB_p-`d\*LY'c(JO,*Y)n6Eo4RB^O5e)':o39aCSIE/r,]&ek'n-ON_@&b<N.9IsZHd^F??nJ,f0TSHQP5Er#_2imk)2X4sf:G*RG\4hB>'r9rYA5-7C7i8p*E@HE,aMHjKFh6$Qf9lkKIg8!`cZu0.)4D`cUf>D3ib,_#$Fgc4^_a2bOa1Gl/I)Nl4!'e0/r:Z%%KQ:U+/mhkb[]*KMo#8RQi6#VmbCSc-FdcR<PHU%smH1:Kc,RIQM='Hq3bl.k\ikq9diG<T;oe]9R[R<O>V0E7rVc'*5CU**Q/M1C\\)+JqWVtl7@q/;*"R)#Sn,SS::)[SNaBhFSg1cc<^'W`b2k,OVS]N^[&M7k*RCpqB(I$$oAtb1Bt)opEK]H+dtp5#,L>K+gJnoZRomD=/LBk%/oOXuan<BN?60p)4BHP`XF.6IQcj4o%V)kM6%7PlDR-u=l=$;i*d>+q/uM0ok6r&FH1ToC7-jjfB>el%gr4<?D3^UR:G.Ef&(V&.GoMZckrO!r\@lRi>j?:3>W,)9DhVH!-d)1Ul=oiE\X]ZU=t]EJalTbt_)c9_%r]c8B5=s"h/)MObEEslkApA"2.r_LbLQPtf@T\,k$rElMdX*>ZR2$Vap77N\NKeDk5Of5X7a&B=1B?!cZSSPLV%VQHpl7S0ph3/mqA`U02VD0MeB4HQ``0_1F/=)ap6,Iq]`ap/scXKq;pabD>JR+iOF8"G4o^sn/TR3Yk#VnbJ`T4IDJ6j3NRV4j>-8IAQVJULQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql'Aj%&Z)<$m;^Rh3+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD_:d<f9+Vg]^d-C6__n,9j5Y`->X*EG@+Egc^`1+X];_o`3W/eaj^L5"]/=SZ@HA`AosY`N*".j(ikjRV.'D.e:Ke32SlFk\uXN>kqX%soDl]6F"9ms[=qF?)F')&ACY@HE-L31$[BmK0m*fHsc4aQ94Qc/sI:rO@1PmH*I.VS%BVrR])[2eODZjkJ=dcK]T8_s%*rU<oQ<Ha&.6W>[]JY4!/IW:+H`dta5o%P&X&V7A_6hbCCoK"7@:YO=@YY1Dp>Ft2<DNSE9P*jRIqqT4cqe%<eA^\C,D^BDGZY!TZlUFN&L%_BuYbK2b_2@hkBp1KJ9T0k\j:NAJ"I'=C4Qg:<hQ_1mGXWMIk[7Tbu61akr[bS:9-f7oP=,Y^<J,fB9O5DO9#)"qVj`)2V@]BguDB@Ul(c6+P]i_E5g<qSif@T':FH55-,s,/><./X+8g^q"h36=/_E9o2nREBe\*6*Lq;jhsj9LBl>Ri8+XOGu!eR)aVM;<QO@=uCRpr>[Vn%ZZ_F#9C?f*PE6VCnS>lq:6\cgNp^\o97gP-jSbZ=*(.l<TRGDbk8tTKD'kQ,b86/,jWFLu?]I+X*2iap77NpLAC`R&>!c\P"Jh0V2OI%_3mEkG<.T=.`7PA3&J;$,iuiI[AIMfoH2gfZh`_fO1of5B-b8nL8Um'^*cm\LEW`@HE-L1mbP*m'`XYbK5un1:Xr1Z8j[EF8'2=3Am0pDY&/u3nrkeh;qSL4o@lZ3gZ%ZMcl[UU<h[/2E_4=1O+:D8BBnso"dBSrRcOu(1VR$S[@aql'JSH>J*@V>gB4!8]YLh[!TMLZcb`Zk"F%R3qIU<Hh*X#IWO9"\Qh0D,iiuJq-]cipQrMeCi6ngn&J1D48DV4l6bn?B&,V7,]MAA<.<5,m`-AS"!2CJI=8YRTm(7fHR>);CX,XcJ)[ftS4i`!1tt,h4FtD"'oV6M/r,]&QG</_I'^T&S7YT!?b?]F?&:2kO'UIN)!fj)ERS?E5BcSkMn9)!%D%=XPKloG2u3?oK7k9f'G>FHXF.851@b0e?a,Vs%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"gL4`:j:7m&Am_Pf[J:LdNcs5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S8I+*-.HgoH%-$WSba\a^rcFHiIse/E?2/LQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap2]r/jJ,r]j9O?f>'.^)&ACY@HE+fQ\eKj_a8B(XF.5n2j^T4X_lV`d<>D)4_e(^H?F;8hIlRKe#SsnY.&.mY6O5/UaNBQ?R7Ql&\/;XalTbt_0X=1hBZA>N(mkD=>qh<i2ne`]78G]A1kVk2j<Vl)jHAEm)7A9bHR(5%P&X&;rhsO:U;s)-Z_;9\W.cf)=-s;pn=bU[aVIODigPUku;q+EZ#XUb@0Lbp"7l_qt93a?qp5URppmF4Lpu^/*1dgEZ#XUb@0LbouQIOg%+c7/pHHEX<00`ZSR`e@E<"^81o[_&(Vufni0"W/&qP\gX.MAgnj)[mO-*;d[",J6S?8CE]L4KYT@p-4'A)VDJW'd]W)d+Dn9*:Ge*_3jNP3Bq[%:'3JGmJ3_r@#_a8B(XF.8M]eAB/bHR(5%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"gL4`$^m[+h8Rn5$2inpc\\94n\]>1:[enEQD\kLdNcs5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S<G?h?/[!p%t+3\]d'[n)(6tAc-uCYk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql';&NaL#d8Vq-Yf!jbK>+[f]\j%u9n`^.UDN1n337BB=@+mP!JrFMN1nq8d,L81o[_&(W1M3R,(GoqBKTB])'@0)rG-rU&_.rMI5VrVb>pG0T36jmqg(<UJfBIf(47Ispj%Fdmif[<H1h#LA-0%P&X&;s/2tod6FQ8V=0`>FDi9FHu7*IC-1bG<L)NP0*TE[sG7N\kkBol_!$>If%)#691oO0)*ILbi#q,:Y&6f\&ho=ctlKX-@HZh*mU6[%P&X&'BaE/j`\Anc^Y5E=Z2T.bM=62c.\bX[`MKsco=+H/=3D6Xqn:Wrr2TP+2;%PHLMc+\\-&22L%a.]_V,-[HacTLAb2mb%esLMj*(Rk<^eVPn2HfY:h8ej`L'_7H^>!;;e=rg3tAh\P)%XCp3(ELi8BuP8W(:OO'WlQ<C%hk.-]!@HE,al?2H&I1i-"NYgleUW)VrAMI2k<)3.ObKn3OQNseKJ'g`$0pdfVdqRo_*Et/fm)\:mo"fXR>V=?hLQ@KsPm=i^IC%L4Bfk^jb2i(B\QjS!G0cNPaul#kbft_tX).8%]"#IK%fjq.>Ri8+X@LIqde2_LqXe;NQhJ[mNT\IE#Th9s-P"'tfQhm*\\n9oi(i\9JarBC=BXu4SdW(K<^'WHQcmAFZ,c1SD&:[q@qX!@q'GF:?*Zr6??b?[Qd9#f5B[^PV)@S7mXS+TXG;^FSfbK_<^'XbhA>]&p\W/0,^NBrXA$6JD4,$./r,]&Q<Yb#J+!a\P07:qK-ck@:G0OOE]L4KYiIS0a^nRF/r,]&Q<Yb#\I8kfjfn<lP0:ckQXM&J**,7*Egc\d!/j#5qj9.L$ik:gAH7NR/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bpj!--(k!/NupF,o)ZM`pb1Qnl4r3I:/OXak!\II+3/_33![-^S6b\K"X6=E9i)j>&83Qc$rN9.gmM>_[snE`i-FSKaEheo*Y9];G#Tk,R1mTl!ugjh#a2Qg]B,I#=FO\I8kfjfn<l>+Ec9.!KB/7I/LK_oL6enrKj'hd0XGDp%Cthg`?+1c]3$>e[teGdY-=kEBTZQA7AQF!I$hap2]r/s!nl'@WFYmUji=6WKW'FS]K3bJ%/`X"K.=[!m=Fq<\u*#iuljaBSpQE]L4KYSPQOld0M2aQ)P4@@O&6<@5+r+;a4a<@Cq,fO'..qXT^)/NZ\Pfm^JZ]6`"@+739M*a2if^8bFCh[`n/pDA#,5'X>9?#895=d.$;jb%]EqnDnWb_6<D[d1eVYkUA,I2Vb%j\:st$/.U-aQ5=AX3Gb\9r%Q9Ut`&Q]!5N&3KVEmjb%^8qm!a@beoN:mL8D^[Khl9AS1:kbC,[7ZfBe9j'5>kd='O<?OS=6\(Te\f&UjRq-Yf!j`KLO<XdQagEqPFo4@X'?S86G;rBL?PMAl2[qe*ggMka)E`i-FSb@O!rjm(cZ>&%d[qkGTI2Nt#j`4C)cK-ZnLRDqlbd/X__o`5MeA&cRh#Z*^K\beXi7@5$6!Dt1!i^gT0:/guf<a^M7#r#5ojs^P\K"X6=T7.nnR]6neAl:/M#D$M?XBk_qlrZWhT`skrRfXpgiAhG5V@hW&!gHI^;YTjCN+^t!.J"<k<^eVPn00c-GIfqbNX]8A=7's/r,]&Q<Yb#IifUFP07:qK-ck@:G0OOE]L4KYiIS0a^nRF/r,]&Q<YcN&&;XMrB@)P/d"?YEZ"l:ONRV8LKk%6392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXbFG@%^g^+<5,M"+F,o,SG:R&=IigbRI'DZen]>?E81o[_&!gHI5.M(0alTbt_33![-^S6b\K"X6=A*`2iTBFmqQ<qMFn>+mDI%Y^YeEkAn'8[pGCTGVVaicUNZsfu+h8Rn5$3l2b>6sGELm->HN!6mjo)'hIf95sO)u]gCllj7f,(Up<k"8']m=g@IG`QKXkK)Y)L0ioE`i-F4lUkbmFM!iH3Sf(*`c>0[WP[;Fl1g,\7)dleY'&/)H>2Vnh0f`T(qR+jgSTE+d>@9E]K-/gJo'7;e[bKH1Bs9=SZ>f:+gI:YDp`.6(QN[g>qdQZVJ[rFIUFeqg.u^Utb:Fl(FY94)\,m>V0E7rVc'*5CU**L#I\sF1JHQVo<ZoVT@l'o"fYMFmSf7F5!qW:+nkV[7R[lfKD==a)q'h4"%HW\Qhjs-e>>rG*0t\0QK1TI'=YFQb15r[kki]gqA]hACk^qHF/#8XbG5;+5XbR@b[0km=[L7^-"96QHQopE]L4KYT@X%41VG?b^;G:o9AiXF6#,e^'kCkjfn<lHB_YUB4u"r42*m`^'$Q<0f]!'h)s]nnmG%Y^indZ)p?]EgU0R5)-4QE-C;Wm#O<)74Oi9L27sNIEl-S>/`/=Sh*:UQU-\T-lhrjl[\`_.%iT<>M.L!-\K"X6=T7.nnLaP7jo3XWRYR6#iT60E@HE+fQ\j&GqgsO_E`i-Fa^sIqbHR(5%P&VP\P.Bk)&ACY@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-GC#+@ScqdVG&TE5TFe^!90*`!"aoj#(S\o1'#69QN83=\I8IXaCP@-6S8I+*-)nsifM?RU\DQ5:]3JS9J1CHhYVLI?l=G9403h6j>-8IAQVJULQrC9>UDYF$k(2=Yk#VnbJYcp@3N0$<^'VYF8=eWlKu[CbsSJTqQ?m/>7\J$oN=E4D=FjQAQVJULQrD$.<9]8FB37]Y1?l`hlX)bp'P'89^Or_q>U6Me`o'K35FqH<T;B=5K=X^hW/]Zq-\WR>[FVcm6(7(VY[%A/"(BqX3?nJHJZ2;2'5;-*R^":Rr\>dOiq1pKD!o<q<i.V[+iOic!@g1h>1u\fAeiVbLD9W]Esj]lg*s9o&BM[Rql'Z?'F6sF46q11eXWM]qme!G4&tPfqUWu?*%(4'Mh-XYWD+2W#&mo:Cc2X\iu-8/g8?uYk#UkrUo:=o("\F2ug!8[f0VoE&SXdQRU!r\IFF<WnD#Z(W)ribsq<^:C$MMOirHO0C:OBXO(ILDqE5op<TK*6cDnU_H\]0::bBK]8oT]E]L4KYT@Mm>i45bY"`ih<"nAKO7fl*\6%Qi/lPZ80AksI8J:^m+DtX6CU'qLE\=91C(F04^"I#>p+R1N#;1.>gl!kMbCs=uItgOE1t_i<"<s2Map78(X^fuWHemK,Q^JrDFmSA9b&Wp(&\4Fe8!Sg:SfL>aEba6IcY!,AdPL@;U"^u<EnlR,T?F"]B$_khX1@7'OB`8G+0<eVbB4*BbM:(tX`)scI$>H6^g+&%BRE7VRJs=oAaJGu3ErpDkON`$mdWRi-?Ipj&NO2B53bQj?[fiPE`i-F4i6Y@B2L]O&ah`jC@BT:b7#DWbMsjb/$&[dVhI270#+hUHhFjiICXagg%KrK<o)S2Gpj0Kjeru(TBj\fjtXn&._-O"5$7g@(\&NWNnrTL>i5@i]$6CYE#[BB]lgep[1.k7,4E#`422L^3D/%@FhKrj0K&G`V2oj5G#"S%^)pQ3T-:`b<^'W+RJ>(fpQpq=^?FB:iYH0%74s@\&!gHI^1WtZjnm!^3qH-B81o[_&!gHI^1X"[[=6O!<FHaa(6cpMjb"kGM=:9'1-@>&**,7*Egc^`1+X];_o`3W/ed+I@'QVY+&aMQ!?_l_$ik:gAH7NR/d"?YEZ"l:ONTb!pGZH.H#s#]O8I1'J(OP^S,LVXD=CN&IItpNkPOC9[e$B62fH.._t^:\U%^[#D6n/pg=c7SY@l_B<9K;sM#$eq@B.rYW#\[43f!;%5OGrYadh9XQHPf1s7sS4g6D/<:\%7Vhj;meIV03>Q]LX\=*(!%e^O?bbN&nmmYg?'HU%JTr*&K;\<EQ;ESji]>s+7;Qf[SJmE=QG0AYObpAb-J5CL'?O2'Le'HSm?dl2F(R9cF!Djm-'D-k[e<OR6kRXFeY=)Zq@rQH:hY8m46gah4+O1RFAB#_CW]%sO8o:)6:`dM:!i\Tj6%T-#*o-ZM?o"/u=An-1"?esK_+^I9RHBqK*1T;I/eBuTUjsA9--EYBODd-fqe)*",qVgZ89_R^?H03IP:Eb(Rc0P;)m^&oD*c^2YfpkDk@,p^Mo(VLpGAR03hm@#NpmrJ>8,D6eH+&EnD828so'JYjOn[V281nu7rl]fg+91KTs'\ha)hj(1<ZTpGkqcn^-L#/IeUQ9g120\;IJ=52S+i+)83X36A063@ERQ!O\rZjYo=T10r#(c+UAb]u-_i%KF7SQVp;G9&hqWTZ4]&7AJ(&nkO2bWYQY2oPm)&>0cY2TGV9[++>O6`TQ+_UIQoh//nDs>opaK`ddVhhBo(`*-ZdHeRRu-U.nkTtKhm)DuK-R8jB#d(&C^VoDIOBErgOJW[hWmNR-'pW!s6$TcpYYuIIqj"LZa'=HggY$`])A>9H]J\eK$A(ogmO\m'N?.dDhan4j*ll`RSBqX`uTWIV&RCeVLD.03^irMB23o:q=<[LlD_j+c.k'WNua6LH+mO0RT$c0j;CZ4X#Nde9fY;l9O::d?aAACR+Sn8H&qF<['RRZ.cho#LY)=5B`#,)2l-'&Yoa5.gKd&(+.nET<ZQLpK@fFNP<A-t?[.]or6VC`A^8n_s86.9b"_\-hgRM%;>SXg1]@EeD>@dg4%`\?^X`(-M[eOP1\injbBkgbB=V829)]fC%T,j'I6sg3BKhHbl[mADBY248IQln(EM?]%rY_7bQg:K!dPo4NQi=&5b]-BB\_QkK3Le4f&U,PWke!dBCh>imUq(mJfd6q`i$:fgo=,T^_2!bMk"Pa<ci6'9jeciD#E<=Z[&[#:Vio0b_jBVNAG8B/h^roW&'hi,"q,._p3AmA;b]Vfo!l#W2;G8%N7-`%%oJnu:7V5GoAs_ir+15gE-T'h*K/D-nrdX-l<M'L?LPb3e\.L/q%Q'%VnT?XIV8AlQ)kBi*\e,LDI_h@BJUP)lDq`&aRj]Ck_7iB*W,?4*PZcETB),Qs72)\pP6bM>in%^J*?:_DBIUp:[/lQ\i8'G61Q8pW9.U[<hePRHJ%b6Dt<]YkU516&)=_UcA"l5Peo6A9\h"[5JcU]^="=>nYbAk:35<r-]Z4+Lg4g5FgI^SNdO=njRVLrC.Bmh57*T-#Ac%5=4o=!bJiqN\aPWrf&,!o$blOZn3(,>iqUK<;\.4(469rnKJVMj__8X"Ze^!'h4#M\d'FaA7iZK2a1_HC(\s^7NKdZP@+pVP$$P+%3nmSrb5c)LhrjjK3Hs7uTB^57Kj4h4392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD\kLdNe9Nnskr4n\]>1:bUhg3f^Whn$W&5(*.peF-nio"gL4`$^m[+h8Rn5$2inpuF1],aZEk#>6Z_T3R,)jDnAu?nKR`LRY?R@okT"jbE*5?2YI]"h>$LalTbt_)fhgGt75hC9Vc'?FDDODca,W(YADVDs7)aMcZt6_3\ASD7b!q=56$n4)NbQD\#'KQ8ItN.%X=cFEf?W3NRV4*[d<Cf%\;f><-@NHF3RTR4aj"]t1`lfCFM%F1I@W;$aX^gJr+)DNh\I>&PecN-B1r1Yk:AcFu'uIdlj8ZJXpWhOJ&)o(h_C395*^q-Z?T/oQo\M:fO'Bs?cq_ff0/0?Go7PI+#H[Edikle<\#LTt"gfmIggZ!(G/]bba6AtD*^8YFtQh.p7ER/'G:E`i-F4[Ld!ft#e=lh^lJ+3jXR41F5J+q8R<52,Qfn5RSNgSWm*@BPr_VD#*U-^N/8*L>j2Eg\:!Qc$rNlZ$r*]+8_>][MoOqPi)MjYET9*i.J\\X]c>D_L\TF_tNHQFXU3l/RDT:--X@2ST_c>fW/RHnKG"XF.5n-^V1'/C0.8+#RD;CY=*GMSb5JCNo7ES==FuoeT)[SP'meI2_kSIFW-$Egb6A/r,]&etZPY/mV+VoVc#DRJ+2*r2Ee^:2`do^@E5CVlqW.XsS17r$0)V]RKK@i/u.CYk#VVjSQ4:9?H:LmeK@G=Y,nHV#5].mV;,Kg!Zm0..;u8iLOM3FmcuT[#U^5,Z^Ki%kfu%ANgp@**,7*rn\I]*V]HS;nlA'eF322kD>M\rEuDXdE6e$D]B]KG>B5!*fXD7.j$=Q9RQir(G$hu_o`3W/eaj^L5"]/=SZ@HA`AosY`N*".j$=Q9RLju(6ZjLjb"kGM,,bA6?5)fI'DZenU1BQHg:>[ATAXgifM=`&;OKpJ2lUF!5p%I!?_l_$ik:gAH7NR/d"?YEZ"l:ONRV8LKrs]]a#="lM!#EEg_"@hS37qbP:te@HE+fQ\eKj_a8B(XF.851@`It=@b'"Pn00c-9esK$d%M7o"eLqb7?O5DqB3NMQ<5%V5Lla+Hr'Q;fW`kP07:qK=,[44NcX'Lh4,U>_[snE`i-F/R?C<,]WRth>1u`NR$gOp%iE%F*6":C6bpgcC6tcc)PfoEui*_FeM\c^CYE'(6ZjLjb'u9qJm4mm:M]iUU4lY[+h9Gi*g33CS/7^]2FE)q5'1rY`N*".j(kSpO/kugLb5fQu.k\1"s+K]")P/(>$=UIRa4sPrs82)&ACY@HE,aK);g^U"X,E+>Je>:#OV&h:AK$hCjJqQ-7\<1+X];_o`5M'Yc$'aiHMOqmGS>q/XsDVV5`'gc+%1<@3d1+Nrj_:G0OOE]L4KYYOcdb>g7"fA0'k`:`4;7dDLCI[)pOi6iOR>^gtZ1+X];_o`5M1k/RP]sG:J\fX"ndF"N;a[?$of_,3tgF9O8IbEd;/0pS"ap6,Iq]\57$k(2=Yk#VnbJYcp@3N0$<^'W+RJ>hu/0pS"ap1Ql';&NaL#d8Vq-_<UifhQiOB`8G+"XrrHu^)?P07:qK-ck@mfTfH;nnABPKNq;LKk%6392gp`$(HJ+:bpj!--(k!/Nup"$diH)$&ZXb5`*/>R#^<j>$_R+dW3P%_2uJEQD\kLdNcs5TIaJ"ot5_T$%*6zzzzzzz!!&#Y%o+1Z2Z~>endstream
329
+ endobj
330
+ 92 0 obj
331
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 443 /Length 107
332
+ /Subtype /Image /Type /XObject /Width 648 >>
333
+ stream
334
+ Gb"0;!=]#/!5bE.WG`8*TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!_%.dLZ)u~>endstream
335
+ endobj
336
+ 93 0 obj
337
+ << /Contents 157 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.9db8d8ed16e382920cc1c7b7979eb51e 91 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
338
+ /Type /Page >>
339
+ endobj
340
+ 94 0 obj
341
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 252 /Length 7888 /SMask 95 0 R
342
+ /Subtype /Image /Type /XObject /Width 504 >>
343
+ stream
344
+ Gb"/lD297RIDAK?'M:S(8h%93&,?c-$6e#i6:2,4/LbD,:afEc'_9*4>9P9.V!do[9>JLQY+VU>Wd3r3<K]C"FX!`_/DW=P>g#Ho@]Pc)bP0)@AP:G*=fO&V^:WRr]!JU3nt4UkkO%t4^E7sKqom@0cKoWHgY(8nh9AXozzzz(m6O7qY(+Y&B&`&4AQLk&U3/YJfolZ"4%V`6,XdgSfe:_m_JDs5nJ#@SgOeqLc^@ar3m.e-X$:mWg*H0P(_q,O%utMHd5`1(b0jP/t^f=>._=jq8g&1le0lc>'"/F[]lUc/3sh8(.4/G+$HoGfW;Uo`u!e*I!U%So)q@t)oL"VQi]sh^O2]@Vl-=4e_4i<^O3R_b`38QV%<7;]\708BDRtf`%#F"7-XMHX\MW<]2%+dZ]Zj_4VMfSYB;WaX;L1k:-;;`6mlJhcY&Cl->JbIP@`L+fjHo7D)q)$c)D=s@9*OfQ`<bndmR2UXkHaV=_"fP%<K/8d(MIi)<5uk6b0aLTs2"j'@.<pdE*6Ao9nSfP:&-8r2K#-S/]R?_U<g)VJC8JD&kM+:$f.)oD2TTGp"NDCU?gY,A5(6p*U(`iT*GRM<>1sk[]Y3q.b_db[sYlA@T?R;>Jue\u3a6+@"r_l9JjX[G7;0o26Vi6T%),*Ll,[Gb-%6:<#hrc_aXdlrW&Ek"JAJQJoO.=jF:nU\)ijk>guX9e`.d#\"alBV&"Z\(j3QloN]V#AuT5:nfbFmN'V4S"H%URi+:A5;-X<[t4@#JfqKjN9L(H>!j7HCND9!<D,8H1$N!"qJtRhiCWjFDThooo^*"[!bF6Y!nT6l[hUpH7SZ'A&4@mU<6ob6oQ(.e+:(:A4AQLk&U-Y&H%I.E_@q0c+:'1Z_".[p&9.rH-O><[3s)!<%0-C_T<RK[!<?LhKBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%N7IOuhX%p6Zb:g_Eq>2VpAk6or(LW`hq$P,*WTSW9Z?U]oD.<.:J<rb_u)@O]X8LT!63(o4E"E:1juZorQBF,!+:CPhXdT+='&&"(K:/*$9Sh!0JTHaH0MoAb+gWMGlWAO0GVnA%TfY$`>UiL!&-.)3BqH+e>n<$Is<"7?ues8IN.NtCbC,'[fHJr#lHh:!'o>tGlWB)_=IX,EJ*ET!9.V'T)T9#!)/(uoR*;i!!!iD7un_1o)Jb&KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%i-><Q\A@b:!-*YS!<D*`cN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT!$H1K49.Y%i-><Q\A@b:!-*YS!<D*`cN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd.MM^_[NSd,7O#!<CrE#4,h!<D*`cN=/`C\5.Uk%t(uiWIL/!8Q\oGlWB)_=IX,gCE+G%J)IX!-*PP!<AbqcN=0c%A!e)L`8Ge!"_)6*WR=#[a=V9!<?LWCmF/a!2+,cGlWB)_=IX,EJ*ET!9+4/!s$7KSd,7O)a"W2&3"hT?sBl5k<DTNA[M<m_=IZ]K&g![j#`kVLa;uq%t:D+%hG6:fG5m]s4cuU6kW_iq7k[pZUqO('*)&hc[YP1#pP3Xp\_-S%+"ZpZhM`uR\,RmG1b>>O0mjmZb=);7r.#Ar4Sf\QG%:M<R]@.2,4P5ZZUU///$:4n+iMnXF9^7erMr!ET-ELS`M,[L#f"$X=HhXYNUT$s5TM[Xa'[I#Cc1/ikadf"[,)];mt9KF^%mlAnU:"q(Bt=c8KEUgMS1t(eHhSGiI2Gpth$jEsqDSEKZ]j$5WQkN?m8ZT?f`n:J6rp[l0DXSc>2Q"[BbN@rp]+:Cj$]]X`;I:K5N$kuUpWo1jqUNRph2N/i/^j]>3Bn`p.gId6V*db/\s??jldq7bf7rDR&Bf$<u8oD*@Y*Z(mIlhl-1CsgPl/RIS3n)^<bI3:)lUGcZ4d;S7Eq4qP-H+u;A\$o_8&`cO^#31!&;e:Tf%>EPTPZJ#(kOl^SVJCBEgO0P`:nE172gpesg-s,MW_YBpMuW[h.*o[!B52_^O=G5;iP;n!(_:PDYq]tEnnq3t_0(a`g9Wc_L-"Glj!RV%c`&j0?[D>1\[O3(rQ^OlNd<hVLs5&XdQ`Rc$=?hlg,qooBHB`uiWX&T8r`YtIJ)78C@(c8`VH6sq;,R`8o'NhpTWi::20N`SPuXJO"OVNm%^^_Q#Ba2hri@<`:IcVIbbh+7ii7kJQH`kT6ND$<"h7*i_M_:4F_a%D:e]3P4dWY#Ni%NoBT2K.0id5SNW48-^g$fc]9EQL'AO6C9of4V:(m?lgGT08Xi]1UK*R:q##kQ<S<*`cerWFG\H"l/CYN;g>e1(]RE[qn0+k&^-0#U;!bggMpA%ASj.\`[9$.q3VhCW;QBMMQS)RXI/1h'O%Z'GP8Eq+cg,j(0cc$21I&HLM@=Oq&l%fI0XT`1*i$P/e+7k$jBknJrL\IZE&L\Uq7r$=G>?O%UUIJ+f!:dUG#o*Wc_1NboDe;O?`5u1PDreu=!%7@[JaIW5@->9/cP,bP\4=:DpV985!PuHbphKAkE=rCbNG.`^AZ0]B:i8U/O(u2'8m91g"HkRk1mn^e:$Z+AM^=jU`%SbkbYQn7[qjtgL+s:C"W9gT#Om_2X@ZK9lI8lGe#tK)k=WtU'mRMpKn<+?LPYV5Bm+/[hHG^^OCSkjlEDiP34V_.*Ye-D!lSt*edtD#mAM`oq&@qhm=H",D*k6o$pm$)T\uT&a)8GgXqlU0.MBpc\H_`&GmGNT`-c[k9kYN0"gJN%p#=8n&#B[H0oqhj=,;=]uBa<P_GEpgK6Y;(68B.QG.P7gudb0_4H]hH'2/lHu?:7P:j'=nDd"#\dV'9AVRMiSY$`M-#([7Fs\(J<2s2LY\IpA5:*AHae34OCXX5'Ceel,<Gf&p3sDZrGq1b#pO:^cFM[SG&,msp`P6Kaimk)2Dqqkm?:"VXS"]/Pl.Fja]3)1VRWgk9<,mo\p$mDcV)P$U8[#o&HKd9"Bi4?+Hrn>ZiEd&"c_1N!k?#Cs0jj"5^[lqjchu=>s7"qo:FXCMrM@cT9'LV>nL#DSB+,R-^AbCF2tDYJIJ'Gd:/>KT^7q_%``H34=]Egrktb8f]"J$$RCOq;\mV0dVesLIBl,7V.PrnrR$L#KXUS9I>%>^,Eau1cRrp_ce-f=#nlEn2Eo073"j\k"kj[?q>eG+=8hu,soU_l6^3r*=pT4f>_Y7&FVQ[(*blN0e&Y>U2B<?UR2XV8J9g,).aQQ,;bG+"dD@E,?D1?WQfC+Ujq]&e44TDl4ogLcWZ[QM+jcNnSh=X8g?i,hjs-u$dEoF73Gjh8hB3tLG[J^!q@d]WhP3(41hq["7F3l`7U`&gKleh`@Oh!)s;6A?&[51CJKf,.p^q/#40nU'A)lh,._hu^\NNoL#f&\_c0.8d9C8<=*pH93rnGM8F5*AM:k09C;`t&M0?+SPLrqTGGq>#NDDR-am/)P7Y4@c>HDT_Afn_A%-eRLMm_Tii8W)j^u]blOfja1BinpH'qd<;-L$PLd8pskH#U:^uJn_TOrS\Ml/O+18kjAV3MhVu/^Tfhq`kL,E`)dM9";VI\>Dnbr,,^nd.2tOtc%rR]$e)eEp+).'-gROY@p0(AXi0nE)QNot^ZDu?kXH]$ee"\I8>$K^Jc0O7hWGRSoD6kirD9E<%bMlRF;KCY^d07i<Hhk]0:S(`nlCWRlX\1nWl.'S$Y$Jf6r-.8F<SR*cK%iSadjWO,r2[QYn#K,]^N&:N@kaP3=6V<NCR=V9iQpX.^O&52\[H;8iHqk1.;&mtmO?cMRFC96G?+L^iNmg$g'm'i;R3]V)qL7;%]hg@:U-F<r9W?F;<2h%m2)$\:Oc6o+[s45=^0I]dg,Hu>-._gNNoL#f&\G[C[aL`ZETV"Pc*u$k^qu%r&nkO_"5oe'$oJ2lX'rdq!Y#qAVodh>OHd.DZ_["Pir);Qbq^.mQk\U@XA:)Ws"6A`:G'5n;@F3"J,jSP/Qt$^[qm:OT_6\L_AhF0Dmpu,_>+ZU-s;+07Jp(P/-Yh;3Lil'1<_?IX&B["ooc`3cP,3rqrf$Ilgg-fE(4k.ubG+D`40$KH:%Er)*K'PeT0]!.c_NT9Sk&@,jgj?7+t5+W-tZnN6eFJBkf'.\jgi<ROn=nf*h!Va4@abt"Rtk7%=YCSCS^03[pi6*.`@MjCG,c/6bk^.o%9+D6Vi-`&u9beW_Mq7oD3K]`e::872o:&[YBl)V.#K[Up=LtsZGM88gXSXR1rb%aekf4b6cP\fmeUb\qfHN1VK8fBgK2u#r9g=JZ*j8$KC*/u/f6Rob[AsZ7pjQFNAHoI8apjE-mMCj:LP_JnrF_e?kms4Z8;#.EUic09.pc*Ti3Pb<ZG:r:65D".Ff-UK*40Z]mPB+U+-]D\#DnO^iHd;M14[8"P^>Z>LnN6g$Yf6'p1@M]71haR[_gH[:a7FIO]1A.;]T1D2NF0%<c-P"URu-rd!!opMmupZ5EtmVlMM1kD*8OWH9""P5bkI!!2l03qo//1DP'YO<h+U9#\DIJj,^>pq!'o=]i9t(T!+:EJHlE'9\D_^u!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!6!-,4o[D?!)/t9oK3*RF:C>C!"_)6*WR=#n2p\9gl1(\O#o0N]%#Ih1G^hr:aRa;I4Af?Ak-c2c7Z:p$OUI&$59GaGjFn.a!`RI8meP]qmqlj.k</0,US8(W0V"#OS0=fguXLHo9n,6)BXG'@5HFMVD?tmIB&UWr7+ugDn0%gkG?nX'"(/84\g@bicZ\#3@D5q+-Ir/E9)9!P8IP/*Eqf^N1!7DPH6Hb*SS/"@'^"Q%d^_*JXP>tW9%N9BC:8NG9KbP46Ff&A)B]u4fcNF.9A8WI#VjmN7u"qG/<Q'5T@`2q986p^]4:m)`Op+]pa?Hi.DR*<1cgkKi_3J<XRC.Wm!PJGXUm4Qg9df,8RcbO;)'KSQBT<[uF9p9bD4mIcE?U]]qdua+q--P'R'+]dd+Jq7?Ka)_^n+.Lm5+cE6hglf(fLA=DZaOI;3n'=T?h^NT!J3Ns$oIUQ!N`gS7]Nos,$=3IT);qZmf?QD,eHGoMJ`T=*WlgF!0k'ZbYe^6cHC5@__,5-OlDHNIm:!$IZ(/(\*>^h^.oe2jeR[`%dU[LQ5:JU&`LE9A\QH&Mhq];5(#D,9U7=HgCeQqn=T`[r"c#^MkAudDP*m7Job+h4&kO-#FoF3*@hJH?KTJ6bVbZ2(<>o9Ck;VA-AF2pDV#&(n"4MS>5QDjfVmG%*CpYNON^71,I)pI0K??IW:WiVAUdi+CGOGJhJQ(ieV]TClX(\`$g3$j]'>coZB1nD47i?F$1L\&/>r@uHOT$P#HS3E/dAN.$jg1N1/b4_\'&$G*?']j(HSgRNF2ZEH2kHu2$ZpK2&DcUc-RB4[2=_;I')!1S9]qb5=.%<.W48PbrN9=VK-K4bood_OCaf,3iX]m`&hAjQ,D<>]@jXOKMo@ZUUFh[GK[ln2?\UJ$N?YeS?ooO7fUQ=S<&`XEHHeqHD2k.9E]2!3M+":0tYkt]^525\.rUq/3e)rclH(N`8RrjV&mp\/Keq`m<S`QA>Sum!B;U:\h)5Suqfuj,8*_'^-T!qZ`K]dt4D/ilF^\k+l=>HL:?OG=.[mr&'G=%dFRY'_C2*WadI2'qDk':ld[39<HK/!PU4-orC3fS]=Hd>dB7!Kb6biCmYOJF/%^N8S`fZ*OZ'Y=$f)fn,[c0EqaC[Ts)4C:17069_ZgUQi5LA2,cMi$C:g2,'5pY1proZ!D[m!3Y!V`;$P25INt3XcedD5t#*>Xrk]CND0&d(PU?<+e6TU=NqS!,WW!H[_?r0Q.%,AtkkmL@eXFORr)3rTa)&=3i0fdIZM%6A'U.p@sLQSHrP2cn^hE_cujCfnji?RbU-bm(UX-@(25'5$$9;4e==1_ksn%27X3t)9dRN2D_dSN[;GPg?q#'0gB1"=\d];hE,?i)JU5Onb`rH$!i>ZoGXA3PFJ2rC$'].+C<A]2ed=,.6o[93hA!-=]rT4>77%[#&%(kNH5b`d?qdl%l,KZGQ7`BL$+g(!5o><#69Q!4:_E'2g?AD+E$[2!'o>Xjn\9372n?9(BEBr+YM(C!.[ck4C:3r5^9(i_m-bA9hPdW%BO8tgP+RgLmKF`-">EI&b\KbYsEr0ZU\+Z%o"g/]P$<GB_WXAiB1i#H#U7f&<%27Rl!>/$DRPtgQ$BqoC`]0]:Tj$?ZL@:52=3#m=@=E]3iOTN-EG.O"`=11M#4Og5PiKXX.#o*--+\R+S/'_u-[RjQWK'XbZ"QO88I]G,4!dF*#X*8UA6UqJ)hkZ,Xnc,#N]KUH8H+LHsQl^YB'\/QK!@W[Vh0`%9oMVg_\MH<n1V79,o/S@rO7=q5ofeJm8Fk#_u<?:1GMMU^m][_l1SD:F&B`bQ[8B?/,$QEeD@`N(p<W:t,Mhh>XT@RK/MU\n*_!_W()aa*0ZplObQ'AGAccZbJ2H<u*f\b;6KIJRiPkM;:fD+j!nfJTp\`\;R9eWtTSf:J`$3_t(=ZF!%r4UlU(W7UkNrFqf[hh(CjjhMJ?1guO1m@ER#VVd`J5Q0KOq.1F9Pr@^V&`N2qY[5mph[+g3f_Q2#Ps2Uo2N>cKh5%*C?]lINDSOdI<.ei?7XI(L;k$k6i_Q^:KQ3LKWCe-rRD3@j/^!bM*I$AL'%ht/%=/-KAUV)PILEtnW)QMf:I8"eZ(#3LoX2rX0DjLIIu8hb<d7!jF!Z%43BD=BVUo;G&NunoKD"\"5N:?dcK`<'M/=/lkIX;e4YQeh\nC7+)@Xq25J)X4S_BNXI\A_mY@_g6LW?mr]NErWfOBj'I49<PDWH*->:9t6T%BM\or%iPgG3:NlCCeo&DriGFjtkCi=3?T:IEH0"iX/Xf0"K!lsdH%ZTM/'jOZ=3cZbS5H<rRV%fZZ'VnLg&M"@YqeQ2-uC'<'rLcEh-?J=C0Se(P+OlqA3a3r=@Q0Dk@7:++i/Q?@d_;:T&2#=r+0V8#WB\;kQ;Xnpt&l"mf*U7E?c2JU\r-YQbj8!T@8^E;UQ0)@R`A4L^\YOCtl`[FES;f*k'C<_!Dg36CR\(D*35"G?H<oubBuuh/O@Jl=*1$5D2JRSOeC!X[)KL;`35=r!f<T"H%EJ)"QP#=l?!I!N-?dA.eB'^[@Z/7dq/4UucSrCaIUUM`3KUGQLE&a/G/'%7Y!)$tC>L<'(Kh^3bindBPZ=\kC\=`0[%pc_l=;7J`E*.G*5V4UH<oQVnQW6\?7b`DY&c]8p!+]4Ek.7Up9lg%nF%QBm0K;-a2peW?`VBmiF;9?5;c?a;%oEW*m]%o:3\r@]T/FQEG3<*p@d<T]t:JggB0Q&1<LEQA\4oWLK7)mD[V%*)_q0&`Ub)QcN=0c%A!e)L`8Ge!"_)6*WR=#n2p\9gu*GXJ@NGe!!%"kk5bSB#1!AO`!r:C!/MRV%fd/"GTHi-DX]ag5ht:C!._Sqo)Jc1KBE78iWd^2!5o><#69Q!4:_E'2g?AD+E$[2!'o>tGlWB)_=IX,EJ*ET!9+4/!s$86Xlf]b@(R*A49,?]zz9S*3KGCIGc~>endstream
345
+ endobj
346
+ 95 0 obj
347
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 252 /Length 65
348
+ /Subtype /Image /Type /XObject /Width 504 >>
349
+ stream
350
+ Gb"0;0`_7S!5bE.WFlN5TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz4pJ6T9[`~>endstream
351
+ endobj
352
+ 96 0 obj
353
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 265 /Length 8598 /SMask 97 0 R
354
+ /Subtype /Image /Type /XObject /Width 503 >>
355
+ stream
356
+ Gb"/l?&2b;IDAJt$De8e;@5&;+V0."&A5+o1pkWXdZOeAKn>YF668hX$6]^&Ff1.'!\SA0"YE/?c.K.u,^!ec6r$Z`g3"sWQA$<t<bogCG@\h$V<D\HeWqcTmd+i[pH9VuF7-U1YqpJ!qsh.CkKZ*NSo\Q<GL)eiF3aJ;zz9IX=njR3D,+Ga/2,YnsS&TJq=Jfol*"3D2Z5su\`Sfe:_i^!&;5nFV5Os^NeLc>U%r&5.h-:rN1lTGJJ-9G7h5I,o!hg<AA_a)U4Ieh1ghm;(lQ]HU%\X`W3Uc'Up.iT.M=UB[&neeGUs2`Sf9kE9=**nLio%CDWaV+dhD[\U1UY@GCrp%=;Ys0I[Qp.!`nlIK247`hJ:*i8MB2NJoLbl`flHVG%mpma?bc=c:o=.iWo$8QVNpJQX?$W97fel4QYGFYX"@5^m$n1r,OQH72._oTL<+=_/c=C.%\OCA43t#9D)0:q;LJUHqlKh-JR90"&-m(29j!pVnqN@ZIjJ<"0iNeG@h,6ij:CtHD`h8L@rDm\r0qfdeeTL_M8C7[.L08OulQ'p(P+`q+YL/P8qu>2HTKKAX2^s`VT\)5c>\/SL/S[m':CtHD`k[b@41D3?b]0!i>IJ7q1=nVTfs]bNpIW*5b%P+`%d0.jPX\DE&'NH=-93B8-O=02@rTQQUF9abUsc<!8h0^<iV[`&)Hr:#k>Tin:Ks_:Jt>(j&2P"f83YMYC@C5`/QgW7[k?aiLXn`%ZR6hQ-8-Auf<o6b?;0:["(Um)6-M_*,Pc@:6g;976S\;dP]iL9TY%qcjlDh-P4I57/aoi>O"9#]PF&B*>>:dI6tC.M.?Q_Y&5sH68Ua8urH(:9"@4Gej9^D\,*!Kc:CmXp3!.28"@5Eq8=gq0,2tlY"@3S2LJ.39!<?O$nOS*L!!$UK,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=<UFHZ*8([a"\kk9W!/M7Rh!!!"<1]!\j>A5=-!._=/I`X5r(>\grBC\%Ni+E?4NFr7l@"aJCo"*7"bpQ`k^\$Rf!63*I-!rZ]ID)q43IG0rJ`Hh3`l@d"07=G%VGXgb4930!(r,,8JZ!i2b@co!!5R7>Yq^N@F?\M/reKP8!63%hhH_@S!F+3J]5%BH`WEo""TX>q,S'kd0h<>c+C^Ep!'nJ];"EKJ!.Z(u;Nc5="TSOtin1MG80.aR<ffED5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f6)#0?rI6k#4`!/MI;%fd.q80.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f8??oc-WM<"[;iW.(&!.<9]nc/Y%KB*%5Af#TGL>a$NJB1"H!!"*PO?<M.`#s=*JD%ds7)NsQ!'gZ0GlRic61P!U&VK-F!$VWh!rt^tOp:uCQq9mK(]XR&#SW=_!!#\380.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#FKs@s6QWiU5Dui*[D7Mr?QmE>MoF.Jk4mnJ+':=]m5]%_"<g_rni0k+Hi+bjSs,LY)m<s-31.1P5iO?'1<IsQ2Ia21s,L'$hl2)l]8Fom4aIQ3O4P./9H5:)Pqo+Mtd!M>IDIg<^T64g/p4GcfEA"(aP:%h"t=Tf_EJTC`\"Llb\eO40(pu)p-!>B2_9/[US6Zs,X(M1#f2$+8l*obD2ZPm$7M<6CFq9RuX#9=]ee-be(NtYRjdk[`u\50p5)As7g5Sn_O#CF%c46EO%BGb+%p.[ut:*I(jiM50HqhS89Hn49*q"1OafE`qIu)TBSRaA:+2EYqt2W:V61\T<g$6YIp=)AP@a;?[DNI'sIQ(l_e(XXdhOuq"Y`]P4**o;BPRr%dcTl]3'0>boUlYF'W%PZRqXQS_:(9Mqt*lY',B8Emb&(Ab6$M^R4(5$L`*Reb]")cN;(g?9h:mBN/!jr':8XC\cEfbDU+IrQpP%U?ssr(8R+Cm+5O*FOrt!=.W2#34&Y^^SI$Bq+oK,jhkeeEt<PV[=e"red*di26CQS:/na&np,YL#<C0'8H-QLe,OLSNRq7g4F?Lu$ZEe$oYk;Ma]fO%8\U?`U6AK@oqjMB;=2jd,=;*e/9C3tiomOc9O@rrIX-4D/7u0!>iej5A@pYNH+QpGHL9eCcg$i4V-W40=";@8.b^M9BL*j<NSVA7MTqn,$\,s-[l.#GQ#EP[2QlCB5*8J:`59O^`Q][m]2/(lV_ZP95+1duPc<p6iF7;"pr*!f;Nd=WO?b?TY="^.9=_;&DV:,Q8l[lD;0dlADlH0*Fi`#'cR,-:qc:[`Pqe.Z&_,md6Y_;c)jPW<aj!1^gRU!>*n)8-'.7.6jjc/j^:(>1q>K<L9:%;=rm?Q9P2t(H$aZJgPe=C[l[`7B5,qH%"EO2C`U%jTZklQ!<oJcVq''>>DjicbT6t@W%b)VHc\YOq:>$Db[&TtB[[jqu<"*`kT`qFVs5DG08B9\3[VfAXHh96T%Xb[/Gi=H7qmRVB-1fQurEbZV\UOKV-Zr^uPAKu#3hP-j>G'bsk..k/e]7R+c8%\N[kU0o3.#;(le]n:WZ$!`Z34;6e6I8#Xj1'[FYF>7<G_7E7qIWg_j[*]VH2?N]Nh)/%T_>40lb>(s0&7tYP6o;SNHl&gPO[g?ba=Dn`m+&P2p[AUlMRj(bU)>*Mm#@E<AY>c'#8k+'O]U&A_asrqc4Yg4`=X7BB9=b/$OmH-tf-9AY.J"utemK(Sdj]0>>6oUAmHc2RPQpO;nQ05c13raO3E<G2$=h,HZjcYfkV9/hn08\T]7fX^D:F8`eEXOAFjrSZAr.S[@bq1DIXM45,k`E!;FnooM^^QRr1[_F=an3H9\Pm?TSB'D,B'!)4.1:&gF@ccS0ar&*P2;-,SDp(XbBY3lD:1E4G5B,hA8cSa[M\iR']mA_YNV?%kBA`?0nXB.9bor#<-D<GHnm2hc87(]*L\X&[\0h*i[G/r\k&lA=LZ55.-gu!H!9Y>*O@XifCS,Q7+o+5"\+0)tDYB+_J,Ehlpntj5h-[3.n'(dLA(a,`o#B9FZ11;gOmHG)0iQO7H*XWLb'N(uCJQU]`d@6:e",1ck0nY9V?GS,7[c<;6_6rM6[;M%P'P$2"DT?-W(U&=;e;1D@h]m5jD:`_Z/1e-;WX(rmYcopId)VXhL=YIPq,q!hL"8UAC'Yt\!)=!\o>K8$`0Tn>.O=9YJV4V0mRc7g,3,FO%_Bpj(O7-H3l>@.UMI2+Sj%RLJ,AW<4"mQd"56fJ+IY]jMNjEB9q-jrg!04J%53]^UE[)MjdWu*-#TZr_k;7(]Gi=ra,<cm@!j8mI_:PgtmLdhpp1d$.Qn_htspL\1)u0XAjt71J+I?NHG4!Ro3h9"Bm3rW"Z3H.h="/`[EaHak9EHUKi)>P%cPZmCnstjH'65dG44MDr+//ISb(Ld\WW6j=@hV+8`ZE"2&2Kq<f0iVh:F;9_k5'Nk9)&EqG5.R#/I]oX]RQ'r-l'I)jDqOq0MeD9k5L+HcSW?i??BW\7\fhRg)%lSmGpnIOnKHq':7R=3E5;oq0%\a8;<qU`2T,OHrRDnl#-AH1BTD\bF,3j`0=cF3UGIB6]Uj`'5)NRs=eLGmT'I(?F\+>55!RHIH\3*MOoc:Z80Z[Mf<CQ4T6M@F?A?+2#QZ7R,oasFOQ(DE/5nX"^slDpg`<dNrdHL'!TIWG,8[;4Bt-i[J_En-EP'Z&$90\)t^J*<5)U#&,(G^etugKHO"]7n\$IJ<//1.ON44T*L@1s`ScCCf6d5F$5s^\b2!fckFEh>^6]J*k>1,#)R!l4=j/ZYCL=;B[(9Gj);N4+I%Yrj=N)l)NAhVBS2%7H&oa)>dEJH,WN#/8eoOg8e8o-oS0Kq+dd'GH'?6;6!l][X2KCP&KlKf-pdC_c2gjrm"mLOsg/lL@XLRAh07\"s?*-aoB=5pqntk6"<An[XqX1!TG>dr!2ur4@(6Dj8n6bOo4T"r>\*KJ`Hjk,F/0CI[2+>5k4pFO\5W!Itf)/5k4pFOo/Ju6kui\4PX3E!"^lK^/&(+fIGh2O\N.h85lGi1Vg1LXl$]"I^f9[^Bs!\V#VVlad&R,$%B92b++DjncLR4ZQaYp(^&6l1/q#aPUY9aMt1%Bq&GIge,%j4qPT%=It=M(_idU:-A[A2/=C%E$"%78>SmhKTO<p56RagSBkXg&Va4:'37^F%G.Q71EmGo+5+Q%'XQinjb[t"Ar0kebKrjKKe0o9E/-(3X8ZiJe;if)5Qb]X-QsA6)`HgJF:J+F>1HhM!`L;,$3RPG1;+7&]5&cc5EB8LJJ=9'4$tUPVV/GqsRjDu+n5O4>+s*TA^!k/_;u8IGhYJk6GuilEs#pJaAq<OV$tWS@fJ/hd]XCFf12m'88q+RII,K^2Sid!00ZfTRoXela#9)oCk_ie0,]@9PZ\0m[3^Upn0:=)FaZ$B.`0`XepmL3c:at\VKXg*)E-I<'])'TIjmF%8@;t6BPT?!9_t$K!/)%)1<&TcKCB-VOQ(\0X,%f9<GQe(t0uD^'!!!VK/<g,7&VK-F!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;LdCS3!"jkE!<=;JaTDN2bQoNp2?3`9T1MTq!!&l*,S'kd0h<>c+C^Ep!'nJ]<q;;S"D;$)cHjb[FdB$J9:`[Nk2tg<.ro\+fdrn[V^sNq5)cffB77/R6ES`bQTBEN;@BKllNMU@Le"G6i2d^pHt4+gjE%0l'gDQb__BE'AudeSm`?R$>C-/B=j;`$nc['I-HpZ`S$$e5qT.@77d*RF?#7*e3(-n?qK-#O4,\?J[&S6aa/'r)9"k9N:["ouJ"^i4[-#6Aq>9TPg[fHsI=0r-I?/P)'K\CsSa#>3?PN4sL$0uI6:Q[014dthCeJ7OlrF4q@C23D`W#l6n)(Wpj6G0qahnWQpn5b#Ki)&F2%s8X<4?oq\p9'bXmC'g;LQLM7N7NW9<.KEI;3i/m:o"6;L.?J+s+_1[+t'Lak%>eQ39k[^3s^q9(G^@/MUSu5$2,?oTYQ+I-^,s>@bTL!m$<fnql!4cX4;-Xm4>]4hoK<4_"n]G^K"mSEoRT0>$<1C)>B$%CmI`5#QR7k]ZgQSdiolr[:L(f*u)R=`1)342n*:jiH,Z;Q$9pKSk\_ENi\i%mHH9=R+#3m!j+0]aBu^/(6"11Y:_!+$@'-Qe^9#07U!Fl1&6/>]g@obM9FB?9M+_jZR4\!L66$\Pnj'DeYTI89seBFcJOe%FBil97CA\,Ot^!gUH'en%Er&I5gW@#7T>=;ROPalD0T5ZP&EQT7tJIN\Z67Z&n9]Ap6)+HqlK#8+OeN944&#j7@jX>Vh2sdgnWG5#Lmi6-@Llg'<UR9=`jA+&bcHn'?_/Cru!i;Ges^4.5j6T"hTZY7(PF"fgC*]l:=%jOme0<O0uoUlqq#4%rkc]LB7"92Duj:EG7%jH@hP^UCS:o]L/K\omW,bs<W4B"02FY*8ZmV[C]AM869TQsD>Z<?Ks6ChbQtqMWtl1JE/;Vao-io0pdeHdnK"8lr`o2STnS4gq`\dI)H^nsT@JBsglp39oIn`o3AfGJ4#ch3V/(o5^8L:f<E,\2'K5X3(k"(,9_ZHmB6?1(MDFSf^5ghEJA-Q<nsrWZllCW@Q[c[dX''i>q6nqq0I"]@CA3*6OnMi@2)<Xla:6P?090%FhkK]^l5cdTOg!/p9MNf!)ngVUhS^0DTp9#g'su1FC3k,^U0Mhmmf@A3G3\f\CarNS]jX#'8"a%<q%R\&pNVhU&HJdu7VGk^@(Zq'^B@hg\dB^:U6\psFh*ABF->39>+=X7!BQZOX2n>Z3jk%<7%o?5[c<470F9V)#ASOn@>>oA?E#ZK)7)$c=hUB#Z4oUbeY3+)jp1^+\=?Nn&-A]I8&R0Hm)/]frUc66j/;ad3>)O"+%Yc7I89<*sj\00s$U:tA^ZA>B'#eKObRMq@<-VN<H;'n*X-Gg1Bu(g8B&,]3:pX#;M=Q<B3tm+L"<Xp^5SECbP/[eRR]FgN'[%:^<?<sb'QN"MuK@6+_*d1d^^nb(rnf%/E6r+&+a1P#$2YkG%!?oZ.hX[15lC(:4DNA*X9!'nIFGlWAN61P!U&VK-F!$VWh!rt^tP0_4!2]=Ac/c`[\J`Hh3,%gD/0..NKQnb7/m!6<n=55lOJ7m00&QW=DBUh:qiq3V-G*$7gS'X/aKQF<,nXZTnH*O]1*+ALX8^0DJ_LnG0f5r=Y;EMUHDR:j[7OjC#@lblR9UsksmHcE?TH$MZZY+S$D;BrRi`K"+!/436o&c02_u:OrC$+S?b$<`EZq3V!50`Qed4f^+[jFSWgKYN@IR0u*]p)NS`4T6)3V/^!Q$fK>ID0ZdXRnk@9?,qT^5>aO3Ye$l!oSI8gBkr=2FPmN/>r;C1nDsekdh_GUhmY8=BCi)pR9Q)k#tU$rJ#%@G&Mr&Nceeu:R#iqG<*Wc<LU?SV>c>k7oUOuLN]S;f%`<#+e8XN$>]C(Bg2Q/RSKbe)7cOA\U.*60[a(t^-u[fWKY!SphCT#3f3KTeW]AMdo8C!>+(j*DpP$0:pTfG;VsV%ZJB+iooWLB=6A&'Zd+UgiNdPn7lc-u_L"J3#O9?EIgO7f-/jQ[G=fohmfXe:gU;H5D3iZ17+l-5F<p5f?h)-:X-3/R6%q5J7Q>b;8d)je5f<C6dO]O`WcaQFNkHf](hrd&U,0Z.87!Bu'Aca?WcL&_QqI$n@,;[:29K+WhNAiS%r/(5c2Eg7G)Fsa]_0bmDCrM1rt3B9;ltT?=fgn?=s`s^@C0#3SDk*<=NNI<\"+H8=pMh4baJbPDP-FV<]AM[\?Rrt[I&)Alo0GuJg^Zc-nG*uHeJFh?1^V.#>;u7(7c&76h9M8TUp4I!5roNP[..+5[NF5L?,bmpju+]^U9BMO1k2dNkOL[\E(Wq3l2IJ7-E:QGWnJ?Dj@P5s)gE;BN&\.B4\IMEo!!sg\-_0b8q.?j+Y65%Bk"qWuL=>gfU&=T"O(mi%;T*5FnW+:"k:s7g&'?9db!!Brl[=U,0[Y8R=RC!D[fEPXG#E$WlU.D7mr9M`6pfrqe/dpcE(4lcDdi*(of$o,/`tDf7OQ#fZP+hcn2'-/\F(DY;!WH\%W4nmSY<W*=4ND="0RQc]+/B`>57Vb+L,h5pLM?U:20Eu8VINLD`%:\*5LUM''pb]($K]]RPPY.[&W7+rG\q,:JkhHP#q<Kn_!6`fspX9[]78fXN>c>%L?_'Ru`4rYe$D&Jt,?'6"f28'[IA:mF%OOlPcN@2Ie)I@j^'b>/(;r'bZCEr``gKb`fXjD%djeFA0?XW]emDDK4rt_.;VF0pWqrF))bobAl]luQQ./2mVP#b(S?cJr5mM^0FDdUUhHfiNQ_j,8U5IlrJY-G'7<g.FMd&<%Sh/gLX,TkCu#0@6!fH7@=8!fC(k?6!gY2hj2DeQQU;d7<^:OGel]__1LDP(&,:$>51?t8LXj?I)QR;nR4\*"5LW@#?'q_6If^I;dga\*]+_g4)ub76<5Y;cZ;j<mIFQPf?VSKY>WbeYe>K7N"`!$VWh!rt^tOp:uC(aKUl&2?]s!$Ga449.Xb+F*s;Lmbp:XWP.aG7SY406&_S`I'S1dE_c.`;a&,EVtur-r]rLC!\+H!"_0>+o0NRB-oaL1R5oG!&2rd?YN\[..*aQZT0P[F`ZgcM?9,6.Ppo:grZlQlg0RL<?p*@+b@&obqYq4:7OjC/-Gr^@CdcR?Yh.@P[\j3f;_N(V0Pk($I:rI?X9I*,B[HnT`nUWXCV;:Z3I80Ij1l3aV+E/4@$PQLZHEC@2^LO<$quY&a!T,=n5>NkaJAQ4eanXT\GIc[75CAg=%`q@f'<lK`_3od/uWr9S_]b__hmdf4G.CB@F8d$$D;dXI'5uC0ont]KD0]<MONTMm[CPH+D#s&0\;LhUZ!%au]\V\76)[#_H\($$u.B0HOh2o%$.V:.+lD7V]WpcFPm'1[M,26S8Z+c-D\=^djdVOM&(O9MeO!e!YE>KWMO_)C]L=*WK6'fr/)P<\j?+jEamQn'E0b6@#o(L[u>!h),0e13ptPc5>,;S1W-JUpdV[A,p9LP0Z!E3t(J8UpdV[A,mI:=dD/M!&T5e!<=;JaTDN2%$ChqL_qBJ!"^kU*WR<lO?<M.`#s=*J;?M^!!!U`j8f6)#0?rI6k#4`!/MI;%fd.q80.aR@ZW\P5f=dj!.]kknc/Y%KB*%5+pQ-k!(76Y#69Ps,S'kd0h<>c+C^Ep!'nIFGlWAN61P!U&`]3?!!(5(0$+1q!!!#7XRQ6q5:[-~>endstream
357
+ endobj
358
+ 97 0 obj
359
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 265 /Length 68
360
+ /Subtype /Image /Type /XObject /Width 503 >>
361
+ stream
362
+ Gb"0;!=]#/!5bE.WG`8*TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!"V[#[#$H~>endstream
363
+ endobj
364
+ 98 0 obj
365
+ << /Contents 158 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.81808bf289bfc83578ca22d0176fe858 96 0 R /FormXob.c20285075f305e3bd848de8b08bf296e 94 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
366
+ /Type /Page >>
367
+ endobj
368
+ 99 0 obj
369
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 570 /Length 52388 /Subtype /Image
370
+ /Type /XObject /Width 600 >>
371
+ stream
372
+ s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ<3W`Cc!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7MX!$7MX!$7MX!$7MX!$7Zp2m@aIZ?#^R'rqh9ElD+-,7Yp$rCDB$fiA:DsPU,rj8u*]D1h`t6nQpaZFaHp$5\Zk[R!<uWK%Br%RB#s<5F)2cI:A9/YItls<Zpp^LP`gsXhPXj9V*WYT;Jl'ps,Z1RN3l9m(^%G,)b/JmmaDo;CtgCT,q#*XI9(Kb($Ns">Iu[61-3@CNEK$p0uE<'S[<!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!9Tj(`)3RBRlHBD4HOljL8Zlb]S4fkb+o_OWi<T%UmGaZ?3pQEgKV8>F.^`#iAB`kECO%SGf:oM\N''345IIW.n#AV20_"TsneS_4bs,]:q-VoQenG'`3r@=67:\'/F;O2Bg&<aXr9DLPes/2jX\-k<!8X2Aoq^isDOF,)2meq.?D<mO,_Ih_\FidhF[;Zt72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!72,`!7:PPr-F)#I(5O6J^Mg`"DS)P2rpSlI(eS\n6r'OlY%bKmC8p+U[MiCtn#mmbFq2;$oGpY6Rr8r*4PjA@O_fO/Ks/`M*q.GtV-1+n[Z=iES@5/+qO+JmOid:<n+<_B.ECG5rBJX-*66d`TCClPh>[J@rr@J':Q48C4*7S[rr>mfOWrHrrr@U/peqXbMsim\g1f8e+8P3a=!.1_(!q'^OO<G<^)6hFrrBk4"5)+ia#ES<r86LTVao?V5ND@Rf)QoO[Y822i]3m.#[,@N!$?F=Q/Ad;FN6V3/#"lL8(K/3G4`*<KBe\Md_Di$o.Zs/IXr<kdpkW21H4n_AMai;1%OR0Io?E4r2WB:)OFX&hG<Sm3-m=5$gpG,V<R8![MGY&$NC*[37upa!7._gpZtnD9f5'(mU*;U@]NU60Yt,HrF6r.:qi!f5Msql)s[S*!/4`9dmBRk:itXi8BI(53\6]TVV@1+=)[Z0a20l02X>IVftY3/mLSokj%VCG]iDG3hIc8a*q3NW0a<VeDuTeYINm;%oFj3K&&?\qET5_K\U@n6#AN-OPQ(W1nQL[9C&<0?MU1@?qQ(LMg@T=SfVY5me1F2g9_8^CUTBcA,mW<I&R'?!/^ZEl&Oh)0c-sh*(u%6A4b!g?C9?WjBmuOhXeV,1[(MHnm70<"D]="PPQ(V:p3!/"cMjm;<rAB:d9IAh?1+#&BY'_bl8i.nI)qAW%jU?i7b>X5B^5nZ/BsXtKt3*p$QnNGN?6-0php*3TABKJ&$0ec<H@p'^Ae3)Z.;cHN`bG#AVnst@?kCa"F>\qXA4kOMC8J!MC8J!MC8J!W+rooL5c2!qVbr?_B@sqq?7k-`;=b7otG789d7in9ldl.@HnN#r\^ck8kYT9]<`C,N*e'bp0ZCC1SqUlK$k;a`6lI>lLHW*58.-3ptJFs(p"sne7Ak(D':G2qO@n'4qQ2Ud6=5Pl;o50>$]3S&#/^:[;Er(E5j,Z'bGIe(^'9*ql'7=K)WLD5M@L=/+7t^r6-CdGbX^-!2=/X[V0tMm/)kBo"9ige%ACrc-M2D"n%\bbPqR9*c"C2;eW@<dMiR`R1_B>N(,K80jm3:Y<OJ8jh/!QGi4nM)!-tL7d^@;d!)M`P$\Vqq-Wa($C#,lc+fg9iF<Go;.]b-O1f%(\b-JR6N0<)n7I3+-GV]eBd@jLo/38R]s$0C/SCLhA<((2/'7mV.#j<!qtTX.Q$!AA?C?[<*NYtnOk]qWLtOfQp[S#TlIYI?:r<54.Xnu.ARt;mM\k3tXUk<V#6&a!dWF"9\p^=O+]81f;13-Omr5a41b&0p&e1nW4J%1W&)o#VqTrE(UNHRG4XDimT:\a#b+me!AI9qu^B))WZNC9W!'R)!iCu3gJ+Mn0rVI;n05VrB>F2pT?uD.7J1:DB<G==+=DqLPk(XQ^7j?%FJ00&VJY2[$=q[=Yj)1%:_ja9ITC5lcT<'MlV,iet\hp%+9XPu1`Y\GNYI:@`-\8_+71)Xt/]JX;r%YO]]fI[e>DQHrDIJ\Sc<VD))!f8@bu-V]:F-lrQeZ+9KJZ#>-)$1m1ig0iqTq>h/0*AZHE80Gp5R8k)UsZ<dbu)%\qX3^\V`op!RE,86hqX8hc`SVSsN9\+bH*t5Z]tc1[C2R]sV^HIm&9;5HEb7W?pf,jA8_5RpYhLe/(Al>H;-r<T^/S''n,HrB!B,iB,.m2tC#1eX3N,Xs.Rg\;Ei/mlEENI7U/gjpS-cbB]kJ1QBed@@sKle:23^r2ocsC5W#kQZHs*J'R,@^,OGOE>?ETfZ\j,S`FBIf;Iq?"EMO>@S!:r6d_.Z+3(k%To.hc*76$fHE3tgZ@B)&[?/Y0?!M*m*`%s[UO?,2Bn#>QfAaQko,[/7HV&Y3oj<j<d9LKO-.VX_[oft@]4':Yd!WWTZ@@RMqL58RWnNB#)haY)h+pE%7o4Vn9^,/!ql]&0Y6hpKT4bq3kZad=.l1S-MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MU0m-Rn_85Y7pBB$SlAlf]2YD35s"8M4Bf>jSB_iSu6q9l;HiW/A=`q`T?S,o"Wgap:ll,Bf[Q#MZHIA^38X1SF1Y5Wu?o63dPMS+17&K/;PX@O!U?O8LO0..p1BQB5cVDAbc(g;5\b@WUW3jaaUFldn"1I1tDn&L8sMT?X_EdY4cf)+aJ6D)n(?<T%tm<Wd:MJhWZtbOd-PT"3.1K!m3dSk>`IB/*osub5$6(LJXLIrKd9c@:KsE)C`mg[7CN_<Q@u5qGX-=XJ]2=Ah('`R)VO)q*2MN!L<C!<chLa0tC4sB;`^3ZbX[pg"opT1&4dZ%-*E.2!\EoA8,4lU1Q)9.UMCS_f!J7Y&L&lA.8EPB,Y($B[4&TIK'<:bOJ,lk?YNNf?["NJ)83`;Zqun3rtjgc8t!G8B4UXC%Y+lFcE5C#FM!tLg7/k<_tQHl\_@H?16HY:!om-+d*[:_oSifE9H@lO;e1-$k-%kBpTVPBm?X?`e@oc-+oNTU_7\c#L3"(;<cMh>$&-3!3H@W=1.Gj54@[eIFbAC=&L;12N/#AXi\YM;MW#[)#gp^hV7iIGFA?C2p'@op\4$prUn52!*Z^u8!IjmbY!d6ROWpEGqt_(\NL5=5@7T0l1b'=b+E;C5MH@fQsI1`kBVc)iu.1.IjuFP]q>3[O=A_>gKd#_]7'pkea0*(b#qiUQt"C+gI$QY?.d/;3bOmQF_`D.4I;=cq26"VCfbm)"l5,MOiD,hm-29k^<a>KrO;/3ai<5FH'mjJD]`?3ZYk_a>V;KcQLDE\-el0,\2&m[ji9[5c(9P.BT4uCl2>no.FkI&GAk*sD9\Q^Q\+5>2$ubC(u%3/QL2`PU7hM:[9Hj\Ujr'b#saIjn>'\Z/jSU!!iEQ<H*/]o;P6<1OgEhgDS1EL.j/N7&OU52LQX_imGq9YOqEu*+K&PDW;NZ'WO04NXim[nZ#>nW>(=@FkL=?cb'B-`]m#Hlcgq)9Gi0PPF2^F`X2/q,p1Tam<e`Vt?Rb]Q@)oE(3!5=h,`\PJ9:u!Cq+d)VTPJ+kCp(P_RE"(iDnLNtalAh=Q"b;S[Z43CRj_^01D%W(2aNILCipT8HEUrb#;<T@<hlUgpZ_WoCDpo`1t,^m@"tG>1mU%[6ruhp.`3CYL72cbb\58aKr$_3DY^[+k'I_^[!-3^&%D?TeWoO9ULb1rXF`uS?-:(_or`8`?4V*iX(p?drrC*NPdlEs]=[MBVEh;=rN$rf')YVJU[0HYa5N@[c[@pJA$D\b/"Go4.&)5!`7O[m//fH:4s=pG?%8i0oMOH!ck"^9l]ptVICfFY<n?C.V4-MJi[=M1:&lA7fBHL;93KGLq4.->/#mQ3Dm*a%Z_[A:.lklQr20?jITk`<iV#S8,Q.F>frXeH6h[-*aIL01q&a=do)-_lDd<8/1Q5t*epa<qcIR"T)_92d7Br?g^^]F^cHshXl[t.,N8pEe)O2W;$8\GH%7gC*rr>8^GgfAu[]l(>Z<2#"5`,3&MPom!!;uUOc43Ur5gQ8LeCkf/`1fh\h5h/V)NDckUYp579,s-mm,VmJU&BII?[182Z$!1pEA=t*NO269%El_V%3],&0[;U1?X>hE%80@+QM12i]6J6PrrB!25[5]S@d7'91(*3J9_H*t]b+LtNpk6i:YC,tX1NkJk'q^pa*cq:k++E:*$r)JghhmIgc,X/)&^>>gu'0C\\P=VlG`*u.++8c]mnB+hoMjBVTgEbL]YAhCV9Hj,;8qY<Tgj8%puFok0i6NM=,bQkdl@@Z'S>MYEH0\PDk7W"--II='notT&j*]7ulLn*-%Y,b[X_iahco!PDj#+-EZD$^"oIp@l1Gq5r"PPU(UU40Jep%""iC8,HheMcVNl$rr=3;2!j&k^Z0P7ZT0V?04VY\#bD5p:X1[ad?ZbK<8a:Dm%!o_*dcFgVp$\pg)JV1h0J$967#R:DVtL$lc6P!CKjSthFe^1X<JL4.O#-7@0D093#EdgGVp!i/O!Wb*U\<[jku)sFjJ9OKi/FdS9,H+P1:kfp%ef)_'IdmqS2#h=>+/"2cACUnjFd*M$aI_QkaM4G@4h:rr<YM:BdHke!f8hA413(U/AbC#"$N*jaE+WU[%5hB4*?$SRnB-,%jm`/+(Mi#EIu/3#koeC9_#<)Mi!-k0K5I!O>r=n]lF^Glo0eT/sQmom;s"fefLshs#(M1?#IPL;t?%R>$Wr=CSE(UG6^D`]tYuGg7d'Z!TQW&l,b"Fb/03/J'S?fpPUOJWYN/GWgB]7p_K]Ya4$<\nGuRK&0T\4LT,.EJ);\0FtQq3f6LMEGR4>Fb&kE_LeQD%?+pI+G#%R2/ZD-eLpk%Fhc#C0V]nq-Y93Xe+2kLM'8?d]%'h@%CD*0\&qh]0iiH?j"$9H3R7h@d\Qlg\=+;ZO^'t@/\^>WBXq*((?#HYB<N["m8n/-X_h*0I`0eCLsp3O793:[Qu+4J7WZm"K[o';q/]cq>Q3`^h(!q5/i%Z!qqX=0dW;&6?,$bsO=GA>n&o!d)u4dT(%i#"H^SfbTs80`!2L4u1-66kkI(U?*;?>aV8]K2Eq%o,,cqbk9Ol@,@(%9s^^Zg*_mV&4C@S)u8N"3"5$T[!=&mG<ocj_+_8521Y,<.]=eV;A&XbqL!#YtrGUF?Li8F3*H1KXj5N0Aue!?=Z16nL-hu)/LdnNiO^KZPBVLiJdY4N?W2m5P;$2#8X*^qC"qV03T//(_92mA)?[=(e@oK3PR.iq8ga%*Lr\ZT'mO`@6kCNO\>)IKf,N`emK\\4A[>.#]R&1Q\Z/]R"m^UaF46dV?cf:E1B*@eJ"VT2K=/JQeQ%r@G$jXTa*l>f/NkCMmG[AKrkhI"m6NE8TI].^qs^Yg+sL\9<mb9h]i_fZ?'\:M62hr&i"f<76Ce75lU`gnEU]<1]K-JOJ7[WXSWW7l_2RBK&U=raY$XIc,?WofgU]8O)oq>UG#6Ad1m:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig8n[><>>Mn:0QkJYFJlq$(6F`N@R[-iVrW@&M3_!ne-p?`J@V&O=>5LJmD4]U*oI^mX=R`!]5CUgRn[A&pjm@e-Cpe-kmO/%">QV$]NVQ.lF)VXmK-+'%VF[&X]gfDrKc$GK+YF#.hRZ0fF;Q7E$hu4./q?_SMa_,g<W=)Bs/[i^4-mi)"39).N3h1<VaY>ESFL&L(@#0p"-+qI.m__6E]112XI-[<_)=NHrEMc*EE:Z.^)>oGD7R)#=OaDD<T5R><RUe1!q.W'CEuiG3NYs`_%Q](+F7hASWS:GOC&\/9EfFkj5KhCP!F&gA]!E/(CWU@EjsJGJTT.a*pH*W"dH^:-lTaV"-*d=uXJ'Y2f2Eb6T&2^mJXkl1kI*tD[ZQIMD]t5sHBO6"rX=9KX"KTK+:'2(`#tB'b)?L0Z5"t,n+)O`d2>9m1_YRE-K=m*e,BYC%hZVJ>V+-7I$bu5Rp2"5'lgj0!sat]p#;QcM='FUIq5c+[?B^!9tq$hEX9JDk5'Frd\`!8Q[Qit`R!rnhe]-4lts9M<?L$:rrD_lQ(FI-\'65YgmD-qmIo>VNOU]JJ[;d$WT<66Q%-AhJ(Mcep!o9*]geoVUNg[GD7#?5X5'^@F=#"7Tnjd>jEcl.MHrkT^ULM]+(^H?JS?D!Ya]e;j#Qp[@CR:t%ntO)dY$9"D`-q;YtYTnLLp8qN#Z8O53Fd"bruNe/N2Ss&mLV+!3>MCq#$o[V9MS'Bq\dsg`#>,jo'K;97(k#JcTX#?:l6H$-pLi,:@Zirr<]3!"XS!Lil@)+bceZ4*`,qNFJ&9$$C*dUXu(sp8*sJ1.Mgm/k#3s$ZJ!/+S>kSg.)7S@G[li[uSnm@?3KO-S0:0-R=o@8LC.@>L30G!.\bu;k&2!?<t9o7L#'U>Ya!jlas-bi]YaAp>RnN-@SG:\`Xt>j!V9Mj;QaqW5iT2fJJ88=RJPtU]PN##93imR[2Dn>@4]=GB5fKN'`]o_L/t:nu*hlOj8:%@*taYP1Y\^L5sf@L*eFYEi!ckal/:Y:VU)]EhqIh]DhlH0rGBK8RJX8LTd=Wp_E5#mVXj3gSBVHKrlV`$!(E*mZIknq+l!^IgV>2PZp/OI)#;A_PF9lI)[OPIZ'@L-hQPsrlL+&cYN64O0d"C7'UVHNE_%EN;YQ&;kHd8]^Q</9LCQa^^^iuO$fEZ__jR+[^TV]:W0(Jqqn=3YMo8@P?qBDk%Ne0Bju=RD8!`-5%AFO2?uBi,IbC%<n-5a:6ua=Zc"(<Oib*sp+!_:1%PH-<6%ej&P9..-N2pfk:/3kK)pK&l8dl]Ze.Wb,gPNC.O#iPD:i!UO*nG#-uPAiccc:ne8*fgbKp.g>0_J_2/BS0N(:/Z84AWOo$V'/#G<)!;i[XDmIJ#?p5^HAh>$.mro_O(>?Hf!M5N9G9e<<EbpaYL35>LppPg?#L\jU/fmbeih7<?&rTnjjO/42]jN<ErW35lEF+9S]^81?`]03Yp0!jUuI$;BT\7:JJ:K('<Y3*F)NoiuWKd9*/!_p^tSp2+>rrCWGK2%40@pppiO_;gnLt`t?39*.W3@>O!D7$E+23Ldt5oQDA%q%(U)C<JsK%KuDrW#=>/S[EbVjI<'e?I.39/-H4aX=JT_3$V*cD@WS6ru"G>NBopa=[1Zj]V;C2kDO.o#Y[AkN6q,A@Wb>ke?`G6O[#B,VYt5'P\?t7K<Ou2SG>[?c;sE"o`&Oqg#0EKl,uGqnFmY.&*q,Jr1tL!kDS;rrB@4btg]om4U8$g6;GS^JI+LqU\_M3p)6e`%ehqD=;>rIC6rb7fK(T's/o:@kF+&BM$osh0plSrjn@"LEMXU2b96]9`B;jB!!argQ!Q*"$XY`a/)m!=8E0TI.-lYqc<+!o\[sKN;a^mIB&9fLn5QNdrj;sSc8[XPQ"]\mZ%/SDjm\dUfun)N+gHp"mc.gk[`Oa&mS"MZ/#]QY;,a<b^5bl:oA)>D9@A=62W2oh)rV.0%*hmIakh]P_@/_q.gQG6-BZ=dg)I*<*$Tcdcr`q4%Ci'/BXh?BiS,d/]=d^\AFhfHINiBe`7W\M&b[6XmTRfit87!KL`Nb8\rJHfO4R+o$iQImJVKgI+4tYQMl.p^\bs<AW=XrD_<;ShekA'^(Q.?PN@5@EhfTOahSe[:;-/h2cnG_KX3"A)*ZG]ZEPGPPpGn8*HF<B/bM4$ACBUiZ[J/<c4DK2NI80Wk;XjN);o#tW:\n`k5+)jN%AAI"Fr(8:FKV49T1m<EK2cq(sNTFVW><Algba<K8P>n^W0&u(&_CH2O)H3dmnD`B"8^40hd6E0cgVH+Fnl$qc&Db0A>g]At2F<;+V^DO(`CsLEi"ACrSL$f!=p0S&dGB'dk[l(D%j3KMiZnO)QB-#9clOKBl=Ae9*3^gBlq!U20^Z+<ta.jU77/2pK5/39Q6l[&"Y<C[M-%"b)E?<2S)eHL(AkeJ`UShdh;5hnO9=8Xs;Z]08Fgf_d6`hat>3lk-F$XmB9d;2B0^fZ4.QmRRf:!VE/a9(-]OYn,Rfeb3o;#L!,I=6=D?F8(#oYBjd$^,irZXHql+m+29.`l2r3/je_bS7h@KP+$:WJ+@*6WO/ar[?om[*FknkC6h`CGdGA$\;1F!*:58>Ec]&>$kBu93unMG53=e\/HSA&Kl'd^N"L[;kHCO+]eW;oi'V=3<G.Gk=*9*dP^-'/OK6\T*D[C1e1^5rc7#HF#F[*56Te/a``3-j+Q2\5%QG^'VsSW=hu4/a&egt8Q0i@7mH<\+rL"pWI\-a%$F8=gfd"PJ=G/)C\K.(3W==p1I_KkVg=Wjqi2?"n3'P)0Ii>(/ZZ%(s5cV03djr#G,g&6YfLT$*PE)PudBL-DlH2,`M5,-R<Ks[R7W<VQj!-^H7+Fi/^[#7u7[2^X5$7gb>(;_l+Ro#Cb9P)F_T?]hm^DiK/]"md:.Zgof=-!t\%'p@=C&;>5V474b?L?_q-R$?E2Ot$dhOHrP2>I,^&)9o^/W0ch$hP[8.2&VJ4LLt44A<M?K1O#(rF93J4Kaq7Il0>"M+>436)lsN+TG7VQT[b0i=dA[BB6#\,4d,e.Y,I[^q868BfF;!TCCfgC--J#G7[)X-[u9G;e\&lnD'7+<<i:aj9kior=<ZpX2R09lp#L*U8]K1gj.IbNC.@O-K0p1Z"d/MlWiLMjXtt$)TI%.Zh^[;IC00GWbIM;Un8)hUh^UaLJf2.7QDRo3^W`YgSiW@j"uPG&.@%@2fg!hB;F=[Kj3(k0dnQ1YZ.??/lO2kkF->80a7K2]lA>.?NH1/Zt9f.L*Q?jo>kq@V=_n:aui7le*N3VRZL`9>E_neU^%`^2cfdq+hjrhNLqljPTX6q%TAFPTmL7!/CLR1e[e;nG.QD\.J%]?u=$#._4;o7L7-!T"QVSkY[_LL\a,r6NTMVHZ:09]a,Jm4J)N9nS/kXee::$`O4G?-rLp!@kc$M$/fHIM?Vhm[;a]#)MZ)H\#_f<(Xr9+m8T?Tkl-(prH]@'iS8>&UALO?qXYT#C#\m,p?`4lK2&gP0%BtiNPS+)BBCQDVCU$Z5=X&fZqW]#D6hsbP",>s1$Z^.KkFSe4'($JDhb(P`OEI'@7:l2-U:Nt'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED!!'ED0GXe9D)d]_Au,%U]R=$1,3M=bQ3U8ftgGDdeeN7TVGdE7r.'55Du[!KuikT'D>W;?.)k%WEG/^ku7aLc/.qk!=a+cQD5O4Ln"K'LY8p+Io\hC7Lam&1bM[AUBb^,Z&ATC<7PNC\O/?RN&;^ZJTh&l]A\X.eT0S:aFL-;Od/W9-f8CV;Vnc>@/9'CMbBTku=!2Lk8aWnC`-kdPMuc9A;YdHofj)1D@2RLa1759)lMJ+A)?ZtZDAcD0A\Dts5!iKZq'g>"2krWC`=HrgGXnb8pGQCash;if.7O/pdpYG4cT[nH*MHD\G5FONrna5[%%?CHa#oQ=aE@]ZH?Ue![T;U:rSAI&%\\ht8nIrTJH;3o[<H8H'feR>IllnZ'$a6>)R!0&GA[/U,uW'Bb/WT9CTrM2N=)JQ-Rrlbjii#c)*5pik68,)Zq7Jb6Cj$JEja;mf'g+Aa\=`SbR7Z["Q:`oF9GOhd6!:Z7fZCG-IVWdkDDTDTRWYJmoIrUss:g;1mk0^&pb$@eB\c2Yj57VE;k\^BRI^LqFhCQ;(RWX3']:#L8q/K3_8UO5cR6Ol-peuWurbk-fWY`7dT4*k'G8dsb!SlRok,h/3a11;4eo*0h@ttVhp)nBk@nuO]OeiV*o_;p9dR(R<rq\W3Emg!9rh&?Q!6@1dbMe>>Y.oSg!&KpuD/3249@FdrO8QZIr/6V4]hN9EGWOY.>J43`e?4QObSZ0Iq^L"cY*t4gAsK$kq>K>UFPZ5rDp.SK!'>s%JOL8R-U:Nt'ED!!'ED!!'EMD6_UDDkCMV[LkCpLJN;b'Kqq!rP/Rq956bX?P_u<oE8NTG:5>h&8=&h\'$F5Pu:<#.>6>r?+h/71nC-#[jFU.WCR<bXT$Qge@mj';P.RF\=JV&+H%\ArnV-.KqZ-B/O8<L'rb0JEb%q%s/T(qC@XnP5K$:q2\_Za.Q)T')TAr1LTSJAJ6ce;Sn0bO0j5>'JUK_K>4/,K.e'cN>9'W(B,r&"<`<\5&M=,Q1aME#"+hE@&a&m,`rLZLgV,ibj+V-]'R["@>`N?)+66MZR;8a8Y*B^0mRogQ4sIaA!U2?*Y>#>"<W%JdNrUMHJ:g4-<RD/RjGCJ0Z%UN91&;tssscJP"a-r]o?[F]3n="`3?p,3>6hA0HMG+`OeJe.Q@,RjFf>'juWX^`*<Q:)<7XC*adG473=a<T:sXMa%1LEc=WeZJAl^<a?>0hB#5d+Pk@iJIR7].?^Tq,Fq*gV'*S8lbA[EnrBS5;Ph,1=PT^B(D"L]7+t4mG2u(cKtGk1pP_"$cM7aF@aKSc<0%]/Wrmi.Lo63<BN^F8j6NYd!r_W?ft>s=&+7WIqmk4PlC_eLDmj)22nIs;dY&HVV8[L1E-<7U]i#T@*D2O(`\KtHd]rID[XM)KJZ<BUp29U6#NTjPm8Y&mIk($?,/u/F;32PC&\/t:k.B=;t'+Q9A+6W*1D#N`$7"@!STe9fiU$C=G@&*,bFZ[:o1fk.)?0MA<MEuaf&QHdu\/0m8SGVU\`MT4@>maf2B%Am`6@C;rsu1/D.Ms_;=F)`6i;-YY;@BNOa,71lT7,rQn:Un=i'0g)9h@d=VKk?ST!g4\/i9FZfn@[u3(kgL@[<htsZHb^Ym+eukq1cU$).oOis&;tug1fiNNuo@*:cp@qYW[/Dl[N<QY?3:3JCn@%!?7Sh3]/,8U)k+GF$c9$]M,%0WRPP:#&&dUI%i+FF1W7DIoh>[JUdql+:mrL\aq(5]E$0l_Ane'KM#^XO((m"[s*]Z&t2=XBoSc8[4p5t]X9tut.4+9UI@+'/M,Ij11KZ6YTk"Ka)"<FL;#6aN"<.aJo-+l8[Q#Uu5p^kU$N[2K,qp!`ECT4W/IYVD3@b@d2FY[28,89D7EVWYfz%Y.C@6$J[!p%j98;>,n<=+>SGn2M@/!T%)H.mCF!%;;QKg=o0qEdM2S#LN'Je\/=*O<bV3,Z,]$U+QGFBW.t8FZq$R3,3PRb-cYDKbRBe)heu'5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5S6Y+"TJJfToMqCcl_FMho#:IV_=juZ1U$>TB065<@Q%+aH\_XF`SS9.A/V*,1H%?$Gb8@/YU(`G\/r-fMs9JSiHcUk?kN"2@nfIIgYT/TCEHiLHHsa!+B"poSVq7gJn/bpQ>,p5KLS"8j"9Ui,UZDDoHcr-\c^krpGhWpqWg'MUeGV<hoOfmfeKB[YjsE<\6)D&+qh=dJj3W&s)*'f1IHiD8"1n;V;3f;+P+a'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng!'Mng)OuVQ/Z6HgN@@D<Q!CC'*8XSXG0$2G?>G;%]?+_b^^Ki&0n;%V:>4bgpP?TqWkgOmtIE)r[:CHBP^'=*:bSk:0bncdi,]99,X<M*Zr+gBQ&H;_@J']P"nhh5DrrD,OGaJEG='teQX.ZBXWdci%ani[mjBlp_'>iH1*/u/`rrB_<5L-B"UM4]I!34Laj8T+""Wu0qd7MiWh6N:aCM9o]77BZ!MA1@;MHVF,1^YY*J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^)fD!YV[PM5p((e?pS>aQK1n/YTD+.`rBWbooFeq-R=DukpA.`Rp&PN-($-&>3!'^77rW9KCom4Bqc@;unrcE7h=#L!X$-&>3!'^77rW9JLn=43Bo>=E)!5MX1lLfXlLXt[=3]^FpRf<A@j%KCPSf3C`!js->S8!KE_bg@5^fI5qom`6^f'%TE3a+&&rr@`89E,!`)Me:n[3+n.l!O&";#^O2<hnsQJ!Gf?k^PWS=t?$@!/0N-rrAW,rrDg$e:5>VV16f!rrDs#C-Jh&q,i&_L\%:<Y6=BN`LTrF^*\b/eF\I*e9$+-Vm_mLfU"<U]Wn/=K80?qPE$+Yik8Fm':gZQGi/N$i%%k8igW(9`*X'<45r2Nn0NWMC-uahPV:8tjQ,LXO/ph1<ZbP>r93f*(]-Va[V`&^cCiPi\.PkY>k1i)6(EB=I^u*G::.5#j+%(/J?;?>-X'=Dn\>)(^fI5qom`6^f'%TE3bg15rr@`<8cJd^2u`mQ$IjRBFeo$;cPulaquph!Y?1O%I;Xi3USacrTD21RTD@Msrr@SO8cJbshNRs>4Knbbn.hnu]jKl0osu6jNh2-j5N+]PJ*3*krW>#"n=Aeco?-t1!!/OLX4@2M+'YH:kiq<6A,[.d,Q;sqJ)E+[rr<AfOoGDDYJ9QEW;=27j^Ihn+3on<MWR.^4OQIWQ1t7[2.+c/9rI<D'1$?q#pE-jZ:7mqrFnlX8?97c*).;.(s-'Q'N%;0DA5r:!#/:8fDI!W8WlJ4mpu"EUD11L!03fuXq^%`Kj;p"C38jgm;o+u\Zbd'1r&k\e3EF;W;cjNj%KCPT7'*,!!-9,lLfXlR=/t.o:r.V\Zbd'1r&kFW.3_U;?$V&`g?]*4>dZI"_p6)=8>sHDMRhYV4tN(peEZ\q;J9%i%%\)!"$r;rr>/=&,ZTG5-J&`=FG(Bo:r.V\Zbd'FKbN!W.3_U;LcQ)V16f#6iR,e>*#`7r`1+FU&=-=W30e4':gZQG[LINi%%\)!"$r9rr>0"rrDO'W;=27j^Ihn+3olsir9"<FUnhuH)=kMXk&W:l*K-\1469D3C9M_beGp)a-Q%M='>%]`1!T_1b!SEqe5@KDPeW#ff:Pqn[Y."/Y9ad7L(fpHqTr#n]ul!dj'nD41OBDXlOh0_QZ![qPdp!=%fCbUI!<"RnYfhgAPmU@9@"]AT,/T"7`/Oom`6^f'%TE3uTW;rr@`<8cJd^2u`mQ$IjRBFeo$;cPulaquph!Y?1O%I;Xi3USacrTD20gTD@Msrr@SO8,O`\:]0atrrBi8U[%N%Q&!rSIl]W*/"$>:K^VM4!1m9l!;HoNJ&6E*rrC@qrrDs$C-Jh&q,i&_L\%:=U:H?[:@sVCjaI./JB^U^-[J;\o"P,(^h0A,om`6^f'%TE3dN<Drr@`D8H/[]=5Wc]e:5>\Ujp]@n,*B)5-J&`=FG(Bo:r4X\_Bmukr4su=iN([C"mA/+Y!frCSIbu3C?@g)Uk_oMXYfs.&*B].&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.hfoEngNdQou-k10jAdWit(r"F[,`^J!d?Orr<ZqW5fSL)>ZS=d*r!pj;Db5!*iIu$CoTaJ,FpN5O42V+]FiT>I-kJ-pp]cVOD35+f:],88&%$OOBS3TEI+#8ne_71t,/YdnKfcVOCFX1]W9!BuZTT!=^m6RVADt1t,'2%0/65)H0?e!/@P!GQ(*,:]A%;rcMW!Ih)JYaQ]](!8"#rcF0RVrBF8&@Ql8kir'bJ;+24VdM,PI!#<`Q-iQAprrC[3hte(0e]de9r]l\I!8$;hqA!ihiCh^MV_nDRNt4bW*>t`C;b]-+dNPDCVOD0!%5cM%BqPScdn4<`!$S5.;b](KL72gN+eT%.6V;'iJ.U1(.AiO66VTDt9f)j)RV>JQciP,"V)3pW1G=7=@F0Mikl1YH-G.FYY<V)Vd!tBJrrD70]@tu:_%0'3Z^QsFC3m)*"Vag9SKUE9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X[i0`M-87oTEfXsa%&gT40fJ&nCarrCXar5EGAplY5=31o-TdJcT55Q3s7^\,Q1oFY#jYG_C#a>2BH\>Sm4K*R3=D%B<ZDSF^W[94bj3>EKSTRW?3bRe!?Hh#gD:/c&d`9P@4=#Y'=km\f;.J:H^lH*rqd&OdrTSr27R=9(9%khgDP!aZbh"l"g-F7[K^2"Hf:UQ[!1XF6WbqXq\\"PeMOmgkV7XKa*;nH,`f/1rY=8JKCZ)^.pb@,f5#&uO@OYWtb\GN(R]m97h7_76W[7$<O9[d9Q"Db'!.0?<h3FWLa;ud0e.B5.=5s.gSZeF$GcGo[WR`LOpP3c>0)d)6<R,r_&pdOc,<;aNON4/q:HLYWIe>(JEdRajTaWQR*aTQ=@$0@46J8.6;Y*HCH<eH<qoL75'22rZkDBOVe5nrn'agNBTJ7B!409G+40F)FbGf[igqcZjr$R^N/EO7E8N&)(I,lqAD7XF,:%i!h;Y(Bc5DcH`:1JlOp@p<^"0PNI)RYjEI3TNUX/ol?j5RpdZ"+d'(PDY(%OaCp/'Te/\\[Dptf,eCdGuS9m"4;Z:r=)i4Sc3d[lSRt?[<ik4RVN,Qo).ba6@gD5hX%e9;@XK#.*'JZlC7m:%XVSaV<u`9/4)=LZV;g6)A_$5_*"5-$j(_rPqo5cYu%P?8"9AS[4E51XD;%pO1*,nX!9e-!0sc[\PrrUg_)X\1WDKS5qKZ9"mseo+b6Zio!Vd-PCQHQR/(t3\bF'%7Vcp>/58'uG1O[DUbtM<QJsiV,L7>7GF9]gH&`CS7PK'Lo7PCiH*qna/Zjf^+IVBI<`u40W=!pm_<6n6#@-nsWCf`>e8h_u[\]h8Y>\EL9kHnr^!O1a-+Z]]8K06>'m;@3j9(O.e:1d=C2uq.X>[nt,VfF^-IlC][D$#ZHi_8JU!fD/^TPAQdsF<qq1"hi%5cXJR<p32-tPm*.pTV9q'iUc"oeSCZ1q5s!,9\/Z,HmH]=FGZdd7$(iA+.=>l&r0%[<0dp"0+m=+cB[f2)!-M5pOqrrA21;uZj$=T8Al<Z73cUalnaCP`IMUWJ3qNO?K:*r#htoQWR]Y5D;!9$qoYj9-l83%F:.IgXbt3CYfC\*@C*X<foAGPrWZS_XuW>fUMT72,`'1#S]"!mglH?^$!'<R]PSi32qXci3uPPCMdr["!c_<Vi67r]E=ck]CF*Bh^G8-V5<7B9O^,\'<WMD]'G[T5)B,?WXkF7R3'[CspJHXDc2gq'<NN!-Yd1\;"X,MJ1h0mfd)ijGn^)@J'lRZ)@*H'.)A#g^B$oQPfV#r(6NtdXU/(T!\;N;`X.?7qYKkrjEneX</bL]Np5.ig\+^c:=8I'mcCZap'O[n'2'ng@6^M]^S]"OR:j3J6_M%>\t`+Sd.Dm0=5u-T'XVXV8Q5$Yb3.5DU&bT&XFDH\%Pju6:e4+M`.h&N/XlQC*F#+gQ[haSoN9Z<F<=`rr?=hi04'2U=XnGhk8WpL)8J!BSq$YJf%%4eOsgmOE%Xtk6a9Cr+]@lW1nlH-FUIB8=DDL8u[<2[]()h&5T"dC+1u20##tVmZM($*(bj>C8[BA_h(WQ>G:fai??S!-lt'Z+tY?$+1#.,Jb%S[#g"?^@l`StS+^3Ul2L_dQ1]j-]Ctj*kZF$GPn?gcD<!?Vb_d&^1.N^8$0*uJSt&aHn):jF`sF:ZR-+p=$GPo;rrBc/kuDjX(hsjRAnW'0Y_=\]`1_H(Eo_`iStmEZR1>@!BcI3*ohgn'4)#S+h7+eN_rgbjb^/>Lg7+-!r6+6(VmY."rW,spE_.mPj@+7#&QpF5$6o:u/%<ce]D-=FmLFKX3YCXlo!EFA>f,?#Plm[*e70a-,j1<+_;oT9f0e5hc"m$3q3l\S>IJY-*,`cCn*05jXPR'-Wc9DVdGj"b5#.ku?^MnQD>e4Fkr31Y0NHQ5hrWbnMO3%uM5T6JJpU^hm:;Y=1b%7fFVlBC8Ds?).IX?.&kpbY>f5[=o76,:FC(bNp#L(2H)bZ=YWVpchV1NJg<"/YMbtSRa39!A8Jq-hgV)uE:&BD>!8d(uCGil_chbo!p$K5d]f5;\OI+NLhd24-(Y7W*alZa^YEYbQ199ucF7Z#nV[&6p*\'gR;Cd$';\[N=j3EnigD38(aj3X%!PkGu:A\,I^O*HW<heL>kAE6Mf:Th,g8eOnEEq?nE#-rkEPKi-=]c48q+3\f#@*.Om$lW'g\qLWp??:ph<4e<!789d93<*H1UV0UUEl"A!;@ai=g@7N0/#H_VM7'=LkqTfD9U9bg.l^C*Ik2)?<[fLArCq%Q"=>Z[?QCNo)c8U8:-u:)p<o%ga$ZhLMF!3AfMG(13t&.8tWHOpV3iFi0@Bto.EbPi'%)?!_:e9NYrmBH/j/&"%5C+o=!0o"G/Guf[ZprBjqSB4A:'rOcfGP5?a`rN['7>I@;q>`96L\_D$-mDFR2X`]EYS>"5B:T4Fs.dHa$_=8H#d9f/`9CGTHYoDV3"#QDGure"MDE*%P[0^(aooRHKH?0uK-i.n**g!*%^[67UPJr1tX:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig>E(k9W%WW)tM'E#gdegHD@jAFG,!:,L@@^W!/8G])$:[i#\rr=8:TDnm6b?t,*T?'tV9S%;t>s's8<O\0rjDI.c.9uE.UHd2'e,KF/)f,HR>Z:G*SCG!rFt,4A.fG<md%Y4\qd%Xfp47;G.k].%3.1\[O@\S2di;h<VF1&QZYkt>g4%M@N:-:bgiVemO/M/BNAT#I8bE6Z$_`h<M%m:6qb>4%kH2ddXLgU1_6_TQOiYg.p#_du9L0@]4RgLV9-VN4G7QEd0]Wd7:I7,Md59<B[$Pb*0^Mc!`?Ur\g0%sL.,HZ'6/3HZ,k:/p(r2u[[7e$[=e-ELH:Wf"NRK+7F<kqn<Xg4KbjTS_,AUDW\p+G8V7<+0L/TLG$KRA(0L,VJ%!Vbn9XrQ;k2Bj6idWOcAFab!DGga'1-#GeEEA,VdEa>u?HtI:M??P.7<&X"<eb6B"=+L0M\[U0)>hH:PO1n_mElW>mc&`Q7j)Fo0N!H&!)P_:GgF'01t,6l6M=7B:`<SYb7p(51-BJ"jD?u3O1ge=FNupTn^aPK[9L/k9>#)"*@*s1,BV#P7m]]j]id2@9:f4peMsC@):7VF5p2964H^))E*:9(@iq&iFN8<,DCNq7$YNg!k'n[@j91I#mF*>-&o-[.RVnpmlq3KXaKKZ&e*ST*1^pqW,/!kA!^B;[FNBarQ76F'8;e4J81[CR[W2X64S5]:RV=4XXG5uY]<\G>W_Eo!=^FX]cngc((o\eNrlD#W9T1IsF%m@+niFjFDB%67%RCrRo^"('VOBO+%\-m%lhX/t>p_P*M.4!)NT)].PSG`:[cRf;K?cQ%'`2`..oqLhjC9$k!puNRNYpsL'l_S>DPWlj8rOFp?e=q4R<)s#_MrFc%#Z@?BUJsQlrf+gnr]G]I0ZSrJo.+2`0u?WB7JU"a=WQ64#SnPX_A]+_k6K[l@8Km+7lV6e8>qXmJ<?\W5^\Da`k5PrrC.,kb<ss4+`><TE;Zb"b4T/J,9)4rr>BgT"0=SJ&iCTqYZi_!(*f_r$crqeE3CniTU:A6_ZH1Y"9mB#,NS?aWfH]b0"Zh$?/<(XTM7>=&Q+%.2X1dJh&7]1sP2)BXDF;'"Zra5okR!FMWR#)17h^&#dPSn.h4]h-NCEBT^SWg'a8\35fQ!+VF,FP&PFUp)$!$YA^7?g.WfM2r(0CDjB*#oMEJ[r%UmOdB#1uN8$\BjfZ\B9$@ijg'Jm7\K,I'GUU*%!*t)ukB,uLWIDRQ?;/YnFh=./Me4Y'K&dOE[$<bIJjD.Gg=aJ*a!>.P=`1X:a>?Pn[9>rk[ghH#%RA5jh`&h>%Q\T^N_VUhMbLL0j3EW)=;!srN)<136K`%IH4KS.VHQ-Q(7Q1MJ1-=dN3&Bc7Mm-;j0*cXd[GXMrjDb+J4cS:`mT?p?,,=rj\N>A2;Y(^m8DN[pAEm#Dqur7ftr8DXq)PbeN!6T@XF.uH)d19>cCq1+Q5&;oDS-j3?OS[g,>$-\Pj=qEcWosL\X::!$q]I6_rC>c/u*FdWoFVd`V-.LBOg):E0^6FR?(\<9moIIJa$E>8c%=QD\+;oDZiT(,K4!QAdN>[gIS%8'TYEqc/V[;OYYMns2)?b2V>s#Oa"`%_Y&9RYJjO0jV0<&O[0qcidLC:s-]iSc8\3I%q$(##/5=-%HI6:>=`@(qe/7bA:a1:BQ1?m8W1=21Or^+u-7[mA9]n^CI)c[0sSOPO3r>'O&\#U(o.Ic+..Pce]Z3e"o)5S+Y:i[C\?@P/-YN-"'#>6&nOXq7?=m'n/f#AXR+O%-ifh-`5J2,98eu5:Xk*oV]+3qb2hbCl#rZ-@%?Q#Pc$sq*l';129d]ipXEUNC>[fdf0=:pE-AAc#5S!#pTncIc%KR1EK*J-f#bbkJ&!9&S`-9KT#P"Zc%i;%EIp7R-"'i]Fk,!^X'=bSNbcm;(S[#p?a/:A_b"ZJhf>K+'Mlq4*sYH1%!^.69\k-7*a3+VW1=@$9Bb.l.'jeIdbSD/%`io_R!Rg=soKTVHp*b,r.0&W]@8#,ehafCHJS-C"P4'VAOSREUp@t5X(]<o4N"8&$YkZkh]C)ZR>0N(scNQl!]TRM;<4"2Y9#nE*#8f+3p%><gN/4:2\=jhh0G"Ygr.p-\.SO_f,n^>=cJ)_'#(/.q]^Z*0H3/@D:6fZdYd'BHHfE"3YL'0sd)<\`c$5\G**Ro_W<7o4(5u#pF]9g8+BbF+Mj5'WYjLESEsfi@V=r%%ijn=7P42bu:/pqlBSFrW*V-<m-q=et;G\o/bV)n`@59Lci4\P2?P@*Qc(YaZU-Oa119,YgoYaRK?r.%,d3N[#=%)&d`XM[nLe%8F'GgdKT42R.B?Q=-LP1m%=3$^H.B:$YX/D@n$oj5k>q0PLP<3#@>9&3c=eD>5nT<)Q-_BhY$e2i;MbA$epO#1#2,U9r5Lp.@$6^d>>c$HB2uJco#,K)gc9mOeZg6cro&1O$SuFi,Ch/F'7"4DXfW])+HNUk&'#RN&hLJI38Cjf6pm5hu&Eo&,gnur<1`#=&\%4U\rf1+6(fC?]kaEU9QaGMC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!YrlIp!$[H$rr?;"o+e`:ShU0EO[i@M!3R^FMUmjY,O15-5J`ter/8.9r.Aj9l\^08;jumNHs*,>T5:X/^oS_V5pR"\4fW#Om0!?>[f6>qV^aPVrR^cU$r%dCn#sDD-CS]ippWNg!2-1'k%Ua4\e"`C/cPf,9A%bn=8*O(RQo*3oP>F5=QdYl&,cYSr67(nY<i0gTVNZtUY+)q=8)sNB`A&nqpDW^VQp_ioIp%I_>0O<r$>M_r<2'VboXm&o"V[uZUaiChMlSN23\%?$!)i]!'rS/1JL%^d/O+0-O8dIp,,("rPA/q5L."8CRSt=PN&,DrdmsqAt"*ITn3<pmD1.PT!Z1j:Z[(FI:eQ3YItjoRVO>HT1&\ZTTgOh+n7aSrr>>%5;Q*feG`PD#M*Sg!':#)W+c]P*tr>&oFZ`IUcp-QJ*8*fk=;eVr3,N!XO7#ipS1R69kBq0khl"EL\%>A!/-P*rrA^F5Fik8Vt.U45-mcTfA;KC9f8;c8Yc:ccpAi"OSFl,rrA^F5Fik8Vt.U45-mcTfA;KC9f8Ae8#-(acpAi"RX@Q"J'\$WSK>eKo"V[uZUaiChMiaVpi$.%4\u'jA,^UApkME?!2'%93hO8JE*i=K;jQ9;,_'EbDB1O%d[`D<1NH3(qP+D*WQoV8A=L>`-?h:D7<9KC72/Q!>ebmj!9=MPrI.K@!23Ik>UP7'6_ruCFiD&MoMEc@EtXOqE*Bh%`_r]\'n*hqP-j6VcuO<WreG0$VQnI*Zk*!?g\tfRHs<7ncr/cm2'0c8o"V]dlSO*^IH]?@doaBSR!<ktjo5<rgMb)TmcPY$T_PiZrrA^g^ZK6W)P>1Oi;1\?k?iNn%5cX%nRdFR!'s.?1JRlLKWd`B!2,i(RA]CdIk1DKlSO*^IH]9>L9_>IZnM7^_>0O6nQ(GF!'rS/1In^Lr3,N!XO7#ipS2!B9k9k1k^W4<KC^qKiggVZJl$o.O(2,a?ec`+U\sHH7^8aHP'g-$J'^ducB.gn7/m7[PTQG;`i&CB\3@5hq:FJ_;b]-6Hr$L:!74=KbgIRHBYX0OKCbkjeG`PD#M*Sg!':#)W+i-7rrD")d=:@)&*HOa!!t9;rr>>%Il]`P:Z[(FI:eQ3YItj/RVOJLQU^uTTS,P#+n6n?rr>=jIl]`P:Z[(FI:eQ3YItidRVOVPO%93MTS,P#+n6V7rr>=jIl]`P:Z[(FI:eQ3YItiDOOdk1(6SUs5OeYoLW!@dr;Qc7q9ePDIk1DKlSO*^IHYh*r/<ZIrI#dd#.s0l;5r5UGaCcj>D/9-jH:=``HkNaBXkncX(hF:4?VXbPoO)[fAqO@.'*oOU5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!VRe%/;:SfF<FLu'e5-<em->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*gt5329)Z!7)da8UJRrrDN9rr@`pg"&CZkAUA#I[Bs^bnP4_iQ3.[DsZd3q=D)q!5D2+'RsatrrCB9^]""9n>eBCbkm/@HPO<%XFKEYhu<R-peh!\A,cNmG5hR:l$pROd76"\*0KSgrm%eK!1u?&qt.Y^8+q(dr;#+I!8jXQ!"-&$*7)-88$Q:q3lh5ImJd1Tdf0<$@!I:?c#pc.!GMNCW]2+j3?MbA5L<J/>lOe[J)iWK5Pkf0rrAir<4SW?jH!eXq`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*q4DWeO(,TlFcZIrg]%92V>gN&5I7G@kK_uar@dqGROI<H_id0?hq?RFoB1&l!.L:4./qMsrrAZQJ,AlQiDsWeRJ.1^p+(W*=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e^phgc6V3Xo4f#rr>6+rrDfXJ&795lQ>ro\,QHC9E#Z<ME.;JjH!cZp2uGoq:koLhkg>Q$BcoDGR6(?'P-kbJ7nGPBVirMJrEaO.&)Sf"Vag!"]d[4OX-DXE_fSC+5pB!O,<3SDU",,C]-X0rJnu^aTd&,rYW\fPofTsll,l2o4h@Aff"Wb>r;<"bWR"V3;Oa#IsBF:Xb>,LP%o<?JYl\17^e?>rJ"@qdbIJM*JmTV;?#$PHdse9>ut7mmQ57ubl7[d]rE?E/3hjQJuSB-:SZN-VJ-rtO)/4Qm3B*"Noo%UG5h(fjc?qte_5Ds\@Ej:aO>MiU$49GZdS6&\)3=3I$,RPG0;W7,h;AMlQ>ro\,QHC9E#Z<MHnK;E_!B=q`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*q4DWeO(,TlFcZIrg]%92V>gN&5I7G@kK_uar@dqGROI<H_id0?hq?RFoB1&l!.L:4./qMsrrAZQJ,AlQiDsWeRJ.1^p+(W*=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e^phgc6V3Xo4f#rr>6+rrDfXJ&795lQ>ro\,QHC9E#Z<ME.;JjH!cZp2uGoq:koLhkg>Q$9tkuJ*5,7rr"MF<LP>uID_42MVm+<5P+&Vrr@M7r$_QiZ2Xfr4+I/"^Yr4,URCid8G4Q`B3>06c^hiLqHr`eq`;dsI-pq6n'_49Kit.1BA>KlfWG+CA,cNmG5hR:l$pR2m->bho=+`"^J"P@Ar8U@E9*'h"L5=n_kjFA_kSbj&Q@(G-JR<i-*U68'S[<!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$$(RLHaIAE32;QN^71<eRTSVP1nQSC&BrYs?tL&"5#=)dMFCIh?ne^?1O?Ca$u-a2G'*DI9mrrBo3WIN:"W.3\t8,OY/Qi.:1L]-kQ?G_.uHN*t#5.=22mXO;>e5nI+!!u,irr>C*U&P+@/LUHB)NXh))Me:`[!N,TII$gKlZBf=kPdtI7<9R?Pj1L*/F">OdaA'p$!*c"!(+u)rr@I!*l<A5HN*t!qV<eh\c2Yle'VF8r$>O%r<kRa!;Fphrr<@2rrE!*2u`mPda@D/jnGtM&$=:Oqk*[)7==F]IiipM_Yu8c%iD%TT$I6#>#ieF9<q2)OXdRPhFF#(HK@04CY6D\/&2)aTkaT-rq]g[Fk\XRpr>\j'`K#b'59o79X!o3VGI(@o+.rE_L>j<rr=bLh(M"'rrA2FH7c8\Sr74cTlemfWt>.rmJLuG=H>b2E'"I8^Ke8G-(!N]/RSMXhb-K;-+De(/RSMXhb-JDT9nELbW`L/cgH;DFYm/Mrr<@Jn,3W<rrDfAdJj1QFmo8:GQ.[;da@D/jnGtM&$=:Oqk*[)<>E[V!5`)irr>CArrE#i[%HiShLEn_J,]Ls/KVcX?[D_P0`'TY5IpdoOk%iaVu.kXTCaaCJ)<mhr$F@PoIaL#hb-JDT9nELbW`L/cgH;DF`^\4rr<@bhu*qLhtPRHrr<@jhu*qlhtPRHlmLohYO`:,de!@.q&O#]ao;@XATe"Q6LFOGoX(lJo#<Y3)>-XJFP(CQ'28"ZGUEJ"FXNh&cP2oVUu1Hm*).kR76P"Arr=:EU:dPBIh\gND8rnEFr*(Mq<F8LHjW)\#[b=lLC1R;jHH/h!QB4,7b.0j[_&J`(@D,%0`<l^(ESVr%fZOu*J;i[aQP24pnGpbl)\^]Ro@g<K5"iuZ6/pV`.a/"]LTDFZ-p%^D[0CY2AW3_Yj&HTbWR"r)#Y"!eCNH9T4b$)-*;m&2V.-e@tau_qup5r$CZ.+A#.h:>s?[eBL+"V8d7lP:T6OUR^Y^"!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)tn$:t]#FF`?:_M+]oO^f8j@it(r"F[,`^J!d:7*bhReVKHM0:/Y@212SU\4C<:RVl</5Bb?oeG&@6Z/U\mokWbtO[t$.n$EpB-!6?qErj\m*Jh"U:X#DDDMe#6`8eJf)med"a>m*"58nk0.2\=G4.ASd#dn"55cDVkuHW]Y&XsHW)<q;Mp'UAia_k31`f@)k2+'=2t9lC1/?=ZBM6DH%Kkf4rkkCLqaMSEdV`bqjo;Yd2YY6Fh?;]+I>J;-)%j+^Xk[ib@dr@0%k7!)f'2-0:^ch;mkf5BEs55:tr/)%o7OgXZV,2&i^c>?)K51#5J,a61IREDK(c>ZcRY&HT;bt)t:gMh`^V][-(;M2T#,Rfh9i+JPi8$,!g+Y'_MqNhXJepH]pXCt>9_3O0R4HQVW?YO<tER8>Ya!.:ceRXtMrrBH18SnpCIJ51E)\n/gA'`@p*+L#Rq^G_.p<^LUBc:]ep=:HZAs-qFLjZ.)E3?7.7I!>Qdt<:oV_4qipK?IDfIT`N14THL`^mp*`^^7=RU49FKA/c(E7,ZJ9gWWt:+L<!`NhY6P()q&,jmq!3B].Q+'qB=e)u(9,^F??;UNQU6H[8=r5#+,gf;unXCU\4XhW)cBr7-C)M:naOOBS3TEI-nhtSEin]-N)m58[;e[C2<j:PV=&QuD/>D&NTes`f$ht\9M5Pk&6q:='(Q`',/HN*sZ4b#q"d/FOM;o@=R>)o&<nD-KQZ4"\Xk])QBA&5>EMCT@5.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.hfoEngNdQou-k10jAdWit(r"F[,`^J!d?Orr<ZqW5fSL)>ZS=^Sh)3a>2BH\>Sm43NDq*r.?SNl\^08;ju!9ZUfHl6V(oc1t!d>9f/`9BEGKnm*o[[hk)eDin9?]9:Y2&J*C)HiM_\nKDcQg@(&^;f/B@'AR:#uNMhut^O0)XVOG$FP]][B<,'HX9DW7'djL#PHTS1b5!hNm^^)EXg/J+TT:#<sg8'L"8G$$Vfc/.([he>_`o%YI3:0e,1skMZNDbA])/lBFFLlhT9YPYS##0^o>[[<jo-u]XO*\#.J.kZnX#d[9o07R;jBr2B7U1n&]162-%;d"N9i[Y8P48,#XVfVm(pd`s=MS.9F0[2^C,6H_BE7SS5NamcBuT2J=-ZtCn/jDKT.hQ+%N@Pb]eS-PBGtTYeXLc!C5"XM<4)XeLmeCA[F?>Q7V9,S"2SZU[MWL*60IGc.cofaQ]l<LO-XYEJWLA8p>kE9"8^Qs9f+o;DXE%L9eKDP1LdW$9?"K2m3d/;G``,5!Qe9'Ed@J+r^4AW.s#K=*)+2=AY"TC`9!'B9j'=%8lKb2@uVnUh1&e^KJ_.MBr7QM6VTD7OO+%IYMnC7*Ap(XooJpuk+M5,r/Q)qrHcN^lY9X"e+H3h,N>X#0@?>U'N%u'+[m)A!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!EbpIrrA0O;uZj#-i&YSXA9[_aJ5a7!7qn^`G8!=OnD1'TA\&Cr^H3=r^"!-ou0.WWQeMnrrD*tC]=B>;u$cjeoKT86fC?MBr*Y@O[M,E&DG"M>YQ1m/iPnO'h1qY-DHt.cJE)dCT&GBrouUs=h]FZWqtWNGX_W4?Zt?'4Y&<d\;J/kp#<NjP$,6#Q8?RJR"YMC3UQn6_`?u+D,-O_rk+8;[@A>pqYpPXV_5HT73fi"Vdtr6.a$?M$B`gMR^-Racgj3Jo=",YpC5kuN8rAMlC@kSnhF9sf;6OeLCI]3R=<ifYP'FC^U/L2`oPhHHu/fUm!g*LEMTD;rg>OF-oR[.p?C-#mVO;YV+W#Q*iEW<j=71TUlp$(1KJnu9IVZ]5:Q<nID]i<^g%rVaN(GuUgN[HhZ!T-V8*"b2.T!o$g;nSR^+BUM63(7!Vt*^kZ]:1!%I&kAt.8mnK53(=1rLdK=BiX2>*WRq_>[8>T`cQjph=jQWfd-&"aT5pY"K7[^ZrUDJN=7pWC_U/.QtT3QW9H?BqRiUs`td8T%(iTlCqlhSI7u;^us+bc"N^:%nS$YK0hL/Zp@@K&S4c4rmM<(&Hse0:rQ),nd,?qf]^4L>@A6HflUq>02YK/"=dD2"I&eGF5Ba@ZOq:=EZd7n9mI"X>_iIMl1:4,+I6=fjoUTSI.CnaQ`a4H)gR!rr?A9I:H$CIX?R4Y'"#7m2p!<IBT3RB:%d6mFfK6SEE&8;`mAoPffS$DVY,D(N0O+[P2dpX?AWAABtMSVOnt,AAdd%^V)Xq\BaWdmIKulBsZS]RPpq=1l<q3CR%Esq:g8,>RmP@_jYJ'[RA.Kq0AO>rg*$F2.tGrqfu?on#`=HHDA]a7t-->^7f/*5A,>Q(4HLQA-'7*`cG90p[$V2Un?A0IBI3]ZK6,IpJLPVf8mhW4PeX[EN<="aV,J\+!?YNa-.T6l=flAcYNMd?=EM^Y,Q2Tcd0\`1WAPQ*bouTGPQT?mCC5Vl(7P-=]W]q?>4+6-=sHD84ie3`Lk_h%:qMtg;cWB\R,:9eqo2sVNfP(6(it*nE9_0HCt.^a8G4D:j@'\7m0ZI]jq%a[4S<@qP0MlnPfGf([0/iMC>Q$OJ7U\!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!2>?!!3As5J&nCarrCXar5EO(08i]gn><";XNY)q.ZBS4XXO2L&jE87'DraE5KLC5rrC+ufD`:XneF0f?I-VPHr`/q]saRS,?81G<oAO,T,Hn.oC&W-i%%gN%p&/TAl-Inj^.L='2:@1rrBoKVgm%,U&P+CX\JfqKZd-j!2"[,rr<('QdtC$!%TScF?c<8=*Ch)gR'?h0p8[0\P`\VJHQNR#R7(^J:(k)rrCBZU&P+CX[mhJVuHbC^&J*3!jt7$>1VeDorL=Fb`23g21g3_@K-<kp\t6g$Ik^;QWSa`[Jp7+!js\^ec&Sk>G:uYh)*S_?gsB6J'YP&!<*&--i>9V5P+8lrr@SO8(Ho)!%SS^d/J-)R\^IhnOft\Q.3r;UT?^&qrIkWCH2*la8ULjrrDO'W[U&?VSr!MO^>(\gEQpU^1P2t&&Cj8.B57,g&)!C3-P9c`7lt8DFMS&hLm>i-`1sGJ+Mu$22V>5$!!>iqd9@'i%n8\_Gb%G!']$7!;HuP]nKhT@p$B)qafEtL9XO3/H5_5gA_0Q!!/OMpn#h2IBUET)6!DF?fb_h\f]4WP>*opHqe>T!']#lp^G[0pdo<ekM#h5!!/OLX4@2M+'YH:kgMH[)mOELo2Q3,mPkPE-]XaQ4a<lnaSu6nP10DYYJ9QEW=Oh;J*5P_rr<(gT<PErb6<d@Xe^qt9f8)]7r/,)51e]e%+O208?KYigACmM!LfA*lMgi7&$=4XFDDeM_gh5;l@8Km+7lT&pdf8:kM#h5!!/OkGXc1eif-Fh@%K?Hh%U`:/!:FVBaRdlAE9kjlAV`EVc%J1Q/2H?7X#PD7<4s872/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!>lOe[J)iWK5Pkf0rrAir<R=f3iZIt+GYe=UZ@D*ReGs\*;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;,fEd61h8pmeIH*BG5>c3!Pm^jO.=*S<P5Yp-ng.Q\SN0D"'qMknX;1:r"$6S.V3>gUphl!'lN.rr<*pC[<-cpS.nLMq=8%F#mJTRJVJl^ZZ9-rrCtKU[A%5rrA]]TDnnB-BDX5YIt1lA,NY4!5Mad;-_H@LPpZG&Z>X/i(9aDd.)&Q!d+GBr!>3,(YsN'5-l?mQi7'3Sr2Yp[!Z*X!'m)>rr<*p-h`mbJ*7QDrrCtKUY*<Hmm6W6rr=Ubn.p-\="jNKim7H(l2LbY&nq9nnRqe%FT2@=#W-lEh0nKNZQJ:qrW:B>^2!3+X5ctaq"?o\Bm9-\'4)'[*4goM][W)rLrVJPjuS$6Muk_?g&7i.ch[e/rrDg*CDTptorV<6>"5uBU=^Eu/BD3`BK/)n3THWP*eo_bqld[<emnW`rrBi;g1\'9p-ssQVtnb9cpSW2ObmdZpmdPtPEYdlqW5K"4BMO_5b1.>!!3TWp90AR!9b))rr@TSO(/!i]a*+ur3H>&^ff2b>d*k1MZ3\?'4Ln@JHh2&D\[cK-H#i`!Y$3ipKr4WXN1-Jrr@SUWhR%"m=,k#cmH[1!!3TOgAWT%!2*&ArWF-&Mse=O+'FZqbPqPCB3.NBJ(l"orrA]dL].Dp5IN[Qrr><R&,Z\iHPbLdkWZ<pjd5rJcE`>grrBKT;uZh_Rh,E&1nWN/.K9C@9o&]N)Ej#H^@WLMO7LKo!!-_:7<2bi?7GmSTM:4@"<+\@le7)eX53%:Kq('i"A9jl3Gdd'kfG1>[.?XeQoQS%ebc4cFAYJ9F9N@U5Qqj#-'gN"H"D+hck^5'J,o"N!VBGB(PqaT<_6oNFJu%?<neVg&sVuYl9P"A!'\8,\+mT7JJs%;"Ie#jP0pYNB]`F,4^smeN9R:DA,AX4^[qf\rrDO6dJ]j"htdK?rrDg,B_F*jqp9b'5Kb_X"e@dkbPqQVGdIC#3e.,3RQn1W=oSIeSNm,S!Y$3ipKr4WXN1-Jrr@SUW1ph@m8"LIcmMWh!5O4Wp90AR!9b)orrCtCUY*<Hmm6W6rr=Ubn.p.'="F6MikP<mfRMgFV#Js8=8`2:5O]fClsFo0T_cl^Q='Cp3k?i+rn$[Ar;pe"n0$//Cj<#[JMnVF&8:bj])0j&Aj=HlqurX&(!6IUD"sq-JMnVF&8=A;]Mnh15ar;^#W-lEh0nKNZQJ:qrW:BRMWDO\r)*Io5ar;^#W/1.SgaU=TM:4@"<'F]m_8<8=c`-srr<(4>t&cugR]hn!2*&ArWF-8mGATW!73(1rr<*0*l[k\H4R*tq.9R+J?uGR\GlQrmh>^$cmHg5!!3TOg\rQ"!2*&IrWF-&Mse=O+'FZqbPqPCB445Khsc_PS,Rss5PP*'rr<?9M8/6fA,cOYboXju?[<6aa8'<H!._D\U:BN='^I9MfNMWrf!38<0:0C59+f0ZZ)F3P$X]m0.ab5BFRH4E;+3dL;+20!;+20!;+20!;+20!;+20!;+20!;+20!;+20!;+20!<[WhjjAFG,!:,L@@^bS9`ZOb"l@8KFrr=cWdJbD>;3!%!1\?0ZTr7nja>26D\>T=X.`GH;rrD*tC]=B>;u$d*=j(u&%tt%[U6:X*;Gg"N"X0V'J-nmt-ikbFUn@dNd7HS,,mKN_&sA,E!%B=lTE:5&8O*Gkkb%E.l@8Kk(\=aB=h6!YNuFYhH:@btC0OK_og^nbihuc/d@GCo;-9A472/Q!>\j071r#1u^'t:t;N:dq>rq]Q;>tk*fiKufTD8Oarr?DiJ*9nG-d*B%DQIm1>k<q6Zb([0[[r7?*)XTd71q(>J1@RX!!cq)Bh^G8#>g/DBh]bD">nS$S_c=OGiSB9<0^/;EQ8/=NdO8/8Ld.8HpWl+h16e/hj:5_lQbTkWjooDfZnVJ%uHc&RVNp$CR:24/a\5>9(tHk0L2?]G&fqAkDh@I3TS[kqN]R8WIbSf_YPYhibU=nAQJVHpMpW6kL1/<N3?\3+r7cfT50p.OO\-iK+tb6%D^apjmH#+_R&tA3SBJ6X_$>G>`6+$JR1j):b\!Z"VLn>8^7PJ2\*e(T^ledRupXO(iS9Nfqt4\T3PT9<dTY_MKPQXjW7eS&%?c?,Gs==N:t8+3;(a?"=Dh.Vj6[EYn>7g!YE(5J]PVIZd2=(;t`#Tlqc1]?J!]Y1t,RSl?Da<X3Yp,!KPWM.`X7k+s_$?E,]hm:H:DS"]'3=>[#m`QOqld=cPW1Y_iZ&akQR$n,XMOV!1MF)T4tor?%`-Br83]e_99r@qc9C/E+YS>Ta;qZ.oB$aV_hV2$<10QI%IN_Z\E#W"S+J,-R<O:0S`bDuo:lRXW8'>Pe>\Sg'>!^\+N#UL;PFA]Ll8d'``kZ:`TANL$%@],=T=!Q`CJ4hZ*NB63dY@4=p1\WN4=_^cHapZ*6\;j:;8E2s;W7K3?kJ!i<oRSup<#(db-V)3pW1G:uR@F0Mikl1YH-G.FYY<V)Vd!tBJrrD70]@tu:_%0'3Z^QsFC3m)*"Vag9SKUE9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X[i0`M-87oTEfXsa%&gT40fJ&nCarrCXar5EGAplY5=31o-TdJcT%5Q3s7^\,Q1OK0+#:]CEVD6NnX:ZO"EB._f44qn]q;Gno88gu.g1mClV!%B=lTEM&I[+YL/-o?[/$;)`q!@\I02Ll-,%4(ugPYt<Z<doi(!$fL]rr?AfIlbrZG1(eV594KGfp[A^Ekc1D-Kb-^4b).AlY9Wse+H3oFmh]LoOjgo>lOfY4CS6i5V3NH!!b<0ngtr"nV@&CZp4I.c2Rdb[>E7P'SM!%,Q^^G]jQ8p`ZOgSd/O+8F#X+!,1ej8a`Y_<&ZVC39$qLX,D=24M"R1F`9YQ$J"mOA2D?r/j1PG=*HN8.rrA-3rrD`f2u\M;6h%k0Ihf02.33ui[&sYf2)8V@HE>q,npdK^mt(of$=2QoqcqeSj9*$F[ZBpSlG$8dJ&d>>r=4e7)H0?fM:*QERSup;!/@dgcn+/H2OT&91JG>sV"Qom(gIUF7;EfUWf3bpR1b0anKNo1Cc;"o1,O]KcG1]8pTb$AhP6-M>-BQ:'U%n]:!,ofXiHO)]/PHRSseZ"7WHbVC)Uf`W_#;-:6Z[)MV"/PG`dV(OZZFR3?obh[Kt2%NeEE_HD5L@[cd%%?>nO]e)p((g\eaVR)V3to]!9<1si6o.jbn*#s5M,rr?Uu/c<@A@kX>7H2/Lnr*sqEFQ44X35mB"%)C<H:G]m;PWP"j8ef)A!K8bk!R4n,dmlNO;M++/RnJc[[Y$E[*T@d!0t/#M(NACWhuVFNeEa^YF"C6@o#!"EK"QGOL;la-#jaWQZUeeOaF;Dql+d-VOZ&^&>?F=n]6Rk0@.CgRQuZ?DrrC22ES&[h;f)*'9*c9oQ5c'&*(Z#+Q[9Jt8H^*04EVCABr7rbb17_Ei19eJq1"PWV4+4,b[m)3,)sr*OEUmY8N_L.3cRp([nCD'1b:qTjS?JlM]^H;R+"bsPBn,q76@^=qQP^CBuZTU'Hs?B;b](LRsG#6,7]A+!+/7r!'rL!f*-Bu!$_u+rr?Crrr>>BhU^4@#^S_[SCE%H;q6=f.&)U;kmAi5J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-s6bL]!#jTD`aobZ<P/Gf0ML*Dc[ETB7Y-5K&V_0uX(l#(DX(/nt=cndW#,!3RdKKikA/J,Fq9J*VuA+]]%b/_Qp`'GQd0;CG.0.4>1lU6*_%BdfdM"JhlkciH^,,le.4MF0W88P;dN!g(f$5QR[TP(3ncd(eXceGfO7dP'cbl@t#m!$f4Urr?AfIlc;Le+ET9c%u.orr@uLB4"(A<[UF<Hcldk7O<rcg+.uE_h=9W0&b18n\nV)J,fQd!s6#_"b4T/J,9)4rr>BgU:GaWJ&iCTqYZi_!(*f_r$crqeE3CniTU:A6YZ#VUUlWAj=;Kpq<sS1<AI$:@frFb3T/G!enjD:AG\[H]<V'4G;.)U;7A):*/rA[`uNgQWt_fqZ+ch;Ztn4.C%;M[RAN\tf>]\6p1lr+-*JH^fcMFG#urN2]-j2&SnR2EYNR%YG>#XL!'aiVaL,Z]>$nTA4T$hu[$K-0UM7O`R6\hUA$6-cR_$2&[LqB5d`hoR<D64NS;dIJ#R$0Ya7HD,MX5S:imnqgca^TsN!@FTXYZ-Yi8AIo#9Cje9r5mSD1?[C`N4$t0NhlsaCI^^"_!RpNf%h;>&KiCD15rR>)gKbX0_f?iR'fsZ"8/(0XTSH+_#)nOTX]JL'oEU$;Q)h<3ord>I;R)ThHl?5!e*]+b$sO7L(f9$r]HckRo]bPA%5.d=`gqGq=a4l]>4gf7Q^?XmFZkDf9_Lg*dOf)^L-"h7"l(*XaF]f^NQrj*`ic!/(8;NG7tLC]=CM^ZV;eD0lHKmjQ6a@rf[)7`.AK?k6a=Fa\1B]?c[Q,'f6l:WSpYGkBcU3if+%E?paK]u7AE(Wr'++">=pE5i]Fo(.F^or=T+Jn_mT.OcH#A_ITn:X%[%#Lq\iHW!hp[,lWN.^E$!f)Ga>I=G0h?JE%q3m!Yt3/HMja(]J0Kfsi4\[daO0_-cr$-"0GUd(#oIi?M!hInd9.&2XQeZN(pb./)t'S1i-"dfni`jST8iu#1@R8i>u-D$32p`hY=gD>Pj;fYc&"D@),r:pMNdC1KW-R,En6IkHL\e5Sh=n<"M"`Q4_;DJck.kWnVLXLQ5#W':BHT];9)l(=]%RU:&3#mtX[2bM,W*[FeCPR8!4Hmu]/>rOn//3VTWji/(pT7^L?HN3I="mY>V09T`[e9X3R^-[/Ohklr9E]PjWtSn=`/K`3E"?,of=(0*X!FB48?VanJAd$3a\jiqb@tqa"eFJJ&M;bO,:1]+nO^ae%ZEsC`^dEC%'Mhb?GgaA3+,$%.EmKOfK,VbAP'pg:6ZQ%lJkn05+eH9J'?;W>0UpFS`G%D184WeR0_Se3$91ShPQV$(h\R@*!mr;7_de&AH%1cjSM[%XH>3H\@3.+'PZLXmJG78'u8`-%WFN+;Pp(/%IK+<\!uL);&OCt`$19EhW0f_oV']b:@GsY2.!%mb=?Krc`_2Dc)TJ'iGg*PR08<jM4Err#lkSCes9T2eh*;5@d4t%EO24MVeA%2k-C\>gM-?jrgdtJ/E0!)J@IQ\FbUA3,k]2a[5Gd_6o2sY]6hSL6^qc%`?]!],6snie#uqmP]*Jmpj\ZrH.q]Df?a&tbg8;WfQ64(#nkD!oE]MjTD/`jWY)46ZnkA;19;q=5k2.A]U[o=j+C;XL@05R8K^32\$^BFd@"NgA-]$Ai[MHnqtP'jJdI%2N6qXq1:+;s!!4oq\,QFLif^,Wg\U+D][FAuLR\4$6$EDV%'jGW3/lena(]J0J9q&hDfHfI,$9[M8KT^Q+G)l^*_.@(FKeCJX(`JAm;?e[@)-;B9Pt[h5Y2**P?'NTq"0dL^1[HGdB?D,77QV>hu&H_eWcuT-/\@p!&?(>q&"2qqYEGQ$*O-7)o)1cF<CAU5Pbh5eEVDmoRE>F+6(fC?]kaEU9QaGMC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!MC>,!YrlIp!$[H$rr?;"o+e`:ShU0EO[i@M!3R^FMUmjY,O15-5J`ter/5lNr.Aj9l\^08;q64*q$,RQ!7qqa6DppH]/5;[JC7C`FD6\!8[rDs)[5.%pT]e=*W:Br*0MS)=uTL_PpK1N#6]H@"F_%fNp2Hn73SH\UnX$&"%bp-!!\o]+eSn"MIK,>.:dR/$!aIU+Q/<rJg^ZLPYt<Y9r4`6!,3jY#nbk-ZBBuY!.O1J3'NiDIi8<0,nuRD<?2>D7t"24]d!GuG,XUhniLT9p$!:aXf6/%:XpH;O,BS)^IEA\;+4r9KbRBL"`jSMrrA-3rrD`f2u\M:7<#gihQN[.:MB_K]pgr98?sHm#\0"J\g^(jS>*LAof4PI6EDI+Zfp:aa'NWAqbPpnR/HoS?^nE?gRRZW>\BR*NH>+"n;uq-oIO`!pX7K>_Ek2Od'9O!hb-o7.Xt0BR7e8dGPe$.)s375#PRkjrr>C*U&P+@/LU8[X8`/d`hED4I4ZMWIU@F$!&49*00d#I!0Op.VQdhE2.-1qFV"B6Bg9'!?htOVrrDMaUY&AcmpG3!>G^NW5Op\7D54\$,`O:(F-re;cfV#F_NNd04'9Wpd]b*BAX0&URhC2Xao:#EJ*:%MrrBd!PP\umrrAa)rrE&p>(4JfXno6m(Y1"lS$2Toq&;(3Ou>c\!s/d0.XqL[+&Q$Tllicu]Phc-N.1K_8I+>#8)mbP!8AEqr<l^,!;FpiIr"?,oIXGM!8gF9UJWNpc$u*C72G=k!;)WW7`hNra8XZ?^Z\k9rrBd!PP\E^rrAa-rrDXo?G_.uHN*t"rGIsoh#@AqfJM&[#?96gkZYb!es#u,<rW/nDZ9_.>!7Q:^@hJ6ot"IZF8l4b=OTuUIq`ZToI\u"CJ"K"X8`1H[se(S*l<A5HN*t!qV<eh\c2YlW+c]Prr?_IrrD[ChgT?4pAJ@tL!/r0B_E,1qq(Y!f'.JYchrbY9f8F6m9fjHbO<\i523.<!789)q5k^TIU@F$!&49*00d#I!0O!j.%uM(KM][N`k<*$!'^K`^=fRe!789)q5l$uooJqcDne0)fMqj=rr=bLeLTNa\c2Yk?%9r5T`5#DdJj3n9m>.Nd)2njlhX;<B\,03_*7UV68/Tug:[]]A]kpgg[u='8lM7Gc*&aX\5>[0J^bB270"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"'Zit(r"F[,`^J!d@L`:8W\ME7C.EBhZJ["!oS<+Cda%/h:/=g7o+ODV3"EDPXFF&hQkj;Vn7!*iIu$D+Sim*Zs_3QRaeKQMIV!rK(JDL($C8%<t:e"<>4m&-H3-CR$Pb&p9a2S3$-C"OJH]5Rn^>[V[B>K^Gf*Re:?U^M.tAJ'IUn`rnR$TRQ<d$BbEr;Q4r!P(3Qj#iKS3oAZ2c!,CAlho%8X3TteAT.?.n2<"";:MGWB1/B79@"cCQpa5!mE$Zec.MiIY6,d,Tt4IObrM\g;41Bu68X]ZN!34m$E'.7Oc8u"1(QD/)TpIqL!*Z:f*g#*(bS#o[&n0I_!j/mQs>g%PT*_gPEF`JP=N'=Br!toc).<ams`%'ge_@c^9lJKDNmEj]IlH;h'3\s*1abK;4M.N'gg5G\U?f^10dBSiF&c37&W@?D9*F[+*[Ldf</n83$F%u<)L\h<#\dF.d$ot12oDA)"d\RAhukgDN^=A]jagk_&:NZi1J6CWfbluTh^j?RXKOsrrD/SO_];eo'$h$ro&7lk$)Y,+S+?sK8f`(!-1k!SLRi\7VOG2!n4-;miHG`bPpVV\F&kge*0e$UakZED.<gnm-5h)#j$je0%p')#m5b1]in&:32\Q&B`^n2EKO`3Z[t!'Fhp;1Wgr>G?e3!Tp^p8l<P.SSe,5f/AlbODIH5(n'Ag+r!,bUY6Q2u(0f.luB0S&P3UKMJ]t8Q3R@a:p]ls!!p+?o%DV,13q+(MHSp`Y#Vk%<<M7<R%g=(KVO,3LI<ku`m_[\b.B_7!a;sfNOq-BOZE!14"&b@o0C]Zl[Fmi+t0)&E(Vm#oiHTA6/)..9qSpjK(++GidHY[=9_cs4BmUT<q`3.lDg^*(_4[4VN27;Po=^")nb9roFdkoY84j6<l(uBH-P'`cb)X-T@TXp3-\;!#=c?@9[L44lEp/[5mp33ouTZKB#N"sGpc8p(pVA1;LP@)nUk$:S8PamrHoY8T>18:C;\sC>@\8,]$VeJaSCr^%[WW"1K#EU]$,O'8L[l6!-JYG,g+"CcRRtL:(kKs1aQ#.Xu4e!XTFt$DETPXoO"42!O+\=d-gdGVC,aL7:>se_h)OF<B-C'KgT.<XmrrD0ZF>2G=X_bY>4(#>/gAHdC#$)"QDTZk6q@7Me4D(+m3eOQA%4mT&hAD0\NLZo2ccB@i3?OnRk7t-OD:[J._VQF?1$&NWEV/Ke*Nc[sM&!ZoZ(8t9J-@nW,L_67j&PJVD2;.=Fmj&=IpT](7dB52=rX6H?427iQ!M4"6;6DYF-F)2EQ(:X4Kr0`T4npne;R9r5T>6_(^D#_OJ@bT576,-h?af_Or2ju3K[H1%WDY:]E.g8O6ec6#(u9(Gq=!`q."+u"-M'*+-d27D/4#!N:*81IG`l\!!dR'9?Wal)@.t(.DPF4.]ZuH^@F9)GA$jD6+XX*eqWDV(P:Q3"]oYA(jt?_F-F)2EQ)Y4CMa>S*P=oX[fE?2%Q<M9N]r]NRoH!9B[pPr;@@E%3jI`6%f?;Tp5ljde,%Q7.[FuKhn.XPr"?`31pT"*Enks>9uiR'Zjnu;_8gqe:XD>eG1?Nlld@HL9;gGpKJ%eKB790P2D/qK!IG4T.5VS2*OS-.oT/gu7Af6chrI2TP,HR>2sAQ(MC>W;Zm_Z+!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%S`&+7^iFJ+^b[!&7]#M;o-B'QlY:id[>tB`A&F5,cL8r#,>qaI^<K6+4Q$`BTH`lFhuNK<9XhMLQdJeoKT86fC=%BJbs2$>h@QJ-sNP"#ZT`/]>_A!Q.CTWf.uk0.o&3O*pZ'.S?Y_Q/%eJRP#s>Bk8RU";_iLgErZ=W%H^K&cJ6kY`jdr8ARGa39aWcA05BGrY1:5JSk^UJT.;VBMRH%`O^9<BMqjUZ]U504CP8h[+ON=e#siZeFq^).<BZ5fjd]6?18%sES\Zar)5IG98RdAQ>Wh6m'7!XRA9RJh-e#Ah36,Foco%:dqY0m8`&@VoSJkH/R&+boY:3lrU-2]_r;!IWI'C1YVAhV#2Mekof4"7ku$>P0d5'GcY)u'ea<((5JI*ZbeC9tF4[=lFEE`snmC"Hq#mq+GQ,5S!2&1j>,A(6RZ5KL"h+Au6"]^FIjk2q(^)q+H,j6hV,)4<h/H&Rm50kLIt$46`S_AlNYDsp;q1!][qR8am`B`V5-#X3h;@i(!&1:udq]&a.4D!b!7F_8BE5&]+9)>'f2M\LY=SZnSQi+c+9)>'f2M\LY=SZnSS_#6qL5C*`-bPa!6+djZ(d++';R%NM?#'!M?#'!M?#'!M?#'!M?#'!M?#'"V.&X10@=n9ns\o@5=#a_o,+)p3$4!WKI&QjX-$;].BC_GgnM=c2;]$]5lUgrkttR$H:r_E1&h6(%S,QJH?bWVe%T*p7Pi%FghGqrqWp>q^;=1+qct';DB%9`]q)pA_!<DMNAnf05,pqR?Us8Nntc('5+"R_[Hf8.;0J,-ZmnO[n97/e'NCA4;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I!;+1I"M;o-B'QlY:id[>t]#=,or/*P-rGb'G<j[@5+&la,rXA`Ij@`q]!$LT7qVn-g<:sS8r^#,MouTF[WTuQ^bouSLUnX$75ts2Cg&NQM1m@u<;+X"V2O9gt"X0V'J-nmX,leY5>"Sc^8OXeq!g81-5Qt0Wp\^&_TDa(+r9DO-nFuj@R\0P)8,V[f>>N`@7lDUOVuA?sSW+=\=IgU('Mng!'Mng!'Mng!'p5J?Rn(nrA^0jrDa>(e4-So[e+'Gs,q!B,OZJSU]\S^R7<5Ni%<#,(8^U3DSsL@JC`iDek+Zc)?YV^hHHjFGT!n@m!4e$OEQP=GMN>e'^D:>PLG.UT^VP@`U1Uj-iiO.oD_>hTH+F8irSs++J^a.jf@T]_7u]/l(6KZ%l4(-#!8dmI[qho+RQfBk/=%L;`>g1b:cVnopP2\r-_NH2jrok^%].YZ/"T!d_8j8#jD"3aO2Dq5rrAD`34UNb8^?0cr87;p!PCF6W#aUKYB+q!=<g"/?]aSWQ?m,&S==?^@YA6SMokgeVQLhOW0M)==hR$%87Cc!h(=!ArqE@GRV>JQen2l/r?"eaJbs#S;P3CiLA](L5r>-2:$5'uVaMOWmf*96+4(\B+%k?GdosbuiiRVjDN#ruV`2iMT66q+d@258[7^ueN>^CS>Dj9g([JI!"`3G;,LSGc$TmRD6iR-;f^41cjRZB2B4'l6G,(7DBcFh]^r(V2RXEV]nLJp8PQ(V<Gq28@QT),DYOZ=37<%eLCDpj`K!h!TA#6m&o2Fi`:d1.Z58R[0I(IU_.OaV&Api,)Ojj_$O#Ol'r#atq#M+0MM\dJSII$R2f25\^DSN#_^jV+:)-Hn=#&sSBpW;R)X!pKVg.KBSS7\r@F;.S@,(b\#TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE:!!TE;A\@K-<ONi2mW>Yjr+[of4UrrA0O;uZj#-i&YNO7=I[N,_(uT;2=>fRLt'fD`<.neF0bp-8*X[f6?18c49<=j(u&%tt05#*@7]8kN9(!#10F8cU:g1m@u=BkapS;Gg"N"X0Pe:]X:eUn@jdU6:$66U`:$'jJSjniCN8p$3^kWs5j$piUk0B7KlFI:I"\XF'rsB(P2WgLX'-[C%T_l2%0H^Vp`RIZ3nK/"c\\N'HMfU&P,NRW&0tU[3F`rrA_[L]7@+BtsHnYrWAHTY%nFY_cr(\Vf6%E.R+iW`\m24j@JbO2`:6*ROfdn4bkA!$t],j4LcL4;"Un!,UrS/]F6A(sE;]9>4JF&QAWRr5GpnNXn:O"46n'MC[knL&N"cZ".9VY?OZJGl>X\%"POU`V5_j:T\q,\Yf/)9BUZ$A\QV$'BEluL`:9+"D%HdI^Q:-C88+L(h,!V;7_[7T;g@U?6dlTS;YSSP!T*J/<oRPqrDg$?gs3CqN9O-k`R3(V9Si,fBO&j78qR:r$Q,*JfA:MY6S%>N22mA!-u?!]$S9X16=f_&`0m`N@d.rr;Qc=J!l9V::e$*9DcKdrrC.\j*6&Oe9TVf\`?-/hU$O&r<_c,lWRJ@M5Fu[M^p3M5MlPoJ)Ehccns3Sb-^63I628)iJ4<9ba%(0X8CP(RVBd1CEm=Ac<0&>edRS<MhR8\35YJGN;YLBj]Isd9FN>Y`m'];[:]56PE.N&i-6:4K?3+T96"HSFWsCsB`u_RFejsN?_KV3[h]a'1'oQb+I0r#dRG(4B,mO;T?PmVWt_\mhgrs#&oBhan'o:B;q*F'fclI9-@7SZ+orI'2KB=q7frjk4S9FG11+DF"Dc&c;.g$5O9jV(Er!Ta^lO_0T!ri<Z?^Dkc'$p>agNV+.h^J^NPkk7PLm3G&Oqdd@o[!38HT*HS.D:7r65_GjjG?4.66]@rrB7gWQs.EW\"`IL)\e[gh^#'6mWMfB%fFT`C:0Up!"DPUN9tT;FNam^LL-U#m`k@K82!D,j4qWf7BCAZ:cVj10[r&&6\)Y(gl,KA7jl4_<7s15'mYfM1""D+I5a6G<B;o4YfN"YA52+aaP:AWY9LA)0Y<BIn[o5D_BHY<bS\Nb\WL;BsC3L:c;'<Gp`\2jEISA2$mZrf-KsQ*nrkM+FLr7;EhiM4arY[VkgJj-n\m5;e$Sn1n/jZD#CgK*=YdjV3U(dZW]dBNQJb67dOZ;3>okE@nWDaQ.P],q*2N0SQ@7CqJ5Em?%'^uh8SZ^YB#tgM.G;"+W?HpM&_6qB*=FI#+;Jt>pMJ4d9cdAfr+8e@Z]ZDCn-IT:'NGomonJJjLMh.0W?BVP$Fs>iO:I(]I#Z+MQ*Rh9;oo>QpMP?`LmY7n$TLmj;`7uiAdehAb^S$?SJHSDCr]]rbp-Re*]%e1t%h,Y%+]^^<ne'o=Er3%%Vdbq--'\bs<)Y\#+Yr2ct?8*?`';@/g5@\r,&qdosbud^AMUoe;[MS=_[?qlLsu5o5K_D*D6<8=gAWjh8.lA,;>;I^QkeCRSk:\Zrl'@uTa`L*'DXO34_5eJ,X"<?4Xj!kF:WD%?R*b."^(lcu9l89Y1%\:=2;84GI[MdDm%5NZHRF.p7qnp3O6J!'"Q<u9h"%i&=*UYf<3BnJY6pG.S:l,V!Q*94R*=(tf;VP,LeT:rq*Y,jXR>4i4NU9c`b.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!`:8W\ME7C.EBhZJh-tWHr^@i'rj\T_.p>0UO/aqQrr<7PO7F(,r^#,mouTF[WTq0Xr.D,dl]Q`@;q?!FRR?%"8OXpLJt#D-TE::68cU:L'U/SrBkapS;G_'U!2MGL:]X+#VU,?86):.TP);j3.M!#=aQ]](!8"<%cDIO&3WB((Su;Sg?EsM13nfnKo_hY3M"mtL!/pJ^B13M8-V.,M<ZmJ1;j!3hda:;`'N%+1YB9Y)7P?7^eg](r6jFf09#,?MI>NoO(9)GS*9YEkc%Q)s^fn=,.nE[1'pI,9qi#8dVbu;D?Mct#C3!r`nKsUBUSTR7,HUSJQH/lXP(&[2a2H\,UAe+nCE3/dL102R5+"K_$L"LMTqc>5WboJUL41foQf]AWe5^S=Qc0niJ!^'f*mV,V$"(gS!1Nk(.AiQQD[KfQI+fpR4:4,Rh1#&^T[,.be1I`e>%\bfMXMDJF'sC7qN^=L*ljc.GPiQUkT<pgr[_7N=5L\kNT49PO_8_MrNf;jgnsPIZIq:,5#_3P/6.FD7L,gnRb4jrFNmaB9?<oYq;tH(rrBc/213hMPrlsc>])6sj#F['jfPm?:U"LRDOD/0o)56'#VH%LpjA%\FuVVp4fUkeIbXl&*j^?0rNh"-I'\k]IW<-"4MR5#HM6f5)5`k#?;97=Y`MK#qU48NREcb!,UW658Z`08fm(/mrr=iI8hiR;,9*k,r'8amAV<!SaA$>Sf`gid.ddX;la/T[ELsn9e^7XV7<KG=GMjHmNlXN[.REMk0ZS)=6OEsU"r0XCIc&u1J,"Nb-"25hG.79sOj4>-O6pEInNYa:XG^]W`]`)f2g3Q[GT`&R$0J$Apde-@XHM9FMk]`e7K-n`P[]/RN,J!.K3\e\RSLJ+/1affrrB*tYM<Us3o9=(Ofg8067j?_`2et0kqY9u+>N:?moM?l2u=rFcOM;m'?h!][r!#/^1u?&]A7s2Z@=K"Q$J5%MBT[ToYCI5Y<&9?="BT-++?p9r3nMB0TZ;\i)XZ4iZ1ts4ES!;K_1`3Y^c+mc!61C96*Dc>*[A&l=!WQ7K3@8N_eh.Z;LDYDoM_V?SQt<;Z7A7o6N(1?b$k'Hpaet09[BXF#i/GCqaC$bDLCBr[$)Ze6,/9_LL[Ddr'P[+R"9^f3%:G3c&,.Q)$)eIk:ZHeG$"CF462f)uBR7Qi&gi.^Sp3D^D=A^YNCc\*u8E\<g7.\^[Gqi^VT<50?+0\iX\#CFDS/YXJ\)pgZRaoVndgSQX911J2a<e(-$UrI4^^MC>RN6Ad1a!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!jOjrrr=7'VuHa%:\,=1=e6eARo8bSm@Cac1st\U`re2q-C%-2h&0Z8Ppn$4r^CTEq$1,Rf-UD_VlV9knSC,R7K&W^gCPudcpht/;LcYirr><r&,Z\jEh_=EIH\g5PbOKq^?060<^6L^^[qo<rrBie7QaoT!'n.,r!5-mMse=O5HMp$AcDa\ZX0,(4+(32!'n.,r!5,rnRqe&/3iVHdHk4_pRqB,J!OI:$T2W-ASgmLr<"T8n0$-?pp9sNQ65l5B_F*jqp9b'5Kb_X"e(1/ZM_HQJ']sgrr<*0*`n7akS[h/!.b?8@f*@B#M*D_ZMsp?=f4hoSkk8/kS[h/!.b?8-cM_M%'fg4^k5.^IFm>.lS8BAJ)Dm*Uc"_(Gd%*t[QjNuB_t#OrrD7%A,cO[#*36jYIt1lA,NY4!5Ma28Ql&nBCT@-")NJV+OTn$(&n9\2TPgt!Y$3ipKr4WXN1-Jrr@STr?Y;;08fc0kSn%3!.b?8ZM:X&J[Rf<&8:bj])0j&Aj=HlqurF$%9!'NMZ3\?)e8mJJJ<Nn`IILiZ2Xg>MEQmc^@WLMO7LKo!!-ZR8uMAI(&n9\3lh7#!\!p^MZ3\?*Fo*LJJ<GIh0nKNZQJ:qrW:8c%u1)ajE&iN!:/3#k>;,4`F&6IZ2Xg>MS7uN,?D5'mr.kI@#.Ma`hFn@F>\&n,\5Y6GOn:FWU2&:(qh#'\hgC]MCY(]$7MX!$7MX!$7MX!$7MX!$7Mt`rGm7ca`O'SA"NNQ[c68^0\PN"kJuG,F@"5HPm8Q9Vi"s1Sk/7Gdh_g^\-1R@g\d7!5DZiHW"2pH5,SD/e%@EpI58bZ2;#&a%U#p3N3l7AWrE'G"/^G<j/$jd7YtuX/@$eJEI0\TF*TdiZOuJL!SKpBlmki=NG55)h0++39+OcnRauo<O75-Lf5J%a26@qZh+(\*5C43rOiXXD/Pa>a:%id.9KRrG8(;Yrd8hlniCt7hD_asCMLM:8F60nq\K-/<I+5"(\#-omrr=g"CW#+YbKi]QYOWCV9kDM@pkqlPq_qK3qB=9;jnX]0%!DJf:63:r`hC\[X;E0FD<qJac-J6FP]u:kq>N\IkI7dAq-3=&r#[*6qTbY/O7^&oj)=?u/:R]F<(m1&;r^KtjB0`$Mppc8e1X]`Q-a6Z)U^I*)V2n_04-U9GL-0,Rb"=[8j<ZtYPBjC%SH?fV96Hcc2Rd+aJXZnFTk"a\u`65$oPH%mc)9\m_eUl[IF+.&8%7qZV/ITbM"iX`+/e7b's-c!+F4$LJ$lGWKgUZ8$R$,:(HN(h<P"5;U[L=/RAXIb&I4sA<F)GnMg2J:(!V&"^S4#:I)D=-X557P06`lgE#Ci"699[3]d9@ZG;Mp*bqc[ou<=J>54++mE71Soa$-G1rT"k3AE8\@ueBd9$GrO.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)S!.&)il;%'u><>d'P!%7k^*S*&[Fpb6)=I]@@V>dN*VJ4;R?<kMcWdoK6F.Dk&%S8g6jS#Z0Vqq-IQ>L(Y[aFk`[)V(fmM^RnqIe:Sg#rD<IsL%d`M:`P\it*\UmsTgWkk9bgW]Zt^2s%'p7J6ckuL[7fYESQa7iG\1.gb&4Hat:XK&9K<<6&-!!WE;ZiErl'ED!!'ED!!'ED!!'ED!!'ED&XME0[@V2]#Fe>o@'L'OY%\>R_>*8gHbV;^uUcs,m<,F6cUP8ac*0Tc7jpD`5\$4>50Fite:A6W\g\:fDrXNFFS8aOTF*lju@8?FAbe[,]I>"Ge9a_uS5`##lLZ=pq&kZ?;:'g9M9C/J6Wf5Ga4,4R.V[E]FdJI%).H-=NuJ(j!If;3SflQRjS#$)TM%RD/C!45WS##NH.;DJOABkRL@MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!MC8J!JoEJ\P.9$qr(EtGQA9ErX=`0C)M5,9\+^Qfli'YDl+-U9eB4n):>K.-G<4G.R/[/>G?"SBTqbHa!5;KtrXnNrre>hgrqTa$B+O04F8l4b5AaL$ID<IFRFG)=\,7KIVu7&#L]-eNT@b'[r=&OXrUR=B3.F!dTD8`#X8`/`hql,llDUjaqZg+#!26#]rrBc6PPY_errAab;#^O0<f^l(k?i<1!$M!cJ*5S`fD1tK(!1r6lG)sIC*32mdXP_@^[s<hrrCq,8$e!BYIXZ5OF(`WoBlMBr6Dm2j?Knl?htYDrrDMQV#JBaJ*:LZrrBc6O(T!d?ZZ5I+SO?8kM,mcq433S`uQ7%rrAaYrrE&o>#4LE=8mqYrrDrXB_HEEFn\,k%rGDIID<IFRFtGBBD,*&rr>D<rrD,eT@mDWr=$18!0YariV`$0J)h[)YPe9IHN*t$['(kPmGh(&rr<CU@Tl?_6WI$>C$%B93WB)1IF7_+9'H9TZLr/4)/oNT-*3T>"%.F8rr?e>hn@;(:oc_JUl:sg$b.4jqKeSnS3NQmchrRcWrE(F\+d)t1O^)6L>Tt.B61(VC3*`c7'Tq.Q>Q=T!j4;=1,k:TG/<>D",#pI_i6HP:]U#+n,QhrX2Q16g;!RpQf!tRm,@m.mXO:ND--^b^V,,bgeh<8p3s4F!(/(,jKtOeec,X5A%ql,O(T!d?ZZ5I+SO?8kM,mcq46%N_L72@rrAaQqsmpJinIRmhH:Z5GGLrK)%5(nWBodo^?>J\lVpLUc2Hu+cTn51Hnf\"kD"*UMhr?DUkfh1l:l%pF,qlB?UJRL;hC1t'N%:j@7:l,!C[]!!C[\9JWi>&(!0]qQi8;\)TtLX2V&Z2MiC#(459Xhlh18X-?&ZLF\hiP2%TTGCO]fgn]K1dV^fVF?eNE+hbV,Ul'Xmf<WK*9+SW#@`4Dh4nC@\iD5tEd".e?%e$1>TYEBS8M#@?M:c"Qmrr@_!<;urlT2>Of^/gr;n?(g--6&QghG"UIP!k6>i'f;3&*I;@rr=5>C;9B-rTjC-556/g-i6c;n@#5Do?ak1%d,.e,aeS3e9b_LYA^U$57)G([_mG3r_:lp,`ZOiUPY7ea>m'WY(QTV<;urlT2>Of^/g;-&*I;\q%)4ZrrA[0mpG4"FB9jgKrTXLc_u?N.nT\pWrE(Gc)?-L.n?q$o<5_)!0Fn%?hsEpp&8T.7<1WFR]lYufDbjFb0kcKlG)sI?iL,`.n?q$o<5_)!0DPB^[pjklho&BMW=^:Z*ds8)6a&?n!0\05-+\`6S8<<rUR=B3.F!dTD8`#X8`/`hql,lltEO\q]f,@!25_Y!<2dt:[FWVre=YW!6JpJE;k"S5Oo>%=8mW_]mlI'd9L&P<iuB%6S8<<jKtQ4HFNh]\,QGkdHoiilgB8`*nmgqqgWql!&M$W\=`-4>Q0@MrrC/T5I5KNqACsd!%"Dn_thp>rrC,'[9rb'rq68'DaeXF!86)@r=#%MP1"hmlMgkV11,K'8$e!BYIXZ5OF(`WoBlMBr6FG^iI8VDrrCEdIJGHBfQD]?)"53cUY3Q\fA-B+a??q<q=ag\rb$FDH2Y^jYnapW08T'g6nC)0Ycb%E(GfBBB2?%IOeeF:JTl"-dZlYabb]<rZ]t83(7hYXoJNSAMTFug.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5!.&)5PIhK0?UT<&BIMpDD^!psPb_c)I(\gLtJ'XhFZa7-im3B$HM.22oKiP3In+e@m?i>8nr5EbI\#Sg$`GKDgm`nuJ:8I%H]tRNN%5`g(dnO4m#\g0#dnKfcVODM%RK,]L2:(/_rNF.@+7Uqe^"[63r-c"3A``1I2dZGD$Ct)_>t(jT\Md8MBa]2eb(M8Y+<VG+Qr#gRK;E>IBmZ3scM"_OIoir?gs_/C$]sKWUQcu;@Z27A%\Vjq#"0(TA^idC_/m^#)*%Oajt!%Orm7*?NG,fL`jZ_tBp>W8>Uj2?q/Q=#nd47G8bVuO%I"6Wd90e@g+Xf*,[__h(=7OLVaFZ9rG2C%CDH9nY2?/QSJe;nkAN",/;2b85I>pY[X48c'BOAk[>"o]:'&[gk,5qZqUS;D<M&>bT6iDW/0T`Lr2[F;N_/C]O3)_bVQ3V/ZF/*EDV]bRaf+9_,@/U;UEOZu*0Yn;&jWNcIs2gK4L$D4*L5+@_NMkY!9HelH[p+.TV]A*^TtoX9Kphl4gQZ'>U_G3+:Mh01[3JE7oad3?GQ(<c)%_\iH&\\)P_!;a/E7s95sL&7i\PsWYfV+#l-_-_<KgZRa+dlFuP)bQ,GN.8nk/uTa`j-NASu`)R"Mf!$52`p!(7::27K*r-;Osf/EV.;>?80pfX`WrrDj/FO0gC5FJXb`:/9SME5DKE?EEUh,SCQ9@]Hh^Om%cq#qI0=doR/;*Y:!;*Y;*rZu?^7outbr%jghH`5e*R1o%p0CY#rrrAZYe5nMUrr=>M9E,!q3IdEuW+dUU-i"b7X^Ip[V=M1+B4l.\g.,po'#b8h$EI'nEMf2H[b]W`P"Ne_9f/`9Bad@'1o@SIg?MC9daAN4[uO!+P!Xu$M,oQDD?LK_H[k^g1$3X+EogB-U1k'XYGkmA<gN#`Bc]p'hH1O9mH$pDA'?)^,Ep`Q_"=sEI<P?C1#3Cq88^Ah<:4:=$;",\4%g1emX6S@)'sY0!)!7kjC90'>IC)!`o#ooR]S1/X>)iCgqo2KD0K[o$JpI02&;I!f9T,e80lFN.^6o"XK8JOfF#Sg*d\D.mCAMh*bK+[@0uN6;DTD_:HO1>`:q(NC$O3ZJ&2-b+J!/fS6#Xin3>.]%5DBb(NMR@"K<kla>bF6+H"!06W'0FSPjAT0)U<S_BK;uDGFDbluG76)"12.CTD5LFI-k+SOMT02D3F[E_u@dkN4.qiDo5J>DZffH7*Q(jcLfdaQgYhEi2$PJj0;BT[u04=#!2S[CD_#f2lOP%kiFU1LL_ImH5bh4B1iHW*N&+"5Gc?4B&V`(,f[-d8^,G&qbhX)<s`>3\>LCqYpPW7hVFaI6S[#RBWtBMHLs%!`pjma>bF6+GpV9gU5;6WOY[!o$3ouq&:,a<k0]*`cK6bIgSd?.u<WA7$;bIh2??>M.5T?O>;%@HLs2]MLNCMdUDg5U7@GH])!@;E=B.p'QV4a7uc`6$!d,Dm6HdOfbN#Bj)TdnoZ_GRg.hR"J$a)_m7-&`ls(.cI,B"Ea*p$.",q%TbH@_gijNb]n7C;NhN[7Q]-mP"Vd<;]g:"'Prr@g,RVATTL9Wd/RR9\]VLTf&rrA*1O8A"rb-cU=rr=7'RK!7l8+SU%H2djc=!.+[^QiSZ5Q4(l1]FnFk%eQ+([Aa^F$KDQrYPC*DMfjD:6;3--ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-j,pPrrA45V>gPISA39L6>N.,rrA45V>gPISA39L6>L>J8(7-D2BUqXr\)Y)Br7D7VQi0M1t,'2VLT6,9dukp!D_rSYe?,iF^o8NJ8G`H9#M66OmZsdi.`4s;+DZ>:i0#_X.0]nah[YM9f1>]G.#FgMK_]k]XCk)>:m4jd(B\c=ILpC!Rh.K']BHmaNGJ'MGXXVnu9VooGeC_</-iT],rNhAD1_%>L+RXMe<J<7C#!p)O4bjDAbNm_"8UgX7mD!>t*j[6QEA&9$!]]jD&1!2!$_hh6J7t&R;;K7$'bWcRpWt@[0Zf#1.@O4U2)['bXYQ7'*ZI_MZPXK#RdA%RE;S)9l8?dn?*ob9"PZ+H`H,U"BN#N^t&'cf0F16)PW8Uelf7Bh^G2!ZGdL1kpN!C;&g.Gu+G?>hf'SK2qA)j2ulJk24=]58#;m$T7i(rr=7'RK!7l8+SUI=Ip''!0KcFrrB2Hq3p'<Xo(b:ZTL29@HbHKU5CHW@%rN,!2>?!!3U)6r^mB]rr?AGrr=cZ/TWlN!:irC^\[Pgq23mdn'V,)2CIIEpnRYU&Z2!q88Am7Br!S_RV2^27a[ok85W'<$AQSD*+W^>"7d/t9f)lW><>u\0M?6j_H=(&UBO:(P&]fN:ZG-7_Tlg-$#Lf0;sqZQJueM\^oKqnC%FOLnjW0qN[WkIA5T.:P'3SXA=T:Ak+PF@GeW63rir:;kA)'uN:bCk:K-R[%5cIU5#p7<p3*QY/m?sBE&\Jt`o6^cV(b9CB9\lEn(Y3ZG4!uZmcQdHe>A>TFr[Qf?<^':@5,fA$cH/P7R0q9E_\c<8c3:##\2QL`>\)@WO5"F%Pe9^i-n"h1t+nGEin[r@#&@?.5l,%[qNeJma'KIkLZ/VX=VTXF(kZBOA(B`\<(_kqLSHBP=T@bCM"q2^!U.j95.fgbAS'4=Kt=\<0D8s4`X,j=CXpuQnRnR!&J8d*=(kZ3gA)f(LbIiHO+>_Pg`>NKJ_.Q1t+])mm#jTJ,8<bb-h-hrr=7'RK!7l8+SU#H2djc;uZjL2Z?^[i;WfQ'Qh[ti]ij5Qge@^r0be/!8\Oe?fm?Z.&*t-6Ad1a!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!!fAD!%VG_@r^mB]rr?AGrr=cZ$*JUS!<,RpQi@%lErQ+o>lh(-m2o-SSCi=KVte"p+f:],88Am7`J[m/T$L/Vm3;F%oL<DOmKc6d"3YQ'3+9U0?VJqPFU^gk#c/Gf\I@^A/):b(1P?U^&4[l+K9"JccJ!&p%-`kC$[KTnU.Y[\Z=0"`m\^mEp?/^RYVaJANs25>%#JsDUu^nMZNo2GhuU35"a%.H4hCXn>u!AjZB"Bl/aU-'^"&t.iO:`]aCTBcWt_Cr35PE_,t;m>ircD8p%A9kg^utfD'X2Eji6b0b&ahTjD6gQVn)1h]@(<)^7JuNQ5J=!$D\gT<:\eQWTm8s^f&3]EZrl^=V9N9;U3rUFn4>hl.>&#r\ZpP8O)eqqc;G%g32qghmkn@gYBKdE^[1G]Sd^4IDD$b3PiN1r]^q1W5G]4G*^"rdPdCq=RK='T3tLo!'<s9_<a70e?<e?Dfp1KR'q+I@3IEg.?/q5kQ0HmUPt6+?@=9AQ*$KYfj2Q".iPh;.`t#riIH=]9RUSH*Ik6N.95W\rrAX]4*_acbgEIH'Oh(m:2kV@XHh?(1*i%2-+7Td[T?VRI#/8>mFheBfUaR'e1>_:@^E\s/\]U@C5ukn<JeNPJp[1gBsnpS]q[^YD/O6[Bk6h##4+.P&"=I#5bsWRS!*Cmb&V2^qX+6*lpA:k`^Gtn7(1?\D3^E-?QqiS4*H2)B7bB+9<(OSFN\D;aqlKP^1J=:L*:QX#<Cje4B*i)Uf"Mh`GW8;\<:Bm/dVt30NL0Y2Okjah$#iF54,&RZ9o/TmN'uNZ/2MAQV]DhP$8/9)<c'AC0/m\rkG7@STM:<2uC@mjRV0_29_09g8r.2$!F+XaVigF*1RRc^uTQ6)p@J`Y%"iH[rd3f)/1]@#pg=t"@(c9Vn<h-?-agiJ^WM0Ya(*1@%hTp%Rq.Pa%j:t)>'hT6LK$G1u#8lJX,XF%%nfI5Lm5c-a.hn;!Zm+e'/ACW4'G?!/A3`aL:ip%<jomf#]=jJL9WiYp9GBN#_=W,`6Bp:=jPSD/>Ak#SM$ECD&ls.)F44E_*/%.gbZT@'EgFN(7p,M.-,uEdRHnh+GP2aVZQER3N=!Yp*:u`uL]L70u=Srr?D^8l\mYIK';n9t`F9j@F2BA@f=/g=G)C#8*8biK04">G+@^moj5Yh&5XH)`3^.G6l,]LL[SnL"h[Jor@WJDYNm([[X1#M51Q`45lD,<QEm4l;(aZ0nW;[k4$0p_(HuCZ94,W5"/hj[g2?td:dfBra(&Jk,YW=hmZ<se'kiW?[9,(nY.O$4h6t+h9Q7L`]Y;_T>I]KcAhpDWEDM*aCD]cGk[I_lPK^e1\.,#X$G678Qs.+S=TJjXV^7GWqW.UjZi]bDrk"/=1nP5O"()/l^NAR;>?8ppfXl[rrDj/FO0gC5FJXb`:/9SME5DKE?EEUh,SCQ9@]Hh^Om%cq#qI0=doR/;*Y:!;*Y;+2u`mK:c,r`o9]91l)U5errA45V>gPISA39Ke9?A&ni<s>%"H5<bihbXd[FmO:6N&ZGP3%8lLSWf!$W5GAoYFr-Q2="W_KEt$ad9qeebh-XKmVk.\e8J.G@F8%q44iC/&_-Rm>JtN>^f(=]JHk9+n-&$EpD_8Z8G$Q8Vf!11bpc)'1P[O-H835#O,edqC/_>j&(8h5J'FYEKUb:t2/0g,-%B.rtM#bdo:HgC'Rf+WnQk"SSR<<NWHAD.J0/5e_TGj^B]ZUS,n7&_j-QCaRi3.@<ZWDAl(gX8_A45>kT*cDb(4G8G+C,O,q/f+#Sb&?$!23Fj_5r#VZnReCUaqYpP%A4b?Dg@+Isrd#5RJ#Pr:XeJqO2jfb")n"E/Wg+Qb/E$HdNdL@mI8b$EH%4oT!6;R@no"?]>;Gll);Fq!]h0lSI6uBI;]%7D8K<:QqoiP4ERWu5V,3XV^,EH(I",ceQRs@9Z]OCV&m0"j$2KSk7qrZhYhQ2ohQOBDQ+p58RYAXc:Bdl#8hJ*sDOY,K5];lpkCP]>F7cNqZ?8l&iqc+PDeG4f*RbWILYZo03TP31dFE@-[!eS6p:c"SSmS#"[q?PtF.Ds'PZ(5?(C@JrVYr`_pi;Y&\1Y.eY7875,KU9L7J!lWaoTdJ(iXeJ<0m9ff1sPUQK$[nnSW-.hh?*HmFdN<j$/N'3\A5%BsG\J$"-t^mP7Ph=P6o=3eF7M54PN)kq<4p8GZY\.5rn5g0+FUH36]?*-lrt,P\lnXW"$JfCep6#g0j/QZ'q4J"^BLAI$k?`)Z4PBN]Olb@SaX\bUar\q=%cDLU)u3)-?W1+CLm"ZRn$#P+t^]c(U&D^U9M;^)Er2t0J*,bJnn)>sL7)_6!-kqGJ;2=(m=MuY/h<0>WlT(k/uN#MFLrkIEO+ZbKVg1\6trr<;d,2QVMI695g6=GIGNT>B+DH0f#]*RWW]t7/_8:PE'Mon+9O#M8(AiFPHqn1B#dqpDD\A+1G=k[Rj==2`=Ka<3;Z0J-DHIZN#h0E=FgRmjSGM50l0:0F:1UhN^a'P"YVtb]bEibPW]"ZpJ+/s#4;>Wf)6fi1BkOZ;FntZTVh`:E)VAm_30!8Zl[C9[t`+>aSA0dC?kRdaoHe+lp)r#)dRM<5qWO^ff.jks%*-)be*7PU8EkU;Io4`Mfb=p(UVNBnYMPYTWnWc>25tsh>ht>UOF;(3L-*?h(jllQ,T)Rs"FKjGoO^#=b,&B=]MVKi>Ii#4M0>-&OGgR8"T%qPQDWcVa@igXjcf%_<2$g@'$k$kai]ufSaP2p><VsCIIdaBs3!I$mAHZclNo&%@hGiO:?ju\Rb'<WZZn:kI5Kp9FM=9'hl1-Z*1t%g[=<0hWchR('rjfN/XcE_e!6Cq4J(G;1c"#U[a-?T(p!(7:Cj82D73+2`\<#cfAc*A0^F""dpP&S_q4hhb.'-1*U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?$RFFI^TP8oKk:cEAcl0jRoM%sL=gZ\cgXn+=JgQG5A)%>I&,(L2J*8P`rrCt3Y*ha8N.'cg]_fGgNY@sDbr@Y+I4a,tS*$/T$i<$)^[r;jrrDO*dXPm(Zi5R1J,TNgO(?"nIQun#eg:=r53;QhRCHt.Z%')B=oSIfD*S%#!R3"c?]./4/Z8UKi&RRc0BQW&q$5Isrr>7Epj\^=Br8/MZFj9=!'tB2r!,'.AGEA-K%;%=%VYQ/q3U.@61p(acaeKHk%gE"XInj?'n=S6_uB];bobU[.fTLA[>4_`RQZi5Abc9*OF:SFoBot@q3m&"emJ,8MSJ@,@K-=Xk)\kI'`S0[>/U@?!R2\-IkpqOa?Hj^q=cP[r66H\24a](ih-&T=F]6hU\b_D+7p>QrrBiU8$ZLG^E<"WX@rP@bOGN31ARf9U]#u-O895dJ)E>_rke1qr<98en/TjBQh)lNr.F;JrrA[3r'/E<Br7m0!+>Sordr]cp^V"&Y^B7H!'tBBr!,'*-2bsVrr=2<`4tKj^CTofRVAeZfH)C>!2-`\rV/4An;m@6rdr]cpYaHcQh)lNr.F;JrrA[3r'/E2Br7R'!/,^;^[r;HrrBe<PPu0O')qsY<lb4;)Ej8_Abc9*OF:SFoBot@q3)`#H2djc;uZjL2Z?\Epd[G>rr>>h+8bPAP5&P*El@LVX_!5bV[spAeKg^]fAlisQ$G4<Z^9YMB%M\8!9@#+5O4.)B"$uZM5S(QU=r_]XGm9u/>E3qqTc-:Ebi4f#e8<A?KiT,MCK'%MC>,!MC>,!\Xc+e8d:X^!+'^G!&7b:F5#K-WEs?uR[0Fi"h]pbd?,u,JHiQWdZ_;OO7G=$.S^;h?Hk^QgGIA]+5-WFrrA_+TDnnA`fKKT(B4B]>>P8!^gfm??d-8,ne]k'rr>7Epj\^CBr8-7!4.&Urr>?%5Q:]aN??iF/H5^C[\*R"JEDo'^R9O8j<%Kjr;2i>rasQR22hF"im7H/C&\2.%V\/5]N>+56#.#/#;gcRr6+X1!$M-V^ZXCe&+_\R1tG1j:Q#/PkUg6C!.a3qq]j'eoG4\2!5NYGZ<thj+7]rD9E'@_nG`JE=OTuUrr?SSX8[_%+8?=[5I(,drr>?#&,ZYhHR8U5nc&S3qS^/3gqOBk2%;CnDtZ,IJ*8Imrr@T3PPZ085P,_qrrBiU8$ZLG^E<"WX@rP@bOGN31IT\d;#\E'8,WUm5O]Z@Ipr,Irdr]Cp^V!29DOq7r^$46J'YZS+6HldL8b+P@<eRHK%;%=%VYjXnNZsUXFK^ZdHm4k0?=!ClOs3tT5siobd_AaWdeFOTDjGn5PP_%rkS%_r<99Pn%kdP0BQW&q$5Isrr>7Epj\]BdMf7f!!rT)M8/7+A,cOX%3P)#GaJD]ej&oedHm4k0?=!ClOs3tT5siobad-V6iR,lmtlPX.qASZILRCgNd-oiK!mo<i6gnXo.S/^KBj0M!2"<05Kn!-r-;*<!*n:S<mQEu!9@#+5O4.)B!Gq:a,&i6j)%uC%&H]A4mSum2##G*>>#cTOe>FFP[GE/.)ql2ds!,K;lleSdRinFlcd+4'N[<G'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!J,e1~>endstream
373
+ endobj
374
+ 100 0 obj
375
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 475 /Length 33541 /Subtype /Image
376
+ /Type /XObject /Width 437 >>
377
+ stream
378
+ s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;gB"\a!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grVqS[qH3g<7)f5*\uuV=:OJ3fo*&G4d`VXAAUb4?`]E6#1todJj1QLPNY./T:HR^LL4<?ee0&B`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iU/:9g\C0)V9cMe]Y+J"C8^ng3o9("A#)T5O;ZBG+4VaV;#At_X-:]X!tl5K)WV96&M?UFsT2[+Bf*k85Bn<eHIrdr`$!1Br(.ZI_&rPha=8hSPT:XpD+<[[el*Zk=]TXDPsB`A'c_o(C((:X4d5@[Xf?ed<9dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iFr$EI+rrA_"^ZK5'2*[B)_=a6]cG&pfd9*%1R!<uWK%Br%RA9`p%hF0:>2Sp.HQ&O!ro!Xt+6R!W2X%5<pe3e5rr>?#J'?=?!""F9^Z[7fq3jI+:Z[(FI:eQ3YItls<[[el*Zk=]TXDPsB`A'c_o(C((:X4d*lb,K^UQJ68,:cnNOgVRrY#eQJ'_BVo/(s6@H$\O$X<UBO(2,a?ec`+U\sHH7bnf9rr<@\LVN%)Du#hdi@scqr<9>'!&I-MWVisf&$41XFn_YKMT#MpKYt^boG4q6bocGBG^KFAf)G`<UY+)q=8)sNB`A&nqpDlA@],-+#p`JE;V\Si!!Mk.C8+OhIO/I^;A8gDIXsp%<0e4q<U\SCSTN"F@2"_mD@JG*lmD)%F5"(+GH5)bKqV)H7H3n1IG8o4#HN>-b`+2=_tmu5A<tTr7)=2^L`)`W,kj/p_,g(li@>QU@9QY%*0.,=nkF$@hQ6N[Z\F<c-S5[QkuOdaC[PJplM?c@T4S$&5'Hr+pZ[1ERWSE[q=D)q!5Co!.ab%LO#-3Gnjfral1SKUl#6S%IY[\s9ner3qHNt"hm*.qB[]Zqca\!cYuK@YrrCB@+8>,OKd!\,rrAZ^5O[8)!"-#H^#dC>=\j/_@iQ)fN#/GnAE36S3B(KeirlO3_dR3X!'ZKohm*.pdpZnh!'ZKohm#k4rS)[(=\i`E+a0/qMeE4kf/WHqii5_Vfo8>TapX\!AX/'fgkFL7"usn1mbrE9%lJ)Z)mV8@V%n3PaLZ2(rrD61&,Z&LVT-s]I:3'T^LEe$QIAVT&R7`q8,)%F"deL9<G46oBf,]KX,1;p2c6WM8K]"W#6:9,X\GZml1kr2)c-;&KDth,6Xsj1!'[W:hm#Js/A[<?g]5J2`]V*/LASLDSD`GYPqMI#S`#Of-^d0rC>cDr7o;dkk!.\t$oU#9oBQY[q\7LjC&\/sY^bQ88)*E!&5=_G672cQ*_#6:3!:3B]nr[h<4;[/p<uYK1.NaL"3:M,.'8RAqq1fqV)B[b/aQ)GXZu""+8ba\VTRBeI:<-U^LF8_BrU6CbN+^n\[&XC!2!qSn(=Eo<kn7n&,lA?@+.gica\!cZ!>u9rrCBP5POMC9qAKcqa:A`I`5DGdml4^*0KSQD!c`8g)p4M<D*U,MoV,I>\KP5QTJ.TeqpCbJ+>d*J(Ld:d^>hsg[ouXc\[TYNL/@+RG6+X'nOjLM6H7F!82g,SXa&$eLl)ugjeN^kbJ(M,At&!%mq<2S&AB'Tr/\7&9Gr$\"N@.[4''u93WD/jY(cgG&hs'dcI#=_f8h\QWf]uh+m"mSp;#(+7-.V!WIKt;!I[\oB1&l!.L:4.`nJD&ud<A[Tk5t&`lQ`FSd`eo=+`"^J"P?e#1lKc^hiLqB+ZsNAT)GIEU]4@^3/CrrAZaJ,Aq(_O>9l^ZX#Uqt<7kXI?,eh^4n)f.oiAMQEka+dOFA.)=0.'IP6oKd@#%g<fr*Zi:#t83cRqrr<C?Yd=?0T1D38f`(pY<PF1T/`B$'c\85d?b060O8YSt[#(_a8s;geg^]G/c"2tJR-VAU58o"G^N\`^Yd=?0T1D38fVY,W5Par(rr%_EaFZj>\qaZq/pSRL-Q^q_R&[K!XB1;\$a`=Mb9JnJC-$"ncfAb7:LIoFF=FK$rrAZn5O[7#2E$'VlNdCc'dMMLS+fVqlqm/:")=@aT0^<Vf[OO,fBlpVqb04flfEDEJ*#7>bUlW3BsG&F!2!@Xn(=M,)c-;&KDth,K'upmCrc!_@,8IB_(+jU[aK/eJEK+`5*\6ser`HBP$L>8bE"6D5Qg2H%siDujt:CMCJ=pi<hK!L#Q=N6dq*7n!'[Xe!8k%S4nYYXD7I0/-K*lT!qji"r=A!Xf65aB4R7fto*uF\L"q*_esF/65Mc,D2HHIAlOWsk'Sac^rdCL?!5E!9[a^;RfeZ"#DVu/,h4-A(gXFOBp,-s>/pOu^O0b:f;-_dXrrCBP5POMC9qAKcqa:A`I`5DGL6j^a=!W,-c(2'9qa:A`I`4.sgA_0!Zp4<#Ws5#+k'b.14cD$*><s:+ZQp-`$b3E@!'beC)SGg_?h*5rrr?D'J*9nr<NOqsUOM\(0W(#:4*Fu0;+24NdM5t`rrA-lhu.PEr<1Z>Xf27"a>35`\A/#pC8:;CBCN5X_B8=sl(@XeIkt:UZ+M7[!$[_srr?:oo/3ggX+(agXNq@R(j[jV6VTD7RVO]f%5cM%6U1olL9C`H=tTE[/%Sl#j@!7(P#QrlX2^TB`S'%777o0cWR"4M,hdF8"?%0_;Tic"C%eUR0j'Qg!&Ctn^'B+&7BMu#CIr#p#U6^C1Q2=0Zt2]jMLR+gBan:Hfpl_EIN?!]Qo6j(;7<"uQG-J+h7hoiOZ1EaN#_CZ@ur\klF\fHVd!@Cm1s41SK&,o6loJrG@r;kS\l^cmZ%`uL9'*5gYE#L(@b'4j[=nD#Lm@f<c.-/+lSSjld^L#?+V=/6F;!cg>YYR+5+*M.i`1HH"#u!X[/iK[oUu3,j+?FY3\/^6t[u=7L&ISk6Jb"EErmJRSL5ZIUeBV.7IT^pi?Yfdd"so6M=c"5@KH*coV0nPT8j6"<<B\5Big#/p-o"[FYJsVH^.t-R15?Pu5kGQl`Z@Br76*Q0o"j*aW(8rr<,XW.paT9f1Ek5_b_A9d-/6RR9\]VLT6.)aF-?/3iIO?g1Wd;R6<&On-Eh]k+=Emen6gF(0S8rr@p@RG:Y.'oC?RbkQ8Y6[g9[!3a6=!2.q<>gJ0ij>Z'_qYVH3%;eo!T;)82c!0tMrEnX2Lso'IUc""W1t!:@9f)j)W+qDcEG11AmU:);OcVb,Po-.7)SBd]S6_]-PZ4C:qOI33:"d4K#eir!B5isU\:3hA.IuN&"^$f;+Ej\b9"VUB\rK4j8K,TA<&:mC#2h4e)M15p;iH$D>qr4FeQ7o'%grU1G%AI./p3O6A[-T,UUHEoGn?._d@Q4k+"?CK;riUk@G0[RL?dDZ`!h>J=Q'$d3W,pGdnN=sOeSY`hcp)POitY<?gij6:eZlmSF7QbPA\k<SVN:&BPI2VRZs.2U+&KGHEuKlQ&B:B#sC68`cKTV4aJ0.dMgU#'#!Xj^8V7:RkYA*n`_g'_3r$mDFssci*:1?k8>`S;u'?Fm4RP6>I`8J,aRF:MD$6\*0NVE#f4dr%rV'MBr7_-C#6hA4Bf/M:Vb,Ye''a^Ul-WPTn-@f@S3!B$1HDc^s,if[(E_tfZ@^uQ8UJP\o1s3Z@e\.nd]rbId]X.`gUT7damCMGhH;trr<]Rdb85i7^eI,<jdTCVm'SNc+3%6b^V+n1o?^V-T<Dr>rl^-bPKZ()JQ$)do'j&VODM%RK1Cu(]8P_rrC[#?htL`'m\tu^Z3Jork>-,!77dnlY1hU5-OT=WW)r>IZ*k+.&*t-6E=icndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1QAGA[o74g=p\<#cfAC`\mJ)jMV5O4.)B!tE6DrOF?RGko5%n6:'1kq7GA]\QS%>&kg";]J#`GuZsBRh?1K7M4uetsqb`fl`=^Sg4-)JQ8l32DFVT[Z^4>g+'(;0#?/2UY@I)s#oi0GKIgU<Y/<mPRY*DD'.VF*t]5godZK8hnD!+S*a%rr<D89l$s*Z&5X=SZVa&I`C?B29k@:EF6B0;X,IfXs7/GjP:j(&q4@"V^_`%O/]"q&VEb9.<0NBrm25<m\Fj,?%p9+&beaNl(:mRkh4Y'hh`isbdinbc0s<L%5cXRT[tcp7h)i;,^V%nR6N*I`Y=R&PPWd4Bb=YH1*uQKR*0<UT?UF;J6>WB0M(j%d\GLm\%/EEp\AW?RVAk:EM*11'lI8JE`JmDQcjRo</2@H]tcdX<==JlM@2u:9@B![OH:d6-M%)44%nuZq11bWVE$Kn9'JF$3rH+\D>eYLp$t-g9f7J1e%?'+A=aL$pqqq6h(2).[aNhkP.Vd+*+77YQ>8.^>/`UX#Ec;^@dOu!jVsDHE!G`YI4>%0HXHX%9+\4PC&\/7k0^&pajdHl`MPk`/_f`_"Y9;$/orLo'oC#Q39gasR]p%FMW&ESn#b\55NCnlH"!:2SaEfE,<U)iPa+)UmSg/4/m_kNr;=3e@n:AU7#u2-Deo'VY#f*MXsVr?8`Zp`\q%[Yi/Z>oi_M2DGbZ)FasFM+%$QkO>!P8Qgj\uBmrn(m;S0?YG`+*,U\ldBhF@%4R`1[4/6u9qqebr?K["U@OC_73OR-&#F476n=M0V\lt\H("OK4Ao!:(_<,feD);KT4ifg7OPcHn!YNarccns3OFJjC@CDV/+G.3F:1!(]>jOL#.a]Yud$$/O.\;$tcJ&qForr?B2rr>[$C7U^hO-Um\lS%n4B^Yg@jC*o?A,[nUB5p?S<[UF>1#_$c%JZ"`^Baaj>s36M*WH,$hh_:4lgTDf275Z#IZ*ef2/hL'om`/d,>C"lRVNS46VTD7OO+)(+flB<mX6hD-b,D1q97!fQ$/*Wl4k/.QPa$0*!=YI%I1n[LU@FtQViWU8ED"*\o@1!5en#7o6)?)]%5`]>@4ARlapKZ0E$B-k&a(]CBmpVHOG'Tp!dNY(GZa^c#gpi<+OsYZe&m1H^]uS7+CjE4[E_OA9f;SbSO$Tbc7g"X9%V(4b$'=/#<"qG`+L"C6ePm]T.Nj)U>]s,?MFa=X@aEg(m\O<dm]bPEmKjIRDP^!I&U$O8b>*$ZU24NZ%c*&+<UI)^Bk6(s)+/9A/XGokTfX1q)"C_:[U$doH&9,F6Fi2jKUC?f)j5+c%9<JdD99eJF(GY:mB@:Cl.3;D0XhTmf8]a;d,i7l_YC8qsH3Kt<l@BjUf>nE-FAR`j/4k.8.q,p[c%2U[ua_Qt+=@")IEXQ(S4>[&F)mD>1&,q\NnBB>We,k"ug%KOh(Q"l5jS,TO22i(_=8T4TBI]#_NVR%CXO&3-</]:1sk9_Y>hUrD\13YWP-QJWY<,Z?5Y22D8R8E/l4Lc^d`I?(D!:F)$guBTCBjL2i'!KH]DRTHrrFg,<Brl"mb1OL-qV<F/+kB;`0#PhQpQ`k?5iY#=<-P31/@Bh8\<s?UU1iH.D<TVi2eOKW!Ta"IVQ!kS5O.qI?)64^eZ[W[1kq7D9k&2MBr7-C)?@hJ(]8P_rrC[#?htL`*I6h(J)e]/rk>-,!77dnlY1hU5-OT=WW)r>IZ*k+.&*t-6E=icndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1QA9^WD74gIt\<#cfACj!'46o<(Y+2V:!j]ds%"f\`f"oie^ZY1Frr0+res3!.UpTF2E79lQL:nDa:26<MNr#TSil\8EN_%h1B5hmhK:W>s4!+%cW*+Vrh7rpd+6-'VKqJ;A_>aLb#Pcka8SjA3i?`*WU!g%0k?4R>pSN*<Q.])!G,Z`?huu.-D5:=bUWB"EP)[NE?ka.!=,rf!Bua&VrrA\$5O[P1!#fRdZi:#t\3KH?rr<s]SaWM?Um74#aTQWY'Wej.,'Fsd)&P4IfWDm4-*`7CA7fF@PEO-lT?NKb^U*q?T=@,Si1r=*J+NC>rVR@5A%b)N.(%/g"Ii9DaL`G8.nE;/AViD?W7Jd9_p)g1R;bXCp5=\gB9B^l+F=.CV`4=!oCiLgr"RV0BE%rr:k.B=:@mdlD+g^lgdN3(gc@UcZk9Yu^*=?Yr0:h=j]Ac1?G=rHYfA94m^["<H5uQ=9'>bTq9r(2Vu6KZrr@NP1uDJdcdX'2n5=YcfVIGjS%m`:CE$uH^1:C<G44LNQ0:`3*i#<uPh>=SU:69d(?jl+RH?5Er*tm]-]_GN^9mn?T;Y!Ci1r<_TC_^drVR@Vqe@e??MY3R.aZq_-"SLd8M*#ib+,UR3>amJBO*[T,*FM&kpA/2\<6W0_.%EZ<2TB<rdLR@!5F,SDf%`%jraKq.Ggti\S1\DJK!e(W>(JJAeJU#4H.L(e)i#?G3=aAl#rXdOVEn6$F;ITbEAbRo4N7MEQq)RULWG3?Ym4C0tV@m\]:j/dZiVBrrCBh5POYEHCeQg9="I$:75p+GZ``^3EA60A7>n9JdH7RI48X2NnIr$itAlBR4C+LgE`;N4Yokm[_MG*&,lD?L@WsqIUW6V^;Uneo[IV4PIe!Q4+FP<gY6W'jMnIm`\W1)ih\LE]X@b>T9t,sYt[0Cht-FMrUq^EPBU]:-q.8o;cN+5jF"33!3]OTV+beZ^ZXSuqs7="2JArWh2dmH4tU<jecuql(pr1qr/<?cMc$hX9Ck6f.&*q,K"6pPrrC,Y`..IT5P,lYl]TVtXl.gD7'b,QCi7),\-EsgC.dud]._DKeXBJehn/fSdi(SRcCnhL!'ceL!;H/9`fTI$?h=#1rr@NRpsshrZ+iDJPF?3a%\[J6!'bFPhnf:Ke#6FL!70FBp[EZl*3ZSfa15A*.7L>(pC_b-DBtf0*pD99Z#!r/E]4SmN]U3m9se+RXMdNE0OZAB@UF)jb7g%Yh`7U(q`joRKDti\nYA,;J+NC>rVRbt<8C("bsml_5KJoQ-KB%58o3=UiQcF>[>hF]6QaJAXMf!@Hk8UAe0"\j>pAQW&oQBNCth_9gFA^86dJpFrLa#d_>aLb"YY8#l1M:8Wsa9`=-[#ON!GADNNq`5+Hc%gaeme)0glVK=G@L3OeXBfnt[1ghc]sZcdX'2n5E'SVu6KZrr@NP$-dZ-<1VdPU^WSJMNCqD>;Q]%o$V\J%Sh6Sg%EX;e5s4dHA!T?*_jg#<bU<Hn]htk]lTbNkYFgXDll7el4<de.1PsJr;Aq]!.P/MF&(t7-Q6iBak_-eA^,qBb:?,d*CeE'8C<rRAOnfSW2.l/,ZmOX,P"g0ISA'*!95:R7X>QYPqg"[rrA[iJ+)<mS(ga7qM5(L$;&`O>]!Acg[HG93n`GO-PDOZ,ok/+`d7RYh>5SB9=/@WLL[?ZR1uI"Xgirhg^Zol4mHO(C&\/t;#^OQ_+cks^[q%-rVR@9VjP#/G$fe.BpR!N`5^_gPK[&d1)<p,*&d0U-]I)SNoNi'dr'!hLks?Q>"8b<aMB5O,idD)K6qD6!'`1;!8kU`Df(!ejraKq.-@Mk%Q%@tKVk2Q,C+))!'`1;!8h7SD_6J%jraKe<:[cCSFQ#@Br7U`QG<%_&,l2NVXiL@INe^k^;V(qY]IjqS`1ado=+`"YGf5..eH@)D0k=N/T$b"NL8NjJ/AsoX3tcdVQ!&`hrnKCVd=Q5^JLY^.g)RrY)=QANWE/`&:9:W'EO'j!!n(0^ZZ>Lq&2KV&+K>l!c@r;,?o7j^=oLV5J5&%e:3U/aMe)YKKmB3oEi#)N?@YFpj<!k2ZEc>Xh#qSeN]K#iUpqMaM-_EJ&3;dn+m1Ar^MtD6i9+I!'m$'aO]/]HYT1srp]cl+66dL0gFV-nFuk_D>sS\8,OP0*rc559u#b)DMgTb:Zd.OI9M^&0=_pln;$dcrdd!-!0O&U&H;_@J']P"nhmmF*nmO`5J01^8,3tVN)049r&t&[5b!8EdJj1PIttf&'6![bgS0aG;u*'B+',07Msa%^r#u%\rrA]d^Z9).!/*SSht.5ar/GR@8%,DpcgMCF;>s#Y,8:%frr<RZcmIZ@1k3@aiU?UGg\s[NkbHm3rb(t\eYrKJ,5[MElMghooF4:F)gb-BY@@=#\VY?'q@u+JT'CY!*"bt:dkiS5[aK;8%arg.M0Bfg-9Hl#H'&cjI7I9b#I-G2B59O[VRL6Cgi#b/D__]VNnIg%FEDE@oHPK1#o((\:Zd.OI9qj/$gpGjpd=sBrr><RJ&p%;!!n(0^ZZ>Lq&4lZeul,.dm`d2`4^PV>I7\@?@XiPpLFB+IOgQ0U8RCYIl$u>lI:<GIE9A,!/*SSht.5ar/DffL\Q5qJN!N.Ofc2Cp=2BqrSdEa5KLS"@Xl6:iU?UGg\s[D=SR56dr%UnSV/]@!?9O0K3E@pF_WdH-hiU/ksaDsIE3h2MTjR#-Ki8b-0<@;(E.*&9d.]l"-RG'MQ"fteh4m9S0k?aEteNarr<RZcmIZ@1k3@aiU?UGg\s[Nkc=F-5FMK2I9M^&0=_pln;$dcrdd!-!0O&U&H;_@J']P"nhmmIbc%A*KhsNr2ulhCWdci%_s5a$OaY<irr@^:_r((m\,;5,(HNV&iX<jbh$6`-$WpZ1k,PJDKQW:pnB]ar._b(sXS3Mp1NO"YZ<MQu*(tO0XI%eC&aHXp13IJma3@mIXf]9rUfOpc`s'+J&ieoWWh=G6;YJX*RJl+;C-TeRjC-be'>kSda_qBG!0%0eE_6!NS<A:p:]CD#Ittf&'6![bgS0C*UAIaT#D]&0g_\b):\[<T4oYLIRt&N,rr<=SLVN$dDtt=+U7\lnr6OgBX&8jbpEL@N&H;_@J']P"nhbj5+5u\b"P`oF[cjL@<;pP)LXi@'!$_<&M>mP]Ittf&'6![b5N*.Bp\b/1rr=9JFA_G*Il$u>lI:<GIE9A,!/*SSht.5ar/DffL\Q5qJN!N.Ofc2Cp=2BqrSdEa5KLS"@Xl6:iU?UGg\s['pd=sBrr><RJ&p3s'ROSebl7,.[3+I:E\Tf;&+K>l!c@r;,=hYTrZ;(>TM<2^CMo"m[85q7G^WbVnh7NjTC@X2HiARSrrA1VrXf)0%tDqQhsrY673:0\o09lOX[i1'gl,5%Q@U$5l)!-h;@"Bd%;es27&MJ]:?B?_+n-bj!fAD*/1@6M!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=SJ24]':6B2kpo7)/b&4W.G5+&@/>b.Us-?G+jbpR%9d9P<$-MhBQqs#9u$IjRBEM`[8cb?+Q!._1TI9s,JZOa1brcE7h=#L!X$-&>3!'^77rW9JLn=43Bo>=E)!5MX1lLfXlLXt[=3]=B/1='(,P03V5/.[AlOAq6-.3,Aja<Qd^R(;_rf7PXB,4Q)D4e-LR>&'!\enn;Q;e(NFN!AMFc,%$l!"$Z3rr>/=&,ZTGiV[h,UA3FX=4OrVA4XLn38L^_]0puE@ZRS?r`1+FU&=-C]G9F>HsbhQ5?`t[]^aul;thOW1B(\AfS\Ri$M[f6rr<S5oaO+Q8[!5?TI#IdXkYaRN\XFk2\*>FmY^ZJpeGq7q;J9%i%%[tHG@VCosu6jNg>RbJ)NE9^ZU=N!<*&-+7Pfb?h;/7!<3$">*#`7r`1\Sd/J-/e5nI+!"$r9rr>0"rrDO'W;cjNlUq0WSi?ZLp^5N!?E`q(qV;\F7nlEn5Ob4X?h;;;!<3$">*&GR[%I0SJ,]M!X[gq,rr=P[XjI&hFOXAJrr<AVPQ(VFDuTh,'r_-4K^VM4!1l.L!;HoNI9s,JYkm/dk=';,GkT%l3jsZLF!OB3Q.F&\7_jlm0O14,0j_Q"ktbD6Htl\d\E1-fk?.,D.4+uoUI[GI?A[4IMZ`')1#d*\h>$`b(L#CpI6O92(e8?M<mN=t'(kfr-^O%:=P'MH@oh!)0rGCI^@;u35JMXg;E]eC4fJ4j?fbeoh%/[=TW5"?<D]]j!!.TR/TW$'S`q6fb5;2=!Lf)E:@sVCjaI./JB^U7lMgi7(Y7f"3]_R;R/[/>o18l]SlahE%+KdDH),r9/+<B?C-Jh&q,i&_L\%:=U:H?[:Ge..jaI./JB_:Z7^$U0fSdp.jq>X!A\lHePo>cdP0g^J.9(]!P&.g#'NSh^72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!>h=g^j>Z&DqYWSS%<T#&Gan\"?6&tFYJ^A?T[qUV5El#5c&;Q;c$j?ibr!k;Brk'l%5cOn1sc:BBr*Z85R;)$PgUHMBr!S_RV2^21t%h,TEI*+Pg`>,+f:],9f)j)RVBd1BE8Q!d[FmC">nS"Bak&!e,0IN!$_'-p%L-=KhO?'!!3*"aLru"IEVWjTiTS?'YRT5F&2T#oRER`d7"e,dM,PI!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#/:!!#<b'S,Pc]*<-#B_uB_0f1TB#M8/+/iQqAu5Pbh+6f[u,adh"uiI'8>NeGh!;b]-+dNPKV;b1R&VNB5pBqPrbIhQ$RV;KAgQ:lW,\5\$U!0W;W!F4fL#M2(<]A5q\=_']aVVXJ58\C]s0q>L/?qB%4<#cn@4TjS7h4rh@rce9fq>UH-g\6*HB'Gn,]CEpVTrRm,C3&,d95f[=!N!4;4@a9Q7OR:<qK40J>q=SgCSKGQ397=O3bn#o]AN64:T[+i[n:LT>!#adGu[pT%AC,MaV\o7$**jIYh#+Ain>:(=<V-c78gBSgob[Cm!&bfc!$`5o<!.;I-c9rG<:99@T`SSqml+FX6LTkpIT]O(Q/DtX,0-#H-XdI#9t2g#f5cZPWb;^rrB19i/X_Ej_918J+*[P7A61F8fgm>9+2E,NQ3au@!(g=jI./mM.;MCRc)?[q&W(,hQO;p%lic6k8]@jhMWE,\FUUs10gru#pKkZ6u&)=Idk-:SUIh5^5sqc[L<K'g_n8NDBhJACm`"#II-$Ye+-kW[JKn'^`W%@Xjd7[q$tpC-+;8<j]1>j2A!u\bQCD0QNJHl,]WTX+'=C[-$a@q,EaC5=q[LCcG<J=&dTcV4cNUoD&W,l^loU>H8olUYZ8S_r$nDgjd42SioOKjOqoU2m81(%n=X=dcT1Gd50oSPn,?\`7mCacq)5^JqYpQ2'^C5j@m!XXji&27CnS4>SNt?&"HoM^hlf!O?"u/cp*UX-&Xb7FD[BDp_om'TJk&WIF5*;Z2:e3KB"3rF<6H7R\6lbn]/X_X=E3`s8(f8PXe+P2*T3=,njTns;3Mj=a55*^Br=aVlYlA!WpTdkrrC-@2R+BffjV1WRHJ6pN9gt+7UI.>)*Ao"N+]jT:tC$JCkcSo)hgjXaLFS,mSJ;)*XKj5)*LJn^1o%=A]e:)2!*'SfL&2D9f1F5_A[-b1t+\qC/4m1!6Di$rI%?=!23A(V!oK(Mpd+,eA(hpD'._0eUFDQrrA)j8,=5h'N%u'+[m)A!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!C[]!!F465^Z792chdQ(q@.PSc$5`W6XCc4!3a<?!2.om5!P8/RE^Zh(X7DBkRBAtNAT368;<RI9f12u)Pa7dblG51he/L"09iR]-!02?,_/@/;oV<eX/;Q$[>+5o.Wm;Q$o#Xk,G>6\&%JWt8a9!uEO9pDXQI$R;NW=][$#0X*6),\JS5<Kcher>O?T<UI[dHEhcsA?Ko?fjO9M_bjU;b.ObVH40uc3u)6F`4X".YV.#9'W3$m7<ns^"":FC'#rHcj,Rqi2JSJjPn,_bh,U6F)\cI(/6*U@E=VXLEMRM;dAg@`5Brr<2*Wl9$(^gfst[p@j,<qCT3:E*&L3$1's*CWki<A6^Q%BE1B?SaH3"I$--?j`/o8He'!p?I"jh-%X>\'5NeRG-'2dBLr'<.ih&0;_o1]Pr-b&gBpbh3!qnUbEq_hk"Rm3*@[F3cuF3LL9fuf&[%a2%-=fMC@J8k)*f5cP,iRPsGaLS/p;!`rpi:HB%%-[t67W4,5TsG#HCDVq>rD%j[*T_"FfHm&f5[SIgO4)%`)ZJA`5gH-&m'C+2!_8Knb6fg<d..7kCZ1D3fE#9tLc1JaS_^TE"D#ICJgqU>EShIgNr1BS)uXFIp!aW.HY)/$tpe)rrl.d@i%2\<k3g!I:?h!U-R&]t])!?&s@oDTJGq]a-iNYI>4+tUjtb0!e*bAn)38a2[c)L\`cQfLTAb7:NC'7fEe^G5s*SMo4q?hf-G"NH^+PZuU3^7JY,mjQ5T?/1?_@e(bRF"hfL/;))nLBA[i8FO?p3c3*mG$]"D"JSI"KR)>C].Y&u;_KuhCNW9p:pS6l%F[FP/4jY=nhO"i[6IBlqZVXrq-8NqG4Ys*YliaL;fH^)^\Rm0^abeOWdEK)r4h0S/bNgg^:0)i,`^fJ;]HE"W<ujd)s))1SsZHuH]+hEr?WdEZnoS(TKkjf&afdlo8olS_=aoI[$rHjN`;!j6qN=T=G4a?jTOKM'>WUjf1WHUA2$EpZ$)cq1Bei8OpBssW`:M$Uqa$]i"6l-\W`4\H+u$'A[>)fVNBCifHI,\;b](KL8FA]r/9!Qf@7S3'gcYR!WN/@]dNc,9E,!c<mgm\]iXK?:\aGOJ"b?=72:[-'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!(!Uumr^1!3rrB7?rrA_D93eBR/toT#F:4"`"E;D)90)2?g=m+@;TmDWB/V?<8[mN)B^&5Jei3LQhB2atTWPukBb--/&,HXfraqM%WVisf0C(HESUK_S1kr8rMf]L+$=!LAOSH.JrrA^g^ZK5'2*[B)_=a6]cG&pe)JQ9oilq`-JrkFnOSH"GrrA^f+.8nVeG`PD#M*Sg!':#)Y%\>U*u4!HoFllK1t1Hd$iY`sIV+XN;u'eU+'GB:lgI<RVOGUj.a\1qkU-VtBts/%k^W4;KC^pH)P>1Oi;1\?k?iNmNAT3fr$<7/r</ekl(@I0k[fYO!,:3K%$?ub`i&CB\3@5hq:FJ_F%nNVHr$Jdcq4hoS,WHp5)]F@5o;gB:Y=1r=8)sNB`A&nqpDEXVR$4%i?ls%kT^W$9g0lN^ZZmQk=;eVr3,N!XO7#ipS1R5)Tt;jdD+li&*HK28Y^d^66FL6@oN21g`K[or9Nf@RAQFs4s\PU!9bR:k=P[R#p,0-!'pm?3^&HujaV5tArlPe]c'A/CGbgE8H/[_KKl"NnJ78e!'fuPFF+pub5U>qboc+UH8LUUi%OmBV#LFuWIOOi`BGHn5Ni"fcF,nY]#ip>FZEL5P_8@l^.CeY\WsR0WJde`f7tW8dI$KcROFo@cG603-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig4-Jf2?;73$i"%\VkRW@4DX^?';"lQ>ro\,QHC9E#WTB3>06c^hiLqHr`m1f\T\jRPgG>PgJ%rd=,5!:SA9!/2NJej&chDuTfdQi&>X'QZIsaWAE>m->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*\tqhHGD'u.)VJ*5,7rr"MF;>m%qrr>6+rrDfXJ&8;77l0QQOmH-JcE[BLT0%Q"oY9?Tp2uGoq:koLhkg>Q$F</@ca\!cZ!7)da8UJRrrDN9rr@a\>$+q"L`4//Oq"0ZYon=%!1@a)!5MZ5>lC;mPW`[Y_,_ZS2XZnfmMqAUC]=BI=T8BIS\P."?gsif3lh5ImJd1Tdf0<$=e_NEmMqAU<rUCLrrAZQJ,AlQiCETaO8Sh.rrCrQrr<D473'X`E_!B=q`;dsI-pq6n'_49Kcf"!5P+&Vrr@M7r$or*F$AR)*lW'alQ>ro\,QHC9E#WTB3>06c^hiLqHr`m1f;KoLEq3]^U("kkK_uar@dqCrLIHu!'YT+!;G`-_Q;-T1[Z6FlrO,2Z2Xfr4+I/"^Yr*['QBqjUIa#6Wjic>.5p&C;+kF6;+2X^'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'NR]8Y5\K2rK1.+CUn>Yo$TLRc>ci$\\;2677r]?*bfG+d9P<$,hemh$MoPVoX'+b9r\-md''Bthb.."$2K#8r60W!9@*$UjE.b11]IF]5,J8Z6H5`!!.?F@n<<-EoIO`!pX7IU-ft*+o+.tOoD>0U*AnSUrrBo5W;ckEZ)E0091f-`#tC]i!(+]!rr@I!*l<A5HN*t!qV<eh\c2Yle'VF@r$=Cbr<kZArUdIH_H!Oad'K[#hb-JDT9nELbW`L/cgH;DFS&Wfrr<@+U&P*Zc2ReBoX'+b=+C5M6I#N1rUdID$2K#8r57iB]`.*n7b4n]GBorhgXodhXlI?IM:_`0ajj1sc8%J?MXW8+Gl,K%0DL5:Nada[l=cp#eL-1ZFcP;?B#]'^hJ#p?S7<<#J+/`\rrCERJ,]Ls/TSEKR*e$1Y5".j%:=D7W)&U,4Ke.6pQu.L8j.k*^@hJ6ot"IZF8l4be>TNSrY!uSqA-:7!:QbZrY!uSqA/Q"!:QbZfMB]Z?fiG7V<@S;niE3iQ2^i;](c2X]Dhm.l"L(sKY$pWKtI?bqrqef'Cu%Pq1mPcH2Z(eNiIuuJ)N&orrAa1rrE&p>#4oe00eZ*^]+;JQB,H=0>2k&I;YCDh#@AqlKGBLrY#[cqA1g"n"lfY'-"^_(GEPlV5)[=bO8g#+'YT)pHS40\gs!E!//A\re8Paqrqeo!//M\re9+qqrqef'Cu%Pq1mPcH2Z(eNj=Q'rrD"5])Mc(G5M:8>1q8FPh1#nHB:5kHQbmAJgj<NijkZ;W2O/Sc<R@7kh"s2d7"e4\5>[/!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!)Z0!!*;&;?hk0+F8iobre"K.F'^3n!0Gff5O7h=!9c;J&!,fO!%)brrr@cE?^a#39f/`9CD3L29f/`/ciP,"V)6Xd#\g0#dM`+"Ubns;BE8Q!d[FmC">nS&1t+\qBr7-D9`Q?6RSuaj!N(t,RVADt1t,'2VLT6,r!36%,4qN#pFlN"9JlbL!WN/@]dNc,9E,!c<mgm\]iXK?:\aGOJ"b?=72:[-'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!(!Uumr^1!3rrB7?rrA_D93g)*^Z792chdQ(q@.:/j7tp]SCkU8I+RM@K[Ld4Vo\=TX"1e;V:)@FF0p3I*"P>u:Z?.R_Y3*Pe#m97D=@5p8?D]`gnmBIQ6EbCF;oN9.Xdf<qWW%VA?G%oFuN,PeeB%Qe8S\dI#*gm]?Y8H/rmPiJAdQ0[RN?)dAd-GBT48VL:);$c)HXkXJuf$S/d`Tduf]f5@j2G(Y0hRjHdsNfqt4X\CGK`'(ISB;bIJ7aO%rL&")GY/!`:4mF5*"gDAktE["PL-%R;,95.d(o-=T2fB4C.'@_FY<+P_%^T3"*_.`iKX'bdm]P47Ag"]jPgP\/%L#+6<Q!P^a#\([g,k;9`rTc+C\\+P/et[c2YZnp5a;mib-8<AjS.#TBN_cK"dV`=!*:##jT&'DH&,9Y-1t,Qng==D+[kV+(cF1\Z7^fVDAL0]O1An2h*HTQ"WMdMBMcK=Q7hrRV<%eW`P;rOqG,`S+!]e<75@Yjb@M`gd\+TJ6L72m><k+IPD)n=^AM%q&U5=CQ4K/fN+E[\THW:r+C#HP:RI-o1A/=Hlb!UR&,`B/8/a_#N\*6:p3@h<!>6M"H/Z7(qY&9\BXAA5!d;(HK.nGi?M'SD86BC7g;Du!E*h]+"ksa_5V.sn&lW4jfX)fHTQuC*1jTBMC#W_(>h!k9$^TZtI?Wi)drH8,?->],<=VL(E<_IVF$P\alYqgSqf_shE!00Xe*P2)GA(5Fgg?WPZ=^p#\rll]SJN,kEE_:jX#G*Ak)-[%?fCc*AYm]<ir'1!5>glDD\(!q$%(!947%4^ND'n1\Sl5fZnb2XWj/U)s\\IOZmIS'6p2;d#Vr$1"]D25!W6*r<-&@4PGMM%3dokj1Qg>cBeDKuG,8`DpkP9S?EVe6\]N=>K&uEjYaZ]:;ln-sF\';qQ^ZJCR#AuQ^QPqeW[qcX>6;8l/hd=,cV)6Y(rr?iG2`Jd"\m*mshjb6^pM/KlIS^Dp_;_JlYp=0FS34b`GF_@\aVP>DO.5T\*/[@IT#Ef[(?WH449tld,4qN#oe6;u=Q\pGMW@,KgWIcX,fm6BUp?6dGpeZBYO\ao!"SE89ciFDGf`U5D4hH`P'Vc8N^"-0ZqtLrT;Us`lD\58]V"D2'N%;?*MGn9:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]XhQM8/+/iQqAu5Pbh2[EWrcr^1!3rrB7?rrA_Ce36*\r0bffrYNh.B[^fJeD@mk2[_.GG1gp\X"XMT:c?e>J^^,e6)@^g>l!nX6h@Z$@]>s2<1GRhJ?-\YCHd#\F)P\!hT2GrQ"OqY4E3),KeW'RJ>]Dt`.0fe$k=_kkr)AV@T_EZFF5pJfI4S&)*@mh6,d.edmlO4LU2bH<gLn^B:7h:3LVg_9U#&tP!I(<O69?:QY@FN2Fuc;3AO:rEfIVT@SQqAa%EpW%33ga%\-k6+V7,P05qa%Y)81k4K=Q0rrC*/o;\.G4cT>#>XH]t0%UIU-un!\"9X\&oW.,CBMt";9QGesXOY]nj%ZqlR*-[;nc3Ni15?p0!<KqTdS$KAbAo3U(q<u+o,DCPd$;l_(`_SD>;Xf!4M-O)_=U,n_]5in]&fW6k]>,</"aqEk>BE8D_&uY6l=.+)s=ea80=<CcE%puV04d3pI-sgD,CXWOb%UpA<ks3>B9:+3!=?f:7BJbIm;/<GFoG$:.X/mG95Xe\pDnZ9f2\-gg88A[>6-9\!?&h,7J-PNUtsl,S/.Z6Fq<F73l;P@4!oLQ.`\.@>W(GC`9ftVN,A7#7/"Z6#UNRWYC:\%,7/U(+acBP"@eAj\.RUrr?U,0:2R+@r>)oY?^8(=>\K"RI>.d7b4h9oW'p?c"NKRQmKe?gI$UagN/>7H;_jnD"*7<0Ms&e$HU@W0dMiHaSX$LX%&3"kEg18."<]h2ULH&@g#PJ-p37[6N7$."[NonCCIpdUGM6kk"-Hi;iHd)Si@I(dnL0i>sZqlGA,+*dYrB%/BJg6P$n^']UP.I:YtuDJV>+"CKKKn]MW?`b)(rrk!`l-P!ZFhrD2Qi%8Gb6q%ok,!3`AOoIAbP8lVX:0@]+W:k`R.\kDZVH75MuNmOMX-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-ig!!-igDc`8C,(nE9b!+8lDT>31-A2q]i@40o@D7h*jYnrU*YDd6>qFaBAHr0bffG,3m\^GL%eRVSMp!//fqrrA[>6iR,e>*Jq!4ZiXkoags(C-Jh&q,i&_L\%:61krR$j"3@lIJ"-K"_pj.9Q]b!pXDFs'r^uB?fb_h\f]4XJC@5#J&5]nrrCBZU&P+CX\&Nm$&5)P!'^/W!;HoNI9s,JYkm/dk=5!=R_h6AYl=]qHiF*D"_qcAFbfnl?iL,a.oGtc^WOI[F?c<8`gUZNrY!rrq=_T'!5MX2rr@_Xa8ULjrrDO'W;=27j^Ihn+3ok`9f7e-!!uqlr;0k$!8oA,6cM0&>W`'<djciZ-eXt4=HF'Q<PKbKea!/7.j*@+Ikit-1tEi?<L<X\?iL,a1K&_>;e>t/51ff7p^GZ#?E`q)I;Xi3UM/+N@t2?mBE%rqfDbjG%+O208aQHWkM#h5!!/OLX4@2M+'YH:kh.eIZ&aaD5Ngbtrr<(gOSG-jrdCubn/82$]jKl0osu6jNIsq_OoGCf-)^\<?[pui;LcPRC]=AufAH?3e9tZ,o!%uH&*HEeVOGX,!/-6]rdCubn/829LonGTgACmM!Lf(Mec&Sk>G:uYehoC:^Z8^brk>6/!77bPpkIQ&IBUET)67tsC?*3b]Pe['M&7bG%LMd.p2Yj9F";"?;a5+oV0MPmkl1WMVkT&!R-b5/U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<S!U4<U6m/I(HU$Fr:$F'O1dC48F=$L?t!$r.YrrB9'L]3:FTFQR2.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.36tr0'j<<aX#dO!2Zd]_cP6go^ao$RGoX$7`AOhrYJHn&9(.f^3K-ZWT-biHqI`VlM'kLg8`&jZt^2LMV7&6?&'[@Pc;YX%lph8^%%t\CFOkl=YK2i6Y;ou5D\@mY%(*`3_tV*IhAl<B4($l(S"B7Bbt/%+Zf5EO':4Fl8<ael_ild4C'6!Sc'4OI?-pnYj=JXU?W9N/_GZ(L)Z9:YWeTHIgXur1+P@O:j/#,ZmnD:]H+kH.&eaGU5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5jjQJ-me:rrC$l/VEjgls*e;&DI^Man4VDI\s'PZ/RoBNB^$q_@t@5k0%95_9i-r<C1P.ke-OJjb]k,/7%.EYP^?'l:D<h,QKlh=BF?5dB'28<oi)lG)"ClegJq,5?c>r(jk;X>Lb@6"4t]Oj[K1LI'%,If(s6r)g'a"Q9I'3a#O-YOk50qd#+u0;;Jd/BYUa54OrVh8j9i$\S:iF3OO>Ll?l`KnEI0Lq.k60UrTbNL[.e:!5^?A(eLiE2d2F<f^H*gI?\iVLso'OD^Fm'H@MOHqQ+9+7cisFh6C/7b1=Qc0%Sl-;pmN)VDP0=CF7e[B0o0?,,O^uAZ-s!]3(pN#5-([6e#.?kVkPBh4j2d2ILW]6fuAf!.;7JhDE\_)RG=,H@?rUPjn>-maf)FIsTVf:D%BRG8d'9[rIG7fJZP(n9M-142lM(Uu#?XW>s_&1]HdXoYKkg;b^0'dk#VVgNREIgg_nJO.khg\`q;sNP.R"rYU]/=s!mNjSo5)I]8l4'uNP:heBaeg:bJ:Nf["`fY2kWQ"iMtCDIn)g-;2HlTKgTrrA'#B_Eo_"L%SSqSSBa@b74;nGQ6GqC<dbnOAM<OI"MGM0aGFI#jmn*l!DEeoHG<m3Q7U<.rf[mXg<EW@THlM?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!M?#'!ZM[!PYAL-S1g=(b0"6@/6blqHOiYZ/hPr<mBbNMt7EX5k@oBRS%i+<>C\`#-Um#m3_>D8#dfZN.>\k3ql8/6"/Ch-IBocIi'C>4\`-!-a(#*GkAsHj-[[CuMLr5&n!1"_qF[)F=:5in7GCH$0rrDNu3d?M5rY:d&YO5c[AfY[*3gfpIM.VjXE1W9Y%>0`9#;j?WM=gt_>h/8G60eYdb)>MlHIk]%VR-!`Hj\c'hJ;dq0B+oD?,#Euhf>9RR:E,7ZHCT4#CVI15?$(^P>3s`=Z5$H3[5@SBWE@B=-;LJNKMm)g24YUEP\%D+$p8KS)R!Z7r]AhfQ=aFA^:L?0*I?SrarVeL-(2t)3?su0Znam2:=%A.H</(icr[F).n)%LT9cO80%=\XZ=BZDkVl"F.LbEMR$tu<[M1^Lh$S<99o&^Xo`)_E__)Q_;i9F;u:>&/T2q[[hu4m\4/B>`2^sDiSXC9Std;:!k%FfgIkH,.$)Zc%ejVQrr@.Y-Ni"@<:0&EabA9X8Lp[hJjAcJ:oAoF8\jSB(T&[HWUF=W6FM_Ch`pE+!20][W7NTK9=nSk"Kp.J/W9mp,<P]`nCZcm3MJV4_eX=;/=*7B9dE9+)a>mM!@/>Ba5$i]N^ddVgiff@B[`8M]Y^n<Al;A_&9d^`9TXKYV/%#^[<lC*m[`%RmQYs)icETia$/=YF2lAgnF\A3P&fZ6Mr)Wu.QqBn0'O6Rk)@4jRbgR9o,+.C^Gl@=*N<CB^:1VD$-fi32R_>eUFns?P\brl(^#eJ_QJB!g;aZDN\/R<"`lMZqlu^&,a65D^Z6l8VNi,qEV@cs2gZb]q<oIg2_b'^$sSmCJr`O,C/4.LlVI:&I'qLgIJ`ipo^a/SW8(V'4A[RtOBZPYT!Cu0F,s]nqXhle$bK>Y%,OCY+G@bUV%i`c:h12b&^NTiBe2+<-muNe>TaD"Z940.LsGZ=P"ELi!",1Sc7,'&o$sP)0cAhC#T5.b`K*c/H(itgpi#plH#=@$DYjA5_uB_PqhQgV0$X@>Xj]Pl<,oL^8ln*4K9/[Fh5dEZ[,!n4-FfX4Wq-@!X"-i[k6/,3:X";3=pD=4DJ]hro5]37J"E9`9)D5be4)(XA!HW@7MpS!R\pplWTfd27^5'h3a:D=p-54r,Ohgf9f5eM33-C]gS%CR:2cQ&H`\CHMU?[X;mF-goQG<sB<c=>p"F[+[AN__8C`N#9B_g?q;fS3rrCq(R`mXYWTj7b`(!Dp?iY>3cI+r8<D$6RUQ(n4q*4I,E32o<b3RCOfD.56U:dYd<7Gcf"?m^;^V:+@0K`ZX8j,*QD')R!]d$.8rbXCs2)lh4omu^EN9+%"iuFZCmmUCiRSNbXTA1,89!k*dgZH6@jV1Qo*C3+.:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]X!!:]si8[eFbYY$d9'cW$#o&'3?c2hLE@ONjQVh.^pDTA2F]T;iqAFOX?QX#PJXb,#Gf4sg2XIci%inQ(poc(#]Z"0@g/bEj:8GX"Jm>'RAG\X1C'=0fC#@(T2`LZc_D>r>Zre#`3Z]W94XB2;)1*.9t"rM1b0a6rs-/\`MpAQBnjSc#(oNrK*-aMA8c";#kk88At<*VM6q6e(OGo@M)3c%uB"^g$_O(;B;SQc>es/bC9hqKleYmY@>2.=3?oJlhjlq0jL[M+@?GCX$V/%=[qf)T11iRON(Xoo@S3q6'HDDS(W]K'EXa`T`n8lt3Nm-C(OEQPIrEq8%eoZ,-(KlhFMSWCbO)]SgYbiU0A33QlQ6nng9(Mn']D$\i/04+Q6\(gO9P:''\#H0f8O,"k'U2kP()]U/49`.m6r`"G^qP($YtTTOhIP'beWBr8)gFLIh2rrD6W)?!]EpXfB`r4`o:Jl<rg4!f0SQV_[?,I(_"p36K\pP/(N+)7ulEijV`B)6\aP",=R#$)mOb&TdSMhW2]1Q:paf2-4DY[=gHQ_&I\(,<hiD2b'^?tZ/XP&Zq*Wcu&=rdX''_oXcKfDN;Z^I&<Vd1;!hqh:VU)W>.@R3oIe!D4%"\_57/+FR%3Ra-2>fLOXr8D<a%I&Ygr;os*f\H@'#c[O[1=$UJsPH:3s77Rd8<gM>75Kr7r=QRme!r#SUnZnD76IHJY[dl?K>TO)(Om?1*`,.AV@9Mc8QJP,O/;<Z;a8m1CpQ#CX[*:Fh!@6TLdZn&$DsRB';5%iFY+LLFJYnmY\a^`3%),D52:]P$6Ya>F+3TO`E-RjOrr>o/%[dY'!1&sG^.`l%k^Klg'=H\TcTl`TGI2e]jfeRco/%K=2(\)/7oE(^XGM<lAnE`"XOm1go?Pkork0g_%g6%IM03UGSOu2n-#Ko>m">4OU:%A:Z@kS\D\NeEiJdo"dYh"apV-n2Iupj?HR0F$^[h<J3\<;/g7MBSdU55qpTiiC3#/3&i-d4<"P<$!V)\H)Vok'poZ,Q@dnrWEP0t7pJ"GT&Y\s+skNDhKIKLdK.sR@.@n>WdMM_BUJ>^d`@W\GSU5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?!U5C?#L81L-]!?1eZA*f^)40J-7N@<GFaFLU%e^o-_cinT\s25sH>MchN>"9(m!4UGlcCN*P?es%X^'+sqEBS;c)?.Tq:oR$,sC--H-#3%PLSN3=#=b,gI6][)p(7mmCq`NA%Gh#eW8no^]T)jBc==8Z?dA6%o.&2Xa@/lhN!!KRbjEh24YbY5T?kB&"&sOC&*;Ue_:OO:"8sF]8b_IH'>YVqulUs2.c&Z*7?]R>4TZ[PQ#m,g>i/83ND5<08Wo^r1EeIa]]bp\X-t.C]'"51tH3/)V+KO]1CKk=N=']n[s8PN^Z2\nPle5A^I-2;:^"F6&Y&[cf*HIZ+dK+Iu!/.=ln(OC&23-rG69gbIuO"b89a2\lP2g#bi9nT1fTT57(ZRI+m/V1l?V6g(,YtTfksEX*7:c1sI1%fNCWLkZA7uqQ],0jeX!RrBJR,!0D9RT>M^MkH"KHq4)lhhhnV>)I4.H=Mk!Ohmc.;H7J*4oZnSglVhJc'p"1<"l90YFad>J95;Ac&@h"d)!!CF55bq722/)E;TX:aZ(oI-]"4h@/3e9!K;(sC;<Yo_m?*K+CtHJ)rHI$\XVlU'\U*Z;/O&c$b>,@lU@RZQ@=^Lrcj]l$C=Qm/g>k<!Q5>DF2%+d>Rjgnc&Np[%8p`8MrBUNdZ>I'oF==)g+JO`B$n.j-!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S!!%=S1dNV0/1TJHfZ!qYPp!!It\Z;i1mpEVl:!b6XXlEn3hP^E_)'*4BZUrfA]"[?bK\Ti-adP:O-+37:8%V)c9CMR`4]XdKlJKL1o,a4Kf&"Et.pGPSK&.d[*-%oW:c\R[!(3UIG'Z</=kL^T`2'Z[/C);!bf?#YGpMrqjV1Ml72/Q!72/Q!72/Q!72/Q&7^\p:W+*?ISZK4lI/TN-2$K1,<JU+<m\d6p#R!MiC[t_92Nt1.Q?pbJ\AT=@c@c+"6HAOJW9V&,@WuTP=OCtC]2aUH3lr=dOBb3.AV'_>2e2[rO?j#,!77INbr8e<YeH/fnHhL'kA@'d0%d?mm>p1l*E0^QaN,A6+:nhs4X^>EU5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U5Aq!W]ISjBqj6CjlDn.GZ>`i[q,ZPX;bdAI\R_5r;.uIPjXRg8;k&4D9(9+n^=h!-RI!mQ^NP"l4W/L\)_[r=#'DU(Ose9:]CF1@nHB4(Ose9:]CF1@o(c2k$O2F'D733caeKHk&hA>0D9l3J'_CqrrBiE8`Y-.rdrjRrW='%P5]%frrA./@UJ`p?\eHJ9bkhH4tcj8TWXpe!.`(Qb40EK"a'bEr!#!)-2bsVrr=2<`4tKj^CTos\gs$9r*01$6!Flt"uMf3>Q4[h>7^W91j^PHbOPT4+Ss$kkM3f_o/b#EP2#!Rq?g>Si%_%JMgsq>@K-=X`fFZFR=7B]+'=m-qj6:@B3drH+7WB]cr.d]!!1=^nRqe(/3iVDdHm4k0?=!ClOs3tT5siobj4Jq5Bi#MkUBs?!.a3qIu?PT-Xm#TJEDo'^R9O8j<%Kjr;2i>rac$/&U[cR%.IQjWORATO!`7MnP$acr4->(VS't.T8]k!?)MDN*7o+>`M?oGMT$h=[=R;5E&"R*I#!;C8L',Wr(5iV8&_df2RdmEFVUT%*!I?mgjb-6,:ANO!7]ScS#:%J25mq3-.4@&+7d\b+G9<]fe;JpO80=@bP<IZJ!o0o'gei!!ItDi>2qaF!#C(2:<3A7!R3"G4BMO_5q=&T#;gcRr6+X1!$Qc"?h<\mL\[L;'ubU!`IILmZ2Xg>F%Q)/(&n9\9#pr3!R2\-IkpqOa?Hj^q=cP[r6F#RidTM=^\S7=rrCt?8Yg+tkPQUpC"eQc[*Zu(anr$FS;KIhe$P>9rrC,(ZY#Gpeb&+Xk&s^$7:L@m'N6<D3+@/EF\'jpAn->kmUuXn=!\WaY'>]\8[Ls=dnGha8a^(>e$j@mYl=\f8\WC-n+mE+rrDg&CNi,!8kCh(@_&n">@$n$!&LOI\W=(A]DdE9J,TNg:UBi.rdrjRrW='FaaZ)DJ&m+AQi-`IiVmHGX_D9nV;,;?:l2:lF!?ksJ^-_F"Eaif#fs3AHr9EN[(d5ef%PSJ/uNEZhAIBo8D6(8N3:&4JUlOl94@_Y&i)4jS&k,Dr<9S.!;m$YM6D.VpVbHqejbR@EIf@fOQo!!&B!uoHR8U5nc&S3qS^/3gqOBk452:/I6ts1p=;M]]u4\;:;%NIA08nBotfiu*q:&%1jF,E5?5'+OCUbB7*\UBSY21:%.Te6o))_l!'sg"r!#!)-2bsVrr=5>H%.*S&+_in/!JZGhtd]4J)E&WgZ%,e$<Vf90r*DTk$O2F$gSH*!2"<05KrG,Y"'NbrrA^gL].Ao5N8gF!2-0DrWATPP5]%frrA./@UJ`p?\eHJFVVu1`Llc:Yl=^=F%O!_TC`i%rrBiU8$ZLG^E<"WX@rP@bOGN31U*U`mJ\[:!2,m<rWATb1W?!Y'<qK:^iN#O?d-8,ndhfprdDuZrr=j\U:B)>`Llc9Yl=^=F%PP>Zi5Q"5PP_%p.P4Jj8M@;M1<j^INR]qFB9:Apoj[K<^6?hBg0r(^\S7=rrCt;UY.<_?]Y!feg:=r53;QhRG-%n=5&%'rr>>8+8c@#T5*n'r<03On/TjBQh)lNr.F;JrrA[3r'/EmW3-3n>4FMB+I6ft3?r7$2H>A7"QI&iRFC4ghY/XfAPotjVRuYX'N&#&"\1\L$[F(,9#d]`*lBi]<n)W[)0c)\>[RL25r@T(lmY"Cc=]MMS&@5tG`PnC0.+]g*2G*W]R<oBr:,fKeh;\@jAFAjl\POP[Z,'/:"3sQd2_p`,tUb1ebQHZ1t%h,XA4le1t%g[5RfQ)UUcsX>A7t$4(F*TZ1J$,f-7ehc(aM>m=-/+P?:D!KU>?mP,'jPGQ['JeCM"k3NJn^[Gt!7q43)6R`Uak]<F'hZpPrOZ<],FV/`gZ;j)4rL(>="W2.qHlm?.fp1\"PEnm91=\_ekbK2dAa.E9_\>`'d%hTPkccFcrdp1_cUNLXRC2m#e.VpDZimq3u&@gFerU.<1Ne`M"FfA_M_fP"!B969>Eu1.D!gEd:ff]5laMrM`;t^jYWBXO?YG&79VR'g*;-BR"o.<DL_;sM80iV0,0oajrQ5nt6.O<M]Y#a6n6o!Igk3mKtd!9F>YQ4mfOcF`eq_u:_rFfQHNU:ZM:\.&TVOGS7I+mDlJaJUrZ+sVU1CW]<JV#lIcfn9JY"^D#q%;t-/Q1ZlhFWLKS1i"5U#c2BT<W<D?6UoZd+gJ,=_i;]?/0^KlO3bs`A(NU@_nSLb!70nGOY5fY$'QYZGPJ]DVmK$PAd<`3;mT'#9D&4<\nne`gUU9+fI49BalMgRK,]SD#XLrI'EVNY??@O>r>7#r^Y-BqXp3O<n)>BO7G<957E%\+3a-9U5HnR$KLR&j2IJSet"$&FH&IQ=j^I9\UM%PMEfFr@9h-65NFc_5Pk:"q@.@3nu52uQg/VN(HeBcm,#I&2KTPO*&/^9,,AlRWi3]5Fqgg<dnO4m#\g0+CCe?bOiJKUPNiNbDHQ%B.#b1)ah]@-G)r=S:lCR>LoE6;\MIdF9llHS>\\J/7Eq@2lR\?G!StS6">iEK!?(]f3qVQq[9d2)>',iC,+lrgN^E#:5tN;!5Qha`]Q;HNT#LANrr?Es1&B%>0&JbFr6BuE9k,NHIs3K?&.<0IOY/cIFCtWKF\e5'1'o>CVrJrMk5NX&7bIJ6]Bo=/`o".K=mO[X5@;R0dZQ1`Mnc+g!%7W3L72k2V9RiOnk';uBX5_q_P_n+8s[bBe9&`+op_]2?<c[*,"uBX/g3cJ;+P697=cgG4=T:mYBkZ>g$?-F+7]q[Y-cUV!5SU71ORYG:qQj8?G[NY!*6-Gf^)meJc>_DPPA0AXi8;NBe@6u&mS`!aUad[X-Uo@S?PmoJ-p6"1"/;LN@ndarrB0NaI1ZAQ($2$)uS!GdMfoalLOE@4G4#%?SX.R$c]>3QTKdXc.n7jW9[5<'2<gd'uuVO\%cV"7LH2GUUpV[:,l\;oVUi[e.s2jQW1^EB[][bl2&B<m.TdS@g0Xn!Gs%V6Ni!Gr2lK!N,hBD:^Qe&]6tU^g=/\VWp$,q$(,6N5;t\GS9eh]*l:M%l2<j;(Y3'DEEE.+q4$N8CFuq5Lu=[IGQdPA#^;*\K4P.:W!Oa-oZpuf=nBsZWf'sr_1fO8U_?qGffsL^&r]*Yf_<5.*0HuPqZO/Y=s\CFkfks89oN$,l'G9):6Hhp1'4CRXs@GGQ9?oVdhj*?m=`f*VcqCh_oW6I%rq\.&r/(3f[?<cHYI8rPF?3^1kq[Q`pk/KH!C:Kf@41('m^U?mtea=b2<34UAk5?X3dn]IgSBCoJroN!$6TIoa3+AYrY4PC-V7t]Dhl60E2$FR^6#%+8H+HrrCXerrCD?<.6)drYB'i6iKLp1]FnFk%eMY08+i9;U[krM#M"pNE'oV9@]Hh^Om%cq$f08Pg`?=Ca#[E;b](L'uU\h_IApW7S"e8N8Wmq<&\tYf?(>X4l^<*hBRao=E3U8=u=]&8ZeC50mfXZ)J,bEEu[U:?&*d5r4h&,M88g)<dp[9[Cu+?RQ-R5'*=oPo'TCA5C`*^P[R$HafVmD2+j[Pf5_lK2RM,01lEZ;=M2*tb8H/%VKMtN<>e"LqI5S/M\M%^KM59WbYB'GDiju!#UK>CSq@c&dMb9EqiBE/r`/\-Y,pQo$78fr*31<i1Ar(],,18q[!3dMasrO'X7G)/Qfu5;qX[bt1t#9bfo=I=GA)RiBOR"E)Jrt&a./d5\\S4Fa,fC`gInn.6Ptg1@6klF3EZVbgE;)<*U;mdRQ71O\2nSDbn.p4$o/\F9rqi,pclX+_#-,0+bi(',D%5r*,6'%3PY^s<2Q*u2W!ODV6UZ]9dus.6P.^@37CS%+f[GMnig0*f;ua8Y*u1urr=;*L])PBr@;VE^IS)>fUmm_ifE5G'N%;.FG4d"*<-##hh_:4lgTDf2:GV]iQq</plGEh#QB?[;tqa(^GL"4r[g?9q(nd&dn4>OYrY91&!7[^9uc)IPhEYrmcQRMetk3XMi"7Rl*P44jV#4$,Rhm<3F)nBNS#^M1UM8uoe_iqp+ib]QruVuXH=@\A1.pDJtsH,3WB'm=pCF1rM9=Qm&B==XaH#Rfip_gZr$r[`mMhYGZGrLpluiLBf(/S-hEcR/`mAEk.]4#K=c#@S;t,AZjek?;j,gndt:\8'j"2>9=&`=b:,N5*O_/jB5V^ZGK+;h.sU']M'Kl@j2i7$bCqE0^F:CrZ>$1rBm1JK=$jRnaZP[+=d@rol;[Wl61uGNDddJ5m/`:BA_Kf^+GMFLOE6M(8`HijBr0&NK7mRpWuZo$69V9ca!$RJjCUK2Q,t<4n4;\oAT-aWhI#_6h`Eh_IqHq)!8fn=P>*n0V;+'U[>Jtgf!*K`7Z=DT+ah;`V"GmPJ^j<+X(Q>j<me!n95Jku-fr41r-0K.<_YEtjX7YQVZj@Uc)9;jk&64?j:[b[ANRb_a<9P_!90C^RqZb+NZnaqcH15WH!Qgu4T)j@]kZ5r1ipgj\9g2Ap/`]WT)ji/1bqP0);hkih`8J4$_3aF%^f[EWYIc!$ii@fNAT((DfM_q4!>%id[FmG;3Bikq!too!3`?9oIBJ_o?S"ua-FF<I7=/9Ti[r=df'r/?g)Q0r]L,ql4d)a@W[<)e:6NsGQ.YJ?iL*l2.in(5Oo5prrB2TrrA^\W;K2Sr%,tZO8Ol=BDlflbgsn;?O6Z3aJGd6!7qh\c"riKho(k^1W+\H*fKS#dnMgN9kJ3QVR2Oj=j7\PbIu\C=J,[RlkoPZc*S"LHhSQF[p$[R73&4"]ju/_Ol_S(c`ei,i:S=W`usNNm#jH6%-Z!&P$NaL7GhrAN_%eN"9Z2]Je(#U<OT<KP=:'@JU<*]M9%:U#d^RPH]WlP;CeT`$/<\aN9X"o:SmdU?=0&W9lmAUBaq]0gWpO/-I471/=c\$_'<kn5s7Xpo2L'0W8R[#]9gcjOh>9XY1lTWA\f?8l3BqbJ#?W1hbM$Z,.I+P\r!+9D@OdOLKo<7kPMXZK(<%9K0!U[H&8)t4%1?2leIWC]hP22rrB5HS>s$K[aNJsp4)4/[_#b=15P"NiGag\N.Oo6*"k:d+'d>beg$VC)W''-F"@V]`!QhrF=id\Z/?;BdN>o#?='us:NEp"#uQi86Cj"$D8[EAT]Baf<.-p3m-NXGF3cBQaU"KlE>&BX0QP(mn)(,(Kc"t3]7d(\A^^N>o]b#^8+Rs,!J"Pf(grE'm8X)cZpWWU;-Qg?/,=*=J[&G.Y"h'?#Sgh%AkPZqiIfE#;'R_\f]8+5W7q]\3F:?A1m'W`,0V&oJF$D!':aYM5^QHU[5F2FVtgsr7N_"^Y[RIcS+gFSrr@7,\E=ou!p_bjD1+V$5dN4kMEo>fa<c,m'!)>dW?"3&a4g:(k5D4F5#7O:rr@7\rV68[FN=!Omki4oUg/^"c-r/Xo(N1!3??3(39)LGR."4YFS&Z6\t&2jD-nr?\)$ZH2(-lVG7=t(o?PDXOMh>:4Yr6VI>1HaqNLlTG[[hfT?1K"k[O]@6Y#7tH8+_W7EqCjdm\$'&_o@-1:iI)Zmc5*EUnaESu7I@/Yn<'hT5CoKW?Z(aS+57>*7p@niXnS+SMdn@Fr!aH(q2tSM.`qRe]/m?7U\t>DUc_0M!F)pH)Bbr"rF,4[ng?)&C*O3+YqP/"#jY1,ob>ktQl7/bL'uCo2I?SR#f-9qZcFUl\\"$D,dD8%"N6.nJd-e0C,9K"J_Ik^a+oo(e'%:RBP,*0F*:e+3/R[%!LfmdI'FSKCX';UrL_QO*c%Xi(h,!+M*V\87+b]#P]_`E7`U>Woq0h&6TI[LJ7A$ja[3&Akbj@D%duYd'M=i"-0Afd(Y^q05+VdW:Sbn\nY[h-TDGA73=B5\(l*,)d-0Jgd-6XhUu)SOpP%DS=T3(QC9"RR:0t6VULbrrA2L_u@>\rfqHQ4"pCO/3iIO>2##*dJcWo-fL-]U\UJ"'N%u'+^E'CJ)iQJ5Pk:"q@.Q>b]n@26_5P&!3a6=!2.omrX&ESboG9KMbhn&9^#2JRo>%LX,(:X'lE?Wbd2;o<0dN,c@/5G0umJ1CDiNZ`&`h\A!0@2i@>;?)o-`Mr&FcUC*8_Rc"]hN>HdiXFk!:1F8_GQ(bXo>&VB$cE-L4]F+th1W9j1q[Nq"nQ-HrrmgUhf4h4$3_rYobKA.AgW-$40Li5jXH^e5*&I'bB`0l"3'`"53"*\b7EQ(?mL$RrcfV5B/`RNYqYeado?*Z^?3Dp%^cct1NEJE1hrjORZWGCh+q7`CaaKl)P0(eeJ[Bd?0EtpBgMWsfh^j:4m.@-FFh'JkOcK5u3a:P_J5&?uXIT@_5^&:I8$O^2)>t3qY*Z8Fs<IN66@g_.2kZNrk*<-#F<MHe1K1=6RLNURn`aj`Vai$Ub".Wn>cWkJ@L7tVSfCZmOY)V>b:GqsMG:q\9E*GstDR(%7,BL86]?Fke"5K0^i[OTQ:N=$1XS2"jq.0rZI0u-!HIW*#f.VJn4b;?=;+.k@3pn./NcGF+r;:WjW2VV`Xs0$Ln_?QN6MXJ`:$0$YG9#_S5;!.96dh0W<*d!5!/<*^S!q(Fo_&4aJ69Fr>@/t0W@!ot6:D_1RiQg:!$7rc2d2_pRXa&RJoT'uSY3]<N+4j?4aKtP*9hfeHNY[:&j1(FYRFO?S;`Ob$4`kS2-T,_6MB]q6s/hW'kbJ.k2hV&$nDfSkIs,toL:R`iAo.@UVBMd2>m<:-e0g,]!R$t+120l,([*%ZuUT<-m)W/\s+rFi1u=Z9Hi&`-/>N)$dYRX\EJ9?IC>D[9GZ5p)Am>SK?QXu+LG\c)'iT=*nu..fPL3ao.DAG28j^5APg/KPX6Q>H=u@_)Ql\\rrB+`BC0JXr&3#2a):#'FYa_/(9tIBAXCPAISJML><1NK(fT:]\&U0Rf!E0`8n(50K]F:mr2`@AUjD1&l7$_"'r6h!EWfGig*l,`PAccI4+i&D@DHcQPqf#$,I<[T$e+1m(O2ge=WE&-/jX1W``R5Q?7=lo]`!?<O4mQ2lYS\/H%*LQ@+?3E6*=fLQ?NBR,KJt%9t=/$n[j!A7nU/tN@[]j$c9ra3DrBGnjr^p2U9.@A")>Wk2XaY7>tJ0ecj^0bI_[8NnsYL32kNfF(r0F/mZ6N]Y=Nl3eTF.[hbn^4?1G-L@rTi3Z;k4Tb["Q/R31F3QBu@lfSAR?^0(KD*Lk)P0R-t#u"o`MNJW_*9E#d`#kHRVeTe%GFF#F]#JH6cu%c\.HC502spo%5J0$XNgqZr=c@+G]&lejo_Z)3Tlr"VkE(MdDH\bF7V0ePEi`61DU(!JC5coLo.sTU,RYhdB-Bn.0iE7*5fi4Z<40,s)i!r8n+Rch*(ZDuMZuL6gZEUo)&n!K1`1,e`og.p,H.&6JXN&e"F"@<Jkg:@0KH#h$i^4Crr@]MFsU+gCV/KQYAM%Wk)ru)]UITuF_I$^EQ/hREK5HHNc@scUC4,<\"Qn:[d^<tH6(ER+2EO(e^IVp=oI6?eP9Aln%8MANtD<ka-FF<I7=/9Ti[r>SbS!>4K\V`lfp/%$G@(ZQggd8rr>D)J&e1UrBcAiXA4kWg5l/a0)kq;MuNe@-EP]UOgN\<`0f?MZAeXB:-51]XBCJ?+8HVXchcWcRB;ZXSs9hEFM0<``H9i@()>O?g^m#WIqeFsr;q*@!;m-\d8H;fgJ)VB*0_tPdYqFBFI,I8RVAiF5K2OP$.JnSn0HG-hCeg.TN7]b!.cJlfY6\?7\<hEo#q%5!G:Sl22C>h\,Lq^J,TS>:G]u)oEqi&!5OdgZ$k6\KBk8k=b#?\gGIA]]DPn5!'mRqr!>3L]NbC95e@R)#rHuFh0nKNZQJ:qrW:?.9f8'*(B4B]0#R\h!Y$OT<PS/6Yl=^=K1E1pfA;/G1&b=*i%2?$Q)@m2dnaCf/?SZ<86(N6aWdi*aiB<(kSI\-!.b?<Di6jD(Ld=DJHhU?-bPf&KWDpNW5&66rrA1]Br830GdIC#Q65l5B_)((rr>=-&,Z\i]o2<moKTFtq.9R+J?qep)U7ic=oSIeb7FLV1nIL$5Nitnrr@TSO(/!i]a*+ur3H>&^fdCGVR-2](&n9\2TPgt!Y$O1r)`mu5hdCY#W-lEh0nKNZQJ:qrW::*RVJ2B]N>+55hdCY#W//bnR)4sCk(psdHk4_pRqB,J!OI:$SIl^WdeRL?i:(CJ++YGm!^Jb!2+IqrWH*b?Zl+9qTOGT?hb!\R\sZq!$g<TrHcZc.=T7qYPJK+rrCtG9r$qKf^Ud:L7rO('JVrErp!e0-E[p@]5;B\Y/XIVqbC8506P\:4";YQ\W5UN?c0YL)t>$KILlA]\r,OrbJ\^EZ`6f2AS40>gqlK89sfp8>LHT3UOCbZEoJ$si@?gMHRn`$;JE#451AN[q?6'_!;I1@51/BYq?6'_!;I1@HPbLdk^Q`ro#q%5!G;/)R_n[o?2jmiXZugc!_k&5ipZ^IC&\2.&nptl])0j&Aj=HlqurRERVNS]nSe@-X?Z2"dWqE9rrA]lL].FF4cAaBoH.4so#q%5!G9`X/o<2D,8&a9`B"+2/>sBfl\"l3c2K<p!2*VQrWJZ`pp^6RFs$JlBrWplVS;[5&I,>rrrDO(Bj9<G=iOsZ[u(;9EEJ;N-eAIb;B!XV!/e8bJT`.1&8<lYhtdN/J)EVdd?E+gpRkWE-"Rnm!._CXdnOCjnRqe%lp't^dBgfaoF.u(!5O4[fY6\?61pWF!%bnS(2=b%XNrQ=TC`PrrrBie8`b3'rdg@Wp^h-40=q&-I:b^e0Dl!>-dspLM-='KD5EB+]>CXFDPU9b=l)r45Nitnrr@TSPK<9,r<$kcn0$2%V"^&Ld$8i'FVk&XJA:Y39f1B2ZhUa'J[Rf<&8=>QikP<of`(s06)EpTFn_U.Aj=HlqurFH1t=7bpoj[J[QjNuBg0Yu^\S/errCtG*l[k\H4R*tq.9R+J?n.02,ijj/,oUBFcZM);LOJBJ+O5UrrBil4cAaBoH.4so#q%5!G+J,rrC*1^\rRLrrA`oU0!smBRV;CnfjOJc8aBcOdTk(^cASaVbqKO0u&4b<*PVjcHRq"<pgZ!7::6A'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+!'N%+;s4I~>endstream
379
+ endobj
380
+ 101 0 obj
381
+ << /Contents 159 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.6c51b3c12e64758b8cee4fbfb9e39182 99 0 R /FormXob.e11218f06e1fbb87aa54ffdf1f788094 100 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
382
+ /Type /Page >>
383
+ endobj
384
+ 102 0 obj
385
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 299 /Length 13978 /Subtype /Image
386
+ /Type /XObject /Width 219 >>
387
+ stream
388
+ s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;.fe<+!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grW<S[qH3g<7+%oW!ir083Yfe:\Rtltb!NTCA4mHiAWJrrAI^rY#eQJ'_BVo/2!:Vt.U4O0$b.Fn_YKMT#MpKYt^boG4q6bocGBG^KFAf)G`<UY+)q=8)sNB`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Auo,0LIfpt7D58i1JC(r'_?lId\rGd?edMFPb"&*hMjQEU9c]a.'!%.=&-><,VY(r,H0PL9('Q6b3)!iC=cXkqri>GRq,hY01RO1^YKs7r4eP_L4Q5dekt/=BbMs+?:54GH]ielVh3ia*sl$dj&Ik3pE4M#:F,e*h)2TCEkc6-')YL>&EcZmokf-#ZMf-8:7l+t!'YT+!;G`-_O>TD0DY4KrrBf,rY9+p)U"QC3]SG;Wc\+kq=D)q!5Co!.AotIrrAZaJ,Aq(_Q=_jURCid8G4O&$SV>JKDth1n>%rXJ+Mn0rVI\q<_YEubkm/@HPMNoTD\OOrr@Mgpesn@TD\OOrr@Me=u=\u1[Z6FlrH#&J+Mn0rVI;X@qYfA5*19OYuXRUdEMKC,^U8cNM$.F_>aLa`?DLnrrAZn5O[7*#*@6VqhHGD'oe3Nr;+80!.MmDfiimOX<73'<Kg-6F$AR)*lW23C&\/sYl=^\Yt[,WTC_@ZrVI=;dnLh.\8k*E>hN;1c`BA*lr"cQ?hsDNrr%_YBr6o'gc6V3Y&*KTkLq$Tp*llafD^2lrrBfCX;YfJRJ.1^p)l8:^[ph'rU;;5KMf_K]+H#rJD/2;X,>:^7aM'(b7FIBQF3IADpePS4sh^,fmT^mS\5_7=<0\-[3,2K?2joV(]OK^9j+LMO8OV_rrDACrrD70W]q+CIg\$E+o_NdNg]nI>Y"BCZ>1Dr+7^iETCp-P1Ku3+\+(d0bjaN+LSF^"1t,'2VR&/ldnM9e1]Z!,@pWlVX\.k<"EI^7o0OGb&gl%(qf$_M4hB49Ta]Ng'1$Np,a!6T-glW',MW^fhQcLU$_JVFmI-WD-(L9jD?;4d/+V_0%YrZ@274_<HcJ!h<DVCWfDG_Ghc$kohrN%QK5o\CIUDOPJW]@[W8Q5XDQ!&6T/(4<@?Hm)#R,c("EHNk<Q:MNF67nYiCqu`ZM=Xo)]<.UA"^X)cS_2/k3BOI,``$o[PD'oQM\0C;m&C%^csJg<@Vs3GM&6cU9_6-!0?0<ib@36&:\<KgfcbO[dZDZ*CpDB83Go_a&,W,?H,M_R:l==6R.bQ0S!eT"D!N',;l%jLN%)_ibb8tQBGIJNHI(G/3;aH$97FAP'o+^mb6c8CNYoDjL'oh-Y_@"o5Vf:a#N4NKe9GR;SMkhrdWOfE9c#'5b#uGN8%G.:R=&eat]2'j,.riNN@(h3Ku9lri]]\?g%\cVI!J%B=GCYo"<%DP@T?#.bO.i_>-T>>-,;Xc+J5*6LdW05%`o(W]'IYiu,iI:(J'H1tl<gp!D+3Wbku0o^hb)a<]>ELAg(rrr@.Xj-h`cZP0j_8]GuU=.afD5+ub0W+;-$f5g6^^0b2.Hh=+gg/ZWK\s13^bBTdDF8(p0Do:]PRJi%)>M7tfb8%$]aJ.ffPjKJW?G0-3q,:.fhP@\_MU>d\beH?BB5]_o,c?+--5@E4;k+m0j+GT[='%ZP5unj+G83m$`N?:9SXVgd$jm"_"UjLsDjY_qUsn7K9fCSV64:[<7`BZd!!a5P:eTV$V^d]'aIL^R.AShhYgZ-W9f12u)P^sF!$gT\rHcXg9iA:s!0Qiirk2mFW:'U+jE"dZ)#jSn5FL;(72:[-'jFQ8!0CdLrGd>c"P&sCW;ck=1@P4P^]&h"U[]O@n?XLZ+7^jpTCp-P1Ku32]HdFV,*nYs!*i%c26pttIhH(hcOKdhH8!?RUbns;CGTIkMXLGM9e(@s\LTcD>Dn;F=-,-:J.sUjaldC%5.'Xq\N4lHe\8:C%4k@oN]?aBBgRtK;F=ltfOT*k<c%EOM"H$%Bl7IjT%XbgCM<l$!!*!E_9N)GOctDrrr?ZH/7Z$j`+^\oSG^?k_rRG5*;rTR\\UM&DMK3Ge8a(:GC/)ocd]*NXTUQU[gt="UKl+8,*n?*rQYBC[R^N%pM"Q[d3[=qgM3&e_fm`hW0%f&jZ<OS6?t%APLS-nZu&"hmRs%M=KZ1R!;#5PfEZ!/i,q7_7!`At`Fg*rRr'.X5`sl*5Wj,hc9?iXSd@%KT@Zu33fUc=VcV:FW+MYQXYp#SbgM:p=OEK9ETK[12un(Hr\^".pQAWmo1s?g&P6[VO$#*$b_0Npq+f>aoE1;u`G/ZBOj>kI$0R)g!G,B#!8n9,OiPsZd6=-I#dIZ?>G@dOA4utQ5+ps$0PF@78ei8Ml$g81qA(8acpl#DOHg&sN!A=@XQsqOH#YCpm)KNU1i!AV80L_<id&WgirjPk;RH!tmC%X?\rmnp.PtuR>QNT#K?$`O*B?RC:E@EmC?uu#<Z;p3I[M2\E(53(X"4"3mjf^5IFmN/VJkle[Pr+H@.QS*[fcS@1V5err0[/WD5po2@B$W>r8DO"eb5&jb@b+o0QDe/ouZj,kJR.?PIKoCkN@'CFt]>s3Sh:fF&'9nmB1Qq/=iUCmj+CPNQPOo[LPOU,Nro33a-7m(qOk_GOO.u:\#FdlL+Z1+hKZ&g[/:@2/V\FCn148*AQH?UFk8\W8>Pg\qE]jWi267Smm94UN1ajk9Tf(.uc](\ML)$`!jd'`(U/M3bKSql7cs3e"?"`bmjX$*chR.5oCOI(I'Ygd78L[PWJO<!&#ZuiDZTIn'bW$j?D"+-+Uc\CogQg6&pT@7`XZ3o;oVDmRrqL,aS1$P"?i+kk;Vt,d'qfjc2JfDbd^8p'+13DBlg(N(Y:Ui_Y>2KaZ^.j='IjZdYMf@?#3nA;2B9YrId]!rujS4FLpM*3\K"H4Q=:Rbl0$cVD0giJJE&(U7(Vf<X6ilZ+0^a!)qJHuc&KkXaXpMS3RHXZcT&9%"!J2Q#C:'V[KF"/05n;;:=)gP^3$Ru,SK!>8"+C>`J>-lF.Rk,#G:=Ji`o:kR&cHA,gW:l;#1%Xq[^1epkk\+Q]!6DSmFJ%kkGbd(r[S8"k)3lEmJbPk#T&,PsbXr=3Lrr=;*L])PB>>a5Q5KN!*r%\3O'RqpKU5CH7UaigJrr=1b^\Zsi!;[#&2-WrX!0CdLrGd>c"P$$%7*jh(7tcBQ;U^-]M#M"p9lo/*]sNj;\oKs`.`)dZdJucpY]U=,q>@`%!5GT625P!$Be;BP*&Q^B@BW,q':NX6%\[J6!'ceL!;Gu4NATo9?h=!srVRbt=n9;Hh!sf71t,8A6I5X[i;WelKD]G\rm1Rmi;WelKD]EEI=n+SaiuZl#6)sJIc15+^OuGu%K2psrPAL6Ig$gqY]Ijq0r-Z-^U*q?T=@,Si23"@5Pb/.rr*6b?XW&XEcXr4$,3eH!2$2Sn)1(4lVI?QKDtiW3F?1WO)e`$C'/lurr>8[J)A(5Dll7el4<de.-5l0Sit2T1t3lKe,FfirrBfcRW!%-kNX/dpaG6PK:Y6JNAT-Sp=K:m@K->BJspUpJ*5r9qtMT$I=n+Sac/.,-MH'jIUW6V^OhR(gA_0!bWkjSUQtN_GkWL@dnq(-?hsMQrqdDYH#*E[5;<*;hdVUIfK&!IPgqi;q&_.PldfG-;]Enuq>#gFq\<=0Q8s>:@UkO*$X%PXk-^qPDpePS4sik"g&7cCS`LP_=<0\%FBKi!E!iflKA9D(TF=Wk6i9+I!'m$'aO1"f#_.WEkS%n1)V_!op=2BqrT6=FU\p&<7OS*WrZ;(>TM<2^B`A'c5JuCN$+KhlD:(k^WVk*2&$&S,7JA#?rXf)0%tDqQhsrUR_B7b*q?5RP7^hNUgJn/bpP7:trr=8?Obs)<#_.WEkS%n1)F*0knFuk_D>sS\>BEa0Wdci%_s5a$OaY<hrr@^:_r((m\,;4-n;$dcrdd!-!0OCp./)1URJl+;C-TeRjC3VU+5u\b"P`oFYl%S]D%>;j[uqai(u4CW&X&gXX`k,Vr';RtY26_h!#^:-%bq!"\o7S6_b8``rb(t\eYrKJ,5[KUr#u%\rrA]d^Z9).!/*SSht.5ar/GR@:YSkJBD723W;ciAqiQa8!!n(0^ZZ>Lq&2KV&+K>l!c@r;,?o7emAbXlqnq^KJ!#0#`;]gj5JuCN$+Khl+7P'\HiARSrrA1`\g[:&5FMK/okH_4^>raQ_B7b*q?5RP7Z[=3r&t&[5b!8Ef%h$eC7i`LnG9O7jBlp^5N*.Bp\b/1rr=96r#u%\rrA]d^Z90JMES@Ck'qW(>*&5-\JUt.L\Q5qJN!N.OfK6]*mun"O`>#B$o7lQoc2o@SJ7VuNEOC%j&@Hrh*lb5.&)UCe0q&K!%=S!!%=S!!%=S!!%=S!!%=S!!%X]3Qi)C$^[*JJrrD;"2:,EXHr]^gLjU/F:Sc5L2nEkU[b?b6,bTmGU7!8]P!8I)N/Vl[LHVR<h<:pN"eAsq$<^YMdht#)V#*QtBMfi=63'%M>S!b\]l26u72/Q!72/Q!72/Q!72/Q!72/Q!72/Q!;9pYBhH>X[7YQX=n2!sBD+FRkQ[e\IrrD[):+GUu4!r7!gVqdRQI4Jlphp(%A/Rm<>S0m6!5_I0rrCELW.3\t<]hQ*!$[Gkrr?:oo/3mjU84d.DCQTN^[jI"6EKFk:8?>lMu8TVrXsWPre6>!rq]e_i@!-ikZH>!n"m1?dnN?>L[m+3rrAI9`io=<IrbPh,6RoXNCWu%NC3^A>#4oc2';Z12%TTKCO"<&*mu.O^A%V8ltZP#cc>c5nhC(Di@39+kZQD"n"lfY'!4P#Kq1U1qHDW1dmpd#nh7]V!18*O^[q!obP[<+pe%q)qA+#L!:QbZrXujC!;[ILrrDMaXb0>)HUrW1qqq4)Z)dm)59J[qaN=G^KWb=Tre7EQ!;l"rPOYc9r$IS?c$A9[iVf<lZ^d:EA:MQ?dBLBNH3'fuHUrW1qqq41f[^!%T9&DIjCS>k_HD<e!(,69!<)PsJ&5E<rr>C9rrE#i[A7N6O(f-c?[MeQ0mahRoC;e&r/C+>9<Wj/>JL1<^6XiT9<Wj/>JL1<^6Ysk6V"M=nh7]V!18*O^[q!obP[5^n<`#3!783)rr@I!-i>:bTCa_mrrCqL=%tO!m32CcmsjI@`io=<IrbPh,,b>c(SC=P?iL,`91Sn,2h1HP?[ps+<_YEum32CcmsjI@`io=<IrbPh,/=%&2h1HP?[ps+8,O]8J+PANJ)<mtRVAPN6hqPTrrC8+NF2MVroO,I?gsIhJ'bfUrr@I!=jm4MFU_Y?3aFN#dRbZr<gA4=&#DU-NM$-0Q65ea/R08CFj"VDE[iQGm.oDd/XKQ&G4\X#Eufg3[3,2K?2joV(]OK^9j+LMO8OV_rrDACrrD70W]q+CIg\$E+o_NdNg]nI>Y"BCZtgJp+7^iETCp-P1Ku3+\+(d0bjaN+LSF^"1t,EHS%#]P`::/8-\5K:D^ARe<WE+k,SE*"d]3<ICjGla;-Tm;Q7Z^6UR'`1hTF6"_/MWOh=8fSWCEDRY(nLRN4E9kIQAD0RVSLQ`![9'S)oOe>AH-dA613,m=US@<,H--Sh]KdXpnQ*S]19#[K6]D;C(.a>].ji"E#3#f<%uH1e_m'jj_a9dp0nlW8F5SDh^nYBie4[ag73%@%:^83VCC:20Vme*Nb%VO?5]iSYf]e$BN9Sb,:Q`KA5-;rIjgO[jUK@ebQRCfJJ>]_gcZGWSH5SWe`7f#kKmcP#5=iEW4;iOmDC3h!,\IW6&ajA0s%JP-_O-"rOSb6dNsU!:$NVEkRH\XDNGKCs<&V230)nKk]M"k!jsR8E8J0I+]B-DS8*$FQpmkCDS%-,h=.sMKH=m`7ofTgUD)@O-t(<)=LSlAk1E$p\Z,*q(l.%9k8`j>r7G<Vh23Z8T,8fhg(<m,\)CY-Tmt];e+=\/p/[$MAVWqNc-cr>S,"$ULWCGa#N-m-TJo:f[$b`+'GK7r1B>ORg,<rVPb`YG3Wr=N49KWBt]dNE^KL\a6-FIW>2"r-Bd_##+*M&Rh1[$dII8S_*&%OP,@<CMNqko[3JZ"9k:E;k<TJ[6BfM;_7(p7^o1XpZ5='@!;uis$CCWar2*D2rfec#4J=,+[dO%Fl*TWOiBsG!\e;q[HU#jQq&0I+CEgquSD?l&`6-Nbq&p07&V0q"4[CQG55&_aND`=0BO\C@+719-%l5+%f9s7KiVNFMFJX>3_."PIc0&S)dnN[<dXN[E\,QG"'6tWqILC#KpT`1c4[0:%NT?FUBN\a6?5\-r]D#t"<mG^aeOuecY0'aPh2uC$.mNhO/3iIO>.SI.TDXb9+8+qQoW+b!oRE!h-fL-]U\UJ"'N%u'+]Yolq$(.)!7r%e!74GCWnNO3K.d0(l\kcCkU*;o&gi)91418F!$[_srr?:oo/3mj(W&E-.;>FI`.'RI-E=QF-0i_Dhnb)Br/15lWHeik+^h>rEXfa]iQ'oB'c#8P2ff9O/q7jd"[TpRqfD4uP^^#VdMdfd[PVr^[mi+AoF*#Yh;(`<g.Pe@P\iq1DutT_P]QZ_Y0UYg`PTkP=KF8F\$9!a:4M_`qUM?82,9s>;H5+kA;k^$r"%rcQWJ3QQHs@<\3"2JB,l%2l>uE_Ys+\`cI/Q6`!,WU&MO7Ul]?(6`XQ62dmL)^e4PZ8aFY@AJm4WWYqsHHD"]#PGl/7S7C"6+[m7Ct,=ooCKe,anL4;hYUt9N:j?)!T>H>S!aoQdJrJ0,h#9WTb<3fh9fu8-0pQL$23*J^<<ot7@DK`!)n^"-SJ?=6YqQg?^Ve`-<r#b\[o[.NNME&MsKT=nDOubqKQa_!\rflQN[[F9t9#SEeF%@%$b31&mHZ4j^n*VZe^:jC^a"%uPCTeu.PKPMW=)]E6.N>kV%P!]EQPQgj#!#DrO/Rkna:JnFU`&6IcN&9([q_`G]BfE/9;tN4/mU^"5O5S_\o]C^iLfj'&mR%[je$ufj/;>Vku"UO*-+InF%VK5P!2@mQq7,-:.J"<hi>+:p8pedm9oNh$"!,<cJga&JgPq5P+fDa#8fG&/(mXoSBbbdaq]<@JXDsYdt*_YF&=5?d_=kKPrV:I>:':L"8n9-bQ`=/XO=u$j?,g4qLT7;.\kX#_eA%$S:(<W:<iqG`]%P.6'"]?Eb`'+>t!!eBI1,6V@i5%nmR+%8E^SXkOG<JSaNX.[>sL;31eG?0W,?.&9Eq[D*NR;82V<,:=mto)uRdBC2Q/bfDZliRA1LmE[A*MC6mmjSoRBG%d]lq_\g:7`?`$:;L-<1MXnn:gnY"1'IY2e7IQhFXeM&><LoY1!G9>UguAM-T[l6r^!f#*S8DksjO,64-W*%COf%aJd_N)8TlN-56.6k!&F!%WlMbVFicB'AfFh<,ZdYd9?Z%AZdnLn3DlAp>CS@AC@_Ph1)TqWm.a0e1<`TR.nrq*[hqjct>"`W>m5FA'9Ou&FAfLin*+t;e<f*]B4eq-#%q?Z0E=GgOrrA2P_u@>\X/;k!J&qForr?B2e^<4L5KM.anAkH(r6F;Z.'-1*WnNO3K.d0(l\kcCkU*C]D+FRkQ[e\IrrD[)<?I&25D>LH&cVin925EdXs<b2fencJ+8HVXhtl=sRB;ZQ>POBSApA7P_pNp")JQ$)doi.GBr7-C)?<-!1o?^T!Z&2QD>Ac.]u.9TI*=<sIDuLU_NCLEM#iG=OQJf-I-1KNlbEVlWD+P6FtQeIY-rMQCi,Kl'nGt5+:J!eVPU,rEATE)`0%gk76gn3%S+kHpf2r@1ikk?jc<jVm;8Ob8?Ll?NOL+3!#4@MO$eLhj%b^L6tDE[d=r"4a>EK_1gTN+P#b"rm&_F#8?H<[)0W<e?ii@Hqf70B9hQEr=)<&a,5f))?k8L_IRfOh<_YF"k*L(.8$I`:Bh^G6PTcom;b1R&VNB5pBqPSd:<WW,b7FIBQE?URA,cNRjbNe\b?Ij"qEN'``;D@i!#0o=\Y=s3';R+dTF'(bJ-;&Di")N^1fI/pibIc!$/tma'A;X("dPXt[J61=p97b5,;l7r!"#Nlrr>7ZL].@_F];E4WD6?3ESo+A!Qtg-TbS;"VjI;pPlC`:cVFK?T7'*,!!-8erY$kFrdFGMqupj$.&l@*r3,Sh!.\,sJ*10_r"G2V1"6.&kMK,9!5MX24ttIc!9`*5rrBi8Y.fcRWIHGqrrCs^-%G)bGPi,8rr@_e:]CEeC]=D4"_pj.9<:A@gA_0Q!!-98)CXaEr3,Sh!.Z&SrrAU<hsaApppS*>IBWYNn.ho5Memn+gA_0Q!!-988grhur3,Sh!.Z&SrrAU<hsaAhpp.s>IBWYNn.hrP]ORhnTQt"[74bAF>;45T$D[,:&&u5]kPSok!$F@Aq[2T&qHFCKeA%:IrrDNna^=kqh>[HXaSu6nWltBiYQ"Ul)6'OQ2IH(CJ,]M!c!AR.F&N!=p\t6/(F=Ro?[)D]Kg$okrrA[,rrDs$C.%!-5Pb#frrBiHY3q0-WIHGqrrCs^-%G)bGPi,,rr@_@ci/?r^[N,?^[RE?J'YOsrW>$%e5=I`q-W%Z!!##0rr>+W^YkU_nL^[:qd4j21K#;->5nTK[J0Y&20oE?F&N!=p\t6/%SHa$cG&cB-_Gn*7r/,)51e]e%+O208?IC)gACmM!Lg\3ME.Yc/,T>Hi!1QXk?iH2'@-UXi?>Z0!2"&qr!$o"6b</ENGU#"$\XKkUfM1R.PcI\kS-rq+WL!mnc&T>-Ut2+kF/\jmG$b;;+4l8"Vag!"Vag!"Vag!"Vag!"Vag!"Vag!"`sYurrA-$\,D#&hu,-]\dIVJ?Qr.:>F=5O%:;k.<9FBj_?g!j5TLRRe<)"/&_2aZX9$Vqf*B[n5<<oe'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'N%:!'NH_d<OC/T*qJkrZ*+0u/FD+UmV<"/ir)1s[>F7O&lZ=mUklW,p=t(3=OM4pc.RB0e?5Q!<1A>,=%.0PAat!C"gn:0r!#!MB(:*D"gn:0r!#"VP5]%frrA0'=I8s_Qf7pV;+5O*!,(hGr<9S.!;m$XSk"^RkUi_4!8oT,fe;JpO80%3-3!s/jnO=neBqO)PN)'-$L.Qjp^Ck!Y87-<crX$C!5N)7Z<thj+7]rD9E'@_nG`JEX.m.#0?(]u("<0_n/0SinSe@0Cd7D+dHm4k0?=!ClOs3tT5siobj-eBDiM2OkD)/u*SuQqFUaqT@kpCZ&.R,_V-"5PQ&L;KEXd?Wh\Q4lcr.d]!!/'ll?Y(rX0nA0][N`9="/7rD9p<RkA,ODO(?"nIQumXD_Lq\0>m_5K>H7AnBZd[r@+,HnOL1M6?6V)^1Uo%jb^+nj?MY+rrA^gL].CE1ZHaW$<Vf93MY7\k$O2F$gSH*!2"<05KrHWY!7,g5NjJ'rr@T3PCJKTkU0g=!.a3mAA=O]5NEngQi-`IiVmJ"7<-%[Ma-DQ@K-=Xk*+*\BDhu"5O]Z?m$I;sa8CSU')qs(Er8/Gm-(T.cgbZH"RJAB*7B81`IILmZ2Xg>F%<NCbeG7j&$/G'IEV-[!&M!V\?E:7YPs,S5PP_&51SZ-q?^:(!8ol4fe;JpO80%3-3!s/jnO=ngJM3OgAG%P!'r+Wr!,)3OfRetn<7)@qM!2,d7Xkhql$rb739J5g.D8C!9>5)ZWtjlqK2&p3uTNAYrY4HSl#[(P;":m;T''X%+LPH;?$WXA`*H+J,KN!MS$*gm$g#K%aJDm>XdX8=).o%@qlKO(!k`#XF5Tpf]l1?pd>$L*Ad])O614kf!XSog?>n5(g*V+9<6V=[NVN:;b]-+clo9T;b1R&VNB5pBqPScdn4>OJ.U1(37CS%+f:],9f)j)RV7jPMDgVf<(-tYR,@s*P%ZZPL72gN1sc:BBr*Y@J/W,2.AiO66W@n%!9AO3rrB6*C?_a!J+>d*J(LL([2n/"r/PSh_]SD=o/h7HU9QaGX(jli%(lN>XtTeTTUN2e[3,2K?2joV(]OK^9iQQe9`>f=GXMI!*Ad])O614geh;\@jAOGkl\POP[Z+:*i_.giiP1!U7JRBLL7u/iL=Mr"=bBKmMD1u2Q6;d7i*[4^^r8RmXdH]s5FU@$lm,'>6[s3d2M:CcPo2`IURYAEQH_8;I!XnEf-9#dn'1ZKX^s9G0d%-pi,Es(E.'35W7noY:aCbV[/m*m7O2MT?ieU#Aqp[Ed$7]rUl-RgCH-,'$mn!F;$^d!T$gUFL"p]@n]*W`*jp/oj,)_bCc'JD0oi/GCjo!+.NB_C5oPiNbqhReEG2fWOo)SmIdiEok2.\<>W;QbZ1OYP=l@cs10Q[IoXXu%BEeS<r]>Ve'tQ71)ojkK]YP^>L5E?'W!&*^`cq]YGB%Dr_^4]d=O[LUO<Gth_N"gr/c+&GRuDV2fD>LIJof5-AM7_nU>PYAOc=(U9\Pc%Am(sbm''N4NE"k0AH4g-j7n2keuQh3p"cd)F`FD,k"am]QQ0BV0Y,9ISpPP!-]XSHQhr8P;`d?b*1gBiR1^[6WW6YP*fp!VU2.FtCJtAEc7Pef2G[lJ(`<;aR6^1)rBdQWXCM$ORJT13Su^2brf>Lh4[W)]NrJ,lj-+>i<WEtg3$T]RFp&<.*hE.)GB8.e=1V&1Yurt_&K6bH7#jPmcT+-OCJ'*Cq6!jJ87\1F"K0I/8h&$q8H/[#e!SjsS?oS;@$Njr1EYL[]uDgV:^0(f;Po_mho!q>q3j?bGPD+;+(*4`0_P=2T$(22[B'Z;3s7u<o)g@<:H[]hN,gGB2,[k\>u(lM7g.8^'0LWg2H,-F8Eo^VcA0p9dO8[@J4ZR-UH;8qfd"tD*I:]-nqr<3fCXuQ:n4@2Ds.(C7?^8W]_Co"aO.bkcCn@AE4gi.h1LCdqks@S;-W=oQU2o198Q1OQ\EdM<4<!]SeRgs!*H>u-#;/bg-Y_H="TkTWmPQ^PM)ef;f70>;-RbqQ3mgNSto:3eEnEITm9E*qtj6X-i:gj&&sW$?IfX&$XW,;UJ3Sa\Va%:D:H%a&5qGc*&_b%4<B9UV**1?Xia@$KJc6Fr^Y-BqXp3O<RXpK^Z9dHrrB6*CK`g78,4/"T8#SiO61X#;+4r9KiZ]Qj;E1A!*in2!'rJSX(jli%(lN>XtTeTTUMhW8=BB,ambAhMHXZkE?EEUafJhTrrC-:VZ-YJ&cBmiR]>8`Q`Dp[Ig-sPnhYDQq#:?ArrDBT^[sq%7l&ia>:`hJGMHe4A;Bn=/XCANj#iD*FmLVnCNs_Z^H*4mo%Zd*e/bVO0[E'KC$(+Ib/!7"gV7+CJ!$/j_lVbNR&"E7S2`!omOHZu#H?d(mOKd,gJbJiZFQRT&\X`Q)C_*0q1j,clkfc.gu)eU@nef1>BKkH@6,3=hf&+sM^=n&2VoRc$<5fm/7jP:c+IhSl8+Rt)H/J]L$aF,Zc2W`)Hfb=PlUVr]0ST/rr>oY`G:o09A4*hokP)jlbE+>Qs+d$)n9:`>JY%T&jp^UeV!t=<l[>\@k9A,X*VEq/WqS,F7u)D5T/KPKV+n;R_9mO,@k9!0HcWiVskpnobCNa_AcVdOhJpN2W@r/,Ti4)+,rI+jiu<^;JIg)+5uF)p\'q.rMn*bQ:Rb!Y*'#h,S9i2Vu+AG!."ZImF<jXp@;O)1Sg-gZJ=/Z97t5Mo%0LMrY;_QVOO]1CD.[KN13U5rHJ2-EbT$^9Z\RM5FH]7f&YkeC(qH[*KQ9XkUWVT@i43qC6?u<qa[:@?#SW8+)7-[F.^(V)"tru:8^;P=ENd(08Ed+3TmZs+_QrTT?O]OCMn.C2V\C_#5$7?F#@_#_W#9(XhD)YD$@E%d*!q0K"tra$?L_6T3Tu5Br8#l)gAdarI/9.,Z;&M!3b\FEL!F@M/QpriYRU.eeN##"*eO(!VqB?,M&QsL/kJIqQs!9/Y6?"EhBj]c_i$!`jSSbW-*6/Io`hKUL^P$rr=nU!(3/I>Dm>W9iQ^2-5O=9"Z_RiOHq-#ap:2#78#^J>2.n<_RECu1pTa_O[L4#/Wuci#TZ/ja%j%VBr7rchfM3%UqPAs/5_K-6^N;qm192M/R('^L*W'V;C#Bj`qKf@CimefMK,_nm`j],'kc_*NAXJSr^Y-BqXp/W)Q.0H!$gT\rHcXj;;M(5aN"t`a8Ag4cJj^0XA4kWg5l/a0)kq;MuNe@-EP]UOgN\<`0f?MZAeXB:-51]XBCJ?+8HVXhtl=sRB;ZXSsKtG1qbNu`AGaC=ArmF\0.6Lp5^#>cmMWh!5Oe('e).;[+>3'a[Wjq.)j0]-./4ERVN/SnTXp5FT2@=#rJ5tMneHjVuHbT8Z;>9])0mQemnW`qjG$0%:T(H0)kpE<hKBlJL6T)nSe@-[/U.(#rHuFh0nKNZQJ:qgs*0"22f5g^[ql;rrBiu8\;sVoF%o'!5OdgZ$k6\KBk8k=aeNI1t,S&nSe@-lp't^dJj1]DuBb(5O]fClsFo0T_cl^Q="\jbr"!H4Bqgc5e@R)#W/#u=oSIeb7FLV1j^%pIHWl$+6AjEbu7=oQa=Z'oF.u(!5O4WQf??f#$?B56)3)HlgI.4R/[.;^?0,J6Wq-)Ma-DC@K-=Y#*[1!BDho`5O]fClsFo0T_cl^Q="\i9f1FNOlF^`#2&qUi'F195DoI@kSn%3!.b?8@f*@B#M*D_ZMU&;dnNa;2i@V8kSn%3!.b?<m(P"M!2+1irWF-&Mse=O+'FZqbO/rj9f5`5Sh'g@TQQ=p"<((@poj[Jej&pA8$RKohLk,Kr`OZn[VD@or/[-cp$41_fXt;c!'oilr!9:/I32Z7-A,.E/a_PT-sf-obIE^Mi=8Mhf$CA_B3)4Cjc![C>p"-nU5CIgm0Y89J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J3X(e~>endstream
389
+ endobj
390
+ 103 0 obj
391
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 338 /Length 40380 /Subtype /Image
392
+ /Type /XObject /Width 782 >>
393
+ stream
394
+ Gb"-6#?2CE^8QD)>OUBjmsXZ;HY2[PF5gJ<k005,AmSmG8_o&SDF,"*"UPeE"!WOL+=KfL0jmK4Y@87M"6PCF.On!73JYn%NkDC[-<DFHVP3s:CTlisWclpqlM[d^e_\jDkic].ID#a`z!1:SNQkBB!!!!"L#/HH'z!&O_R"98E%!!&Yu0I6]!z9n4Ynz!,)F-#ljr*!!#7t?qLD!zRK-7fz!71k9&c_n3!!%Nr^m"g!z1]aHVz!2'WP,ldoF!!!!nJ11L!zB]>LT8LSIKAKCe&D:eeJ]]Yn(=eWK7ei-Yqgu;*o\6CBVjrO@*7(rNQ951[2(]AB*GfE@WL?UERXs!cF!!!#1i*/m3F,-%M)qKcOYt-(t[gO5rdIqGhn@l./$c8-Q:K^9h_Wg.>XoqZ)!!!"LT9aCM-.[5$mb`%gB^.hX%K)9276IhCbS#BW^eFV74o);F7t%n<fEU@/c1D*RfY8tM*;pEE!UGmE5-0R-.=C0tf_7>s]mjQu=\_nadUXL=f-eh^f.td'6VI5Vk"Sp'g.!68XD[$Hre8*r]Vnj0+V5BlT`&mu/AeGiCG:1O)sd!sBo2l34SlgJGQ&KIJ17Cm>?L708GNuPnLs,SJpBLQa^e>e4mq+O)?9a;!.`&.\!W>G/c60qf_s]@LTFUe'=cSb`'WSFNbsaI9md.@+s%=rqU&5o"[&V;7/u"4#=B[IMVacLNZ8[g;"k6mmp4*U?q\#%H.fqR4ts#di=lfrVg@t2R1aBpn(QY--VlKDZtuLuH9]:#OX#A%XrkZe=DKU-kJ)st0I6e'K_pRjAAB5FMjr;HP?iIi6P<hBn-teO(5crh<\`CicMagFz=EJrf)r8@S;9LQJo.@%2Im/7)Rt*:=I.FJYZ%#-us'%%Nr<"Y!N'"hqS0:mL1?,_OoE.rW!E]'c&+nZ/W],OJ/V3QIa-<G;*t^^3"9$M,Fn)WU.:Ysur-+\0s3,1iMn=2-WrtO+I`5Jf>72%A$E?gW.D5[6oNQ7`Y:B(6Z]fl'd`if5)")B$ll;qWhf=\Wzcn/UC8g87B'^P0MnbB02r/[ATs+ab-,CK,:[.ALlMa\'%E$)ZNEZQ].m6Bku8!s<PoUJ7UEhFUr87bDEo_i9(eiD4-a(O:A'YjU]l*oQ1),&J$;j-X':]Eu#=Wkfc/`ZA6<.jZjL76QcgIL;$FROF;9^*EFl(9u,,@dU(HX%"Aa/Sda>[ma6!!!!7#2_25e<e&)oc)J_-R'<r,3ThDKJDKdTH&=38<7+Adb#u\F+hM#>&o.DMsh),,Zfj.YE(-k2tCnbX_RQ(d^t:KS&cQ.98'F[bPt3u-&5E(/8bkmc[t[*pc8@.S2/?R,a+j2biF7d,TC_.Ynd$K__EIO\1s):m)J?4Q3[_LD^`!RFkE!p;o1cegs6l=!!!"L7E7@3^@=X78Z\\:8)*iP_pNs"cZ%rE1gu"d@_2&G!+YK$BSjL$*F?^%++LbFVDGH1n,/PeIm_ufDp7MmeX2LfeBPaD7c4/[q>k+"6U1EU9r<U+L'0/8k_]>'QM_!M70D9&1m)`l"iWX;Zi=l%o=Xqe+P_k5QkF_X@Gr/D7`qoKaaZfFmEb/rDE75V2r8PhiiE.\!!!"$A1Y`-SeQAhjh,tmrC2@*-%,82g8.:qIfr?8NXGge!!%PPp]aY8hYCfG^*.4T'*J:8!!#92/B0Cjz!.akG9F1\!!!!!a'4=E4z!1Emd!WW3#!!(@KQkBB!!!!"L-GYiGz!&O_R"98E%!!&Yu0I6]!z9mhRB$/.#A+]ECZV6TGF'g]nGX*M3dpq9+aO[4=YYU;)>3Ti//08?:1$2G$HNB_fM[hJ.0qb)aVYHLD,M`m[l;jPk4DB7LM]ZQ7BA7T;aE^SR:7a3=R6Pud_*P1k,nDo4XL>JP\>3eF1>dE.DiiuqLm7,BKs.[$-j,0aso;T`$s!aS5-#9?&i9ajuHlSdM1#CLSA0XmeX[ok+:TNK(r@W%Alo2_/]>JHtd4J^R^1GH:D'KsFHRcn]hMQ"6](OiK\k)G0ab:R33GI7!3Em=E9?]P^?4YB*'a4R;p_imN;f^W:3Ccg#Z\IFnfp"kRS*PnRVE<YZ1aN6b1i,B8YPka[&F3(rcSkCbG+i=lhcXg9nE8OB0AQCXph_#\N[]h<jbI,CfPSD$Y(J/7Mn&`I=!C2t)[cGKfp0r,qj[Et$r(j-@f"8eJp#T1#)5YmiqAV,=DMB8;T>,9(YV,2pi)Fbh15l$iDpt@Y_jp)c]>F2!)o>+@D;tPr@o+De-c,kMu"MbfQq)@)rP_i*[Neu6t9:'GMr[67d5A';l@.k,u$3;];,#?lV7mD!rr<$HoKr!9$9R/>5OQn%']sKIaaZ5n[fj=Y-Tk$*hSd]r!kjX(%<,;;TGB-fB2gg.>,d-<eS0MB=$8b>5-(DSd#J[I(BWtl[Nn%6<;?j3)?U:#\%?)'mHd;nO4%X[Fu_G:OA`>V]N!K%DPK=5nK7,4$>oe#k'0N<qWlaQ%W^<%NG/5Lprjg8tt`Y+!\Bb<?i.^(=>?O4FO,a.hQikDC>>8=d,p=D*;C4<A?qbQ)?RQ3BB2tCoMsjT(WF8'&gWqe)>(I?(LA"8bN1?$4"r&d(\@f\ijJ;J<.=ENCWX&];Hm$f<2")Y2!%(`U14Fh&`]2[7Bl,0cq&>4Ua5k8H6b1s35D-H1,;P7uYTCNRQ99V9VgO$&q"_HsnVp8PR!H(M?I"03,V9qgFuorIN*'S0B3>M0=mk&M"/W[Q@j)Q-Sog3)XrGD"_,?`mpZlrb1h`o$_%!?J4RWB19+Kh]1`LE1(N7,'msXVj6G=Os(G2+i^Z.R1kEFZ;730,]ifp1&8][Z=_Z*^B3crd0.qfiX).lp#Z&fOk,<`4'PiJ#9S?K1$)hq<OC<)4'+;\L.6icjn?0"r.PeGm*>,YERX\N!<<*"r(qj\ll-7Z?62$OHL9BnWoNs9O5@X^*_ns3f;r":VrLdg,D$d/T.d8e(r*i3R!h>\W+"l3YaG^`(O"4koIdru1%[JH\#ANYTs`&Ul_KSK)JPYRg,si=[/e_#C]`1VTm^G+/%!nA1\$LBXZD9lOeLsp)isSHK!8[faem!+g1!C-/]A[B)6#a^lFaU)O"V:?\t6p(.>]-,UAin2k5KT$Z%J=4hN<&d;o#HW$s9"mNe)B0K(dB'N)j7u;sF\rTcU>qLrFuWf.TKr:0"&lqWg[FkMm"6S=pJ`8FrD..npF(h1DA!:Z$D"4/AD:d:>kUm!SN7GUGBEUj7)#<6L)!fT:o6pt8^6eJHr,GXYG-Z:'aOaVOHW]lUn72G7;8=/(j&lH/]Vn]5Sa9%Y4!.CRXugI?jtqHIX^ToPU?lKacAf@U:uqi".-QrTS?[LUWcUC.7CPufkGf^C>#j*VX&(Dca%E@W.DEsFcg#IkG>"g@G_G[Ocooe:$_l>DK[M<j]C$!.a_>Zt\Vr^PF_`PW5<RJ>PXjPqgk)lRH.kq;.q#XWK5mA[rUmQn&G$]Q5.!!)e+^=e_Z4AS.gWMK$3'2p`]*"ijqp$KGN8!CFZgS#/=(;%sXAX;#YAU[cX*a[K5O!%(sV8"&g)j-M9-f!$p8Q2^'M8q9O'/+k))QrO)8jl62>0t*XA$mW"hL[F[ChK!>%ns("_`\@9j,sY!&EB$B^oK]f36dZp6VVCH1G,?;qs-u+7BLdKXZ5Eq/@2X':h"?9Yjf9[-K)@>%3ZSBHA<l?bUI@-NJr]a3^5a>H/W:[6F[h?M'F?*BW"P/;&tBmIF,fB\*EI*),?F7ne$kF6iq\hVl.(<e&'p7$s+Kt:D[_#V-.t*lWQb&hFUGEK!=9mQfWr,K-F02IK1gmTV%!D">qK0gSAlO:u'j0M&do(Za.YCH&<X8E".k0GLW%Nn4>L3a8*)t4Ec=b93/,Z5D@&Mb"n=)F,6j/E(\dOG$7bj4lRG_I:;[3N)tQ`"V:RrH;h;SM7/;Mb*<a+V9!K/K-<G86M6+lR?Ga6">P+$S!%.&SLtI"!!!#dn]dqA(fnSDZuA]!Wqo@$aJ_5&:Hb%kl_(R^,=]Zu-gL(m;_m31_T)0"5"j7n#3Br91HP.]lt#0UJgH".@`'Xn;tY5@N(fZ2@D3"&:^IIPm_bF1bZ\l-PdkjKf-lP/pUf44Fa:Je&U%JH9kd&+E]<on9]rCP,j`2/BgeLSC4P`^EZ`8H=)n$jWd3f$L2*-4h:k*2<Cm2"\+2u5l'+o&7Q,8*FN43k<.`/ne(5ZUQ;p*S,>p<s<a\]dW9f=;?#cYc.slQc$ZJg37"9PCCB(>k\$*;!L[C(RT@6Y_Y]Wq4#Fj]r32o>UQCZ@5Q<pcRUaEl`<jMG4g"(7R%4.m=.H]S)5u!3qI!#:lIH<=(c_GMR;7i@H?L5^,ai+3gdBsO;rSI8WZ1:<(';kC[b0jVhL>CA>1;m\"KNi*%$:nbO@T;K]bGer"59)EF8W]pljj"1?6.O))D-l,P7%8s;@bD%d_MLF!hcssXI(Bo%hZ*WVk(=am8nDQ=0uqu?WfP_M/'JEMp5OOIQAC;'Hr1&e5FD2VFo3alP>)ANHCN5jY:1=nkB.0[NbnE[[.G&%'+i)5q"TK.f<u8'KTu%ADR48M9SpqF5O=%G7dKceU$dPXS>mGmL$^bC;0[6(Yml*k(6fS?hJS<HJ"rM/iLl*kc.6r3/)'5M5,5%Dc1O6&7[/<96_@8t`h"R8p@:W,k%jrCf"9hGq5kIGD)^Te0B@up$A&PT=.6.LfGb&2@"W6HSd.>.&=\*5gb5'.oAp1.kKP'qV"6Y5@;*@I6:o?3=3)=uHBRE.m!Pmpa)=*%D!IXNl6sF5rq;2jWGaYj&N7p+9u$8#[rHR4M7["t%Ol5t\&]gnqM&c@O_9q+:i*StBkE:5m>p6t#1Uc`.1*WX2\=%:Ds/D-]03UR&\3#mTn$HlFX+^`mN$**EBAka(DaL*pnflXp2-UQYH?cPF4Dfb\$PS.#JjV)lDE?QO=Ndh1=Y%V:f/m4e+Pb`C):5F(J/Q^:*=/]9qn_.9=\-O_\%`N]eq["0WG6U!2(omZmf"]3pt"i`89?*F5@HC@#c@FY+e_=K!%14p<+$Mb72T[,?9jTVM%ZTSajM<76DIKIW6_tB(bh&T!lWC9*h[DM:\Z=8GomG54J8G1?rJkRr7s+\94^SC,kS[^_D^rNZoNYHZ:reXlV;_>Q9AP2+qQ\8cZ3k:.EG3:OBDoLnQ,;mFFXKX0J6k`2_)8^"12n5U9ICDnfDJI\St\e;6^=3Dc8/G?dFp_!ecHk@&(5[rSn.L6OK.DAJ_5%#_l.8qP@D0O$p)249HaK,T?UU<L\92Fc>pTc%Eak[E#2`5;M?#Q/C3$+<g*>o@W7/&0]#E)140]\3c!oJ=/0Y57APMG,'iqYFt_q%Q;eEoVQ6XfQAE2T,gS9`+7IYik^,!\*j)OH<=b2.e_&?t!X,llSIkG5\f.:0cHJTp^&CYJ?)U]!8F=>`JH]1*[@3S2Zue<`on/m<1:,jWH(gkNN"sMReSK$$lKkO6Wnqi%CPTE-hsg7BX'W>-c).i4.`NrO;aJ"TSN&n7COE-NQIKn<tstT5+GE!<<+%k^Y)_J.<._'KrFcq2:C9!!'f$"&'"$z5SINtz!!&Gf;ZZq!!!!#G`&F(3Vj^d[O<?i@":5^:7@NATPf*P%zMi`3?,png)PtJ["\fdc-9N=LbHBE>V%ELd=U&Zs1JLJmObe0@l69&+2cD[I)kLG(kA0;4%!uZmr4j2'=.A;N,0GlR5$o6PXW1lZBeUS'=+:94n)2J>WbKQG)dHPcFE8B@+OO6Ne'cf?=#%ShY;#hKT5SWEbB&62f4^:cYO6X6:q;E2kFQg@UOF[g.!G!;T;4qQiGr);RhVR5M@J%'kd7._q`:^0'odl'E6O#;,Muq'c7\;Hn*sG">i%,XIB&63QFh#0"^>ZfS@h&cRPPDRf\YQ_!roOs:ZLugaHRH8tnX8g+E<O4-qo`mE*C?)1<HLnckq53\MG1qZHIKsu,R_OInjSmeUa\CF0CiNVmLIuY`)n-oYocGWIU8+ebdU).?XM-K4X:.bO1<Y"KJ!iN-.sE\@IH1eY:='*1N--`b&e>qOO7rrEj2K0]qk>;-6pHD?PS'<S)2_?=*Ld)H,IX2kOgGX`-g='ecg)#]$8I^ls"shs3T+(HG=cM^^aA@K=(bs8c+-2'4b7]c)/=N8_a14%/4J3).FZ[M6"<WkVAojNeo'7*R-6TT0Ihn:l%,`OLAb3?+bFDFXOr%p@6,N^D-F!]&'::+U77>Z>k*@>o8L=aO<&<T,2#\oBfC/1rQTOB8&JpfVXpTqYE9H;JZo.m>otC?WG04B&97IR;"=5[o>OG';JoVW`F7)hRin5`><]VDqnQC^]?1Z]A8&k&J)T?Ikp=u?/G]D0AU7&c'/D:"pP;;dGpshh@GC3d$n*/8b_-ckNu#C`,L-"C!j1n>=/NJVM#q9?.V0bnHf()XTR-9)D6*RGk3K*a*KcB+YU1qN5&BA4"(aQh+q71D/\DFOB,382omT*9gC6gmb6l:Amf$7Z28\b.VAjso`]]UD%',Y2^Khs)^9sFk8aYWI1:*O+7!%"?uf6`94iRiFm?!`Q:tooEW;lH?aZ\&V*GQ_VqA!SRXF[0B3n7Q2Y:Mqq5csHk62aEHqtGu^><_'C?R:*9=qfN&!@Ob/WVst7m=k[+Vq>:>r!:q@/VkQAlL.>[GG&!J2j?p9(oMJ1j0;PbYI]8>dhSp4n2*nn%_1-[alnq@&u$'d)7s8n>SB`/R`cqDGB"2c5ha?&n-Gq#-N/,>3;8Sd^9Xh%qL-D%";R1r]#X_(pD\JG(V-(YFGEo<QZY'[C`ZJlI9PN`-h01g\WGbINdVuZh%1uC1^m^TVj,$.E%LU`*e;$Dpjh%XGcFmZ%Ij7TcL;"WPK4!B7,/FhZ>c]m:GG/Pb_2+H;H.;B[1Qb<G?A'T7[UGTV@YaAn'[0RpGOKg.j0:Ggl%,(A8mq7R$]jDEk_=cQ66OIAsmDji*V&OG#!pK#YH_kk7SnYOA$?5duf!60id#K7G(V@5eQe$[/9`i:]fHmm,'K#]ud#NcR.cG'PW-&G)j`*W8?$[q\+XMi++B.90Y!)-(e&==*`e(qn;a2gWuS\E0(ZD0oIDp+R81^i2AU^O_Dh0agu9_U81)5mB+%'*Y<`OV!_!]@IiEbLYK_HC\l)RaPE#[,W$Mhm#^%k7/!1A#;XSKKcgn9aS)ZIHTG8rTL!r@MO$\keU[WJiF`"m29<F>d%CZ]>!pIUN5b>W]-pNkh:Y`!qFJWC4!<*]rS4?3-O9OS^6+"iqbq&B?9$("o\([>?@JAr^W6W,-WMd)tj0nWXc+e&gIm@&WpY*NtcZR,@rltBYUe:Csi.B51GhDa(k6l\arNF)@j^$]k9*aetX7ce"M!A"!aF]UKQ%T^O0oM`&_/$@r4QgT=aePoD(k";c?U^6\@-ms)PjVW_.X+k(]?M.lL_GZGgqV)`;dfY<UhM2F;=s%pGEj)F%K_LojuujVG*!aN_2ZNRdi'[jUWio'm4$Vkr]s<&?FZ^([jfZ&HD(<F*8(N#8Y@r`G4&o4Hp$`,+bgf%)okZQ*bnL5RUXMN/RTl<^:?Tr)qkD1cRpp&47\`&-In9C;<r>K"<1+5I^q@Xbm)Bn;Xh\Po?ro7@B]^*a9A?c?6D/NNRi=g+ZXZ/=uoQH4s1]ZR)YXO16g0;rc%.)-e,'HtF[Y&7pqpG5'Q*"T&qS+$,*6VKl=>C'NE2]3k&iD3[)/$=/mCNmO.DlUI,Xc7R1ePqgC&R?>uY8SdE53/k:mj]:J.Wp2C+S/NCE;G0XRL;=&&ED^(o%KfG!N<f;552V%WTc4i7$T=r]NEjHDI!,sOb+Ep?UMHQL:.oG6o9)X58IZ`&?E-0d;H>SIAT+&Cln1\Zhdu2g>N7m5mp\!?ag`SMLSa'qfC@qB&64\\[`S0L`TW_l25c7I9%SoEAp1B2rqWth7*M$h94nSoeiAa/".BFS',m"&()m';6@-'a+jo_drkk@g+Gf*_fZc%56sWK&cK""eFduBQFs8sWNU5g)J+rcg[[Q&p9s%!0L@=b?FFua3e4_IW9S)7Y0'%Ia?9$":%bVA*349e<>S(n'cf)2<PLbS)QE&-2moY3'hSW:]3AR;NekjSqTf[b>YJ.VK][d8q0>711>``K[?%%6&/4]`!.AHu<-8Nu2Wg=W[m#X*7>s1]qM]SA=fW*e'N`f@>Bq63+j.WFS]t0DJdg%Rs/Xl9RXFbD$G145QX*a0JCpd6Win(j\^:tnN-SB*?h#Di$o&.)?%EYW/b_1B+dP4Y=6f^h5j"ueb`%.nGGdS4VLH46Rf9$NeO0uo2h1"eLujYDj`U5:-#)#i_W<P[<6YO;Yo8UmqI^*mW$u#O7D$sEP#Lf$TMeWS"ZA2g5##+RnaKrX$H-Cd6&"aQ?$hub1F9D-:JXbZ98bj[=FAIeq2q(]^0+K@FiAhjZIC2_bfqBhkY3HT^V$NGr=H)@+'/+-Zp%6(0fJVcFRSmtMqb?GABfhSV&0'VmG7MA\oPRoh*1OP;b]Q2)>^U%6B=s&8Wi,;8%$V'\&&H-!Hi&+XiniCBUcg*BsSms;@OFB7MQq"<co+Rfcu<rg!<s(-*>MD$InVF#WAUtH/e7iQB*gSB'mJaK)/q/PS8]YAA02o.dui5_B'/$lKcTbm^>u]dY8"O4Um*ZG%gc6^2tlPO":)%AWubf^.%-Mq[+9=(YXDMcstRZ*cFuf:jliFT)iDfnuTF#\KKN9F.ft5Q?uh1&[S\h/R:/bW&cR7IJuheCt&2kJ]poTR1TU^YHYa,YjoX@Pe2/2:PBG/(8"LSVJMtBEA-UL-efdKY/`bK1_q)s3t-.'<c1M-fOK%u`SDpm"L7GlaN0232b-;Ns0Ja%QD`K^Q!HsW:NO6jB];I]ma#0cR<^S7oPgq7X`\c/A!uUXR%9tGPgb:<C&3'k[l;:E@&\iaE,'iMG>Cq^LnXB'K5Ormp-rcs"WJgoC@8efX0Ab'Y.E]>?9ba#_,@#nk!Moo>?X8KhMQc$@J=O&lH6B(*O(@6pURH)X8[*NN0i)c'pO5c5o.Uig)#c,WJ6<[UPb'LWu@Vt`Fe"&Pr>\/e;YnRC]3k<X%X*-MkCG"CM$ns]A"md(NZ:?+ClVd%8kLG1<pLOC+dPEG87ZXbtq=G]i3B`='^2pVlSL6AJV>TV$*84Ucf5=lc*2.C<VA=:_tSe2cJNkWc.YL+I)N-*N_2EWY)0*elln<brkQGD<oD-;YeT17L1IBBt_eF$Y4^dbk*<^I%pPAGll^:<D0?`V)Y43ZfAl+XGL-"4Kbl9IsEh.]6!B<k=5cjbRalNs4QCDeRLHT45J0-:IhQ2Ri!7uCtA%"IZ4dceDB)[)Ob>VX\fO%4Kd03\SEiSDl2%8ettJ\A@.Ir7>K0h!?&sD'L2jX&-[BGR5\'EXf_!YmVZr]LQ",HWp%fT2';u=L]YX_#,4B/1@o*M?!U_V*?F?`+et$U.QVZX%ELd=U&Zs1JLJmObe0@l69&+2cD[I)kLG(kA0;4%!uZmr4j2'=.FlqtFEVi%7tcgZ1?6ce5jAFha?UG)"u6_nqN71);Za=`.QRRfB*P(1!$DWU_>K\K.%k.?4$%Li"TZn(&-W%6;4nB6Pk5'6%KM#-!!%fVD#gH/+$aoJ!(6hf5SRl60I?YtU&tB<$31(#5T>5&km%b?!!#jr!"]=f!),sKJEQt5L]RR,.*r0+9)8QV#67"'!!#E<2OJtm;D93gXmijS.iV\8mCp5RL$qB`@bsmeO-g\'E05^D&.O&@<*m+mT"%rT;Z<M#98gKNahOPrquo5nXe:G4Z(\g;Pl#giMu']n8&X$Y@X.(.WRK7:)&?"'GtT@Epi#DRJ'5o.POR\V/a$c?<*!Hr)m9d<rZn.0Idfc/(-0j=@!Eb<N[Wm_hb6m;U)h@;od;I,h:/,Q#8H!&Muu/;dN;<3`<DWlIK65J!4\o%(d-#7rdT\:e>B&*%VI'!$\u6ene(*k8,E5P;XCQ`:^l1@B)W7>+,k2<P#h/arf5_bR'O>d*)8!#CE66-RmhV;UL/MP:s@t:ETBLH)umjdoiM\9%8:>nVDKdjPHic818^QrTU9dN!`N86VPFd1h:q7.:EkoPa^/sGlaZ/"PcuprSf/L25qjM'4>5CN8DTCB*pC5!CuZ+Sp&:@M5OUI/Z:Fi1IOT_c3P4WOW&p:080Loa%_`e,duX8S9F3=,TVp_8P+[VXba_`Ha%.7--,sFl6bBpB(eS?b\VZ#RN[`7pig(@;DZ%D*.<-uEir4t'9k5OLL632s@URq>)I;STZdaFZ]T7p;<]kj>a,nG.]?q/XP_d,=JEb;"PS>,%><c`BYNUgm8O'UK35EKKnr*8Zrl@(g4*p2\=nhOL1?AN&>CT]Mhp[ehMOk\/@S&7P8g]O.)pf8uS9D]>hp,'dN@-72`(Ko2HHKUDO80*.Z#Nr`bB0qM$\ll8s2dg@iAD.lcfo3Oh3\g1"(`i4X?Gq8ZEIe@U/6[B?cH"mae&`=-Z4W7O4Wr6@PPVENJ-H[":>=m8]W[*27"@KEf.>1\X[CHit[p0meN:V'[Yp9$?"snki;tsqUpeeQkEY7i$W#\+!L(f?2GkYZqW9N1lZ3J%+7%Bp>7Xn]UJIXc'-qQ0I=]r+jQJU@4t?k/JI"?&),u*;Q3Vr]S(auWO`6$->U)IO=Qp+KlV;nKeGnnrb80Vj9JpF5jt(m.4GsJ+nQIm@6\g47['.jdJ%RELun1_;d/<09[8?1q:@M1R1_sWG".XITT=pZPN2b]aF,]0$D[(fqiU_=e;g?D`j?EBjQLHq4,S#sMjT.n]hhbi:Z&WI,0!<5*rYQ?mLa7Vq1BP:j+pAm\p.@K@nMp89P7n([Cr=J#;X\9h:6Blg52$8.@&QWgo..uNFJ)RJIRBml45u1-@Eh=ihkb]PiTt!gu=LB)]OTfA=n[kR<ccR,E)B(RZ0=g.D\FWoTlIR+I'REB'.r;n)WagRE;<O.-7*$#C?)XR:PlmbS4!E!^E<bkDt!/?WQh!9bEaU";+El?OKk`alO7\oTLX=Fh\#lO#`Sj;#9\Uo_`pueg5da8cDdt^M&jTJt;\okpP;scd%CQ=j$KuQI2luT,]#As6L1qMSQ0b-\?>G]2U8G56&N>lu*a<J#?!?84t]Sd$:A%qa/h;G&:ie7ka-f]7jcfioUnRo.<Dr-RCckYb*A-A&B<$QfCf_O_;$7GG$!k_!ZG\-VgN)XhspXZkIXL4)kaJEU8LU_:lc=Z`0Wt,FeK&,C2@X4_I]FM[\f$;kcN\aZK-%LL^>h/ae,8@[6CH-X$m\fZdScb8r\5f;sagjK`J]Qu#B87<]N^oTOU>M4_iB@j#/M'f@nV'B^_i`R6Z;2oU&HW2s'ii7P59AUQf@l2gatS4r1`^J$DZQ^jl/EdO(tac[]Zh-'_o#=dM+O#.Bh?N+r]Pf2B5qQQ]0i]SSVD^8hBKN'.Y55@A/_L;)hne!lt(lb!+D`$^pgJ&'tPXbH`W>&jGbR['M\Z#I=TF!(+'6!<0\.GjRUbgb\]_QFe>&cRi@5-*pHLLL<UL#YKpQXS["8[npmmg.p;rZZrV#DU:X9DD^Vp<#!D5$E%`p`#J8ijm$%;7,M@c)Uok-.e``,"^:Lg*:C^LuUk_,P1+(1QsO`ese?rf@tpq>`4ifsfQ*oTYWXIb(HV+an-%9*p[c`Ng[tqY:M$,?G9Zci,S08\:]IS<<.^*8k52D[!nNS^3GWR*qq-,Es6faD:0C-j6ib(:9;KM$QdHRr<DlH&[(UhR;PL,/J$UNls<FQ]:1\M;oA<Zcg[K3>2]E7jhrQkj*@rr>`0CMDr-*+p3/6*)&pH/bmBFa^;E9Z^Q.=BA2\kp=?8T1\i\;M8*Jh:CqSI2gVaA-Bbe*=1%`eVk6VD#itThE"mYA,gfon(-2HRJ7D2MITbYP7bW-_$C:=d0/M_Ao]3c"A-T&`.tdkVJ+4'AKYM#ms+,I_\5Xls6K%f'k2*kKn,FWu`a81kFGg*WR1cr2Bb5@SY@rd-VB8qckT5)G)bfKX9F9&Mn7uM6!)W^r&-^bf9M%I!kQ$-I;(uSJ8:Qi+Xu<L<=iaI5X)%;)J19^f?qLD!;#gS-"kirM8O%ah!!%fV!.ZKE#%1("!CR.m5SO1u7"I5r;pl1!3WK/S!!",KZiQPWIK7ar!"];6!)]Buk/W_5cOLR58<=r[Jcof8V>2jBXBSIDBf/%(.FWP_+@4FmJgc-P$)0[(BmraTO$3V:WsP%tS_!lT,i'f'!_ACq$FGr2Pk61dF?kE\;#gn87"I6/R$)nDL^lt;+:95WRMH'ci;Wo-\#%35&PPb\d^85Z"b6a\6id;3Ih\P=rb*>Vdat@4dXR[4)<]nAFPTphLY;P1*Ia[p!2`Us>,i67de.kf^]Z]T!n<GK\[IU62D#&1dWL1Jd'19<:aiEDW0e?Bcpn'D))*?:d$Z?=["e4\#u#&ao0lSE2/1gRD.#uO+p(FE!-DgFf.:N0dVG0>GP`*1DaoEh1nbfZ:NYP3$gM^5;d/+XFJrG#gQ[4;!K.4;,ll;W.EO64c]Vg_f-i[dbcED-&7%/?=ZoMf8dcUm,s_J1;ZZr)R?HogM5Gq8*8tUp$?R#oJ]?^FRFjtL>Le40ND_/o7i@(m(JSGLZ`mFerj*U@bNYb']V9dQ2EE='=5:9J4YIfrD3=#YaP!>`>nPu%k;f>lAkEEmMs]#.CqS=J&N?6e$p)uken2gjN1Bkub%&VcI];lk8a"W3.WsS"nRY)^_cQ;O_,,Mf-_e$g8a5\'?eT<s^m"it"&'"$FCn-JL74;'h*.?dML"cm4/sjCJ]?][Vm%c,6e-Zmg4l".4^E6f:j+ia?@#S"T01;j^RQn\.n$/-gjJo"5M8IMfsM:[='K7h<jF)mo)!Uf[HBQGKkO(/\(hpe:&D"+@b/<p9Di)DnQ![,mtRs)H-O3d..+^U2)$r.Iq*X`G/am_RpDTtpP5WtE<[X6dAqK(AqMN5^_FSK!'jV_,gBSg.:MZl9gumnM[pb"T;8Fcm!b_7pl,qh=4\0=]4<E\du?NCT<pH>fd5(9R972O9:GG[RShRA<A6G3JW9AoQXuZ0RQ+4Ufb>^FQ&QgMUH>ng<KYE,3H&^9aYVW+)&ngBP%L0)MB41!Z;F2sU?W)/`.e9V)08qXJO4n\gnN2i!dPi,U<&R6/=Yb,TP:Zud_qN96J-be:h5ZkO5G]eN7=Mndu>Pf@FpE93s'j/I(fJ'%R4Xc.?m8Q6deaU7YHP8$4;X%>eu_eibp8\3#NRGDr2=+GQ7;2,AOKGFC!Yb]t]/[9%.06jSIo/.o$;'hWU8cNq+^oqhEtmQ-R)ohjs"OJPK1EDqLaB%/DhPe$pit4aZn;9Ee]'V?AG>^m"gaB;Te1:RVpi$MS)l1<IMcU=d5FhVFl3,%P@<IcVElTE$QDHKn;SCT"C:T3"[hT>NF9-h:MTft1uUX*EYQ]tRfrIuEYrQ3-CGHfXo,dMj",<M_>#DO!X)T@V0Up1#$qccC,IV)N%'nBjsV,7E9%cjffG?1L`+G4[g[l('rD>?7!WP24k=+-_`TF(K"`KNAVp=Y:)N(8<6PSU5Dg^"OWt0I:/`ahWGEYBtsY62.F45#bn5PXNdZ2f6Ve@n7=An^+lVs+$;U6EH!8e&Eo_!l_+.p2n?TYe0ihr%1dZnYQLtDALA?OpS#u2kO:rSCK/[$h"KtYMf"&&$FZ5]2+=PGQ#P)*Ki)El:6ma9pR)j-@mTHM\.Wh!76u[8M^9N;c9*JO<_HR9A]M7p,NB,UcX^6ZEY3QKFEjZZSShgDW&%kmNsBO*\,3mL/Xngr`sR/KQ>^XV<#c:CgjFV[f)Jtb(]7cre-32=#;t\P!?4frk,6No6Ei+k*7,il7=q1+@hEdItrafgn]X`USAfSmS[l[`IlfoC'(5s_c&2!U/@6T-]Q['S/.hJbr2FEDS*D%poO=?+`Z94i'>eVUg;S2:gJJNf..0upKG2h?9`$YJH<n*-e'Ra:BuVZC_PiIM<^)8s2bJmZssGY1AnW<m\RUWoABG-X&*b"VYKP'51Gk0-2:0_>]urtff,0INGB/o'!N2R;ZZr)R?I@'mklEAm$kZPV0LmI82BSOkt@i`G>G@t\q.l\k7;!,?.1k-T>s=[kheaaP/G$N?T=o&(NL6t4H3o930/!=/NdhmD.KC>\`1#\\nq'XjXN2?Ij6$smQ3r/0gEmHqR11l^dV/R1cidEk85UkIKZ]F[D0'UFh]Q^`W$Vor.Fd'[3XcCfNR'FBYH$2>'-WprYpZ>MJ?SS`=U7X,TW5(f-GcD:LhNNZsgCFJJAIu52R\f(K]bh[m]m9@)M(9an1nCqm=\!f>GXcrd0MWh,1D7'*@nl],SFIUII4(LL"WW4f-8h"Ju;Q7_k5g5\HsYp<T2Up`&%HOWe_!RJ7JA@PgX_\q.l\B@F,gY0fc<kE-n2PQpkQ%fEXm.mn"t:?#VU.`[,\`j]#s==a@&NpV/fRd<>9oR<V.VNpqpG3(e\^IYPHOL8M80e#^CiksVnZnB$(=P;_Z)dH@&'[^jB*[T!Uq:Ik]=%RH#@@</9dT_(Z!n=$K8e1kW?8\6b\L_DtCo4#d<?:]*=3eMdqb)tF;uKHMMFWBnVu8b&Y#Wjq$?=CEBFj!1eH/uS_V\7T.:HuP*us>TX8\QWK(3<:s+Wf=rFM?<I<eo,O*`u6*n.k%-)FI`UDqQM^m"ga=/I68q+".nnui1hZD:n$9WkVb<rt2o5J:G"'"+)&cZFZ5.E.3Ds&##+(pfA!p7en6Z-6Fpq"BT+@5@]/l[fo*pRdVc+pH\[nnM`)b/q%M2PL;FQmq]E'r,@7ibaeJDrO92'EZsdW't$=;glTtruliUVr7&7'eDf.2<cdoJK9&K2:*p4?PYIM6rTQR.fh0\9/rZ&2nHQmq0P&HXnM>=&@ZkakE`be.CtVup@qbN\i$'cT&-1<mkh$$kalK\\6E]'-1(RWZo/L,a1g[_)gW&jF\?t[qVqMkG9n8WRc<eu&Uq'%k-!kSQkH'AJ11MLc:f\Wmq,.ts757;ATaM<m?'7iPeGlr\_nWVobQqujgP\JeBSl!.=De:>J\:k$C2\/(0g+t/\_*Go7'<3?)W9&!W!%g&ch.<P_ARV4aYWL^R9JSTT2sFM<*\%L$H.#`-q3^#Z9"\g\IR",mCbA2eA2V[suK]/J/<Ph[W;ed=rGI?qPtK!N#u"3]!V"?UO\D[-13JB1"']Wr<Oaf`>"Q((jqH!2(i@'(#CcOM3W(.4oN$U.J`b^u>Dh#lo'Y9)Qd1)q*=b0I?Yt9F4fhJ11MLc:f\b^I.kOUiTHa"b%#h7#.qG"p!,?s#rd$B++dhd>]Slq6,mo2X0"]+O*8q5_AVA-AV^oOJYGIg>bQs[P[e8JgoqSJj'5K,_uLmO<=n;Ohd4R,=-E:JcnpN#nfXW2U_Mj')L9IJclAm,Y4">/\3bLV??l!!!!#gP5qH_z!2'WP,ldoF!!!!nJ11L!zBECj6z!'h3*8cShk!!!"f!)iq!zcif^Kz!.ZE3PQ1[`!!!!U!N#u"zTF!:uz!!#`@g].-T#neLSO<?i@Zq/Y.R*mA_r-U>FFR$FE!!!#7G;2>^6S=`=n8eZ."98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+fE"nP!:9fa"98G+f[5O)anp/1+A9@"[#2j=%-2`'pci==k#uV!9pu1W8;$-L>ABqC#3=!(kBD56&e10Y2l!J.[/XI5@*U,V*Ppo%ACo%+nW0an0`Og&V6=b3BLB1O8?_p,%2AjC!;HnCB1`H8eGVe+asH\rPSEK9gPDYrpKC&IUN4aIl"P&LEb_H/)tsQ6U`\N_dT<f'Ko"U7_[q7&E!$(?!8id]9Zb4#le#ASa8KQoMCJLXN:u[5KVt</MZ]C.&9t"<-H?I4lYaZ<453kA=\o1J?OfV(eZlFfNXoJc+drt@S'RD,j\#QH3^kEMH?jhJ3B2^4J'Z'UipBQ@EC];SV!pY,Q"1hpfW4bm7/D24ToqRu+8/@T:.rrWDm,crM+"WpHc=gBj3"9+8Hn^"LoKF.cXY-eh*hj33mdj;Y989o(&Z);0j]%S,kB+)SR)Gq.A=mpl[6?:WD)@KUoAUfNEC*(Ou:?AAG7teLX^(4f%U]h4#j+5WT@o/-`SmIr(e:4!!(A03\r)2TL)+l:6;IBmUDK0U;%6sSI>'bs+keAddCnB7NRo-V5'cr6]RJ+3=QsrS6L!O_g,$,XZDGpfHe-OQHB@_=+/<*o*=AZDdp&kojfXMJTa<SI\s0KFNZN-YQhj%$)&D1+8-G.-R$YEf?AOtb:2:cj`7@i/?D#$lE[U(=JAWJqHq6@.*8*ZN>F$sm0*e;VM:E)_)p,kjM#MB9!Q@F"`^Tcs-ub+a$/c$b';1?[h02:Co2ke4N3ntlVRmo`bU&8@uZScP]RFr.;<JkRbGln.F%e/!<<+MGsI^n`#Y*Pg^bW5Ck"Lm4#$u6&GDAR]p5.6-u%F>iY!^j$*rFRT%;XhH'@rPFrV4NU^Eq)M!ED/WJ=HdM&f$e#K!K?H`%;6r7]@8C+N,b8Z]`*7oXujd5F:i6K4m&cBRD4Ok*3=A=9j=UCmeed:1q^DCNj7Q#aGc?KPl@f]I'\k]-A27tb(XYH$fK>U\l0N=%-J.C5$`bpY2Z4R,6r:og$^'K$l(g4Lj=*dgo'C&&B9m:>":nCfc#!!&[7FDFK^Q<kCq1(QQke3hnr.(GoC;$j;_cf@2@Y,m$k:;k(?d[oQ<2.fI$_*E?+F/4-A73b[c6)p]k2jmdHcK">3lBXEK;,a2ep/YW#P1!^#.lkj%W9.<A7arg$)sh3pjLht\L56J[nD_11N1K3O(upf(U4s']j,cSG?:!AHMQ6DJC_G5B<G6=7i2/?-MF@$fQFrB"U9iR<Aemo6;Z!g>[4*tF3.WM1!&U+lN0Z-Je5""XBuVMamjA2;!:Wp]CK!S"@$d`e:t[P<q?p0\;$Z-SLY04,dXfHd(5U67>1':QqLG>`G^^#r0'AOu4.:):g/g.%;o7GNf:.qb?]dr8p<*:e,aOABD[)Yl&jB#2j;K%-I;Y;n.6P5LK.2t?=DcC5<uS]@BG0>@`9m>EAP!T*W.K3,>h&^'Sn+LaI?V$M\sN]apIRk$rK!\/W[TrU-iB&k<mA>b\t::3Z.V)"9Qc>,;ju;.7l@[f0I6]!!8XAr;]6ZVn1'JYWV[&p:I2XKV1kJ\R^F)5ZOXKLKK_nmb'=FVnX_X,P(S,>Y,lh(fp>ZN,*0@RD_NKE%ZP`?hR;PL,/J$UNls</hrmO0D#!D.m@H4*B]lkCN3Xc]j&lo$1VA;X3^-tVI_;k:29FEl@pFhlE_L1H7XKQ&SZO>lm,T+84PnUUP:<11i`'M[\.VMmeh/*XWsKg`47T0QJb`h7;juG2274)O,ldoFh#b>RWAb)$Y91G[8sa&FU8lQ3+DlVKqf3iF]>-'q!WW3OG/0@7#!&U@QZ+mH'ue;N_^kBKMgcL?dQLu1!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"W*AAc>clQRe!!!"WSU!";oK\K\6%T4G&gU#+0$TG+#lroH"-"s><ri:$!;J1^PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`</PQ3sqJ11L!!%`;8@S6Rt]07`G?>S_`/Jr1^n$^+1:*4u":S6*\`YfY,M7IE_`K*C!\X-r0T%k=Y\0&KBN;%<M:.M>;',f_@6\?h-]*]`5#i"4_Q%/=Zb:c>1=IGSHR9=f'AX<p'Zp8O'P;l'n;tV.'ht/j)B&i9$q5UO9&Tf2"s36C>:O=Ud[;4E_pOfKoo<XP5EliA_1)[Rmbp,IN1'.FUkR]Eok8!;($nD;8%[L\/0dQ3<B?e!bi.H0L5'Oi-!"IkT'"dRZJ<btBRG*m-jf*E(>OraM4<D30`[2(KrL^>1aCj!=lsFD9'LA6aNgUNl-H"L[V//a+j`TGk[p=9h\;/=BHEbG@[,][JJ,U3YW^ksqBX1qAX8];IdJs7I=9L07;rTUune-B;XKATVCtHU1res!I1I!/;3J<1"RiC$M4a`O]i#'!dbhq1"QF(\q`VbqY5$k90D;A^i[#a,]k7,-e\]NC<_1?Fg(m+HiA'uUj1fO6mB!#'@:'Yu\qdFX&hI^\V+P%Sq$bC"-\"@A,XKiNFC=JhLSuYr)g/EWa]^DE)R6[1LFZEd/g/@NVcG'"1fC6c;]IW6mb"Pan&&$`4`])rG&Qd.1;egT#pN`g^UH&dOXqkH"1c.;dEqe^llQo>Mg:302'!FCKgW2Ehb;q"$/#W%F*jf=/BWo9(fA>jlq?blIZ/%1tDrDPgc9#G[fCTSqBNbB9kSlQ=-"I3P;du%7E,eL!e]m(Eg$Oi1alJ-L%'5f)6l_8P1Uq6ZUFaAfRHO2=$A+Qec6k*gm*No]9;ePmCqSc?mQ>EoFnsiU!Ism^af'mID%ip+FnQ9`-*=B^o85QrB5C6J\(\?h6sAStZlJI.GTA_k9KXr7E&F*4/>kN*g+Qc"Gj(bYVOJ4-X!#Q-oCWkg_jPLCRXj4W]>`JI\TlP)%HCa<KIO0AIgHM8Feb\'dJ#Xcai2p*BJl:6EmXu3/+l#2It=5KGCD2X^(u_d-/+h*CN@9Rn0@u6oT057VSoGsiIibgZ?&iODbI>(^">H!p@>Z##p5PeVPkc%8b&Y0_^rFZJ:gSOHY'YNYS0%U_[p^*:?1GDJt_ScYf,SR?dqhr%;EtP&oY94IttG*kCk8&>kb!O,rY2b\>DY;-\#$c#kMPh*VEed>GEW]5#(/u>_L5N&=>DRRM*7#I%]5sVl5NSa(-Nb&oZu4ej^V5/Q_8*PBCAm.8=7?;37dCfg]RPQMVAI1%W$/c^CtjWiGW9mY4iH]fZnR!!!"F_u__@G"m^dg#hHbWl7)HB1G1ELQ.(Na'8\2"FJ2]8h?#p!]fcqf(lYQO!l:T[lAP!<bM6WlR.lS3Z*ug?V`ei:GF/H;I?Mb2a$Pul[HiI$$U`$;];_77%R6oDsO'&8:)(@E)N0gk0mji_aTr?%=re7MCGg210g+s=`/n%\4l]5!^bg>Cp$jTC<VTZZrigsZ?uH&d$%1\2cP7tbk6"FZMF%r*X8'ZTKtF,369;oVgE5XCo&07_t1;JKA2R&`dD&u2iL`<!2,Z00N1<G+dm05H2LAQS&]9R][#.jY(Su_;e"`$k;6eQ[G?r!`ke6pmfX9S>adYA'N="tg7BQd$pCm78*7CTiTDBHT%?&K\CI1G.:M7MVX&-,N<hN2GIJ.qa6ti2gku00U`2/h9#0LB-!p'#-sPGCH-LRUcBL%0k/V#ejf?^,d($0c(C*)/CG.T,TZ-A<[WY;ne]D8W5=fah`"`dQk&6s!rccs34.jM3pAt<pciY&P.1(7+b3O%R2J2)>F%a!`o4@3rOlpCM\A``GmnR_C,+;^t:n?0*?2?\J9A!2";_hHm8m.LJf8+j]BTDs-Bt_'rG.I/.;`4M0\"BEE$+Sg;dX5n*c#'H:0o'80h7qR+^3C*<H".>]`%'YW469a.UOYGdn,H(NIH/d+0(6`-:Olj7[.2f7?<%,J3Zb3$,Fb)<)j>o7^K42aceCbeqt#7u_H,c&kPtS_H3jH>,QMKgpuP'I!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`#uQkBC4%ko:0!.`&6]U9CY+@qS:6%T4G&u7s_k/W]U!T<,CNA"R=!<BJ71ibkM!E0%"m/`a`T_C\r#P9&k,ll:5d"qaK%lA;lmf?>g!:9fX#b^oW,7!i^0I6_G*mf`DH4MiQ5jn_P!W_TgSHtn_5U-O+*\\l?clNS)'9UK"\ul+-(G+K6%KJ]t*LW(\q<@fPDb$P\P3$;?<L`^>CDA83ob7P$pQ/Z:>K,KF-,/gr_M5C*0eZ\eHkLsYU9PAo%i/tfJKUPp"5iJrr/WQX\$PH7N>lh0[TT`DgasJ1ZTk74&e,;,hYYa1Dn@btOWT7`451cA&D(89%]/(tD`:)rO/orL;,*Lm6[G:/V]`RnJU4*mDq/)XUXdrkGgiI%Q#ur`\g$&Mq\sbSSb:BKAi+Q(E'Xb<)9NQpA'%V"D]/8=3UQgE?p+l@qW&0%#_DO.)K<AoWh$0i5\.7=4k*Kp``fs*>B_rNQ*iWggrt(EbdBJaG*;EYRN'?f=#l@Z-lru`b?:$)>W24b]-T23Pc+AA<uPq1N3Rb)FpE0ojQt%44'#4[M5D%0Z+!niMG[O&osKOqA6*#+0:"rWQG;14A54B_.-o<QoI;@;kFeY7/5:s8=9"ZZ+.;VooG-T.PSEK9gPDYrpKC&IUN4aIl"P&LEb_H/)c'm.QkK:!J>qG$l$!3eB1IS'adIk1,YH^4Wm.\%rc]DMgm[JB]=WHVn<*5FHYGf'f'&1G'0NIA9-rt<h+4fC^A#]U"uW6B98ossgbN*`OX"L&gM0)\U,40MLu-Uu&E*d%R*m0Fj5Y["jV65jjI+!m87=q"`T_'2L9!Al>^o9j[>BLmro?nKePZNi)1,g)eK1s(hKH)n0:296o0Y)M&"uc%_Q&#pZOM,i`<nW+1tA1\<&#H%U:/62etrZ6A#:Mh52kdo<\rjc-oc-hO[qR+%8,a;](97*X0]Db?Q2##E#6JWYls_Qq*:O4WE48L5U#=@Sout!H,<C:nik'W/@O\!E+C_!rRG;f:%pIn.PMOlQkK")LoKF.cWp,J-0d+/:t-XbN%+sIp\+I:P=QrlZ<,gUV2(i?.&p3f;Q,q[Vji<;aRT!s'isfCYK(n@=d-oW6[*hgPR]MFp,FZ_RYj&[M"Pp6=d,@CG&MG@8?EZ%^0Yt0e=B3SUl_QA#@@m1nW/8c41mWgiT]Lei]nhN"<K"ha^kPbU)XRQKX<6&aUiBnVZ?Vti-$:Om\d`4Z]4]`SqWQ7]%SCHQHB#FI4=,f:W@2V$1_77I'Auu[1RD&6%V%\l=<DZpng7>P@2^j<S*EnHaus(LecoqlhLlJmCp?'a+<8*IdZntJpYp=RU!6ZlAi48S)!CZ1LH_VBsmn&Zi+Ve"`:'dp(dje7L6;Y]I)dgTM2tqO-u0q\eD[qS24.CTmX@XK3QQ^[3ehmPgDMlNHfqc)f$r38jN6r!@bV&c71e;Hkh?K6D/3[>L(5@a3;oJXsVFg@udF>HcOKT(ReJK@:c`-2)<U4?pp#(B)fM>8X`=E::o]$_Hk]_.tk%6;`8m23BPkkf,lH9@1?#dGl_]K4M8)]Z0(?<]C1/lq5%bC='$2q[:@;*@V&^?GgR+nihWg.]MG_?D9'\?76MrXhXmfdTVO`obp).!VEf/6?\10M3PY1E%^PCT[3R4kapr^!47VOES!D]ljMQ1iNCY5O!A;sS/g6"Bon]ga\E>#IX0;7H@oabIFgMYc-Q8Oln6q!0qiOJl[Re5\]oD)mZCE'Rdlnak+[s0+@TV<T\@"^N@e0L<0@R_WN1[T,IP&.!I8^F+$PGQq%5$CgGG^qQIGMtD]!8L5YcGs]P$s26+mOOp:SB%`(1?kbRjG3bCXEn?+3=14?$2uJ2Tl&i9HhG?l4V6ac*t.o&F+)/KNC:TT!IZZ#@GJdIh6+LOAJlm_V.,F!581X\<U^$P99EgEK;;Y3Z%"Nrc(>Wo`Nf.NBAh%%m=E48om3#i+E%n'+r_7F#*=-C))ZldOA\DmC\U!-AZ_hae2`ZmE5.,#fgha'@5INVI.pO*j4Yuh[)$8,See($?>qX?e`h$)8)"bjp5\a]hY9,+>F;:(SZ747N@VaFUJr:rKZT+c#B=OpoZOFAV*cF=hKa[knYk3_I=ofBu@8Q):$b(>4aX^rAam"7m9$FRVGHh\jMLDTfM>cY+/^9`5?jr.BPXjK\.Q`*gXqP/Q[AEPUCu#HFOR]4f5#(KP/j@2'jc+HG#Os'8qA&B-0jF`%0Y8,UHM!Z-U*k]5'r\!tW(=iq?#OG$$Og+..\;^3>=m\80-SX0a6%Lub+0_3(LR$(m8<=`#f0d1@tB"UutdS69fNceWOQ2-&=G0bj!6=Snp#@^G7*deU+][qPLfGs2*!?ei[q8_eV@,%u1L4\NSh]:\A'ic_=nKF+",`\T!NHeOU\!V'fp[IGV4LK>BiU84%D`g2EAE^S)OdrE<CpQW"&]FT#5(84gQ#5HuViY-*o,An;Z(]J[86:$rVFA"W"'ef0b%W$2F1%[I'M'Hc[F@MR!gH-m)+;6?X?0tZV>uIm]*u&-`WkD>#K1Od>gkCnjTj0K*W(<`.3i4a/\>\qr$hZceb3)2&8#Z.6#*R7N)i05ZT8:1KH,Zm1B[;9W'[61Fb+IP5c9.>uD(T`6<I%!?.>d58$JPG\JH`p7:.3ld@?$st.X"Td0HU$/]3W3i=/*\C.WJZI#J8BWG?bdR=;*UB_C@_,DIU/"=4ZtTCh*X]=1XhM8(&c.f5fTuFT"Sgk_cT"M;iie=cDam_8nRE?`%(q6D5I"(SOY"&,Z_7&*\++q`-T5bQmO]]oAFX&Yh54h*.Z5JG*\@SnHaoKi:];epH6%H@+o;Xq"`+YuSgc.[5tC6d"#KAqll[2r_QhPjimQ>9D@ZaQ/RXTp@@kJk(GBU%_?_l,FMj"_PVp98TgC?:m?9.FdPomeG>Q?TZhD"gnRTm.ZLQS&$W2DWQFmnG)OJ>B!8-5#RplC.f&_BbO5Z]hsT"("qo0p1]cn;;:4*.sDdbjB*'92l.t-?\FfX?g-Q.ACr&[^8Hn$\@hg%(IO"CI9#R@-`9,]AE@m==8`-%i-n?F>AUlU2CRY\Q"C2&\/_I]WnqcRnK\c"*IVD'ZIT]@>jI(kp:6n*;j+I[1NoY1@>mF*M&J,hN'dqdbpTIP>Dbo">O_ppR3MHk2[%.kU?[.@RtT+fkX"%B_+eW9'oD"V/U8Z$6t`nVbq+mDMuD9J0H,"-p1fRaL^%W&o?O4f;N5MPhp\TENhYH\g.*HjMEd<r\@Aj<EB%rq.>d27$<m9gJVD)8:.3ZW/'nh^0X2nVTTFt&OVQioBX][;a-RY6>kp^Ao$K0)I70B]$k9L1;KhYiXCt[FS(L'i8BFna94k6q?7]Z1[e96f[/9j@^k^(3#?4>YXJ=YDP^B_D<P:UIlaaU\!]pO2,EGc`,UjRkK8Ah#B_*qcU,F=#Znm&gh<qaPR@_-Z];=:sVM(PG]@E8taTVe6h9;#H8Kh#VOQqX>L)YGJgk_H#.H0&:n96i<K[ob39SqaajX<>@pni_Q6D"u6fG=i`3A6$0]^H7Z>F_58rom>h7ujuuGO$:5ViJB4XLX3j:BJ`BT<VAm6oEPL\Fh]u2dUUNFAifphV1K,oJofC;if]^q!Du@^?J\E\1o'$)6_0HX?Y[TCrp]B'Z4M)fADGNoD9gY[J@SueYu#o'WgK6VQ6ln8qq5e2>507;?\]9<Nt_V)lfks=jJrY6K#Q9Z&k9YST-@p.op#?Oi!)ifH`Zs=^<RY?'H"SgJB$sk(ldPPgGJ*Pp%S=]<m2>P)3:XcdPr6]:<OIo.*]f`a5&TL;\+0qoqA>;Sje&^1QlWOsi4c"mp]JW;B^[aZqj>L4tb(@"+_i<7:dpMQ!*t_^VbHIRkT^B&<aIcP"@Pm$gPoRI*AuHrp+r#jl%SdHc*3)s8WD`hO$`6-<hbl+l=m$cHXA2E8Z-g-kGA2'AOg.0)R7;`bROm7Fgu=_PY(lTkm?di`/`1Mmb2kmil3qLoFAPP+(jjGnUAhoF7<8gj>pbXb<i[;0A)YMfc;-FST0;"3d+=.+>>lK!>O+aKSZIP41d73^XDk`$;4RuP`GeX,P\KqUo<S:4JY7,!K@9\@E"ol0lB[(nCp)O:!Pn?M]VV$?(U<LI_sUVc9uNn31b/NgS6>Ft7r^A2JMeP%d8%mA^(S"hFkhD)_a_I,u7_)E[sqs?f+<9:'6\G;r,H-jf:JR$])&8?!pZ]H>3$G.D2]Ap#aBWe)`F9bEI#uckt>^A9[_WbGS:Os<8o6etBR:8d/qTB^23U0rFj>c1d-'F2hF4s''$,,=b!7CK7jL<eiO""N+IN*U)YNO"qIDm))Ld'ILmBZ`(+O[jf-@nM/Dnd)[E]g"@^mELl"WG!b9cD9nk2NJ;*q`/rjkQ06OX/*+9#7I9l(g+Dj8B#CW-%6KX:6WH/I,T\RPR!nI?P/U4h'7r`X$X!1Wl/j%-9!TkS$Bp?@oYg3Is`*>.N[6NVZpQ4O"GGji@6Z=HdQ,2o^R(\uFSpIXQ1+XXShfj;WS2hUOuW.4N"bR2t6Y1aQ>;KLDmg@,nemEd%8h0P;S\jQP[k'n'B`+t(Z5,Wu>$*gRRb*c'>E9[,WVD@qahg.6S^_o[YQT')Q1F$9ams-_Z!aB9hZ,kK:T"t#);`@\!XbVg9cRSUIl&lj!7fJnZOh'@]Ij`XgPTXU9>=tf>8j`cUDbgI.J%Q4f7Wro+QMhe+fQIDuNort@bV'^!k6JQt2buq/8U72&S%bO0*.V7oP^3?iBWVssDZFO99h1"`%]oSZ2W-n+.\g>OPQ(BeLPgI3aaGKYu+d*i#"*\=iUWIK""@)PJDAr;I2!)p1[Ya)IgcNNBmm:DS;o(=;b\Kp3^J_c/Y2Ii;NEg1-D<DrSJ*'lqp6.1t=1DX:`OK\2RO^:KFXbbVT'G:J/gMdMW*b.E(LFc<R`VEPW_4^8Bl6C+fYF\\>B_[=_jWhI-e\eHGW\EiVTuoLfAoEf.VggAg-p^eISX%aWaqddpa0(J%E[>?2rS)@]""^,O?IU<]?-g_E_c;XQo/Di/##&G.mBl&Vu5rb[jF2lftrp3m("hs\"3hroG.:o^H<rY]RKK^.5kb2&Cb?=OLDpQrR`]pO2-hI!I>85E^9*h3DE)jWV@dpNFYItEqf&14oD#r^&e:J"mA>S]a#H9T_JASV??nj"*>`;h?/`Wd!NQm!'klr-N`Kpd)Z7$#>>F(Zj1[sJDLBf*70&JPQ3sq5UQWs4j_7N]a%4;!42uQ,(SMPN?$;l^m"gaHU&q[kWR;6!PJ_3#lq=;F<Z7l"-";IHbbjG5^PaD!pDeoa8rsZ9F1^+a%tQKaSU&0+A9@"[#Y*o%J#'T:D<c+/D^:q$GqP(@50FuZP##si?%9aF-HT=Y*hou/O+M*#CZlmPQ3sqr8aE)dZb;RWV_N5J^R1,L+0C""do-L@a7aq'`@YPLB=TD,)D0R56[OeA9%4)2fdhh!)*\![)Yu!M.!2kifeM$Xbl*;Z4Y%i;c<,MDoR'cb_\_3`AdU1$X]V*O(bLfd7L$<St9g0:*I[81Z]MjN[b0Kp\+I:P=QrlZ<,i+3j,>3jm99/U$bm[,DAf#3r!/L2"2X1_#QblX((N]:UI#h7X>W)a>(XBg:K-QSo/Eu%V1_ii/qIe:0B$k'&8pLJlA0RQC@R4<UBL1T/q&8ioVV,jM9(AQkBC4O.X&u_+_s-W0#Dt'4bji]9jld2^JX2/;Z^IQJ]WC8QiIQ2d&-,YN02nA$a,HA1^T.3`Wndl)H8i1AljCg;C'GqauVCs7X_@.#Mlfdr4BnFEGPs9Lj3sb]IqspN40!04)EfqRsIHoSUf*'MoLETHN0IT\"V&$<Q>`+K-]HW%9P;"i1qmI2B'pU4Op?Jfl0a$F82gRC,b\WWER,._KH:V<[fo5D[OIkF=Z&FgB:oR>37qWKajKh!!l9pI))AVrI[.0Um@N)"1</.^Pl/0"d;Ugf'A8`]:?7kqsYF7>^@)bn!Bl7!)2TRNM/r^u8>In?UR5g@Vga(qMpgD^]20@c<jt=9:0&!)/0%%jG1U&ual0cS)W2?ZYo-CTT$WT;QYai[Q7CI%j-Y:1!2X'Vd_WD@+kY<(U)ALKEb^WCgMAh3dHOZ?#O*<5W/!g!;\,.aqUlDE5;TDA#$Qjd++hG8pA=L6%?DZ.\[GNDN7(P[?S!.!+S6<O;$=E1,kP.6B(LInPNe$()>*iu"-r!2dZN#E]$c@MZS5URc6Gp8/",9W9pQf9@>ZF5S=q8f?1<E)W@/kC4!nlV"$[m,m"QrJ@`6NUU5#O&Vf3-WsJBhpiF5b"c'UrPiF/"27[RPh^YB&M[DkNt](4JK(qU?bT`IF*WH[=-GhLm*M!"H@7@_###>RE=>MI!7PB8K8>O:O\%d6nSTlnlRVYW2o27`D!0?&omF<On(H+-G0Vh'K_e\=Dka0S_9G##o3hm#O>\,K5K,YVZ2Wa)bFqc+ihABUqj-7?`<a*6K%G%Z:Z'k1T7!]d0dUO>)TOo:,+4rHH[@cqT&m8[7Sh_"Qc!RulYFTr?qLEX@phn/QjsKG6jB%lRD`C!ih\@UAfJMIkk^^m[e<HK54a4?R$.E1VPI)qlV>ER\D#ThffDl8S,:]CECF71^1H/E[a(INhSE%mA3[BOKe(f>XFnq/2ti`(MJbMb0u1W^4^dER71&k#qqEd7hQ%W&<_mT/=u$MR&cgr/QkBCr"+pk5HdKlcf`P.S^iWrq!G2j'3A>ef8cY4g$mNLR5plnL%nm90dt'dfQp'Zo_!HV$!FRrBL]FadSK+"[0I6]m#6kcJp7RTOZNm?1JEail!mD^-Ea\UVPQ3BX(dro-K2)p#*gdQ?V?;GV0RM0gJ_:-(!l/nc&-6AR3]Sm@?qLEd%LX@HkiMu]PNQ6;)`ahgkuJ<idPL..f)0U\"4L];SK(`50I6]mLP66_+)abDBieMC[oE1.2?2J0^iW\'-O5q;9F1^J@GuipIT'.%?_6(/gV_^tfmt0V@GnV72>;pJ0AF&i=Yh^Mf'K&[3AH4^;O*,S4LB@ENuB\'8M$0S8hFu>SruuNJ+WULNjFqUG@\oI%O[rR1,]AQYul5u#F5?`#lrF_iIcqm;j,WUqt_Spl_Ke<C&?/7DJjGi`.Lb*AV/729"mWgke?Wja$77Ti";GV>aI7m3G<W55WOp5oH`;2D>g;CO^-O\+khe7$rd#N=El1uQ2jSb!7PB8K8;]iU)Po%=]S9=Sn^6$48V$.>%P:BjQW;i8?;=h9@l/J4Ru[Y.JWc+8f.42f/q)hIsu*;RLaUhNCKe@cVq=p0VpF^Km.QF$,Dc*0HComM!-W@lG[YDc-i6ZRPffg?$hW31$G3lVdDmqV;<]7]?JiEIhVFFUZfE*a0guLJ#U,t1gipO\%6p&IB#0$\l:>MdMKs@4#sMJ?qLEd%LX@HoKI[:<@#(W#A66eTG5hOA+QTXa$(7KIeraQBBu+t;H[@$mK1FZ^%G:"YUUmM/g.!LVs(=[5JL+c0UAhdqBg*n[Y[_M^>U0n^+:&Vaak`<;ZaaV=SO"*9SoU(l_\^-8g18t'cZ.I@r#`C3.5Z3e"JS/h<[Ioc/t0<g'b>rIk+I>h]/--@XVhNio9='`aeguf#mt0h$RKMTp<?8;sg*&,$3'o%EN7GNV-^a(`(uMJL(:p!l/nc&G`kus*`q)4TFXB6K5S.[%,Ps"e"gbRi1.sVF5+?k(2KaP68,rV?DG6^``2hq73Aui)Lb!iTKRkk2dZr]Hm;B474MFC!atQf`P.S^iWrq!G2j'3A>ef8cY4g$mNLR5plnL%nm90dt'dfQp'Zo_!HV$!FRrBL]FadSK+"[0I6]m#6kcJp7RTOZNm?1JEail!mD^-Ea\UVPQ3BX(dro-K2)p#*gdQ?V?;GV0RM0gJ_:-(!l/n[p`Q;E5<`$/[nNZ>(F>Vt/l;RmS)XD":t?2*1E.`27q(oJRE+%eIc4#PRQGq<fYqaifGt/MMM67p?jXW5!&,E/5)9bKRN,SbTlD=)X6Wsl-<`&bdk97>dc>p'YN8-0^m)hX(>d/a,lgjF^iW]R+>V$&#kI]L+l@852Gc(Ro>/:*3NrWo8cY4g$QhckR?C2=Ckpd+aC;lTVf.crn#`Kq9&gEin)V7sJ11M,3\5Xi)/`'0b0A5\<o+W2^8Ic%ci9(ZCWZ+94RYlq9^.n$Km.QF$,Dc*0HComL^Z'c=_hoj,laAMR6abLM9BD!fitI%rTfWh3*19.V.=7'n4UU74#sMJ?qLEd%LX@H#1)KK^U]skHci_W=5GG9cfet!>Ztf(AUa?*<ZWh/]e.EaQo]*[[;NtQg;,EE$h*/l&qDD3?ofid&/k*l!>?g5q*ZR$Gp-'M8(72a!L"b3Ob[cDpEeLn"!&bh-SN$S>+\mL#>b1"A)Wsu=9:0&!)*V%&Rb=*P68,rV?DG6^`W^&*cuF1p:umm0HCuuJD#QM%a5u]&ced2K*X/Xd)gjl"&f9:FC5X\Ae-p_0RI2"!146),/EP2-O45o9F1^JJO'F+4m:tBm.k+f`9[b\5TgUD"Cg0*QSBd@!1!k2I>r@_!!!"H&hkU39F"5t!!(##0I6]m#>>F(!6.)S,lgUD9F1\!`]Gk#!)*Vk#ljtF4"qr\9F"5t!!(##0I6]m#>>F(!6.*1A4hG4GI(>qFItIB`Nlf.b`=tgdk,$lGqHN!Y+-S8dVYqn,A$r6Qc'G6imhUcZ\C.clMe$U/F7VcCHhV7(@)ps`5b$YX5uM!_e$+*gFN+igG%YFBXYK"=,je?!!"\l`l+,:%>TP&+bKZ06H5^hZk]afZ?+g=DR&]]0d_>6GBXLQd"iP>pdLn.PeNTXGc7:-@mq\\Jt^/p9/bEW(J*oW]B(]rT-8sYl)#_Rp\<7S"34'k#k`%g.00Fa!+TJ1IFTbf/=(Fs_33q%Tr>U"`9u]n]SEUbdlmRmB*Y&Bm;'9E5MK`^=gN,UgNqrr^TU*c6Y"(F2\sSP:G%X,n7aA-`T!]DoQE@N\&-bjCF7())kU\E-1CI9"9<feoU=2eM_?oqp[bPW0,F;J`B,dpGg0-i8M'bXBi31SrS2_LSM&=e-\nI0F)<8.-9=n/R<>EeY@C2Kj\l^2@.uP%g*:Y([QkVOIUd*(DJ^o-^(nAcbl<-hj$[M*c9^@NQ?NT>\Q3(T`M@G_\\C5R.3u@+Y.&n]j-m'.%3^`FXkb5Mn%H]*"9>Z&`ocNTT_7kFmT8\I@%p<PU6r#t%D<r_GJj)jN:9N2Zi<K`>A%O0!`)R9g4ammH-:#+/>)8ihOk;G.u0Tl<F$X`/&")Nna'[m_SZ+!e*c-'*fM6e5CK$0p0P5ZPZZBYpDcD(<8Q@(i6Y`KCOFR5QdrRs*LaksZ^2s#k,#3Pr/1/I?tR[\Ia@8W8nL7M9UlueJ$C\ETcHeHPdIhuFEH=:_21#uA7sl'>D5Yb'3S)8&%Xum;J45q5=V>5[N)hsP&-[Kk@g&EZ^#)bJ'Wi.ZUk1V6j;_e*-UKQ!!"R%Z(',mk]hR>o_tZM80;X04aHVrg_]n)&(cJ?Fa$S&9\He!NZ03Cp)>%]IQZ5[25Os(PcBo&eb><b5)<^4iFe>>N.pRr$LTeGl$7@O^m@Bk.=E5"H23blid3O'6EM]I,aA%<no`bk`EX-$BASI>FkJrHVs\YhoU^i-**Fi=oZBdckEOL<%UcPXU=BqOq"=N4F\JdL[bf&E:4q><_Xr8!r-hQoH_/F1@(0HJK8A.8VuC5#fkRQ_mAhQU6eliai^k*i^bQc8;\HaSYUOtN]_Iu`l??fJ'=e^n$9m,md"p&;45F@Ca%nFKo@Si=B,s(Jh+Km2o^nUca[#46K6aNTp8!aClWA)'2PiUBYbU?,?<YRY:_"'k]C533NR=-t^jmk:YP`**YLJr&:KAKCZ`[e1p%s,Z9duA_-17@R;gM\id#WQr:iGGYcg]@;V>f1p8n74q(C0QrUUd)#LKo"T9rYm^ejhqfW,Ci3lHW>V[/!Y_6id;'\7TR>.934-B+WW[h^)k4R$A6A8>^TL/+44\(POW&IbTq@X=i0q6n.tYle@lg9;aLS`O^DT5CLULf@=%A_CYS%4*Tj[eflFG1Dl@CB85&6FBOlY^T-:>g2n*Gd^N<7iN<e11\@-aKRdob-O)!3;;]itFrS2K%Dtk2h"PWg5L[1!Q_ij+Vm#WZ^mZr5qcVOde$k2TmS&<udFlQ]i^0_hT>(!M-@0lWXUT=P/P%sM/U&N4M8EtJl(FqmHPtN5g,D(YG[A5q/&nge4QF8B!!$DW0m`]If5r<URD7c@lA#DK?BL(5FhNa]n='d:GYDXrAKP&O=')ogTD6_hYK/SBR=uNhN<7oENI;fXpI;_gAm%+sY1pY7=$*1h/8*d4Vhn*XYGQ=aG?ek@O3MqRJFF0.'#9ruhqW)$PaFe^f@*b']2*"C-9A)<F:/;tk^Ju8f&(Yf=&XO5Dqi(TkgPXIKUiiJU4Z^Q^RAQr)\JQ@hDo[IpP!JU4f4<4K?bXFV`r>gL+*-'J/I0+$%OHZof#\?e`9+O>nNWLoOc5$97,i+ZR3mXh1gDg!!%Pq#YYO)dp_h9kjGK%N"'9$PCFkVb1\]uk4nOSe*[bI!%\SH&ced2^LdNI!95)e&ced2V??l!iuOL"!2]jq"98G^*LIH>V?<[u!!)%"QkBCr"/Z2$!99V'AkL:-&-rC?JNt?t?$lZO!l/(*Nqff6JM;23Wa1(50TX#'n7=3i0]%@0=Wf(C*^aRpH*:/<E#fQr0%]Ii%Za!&^G9nsQk<AJAi!o/a74X:p_)o+&.lk!a<^r.4"qrgKM_o<3RTi!&rEEYU8#$%eBjU,"2loA";<#Id`IK)nK&pBdTH7ZE>L;T1I_OHZ90\hPSd+u[;+4tVNc!`,fj8X@>SS0L5sQh.EMpk7LV?P46A3hj,2.4[]]c4l%T)>lYV.%iqIpaQ;<ef=?;NE0ig#\.?/Jr*-VE^11O9;--O3=9rZo%X4.tF,t4trnW;io-qY,;X`ma-DC1_SAsFX%<,d5=EDrSBY8SR)^LR6MP!b\JJ(M5D[CGM)P,=Vu85`O_4tF4lrI=ANV@R3)N(FjF-!U_JnWEq5*S&Ip,uN\'J#`Ss3<ZM.HdXLBBgLi]Y#eMdJ>W-"=j*SDG>]Lu5(W.&iANL_lC[M<EEmXqO/+Hko(#AO&Iut'HQ;A>QX22l>K;Oj4%g)PKm>aSR:L0\$!P!DW/aC4*mmKq1rEgL7\+KTA\T'9,su=")'J!):)O[L0)*7ud7e-CNT%K]&t)J3bPq'Bd*_*2EDrV*0/aknhHIpQlL"QYmo%I#dj;MJp@WXt4WE4FCa2u70MrZGV%J$6fj+lU*\\lr7Q!5*RML@K9>)P6Wn\[OKgV)T'#&.!mLV..d<-bjDXIZtO9QIa!@dJ3F'F]-eCE.@<hQV[Z^VTXF_eB040#6^7nQDXD>3dZfm"d,o5p#VUDYb^;3_#gN8Bep09:!G.cDgH=o;o!eRsS+*.1>+C`>R!.IEa<.%&?(H:J2LbU+Zh_;Zj9%a$B);#V.Y5@AG;*u.5b8QChKIo7Qs_RM$dpP'UnqFHims,mSQ^LiF\Bd!Ac6/MQ@F54t@ZcXgiC*10os0Xg2K$KGR:c:+!f#MTS.6ANC:!)(l:bXQi=XqnQ*^=]cc==GPZ?GO>fhUBLg$V:iS2fd^-mH'aD_f:?NaPIdk!DlN<%XMq]ZHdp+Xg"^7a?97S*[IB9Rb>e;0G>&/E4iX117biqIEO)3&')EZER'OIi"rbmG(mKM,m[D_!pIW3+O1GrM;HdogN*IEnP9;ZU`*VJndbH#-+`IoOg\Omq%0Kj3g80l\1[^=nUR0EXsa8O\"?cbuutT+Mc=HKC-&hjn;p'bpuSVaI&5Y*%)[1T-[X$\tlp77.H$#M^dZQ)]cC=FOmMn0AhKJpH#-37mqK+?=`64o5T8\"AQkuMApijL\jF7lI79/X3$D4olObl">5T>FmpK#:W[k7Z!d4$`4m*GA*rZt0f:8pD>5ZZ,g2]3,e.*^AjK:WW3;IQ7F`:#,'j#=XLL0KmNsORb#eM*W-E8PfcsFp`6+S;#4m=<'HU28!Q+S0.N(4W+^s/j,cMqVJhC1*r]@a;4_n"P):_jfdcV]U6N81sBOcWs?rj8(B?[7@gk<.p-8:j1b0H=0DBWZ`p+#`MR.ORqcK^aR"$)=2.A(K!+ktC[6t:[L20.]Tj7"KqgS=43EL=a?a[i'"$l?eX4@Sce`U-&^*RSIg>s?/[E8PHlS3MbMn#%RkS7T6NU_sURT=!L:^1>$(8+iiWh\`6Z\D&b%l.`Fh9)P^Ml$eJ5g-l]%CqUn-iP[tC%Fcc,:&"7<J&8+1DQdX+:NKid\!Q6BDY+@^CR,6AZPS9@4m6>08_e](f$kRmR`&`,Cb*!>\(\f!?<uE(qll9fV&rB&n%P/5DNk"m<:s+q[-c@JgS!>6M9[8Ar._P_1Mj1a"!aSLAf\WddjZWc"%Qn/rQMG)3?IK>^>qq5T,4YRYjrZB9#f&7#t%BXngnY'_VAa,]0,iBr)Y_[P_dDVh4%HJ=Rg6QjG)HI5)&q5X_m$'>]/3"SThY5YAW]44$RP)=NK9_aVPkK8sR+73dZuQh_RJ@0l^ohs4jEjI*(m;.])XRq:'NpB8;5cRMWB8jLpMOE.5n)eG*TrK*-]L@ZT+0Pr`clh,8B;e)H1>"nUkGI)#^\HeAX&b0J<3eR4c/O#<ciIl8!O9#b8'_Cd=k>';2u]@qSO@.Cm8j;8g\[&XG`.2c4PbE?N9=a$NiP^QE1PV[76b@JYB<;V^ea]>WA4])!sG#+?0b#.j=aDQZrMJHJ&<E&D$\#`sBWJst-s7%VmSgj6iZUti$E_9=PB,/IbI]2F4T!F,AdU2I0+(,sH;C7?lP%`Tl,=*DSf+RS6ij,%GO[.LSg_0=Y(Uh(n%f1$`n8F_K=*+BcHe6DVU0cE`jSUTnGu4%EHPK/IP`d'977iE9G&hYZg,iMZ[9+S_%['_u(K6*$PFRC]WUKaI@ZF_s[nWCd4^HsB,^iF]m!;2ER7$Q3=<oK%,q"I6n6B!25nX^.oqV)j]SeeB[.74j1d+[B/Q?cXN^=pkofeMo]1"JSD>;I-^%H%W:ifOcpdV(k.\>fo;?Mk(%Q&<TW1Lo[(*l(b<o,?)n"O-3IMk^>E(jR,#[L`>PY7:da!J>!7!adW5:C"pdg2g]dL2ao[JYQGll]M]isNnXc]`1ngN>=)nu=&e\[l,+'?(.<%m>F#P#8E_lEV,K/Lgp2foRK:a3n=!ra)o)WqD7`rhdGgOmP%%,m2.KUGSfuHV2_XqQo(cVhF3H'H8qV@9ob&eRVaa[i-n18*>/C:#^^2Kf(<.IVC\.+3"(0cIiljSa`G]4Pi.F\!^d#pob`E5*;&6F7\Zna%>.+KpWm#gc(Si8Qe>ZP.122C>j[lM=g4ogkOf6<iCrGT-SB(;eq+PV\=9h/A$@Os7Xuo2H+35QZc%!O%=bk"3kIPO/$P%bq%Pe))P.2GhK@\,>Dm\f:ono@\l]erp&4QAOZ"W&,1.@0+NHC0XIibVGpG6-)ktKm<L$5:di?g6F[W<0-kT#9^=:eE*tt&m)>:m\PcOVE9Y6HMOqD\g"b9F&".g.QD-5m<aU-U(hePrqo3h9UMb6*R<RoLUIffMFi\[n.I#!<7[$$aPj$U]$jePQX'$Q$=*7B]l'rX>n,H]p['p!6Fq67/NC0]1c`m#KX1LLT9P*deA/TliNuh/jTY'c1)s$hPcpnS-\*+H#OtA>F/=1\3\`oo7H_1/PHGs)l-%@I1pn+",b3CO3KGe"?aUe<;:AlDcMKs3<b/[Ab1JoEqn@3:q[N:^tZM^Z!ls:DU<U;d-k_=b1;\F!A1_PcF1qN[GXLVBbh8'6#clDsF`fZX%$2G+bX*RK$'/(@*4*>emT]0r7dKW=?H:qoH$Ic><pq0-3k?_#c.)il18U`Gn>,Dp;P&0e**]Qq*8m4u\99\cO&m]<aA5RMr\bKPfh,#QtBtYq?;j_u8hVBgaBrg;cL7C7smrQG;T#+0q+"H4il%+PO)g15,]KBQ.YE1$D3A3OX8iI'u.=/;n6`]k1UM58>$!icD/U^BOPcYZ<8^oY@L?PkU_o]tE#MXE^3giSQj\M^ehSP3r,a#+&:<#gtRRg@1c.?<-ha&-0R>dVu_4LR-/d,I+o448=1>$`1Uag^qQ)-!BVrJIhQ)ZoK[VOMAUKtR2\@P$+Uk1.!L!'&=G'LLmBkF<F.#0Y>oaY-=h9WcF$jB>HN;6FOU=JDB[TQM`A&OV'n+O"n?JM<t0C=,Beg\so"NBSb?dRX;>6Dc=2:q1$$qrZ%mh\=Y*`5(sM*;D8)mbQ1]NnidEM\lFY%PU;o99C.41r8K:A[aWs1S[P)*6#6g/X:SPuQNncm1nOWgCu))r:H_AA%kmMF<J/XS,*qF#(B0FA6JF@il(BdZin?bG^W)hgt&Jk""QqVdN\$TjJNcjSFVV?_A`nDXaa8BA7"oMs-PVgpqd'PH?Tg`Mn(E<eMf#LijWU<&eekHEFbFlG^I@&I04<Zp?-fI=>\1s4fJ9p?#_2r(<n)p@M'(9*:XTOetP6pmn,*%M08Em/2/uiuRrZj(*6kZW\[D5>FeZ_;Y]DOuM7o3SN"o=*YVP+kc;@;+K-B@`nYWRguJ`bhhq6bD4TE<8pX0W+AF4`R2G^`0A#544Q@A"Z7\MGcQc&R=<REBGaXuaUe<#b/kbdT*D@^bZ*JtnhG0\9Gf]7_0RIR5p)"n9Sn4!VJ'aSJq!R#3T0pO9Sln[<]0,8&5t(20Y"X!0W1;FnGY2jQ"EJdAN9eN#@2rml6V_4(1`q4T:BgW"bkVulE`c*h`RWk;oIGH[C)j4O^-,.X/hK/B$hpp-7?V^U*%O`'dQ.m5$>VkXm!Vp7^VAq%S>H@9+i="+4R=Lor&h&\2g0lLg<=T<3!)gU25I=rCut3G;pY\Et+oGqpZ(2i<V?ApRA%/%TolJWk-kJ/_,>/oGgi+nX%A-.@KlrG`s[?'eVS]7!@aNqBJ6LSRS8XmeAqf+A>h+WMk/3Ef*Z@Bu;P@c0B]e=\]E*0V7$_/Z[<$gQ1EUQL_:6Q+<L9p,q]b>V]^"U\[AWU'.Z;`-Y5cb%]A9VpnYXfHKlTRri%h=-gq4$-alD,ErNR$GpZ4Z))l[<UqXQ]psN'5mJ@JN,!<J>o\HFC_W)F9kdol&a.9s,]VSXBP/j)D+smt9o7H50;GC4MdG`\R_iBrF2+tY+;&eJ?VLm7n_7>"*&o/&mI,H?a)P=1[Xfe@1gc)J:E9<)D5:Y`",<7BmB4"udt'nun\GU@VDKtskej^W;Q/a5Lma_S#rUfZiqK!lPgVgZIMc"PVtDcJ?ZB6'n\lYU[AKaa]PhZU'@uDIfW[SL_7g`8TQs.%lMZXhb==?t,Q)2P<X=K,;ps3lO#<c9s#).4>cq[)o?]d#J!3M&,G"'b-%.AW(c1A-[e7r8inDIK+t]r*eZPc<.[X`1bGKL])g1?uGonY^eo!N>hP-8G]u]c,P:H73$2W@3`YfHos%*iIqoeOmkahaV.B&Cn<kP2,MDBJ>n#3@<Uaqj1X@7TrpXIcDVtSi.CeTrnHUs\<49o&aX^C8TL4jPFiiebb,j8/5/cPbm\l'ZSYGNAsC(C/CE]5H2[k0Cc6Y%Y8?^X;oPN;^So(9%<EG,gI(D4Ip=-;1lr%k)9SOB<fbiaIjLHU-HN?CDM&8ae?m39lG'GlDu$ebl0XHd$T-Yn15^)M#_[!nGdlPqq;(T4&V&h.ET'V5t,:Z_%-`/'*+ef7S&>:,JigC&[I(f?F:p:HL+mJBH6_aOWDbm*IdV3saD/]ebK61\*VN_JDLK8KP$eU'9a_UC0*HKcssP%SihB[:LXT!Y+Hp#^(]VCp;H2Y8!=4QA*D#c;.2-\'t\+j#FcA5JQ5G5Y!>fDQ/$<.1sOq69cp'Y+Z'5#1PdG0+DMK^'FcH)Ek]V68X[C4-o8r`!ath\/_AeBSuO-"A?28nQ9q9ke!qdR7k4cgWMTN<7p]9&c.8.m9tNAnBRNBG[7aesqO*F16@4Ec;=iGIV\WXCcp,]SdLPq'i'l^%^+2=\V--W.%&ZC-ERme(NDq7W@SNKRMSWSX3[MUl:cU/aXRm0B8qJ[(-'Pp=`Ye;p!W4fQ2Y2Vd='Ql5l)%3d$p!IkkVrQRghHJ+:NImK%rQFH97A$lEGGj;-(#W%/lDQ)s$>[U=!+@8de&qB9P6jnB*RD8t@]Q2+Ec[$#19&/>bbX'5GkVPMXE>[!K-+>j(4Mb'NUf'H`t1\P^A?;o:\JU2`jc.pt;9WM19T&TFZ/'kp+/2Ol6nc*DR"t$W*q&NH"1hn]@_hVoboT^[?/=s,+]JI=W-Th'nm.,=F.l2d7'k\nX9aAdm!9H'WD9gXrjFKte55N>%=Ta`OmZ*2^CBl<F=XZAH62m01jp"uNDmT[d3_9"bPH?L(;Hs,h>+hHegQY/LgSeMm;ijXjs(?%h])"e'gH\Dr%m5dj.20]qM7<+m,Jfbqq_`O;EFJEq''YBS:#,d)1@sD&]9emm(78+dXY\1uY+85,N:+R$@5V-pDeT/P:2qkA\($;-ELF2EDP&n()pO=o]T^2i?h8H&0iW/H>>mq/Y"C//TT;MI\$(n-ApjNZB\aB]c$(X;0:h@I:Pb2hB1%'''MLW^d+8+P05e7&7:u''M3Fm,F2_id,YuM>XXom\+)$_lHINC#.:1G8IurH78eu?"nI6l>2q>_&,\2u@ZsSpWDl$X*QafVuAMS0sk-1_;kV'+-TT$WZ`_FSI(W%*Dq.Npq?*`1T:*o2m]"b'_]O<_AO%tpOXX-d#,c=4`*cfB$=&k+onsc[j&"er<4n,3<?3lt@g<Q>'9RW1;b6f5fUF*`d^j'K+V?Fn#6iZmThYhEng,Us@k!lLF3LmZoWF8_g]t51If.UONZ0&ceQZoR'1G^F=-tLH.1\KH>h&g?'.]$g'EKYQ$A]=#oYjfWZaiC%Ga9P^)?qUB73*K7#D"GO%T\0\s(TpFmf-"%A*`LebO$eNBj_>QQs#HMc,F#lY\n=n3cdBXgCLd+i6.7XbO5q+*W6OU%qgTm[_cNaLF)LsfqUTL0F/"=`ji,p<J#%+LDYc<W7(/gk4enKR-9l#;U#:&4l)*?9pKP^hEo`;0c+g//S5f&I.V5gSAY*_qmn(f`1m7I5b<S^b-#Q)1DFbU'V;@"m)@?8]3m"YO%5*.Tb=RfO^Ett5/%p+h=^Zha?ri[!dE,)Q/HLX%kp'&O.et5n4icrDGiN/PC?.>O,=V/EYtE[sIs+/kjVoPO09JA,P+Q^B(0N@j>[!mFPHL1nc?n!QN[/Um2"d;5P2>&jl^<H>ipZp&].&Yo`$IX2+XU2a"='Qunn[*R1odNZ7DG&B4YBeiV^nQ]TKW/:d5Ko\(B'Q&'%B`HbBZb\A1V_nWVR+&2duhAl]CJHqGqBM"neW<g%u;loef`VEP2TgoOSrWPRR6Gc[-h6ABHhYAXU;5pO%BpGLpk\#Pl$*lFO*2@2>kSC&]s\P0pAf9iH0(<2*"(XT_\`5O#@gmga3tO8DCIo87XT`cY8Ycb!]r"\d$sJLO_EpuY.8B8.9H,THcEOYHcgHcF6hY:sid4`c'^4Qo]M]fThiDk>2NJ\HSF8-nfbg/kMj2YkaS>=Yb%@A5Gn9"5Erj!=fI4"?V\jT/:8FCrSo&cHo@K$39@Xr@-KLZ&EW71;2fJM:t6h80+J@aJbNqNC$TE;HVqFhXU*'`*2@'B8r^c4)R:f`/NE/q>S.nM0\Z9GA_=dRZOAbV"QE&"&LtUOjpt*p.30&rB$J)n<mBDG&orIu@^O\1)Pps8.i`qKT*;E6#Suc:qVp=)[sd-=1`lp?`2kdBP:IVN7e]@A5Gn8n6][a'HKFbSV'gamq,e;u.>*)UXd;X8g5%i,ZBG'?qj4*M%1KHLLgI&E>p4S'm\ub]+FQ,r8!o;mJO0eW`7\&PQoXh[C$i'B]0nD\tF0:63.UN;"1*PRMXB`$d5U0]#[CPUqknMoX24+To[2^HsV/Jgn802oKs%&PQo?Hf2CAR$&<h;Z^>,k.M6Z&;JIC1Vt?[,B+fRR7daCG@4#CzL4C]Rz(h+2V,],UYD"W?NN\eC2n>PZJJ"ku@c[>4tZBe!f=8t=<2W`EG4c]3&:4>b;zi3P+0;jnJJlA`fCUtnhP6Dlf`4QLp$ED$#/\[b'ud<+!*E4`Xs3iNW=T*@sqzT9i>3--c:N)7e!)WqU5D``[,)-RU:eSG:QU4N;fF?&u:W"aYNBF$+goG$JerpYSp7CHK#VCSI(/4)"S\)[Y5F9)<:1npC7'a"7[i2(QJcG@C?]c9\qC-sfVsFJu)fgEUZ?<2bGag6=!lIF4@k>W/)=lk-P.TUPd,mI6DAz)!=gl8]lNgOqBb"4e\Ctq_4&J?@D*A[m]"SQ+tu)CKiepg0QVV55]6/PbrcLZ_HL+]b5g>f%,=HWBZ*b<s(0'[n6RGWqn,Uc_opZ"u/mHTeX4#nJmV_(LQ_Z^!@'f4';:i;rUk):\RMpdk7@C@I*S'%O_7\^6X/t'+"X=!!"h9PNF;gS2b5gNO-t/bpTN<Ur&Q7+&;_I^*XN^6+!\2HEC#n=R`HQ'T^qJ[Ubo<>t=>M(cE]=2)&5t3JeL9<;r'aY&A("LZ`Hig2oR)jt]XC?J-Y8H28kfbOi-0m)o!%j5o7`4>3m04M2s?z`q^$=hm<Z]-@>'':.^\V=7T;L1mHp@e]eb1#tqt0]#EIji>X[$]eqKJ]mN^7G,2aO7So5gEJo7HR3T[qPZIip9#Bc'II*::pLp&NpU[J*TPj+XQ@/8A-ia5I!15d=c]kB"#Fdj.CJI%YObgWL$^NcXIsB<jC<W+5Z/kO-&QA&`q+/Pfr0G%t;sGf<lk"K;9fhe99j\@:;,a42"$=!"B,c(n61^?Yp-eT&2dTW2a!NX<jGctcBIF.q@E4]-l"Q!-"onW'!&2FU1F6X#:K>5c@((]oX.*I@CdF>0*d.0s5:6]E\$'.0FFJ@noY]-:EQb>H*nE6UdSInt;tSUJgluK@?[jhCNgD9Nh1+t77IC3A);W`tRM2r7me.,c%PE=u%Thq6aX<W=z=9/-Y8H8_j!!#C%PQ1[`!!!E.;ZZq!!!"\U9F1\!!!'eG0I6]!!!!!d^m"g!!!!!-!E0%"!!!!Q"AB+%!!!#7&25C1z6bnodz$o'51P'3-4L^N`sRPN"=SeJJU>>ZDZeA!obHQ;?+?2YE^T,XY>GJEcR"#]\B`,g\40Zn(o!<<*"J/L-M;kgj@X`e5F("MtJBrRcmrn]=JO+_Q1-lW.b!WW3#^b;#$Qr<,/7<[NL+8>fRXIuQf>]D!LU+'Dsd?_=J2Oj+#&[J[7>5S3*hS.BWb<fjd$LmUlR!u6&PbNC[q9bn-Y&'07APo-2rkt%CKk*H@$l+7mYWg9hmE5-,oYYDsYJ^c3q#T9PAV&^phAd&uL`P+$`&\W*hVQL\2(Kfbcc^t.[34T)>H->@4Ij=@/bEO740X@g++;kDWHn7^%+I(\(B=F8!&/=\oCS%%2k5ku@;G6M(`B_=lhITN::2nIX-0CX-/N>P;3\<XH45QBs-Q;Ua).">SuOu3QF<?QCE&Mm/7I<YT&[*Ti_."]pNb_4#:gm+VPL[\Qa>X;,>Zb^inX:2<c#d?V!UTlm)./X951E(4=`Jlgahn[Ku2R1"^st5H753t2]nGFFiL+%0ejsj/%:KSR9FoO$5P^M-W^]J+$tH?H?SiS?Om,:!!)q[)#]D2EVIY^lR2FF?QEf9AO^]S\$.L6cYBa9f3=6$LSOIR]I#A.3h@=3c\EjVE>#dqWAR"ND7Ug%F.#(Kk*9fC9K-QU_i*-Bq0?n^&u^]rCJoPi,_N&#i*45N*j\pbaZ+:PDU?'>ic_LH>s=C7Z#fO%:rc/a,`sf-:]ET(2:'cun#UU<4P7a(HO'`H%,V3g!!!#CS"FUkd]Sb_W2/F5!DsEXUjC]F](,LiDBJc;`BDp[IBVBd"]D'U?N&?(qNh@#M&a"Wa-rDjN;n,+W(j7-PD?V*BCDBkNdb/1)IAr=-goR.IT&l3j_@eQ'"kBYGp4bIWV9B$R!V!pL-tWu-Mf\)D9P%anTK3.`Ka1^]:PurM;t0)<+AOKpXZhWjYcZ%*eLQ3%GA_!kHP*h!!$D30T(3LU)3]ZVQa.`gi)Nn8;*Q,=-E]&r-$[!H"DgPS'[+W2aXL:Tci-F*F%6q=*<``LN+<C[:^G';F0o>)"pAjdl1-0VOq/ha]DqTe9Z,:UZR]/^>`*f8Z[^0ko6hjasIYioM$HCbaIk'jRar7@lSDQ7llCc\+F>C7p(u;AJ9'T9MQ50?&Ws8EnaV@:d9At3.9\*7^tj'Qe-4hm&_SBVWSNe9hEY`,URb)znB56>:Z'+XGI,oHEgpfTAMqT$'>-I#8i(H)BlD7QfJ%Mr#:BbC^ibD_[55CLRhAHelVGOEnT&3Qq_-g9aBa3iM3bO+g+gq0cG@DBcGj-Er\FtN'!nA$nsi_Z:3KC8ILB3\3R%9';,!ikB.s"#EaX7kqLq?#=8,6M4>gn<)`,srflKW%ki.8DgB4"5?L=Q04XIRkCDJRZ#bSkVduVJm!m8;%kg&B5ZA['+=o\O&!8s3`Gl6\q?;5n&O8%O'ahOi=c()WLmV_Jq2[KHa!!$WQGVg^\GM.OI!GiR4DrAjdV9/LVI/j6I!18T4BM&7)!!!"+#+-#'!!!"L+^dnBzL4C]Rz(]pQ;z?jN,4zJ0@Bj9$I>9!!!#Z(75^7!!!"L+^dnBzL4C]Rz(rFe""98E%!+6uJIkX&R-N~>endstream
395
+ endobj
396
+ 104 0 obj
397
+ << /Contents 160 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.b7a5ac708be9df2b565ab0a3537e1a53 102 0 R /FormXob.e10777c65db8f33c527546567b83dd27 103 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
398
+ /Type /Page >>
399
+ endobj
400
+ 105 0 obj
401
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 612 /Length 57131 /SMask 106 0 R
402
+ /Subtype /Image /Type /XObject /Width 437 >>
403
+ stream
404
+ Gb",kH$g;pqZ$(LG1Ca(XKo!9Gl:l)Y1Mqg,)fT"%RCdpKE754"sFNf\KqdmU7?eN&8o@($A:Z(j@UP"EeM8JLN#Y4&31rSr'&Re>uT3Xh/d*RPJHeh,HoDAeQ(/Ue";)\Wp6VD@Y,^.Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)JfnrG.]@SLEdPS^PgEOP.o6S\U'a^#Vue9KJF<WA<l)HNjfnl`:b/OG<IcPqnd5p25nF/b&;2]u-V4jP+bf!>+:'/>OIQpd5tE/E,RB!`6LmYY"@3S%5nF/b&/ls!-4#3b6LmYY"<k`kGpGBr#_J.)njj;p+bf!>+:*QA#_F0)JflmHYY5T2+bf!>+:(:@aWj(_6r5!d,m]*a6Lm\&Gl7L2cPJ6@4<%bTSNHSh0>Cc+Hl3mIEp_R<?AG8L,4*_tJcrjep7#/ajIi\+N2;!J#_KQ8aNVk5[;+6f&<i3;!+B-IIf7cq;t9=`C"&(`4j*'jM+0?ZLSUcC5r6K[64?dk;`2\jmbRd+YJ6Cs<?he/-=H8s\Ut(qWZ#@'HL%\3VbVC%g@_l*?GjO;)E#[YaP_2k:UjfK!i-D=l-cEOR58KoWh)=uEm0n*@[^A*I<GDYl%OhFV1.*8Hmi)DLu#[ec^H_lDV_mte&H.QW^.0!?G0O?:)sTY/28k6%YmDMNVD=[?T]er2YP05Ih^@:^OCUYU.#uGr:\l`.D?8q,``(*X9>Zp_4Y)\Yu&O%)fNADAB5<M_6:WQ3jVMJ1.CgD&KPfF\5@=sOsNa4FGoh9bKHA;H*Wg7HM-P/dYj!?9)Y47plr?Pk+tL2mjp4<-8",'6]2qm-lA^qN`*L2q.\4gg1gbTan*noH*VkH1KBE<GU>i_N\js^P\Q8:[\YtkUbtQ_PW3HSOt>$"Q_GfWbfrh=[R<+"QKZ92>kc&<=a!ll;:5*=!d?hO21:G>Omg>Y(?K-T7U)+@ZpZ9Qjq\l,U[ubLfl>)5LTQ,8NJOlOQ2]6]l-cDn.p(<&=-%WN_<('nhmV;,ZY.Um==dGeQZ)Q^eSlj\l0o=LP*3aN+Ok?`i@^"Q4E04Ds8MtB)WUulf:9p#^\nAA]lresPq,ogHNKs38<Fa?\X3RkiGb$^3=lu('of.VEmpgpG1IFd]pd/Jr^L@WariV_Y!3'bQlLgnqNKI]-e+AW:5a/Z/L!$'T\.Gc4=\m!?uoS<m#n!?\NCYiV@Borp-i'sZh+T-O:c,^&5u`k1($.dA^lU\]HA_.XVJGXmVLr#7!>G]3VEq(79SV+Sb:L)@oQ-*:6D5U?aoOG,J\B-FmITs2/38"*oDD?h303^,+s[sLOToWn(G$;/35jSHgot0iZTCknA0ed(Gn#)Y[KnW(+jd"f3Wg+:S0iIZU![%VG6C2[r3XF/mZ'@Cpok(*)S5ZG_jqiAGuAtK.MNHh05DOGNQn`^A2C4k042=$/Et:CY-)+395fDFn0(mW)<Hcm6g$H\[f%Yc-kr!3csTMe#0$GQ_0nbC"&pc'..B&)),Fu.Z'qmLHlgK?CNllhXKLA;5I#C7ZJI6kg6$=IM.*,13mD*_XlRs`]>2M5n$b=*,\Q4;=m.nD[IJ`ERkCq.H45GWnSc08_i]A779P_-)[uB,-:;PWX$MV*TT"Xg!/'__\'11:Wufh9D:EDe"udOQ*TJ6DKr$.9Fs>XF=@qhpVP^EEQU:4*)otJL_b0tMb=\RV6Ftb>M,"Q>`b5,_]to)np0@m"hS*&)36RRlp^_a0bH$P]oX+593RYZ9T-2m;)kq84U4_lI[1FCd(>W)Bed#_DO]<^<i,V42!1-3IY"rCfaFN4_IIE<\huSiABS6,6%]B43,q89GPh+$c'gL'O+N=(,&71d&_"Dcem%b/cPI6[eiJ!@a?t2$F6Ci&&@(kh7qg(mn%Hd97R]c14/sW%RWS&W_6:TL9$FhXc'hI"Bb:n&<6T#oe##j#+$VAY)_ZeSbEckFJ;/77g>V->*ed7uA&f(_2[^FtTKrAn$j@r?8(RhH767K*KA.>b$'>JZ):sOIDKeY;-Fo^HI<r&I3cE&`QV2KaC8LY;SJ()u+.pkY4P!Gh>Y=,B38ntjbN!A,mR2>"C*Lfq.%?fr)cY-0\WSb3SZ.B,Z4!V1]Mb[YJ]EmV4$/eKf#I(DOI2.L<h2X+#PGSD<7p6QZUMg1EM$--;jh.;=hK!a3%u!Co[?TCJ,QdBk+-_Q6+G/QbaC8bET>%iIQ%;1m/Ht\R1BVmle??mD:l'9h[9HtIHr(-=0=r&VG<[3as0e&kqFs&?G1Z`SocX2FPXNN#`&5$9qOV_G4""P/"f+AaH.Q0r9seM$MB0M#[oZ1%"WZC`l;bJO-W(bVb\fH/g6*c@EZf;Mj:ojb",j+<&-Chjeg1qARJ\ZTc/J3LU5%S(!rpg/<`T5B2t`g6I%sJ>3R,J"lk>-P;Dm5^HV'DC<=uc)2Y]kQ+gq%kBO[.ngH_$ad^B3=QdZ,,]Oj4G'8`7DoOO5@bqhM<\,X:d$?J#c62!)(/<9eI6]?bH*.Z"5-/HQgV%rXc^m9g\Zf8>Hq;T?]mEtlCagjXRr?"Ih1OaFA7Ej7W`;EO\3ktcfj%CD1hd"=/MAbq`/#!h2U!?_8hioMB$D5PU_EEV2_-f^@KW(M>+pEDqViC#B[HkdZ>--un7fRZV;[kVHqrR-5KCR"ob1E>l-\Rg``(U"7sDkD.hYg;MRFfaApk+@Xn0IO?1R/XclC@E"c4Xjq6!I=\Sg+FC>A;lG,?a81%[TNZT1c)=[fk=nQ,B1E47"[2MVQ2oMF^?M<3.S9\h95;:0C>/KVqfdF026[hgL&Qo->&)?e2RTFE"gD;)@r?SW1,6L.+$*6J3Id%SA!P:+=I*"I`fSqRlco`R"K(eDM2)`DLLb5n2:n(tas@?^*5[n!q8s6@[f,OdB!6&V/WQn\]3>c`&#6hJ<&a;,Q'$@GJP4/?]=Sio5_o\dia9CKXq^<L7oYL'[m=,eT\]Qs+%KES5V8kM]L9T6Ih\deD!q9R,?3]`_1*(n8.5`LgQ+JS>^^HZWGDUbW4d\TUi.HAo7Z9Ng9q"44N]q40)CPLF;:?flqV@11n)CZWJU[g8)AhLOHP?fc%MJM0>*kA`q3dF[3P'1B'SuIV!i7a)O.WooWa1.XMI:_2NH6im#NR(R*+2LNLl>P29C8-/C),Ur-NZL?@LDQ#X\Vjnu*4(YG46G\fIe_lWbgNt=?VN2kGMdg]hWuSc:7XG((+iuUA7fF?XLJ?:)4<^=rhW8SfNngq"<$LIO.AF\pA+=CZ"rOJSY(?()7Lh1ro/hh:7O9e2@D2d(1+@M8OTsX8P/*jS\(aQH1GKC]'IqL$\'#I$f1gP`ubodM`#G'WYKkH^ib>!MI<(0+d.(!5`J4AH03>=n1@cE>f.j\Q4tk*:C,986&(;un)uDJV'V3!!6X?<<s=IqL`/2:*[9S='n^96@sR](\CMF.n15M94F0"dnSlCK)0b*[MtH\*V08iVUcMGcjmfq/e`&V[?.Vc455&(+CYW!pB.D[<B31"(mhKV5PfN%:9B"9h<-GoE4Dro_Dhlr?q4>QLC=]I()]K1bN<c[a(!)D;K`6<9?hiQ3&)^]t9]5BUn)Cq`%j&sLkSVYpY!N-"b'I^Y*/_%Y@,*.EKe%t#i@1I1@dhb7iPWW5kh3<*Y$JYad><^:@a.E(*f\M`]AOdjA\hYBj?ID/.#l/2>'\F+gr39o<l#&EL>scGM3eAu,;Rb*fTmk8b,MWa)#A/EduN*c7!dS;kK"ZcMfrTU2!^T=S[P9Kg"pBhO3Ym@a.IT:;mU!="+*-kh_f]Ej]=N?LGt_-3j?Zo9XQMTek[RXdN9dElgDLdXVXb%Zm'%5%iLa$_Vp'H#+pZT[VabG5/IkgET>(7Rr.i`eQ]IuahgO.!*Kt>iSY9Acp]Dl(G=3nai9;Zfr.Q"*Y2P=6^ouNGc.tUN'i=.iC1P!6O55lWWS4q)[RlcR)";t!#6M.@";??1mrL/04)<dj,ZFeG5/3G_\[S"V<'T$gpo6/"j:uJaH;p,!qAZ(Nf/a1+jS:p/kt!EfC-W<&X-ECHl^l"iE6HhHe`cXH1Yo'9,MP#YfAnqg-ctkS)_/PWNjF-EIhV*Z8dppH+>uk>$D/_@H$W_hN68eEL=648ns*7X80hkKq"%g`7[3<m!ad+./$^`4`7+g>nCnHOB]/0l.)h9!"/PD-_DN)k3[M7E_`/d-$H(.Q@oL^dmJ`Pf<;BMd/qH5%`lRHoVu$XHA:!b.L%iu6\,FN)PC?L[oTV7E'"YO_lja.4P>f;knX!mqsRA_SeA:aWl4Y'3HIZk)tJbLnGjGuZ`&GY^%N@:^TN+1+uW]A_8``%H@f>j7K]1OiPUG/PnB:M:4+c0]IY2*j2[5$Pn>&0:_TKa&k"a8.AX^B,TNiPh7I<2AO.T0"oi>KXk0^].us7Nj,H"U!pM5.M/=E0oB+:J<oe8efWjQ@*Aub++>5\iIVd&b*P!3<qV8W&V5FhWY&WLA4=0n^<1E8A"]hg5/ZKdq:`c=J_h:L9eO)Oe6h6b;**`s1X,SWj+J!Ybj"Ca.Kh^"UijWg])TdU),9R9/!%9,b">O1hT,BV-+@HX`e_n8rR:Y'WAUM-tZ-m>AB?hJopCL`LU+,reV+[8[m3YPrYf8ieJA>3EXR"E;pTY,H!o`FmV$dui`O9s%rM,E;iWjr/l)4"`V<@j>QX>W&(u\%AJLsp`0g7d-*%EsjkYU.,M%ElIP^V2g@B@dg_hJWuX\i)D0>.>aqpLoX=hAkEE"+TZ1O58Vo(%s,OudaNe>Q4h52KVLONb`l#bj.aTDB=j![VBL.W^M[HnmfUBT)XR6ep<1Gp5=nlk%u84SAIc@3]fFd#!Oq:E)0+e8cEW<ijr[B?uDJ-hmqo&3[;Wn[$P*P;YP_/B%(E:dQl@7m<"fY0YaNC2jd[aH7]D9<j5-]32Hf4B:7-?WHVG-Vp<bXnehgRrD)pLRMNg\>I=h+s.aCgS$t>keDR_q<+B"*q1bY@$r,="58R0=o(+!1,:W1Sis],k>(_h>$@A,Uc1D$c!WlJK)2c0Yq>;#/QTS*3H3o,W!;b!N4PUSA)\aN:tK$eHLV*rJAoLH8IsUgG;%`HSe=6Do]aiX0"jI#W`<ij\om!=_C63qnBdjr9][DB8Bc;:3bU^a'JD>.d!Sk<BK30gf3a"ZINSr`Ekm2+-:aIknjj=C!CpqJPURq$L1"*OhS$C:hql(qH_q5-]6DlN>78[ia#:i%K<M+##SNqiD%TOK&Wb9V30n$I#W=Q(>qhB2jN3VCIJ4`u)$j<u[V`uGPEV3,B=_Wq&hsU2;.A!`H@!/)!I/UrGOOZOLK*hV8N+<pn$Rpi+e[s&,'K7Z+T&D>i5('D$ZtO<9;f;<Bo9efOoL4L,GZ\%$:mnuJq8[k$7#C3)R+"oKF(2e7O02ARl5,P-9QssMLE3pXS!KSq=<Y2k\)^6eu`.4%FiQG_UXVb2o;VKeGQ1o%4K?GUIUe4Dr.-Q"0PB,(G=3nT%L=r11n`InMF`b@X,d8Ho@LH=FlSZ7ija8N9s&i4`faZ^'cTM5(39H=mOM4Mg-AM7JL,`^o@i_+qRjI2r\^54XP>hhRrZB0>;s4?DM*2rr&s&[1]Zt^*,FWO?=-Y#7n#Ui@sO5B\'9<r;#s[Lr\+RH]:29r,AUTO<I!06P)QD!S<P;-%m=saa3[Iang5RnlSnKY@D'PiEjCA>J#&q6:(`9;M[%!H.]?0>b)EuM]O=#b@mOk*($7`p"*Q+>4Psc/mT)/7DXQZ$i&=7g"G%f_kY1[R5]%*DdLf3,PFI>',)%QgCS+q[+T9O\ohN.-i@:o'L[!>q!gn6CGg"b31BpIKoh1/O6tZ/gTkB`&FQoDO?=//#itFNn%XW%l"?JO.(sBG._[_JKLOAZ#i4h#[B"OCbEaaQ!@Hk/:H_JU9gc#,9@(`%d?G"d%I/N(hGA_Rj'N'Or[qE`N7@sog:;9;Y3Ks9-V^$TS^n!BXnXJV_hJUhrt^JAT(oqd^'eN4q.+#HLr,0%AS#HC'-')WD!fra2)Rm@OURD/^Y!.dUB8*I@.2scljI]s=G,a!"Xd55.9tQdHEOr@jJ*.8-QA>PG'T9&6'QfUNu^H6*57NeP#bR#hiaS&c:1amab?(X3=oXGIaA<Q'T]RaIs@@?#D8+Iri(%Fi]sqde&Hbb0Wn0,?C>tRgU9gmo7[)o?bTckG"\/S77b^&_OZ=ob'$'\e'c[_,,"Yh`3VFh&,9QBO(*_b*("Y\V[4S;N8VB-n:rkW;&JiF-_I31Um1hWbhVb;R=p.POXTt>,PpAS+2gs]CY#RIFm@INRl2u+$202h-YeZ.!qA?c-jes'+5oP2`F4`cAFeg'@KJN6cl)FHaWTDqXL[MkRH(PY]m>KLV5H4toOuLIeu>XJCtHXa(GuY_OBIAeF&7AanOIi"ia2D5W%-CLpiWoUcP@O2.6))(b*C`g7*t>E(jN];i-"WF5;5\[=D%-V+?I*"0HG^"f7Cn=L!-6scAG'hK\*VZM=T?-qE6M/DRsY4P=lJ+8iu,5rVIBa?9DEm%NbV'cSKe5>l9M11cmd'F3*LgRh9$<<e6UYf##u`Rkn[eP`7&CLP\nc73=L.@-5\$Z*CR]dF!b_S#Nc3gU:J(INq@CKH?#gAe:\s+$Z@[3ILVk'e<<UcO168W)9=7b&QI]_=M3Li&tu5\8e_Q$GpS1$/i4,fC3qppYmaBi4<#.g5Q)[qXj#3GJ"i=[@9*nNgf!iYJ:'_c'gLd>(.16UUGeLR5Sn#P*Ps7ldD'=2T]YHUYMJ%BA'$E`RuVB?1OqA0(#+YPtfQ>50d`G:H3!W\F,md3^PU>.RB:"+B*5\c7?]:\pF$a@::>VpVMUlqRO'*oCF,.f`LqM5N0hS1M;^f3?ff6Y.F2Q:Hoj_H5&ENCY,^_Q/0&r,MG;(m$MBB!B=SXU<fDo.m5=lMo0hGj2[5P+lAA4S7]2WioGtV6#kN8_hW5[1smqmD29H\mG#*';ZJ\q+fA)+_IXDl6(U'\CfBh\$-U3CJ]arb*pkt7D,F;8I-mHi+NiifZ!4'@p%?P=8eihpAL]nnAO`5HHIg)uqJ!tUJfr2;-'cO+!k='OW[Njtc=*k(O3[Q9PUVJ'f_d>$4S"4%.'+a$U5VuZH+`Qe)A-=`fPc[_m$oEG/WZu=1"$t!bAL[W[Qdd]*r3ZW,``'oggIYR;/('PdQOa_'UqUTbG-h^\(b1f`r*@GAWu,Z"]["]-4&Uc6BF^^N4#8JkZ[Pk+Ns1X>+3R.cs*Wr>YSK["@87RV;--oaJ7o$eF)8K4jCC?-t/9[$>XmRq;SuX1pD`XLf/gg&gRa7OQ*H+P+3-f5tE/E,RB!`6LmYY"@3S%5nF/b&/ls!-4#3b;P*!TW5,[m6!qtM";)PEG?B)DB+%dQoPojH-O>;04!gAZ,+,]jP<9H\;5Pb04IXS3?B?%;ER3#WbkG5(RusXsK'dYEXmrBNHt=\C&slbZS3AlAS2J0K+thE>I"A5,BPD:*I]+(q2)/NaV$K`d=Qd/Nc=AMC)-cL2Cnm`l=iqmVb(SlZZCLX,N8,UX)&t`fp!"^2TpQ;V"@3U5ilc/s7e5bB;:e3!"ab+Q6gQ#EHXtT^8&_:c32[P<9!h&IV\Upp)(O*o(DRp2SClne<2a8,^,gUOUt)o_^bs`H;CcCF.Tp4YSJkRoP847k<5&fSEpQ[g+ha#/+:,hcI$lSA801RZXd.DDAqV/[nu-f,DPpIUa!m_)#1kBe!&^1b/nGRb6M3bqG)p-]YS..:r[ILXHVA#Z2j-\>mL3<i/&AqZ1Y8aPMED6.[N"ClL=*T0/5KElGGHg6:0?pf'[/.]SiN4m$%aT*Pl?>J`j:AgW0t!j0lsT_3DO9q<!$or4M"J&nR!?j]Xnd,\7Fg`])??\]uV><,=1+pKOMSbUY3LAC*q4A/nUnOO=%JL%?d=X/W\%BP[**Ja#_<e5nH4Wo!N'<B+&q*Oj_-FPa`9RF;1:g,L.K>S=aA.&YZQL.U'dQe9.ncWq<X5c.j"ONE"p3^uUX>_rp/.GpE[4-\<M&7^Ie!,C&5$n=3$bHt$@@8rE1)WDZurEL`/6F<YLKAA-WuA+L_?Xs9LX`hb(jdfe%kR.%9"=O_q=c<st@EKWhD+M:RC5=-V$Jfk>N+A)udK*4IO;Fhi8JfpkN4;%c_"9jreJfk=J,``'o&5l%?$%a9*Jfk>N+:(:9"j7$7Gf#e2d1[739+1%]GCGn?S@cs%fcX(&:NPSiF"\[^Ns%an@Nnrk3W`mXr\0SUecLqKWNoVkQm"I9L`7@QP/X?R.cms@CS2LjlsS-g$r3W#L#e@=DKNC!GqL7tYVo@<C*h?0L:f)3Z2g1-],FDM#n2G<g&XP28.[^@#*Mt;.$Vb_J1Tegk?P+6D3)Z)$QSJ;PPdM![)UA`CaTXa/<()/oq8-S"qUo'"H`[H\qhi%.]N]Q;n93UX!M2YfM:X#=irk3/lT,o=_;Q=6YV,pDEdu3%i!U2;cclBc;pgCAom_tWNG29S5R@>i"m]hYBEZPX^ht#Nm=rbf*/Q<h$kkZ'KHg0;*OLo=mF-V8l@:&<dV!:#@#a(6OAZ61t/l1YodO+)=Re51dkO-2rt6J,=rp_K(-]\Z7OB]FX:U#;JcN0MR&J<'29j7p&I>"E`:meZeL0\9p_)Ji\JB_O9s#X6/:Z@GF.NWb.C=!)H&>oZM9+/>"L'%hTM)A*$rma;H]eKJ4tOuaWj+,kQE#h\s.YjO'^"-F]C32;-@$tnMnFu&0Aq<6/:Z,6QVNcQ^(6lCjYeX(0^cB3S#*]GDG#6.]$TW"@3Sb-Q)D&$qHQS>e<-a5KYIuYtN+D\JlVpfYd_t+[HYu1-q&CiY%5tPZ*s=1!\^HCBW2jdt0^qP(I7s+?Tsr4;L!^/T\Jc=#5$GiS8m+c$8m"W3LMdBSJ^:"*lH=c4%s67HL1aJfqpc^[`5GS-l%W3BiD_F<9RjXXH2oDU4PD]'g?pAgBjPO.RUId7F@eqG`iO2UFctO:jslU1EiI`h(?qGh.i3D3Bm!-]^lTSSP1=1B3O;,,]*a"o?$++NbS<P=L_$(B(m,C,Fh1ArGf8\QPX?1NSHWNtYE2ebNRJFne5Qlk!Tb:N_B)Z=C:_Wf2m7"@qtLKM9<[i$5=CWK%$Okn^="8`C`4,qi48m\MD5;^s:(qCaZVZQf%.W@0,GVNrNGPJc73jH1R&'$TH7R>\u5T2h,F)?\Z$UIhlMUH1q2EQm(^.ALA^jA@@j9gN$gf4L"A'!jk0[GiqpW82=5!%NE]cB/5)foEDjN@O;m=F_DiQt,Rri?#eM7XV2-m5l[YNbi,g-CH<3RIeCZ9CbUb2[tr.g)36",XV"mF99FZOqZ7\*,?[XcE[,TnPP/`kssbQQ>Tr9/rrVh/QC(GbN_o+oao#$77eO,,5d[/caBQa`cLK.qomi5:U[OL="]Ps@+jaGKCip%T!R<"_6/7Ymd^@C0\L&FmcmS&Du#Vuf^1gOP:uGK>1PQB/:]",";-)T<utZ(,L[iZ/A2]T*aT`!A@JIJVAX]@ZF3/RA'O)a3He#cn\`&kO)p8GC/k=P@sKo4YZi/oHY.pW-8i9ZH+_IT8+K1^i?p2I=NnH9QS^-u;nCLEBccnH*Y"2'9J>J+Xd-%Jr44@hL8>hj=Hl>;7$UeISG6f2)IHS0+F,5gnji1qY$"g0S"`VSRtqigXF+Y>ZouDlXMoIPC[dCQ4A(ZWFs8H.>ERWN%""[%n:pVQ3%%#'/7cWo9pB6Z_pXMPAb)5$g_Nm].@M&m>rge5X)2d+\pfaf'WJcL,``(*mKi*n*]>med[==$ATnZ]:/D!s2Yi+(fd7[oUL;dE=SG(L#]"g.>[o(.;1Tr<cF($I0Hd:/Om;pB.4RA5K+69a.,DC0QhP_uq"ihccSG*Z=sVN7QX]k1'ZhRc&-P91"@3SeH(rg"AdEu2aql=a"@3Ss80/(h+G'[:.7"Mu'Ttt<+:'DANs%`[5t7A@YsMEs4\Pa"3B&0h59AS'm`pRul7Nk'eTIQ'JmRd^8Zl3\>l+t<?l2T[6kDaHVR4!%2YeNn$;[279_fseoj%m1ZUr&nllM?=.N`OeAh2UsB79Cr:aD))623`[aeLW7UAGU6kJ)mPGtOBLH>On=-6HkUj^71PGfH@0]+^[U@t?E8\'+U.bJYf!=eZR7T,^=(D;Sp1O0"mdm)k*79HJtem:W%AEaREs2Yg#_XumY-SR3BehfQIp;2gBmlY\052'WBYO:e(m7(+4r;pChQVjT>A;(s*Z>k*oKMT+;:M4:`pJr$s".^MgYQHEe<C4ofi>uO>!O2NOs1Kq"3-C@TPd\tW%\:%jcH":UrN]D-$PR5R)7B=m4Ous@Fq'-_sb3%tt.i0&ESWR1l0fHG"0Fs4[%WE_DrRB^W;:6ZsXu0,>S8tO+=>OU"5oQ)W46J4PPt.G&.FEMaE]*q:aWj*95>!Phb!`P<H+j-B8$Qh6Z)u7d>t$N*U+d1IJCh6MU&r@rkPX62"?+qn>KYHqGYDnMOZRd4Ho=MoH1]1A9ejSe7.Nk[jc:%sUCo[i;W`47pb.[LLhe#g`G!hJ1!W1nEgCd<Yuu8IijAZ``_o:s8.\1.@C$tD>2qQPf9akl$WfbA]-lB,FH5Vuf#a)Y:MhSB)F[Y\$2Gs0Rc'WY4Rl)Snl/XnUu7[aDH^#sbS=&tr#OG-VWh^[MTRd3Y&._j5dB_(]n-[5]0*Z:&QejlrKBb'g$-e6c1e7Kj4*8VP#GH6N,obSlC&lPZ9Tl3>\hArZRuhY+$>:-$biI"?'s3tUPIREm`%B!/oo;,>p1]OQ5&Lc!o%@5Zuh@=K6-hQKH=cW;b2j_>Y-9'inWQNY_OV3.'7#W_QQq/K\pGiI/!"+_SA/DARpUEr,?(^As3"8nc<mio@2=>-m(J.);%:nUMYl6Lba]qpmElmg!uuCDMpK&,aY.`>-$._TJ@J5,%'/.m*Bepb<eYH4SAA(bU5rCS-C(DA/P2(($r?=][h&RMBF/mD+Boe9LlBY#GO_<U:_`$F1!HnPt_+H(M(HeW`Uh#eW,okQeZHTb.gPL`d(2BBp_]#Xq&Q`#gbR/qOiH`ap@dEVE'-uRdh-L]gp?4EdWFJp-6FZHBu(jZoDDVc=J"-:q8pQ4:UR)cR3D?#g";W&:3#,#%4B#_B81)RtB\@qbm$6R_-B"B/99?aj[JcZ?uq0+G,BHm'&B2j[3575A;iL\i)]].<EX24lmVD+/X313bE:BWNK0,!dXFZLEHjHG^.;iVG0k?]kA[&GtM2`>W?ZmW!I;FpR&WZj\_M.+VZI@"Q;:cH.:!$G4^KdG,^7%F]rqO]1ZB2LE`h[15(s=H(O#h>'Z@q@g'mu5nJJi$*Mf=Y3!L-f7?*(-JkM\Ig&CplnqR14_=ElM#cYe=\1'^^$>#Of7p6]QmdbHLTC<;O]93:0hLiHcH?%0bH0aX4GA@D*hCS1-Ut.ReWq&aAsg1#',&X:0YKdOL@l^G;S^'udg`eK1V4EL%cOQ5oA;CqaH'=b/(;@-pQh^I4\bJR%OLg,`QMhMGBm.O,\.^E2(!#5kabG^ih0,3oZE6qV7Y!qXQ/"sQ#Ze>Ji.,\U?eX)2Z1//&gg^j(3'>U@=!S(%I6@m7+_d%4:9sV]"\Iaj\`VMJ`jZZb.%MX\\gFjWf!WFKZ?$%7d7*;ClO\dd*-,CfB&ujkZ2=k',mf4VJu1+^CgUtMp'oC1!,/IHDCCtl9c+N3CYZ_JqI$mT4Mfs>"Zf8pS`*#SOt*Mgo-1-g6sqTrJ@mQHKRQE.Z-9TbW7B";h.=)dVkAg3I-L&1RC+SH@n56FQneVpJN)b+NbWaH'HNAVYEg`b+n/?W["K*Arn]An!#'ZPnb1_3\J\+L"`E_RUSeidsoUj!Y]k/VjHL`<Zco9Jj?=0>\iHk\u]E!W>gE3irqW0au=TfITn'.W84e?)s$5aS'$[A'&b_U9/LCeKC%r`dVJFJV*5#JP_cUgO0YZF5^>IA:A3n@4Mj%XV28_g\E:lW\6tQ!QT@bCdsW6YB4mB6bhqU[&-Pi3r0>=\GKkC)4pZCu8'R:V0(h:X>Am/+-;S",*n!t<NV%53I`"9*>q4hP2f/IbH+7-2O[j,3H2cPRN9WbA7/.$RcaD3NjpEKh-mh@o8j9ILlWHg.?fse&ghBGp*V[X=%ENOc=+!6`<iO_%aCAcTFjLQ`OeaqYhs_TlJd<;=);$0-o^/5bgZuWrbqO((T;I_\=aF^^[>459D:W^/*(eSbM3VT\Wh.gnY;TmVhV\/@"@3S%5nF/b&>`.$pKS@76'MmN*XRE@Ul[\O"@3.oP#HrT#Uq$["@3S%5nF/b&-S\XJn9NV#Uq$["@3Ss80/(h+G'[:.7"Mu'Ttt<+:'DANs%sU1/,MI@AZ8EHS"ROS6*$F2fl7+IrsA3f9ab"WL8\T[C#N3p`ch[G2;0<r'9(+F#Z'4g7h?uBD5Mr]r8`/Aoh7>#YVNV9tN<pag%Ppb>[NT><'r44K1[/>""fb$A,c*EN[]a:/7co=4%6[4Q^%,^_X4eLW[oLkK:A#R^kIZ_=TuKB<lkm@S_8Kf/FLb0:\_nO+92QZK\V;h!;+*5B2-Mmd"A-.EX[;SAJP>U)`/t.ae36(bZA:KJG9fGi88#-'+d,kpA$CMFhm7i3'.b%Kg&I7.d@`o&t,&RHUWEUn5;91!0c;@[>K$B%^5Clh6bg)oB9<U([$rnsq9c\a/Un>dB&\at4m"6pR\;&J:S(*3F$j<dAY`T+I<gm\87'l^[r[Ulol]&5S5T%(_V08^:T/TgD?cC>m=:N<f%qWQ]]VLmjQR@[!_T?I-$gEE0pCr&hV[odj'tg"i%R3[pDeW94oCf\0FHLUrMrl&r=RLi\\'Z'&@Ifd]Oia+eQ:H8.NE>P4e2(R!g[Hu13Qbu)pn:s'Y$O$l73h@:SWf;#Hf)hKK!cW_r:Z!ZTaP_QX^eA]qidR>?[//AcXnO4LeZP6i)Rq:'?KdWl*-*6r?_7?/"99VeiFBpVF<j&e#3)e['To';cQl[3`^$H`l"g8YRT;^Ql>VTfPbmO$Wr2,&+P]5WF7$!,TZ\-7s*i028_)6GVPjkfbk]4N$,1XA(SQ/J#MhcPCQrKtNl#'Vp6QTO$31J<Ul-;VKCP"$O\]a$m2`]'(SVsElm!OMRLmZ3/HXmo@@mdc8=EmbT'^1h2o3UGn&8fb)R28"1GpM0"VAb&c?.`Tk9b?D`g@%t-S%7<lT;=I<Ym6eSr'G4u<??(gg/OIVUd#6\!mXe'Q*SpU68sYi-r`Q-_d-`p^pMn6ie"j%f6N5DBQ.bnpF;)D<_tk_N9!iYTj=c<2f\"<aWhrk%U+N4r?07Xk'>0pfOHJdP1`^4B.3:[I?[5;Rk)dIr%&]?Dq$_WMWa!*pBVqb9!h2CC08/>O#Md?m8-Y+?1P9DLmnVCE(>aKEifVA4S![7@Nk#q[)U@rgXeG<A-b\j=<?!>58im6e#eUq(qX[">p1;^gE)VY.r_;oS7,rtQ;B'5Me7=\/r%<:k-q4I4nj]qS080Q:g4hIoMP9K4M,^+W%CttbG4jBBf&j(4-qq:p+DDXS&YS=Z[@/g\MgMp4887:>aroH`\H&gb?nR7TKKN$%<jC[nq4TI=r7S+o%[1bF8;#Oa(6NWqEW@p*a,r>!SFFKWRZ'4bnO^AU]'VL&^XO@O7ngXe/X<-RZB.%7tIs@-m#=AIUo3liuZ1oiArE)0,SU\%HnJ*Z3eVti=DCIGg]m!-Uhn&GGC2E0pG2U0D-1V.*//l[VA"[JN`90`1Y2HloPdibu^%LUMNI6*sTWdSlg,$J^'2aj^&O9CI!?7:&CWFa-StK+7'o!],!f%i12W$&&IA<ESlBZcc.1ESXAZ_0Q2:P)rI%\9&rjAm>2fWH_^HGi^diiMJ(s[EQR:h\7*2iH1\&)Cc&bFYWFp$g%W\KroRD82'^[Tp7:tQ#0A)ec7!2[.M=Zo,`b>r7dX4=,BJ+!VnP$=+:-t=_I-%a%E9UuK$[1niG;4]?K\hLB%\A#%18C-JfpkN4;*+;);X[#rN+qNXe<<:AS`FY15sqRFTY?3k(2sDK&Aq8HILoX4R-M^07@u=c>.nPGmkOQa."-"j\[reGj.TdkRSr"!CQF&dpr%7oVN:i8ZiZB&_=HkLN?^[IbJ"K5!rc3.Hfo4>FNHKSj<6fA<#C7";q\XG]S6^)ksF9KDVDSp[I_\;:14<m_R7>Z]r'u^Mn0'7/*2cfDVOPcfF/Y_+q!07[lX2aUUM;*p8RtEf]tW;iRaurcksC*j_M\H-A7af,R]nfXk?V_u]e)8^,Zj5a"(:B%llZ7;+?hk0?PNEsm\V(XH;n<eR@Ec0K=j@>,*P0/GCY/!%]b"G6+R\NE>`/6+f38GTVh/s#i>""UlGh::Pd4BAai4?mOg8g9Tlh5'&ii#h27jW^krK3Vn8FXo?W+6J5#V=jt92IEu?Vf?g&O/\CL-g4]p':0EFh?'j\)c=RP73!MjLQ]etT6@(YpVG.R_-h/=#]'2&(9r\:(A;6,?Ajn?(N9'T]_'7Ai4>)K^BB/X&%OgnRA0Mg,c]U/1og^bqKBh$iU\uH/9g<Y4S%aUpm9Cn+hHT8'd(\X>("b:aXlNp<H@>\lg&TMF(t@H,Q%12;4CCXe6X7MO-*Jth?$Oc>[Ka;"d!An?4E6/Wa_j^+?ngH]7m8NC?B$XbcRQSID)<3Wd>d4D120n*9op6lpkVjKN_UQ_f59NH0Yn]#O@gb8NSeeq(I:Fo^Ta?#X`lZHSq6@"?#`uRr_8.\OKr!cebG/C!l#b)9JWl9=jHU3Nne&/EQa#ieQ1/+Wg&S-rOeVjcR</\A5)qdrTglobP&,&STc4;\Qdd;Z02M/Q;>\r?8gde1YTPeudB^\WT^mVEN;=#ks*Od0\))5KsF"Gc^bX:p7"-/2+a@P"3Ab]M7/EA_LAe@XlAbaALY3i-X4R;$*j^)FU@5!p7s@/%?WuUb>^F'6V8`Vh+55:G<J34jip[ke(J&H1Vd[ccE]M;[i>S)c$Ma:-\/l-b\*Oo+\hOTjO2AAE:L9<YMa+_TOT`D&W?Wo_=oI\DapujO&53*=mEPrCktB.Ld$W@pQs:UDt"+et17(j&A@-dKBO2;%7I&,@/YID'nSZ((N!^9Y;]eQ[[@XTB[YmJo#<`O!9IHR=aenXuur6K;%@,MXouuQf'7X:qmMcDB)7sO8]C9Y%L=^O#57kht!]VWB?;=Uo(uYJuA6,#`XVB:'l>*(Yk6!!QZJr=$+>0YG\r%VXet;+8L4,>Iq[In'P>O*Yd`,mWDZY^Othb61T9L;aPaD-M7#:CPK<o1&!rJ2QKo)e@@C?%J"68TB&jkE`gS?8BjO"K:gRj?366Zcac,"Y.V;-)YKSuiBRt8dBj2YHKFbdWjD9-Y)an[cQs]^m@'/\JJ!Q:8h?%_:Xfgq2kif$oV.5^,#/.+>on.[OR(Z).L7+YqBV-il$q4gdk,H@2`TG=K-661EN5[oBQ*Gi^O:K]nR0G5GnJJU4g&+<I9&g15]Zf[r?W#.J!=1ZMj6TCl]U;XT<7pnE+bJs<**O?K^agmrj=oSk92MPLs!*2F8IAH>]k<RWkK!,1b"&#O7&^,)N"/7O2W.BXgJh$#=T]YMpU6@c0n/pQ#QJo_nqC_$-Z@B&B%:t.ZYq:QYpt;*XUh<KEmbH/'/FC,``(Jdil0<;BJ:\+ZUj)EXqOIVs,"L%*9_[&-P91"@3S%6"lp!R32c%$HZcp=g`!Ep[6iZJ,Ji9;lB'9Z")q?RCF(/q9C.pKnY4nc^t*ms8Fs'o]VJd:PQKY"E?4q3q@Olo]\/EcC@+Krka?s(GB*J!aO.Sqmge2p@$n2S"$J9/#Ao3^j!CtM1^LRTf?3=@E4BKX&lKrR$a84Sj%#F1u+!fVbSDO:I"f"m+ASp?@-PQd%O92^BtGCh'<7m8ml\nUIUB:4aYn!2X%sCfs;JI>e#1Wno);AG+$M$V+[Ks_hJW4qsM'XFQfsQ'-pn]",EeMUkkFXoQK9qUHYN:*J`qgPo<B`k(O9`1^Ls#ZY%ImF6>=UJ,oakD<K05a&BjaCt,C\M\[m$QV3O3AlgDK4$aEa#tuE?XROS(%mBj[_\F\&r9$<Eq1oO5s7Wq:h/^[j2hO5q>e0Ej='fUhUre]A6^B9+_X)SoS1nA<]mB?&((85/6'Qd!PK+%0!4OH$PCj)NB$#!O*.7Y!JHMWPEsVc1-J$h_(2?e^UVoWUi\0.&K*Mon^OA>T:S'ZdVn[ZWG+O0;[V\a.2Q]lRMG^q4U-iqX$%`EpI`^XFn`-f%'WUZiCFX/tlIDs3D'3`f"(Ci5XXQfIm59HDgSgd;J,]88Hg[:cIJUp@(V(Q(,YgQW09<$GFQjEcl)Iaa?BZO=&<UqhD1]8`.%RLYJ%\A7&KR)Z[JQP_HX%`"qbeit_VMhJj%Mt%(pR`"*c>WI@qK=":S45MhQ0kdC=T>Pk:`,60(8>A_Sh9ET6]ReM"4>I"^M)3>YLlN:^6$dCY,_i=0Gr:B$G'.H@'CA.fQST[n^jS]/3"<Y]fD;BdQ<;9.T%(%E1[(Db<XE+92,V2Jq.n-78;P%i[D8Vn[KH@X^ck7uhE<Y[RM,p%;=JQHKR,h3:7s8DJHSN]_cfcs8rKh5snjG4"!L$LYFaNWB4dm.Y&J^4#liLj"#;-L(7RkS%au?46EbYu.3Ap[6#B>-6@/^A*;XJ[XKCA7T4Y)[U]Tg4][#4*M`)DOd)ZR&@=jTt[!o-7X[QeUgK6MA<U<h&;UF8X)^HPLJD'i*H8T;HR$LDI:)'ourg[)`MY^o[-1Dq;rWE!rY#mH/j)!(8p'@-T9]P=t"/0j;)+2N=*Z#cC[?$dn`3IX5W9iUR*T=\oQm>r'jrGF6CjIr:A6[H$PM#W2QZ"A&fWSI$cjenfgc96ZM"snr,oFodomfW)4cjf97VD">#U&77DI^NuU/hhKfr>CL1D*9=)</C7d=s;R9u[+sS=&NukuFaca0D3*][@a[o&qONf/FHudGu0aO))$C-nb6?1nr&oJQp('!b&rP,RA:SKsL&p_^HcJGj<$YphW91rJ66Y\PP]RKg*,J3(Lr4?k&3bcl/RJ9bqUVoWU1:u@[T.j\?FEI/en%NSB=<;tin_7rnmF>9FX]M]4bEa^b%j!iOhRqsnQa9%QMUq,$qG$\f]rEVg\.F[?:AJ>U^4#D'[jQGH8t#>DF9pq%n`0N>ldr[gk7/LnLkD,mp[:=di^<p=dQu0+gpQ"Q@`8ZrmF[.jR^8,^3\9&n]<m<%TaMVeYh<i`3d#2cUrduP]iV+,SW>u2#hN_1O<LrCcX+2).6F?l%h%!fb0#u"_buI,K(lcE+\<`3:t)10%n)=/]^S8,MA>Tps8G+K]Mj3V?[Cr_#Qhqcd@s''C@i^#a%cDAMNN=@JmM#r<#DCK7\Au@oa-[NTdH$R?h0SN='esPRPSRdaWnV-bJ9]RDRi2`S9sqop##fK2_m-D-73?pil+e-+FGQdG>jAg*e4%NVm'-qjNO/VQfO9:KM*B4SiqEq`Skc0Rl7B;M\_R.=&)C]bKeCFp9P)Pg_L:g]'WSYdbOQXPW>GORo2R#O$EX=,M_>3fN<eDN>jgb>-5Jbp\s<EDt`SQpZo#t#-/FJaWhBOJ]VUnKkASuIIbK-(5i@e=B&8lRgQS7*]uDse>V,>]+#p,<`U!Fo46;:+r0]d+*/)/)f>J>8]eI3i*X*>D97qe\2)\p:G5``K]9^m,o#qFb:gW_Cpo*?H76X\W`?+&?+W#)VbHYP"AE4oGjO(fj2[2s'GM5s(=&F1;_O25Y$A6dmDuh=X]d/&.D@2Fdh&_;r$ZG>g@e^K0DbC3Vj;W\e7]fDE:Mr,.TNK6+"gp7Ca=kcm82S^YP_*<=Rq9s=g;E>e;n8;`"PqRCY*I^^k&,-rqY;e^F^p;hnFLl>dt?H'-VWH!i@6\_V$.rCXt&XUIMsmS2^Pa&NTm]O+0hs9GGtA]d(37Bm/`>)W_NF]<lmuB@<G="$HJII3D<</Kto'h((e`*cY'`V-,ts.omWGB$:cMr#hRI[dgA'\o_Z8VG14!2r8c]n)%NC#K\2fg@0k9J!iEVcSaLRM%_8fW)3ZfGh65F9pmb*Y9X-eCQ)/Z1.n4segQ]g'OM3dhbK_'mF\\]4FLI>>d%JI`f;(?5;d/cN3M*s@*'YY5Bu[*Q:[,Y4`YR`bgU3:B"n36b=MQjM_FMQ[kFsP77\JV;C53$e>ZC,`f5U5*^+i!iGe/?]mJeZNDl`MX]r:&huE\"aQ)*#h[N:>W;r:UU^RpKdB4#m5RmP/,EFrBIJS'Wr238Yetu02[Vadq<NE@ZiaBkQILdubdA'5/GfZ!l7k.N=`2)bdfs?6pb9;-V32P)F]gX(h,@fiXQ/0&rLHOQdLhI]hA"uMQrpY\-gi:@TX<rGne">PSI&hm\Y:bZ;RaT8pPaIHop<0VbC>#n(3*CK\k2f@,2!Nh?hlU(iW_m>0HHk;Chb>OcOiP>U6Ir<lW`:Ra4s"(CFtG5RJ,fKKPUf)k88u`*KP!rI1r2uDW7=Z#kFrJX:$b%jj01/rP2#XQ0N(qJekIj%biR$7&VF:=QJ^3@QhEISY"Ye_VNdap@rcTFNd^cgVZRd-1i1eu<]$P6!/fp#4;%Z.R%4!sN47VdgHG;d1OoE%A&jVo<Q1oQc'Pk/WU^l`/P7lPk]VqJ)HH.heZ56&GHP8cHBA]^AJ't1`I7JQalO,djGc+T^p,\.c4$?I..N-AT"s<;"q:ptE"9u7&MPAka4kOIr@`Zrb=aM%KGZg548Y8&S=CS40`ZRB#tdp"`*"=.2D=C3JHH06iB@$;_bf-4YEW95^\dH2#c4SjXn3V6GhjKtb*=KDA@OV@,7uUQP/mIg^E;1Nk4R^Ua8,C.ZB8F]d`CiXianu/E?!S6<_Jc3Xe<$aRcj_4QXA=I?iR7;hNI:a+r'e-.j^P&JHH/:^da;%"^D;r.P&1X.nYmc&uEh7c'pY.f^R!1T0NK#Ie_lKn%BO2oE,Ud:oR>=`)C0dNnq6ekKcBmbWcWs^iKDMFa[rF>2ak6qjrt%idtVu0,I,E*q:Ko--"Jc(]DW@mm&]fD;(f3KIpN'cbCl%_no&!O#:\%^k'CY%kgL3U8"BD$"B!HF("R[8%FgG&tpX*0CS8\ZhVqN>e/:#\'LX/HcD!^p`1tjZtT-teTf]<5CX^b]<p+kaT(tRP-d@fKr2O<4[$J_[r+p/2#15Wo(_LNY;T6cQ6l[*IemcN5(1G1)n0hI`cL=gktb%72c%;2Mb>[`&0`)RET4p"<24U%f#VChg9gtE5i*a%#qT3P(U**,:[.cF^]3iE+#T\c"X](WaeM=?I*kaS[f0A/Q%S)H;Q3g*-8,1:cTP@QJ;+LP`l,g^fs:o:%T*k8j_>Jbe9=h`alTdJjiTQ%d\KG\W<SR,'e<>GjQ*PeGi=GTPlo,Q_'pCMe3Cp@#<XUkY![sShgP7T0>IGEMj0X.QGtQ-^qf<Nl_2qS28Q[RQ-l8X-)M"Ah3:fXH$n_==)]:2#plRjLECs^Tqc>NVJFbanZfi`jH8Bq/!#8'l#/>qa*daUl1O>lqnjNTY^,hP(/%9Kh^%5'9ht]m*r!aQl0dEAHV(6RL'C5K?+]h.q=D9\P9c2W^]Z3LG_Akb5+Rt([9EmQl8`qJ+=t+k[bL;15W"j*T9@k>EpE%=p[4=#ocP+b9C:.oV=m%Z7eqB_FP![$%m9?sQn`)E.V!KgdaGm3$,q>e8mq47jiWk\o^mtR-Oq%OW'Q%?3:P<c+"`>df<8OG-73?IPURP0CtQ+/'B5/-ZY+LMgmQKG<kWg%>Uu!X803V<.>^/.4Eti4g9pd..,TLND,O80VbWeEo4*hEeurGqAa0=Ld_o&\b*=K:L<&M!5[rt1hZrG&T*P4+(DjJ^\od3&YJ38IoOt#B0Y>)pP01s<L%mfIgU=5.n(t.Z;*u`G4teSXb:gW3=Ks(@J)l_^eurG!P`k*i-tSc.3ZO0&ldk<mlc"buNuBk_c9hbH8r>6,\o:NX;9(hcYZu7dEf5@4a,:`e7Rou?Pg;Me*;mLlP:'.-Qn`*jdA'3!<66q/cEqHCQ7:n?SNEZ^803Uck0FAF5566Eb55cJmWZFXl`RkPk;.'%"4.1&':)khUHJPHb:ehn2.C8L<N:_N!LD08kLHV7hgG#iP[:+S%;?MPnjm^lVrue"=#6@rr8SkdL($ZJ,U4NY>mH;od%n;Gp'_,"9Vci[HBV$SAX?GP+6$dJTt[!oI$$q?;87SY=Fq,07YGQfY5S7l_g=clQ7cIChb3N2E6=V3^A[c[ZY%HCIf)00It;V!`!O.0[3&>/VY<6YO*21HaYPl\MnAWCnj>[@n"pe+j:T*MgUhk/o$X_8aJ;Ck:^r?%ErGiWbq>/LJlC7]ESe?RCrRO2#3#?KfOWWn?_`I:dKcgL'>)BMVQr>PES%@!XS[8)baH5"C%Mub5<o2*s8Fr,1M=uQbq>/L,%(J9;fbOCj,Q5#oVXo:pY9g13cnK2BMhAob3Bq:eC;ta??i/ajiWWJqIjDM,WfSUH;g\7H2[EfT7$3$4I*+_o#dn.UZTmpmr.?^\F3`YQcDac/j8gM1U&fVhE5$EY2Suu5=^-.IedR"E,h%2,%(J9a1/XhOX!@+*&oW!-72oiB@!0s.PP>`Qn`(d/6K-%oB*.^l07G:Ab^&-V@6)Zr[&EJ>IJ?^h7>J8c"be/iUh-@.p&mD0O]R`C@0ZYA%-@3\p*W"^4#kh55=&o0>@5TgM_KnU278$icW'')`MXC9D.p.>II4/<K]kHP[U9Cq=EcjEcM^Q+&t>`M:=.PWOMK=2kqAbM>aH/mksX3L.@7DJJ`Rugj-u&+V'80`[+9D?lOCt1#0<\kP*k`&&H3!G^U\71s'*3H<>'i\NKTSh]Kk9SpIE$ql*<BZtU2SlMgbZ76AU9;9J[dRcjQ,K4/Tm$VI+c=gM_HB$EAYkRb)<H1'(T#DA5a>f;/MNYjJPG,'G\="Go3fL-cX-+91KhnFNV;E$'%p?c?iL#Xc=8KJ15l#b1Sa8,5`_tY[X.BM'.A7rM@OZ6J:!"*#<B$DQ]4>Lm6^u`b+1OGldNS\sD*Oq-h;6*a"C>QW!l`\'@P`N2-:u=tr-M#5jWJ-*IQF]Z0bfjV*_M2_OGpGAG.?@V7=_lQK$54$bqXj%$Z=Q\M!Yh;?c^s[snI$-co]nk2^V9(+pFF2_C>uiGgjAM']mKKcZ_K0[]GTAtlDq+'dO\\8'_1kfcTc?2O+(0/n"pd4H-FOXA]>/u2M@oE;V%sSa(gm1SLrPe*XPU+a<R0(J]ZrH7>p<QS(FW<-Nm\(q9*,_^%Kq]*dHVrB:j%r\FJ4VA&ZD$6j8[$NlTa*okHG._8s@7i57gGhFIIPl7/i\49")cqsBJ8Ak>`mId=,F??tWI9kA9$lIW6>giLdZ<H8u!A"^&[Bn0f0)j3]8?ihD%F8+L7ZRI?#9q)>iJ1BDrb:V`CSpTn9k?n8c=&Mp/oM_al2\L';s8(?^IfB0+m,)`qq5.cKRScpZRUcdA/83V9RGMgV..4]K9]YaAq=Dh?C=T>ge4iQucCIh/"q;Ja>&-\NM1>n+*[a[N1hFfDa<RG#DV_leo[#u%d>nj_47BfqJbHTnj+=$lAJiKumFnu<KZ;'Q6Nc)PD\)"Ks([_5SaOju6^ouNr5q,9pY@>Ho(_OS^ToTH,=[UtBcX?]\UpHA0:h-i/mWeqd7:%XTd5[e^]Z!FLD8%)4#_WdGdp>$.n*lomBtP0rUeRiX]nl1?G0OMC'b1Q=Z8AH%NLirF(X=DI<"7@RPaj(UQ7m()RXVI8tKGjrr"p%ltFqLeURZ&nA+mcGpr*m=%qZeZtn8'`]A8-KW&B$fl#TTnYMRY6HJLdHG#D;+/Gfq$Al")\n3R$]Em,oEokGK(nm/fh07b0#o!%"gZNN8^A@+Fr#04mR\^l=UYd[Z=R!V3>FLE*/fg6f?A)0mc-n@JVbs3Y:HnS"]Z2U.[d]OeOWZkQJ,As,0>-ek^juT3n)!H`'aVu72ODH%1M/=f:/4P48nWbnld`&6QTI@?<jc\m6Mf*)8*fo44;+/^lab%(2DHrVfk6olrPj^0.lM7uPcZTk":08oI.4toP:,\:pdn!Sl%f34PrMn>:_X7D#g_Y8\)*"o#G,M%o]9Q;,KS0UB(g6)`Wa'>FmIU%;L\K,ViMoamS!ELldqmY%mBQHFCIh)7tOZ#nqaOHjN3Vcq9OQY^]/bf0*Ztc6:eOQbLNXpF)uF&orij277@C<Y)u0kI'd\e/u]iT*A`[W"f3PPm:'YrVV&:lf=#PNE.-YGCD%KG;eG.]2eCckKJF)*_1MuF<@G/,?clulQp6)708JWMjhW<7qN3!m8e[:K&tIC4a%;IAIJrijd)4UU]8b"o@uid-TQ8AM4[1>[#OooarqY`tNut!r_!Gn7YX5dUM4O%nG+MTae1R&#A3Y+q85SYZ.q;mWUI2=M8+Di_k42WU86O-%/[=Wl='rpncmYN^Ua-5:0AS.g^J1.R@E$d"?/(^"#g]#$oA4i_74<69)Qh+MnjimW?uh/!20;VM92FBTF^nok=_I&`,tfR[SCk&S_`Dr*i3f`VNEs)8V0'MHOaVq8`ou"m#=d_mV+\Uk/.H*"pM3?VE]riQF6_7(2@o1:n%8bs=IN#o@A1YLq=)949pSb/d]QlfQ7X)o?ldVVShj[m:HnS"95h2#68?S,;$$e?pSd'(B:g2.HoQVM&L)Abg@a<Lmi=H2.(5s55kmkum^lPJO[lX%okKd8.Oke[;D3%I^3rd>nH@:IDVb/YDnao=I6/Y4U7rh[.X!CGYb5^ZVIE]TajehiWDf])(bhUi^OCV-o[/%U%9BT7KblR=5C<*?P7o*b,Qak(nq[hr^Uc:<f&1EEUB:@o<ioOKf"Uh.>A)6O\TdN!*sn49^A=jVp[3JN&rQSS'd)NLUo1+TpY9g@=nV(1B?cmAO0ou<a%J)!']CD]IItq"H1NXn\A0jc\.'6rd@s)&ldobUTXlR$.HXAPaWj[*gnF<._[jNUg1ritoXK/9,/PbZQ-cL/Ve;TH#-K2h'0>sFGMi5Hm@s&C0en"1p8dZ%CNkV\H=+,Xp[;IuDI'#b1fpQuG0O]NL;VL#CJTRd[;,C%gNW#:Yu@MnR5f1qChtZS1`r]%\MCh?cCI%Hp=X*R75\c*J@V>38sLkLgOb"YY9u[-8<blj./`C<s2&]'r:oepc^kjnkC<Ei++G&64kCSUOD]uo>)]oc;;>ilmBob8*A]b'][1^,\.iT$S2&]7fs9__0>B''@\`=pgg\%ZOb#@2aiXP)TH<euNY1`mo+$4H#g[o]&X#Y9;ek>6V+Tj->pDO2FUB[>Yj;B)MDNel`u7gO8emP;oXdG<2l-X"NuWi$2Ob.:=g;GTLD1;J%iR819!s!<C';VjfhbJ"%NTN24*U*\=Ik\@1jo)fR$\`g7EiJnq/W5?+;79e#u7JAA!-?49Q"`#>BfPsace)70s[8ocH42U-cRdkq&sPh5Q%QRbZ=d$Z>0g/b6:LR@V"*BOJg-1DqD/J2[\"JYVCS&FCmh+ftMl]KUd;>(G8s;;Se]GJl(?!.4(*HNqf=\mCRQ/16T[HM\ZK\$s`:iHq5:bIgJeDg!:]Mnt&!kfP8^d[r:.NOIi&8QBjFMk01r2-a-XWK%ns&cMI1W^0S_!cBj=;jBuLW09L,HQ!RBP0q\@2]5QcOO[bbCWJs+;jHD<.`k[4ijs)GoK]9^m,q/=t_LMXhV",Apl$pg%,Q];HGsmUTT:`l.`t$$LaU/Ck/4^PD1M>"3;5<F-Xo#m5rGTc=+Y.\#,$(gLV73A"VYY1+8P-a*aKI7?DUd<9'7FlEc49B`Np@5o)&XA4CL3Fkc'rqAdUi(7d4#FNqX@d\:u$8uKN]E/5"juLk8rE1803V<$.cUV,GLp,nG#X\o8HlKr(7qoHXdoE\OLC!@`4)*?+Z!fEk9P=#q7DVPffbMU$<7Wnjo!#^<:#oC=SK1P#tZA8Jt"k;l<CTGHn#*I1Ag7=6<D-!&aE#St2G.X]r7qFm<oj4/3c!ICY<@gu;/R,A>`6TjAe:ZgO%\P"272nQd2CHKh92A&kl%[EQk=m/jrb02k/H8)u;1963@-URZb>ZOO\9XG4Gj#550'[l/*W'\C:eN260Ogu;4na1/W=]f``Ah`eQHO?=/G^k1[`9(@UJT7(n0TL%p+i`3$[+jg3h#A\)Gd>f4!#KpH@pfCXhM&eJ'B5V8[f(b2_.Z$['G4"!Z5Q.t'#\eTSW:-UJ;NSqU'.<),n[[hSq^naVR7JA*:0EcNhY*m^:CF\scTHtZgSNHl-'M\bq#q,SVb`pcX]c/T4P2'q["qQ99dun]O-:nbd`Wm)ELKB>+aG=7-87GS:/7BFIm0UhJHH/N<ks>0',/9l5PjT=b*=JI-m(Fea2c*ta])]r+qL2449"[%[7bECgs4qSj<,f3G't^mXsnJ))UqDq,.21n(";X,\at5J)Dl-S\8c"Hf)>I<Rm)83^,"]IBo328IJ6@D]LT2TrV@Y&6LmYM9ORF98qF*DaC^\LBBU6mDI!/:oj;t&"it1O;UWF9$T1l0Hn/E=<K'L,l1K4c=J+$[/mX"X?TY<F2"M'sN0ga3W*6SYr`6(#X[\9g?+Y9N0O_h],tgoY1t1n#`I7JQ.EE`?SPjb2lDq+?=:3.p&MSdX,L_;sAY!W$6To26W"2)ei7;+N24Dm.V=AqoqKX*@m(Q9#.$Zl+:J"-?b,Nl#V"UWXQf9dolIF(Eb*^[`\gnKhh((dRa'X;k,qgo)4$+BfpP'+rE!Hu!I.PTAn/K.?o#iuKGXEsAGbL'61C!:[S'<j<p2!ubN>jhEfsBl*dA*Xp0/MpOO?=/Pbcee\>$+m?oRMQ_M\c!QgD>b;ieoH"*^&('faS&Enc/UWs$Ch)@Ca@kb9MHE(G8tF\T;CuC?iHWo3u3>4*BhAn:Ao+(3H4AT7$3$^OH+o&ea[YgqJ1u.UY(uPiRrTAU[QYg+ng]BHqnW`f1p)*Zo^l+m)]@,rW&%@q;>SU^j;0KsH54RaT9[.<N@U!D,jS7[5^-U_.1Ek8LfN%O'Uf]A5Yii4rBq>#hS%.7>rT(Jd6jAEV7/LCYJe5i]Y2"2%9bjH8Ab:<tefV'Sd#5S-,G&JGiLd75:pGsG*l^%^C_rVMMF'oSI31G^h`]8RC"Q+>`m5Rd`ubhC+[YVSVQ3-k(*rEc6Cb/cNnB?m#5F?F-WPgK5Z_<''7+!!LjFBVl%o]agn43?O-9N`=eF8P@6,6I`/7\&r;kF[6Qk*]l5X]ss]Ab\1=S#/oL)AOh6mjV0W'gcb0;;4DCalCX)^[`5/SGFk!O$EX=\8gO=#riV/Gp5*M-#p0UHK1S[HZ$Oieqk%fqNZ?4B$Hosrcu2J+/2!Bhn'O9_C]8kK&i'`SWM"S/[sL:24-FIl3;h.'K50*ERUdZdTq/\95KiLh@;G]go+"b<"kH6npaS:;_'8;gOA&kPq,prN/U/9HnRVspY@@YQEa7PnjrONd,bk&Gh[)Eh0o%RJ,7Wdn5C;iH8HS1+mjBu(tiREI926]DDJqGV8:$MRXmUXB$?XFO=13X]ah&IY[G;<GM[Vs?$G+Ss8@HIqqp?[5P<N)cZnKrJ,V6%QFh]22[gsm7&Vil`o$gqp](0S5Mpk[c.L\$V+[.IFWg&2*b/Yg3d'`;TgK(_D6K^)NugbrkBu'[h/<8Ihu<?=_[dtorqPN7-Vp<rJ,Xi!Q)R][%`r2t+aG>"c+.oYEcZ;q0YMf*MUhf<>[6'kC"!hN?7]*,ZG;h^@o.Zg0J^4`mgcI(Z=Jf;-?J=n5s@hEY?jB)&KZ;cZ"hgh[;+6,b*4>QW<?8&eRGfY<Rn>/ic*(CW$$AuR0bEHp6X[$3>T@*l7;)62_rh0de<+bHc2,cLCa9i*E%(KgpqC__QdUk%[Ab`e>W'+f,m,"ctdK<R[Z6SL<GpFO8s2:YD1W1>=1!32/@q`>b?t6N3'*3I`Ug)Wu!?kjB#>KI5e!U>K/u5alCW>WQF2nldodnQi[5K/I0('$00dng"BH0>X:,9#Q.8j&M*s!q_CE-4N_?mcEG"^$KYF&G4!MA1Eg4k-;BpgET2WX'.,3]Cpm'-2Shu!HM-QG"b*sn`0"^tG3mkM2/D43iusKP^%WQ^Z>\X7n1\i>oOhSrR--DZ:u=trH=;*ql)42Dl(Y5D.p!M<]FGrX4nVe7`f8r:9D;'E7e1d[;k!8*lCgZg+V\lKnX)Q1^]RCSY>V6a"X@S78K<9ZkF[7\ZY.V>\T=I+>T4QbCtlDc`/,0'q>#_uKfEF:%*^Rub5M53:Ra8EDV_n5hgYI`aclD^p%#'7`OA3_2l11eA]'63W01bKFe_Ec:qbB.<7+gUC/s'cIJ`_H]1.bu(G8s#mhZhEX.2A%qLo_lckM'*'Mj>j]O'3l>M#Q9#H@@'C=Od]-\oAsnFriQIerE;cboreWtfb=F68ENeO^egh[)tOR69K>d.iTjj2[4un%ti>s8D[JGr3r1F1Xn7p&B?GCG_$W@)7GjUa/(kE"jI&>SSV7YjJDgVm=9D=\?,r6#)2$4D`Y(plJ96nO.J@1u`;SVuNfLoFsW2gV'AE,IXHOrea1`%PU5if_flNYJ:(*)6o`oOC4<&c^m;=XPdsT(Sso^dpKe7[Di_F[^]B7PRA9[jBa?S,."arh4!De#`QR[&Zu`$K=&"mP`uk/O*^7,0fA\(mWZG+nu-bloV1;e>O#W8D/4/''?lguKBo41)u[03('Y0ad(Xr*pYUJ8J,fM07mu$L6+:[`Eq\j&o8;d<a0I%Q:`a4=0ZsWZIu)piDdT(k.k:uCGam@*bCq65ou(aWj2E2(?a4'/Q4gnm&jR(RmFl^Mg,3J9:J^.&EE1[Lq=2KIQRl9k.mIh#XAc#lZ'7=omUTL\=!"]TD;1B;OXNrn'-/l@%"<cSKWtkk.e%<QDW.10l-e\=47>S[$OV-IcC[>I[a-H,?l'KDDk$2ajl7(FNuf=F'#8Zq>hni-_ZpVhe>#NpVG3Poq<"/cFg*T<gpg(J2R-0lM`uO`nA0_^c[4](5Zhp/7NS$XDpI_@kKdcV2Wm(V1,/oM]^Z1^p?pa@PfF&JE-_B?LEF#<=-BcQg8e:.=C-=<V9>2Yj'RSZn]Wf8n<B#&^*jM]AXDJ?#T#[R28eY)Tn@fuMXNnJ:$d>R!i.Q"p=X(p$kK?c*S]VLh.j@KXBG.oVk1Kg^AID]<i]9'8WtL\L`fF&cl$MQa^dg9!V9a1`>\Q(Y6]%UG/ubO+FN+(iT;j>?Y>IKUKp33"I1H:\od17Z)YUGB?t23oPKc!CY*11i4b@:&lM?"CW8#QKKk<#ps1u.$4;aY^oP.6`V1?K*4J_73d%N]kk^1(gE?_r5Q167O$EWYs8B-0_hJ6u%fG=E0AoO@>=O9Z<#IgMYIsE55CNJFd+^p92l5^QCs%tk`C^f9`F=,imC-6(4aZlVA':/iO_44Ic1i)p0ft'3,QC%"X098.9-1onhgGb,OX!B+-==<(763lWace*1eRm,>,=\mGldr=9njkIWTKFFNOZ"-_cjm$hRe*BC;,a3rm4kj=7Qfpbr8Sn!n:s6dU&3/crY$"]"jqQb+XSP5Y=]l?rpL4J]^YL80,q;X8l%7mG>jB*I,GsM^m9+HZ"3?rfudHU(+jk&`>;ZmiQ.-+2=ei)ks,RRP/g_3B#/rT_?Fb^VM7Hn%S8N9,9qhPo#)2;i0q"31l\"NO#Jk+:`eS/jXXS8@,(IIo52nCFdlT_feuD%?YGB"CIcq8eIMT^B8;lNO#e=:#3d9Uk,0Y/'nlF$8s/C7C2.LgddEHmSW/X#kKcNH&ebq`SX5\P@)2n\>eb`Y[gME4Aqgd9.a?X7*a,3+%'bf=*o"1gdW(NW%j!9&<cC<AYJ:&t[.2(k':La'O+cs)-Du=7,B%o;H[DN$kA?7\Zo9aD[r.23X')d+Ib3#E99%)*hcrhK)A.l(mM2^WFme%q=E2Gb)Uo59\om>EJ!jU/AM/8_,CD_3E3\-j3-44UQE4B(G+'Cq2'A(+14T:NI1mpK,N1_8alD6kHb]U[HTW=4-VkdGGd(L;g9tkQXBDm`[;4ZKqsDh7RBSJkmbBfKA,>i^n6u1dl_iWO;Jss\9rh9pk#YPMESnH=UgrCV=F<6WR58KcEV/JB6'OmPBUF4`J-#H>\`]Po_]ob#CE1Et>IUo&L^Ql`,'bG]-STgVX^lZNY?A2D`f(e17ZA>M$%C*HqXe1uHh?lB10KU!h=m0>NAC%U^%@chil-iG(77.*WaD$JNK(oB1%2[(=@.#b]j`6?E"6"PkTlsY)0),CLJag9%D=l!oOR=@Z'n*!\3(s+B5-^UqiN*nQq)JpkY^1QPFS/e;W8_q`>;n>(A.%NS(Hrtl-h<"p`bm/CtTFn]4K0OW`?*_4;+L4[;4Bs?G3q"s*fV`:l3-/7/Tk=ZT8L62Ji0XiHO1-2^5OAJQ8aOV5C-LDi,pHUnsn*fl;g]`4o.2'HOEa_<Ukj1c^rT6u$@g)VLs@)P%J`?b_N\VQkp<()tBUTL"34!lVY)fWepVB&nLpA(n;(7eoFM2"G>0$'h'PrT^GeMCI/\?S>-dHhVE\\m-p:9UJ*982*Z6CF1P^lbJ&RRl>7TLlH98,T[^`$]&R2&e_&IgiLe)GbFQU+PB$]]\+;8LYg>-'[R\Vm*Zl4m+a#C@73i^G*<j8oY)#S;Aj(*fp/BHlFSLa804CJie\<r:?:KsLu0s4c@q(jTBt15T:!,SK*Ji*Vffcoe@,eE-^:*ibL>Cf+bP$c8pe,]T"o\`T4&q*_%hlhNu&JFV8Q"H<NTK70$,?S-lmU2jHEA'rUa$AeV=YW^7p-"4FYM4'p]+j+a<>-<DZM2`=k5'pj;i-jV$9q#<><cB6J!G7eVAuTZKTj^YU$s].(]i*m5K$:(9V^GV`8Zo%6:&FmIV`Z*CWIbsD]HB@!07.p(#f4kjST9iJ8F5XH&766Y;n5YJEeISeDGfri4"HFrfVIEk<*Bo-e.;#fq;\&0;BaKJm](;]S,eZ7A*Pgp-<p?b4>GU^js^IX!A)`DNb\ofMucmWu,b%T'kC(L!nPS,/t$TfVpK^T$jVrPdV)`r4Z[;+7kqqqFfp"!=f4*G.s2=/3q^(C)1b:aMB'3R[BP8t6;oQFh'9(,C_gqHsIBP3M=c'pY1lI;eC`f(cjA4W=VI<tVRftDb,DV_mH;<Y$11e<\Ggk[f7dEr4IEP<)6:0bAP.:*QV@t'mC?#6_:&4S)9]2uj$A"eM8OmnolH`e7DJ,fJC8X&GjXc"#$roE.^PMo7+H$e2t<<1%&-VoVX5&2LAOj6qdDrLc`M#&n`1T+$@cDJJo5E4'4[cZZ3+?b<cNLbPeZY7`1pkRJ(?1V6uFQ,'A?FhX$pY@@YQEa7PnjrON_"*9d)*oR=S:q=e_K?hP?pNJTD<o`QpYq)a[VF?-e>Q5ckK`0fSAB>9d(2XH!A+4fon;_dW^C^^U*<=RmH;ccA(kBKhd_d(=":QhiP3cfO+,3Gc";S1M'/@S(k@.'jnTs9(e>^):ilX6q7OAQ=gM]`C1b_LrVQ>E&,G[Ds8/t2mYZs^XBDlAbEaaWp?hbMf3aI%dBI4S[TKPYKc7_mk)#dnR\aGQ*^(u*i,\>F6"i>hC<^uK`7NGfB@>8XEKnB"0M.=l!j2hD;CkdGY*#9_[7YXsjVEVU`^0jN,8"\Ci0Mcc7h6Y'\5/_\T7-DNoFTaO^]P*$GP%2*DYa8"Ih0`C++N(PB2AJf84LC<Y:4,1T"RaHFf't\q=Ed1*''0>,^.b4\'LHu#FR,M^>(h6h?\qdq;=`n]X^XiO^5OK/@RUo1);?1*cGX_Vrnt,i3d@PioB&\FQi5jl`WPJi.EB6>^,J_a_8p&,J3E$29Xco:7O:PhXh%k&.7YZVWR9-VbWf";(T488dls"=+o4p0KHA)RSV`QlFSK6UFK!-2Z9G!o&cE[OusA9dZI$X75g[RMA7X.)fNLiG.fB^HgeY5.TNcXXba0?1sdo#eD#t'JFV^BPNGShE:B$RP0C=2[!S'.AskDcb06807E+kuNLIOlF$d3P9cR,Q(+`QQnjimQ?ul+d/$HV`o#nN!H7OS\]eKHYYCDOjN-srn[p$4V3I^o$H1U1o-',dp9iTWC4>'mKE9brP>hK[Ij1r'<f</%;GUo'"_SX04!_C'm)&L6QEUr24aS,K'lXHRMcCn<d..4]K80/']0R8led88"Jm^V;KHg[k>]m>_\4eNF^Jr/Kahra6Mq6I--82FfI.#Nsq)gXJXdNgGqBk_:l\[cPH=X:LriIX$*/q?'!KF8_qbL<@bDr/-0j%j]@e>2:-RbK^STt'Pt+aG>h@*'YQl_gA(\p<o0#mgoC_>(N1]m&Y7a66T6d4Ta+;C?>4XBF??"7+RB5BlN8%uN#H]Vp[Xft\Y'-:n0c:Hr^N[Z)YejMHI)+59^8a#u2']R9N1>MS2]R5:eo0a1\KQ`\8PmFjF`ni(,0>+?1#K?Ll>cQ9M2Vht&bb/C_J"FFQi.J*-$=9Yp[J,*Q08FLLWprh[>Pq.4UmU_fZ15?>[6A_W^11U^DauIB%<$$,J<d@&]KI,?<k4%tBFZhO`P&bZ@\4k"R\O;P<GO)]lDL:lh#QObkJ(Ll2^K%=8]mB@/NK*m7A^$Mr?\SQUCtU)jC`CNe@EKBnI*nifT3a!7L((mqj&O*Z*S\c$q"T*d-O?r@3!rgYAB8i-J,rl`DDa*'M"L=]]eM(I==TC$PM+aID;)@JVqnk&j-5dmj2[4iB[L;=W):&mqtBFCg9k_$Z3Cb"$?+.R.p'TJ1i(^GA[=-Y*q=m!`h5VMOPu-91H'.+fX,?kjL0R<ITD$9K*UEO2LP;hC"&qjAS!#+5r,6eB+AcHDQ?jB:/">LcI(%efWa%FRl5+ufWZM35ZIPo3&d-c12=d>qQkW^E94>IbALON>N0I:?k>``H0:`Z4ndOO0>Cbi:)sW#aH7\j'OU,">!['UU"sKnrLC6`Gn`LCr,Y!Ad^d1e6C0<1TTFQ0E51P!/BdWJEd;KW\i&n5PK+S!C1&"+>MHT'Vb`pKE8\P!gUFrhc9(OlE!n-rX9e8)ruqpEWa35[UIUB""U>eY((M?GFSG4Z0ekD-0n&cKBBRU5B=U<0Io1_Y?FXqT5%3j4[7?/mJ]-2ijcrp*1nk[T-*&EaJU"J2X&c@&<NB/(>2%2g1\%e^Nq\M]Ntj-4fc7^b\cb_K$Ze,D=X,CqYhI:"49cQPq[5O+5QCQ*O9.C=aiVZJN#+laWh<DnBmLO8qdMM,_8s>a2qK\;P+Fg`G#6Pd>ep($h7F1:2N4968S(TX">5<7\T2s`I1X:OH%`ZN_JQf7%2q&gR(R"RQ?i)aiS#V(,WtV8'.6SI`+oWm=R-"K$PJ?l!h+u5NZC26=gFiIn(rKip-ntB8u../pX)JQ_'*I^Lnil5+t2*PD&[lJ-_GeWLECutZ"(hM8X!7>R<%;c%mTu2iPL<7f<9t^6AM8e2hF/<#Z5#JAl>u^6J9c%k.'\lDS_K+Se&r<.?Hs0h1"kO6%hnZB7-*kN;0s?HgeXZF"miOCl%G0mQKQ$8"^[RWeU@f9(=4;L+:&9F#Y/LP5$=g/_@(,",1REZK7cILL,5aL$\/BW#!g/s8D[*PtAj_QfSaM'A4EdDu^Y%.e8)hrV)G;/Ho@["P3naqY0H>?P+Qg;l<B1EH1sRog@#D+K\Zp''&?ff+G3#81p,B*\:8)N[r!BDV_n[E:O8A1?0q.%SL&=JSKjSg>f8sDVn?+T]E^2nlUtckE=MsR'[k$LDD<V7Aq8BZu&rXDP8Bf2s"'cI4$^/c,duAmh!7X?+Y8k.NmTi<+4O+9^jS2h=#fJ@+-Mu!8G=^N5lLU(HfBui.9[V\i=]E.],MH.hqa6.oLY'Zc$>Us$D+Y.Icbm]Y(m-=0<ZbL-LO.#cQ_3nMI.>T?bR#iB9of@(e8HKgU*&]SdaKpm4d#H1Bl_[\=3dLCrO)&>&9CPKEZ7i-`D%$rJY*hf/-7oc=K^ll@9"k_ZO^A[iFP,EE"TD([CT[BZYQ/((BC.&)DI/&.J4d2u,S3gHJ7fk17.W^=djPa$:94ng)saU'Ie[=o1.1P&2O)R=Y@@MJt!L=63b3^#Vhkk,J*IJ8Ug*dNfc\YFPqUCk0+0g@6N64q,&e6ENBi%']U=I>9f';bU?Bsm>NH^NT\Zj]WLHAk8r%_GAkH!05n\Fu9)jH5Kl&]^`(gN\Q"Smk?49q!o\4L$k@`p:'^G`:%Yf0W>+GTBGD/tFb/MItdU!8AqO.?H=[/O!3/1[\,q/q`1*p[-]OQ>2X(ETP+X6lo?hc4fu=bO,"+mO1.@-7rU#nShWhBH5i6VN&P`q.VR@'L!V0QDYY)kM"Z=M,d@Ek**j$\BQtb2`2U;G5ScWZY\=#l-lP[p!m,2LCW_-]6C`%h)]cJgqa\p;5[0[+TBd9d=VW4MN<g2m>W9h@9@EP7NS[4CI(7;pVY,jRl>9J9,ue"o'"IBaRF""'NJ*[O)?dAK<@7O%?0DYP1>#u,9N(=;rSML22rJ0L2Dtk3AO>5gB^lmGOJk78em.m9MEZRKl%/Cgu]AZ[XCi^C""F&+X-1-L-N4ZaV&U@*;qe]Ob\+^>.&,4g9o#<,_,Elclf2uK]Nt>k^]nMpYL8cQQJ&J;3X_!oI<8s:6l5!f!o8fo#qc:ZlLk6H.363i]TIa\3.(g$$@[YG3mklF6CN#(JgYeI8]%BM%_7:Y^QHEEP/g?=l"5P?*UZ>-c:V7<mpB>?r@%(Y#+"M.?tV>nl"=irqY`pE]sB==*`jmEC?$CbGBCYIVM.i,HMPWCi,D(,$W]\W<+O9&D'5=kSnKG<ifD3hQhA$o&[cE&)VTgI:]kSdAR)mkWiJ^ot=gG]^;u56Faucp`q.3L#mXWLTg7sP;SQ,)&@,%HXYni$eVXU-F:[:C!k6WLYXq,O8d:3?ujEDfa]#``)i7eIK>F=pYL6MS+!Tj13W$:XoeRuoa<=CC"&r%ou-(kn\FYgmK<^EBoZ"Hgj0`0g9k_j>F<-5pCCWmOnYGHLhL4@NmT;sZ:@Ea0sRhCg1_ucaGa2"<>bYO2)E)fT93@=:/`;[3mH1c`:NNbS"9+D@.MCma0N"V&7Vt_p3!ULbs5fV\(cnj"L.9?@\^X'?i7=bCuSOH_hJWLVibkTfqt[F-RU9W51!p!>aqA)2?Wr.HY4BA7?R:`I+<Xh=5@.f<t2d5nGnQOLtAB,nHp\%GT\WQAebhU&EF0&0M"/)%"qiq#!tjO8/TX;,;97`E!1n_P)p(Y&4-X]+UepFR-"9@f1`$<O1CFA>gN-T5!:b\e^`-m2p]rY>p\ednATZ#)Dkc+HfUM#K7d=Vf@*P?q,*Pt<u2d$82n$\H5VUnNLh%13a`oi_r1&qF-38BH7Y4=Eo]cRS_@n<\?,-rj3B0V=Kt1tE-B6[)4pQ7YcnZ^F@o0J(e5&X54!a=S9tDI?^u>760#[#X`pp(A*ae;5cDt9.PA,?b4_loC(D%[(E7Z'3!P/hZ&Yg*2)i@(XGt?jOph.rnLC6JSL]'0$[43Rqt\t+eu`/q8KAHW&mQK0Ce'bUQ$g;9E==+neu5c8&d7/6m)PTfT:_^HY.C3hGH_g`S8WaUR5&gIcp7a3qXs_TTPr`%K+r_4q<)\1q.?[.XZCRfnF=O@.k;#F0L42!=L2V!7icYGI@kA.BHh\f/:.`Q@r?2PY$JZlosa27VaD.]ljOaeABp]*GRKYaVG3Q4OMYSPQ7Z7F,Uk/KEE^#,jQ'k&'VFtn\]k^ZAD9j/7mo`Rp5j1J\iooRUUT-0HgB7biCTC/^\dH2nF1D8V/@?.''3?35+;]&9^oA0f`KDY3B=d!oa20=Ib;q]YIt,VU"j06ARo<gNQ0ML="djj'Fmf19T4mfMiE^%i!@PPjN*J#_SRO@PhYtWhnFMc-2'lcgK@Z^H$O\p#A#J\S2bMqLOAU-#C#'RpDnJ5ES"K?^&Ilo0'c"r7HnnTHnA*R6<5Le9q!Z"q"ee>6o2ZOHA%2/>e"bHm+IpkGID57k4-J6s1=hpTHK&%a,V021YLt+ENG)`p?'Vh?!_lZXK4fNcXP<%fN2hGgN^nX2ESJC(_[Q-4t\ENB<CjN2%o2hg$.;&ZchO8B@!.Ye^LorJnP41Vc3;!LE96`5)mYQrV,2^<da8=`u]NeOTuqPi8p;4manZ"g9k]t/!eEm`@.$>O/c@s_+r1rb)gPA[L<m<e/'cE'I=tZJ,Xht2-@9/76SBXem#.,'anGXoL*C[AS8"HS@h::,`)<64$@1K+B2R[If5WgA(n>+#;IE3Cu)Z[gt9Aks,eNrcC?n9[:0S2R2a-4['VZ6_C>\M"U,'6[r,2_*/XU@UIY,P=L.-&H;k=fQ,+_qWRR[ok*-%2aiVZGnXTf?WWH.Z*]^qommPXBn^2)kmN!h.Apm4p]Cs:D#p6sSRb>,d)`7?`gM]H<%mU!]K+C.jhgP7TIJ;QU(+i.eP9cjW?G(NfX;l7BGO?GKolFl<Q!i@%%NWEh%0coQJMk<1FkF!2bF(/!<#^D)U*V-]SB*W+d>m_embPLa[.F.[YOf56od<J&`2:CX^3hrPVn.)UWUI/f1_+%P:C%%@Y:A\q+[,Z5=D5[2'uPe;Dr8;-^%^B1cTV$<*d?CZa6aKO&J77+0l#4:aN-n`3?3tJZ"(hs((js+/S0Y&=iK%GfQ#rkM2dH20nT@^f$Lm+p2t#dcgnKQ<7d$/hgG$Tm&cU]Ieh<>rq!8$hMQfTH0,uUI5\VRHR<b/o]c/"YfcP`AlK0(G;08qd35-La5O"`,"$#dl-V`)Artm;hnT3ekFY7&NGoJdkNr?.J,_Z*"_2Z@f^YYj*dYWIK+c8D<TQ5_kg7X>q[C2eb)mKIHr4Sd"H%N=?MleLe?`f6GMdfbp&Fj6Im3V^F3d&Ilp(L>&,6TfG\cs8dHK4En%9;R*8J#A?O/P>.S=g=^juS"e"RfM^]4;^:I"gAUQ7V0a<Tp<h0/5$s8GMF5lCQS^],=0L4*J`b14OCTE8@:*Zk=&-_GMGeEMZ'?9hSc?[S]+;*Y!J6hCp)Q7Q0*H6h:A7ZRT;K%gGg/D%l(W?=A#?B7q3XBDmfKYYAg,h/r"[Gml)f-?6-N&r.)i-%V`&JjWQ(c5n;j8^4VlcA+I5E6RY(1/4KKHUqfU+$AM?b_&.^A0*$e##hY#T4ZkZibkDn\c)cX0VpCo[mZ7^%')]#mgnO-;5!D(`!mAQ9Y60,?PFGK]BYq'2TdAJ+C]/d5VYDQ-h5n4EKXY*,N*%h)]ZA!%Yq(p`TG\nOE^8+_O=eQH#Pa_1N!iqJ6d=K,QlWI]rdNX5H7tKKK9D5L$XUOJGAgJf*kA\)2p-OB07`LrYa+6n!<3?$G+u!4"ptXN\!Ip[=.s%$j`T&QuR-6E]es51lc/+.*0gOl0a<fYq4tqH!fH8q!rRliK=W\8^E6C"(_A?#2nf9T,2K]KuE+XHisZPVX8rONWtDB:VH:`GR%M-;L-p)')1WlXUfZ05(]qp@[)aRKe?bUJfYu+0s(Nm)!6tM#QSuk,h-LnP6"Ka,;ndH:/Z5@))c=*l%O5)^MsJ's*,Uqp%:lKX+Dr/qlHQL)_sZa9Nf7!&_k4KP5Flg3#sIVt9&q6c]M+a^S5^`9si_-Y>_dbm_%(m97nF/-/6HV\HO36UL7F^A9<G=Va.U7'T+rYIsE5$PZS[Om/"eMt9\#4Tmq59L[C*(2STCl<Ja.J2AWaNe-id$/XnYp0a:G9JV"jn>)kU]*49\6@]X$eu`/_Za9DphiC/ba:91l<`TFV)%;6G&dAYUUo:4?5<n%A2Q*CJ4_b3_7K!T1/sIeEET0B2GW=\5Qk9.3gU8\3CtM=We"Hk*G3m#I[r:/aQKQPaM^T1Z4(;&4f8*h>,M&rtA[HaDa:[!_]Y$?0W4XJ[#7`R`j@P^Z6-4Z[#7_b8<)QVglmg0J/]!G1,\sMVRl4QaG)_<6@-\d2o#i[H3B=]pm6Y_'f(SOf)kBAu;:??ESS3?!kV5JDY2W'\f]N4=Wj7`YkRl\9OUhL81h]]Z9FQBt@^NIZh7DFSG99"r\?rWMWiE)1\iMW'P<Vn8d75;WpV6aa\8gQT!jJL\md]MgUV&dTU,='tZEb)l3U3jIG3d]g;(,*D)l!K_:S,M]04)9sj2##7*s(Y2DnYh\$SQo*n].P'T4[--;#ssV8GS_1@,J\HCj-.?=Z;]h+[C8\&nBIrQ`R8>\?W9B&FH,Tb+\08jO0ktB`-V'^I>GeVI2s5ebHH`+!6QY+S_^>YuiJ*.aZqnQS0FFIN34a4%+UYhVt_k0?uZ,oVg04FW*(p2^8t#*8CC'ef3:iG&bs*%tQ7h`n+OD%<2mLS#FAEgU?'"c<S2=VUVBgB]LDLfnDife-m;D/aDlfQX:L5=3F'ZpZg9:3Bl1N,-G(TAg)=d7(QsQ(.\t]&P$)9(F)D.q#'a0kKK?HTTQbsEEu1/$9j/CIHJbAClERC>T=^:c1HhPD;Dc\Ul(fZIh(u<R1e.;c)"("Y$\pbm@6Cj?9Du:hda]eThEUh#TDI,Di[)tJVYe`7__<Upf(d7jHj5&=l3k]BH0"sd6<\;aS3:FD-PZTH>N"qoZsWWG*`ta)U-!g=Q.lVOE!)JLsLq!oSCB6e5RgA>g)d'AA1Q%F?FkceZ./@cTTmnHhXbKYc1R!Y$/4?Bek(4l;db/p?YpMM6gj@<^&8@l*6](,Q880J,fIkh0#(UB<GZ9"K:[T*EacAY$K5F>^utWl`\&eFm9YDW;9VUpkJj`4`fbEYKnQC1iUs>lnKCO&.RmO++!;&V[l\E7>hqt*f-]Uc_#]b`8,XprP/LG+PAmDaGL]_>2+>cSTdnnR$\`N85`=uX,KGhqtBEi5)dP*)8'*gNuU1NeQ6*hH\]Gi-mK#bWMc=SOS7h+Dnc8Nqk&<1fq:W`F?1GRJW(FS*^6'cT+<:oqIMJMN0<,RP:'.<qjK3I!eel(]jjQA*T_HdF>T".4$-Y/Fu1t'r:gaB3j?Lfgk[VcTV-hMHWU_XIdl8]eF`Fe,anop.rMU2edc11fbd9.UHeAfCM1YG)=4=`#ir1=r@8!SRA?aYDmKPniEtZJHuM&CEg5L7P6B56U+ZY;lr,E9Y2o7!3]7B*2?>]\+uZ;oT8mlT4glTP3eNJ<ogV-'R-fklhLM%=+sN,!DqM8p)*L1\h07b1WIZ$/NT39#!Nl;h!ko[;Gd(q2<fV[MNZF$?HL'.aXIlSXIJ`_,+5#OolI6,i>e!a5OhL)HZUlt_'Pf$$:Wh=IpsNHm<0*X1SPHY1f`H:]BMhW(Cfh1!X+5_N^]!P<891%K>:(<?!rML<P:sWA&dl[<)'^*p3,[M25"ZC&,d5P64j&M5UBM?@!td'mL2[aP,<U]EYTZJPoV6Fl%Ve=,kRW9e+[_"R7gRe#Jc-l!$lC[7fJ#.ROH>"6P<DbKSpg=chS"7d+%8RBpc.$JB5qVOW>RV^OUX17NH0,)YX_aRMt9\#4VW4DH-Y,-!0[!<);aU45!D._/l%WMN!)3c@$Bi;BhbHpP]3gHfJD,QVkP6c\4>)IPu3-\=g-G4LPI*67%=PkC$Cb43fcK$kSITR_-G"hM'O)bmdfJ_q=B-h,Eh&qhKnM6G1\V&>0gujE^YWf,K5EFd7NP!CD<U,pu8q"9b2q!Q)duM*^.D&4gNhe1-Hh'AC%93H=SGsW/Me:.4LL-e,gg\AYdNP#7a-3qpebTIJW3+n%\o%>7r$,p`[!^*$!bBD-JV@KP)ta1?B$1pjgNs_'G1QXu1He=Z7TO7&EK;5a!gs3%Q$lWJ?R,Ns*iM84cBU]6<Rp#ns13T?clZ,#i']ZQFMW+Z:68"Bk"WG2@W<9p@n,Z<P*P(+_`H5)B^f2XpQ6BmI8A-=/<1\eKQ01h]_3SitI7G5$:9Zt[V17u\EEET4p4Ua.i%/k`%uIf!t1N\q2OrTdhjqVD^^V5L6k,-bXu%Wh\V6:fe+9,IR]cAO?i#S0Ep7a@G[$c-mn@Npg?1$>?(PB]0f0RWY71a7)Xk!qnepA<QZYJHsN4e]U92F.lq^]rl8$j[RC^n0,Z><hi6@gMeNbKFHaBJMA"q,.UA1k5Js=06J''bqIM/mZWCbEIp4AE+iPnMul"Q&$@k.(3pC%X!quP7d\KK8"L:grV'J<E5<LPsK1^,&7r@n'Rm8QS\K"PEWm*U+%QA6AJG6-cKO%1M>!<]Qist!sdK:-1p0KZ""Xh)6=i,HKs"ZP:'-iIJPc>l-29%DV_l)!sZ"._U<.4BihHB&]ap-K6_,k>_;GWrjd)5B?m$XF6AF0K,u+`pgKR3q(LQ71-oBnO@X(]S2c)h9N2nY,:XobKU8?.;3*J<Y\#Oq^5P/p=YmFD]d'jQ7*;.<JWY-Cg*Lgcfs>=R`Ns0=?UK5of:#"*NlIJ.Of-Nm1#q?:PE6_"2(Y)`S'+!UA/tG7Qe8*Nm"eL$e>ZA;\(e9(KDe",e5P27Fi.PkoO"Icg#V+>gXg)%+IWW9dGmh*EO?T[O0FBj"@?K#j1u]$+i3C+k_0B\+uN]7C)-_:&;^7+`/#!r,XXpdObZ-pgiKdb;&5/nkiKo6T>VdT[;(E/6TabNqsLrNIZ&;05!C%DK9P7H`1jL+rr)^;9QgYr&'s[mVpA-GA=i/D]/TH#oSAS#ldmdS5QCZWoB[@1F6Cj9hRu!/2YO2T^?X@U,Fb7jJHm6@ie]%E6q9[7Z*'fV3e5`Wl)1/nh[!2.n%JJ8N#@8((EkEj:P>23da0+OU@FD0&d5.;[r+WRSs5K#la'.oKIYjC'X;";9$3AI;rBKCMaN70'pEF/T;efhB![memHDrme##il(*JBFSp@2Kf<2f5obof/+FH%[clfj[_[et"lMBeHY;1fh5a>!./4iW50.\Z=kn3AJo#N'RTgHC[4Gik#Rr?%:m^qr-Nuno45aAZgc\=6\4.$e86552=@&KbiO&jf+p_$*KV+VU_it+9Oem!&9K1;6>@)2nH&JZK6,!Ph`P8@SRO\M@hL8L^n."Ud]2ZStXg9_0AftMl]G$GUOQX>1Z)&\9a*IfUQ',)0TTOjAG0*ka9S9strl&5..&;3]hdj&m#"Cpo8s#sD'Nu^W.5s[et8K_&e6RjT:&J!c,6q"ffndFf>Y_p\:_++1T,7k\/aR"dFOQ9o3I/`s)#(qIc#S;!L1.##0C\K5Bqp=J8$D9AsR2n>1J;"QB::GkW=`o)H\8d<A=dosFHe=jdgIbjE<5Tk%K8+*Z%V'#6e>XO;n,`P%gr(#lSKJ3)Gc+%73H9%YiqbFi^`E]#jAh5@W/M`Y(6KH'%pV,Q3(d$Hm'G"^(h;O'#]tj7>9#5IX;mCS[?OCj6(!K&P_3KX_4hs[ERCLL8:GnW3#TaB&APpWp=o'd)qp:CT`%*UEU0a9Z60h>.pJ<TQ!taO\/4V.Nr(%EI<"*MK('B,[V\Z197,WO(D&=XAVU`]@;E%h;hb]V80!u37R9>Vk09CYc^ta>+N`_:0k/FOmFo8JhKqdC&XVqA]/LrZ6ai?io'okhB!HLr`Poe\r9sf/=G3-qh7)9jMmPMj,Qo]o=(n*Mqfmsf)N@*VF6:\LZY%IR4aW:Wj5W4Elp19(*#p-]GVr=C"tuZO.p&m,g%tF0$gj]RlldDI7=aLho#W8Om+AT'J,ob6aQ",DZEafF$cUtC%NdlnG;jEp3-k(*e46-<HKc_6R1DV_G44ShkF[7cPul>qcT_6mX097;n$>_"KEo9mWMulqqtL-cj,^h*q=)94^\HfHnF5oj6\[j;l07H<qq#ZH_]q[3+J==!rr);8GF/*sdneXK(&5,J]H#JIS2iCD&P/2EM<8;jIfB0+_1Mt[+H_eK#RJfZ_G4bU/be\h4"MrLqsV9A4aJqQKTDl`e9'Zd"n?nH?="\c(EX`[$>c.d7"+hHrR^B.-ss5g"V.?0XK8e9e8.%\Y"4t-o]Yhb)fNCgqWht?$bSn-OZ7:3YQ;@4hIlkl,Lt4Wh)RJUldr=1&3agVUlcll7RTWQ)`A-)@N/LB11^g(KErIOX7*Ah&5<<-gpp`>_$B\<>M(AR.1#kH"Cat`n?IoOFZ&'OZG(A7,>,8JZ]u3!Z0_Vu%Tk7tXe,%L.p&kf'btT>ZjDRC9Jq%^>_IUr,h/'CP_:[NkN>4sZC[`,n0_trRl;uD+TX#J@VI6]%J\?)Qg?AZeg+iamZAW>KR`V"%pZhr=k"%UnJ`(5Cr!BW-"L3>iuXId;<e39d/eoAldi1JCXDQ?(l70D8kO=Q9'9kJb)&c^2r[9:;NJ,mppRBP-:&3CGc+L6^dppa"p?6,D$V7]a;u1\3DF*/Y"(*9(-S[H7.q7?5CND#SiqFf)jSgGa^d^hVe&poPcNAWfna\"?\U5Z4$aE1nP5-VAS(&NTARA2qpM<6O_)SdM3!^)ZtRk4SNG).1Qp=!a,V=#4!mcT_%miCEs,4&8/u[Rou6Ks7usD7/R,Y/-RXfo(V>6BO^-*'W9aiFd-@<>IFTBbe@:^5WpU\uik,p-i=bVOR$X/+S!scnc'U5<c*oK<`!AR$cKNZNom4<f?uRk5R;tX#ET>'De6#j\/;H[!e$3E'Nfa$%!=ILXM6]:="_BVlbFR-am3*u]4\XCHXfk1Z/RP#lJfoFD9<KG[*BSEe9bu>#A3Y#Yh2!XYSik,4C9YoZ]XGg].cel`f,dpB1Wmna:RsP#h5stpQ="@eMW7bYdA:4;-l^P`f@m3=\W`Igm$'*aW:_T9he/E$#S1<-?Kgq+TgS_NmGmq2pcTO[(l_!%&f&]`4j.d.Ek#*E"[f_[X7FtM[5@a`&l5rL28:.Vh@efjTLDRm(tD9,X?8X/ID*r<Y9LRE9XWm>WiWG=cSe'G&c?_5g1%<l\8VIp/1;q![;-QkhF3><`Chb&"T$i`F_b#Y(2=U#()@W"Z"o1e]k-l!%^Q2slrr2lUIU@b3<Hf63,i9ohRs1&QRuDgCL>XZEcNq*N/sW[4r4+,J67g?I@MO0.!Y.&E<sT"LkFc6Ior%:bP=\L?_:&EBI<LEO*M@MZPc&:;Gts0fs>6ks(!e9jKs!kc<[r!iSqh7Ti4-Z35:,+G3mkH.p#'#GSb3`GC$roc#)dBENtWT;l2*JYe^)-6[jH%^jlHk7gQLD0_D)E>YMuqFi[R?#7l)'_q/Ob+IWV.lI"pK4]PK^0]^65)coT])GH_b=h-_JdU41q6FBRa,?d$5<.TMO4D(Vm;'OJ!h'-&sTpBqLFpN\u'>2d=]0s[3#bWM4HHlua,9TnN(NCn9=&+&e#bk)`:6-2E?F3fc#7hm2[V_M]:3(A1dc]iXkU:@8IdMSE.i^d&4E>24iTo+!hlpMk\cH:[h&ngBr*,eEcEP!lfbruJik,p-i?R!/a&Am2*BJ:u?\cS7-Bm]WT7<H-#()ZhGrb6VZ<UFdW-.L][JT[bj4u\6i'<m)gtZ/Kc$IISiDh8IHS*G8n)*T>1Lbi%pfk:PlMGB2"Q9@r'bsfQ>f!VRXK8KqTX(l/]Y(nUW+c)%mBG/k"BGj')I/T?;gJ'$e_/X/Vb`r)*ig!Z)/,S*03GGdL3p-2E]o"+[G\>Hln)@Ofr%)`T5B0n,5C?HF`hgaI_TT2BtJQUg?6O1^\j7_R>F%mc%3d0#lCl%6/79^QRuF]3e0B]o:.+"Q6at?7>hqT)p%?u6EUn4&JHNeS2G(_Ci$1C?#j*$f4U9iRL/u@j/#D8//HF+9q.)2is%A=;Gn(a_'-&9PUTPh%4&8W;,LiYK3r"#9A&=4;l<AZ:5tRe^?Vm"!uq6!#amj:fXGeVrr)_T*^+iCm+LlOh<rJ<B9OI,$%<if.(f2OFd3KRc^$.eTTR127",HiMsHJrkKdd51mq#t3B?(?h7qep.q_rW<%eHeCkV6k,rdr7"VQ:p1,:VTe5s)^g]`&VCrb.?P9:-2][J=A-H8M>ZKmU;C7q*1>@(WrJ?uVio[pEYq>'hW-eWMK)`MY>[r*4U&XQd)`&;Fa^aqW3*D-+a]mCn0I-UY*o+s&d]R9N1CQP`<,uPm`qf6]T/16_Q&dME9<.kA4<uou$jK+,Clr<YIoYl)'#f7nEl1(PP$QZQ"EYKqF&P;EE[;5[5m>.qg`XPfU/j?J`Ssr1U%#K1,;c=i2LiiCZh-!l`]J\:2rr)^opS_(E.pT>g`=gKO(_#EIUnjfRQl+o]_hSb`O;KuujMZlg=`<-b$nk\1b89?4+:'&d=BKhCn6n_/8=\-D+I[>W:f\'C\h*TSZBLi.s8DZo,mGcr9fY*9%j&B/o4F>[i@iY*P]bF@eG%WC#f6]=;_rf4X(nO_&\(a?L_JTXD=^P[9/`_d45];>KaZR^n=LuED>)EDD8?#+]OTKPM^^'Plf$UkIC9HVM;Y"11]3YVET'-Y"CuG]?g`ASe[`QP.>Js5TulpTHV7M9=rE%#B?uTtNKnnuc9((I)^@KY6lk8/4e=c]o#-@u]6E_hcHa^XAH2Z-\TL30nCWP\``\/(npUnq(0LD-n`.UO>_Wb2Y51,:CADfTeafZ;.!RKp-V(^GXWql^NVWEe&k"Ol5C,G>q!atEL\C)fZXq=G9aWdshX"jJPOc)f1p+6O/YKC>NMCmbd%UEoA&*TqDO(eQ3&!*CEo+HSWMulbGLFTQ0mnC-$%c!mlPY'Kle^aAAp*K\_1Dh%j/#D8h!#Y]HR+CONn8TqO.G*.AJ&+7JF^^5;JsVin#eV38h5M`T!0=h4[&c=n`-YKiQ1ZT`V%6=1M="5lnL4LM\e%d:(JC.GlIVd;/WChj6:\W?^u=l+C*p6*il<@huoEu4k2;h!6X:3Tc?%2_!Es_Q"B(T+VajdHM-RUfN>RhrjWEi\8c#%G.*T(P*;*i4b57b.i.,U6:(aB>/#AEr^Q8-ZU[-$XWqlW[>5@:E-uZ^$%hXYcspWu-!W9Mlr`A.?K.4*:6l2_QFjou.:4J(-CcbuJoY``KQaT/lm(rm7((hGK!!0b=O1!j[8p:(h0".<D5+bD/hnqReq\sdhun_uP(,BT<;<YN-IGingmVYt7*t-qO'9P-ZY#2s3nQeVDO.%$"Ei1j9iK?OLdIo`U3!]mZXslS\QKELaurqVRb#"rgnWS42M;5=Zqr+u1chDM`Pq)q\'T6.l5r1gqWk="'bt3M.,rO(02<:ZngM^LM"oFp5:QI@*?@:]hE7.\E8D7hb'f&KcR.%9WOA1gK/I2U6`XU#VT"<B1o[YS7uu3NeVG7_/6IEFD1[AH['U6k@5JmdP*2&XJ2:V/^NIGlq"ee>%2;I4:,A+I$0kqI<0+%oha5fXW[G#VHMT(>CBfN`-_]/XkLhk7i';jar;:r/gU/1X0/#IO?.K$m-R9t5Unk6.jQ,Cgh7ImWSiqGfLtfYZj\^AHpqA`V7"_DeV!B:P+WrU&`E[#'a'qfkKfZ.X38.n?3huC#1qg&<7W%e=kLa3AmdP)+V&Yf]UN)@I3-t3FRgG'sK5GPZY[QG'IB;s5Rl75U;tSHnf@Zs5Y)1k1Adf?L&CATs/DQ_n/i<2+'&ILFAisAn/Mt/DH:VoFa<r/Fh$Dp>nRo!c^e_@C=f<m<[>^+)io6R6=<H+r>IStRDH7o<2-"E3USm3<.8VV:Q_Sko>$jq1JFXZK`H`gL2UuBYE!Kg))9_q`U$6^M:O&eXC.D7"iM9_e_8*br4j%AqA97%)9I<d^d:8a2;<^QPEi)?,e[s>+o%j.+gP#U3Qup/r%g#*-7Ihr!Lb%7_<aDUT1qg'g$)YaCX&c?-\T3CU9:%8rQ^;'A.$n>rQS2^KrO1?$2CoV:IXXJ(\pX<oYn-'Neu`.Zc1UDS:Ra7ZlI;f^m"jC?[4)p$04);iq@/\$bnYg+521bj.5HP\$9AIDR1qSrX)mqWU,'=Fc/j*%6IY78ZQ&YKAB>I+6TOQh1,<n@jN4K,<)hB!?[pn4=0JeBT^\Fh^/:0uPcK7$X'@3/T:LH62"$KF7[6Om$DU$c6V3Q;P0>D9=6+,R6IY8#Ig>\sEnk/q4N8!U+$Y2MFCcO`NZ<mpN`BS8e3_].?BgA(HIP"RO$<F(s8MKeqXj$)r\%Qge4F4YT1u&r;.9fJiR/R@NF?[X3fZ47m9=7M?1f3+FR"Q$4WS+9of/NK/;-2\QnSQGU9"m#7urCJ=Q@^"kVZ-5WN&JA&cM[sIt-C-#G->6a`lWjGJSk7b)cJ@N\A[>d@bL&(pZeX/HU'lW]Fsil#kNt][J+;p8FfXeO\#]VimT5e&R#mPEV1X9q$`#ER^paZ9GL,Bj'Ig4Y"_-9;&c02]<h(qtAc_nZQ$rqY'=2Y?sNU*sd$X@S+b//[)k]>5%njR5.2K5k<Z9^,YRL6UmYbWk6'70l#T4e*F"Me4,L?kKY),DOd2B>U;P8XED5(rTfR3dbM->b7YF#i&r,?MAJLn`/,0#HG03%KF+?[Lkl=iSHq``9q1k:O$Bp!bA`h'0er:^c'pqI4uQk[@i$b&aJS8X(^rtK&2jB??Eq+/mQ?!te5K0!I.PVLqaYRk/6S^Kcg\o!-Q4b"a>o6YX+#]c&OK#^9O+COq!mAle2VU9P\N3_RR*toXd,-8'GhQ%'bq`MF=8LaBD_Di)`DM_Ks5bl;V;)4R[T,&X9D-$iRrHG`n=cRFZLPE3-k(*e7<HM(#_Di/aP)Q4akA2*P_OCbCKa#NZ:'2rZ""C%"12aJK>l!:d#@id/GQ!]^e;eo054dK*Mo^8P.=0=l3k]n2H?J3K9u<IY5a7CYU/k3pK8@`)-]DEkX,k(J,;V(*5S_0L%dOhnFMC[r+&ANN4(^Xd!Z\S'/ssfT<t%Jca"&rdj:#dLcN*R55)aTp+HmckiFp`JYNW-=i1rUnsp(b^9*Ph7nG(,RIPI@rNY<I-/Wjm-`;u9389$iPRjMO*fZiCY/(7_k2DSl/2F$2]Xr$5\G%p2"$L9g8LOjLq7o_?[&Z<%hcI[c"7]kjgI64JdEU'b0!>Z)CXqBji``;bQc&&T5ejjaM)<3RPiQSClGieD,a!-N>Qg6o&]2hYKt;2JEn=gZk#rA8(Fc6TYs<CFuGSC[/*RJqU9T=?.YoG(M)_E'c#r@lleu.T1u&rd>7471nq-2?p2*c:RBi6;p+:)q)04;rqq$n2=YO.$oUIhR@0HLUEYag`9<=2[C4n:k5*@bn%AAJCOc69hqi\FXm@+RmskB7p?gU%R%$$Q5(38a%lJc`2MhW.K,?0b)epeA-E%-r<F=^U:0AnOT-/`CP<^23raj%$&^+a>b51Nb_RF*Aj5]0^4(i,9+nI:/"hU.YW"8QFn(nLF+pVJcE[=nY2JlVs/O7LbIISflS<ba2??=@K&0m?RCu?jP)le;Xd75A%cCI%Hq;mqT&J:d-NUk&6-Q4fN@]ZtaH>F-uobFm^,BSTHBrWCVVG*C](U1sP>W0l"G\+gBkgd+YgNMr9Z#f)'PCf><C`@MYBHoB09he'Jb6HfW2i\qB3ntH;L()HZ8'A3/ia3th@NgXN[JoXRXkRa*/LW%2M'nna`H`gL2"G;C4FbYZp+<eR`s0pk?f@Os=W4=umSPm^`^ukfb(uLn5,)5KD+$lao-J!R/ci;#l-b6<"<7S/"Wn3p3j_\T5,pso<QBQh5)mY+<QB@-`]`1.s8C$?Sc&6Bpu8q"%3%6H8Je]ie@l+\o[k:tg9BKOqIF9)M\T4#[H].Z?`ghDcF,ZMhHX/bGk'c^EP<R0>uamIl-^kg\2cQ0Lb8-G"ITgrl?nYmgTm5pS<pQ"H[_5VG(u9Wc@lWBOG5!'78KTNcT_4W3&haPjUF0(5^I8'1nn-i)GsT7"HsH,K4J#*.N?,'(Vq]e$+c@eQA2JaQND8oNT?K^A&dTOPBAo,@`=.Z#_\+'gjnM04I*nj55>*Nha;'e`f(d"If-!5PL,NHZY/Usq?76B/6]E:V:$t^Dir`uW_?/_`WopRoF2f[3,mfB?[g\1>ITV5421:./+n>!M>EkWbq[st]#m5*h.PQaH#i:0:(hM8U]aT[W2M+hBu5N0;l36V2/<uo`u\;bV=p,tWdXd3\#RbE4/$lehX&A#rr)^))Dl-si5'BmY[PG:(e9T+M*=V'3-"65WR)R%Ld"(_Cs?`u(9b[Po9.:_/ONIcVb^qA%=ER^M$?Nr>+qV:FLAjTkinp4eO$D(N@8EM<[1ec*i#L*&N%e*59CA<\oaofr\W:S^/`l#R^"6A[G2$BIeVZBm+sHR#[,EC3u;>jil-g!5aOQ4^"t/dKI/N#S5W^0ki'hH<8+BOe\6_aelC:Sn*2\Y.k@f.\aghn<Pk89QS2^KY_-\r%<o861pC/C@.3Gn<E3%qSLQ^;>:e[AE?inHphbc(F:#\+2J17)M$OZt+,#@oIHSnH=]nlf3B@!2n'B2#.juf*FQcP0@3KtkVPL#@4X57Gm+Kh8dduYJ?at(6d\TTQc<f'VXj6EV`p(sMZ.$2=HE1&H<]Ao`o,mu$LBeoK&D=Wsa4%@^1_m#B\M9d1U_+.XSt`ppF7!1FH<p1Dn+=\u_i9_<T07P0bVRo(]mI5/9gGh7!`c`(8@[-i*]m->iOtqf5h=-\`GsqX+]_"V/m8tR1OHD3M>V/r7*Z&bq=9>X[Yb5$aKh'O<d#,6YDH#PHg.Anm_&/:Rr5h%]'HN2p=a;#]^\J0[&d#;C?kZgl[<d0M+0h>`G>h/>i@Lf1ciO>/o'91e*F$GGcaI`':RInI#lRVc?[o1".AUTf#a_`Uk&UQro5+#;#W]Cg9iH3%sa0P0u=aiSS1ueR>hE!=GRMXL$FhN2O.7Orb.k1d.Fp7.m0BkdH(p-V+Fq;pF*JCFm8@-&*J:]?\>a.pGd$D[$P-KREaBZW^h0FB@!1<]^nmHT5B0&4@!//Mm(..da$stQ`m@HjLV(#2:Z`P:tD:?q1]=tfI3EWG1a6*k]3.'-$!>;9#PX5X-6B;6Ou>uI/)B-T.O3O`+V!5Q\,MRAi72Bl#Qh&pXf/m-AX"#GKI.gYXoQ:$O[J<'KVtr+R+@jbHSQ/QVAdb717Yo3nMN^<]sWqg=(**$b<S1QX5"&c[YpM4(#7tYlt:7HhQf70>k]F=WM&(++O3nYKnO]1_]ea8$?K(bAoNnb5(_^?T2iUUoH:`Tm,UuH?@i^<ioP2J,T',I$mYT"IrUt=Y`.C?G1[D_M,]fRfq,4n>@=5c>"c^Al$t-End@[Z43\O>0^"-dC,uDXcD4]hgPF>@noc/%PTt+>GfH)-VkdHHIUPZP9:-2][J<VE;7YF1ImHF.?MW;E3d_]PhXJJ.,.cS;;LAW(+i](l!Fo?38gTBD#9&:T"+$^S(RIr*[7psZXsYnq:/PRYr_dVmtWoOES_"RE/E0KH_AEr_Eqdekm\[lc`KEOVcU(9qW])FgqiHu,UOi^O(L%0qWK/)B>o`Cke&Ro4$aEAJu+6JH$L>fDKKOX%ABRfNukE,[:2=Q.YeKS3c<_45-P9$9M.qRiJ/KZ%2r4'B:C"L%q']?S'@q3WQH<sl3#"A'VbKdCmm-0qB!&GW[;:;)loqq#ZJ.FC(K,bbaC8"_M[^Nj6qKtq\NR`TmQP%>`T./a,_>"VG3PG/R-g#fd;M%Jj0M6;"Rj/Q7Z;V&J=QU/$IlY?$"7J^]!P<DnPU0G5?*diJ-**^\sI&DY`2irSMCo^"1eJP9?;#rm]tr1M71>5(#Tt`0MI0bN`VNBCFKX,:tL,/T\_j_HjWg*CA>Z>IUoW!SqIicF[.ZCtZ*?-75T_QS(5SI']#j'mtEf$)3jGc[e6EQ'LImj_UA()4)Z)0,NBJ==iX\SLZ0>i_*IY=gNiY$3X@HhRqNP1*LgPX%Qg4GYtL\J5;u9eWVLbY..W[2RLV4(93ZB5CP^I0!9X"p35DB2^F4s&tZa*iqhuE^ZhVbrqOMuqYG"@"JL_)GHMN@SiV#Zd%NgP&dZ)>m,[<knnkLL(8iV)p[@"3St9gR)!9&1_ro$Je)LF/360<r"Ue_`bfib_S\!Jf:Wkn9?a\Z?_93E[cBp?HhuE]M_[f!0Va(.E[h:8s[d;A7_n5BOl\k@0&;3]hdj&'H,sOVDrVH2lZ*D^(d?>nOMKWP$jN5lJ9nU12\Hg!gPq,q]RPbJFNJ`T3jiHZ5UIQauiOEmfVG*C5Dr*VC#VEQsYD0hk:H]F0)#3*K04K;$lIAOo/rbpQfB`*GTl#<E"RnW=2+%rJ7;[d5,OAR=A-k)k3`#O<0k7(VT<:5_QP,)d&L2r_G3ml&a@Ohc[2:oE,U=6@'8+U*pi_Ph5^a4V&]9>4_ZBc3j,]*6/Rf5q_iQK8l\k@0&;6*PaYcsb`&:e7\PAMG!DZI^qbbJ@A]mmf6)0p-[jme*E?[GrG%tkLT)eI-9n**;k<!nUr5BIZi%Y3+a$2nOpYL786:(al/mFu7UqY/55r92OG&%<0j1]s=n>fUt%4)Q+@O1J&mX.9->[3dM$K]HL.2u?r0gL=TJ,XgubGrGLs1$+FUa-p&+1f?U%,%CG%t%[Sk04RknD[^T^-8"hd7j&m^n-.0Js;LajQ'kLp6,Xk$Z4Y,mGPg5kK]VK[<(2"W?WfOG3i=CB'.O<9>qY`aU1k3,b_;u(,g$`<*WZZ2NE:58]Z'YW^*t=>3/KhLEYD$[SNJWq;-Jeh0%=TU)pMMmQ)2jA]pD6h07c:O$DL/CKDe>F6ChS^OA<UjQtR+BZeq>P9?;#reqo)Za3S/;cs[>=ocj$)_YL.UmtshFXfrGEQ=([Z:6grEoe?fH!4AiUb/&]7s26ss%gT<oQpHTDnL)5/[m,U#tN,+IePqbg.9$:If!t-i/s.aZY%I>M2Ccqfd$hi's@l9<)lqpVl(d46d3!o&O\g<%j/N1n_thu(F<UG]6<Rn;3rk=[Tih`>\/E)OQW_r=0>NR"F/O31pXrZXDs0;idO[nQR`HOd&Ln?Rn&DSn]Wf8"9\k3ET#GREt*IQ"rg0C"pP89"U4_]]FtG,'(>Gu2dX%87;JI[R58J.?G)Y4j`Btm1+W[.M2fTZ2^3jj]83,A7)OR+<idtl%'d(B1M4iJ1M2TsFi_)&3(Vepl\Bq<cC0@fq9*.EJoCY.)fL,l\``Cjispa&o[F:81ap$6!LB%;SiLir^>`2q)6dRZ@NmSn'.6PFFThB`.QD_EA6rR`S"3%"%fV.gOY!7b<',O)oGK`8=^54%T:ZY%o#`.\[VWdX<;4I;:mPnicq1eFNN8A#KS8-(gMO&s\)+`@muADM&3n(t&J5WTqU`J)9^ral0?uXF&3chaU]c9I?N"Ad^b9'//6bh6lN1I>H$M\A!KqHQ98hQ5D(@.gXJi'o?HrB?f3]-(mb+oOWO24WA4B&.n`.Yea%)I-lfpNAT0@Z-$lHc,6:X5"D\\j3gl(Y@@IpChIbM>RkDgQEf([iE#f6ZR+$PYQ9_8s=)Vg-n:UZJfQ\4jh$(M"7Z,]>PG$)q"ZPd2OX;u:D!ec\?[r,4&_1AHAe]Q$,jW=6+Rm$DBh#2*@!kuS.]6DHZa^1_53'-ur5_ND"B:C$4#l[E9ZEge0mFs#;,Q:D39uU=GfVW4*[W19C"agG2@u^EL5QB[O_O9T4SRXOBEF?3HfFBgD]+#];n.2g?IFuWcc%T>lCJ#pIGFZ[";O_MN]9^!oiTmgA&Bt@XkRfg_AnIpa80C&YrQq6*W_/MtNCiU*fs?(313'f6gphFg:5d(8M\q]h_=!D;ZO_qUkMEn!:RjD<W]jEQWV4\aAXUJ!.VC&o043#NcQ>B#HrO&Z^,i,fjfX#[2@4t3`B0W.fs2nK,9o3/3A)p:-73@(r:p^GQ7cGMF7PU"PtPMC^^MQR.7O:hYRNG$ET9M6f;t)Z7uiBIABhDH=;3Mi2R7Ab8p9GsCGB_qOS-O`3SUN63Aq3O$IJBAUIIE@giG-`r:74/e(@kaC8`m:.;@(t3B3,QfN;LNGCgrBigh.>daC$jg8#_@1L\.RKS0K]i"jjO1\_c0ea)n.%h(cCciS]I>&,Yu2R'e8J,E0s#XYiMZY-o''0")t)?n'+Y17uKI/F3kI)%)+B\B]Qf3a$PhO6NMmcU3lhR[jql`\)&Q<S7;mC(bsES_"RE/Adb1`D>m2Jcb7m"ePsNfH"7$o1&GWb0ME22R0H1:-p%9tq>Z)*)<Q(pkM_dD2n\.cnQ[L/\Y26jke_b](U=aR3&`/?5!<X`CNgeQPQ-P>=C$96'puGJF%Mj,\2m#f!!Zo#X,oi=@d5OWYPkl_Nb_`TWF=C!n9[S2j?]Z\8c':73k+Bf>0pgph@0RF'RtDIk'FSLap*nL)ab2gaQaEYPs#h]@n''4AFqm=l&hL4jmJnDSTJH09>%>t92dLdoN*M>?c+:S'[o]E$s5N>jfoP1V>EA/iWJ!ke%1&;&2r2,!8AZ9mmfm3ipA3,p.LWOcm=Z8UJ**1c\<r;4P[O5+]l%8;;cHhWPWM1Os(FmI$o3^[NXi.DP(p=Nl95Q5nUT5B0n,5<PB==]MqO8qZ=AI\]hi8S2HI(]O1D5?@"Z*F55]UcRB3!<;dT9V:*S"#n5QDSJObmu/%>[Q6c7re"2p[T^Eho!a14,l^>Rl5-9dtPlHHhHZX0R36RdCqf6"OTp4Nuj8nb&NIhP=[bO><,XegD(G<3B9+*iS87"d'dfG%NRSUNY6FhmL^C.Nuh;]HUMf\iABV8O3f,D[jN[VX0f5JT'$bcgiLe)-$FZa2@4t3`B0V72bZq??+=k4:I"e770$33Q7Z<am+ASl'kh%'U.&#15U2A[fSF9pX=uFd'1u4^13Mk](6[3">.sKK)r,YpIE8)7pRdh?BJ:9X%3*;n,'7YU[V^>:HCBL?c9"<'0(D\t)&X=efd^pb9Un))cdh%q\80Ng8]k6e!+pj9gh?m6K16oaCh1J?&X+S<G-d<W+Xeap:EGP"EQF4b*BJ:M0CQL<Y0NS"YEIJ(=LrUR0?uXF&2*KJO2ue_,qASde*5lOinTXu5)[R`HCQ^"L28n+-QqWA4*Rj5OiYU7`/rj!bP1r+TE!trY5@q[qsM)b,,&U%gU(\DY@#%EdLlrp#mn=*mfYrOLn(!*m-O'r$4p)V3,l[(a+SY/G9W8'CtPtcTV0+!-gAdrb4>,o<8761QX=KOPeI;5ElX1\R1HK`@,&Hlc#3dr*-go,\Z=-a!W9L-n"(-pi;q6sk`4H*oSCA:#7nE''Bmh[2E,eBMD.2ZQBki'4VC/R63E&NJfn#94V@l`W8act8Z)\W&?:g5$%a:!+[$G@5nF/b&-P91KFCJ=$%a:!+[$G@6)[+r,RB"#'1f#(5nL&X*XRE@#_F0)Io'_)"Y/])@0D<'ML;b^M@rj(=E&etQ[iILVWFhsU^M(fU8O]\lDe\_=D+r7B(#jg1h-BL/D#e$*Hi>4U<fqg4V@nV*_fn#-&,63qea60VgZuW5nHa,^[':8$1.raBe\_GkX),13%-UEUSM)7Ob:P\9I8-Zi`.:ZSs!?RN&bZrTg@,#KS7<T8oNJAXarp"eJ>Jg*u8<=$jtOe2-\^Tjh*lbAl30!Xc?LL_IBtJc+:*Q9RED6NQWf-]bT63NAh`)#e"VneXO_s?UJt(0cZ=Y=e%ibm>jn*kk*)^$E%6W[3[bdFX80S=Q]Bi9:ZZiBT\B1^!Yf;eXJ3H`InEdNu2mh[c36ZgZ`\P#3r8EhV2LLGY"LQ<-?_'X`B$_&FXc,JKAA*Knf8@q"4j`1)*fg$./CSFH'.'O4D4(*W_-/oIpu;7La#Igs2TkNE[s%\mY%[?Ic2KGm/!`HPd)1I,6L.IPit;=Jf'EBk(7,krO@]X)[q"CatNL<0$$&oj>F"O.cdT'!V-=@_a'1qq%Q27BrO&.d;#tXOh^!_IlArrjT;7>;D9<0^Gd0*KsIN6LeW#PnSi6e67oJf`,aX.KQ4t\HlJU<"ftGca)JACPnE?a[ErK(_@[!Y_G3h-(3.3<jG5,[cEla>q@r#]3=NUVau@BHc\.ACp;:5,=q$l,R!H!ODpuF*7Z>aiO0d_ce'0FrkW9-l^0MnmBa^HnQ7Cm^SpF&I7SR-<2n6>/]d!VXuUZQHdO;)1<5bYH%"5"*i8SSq@J*Q_YQ,>s/m(S63Dq7eG@VILgsM_G,3Sa?fe`Fe4"$(M]R`oe1)gOn*l5Vq/=sc"6X*C6O:he4X!?E1PQ(?W/4C5HF/;-gL)`!H"+iG_=bc'AYpU,6Yh(t_BDda=(!,TROu;u6FN.5c_ttgJb=5hXPcF+V']Iq]9CEYofW@m!Od4"@nk94OG6`lqTW-WF5[M9Se7sboi3VM"'B,/[#5WE<%fU)J)c)$\Xi)5jM+r"4ZXjU;@LI4<9Oo[<_Ubl7uj>cKqF64QWW8K%[jM;(K(G(A!EE]BjZEKr`!,M<)'NtJZCC&[AlL%rFE#]gnsg@O$"?1lDXk:Yj\ADQ-(u'HX:(@N^oo=AWRr>FhEb>4iO1#1EPf.iIA:W4kdb;jIa"o_fA[QYsZ$'CH^B\='']iEl$*@K=+Xgc`SJKTMV2q,i+nd[Bd/05Nu%VU2.AM5^F]E$r'$K[R=$1H#dbKQNp^"Ctb^,4\r4$O3`:<>2)($@A$fh/cOC>pDlSq1Mq>JV,"%NhQ5,"W)1=\Fc]j$EGV:i4%t7u82M(ZY"&qshkl`d<8O)&_Go,3]="cRZ/SZB>__UrN9q+Yd"99>);@:UQ[2UMdSnU*nWG62h^TqY[c7^VhsBK4TNBO9_lXeNb02=0`nB9#NNR;;eQ7#*Udr;2Gct$fl;<:!bIadF>g%+cO32H(6/=o?L]_u,j`1FhOd/R&WX\3ll%`b"`-N%9D6f0sP]"b80fGHK6Z&/6I6Xr+r3gC$U>ZRJYsNa^HqQiVUH",m+B4\:Y5,ITmp+J'fp9X)QfUd&0H77ZL*"='44:i8<@X@EHrtWDFFhg4)g.uICCmF*:gEtE[<+@G5"J6bMdH!$GbR\5UPmsZ(tbU0TiKg5_shL$,!^RAgEA]m^;YF^eiiHV#kiZo'RD#1JuEVcY=JJd7=NY1rlg(sVcO.U+T+eo7$#b*$RP_U6%U5J%Ljjip69kpY%9Cm80]OBB'#*mJfksnNEM;F5nFJ2dO@HnKIWcfJfk>!8<3m>&9WlM>[F^+U^;WdAiP9H6k^)Ka@adCe^+<JQJrDTMN@;u8!ll/"OTp5Yo`]\g>;%UI@q>\k9`l`?,ON?$.I^$&'5"\\)Ve!#0ke],p5/ueiI6+1hF/pq-WicYC0A.5nK"qhs+'MEK^U-a.CDmT5(7?[SE7@7;)D;r]ICV9T$_m2f'6Jk'u^DlRM55JcR`MB+Y9oaRQ)JASJQmHLqniF_[NKTf@s+pM,*X,t)Z(<aEbap9!#_"#_AuQdG.dp,QjnJnPL9V+99L:JTk!6T#oJQ<<L3"X$k4D@I'rAqR(kQr=GpB!ZasC]6`SJn.KS$)4sR/Y?#&2ru$*.]BLAg>MX+AQroL1rm$G?]?,oo*=R?%>NuaS.m,mj9J>(,`$&dr8*=3Bh6p4lt_RV=-)2^bUt:qVp\rHI0c>(L?h\pHbVE"a7bZ:CiFl0=9p5)"OW0ih-1Im:=2H[X_nPnZnF=SRhjaUO7j<kEt)Q*EH^;Y[BsZKh3oLCk(2mUMHa"h3Mt=m4VHeM!km*Y\&kqRLjF/FU0U<m`MHd*_Xt+EclhX:MIlSS_,krWJNX.`>``;WFD"WSa0aQhM-%ddrA6c&&d1LFKPY3JGCh$ZBTm#enlt-<e0F4B+:-lb`>oiL8*lXg/bJ6UUdp"ZI#mHaUZ5(=)P*$4$%chWaAsm4,BQmXWu6B9,=)loO-/8&(?_r"7@$t95#Xgp,RC-d+Bq0<2@H5lLU:5>nB[0)AdEu2HjQG.d-eN73PJIn4$Fd^Hu+K.8.\0&6$?2H<G$(g3:/;kL(^CinWt<QSLn)%I8<5P+[]q9^%3#'/m*FKL2Zk$^B?jP$_Ct]^=8pUGcT<IbSEs",`$&aLRIhcVPH`FZ\:J'G^/mrOZe4of4/qp7W^&jjq&6,>AL\:&YQt6Tu#;hG90$o#bh@9-=j'[UMXTI-T!)3HAakkKmTOaMtA-8GY/9GZ=N2eD6#7mX0C#q=b6Aofo[Bq("0;""ugFp1a,"CSLrWF4\?<rE)As-U32J(BuB$\.=rZ\,bA=eFGE>)kLuK[_VNh=Zm!J9e1A/-@@m\M(m-s4;`E=K)Nu55bSKW?*nB]+O<+_&nKKnpSKtt08roFIL!0*:c&V*@\`P\;MRt#p&k$5`O)M:#2ks=j_3>XObSG((Xk>`sAS+;SYjKbleu]heeDf")RF._p;C(Lh+;ui-7jkWs"1o:P"9aMEojR6p#PM,$b\M@0JNYRd6DIK'f&8rk7tPE]aR1K:*tIZrNBiO-5nF/b&4BHIU-XAR#ZXEV"@3U!O<+^[+R0*X.7"Mu.\oRd+:(t<Ns%`["@3S%5nF/BK9Bet+:(t<Ns%`[FTUfl+:(:KdN_$hKIWcfJfk>N+:*QA#_J.(aYH-nKIWcfJfok1JTOKq"JH1eOWXor("+<m&-P91"@3S%6-,^0R32c%("/jFRFtPIWUERn"OWn3<0+H6Bskore;&a^(0Uiol3sPQC8[[P0nct@esYUUW\Wf?e]PSE@aYFh#W7iknsSd+bS]*>"9aM!RS#'BfPu%*8pG<2E$2'<@;T5u&/].1ntK9=+R0-6oiPL9kRe@?)P&$#&ZR[@"U>7t1;.X3rTg^L=!&%d&/paJWP3,he--'[l:b2!mT":;5R[*IXNcLLh/O#0iE*\B@o\AZB8[Ng%40dRj^rqm('3C61+@fC1_q)M@#HP1;p8h(68<enj;Mj^>"J[tmK't*on-:r,,cFq(*$_/,Ei;2'd]_Z>@EG_:u,<]V9J3o>Hjt\PtN2-m4K,reXK?<"(#2[Qn0eC"h\EdYQ0#`B6@BcLd%.1_UTqMd@ikC/sIN"7>^Pii8A:43S>Q<`prUQ6pqBomCi-U=="6I@8^snLM5tIe>2E[,5;D<oiGLdX7$W3d*#6j+m;eG3i*1D6'oRrV>/JV7B$dGN`Biq;TN$Yac-T9#`uD?7$"beU60Ih5s[6Lf-2Kq=Bs+']b%lfRX(CeZ(fmtbI1?(24+d\%Ss?Ee<6X=%1;<-.$br0/8_aDcJe%SFdXsH+Llcs?0Sp7Zh0"EGJnZ`P#kijLc-RcU@D/o2MBgPTTCjUZGC4_KhYT`[1+p`[T/Q$5H=gp4ffU8JtruZY4Y*&EWKUg11"57:/DHgTqbiQHK60\WiX4GBWaiSb8)jKWGb*+.(+gYZs<P[ER5p<VsU@hC::7=X0reWaQ3_[n.`Xp\OPNLZb\>"b#eaJPf5sI)--jlm3.gT6b1nU*?A%Qa6I,DGR4'8End]>\K2dPK>c=@P&3.CA9tV:VEE;5e>2@eBO<+:\G(*12oUAKl_W<7CG0M])sNJ-r.3buaH=p!)U#*__C[pNI8ERt'%J;*jbA#Np$s4uZo.M)h+k8u0,\@WRZ,DQOYmpg(2Qp_&7N/&1He@HUpVZF70SD1iXLY(`gda#*XT\Jpe-[r`C!i\A;A>o\g44p4jC+i>4$r;ok9,]9M:FO:r4A(oiT\>Sq`C8BgXtOeiH'Cqa+V-n!,GR[iR<hOWYPdhWbep<HPHiCPLZ%%ZWGM?a:BRLH`2kRXJgD%qSfVeSi^:qng4P)<D)\oOtj"UsH@CLtt"pl:=HUQ$TepDSL-?l7r*II0dFm_sRk'QQ2iA5.311m&mqbc"Mk&er7MSa"BDOWT,*Fg[0@9,=+.OC(Y;`PaDk?gP?Y(kf$@S5fI2-dFlP&e6L.;(tc_V3"G:PrLdcp=Ct<bk-aS$ACt2S(=mIq7GAe[f:()TW'!/p\g&XZZpg%0dcaEYfV*&<GqD8)R^#>^aHLD5HSsD2X)%E<]jr$sD-Rj3'*LT4"@3S%5nN]]rS>"2#_Ha:O<+^[+B0LI&d1MM$)CLO+:(t<Ns%`[WfS8.Jfs=q@:D^lnE-*3q,H=YH"Cj=1>D+6E\1&0h3bpga:K9RagAP.qOTpD,0apqO0oNej2YNS+F@RX4^,]L/JKNUZQ_OR=S'$BRn(m*[%OfjRtsb5]XlJ:K?pVIQ)d#Kii*t*JnWa1995)@(<C.@QCc08(E?[9fn*48_YahtC`;CFF&oNc#\EkGl:d8=;i]HtO&G.nqs3UtQ.nZ,WBp@8AYh`c-p/$]5#+s$d3Q!rU>%^+il[3gJ\j7k2Pe\grE!A9OQ>k$'-l..6A*0Lg<-mh-/o&^4T2q8&llDA/b,/KAVmED`<8+7Rsnf#>0X%XfX)(0=_`5mm,;NV*gQ%nC$AK)b&NgjD,ZaWTr\6`M8C1F$HY/pS@mu_1m\?m<3`<UJMk2=fh6[k1ddqYY<[N='fLQUoY\'8^-qoLh`@`6@\*-\g+SpcMao=@\6)`?hWe(;7kpBaS[qqd?.>ALS'CZUaZ=j0<k/p)g6OF#MGlMA)LBo%Ea5K^RYc5&PI%MY;RY86\/qIUfr%B%6rV&C/rK\`43>r1lP6Y^m\*o#$eOA3eKZUl`=O>R/$2`^fh5-h7*%<PDsbj#X=VUV'51`bV,LL?2FCGOUX5d33$oCM4kc2]A@%A3QOC976Ga@JLBT0jJQ16rk*4m]4k>!W2@lU.3V9>E7rc-/X)uO>B^4N"dF4s\W3VWRikI&P.^^UHWkSW$n&=f;Yse;gnh&l[ou^b/B5cH!Rr8^]jKfb2<F80`=o_3,]iV=V)raJANd]:$U[!'bNZN'/=:2Ssl&fYV<1EQOX9gb5+Pe&jPF<nub27MUqa]Su[\c\]e"aCn$tD(h\Q\'+YJqnRj@a!([*!12=9-N9EilqHT@;k)C<'q#nIJQX"s$dFV<"(Yo"[RT7i=s@oUYh>hNUm=_5-Wh;!P<gP3]0W?R>a>2`Nt3*7uKo*pj?:aE)*UEd!Lu%IB30o;XC7lL`YdElrCtXViHrU%?]G,5W\,R_qt:2.LKhDTr_e)uRoMoa'juU;#3V'i1REC4:(ij491aek&;%&JT!OJ@Eq$^[>@ML4u\II\Im['ie3c#bKQpY7g$^elkdP3=a(NWN&]R/rq'cL\2/i/#Za\6q2Z^#5/VQ(YOdC"bIdq0"BS@npr4;J.VVH;Hcl7a]g5@I("MpiA<e_2I\dRJ'^b3Zj6_!1gQQH:;,+$>J?2Y7q0ZpW*\F.#bm/@HLq3jj5J/$bR&l768V=u&d1K3"@3S%5nJ]*-s7l&Jl%0n8.Yo$-]h(0Jfn#94V@l`W'YeU#_F0)Jfk>N+:&jL//&.PW'YeU#_Gml;a$:=$%a:!+[$G@6)[+r,RAuE#_F0)Jfk=:PUmIN6)[+r,RAuuL%InI"ApP.:'lLp<$=C;"@3S%5nF/b&;1HaQ3i-c<$=C;"@8tQH6`cJW"V_""@3U!O<+^[+B0LI&d1K3"@4kW-lO?:Jl%0n8.YotMK_^5aZcG&W7AET/_%)QGmF8o/*[+WJ3)$[3oE2EeZ6:[#+Fh&Tajm(Vuu_L!J2F"Jfk>N+:*QA#_F0)Jfk>N+:*R4B`()%=Vmn~>endstream
405
+ endobj
406
+ 106 0 obj
407
+ << /BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 612 /Length 99
408
+ /Subtype /Image /Type /XObject /Width 437 >>
409
+ stream
410
+ Gb"0;0`_7S!5bE.WFlYNTE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzILVlBgcY~>endstream
411
+ endobj
412
+ 107 0 obj
413
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /DCTDecode ] /Height 285 /Length 13690 /Subtype /Image
414
+ /Type /XObject /Width 219 >>
415
+ stream
416
+ s4IA0!"_al8O`[\!WW3$!!*'"s4[N@!!ic5#6k>;#6tJ?#m^kH'FbHY$Odmc'+Yct)BU"@)B9_>,VCGe+tOrY*%3`p/2/e81c-:%3B]>W4>&EH1B6)/6NIK"#n.1M(_$ok1*IV\1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,:U?1,AmF!"fJ;*<=gr!?qLF&HMtG!WU(<*rl9A"T\W)!<E3$z!!!!"!WrQ/"pYD?$4HmP!4<@<!W`B*!X&T/"U"r.!!.KK!WrE*&Hrdj0gQ!W;.0\RE>10ZOeE%*6F"?A;UOtZ1LbBV#mqFa(`=5<-7:2j.Ps"@2`NfY6UX@47n?3D;cHat='/U/@q9._B4u!oF*)PJGBeCZK7nr5LPUeEP*;,qQC!u,R\HRQV5C/hWN*81['d?O\@K2f_o0O6a2lBFdaQ^rf%8R-g>V&OjQ5OekiqC&o(2MHp@n@XqZ"J6*ru?D!<E3%!<E3%!<<*"!!!!"!WrQ/"pYD?$4HmP!4<C=!W`?*"9Sc3"U"r.!<RHF!<N?8"9fr'"qj4!#@VTc+u4]T'LIqUZ,$_k1K*]W@WKj'(*k`q-1Mcg)&ahL-n-W'2E*TU3^Z;(7Rp!@8lJ\h<``C+>%;)SAnPdkC3+K>G'A1VH@gd&KnbA=M2II[Pa.Q$R$jD;USO``Vl6SpZEppG[^WcW]#)A'`Q#s>ai`&\eCE.%f\,!<j5f=akNM0qo(2MHp@n@XqZ#7L$j-M1!YGMH!'^JXqC&(g$7N!6Ntgf$[grVqS[qH3g<7)f5*\uuV=:OJ3fo*&G4d`VXAAUb4?`]E6#1todJj1QLPNY./T:HR^LL4<?ee0&B`A&nqpDlA@Xl7'iU?UN>Q/5qpe3e5rr>?#J'?=,C4@c2KBk@DSUK_VU9QrA0_"i8"g.e)1Iq?i*Zk=]TXDPsB_F;JQ2SPlRQo*3oPMuXTCA4mHiAWJrrAI^rY#eQJ'_BVo/(e4T?@/kqTU,F?[=WoXAAUb4?`]E6#1todJj1QLPNY./T:HR4cN8!IrKgJO7TQg)g#+.r$EI+rrA_"^ZK50!//8-ht.\nr66;&Vt.U45-mcTfA;Lu.hhmq%hF0:>2Sp.J&5XQn+mDrraq4$;u'eU+'GB:lgI=!'oDqj$&=;NkUg`KRQoabnFukbXoAAW8$T&kYO2q&dJe:_UMbt-rr@_i_r()%\,=Jmn<eHIrdr`$!1BV7eG`PD#M*Sg!':#)[mabU_I;Elq?pO,Arl^\4?`]E6#1todHkUt/,Otb1k2'EkhDi:5N+<cp\b8trr=iU/:9g\C0)V9cMe]Y+J"C8^ng3o9("A#)T5O;ZBG+4VaV;#At_X.?N#cGf1_up&NKu;i6t<d_J[NZ4f`>lHF<Y6=qmH:?8!s%h7$_KHFNJCaO8Q85Gi.\8Snp49GabNJXOi):NKMu'lOd-'!X/\'r=\\aQguF,hDLflHbam3,"Z<EmU`0Q"lbr^?+$sYGkLcp0[FSDuTfdQi&;1:U:!#T0%Q"oKU3p)FIWu53G]eHPK;JAcD`oQN$sZk^S:CfNE^MV8*!++5p7[1ssPELEq3]9nf5;qEb,]I`M4])[en+oRm/AO791sX57*XQ'D#@"u3q58ATV6##7B4'9dT5:,#<-$oSlNoB?MYq]Fck2AUf6km.1a'ZdK6\$a2>p5pO8BkM\!J3Vk2O'bX3UtYd7e1L$[\[.T)=GG)A?+;"eN9-)f(Q@;D<hiO(,<%Y\=*f7PVT-s]I3AOi^LEXJD#XLuedqZO.Hu+p2"EpI`(r4>IPl(II\X;OK2o@D:U@XBQ7I$!)S.2W!QtI^$-%;@g1=T_OWh!:rrAZn5O[7#2E%3!lNdCc'HKNa(t@BW%&$@)bTAf_]8h0^%R"N(mb1h##jrm^POHMo$SU"P'RTghrSN^S@qkrC5-TOoYt[,WTC_@RrVI:W^=5FOda&UOE"$19??.iP6,Dm>RY>lWDmdo.1pKCnEeof>J/L,"f`;$P]oU%!;dsX-hSc;6e,Fc(rrBfCRV])jkLLaPp+!nUR\"0I^.@rJRk%kAp4rYGMF1rjrr>70rrCr]<Xgn5bkm/@HPOerYPe8brr@Me1tgU_!7/#:pZtn49f-oTiQ3.Z#0tj"IA-Z@^'.K?L+'][A*(^eRosg?5g<u2UM'T,,NX^ZHHZ7;=u's08,4/"R)LK,IAQb1]bF=G*C3]5+8H+HrrCXerrCD?=fU2:r.?X%!:,RC!9bc058#;m$So@<rr=7'RK!7l8+SUDCE(,4ngS:Fou)>9>:-AZnKmJEnDD';UAT[$dn4>OZSiBD9dukp!/@Fen4@bshcmt0V3]t+7E?>m8-><nBr7D+S]R*qU>l$>oX8d7VeQc1@Au[H[ZX+PC:s-QM&63p.q&84GNQ89fp>aHQ8l[3.qrKQ^^<_(<+G-inuKcle[hlN`e7FPgS;<3@qBd%C!]Fejbk/6mPcR.I&2)(cQn6*"-MH@_Z]gY[BZ=NAj=tr_!#;pjcg!nEdm9.1.H`Vi7CM7]u@+ecr"e$'Z!OD8:e!n7V^IchQ&sa)("^a=8W6VZ8-MP7u]+',_uL"Rr&eC`c=#(*i#ab)K)$eD*=UgDO=Vq_j5sFEhm5RD`Q*^HhAa$d$e[ElUeSJ38pTr<VHFmLG3Qs0!(bR04jj0p)'pf"0_.G6-aLi6-.>-pNda@k>.C:?#V>EA\-3NE\cO_<?1`.Ja6MeRV@+_?Jr'XjlO4Kn1FKmBr7-D9k8>OBr7-C)?=KI1o?^T!=_o4rrA2P_u@>\rfqTU.kg]?/3iIO>2##*dJcWo-fL-]U\UJ"'N%u'+]Yolq$(.)!7r%e!74GCWnNO3K.d0(l\kcCkU*;o&gi)9141>H!$[_srr?:oo/3gh)o=i1.;>FI`.'RI-E=QF-0i_Dhnb)Br.^Y-8o$3CZZq5@4NRX4C#<C1$<T,M&cohaB'\b]'mF.ZbEZG`o/$n5ed\-I76FC]-N,Q/%#l[G-7PEu-YNt[E![?g7QSq0'Gbm2V9HCbAii#e?S_%N<DOnXj>.?mAj$(nKj1F^fD=.=<c646rA;9!E7,ZeoP:t?hJ4Q_&TZJ8XjQ]WNp)<a1'U[B!:@hVdpe-LVAkc0]/'BdBF&YQ;E3;]_W(fUqkG&$c`*pdD!^%t`0H2A>fg\lp[!!VRVOiYCR3JFL>#pr4dEiWT9MNL$:sm4rG!o@Lp$ZD')EKiA[Yi>k,X"t/>jj4,^OUt;=+89gsb!Sr3eIW1tH!Cci/HP[k8r:.ad"ojh$R'6]CG>i#]S3Ku.-7"f-18kt,ea8.t)!H%&\_V=tDr^n8<h*1ClDFIgOEITG"-rk!IPq&L'ER_XYlh?CAD:C9aB@Dn=HQ6Z`?Bl'A4?4Ka@0PU.%24*&L@\,o=aOqfCG)ORbNQK:%"*ZrCPl6NRYPi8`LfV3rrr@UkB[][dl;mob@acF@QL4Fk!gWXM(HIaH$H2"9*-DAJ9is#3`Gi9:pX\o+TCMMq]Wf^*:A3C]Oe+Up8kPOepF4XUQS1!brdJ0CZ(s7;U.;Z'\$c*<="CP7<tfIZV".Nkh*>D=n4.5sE@7)]4Ah%3jV$=&L.TL8XWS]9mQZ&\pUbUGWEn6=]LA+QdJas2D^0MU9k)>*Q7f3IrO2O[6>!e[82@,*89QN"3U,+r/7(f>p,/:OJnQ0\H!-O@.QCm]%.6:UECnVbb#P#!fC\OmBGtTb\l68122f(&4'T^-R,jE0Eba"'jK.&mKXmhRgd>&B^Z9dHrrB6*J#-C-:<WW,b7FIBQhjaiGCGVD0Z<lDrr<a_1Us0:.he^.[\Nj&+NqOrir9#T$*,pf;?$WXA`*H+J,KN#8)cq_iFYT5J)jMVJ*VpiB!tETh@mW1:C?@/f2*tK=<P[?%S^a[6Hf@X/cPh>lMgjDBj*1D92;S/%645%CXIT!k,HU=n#BRJ/?5E]jGf7uG6]UB3T,LAZ0tILKpV`9g]%92_>Z:?W*0-#ceKW:n:-F0Pa9D=:(gTDMB+1lhK>8Hhg/pCBjHu[f4pI8rW#lg`nEkP>!.Ys8LWACAcY0q'mSu`espjj5Pb2/rr*GuVORHIq>5gDrX\OsH/ACS.S3cFI#piDd7VTM+t$gE0p.)cI>ZeGdT[Q>L.5cc3B8Y0M>YIP)uDkqqh+nI$:B;Urr>9&J)A(2VE<8t,)].%J4[-hb_raMZF#:gVHB%CC5m$BbWOHrH'\YN+)&0*`d&M`iWl\.WcNZ&rr>9&J)A(:2thamo`tHn'^n5p-IfV0IDf"'4i=&OgHccFqr0>*ccK3c:/uWqp$;!D9+5jR:@"4"pS#o#['"m*5FjXg>(=lJ+8>8':%bF^rB^G`Ig%4EI>Uc+=hFXMB!Je3bN;6c2fAUca^0XH&aDC@ktR2Tg+.Fk&T3V6q4;(40?-!tP'HYt)s^;qqLeeH$:B5Urr>8[rrCrm8&)L,rRLA1!Re(Z]>@THN`;1j\SS7fiNnZ!cN]*PXjSXBbjLX(,"mb7Vb@jR+,*=*D*R4K+8bg^VY8L<IUW6V^Oi$AH&IuLAbZk?SSF9Y(e.p\2m^TL`uR?QF2r0CW6U`Dj@KqT#`u)C)4\5eEkaMVE(:ntk4[F+IUW6V^OhnmD1Ca2+8bg]]h^?DUY1)!-VUs&4=k@j*31+S1,/r-5m4Vd5*W<T7r5IMEJ[q1ba"Vam?148*grpqgL'dPL]78[6[<JI!'`1;!8h7De9Yje)G/aeD4SGp/8ad`Dt7C?pL>)V`c4nFLu)>8!7/kRpXl@4bA[4PL]7/c/P3R];NrB,R45.Z5Oq!?J(Ld:d\\shht-@KrUq_LRl"%<m`3M5*u;.pCBKIFN*:/Ir^I`m7B"o<V>6\D'N%sQ5tuH(,@ka#YTSSR;lH>t:\[<T4oYLIRt&N,rr<=SLVN$dDtt=+U:'^F5FMK45?=QWMsa%^r#u%\rrA]d^Z9).!/*SSht.5ar/GR@8%,DpcgMCF;>s#Y,8:%frr<RZcmIZ@1k3@aiU?UGg\s[NkbHm3rb(t\eYrKJ,5[LZrr<=SLVN$dDtt;9i=GGPr;pj9!$b]i;=1B51],)Te:3U/aMe)YKKmB3oEi#)N?@YFpj<!k2ZEc>Xh#qSeN]K#iUpqMaM-_EJ&3;dn+m1Ar^O-i=5e!+gIJ`9*B"bil;eL[T`*HRKiidHOndOH>lOe_^Z5W:rr?J52u`kN@AW@kIl$u>lI:<GIE7cS&H;_@J']P"nhbj5+5u\b"P`oF[cjXVWdci%_s5a$OaY<hrr@^:_r((m\,;4-n;$dcrdd!-!0OCp./)1URJl+;C-TeRjC3VU+5u\b"P`oFO8)*?4oYLIRt&N1h%Y3NT?R<(qR%F+?ZIkci=GGPr;pj9!$b#3+oWP_!2*'$jD/Xj4ge)JIs?BFO7Fs7(n^;Qpj<!k2ZEc>U](i)!"XS+-K"AO[m_@lVt3-c5-7?N(YjsFpd=sBrr><RJ&p/u*tN'(D905nY_F$G,C5AhCJKa^X[]DQrpd'Q.(cF]\HN[E=dk$Y;^I];L#m^L74`HB-k1sZ>f;(RdNq0K`I-lq1>=MfSc8Zr`g?]*55L'6!jun<HG@VJDluq9FEFlk2?*X_`g?]*55L'6!js->S8!KE_bg@5^fI5qom`6^f'%TE3a+&&rr@`49E,!`)Me:n[3+n.Bn,`l;#^O2<hnsQJ!Gf?k^PWS=t?'A!/0N.rrAW/L].@_+7Pfb?h;03rrBi8U[%N%Q&!rSIl]Vo/"-D;K]bu-!1k*arW9JLn=8`Mo>:M-rr<('O/ph1<ZbP>r93CG`I9.]8AFYkZTa/EBu9/gXt;LO52mpA=X0Lu)E6qB`l]-JZ]K6soM>6WFKbN#J,]M!X^!NtHYj;6J(UUW]gf<?<gerJ!nQb"0h8tdO2d6]ec&Sk>G:uYoFD,j3j,aHCJ@l4N]:op8(n^a`WT/Jgg57RD@%]$2:,DYSi>(B77=W!<De8MWrN;Vr$PZDr:.Q%!5MX1lLfXlLXt[=3]_"+RK!8?lUh*VSi?ZLp^5N#_KD[S!7)Va!;m"85-J&`=FG(Bo:r1W\Y&XloUks>J,]M!X\&Nm$/UmG!'IIb!:U`%qRp7t@J.2RcAnKRk!.fddXUGFrrE$#2';=Yko]N>qu6WsRZFN"r`1+FU&=-=kcSFp'>5XiH!c'Z1K"/P$0IBM!'II"n/82$]jKl0osu6jNh2-j5N+`Q5Ne=+rW>#]dl^j3C>+9lg\mgYAM++J(#XLS3Y`:>Lt4&7RS$3=h4fcW,G6NpU]1<:bJ3o5rrDm%X#4*YrrA-lhu.PEr<1Y@i^D,OAm^3UjAFAjl\POP[Z+bk6iKLp1]FnFk%eMX<rOAX=e6T-0_A_6L72gN1tH9U)JQ)fBqPScdn4>OJ.U1(.ASd#L72gN1sc:BBr*Y@J/W,2.AiO66VTD7RV2^21t.F@ciP,"V)6Xd#\o?kr/[-cp$4:'X/;k!rrC.9@K-=6ZMsnsg5bXLr^SjoiK*c/q4525;-9A4<OEqE#$q6/f,+GecqRZCg5l/a0)kq;MuNe@-E99C-@ZCY]HR:T,*&)k!*i%c26q"^dBD9A_YtNkalUV@-!9.^1G>(<!!NMu<BPSRB!34\mOiW*$(W8tee4Qj?9q%mO;?&t2ukDL"E8T5,.=OE:3(f%o<HJ*]H^#\HeEjL2[qUp"?n$c"l#])l=f:57!@0T,%="I!-"^'JoF2-n4"t;Y;?=B0!,k++V>G[V;AM'N);cJ#!QE\j,/U]CT$k(1KB7.ohYG9r0aKtVRam.bPqRO>ccl<Z8I.='ZH;k\7!5p%\nZs3:s22M/E7m[!p:0[a2=/Ric>cG5^0:jl8>V`cIaH`BRc`Rf<@Y?Wj;Y:\]+J6Yt0hULARjHLiprUfQ_*OXp7<Aglb^[iGqhJ&As4l["iEfP7I"#$0Fn=-u^eOihRaN,sM8c:><X@nKL$V+SC1%Xs/kVOGZ<ea=SAPGO^)('0?*9nMFo,et?pW#VFYH<#mJ74b>E.\A7rbAb`;5oEpdGPg9o04uk!a6fS']77^6br"!@TmLntQtO!d=p:MQmRam8L/m">!utquOj?s"\C@nm*l75\@p#l].\^WLR2=%Y)&l?+j$(*d;i4Obe]E&l-Z;bNh2RUm2-3_J97'W_Rqit!:n20QPuNgcR`MtO]U%WGmOmU_?9E'<>6,"g8lXdC%RQ6F*dFM":/U-nlc'S!CK#W09jua]aYh7e\(ZSqFWq+>dkP9AAHRFJGeb1Y]m1=VY9i`d^6\J.GU&L6</TSW!$NJkr1r@&:-et!WcVdB^X)h7=I?LGo)A\GACF7?H#bJgRVdc(<E2O.R>=[(1+Jc.E^Z+n`NWR&]Y#F[\3BMlE(D!O&^uVn_GXH)P,fG32uS4scns3Rc)FEQFaYk.@Ps#K0T.REb<(Z75fQP",S$'>Y(qU@8E$">SgE+p^i_hND'(Y@4a83\]iVG1:[7r[nE,4'Vq'OO_Z'VsCDoQ>YG\mc7Co"BMW-T@EO!!,+;-[WB=DX$P4%`gCY9l&l:BsCOi3SEi\Ie?o&Jh:p[-U1)GWYjGer(9Qi=RcL8`f*!6FtErr?B2drTMAGA`I`pCY]i5Bs1G85d6TTQ0OoeXtfYLUlq]QSc%p/<=8a``TYL8-J>U7Rt3X>1SZk\YX^*rr=GG7Mq$)\AHtk0&7HG!&N'%U5J%oJu`WNndN/1!3S!T!2,de<OEqE#$q6/f,+GecqRJg,Y\1Q@<c83/j(k^b2n7[YF:h@&lmDQCcVGE9(,B(na7GgO>P&l&u9oh>;N5uFj#!Mi,MaZ,Q@`fQC7aQ>Y"BCZ>3(<C94Pnram!l7F7%G7JU'.)C/X"Z;#Oc4H^OS4GA:HPF#MSTE18%#OBW-F/D6E/]<egh)o\sE,i?s1FXAu(=1ngnYVb9BeKDcfCY&&-sG4$[Jp4bAM/fUR4ONWh+o;u$T#k*5Iu:/J.r%+kE"5`OD1FNK-XN"&]E+CN<6EP/5Ae$\7G.q3'>a_9f+noI6gb_faq@l-)=6TAV`*(T/Wg]A,<I12u5(,he5r0Et!7C[Ub5Z#NH]_&e6TT`c*`&e25WG:.b%/a!u(nH!8RnedsTCU[D[*,g)qZU7h\Y;,rrQO3TN9>hiTu$c08\\Cec@0ED+9kHD"%)JQ(H-.G\S*pCog@[K9GDQ[SJn[eOT\Qt.2%KPoW-RAQ;)b>cSW=8C8,F?Z5@8l8-&41sS_$kQK`d#I9RR9TPQZ2XPlr(U-Rcm$MH"%pH8L$#3_d`lN%!.Rp7Qp$0HZZZPUI)mUO!i3;bZOk?eE336F$"E,TXhVERIP!p"GFam>qBSgPf&="jd<:jfplTEq52q]1!f#2\=PZmc^P7VgA)RK5pJS3<e7-:IaV<.5/nAGLi.(Xl3;u:m;*cA_#ta04i%-K;5Q`jR:Vh$So)*9EWZc`XtThm4H;JQo1_'+jHYhg:,7$,c<Vn^cI1$$cT7f,3rhae8s-Ih&5VOc2B/A>2:V5Fkhs!X2DAMm!$+QlB!.S:VsPec8sC,Y)lOP;en]IT,cJf'H@SIEUq2+pX_,%_6;!2q=/Z73MO;je8s;\'VgJ(c`FZ>dRTkWO,Z$fF2N>95J=mFmT[I4P?Q!QYkXe=H>njbQ$k@&@eN5G[+"TYBemIZGdZ\P*Zi#i"6mEEcIkprLgegKTc?4hAe:6NsGQ.YJ?iL*l2.in(5Oo5prrB2TrrA^\W;K2Sr%,qYO8Ol=DuFYtbgsn=6c2)8d;=7g@0HFc1!:P@=W8K9P?Na\g'@Q[D>sSl>LoQHe<dc@I1BLG,)W,uk-ePs@q=%_A"OP#+7p8Vr67(n[mC#oTV]EcCHl<-q-VooopS+j^@Z61BrlC8bm46"OFCf'pp39d!2-,0RA8Ear`Ah!enG'`3r@=-Br81#i@E9ikU-VtBg:Q+d(ecl#Nf^n2*[B)_=a6]cG&pd)FIX4`EFA^"Q94&+n8<_rr>>E5;Pg7WVisf&$41XFn_Y5dnOAF'^1&=&qfd4f'udoUF0!L"$#Aip,,("rPA/q5L."8CDpogUZ-\8rdmsqFGIg20Du#]r67H9;u'eU+'GB:lgI<BVOGXk-II>,,7!C&Hqg@8!741WcAuI6q-Vo!=eko\mma"JR`td3KU51.!2,98SN$N\9cO(`&H6cu)P>1Oi;1\?k?iNm%5cXEnKs=s!'pm?3be+*O8f2G#_+luNDJYcE.)>Zo<5hGAt!Klpl@rF!2,!0SM^,"8H/[^pjY=fNDJYcE.)>Zo<5hG7]G&?!6FtErr?B2e-Eoq8,WAe_thc'C\q?9!$,4MXNN"r=T]E+>#M1Vh6cm*ObJ,RUnXV0h_ON[H5.,k>fUMU&-sD/60\n2'EMG83lh5ImJd1Tdf0<$+5,40oB1&l!.L:4.a8]5cac0#lrO,2Z2Xfr4+I/"^Yq]VFcZIrg]%92V>gN&ZUGk[\8k*E>PgJ%rd=,5!:SA9!/2NJej&chDuTfdQi&>X'QZIsaWAE>m->bho=+`"^J"P?IqMm`!7.4NrVBmjX#*\tqhHGD'u.)VJ*5,7rr"MF;>m%qrr>6+rrDfXJ&8;77l0QQOmH-JcE[BLT0%Q"oY9?e*\ah)>nYqpU]CDpC2(R01!ncD%<WE3priY%G2N!.dsq"u)I1UuE_!C<rLIHu!'YT+!;G`-_N4'L+8PN;rrBf,rY9%&I*]<C8$Q:q3lh5ImJd1Tdf0<$+5,40oB1&l!.L:4.a8ZK52jU)`Gb,/+8PN;rrBf,rY0ip=T8BIS\P."?gt*Q;9\om,^U9@Z`JZ>cJSX"0DJECSR_["5'Hr+pZ[1EXO0NomMqAU<rUCLrrAZQJ,AlQiCETaO8Sh.rrCrQrr<D473'X`E_!B=q`;dsI-pq6n'_49Kg%R[BO?-fnAaAB;ukFt;W`DFOt32&721Ud.&)5!.C.,:0g)bQUhC,l0u*d529\SN$#]LZVs%4VG+jehl2n$H\Bep";j?s419"Fkg/<:qrr=:CU:IK&8[U5J(,ZX"l"NB@-e,op=O]S(V5s;'o)%&7RJh#iTA9GHaQ]Y+BDrO'8,e4%6iQpc:\[O>+8Qa1&,YU)p(R#ofD13Ql$<6Rr/RA+k!.fRe:6[be3EDuU](ms6iMe16iQpc4bWaIp&8Cm\mBl-rr=:AU:GdK9!o3+(2s3Qn"lfY'"e/DqA+#L!:QbZfMB]Z?fiG7V<@S;niDZtO,G&:nK3AUq)%59YB6hu/bKJeS/f?j;^@<i(u2`eU#ZFq4CYugrXujC!;[J7rrDMaY#iW/J+/mZOtV2?Hp5Ak[iJH::ZIN"fH6A"_L>j<rr=bLh(M"'rrA26p`oZB:C5][ldN5PS_F%>?rq$&Ik$"r"^DI^jS,g3\Sq790>H^S^]+;JQB1f6DnkL>^]+;JQB,H=0>2k&I;YCDh#@Aql=d>%rY"PSqA/Q"!:QbZrY"PSqA/Q"!:QbZfMB]Z?fiG7V<@S;niEd$Q2^i;^A%V\]Dhm.l"NB@0>.;bTl0l1rq]e]K`&RWraGK2?@R%r!$eP=\PMuo00eZ*^Ae2IQB1f70)kq8>e^4<^6Xgg5;0^"R!ik=TA9GHaQhul:];"H^\Sa"^[J"orY$fsqA4(bn"lf3:Wr36jr[g(kP%433m&t:rr@_pli)Umn,)?a`g>]&W9XbebGF"J8Fa'EdZK+ddYC/'?hHcgW_K=<r1Ed*,ns3YSH2:JW/U.2Wf3*f$<jR1rrC+qn,Bi3rdnj\G@=(r2KGV>j,:'!_r9fdkgtb(k^`[5SFl,WMDueNU.%W""]\EM!:23X_B8=sl(@XeIkt:u[]_?2O_g&*/3UsLlR=+6rB1^HRV>JQed"a#RVBd1BE8Q!d[FmC">nS,05i3S:N(.t]HS1\dnMlh<)Q7,!^F9OkDW=U<*urcZL,>oD;,5^"^ELm+Hc^,N9'Xkk-*IM>g(j@m2?1jeHXQu0gO+'4OQs9Ca]:'[,J?S!5[Ubeu@A=9^kFghWB+HP2N&YW$,&:TH'$o!3]a*?EI+jYPirS$.jcP^\+N#UL_hJ<B?('Ac"sKg%LK5ir_BUh_.-=BCu,$,JRBa=t&<sUK/dU^tH5?*HTkliu-l74H_AO7n%jL-BQdcCU+H]IAT!Xk3>#O1p3Kf=4e&.aSLuYa5NSVA8,IRG[;.K;9G%dmug3,:3>S,aer<"4s&;sBr7-D9gP_4RVBd1BE8Q!d[FmC">rZpr^Y-BqXp3O<RXpKrrD,-Yl=^,=b!8b7sF1s!$dsHnAkH(r6F/V.'-1*WnNO3K.d0(l\kcCkU*C]D+FRkQ[e\IrrD[)<?I&25D>M3&H;`m7nip_Xs<b2fencJ&,?pHchcWcRB;ZQ>POBSApA7P_pNp")JQ$)doi.GBr7-D9`Q?41o?^T!fba#c#bS?/eT%ZH#Mh8]j3oLA-*61:-%`WN8>Y:>Bg7W'$V*4qlVNhLeNf=^.e(C:3&'n7[e*]<`.P<8q\L;UF^+T"BNOnBOR>0l3c9s)-7rbfEfM?GO=7Mb=ZPA+Hc(cXW#Ik.?2>M"6Zj)`]`qI[1+t>lH-)V?e1mK_)pEJe,5>iqG"g)dbZJ-rM3]oISO*2B:)0ToZherlVkW427:?tG74+FOehQ,IkYI[T:7u!8a2jn]P47,W@"^_;1a"!S,TPN@mcqA^7<b/g^s[ThF+@WL2FPHY<OI!a#X*68eEhqU3RAC#?F5B&)^%YFXa+C8u/<R%MYTIKafknPg`>mTSAnL9d-/6RR9\]VLT6.)aF-?/3iIO?g1Wd;R6<&On-Eh]k.2.[2n/"r/PSh_]SD=o/hgXU9QaGX(jli%(lN>XtTeTTUN2e[3,2K?2joV(]OK^9iQQe9`>f<pdb<P/MmC9O614gei/83jAOHVl\POP[LH5Ti_.giiP1!U7JR4'%4S0Cbh,9^gJY7[7CkFd_V'qb@k-gmV[#3JC>#argqsVYTj9hR(6Z^MWfM+gUEH:A*_$YB*.ul"[&4'ZrrB1FC=I4WqUL(`ZSo"a5Yt1Rg./i#Y5-Rb?W!$.i7$9RdG]sn\q-T@[RT7A<SOAOmW^j@<a;sMN<7g4&k0D&%M3&Qr?Zo#4WEj=2%Ho<^V5&>XXBZViB(3eK?K[n;tD^)5R3A=<f3,GZdWtE=-?WgkcLWGrr<IB:TJ3<dkj!%KqqVMhFT%o@Gd/@9bkT*$b@3cQ$DC-0]W9rHOtXZ<b's6Zhk6jY1@r`\UV3I9VI7"E^'nG?Wu^GqNB[YOL2>FZ%k:o09hCcqOFN%'eZ+H[Jp5Z@[1eJg9pq\9:)L)/>8(a-+p]TP\)gf<!OJb4Oj00!Y.N[7<<I&dqpX>9?VZdTjnd4("-Yq-p.u*c:Q;;gQ%Q2B)ZA$]9mu*dAc]ANLYFS_keiIe5amqWk#`+lh^D_pQip?[dS2CcJ5L4^gm!WC$Qs6V30;_9'&fn#6]JY&Qr.Y(6D0P[EHS!DfkBOa3<JM:k@C*g,%J)eQN?jUse_5D=6@!m3UDF+X#[Sb`IiGqpTZ!IpQZcrVZZqiOqsAY3iA4dMn"<F?"D5"L$Dt.>`Ce/F<Ra0YGU'UKIV+oc7g/.I?J?o]=Qqjpg0VW54KWKPbWp]5Ir'g7d!YMAqIH-n[+>i`rL7*[Q=?4MO+9+<7!Ndr^kIp"W0O]%_`*rr=iI/Q5HTQ"#@Ael`rd,g+("kRA)<(0><Qg?o97E^XpP,P!^UTO.)ne):5Te)^JE&$r#0oO0dnH/s2FHQJFeS^"RnOeb?_/99Rd+Q>-n`Wk8pa5-Q8%Xi=s.Od9fJ&1\"(ma0QRf<B'd;&QJdE`N]r2ERgN)B;Q4'6V1d/-b$;R-6%O3LK"^/t=77)r@<@3oN.6;C/Acgq^s9dukq-&?<$Qi)o1+8+qQoW*_Gfmh*=@K-=6ZMsnsg5bXLr^SjoiK*c/q45J=;-9A4<OEqE#$q6/f,+GecqRZCg41PF\c<@:07Z6@W]Qqfn?X@V5Op7;TCp-P1Ku39^CU+6cVMn=m-ZHDenARI^frN2c"R+W_J,nI!7/BQrr@SO>nq$PFX5I_Z]>WSU8^RA/XPO?-CS_Brr@_u:B(<dI7+#7!EtT[b>/';T7'*,!!-90qRp7tB"qQDr93#q"g+ja<jCC`X"5ubW3#*b4YfSdML8p3rrCBZU&P+CX[mhJVuHbC^&J*3!jt7$>1VeDorL=Fb`23g21to/$%ANH!'^/W!;HoNTCA1LJ'Yh.!<*&-0<<Y&<ZbP>r92rndo]uHQIp]5[Jp7+!js3AAWQcd?iL,a.oGtc^WOI[F?c<8VQ!@*4L6i@V0*-:Ll2iIrq\s2>0];_Z2XfrC]=D4"_pj.9'h&jgA_0Q!!-8lTiHN5^f&-[jK.P>RqA+)(]G&J0DY=VrrBiHVOnRUJ'YP&!<*'X0<<Y&<^3_5rcE"GBrk7mMa.%2^]+;LAu%U<Zi:#tC]=D4#&6?*=8>sHDMRhYACF7_rrBo1BE%rqfAH?3eDL$mD*R4;qu6WsRZFN"r`1+FU&=-'MV]k).?"gLF!HjeZIf8oYQGn*W=<@0'&%i][J0Y&2'MK9YPe9)J)E+]F=TN6_.'Y773lZ;Brms%8F:oigACmM!Lf5O&h@>bp:gP,^h0G9HG@V?lZ>@^)Q'LdrrC.7@K-=6ZIMbG88Z-)gACmM!LfXSh0m&X[Za-uE081X,-soS;3U[T.FFZ'jK53TN,)lO<99&bGBN_QK1-JU.Gbb970"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70"$!70%i;f`~>endstream
417
+ endobj
418
+ 108 0 obj
419
+ << /Contents 161 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.74127609a36f05e363754b7df7d18470 107 0 R /FormXob.a790bb62d3b1e18c00c00cf0a78135df 105 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
420
+ /Type /Page >>
421
+ endobj
422
+ 109 0 obj
423
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 405 /Length 43520 /Subtype /Image
424
+ /Type /XObject /Width 790 >>
425
+ stream
426
+ Gb"-6#?2DpSu@#!Xo%OtpV&TTc8g*cR<7ndF6:]73HO<u##K?;#u)*K1SA4R.gUq3Pb]Kh0r(IP634oQW.:TbJq0#*cET0ro@qgOjD"f4)Y!L'hcfHNWkE3"Y1gS(g/YM#3<0$Zzz!!(4VhN8Tt+<VdL+<VdL#QkJB!WiE)!WiF4[K-R9!<E3%!<E3UgAlkXJ:N0#J:N0;D1Fo<5X7S"5X7TY2Sbt.+<VdL+<Ve=)dlJR&.fBa&.fDZNGgPMQj9hZBTrFkX-]&DI'.!;8`au=;+/Y+ebih1qeis7;u-48gm&b"41TiUgC0ps?2B;mrU3aljRRlWHbSMUqVEbAP04^hO8NTpc<%;>?,'4_bn/([@Tr35X)lhj0t4?7BPo:o%JZefJ:N0#J:LbgnP+($Qc!mkQmqKQHflONnP\kW4rO@im_O1Mq0X#YjOKHnDiup64oWqUONU'UV5]mOP$bm^Fm`H@-T!6D$d"7onfK0tcb/MVP3#q`&Pk#l<Sr:j'`(PsS5DXZam"u3q/oI7^?H1O+<VdL+;T<OgJbb;=5UG1B;-05Nk+?oSWM8IQcj[s?G.DN<S,3PaQ6lC?esbSf6p,qJPtA`,aNKi?3FS*8T1DEV.^Ap0"(@@iXN8SG>(=iBeNDDmoRBoHiN.bEX]_;,ug,6ZFl&EONJl.cHfQF?1O#g(7j:6a-VZ#*I.gr2"_(7QV`Rj%cuRi/#j`^n@+_JJ%(pkQOfF\*1Cn9a+u56*I/stBk\eZL`/k/mOuYkk<EQTpQ++TDarJ;CN!Oi4?A%gVJ^C9RIr^*WEdBAs'2G.];*hcM+c,7*]\qkjt!\Q&)YV^l"4mGE\W>IOn\Kmo]5k(,W,nhP1EDt"eEOT$*U-%_pe0?VF3$Tm`e=(8C>oh<)#\/k^*t`CMXJqlL'JSA(7ocQ\q4fY5(6_!<E3%!AQIGnNEhLptMoapg[pn^2i^h?B8>DC3^\g<5Xklg5E8?V.Ac]8`ZE,$aH`%=t]#dp%n(34#b$^d9t-Jc$0qB5<H'N];"6*Z)ET[$&+@\An/ZX9?HY'pdiU9:6(:GEc0@$HhT2Sp*8bcH$^ps0()0frlUI<Dr,RAjkjTFhb`H7K,QbECPN0GJ*Rc28l9L1.MH_-8P`7>AX0ikQW3QQ=UfSX?M5H7#`Q92$(iZh\in<`Cu`]q$u/+pSAap8]Ol7tW$OCjh)cCELS#kngRC.jZPo8,4CR*!UD)sC(cNkRD!9'MRn9U8\Cr^=11Tb82MtJS6?%*WikeU:n;;@:]RK$U^hA.6&F>GH\;i]r\5Wa[36Z/(5X7S"/BmlYK8R<d,c(g(!9<\2W*CSjK$r_LZ)*rs7E?nAnLAB`IS'67j9eGZ<6SZ>(]tetTAEkbH3KpnMS'W7s5a0kcQDJ":g%gFm=fV]nWZt;H3dTFcR;L@:6*C]j#4Y#1!X"^721GQ*4tl-\%K;FUAEoJbcm3GYso/e!H(^??YJI.C*mM@eY#BmLoBm26f0#ai"modoSJFrMc(7`<#5_&:Ci`D-Q1F0\t+;&WZrp;LmR.Kj't<95u#Soa=m7$3RY_"XMDp#-P`QA9@>]1T''!8EptYi&gs7_KgGClcPE_&Pd$:djPRT7*I[Z"g,$3!p)NVU)?1Chj:IJ!M09\`GA8EG?R!'\Ls@um>6P$.!<KGjj-pM#4#XL.M[%D^qI+d(4+H\`q+@G^bfj9mn1j\&S`Ao&7kg^!Y!uas\TIIEqW#G]WZEKNh8?;**..3h;@W11:.OE(f5KQon1je;LdBFG*hkC=2nj5r0h*[P6<oq1O3t[#57K*$i^?tZ9Nc(Yh1^tMJ,BrK+dc,iKX)[lXQ,6qW0rnG<J)2Q,,341%8'a&E!bDP.9@-(#+rLa13qDS3?XGWq]9)lR"Li,[to7XZ#\i(FZVWiQ>$cmE<34!77r1NXhW;W3a^_6M7aJo$*@XK\p;7V3oMgI)7Kg@#f<q.UGSqG#mPO,BQm($RTR\].n#^2d2<1AJq/B%J68K7m04;N-+[4Oc40.S53a/:gk_2Pf3WJV/[ke@OR0"=,>[k+hVD2G*HWX3T.=?:B;J&Q8^B``Y.4GmKr`Vre-E0&p"$BPDl_9)/nhaOnk;PVo&t=US7)\Q3`^FmiNolqmPI`0HnK'@j)[@pGEO^fZjPmS%;PTJ:,Sut,9j;'i[LI`;ZGbLqn)qYg*b=3;=t9PcU[gTCrndO28u48f'VZAHmVQWX\XHF+hq)Hp_7XEQ>m+OdI/Dg%6:aP48[k"HFcd&lcOWpA4$70C/DhRk]82Z:!pTa+5].@nfH:hU>6D]1?eqhV*]FH_4Vnn+<VdBApfA"iA3@oppS]EG^MOUIm#d'^2$grPO\P)Wup64jtk[L0)D)6ISr8KOsjq$(nGR[mp5fscRp8:bXg,BbIZ%C4d:9[ZC:=UC3Woj8KU_PB"(fAGK\M9/RHs"o,g#-,.W@go]9Rc^NtO$8X\iQMR`6PS)ho<RM=4epm^=tn,#oU>J.JP`CsN0;Ju8(Y="FlB<iHQpbJ7f<`r<n<Jejl%16)[345QfO2[H\G+_gq4rJd4I)ZAejoD.i*n95JOkoa!<5Rjgj93(>5*&*u$5aH["9\kG,)YhD.#>DD^KYt0bq16\3S+n9h"oALPfoLODYe%X<Y,fR&.fBa?r.4lcJEnEhFGV!JE/Ht]=me&l*Hh]&d/=?"9\i1(_d)U"9\i1"N9X/$jm%;!WiE)!b/S="pG#.!<E3%!AW=/K7\W(J:N0#J=(2(5s[b$5X7S"5g2.9),qUVz!2,'\$q^X&z!)*D%$31&+!!$E8J3a29zbSDl\z!.``("pFu,!!!!Q>JQm3z!+lTU'EA+5!!'fN!J:FRzQn;]Bz!!'>/$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&!X8f.z0O)>cz!!$U=(_crM!!!#7D#'b/`>:G(@U/g_jk,&(3q9sunbY:/N,PkdYh>QcI@SX\joTu7Jfa?DjclP?2t^LgE6:ecL/CGt>XJJk!!!!U_2gE$el,'-D]$IT6@h\GD<&=\Tq'oWj*Y@U(5+tnZ5B;8bj&RJXos@Y!!!"LT9^R5:lL2%j1f._;cFjLp"Y^C!fg)&AFPM$d3F*-%Jq[@q9A79Himg3?>APIk090uo7*Q*RLRmAi`UqVrWbC9l+`p`r"J,i8rCKY`f&!<<iOEZOV[I+9)-0JPFSQ`]D:6E\dA8D\,V?Z[RTe<-cfX`\bScE+KAPe:?i^0`n=]t6N3O)rdPF^r#$eYO4E%)cehD(rtQj@0<(:]Ek:M0nHMFlhjGQDz!/lgYBi%,C^Y"0^r4c-=9GpWXfi=YuI)Y+=K=%R?>T-*X*#;LiV4QD_j!\0ln@oIBdmPCoTMU\i/k-sK:9p(0E[.KS.:SW`mehAZEa")>aR2J[[>E@&(U:##M17;q2U7slhM0:TEqhN0kPh&U2agoUQCX7jIi`L*Mg0%Mq\:>TM`o,r2X[5m3H;V77Jo@K#:iEb5((P9M@o9#k!oj\!!!#7U>s;/8^8Cl1dC-8q1TFPk<ikmnlWg-b^UKkqDZn[^VqGW+"/</m!^ST&uS]`,Ac1)NV)E*f_h(cTVgd"h`)6,HW$c6K:8<YR%NmRlI/("p.jKOF&3-[+m[?:Z.bS^XoPhda5IS2X9Das(JgGrAPdLJMgqTfrh+QPMXuQ?pA<f$p.3..pT(01Jnfd.)Zp'?!!&ZpI[i\1K_>>'B?u:,Y?Z-A=:tQd]s=.-lCTN7SuEJ5BS)pa[#O'jQESGh<,!+4m=.ushlB]Z#tBm%TKK2d7^fC@TL=c'`LE%haoA5%.2XcWs2bHkipa;R6qp;:V>Z_R\d[g8EQ+#*NP=4*C/E6+2pS)%)57)Kl51Qs.)Pq_.@d'bZY<nLz('[!D%]VIXG3h/HGF8L:9>p/VQg^gUrBW/>Z^Vl?Ek%f1,\6H:N@83V4>sH;i"+#J>rfT?&\!>gk\l_^nO,MfW5jlWK3T#'Klc^4WZLO>A/>Rl4B,,*3;)(fIi&NbA5FJti!"GZ^X9o?fE:mUiee<b'N`rF8I]b'F:F*%"8iZT9%Z%L99hdTms!na%0-A.!5P>hLH`];$>MpGkPpPTn7P+Ds+2/)a!u#G-Xh[-IXqakjKBsT^S[N,bAJ8IVg>@90_pE,kn/D43VflNLZZ`>.$:0\qb3W.r7BH>e]a@aWFsa!'M8i*EZD&%s+:sX#C:t;j_TU#5I#gWDU.qT3YZd2p%Au+`<ZkZm;Ig\@1t6jf9EMSUL&(U[k"m,H]st5^U#n7z!#?GFknc42S`a-9RJ:\L#T<Qas.J.q2>'J0QI:3_zckJ^kTS<OI%,r48Nm90UzF2q1IK)u#Q!!!"d+2FNLz!+lTU'EA+5!!'fN!J:FRzQn;]Bz!!'>/$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&ncK>Yf6Z0hRu#P<L>&\=%'thoiXk82p>j3gDEh:J*5ATNL?!qb[*:N6Vq!TRrm3T$+`glTY9E+U\.6E8:OHbK=A#]C*$)8)XgOj_NkXVD>nPC$e0!0N@CZ1!^4<;YnN.<kI_+LQdFLj8fh-[Ul`S]4)HcV0$gRZ`qeeG)<uT*WVhMeGpb`8I:O308Z%#eGOJUFf#*+LFI`g@kU67\:+p]+\)djF$dN?0d<j''b4Q4'M&I]F[nStli2)956E2/(9:qpss-<au$`5-:#`nK'#"4toTTm:?L!!%PAOWSL<cDU+WX%:L<+0(r.70Gb&DA]6pW,Sb&Bt6^kjWl//4RIt91JZPk\3rca.HERk9cGR/P&U;<n\DUC5Qh9;A<rg0>%R)FYHXSC'+3B?V>#D^%<eTBcK,U-II42H-%0`KTGLLI]FE-`T@D<m+p#=Qj/%aHQJl1QdhFMQ#R4W'dC5,U;\sUg[&p<W*d)p:mKXTYP_T,P3-?#WD,6E1mp=B8d`9cn[]lCAC4-h5CN120*Q!M?#\c_?SFl.M++A%%E1$#]RCO>Qq@!?(!:\hBE._?YQ/9reTRW'F'6+s]%#Wg8lI7^"D>\R(L&'<@2a'8u_e&D[*VdX]^(HW,)UtecDu5nq-CrRbEnsFt_]5g;U=%o"L%#u1Nrn-2=(7PW`J21H9%m>MA_LmcP[8K$4"$XPB+01o[_OTQI8@KN+p$(tKT)qL_eTZ^kh,;eI4<6`U-T*s;E!iCa&EP0m8uV*::U/-OY%3O)P;\"Yr4Bs1U2$`RTN,t-rs[1lYL3H9<ogi7V6f76m@*[LTB:tSX^[9/Br#o@c$jSc&`%[P5TtCG\hQ.ZuA0Un(C^5/K<<(/_:t8mppW,pTm/N2fh.[El?F[K.hH6fg_7R<M.sH3R;c8=[FAK(A?p,'q.3j0[pl`qoW*ZK,TA>(hdM&<2=P@k,1HPS&gIqJh4g9+kCg#5&1RL/-BorMe:TgG2u$,Hem8VGHrC\31iF63'5?QqZ1TcVWO0sHi;b/*QK+`J6EZQB'L0'EDV1X`1uYC%?-7)X>Yh^B0I]8Mt%82_jFV?iX.A(*B)F=c6(M_6#YIh*V1<Kh&T0`*HjoeDP(m3_8n]GZ7/4&.>N5&Z\`#iPBc%gJR-B%FIgt=B`J,5!'c^YI#;Qsm]T+iMHY(L-eWCX`E/Zq4S1PM0W4[]0!"qVPT>Km]AIpAeN`oD5NO=8VF03iisYk)K)Ls$q?@=[bqSP0kFUes4cA"'&i0nIq:a'Bo[W)C>8'/]Yuu<fe44"\i&`b6$L's*@95oCCXRAfq<2s)lumd1CqN%gnp\tD3a+p.gG<(HmGr4AYEpaRE]UN.X[jT]/4&0Wbm*T3qs^/)\U#[bGmBC/)s=I\U6(+aFC*_8of?l+[jj5S*$_)ZA-mql06aM5*3W>8,W43*`8P/gLL@,M38F/up_mFT'Bec^Vli5+W>SYt3DsKddhG"E>,$WfJ'a_>=L*e04+%B(30\j,Cu+JZ3`-Z':aTj/'hgfHh)"(LYup.5Yl`%.TK?_CY3VW:^5,o)6F&`OU32jLW-aIU*V--pS]]36?>mCQ7N%@2+epI<b02rDQHJA"<SZJCCifF\PMf])2D!fq&lq7CA.Nd(oWuT`"fL=f[qB)@eIZMhnl`JdY1(AD0o+bthd($WrBY`!$AVr*e(sq<J4m7GAYt(YXCDa`1!J!aSXYeEJJgWKY?^u*!!'eno>;#0bO+lD*!Pdq2:;Y<.O#KZ>7-rLS.G44[mi=G`lHJ/1X/k2'jK]S?eu9s_6E$:UN66%Ah^)8KO&cLI"DeZF1p6^p2UJ;ro'9l&4H<hoQKX2X"E?*V!lpQ$R8(Se+!I#E%gSO]<2u_'Vl9D:>J@N8I"j:T<<n5M2bp$`=?0R<jUfij]CfR'rKQj$>_7&NORb[j`+KGGSt7#DXn:LSG^)e3Kkd0mO3OPFSg)XYkJ@>ATkTQTY[(-U"g*T.b`J5\8q>OZ1auTdUBNoRs<H6cWM^K,J9Ri[F[frU'fBfe22kT]9_#5FAV"u^i.!&_.6WeJ3_JFk$d\ChT$e`JdffM1:1"8FZ8nMYpP0k.C'AKL0Kkf<c^7.k8gXU5:^@H=eAJlN?"VQZ;msP=U=i!34#.?(p]mp'JKms9Za5$K)M\fQFP4.(&1tqTk<]=F,h?S<mapX`d#-Il#4`^j:X%DSQssC**6U:JV2+<[N9_J#m(81!&/WpE.cTqT>qeXE(!,Eq`Y3g+fX+6l:/qVBEs5t%$/JjJ&,*:>(,lb'2RN=]F5Od4h1ZE1.;(5+iBq)9ead$T70)/e_T(H4Q4s*rU"b[V77?H(6?P][+3/*MHtRW]cu4RXnS:SToa4Hr/UZqTN6=gMW$J53D;7XI`DOL*V/u.##oQ\Bp./Sr6bs`K7,a:jY?kCVe_BrPQQ))`S9ISiHsp5/->FBZqi'kL9AS"50S9OV'9Ea&NNm+$T@'Z`;klS`f:b1)#\G]+>bJI[G\.dR<N.ZGHn3pg8s0,L5MeDdS<pTri!ob?6pH;'L(nfC7UfG)?YI,b%s^KCZFgTUa,\W+bq`Z1+8='q9`fDAXeXUOn=f9Ni0*"Ro+gdF\g(OoJ3d6q2$Ft*/N.45o'0afI5Y8S%)goE5\CTlV(7Yd1c_jMNf(%PmkXR&Q1Bnlabm<(fMKO<!F:?HUf.0\QXc9)(&ZL<ao.Y7NI8b%Ib&B!!$CjQnO*gng,2uT4@>9.J8brl_Agg_k3;?iF)KtUa@_AWOXUUIhFZrT[8eUF:3R-8pb2c(EX**dhgHfrVj#EL?\0>R$!SWcj7P5_`uK6.@rSQ@P^['g1-Mq[aTfKM(mO3e\ar=EXDHVWP+++\2cU`..<b"))h:bEdD`4UQ3<E)d29><">8G?2NU>#q$bAl12[:iE!#8/f4/!"RN!RG?qQ8T:"E"gRBa<Vr991$i8>])nOjDX?:.%g+sbAN8o%n*&>Mb:04[7Al/,i?&!5gh1BXeFkp'Pm(i"Lc%BgrB;dO@_I^-mKj"tqiJN8ZHOA2#DW_DBZ%lTAC/DfAJqKNInr//cCY+YXNfGh$9-MM7cChnF9ubV?U0s.<hpWpLJDKoKcs2Jkr]MZY=5#8oX5FLf!PRuUV3t+O/WJ)O<^,/QBGO^kR(D/br^ap>esY0`VEDg:/j3pJ^&CJ9K?rt1J(E.hP@BhQZ.T+]L]hdkR7g4[&"D,G3eV;iPXcIE#T&LEU_SQG<]Pq"0CNKZKUeY!l2d9+!WW4f/*>$JWYk-L!nZ@K#O+>:o(OiRYk8OR*B11nWP?\M9Zpt5@Zj<NAV*5,O2S33iq[sW#M<B8KL;qhGg+EQ[FR*#-a/VeP?qXgD7(SrhM!+c>J92k2ih6k'sEAZR:<a(5dV?dE9l9E7lQm<d'7['%UHhclE;)PCS&Neg#Zh@^C8RL+`BISo;i9@!<nFNjPq12$k/+(9jIT/b#NACa6g2l1,QHdgUeK;O7pA+Ii@Nc@Vi_ih1f4of-6`EpLFa?^LC$PNg0L.g8iiG22k:^n9X]cI+MTdi"$q&8aH)@<PH;nn&pRCC8#9R8`"hG2UHHgpDOb)5u!)4'5NNOiS?ERW@,hDIL^,dD)2)%L)X%m2qs^g=ZGh1]$k-:hr=1<TBn9h5FOCLVc>i=ZHh7Pf[RdS4_XJir^lu-CY657WHBPj^m$e"nNT0]E7i]?hpBa"@F(ctV<orEr:CF4PHs!3X@RPuJaR8YWu[O"<.>NH\8_A"g[kE%mlE7qA]qFim<7<aqmKklz^(1(8-3,SB3/tBXhl$eO!<<+%k^Yr"^]K,>SX3J6op7E7!!%P'"rJ$Sz^ha%(!WW3#!!&B<?r-h'zZfME1eE?*8#RC\A#RC]l72d($-m8Qj!!!#7,"1Gq7AnVR@W?$n-R@gu;-@4c)Hl+NJ-7-j(I/$7cjQ.A6K89X&/ns`-^;;6j4/Y_,bPr=!YWifQ<6K6#)0'CUX:>"#peXWU$OWTY6H6p!PJIGOFUZA`"EtI-n:L>WmTAI"c9c\.!prnWrWMt5VIWj,bPr)Z%U++$<<k5]3AD[8Gqt1ZI`d&)N]IPoE%QK!d_Zq95*+RH?smlL5&NQ+>F[hd@&`ljm$.hQ%oJf1tW0Y!K!Y;q#4SR\,_OuTd;O5:s*PFp@]!h(1"/`0T2$E*lX;6`YWu'@4QLHf(=o<oA^Ki-%Uf<JR;1(h!IFl$"^:X>LHMtbmBkmgV_%iZ;>%)chD:SGe!:hOfc>NgBe7(H[E[Jdm%"uXRY>&"=1^p(\IEEIlLks@0Snk>6`If?='Q6[X*EH9Cl/;"=3-3(FTsaq;G@f(a)91[B#V#AF.^[9M\`18%7_s.=?)NgQ<"?]^Oo&1W9b4B!s7Pj3ha1is(4;dFZu/3&l`.`sO&nO[;LgnF.`@)8<]7$BM"&J\c?\r9shNb?#cAnGg_(]3T)*U$OXH9*X+>hEJJmlUHi"!J[!aLlG2$\=_NlmB1`*E:mglYFr3U_A^nWOi&FqYj;6b]^KC=CAbRa!Jta`"bVH_b1!6_h1K9,.BBq]j(#S&VX*uV<V'4E"=3-3(FTo5mt4:JGLAs9hf^DL[D1S1$8W3=h`eVk:Jmo>VR?(g1KktBpiPhBr6*gN"`dk:9k`=TqYU-p"pRnP:njjI`ZBQ-Kn&G-(gn']k[E1,P)Jl`m'P9^Ygk#&$b<Z.rU$f8aYi\B@AgfU55%?eph$jtkiAp$Esm;!h(p/c%_dbOL2X82lOf7cf/peIEnh3^fmR\GZbD`kJa;hR[7K$JHg9$TDR.X?[G)?1\k*hs%"-O\5L<X762eMMeFLU\Fg32]B5T*"l=l9"^bD+E<IN"9SOtc^GS=toR[Dg!g+p&j3VZR=^2J2,`fCK?OSGDRd#i\1<-b0!Sh96mXGOC&<r_a%I:0S[W'4g@oR3W*_Fi^j!dts:ng#e_[qT9ZiE*lSRq](7gD>&]gs'BK14>LNbeB\Jr`4EKI:2]p/`tcu%_cSZ"QF2+f,[G^mN!GF7Ugf<dD8L=GM)/]E/OGC\IdI"&jJa8GV!NTIDc\$^$QXT#'G?8S,2VSMG)Ikq"ofg/*jPrK>"adS0=lO"ck3\a1J+h-P?=Uh:655?;?6uZrU=I$-hhTLWGLbLQ!oc1uR*RBe;,_$VIJa>l_o/GDV#]:h$[H<<c7gRUYZG6Ck4:ZLFh:,Z)V[FgZ%HhFW3`(gr6'hXdP*JY-1@BChPP-a0,5[_Z!\\m*mUPAnIh.lakjf9!Q_D',48qtu0Zg>;!EV>]d)6O_H$TCfiGrA`4-kF5h)qO99gcpG?32j30]\LtoV"91=II=kZ-eF2^?H2#+-W\0HfZI_cQ`@Es,)VX:M[qZYi'N_&^=`pi"O.mR+kAr<AWC2aA?J0O))F#iF5iR-:!AZ'E9R#6rD6'oVgE&67L05XO.U\+fZdJN-EG-eJ@%[rf-rLJbSPp@>ApsSk@Fc<<Mhd_s5K_//9?&[?R%j"t7a;L_g*_#3([VoP?WMV8AV8Q'2tDW#4&P=E^$&[3Q,eU5pR[[n/Vs+O`6XMf)@QD?3<rTYDuNfQmsOUp5*,"*d&M9e&iK6:hJ\(L=EcBi,oloIm#/l;[Fb"62>&/G6FY_55.]dl.F]As4AT:A$f-@<<;W'"Y5[D+a&,`Qf?LUUp\98SJ"`.2q.$&/KZ4J$Vl-GtZ*D$W?BM203Fds]lGU"CDZah+m_o";k`((%a#Z?WoAcB&kfYTR\ZrE5pq^iqol<uD&&30W"VhJHBbRtb3g!S9'U?%QgS=?9qQd$RQX_@t?W:(fT<uJB2Vom^6i0RJ>`%\eaD,F7\pp/sNRi'2-'Z)Tb,X1)VlZ"H>q2dS/ua0UB8GgJ]Palt'5EA<D,!CP&iAb6kJ"s'hChYT21AelJAh3SK!okh-Kn&sah#2p3OX8"n\$:%WdUi]NTKq(DsWfs<F9,0`+(f>*q[%D^+jK*(Ad%3W9e5ElFm>KgR$LHe"!jZ2.kd;e^@Bf\-]9#riWB.+phWBo=D6413GNZli4VTTG&'<lp0GX]2L4:hCOc`W=f>D6$N"hbq$$K4&\aennrdsZ!V^MXKJh5%)51F/9aackX$4iAVH4"X\FXc(p._)He8VsS[=PBr/&D(p`_PRG(5Bj62(em`>qt)IF*N1q%RD?GdqTNAfC<I>4]cuG6s6J<)Z^/b)#>X9QZM(5kfGVlWnV;e[pu/V<hNB`;!YQ@pScjddkESVP_dPFE1(d^T(/lC+mlB'ldobS)nZ!e)#702e,(`VqcTr\@/<AiF?;AF^89GQG3Isc:]bTl"NoKV1TZ_kHq\XRXhs(Y3^%@W_>mJADm?t]'Afep=1suWf&'plnq^B<IK`oVWr9^6]H+X\O);L5HCe`oot?F]!@Z$)H5=5p8+$gr4!jMM=9[426RK/A%Lli!SpE$.0kc2]2M>f=u(O!Ygn(AQ_D5AIP$;B#NiGe<'3R/7#EV`BW?Hm>oSb0mqS;ke'JO?rk6_Ojo._$bi[Ee]"6=ch:e7<O]N9?jdEjZR(i<YEe7'9r*m,FAeOU-6K?;lM4Z7P[21Y6??Oeeph*%VW41="9,,ipG'@&KR2gNZ>$KVX0`mth\G$0gWm3l=gSjSjAHuE^K=YEBL=+#%='Y5dW4_tII*)NHAQPT)OKj!EAfQn=Y5)S"]7e05$K^R@mVZo[<[A[TU[8eo;Km'-Q^Z(omOPR(N^p5uS_Jh3SG^i.)q33V2*:Z?U:\&!Fg0n@ICGU,\ZZYDbV3l3mBWJ@>LE-s-goiPgjlgtqRWpmh+&QXmT4'4<OaTJ*.(]7<;P8%&CVg.`':sP[L$4ipikQdq\iPR7?p^CROP;khac=,R,dkF:?@Y)2_$\"s)\aC"SBD"luR6iPfBeMl#3M8b_:(fOFY8.oR_r:!N,WD6Zl[OC"@83KgG+KB^2aM+(:/3s20%&h`9YKDTaRtZg4'FNcb,G4`[?(\0J[VNqE1@dZNf5;R^CLf&>:^h+d,q[;e-?m;@B%5S)?$T@r![[1cQ:HD15Ai:j>lD\bnA</E';T]$nTef*tjoEb!R=k]-h7d,^?cYHNcU;hb&le[:t@p2VDMq]3A,11pLFX004A)55nG'3U:Io?b3Fq9Um%<=Bm!d,j%ZE?42cTj4LFE][?.AeZQ[V5Zmk:WHJK0n+%BkaQKXW9u4IE$+>#ukpi>1-N9G^L/r=)5@Oo?L9KF^<hRBjTMNmiSoV<PbG/*[H-IEOgYD_>*c4c*^OnT:XhQ[9@@VOji0Sb_kPKZ6on($/PWoVREoIs*4b-_p?M@]0#=b`uWi@\oJP-j5>)j`HU->p,0"-M^b@d2,dO5A=pf4ia"!J;D+ph;59Gg2^d5B@9U\*DjOF!D9QVtNE(tK:_"$LOSFQ:d$bV]Jko+-ia7?".=:`M61'#&h,7IBT+p4Z^MJVog4S?G%5@Ae0.Ud-*3!tsOj]@:V0hMY^Gi/6D:ZQp;$H>=eZ$\/Wk+K7r8F2tmu*X#WS^7C8NV#Jo:W0GNAh4jI]C?I?;Qc`ptPONFG263<+^p?+X9%4;1N#JVFOtEeU4s;(Om?fpo3U[oEK_;bK0X.IZs>G)tfc)VDhS)f3@KS@B1q;*l!ns:GpY732i@QBPFGH:0G64ebl\u>sdQUe_8`WX:HT=,,+?\)Qs>j+9B.U&s.WMYf%.m2lN16R]`fr[^J(bbXFkOCG]?,83d6&!@/cg]jQ[C1i?-\SXo08mAN41R#?X'f4_f8OFRK+!_>QXHGL4eB\]6r66e&?KX03C]Gcl^"S;ad5QZ8J&kconTW5&n4$#E!9cu/,M:#Y95jAFX83ehY"=0WV/<,>&%18J$Pe@8$IV,5h!!)YC\NmJ*V626)8(#iCU$4$,J;/V]!!(@RjoR68V%*&8!.\AU!72,9!\gRL%J1P=J6i3UcjSt;0W:fWoGR^[?2suP$g%LEW20sq)?>:o!!(@RjoR68V%*&8!.\AU!72,9!\gRL%J1P=J6i3UcjSufKk!q7qQ$a!>T`T/7M^flm]BX"jX!VZQcHkjRFH#FOb',92.MDD>-XA3Z;)fEI$-5'q&AO+^S1l2"Z:HJYF@P\TsRUWnpC5fdBC8m@H(W&"oOc<c::IqrZmUaLTiE1Q5]>'Zo\jDY#M[fHnCS&-,gqtn6]$ZISIMe?U,;(d.RR-!g@uIctQ[VOaoN=1Kgh?j]nm_09d73XQg][5h<?8(3rG%rW2[s>_#*lD8;eEJC's""(rK[s5-YWb+N9NhR"sQrZGDt*>TIG;:##o7JL?F?kPQhDicEq7L_sp`JOR7]8JVA\D^uL.?)a(0,$5M;L_2bpf]#6a+]K<N"[_Pr>`A,--lK7j[PCIH8I=<)&e`EfILAajV#.heh<N_<<NN6TFFN5COLYPX,X[#\V\jk^nb-l]'nW[K\;H8I9d;)XH'shGhS1*.+I!mb8Ml=f:rj_>k?d_Bg(.l2<\VDQoM^Bq;p<o(Ga[(A4>>rrO.34T))S,'JqSL6m464?68uq!N/&A(,fVu[+Bp+2V!U<G`!:%/EEQ??'oBQ/p]0qoFGF9`Oa;"r&_n=,?i`<B^u'')SVcD_23Iu?KEb+Vs1-^iVY9lF44:Ns+f&]-kl?51B*Q-Qj!Np9O^HqKabV%.m<f3e<%G@?J3<dBB'B1H/./(U.,'AHKt6`(MQd(@`#RhSItPhe?H]^`q]lW,2Aj.b_PY#;+(>Q&o#7#UFAgq8A=G!7/SVor3*(9[dnb6H!Pg@W"$YR[HSM,SJGeQBc<G4_k/.hQ9eqX:^ldiR^5bLV`tZJA26GX:(W6r<lW#^G>jHJZ%ab@$G"\!jsXNYPK@L+?7R_-\2ojbjnkH,?>1/fAX?;dD_^`PVb#o)G/^l,@2ZaOF*&c`-tm/L-Y)`"+mfjereXe-.N;>(aJ;<@i`?&L^SO)A2spm?,>&k1.+piol^A'nLE^5XiBR,_jm3;Y==hR$7_LnC/Y"*+EEtb43+!'@bmI8;ac<*CWYja4LSoC4'P:`L10LXo2;EoC8!cjsifD[?1C$<7WUu)i-13B<mJI$'i\!E#,jXuqL"c*Dkt%X=)&OseNO3ak2;mqYl["[NM=XeI0&;V`YPg)'>4aI7(@lpgUtVAcHC%0Y)\hu7^N$i>n`S<=qNTWR''[';_iJA;)&2W5Lo;WF!F&uEA#I,nb/eh^K.\ksgo[Zp/+EF#\Y)!8A.__":TFlgcIuD*Qf1MEj$a2N=N)t&G#?;T>t3OKRse&OV<55q0BR=8*Aa:>Jjos1//*@2?h2$lT(3kL_lMp=`Z#VqLjSG0W->C:7,qp"-5b58\7pm8J)XA9P.^fN6#9:5$95ou=t#ZDm%B):o@gce_KK@J.5a.OnH]a-`gD<Cn\m/2:JE?=?!Y<kXK[35oEjTC9?`Lt7_S04cFtnN@%^@ano4j+rgWF@"S\XS4%5%-:=ef"Mt@[@L#P%@(cqL4g6phIiZBVC#!Anp[d*KKeWubQBi0X%os;EP?r4_;94WZ^nqNEfV4<*#\j2-KO,t>72C`UQd,8e75$*ep';E=69KH=5O83I.G=7'FM_I6,8&7I8qpar0p5sJKJj'Vsaa*=m)\b+aY[j0K$cEdMR/\p`oY4<+s#]>@EmhsdcbR<6AX#9oOakW#q+<-)<5<a2P01Aq\OE,j1K<./`X+4<9e<?RTNo&cp2DTm(E+O\CS=Sqk$KPDY>h'NpRJ4]dZ897?u[tIK?EuPE<_]G$N2Qg7reP[l5%uXk<?/I"oeI>e"@uL:LaSTm#k2#A=[6!6-4G#BkMh3,(V`FpQXDc<1?I7V2QSICW=+D[05?X=ptT]kE__aXkjUj4=HF$g6+R@c%A6%Aj3`rM6`%#mVK>cqlCU%Ya"^!VpU6S4d3W<QNT*o%gj3m=K8=u47;W[;!]R2;uar8dS(q^';+9,r^&cVK%n2+MqWk<[4%Bfj+!!-:1f7\#H+8"->XHnrLT=<M(@/)/X/,2UP>la0LTq1;uCnMp%0:;4N@ON18Cal/N]oiC\W;d\V):^Yb?_sM"j;.hJ2>Xg\=2ilfVXTTCe1]Z;,=AQm9A<Kg3OLruL3%Z@p#djKeK-e0&U'992cdP8"j4_RGF+?r3;:P?c7E8.FEdBjbUbBY*?Q]kZ(jc8-Hq$+!9mV)S*0(`AdsffO"0r(uqCo+GRLDj!I4"&"jr(_fc9rf:PR:k0b:PWs?%:4.qS^MUTN*qgD7OPeE&"Uj#+!C/'8p19cn'd`(iWAfDt4R'L2PgMqq)sO8L6Oii+otiU.Z9&&R#_>:$^Yf4n@CV:AQSHD^>Nk%\VM>%4/^@;fRi^>qgk7mgKE$rIo`og&758/,GC`QEkU6CnHKJ"^7jj#.iX&pJ@Sli37GI&S'gK!DDEY1=j@sYK-mIRc2&@D).r#%a]`8&*(X*%j:eMbk2#o>0(JL33>.UE,eclm:$b7'eW_L2L0W:fW(_cs80)u"9"`j\]eC"PI%0/XH!!)3dErd--dKY",!'i1;!9aT-!>s>7#'p^Y5VE*;kQQ#.(t?t<H49j>0)u"9"`o6,%18Y)#RC\A#RC]l72MCMW;+D9&9AcC+2;L%%M02?%Hms,&C:gI+uF(3^!pJH3=R7U)Qs5GKOt=4!<`PtK"2.@W21N]CEOam(I15N0:7XtK3Ht0]`nN>H3"/eUg?=@q0t\X>E!Ji0W:fgPBoq1!%]gs(BD8KpB"k,nl-7?Cu^QOIi@4'$censI0hPIVB7nLSN[%@Iu9,@1h':M5&L?;6R08E)3c\k&n8;SO:>qg0A8i"o5!jkr:9FL8Y$I5%U^F^"pFuF1T2QTLtMtLe0="T#)2^6i5(%R:r"7V$jltkAl+?(dt]p16s=h=f(D>SVkH?^oFW\QC;qP>?r2aqV'_J-kF_l1-t!Vf"pG!q1+;BMK5![CCqZqKmF9jaKkT$/H'`K#5qQ!MTR`jD(_cs`b+L#hFk$XZd6sd+9$f&pJ_KI)EVN#j#?2ceprd2g3A!^`TIY:#O0>R,T4Z\^Ns&*iH)Y$mQV6%C02*[1MWF>?C"d/J;_IP2q6#ln&<"N#AG!?[j@S]5ljsIBYBb$#d3SWUfBu_&;R?=-IsK`q<dYO&4P34PD]@BEAFP<I\jLCMZEFrdBRLR5<QP$jB%$ec"Y;gPTE%5e"r4>D/u43!#q@Fc81U;^P@t'+fi,'3>I<crICsn<2^iF*jHd78Sqj]:]_$p.1qWa5,j^a%jDoF41h3R35t@*J9D\(,jGp2b1JmqbqR]@k5qF@8>4]r/!Qh.NaFoNOIYR@(A7S_3qO[(]G9iN+mnqm3pjhPT,OW24[#+:`0L$Ouo6E&M\W0T*rci\DTj/o]'ECf,$jltkAPhBrAa0>HpLtg,%TRas[5]sIos*h8g?akQiBpo6@EDeJ0oAIKn;ie>nb$JQUc:JBYsFn-'.%13%qKbt1,F4E/]f"88L&#f/fV9X+5ap/<T8THX3=HR/EMh,+Ng!4S$Kks[Gj/o8R@.109M0=A<loZ4k=t9Y8Kn%dUbNtEXUr\l-`P+Yq-QgZ!s/66*]&OC2=AP`c$29j1B`_k,l7I@S^juI^MIl0C4(5jcJYkX]m]oqjboEk/\6>G'ZS_$M!Z[hQu#gn6S+R.OX(N:k./>kNUI1\@K+>I3)DqO/OjSpSKb.>U35Ml+T53QBbhNh"Ra?/=1G$cYV;/\48Z0;-O*r!^5qmj=U7=51$)]m8R"$25oimYQ(MWTI!uB^g[ET$32np:m_/K?/VoHO%1Z3-*.b"rCc[e6`MG[RbI-&0+^em:elkNr.d9%$GNNVSbV.Q4Mf4*VDq*RX&)^f_+soILZHE-P3dE254!JdT,WY0h8WM23TA"-ZH,4JPbane2kXNAUtCNfVJK)g/:J:o(I%UbqWaHTK7WL)G,tCP.N4UaV8jk-O%BREEc-cqg4'Z6_g7b`6*ZdcC>q$3Q[KCu7:QP@YJ';eEAk:]0B%&eMr%.aJfBrIl.2G3EF3BgR7oSB)!gU0\X&:hfkS;!IM5L(QVt+!Xkj#Y:I;]?d[j1oSbJTJ&s6kOFbEIJG3k0+&u*SNSl+TSDFO3+"&F6^W8&E*n$S(f?IY%-K,QC?8ppbn!Z!"g:]R.;K+c0&S%;E6'V?\#ED5*W5uO#-ldJd>\Rab))Epl4p,fPS:tL1onna@(`Cn1_dnmRL_S:rq?;aH1XV'C(L+fX]N,O4G\mh?@T"a86kn2"u$u)RBrpbPKNi8&@81OhBa?ape6Rn8Bq[TUY^fgTL5qZeA;jQGO';G";<I9TRL*eagX?gmi5L`_$I4Q^tRViU-fUB$[kB5>P8A`q^4$A]lM)ugI,!0Z8gnA,fqhC)cT(h3@j6<8)TgB7CE7NDfTiFXr-.3iYpWN5]8c.RMa1<@;dR2+cF?`pFQH@c*iEHi+)=1&mA`pJ@R1qL`:[sY^26'G[:r$NC$jltkAPg8-hl@.H;`nc(NpuZ_7<(6&W9*$*a2cdLD4ifaXVcGaCYYf`GgT0A4qEC(cMh-pqgr8ua[qk='i,N*N,F\04DQKcTVM$^Q><\HHfpi,Pr#"\P_SY9cq\go.rJ1sIVLc['YSFLbLt<S/OeX]nB+_@M^so'G"NDH>o<MFiAEDgllY`)K[ioV/1?gC6(rckOhW:\[O-7X"sn$![rZt2M<ZgpPXcU#$>"IJm5o6o$<>aoC#U_,p3>r8f.NM>BUmDHh2f6s*TDMl+4hVQ1I'O`AG3@I4(>8dnei-!2t'%lf-`7#?nh]e"TTGsW/,q$(Sbo3bD$7UZ22<f<b&I3$IAulZX8d1LUr5bWfQ>Ois%A[6595k_Y@5eZ.KG&?<58jfoBr'/)D[,Bu>iM8sEl]MI6.9P>$[sr"STrh%W*/-#(?UP*15=$.!LPU:U!li-?sgD31EX=e\*B]F'kpE:G\6er#W_j,*Jfil<FB4ChP)6tcOVW#GBY1^f2;@SegTjTTjP`D\mJho?,mjK2K&KQ;Ot<HhN:`(I%#-LB#;m(2:F'p$_7Lpp>r:q/9kn(bYQW9V^sA@/hdgin%TTD=(ce(9N;Pal^aGtn,.Q_<F/-98:E!J:FR9c90<r#aJ.pg5gB&g_%0O0>eYf*p/@^NrB>o(E:<a!c.c5m7QjrM(M'/8co/C]r?Cie[`bkk;<Fr=\D6G!T8+s1@KCSdZ('S/OtjiZ[+_$ULR-DG]-oKIH:\U(,!><VYjYN$j_qR\`GEW]csOU[V9`N5_(*(p_^\n]a;X]:N18[&*V26*ZdcC@\PGX9naE&raLqcE9f%\U26*%@_PFSiks)959M)/`a@S^>QV?^"Wb#:&E3uD,e2?51Q;3[o@!:q"n!g2Eicarp3B8R,Lb_%PCTW5f$N[&eAN,]0!WN-Zr09HDZ3Y!D<qW-ihV]6&#6m1bnq^C/1C&_f=dkUuA/Gi/m02X6<gi)R#u5[!l!5MoD@'$GSG]+gmg``W)s@jl%js:7#s5Hf6S,^n?4S#8e-TBZd"C6%;%GW;Bq-^7%p:&Y^d*.@)E4o17LarSf%-rF(C5)2"*WlVbUoCt[n;[J(K0i*-@PipXO=(H>f!^sW;n$32np:e,sD1##ec#5,==kOXu=GOY6T5lllL0IQqJPX4gLr==_;"rPi6AL@6V"pHP1^n:Zm;[156rI5r%)dlK8)_`[J&HN(>!#dXAn,ESHgK:Za<<W4BVWft,Xr7:6B)]g\9cl(i9L^fBouhi9Qu+BVK7]JG?3:5u'*e(1#`)'c!1<i*\&J,S"G9n3!Fl?;"S;a$#j;G5&R\F.4.t1j5X6uQJ:Lr[(SOua6K]$a!WiE)!WliYKa%tnz!8o4*$jlt7!!!",[X^XEz!6c34-ia5I!!%Q&!X8f.z0O)>cz!!$U=(_crM!!!#7C]T.iz!15?G:]LIq!!!#*"Uk_<z@((SO!<<*"!!(6/+8c)t5sR\#5X7S"/CMn<6)c@A!1#<5m2_Xu!WW3#n6K`$Ihi6@!e*n[TE"rl(->o#!&4G'5lgrc/9\h%!+>d,K)u#Q=R:Q(!PnU8"pFu,Yh/u/!eC(O$jlt7@'Ke<"T\-)(_crM^g^qB)3hK]Gs/TP_sJ5UaFaC*2dQ//L2<`B,H-X,-(h4SI!s2KaK>^rrU[.A9m0"[b?!nlf'YQi]S/<)".BY%m"CX&>`8)Aedn-t-5k<LYC(Gcg=SmFrnn/!!!!"d"UiYL0Pn;CV-9^*/-UZh0lmjDR0Pim*gXsFK)VLFRrkc-<Ud`-1bbl)!Kf[mil[SoW868d_)I93!!!#gh(1O<dbPmm@AC!]R4lI`$0-hp;L$I,c.Udtf#le!o3=IJMJ$>K4pl=SYV7jj-@&#@oS\h5=e"gfnm4sEdPW<=]jAjG._LRRIlMQ-"ueJR>C3Q3TBLN+U&rkV[j)t%p%I1H`lc0kk^s]'I(*us:UY9QHJ'Z8K,Llcq8o`sk2teQ<Z;+(C>%$lD'G`fH0O#$P`741FQI)p[A.`)-mN_3A_`#q7lFJ=R9QfH(U1_P@8KLk/0-?$.TC.^X41^!HusIoXgsk1K@fXG[^N*6pcn<^!kn[:K2QpTX1:uiF&9ef)uos=R!TU=60W69:[:X0Y%N#BT-53o7g+f14?#]oi.Hrt/(%)3okp*u/uXc71YJ+"c]UiPjl]kh:)$R*,0Vd"d+feLPh5h@Zi6i/!@^4T==eO)>f2\tJLPH:hV.j4&iBhn'5'8Ea;8W;1)V[mCB`i7=,2s?Hp:QM/'UD0bulF7diX?517=dg-\t.t/"8B1,icA1#J988S%.enLq&b6gHZS8M[;0P<g?l)7^>)OWfo*p1d*j4LlnSk.&-(e2Paidg:7hk>K.72bT%$`o+2b'RO_b$FY[].;pRE'!!"\`/4>,"b9d*?p)=nHAbGeV4j/rWHV:[dhhd6t4h/mQ)&^PKV!"G@R9pP=>R>(/+^'Pc.h"^?)eDO";3!E_,aC:W.o4jNa"!\09eB1YG*59b3UT=f]!HRG_$WUD2I:JJKiJPj`&V3Ub\ZV[fNK.1DgThW->4;PX0Xo9/O&`uMlsMSg!;2M@7HukU-1N"<0`X<b!S_Kc9Y1H/nd658<0cK5+*,7T-N*@6"qBLK-Ihr7I%%>;1g(([K-@.J2q7N)AGeAh]FR3fQlSkX(!'2Ys4j-)m0X]QM`eYU?8km&M?2?[WiV;&VH8;qV/UF_c:2"1'q]ja`a[]Ao+.j9j$>l/IA^-K-HLS<oW/)_J@"<=A>.'#/B4.Wt'Y9cpnmC3<e9nQi_-nr8+1#J>a!cd>'6(qH2M&?LK=2)%!>nW&dYY#Zf2dTi'7h=^b.g+]]glE^"dg3N*@$C3DGRg-eo@%&tK%*XlcaT['4->kp^/f?'sW9f_8*IP:a%!'_b;eY(7oAl1Mo8Ve-GNX-QKgTKE4&q<tSh#I5T0kPF&7Ngkq7G=/TV_rOk;Kcc=S\a0ahT?]S'QJ]12^gl!r"Nl<L:H5/TiBC)jJco9r0]@79p"P?eMd09;q+PY8-Fn&2c4?k4'lY9&nWC/&34)a8J_<iD-X'5.m(gW9CW]le.UrCkF'mOQAbTGq&:b)m1Hs>ENk`!.3>ZC42_JUM?ed8VGV8.PHK;D]'BJ-$31&kZRf@6P07F,MKAKkECA<I*oq'FD!ef_j6fk9OY4ZNhOp]C:47/ERt[!8Xc)AIpd0l!CC2na-7nX*$jtOY+Z4M.V1G>&U$8"5pSoUU8WFL%W8NE&RtV=j'US'Jf'e[Em`#VZb,Ao;jL:uiD6YrS[rg=Ek[g`\K9AkU\^B._oaIth[fftFEcP/m:hWA#ME=!s7X@O9Na=p8$saN-L`S>Ro>u(Y2=\gjGFa7M!<<+5Q3Chr^g+ZjG^)EGLapCDWiIbte_I?ioCYemg]G6h#ljt0fE$V.njlpF2nbd,9hG%2XrI)*IG4u_:mqUt$31'6Ylb16!:p^<'EA-K@L!;K!9P@W-ia6t`=<_!!6dZ8:]LIqM]FK"!188OTE"rl(->o#!&4G'5lgrc/9Wjf:oFF,&.fBa&.fD2/i7??4950P5lFI,<<*"!!58gp-ifWa^n:Z-!#@Y(:]N3LJ3a29!%`</TE&C!!J:FR!*JT<5lne!!sSo/!3k)VK*$T!#7Lq>!+<&6"pG"u%i>u\!5N&V5oCBGn(Hi'CD'h',7B6qD`P#ToX'rHhp'#Q\E8=$ZHU,+2kacD1\:P:MT^AF?hY/aS+\;X_Z!dTF"@@iCoB':G%\CIZ/NM0<5g6Q:hbNrX/Wga^:pSIs..T3Yq(plPo48uHDQXuqFpkGY<R?HY$;q'0T6cfqEA0TG-`n\13;0!mF-S@pO"RRdVG&,XZ+]f1c2Gj&t[ssiW0#Z/1nZ1#f-sbe[CD;`<Z+PQal_B<i8S.1X84HYt]0.1GC4B%>4r)XM*_(WiMu"1+5WV.;RB7WV&(XLKa:_O0S)?1AhL?dd#9,Cbo4S@J6$X%#S1.lX1\2A\nVnl$D<*\`R^W2j;g[EPg<)d(;U34>(H"\5@0mHo6o,Tp/l&eDHi]s1K6L!+8Q)1^:pqeY\(;[Pfot1U^P<jB`^Q5>EjA[^Pl&Ftq@KoRHZhbgt)6pjVs3cBdU.!YWp6HZ.cFf$;_*aO@S+ip<1d_TR:rCi+$k/F>PD?F:<)eRXh/ID3/;e2+Y+4gT/Gm8"5GBOR9rCI!1nAa8tf%>s[%gm7;V@ZT9TF\XjUmH8Ne`c&jqUb*T?egS",J!e]grG!:c*IpFnSsX7hgqgi`laOer46L-0@Sk><T"Si8qDG<;cH1>2HO<@TjrE7tqXA!,J;)I.6#jJ62X-TGs(.\5WN#iVaGa^n'BS&!PDr/)M?tGJ4laN0k&2EP5Pou!bPB"]-F<S:PeELbqk6#f;?-]IH"Ol1'K-,K6.&=M*UUc$Fg8G]B%uXH<`[&/B_^e0K%Z\FV6QF^g6Zb77@MEe:#EYdF1>20P(PbY-MHV<QpfUf?)a=c\#"4eGhf"PbPo=R>/q=li_qsmA&S7Ngc&hIcH$t>@C6CNb']Vpq,/\kn"-mhfCa;C>HL1cF-tF[rG!:si\;bKI7uOIG%\D$e)#l)[/+R5"uQUk3TV&5gT^Ul0uKh&*Z6a^B$JU!*lf=epX+<1dR"sU4.WQaZC;M4O`RLn#PP!4e_QJ@_j[c_kYbkH,jnMm=Yr1$$;^0l!*F7m3.iEHK4<A9ZH$"5>2(O2Yr";oP0c%E7Xn(Si*na].?Xodo:R9G8i"R7D(PfR.?]s/mB(tu#77`C)XcuLe@+/B5NLhA[l"h*F.+cf`>P[M4(P5UG.WkpdrJCl`?a61d%Ep1@@n8>68&YQ-:_,keJa\K_k_cL,E-P.@,@8a:s@WtT$GB^OJAl=E5ib0BCL!?D@=Wp*n8WYcO`i*W!NmFg90U\]n,#WmkR1FoX@$QA'NUlc;8tOV6SXS_@AW/2)!7mfKQ;LXt]nVQ55CsTU=97G5?RC$n<'7W#b8R$k>IN@Q!-^802U6U+5Xh/e:u+-2897Zg+&I*XK+4HXq5_Aj*dH]%^9+r+PNN/cGm*i[M7SD"Xqi]e_6Q`1RCF-T%cab)`B577!6JWeH[]q[Mpm#,V;Ql/0hnj4b-42^T@UZSL*O`Nkai#ji@a5@#u89Z!D>o,%q9L[C$Z7ce_$:F]bb6#d*%PHI&"V'ms'DZ<@*4]g-i#%)<#hiQVNno/H*2=ATX[?+C8fj9/H%RjOR_(76ff7[`o%fcT;$*d#0$L'sGeS;RO+$,f07fC#;X3C]1;J0lDFJA-'LA6ao]2Dh[+N3Mnl=md-mb!OI(_i=aRMefIG)^DWSnU2PDnHM6*k$+qX$&h&_WTbI[QS@Gk-<X3*Ak_$^=/_\)Z^@>1T:1.KCO"ZS=\@3QBhbSRtshbKK1H,8XSV^Fk=bbCe!aFBNN*2#u/;cqhr."c;F$k(pp0!?oq9EqZ5"?/YmbR@V0rU=Z`Y(:echVR8ld4D9c;u!!#7t//EltE@;P4"#j?G)]0H[3;_S/U3[2nL'C)6SMO)eAZre0JXJ+CI_Gd;Z>k@F52eXQXd+4.D'>kfpg6),Yaj[<UgGZSY$Q=K\o6m-1GgL$].5sPMhRaR-$dt%ZUZ$@^=T$lg4mDU0a!&;Pb,=Rn1L;ma4$X-96B/l4>*K.?3'u:#DT,L].`7=.!lN+rH6%:.t-7(X0&g;r1nX44^SRWK:`hTf34W3)!RNl5B=N/!cQ`m!3jCD:^.('57-h;RK*<fM]FK"!188OTE"rl(->o#!&4G'5lgrc/9\h%!+>d,K)u#Q=R:Q(!PnU8"pFu,Yh/u/!eC(O$jlt7@'Ke<"T\-)(_crM^g]go#)+N,!<E3%!<E5+kX)T[V623H=Mg_[Vs,Z2^t\u-3O%QFK*$T!#6kuPaTE>>YiGh;!eC(O"rC[h!uEu%j8jl7JGBES(LY>e(HJ_\!J:H(q$.*?@*&Ke3O%QFK*$T!#6kuPaTE>>YiGh;!eC)Z!=pe\WDq>H!1!`qp`]rn+2\.9-n5,dXaj,h7bZ$dlBBfe3V0n;-i;I^j-?1>Ef+WEIV\p)Z57ugp&.C$(uK]P^sYX<i$'14hn'65gf"!`gLI`>8'IO-[u&UP_#AT*FR?aoM-S1SNcHr(ei)6(3m-pLrFrS8+N.Q0>VHS-\iI2L)(XT?&&VWooLK,8&N7'p[/tr=BU(1F>WpK7R=KUaV8L9lEP5B%Ia`"r7lKrX$iJ<H/8_7hjO0`D0>eN\AJi^uj`oKiru:g1mme6?gWO8Og45VE0RC9U4R<^,:"=_9'$C(bjL$p9Y&kPnp;,^qAd3toqIXN(,hB9kK9QjI576/Yf%.uqjQ^fePVN0Q-%hV7-:[u'*9B[cd:%H>KU(ll[,W_\AQISJ[$G67UhB%?oPlZo-C8g=go-3lB?`Th=>G>@g@5X7#"D(:Uhp^34c2j'=X^b[M4P=$ao0;_&j"f6c%6+1:blYN5pPuOkKUnB\Q$p_FENeMeYro42]g\)0IUPALYgT`PJ88kT,fcn-)J@@Cei^Q8%(DNL&7FQ&@TM;=WT5eVY`nD"$I>^l>+mN3t0pdFGWG'f:C0IIfA1eIiW&rCR44PkrZpCX*TejSpeDkBUQ`1A--Li2bcQeBu$AW&Sc4tK[!T>\mF')D_1_GTd9O,%;K'hoQ'mRQ(1KXgpYED:XeDBju@B/,H-I+0g#0CN@U97>13,4fYsLF"b,QI/,`aL]7_pgUZdpO.C=K0f*Y^MD)]qm1)M_o@FHMM]85_Y9d=-_*&BMaa;tmcfsS:IkcMJG3PK@+[.hU32Ba0)QV%'Q2sY=je&7GA3Ajm/oY!"o1-)6XaP?PU8j,fk@F[NnBt`]?3ctV'ZEOapT&le](K8=SSNoJB?:J6_:F;Fu>+_GBC1D.!DIU!s0M16jkduahIlMQ-"ueJR>C3Q3T+pQAj#0"^ZGG8=ghP*JJ.75?[i,4R3@[/VZ8Xs.]#iOYbhU&#pd&-=;cS5+pKt)jF!6b7864g=d;Sp$`-XfE)MQdjgmjoUD6;$!4jW4gUlt]cIp4K51LGJcF-&3,6NDQ:#R;.`qt!CBrpCTIfj8u?+*:0FA^\;W/L9fNQ]LM(g:h"_cKKX*IZ4WFdXsK@anF<JUb/K"HU[^XAEC_5]c.q_`^][YpZf7D.HQ8q^2)fK,?nGiN!ruYF!sptC#hY5U\;4MCl-?G[`6hc'><eL4qbFtc"r?HZun'=L"6#EY6H7nHhb*:l#"%Sbgmq<3DN2%dW[\n3O_k0iZ&XN&KV+d4'7l<)O!:XEr*agQ*ol%+Rc]`,@*\-hWq"3]K)j44hNWY^,0G8:k[^ClFqtLeq[TEAjc:bFZ%[R3g.heH1.?S)3gBVI*3uUjY/@J[lauS[DCP4erm]+>TO'`nAH?VnLKejZrT/,\N4OerMcjimbpl8:6$SU40S8OMS-n+774<M6hd3FrVZ)^jlfsRT_mcM%mA&C:t-9LD!Y)NX-$As'ql"(b3aG!aNEb!8fhQ]?Xbp0]CbB_Z`2*?UdNJ:ka6^BHT7I^3I77@mM=_:G&P%cf0/J#oN@T4dbZn'+1p_^"##'R>g?>gn3o*%mQkpGbG@%hOA^JOdJRr,)fKR0UB;U'JgTkXhOs'-ReH>Z['O=0)&2?iD<\m>HJ0\u3s-\0V;sP]'e[b73U>aNqW!Z.-56%5"Hc5`AN]n&b@6mgjVi5P8GglElE.bW-'<8l_FR]t?ZkocS>IY=%5IEq#"=b>gkKq;<BF:!C!/JFL7'9=_RmF27lpKEQE_sC*=g9V'bg"(d!3HL;cLlC$m-Q(h/loji\sFRF&4YW"Q3pCBQ2q\?Ei%$NGfC9C84<Ee+T;m#B_bVW/h$IRCMjKX0FV_KfaI=c>UA+A'<OT:>\u'"&`er74]+\h;;\P2iG[)3F[N,#<_J5.l&%1a1iirBr`u#Yj=!V%0,0Ag4V[>&N4!9Z3^<DPOlKk=ZB](T&WsX*/-]Gb5NCH5`Vj1LEYnTp2E/rr-J6.K+c\RfU;)!7X)mNG54."LD*+@WX*[i+uFL7/EJ`RfW;89!5bm/f]0]dT[\,CWV&O]AVuU'eo2p%iQlmIUs>Vm70,m?@241f]VkWeH/5I_TOnhFh;)Iu?\[c6HDf/VVh7ma[A0(h\3"uJq51ZBQ5&.=Pb#->p%p_MVS?d[e?(8.Su)n-T6Zoi:FRo#*#UR4W6K>kZT+)JE'aElh-lXW;S0JV2dJl]9%\19BD_5+3X1XGqr3j(Y4IoJ!A7h.]<>N2F0dbPHN[X#DWQlb&>pqtS.tsV1U9EqT!H[-q,ku,i,ck94AKmhRIRur?i%>"cMU<S=(9G]*=I@GDkXD>$qcADeQJK-(*@hK79A7:lt;WW--cNq@:j#I^t-ZLGh[j'`SDpKT-H\l.o4jNa4:WON>EU,U#h/CEaF"sC"bSG.G4k6k8h[,2+mlbe=Ru?i#@J5*pk`2[bC(h1+kH!AJgCdKR:Q6YI?@SnX[1Wd"<9sQB;o/<#Lp>`eX'$c7H2]R6%h`gMX4H[QK7nf?%^0gfHSp`kTLr%C'H=KD@(r$P7_"S!,K^i_qXlU.?)+PE!WBh_a:J+m;#;8P_&c5?;%\<<p2X0,:fJr/+=6e)_o"?CJ"AQBXRi@UV6QI'-3eQVoTo%6\#qV4tC;cK7WSkPc@ULdC.M>2ie'_CKkEXP<)bXd/U/U-V@s*kId8'oa::d41<UWp_+YZm3U>?C.,7ogFHrmQ1i7\3Rq-+G6u*$ErC6E?d)\e//nrrZpgsI`mi3L2=QYaN8:O!]Lo.q=$oJB^6>8*P#F#23G=*VaoV6i"Z!Trr;BA#uFQ)K.m)i]tWsdm<Z6J=*<>G?WVI-qg/%K])1gjFcJsTU-][u!Q'eg+Q*6O*p4D?32d*4MVuG2E)7)['ubG6'h))d5su7e"9k48S=T3;Plq6C"?8o',l_5RZBCcl<n7arBDo12Nq&ejIcgT?HnclpQ(\&n1'd6ISG1G47si`bHc_+5D!.@c'&!/@7C/`Z4&ogIp*HX<HL?O4nG]g]oJY*R2)Qemi.FkUr&d-$m2/p%++($]lTa,.T)#>b@'18/ho`A+3MZAU<;``ZBSa(:^,JsG<E'QZ>dfVbi238>(U<.6IDdN/OntX^PcCW0EF\pAcG#?VZF>ZQMm3-QG6_D*QTl2Jf+NLLmZOOR>_17K>?2g.BHR1F[o^tFK]f1+:aK>V]k`KHY@>-0'@bt*FJ<dC4i^7bMf-i:Gb^RQY/ii"(;%f`-i:u_m:?^PU)(J!F1(Ru9[1+F:g.jK'mi2tP)X]"IfH#S-@i9I(ZhQ9_,FK$9Xj!5dl?\9=jpCdd*kGL`?9?V*UO"Tg5h\<l&X=$60m]ORA/m#h4rr#(A=6g]*+0r>'ZpnC>Yd$h$rhB7>gdh$eW;I[&5VA\Dh#-ri&HCRdDldFh>en;mWUJ;p]IP>I6nle=ANbf^gc*)rmlR5!]Ji%4C9t76N(mnI*KQ<!^62;"PNMg\)sBQ)(7ZYtIpMDjPaUa45lMNH*RF)#(P&-7FUm%-@a!m)&VuO9F\/1#Q3Y'6Ac"7q(=4+7]R>%KBbub^bUgg(C4qe\-3)_cMt?mVTFari7h=g,iPNh)?-R#2ek"[7SDC&,+-N4cK9]Gl'NfaVldKG-qY3=4"*7d\@T04hC?c;1I`2o@c<b3B7P6#<aG1Rdq,/l=B9npZt>Zc#Q*=m]lA%F@VSFh021upn%=1DnRjV_EYM0\)[&JLX)9.>'ES7fp(T:'n!!_GF+W1:\Cqs;4rD1"Sk]&P)BLbT(Sd]f,*h2`AMa6Kb=0Q&et05q+g%Q3`/l6,u_sthqs9_A`7X5RM(t*3a2<V4DUcmZFVj.dlGf/7*P0g<4pK'If8@hYtESl4-K2fpA>i^]k.E1ISsk?c.CRRodAQ4WiLj"U:IkAG`p)$>IifGSkS![,*9Dn:OB38qmB8/J+go(L1cWK-1NNQ[%I.//N:PK=n]JK_(=Q_T<8%;[AZR/$"+5I:+iR?S#\)Q0"]ncq2r8S<euHVl?g(?BEQ:FJ&+\-bsdrZ,a%A5DVtr<bQ`*!No9GR43s-pdG')Pp7!,tW7Bld.D@V::H%^77rWj9CVQdBrF/^P"o8[oDTtB7SF0%!r;:,Bs.!]WKZ2V8:KZ[KQ"r^_;+=r3K$l&3Sdr.!$$$J=:Ntpd"Jq6Hmrks?Q!5J2WIuqb>qD?!qG]@4YqYWmN-j=c',9Ig`pgSo'%B1j#tji3*SV`<H^'20GKASqj@l[D-2VY,Xe":fr(`M8aNl*;51?96L9%C"T'*WVEL2Pf]Qu'Wg20Wb8BnNV(jVk])j$^l*VUbfh"@!PqsS1WiiO2Yi1)ir9&<G9lU&&CJc8`upHJjNXuW->GJ$hLP^P#PoOS8j$gO#%k<h6#:K1!:.WO:@[2bOh\e"e?NpFLsSk&Yur?CFsm+,N^<bPILR_6$J`uUuh%97hth.k&s(556*H=rF)B?LrP/qY(Imj^WNmso7NNi_iYs+t:SR>u>h,\eutUHa</SW=8"Yd@kDg!8<5nQLDO-WBr)^<_cIin8;k4I9jjF7@Ubj8EB3I"rS?>dpBI"-K0=6R=/JpGu*Op12KWgNeISSo$oV$Yr^)09<2RB3T@\gt_kGZaCU21-CK-l#NS\NO=trS@M:%O7)_M?:I*c.6cmsi_HoN47]Oi`1$b(YQ*[Xl@'_pZ!;USjia?=WogP?bbb.&mga\*DUk:&,0*,of06/[2&CG=$4cS"TBdT'<r:]c<EISa0V1GRCNaZA8jTM0W_)o+e/p$f?8P)GAl.q+Hb&GeP3hioB-''A9o$,F<^D"A_Q(dabdDOrQ.J.lL[b0RPXb?A_Ycu(6FHW%:kGEcr3n\KIeIRfcT?CCdDC&Q@q&m'opFSmQkRu"07>ouI48TP`u+e]#RP5g`WSa$mYn":FVi]27?se%cEap#nd^LM]j4/-lPbpF4NJsa`^dcP=)oYSjB<X<=.b$=@1aq!S)koX1$pXSXabqc]ntn^(iDQlO9<HOiL?nS+$2!]-/1G)pPf4DC>`5WqDC:Hak(F-'g4u;97GTggK3Jg%hJU)agL<anUdJg2<_*ahX#AsY:8gf'McV#58>o.CM1i!jS27-</S'?\IcJ=Z-(nV`mNU\8^,j[&b=C!HtNb#S4T`dPL>B1W=QD41<#$TY&O<"!J;i<Il7QZ%tbiq*YMG%.XoLE<F-YL7lP?.s()L\S+2aH(_`9A^uSpcK?6K4!\cf3/n"6(aMHp\5lhfE-5S@])!#)qOIuT4&!IBg4:H6aGt:a3`eVY>9HFBuQolWB!9:uX![\G1*)%Cd'S,^^EWMAZ5n54P#n"KC0Y)_U_]T2JLBIcgI$e0SjC+.&a[:X]0Kq:b>ZAs.F'+Y(J$&,:q$L-F=hj2/DKV$/%n]CMVQGZaB?X+!g[fo7of^alVoo8tRBXn_OFoPYJc[Vi1S7pZ$&Z^udJMi@M)MPb*snt1p;.^=Y'1b]'5DOCc+Us%5I+B4qB&EN]OYJ-o0ElK!!s"Jprn,++UMn0i6hLEVn;:F(8qH`.(-#EbSEF'-(E/&%,.:S,?AT0^t7*gI+pE+5<gfm>M+M)?)f%`C=JF@QZgSok&<:<>lQBgh?\m?;q4g:]$/pZe]![:)RAODMlc%*HJT/`(<:VthOUdoY%uYc=T-0t.-PJ#9O7&KjlO>=Ed5Ft$JHB_.N"I*p7rdZ_6t)`k?m$%eG$;UK9o8JAj4;P*$@NJ(n[3l/gNa-#g)OObR']r&67)Zl:Xrg;=QP7cC3O'^/E?aOo;UDDc`p*6m2@uSqed`C-$.lcC<d^fr/Ff.'6&0oS@kL-<I6Zc1`D&*OieH0WqBi^D(4hn1pPieABY`nEj:A.Jf&j8P?PIZ<Ro>Lm8Z#WBLq7&HA9=4@NbGhbQE`)\n"k;M/1`m)^B5ilJ=odblDbQ'i/'0F(-F!6/[6PD_Uj#rTkk.kB9'lYa+Xe0cZtgO65bgInBSou,0$m+`(M;fi._Ef;U%/sVaA3kH]PQ"cU$b%jr2=d/6C?*ni][e9PsN=*\jnqPVOfi,G4X*:A00;oVI"%<)#'UKcfgBk:[e&ttY:8I74[Uq.=Ot5?/L:W#'0_],).tIg,0S(B5!>qGs:G.&%MS@c++2P2j4e1T.92Ll[r=d\eNAeG&8f8Y#Gcpr#C9K_f]?R^EH?[`dEqr(Rrb4cmS%E2\`\kkT[Hqs'rqWqRAZe8N7m7Zdq^!X\&!E1@<J3$b>ciAu;fcgjPZHRA`HKc`+&r"#,otN04W+A/$=Ep&Jc[Vi1S7qK,q*e2;,N8sMoGNYHPTEPHn1Pi2Rck_<:mg`]p-cuH7iZe5`?)i-*`IGr[H/s.@%"&9^m.!oF'gHnqIg/gnf:gkbOqf^D=ucci0jW55a*Vs'1J^?\4G@-1NNQY*"X7'J28\X]bA0.N%I%^E:soJ>joK+@-$%?q=)o`b4FtbCB^a/fl\%kGCmKoOEK1e!oN>XK:gU4Vn%FG:E:m'9ks4W]D4Bi*^9<[^)I3+li6WeQ"acO0!;5>B*p'h#5-san$oEk-!]=[I?8>)qg^R2"INeOZk\S:-Na]/r;a&gY7&-SSn,Y\dY\qojeUZ."DU4#n"KC0Y)_U_]T2JLBIcgI$e0SjC+.&a[:X]0Kr/_@.H"m_;lb*!>ln*(GL+OjC%P?TE'o]P7*a?%!"%I85K<+LWK]n*X4Wl4<u<Tj29pZ-4b_K9HFf\JFR&g!L&:)%OM\m$GcEj\U_f>+:"*c"9i1\Qs@Gf@??,`6\5@n4u8g9jRpPUV_,R;1]3]If/oOKnS_q_D0`MS_q6^85n<#W#n"KCb^=FKH%Jr;3guKuAa5Dd4PKI:m$RSk#BPCu"^l^i5.N?p.(/.7V&f/t3?4%gf7-HND[Pfj.?Rs?G$MInU$pc^IQm@uEpI6S%97aakq!>s2i"@`QIEQ?Ibuk.[CH)*V>q[XNoM/r[>)_[/XMLD`gSJ8+66f>OIuT4ccdaQ`WRTi8FZ8-He]rLX(BQM+rq]5^QK!r;"g)8p6Q+c)HGsq?[1E4WqoK@W?kR/$TWY@982ZFou4+DS/jOqY88]XF]TgS=<&S7@l*^B%d!`t$GcG\Hu`Xf;"E<SGLg:dB,<-@QYenc<261;Jo^BVWKh8N'c!jWRrdki;HNDKV:G97>OJk\]=mORWffJLG?<upQL+!&=(`d,@l*^B%d!`t$GcG\Hu`Xf:t3+0Y*R6Q$?Z#AU<h(i1=^nb:bH(r23df3;8ESiYG65^S5OJng?r\rRe:!:5cQJ'^#&#7]^rNp5uf5B+[I!:R1F<l#=qYk`b4Ft$fbAPECm7,Kn%7O<_=[=3tj`I'E(6Sn1<E,]Ub*eA;Zt9N((0=LT>!$;-C1hgLjkJ?e*n%n+peXZY6N0/=r[-p/We+Mh`tL)4-a%E\I_h:]SLJk*$0E:osX9[_@u><2-Dad/a`C<bs;@=W9,&IsiWR,<K;P4BHQ;pnHSg=qhn:V_`BrX<6*gp)I9gkET*f97*if=7JpZXS-2N@,#s[Xe'CkPMVrLn'*aHAj4;P*$@NJ(`t)kd3@JeF5?S6`5duc<S9t.73*juSU"e(%qf1ABIpb#K40joa[:X]0Kr/_UG^a.V;dg]>NNi/F`d6KnR%T$[i%]/N"(CZ9HFf\JFR&g!L&:)%OM\m$GcEj\U_f>+:"*c"9i1\Qs@Gf@??,`6\5@n5"mS:nhA/$j<6ei(`t(@0R4Mr@.KDP!/qGP$^a$bE\Mc0:]SLjaTY?Z#!&&5,U`ZQ_rLkG%tbiq*YK0;nX946U2%uAe*f5$B"0IM^\Cj.rGao!qkZR/=$0Dr-rk&cs0OdHc$d?WVeF;A2(e#qVgA8!!t6sV5n<#W#n"KCb^=FS$#5oYDQ>BGM*KeKkqg:fn\o+:/jW5'3V?8FFVQ1#M8maE3LBmo-ii9`o>tQ/Jg-H(3<;@T*j22uTM1-/%rs?/85K<+BBGE$TEM*R^"MF*/M(8EE#*BWXM`R&'%Fj0k(=Yt!>6)snX9461,qQk9=JnQY'qQ5qA>H?H.J>DMM?5VBa\j&,=-a]b^>M)3C&/t0Kq:b>QuK&7:V(u<:BG``K1Bu,C(0GiU/+Xp>2.%DKk#V09q""*dfWbI#rt@5_9%k4u8g9#$skRq=GqXhXm3dDml^$^65"8i;-o@l+q(0)u4NN\>;/JFN2Oi[l[TB>DM["R1F<l#=qYk`b4FtbCKW;@+&#_7p+QcG@Kt832Z`#?s;3"EjAHn?C81Pf63&Fi[F]7Rkm]aOIs6sAj4;P*$@NJ(`t(@0R4Mr@.KDP!/qGP$^a$bE\Mc0:]SLjaTY?Z#!&&5,U`ZQ_rLkG%tbiq*YK0;nR6G=PD;F6-4^Ci_"]UoJB>\O#EsoG"^l_F>eoE/OFtXopB3p/!!NN0"U,&5A\s`&9i)H&o0_tjj4sk=!;Ki]TE'o]#mpZ?U-jM60Kpa1!.]n9#n"KCOIuRR-9<D#!96Fu!W\VOOIuT4%g`RC@%p#?!\ce`-iedSmQ4'<_G:?7X62IeSA\l2[c@V4S?M,jdu4#2pCFG;hHnhpe7K-$!l4QkWs$DF8p+cpAS1_$6,QjTqK.3@pEpaB-dT:=?%\X.^H(At@W?UYo_d:#)/_b7W)H%9Df-Ws^gqgo#te$8_N19L\3J"\T1Da]jZq_cCk("b&UcW+0;#M`@&ST4lj<aM'ugCL_lU?]ftG\l'fHB5Y1?acKh_"Yd2*-r^=RhBpr`&$:nl8hc6#9:;trr&oI(=d!'m1F.RE`lmrN*G/4,C6eouthS`OJp-7!.dCOCQGV>#&As4PD`\uRRWm&-"nPO3sFhY\M[WT_)`D93hh(<c)A-(f)EFWumci[%TH[m!$^b1#WGHAtL^*\1+r5;Q%G!62jBTRL'j[C3Wtk>$RrdTmi&7h=O#bMB&$XHt8fF*bm;`L9:;iq?G$,NcO?:1?r&S[CNO;3RY[JtdI]lj+^,O":\%YarCR=Y/m[U?;HWXhN=0C+mic1rjbHrQH7r9c5Tg70>;I:X-<B&0<hQ4N/oq3k)-$pJK[fWQA?GCo:ApKcYKoJisD?bg^j%THqCo)j.9fBW$Y8p:a1o;K(0/MoD5EGBVA"BZg7JG>"CY8lHM9n3W;@50hJZ@EDu(UfHpiXO(973'ig0AWf&arIpCncZ3M3#HpmKKK">s8&Lt<S%7KtV`mDOAqh>KaiSn_=Sqa/!]odp,i'oPDQZ#TT>&QUQB75s[+aUHedoJD(%&^1VmS(,r_tU`cM">T\Oh_4XF:IJhc`TeCV_ZIXJl5IF78#4NVB'^ZAX1cq'A>7<?1S(UK,*i;ch;-8#OQq>pn,bb-D::F>a(r]FQ$cHo'Ui3`6.^?l$J["@WT#h`eVj1d3,-_h*?@Sedjd:,)/_SZ&=Kd=pWX[]Z1i8;Ae_/PcVCk3LDBW&GtfPpJD(O$U09h9I=qdSu"TM`:+JIU(dJE!c``=;V_$Nr^[gmd&t!Y%SR7'9mq3bAQ-^*KSduHUY`h:LZUiRKn[PO#kAQY%LsU=Y,mAV5:d$;d=UrLW-QXcs@P;W'9M"01#9>f)9'ih13^-C"ACr6#V?)I[`X4^tu/06-Sfad=1*%4_gg!g/Ca1SiH-e`>Lf=0MgS)JeEOB\i"$d_O,\pg37=0*BA)Wnit_Se-2XjO#eTHeq[+E(:"F,8Ni9DgJ'aaFS-t/Z3!TlcL_gTlW"J+Ch,>+S"P'QU=P2`R7U7+!dQ&YYr<D>N709e0LUMu=T.`i;5m2b*iW-@h>Md/WqqNarra'2-RdS6]a<sm`GmR%O[Apns)#&G^BE*A>$"Rc[=7;35F'aM1j+r:DIA(]D5$Lq_l)T*?)%>M60\7DH`jm\!1;-IVZ]GDT1!]P_np>?I-Ro7Z(\VeZLV9S]>`$?Jb2[?h)Y5P$[7^5'lg.VV'9RJ9R73%pmB?,?WO,jBZppYDgUo`r9.bX&pb"5P'HdX-,=8QrL0f8AL2P`B!GH:J%k^r8"j>G0IE_i5.`Srp;t!Ph:8@H4C6'D"skZhc^Vi/o\amrOdMPZ@%H$tetb<?D`[a?ig&kMU)W`\8BXT^*amCq/7*71im7?W=OK:XU81Gk1KMts2!hXc%608iQk!OhH:F^mAB)od9II#2Dtlk"!!%G]Wrtk(W4JHi/%f_Kd[jFBEXRfKX6QRGNhA"KSb!QH&(Y1B<E6T!]h'iFkn^^F!I\I$7]iop$FN%!cOP^j:1I#,n_JG/Q`'gTo&B;$F6odNomW:E$eoa/5qkL+2ZPRas36'O40-):kQF=UWkXb)b26n;M`&ICHR64A^m3uaZSm&4:&8:Qa3%[lGe.#M<GS>;P#DsA%Mh9&ZLSE`c@"==op+T>G6L'(-Pn(L!i""j\WRp=$33?^h'FHLZS9u1ULm:jHGoAS&b2df'c(%=*,NH[[.$Bq^,uDrn-pO,!>s^]s.A@8<OpLC>RU,AefQF_!hs_lG)u#(!W\T,,U`ZQ_lpWO!).K*:]SLj"9ecZd31dV(`sA)!5M!X"9i1\85K9d'-.]"JFOdK!<>f8j.;q-%\TJfTV.sNTM2jNNX6'.<-<rpT.#,!W)otRr\%)AUL6SGc7T24*>0(Y3G\>CH=c=75kS7b'Y9gmr*cO*M4T!X(Up)3oTJh?6iMqI,CJ6O"suAV.-O#gLnP$jK[qq!WDm&!;GpIn1t4$C-B9m*.!-=R6(Np%RHS4L"?#$\E5E>8-kh=<"b"TQ6.,4:c'gN-,cE80'Y5,V:l=W/@>d6X4oI&,l`.D$<Zc_hm[a#X<*T<p_<_,<>rbW&CjFnF.-"<^8PnG1![h5=Jhgb*:sd7i'@b4!XjJnoTMuepL5R8!7TC;'DLA7BG1))Y6/NsrLT<D>MW"[a5IkBnP-LVX=-sOqkPEeILXo)?$Ij*RrYnG0MVD&SC7Y>S5B^)bC+/+?$n!Ii#iBTfJVie6-7Em$1%354VV:f_b^@qiPKSZV4'g\%bCjoHTH\Mi`18gObDkDQo2^\/m*+bH#<cnT'_IJ5oFnc\m&L[,=H3>)g<&YGV22C9@EI5\NeI_KgJ+;T@EnCJ\gstA:\EV>&Ylts4=ds7oNUT!%2./eY7*R6."@e*W8u3#fA@VHeFZ*(Tjd4]W+%_P;+Hrk0(R3qF@N9Bru_1)l%<=qiT!QQf/n+D3mju;gD%dI'uL=b42Nr3ARM80`X-BlaNY4^*GJ%.d=CID&euhBkPG$U&Y2$FDMGA3>c!'Ohi6MZ`rB#qe0P]N1c;WG[4Qgu"@[Ig?Ydgoc`?>oa^r>d-\m=*SRZ$tqea`:od-Qo:tKB0H\.Eo5J8Y_OK\YCeOPIr:(7Lmrgk$B+21I$3]_D^6@Z^]S2GEPLZfJ-XFBm4J@.fllA'r5@m`H3Le:t`C$PMqhpodZ`GgEl*=af#jJTk+8!hcYrtd^Fd2eI$XAO/LkdHtp6/SMW81U=GZi1>(Ei;)Nr(Gk1-q+[Fi-WGb;#QRLUFI#WVnGKp(ja2?>Y\nZ_b4:GF-tM'h'8s`NYm6(D_B^gUpZOna'pi[8PmF[&MugK6]*@7g@*o2e4!]]YB_a[4D/r$o!jUXpoaHfW,ZtuR-;OB6'WFZk7Es6,jdb[daN;`KA2X4PI\CN.i7ct%DU0>5BU&jm9&;hj`3B,!Kl'sFB%L?Xt%D[)tB_n%Pk0<(L'um^-NB5=$a>p@!70%g/=$DB!.2UQ^]e_D:-'&/\6R?0(r^NX8R9dQ8Tf-;P/0SqBm\K5PVeQ.dil?gK+O'Sa5=u\bNu#2HddHU=sK9@CtuVdG$0[?2is`>!DW@3"f/ZrT`u)Z6B?U*4X;./&DC*]E]L110f#cr:U7>GT8no_h4P#9i+4OiL;)@7EVF"MQ/@jWL"f/fgX^kEY`/`lDG/U*d;.o*lb1NSksV[1`D5ISs+`')ntC)d?'4&o63&I6nt4)Uko*VMEH6,qg*G?Tlh9-JuUDPn*r=GJcDT`D5%DdK>("/]qHP5b_U+=15T>J?ep"5#7]aZI'?(e2b8,(]&-e'Q"0'#C/_n(2U#p6Dj,G;E6[k[IrdVqT!\3=do^F`i<2$H4$n:k.Y"Ma6(Fs4`+_9\I"NHuM;.N8rYhS[Z;6b+;.OJjh5CW;c7T24h3abPUWqLkcoU)9hOn@TK!L&4??)$p`=sV5]G&9E`Ot.'[3qt:i8kUC8g*SKY^pRQPI%Ne>L"mZF:$0mQ\m9A('VZAm@lD%V#Jm!)7*,g8]VQb-Tc4Xh^jo[X"rj@#G(`?qi[ThT8Tl337[n&=UugF24\)^jd/gtmC,ZOT]T/ECb#mRDcle[e=?CND%a.aDi5%tT76&BT(D)[mfh/-\%-9k-@6.l:kn:rMm!bXoM*d3`>S>hrTsbQB75l*oF`&XIrO`=<NCQY$/:V?d\B^Khqo1.k3<kl@dg'%nV=`32ZsB1$OU"?3oOh58?H=#ddL=LD\!#,`l0P(o3N".66I:R?)&1K]99[Dn[uYf\I6<9'XfOU#(m"9-cW5ii:#\B)L]1`T^LEe#7Y7B[k8+!?*nQ:kbb+Ng(ds-<*EJZ*sSI+N&3g@r:<a=>k0V2>1>ha==A(,kjLDn)R=\OI^4s@U&)CA2lc*NeW[",rj1U#2Q?R+?`g-]dT7jBr2S"1*b;\F,MEIR96"p.np7mY7nB4@<3!Os8flM_I,_<MhEtK,k:1u[6#gSL1B3M@9`I+aRat-3S/G\fH'>5qifiIGO"-3q$u@@u$n!InY#tsdr7&^jT>-X*hc#GeMWXbiTRVH(onRk.5M#`3OhU?o_1*js2pr46mjm8dreb$-5kW$M<GE.(V0cg2j-NTejBrOAGb4P.^.Le3,c,D(VbYG\CS&2A4]:pBhKF%l/kOJ<H$,=>N&d07j-fhpI'V%h-*il&jMdf!h^WY6ahm)l=AjH6fg3BEEqP2mf`>IMY!D7=7k1K9e,;o/pc_iSCs//O0t*kC5fG`Pm3dlcUjAL_:%U0IYck+>!uX"0Q_3?u-"XPfq\7S<.kA]X@qW.`:W^e\eOl7@5"E3A8'G)+H(tfHR>+:0A%Eo7Y>lWR.un\9GAiZ;+1mVi(l)ua='>5hUXZ_&HDS3qq(hO<FrB[Q9i\3n^-SM,W,(CX7p+!;AK<,D?FF"ee(aQA;2W8$^<=;[2cdtlA6m`P2K>W"B"XH=SY/AN.:/493OlY9\N/Db(1u,hqAL&Jm.9d?Wb?l'mCb@T:k3oZX1"?LmK"3uA/.`+iVAJ>l,e:]XUVY.l:s)IrBrcGD8cQS='-7,m_6/8e<ciHN6ap&>Og]FZrI74@U2,1.gDX7PB=Ml^2r`+m^9cpdq:$BFio$>Lq1dEmaDK(VsfY9?bDX_i&W:(FiVN.'@].R-(43IC5o7lect"HH-OJba+%XgNrQaOV79Ht<`?,SM$k(?H6XH)9"tKDi#8'S:9(*sBu]Eq`tehH?[FG*W^W2nQS2)`l)I@Hk;r(I1O;2u6f,E-CN$Y^qYHlM]XrVfpq9E[rU*s:3r[M)<^m$u;#NbG/j>7K6-0f?D5]e(R-d\GPc)inD>J1.]FDP-A`o0*:F'[>o*4OLmWV^[N@>r!P5e7*qNU[W.T#!YU<NI*Id.bqlRm9&X(A/kgI:Q$N!#l%F/JNnAlXaoUO8atrkERje`Eb[.6Zj#<Z_.E4Rl5<oCO,+VLB,[\/7ul']g_Ql.aUAD^\Dn-m"_;>58X4[ZiD!'9m1"Mh+3MU0<>e<7G!L4'Ur9hl-;LB0&-%V'4c('d'GubN\TCpA^j^XrC2cH[r2PdV)hFWLfgdBd=8'Mj%],<,3o4irj'sK)DB1,J5Ybkor03Kl!"?-$;4>G/R1(Xd0HZM@1p\`tRMkV2C%t`S4ZdBd]1:c,tf'V5KKAoW-K5/r=Q[V3"fR&Nu9t>:dHl7K/H/K#L6#ahghTA7lS;FX$Ah^"VtP=,cP13Zrhsc\mu%]d6[92i%noe9?&Dpa">N,\N:"D7WE39-an1Y@U;nU?#6`+]V.*Minh+Ofi"$B!0Fd;25*EL(i(hmKic6B.?gYIE8+/.T,$XW%M8U\?K6bdqCcU'`/.&1A\VD<OZ!X?^6`-AUt3.ekR:9SeV]6jJA&XI,(L<@N/aBJVe9G&sQXj8@Xu/o",;UW4*!pXB4P.l.23oHu*O2p-4g2`um%M_cM'YL7GHN399D;mm;t7!'/b$FVVl@f_@n4T"4RQA_FKAFrpP<L^%)h,qRs6mS9@\2aK/_f75>X?Uc@--qk&1cYr4:P-?.Xc#Uq^cJC-.gj`a(*7$?CIpe+^1#.0Q-`H"4I6<HB5m8o8Y**MVRAuF&_pZZ[1js\4J&ks_l5:GO81S5%s4e'MRMF%HqB`'D$P'irO"-Ns;kG_H$B-Kto]m@Mi559p.^]^`muAq+4]_0N%r0)(/!9hf$eF])S9<l2#E`cJ=ZfuGlAJF_9Mj61IibWR-OqS4EFlJVp6"oG%[f1,Y14qI[o;!@AG+u0aW#9nI/Vk(#A".^8W&0#9V'U<Fn=$cs3O@)LYp.tjRrmsJgtl/hkg))DUn"O+:IrB#IRXFVRE4ZqPh*8qOclQg'6p#l71o#J"tGUadTF3[;DdSO)'"XfM]9t:/JgPFp<j%9GF%jjDToU9m(Q?^OB5PoDe%f'RbVJX'8=8P+]+i%'7_dV<=$`5$9&C=\hOT7CnQ@Bue#KH;Eqg$Bm,X?_!a2'h)h^g/io)IsN`nh^@+EUi1,-3pF%'H$PgHITUu'ZIM^[T>V@bnLCi]JLkj=dEggQn*'g!:ZIRkq_Q=1(Foa_C2c8g%]Je!P80gYab:X-`sHb>O:-EIlHHUqcD&K>U]X,o*Ji\],IPjeUck@F;V+oc[i[58IPhs#.a7CSa`)hMgE#6OK&V06ikdIiURTtu#''3^6O_d6s$@_6;WOaSWh,D3-0O>\K6A-gh'Y=*44.+ukMNF!72]$>^QKgLl5-$kb%B)UgE>PC1,.+8<J$ru+7@.Y9_V2`m<8u=.t=Nmi7TG[h[P$S*7$Ao\aYeR-EP<!Z/e@jp%30#:_Ms2n_j6aYEdHHKP+k7j7d>kKH-OTEjH1f68!_M1gQ$t9Qo2[[r3rdaVg_o@"OQ"h];BZc<ZY5Up`uG't%'!MYFON3`mirgEOQ6ms_^9kIBJK%::H`^DY"]1@QjOE8*Pd^.qLiq\Sm2DBpipnR&@n:jpq<ICZIU03!?hkaZM97Cr=F8UFYPV&l@'002BNeE8YK;ftN-cI.66q?3X\[Pp,=LoU;/=E?<@d?/Y&JErlX<;X;%)lJmp6bVY/QA>`P#Lu%&NANrgr.gu'mc9)%qApCG-[CS*(&t&g>1A)3hSr&Q<_nW$4g#.Ahb=GVdG**5-K"D*e;9CMrAgLFJ*8k;lW-5k,I^I>dqI'IaD\heZ\0h*J!5Qk]bQs\o"G(!X/M/o:jo2tWa]P^5>sZD,VQ!,[g(s!J"_&b'6VrrX@?8OG)3O$e>9>rqY#[sL(feZh$aBSIQk3VqesD3Z^')&eFWS1^4/q=55G/^@Eq*#&EWf`oKrBtl'!(I/7*5Lf.CfF6@sugN*K@8\1$3E-SF]8BKf=@X9Io@KeYd.#YVJWIWF:;Fj7,!U8;hT#3h]%MY`CfUBfDiRqE(,09_BDG@#GNNhY].d:I=9%)Ld6FML`/T204h8g.X'_'78q3l"9$7if[fh+,Q'B1mpSQA9-d^[<;BT?1g[TlP]Re!_IA397s5XtjmTQ0?(H\m9T]4]uE%W;+_%Z98+7l0>s-rOTRnq:/m*W.g!+9Z&,(j6R'Ap>i!%VHC,'hjK5e5>nDea4BNO.^+Vk_mY^Jq;+ELN,D-6T1s4lod1!Fj.N-:Bh(.OW#tqm,"S!A\]3<6@%nU@l_(+WY['S=jOFV7?O%lk35=2#_K'Nt7?.;dgU<!Gd6UOY2Kh"P^)Kk6IXO)]i+7lGA7!,g3nAC;hT29NlWC:_9UE9g;UcZra(;]/i6p7&]6u]_Dm`Gs'9lbQ4nuPr-RcRHblqf#juUd1s#kulc[TNcc$E7e/RiJ$J+p"i7Ep$ti&Z-:NEkK(1[n$-@Hrl*Y7_O0,W%U\Aue7nBRR,.h_fN>"=8BnMr3e=m4)g]ncGH6=_/Uo2:Ze+ga?cb\Rab-9#Fb:<gC*A0]lDg=JZd5**kBK\tG<C60\83ICue%61c2/f,Ad5rau2\QTot`/'2?Ws)Y-eG6+gLcq5V0U^hI\I-B.8_8<]*X!d?[n(=7n-n_])gt8`FUh<_blI%N[cuF(m6%.Kc^LlJ?EoNt`M#>aH71GkOh'78Ll5ij:/QZq'MmA&njr-\25O'cUZ]Q8g+cj?A:@7g`Z>ApY]QHg:1Qa.JNs[](]Dnc[m==mt\mo)Ce5)VECaiWu-Reub*t8oF6+*n+[r)^SQ5%L0T!*56mgX@;M(6#1(]">a=*FTfrD:PkA`QJSgpfX%=GZD1^UpDTmDiQt=ce#`oXX7C,^#HDSfddk7-f<_micbQl@QXNMXYYS>1"fa'.V_L9(nCmklp(+dma!pCGal<'LtIUFp7hZ8?S/6EQ;&TQ@It65H'PiEs6P/X(^cS,Y?1TYK3NB/mKgglORJeg(%dqn)]mbOZn"aDVba6%)&mSX$^\uCbk6?o2SrE:9'HU'A(?L9]PS4):[1:k3>VZAbaS^3'iQ&Nj)8u,skI.5jie:T]-fDmN8F+TBM&qVl.U62it@jdL0SJJ$mI5mqPhjPkW`WT"Q<gHg4'TmKb6JqSAf.6G&S\.C*fhdpp,8^dNtX;%reRrEVNskHgp&k0Na*&@QK6ai#LKLJC['caR@!GknF%;r@3G`r<C;kP4lM"YADNZ!)W'q$7Xu7P,ZdSLhF^Dq-uMTTGu^#s#3#PQMij92N<M3*fC%B%pdE^NkaS(9`b5>U*-rRfp.lDhfh@^Vijm*U<'iri`'a9ADm85IbdMjWB*;b%i'J2XNk%IjOR0\#/KCh"IrBq[_3K$RL,$bYQ]:Z--1VocL-=BrZ(<Q/mO+j[H4'(%58I[f2D8dQf.J;h'sIq\SP_3Ak0F;0T(uB.Ar>$X#8GM6'ifhq&NaTqd/jV2O:8eK+K6"%@ZRU\)d=)Z0QO:QJL<\LkLX+hN/_^-NS3#(;iP+[25Zr\oIn&b8lZ%#t1*5^Nsr4%\L_OLnpc#u9S2]-J;;O7LOuac<"WKfsG:>a=l]UV=mN3Kg*D'tMt$X_rJ:4)@P*DN:AR$HSs-a7=!A`Z*$s5Bh$?,m!&;(Khn2;+Z@p:NtHPr'O%T?)L0k=](9U<7*@#5Yka:R+fr3i-ME97A(5n:jFSebQ$DF_S30.D,,<=,_#"b7D&9?Cj-3YWsa4H?Oei6Q)Qh)7N)+[%?mHDZQj,tl;-RW.=]j-I&<ULJ#0H9I#cQq4A[o^2p)k,s6JuV7X)<a8_(Z/LeCbB(K#1%a5#D-4o3"0r?k%Q#;T7n2c;A?^<=;[LBId/n3:XtoubVpLG\RO(at.=,=04i-WVslTXs:cUZ!C]+5=JA*r-m8;gskd\bK/:AaX>?`U2=C--tC-Cf;`l<"(-&lj2KfQ[su'#n$MO5n3M0OGP4AY76hlI`u9RMA*$-:/IM\IlD2+?]=GF=SU205IYP&'PHcr?cf%#,jR_MQ9"E8s.XSHO$%@,8D6?IUG>Mp_N+-QFr?\2OJ&8-W?s$m<3#i_@)EC#.*74Y6D9=r"P#6m^Q#&1F/#MAHTlB+e@GO#[FHA_nt,SW/ZYtkB6MW4NNa"Z0e.nke@:RT$!34]9GeBVoJ+l!23R_kCk<;'rP)4n@Q6Z]]Dk)D'>55X:ua_@-X8rh11<^Md)T*!e-HMITN;";$=+&fW&EhR7%*7MQio;',B1L7,Ua=\"9j42bhc1"%%0)@s(<%W%$R>(rY*FB0>f'6nK*5pXrp#u0I/&s@F=Op.",[*=,EMo;,!`m7ki4@!tu[f'EA+5^h=lW!<<*"N7Kp]:pQrSrfb*aC--e@Z0*,Pri)&65Be<M86m*Q8,FegqB`les$a<d/Fn]Kzho%HK:br4"J'qmT=m)j8_!.AfBD`?BVaR0ClWZfB>i'HVKY?;Y)tddamt1`H!!!#VesIa3h>QTE1[:f9pZq1e\Qio34$2<sQjZoA3YTUrSu8a\Fa&&m3I?GI\_SOq4U0HcFErMnPf]-"I[`"INR],'@VUI#hq^(tqhi2"F+)h+(E[nW2W/Nj`NR@?#]t(E3r?&c&%(lX-7FaYS[W*[/!nH@3!Vi`Q]iN_*S_;.!!!#:`[X9r"<S#8"(s[6^>sK&gWni^4o_BX.VUEV>0:j>oo^tDcC8_mEiE1gVn-337`8R2+Sg''Y4ic4mh1MW"d5MuVg9F7l_3NT5/4nUO3VKI3l?FZ_fO[^mCbd=rAJl%c"%?JTEJg4Zb59=22`nUe9E?ua,>5Ze<=hI!WrE&J-d-Xl_(+KR6&TUit8rkCjD@@<3ac%(\:7l>D`A:_SPh/V+=j\rNkm5kBUid,bKK]7?.N\SY2?STHA=8`Kb,'$=:]_H6u[?3DV$&4Q+35<ii@=0AahrBCWo?.:/493OlY9\N/Db(1u,h#586#!!'g=0g(Al-[M?AhCnmCL3),_?B_HX#sXa34.@/#gjOoeeDi0tcj>T7"o;(TO+"UheGltCYU#7l)#ZdF%2PM<gjJ;g-$jpb_g5mCQbL'p+.Lu;g<P/tPM^fI'`\46R(0Cs:fQ&qXj5^EkMLAQ,ou+#bA=`(4REp9VU'<iG2\(@Y1@V>bVgTETr0P0Flb9a#s?rflT:$Fe:QI`Js)<2IuYI#eaR.eqO:@;.GD+Qr8K]-ARKQ;-]q))P9",SN@sL)k_W7K!!!",aOhjgqLPfTln/3A)ifQG=%IFVRK!'M[$=s@2I(H%YCMG1nh/U^ZZqXfo;eE6/E\(aY[,"sW<L0G8hLoZT8T0,k.l-1?5gAma[^\(\ZEF&Cikc&[>g`:^$it)V9D*u>q[T+!!&Aer/[9H!!!"oK`hPZ!!"]V85K9d!!&dJ"9ec*!&.SI:]LIq!2G5N"TSN&0Nq"DzUP/gS!!!!Q>"DHi!!!"oK`hPZ!!"]Vh_[X@g5:oE#J&S`T5%fZo38dVYDW@LJ#/M3,2.=.p8;$,27d?HY61%WZn-G:_u'98@X^s3!!!",_S0H1U,q_G[H3/+<HZFE11AXq_a0U6YqPpfZ"$=$!!!#gh>3EDWpRe=[ennt]g'alXNSAK?d#A.'Yc\I`r]<pQcj@YLs.L's":OfB>jKYJTL#N\9T\jn@4J-UA,I+&V2PE>\Dq/iINoD,XM)6.XeR:W9S<,2[?m5*OoEKITc"!(0;\&59-3)_UmW"S`f>O]'"7#UgJc&Q@dUDF+&GKgmkomMtT;IO_GJn1FH_n@P9@SL?l>Eo]pC#bC_aIYFWL*!<<*"VX7TZ`M3PnQ_J+s=`Ac+_KVm>gokD?AdLb+_CVn#8'PM#&iJO&ipgJan4<b'SEbO$XG;t^Ra*Rjo#mtud[;A8kIgWEH\&R$D=1SsaW?0L'Ou8ehNk4MHtgp=bF9IuF6NfRCX/Df*HJ,^-E"F]VFJL/rZLH@:fNjk-n,(/(F>D@l;,Zq1&FA0KHquCac;M8kZ58EZBoUe'?Z$QS']n"_c(s[^CpSI!.7SVrKZH,cM,;%c5k`Sf%4s=m"D*.;,rM*jCo+,mTOMR[[`&>FV6_:\a[Zp+uq[M'C4qO=<S;W*q80+/(Q>:o8C*KAf43;K<&'!H+EAr'5FS+.e\.tOqkpCfg"4dGFl9U8+P=<<<J7%Oj*RYq2M`Faa:M!%CD\k:);7ab/O8)>MZj#mRO>FI#lnM))n7mS\\)&!!!"rmFrp8=[un0G^OsU?[r\g,e@,2\_H]KTSN3_r%@qO4Wg0IKJF0kgj1V4lFec#M;pTc^X-7H7HYjR+)QTZhWjI1?aKXW)I"kCJf7mb:0"GY97%=OU8P%U@St"'AbXKI`\)J-i>D6tX#KiN>t&`S2L^dfB<FCB=a"YiS]C^gg'#B9:O'!7:d'lkg&#@3o,0K\J$f+<.=Um]o)Jaj0Hkh]@o20/8,]<+f;(X1D%fN1D:Q,TI4`,B<f6[kEBMF[jMF\:RBS#"`0)'FeAE,SjPA.jo,K\oWo;-Sof&YU;m^3-`)S6mm#Z91,][nb[10RU;gV3gWNO*OBAH]QIbi8NcK$OJ:gBJRc["2t%q7TqZs3pD%EN;JdO-,67?X-OkS8..PGIGH"D>%#Xtl^E/DcUo8)DZ[9\a`",B*;78s80N2PE&q0g(/3%/s-)!!)Nepnh]o,g?L,)s03,QooZb<,8**b/BeB,ictW/'^Th3Eb+hg"?1>4B\]!P'h5#P04$ZkG%+N3H1P%QUWTIdN4%(9:PD==m3f4EV>nE\Ne5`p.u'QI\P,Sl"ds!fQIa2Mq@aWbl5"N68%k)>No^3_fb_G$AcbQmui)Zqc81qC(?$Z1>>$4C$^u<^7=;og*gtMb&Qs_V2IZ-JsUBR28<Hg%C$6<Y9a/5.DG3,#QOi)^,Mq]5AKa>ZBBZbnl\Gr3qk[H2KsR8pNUlg!!!!mOsq\*=_I902*P8lSu;%I^uYmtDZp+@!+:bQ;M"rM!!"\_,U`Wm!.`H`JcYoP!#R:5-ia5IJC-]8!WW3#(bI!]!!!"LdJAS(WZD-?!+<Z1JcYoP!#R:5-ia5IJC-]8!WW3#(p3=#:]LIq!+l9=$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#Ir#mpY4!+<0qTE"rl!(I>&$31&+@'l#gz7LKM0!!!",[#gp\!!!!g$OI.?!!$E6OIuRR!!#L3E.S,k!!!!g6R=,\z!!!"L1%P>Hpmnu@~>endstream
427
+ endobj
428
+ 110 0 obj
429
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 157 /Length 14698 /Subtype /Image
430
+ /Type /XObject /Width 777 >>
431
+ stream
432
+ Gb"/lG?bhrK"q'>muH)W\_Z#rgV)?_Ap80\R2r[\La]B98W$p$=iYM%*QL8H'LX2kMMaDEk3SI3;3B371c.4*3p1C&#f!B71f2Q_&=r:]H2]4lhb%fep\X?(heJUL!<<*"zzzzzzzz!!)XS-'NfZHbmE[cN!qF!9b&+X"F""4Y*6=!!!!Q:d?j(1]dXW!.Y)<,=EaV!!!!95Vtea!WW3#J,r'5pGj-LWJ_girU/Fj$l@5sR57#D3f]TpmshB/g=Wa$D5b(g0P?ctIO==4mIVuK9(#*Yg,kdl1O_?3=a8mE'?(moV^=4Dba69TRsJZ?!!!#3,D\hXD)?!l`:'3f2Vb+C)`?0gHg]fh0%rNSqW<R=++%tM5DNq%^qD]#F0[PA5+T4#D.1@MZ)PNkBES;8",+sodD!#*mk4+\bBNrmS.PI.jc`>%VN-u8>SK3&NSNp@(Bi",=-bW?6jJYM]DT[R#%[m^XA-RdouDP<E2/PY^#p%aT8_QGKHo%1TLMMum0.!u#2T4bYG&uprH!cab)Gi)Qnpp2&C9fSdQo\k!.Y*%l"J"n<o75`<>@Gp(@]dn6KDU]7;h*Ep/Nr4L5o(n=JIqI#Pr"!I=ENceV1&A6rM'30sb*XZS/'#S".1@c-/\ihA!E?\'j?16"Fl$Ei5eT]%)6>d7F8ZmgnQ>_,82E?!IBW#QOi/#c=@onP"5HT4F2$QgO^)1uQuC4!tp\YFD"]:":W@L];uVH#P,G4OPF'jGTIreW".PP[XS;%C&prAiESfBP?C4X$?,YC#Bg#6N)Y>(<C[IXm3u6ZK5c\gh?Vj\LGS2-(2,I)`@ZQjHi2_'PU`YH/e/Uk(XT"`7\7bT%MPcBIr#C#lR8^]10.4EaUEjlH<VAUJ]N/r+FO'Xrh]!MFQ"BbfgqL:/n^i3`D<85C@)Cm6%X;)E"KEYD.JokViE!k%"DO[)cn#m7b(L29Fqt%("oD:WlXZYQ!6bPbZph]nkq-!Zol/7=ljtl17&"[l?FYHtY\!Fm[k[\^t&[&R?[/AZ$E,WHhe(KW=BA^l%r;)9OWPl8s%N^+2W4gRK*mSnAG=L\HQ#+?%$gea#0VN"9d&Ngf.GlVWq)g7[a,-8./r[lMdr`c[qF$iS_JnNZ>A;U[KG\hKCX2Ce&jnsN(P@t-L`SCR1t,n:?#f;)I=h>(gQECoatm9DHa_>RHrH5m`[hg182dBBHb4`l!<]i/VF!!)5-Rguipf14%qV[bRAWuGBj;4a?M]'=FEr1IN./giJ+i`&E4;`mf!-Q@O05Pa-Bk%=U^CR4O$F']YGIZr\8$huu95+F**^.rt;:\:^97&/o@+6mbs<#tg3^GGmX[l.NTBs*=o?_1&qU#DDccTc2D;"O"nop=K6M&Fggh#"Te1pWk5qV__FeL.fJ>\.tt?N'kQQ2:MJQOimFr@&XBX#L?uTGm64ZXOuPe>bUA7FW_WgYarDCu>9IB>Y@sh6U`iq),^Ij/uU6bnA_WfR2K;QAc=k?S.;L&/Mcqk\&tH.@[VbNGs;CgfUlP20U$$cgRq-lUTV^bcJHAI+r>akpB`'?6*rMcE[CYp9nPu2_miXb_AeHs4e/2A5BX0-4f'bHoEYKht-6HeUshu5[KA?bK89be&23#cM5:9Y9Y^S=23NQNniVqWN%T#J0l1_k4@7;`imE6[!26c[OXAs`hed!F$D?kr7@He&]ZMq@>PrESZK=a`J-uWs6I"/iT?\p-[AY,a`dXA;U#L7f(EG9LjHe`!!!"@JE^`HZX%^&S<EN7K08o27;>PtjdXofR"*NGKVik9#bos:.U=<'aH#`<1bJ"4RX8tE03(F=>O)d,J#?Y=-5n`f%r\d1FDLbdq7ZF_B#0rM+&HMM5EH)VoURjNBQn'dmOh>jBOjWJF^6gB,/8A[C6SF>Q/TLEqB>U6B[kh5k+#]VZ2W%gIl]-PZmdoq?<3KB3$kPl+]HY07urJKdbio+?$(5\s-PT+hTV.i1r5../\YSo)k>D[I:LOjbSbn6S$!n6C>bYNk@eJq2YhBY[RkA$Ui18)D"R+h;.l@X^X.hm`5IQKg7'mXZKtj\<1)(@o$YIU"N/IX8ssSe-:Lu%?us>+(<5seK2UlLY\0=4gO.>/NKb=(7PN'Q,#VBGW<#^M+tIWkSI2.N=`$7M)L/1BOS.PqF=:5b!+;!?lbk:D-pF#?WOP[V0mQ1#:h]n0!'7o;1s1"u)K0,_8E2Qd(Y'W*Io?;rPXYON(A*Y>]h:#6;:@7ho])JA8To'C3oTRhPsq.5N>'IjL1oWnlY';P%^j?L[bIGJCXY`tl'p/:dY'5Wjmf%o8rUe/l$'"11h%kI\#tWYT1f._7<UDO3rG^@Wq<G9Edrs9'M\/Hj9*"P4#f2=FT>.)\1agbqlI=jC$JNp\*0+"BV?Lu,J=q+T<GgQDULJ[mL,1]9"ZT7B18t9l?uu;F!L.VbGPb)[hF$=&$IpKT)/EUXeSaKRqSb4j[_8mV[JHTO-cb5r(Z(k2[LP:P5?r]s'k)*h91fCRS'1H[5OemablHpB'qE+?E2f`=`WGm%D?/HCHrhu>c,84)V8epB[fkRksKQQbqpJgoVO0u>`\]^OQ&4=ojI?HHD/ae!!%,Z>=PB;OI\I+I5%#_X"JeuLAY#:ml0kk[8%sA'_.#S%97?7fIIGkX03b;Rled>IuoE0UqYl0_c5e_Q.)m.)iYp:XnC!;S"+Y=#I\:MMP$o`\bpRZf`pNe+8FHj73a>Z"49T5V]upXeuN_mq2q1#%T:;hnW<WV1c!FVX=JO?p%4^7oDVArO?VKh/8T-O;lXP*8$6&0H=0C(dBfCBSiD5*=k,CG1P:UERTT)i(NLssCD@<'9%NDrk)B=Dbq^?_6ft4"D]Ofug]SK]aF4'F9l,OR!QeYCpq%\?Li0Edd\K)(s-pN<A^%7]H(rn[K:Q?cSKQ,o^K^D:7*S[p?0bp25/g;2k.4@kg1W<[7t.LG/nu&ZjN0L)2#,,[>1Gu]ZT?dcgW\Hhqha+<*kH;Y4^Vn'!!#(</Yg]HU]DPem[S*T.[li[NQ&0f_]Q>B6>;Vs6>Y/>bU1SUn4fYSol5JY?JYF>MGljd.9\23Ug"R^2#7CSg;q?W3W)CPN&hSSip.PU)EQAA73bJ%"49T5B4I/4%iSfiDQ:<PJ+eqAEQJ)/)E$*t2mdoMW_&d$k=uHq=r:2c5R*_X2&]6F>1Zn1Q22hP_4bV=DE,`O=0fVp/*.5bZKE0V9*VM+h)JpcMWAJ=4,l_;2sf8,nf;U7nn@,<bo&nB[!icaQ1_Pe;(M[8p\7jpLT?>As*s@Fo43DU[n5smTV3<BM49sqWUm50An-nbC,/3oC-W_t(*BSo2-d1V1m1%,pE/OVcbg)o5Hsik_4b#mWa+saN9e=P&bSnq!<<+m"$cV6$hf$+C(`ZIpBAIY/j)SQr^GAD[I.YhDY'&kg=n'k=n8<)VsI,8_90.CO3AJk=N*,2>LFdCjD&egkfa_j=ra_]=[RW*_9]aKb%oJLT/UAh^&aD\o0rOW^/8%&GN\mdV6bQJCh($;Np`5N)bNmZ1,F-GoM?`W:>J[M3aAAlgX:cocp]2>rGQQiNRXK^:[%3b-#FT>B'qG7L!hsJQp.6NXY^"X!3JLCH7u$joBX8q<0r^@MI]01)b1A81UG)gR8;\&o=A*$SEaN#(&GeW"`4f7g`O4LhlUE\UWFjmOal9UF,$+S+lb:8E`Uh">(5'oIWI-P\QRmf/a]egT";tj`E'^Hjp'@!kB4AOW'OKrmJBjICo4p/5%J;nhd\sq.-X4;q:XguIFd\-X.e[Qj/7i#HkV!X%2fNilnaU!2I-DjMFNU'Hdp]>f(IDfVC]ZL>]rjFH0iO\ND(?i02rhi!.^(p1jVB];0,,#Kb`)NoG5V/h9)kJ5F'fmXL]5Dp$^#um`2Y@;r)4b[o1P>>D03`L'O8eDBKmH1](jOg2n"`gaKi/eQD+YXF8;Bc1mkW<FOrfqj&VZRd3lSW-^KK&!c?#Q/_/[4t>*j<kc+AHt,1I$+D?bWjHPT;AJYkl"G=olGrJ*&`g<'Cl0A?WX8gIP3Z@pYY$!g)?o;9gRAYD2Im*2D"=uS6]*X)"'pdRc&IlJhg1CWi,YVYVYf<rFjA[jA6"+50s5@8RAhFrKh;FI!72=67dk%JU2GD7hDW8*EoqRh;a7a6eGX*h3i5/l4%57@gmOW,H`o:7[K]HsjRXn%bfk2_2:&RtCkA.GJ#p1Fb>trQS#(0aq2KM6D)QdqT8e:/]0?7nKk@ssmBq!*Jd!6G`qZ+n7L%9%<kc-?FkJWZC[1qh%%cMReY^U:@i/g-GQ/sl@!l2c'a#_B28<p;2X8JRRj6O%gYq*^V23I,Vi"YYfuUe;qDZoAN,cSelCXl>We%<A,H;e+bd!qooC:n$?i'/]3Sg%U-&Ye#MDWZ([J=+'cB"n?.Lc@X5R/DM]slCFV!3$to=-[$Qi>g\R;*Cj9sgJ#F_14$QChjAQ;X!e"`JL%oDYjPj-Q(G2G<e8iCNW+&S/HZ-@*jI*=CISeog>_#iAKd*k5MJEp?K]Ih_IN3oT/tRBm*G_>)>2$[m6Sjp9VhGi13`o$f"$?YoaS).@#n2UlBXQNqHjgntKQrIM#_7Is"<lr8eQ]D(bY@upkqB5Lt%/rSUJ!&TNG-Blj:o9JKaD1DSkdi.Fb1hroUmGoAD^;eIOo@N,"TD5Mb1Aoj)Y5Sa5FsF%^*)S@g)?9a;3lk>@p4@^@Sd.$1b49SEoM)CKr(YjiCNIMa^Ia^`eR&1gHJs\:^IeS.!!%NbFnTQ3L=rN`Vc%q1h^Ep45KV.)_=Mj)J"A_Uk_17-s!eHX!!!"&RT-Ae\^\,0]4J=W7'5>Y36BpGr:<.MT$:<*?FiAL$V0jg<>ki;!!!EaLgOGDo'u;H"8..RmJlD>jo">?7I#Fd@\ss%kl%P=zzz!!%Q;K*_MX!!(B,l0GDRzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzhDaF9h1H8*#U/QDp3niu="@^gQsX+OkPG6&KFkjn+rUo(&WIod&AmiMd:be'BETK3&9b757KZg^,7#HGY^8eq)UKZH5mSWeh(,5IJ/6N<63nb$?Md_Z;A:2G,m_A5CB@:,bn27N5FN^,?`d?$I7<g)]+Bs4Q++JM(qodV;"LTBRsnhkA4J]c_p38mg665UQ(b"Jik]61anrF+l:stBT<GXIoN4mLPV4Csb%hZb^RafO36')'RtJgfc+3.sR4;W_h"T9flpd%JN1CW$X'!g5oa`4!nGT[X7O*M(fq,u\+W?d"A2KJ2**M2ZEYq.[NMNYHmZ&g$j9\dXIa3XY%\>s(&ot]QS9lK*^4R^tGfT$B&Ud5bAsBdF:6rtG'<93EhmuR?GYoUtjk\VPiOo.EH1#uhB%a__US]'n#h2IQ>4_s0`A_aE5R8P"G5Go/+p_9MQX$pq1m5+2h$@K&VW!h\,!?7LCJP`?q3mGan9Nu>r>(>4DXB-!qm#29B00<2_d2DZ5-7kbQ"!YqlBOL*fhKp8XU2kaH,c^;RX68W<e*!:r\Z4G%k$^Fs1jo*,<Z=L,D%0-qt&@XcD-MjpG.!IS>b`c4q@F&<:ot*UI(C2<I*GM+8]uJ$HVJCpoVa<cTf1ZhSmMHNTa!7.PK)QEE^"aY.(1$pYt"QMo=\W_C$iRAtH2*C.fW;-+>2cOdYLGql?56mWheYP?,=%)=P63M4h'<+$p7lqe&-P7]u'#c6#=`@fp%;^?@m?,)/f!MpGh&SnCLJDVBI_,PC+1EcI`(!kC3-F](IJGd5eU(d9J:b*+2S6>'C6:4C;/>r3blQH$k^h9=fW']kBcqu^CL<\!tFI'p5cBV[&g[FT!dq*M>E=pS?I.P8<G_TBu.F*CA<;t+O#9/N@p.Eao\El%Jd19/;NXD9mEf_S!UUpB"?P9![f&SVTQCN%E;3V-F^U^(MSld_a-Zca3>lo\nA'm-B?#U/O8qdD=%%qk!2>[g&3DHlk=@^M.bq`%P3ap`>MMFKdbEYW>/`bnk0E!ft[lfIq4agF*E9,6ce;9&i.X8jWb(lLt@o;1/Sj:]Oup@[)nBueUlS9o(g`:&2S<U0%a(e#Ya0BMCQ(Y9D"F2\K]7;/Dm#:26JmjoOAF!tBtG\!P^EK%/lH`KWa"#K%j(L(/3QQAdNQ&(;1%P4jY%S7K2r@*7.6MR/*0;DC!9Mqkt7iJb^-o9Y2+NEh]aj`rQX7+(G7AC_:b>i:s<]Ct``l7"0l4q9NV@\FZeeENhlF;?uH)j(oGjaN]lIBoP=^e_*)XaYc7MB7Q5h5TVW,k%Z7ad6o$!%hm2C-2B1nej[K"+\rF`dGG2L*p$%"2)$DmNEtB[j2\SBj5<H_)P5gh9U;h,uRLdYVENs5"s>N&X2ff-L*-ABjka9M+ZdnVjXn$+7CcqdHJ[U_?2&5!K2^63uI)qe7lb/!ZqIFQ#b(NDroEB9UfY6+7Kp`@do,P3S'@Uu94q@h==Lii$&l:OPmu/a)MU%^h/6$?XZd;%\:3E7_or<<K9h9s=(m,?=EmFfqn)?-\eaP\_(oBM1rqrEZP'`b+_)P+q`U8Y]o>09VMFDgq*7)u?@0.a#NlkN0-4Su:q;RDOW::6)AnQ:gJ.h!@\7SAoGB&bZ)OJ.P'BT%S%W;8$.6(:Vpc+-"@m0P17s[h4:Y_itUWK7(9Y)H!PHTA;K_eTR>!BV-U*N/(iN7&'cE$sTc01_QVi\[LcgZrq@]>-9Mm*0!!-WT(0YXf%cS+78:*CemC*p83hFr*IbJZ$%@/D9"8h:=fF66;Pg)f!.uOSa,M(0ZMC`g;Yod4B7^u$:5"Am%XG.)Srlt5PYR.KFi=1LdhJM6mDs\KWoel1`F^b)F4WPK\\/Qd=<"[#XSe?ls:9`#.01U&4-Y2pPNW@TLC\h&4-Z7=%&ea/YWi1&45$_p.7(b)fu?/KFl"LBV.[;O\c=q7Igl\q*%%L+b]<JLdhJM6mDs\KWoel1`F^b)F4WPK\\/Qd=<"[#XSe?ls:9`#.01U&4-Y2pPNW@TLC\h&4-Z7f7"En\?&4SJf$E+<%_N>7o4/5^*Q'i7AOpMY<iB&a!VP=QqbnAqYJ]``D3.iYk[3O)rJOQSph09F3qs>7U1eCmro^;#U/QDp7l:h[bZ]c&Hjia&;O'[aj31-CDc_W(;CY9"ORKA#U0++gRk4&:lom5[KSsA7qZdp,$rRbW<?WaqeU.Qo'uBO*39F_`bF`7@u9:KTs46eT+aM8I/B2\E+7&6>:!k,pTO'u=H^MCK&Q\$hBulF)%jWhrIWhS:j7N\guQ6*RpeSkGF99FTU7AF<$i^ccBhsNj1]%opkH'-BLK=SS*cNlVM:25Et;^1p!)`Ja(Q`s:-Z4!VOO?EUV4j8[DuTROG?l#Yh@92`<m]ANQ^VQp\`f0=+.i2mL10R-f6e:01;t13Gl("Msn6e>V?!7K!Hb$9.+t/\@]=sc3q.Rf8DTa+G:<CDR<b>,8%]cg61E*e-JdNj(iNUfmJ&sld>He`:+YV0DoeX6I7P>_K!c*.U>Fc7P0W]IHFF*=nXSUm$Q<>P0t!rlrZ#mA_<b5^7b$Oc%=Y_7+e\(o-4.t^?K0qRWt2uod\=J+KVL;S[`u(GlB+CMFLALkn\3Nh$O1di,4dO?dtW5?Jh8:'@DVLLF*qi]F=ERkP%=E="(#l]s6GEFn;qS.N6tRSfobfpiU`0e7!ZX,ZY9V`E*gW&`Y+!Ws-AGHRnL(Ker&Y(?ZL*Rpe8QHm)iFX@S.N]f@^7gZR0HKFgKF%ed)>,SX55>=D!p(]T0<QjEn(pYGeb(Rd&+_D'mGCp#[j3:D)pX')\'WLk^6g2ND#9/_HnN6`e_f=[n`:`GB`Dg5/Ih*IcQq7$XC9L%T2cJ/-$>"$UDo:Vi*K?%9MDP-f$GE'+H&RL-UK:BIg(WMhFLGQJO1idTho"9],9HL(3e#%e5Ek4.hd+s!-;lY2L/g\HZF`Tl0mG_CEd7'#Q0%7Sl)KG<hMn6gWkEQ,mKFkkMr@Ain79*,BgQS%=p*+.$E8:#s\gCi!q6rjRZVDe,=64I[C8aGPg5+b%08$0,OC-;GI6;W#nsLODa;?^ZrSpNH"gub!D0L"@3M!F!]J^ZKR7IlI/+-7hK:B;^S0f.;kgFYOfQW3BFj*ZX].\)(B]nt;o5fh*q:&[pf5\Bn61Q_c4Tgm`Kpl]9iCYCC1)d!DN$G)p)=?G5(2NIRDk2j@]#;M+C&N[)@:*(GKFgKF%edMJ7((":gA<^E]2Q4+6.rs?(^)R.@G'\r8&#p9&5HFCoGq."#I?6!V3Vu^K44/[l?I\kdd8_qJf)5o<Z.NQ6%(R^0oAFlQ)UH`A2]kgGU`WI,:aeB*GTks[jr0_$L[<SpYU>$T6@/U0\33!ff%Fo;^3@FF87[28*AMcDN(dcH8MXq>F`l#0\p<^fc2U^Q3o:jB1t>&l-7'9&4-Y2GM3"j&TuuC4I(kQp9QX:<VR<Na4F%.))5qE_gCA)j,"M*iR!=8+t.qdGg-pmCT?9-UrT4&RsDXV(8QpZFb6'`>LDc6fj!.>bh9@7ZA!H=[d!0WBji+o_rb$tSD6*Kfo@eU@ILNPp8)XDFr-ncmG``'-[V/)NFk/\H[/=gI3beDhriTLKFgKF%edeR"M6:8ne"1o+m`MIN<ZbG7M%ll@J>Xm1n[8oJe16S]2qCq!A1#XKFgK&]cn@(BG$4HKFl#g("$\[MeE5:KFi=1I1hO\"s$#9+b['Ag*b:H?EJn:,'aCiHljJa&An057&'c7U(N%i6J/sq)@^?lN?Elc_X8/dBL%Jh"<iF0G-?]k"'S);#U+l*HUTb0clsAo#U+lW/#(FA(=<CS#U/P@qb]25EV>A:Lg`(mPf^=S<0^N$=q\c`kT$"i"&X*&UDJls+UB$Z+JuAk!I;ssEnt5Xdq!l4iSA8sd7@/?3%D3^:#;b1"lZBMDMa<!hI4#Gl.&`!^bS@%6snP5LWA.nM@9#mp69):\knANI<.Va<LmG&jA?>H.UajaALlgZ)&Z;i1jMQLG<iVDGtib@Z@cjYrKI6sa;TE"n9h';9pOdX$>"[M:OYJUBF:]6GN,!^*%9ha[O;s2*)%5uMc[s"o\>`hBLdrj5AB]G[\m6J(1*ukXA^E<9uqJ5SMGFkWo^tMrC&Kl>Lr_)S*Zj'PH@TFqRuJ>MG>J,_L5XOk7aOg2b-`6aStO&9qA<=2UP5Kb0tBd"m%q1C+D]l9ZS4nS2u>'cb)Uk7eNaFhS,L<p5qnKm\HZVabA51jN5jF\!XI+-+/SugsX.HdO^$<:8c9Al70=LAuap^UjPsYQ\&+**%JU)gFkbD@%Z)4U6/V_FF5i0&5u@=.]GYo'c6%8:k'6/9cf*=EUt#&qY4?C_($2I>gJ3qqMM;@(moS?BJf8Q)c_f2([j"LQ+'HZGs-7o]R?^"B[i$LpQJY.l'5WrNS\h/?&_<C4.tCt$EnVM&9D!3OJc!VjHB9Cm*A!+'4icCLb)#"5UGQ1$qkbl-koTqQDZmi(qdU??)CSad3sNnN2uhd:b*g#0/GhLXX[C$`C5L3rp7=016kJOI[*&Q3<+]S04Mpn\R4c"gK?$+.;pV<[F&[7p5GXW9n_i9d7@GD4s`2MUKtHE,Uk/^)4Yc^9!2(6ZX.2RdpE*Lar8%4beIseZI_SkqN;1od%7W5Mrh(@JmYiD1a=\M.[,^l>tqYcX5g4+AgY!-HltMJJrJBge-G5F*36(,B=/1qc2JE:PcF;a\RZPGYWn3HFA`gFSO!f&F"`m1Z-R<Vk%II#2U4*:SOqk)?S8.U!,$oQ>-h]9E5I'Le->IS/[h^P$PgPN'-$+p@os;nNg!KcHr_gXMFK&rkPU&`@k7pjO"Y\^9dL)BXfo8$:cEtC+-TF5B4[T(:NF^,Z@pqgXh2<85d"h2l[nVZ)L4L%iaO>udXrZ)+un$-5(/tl,MV%E<MqWB"JlN`bRQ:fWK`RUF(l_59<sN%RWjQV:$g%ba"A>HQG)p0L0#q\ohbXe.]W;@M0NGV1Dl6g[\7D6DV(,9?ehHiYCf^gj\R%%>Y_HBFhUs>EMYEu&+ci,)*,GmNUsV"S?#WT+FA4%jn5]mpH-%[6EJ]*^KkC<RaYErHWeqsnmYNj(WWi;,?ZXcWf%UtLDQ>QD@7_YP*N!dlXSJ!7I?+:Xn`m&;W&56ZjLF!m*@as9$J%d'o\*q=hH]D4>cLrG/mfadP"?o3JM9MajZmFH'78V1Zk3?&(*ik\s:d7XM#EZ@<'moNW+mdd?Q)oS$QG^H%_t'-,0`+(7_M"g=_c1#gQV&/5:I;>ieR!4j<GP::H9l=[clsP?2hkB[k^9Pg]9K)PRg&^Xt?0m@Pn/[]^%U2+d39?_P*=KJh3\e,0RG2]Uo<H`;.u`mL`[!c"R9W7X9V4fD=4/1u)SiZ,"mG-=UsOpV@_:SiMhZDNA87Q&u%*0F@P!\14nS:e-9MWkYl\12U2=!ESaT(^cQ8OF_)6UR6pUH"a*Dn*CH$Ye0Z?4Ro,o#=*P/ORsa?d9N(;4&o03NZ7;g6ih(O8W3L@03u47a[$(:DBA6?^)mD2>K/@_TX13-i^TneG37s7B73qr:Xb-0h\$[l_@<oh5)[-p)BsCWmiIGkFmR?U`Wj`hY;tP4-&E5LdlJ4<W"=bJ*+,e=n][*qdW(H2>:qjff9fQ/'CrHP%Dq-D=th@.WPc,ln4CB'[in'd]G-@q0h'a_nNE`7AG0?e_OfSacI+",uGEuT0e:+j`cTRDfm7YcO.;TjN3\6):jJ)?a<3=N<m.m0l_1le&k=H:+RN_dtFYiXLu-W'D'<0Z!U"k3ka]\Y@5ARW<YCLI5KqrL3jMcoec\iG;&F\EXZA+)A*J:?"E(C`Qkh9Lrh"P`H7#r($1Kdqu^CL<d)o<dPH%fNNBRnemqAe.X>Vmjqe7Qb>^<BNQ>S[Id)D_/#0&gar_@(S1[lDVIU0#>ZIb$W[7SI$O(Nm$M)*@W`E@rI0#Qq^;sVZ+P0E1fKZ1d?6bYsm/B$-huMo+3AN?[XUJj_f#ln7-&'bGVsPt-3_HOr9-1I<PU.P=MX-Sr:(OL(84nd+6Lpb3T=RYb_#pcMfeP;<nVTts*2<i_n.f]'U6qK9,-9_!N;Cc-d&^BL:l%0g$LQh0Q(tO(;.5#mB\m;UMbA`$c_M&.UtRBRQ#r_n'O<jZqD1HB?BAMJ+unab\P/ueVEX/S&VZ(i<]-Q"?O>0Od`D`PSn_HfK'-tA^#f&^j&W[rXjA]$M+310ZALb2Z_E=7XY"Bi[+oTI?Wnq):.i7DcK&E]S7OWOO(Sf8[/&1tU"3'A8icc'qsTY-$R/_Hdj3Y7XjhNm);LWDol>>0Ygr,P3NmVT?Dc%YJOj@X.ZA6O9">=RB2BDHr[<`k<_TtDnfeqhQ?T<cX>Nj[*-4q1'ogq><_YEn\h+U<4d%SuEa>fiF>W:LrUT[6H)ljVro71&og6[R=(7:U>-rTU+[17AagfXV[G6"h5JP\\NG(u-.a&VLaZicT'ak0]Y,?ab?,DmX$551LS`'o5L"2n9hjp/O"?eK'g;D^am(qD6,Uhh<3n/Vup9//*<q)`/B1EN95tP47I)tNXmV)h\^kjbb@aa4_WAY[*">Y*?n\Sqrfb26iX0jEk_4_1rK'T'#WVPQ7*KF[WM.X*%d3pm@j<T=bCe>D'Y:9mXD6u^+I2j^TAVR`77ADT,'?0%VX9]>gE!p+&/hZS(dq@[C;.r7ik,U<R,U,,?X6H@@?$*'Khabgp)GE$2o'2)M6-2"iF#H.Z]O*+'ot`'<I2A(h056i9Q5/.E'rQt7hsKCh]?b(okLUC`f^1=F:qks_/c-WQYM"C/lV?1'b<2er'uIa7f"*&N]i#OX_d(!C9$0dH,H8\:mW]IL&(:c#B9%pAZ_M%?$-J4/;37FG2PC;XA1"c0UKtOmb#+6\B>bP!p3Ik9X:\F$7DB@=WP,I+)Z?]"b0/9%UtK))m1NQBH#WV_nl@VUg_1s9j'>A1$b]iMkWnFRO]:AqdL(3,'a=!1A4[`TPY\b7=^L4[WV3TLW\EdiiR60BX\tHd=F9=QiM,P#:\GPe',uuilC`ZN^-]1S3be*Zg)>C7giD#&CAJ>*G@g-^D`+C_/`go/@a96B'^HS"X=?n4UR&Kf=cXd*DE?gTmY7XHXCu]8FnN1-Xh&0k+Xa;Q"Yl@>8W$21UJBZ!mr4g:+,D%$f@""f;G/N]@@!/L/Bd-qD7-D*Y)Au;<FUF$8X@Wc$;RYY8Xa>B5tTmt3@up0\lt^"1kRKB0nEJ/KSgh<WT<7(gB;L+'M-/?EW"iJ,-%%+<kYR'4gL\K,AP_iT*(KFjt:d"#cI&=,%:%CH\1bB_i^&L/5]PY[@$eue4-2>Z+15/;F]'4:m7mNd3r]j)3)Z'c.#1WPal6t">OY.!qiQU0?.4[D0VK-AF^VMRjB:DC0l<Q`[Db9LLnQ*Op<=U]Qh2N7Y\0,P0tOD6mpB\,ZEIG8a>I*8rqDBOf7B)eBH))le)\reuB^X>/+6\@=e<03hF_e]j.cn.O0ULk^9nGTWH(WDpatgl(1\iMKaNKmJ^$+k*fL)e;*iPD)B]5UKJV>]Ql*RoeH,J96\$Z<_46X9!a^rWn3o&/!WrK9+#M./PE!GOjPf<ETP9*Dm6=NN=OJ\;)g%oMFR78d"U3>ii*OS=%-1s7NU'8Q>"3B[QA>QWPZ.L$s*Kp^MrhJN0Oo(Y&O08XIPuH`>M-j5ht$n'XZ%]d:d1DJS_X>:YV+0ee3C2["Jeb-FgV*bAPk<%.fPg![:O>ZXruH,jV[bmR5.a*_RB!?YC9YfXaFEOngusY<f_Npau4CUnpMTUP]K_eN0];)uTpeaNbY9eR:9ie1KL&j=*#i,B*)EdAV;K-5s9VXbLLWmVin&cZ0gLphkg0)R\IdcJL;DE1OJL8D5R1#45"]=>R8]PO6k:QG3Q6S^Q#lUq5i\8ET\/Fd:*-9=9aKm7["B.\g;V"PS'fW+Kce<OZ3kBCNa;$@V*(CH1trW!?oa3"OK[H4Xb6:L#t;0]O9n*;s.0GL8r5Aqu>qhB-bK-Y&!b(VbtrAt?n<[iV.;Q:rmUgC50<'9<m8Mag<A:<Z+@iGYI9SCtMd]EL$+g*)Ktd%Qa;l:qm+'/ghf3u0O)<neiGWk(<^SFR-#Q#JC"R2o]UNP^[M&cL]u77I-j^g.0e<V<[.24A2(WLL;RI=hA"dn`g=,MUY\c]UhaZIEMi(4/\0jGM`jR5QFmMQ(SNdYgUo4eIXt\dgTCat<<r2VH:l-BsriO>\YQl1RN@ORY8aV-**,fNYKV89t*!</PF26Sd-<81iu,#YDGZXoCY`4'kcmiJ7JWBV%VhP39L!qCFW+RC);-85?WRD<:!T=ccuu)j5QA9!4D:Y?bUdV!1^N>=k/rYA:%*Pc.q(?$X[2@9nYWN;4ZE82/R%frETO>m^)o]4mlYWNK2t*@4c>0F*:GVTK@qW+C`upPO,srE(:58MXpL=MZ3orTQ$&J70,^b0mQobQUeQ\O*SKV4<JgQ[n_$EeWJT;25<s(OtVqLhbLnpEU=elO6.L<DlD3PshADPQ#OBNS4VLSZ5W</&[e#l$?!,U65EaAQ6/2l_2U[[R3b9^4(c)c:k*^a2qMZ&N*rIrYg]R+!53k&ac1fKP3c#SXYL+7N1/A;@70*LU+Wf&PHh1[YdP]--7eS2ETQ<8nI'Fkl0Cs+U=u!8<oi[?>tXK[R<I5f[Vh5bLDX<SsUtJc*n,,]hI6fP[u3)=GH).6GoFhr@]'<jgd)ZW+=t93+#;&+Tq_sNRM0MLKTT0=gH:s(cH4fW`Mj9+%CZ?_gN4b=?B2[*Lfm-BKZe$m(/%K/V]7RY\NoE:[Lh%2eE"%[h4:Y_itUWK7#b@7eDW5f4!;gd7>]MFdhuQ!UPUtO`k28Ee/'=HX:NW<A8L<dD?i-h,rQj;s?Yn1$p164YKbg-2M'&RCn%P3S/tRn*/O4c*k^^q\IpggIjEa?I#GWg7s)Wp75NQnQ#gibfc<?N(2kUD;nRXi)@%PPMX.GWat@to#HG^:ZGXFbrnn))dh=<BLKHl:$(U5RG9+6X*j@AVIaH;b_r"MdFr$]m8hZCg7p\p9V*.gbGo7!;\,e@aE%k`-%]:nL\$Rm[&jAH,nZYM\S<4M#g[HS^tJLmcoENOL.EDG,UTrDYH;QSCs*K,9$-mmWE'i$C6URJWS7HgUd=u"I@Vc9Z:gPPB:3[2)W[6")j;;(Y%^.\*o<eJT[Qjs;C_nSKu:C)^+\!lnIoGGIhpQ)C`;^"e17A>DeBOj9XT`$>^8![@;kIFUp%eRUjPPcd]Z.e972o_&<nq,3.9MKN$3PIe(t"t;Ar%M9p_K%Ub3S5m`A7]7OI">-9e\=U61skM`&S#=I4Ng7=h/.EAZsRUunWWlA>K_VZ"W"`rb(V^/B.%Up/@p"&_T..s\,[3UMBc.TpdYSpMm7+t1uVJ%jlu$2?<`+%E"H<L/&\j,-j+6I3]e9";?[JLt<8i*&S$YQ(6)GdmS!J+BkZ4nINQ<>'agFSb,DGu&@WYC,)'dlXIJi*J,96ucAKc6qBs("IHGHC/,dQ7M1b?%NWrn`L[IlD;$m\'K'#*C^UY0O*.3>N>9"]sr<2gIX5:oo0AH#iXOmQ`V"h4+DG$kku.o-j2jB+m`MIN<ZbG7M%ll@J>Xm1n[8oJe16S]2qCq!A1#XKFgK&^%P#SJe16S+mc]3E\mgtzzzzzzzzzzzzz!!&\TYdCdU"=>gR#u"_.':A"0'*&"4zzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!a)u`''+n*5~>endstream
433
+ endobj
434
+ 111 0 obj
435
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 228 /Length 29245 /Subtype /Image
436
+ /Type /XObject /Width 694 >>
437
+ stream
438
+ Gb",kG?e'\pAb/RZSPftpUBbMh:\?eh<<?j:_<b[5_+Mo"@Q,*!Z%k.&I#FJ5sZ3h+G^1h;*e%n&Hi.!*>0J+9'CpROFW@do=Hpf&E!a("m"g9fDCWujHeu!HZRKq50jo5qsX!&#64`(zzzzzzzzzzzzzzzzzzzzzzz!2bh/*HbWGgZdL57Lk=ehKF&8pV*-eD?'Y:!1tl^4!.=UA:beNV7O0#jM#rDj8@VUH+Wa9qNi^>@rLj@gO1htE3"ZC\&2O5]-A)c1_2s\X0bO]MY<2pXSh<hf3OqC,_*8bKlF]2%-o2$2LX[KeB$MfWpEZ'KK$PU?17-`K3K6*QN_5JjRo@pXq*&*DgOQ>OlOM;0;-akXT.s?*TsoG)_jd&K:8gs..CNpDM0#-6@8UA@BVonB)AP)<g?Ucj-TAFGFn6?*q=K8b]Ib(!!$UQ15558.Vj5m-dT\GS_!`QeHtP.Rbk]tEI'C!^.1fhq^[?iFr\c=mcRUrWL,EsS1>Yi5Ap^N?<_TVn1W_7_i$i@:pU(<Xm8.D[Mrd'<%!o!FME6bj7IQ!oZ@(nE0`#-2klK:M!mboT=;fur;,/mNm)m+!<<+3)`!+4]hg&Vd63OK;@,aG;dSAM^VB$W\[KB%kR4-95P95GVmN/DWc-VZT@itg,#+k&J$F+'h1akV=7sW,#DXFl@sGbKh@!O29OPn<*WE2*eu$cLjEV]7r^J/_l1DV];Sc_lK`=@aJ*h@+P,_5!=cqhW*B'oQ*b,W;=72?5q?3PTdaP&0G8P3mM*_J^4<IY%igWY)<H5P6opajrrS#Xen]m_U]l%[PcIYRSGD'nH36`DgjaZTe6OI9DYBom-Ll3QZ#Q]pMZJtj1q0MJ\hYF>I^S);GU\F`Se`.pP`_gibiS.ig:?b+E)f\^$i"/;%S-WUX71)?C;)f*:=)[s\6_m56H2#4!mcg2eo+,C3pLLgY`N(q2pYPK+Rl?k^qo1!jpEoY*c2=cY9.o_p`!g[Jo>j3i6FtO`GQ%Ha8$]ln;4%"qUK>?BFg,8Ic_))">O((Xk4;@(WmL=[q>*p=_+j?U*qY!#'nW1*?q!>S7fWMh8q]k]r+NiSmtn1DO0*VLr!/A^cOI.\=7>!&a6EOn-BK2fNh*W.d3'"f:U"3tP'6k^8H-To<qO(pgJ#!\5H[.IfpNrLpH<PY"YO\$cRN]bp;0i9^Bqs:EFaiSXnObBlMef-g<r,&AAVTLY\&!Y6`L\'7'/m1a#4up]lS&SYfur@ZOHPg*ZSI:k_K1`VRQMYmH0W]"Rg1"k_?l@k!J/%n_3nJAQA27mi:/Q[C[N(Ed2HP^=cj8/ou<^=c5HdQ^mF[2E2gX#ehT(j6AbpfC$:Kp5=,QkuqlIRs/fG)#JJX1B6[29o3f%>L]r;,j/t#dX]p#`Hek+a?bhcqIXhLF^j\p3JHt1GHTWZp@t.]:#r](48Un`gTCuV`V2!hNiRB;>Tg$._\L&Wn(N[M^I<I9,"Cj<2iBQF4'O:.,f9+`=KERN`9#R>+3OT:VZaPbWU5'dIl+g<&N/=[$ic3&G,Ctsoru^ll3q:['R;OqT2kplJE^V:3WoL]j/9"V3J,kjiV(?.h0@u]mp/.6'WJYC4'L=)\G^Imq/b8-Qa:]+$QB8a8WGS`WrFU#?Hh9rB,Rpt*)V4_b0CWVj=aOuBm]`g1<:6q/a7*=X$MH4F&=h.+ud\!H6!&qT)NBdYfZ^8IUqL/4,b2k8LO`AqN>45AH3ldA[PN=ojhP6DsK2PONM-;r#4hAX4@KNN\=,nm?bRiUXgS2BLFcqp0mF5/[,)l48YL'9[D4sa,PMQFdkb)%+oo`-DqCV)Cl@PIM8>Ba!f+!oY(u<U1[PU/90X.pf&Aj6?jm?D)e'ap$%3g?XG0cbs=5nmedO#=$=H1KkSH^",JEd>*JXU>us&X47DNin\SV.rS<sE\9p\83)mSRn%=7t@%U)f^nVeIZiU4-9II_i);`'k'@b&EYX0i.J%Ti$p)+<@%cfila:c4)MVd[oeNh:tWcnU/[9Q/gH\o-HIscs#^#SSc"21[\(eFOjApYQS%QUVsSqCjVFs9RATFb/$G"]:a>9V(lnYtaPrV,hDN#fK$."huqD=<Q/^P]RP/fofa%QkP7mc("Rr0AFs5GJ"(GHJJYraO!q1;%tghq+3^:kWYnn@mfak.Yd1n&CXk1skg^JEgf9#7W*bln]!g<X@.1^?rZL4Bs&"Df9oZH?XGG4)+4B.=Ce(mJO/Ei>;p\pYXk=h*_$8kYp#LEr\3t)ttq-YB[ro-*Im:eu#2i1+df(3RPIiJhlC_>%ZZmU!>1RbT#mS..Coi5HOnc!7T&gFU2p].3;h?V17U%N*n^K;,d@,Gr;LnWZqI_Am%Q\W4.tSSXEF+dSc>'nE;d0Q7*F@At&^L5/NZ$IU*[DH8"f(71*J9*T^@q^$U,Xp@F+!%Kp)'AH"*96MT=j6`)8d%Z@.peG\g2Sbn77rk^:jrjVDZN#fK$Y>foDHA"W[-F16R&p\Y(0iF^hZ?p>uqUdBOPhI1Ei6AJ3N*M/-:/FqJ(Ff<L4*$p&lmq?9(Y&$!"T;o^*J#pX/b,L3moB,I"6`%<Dm7R_Wre!*GeoKSDFM55[:fN]i<j"XGMVAGs7+B88W\>Ii7Hi'V_Ak&]DgshV;Bli";N$ir[UU&.Z`DdraE&M2MT!t8#Ihk`XktgOm?+4C^`TqB7@aYJ-(dDr6kuQ!&0tb'Z0Tf(:t*Z7iol[>^f)4^58;Ca<iVh=rhl]Ab5&W.m%Tj#t/Y,S`]2fl]ERh^TKO:)#M*uVZg7.UKZN1$eD>>$$0sb]rsRPN>f3+]0_3*hMuXLnP)B8'6<AfGo"P;`:%WVP2$X(o9i;m]*_OD?`Y=dF-&J"H8X8G`OGbuD>FAZ_r3WU'o&4Fe#<nm*>g2Le(%o`:3fpNV/Z0_jWYGg[dY#d69%g.&BipUQgJh"P'd7Xlns4EhhSITIr/6>^V-tg&*$nGBFhgWLmGp5r\q"agQ#lqm8L[s6$!eXj,Aj0_XF[^gX/HNKc?2bLSKb+j#rDhGUr'"4H-Ege;n(B4e%A?%KYZMnJUTNahq+M@YJgc+!)qXL%)O3ms7=+%O&JslXe1!KX6Z7^CFV+TV+*.k5p>;!!)LMjuS/!G,?Y8Ra@t^h`>h]g7"J(6OG:nXb64,Im`dPkL6c/.SI1smkQH&1I%/]pa_LrHa<dDs#HGD7nra!k1?C&;YY+LnTGo;lE>>ZkSG>bh+IR")F]A*W^rnUDrS`E$:4*aiJ%"[ru]+]oeGO<A-2.G;*Tf);tt3"`<no:Y+E6KU];DN3*NWe\Y*a5feM&$*%>4mK\--kJplOjI\'_34-kMJQbfkMbu5\X2tSO\0=dV6PPq%:.u'+iQf;pF^27A#bl)V_F1B<V@JeTrgp%RqdU?Qoo=CU-D[tjWn$W@omA1Emd<5/"@l?A$5e8H_,7Yr.-)V<95Po`=P;*dd^[/-7(!pHZZ[,,kQU+J]YTa&S!<<*"Qo*hP"Q3"8i)W-V8lL5si9C]Bas[/7)#sX:!8!1-&4WaN")u'"hfSo!!5PKCN$4/+gP3"[]>4>_On*f@?Sd9If7ct?5\C&szzzzzzzzz!.YZW,UWWn!!!"lS;aQ]Wg^O#!1;<4QdsE,+(cNQ#T=1X!)I5cWh9n'!;AbX<6h/q^]j4LAto\?!<@'LjA4kG)@g!P:M2ScTF_)'pH\^WcCj.3"n6VGUC%>/!,rJ0:ZW!'%U9!0B/Zc_&-)_)5lOa.T]*Zin8r9;$46e6E"D#*jU<%;>Q@Q42Q@k!&F-RQWK@KTNMRf"8k%La=%=6Of5c48eD+?$'f(h@raoMDhD;pMM<#cWb::NtjPVYe1EA(JR&,b65N.5WM4hO0jk1H"+<j+;n_)p0X!<L[\.dV@;UPA,(Wp%e&LC`]J"*#GU+OXA2X*doDnS65A&^1K`'!/C>h_N*$TlK4Y8chh)/ACgs#j14>OLm88+jb6!\a#Fqd60SVZ]3A?uO%9\Z%n@s4'+=8M!PI[XV][nO-+aIM3(hHtnUA.H#h@M4hO@;M?gFi:qj22\)?;]PKbEE+=[$XV9B30]:/hFC@uh&6+_/efcg>jVh.iCf:VqAbf+t?ALe&E'AZWJL8hF5MJW)2LN_FK0mANWTN8^$K6d5)k9V.7/HKL-C1I@<0B(o::n7?M>Vi5(EKmfPafdsk8>Kc4\G<QKPUKZ-><7I0BoQQil6b"03YAE+B&5VidEMWM(+cn$7*+Hgmof01kX,1e8MDj,:g@*l<3<*2u_tfo_>%3gT^3K%?d]J&j61dUll7AfNXjFnOLJC]<CSY^&HnRP5hKCZmf=%h6B^3j-KiJVMK4A`@(.@/knG+*Kg95?V1&Y@3QaFarTr'4Ln8a0Y]M.c;j?J5=Gq<0C)O_cf:RqkNn==/e"^/)UY03UK:@ddW=6%YJ*LZK]_0+Y3q,UA)seRU(G$oZlfo3?..KNdKBM>eG-3Z6`(F!qH8Q@V7A/a(\TLYTb)[XeFiB>80n5mNm-LDRY3'HBh(eJY5a:4]eobfne--bR6V40>i/iZaSRJ3q9/HQ"jJ&ZVcFq33aXs)AuOIU7A&#Vdeetoro:<Wp(:l4"'=Ym:)EY@?iR;OFT6+mI"TP1G^Pl\-^r=V`#)AM&;<s[o&@tdCtChqbR?r.r6K4h1Ra%2$Xpl[h3W#M8S':,nOL7hUK,t.eCpYUK9O705mAfLK%drF7>N/L'dOds(Ql;Yk>&t/4.ApN#c`YuZ:?5W_@hpiaedB4*WJAMcTfT(9Y6t"D5DCM_2\6UL5V.oIjq?_)C7eP#DQmQqH?aXO5YSsa2^?VVZ!iC"7-\LghZrjT+5AocVNMP>bj%qNq#E,j<oAc?OAUM'Ie]"fuH</WD6#\g2=&f+R3/X[#F3EhH81KGnREO5\-6ha\,==ZYn<*PJb^fRjNF:a$k.pG,$qnk>N[f:>$58%\$_*,RU4c1U^k^(H4Kr/op+lq&P<Ph7ebA5SZUT`^`b?j,T;a`;<+ek'dNJ76@*2YU'i^H07'*H'ubY8ZGq-L1CAIbe<1LKt8fkoG?R4RN4J;j#5WY+.`<:4/H#65h`mJ7WQk)HUKtI4NG[:BRD;$@@]ro6MU>JLbYY#!=GMXecU3Wcng]bbV%.[eO/uT$MTl-K8J\S*]_Xl(\tnh&_!)p7hVP7^1>Eq=?#8KZUJq:H004-81\+bIo2.m/H*fmLu`LK,<PH'F.T!64L9@/ds#lTKZ+16f#j`Z'0>^;-Fj/9*KjX-)CkIF,F@Q>m5jSIIGAW=!1sa2k0Hi_K:FT]%nk@Rs!sEH'n;;mq+2[ef;+!V)+L\p5knsOSWrs_E?6KR3KO-Q7GFg!(iH\QNP89>`gSY!UkS(1_iJsc:Y^\;[ikoSs2)amee3\`K\=[,N/O1spoHW0BOIC`JfM*@-gW3[+f&HAW(D5-:O+8N@;8#i#sYNc9Q-&JX#pb)_b3?pGO(Fl8@A7Ld<\=\%94VJJ%gVj@te)InjBmOpqj%L.;b4h%Gg-HD,RRb#^kg+'fFD6jC;NFdV8VIN"OT3.g-VDa^kD?jW?n]^\21R%j[G_:WfO]AVnCj3C[I\YgM*"S+-CQKDA%c>@Vgp&r9TC1YRt,>$+al=i[Q]2)tD=+#F?s5AT0CbK[\Ln/LG;Zh<q"(uqEE-j8FpJLE)[@l'V/*ZVDGNJTNu%Pj+o*P>C-I3J[,.q@Yd:ZI(t=+H<=PJ?Y172h'tID1lfLPe=;PPh5;n7rY&RiG==s'Qak/iG.@54)*?K<t`uq_M">8t3H`17fIHFHBpKobSnE.c/cmVTK(16L`11^!BAu@smI1*TneK#akQA_mm50NriB,'%HhF1[<')o08lT+m$j:9u:Cb>$2PP[KPj-e_9fpU%+lRP20(m6-K'CU5hNMS2#luNKocN11e[+9,5<o0-r9T4t]O4j2nJl)"9THg-jtRI8.n^nImWH<%"^X]$eKd5"#25(45j`EWj8H8GYY.iKmiD'g1^is%?aro_rK'gfoMXXm^c;DHU<.nEJ,[AOSW<Mrp3&Z6h3!M3iS@lgI74hc?6V\p_h*KhPTl,\GQajRB43Gmh<.):j#a\J[-o"_>KeI5fg=7LAr[+#b,=^o)hEr:u1sORl)e@Z`#tJt@J=K1@!VqLjon&$^I:_QW\Eg*@QM%Uk1Pr>@\CR<MH.s6<*Qe'R^lWDBrAO9n/=\A2(2j?Jeo.*7`Jeg$U6mVua29HgcQp9P1nio[)/7NR+FU[@fcFN)($=$"Ndp/.$X6;JQCpR>h=BDhYLZU_lMSWFKSjDdokUSHD'LM3Sa-$ABO:aF5+cQq#$'5Hb__]SL^?`pRg7.sf8gi?L(+ZEo*n\IC$EuI7T@mkI&$DG2PNJ>Ap_ssJ(J]@D:_oiWF(8#(PNq`T4YYI2]IR2KYa3*Tnl(c!=eT09r$E`mn)OO5nE?X0glFM'!dXSPaF9lZ5dti@S0`R08!Vuti^Zi7q01Wmh`](YR]I7o(@@cWBAci&.FAS>h5FE%&BiEK_@kQ[;9`BF]C9+-/5C]2NM#BpFZkWXcTB0*'B)?Cfpt(Sj=&].!jg+\_ob_"_/;6p?I'!>]RIKh9b>mqjAI>+5Z_*TlTp4;p&F)\fUcE)e$6u_V`.9H<&X0Fc:[>;,<(@F\&VtU:\K,6!kN3tlkuXH6G,8Pf,Y4dLb/Os7gTqju=qhl@\l(81BVj_P>C(nk_*67'INldf.f@=4!5Lbes(%?MBV1(gV3tDN47'6GNXeiY$TYZ[018OZ/%$JnU$NH_'PDq_!!$R1nu$L4m8J"U;g)pML2TZIB`FT0ba.\0oqW(qT&L,S#QUM+5lOa.T]*Zin8r9;$46e6E"D#*jU<%;>Q@Q42QED]!!)aYr`%19iP5WdFCq9T$3:-G&*-OJ$lTU\!)I5cWoGQ3A/bLK!!!"`NH#]M\[r^Z!6f2>:\p%E@Fg!^T]*Zin8r9;3j(eoeLq+,?rg3+gGIr=R!%=0BK0r34IoV?+TMN1Jc)L;6,S6]i9AGe$3:-G&*-OJ$lTU\!)I5C:^@&OHQ[efB@(VU!dHc4J3j59g]R@N3J3%g(VnLf"V_"<i#]t3ar*#U\,`,G/>*OS!;AbX<6h/q^]j4LB))F\d*n5.g"+C<X*J6m%gG8$4:tHIeNZM$ltL]h`m_^bLH"Xeiq=0)p+BZ<+V6+&AF0!8DXTsI]<clYL41+irn]#.8>EEO_'uAgPsD/Di"5a\\Q<qW;00mVK2c^A*$X\"pU5j0?FG^f`BDGgUg_"lY!7ErV<$36q6N`'q/UOGQaESFKn0BI34_R9Eq_e]SQqm^g;O_F+1(Q:pr/pG4st(^,^)`X`:O>1EKi-1hcLl/>_ZS!&T<*+`,Wuf8m\,l=;q*iUueWtR1eu"So!#FCh%Oj69+#70ebMI5F"$<3,em\SQR;A&:/,0W$;I4F4\^1)Zfs+s$^7p++M[$-(P`/`$4C@J(q9K<=$6r6iS?ns)&nm'R#@++qp7`8OL'7@L!_oYBRS^L)gR-o=OpZh(.o/H>)k*Gn/X`+F*qdLua'QalqqU"@gQ:%l:$NI;/&Uqt*=dSPJ&bIXSsSTLpUaSY$c)"@q@_Hm@e;*rF9?jDTGR"`e5t=!>dB3d'Rgbh8(62?m=fU983HK6UYqYrXO`9@T(=n2"7CAI8Ie,KrWfcJ6-Q/c(.Hk.`.]0aK;qOal[tcriT8"j$4.>]RC\'`p\g=9`.1MP%X`N=6/&[P1b]lt\8cZJ.uUSP3)9[W7?YP`"bO(U!&!!E3-MYmS21H<\jNG1b6N25t1?kB#@('cg57l`G)M]L4`R*V5XrHC>oAd*gSBJg^L1o0a6TqfDrM'6.5_paurs1/0p\eSaP+>C%#B%P]D.`U-+A7s:slVPoRlO=_!=2"uDL(QcS\$8ij:8>Q&lo3GGgg(YPL"+F,:(>$U/,0Y9,fm@k$:R;HE?AuQ\6=4N6QSs]-iYHa^k:)oLKMV%PR^>BmQCRiD8H.qDX/VWW^:pb%kR2b9Dl1"#?AUabYPP7N6Rj5O>BA\Cq3$E[_hmo'qX/"'VL5*"[/3]f0@G[CFj4PJo"7c(1--,BMUX<Rh!WQo$7cYN$p<'DghRI0*FFQ"UH$(Sn4ILK;R>*;enPfZD2DsAos[+nr'2UQe,.<N)JR*Wn9f=OT_79p57krd\<_SX$!-SAeh-<h\G-Gor!1F2jZV#o$>](#Epu%)<n&R_Pg2LsHX,+L_JS;FN8BI`OX91kHf\_b,MV?X7:T6u!]*SamP'>K-m&5R&r[DEF[D!UB$l`KFrk?62^PS49)aTsfq:[IoEa2G8SA%.0tDkee^`?qc3dK;qPe\DUh<([H`G!8+CS?2jR=H&iLct_"JXG\&qR8(\b[69bSZuaAd)]*:LV(J"79rL=C$@7cH;X%=q&/TJbYM71sgo)\=d&TbJ'kN4(sqX1E(VO=V&413c<8)qll-<XUq^s.A`ptCp!E:q.,m[^c^#_cTVe(_k]B3P=jL@<RN30[?X->l9!g>'Os(^*R\pim;(&=1K-*dHR$4u?.`;Loe<4;n?H5C,uk4D=$LGdr$cA4#dmg:GGIb`i?P]WXAN1:h_JVo0ZNg7]\7!A46R<VU)XO!'>0#G5Kb0aN-2Ut,9&F_0_#F0X6K%BC39<7rt)/ua5S0fa1GPh&_-`Mo>H7?0Y5PM\pn10b0B#taQ%#'Gq[TjmO)OPZP0#CidKB%[0BV:c(hc7iN\OIIRLVLETKJp',U!0UUhi<a:;?.Qi*2XnTA;\:K<?2_b.m.3%X3djYAT"U$(5I5t1!0!g.)ag@_J\2.d$OKi:s/W9LGudZ#Q>CIQ<1`80g_/_h,+Q7ekMjN'G]hu0/UQbK4amj2?jKNGie`sp+C+*Y\JNcWNSF^F^?LE1-5qZfT(EoPrjaV9=<b9P5#dHH&Y=_H'cQ`/Ju'0-M%-)j)O[0]6Re`gAf0n^YCU-`a+BOroEfX:-Rb<[;q$H>sLlt>k12*I,S]rVc$MTbTD,fAD@\V.PClY7)MD3OY5*jPO^]=cXq>'A:f@d02Pk#sjo0uL`.ZE%kdFK2d0d>#?hk]G\`5,o0-Ph!Ct)s^>AeE(T"M`^e3Z&aaghiW3>`]c*E[$d4R+^glIqs6*Q1b==1(X4eF4HkeHp2R7gW&ZtR&R[I+-&kK@g;f&U?Y4JQV(e`qJ.&Y=%T<YrmBdmPer.l_c&=enDa;jH;J7uVf8J!tdFXs-]ZJBZ6.`"PY!)K_5u;cD(O\K(7(%&^d+C(!qiM5Z>Aj><1cGlOm:i+YSoSbQ;GjoEpU"8&,RWL/]S/OcV.*5)A`hOi5fYa*?Qt3dQ`]GN3]"HDL=O=ip*Ws5"VGm^19Y"H[q4m&\]EgrP!dR-H`Fqa,LsghK84bMF_-,G$isj2q,rGi"iltu<H$?mJ0jg.":^ujL7SttAmM^/S@#sR`(j>oqc[mkb"=$_U(A*3YN['6mZGZK,5Lj%j^GF9Bb)7L\T69]J*:R`[=Q^0'^76B>@+u<,UFKT/jr.%6E!)!."lju\(cX\(R3b2[J/m^]goQ'87;*u7!kTu/\(n_5FZ<#mmUMN]IOV?Xd`<B!WeTW6;0>7Sb^,`ic\S&]f);Jr>O:c>d9e,ne(lif(c6dffFeYrLY,t\nr@khipfBK\c7/"beW\Qr*brf#2I&)BMRB*]JBp_R?T&HaC5MhbnF>f2U9OY[#gZ)e#SN/[\fgEIVd%l=G/5RX=k`4pH=NnZ4>tYMu.C2Min^#[/JocZgdDe6[HD",1`r=FbZjU^#@6E&HAi?,N#k0iT<(Sk+BWp6cG[*5!*Ug(`^#=`sX;<_@nE$H_X4Pn:9A@$gW][#b+*dpsVYUg^ji7V_XgnVs9(k/+0]ZODYX*dc1$MS#P>R&S3De0[J2+2:"e;bt_$Vn897]99fR(9--gS_:i^hY6;gK4=sbgQ+@Ld+@)O>LP-bHfbr!<-#SH]3i(I.u?Uf'Q9\e.YJkgI6Y=)k3YrK,_Q$.2-1cZC-oYV:A$:d&=<9Y#uFX;@5mb>.kYR04b?F\gRgHKj3A]/V!]="isV7k<tU77X.CPs\*,O+0;q4YWPd@dga?)-/t%M^8AdFdY`@8i5<'0&djBX,\5ISpi`/,35BZKg-1]8(/.Y3"VNLIC?;(4Y3CL/J>RSu(Ila!jEZbOVAI(ZhU[_n@U%S$C?DOC9?/,Bt3JB.did4ctp!JA<6Vbpd]+/9=Xo?m^X8-9-j\2i4n6JQD<p>t[@BjaN9_)V7r^@^)/r&!JAQLld(`nO<h3@5!&+c5:d`J,j?=4.JabcOT-`ID$0=+btdV0D`63o,fES+NB`jpO%3J!h7Ad@AYcb>FpbKd]+Xk/pb5>Xl\J%/h0ls^^5-Hq&cT6A^c5A9:6of"ckOtW%Vp66OU1ls-hI?T2%kq#3RZ`T\;mR"!bFu$te>3p[m.NWi_5o"t_lU1fU7YR&XdhB*NLg+r<?*.fZ=q!LeO:Xq,jcQr6fT!1BhV1t#H<28Pe4jK<h;8**m20W,5'.3!gs3R=LUu+rU:RDrX:]0/[K2$+5bQR_./$_WKY:BJ)`/>Zls+qa7\s'T-@BA>?\#]cqople;'q"d$/S"4*^^JQ#G]7[^8(Xhn:5TZN+GQ1Y].kUDLK+rs+oaNY7?P<*,W"b?.bI_j6*(HL#JEKfMZn5EZpjTa?,e;()-rrV>N+OTArf#?'aeKAf3@%Z*s";8^KfL`<a!O[&Q#uo^R]_,qQgDCbFETS)]ir#=fcKQr)-U&epu:&U@nF4V8AG6skVsj\m&\\4"!GO5r=nj+3mfF,At]pLHlt.R')u<;_rRkH9@),KKc,%<R[rs6Ys'5."5XhW:\?V[p?9':ieB/s)Q=*EOCT(HPl[#hs0t:E\p>a4-$e]4WfYcg.aVH6+^WVMI7=nI$OdiJGT.3.+D\0H5fA;c"7pLo?+oXhMt"4k;>)=IDLSCjg<]+/hM6Crg?E!JN4#(d!3SX)>Ng;X@.*F(IuLHTMV0016WG,]f=ND%G6t=^J)pktG>P?4etQFD5IIS]gIS337%;3,_&*S2;-\#^VG>Z?6Gce/_^n=4dS5@knDn9c#BX=b>;c7Hj@.!faTB*6](Q0cOaZBVXhXY%(J@83bM8XC*h07sAE$%dl(Y:]!+1m$8In=%pdg!s1^MTT6&D;f6l2+aJ-,VmK=VfuRkC8p],Ci"RM,"oC>"0%&@Af%r'\pjC<Q5p=I`>Nc0$)$DgX6C&Q/ru%pTRfCah^?\OZ!%kJs3KXQr20A$*UG#_j1cQSJK']In?Z1aL3UZ?^gK3)H&;Ug/ffcP8\dGY/=';UbB7ZWHTgM?OqVU7p:<Y;:3EKIer^bQ6g>R4?&EENf?0Y%%V%8'cFpP)5IFZqTG4VZ0RPo^fqgQN+Qs,'Brso3F'In[4qu%H/D`bBiO#U^[C@uec+Ss,P`QiO+j@bMPo^Fs(5NY/G,s:uVGeVe=*M"BpRj[cD8*nOEi2(_tD<T`7Ql]ZmNpN[:r.ks]rCuS_>erB,JLPD.2Z&n9pgqd(%RDNlKNZ//q6R:#d2j3C=):lt>b`G1+AKiO6?.c_^eXF/e?Fir^])]0Igag)A1C+%?1l:Z:u<e"6S.MKiC/sU1*DSRBd=_V!eFmJ@D6GhGrKd@2'hP:ZT*Te!mG-aSl'A6!V8_3NAD;+9R=h_N6*%,eI,aWegJ&nk]inro/0X0dLl-fJS6g1p9eNQcs(76i*J\i?S(JV/1PAuq,f8^)PI`=\iGhbobUh<XqL;HI.^HUcG$7G&U1RaX\kp@AaooR@<OK*>FZ`[m5N%ee$+\1&U,Q^O_piYHa1$";@!BZA'?]!;'q"d$/S!)p`G\&jk&+%FE]hcRuj%\qok?ZM4/aqh"USI%0-AA6ZN+l0(PbHRs&,D2@bk3I2sV8h9`>jC1s(rT1Nse-4iI1U7[(0qD)&N^%FZO*O;kXj^)s^ePt#I2I=/CMJR:+\lUYATX/OV7YeBe<]f]`ONd,^Kf&KXA]QA)lk<edc:H:rd+;TCBr`tBU1\;Un\Fg\/s4"??J7#SFk7F8POu5;PB(i%20I#m"cLK]%2[1_+3fKOlO`3ZW9LMZNFeho7,j6TBJ2GQFg<>sbC!B9JTR_t<lc%$9equBA7X_HV7<l+<GtUU<gnoGF\$fLkj:)=_Vk.`.3hkCb"sF=n-Rr<1\j6M"]\Xt3YCOj+OAPY87n;3GKV?4SJhJ.-Ht!$:O^EN;\u(8Ls`Wu-"eg.4&X-![q;t"W@U(3B%W[_jV&QprD[(tZqqf>#FMAm#la-F!8sHJbFa2'0/'i&;71(,k*EI$`tCE-R<"b5U=3?@r)*Gmc]Uu($_J9Yj/J"%\qNBm!!)Fa])2k#_i"o\l-'29!<@'LjA4kG)@g!P:M1G>#QTC%+FbkRcu@nEGWN0]63%#@"8PkUK8'IE^se\T'ES9m*lstr))N>C!1qIeTF_)'pH\^WcCj.3"n6VG!JLLR\-MT&EWusX/qBiU$Rc,X^cdcDPr!)5Dui(l=[4,1!:GF9WLQ8lJICE#bQ8+P!,rJ0:ZW"R65N$I=)F:kS1X1MC(s]SZllQch)+g)VXKf2#9%9Q6'Xe,.t1@b(>$U/$@gg8Y;P!+>A8PQiR7lC!W_."aIgTm1rV*>[O*u7lh_D+rY1BchulF%279Rd,Fs-sL(qKA^]*$/X*kbhK.cs/.8U:+"=OBQ^cdcDPr!)`\^6W07AY<AaaQmf4*.SXh62pt`JcrfDa;jH;J7uVf8IutA/+*N)_e_hYTPTm\L,p="E-%OAC1!`L22i5D!2VK&iHPWF0RVZ1SN9>kRJu42'TX<$P"$mmIo4D@r6'P2d.#Zer9TADdQR[UoUW3[LUQ0dr$,18PiuBh7[+dq'6U'b3_Jpg5+X0m,Qr/V4qkjmV0??'Z,e0$3:-G&*-OJ%,.($nB4QGC2JISd>-6>jsMc\lS)@@_(elPK;hRsr]YdZU8OTSG>:)s&@=u_!<lb<@<Z5J9(JEQUfdA8Ad>qohl@FaPQe6rE?qkXoVu9>NjN,%&]X6-'nX^4P;<B5rVaD=0rpUC?"T#5r+p;"RbRdUT"(ineoigjE;18:?[#.[9s[*&0L=>fam&(lWaC8ToDjRF!4W:)VfDuYC_t%V.k<"e*]3Wb2;DB9ZQZK.?[:4YZq/r%6"_=eBc7]_.lBX]+jamdH$j_#hQ"X+)N/<Q0"ttn;C^$*L0+<t6![MXe>9Llp2=<3Z%-i*>_jj4I6HHhaY&1X!sV4B98%of!+W_@0*RM;o5jWiNB><+"Veh4!X\r.E"D#*jUBj&/r5u0S>l3Z<NIliIJ;6o5,<uROuFb2b22N%j>77`kSSoc$!R)"Hh@b+Kh5.X^<VI+FS;T>F_2[O,[5Sd]Ct/cG2`D%RYI`_,RT*?Ge?GMbJ<H3JjXiFqm-![K-7IND?^GV('"[B!,rJ0:ZW#=\1[8WGT'\0H^^=l/EX]6+74LL<,KppW:(=BZ`^E-V0Z_Cj;!9>3m<WHFGnV#k_I0fFW*0#'h/+De[9UjOn.=4pV<%\dQ(P\^f1SK?IjRRSXjt-L_?\9kXh<uSRq"YE['7+fCrau1.VG"0Va.b!!(dVq,9;+2SKR9imS;KaZ>sJ/,<-!;&\h5VlNSD,\rh:$87LC<#clFk\JKOfj^aKVD=*hCg=.XGP:a9A+s/)./F_1.lJ@U3G_H1:2CYR.YLn%4Q]AaQ#plCY/s.oot&R+K\i/bXY^bml]D%/&M"T-J3oW#5Tp+-mXb;8S3b&D$fL9n!X\r.E"D#*jU<%;>Q@Q4(/P8:J9rDg.VI+Ihu\-aZ[b@B!8I\P;`TJb!uJc%R0=9+!8np>T?8$.*4Q!?c7GV"!!)aYr`%19iP5WdFCkQ-!!'M6nu$L4%0nM9V_\]/"9?5#O?]!dBK0r34IoWp<<u.V!<<*"!)PSn<=""\?sp=rOAG^HG@C1_%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68DT#:P8^`jB\h1WuuaOU45hr35a&GSs:>7D0Bn4uhT%^H\W;r(Zu)hBi@L=iUBQO3rB%WpZM-et<Y3[-o$\-ZVY=/MS1V[p#A/3iK/TRmTUBqVLr8R@!<SI=6^iE73ZQ;=s$i%"$\PP!?EtRkH^5F@cH"87`p[0tpf@4*('[P+B'OQaRCYqn5+TSZjei_rjDsrC<E94i1kPjbrgk(.Z87dE=K.Xj<<7gO+q4.IQ5_KR>Feq.b8B`&li9mJ;u_CjaEQ-K56^$l\3Q8JhqhL'&5=BZfB"1u"f@K!7:.%4MjW]64<GSNc<.?f\WknMK*eFL&CT%W\`P\*`;P$DEf7b)f;!\pI4\f\rL-UL>V%4aj'E7j^HakKo9\$MOH@Oo/#,bVh2!A"T\WhSTaNHs[e=m65r<cVEYA&APs:E15<%/Y/LO#Fp^`GNjFt&QekUM<&T'MRqnE5-@5>@rs3iC.qIF)&muU!`@S1G%:!:4Hc)A/Ml<4Zpr4Q_Sk7MlHHZgo2fiOpY#+]j>d"&98)kSh)Z51VmQLb^<+rBrh)S#W#\Z(I-rW>U.,?@0O&A;r7RA'W_OHdQ0"?7kk,XtUn?I\9@qajR^nr<fd9^gR#Ms6S`?JXGbS:oOV:<g\)I;rMT3s6Y!0fPRcrEhQAlV9ECW<JX-L+S=^>=fb4S@m#ML+oHd:_Y(6iC!HD[b;S:;]1I)'P<Z:T<kC+kB(\mr-&7>8*6h9tK>aFd7/"U-5`SMqG!8>HE"ZX"0RmI(YQmc&;W>n^GH*u9,T]l]60QO8IRN4jW])N/67g*G+(>E*-9@eM7(=`OmE=s<BnK9;>ef@AJNlM)PX0/*0RVglq^<hq'bj[Aqt>D?*BSSuc$cfRk?(NQ7`S\P%>XXRVU3UM:F-q$G@bI_q*a^PU.A7]j:?n#!gh"/*HD^f)jkR9T(>2801@NBqPl7GSd+39+\H@M>Q,AfD]3=gQ9Dbes]#9m=J?E713D,h&ko<9/;jVNCiP5ep8]hBh;?;K,-;enM@>qG@%91nB>f0*P#[l-*aZD,&38L,r!XV&^H?!:S7m$Lo3aQ4OD``)%1;[A$86.G\V)"E_,=th^iN\jFjqTohEVtNd*s"H,G<!_sOVPH"tg%^NT`Tu`$X3SAj%-a\HV'=lSIeL(af-"L/HDR2\;$d1Y[3Q<c]S_F@icEuj2<L;EJjPh>2HKekPQdF.%d!<DgI.#3[aQd']kA&JWY2r^3dXcY`Rp0;L92#k:*b1aipp:?Ab4G`$K2*5rip9uT^`DM(hdiGAb&6`Y4CdN'ZRCEIUC\7:F]r!NT0ZghY*ZL8,\FPocibB6(<h2iqCTkAno>4YGYC/$G't-+$Q_?Np>Qt/grJS+Y6o_cmJR`[k0hoB!L4?!fW&7^tKFPW3(rH\3_$BHZ=7(Ep.\X7&o0?+j?6VB_&J<]hPulD<ApZbT0A>_XCLr`Q3[Kg<op3WLA;1+$@7*At_Xio1S?5lRobBf3*"Ls7kib(b6?^EAaJl#LOCOIRNle3tZKthKpi,+AiD=UULq\=$?rc!SMK^A:+Ee$1%A=-=FeDB3;,mKj;99a^Q-UYgDu:Z`lQ6-%SUn:$!P-A+U,(_p130Ha"F-NH^nSDCc9uP<;;(>?b:#RSgSc4oCEeo43H5s5W&sp8HAc$!7P.YG_5a!L`H;Y.0L3DBpco`-jsqLqW3u(nj_ImJWMJ+^fVLmH3V]r`Nlphb-pa%>gU07V6Y?\!8k&BOIIPPE$gaYW!+*EXP7&L$2ss\p5k4KeP#nN;P,>]X;bdFktV+`nK.dl]3FCTQRq(`C7u<AqM?@+XP$"CM,[=]+NHd-!/o'd&G_uj7Rc.dHLo-\l"/HUTE.VcBq3I;m"iX'm5BJS>Zrm='<R[liZ6BUBd$2QJ^`h;e]_jKUS.8Vei=76>!/6`?hpuLNUF,@nV]$S5[A:DPQ>*h^l]\*(h-5n5R>_>.)R*Pc6@5:XB862F8SJS[['kN8aE'(V1ga^a]F9PtIb'G[)ggdtO_PleEgC#(rU>1L08?Lr8E2h+=57+s@d$IRE;^m7/W/T%s%@oK=+-gR\peF&>m&8eq"6m[hT<iDCcBP$@.f<\!gO<+JFPSlr\FmRsA&r3H!3<S*0--H#-/][b&j4m7t71Fr#_nE-jBjs#ke9+IffHC:+$,LpGoMf+@fOUIsp#T-dgcSFu)*$:qoQ'^h`a6tDe)5r_XegT:(dYZ@"DNZE$KqW>An8aRhG-9oPc`JhWI[V%EQkU.nq7g@5%B)jBq:tO=eDo%<KR4jl$5GnPEC:toF1KgNGL)Mnm+Qg9g%4EnisCtf=)ZH\est3i5FZ<Son$*`mtsM>lXi#@0:]PAda!5K*>*?GEg8PNnGSg38_dW4(ZZh=hlZX8>=kh+IeHQ$LihB.A=k<=^pndDh\HpCXKXGMVk?/rAaS@<U)%'Vi>l9(<O9J=6#TJN'p>hta]dJ?J+^+4GITu@7M5*cO+EmL*/iG'<I&eL2Min^#[/Jo&%&a>q!(<Uj#HUWKQSK\oRa-sk,91>oDF,*G`T2W<7$@n:igD&Q#Z9snr2.fm\*A.'TpAnF]9XlfW(%W0!]dW)[CP8DbierM&sYE8L+b/jYg#CpPc:W4B;3nZODYXqP?*.d!<UjVT&j>)MMY*TJ"Vj:XA2M:Xg5n;LQe1UiqYXEmD5lgo]r]*#$-AI`sML0qZX$2t?"$\HIoRFZ_B3@uiY\'uH&\g:,F>'gchUr%S;s/_cGaX6i;T&Iq>h+l?h.GSh'LbIpQ&W%+aHXm[%#I7ueU:4h5moXfS(<=c)+LJtg3.PIkI&G9(uO10OhMQgGaKojKtfWn9u<<t3[LdFYO3<#S-43J:5T"5b9J_YN6A\iNmU63pJDJoC73CGXq?E:SkI?I>PW;&R:M6RuHDP6[M-lbflibhLp9%ptZhZ&m?#X]nE=ER"R.A0GfjlG4,lOX9X'"9,jc6j8RB6*'fn(Jh"Q&`rt(Ajuu'RTJH**!fmlaU\?IH/9%Pj=:$o"$0rae-&6YNb;8'04I$;suqtRDE^+8ema\#V8P/Cb@m2gnTSVJY3QdLJ9UT[QRflAp/aU?$47u=GB[[*T&'ZC?-3.)`*Mq#,)4>-O^Gp$:3PpYY=nDe=!UB'00Y8eqpsf/j#NjI=bE@folnloUZA]I;5Yt`XSB84n"Q?/oBqI$>C7g[H1Y:[AIY7(j9d?ToPSbYHWAY)eJa"StbK*7"n$,2jU:aHhTUEA#s8<cnPZ#8&_#^eA\lT<P7n/`hZ&W"q6@9&V'-lWdBE#WuEl2e*L<L"@XW'99q*L._Yn(qtHRkO;b8:_P_kkID@ms&@@hMG?f89r7"l!`\O?)=R=>r2^`nN+-HJFqp6:=2f0>*$enRk"PIHk0jOUOM-G;X@Nh/DaSTZf,"dLM&]p[0+#nH(qGo+PaXfek$J(O&jod9s>`?Hk8_#[8a-Z*ldFfV'Vdn0hB<Ia^=G2pse*6'-7(iM[j>lkm!MM\uM<'0Ra_DK!2ti)3+%TE^rlNN.fBMeBa8O3jFHA`%p;h"i>cAQgn'[3MrWfq2':ieBaci31*EOCTGJ=]/H'>X"JZ*(+ZXMYKMW%DKT:))_-Q/e;5-sbe,'i/;-Y[^TM7Yd\T>Haf7mofDao5W>kcp/aDTELnZh]=D5>[&A\082R#Sb-,0u`ree6[+cHrND0,_(VS+$-E)7Bh-n'A'4eLhRhGV6i)Kam&62C?4P"dPi"F>9G=XBf)IooGGW,U`YT!kM*DG,&2cJ-`S^+0O;%NAI2h((J,C^BfOu19`46U(pUgFM@Q6nlY]7u47TCli:[uW30dLGd_CIZ&2VJ;PRd'"6(<P*,#6XF--#,jVe).pZ0kk(WiFOsk-=tSp!$:eAY&%bkHs_)4V[MR$_BbWo6"XrdIDV@/fmgpR+m6[OLJA4$[ofAK<XW<Lm=\(T@%tYq%(1+]C&Xn3_7bgIDo8^6[-g<qL[6fcfLp#OFlcplO;/oa8K:^]A3er!mr0iVRK@FbE)9r=faVrJ_flaLQDT0^V_AbQs99',$_5K8C[F$6S)/dEVpsno1NsBePt!e^YH<XA2IL=lY8b:XsR'4Fh_9>pbb=\`kK1Des(thG,nYnpC!^FbZ%Vfm^htp<\SjpSamlo"6YPs%:Qoq[iM$0,4_0L1.mGkOj#kYHi7gFgPuqiF(@N2'o.dqmr)CeDseZ:+gCaDcV/g8'7OqZD\j1A6C9&W7fMc"4\/MV5$ugmbHFW(Br,5SJU[QQqd;51r'X.?T3%TAA#Sj]g*X[Q'R-@"dA4)W8E2lP3m5=*bVIC$%4U>4CQoq-d^(oce,mi-%@Z&h_Sjba@mLcJ'4#=ZS[$`9M_PC3J]?c1G;qa64UhqXFJp7[m:,EOl%hBe0:n-#iq@I9]qo>TGOmgWO]]t,>hlFM&b&.&Js]pBfLLFreKn6,0DhE6WbkRYK0[@f?<s<uoucJ2Z7ahXS8P%DgdFm2*&VOVftAD%2j/$Q3$PHkYnY'jp)(+E;T#J#Qn>eo%0"9mIb>0cN?2kr`88gbH0`\?08Z.)gJ^5@#R7/j2WbhM3fC/PU#3H0co-&2o3A^H7EA'm>GJ+19N>)2?-l6tfA3YL7I<+%>YI!)1pr=p\QFtGcoG!G$peO^p5KPtf<!i=n)De78`%KOOj)l$_L%f$.SXp0p]X0%_rg6NXM)YC-faeO\JS6nHH+MTI;Tb@L.e`h]@(o'X7&MZO%mbq@=@_"*QtET(+`Q]Ao'S:VXOsj+1_qj^5ABYRKKfGFGrc?=WHP26<B_Z8_,ZSFZEg;;DEF&YpPm]0J^(VNC6hmp98IQV5^Cs#FDiWhB#$-$uV](3b"q[bj_SCB$DnaPQ+RD?QHE'M)\iEH)@0#1=Pm*=#0=7e:<+$:"Z<qJ+AIAr@b%Ab$N:B3bq%;OZJ&CCGn7j.Z9=[imOFijl:d>q1EOme]l4*np!3'drYu6IpE6\_nAcMrY2bQT6E#bC?ZV(=kYnYJ&K1LPg^<^SK:Pk_h+lfT2/'Y2jME^R8)9b":>/<%/6W@q=A)5%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhL'&5=BZfB"1`IhG0JM9$jNgC7%YBE;(FEh<j68B>-j24Xg`,>#8JhqhVU1%RRRl0Z`b4C_hQM]W_*WQeCr<XX1_/uN(X4cBrL^p^`TK.k-7]"37o@Gc05^Xc0#ObF:^CH:\2VL$P;!sZD2_j#DLUNFY4#FGpes0M_W)'lh'q`KItmc/g5nW<j4BpBh)3<JgZakC2?JRd6O!ku$k2k7q/[1'K:n4c6Ka9?<2s#sm'd\@1A:"]r<g,]'sS!E),R;3$I-TN.f*Y7kV%&s0Xbo/+>9G!5-<*m\&jTF@-GuHfD8'fKql++opgrJR@,e#7\r2:84J*XStCLg@H?^eak#2"N,H#jo^`j*]Sh'SOfl.hg/OO:VVS[kPFuq;kO)+AHkM9Nj`[8]52s$l78:$;<Rb*[HS/Y.$=Up_'ET*gmLAaM,RaoD)q+sVaXKU"p8;cKj1Dh_YmY^MV5fQ-j/0g$;]:@!Z(N_s;bta&,nEu]=sV#7"h\.B^HQh;qO0L*kg't+S9+A6>MCAN%<binoE@;Lcr5#)HAP'mFUtJ`F;C5H(3GE17%BaIQ<Apno_.f]qWQ>^ii9S:43M*AO\(;F`t61:/t:\8QQ&U01mZb``;'9'k?2;f&AZ)#Did12@5nPHfIihT&L\UY\KXoL/I1QqH]<XJZc8e0g'.tBd:jL5qhXMY6m9oj4uqH_/je.>%2t.=FtO#OU6<^S,t2%n?(:L0l;H!6rS)-G(,/LM$;cGLYBMZrZ:fDEYCY*C@Y(3E['AKeCe7hQ070>J\?cTA",/G("ptA>%/0u%EtX4[TT.u`M#4uU\gj_knrgDPqst<&TIdlTIIkp2ft1P_S//gE*CJ107dIe<`;KI`-W0&SSJb(B4J0*lB,i`R>BuaN*hSs$&AM5on5P64+j^Zo'METeGg4PrW2J\KOs`6q+rf`XTFb^dJO0>=_nAA8S:oiDB]H\NRI4csjl9cYEhWgkkIg/6HE+D>km[\+T6YR=.b-&E93rbI=dSJg::FtlkUM.1NZ'g<Pm.//e[>.u`<SPrGZP5DkAUGD;^(dUApWe-m(C6sM>/q7T%*Sa=b_s7)p,Nc*"g1AK@E.0bc$(Z!!C-P62mC-i?2go]-&Lc`?:;E,AMNMIu6:FUV'XkWfo<^>3<FLkK?mU%ZV]gg9Q;h)f(V9$mT7$f>tf=Og*u.V^7%kDmA)@UMn3c1Q(eA(,;[Q5`SeUmCAC_:";,SkcnGq3el#!^:BN+U1t^=QTATPU<GkGbc$(Z!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#L<!!C-P62mC-i?2enE++?q4J#<SJO0>=_nAA8S:oiDBK0s>Ju1Z%::#q\&2K0ezi0+=A#W(<B>V`HKa=Cm)!!!#7-OZX[B"SYaA6agbalWR'!!'e^$_e2E]FVM_>_Tt2C'FY<!.[i\6m9d!+)o?3$DFW5%0-A.!'XNsKeVP8^a5Wb!!!"L=Ucd4.0:1b!!'e^87gd5%FT4EoQX?5E-kX.I[[uH&naN97lJqn+%i-W`h,H$:Ea]1:X4<i1"3$uF\SFQ,VWGuNJZh'9Jfbk]#M25cbrmW)]R5BpK2+.X-;(V<p[S)^`@m&QK!]!:0.3*%4rg&1CmWjMAq>A4XnUqg!3D]KsX+ibUpQ/<^Ar9+TMKBI,`Wi7;nm"fq*K2j=8r^QG\)Q^g\bL5TW`-1CNg-I]D,U9DM;i9iZ1[olSu]<Aq<d,e?l1S3k]X23$t`i&/*+fCGBafYugmQW]m)XKUa:,onpN[O.kBmLlkLDE6sK*DC!EeJ;D62pgEQ:s-ap*'-0JrP6Hu).QH56>d*boC?m;C`ukW5=$Fm!!%Dhe?U.aALoS*H<AD5nMAVIP#,63gfbEZY\90:[7]NMYkG5XNog)rMLdL8>1QWeod9M>#.ckfPm:c>)j$djRrmN;Q9h?D1j)mr6ksbTKqM(AZbsmi7mg:I^@'X;)Y>JA>Fu\Af1&P/91tI`\LTYA[T9+Ko]b+9f.T(l1tJE`*(m/=2e/AP122e-__7i-m4e+"C39#l]i9cs\2r:r2pp#2gDP,#P`r5W3F0[9=&_r43:C="7T"tRSO,R_o3#l^i__9h5@U[RiK6f71H-Q*7"&Q3\RYecEL=^#ql:I6[ELTX/[N>j=B5%<pk+<)gE)[(*N/hLZ_hk5SjWQXk6)]#>iODgNJ"hcP/Bc>j@$FC<?Mf#"98FP:DZcDOM.*;e('dUd;3\m3GPMYOihKPhqk*0[R>3.K=X*edLP"%TRu<W=bbLZ86`Kef*f**[FH^TgH6\f\ZE/jHCF.eOG?bPmDFQgFP"IJPl4c2WpAJu)K,NF@%1^u6"t(DVB.QNgjc5d>K^m-\a?DllhRb#XlJ.,N=Mk,C7AFJ_cNe*Kk*&MS3i?)cm$jJ4\))n=]a3++rU2(f='724kN.W4He5Op:H]_;&#j0W"9MD9B13D(6V5<4Yc'C85&cR>ni8-B:b>f<YsQb>J>o(Hn#r3isdXoD,?Ek1ML[>4D^=Wq.6daL@`:iae,ub(gC"pn-UdKUMQZU?%-FA+`^11_nsR5'#eJWc+HN"SHOWH!!)MFd_rf/>Bd'CIhGtOiE>E#)2:YQ0p?f!3M,rNdbgNtSF!4f)3WN(ZjrcjpYorY@]K)J[hI`0Ze0)iNeCS62CDPH*>okbTR&_bXD2-+pX(cVplr[EI_q2R8;j?`TSK8:Y$i-2-Q-dJh=k$W-1dN@NIE,jitMj@&9Oo>P02XKlt`9--b0jMH[XI2#&R.V_jKnu0fu-Y:pX(DT[_Oo4q(VsY.$V-M$(6LdCC:[3b/\J)jaJ(X#)AZ$Fo2SmSjY9^aJ5;G0.GHp)8[@PD7Y_E&3-jL5>r=PufIj)s%ccd392pI6\t.D7`tLUUYZD&-)\15"2uOVuFk>BmX_uZj\g4de>IINni9*Zn`ik`Gm,d6^KnD/^>-_$t#u9b:-5u'7OcdHMth4*=8h>djCMfA.#$=[OaSFW_@:N!\;Ms+5O1NeW6lA5/'^:U*`WAE>=BnCrM#(lf"aL=$Cc))T^bb^[J8L(n>0!2PM*Tf/&\K*4c(1+[_Ya;#DpbZSRJJ2;8g3CM!5<LjMQAknU1RZ<:oS;VWJ,1tC$#?(E!DUp9_j2)jouU"Y5+ZC-F3HY_-TcP/2H*iek@K:6pnrkO2=WLi:J3pal&?.d,_XVMlPA\fo"!!'ecKq!.#$Uqrf32^b@Hc'>HI1<cR=^Z\Q?)kN>Wi!@]A1W%'+`K5hCoE@qZdGb"B#JGi7;-[dMN8gtq*J+&Rp2B?A"_t//,S"5L!WlrFJ$k,j[UDX=)f2-0<A?Wj`[8UW=UaY_9DI_/6d7jOB^=5'"O9$U48h&BY`tnU2\@8L!Wlr`1=2U<H*+KD$0B<i(A,:^Ls(FWf5t[FiWu\,_kD>G#5SiU+6Yq+7?"&>U#<MVV:372H+_l5!haY)@?k0$TY>s't;b.RJP\lB@Rc(pRpi`U:Xek%\906Nq]1u1%C,l.B@9"AX-jQ=#;Gm-R])t!.[k*`hG8dUli+(iB"<1RI$nEde-@&PXF9?Xij7)JM5@r$:A;/[B/HL)[sjRg3Rj.Mes9%<k$Y"l]Nph2Q(:doM+[q#2CeKAmpWA+LS!4=dYZn<F&lt?.6_<0L`EJEV((L`[MfV@h..*02ndsD0Ht>AXIqF6GVrHU2\@<Kn-<H%G>/^;--gDdoQ9Lc"iD!4uqXsf?i#U=K_2(S6R;,)W7nCL[6_HdF-N@f<X0PS5tEbJXs;B9mt20%\b4iDu88QWiIaPeQHta@C:28!OGX`L@X(H[[Lt`?EdhB\q-W+Atu)LJjKG;!!$UgZVM`l-r"DA48cF^ghT^l!!!#7X@DFg6:9Fs>A9oIqqi23![n0O!!$D-UN?iO\c@Ea!!!#CC-Wq9&YK[8!!%OP%4HlY!Yb\9!!"^R!JN3rJ3j59!!$UgTFdt+:^@%$!5PZ?'Z(Ob$3:,,!1;;e6C8r^+TMKB!4*S?#ZCjS"98E%?rd@:@>Y&=zb\BBd9G*p/!!!"L=Ucd4.0:1b!!'f]crbD@C,+a::A%F.pI1aCRf0Y,VWm;0A^VX"&c0\-nr:&"3L@Aubm\9-]03t`3$WkVYrX7o1%Yj9o@6Q?c9,TtnPb9S_bBdR*Vd%_Yo3JMah#'B@iKSZ0h;2`i(!iM$DF`qVCUKP5Bl#iCFO_rmpr7jdEjXh3qJFj,)2KRNkGhsH]^m.50e>+)ChNdC1_AR<JkYu:^@%$!:N9jdEV@-BYI&j-'Il:>@20hrQ3[HpB!u2[$KQh:c1;)<o9;(7pkP#[rhBtW'XUlniBG7B4K2MdoIs05"QD9nX*!T+k1P"0+1l5DHe.Ip53E3Y#L!>(n9+!m$R`%.18]m`dgB`Qec]10ftcDXK!k^mV\]24[K&PRkW_?HP]'k4Rb(3`n1rfOB]T\]R1\<>KBgo,u=jI!!)IXc'+]%g:JDIUjlDjma9V[9rb6iMqi*CVkp5d8[[=gS5riE.AeqSbtb/$Mfj3ub"M;0Dk_/XTW:FeGp##S!@cUD]-fP*)]LU*FgUf.IH$W1a`FpTICnhAjlVlKH?=p0#usN+*LH@KFGD/:92!=Td:KlbW%it*N8oYm(;@7f%pDn5SM.&^hVf%RiGjAW`VrJ),B?nF5%F:YhN@-u4K'/K2m4scdT!-3mgMsl6heGYP\^bZ>o'\FIm/]W1#%!<k&,$j?](ZNK2P4%b:2Uu>3Tg"Zjg+*hQ3Wimr=o8.tSRk^lEQlkT6$(]gKhR5TuBLGLj-]aQ(FGUCkHkN]j`Wk.>-l_Cc>-;)L@rX\]bR!t#&/!8p"S9K>GkfR+ch1uhV*4)()f'pPU;1c4!;Vj(E/D9TQXWh\nUYSJglRO%a'<)-/96XHRjg</^bgpYr%'YeLV&VXIj`b@MMTD30^adS\6@_(,J33rW;QeM%j%]=>^Rp0pN=/_RAA2PRMe5KF]B4P=9:!Lk>S((%%OU?ZaHKJjs']B4]JJj`JIM@&%/-BA$q]E&h\rYBSb[/COdSte3VXCsV?eJQYm(B*J_83#h"c""dAJc7O5Z@c]6GRVe026ZBPoNO.4#^W\(.h.:'S;SG#J10T6M&B.$Ou9S'p?%@R5).M[c%sR6SXtsElZgd?%-FAiBe06bcn=WYXGbLI5A'(@:qhK!!!#30/WnL/2\HO<j]/*Y1dTnN@8RiI_q2R8;j?`TSK8:Y$i-2a$g=c<G-6EUpO.b?<g329XWa<Fs?j-()qZqDJj#$-==B,mcXZ^Vrd"8#&*6hb,)8DX;WjdH-thGOuZ5c7h'UrShVOhY'fN;1OKU^>o(%HO6U]\?M%ZaV)l5k5EG?eIO_U7BLmX*(d_/<g=74.`QJATl7r0pfdh><crgRJj/LH:e0M-I0_*K.51ILc_C1`iT,fi>pJ,3iqThbuA>#ij$A"ZaA2^OEX0'#q1g,J,mT@)o$GgBfM53>.&F?i2/ZDV&),LS=!!)HsQ[*G=QHc8CoH6f_SWCq(9rWS`[Is'$dW_0?H,Wc7Y,%F'apMSu3\Oj3F=7"=hY$`'WB1aFAVp9neBN3-%(dFEOqd"OVTT[*hS:]B_!?`q?8V%4ad&$A+>m-E=C*.-^C2hu0u'*84:*o#Dn50eS53$gJ#cC`,[m',5c@=uf3[`]O+l-IeoIiuaZG*eehK-4>DL"Cj@$74;c&P>5))CKl:s3uGuoIP=e-^7#bt[SZB%K02kU^g*)TajcrPJI6-VGGIpgF7<6t/u>T>HT*IATGnR\c?L438Zb5_MB0NF?%Ei#1LmP$Ee8SbCp+78ge/7!_s;0`nc+oT9XV-7d2g%'i^Rh90uFhF1!J?"N`eRXTbgn_ja9C8M$;Vk5nFdj_7lAZKVXE)uprn'T)l>enS_r_Y=hlT%kfITC*g&:;K295=!NO=c4j9n`J,glbC"1QIC#J3#j+`JC+@m+rN>Fa"#@eCUaGfT$u#_ep3htTTO"6*;J9c"i!'1b3^qa1^a3o3/NH"_1jFd>7%fr>F6gq&6'aK9";F:"8VXlYW!W7"h'g;</n3[F*@NtnjX`3DY-Xgkc6bLG^(3=C[r#@5q]ZL!\-:fpP!aD&V@(OMLbj)`oD*jd4??4eVtPteB^dZ!7EAjr6kK`D)Q0Guj<^A9+<AS>+sjA0[LZS4<gWk,cr\u(<W@#Acsia?2sAL/GU?q=>MetX0fCqK2D]!]--q@5;U%@W^\E_#k&5"6IVD_PBM'gc2I6eZ,'jn`-pWmR9+%beq?f-)tN5<Q:&6q^f[SO-\)n64DdnD+k'!BF-^)[or+0RqJ*g.JiqI$T@JA+jZu(]r7(Bs%?VPq*m1Jo2;[e1*H-O@!V/^>Pf^ZIJI?MisG0G1t-hWH?l87pHq/MA-+qa<$o*`6_UUVAS#K>H""qAMbgJ(-#>#W!p<*CT"59\l;[Bc,kakP5,0&i[-PU/WVmDmp\5ud85;h`)^r]`=!G4<]>!icYQS1),LS=!!'g47cfO9^1S&dS'Z(F,bHccCjoKhG[l+MKSe'?(::tDCWa<pK`D)Q!.8P2<]rP/A5&]\)OQmpXudJ#4P%0UdOBj(Z9,PD8k4;DjeDnb!<<*"R+3UU6C9Aj+TMKB!4*S?#ZCjS"98E%?rd@:@>Y&=zb\BBd9G*p/!!!"L=Ucd4.0:1b!!!!QWr[o.7=[])!!!"224tMX#Z(d,!!'g9"r+og!=Ai-!!&D:J3oVI5Tp+-!!'>D:^Bu&-j0MM!2ZNX46gI,Ag*fYV?g!(!!!!t"ul"e3S-.g^V,!aAn0TU!<+??1t8SE,:K[<[6u,%Eg1p8C4#8d<SptM>>@hP[[Ls%4rbL6Q:jVM.ACL/KY/Rnnn6b%Scg2mFBuGRkA,LsW\K]#PFYj*hq>>1%gVq".#R!hKHEBX;VNq.p&#Kr[q%0@?XD"$XT,$ld7<cBgP#r"2qaSD[t!O[pQWu';8Tmm(Ditj%-1:__ifMOmU+>EIMN;5)G6#[#23G"o+rH"GUT,g\8.DD"g1iE)_oI(YNM_%L\oiP8Ub&@efFQ1gUf^;!!)KoX1n1;MDqs=bP+F'R-)F1gX9nJ\sN@l%b45q+aBZ,e`&,enl`.CK]U=b3PI,D6.4RDX)hc8kPrfOr8X(5E+36cZg98_X`@tkYKI5l4WD;^LWsXR":5)/^]V;F[MBi*^OlD_.iR9fjeK_q:%uuRdWLu;T7!O4p*1*oo!L*46:11#jf-i/5Y(cq-3WqY]``XAXK6Vl5uF1HIkN2fS?oEI[[l2d?P8[sbj1QgK/H5r_ET&FEc%,;"ccS8/@%@BjJW./Y.SHJ0JT;`]mAHjBOH6A8-f1q43p#lPMdi$o#8#/ld]:k2lg`4OoZ"`#Sq9trEkbAIQX3o0_rp%M;!7:\3(uP?TK6VJ0'@$q1^2dWTm<KSW1ke<u7ZcqN202rS^6R*d0<@C&^f#IjFlcrDEPkTeDHK'UrC]1T0TNRiNU1c1?ia4^YBH)k?H6n`>u3:=$X9U[1=OrJ080kV/15S,5hAMbr90G4kS'pg%*EFc1UY.NoY9h*lqGc?1B8rR;M/jjCOO96>j^1S+O7_CD@Y'r,)=5j&G^Bs19M2%A?=cPu?%/^pl3U,Z?7C4*.;Dq`m9F$]GA#7;bLSS:hp/93%:,Qn*t*N/oe-<G4MdAqNpgLaJrB3>@98G;j7j3'`6X]kVqL=s=^r5iul-nRH2\Q*XZlLV[e<TYsBa2gLKjVKBTB"mjikU0H,9GOET9OrHmH5+\.Vn@\WCf(=<'NXkle`,q7a6aCdTHLDEo*bH`[ZqE4g8!nZ[UehB[bfk0$,LBC/uK4DVX/Ks\qH^s^(sHsVSCL);a]aE0@JlR4umI@ql=PUQI7aie![ZaOoK[]ZCtii(-!7Wcme9i.5tTG2b(1@D[-RL!+<i-IqaZPbF"d3(>6sRotQoiDNE)&5@hcgMr%3EQV9c-:Xce9@t'UpY0?PSdM4jFXAcT%.`f$7il[^UnN#om5pNKoHQjWlT22A$7[s'LD&hA$_P>GC[43/&+e,mB/1@M/P"!4%H<&PH6V=AJqR5?8"39i<R1Qg`j0lGHZ$-R[Dss9NTGankVX*Z8m`Cd%FU;Kb.rRYCL/,3/OOHQt:1aU(4BC,sHs%c/He`mNK$Hf?00YlXpl7=;i,%3=Ee@-?<guBn7KquRdFKLe:NT7[m\VKo+X$gclo=D%FWn<j/a?sqMRuFc?Wo4t8<%F_cAYQFN%(?rd?fqd%ju3TA\I+f!&#T]oDI/8ep`n'jW`DnSlA7M)lec`A?nQn=eB]A?Me8WR#LZ&`1KQa7=L!05VK-EVN@juMIF\_KYY"-9aRNF9g[LP*k/hZMS36HH@*+H"Oh$!*Gu!KSU,qKrAkTY-Rn'P1,fp;#1^"fTsoOnr:`?W5<LYPHZY:,T>]?/0Y90ed/q@geX*V$+c+(C>^u1!KE)"Vis_q7;Y$b2cdYXf242Y\D;RA<V,/K^HlB#-474UM\(=QJjcfIEN6<;0"D9hnOL]"iOdDCI".VU<;k"CdBF-J6YolUc0>'!CIZ_i[h`+PsI<U^)^d$Z#,_X.>$UL6p_D_+th(=VY\@TY-Dsr^>?lc4B[:^H9XHt.>VV14rA+X1OY55*KR$Y3J($&k#Dq<>UYJ1\-(r-^tpDB;S8%eip`%$c_3**/POS['_ao,aj(F/#=$V?ttdr'+kc2!.(8-f1q43o\T4.2:-7GX'.T.@(.('QK#iU^/-WL6%t[;Xp8DKT^[)Up_nNu:V0g&%Z(/f0Bhl,iAC^5Q[Ko))#n)4qGcX_I0l1o`U^pt1qM/kagaofN2&bu&XC'P4Rnl"_;"]U4&geOb:/G@rbTMoh>PHAeA2Ao.FbB2_.L`ZDV&jlBIuZIuBO#Ze&eeQoPe^WH'*fnk#q2sAVZ;1%,+Spka.FY]ZN*eBukQUqH=b]$0josdX]d':'qZ-)/6QdegPE"!J08%-"OC7D]:%O3)>!!%8Zo!G3KbT*OnP=t3f6h8V8D,#4qUE)/_U2H$l("L^m1@o8L]["7iqpH_ZW>XmbrhHr_24]^9n_"_(\Q_l0p=@BiK[F#$29pT=@L?dJV2W,ADirk4TiUL&p?T+ddmu*26SHX5L4rFLfljhuB*g?I+Loo[@pRKB2kD9RZTXWdk#o<M[?0eTKV12`<K[kBr81D;If/q>3eI`r#NkBLs3%0^H;.dJ_aftX/\.-;T-F8Ig\(9/4tgc"g[qMJB@^[*Dh2\hlT(s4.jLeu<)D0E=+fQ(_>!WA-Z[u6Ci9Xe!<Bn[XLc^3WBP387c`5,`M-d4o;^1-p_r$D!P**G68!G\XS/[alm20**'qFrd?+^_MLWoeV.E*mOdXS#0.*U`;I5MNoD8Ern+>L9YAL01I)el/?Fj7iaL40VC1<Uk+Se;.lj"CF`qO.50X>m1>?C9NKWp$n49VGHS+9"FlcG5j4_eQRPP,W_lhS@iIR'KlA/H_jD\t0l5hK<!>.*=Z2"]Ck%WpBe'"&i*!!)rs/Le:RQfTKH#LF"2%>[Wu-n)jd1c2a($-f3,<9G?_$+AGOIW0\cXgZQ9)>hTuMUtpY8J'7&S*(_/Q[.u+S@OHaRUf2I-40#JH4/`X>^ub:'O;ZpbN.PZKl&=Y`RDK;!BeLP,jF<h)&qo0Cb(89Tpg%:Oa^X6KdjR_4TeJY4IZnl]#D@rO:^U\,7d!l&OcqN;>W]oo;[-"f,fm`W+rr6T,?]\;-nfNU7s"WB:([>8-j[T?)B2Wi)mCLoh/@\@0V#27)6X'm*^1`lN@_D"98GSdro4ffHCI$,VpRCiWEs.pF%9i!!([#IbKIZ3$l:`a=lMTguS9Z\V#P8!!%B":R_nH1N+=jHfeEP"Q=&c#QOk/Vu<t/iC?7%!!%O4%10j<O:VBl?r'-Vn.6iJ!!([#O:XMW#lt#+p,"#t&(r]]!!!#7h\/LHzzzzzzzzzzzzzpcJ7(`rgf;~>endstream
439
+ endobj
440
+ 112 0 obj
441
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 64 0 R /XYZ 62.69291 321.9786 0 ] /Rect [ 116.6029 164.143 191.6229 176.143 ] /Subtype /Link /Type /Annot >>
442
+ endobj
443
+ 113 0 obj
444
+ << /Annots [ 112 0 R ] /Contents 162 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.01e7e4352e1f055fb8692ff3607d0bb4 110 0 R /FormXob.4ffe8197428276c840e4956b8baffb9b 109 0 R /FormXob.eb9ca5e7c57cf610a506074c049b99de 111 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
445
+ /Trans << >> /Type /Page >>
446
+ endobj
447
+ 114 0 obj
448
+ << /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 263 /Length 24037 /Subtype /Image
449
+ /Type /XObject /Width 653 >>
450
+ stream
451
+ Gb"0WpK&#4!&+1ujfZ5H?0f1HmsRPV!C@)]RM:C1Jk-If<"KdA/6EJ&N[T5?MM7h(-mB"U%E*jm!eNsu5j0Kp";9V9,_;0d#!I4JSF:+\".;jVlq(g8GP96+qo93Izzz!.[;0'*),8boD7.d!c!t"u-S&->:-o/;';o?k]nS!1#oE"0`*c0*'0<V?,<Pm2(:a&CUVqK(]Sf15KWE2F73D?l?m>!1Wo!r<d=Y7@4Z4]>UFU`PeXo$!_56FkjmS5>k9_1d6_i.iNZ=Y-YInDQ"`O^uqmsmF/a>f^e06]Y=RI6GdL5X]j\UWih<=_m0$eU7G4T>@g`TXZ6Bf?]"#-g<=1tZ`O8P"ZdW8$QC/*Ei?+pAj_-^Yr4e)Z_F<VCjY%0BBlH(Q1is1HmCU*13.MXhR(*LXM)0gLe_WUi3;_7]oO-3opF=8joAT_;K$l!2Y.eP9Z,Y]e(LtfU-q(Xo<qnf=&1/uYWd8r-2#nJolV5H]We+%lE5)ESgE%t1uZ"N-XD/L81.)0_-4G300!ul?_dqIJ/_Ql?iB1VI,I,&'6:C0):p`Rh3g%(&Ab9g[D"aR;ZgcX,>/96'mjh_bM&,R&D)oRf(qI3&;6a:mtQa3Z5n^n.dq>@O0(-&R+coafFX86=7N<0=g^S5-$3+Xk7^I(2a;.nYC1^L1!&1:g(Tk.H\NkYQIK\QQ[<p(MiICR1a`\_kCr9II8b5rlS8ud6c+Mc2!'0\#@0tSCStJ>_DjZe;7Yh[SNj4ee(`=KGWi`iof,hrR$Go#o[tmhoU^uc>_`CB[3F*tD%/'#joX?k>.'YA4&[*)fnqlKKYlHtOn@V6p[JdDVVP9r,(Ss?=tbonJ,I)cGH/W$2rrKqVcnt0eXEfnhK2']fH#>5Cg/"LD.Oa\J38'pHZOG:kG!dB`2'3IeVdu*d/+[9F=%AMi;&._q:jBu)[9nTF`b'V*q5=Ujh,-ClK(4le&ShA$'k00(NtP[c.%!SL->DiEo4Vk8CroA%Z=,A$`*N#`dt&2"Us]P):O8$PCI8MQ\G>D6`5I=ANo_rNj.D5pHu<iSZoB[Hr:M=X-nH(8o!Y=XR\:2R^]s+H$qO,(@6GJgOAhLoGh]0\eHQ*i3da'H<Wa0J[n%Tp=h#E45rhKbpK,CWiNHmNN'$Di'Ja?<KqFcVVsHa)k397/$_L@,A=EKH&Y`S`TqL%qhj[B[<5hs,#,$CQ@[f=0AUsHWj91CiEM6<ghqK;V\f*6/tG(H.$!.gd"f65JP3Gpd_.8T!,d)5den?B2>+^odaKP:g=\0WR+<g^Zi0J5?g<3[p(q822EcqogTd)]cd_N+QQof8Y2WL,F_RjW.CSY&rO*::RFUAnL0WDharX9`G+'f<P\SsO6[]ePWjBCMnERP?B?oC^<KHb6s#n+8drVa]lVQM=K5K!ul&Cu1F+B;<\$Q%^)*dueG4Es)M[ep:r-&UX@10hT>"C>LE9;4s>198/DCRiYbXQkA?IYCKekTYkoCR"uDAC%8MWa7q2faO^3=VPEm8n;!fI$Sh@s+Y50tFL73Mr'6BNC+,@F[em?-MLWJ*OmnemdpL;:s\/c#lmQU3Ipkk2n&]oP3sCP<6>>eo&'dr`Z:BI8j5SrnDl^VWV2?f=aEVY"cghUhfkpm.bU4WR4\OZWrbG5Q#=IOPOR/Q$i1#Tj0n_rIRi+dBc;8Br`keC_>0`4h6c%C1$=TqMo1UVP9q@QPWO!)@'nUOPRprr)Ml_gMbV25=HVNhHri5fS-U5IU-GeW<B?:l#OB0=tD`AaO#;$e>QJJU$R2ha)mI1*a'tiL"!/pT_sHZ]cTmnfqM>[UX&O0=XitTrnDlbVWV&;T=/;c`3`!<6VE!@5j.jq3I.`aDK?a=:OY[+V)3$4h%4FN_dbWCg(4q&`6H.S1:L,eV3&aYrl/R<bMot.m,,Qn[@;`KM,h"9h-OtcQQ*Mas8Jfo?7+A:Z^'7JYV(,OI6,U%B?g/+>GJjpKB_9Ll->TX"*?mW*1+Vj`%IpNeg0aDo!RC_M!=0TY-U;>S3C(n^2RpentBh@<3K$^=s):^`YGu_[,6](\^ep%D-<;:<jSp%V8-?/Hi*3sCj<289%JC3m[Wi,1kbP*ZM$cZS[ik>2RK^_$/_1C[K4YHg\C>-g_+fm9=hg+fm8Bj4nkI1N"o=IfcT8C5YgLd?a1ithcQ6=9.fu(M,dm5#)%Q(92ODI:P7P`C%CciCXJQ'5W:='.kmaeXF@!lBD'JYHJ5dmlte8cY^QV>hL-5#D_,^&]@0unqB2YDddP-H*,F[t(FZ'8f$I<&/so6-"b8VkpL5$@oF'A+!6ZL^!S@PB(P$'.df=39p'\YkLhQiI62Lgn)8n?3S"T]]YRFtZJ5+C>!E]O\%DX=5m<>#M%01IdoF2\_*+3YM9EVL-@N'bk&CUV1K9ujN'>u^-b93Y_fE<o<^bU^[!&d,:"0`2C)LtNndf:qOQj-q3`&%J;+Jo1l">LA$15KWE2F1"=YRFtZJ5$U(!%`bi#%3W4`:Wem1cL#j=B!QkO\ZRSm;O0RbOq\Uo)BNRAleH*`=+C6^J1qVh-W2=la7]bgVS#'q5da$<?JR/774grm-e!a5l^a_9Zrm8ZA$m66VIr.dRa0D-S<XoQY'pm)0t_V?qfm\V^Z8U(tYKhq`[Ugd[p>%QA][*8q&rS^cuOF1$rCaA'8#"Y(:J)P-4[4m;0=&eoXSY7'/=R"_+?'(blKh#Q8g>Rtfu1"r%81@hQcc39_eFD&2uHHZW6BfDOc9\:mMq]e4.^pCG<O``c'BO4"2@)ZD$=MePsngneOWQYiopdN;tAJ,+A-^U/j<V.4hO+\P=0$4fRMg)(G,*4O;U]XEC#$$Nt(ViJ^jEX`=2[l"u&aHr);"?Ge]CeUcp?#u?Daa#JqA]ne;QF:ftf@7mkNh::(8gKfr9Tu#n/$G.ZZ6OP_RuMT/#HL>%'e@j50e0o.2I6;t,G/aZi-"t`pYU=Y!WK%TNbOJb2;%sIg8q5t/P"3"2<Op=2l<u>8_;c@PBhquN&%hiL2n-bXH'/^MrEN*>Bm$'c?uI3%+;u$Hec.DIlD.GS92+uIrDQt.7'=^q^o$/6qkLj2q+/N>[!I7C*/lrk^U:jA*MOImrk_OoPhbm:Q#CU:[7gF?*u=<+22"9q_l9ZYR*I;pYE<Ub+*]<e"sN7W(gPACAq2[fJPK@3[?+JoB!,'k`bu_XZ>@`%E`qI4XLckB!&H53*7p+&&^;7Z!o:",H"`XL@aHRZ6$](rNYIN&&//E%C6o#N,A9$]kOK'anLA+VhZ%.4:Z`Yrh61UX-LTTAp#s/>*.F-ibH'_Ga55rj`VHsL.>2JT5ekG293B^]osO;$+`35+7F8,781Uk2rg9S-Q4JjioHDe''p51]O+pH*n/#<>93&g;,\g@S6HcD8[*>4r^=4Sa\ZRBJb@4!*4[&1,D'l1X8+qW^>!4*b,5ij.l[!G:Y1[+G"a\.X0#hj)%L`@5C%,"I.=&1EM_]+L,Q*u[;!M)n*nNGES2!i08I*_.[<0RS/G]Y0A.pWFn%\!M]Yjek;48:kKj26cTQ1N,ha"m<3^A56\9](L6LK`0:@)ZMlG1]h?;f"<\m?cgM/H+de>H6bZhJ8WMJCla5,%$8KZ"ulA;qgTbb)aB4'/3%84cf*'=^4Nt+8^2^F>B2KBcn;ic@!7XdFrR>]Tn0uPomBto.73p:0MMbKUZBRK(fS?^?(e=3&naB`:m(3HgASkGDjR+n]_iT#RXc&K*-[bal\c>,_l+WW,j^`eZRF6/b2)&Ln-'Z'<',J+`s0b+/K?]""hP.pZnf3_H8Hu$[mkjZ29p@a>][.^ApdW"-d$;7iQeYA"Ikb^E3+j&F9J9jQ-+JrMbEEs)T.6>P6]kPJq&_"NbZZjieZ-?0@a2MWa8#A)j8u5+*SgHK8Go\LR8X\>I=ujfD<_(W2oHkf,\FP<Fh83hiNoQF<]b51?)h+,en$o]/<[5O>r(DJfVPe+IZrC#5B:cZk_5E7p,D.RdDId"Ql"*UWo%;X3LnF4G78R37F-jWj0op(Li_P=lXVW'3XR-c6pGRLRqE'Tt*mbhSVSW"qHPQC3`h[)RB75bFP7).E^:_+mK.PM@G&<\Q=N!&#dHnh/F.8_6^?fLpRo/#ueD&BGfrLYp9fi&eT:7!BlgnGf0'+dq=WQCOT3n)]Y`$e@+)T>\[cYTj#q)*a&JP,h2fLccVi/;J<5$N0iFcVMR"dio+-1.$Z;4bD8uN]LJ06CK6Y(Ce1T$kA]Ca<:IiF!tGX_'q%CUGXROWHTGgWeH^(."C6!-)u>(?7`JG,@2rG(E!LOE&lIp#6oP6k[9jf_<=(1uq`^XJ[O=N!&#d;7Z+`n4lL]u:3X\^WLpi68(gkt2nt3l*c7XNG5ll;.shS(7$\Qu4Lo4[kh\m:%0aGq0Kh`Rn:IB/P`)05dNMjj>bp;o6VA^[BHD:G]pGr-A&P1'!WVYE/dh$"=g'AJ!;jCkA#Y?l?m>!1P+.!E]O\%DX<HB`OGb9EVL*@N'c.&CUVqJsZaM)8n?3S'6,iBnEh[SST:F+6%L6H(NN(n`kgXE"orln@eeB<bL9TGJcI:#FIB)B`L&ZiQn"Gpk?7tK!)N.5@K)0VFgZV-?sP_N!P$9'$&_'"3`C91]X#hoN0*H$M)d&o!Xbm8l]>(.fPa?,KRuc0X,X.9mtMbrF-m4RWE<Arb-3hp!K9IVe[@eRUKgM5l$-,Hoi!n0XC3S:G$=+Xu9Cag6g8p)B$Q'<\L7a6?A$eKAMW9h!O1<&BEM%"3_P!1]X#hr5V/$)pU%BoY8a4VA.M=o"D2rV5N/V`?IV<;1FVPM42iV7WW135*I.`7k7MD\^<?OqF3ud^V.k&:ad/^lV4F>)(ccT*8af'&<US0\dj%EQj.tiQj-r^?hd?6l/8To4M)'KqF$4.*e(k`a4jWAs0_<hP4eIW<'$$$4>hOV6UD<uhem)>i*bNqhD)u&rG0E[b3s@,N,Pb"Lusqo%XP1+Qj.tiQj-r^?Q+6#]_T\_Npk(c`U]B;-k*GL)Io5+cbh*<7&8;I(/!Ujc=fc4M6<##3'TJlJhV<RhO.;,,+UWhRE)ee/4<u?s%`m5Ps\5t^-G?oYfX).O<kXTgZcY98;X^Gl:l1sN1Dh*]\Z\a2uW?8T%T4PEg"hqO'-779Z%qD%''kaWuBI2j4e;a,#t8`p0Pd*D\:Hk0+cS4D"=V/=\]6?L/7ud\LXgWcf5.>]G1p7"XRk]f;<0ndk_jS=uuF:IK.i\qOZ+'K8g&hS[n'DLXZR0<JbG0EH3oDGq%)k<nBWU&_!C+&CUVqo'>=1%tEBt9Fu**GC&0"&a3ap&/Ok(pH;L2krkf/T#m)@,@@W"/9]th&qltOr)Ldq]-Z`peZ)oEAf<$uZOj!CIlceq[--C?Y-F)iI@%L,0fSrKT6.[/!4*%f%DX=c'f#cT5thBb$"=g'AJ!;jCkA#Y?l?m>!1P+.!E]O\%DX<HB`OGb9EVL*@N'c.&CUVqJsZaM)8n?3RinR/=9^Jh^a:l7GnW-Cj[DO$03%Qfg<;&G[J8p+rn@8WUWis4=8U]K5<NCamEAqB1\3suo.Z@:eAp^=Fcq=Ho<A\i9aFZ&rjp<G[/i"YU<:r9`l,a[JdL,c>qaXWn/X(iaE=iLYJ9S@:HlO8Ua\MceCB^)9HBI9qn$n4-e%$=#;H\'-F4?6&lEGh=+OK:S=&R=1*`Fb\XIh\aaW-se^[^lmd[]LkihWq^?bXd59//#ro`UW2UPUK48R^h?];4t:Fm5T4o;qWjr-1^Kf2Da0g4*0C]DfK=4OEY_V3&0^.-mPo__Tafj6V\J7GGC@W?a/qB@`9Us]:Cp?D&gKU;sOPM_Gcn*SHL<mKls)O]=L'<YD6S]'Km/Ne?`.P_@um%Y*ZNpsD21pli1E4n^ll,a;l-^60mh'l7Gs$Jj$r$XFESf'g2EBW)O%2[pie/$p$bnkbe^!ANKN%-h2aB@tC@mZGtm]nB(YD#_hl"E`KTa4F56c+B6(7LcF2F,iQ\*hb.(gjEh@HP#\@[2b026t\X@6NM.I(bZ%7sJcGf*(+p;QIfq:#@&[D56ZB/Yr>6d2\M&WF%f2[#$<!kO_/Ti>-@HIDrTS60=@cXg1Eu=88Z,(Ri@CTf0C5>>MtRpqoiJB@Vn`mF1#Y#Vce(-GLMKUGXEH\Nq,%]#Q(jg8pRJ*X=2b<+=R9i2o&&s.R0soA(uN-H^ruO13o#i4A>+m?^Ml5?`-`gX::Q@9r=u:OQ*?S*;aarBjhuP=O9/cH%U9+rD;lRP#10J#[2K)B'J6&sT9hE`WtI8Uh.M*:gI=OSYce:XiDAipu'Oe\,l7X9kBCK6Q4$CT>U8[kh<9X+O[.BP"1o2u7,\hrmW*\!L56$3fIKlR6@o\MiJB(OXJZmWQ]aOU/8qb[cP]l$n%ndJSY&mGjAtHd"2rm44(#iGO$3^%:73p!u#-DrfLTW,fuWDB@Cj*WC[&df=4TRk['(^>!4*MIHQtn_6c#.Ys@"HKrGS6u[RJ=hr:*=]171Sm?1"Hh<M(3n=*KX[o!qT--?9/FBtiA3!phs,`6t5!$+qLq4R!N=W^Eb@T?1>fffRp4;n[]H"I%F!K?\?Gg>Y*UG[5T4V-+S+o^0X`H8**lIHUgDMY(=ST:J9KLujC3d?JUK%P)9LB0lj>HDL?Y8Scrq6/5>BZ6$e?sV&(bII*d92RHj+L`QUlTF>SU"'PMicEVKYu\9*L4/s>R]jVei"QJK+QK3D"=&M4n(GdO>,hLaDoEt4na:B@?0Ro6U_TQo2!qs;--X[*qm#P]'rGfN+2e&U'QdgU;-ZuR%>Q@l)H>LZH8B9>Z99:eoi:f_D_8WMqY=BM.1/_^5!kDhF]s,+5-tbRcl6CM"@r/UlmreB28Cr5N=g(A0>]2A8g2B/EgELEc:eXgVh1RA1'^'ECau6@\kH`SgSl+I.iit:;.1#hU7?rGNubjWRI#q9/m\;T+4UT*WC*kdf=4T]=mG>8^?`/eF1:aNp6(gZeh!VO8>Z8^60N.\1=jha49;g^Y<SnSGZ78.K*CC9>?BSPWPHMXdOPMn$<Hd:KCT/*N>?KF6,,>r,.G+IGu3J]kP`]Q&Km8bZ\Ld)YTik4juI;0W(]F:SKg$MGhM*3mT9FmFng7DgJed?@o6&ij:Xm>2Fmg[_J1!,4>lhT@Pn@rYlEt!,OF.Qo5DffA*FR2`)irIlcY)^%cPTD7=c"\+t*mhc[.0,g%iYCD393\\52Mp"dS8Y2+i,hXSmHlPt0>"^P%MU6o<9<tr]_M9>bC.W"sCHZ5t[FLR?kPUCg'`>m'Hq73c:\$Q'Nen-k!"Xe%S8'6$8)"BE=[KpV@Dsm0T-0C=E/JXQ<R:kr3n7gpuaC*2\)]@7BH5Ud)3qtU]s4*;/T$d"ZN<S(-\a,-.(tWb^0hkq]NjZ<P^AbZaT^uZ*Up]U0i^)+Ac;\;"Uuju\f7(^7nh-&,An6jL/#8qGXW>*gjP!noilh!Z?6qhdY&-5tk9-W&fOT^kXa5;:fu$"QFL7n.fP4aulH@?d:5d\qr@jlWdp-B!57]:88Sar@QTbmMW-bLC$Lp1V[=@aBmtn1`LI.P*#t&L3khV)5AjNu`;QAokfnOHGoT8/[I35d+`[u2jRZW:@>.XtcS1P=NrGtPSl'[P12?^kdMVag@D!c\=HD+;CQ^\WQ`\ASA9@ja.S_d%#47`&:_I==A+][\&<QC#se'q(WW'.!qCJ.a=m.;2<>@YP&DSb&ujTFeg+"B!>SJG9g)=DP/$WZ7irAd)_-*68)8#>9o'2M*2[d!:RK9ujNPM,mLZJYIqnp'2?5&V\=RjXu]LL!UiA^6DWU?5KnJV=Za!,SBB0g/_?k^N&get,(Ak?A8<%dT&L,h0;XrOFHL]&q"tf""db?mETH!1W1T9T.cooX-TQIf.Z4_:g\`W;E'\4o$Tj&ke#B``_*-<EiiW`&%I`@-A%"Q9e1HYR+bWJ7T;@!,R7S#%/=e1]X!fV?'d'0b(oF^\GKV"--%4`Y80UU0kF(H),hCPO)N%3n&7&g>j'WJ(Y6ZOq_;A5YM9aa\7182"XZ>W45XUo_J$2XaXk/r1iB&No.n\0b#h+&CUVqnf,@./JWatk[s0+)pj1F6tXi)BIb`^Ul?JG(fD=?g^[AErX]gJj\-.>_>gQRN+%*HS]?JVN+p9dVR6m?/KJ]Rh](ou8e@lFIL@^)qaj\93<q8J^a?fRoYt#3Bl=Z6B$1>;Ls4'tXkoOZ(uJKZZ(\()RW4:#D*pY=UKW!l5H#3:GLSh52uT]+!-8TY)LtP2/#K0!pOZ)/pK.&ENl\;+9P][WXS^Ys8gh:i`gG?NWmQ]Po,MioeJ_hU5thBba`#-Tfb8NaoXii2b;^]PDDA7J^@Uh&`eIO4oE<V[e(S+sO(s*?@E,'G"3_41B`L'eSSQ]lT+AQ'0"fgnc91C!kZ&VSoh^pJ1HQ?#+*Y?,m/EqAcJm@KcE4[=%BYHN!N%TK[Cp>M?)#$mc>q`1[0E">&CUVqngep1%hEci<'@pb[)g*@+JWtE)JP@K7-:b/ZbFG^ab;S]?X@'riGV>uaC9Iiq6HW\Dao#u:iAkMk^^\Jc@`]g%6YHTN+5OsMeQo*o*nr"f]hD!%95'fG5.IB+Js]a&CUVqnuLeF>Ijq`A3?kj$u='D,4c=:Ip#6oP6k[9jf_<=(1uq`Ms2=HhVnWg>jA3Qi68&AVX^4"*#i)G(,DaAVR6m?4jirnBUH+T@:[PgGA*nP).FN:">LA$-MS<2!1#oE"0`)@)LuB1df=39Qj-q9`&%I`+Jo0A"u-S&-AZ@9Q9e1HYR+bWJ7T;@!,R7S#%/=e1]X$/)Uh&B@0D5I^2a(arQ/)QhNiB'P>``40@JG@*A%^+_ShJLrkeOrfo%//jlbV*h/&%K;7#We2I%dT:aoBoW]V;89J!h/R#k#ZXk;s<;NE,J]&^&VMSJ;L6jL5))\@a^1RlG,8JA4oI'n:lAA8F'*N?fC*9+gi2Dh^]?Fo`/mBCsDXc]LYe504>JhV=PZL.,'+agC1jpo<d!1W0je'`7+huKVFeTN!H<FIuf?r/u2381aHmqIA$f7JreY&[3s2;Qu92#C9qCR;:!EN62S=$FESUp',s<ag9%HZ*7]Fl%9h_o\P+VL3<n\]2m0ToG1,9Y4E1Gq?"LE]o.-dM?l:2d\#5&Ti4)>.R5gac\C+TOQK'^9:V(gA##k+p35"qWN<%i*Yq67ONrF?6*6`mW"Kf_,721Cp0=>^p2=2Z+.J(I?Bq-;X(tj8(@h=[ihOKfOVuL]gk744'Ab87E;Im7C3B[GI;9SbH)e04#n_0['GP>.st:Q$WL;)Oc4B^h+;RT^[kI?]`1%?=h)H*DdRL$:6<#$9QSgb%&-2:/BA<B#g$i3;BH5`_9";>n^$EJr6WV(Nnp#Q,"6>hX^[/Ve=^+%m&f<*jeWK;fL[-N]GT('-@fDg9EVN@DoM@ikHq2L4.gV/3@-dn9M>8?ibZ+D?R_hDr4KW4`gfM$-hrIms6ZLKo+N1PO%[(QWPu4X6("$\\;p0I-Cc^VRZNg10\"T%-n<T_K).K+c^<2MqUDN'hOM-pHI7F9fti5]n851lOnll]REmBJhhpU#3+#D[6@%gACR]u9@bFC"_X%9nGbTK]#Jcj[Qj-r^hhpZjc)NXu-TVVJGb!,2NFT!;,pV62g$<n<20kaU+6.4k;'&TdlD`\%<f:\6:ug`]Dp<,Np#Q^FKlTih1T=^V=P_*pL9AYo?\G.NOl4d[-"^14"[,ID/a[nI@*dS23iG#j/a4]Y$hXj0(DC1L&9]d0A/CpcSU"'PMicEVKYu\9*L4/s>RV4n0R"Y:!SHI?M!9c!kK2R#T7&$!N4n`.MLEe4&Wch2QR=kohm-i6P,mG`s8FUfdk$lT4BDKKQYB96[lf=4YLZk2.PLeuf*i`rd.PM%if]=ljW'>VZ=1BAhOe+d@CbqmI7p*+[ko>`h4.`CWRI#q9/m\;T+:.j_>sE40b(oFIlaGsS*qZ5g+6!GUOG7MP3C/&/gj-U>-M1K>,B0[r@Sit"aso@%m5\&GM`'s5*GTcb8>#m4eEF`?q\*%U9.^ahbVdMq#**4bLJ9,';U'P+XT<d\1JF/D1=5!7G\d=?>l2]&CUVqnjflXO47D?j4^[r?f!(AbD_BWY8o1N\aI88OtSDXK$)kZDe&4T,.4#NC.s]>>YIm;kATbQq"j'm&p*B+I(Bg9JQLTOjoHjd#Y0V2?69^9GTQ],^V]n9>eY+t-i?`O7(LZ7CTK(=N^'WfS</Q,Y=.%4[Zo.JFA#-9>!%%W"gt2Y[eOnAO&q>=r/Ca('8U?&2OU*t]qmk&=)s:[%-SAT7`O6Ia&H]<\f"0.,dtmi04aNo[.`4>AKJ;P@+?kq40lV7Hr!m&VT7H^P/BDmeGNpk7@UH-<88;h6S_VdI?U:o0f;dMq#3e.npAc59XJC`[;\?0W>;t+^(6Ph"n9`q9It!b6^$nc(!5S[X$>c;<o.S_IoK%c2_i%*"`juZ)LtQO.qAW2K9ujN'>u^-b93Y_fE<o<^bU^[!&d,:"0`2C)LtNndf:qOQj-q3`&%J;+Jo1l">LA$15KWE2F1"=YRFtZJ5$U(!%`bi#%/+_1]Y]AV?,<P0b(oRLhQiI5thBb$t:-*:"3Vj!*EY*-4^)tbNp;YzzzzzzzzzzzzzzJ:@='8(7YA!!%.tB`J,5]nMgX!!(AMLhQhh!54)R"onYM>DQtn!!']dQj*Njcs)<?!!!#4KpW&E!74q+N9TK!6p$!4(4!MmW-q.OLL]qTfpku5>@g_OmY2WX;geT@eD=0/Q:(Vc3,?)\eG\+%!8pqOZ%F)2PTB:UD4]<u&*d^FM=B9UeK!71YN+_rJ%:=6S/K;QYWa^@r[&20;,HDA%^!'P[bR2.,I*AnOfO];C5$?3!;[.a*VA&b9G7X0B0N_%PKG]VMG<e/)q2[-2oA@hA*`sIQIHki5P;9ep5G_?/N@cj?_k_Qj.9d$T%g4!mZd_ff&ggmU`PnYSpfKc/Z,66lE5)ESgAYEDSgN,::g;!;5h,AZs8,aVGE1Wn\=D0?#0BZ/I95?`co>>ZBieXDS&cu]nT9s2gsJ>RZY(c\><-g<O)O`k(J<I]TBh;Di-/`?05R48=8n4VVJB>:gV`!kL?3Bo!cSg)ct\aa$7!3&uCsB#`!7mRtZi_2qq&%OiR)i5;.bNW`.RHl#o[d]9NE-rU]g`4M&>DRrt:N'f_[p&CVYb(Di;.-LA2W4@s^j.dhcTNU20aZ-!CX?>DJ(dB20I59V=1ok7BO)fs3).R,"i:AsL`X,oMbd8kE7^kdAS]f:K@nH3R_W?lRDjOFPKdf=lT?8_Gu,oZ:N6c8ihl2M1p1TNQYM.siJaZhW7b<fN@6`5I=ANk3aagHKPU:`r[SPt:N.p*slB9sg>XnZ47A7C:"H%'b41&9KUG+OS*>s9p$NCqjuFI.o%HZ09r\U(fi`DfN,;rDK?4f/DE-[_lH3[_[W'tcQj7Q6*u(\H+1@[4V:(V[)Or`WOXe=pq(N2bWY-RF#cn+=cHca%saoAfLEj93s$S!At-9oTljTdEb9?^]N%Qj3=QoW,6t2Z1#3^%>(LI`o&5?"."2Wk-rY`mc75b\H]G6Z/^ae0COIe>:#\D[Up;\`tJ09KV^QRd<Xp%/-RJ7s"*-LlimYF\`\4NN25?%"2sSZDX)Di#<b+R42Tk\cQN.c8"/K3n9KZW8RN-7n/4<aGrH#2E[]`W#;7sQ`Cr6O6(Uj*m*gN&:V0sOC5<Nbi]JS1r(3,B8p2>M&hlEkmNS2nP>Sg0l7bRpEq\tGU*[SjsT[We0Ftgaq")%dQT&P:ASKVVGiAq0*fnP9\:^VWOa%GM!6hR5;/jmWj2E+5P;3_e,qaZQ"#'n%:D*Y)Ug:a[b<N;co`f@RujW2QCj6rR&$'#Z7/K7NgG"`9I,&I@\8bV9h<SFB19SWaYt:Vaqa!p0DO&6ZkNN8a6?f<=50KN?1a?L;4BWdn&mc(IM\rqSM$cIA]p6lDc$S&HGgZLg?6E28WQQaFD4BXiDqV72)"a.%t]O_P;+Z9rUWqDW#G8.R`S1s5b/H`mS-JYi,$grVAgStWondsEVj#<kHjf3KlQV4C8RI\lZ9r-;b,sXf-Vdc](SG5jf2KMe[7sEgcp#=?0]B\V.g>%mrI(UL<"2eZlpc*M4931A1gW'"8iaWf@[!XBgLEL3g^40T88l55Sq!MZPM$B46[?RQu5omX;o^#IpU8:Q*Btjr**IhDMnSpS7UFh&XZi_m0586FGad@mB$ZUisT&fV_bWJhu1iJWb9sP>K\Y#?biL>dD1$;@?]8cf3W_KSA)8HHHe&,IS+&IX/s"^HtP(F84*c3TCAtN+55'Q!+qiE2YLio\l78N4FO%FeOd5h>SOe]L#&iM2"j]@6^O1kq=@M?W&eZ8+(+&<B0mZ,g@HQ,krZTG&td>7!nUK2Cr3B;!<<*J1d0M,*YoJ0[p_YZWaL#aqT(<eIRhAl!\k,a!2.^2A@iqE,<ORqABEk%n%J7"QENJJ%l"Ln!2-e4df9@JH4)G:!!&\$&CUUZ!.%9uVM>0P!'kHFV?$YsoG1mS!!#9&+f58?!;%%9)?9b&D]ttY!!)X,@N#4H5]=mmVFAA-CV(eQgJXfY)HbY'03OcNgb,%tRWUc"BgNACX,FQ3RpX\A3&SRnd>Ic<<YJ^+kT^7*K@KPmMDTNDKu;3F^#TjdhWd276To:G#m3gJ^U9t4-eCd4/AI;e_0</]``Y%$Fq%]#kY?7Bq.:?m2cM9I`$oB_S_APCC<5T.bA<hEl[?CoJUH[Go"Io]jTakUDLiaeh665]cept6\h5aI@EBQL\n4f8\n"aHXJ;*GC+EuV*1W6fXglAL`a%t47uLQ*VP[S!H6Am(k]sk"*_qGlGbnj"2@c*crRG!/(HG]fR2D@Gni'nSfL'SSSWCY/&)5H5`mXltjT)hComFIlcf\G8=nDFY="AU(DU=sM+]]c^lMDF<11eBen'`'k>HW8*/UtjG+J"i/^dKG!8b$o#p<S%YpR!#%],F9N'Oi/m,ONFsPf.7LQ''DWYCj/]Z^Ji*^m>_k(=#Q_[qq%0CeI8iBQg^q1>4:3[i[_!90<0LM9M=CGC,jY7,oYjmY\4rs"fYE6d78"^>(T,:==F2'2oC<DI:)-6P,0Y2i/62A@MF)ku.gsks2UN.-XU.`m8/K2L9lLdCfiPF<sY603%[%Xq)1_lTuP*^)Li45Cej9['k,,2LVlc#>UjQP.6;hDK*E0qD2/7'pY5Z[O9(YqVN^rmmb](I/BHZB,%c87[XpGl+*t32ZNL"Ra*'rIria%73%q`?`<H>,Ln7dX'+Oo*N2[+EEJc;2]s0?b?j;gF1c6Q9:8sn>,+c[W;1moVjf'S8flH?$dsIf!9sc(Ze"r_fGG7HXGQ2eJk2o:C:3na\R9qKAek%uIVGT=K0uaocYd"KChY<`AK<:9*?+>uhSH\1TQf<`S9_s*s/tX`qf'$-QLISHI[\SFWiPF`<t1PuRPT0<T(c7Mf(ko@*F`3013%ejCU^CMG<]G)N?cU#rN:&og>!1(1^\T-Fp>X`[o#/"S+s!r=O_;T*qFd%NFl%;`DLpe;t$LCMJfGmlXS5tDhVXh<;HGlhV;@UHS(YB-6_",<NGZ]R$Kr_C<_[5#.:j@;p_4R(I60TcqdZ4$Sikf\*i9P`O*'re2CU?L:qMK:fXu0pUj"E]m<:/;$R4^RnA!kHJ,r:DhQZ=q2,[l1!L3hG2V_orAE+D(a=+,jtC)RfHT"jS$&Zop'XVo9mWbKn5+e-[AC:ERuaV(bFZ"'3i4La2JihG[l,tLjsT#KSVUa8BlWU^PJQ)^pKjKd\!+cfj+=Wh*C+99jf'<fktM]>?4J_gm".qOpa^MoI+^hEM1OqJ!T]9p48EL9Mu.4>A-Q8X('qP0AgAH^J)al'Sb(SPOA?euAN0@44R>YQfIc7Dl-k!2bU6o37q:\N[<9ek;"7s2E'3U2dl.`,?^R.r*,iOZ&%GO5[lRk=<^0GtkT#'H)0L,2j*ldbq3ZZj)]>tFZ<X#Gn7-t6mA4nsT;iqHpU/T'<7AQ>F:N#T'.+"Z*=qH3<@aat%uha0aXZ@AROFbs,jm4qHLu_m>#n(qEoC3QKm_:KI3)qFr;;nI#KruR>2))QS$&]`pW7XP[I<R#Vqsk;AQa+tj\L/uQW/Ac^:M^S>(4iKL*>5l,QEECVM'69Sle(k/83L!6c:fSL]idu*I+'GG>anj)6$)YOTid_lb"nuS\F=8qg,l\gYV\11ID'/pUWAKM*BGYpMtVq,Hlfq@?L&)dQBHW9Ue%Z\b/fR0\$)BT;PCO:5aq59_&`Q5LFiBnIId8op6@Ic+"n9M>tj?"`kBi@[cR^I_KkKI[R*nJKcMtp4);*4f@*(V,=l&Sr1/EgK$!!p[N@2TP$Dc??t+WlGIHbqf'IOT+AP.`jAihk)+VQPMSZ1QD.O(J\!r5e?r/Ce_(E(EOE=>CWYUgJk,W\YG]Ef;>J&a>gfC'YQ]o_ZBUX,gNkB+.bor@l(/^W3JrMB3)@gIO/dIeZO7i;B-.GTT!aN&-r<Y`q)m5:8c,K[h7M(d86\aq+0M8Gg0(\MOhJjG<u+Q5j3i;Ab!uKVlU($h2V8XS+_T\[CT+bSR%Ve"Iqe3`Bj&K*D::A&0oZ))(,QONYLaK?p"-.kos3g//+2OIdV&(V]<.-7kjpE_krDPp<L0o>c?Ja#%f%[c"5Q+^N-9]]PMg*hH!_\kK6#iSeY)9M?d;r']8bZhad2AVY))>aPMZ6Q8%bA$;3@k]k!8=1jk^sE;&eAR>"ktMLiMFHI?.cr@oZ3\].0BdfCdNC:Xo"/?357@P6ehW=EE2c$K(X6O4=TFX\JVlaNh)bGN,%FGrLmkA2.B[(H!RQrNgC,Qkm.ebcDT/K3oL^d\bTX-'-hgT*hJk,Wi40]=Lf;jC"=Y:EC=Hk._#^n@R-rmOd6]`<nPdN,2AiANsr+ikLsOrT+:J/(7fp5'46HbKn:&nPkQ`H-UToKi3soN`@K7%b(6LpJAcpePohVeihE$<^7>i](EX,Z<'8F+c&Qibro7];;8Z4C?Vu%g@a8c<0H!QaH`BXPX"9"Gkl5`_9;E'N^;e"2-K`WnG*@?e+ZP:&/;949[A-]p6UQ#n.qiaD.EDZHX:NmG:*pg#-1Pq3imf`]7HdTfiia[;q1te[tCbLo7Z`m/M[4oi-a3Wbq_@QGBc,-]@!.j-=UXIJ(:s\?A8Um1+aLo]jW6i("5Nm(\qS`FlB@=PbT,\H_RJj1Ch(eFg/XOU`[!7G?o:RdZ#34Nphqr$-R^^5+h+<XucT]k[&SFV(?mR8s?3p12pI&j5?NZoGq%59FlNm@$nK3ShU]o0'!b\Bb4<Y/g[PqH2fVgokKEf*Dk$3G096W3rP^h@%d@lYGH<eRa!p;,Xf.@4^6sCQYHbjDkl%$.tUrf8SE:2LcW^\+?K]\E*8dBmoWbFZ[,;D[ud.Uh]5!9c!e6L4_-V/65Hutf[83%V0(nL0d4"tp#>[%[&f0V=Re4TmacjP]d3N9gj@SuYB:kn9in@m@/\>`l>2$FJ,4NWp0%&e!NPHY`cRQW?dMX$d,$GD6;5^JikF[snXcna/sLQ1*CBILc+j:UR63GEpK$11[<G/dg*nBG`CIT]@dc2b%1bAPM;``X<V2L&Ht9rseBPQ*nPI:'M\4`iMO<NWrk"<X,e"J(GFQ(T\4b%Njs6e[1uj1T-N`Ll<A?)n._E3-q#Vool9$Y,C?lb+FSW?2CHOs90?tmK\_5?UR+Q_g4Sl(kp$'lS^=Hh5G[AHP3XD\F'a]an7(JLAChW,Rj@RTkhmaqHA"%\QYMrH=#CR*;/0q8^`39r@?7<>t;"%4YG<^r<$MT:$fU>YTDe.rJP^'pP9pU^e%;e1m\lk4GA+&9e3o`Yu+tj2U8hY#jn`![id,1@^k81Dbr4>_/g500(Nbc_=D"Xu^kkKi_l?ci')ikdlbiHcCmHZN!W-iGcq`8J[Y#9P-nDt_f9"=9"HVHjlO6ObXM!6p<TJG>UgqkWojfI7HP"29qjlqo!>]WgO9.L7^%HlUUl-EGdrUKH)^8!:3QH*?^=dJ@tiTl[X>qJ`$D*:5:/@"fDcT$(0LRM?tnFLb-[GoJ=F%5kDjt[[9A"%C'bS(#!0i39Ig=O61$lO+6&)UBRC\7:8!e9k*9a8>f9fmUt>isR0-[18@-[`UHn-d#qik_dX*r>$=^8_Ragc%F9%jqDUZ9K8Vr=u4s*6dWlUlgphpn$6jH@;Xk!.N$d>um2RV1fZ9hT9QPOXD_A?e5;Y%J[2)!!!#4KpW&E!74r+B`J,5]nMgX!!(AMC,,Yh!!!#k#%AJN!'kHGV?$YsoG1mS!!#9&+f58?!;%%9)?9b&D]ttY!!)ZB9O_0\=IG_c_V<A#)WfA`c6I$$WHWcRfrCJ(75QmYFDQe)\,!dgbOA=K+H)TaBnUk#3ms,!2gi?A0k%k;p0W=.K=oL`VGf!KS[372h`MimX@O!D\#&V/Gn$N5ILJAt<#Qp<0Qdk#c>+J$XbM3Es""1Vg;p1&*]:CgrlS*'QQ)=HH7Ve3-tjT_cJUk5\rJPo_0;mNo;8QqMPaZL/^r6Nd)%)>pYCSO+.>tCF+%Lm'R*8F9t,q(ge3tg>b9qGca2j(p0$-0@($M-N?CGe6Xq!/^mVbgEjH@-]s2:FUQ(Ouj2+MLC5;%jQZ43ZO[W^0@7<Pp/4`5[Xus89R'ZLOHt3/XV#rE6%$p:Qmm6?5opG/%4jeF/S-iqbLuaND-h_I_Zd?j._1h%AfrE^Y`\]&R='@X:,P.anb`S%6WRQaO-@T//V6$HsPr)d/f-Sg.>rqa=`Ka1rf>qh+dgkc(iH#8K+Bp6k7$;ubYm]`TY+l5I[+Y"f=JZp#O(l3`LJOL$O;Me(#AWIfL@71<-ed.62URr-N[m>EON6uef6srZ8'[Vb^4!7H<>PTYr>EeNZ<_V:A4C=hI-Q3VcoW82WVH2%9[5'NH*k_a5YTLLA9qE2\_X7U$'*Q,>/6',f/=rrCV(D#>OY_mR$NTQ7;@`pN<R]T>m6'k*aTh%Gte8#dK.jW\(ll8T>rf7>Z_Zg6dMO+;1u&]ZE*lBW+/lm84S(5eJXn@IX>f#@Mb&uXI#2LdQR+foIbE_K-e252r_?%m^c=]6MKGZG6^-k@;kD9^m42bqODIJ1I-"n;+i6CWE[EhCme[7MDBI1GoSF%(`8ZUoHWHZW'%HCrdOWtV#A:WWjn^l:5QFDheQ#4;ZHWapnHuL8jkNImX,q;.\^[oq(H#ZhsRZq1XRI!>G,/ZT?">:.7naB3bg?EbI,[mFmT6D=\$VJrT.Ec_J@3.Ki9]hdre`oiQ+O#lC@Y$@eKC4I^b"l+Q/F'-q_0ha-;X;N>ML,*u\U7/n7GunYYo*qfVJIB$mZ%%f?]/j,=YNA&]=!.m.W-2@f-_gaqWb;L:\bVCap=m"k/80ep-,gRd0t?-@hK:qMURZ_9R>&'Ha2lt%n7PGJBFD"Pmo:\OFXa'5j$N>0!4':rQQo$t3TA<RjG\@@4I;>]e).="jRZ'<I?cFW0@U/.]]*QuZPpa@e:(S?*/+S]j+8BnF8e;N/CNaB5W)JhSTdpe<)F'@:(T;LVcE62I@040,A%+R-c7604(:C%oN6l[_RcGK8kKGfl4rN<MjE@QDX:\K_Rf:t4\[7h\0^;#V%l#VjEda@KKVFFa1qp:#93FOZrP978nWb/?P4>_e[-EC/]AYOEeP'!Yn`ebp\)7RA?r:p(KOtV-2d$$-mafOrW*'+h`1L0\CMAl>_q(-3YbhMAOGF<BuBe+\UqrGBcYO?@HG+t9EHrD^BRr/qE--2<)%ng2@:RD<(=_*>UT&[oa1a7l03EBCO7<'\JW9YBIjh"dQ&'-]\dE2RZ0"]7r(ai(chhcIE5@-N%q&pW#^"_(C&^t@;8\$^,@hX9/&'j@@HpF=?d9I6.#[=[\GM->'_rH@7MO;tCl2ScX"`kHk@[cR^Ia'sg.Fa8kTEko!_c>^YbKBci)ARJUDttc)`.eIIR."i_-ee+U\k<FPJ*_??ICLBV^E.HgN+o9RbdH>.:3o\i01G\YYuKL`p>Xc3Vbcli:Mo["Ee:p2Cfh9LI.]JM14>r[2jc)MRuD(ORuJE,_YBP[I.F4V9tpN&7FBrO&_+.W\0@4(oC@0C,'G'*K(cul^6,jk*[mc6ODm4Q]ST25s'@OiNlrL;8Un=3jA%;CN\CjQoWbg;p1>F-eTgoGqOS;@%+fo,iu#\ds1n6/$0CiKijLRgl?^-8FFMUq>C*mZNi*EOo.Gj`\P,%2)Q"0H<1gY=aXX<`=#s6ne&C?TQ$Q7^9^I6Aa^'))LYd-pQL=.6M!<$FhVW+0Hb8X;,#r\MA'NUMI1mZFP#E`m@p7K\s4K=<ju?D\ZrC$%nt!GZ-lHoO\:qMi8M%R4d<*3kr5X!0URFZ+k&0.A(p^Jake$fQrPG)\oB>96;L@8Ub-d5*,*eO]p(_;e4;lU&`Uk%OAqm/SW,uRj70B=U=HIX\=[ImK?B93h6P:+UghgS49*ADseF^O<SJ#eg8#q]t=/N[[X+kpa(Ho:9J%g5&bB(,,E&mU41ZOtqjY36$H;Cp*O/5Tt>K+>seFfUro/[A2h!Lb`$ptSaDg.(O\F,4mcJ+VT]lsLBjRrn@jJO6a:Ut;fatJ/Ap.J'Y\FTKb7).saHCX9bcd2C;q]Zq5bp).+#nA$;1%BMK3BiLA]d-J>H3ZWZ/B]kiXQP&:9mGUs4\\RCf;-NdC+cIb6aAYs`LZ-X2A&<'n!NI-&RC``PMRu,XGZ8![]=l<SpaJ[[f%RKT1iNXAXW):/'[,3ld#9(HZZa)C"IBGY5ad"E^<)okp^PN9,Wrh[,g1;]%9M#DuYUK<+HlV7jfBQNMXtX;DC=8J!sg.n&)F^i?__X/H.%7r2.#h>9-<j0\12tcZ'7t]/;Tob6ec[#A_!=3d(&CeEp.h;cZ_]A5/BI'hYi/Qh3G-*J,-PMqiJ0,9tT)4f52_a=a":]96>8K"&'[XSb9\4Jlss*R$K_BZi1-(,Df+7mbaagXFNTNfq64=%,nqEXu+;-/kKqn9t2tN7V@7o&G=l2:P-)(iZKQ/CdiU[IkhU=sX('fA>*8pK]789[A"ARu7V;G*9n^dZK9SFUl(&=$olk$[fg\[k>F*il?:j?C[cd7d]plN"`sU:%u)'Q.%W<S`m8i\ruBZLhTWBSIVZ`h">K]]Bdad+t<,8-7SVbF^I2F%'V4YV4u,54!OLGf$rO4KW4A:jh%kAAZ'l&]&$]G(@9>34_*XgIH#Z^pT"t4HlK@Mll$X8#6C+&P.l.<=*p#jImZ;HYSVH!2^kRsnjCjC2"QdUDqEu2/Z:GL_JZbS(m^oO$^L@s3"YLlCIVmGOgSE_[`iqYZM^J8>YADcDF::X3KG8/qTVg5PF^9r&(c#YGrp$Tk\j5,qQEH4r&c6)47R+-E=5FMqb>:ZD>ImPa<F;pgk%Kboh7'')cO/Jj.o!&CXY(GGEp<D#2[M:hIRN':cS":R%Bh$R%F1E^RU1McS[Yhi)oUK'/Dc]cl])`<0O`;ccM2_lfbf4X'-e!2Gl53IQ#p)dZe8))7DHEhM4;T1fP0,B$L(BmqcdYoj3"8e"B+pJeXGZ>5+iqk[^dbg)@]'$Q1_^cCXs$X<rAoR_U$DH'>Mar/@D#?-^$$rG5)n20ELK#JU9*,97Tn&(<HrNn.PDp"917rG,L8TX-j$e).p2$fdZ&SOk&AO,2<_NI$#M!<@Sj7,+hDc5]J-Y(O')FSa05SZh>ZJ-PpR-ia6thEjm<!!)47`&%GoJDNUd!rr>b/[^rM!!!#4JsZ`B!74r+B`J,5]nMgX!!(AMLhQhh!54)R"onYM>DQtn!!']dQj*Njcs)<?!!!#4KpW&E!74q2`O)lC<WkPgV-RP-ZXRCmirgtlbrY9$j6YAr7u\%Rk_]T$XR#3eHoO$VHJk;kgA5_h$ijm@8*,"[_8nD*;:@b8Lo,d3*3-fn=g^T(V]+uX)H'B,r:R&f+'BA0Jo889@Dd_"HLnMs:a"*F`eSP7e.d[TcWgB64`uFF#5F5lf&gcYjAY3qb2V+,fp@$K^\gpM5I6QB-Dk")O2OLW7]oM3ds)5XpZQqO]=B?;N]o($P?1OtKu3]A<L2-Ef@8DheFUP3d]:!s]m5q)&Z#fc4ZM]kRmq^><G^:qNa1?Ul+o+4`YI'+5<9Au37$<3S8;TQFU_GsVMm&on0rF\0@.ejJ=><8d_TS8Sf?dsHrUm?\oH>*In'lu0XUB+E3W*foE80>LSK65N=!JOhV6)*OMu=DqOt<:Gj\P7T</'-])H$Vh@$7g%=)aQa8T^9[C=aO4dR#HDG(/I\\2Wh;J&M6n>Fe:!55$b4uZT0dkEdZF%;Jp7dCP>hP"64]8H&fAOJ^rAiDqrkKQVM8k]V.o/8[.&'RDe^2HqqC:YF>Yk?K4PV@;3EiEY5^-@[GlrHgO.X>+O.-r"_6A"dg?IXqHS]*2'YDW!s1a`\_kCr9II8b5rlS8ud6c+Mc2!'0\L[mOro/UHl5Q>@k<5:>4^,FeNP3bkj4D$,3Hm?,IgQ?T]ebf+H.coC,:'=C_Zh<>QrPoGMFf.-FmY8A8iRGoJ@(#-5MDnfP5Bb*(4knPCHWsWC4WkEFmEOV/Sr4fP&sJIk="f`UXnT(UWr0t*%!_cF@K,ums+Z)m<?7V^V$FYD:H:(2Z$NsA\U:a`elZrV.>X!j1]N,meC:6rj_[WUe+@/aIE:f$KN^_@I6+cq6aNe^?6,j-7lZ:C-cQ><#:INBVoo7m<W`?o`3_6^\KcuYn4`-XVtKH!5SL_O].@5.(E;dP7G)O-g7jhN<TWC2l$\Q3Y!Vt-SggNoG8.p6Vn63tLINnI.p"Cu[EskHL>@at0hiKFq1f0$=ia[jcm^)RR1I"2,ODnfB0:=/F!gd*`:P.Eq^l?1Z6Psjk@,'MUUiK:e<ns[!\RGM$.\ru4`ph]2#Lrs@oH<9791hEM4:WkCRk6']abjmYGhG(>PBEkdZg2.)7V9sd]H$C.[sW]^9u&.'=HGAH>u18d^`;3iol!rGo'TU>Z4kk?@#8Rht!kFq=+Z)l@6jMVbP#GSb-fJ[>/(Aqk:K9osq-%NRi,mDLLQ?=BRReFo]t]EYj/Bm's++Fdd(CP91)2r/PK$H?)O*7($sq*DT7im(OF:?-d*ViWraP]dWj10j0<V;?FNfZs&mn=eJs4E_L9:.%23rd(:*\4iPoG6Y1a)c0e#UR$PFcmP_ak-N#[#a[ZfNZ@/kAOj8$nBRekapuA"8J'SPkoPX\N`fE=[>(#t`@RE2\s/r'T<VY\(6A!%*1S6`cYN?+[MN9?q;4`gbFf)7J;qUS%4e-C0KV9.,e^7?qTrAg%\5gHor^gUBVEZfG$-hhj[,Cm;H=M0Ts7fVOQ-siFT/6kT0%0&p7X+@$lWmYO$+b]CD9uUKAqo:Gi*S3U9Mb&3[-hmdeX,O6MWp!\[C]r!qi\TDO6VFfj\N4tP*N-$]hB*g._?LB9H/`CrCK[5*m):.q+3]^VraPK\l62c3OAZEquJVL6<;-n.nbl!4uLM`\aiJ%WBbVgR9/t(7tkseq=b7\Oe$$BO0u+$XKk8k?hWPUk,Ed6oBEk3\XSJF^0Fu4rG*CC=[=+$2<M(tf,E+<(]>$eE9$n^oQIrFeur/7l1,LnXZ>Vl@s>DWi^*Wf3ld!D7]i!"hU4<&;3S]XEk428/3DJ0d$n(=`]s''!5S'P.AhgJlu3[%kiV8thg-VcXaI,'S)u#'4VLEU-gVN;^'W?5T4WS<-ei"M:Y&5Ve&o:h`r!'eXrk?HRkCQGA\2Dspr^ni0ZLKn3G5]`LHf09hj^4M,Y^ep`lF9uROt@M$gG=3nI:Q8\7n<(`"G!:bK/I.VUfb/hq6/$=kr_8rVLf@Fu,5fPfi^2gWSi^6/9iSqtDJ?nhO'WB\GCQ@9r;)\j`%`XP(=7CQoXK29RoTcMF&MqRhja_R2tWLTZ&=;dZ0#2oA?)lf04*31VWI#O"'23%g+^Lg<\m]I&2BPcme+V?-=UDD=<1%]AF]0n6c)@dL[Bc+:<F$gir'Y"dLTWiee=QZp"+mOIs+ViPP4(V3f$+#eCJ'^4^r/DKt'AksMtK!M/WSW]C:6qgRQMsP#]("4tlT>R9T_k/l%Gd,ak[UG<S9B@e+Yl7YRhIsVZQ]?&Q$[\N8XdN-@C:'#@QRCdY\D(07Rt7!0BB[ofcfncHT]48r(k2d23bSGL*D-7M]#6G5jJOA+H!)'t#*pl-EGI]HVII-C[Htd,"^HAC2K7NOH*;k)4tfBSf>`u3Q&6Nsg:nDo8I0Fu;@.51hs(*>?K6PR0b'eJF?A_Mh%#4o23_??NqD:5;JBuajgoQgh\E/8H?Zf!?4!Ou,-tTsX/87nQmNp*5!H^#a,W810Xg.7L=:?mgEi#<!7UDu)P3k1FJJ^$(64;^\#cg'eX2rErZ(n?r!F;A^n9'IA64"X<,C?E%<8G#h<?OS06-Oi2ZNru1]Y=`de%(^+-.X.CMdV(j%&ROnY$+0%F[U:!rr>b/]9IG!.`om9EP7pkUj_0!!%Q+;NC!M!!!#G)i/2.!!']dQj*Njcs)<?!!!#4KpW&E!74r+B`J,5]nMgX!!(AM1Pk:eQQ$pWdOPR`%t!4%FE's!htI@*#lsIukcQ=So/mlhWh4SkcuqV7S;#l"s5fY`'Qs:heUUaVS#EB2H[*R(MF%&JjuGj>cO6%lVd"qRRtY2*p:*Ju1[V>o]dbN!s5P1VMn4>N>$g?-9Ot(LbQWf:!!#JUD4fC4T<M[A8.j><\IYaUFGn'>>q[h$q`cU&d;^P6\X2\%I/&3&V(9MA_jk2pk90fRa1bICoN"1tp<1Zt+!)J>4h)[foKgNJGc:=%QKa:)<#N"sOg1K3(]4q$4k*`$(?OrE1sa_&B2usP%M;]YIYahEo"eEM/&Gsk<`;M;L`%iq2Di5,a3E9jrm^bneU`YV4It:P:4;?"O7\eHl2-X/\B*?Sk?r'e06ht<Vc[`j!!*!qikD:blVFW3X?3iTW'$rBoTnCD#g+`em%t1Jm0I4iV,#;bm]9OQGAP0TmNHV#fC[31i;28iiPE)Ac2fj3HK\LYWZqR?Vq6c;A)^;M$$pB!0l9>j`hm?'VFC^I9ZH^$rNuq1pAFbNnZ]P#m=$^l"6KK'9Uj[&*IgmdgEu8)&<dXLh%(2-L<(U^U@hd7cqC"QF;?`=%Bs,@+=&mLVF!<OUML^9V2d^Xr=,r;IdKQt"2H!%lH\5cQg^cjStV0#RP?D^\Y#$s[_G9k\PLWhIk#Ms)P5dF\F$V+IktWcKq5&'A7#"ZaL)G%pf>uC)/)\N8WWm*3#`N\;GYYL^YPCI(#3),C@9+9V_.OaG$A>'8]S2<8H*.F8e:eLNdA>*HqPQ8G!Cn-=EM)[,\AT<YkDN;a#7<ml<d\JQ(9+R.KKPIo0bIFXuN;+Co$p@)DNi3J":l4BZ7leb3/L9j%jemEDQQ4piGt$g8a"pV//4gX=AJJ9ucfgMpR7Je8t>UT/^+>6,3AI9Xiga[T\!T9s(=o4f/H6e#A`&V2K`8cGBNYrK*DW&99:>IfCh^o_shCCq7`mf+%]Hg&_9Pgq_+.VbEGKYR)KQdf6LTb5Vl0)033W^;/M#oZVTeeIN&B<VKO_nY\*S=%O/>?M$fI97Ok1V2%BpqZjl!G@$g<6udf>1>m9.2plG8e65YpHbY&IRdBVM>']Obge<1dU7SrZgaDas1QCX-VF!\AjnB-4\u<lSkNs<Lf3Ria],C\I=\?AAEIZ`.P`s\Q9?MQ;AlF[R`]<psTCDb2SZM*(pM#%uDZ^*e*2sqs*b\-)8;en[*#]UC5It8=n`1q*s.#(*9_F'!iLdW6Cp<0oZ.6Q`G.':K/*FlUZG-jo32W)N&IV5AKmVJ,g@H:(4<k>"BuOe)!;OHr@X?sJOY,7mp,Vo_(XR[0N:k\gje8^@lcrr's0#YLrtCXU]Y3s\TU%UWK,+-%I=dNK02"57c.l@P/j#9R<E0qPFj.r,Lfm^NfrBMkCe\H=-d2nlGnU/X!54)R"oqKk5MT09$\/3MgC-,/9EP7pkUj_0!!%Q+6;.I]!9c#Q1]RN+hGT8G!!!#G.mF"6zzzzzzzzB#jo^qMes7~>endstream
452
+ endobj
453
+ 115 0 obj
454
+ << /Contents 163 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.50baa64f1af275cede837017a3536486 114 0 R /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0 /Trans << >>
455
+ /Type /Page >>
456
+ endobj
457
+ 116 0 obj
458
+ << /Border [ 0 0 0 ] /Contents () /Dest [ 61 0 R /XYZ 409.0329 710.9786 0 ] /Rect [ 68.69291 107.6161 74.25291 119.6161 ] /Subtype /Link /Type /Annot >>
459
+ endobj
460
+ 117 0 obj
461
+ << /Annots [ 116 0 R ] /Contents 164 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 145 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.efc54228790fd6106318b719fde81cf8 4 0 R >> >> /Rotate 0
462
+ /Trans << >> /Type /Page >>
463
+ endobj
464
+ 118 0 obj
465
+ << /Outlines 120 0 R /PageLabels 165 0 R /PageMode /UseNone /Pages 145 0 R /Type /Catalog >>
466
+ endobj
467
+ 119 0 obj
468
+ << /Author () /CreationDate (D:20151029123655-01'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
469
+ /Title (Magento Extension zur Einbindung des Versandlogistiksystems "Hermes") >>
470
+ endobj
471
+ 120 0 obj
472
+ << /Count 28 /First 121 0 R /Last 142 0 R /Type /Outlines >>
473
+ endobj
474
+ 121 0 obj
475
+ << /Dest [ 55 0 R /XYZ 62.69291 744.9786 0 ] /Next 122 0 R /Parent 120 0 R /Title (\376\377\0001\000\240\000\240\000\240\000V\000o\000r\000a\000u\000s\000s\000e\000t\000z\000u\000n\000g\000e\000n) >>
476
+ endobj
477
+ 122 0 obj
478
+ << /Dest [ 61 0 R /XYZ 62.69291 744.9786 0 ] /Next 123 0 R /Parent 120 0 R /Prev 121 0 R /Title (\376\377\0002\000\240\000\240\000\240\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
479
+ endobj
480
+ 123 0 obj
481
+ << /Count 7 /Dest [ 63 0 R /XYZ 62.69291 744.9786 0 ] /First 124 0 R /Last 130 0 R /Next 131 0 R /Parent 120 0 R
482
+ /Prev 122 0 R /Title (\376\377\0003\000\240\000\240\000\240\000K\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
483
+ endobj
484
+ 124 0 obj
485
+ << /Dest [ 63 0 R /XYZ 62.69291 681.9786 0 ] /Next 125 0 R /Parent 123 0 R /Title (\376\377\0003\000.\0001\000\240\000\240\000\240\000P\000r\000o\000d\000u\000k\000t\000l\000i\000s\000t\000e) >>
486
+ endobj
487
+ 125 0 obj
488
+ << /Dest [ 63 0 R /XYZ 62.69291 393.9786 0 ] /Next 126 0 R /Parent 123 0 R /Prev 124 0 R /Title (\376\377\0003\000.\0002\000\240\000\240\000\240\000B\000a\000s\000i\000s\000k\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
489
+ endobj
490
+ 126 0 obj
491
+ << /Dest [ 63 0 R /XYZ 62.69291 177.9786 0 ] /Next 127 0 R /Parent 123 0 R /Prev 125 0 R /Title (\376\377\0003\000.\0003\000\240\000\240\000\240\000S\000t\000a\000m\000m\000d\000a\000t\000e\000n) >>
492
+ endobj
493
+ 127 0 obj
494
+ << /Dest [ 63 0 R /XYZ 62.69291 129.9786 0 ] /Next 128 0 R /Parent 123 0 R /Prev 126 0 R /Title (\376\377\0003\000.\0004\000\240\000\240\000\240\000V\000e\000r\000s\000a\000n\000d\000o\000p\000t\000i\000o\000n\000e\000n) >>
495
+ endobj
496
+ 128 0 obj
497
+ << /Dest [ 64 0 R /XYZ 62.69291 462.9786 0 ] /Next 129 0 R /Parent 123 0 R /Prev 127 0 R /Title (\376\377\0003\000.\0005\000\240\000\240\000\240\000V\000e\000r\000s\000a\000n\000d\000-\000L\000a\000b\000e\000l\000-\000O\000p\000t\000i\000o\000n\000e\000n\000 \000\(\000n\000u\000r\000 \000f\000\374\000r\000 \000d\000i\000e\000 \000S\000e\000n\000d\000u\000n\000g\000s\000a\000n\000s\000i\000c\000h\000t\000\)) >>
498
+ endobj
499
+ 129 0 obj
500
+ << /Dest [ 64 0 R /XYZ 62.69291 318.9786 0 ] /Next 130 0 R /Parent 123 0 R /Prev 128 0 R /Title (\376\377\0003\000.\0006\000\240\000\240\000\240\000E\000-\000M\000a\000i\000l\000-\000O\000p\000t\000i\000o\000n\000e\000n) >>
501
+ endobj
502
+ 130 0 obj
503
+ << /Dest [ 64 0 R /XYZ 62.69291 144.9786 0 ] /Parent 123 0 R /Prev 129 0 R /Title (\376\377\0003\000.\0007\000\240\000\240\000\240\000A\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000 \000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000 \000v\000o\000n\000 \000S\000e\000n\000d\000u\000n\000g\000e\000n) >>
504
+ endobj
505
+ 131 0 obj
506
+ << /Count 10 /Dest [ 68 0 R /XYZ 62.69291 744.9786 0 ] /First 132 0 R /Last 141 0 R /Next 142 0 R /Parent 120 0 R
507
+ /Prev 123 0 R /Title (\376\377\0004\000\240\000\240\000\240\000N\000u\000t\000z\000u\000n\000g) >>
508
+ endobj
509
+ 132 0 obj
510
+ << /Count 1 /Dest [ 68 0 R /XYZ 62.69291 711.9786 0 ] /First 133 0 R /Last 133 0 R /Next 134 0 R /Parent 131 0 R
511
+ /Title (\376\377\0004\000.\0001\000\240\000\240\000\240\000M\000a\000n\000u\000e\000l\000l\000e\000r\000 \000M\000o\000d\000u\000s) >>
512
+ endobj
513
+ 133 0 obj
514
+ << /Dest [ 68 0 R /XYZ 62.69291 639.9786 0 ] /Parent 132 0 R /Title (\376\377\0004\000.\0001\000.\0001\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000l\000e\000g\000e\000n) >>
515
+ endobj
516
+ 134 0 obj
517
+ << /Dest [ 73 0 R /XYZ 62.69291 166.7569 0 ] /Next 135 0 R /Parent 131 0 R /Prev 132 0 R /Title (\376\377\0004\000.\0002\000\240\000\240\000\240\000H\000a\000l\000b\000a\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000r\000 \000M\000o\000d\000u\000s) >>
518
+ endobj
519
+ 135 0 obj
520
+ << /Dest [ 85 0 R /XYZ 62.69291 454.4598 0 ] /Next 136 0 R /Parent 131 0 R /Prev 134 0 R /Title (\376\377\0004\000.\0003\000\240\000\240\000\240\000A\000u\000t\000o\000m\000a\000t\000i\000s\000c\000h\000e\000r\000 \000M\000o\000d\000u\000s) >>
521
+ endobj
522
+ 136 0 obj
523
+ << /Dest [ 85 0 R /XYZ 62.69291 244.4598 0 ] /Next 137 0 R /Parent 131 0 R /Prev 135 0 R /Title (\376\377\0004\000.\0004\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000s\000e\000h\000e\000n\000 \000u\000n\000d\000 \000g\000g\000f\000.\000 \000b\000e\000a\000r\000b\000e\000i\000t\000e\000n) >>
524
+ endobj
525
+ 137 0 obj
526
+ << /Dest [ 93 0 R /XYZ 62.69291 392.4327 0 ] /Next 138 0 R /Parent 131 0 R /Prev 136 0 R /Title (\376\377\0004\000.\0005\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000n\000 \000H\000e\000r\000m\000e\000s\000 \000\374\000b\000e\000r\000t\000r\000a\000g\000e\000n) >>
527
+ endobj
528
+ 138 0 obj
529
+ << /Dest [ 101 0 R /XYZ 62.69291 439.6873 0 ] /Next 139 0 R /Parent 131 0 R /Prev 137 0 R /Title (\376\377\0004\000.\0006\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000a\000b\000b\000r\000e\000c\000h\000e\000n) >>
530
+ endobj
531
+ 139 0 obj
532
+ << /Dest [ 104 0 R /XYZ 62.69291 708.9786 0 ] /Next 140 0 R /Parent 131 0 R /Prev 138 0 R /Title (\376\377\0004\000.\0007\000\240\000\240\000\240\000S\000e\000n\000d\000u\000n\000g\000 \000w\000i\000e\000d\000e\000r\000a\000u\000f\000n\000e\000h\000m\000e\000n) >>
533
+ endobj
534
+ 140 0 obj
535
+ << /Dest [ 104 0 R /XYZ 62.69291 413.472 0 ] /Next 141 0 R /Parent 131 0 R /Prev 139 0 R /Title (\376\377\0004\000.\0008\000\240\000\240\000\240\000L\000a\000b\000e\000l\000s\000 \000a\000b\000r\000u\000f\000e\000n) >>
536
+ endobj
537
+ 141 0 obj
538
+ << /Dest [ 108 0 R /XYZ 62.69291 194.9484 0 ] /Parent 131 0 R /Prev 140 0 R /Title (\376\377\0004\000.\0009\000\240\000\240\000\240\000T\000r\000a\000c\000k\000i\000n\000g\000l\000i\000n\000k\000 \000\366\000f\000f\000n\000e\000n) >>
539
+ endobj
540
+ 142 0 obj
541
+ << /Count 2 /Dest [ 117 0 R /XYZ 62.69291 744.9786 0 ] /First 143 0 R /Last 144 0 R /Parent 120 0 R /Prev 131 0 R
542
+ /Title (\376\377\0005\000\240\000\240\000\240\000A\000n\000f\000o\000r\000d\000e\000r\000u\000n\000g\000e\000n\000 \000a\000n\000 \000e\000i\000n\000e\000 \000H\000e\000r\000m\000e\000s\000-\000S\000e\000n\000d\000u\000n\000g) >>
543
+ endobj
544
+ 143 0 obj
545
+ << /Dest [ 117 0 R /XYZ 62.69291 711.9786 0 ] /Next 144 0 R /Parent 142 0 R /Title (\376\377\0005\000.\0001\000\240\000\240\000\240\000E\000r\000l\000a\000u\000b\000t\000e\000 \000L\000\344\000n\000d\000e\000r) >>
546
+ endobj
547
+ 144 0 obj
548
+ << /Dest [ 117 0 R /XYZ 62.69291 651.9786 0 ] /Parent 142 0 R /Prev 143 0 R /Title (\376\377\0005\000.\0002\000\240\000\240\000\240\000N\000a\000c\000h\000n\000a\000h\000m\000e) >>
549
+ endobj
550
+ 145 0 obj
551
+ << /Count 19 /Kids [ 5 0 R 54 0 R 55 0 R 61 0 R 63 0 R 64 0 R 65 0 R 68 0 R 73 0 R 85 0 R
552
+ 90 0 R 93 0 R 98 0 R 101 0 R 104 0 R 108 0 R 113 0 R 115 0 R 117 0 R ] /Type /Pages >>
553
+ endobj
554
+ 146 0 obj
555
+ << /Length 727 >>
556
+ stream
557
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
558
+ q
559
+ 1 0 0 1 62.69291 696.9786 cm
560
+ q
561
+ 0 .533333 .603922 rg
562
+ BT 1 0 0 1 0 28 Tm /F2 20 Tf 24 TL 47.69488 0 Td (Magento Extension zur Einbindung des) Tj T* 23.82 0 Td (Versandlogistiksystems "Hermes") Tj T* -71.51488 0 Td ET
563
+ Q
564
+ Q
565
+ q
566
+ 1 0 0 1 62.69291 686.9786 cm
567
+ Q
568
+ q
569
+ 1 0 0 1 411.0236 765.1519 cm
570
+ q
571
+ 127.5591 0 0 20.04499 0 0 cm
572
+ /FormXob.efc54228790fd6106318b719fde81cf8 Do
573
+ Q
574
+ Q
575
+ q
576
+ 1 0 0 1 56.69291 56.69291 cm
577
+ 0 0 0 rg
578
+ BT /F1 10 Tf 12 TL ET
579
+ q
580
+ 1 0 0 1 6 3 cm
581
+ q
582
+ BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Stand: 29/10/2015) Tj T* ET
583
+ Q
584
+ Q
585
+ q
586
+ 1 0 0 1 246.9449 3 cm
587
+ q
588
+ 0 0 0 rg
589
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (1/19) Tj T* -209.4849 0 Td ET
590
+ Q
591
+ Q
592
+ q
593
+ Q
594
+ Q
595
+
596
+ endstream
597
+ endobj
598
+ 147 0 obj
599
+ << /Length 6925 >>
600
+ stream
601
+ 1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
602
+ q
603
+ 1 0 0 1 62.69291 723.9786 cm
604
+ q
605
+ BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (Hermes - Benutzerdokumentation) Tj T* ET
606
+ Q
607
+ Q
608
+ q
609
+ 1 0 0 1 62.69291 285.9786 cm
610
+ 0 0 0 rg
611
+ BT /F1 10 Tf 12 TL ET
612
+ q
613
+ 1 0 0 1 0 417 cm
614
+ q
615
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (1 Voraussetzungen) Tj T* ET
616
+ Q
617
+ Q
618
+ q
619
+ 1 0 0 1 397.8898 417 cm
620
+ q
621
+ 0 0 .501961 rg
622
+ 0 0 .501961 RG
623
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
624
+ Q
625
+ Q
626
+ q
627
+ 1 0 0 1 0 399 cm
628
+ q
629
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (2 Installation) Tj T* ET
630
+ Q
631
+ Q
632
+ q
633
+ 1 0 0 1 397.8898 399 cm
634
+ q
635
+ 0 0 .501961 rg
636
+ 0 0 .501961 RG
637
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (4) Tj T* -66.44 0 Td ET
638
+ Q
639
+ Q
640
+ q
641
+ 1 0 0 1 0 381 cm
642
+ q
643
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (3 Konfiguration) Tj T* ET
644
+ Q
645
+ Q
646
+ q
647
+ 1 0 0 1 397.8898 381 cm
648
+ q
649
+ 0 0 .501961 rg
650
+ 0 0 .501961 RG
651
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
652
+ Q
653
+ Q
654
+ q
655
+ 1 0 0 1 0 363 cm
656
+ q
657
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.1 Produktliste) Tj T* ET
658
+ Q
659
+ Q
660
+ q
661
+ 1 0 0 1 397.8898 363 cm
662
+ q
663
+ 0 0 .501961 rg
664
+ 0 0 .501961 RG
665
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
666
+ Q
667
+ Q
668
+ q
669
+ 1 0 0 1 0 345 cm
670
+ q
671
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.2 Basiskonfiguration) Tj T* ET
672
+ Q
673
+ Q
674
+ q
675
+ 1 0 0 1 397.8898 345 cm
676
+ q
677
+ 0 0 .501961 rg
678
+ 0 0 .501961 RG
679
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
680
+ Q
681
+ Q
682
+ q
683
+ 1 0 0 1 0 327 cm
684
+ q
685
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.3 Stammdaten) Tj T* ET
686
+ Q
687
+ Q
688
+ q
689
+ 1 0 0 1 397.8898 327 cm
690
+ q
691
+ 0 0 .501961 rg
692
+ 0 0 .501961 RG
693
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
694
+ Q
695
+ Q
696
+ q
697
+ 1 0 0 1 0 309 cm
698
+ q
699
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.4 Versandoptionen) Tj T* ET
700
+ Q
701
+ Q
702
+ q
703
+ 1 0 0 1 397.8898 309 cm
704
+ q
705
+ 0 0 .501961 rg
706
+ 0 0 .501961 RG
707
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
708
+ Q
709
+ Q
710
+ q
711
+ 1 0 0 1 0 291 cm
712
+ q
713
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.5 Versand-Label-Optionen \(nur f\374r die Sendungsansicht\)) Tj T* ET
714
+ Q
715
+ Q
716
+ q
717
+ 1 0 0 1 397.8898 291 cm
718
+ q
719
+ 0 0 .501961 rg
720
+ 0 0 .501961 RG
721
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
722
+ Q
723
+ Q
724
+ q
725
+ 1 0 0 1 0 273 cm
726
+ q
727
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.6 E-Mail-Optionen) Tj T* ET
728
+ Q
729
+ Q
730
+ q
731
+ 1 0 0 1 397.8898 273 cm
732
+ q
733
+ 0 0 .501961 rg
734
+ 0 0 .501961 RG
735
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
736
+ Q
737
+ Q
738
+ q
739
+ 1 0 0 1 0 255 cm
740
+ q
741
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.7 Automatische Erstellung von Sendungen) Tj T* ET
742
+ Q
743
+ Q
744
+ q
745
+ 1 0 0 1 397.8898 255 cm
746
+ q
747
+ 0 0 .501961 rg
748
+ 0 0 .501961 RG
749
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
750
+ Q
751
+ Q
752
+ q
753
+ 1 0 0 1 0 237 cm
754
+ q
755
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (4 Nutzung) Tj T* ET
756
+ Q
757
+ Q
758
+ q
759
+ 1 0 0 1 397.8898 237 cm
760
+ q
761
+ 0 0 .501961 rg
762
+ 0 0 .501961 RG
763
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
764
+ Q
765
+ Q
766
+ q
767
+ 1 0 0 1 0 219 cm
768
+ q
769
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1 Manueller Modus) Tj T* ET
770
+ Q
771
+ Q
772
+ q
773
+ 1 0 0 1 397.8898 219 cm
774
+ q
775
+ 0 0 .501961 rg
776
+ 0 0 .501961 RG
777
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
778
+ Q
779
+ Q
780
+ q
781
+ 1 0 0 1 0 201 cm
782
+ q
783
+ BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1.1 Sendung anlegen) Tj T* ET
784
+ Q
785
+ Q
786
+ q
787
+ 1 0 0 1 397.8898 201 cm
788
+ q
789
+ 0 0 .501961 rg
790
+ 0 0 .501961 RG
791
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET
792
+ Q
793
+ Q
794
+ q
795
+ 1 0 0 1 0 183 cm
796
+ q
797
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2 Halbautomatischer Modus) Tj T* ET
798
+ Q
799
+ Q
800
+ q
801
+ 1 0 0 1 397.8898 183 cm
802
+ q
803
+ 0 0 .501961 rg
804
+ 0 0 .501961 RG
805
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET
806
+ Q
807
+ Q
808
+ q
809
+ 1 0 0 1 0 165 cm
810
+ q
811
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.3 Automatischer Modus) Tj T* ET
812
+ Q
813
+ Q
814
+ q
815
+ 1 0 0 1 397.8898 165 cm
816
+ q
817
+ 0 0 .501961 rg
818
+ 0 0 .501961 RG
819
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
820
+ Q
821
+ Q
822
+ q
823
+ 1 0 0 1 0 147 cm
824
+ q
825
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.4 Sendung ansehen und ggf. bearbeiten) Tj T* ET
826
+ Q
827
+ Q
828
+ q
829
+ 1 0 0 1 397.8898 147 cm
830
+ q
831
+ 0 0 .501961 rg
832
+ 0 0 .501961 RG
833
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
834
+ Q
835
+ Q
836
+ q
837
+ 1 0 0 1 0 129 cm
838
+ q
839
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.5 Sendung an Hermes \374bertragen) Tj T* ET
840
+ Q
841
+ Q
842
+ q
843
+ 1 0 0 1 397.8898 129 cm
844
+ q
845
+ 0 0 .501961 rg
846
+ 0 0 .501961 RG
847
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
848
+ Q
849
+ Q
850
+ q
851
+ 1 0 0 1 0 111 cm
852
+ q
853
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.6 Sendung abbrechen) Tj T* ET
854
+ Q
855
+ Q
856
+ q
857
+ 1 0 0 1 397.8898 111 cm
858
+ q
859
+ 0 0 .501961 rg
860
+ 0 0 .501961 RG
861
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
862
+ Q
863
+ Q
864
+ q
865
+ 1 0 0 1 0 93 cm
866
+ q
867
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.7 Sendung wiederaufnehmen) Tj T* ET
868
+ Q
869
+ Q
870
+ q
871
+ 1 0 0 1 397.8898 93 cm
872
+ q
873
+ 0 0 .501961 rg
874
+ 0 0 .501961 RG
875
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
876
+ Q
877
+ Q
878
+ q
879
+ 1 0 0 1 0 75 cm
880
+ q
881
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.8 Labels abrufen) Tj T* ET
882
+ Q
883
+ Q
884
+ q
885
+ 1 0 0 1 397.8898 75 cm
886
+ q
887
+ 0 0 .501961 rg
888
+ 0 0 .501961 RG
889
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
890
+ Q
891
+ Q
892
+ q
893
+ 1 0 0 1 0 57 cm
894
+ q
895
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.9 Trackinglink \366ffnen) Tj T* ET
896
+ Q
897
+ Q
898
+ q
899
+ 1 0 0 1 397.8898 57 cm
900
+ q
901
+ 0 0 .501961 rg
902
+ 0 0 .501961 RG
903
+ BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (16) Tj T* -60.88 0 Td ET
904
+ Q
905
+ Q
906
+ q
907
+ 1 0 0 1 0 39 cm
908
+ q
909
+ BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (5 Anforderungen an eine Hermes-Sendung) Tj T* ET
910
+ Q
911
+ Q
912
+ q
913
+ 1 0 0 1 397.8898 39 cm
914
+ q
915
+ 0 0 .501961 rg
916
+ 0 0 .501961 RG
917
+ BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (19) Tj T* -60.88 0 Td ET
918
+ Q
919
+ Q
920
+ q
921
+ 1 0 0 1 0 21 cm
922
+ q
923
+ BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1 Erlaubte L\344nder) Tj T* ET
924
+ Q
925
+ Q
926
+ q
927
+