Version Notes
Visit product homepage at:
http://www.artio.net/magento-extensions/m-turbo-accelerator
Download this release
Release Info
Developer | Magento Core Team |
Extension | MTurbo |
Version | 1.2.2 |
Comparing to | |
See all releases |
Code changes from version 1.2.1 to 1.2.2
- app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Actions.php +1 -1
- app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Dynamic.php +92 -41
- app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Main.php +1 -1
- app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Website.php +4 -2
- app/code/local/Artio/MTurbo/Block/Adminhtml/Welcome/Form.php +5 -3
- app/code/local/Artio/MTurbo/Block/Ajax.php +7 -5
- app/code/local/Artio/MTurbo/Helper/Data.php +3 -3
- app/code/local/Artio/MTurbo/Helper/Downloader.php +58 -37
- app/code/local/Artio/MTurbo/Helper/Functions.php +1 -1
- app/code/local/Artio/MTurbo/Model/Config.php +1 -2
- app/code/local/Artio/MTurbo/Model/Htaccess.php +7 -7
- app/code/local/Artio/MTurbo/Model/JsPatch.php +129 -0
- app/code/local/Artio/MTurbo/Model/LayoutPatch.php +2 -2
- app/code/local/Artio/MTurbo/Model/Mturbo/File.php +11 -3
- app/code/local/Artio/MTurbo/Model/Observer.php +56 -13
- app/code/local/Artio/MTurbo/Model/Patch.php +2 -2
- app/code/local/Artio/MTurbo/Model/scripts/wgetlib.so +1 -1
- app/code/local/Artio/MTurbo/controllers/Adminhtml/MturboController.php +26 -19
- app/code/local/Artio/MTurbo/etc/config.xml +17 -1
- app/locale/en_US/Artio_MTurbo.csv +63 -30
- app/locale/es_ES/Artio_MTurbo.csv +247 -0
- package.xml +9 -9
- skin/frontend/base/default/js/mturbo.js +81 -0
app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Actions.php
CHANGED
@@ -70,7 +70,7 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Actions extends Artio_MTurbo_Block_A
|
|
70 |
'name' => 'syn_button',
|
71 |
'label' => $this->getMyHelper()->__('Update URLs from Rewrite Table'),
|
72 |
'onclick' => "setLocation('" . Mage::helper('adminhtml')->getUrl('*/*/synchronize') . "')",
|
73 |
-
'comment' => $this->getMyHelper()->__('
|
74 |
));
|
75 |
|
76 |
$layoutFieldset->addField('generate_button', 'widget_button', array(
|
70 |
'name' => 'syn_button',
|
71 |
'label' => $this->getMyHelper()->__('Update URLs from Rewrite Table'),
|
72 |
'onclick' => "setLocation('" . Mage::helper('adminhtml')->getUrl('*/*/synchronize') . "')",
|
73 |
+
'comment' => $this->getMyHelper()->__('Launching this action will update cached URLs based on current values from the Rewrite Table. We recommend runing this action after major modifications to the products or categories.')
|
74 |
));
|
75 |
|
76 |
$layoutFieldset->addField('generate_button', 'widget_button', array(
|
app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Dynamic.php
CHANGED
@@ -36,18 +36,27 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Dynamic
|
|
36 |
extends Artio_MTurbo_Block_Adminhtml_Edit_Tab_Abstract
|
37 |
{
|
38 |
|
|
|
|
|
|
|
39 |
public function __construct() {
|
40 |
parent::__construct();
|
41 |
$this->setId('dynamic_section');
|
42 |
$this->_title = $this->getMyHelper()->__('Dynamic loaded blocks');
|
43 |
}
|
44 |
|
|
|
|
|
|
|
|
|
45 |
protected function _prepareForm() {
|
46 |
|
|
|
47 |
$config = Mage::getSingleton('mturbo/config');
|
48 |
|
49 |
$form = new Varien_Data_Form();
|
50 |
-
|
|
|
51 |
$layoutPatch = Mage::getSingleton('mturbo/layoutPatch');
|
52 |
if ($layoutPatch->needToPatch()) {
|
53 |
$this->_addLayoutPatchFieldset($form);
|
@@ -55,44 +64,49 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Dynamic
|
|
55 |
|
56 |
if (!$layoutPatch->needToPatch() || $layoutPatch->isPatched()) {
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
'
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
}
|
98 |
|
@@ -104,10 +118,12 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Dynamic
|
|
104 |
}
|
105 |
|
106 |
/**
|
107 |
-
|
108 |
-
|
|
|
109 |
private function _addLayoutPatchFieldset($form) {
|
110 |
|
|
|
111 |
$patchModel = Mage::getSingleton('mturbo/layoutPatch');
|
112 |
|
113 |
/* make fieldset */
|
@@ -141,5 +157,40 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Dynamic
|
|
141 |
|
142 |
|
143 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
|
145 |
}
|
36 |
extends Artio_MTurbo_Block_Adminhtml_Edit_Tab_Abstract
|
37 |
{
|
38 |
|
39 |
+
/**
|
40 |
+
* Constructor.
|
41 |
+
*/
|
42 |
public function __construct() {
|
43 |
parent::__construct();
|
44 |
$this->setId('dynamic_section');
|
45 |
$this->_title = $this->getMyHelper()->__('Dynamic loaded blocks');
|
46 |
}
|
47 |
|
48 |
+
/**
|
49 |
+
* (non-PHPdoc)
|
50 |
+
* @see Mage_Adminhtml_Block_Widget_Form::_prepareForm()
|
51 |
+
*/
|
52 |
protected function _prepareForm() {
|
53 |
|
54 |
+
/* @var $config Artio_MTurbo_Model_Config */
|
55 |
$config = Mage::getSingleton('mturbo/config');
|
56 |
|
57 |
$form = new Varien_Data_Form();
|
58 |
+
|
59 |
+
/* @var $layoutPatch Artio_MTurbo_Model_LayoutPatch */
|
60 |
$layoutPatch = Mage::getSingleton('mturbo/layoutPatch');
|
61 |
if ($layoutPatch->needToPatch()) {
|
62 |
$this->_addLayoutPatchFieldset($form);
|
64 |
|
65 |
if (!$layoutPatch->needToPatch() || $layoutPatch->isPatched()) {
|
66 |
|
67 |
+
/* fieldset for automatic refresh */
|
68 |
+
$layoutFieldsetDefault = $form->addFieldset('dynamic_block_default', array(
|
69 |
+
'legend' => $this->getMyHelper()->__( 'Default dynamic loaded blocks' ),
|
70 |
+
'class' => 'fieldset'
|
71 |
+
));
|
72 |
+
|
73 |
+
$layoutFieldsetDefault->addField('cartsidebar', 'select', array(
|
74 |
+
'name' => 'cartsidebar',
|
75 |
+
'label' => $this->getMyHelper()->__('Cart Block (sidebar)').':',
|
76 |
+
'options' => array(
|
77 |
+
0 => $this->getMyHelper()->__('No'),
|
78 |
+
1 => $this->getMyHelper()->__ ( 'Yes' ))
|
79 |
+
));
|
80 |
+
|
81 |
+
$layoutFieldsetDefault->addField('pollsidebar', 'select', array(
|
82 |
+
'name' => 'pollsidebar',
|
83 |
+
'label' => $this->getMyHelper()->__('Poll Block (sidebar)').':',
|
84 |
+
'options' => array(
|
85 |
+
0 => $this->getMyHelper()->__('No'),
|
86 |
+
1 => $this->getMyHelper()->__ ( 'Yes' ))
|
87 |
+
));
|
88 |
+
|
89 |
+
$layoutFieldsetDefault->addField('comparesidebar', 'select', array(
|
90 |
+
'name' => 'comparesidebar',
|
91 |
+
'label' => $this->getMyHelper()->__('Compare Block (sidebar)').':',
|
92 |
+
'options' => array(
|
93 |
+
0 => $this->getMyHelper()->__('No'),
|
94 |
+
1 => $this->getMyHelper()->__ ( 'Yes' ))
|
95 |
+
));
|
96 |
+
|
97 |
+
|
98 |
+
$layoutFieldsetUser = $form->addFieldset('dynamic_block_user', array(
|
99 |
+
'legend' => $this->getMyHelper()->__( 'User dynamic loaded blocks (only for advanced developers).' ),
|
100 |
+
'class' => 'fieldset'
|
101 |
+
));
|
102 |
+
|
103 |
+
$layoutFieldsetUser->addField('userblocks', 'textarea', array(
|
104 |
+
'name' => 'userblocks',
|
105 |
+
'label' => $this->getMyHelper()->__('Layout names of dynamic loaded blocks').':',
|
106 |
+
'after_element_html' => '<span><i>'.$this->getMyHelper()->__("Values separated by (',').").'</i></span>'
|
107 |
+
));
|
108 |
+
|
109 |
+
$this->_addJsFixFieldset($form);
|
110 |
|
111 |
}
|
112 |
|
118 |
}
|
119 |
|
120 |
/**
|
121 |
+
* Method adds fieldset for patching layout to form.
|
122 |
+
* @param Varien_Data_Form $form
|
123 |
+
*/
|
124 |
private function _addLayoutPatchFieldset($form) {
|
125 |
|
126 |
+
/* @var $patchModel Artio_MTurbo_Model_LayoutPatch */
|
127 |
$patchModel = Mage::getSingleton('mturbo/layoutPatch');
|
128 |
|
129 |
/* make fieldset */
|
157 |
|
158 |
|
159 |
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Method adds fieldset for copying js file into all theme package.
|
163 |
+
* @param Varien_Data_Form $form
|
164 |
+
*/
|
165 |
+
private function _addJsFixFieldset($form) {
|
166 |
+
|
167 |
+
$layoutFieldset = $form->addFieldset('layout_fieldset_watcher', array(
|
168 |
+
'legend' => $this->getMyHelper()->__('JavaScript Watcher (this control watches existing javascript in all your theme packages)'),
|
169 |
+
'class' => 'fieldset'
|
170 |
+
));
|
171 |
+
|
172 |
+
/* @var $js Artio_MTurbo_Model_JsPatch */
|
173 |
+
$js = Mage::getSingleton('mturbo/jsPatch');
|
174 |
+
|
175 |
+
/* @var $themePackage Artio_MTurbo_Model_JsPatch */
|
176 |
+
$layoutFieldset->addType('html_element', Artio_MTurbo_Helper_Data::FORM_HTML);
|
177 |
+
foreach ($js->getAvailableThemePackages() as $i=>$themePackage) {
|
178 |
+
|
179 |
+
if (!$themePackage->existsJs() && !$themePackage->makeJs()) {
|
180 |
+
$html = '<span style="color:red">'.$this->getMyHelper()->__("Copying js file failed! Dynamic blocks won't work for this theme. Copy 'mturbo.js' from default theme, please!").'</span>';
|
181 |
+
} else {
|
182 |
+
$html = '<span style="color:green">'.$this->getMyHelper()->__("OK").'</span>';
|
183 |
+
}
|
184 |
+
|
185 |
+
$layoutFieldset->addField ('jsstate'.$i, 'html_element',
|
186 |
+
array (
|
187 |
+
'label' => '<b style="font-size:10px">'.str_replace(Mage::getBaseDir().DS.'skin'.DS.'frontend', '', $themePackage->getJsPath()).'</b>',
|
188 |
+
'code' => $html)
|
189 |
+
);
|
190 |
+
|
191 |
+
}
|
192 |
+
|
193 |
+
|
194 |
+
}
|
195 |
|
196 |
}
|
app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Main.php
CHANGED
@@ -80,7 +80,7 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Main extends Artio_MTurbo_Block_Admi
|
|
80 |
$layoutFieldset->addField('turbopath', 'text', array(
|
81 |
'name' => 'turbopath',
|
82 |
'label' => $this->getMyHelper()->__('Relative path from webroot').':',
|
83 |
-
'value' => 'var
|
84 |
|
85 |
}
|
86 |
|
80 |
$layoutFieldset->addField('turbopath', 'text', array(
|
81 |
'name' => 'turbopath',
|
82 |
'label' => $this->getMyHelper()->__('Relative path from webroot').':',
|
83 |
+
'value' => 'var'.DS.'turbocache'));
|
84 |
|
85 |
}
|
86 |
|
app/code/local/Artio/MTurbo/Block/Adminhtml/Edit/Tab/Website.php
CHANGED
@@ -59,8 +59,10 @@ class Artio_MTurbo_Block_Adminhtml_Edit_Tab_Website extends Artio_MTurbo_Block_A
|
|
59 |
/* for every website add one fieldset */
|
60 |
$websiteCollection = Mage::getModel('core/website')->getCollection()->load();
|
61 |
foreach ($websiteCollection as $website) {
|
62 |
-
|
63 |
-
|
|
|
|
|
64 |
}
|
65 |
|
66 |
/* bind data */
|
59 |
/* for every website add one fieldset */
|
60 |
$websiteCollection = Mage::getModel('core/website')->getCollection()->load();
|
61 |
foreach ($websiteCollection as $website) {
|
62 |
+
if ($website->getDefaultStore()) {
|
63 |
+
$this->_addWebsiteFieldset($website);
|
64 |
+
break;
|
65 |
+
}
|
66 |
}
|
67 |
|
68 |
/* bind data */
|
app/code/local/Artio/MTurbo/Block/Adminhtml/Welcome/Form.php
CHANGED
@@ -48,14 +48,16 @@ class Artio_MTurbo_Block_Adminhtml_Welcome_Form extends Mage_Adminhtml_Block_Wid
|
|
48 |
$layoutFieldset->addField('turbopath', 'text', array(
|
49 |
'name' => 'turbopath',
|
50 |
'label' => Mage::helper('mturbo')->__('Cache Path').':',
|
51 |
-
|
52 |
));
|
53 |
|
54 |
/* for every website add one fieldset */
|
55 |
$websiteCollection = Mage::getModel('core/website')->getCollection()->load();
|
56 |
foreach ($websiteCollection as $website) {
|
57 |
-
$
|
58 |
-
|
|
|
|
|
59 |
}
|
60 |
|
61 |
$form->addType('widget_button', Artio_MTurbo_Helper_Data::FORM_WIDGET_BUTTON);
|
48 |
$layoutFieldset->addField('turbopath', 'text', array(
|
49 |
'name' => 'turbopath',
|
50 |
'label' => Mage::helper('mturbo')->__('Cache Path').':',
|
51 |
+
'value' => 'var'.DS.'turbocache'
|
52 |
));
|
53 |
|
54 |
/* for every website add one fieldset */
|
55 |
$websiteCollection = Mage::getModel('core/website')->getCollection()->load();
|
56 |
foreach ($websiteCollection as $website) {
|
57 |
+
if ($website->getDefaultStore()) {
|
58 |
+
$this->_addWebsiteFieldset($website, $form);
|
59 |
+
break;
|
60 |
+
}
|
61 |
}
|
62 |
|
63 |
$form->addType('widget_button', Artio_MTurbo_Helper_Data::FORM_WIDGET_BUTTON);
|
app/code/local/Artio/MTurbo/Block/Ajax.php
CHANGED
@@ -52,11 +52,13 @@ class Artio_MTurbo_Block_Ajax extends Mage_Core_Block_Template
|
|
52 |
<script type=\"text/javascript\">
|
53 |
//<![CDATA[
|
54 |
function fillBlock".$clearId."() {
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
|
|
60 |
}
|
61 |
}
|
62 |
fillBlock".$clearId."();
|
52 |
<script type=\"text/javascript\">
|
53 |
//<![CDATA[
|
54 |
function fillBlock".$clearId."() {
|
55 |
+
if (typeof(mturboloader)!='undefined') {
|
56 |
+
mturboloader;
|
57 |
+
if (mturboloader.complete) {
|
58 |
+
document.getElementById('".$id."').innerHTML = mturboloader.getBlock('".$id."');
|
59 |
+
} else {
|
60 |
+
setTimeout('fillBlock".$clearId."()', 100);
|
61 |
+
}
|
62 |
}
|
63 |
}
|
64 |
fillBlock".$clearId."();
|
app/code/local/Artio/MTurbo/Helper/Data.php
CHANGED
@@ -31,7 +31,7 @@ class Artio_MTurbo_Helper_Data extends Mage_Core_Helper_Abstract
|
|
31 |
/* constant for version information */
|
32 |
const MAJOR_VERSION = 1;
|
33 |
const MINOR_VERSION = 2;
|
34 |
-
const REVISION =
|
35 |
const BUILD = 0;
|
36 |
const DESCRIPTION = 'Demo version. Copyright © 2010-11 Artio';
|
37 |
const TYPE = 'demo';
|
@@ -158,7 +158,7 @@ class Artio_MTurbo_Helper_Data extends Mage_Core_Helper_Abstract
|
|
158 |
* @return string
|
159 |
*/
|
160 |
public static function getFullDownloadScriptPath() {
|
161 |
-
return Mage::getBaseDir().DS.'app
|
162 |
}
|
163 |
|
164 |
/**
|
@@ -167,7 +167,7 @@ class Artio_MTurbo_Helper_Data extends Mage_Core_Helper_Abstract
|
|
167 |
* @return string
|
168 |
*/
|
169 |
public static function getFullRemoveScriptPath() {
|
170 |
-
return Mage::getBaseDir().DS.'app
|
171 |
}
|
172 |
|
173 |
private static $_noRouteTitle = '';
|
31 |
/* constant for version information */
|
32 |
const MAJOR_VERSION = 1;
|
33 |
const MINOR_VERSION = 2;
|
34 |
+
const REVISION = 2;
|
35 |
const BUILD = 0;
|
36 |
const DESCRIPTION = 'Demo version. Copyright © 2010-11 Artio';
|
37 |
const TYPE = 'demo';
|
158 |
* @return string
|
159 |
*/
|
160 |
public static function getFullDownloadScriptPath() {
|
161 |
+
return Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.'scripts'.DS.'getstatichtml.sh';
|
162 |
}
|
163 |
|
164 |
/**
|
167 |
* @return string
|
168 |
*/
|
169 |
public static function getFullRemoveScriptPath() {
|
170 |
+
return Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.'scripts'.DS.'removehtml.sh';
|
171 |
}
|
172 |
|
173 |
private static $_noRouteTitle = '';
|
app/code/local/Artio/MTurbo/Helper/Downloader.php
CHANGED
@@ -28,8 +28,15 @@
|
|
28 |
*/
|
29 |
class Artio_MTurbo_Helper_Downloader extends Mage_Core_Helper_Abstract {
|
30 |
|
|
|
|
|
|
|
|
|
31 |
const SERVER_UPGRADER = 'http://www.artio.net/updater';
|
32 |
|
|
|
|
|
|
|
33 |
public function downloadAndUpgrade() {
|
34 |
|
35 |
$regInfo = Mage::helper('mturbo/info')->getRegInfo();
|
@@ -42,25 +49,29 @@ class Artio_MTurbo_Helper_Downloader extends Mage_Core_Helper_Abstract {
|
|
42 |
|
43 |
}
|
44 |
|
|
|
|
|
|
|
|
|
45 |
function downloadAndInstall() {
|
46 |
|
47 |
$config = Artio_MTurbo_Helper_Data::getConfig();
|
48 |
-
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
|
63 |
-
|
64 |
$data['password'] = base64_encode('G4RdGdIfDgKF=');
|
65 |
$data['download_id'] = base64_decode($artioDownloadId);
|
66 |
$data['file'] = 'm-turbo';
|
@@ -74,37 +85,47 @@ class Artio_MTurbo_Helper_Downloader extends Mage_Core_Helper_Abstract {
|
|
74 |
$response = Mage::helper('mturbo/info')->PostRequest(self::SERVER_UPGRADER, null, $data);
|
75 |
|
76 |
/* check the response */
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
|
83 |
/* response OK, check what we got */
|
84 |
-
|
85 |
$message = $response->content;
|
86 |
Mage::log("MTurbo: $message");
|
87 |
-
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
|
107 |
-
|
108 |
}
|
109 |
|
110 |
}
|
28 |
*/
|
29 |
class Artio_MTurbo_Helper_Downloader extends Mage_Core_Helper_Abstract {
|
30 |
|
31 |
+
/**
|
32 |
+
* Url to Artio update service
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
const SERVER_UPGRADER = 'http://www.artio.net/updater';
|
36 |
|
37 |
+
/**
|
38 |
+
* Method checks download id and upgrade M-Turbo.
|
39 |
+
*/
|
40 |
public function downloadAndUpgrade() {
|
41 |
|
42 |
$regInfo = Mage::helper('mturbo/info')->getRegInfo();
|
49 |
|
50 |
}
|
51 |
|
52 |
+
/**
|
53 |
+
* Method downloads upgrade package and installs it.
|
54 |
+
* @return string empty string at success or error message
|
55 |
+
*/
|
56 |
function downloadAndInstall() {
|
57 |
|
58 |
$config = Artio_MTurbo_Helper_Data::getConfig();
|
59 |
+
$artioDownloadId = $config->getDownloadId();
|
60 |
|
61 |
+
/* make sure that zlib is loaded so that the package can be unpacked */
|
62 |
+
if (!extension_loaded('zlib')) {
|
63 |
+
$message = Mage::helper('mturbo')->__('Extension ZLIB is not loaded.');
|
64 |
+
Mage::log("MTurbo: $message");
|
65 |
+
return $message;
|
66 |
+
}
|
67 |
|
68 |
+
/* build the appropriate paths */
|
69 |
+
$tmp_dest = Mage::getBaseDir().DS.'downloader'.DS.'pearlib'.DS.'download'.DS.'mturbo.zip';
|
70 |
+
|
71 |
+
/* validate the upgrade on server */
|
72 |
+
$data = array();
|
73 |
|
74 |
+
$data['username'] = 'magento-updater';
|
75 |
$data['password'] = base64_encode('G4RdGdIfDgKF=');
|
76 |
$data['download_id'] = base64_decode($artioDownloadId);
|
77 |
$data['file'] = 'm-turbo';
|
85 |
$response = Mage::helper('mturbo/info')->PostRequest(self::SERVER_UPGRADER, null, $data);
|
86 |
|
87 |
/* check the response */
|
88 |
+
if ( ($response === false) || (strpos($response->header, '200 OK')<1) ) {
|
89 |
+
$message = Mage::helper('mturbo')->__('Connection to server could not be established.');
|
90 |
+
Mage::log("MTurbo: $message;".$response->content);
|
91 |
+
return $message . "; " . $response->content;
|
92 |
+
}
|
93 |
|
94 |
/* response OK, check what we got */
|
95 |
+
if( strpos($response->header, 'Content-Type: application/zip') === false ) {
|
96 |
$message = $response->content;
|
97 |
Mage::log("MTurbo: $message");
|
98 |
+
return $message;
|
99 |
+
}
|
100 |
+
|
101 |
+
/* check that tmp_dest does exist */
|
102 |
+
$tmp_dest_dir = dirname($tmp_dest);
|
103 |
+
if (!is_dir($tmp_dest_dir)) {
|
104 |
+
if (!mkdir($tmp_dest_dir, 0777, true)) {
|
105 |
+
$message = Mage::helper('mturbo')->__("Creating directory '%s' fails", $tmp_dest);
|
106 |
+
Mage::log("MTurbo: $message");
|
107 |
+
return $message;
|
108 |
+
}
|
109 |
+
}
|
110 |
|
111 |
+
/* seems we got the ZIP installation package, let's save it to disk */
|
112 |
+
if (!file_put_contents($tmp_dest, $response->content)) {
|
113 |
+
$message = Mage::helper('mturbo')->__("Unable to save installation file in '%s' directory.", $tmp_dest);
|
114 |
+
Mage::log("MTurbo: $message");
|
115 |
+
return $message;
|
116 |
+
}
|
117 |
|
118 |
+
/* unpack the downloaded package file */
|
119 |
+
$command = 'unzip -o ' . $tmp_dest . ' -d ' . Mage::getBaseDir();
|
120 |
+
$output;
|
121 |
+
$result = @exec($command, $output);
|
122 |
+
if (!$result || !is_array($output) || count($output)<=1) {
|
123 |
+
$message = Mage::helper('mturbo')->__('Unable to unpack install package.');
|
124 |
+
Mage::log("MTurbo: $message");
|
125 |
+
return $message;
|
126 |
+
}
|
127 |
|
128 |
+
return '';
|
129 |
}
|
130 |
|
131 |
}
|
app/code/local/Artio/MTurbo/Helper/Functions.php
CHANGED
@@ -84,7 +84,7 @@ class Artio_MTurbo_Helper_Functions extends Mage_Core_Helper_Abstract
|
|
84 |
else if (is_string($data))
|
85 |
return array_unique(self::str_to_array($data, $delimiter));
|
86 |
else
|
87 |
-
return
|
88 |
|
89 |
}
|
90 |
|
84 |
else if (is_string($data))
|
85 |
return array_unique(self::str_to_array($data, $delimiter));
|
86 |
else
|
87 |
+
return array();
|
88 |
|
89 |
}
|
90 |
|
app/code/local/Artio/MTurbo/Model/Config.php
CHANGED
@@ -29,8 +29,6 @@
|
|
29 |
class Artio_MTurbo_Model_Config extends Varien_Object
|
30 |
{
|
31 |
|
32 |
-
const CONFIG_PATH_TO_MTURBO_DOWNLOAD = 'scripts/getstatichtml.sh';
|
33 |
-
|
34 |
const CONFIG_XML_PATH_DOWNLOAD_MODEL_PATH = 'crontab/jobs/mturbo_mturbo/run/model';
|
35 |
const CONFIG_XML_PATH_DOWNLOAD_MODEL_VALUE = 'mturbo/observer::automaticDownload';
|
36 |
|
@@ -69,6 +67,7 @@ class Artio_MTurbo_Model_Config extends Varien_Object
|
|
69 |
'refresh_category' => 'mturbo/refreshcategory',
|
70 |
'refresh_parents_for_category' => 'mturbo/refreshparentcategory',
|
71 |
'refresh_product' => 'mturbo/refreshproduct',
|
|
|
72 |
'refresh_parents_for_product' => 'mturbo/refreshparentproduct',
|
73 |
'refresh_cms' => 'mturbo/refreshcms',
|
74 |
'dynamic_blocks' => 'mturbo/dynamicblocks',
|
29 |
class Artio_MTurbo_Model_Config extends Varien_Object
|
30 |
{
|
31 |
|
|
|
|
|
32 |
const CONFIG_XML_PATH_DOWNLOAD_MODEL_PATH = 'crontab/jobs/mturbo_mturbo/run/model';
|
33 |
const CONFIG_XML_PATH_DOWNLOAD_MODEL_VALUE = 'mturbo/observer::automaticDownload';
|
34 |
|
67 |
'refresh_category' => 'mturbo/refreshcategory',
|
68 |
'refresh_parents_for_category' => 'mturbo/refreshparentcategory',
|
69 |
'refresh_product' => 'mturbo/refreshproduct',
|
70 |
+
'refresh_parent_of_product' => 'mturbo/refreshparproduct',
|
71 |
'refresh_parents_for_product' => 'mturbo/refreshparentproduct',
|
72 |
'refresh_cms' => 'mturbo/refreshcms',
|
73 |
'dynamic_blocks' => 'mturbo/dynamicblocks',
|
app/code/local/Artio/MTurbo/Model/Htaccess.php
CHANGED
@@ -95,7 +95,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
95 |
return $this->websitecode;
|
96 |
}
|
97 |
|
98 |
-
|
99 |
/**
|
100 |
* Retrieves path to base .htaccess.
|
101 |
* This path depends on selected website.
|
@@ -111,7 +111,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
111 |
* @return string full path to template of sides htaccess file
|
112 |
*/
|
113 |
public static function getSideHtaccessTemplatePath() {
|
114 |
-
return str_replace('
|
115 |
}
|
116 |
|
117 |
|
@@ -120,7 +120,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
120 |
* @return string full path to template of mainly htaccess file
|
121 |
*/
|
122 |
public static function getBaseHtaccessTemplatePath() {
|
123 |
-
return str_replace('
|
124 |
}
|
125 |
|
126 |
/**
|
@@ -128,7 +128,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
128 |
* @return string full path to template of store htaccess file
|
129 |
*/
|
130 |
public static function getWebsiteHtaccessTemplatePath() {
|
131 |
-
return str_replace('
|
132 |
}
|
133 |
|
134 |
|
@@ -137,7 +137,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
137 |
* @return string full path to template of store htaccess file
|
138 |
*/
|
139 |
public static function getStoreHtaccessTemplatePath() {
|
140 |
-
return str_replace('
|
141 |
}
|
142 |
|
143 |
|
@@ -271,7 +271,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
271 |
private function _getHtaccessForWebsite($websitecode, $config, $onewebsite) {
|
272 |
|
273 |
/* load template */
|
274 |
-
$htaccesTemplate = file_get_contents(self::CONFIG_PATH_TO_HTACCESSWEBSITE, true);
|
275 |
if ($htaccesTemplate == false) {
|
276 |
Mage::throwException("I can't read added .htaccesswebsite");
|
277 |
}
|
@@ -339,7 +339,7 @@ class Artio_MTurbo_Model_Htaccess
|
|
339 |
private function _getHtaccessForStore($store, $config) {
|
340 |
|
341 |
/* load template */
|
342 |
-
$htaccesContent = file_get_contents(self::CONFIG_PATH_TO_HTACCESSSTORE, true);
|
343 |
if ($htaccesContent == false) {
|
344 |
Mage::throwException("I can't read added .htaccessstore");
|
345 |
}
|
95 |
return $this->websitecode;
|
96 |
}
|
97 |
|
98 |
+
|
99 |
/**
|
100 |
* Retrieves path to base .htaccess.
|
101 |
* This path depends on selected website.
|
111 |
* @return string full path to template of sides htaccess file
|
112 |
*/
|
113 |
public static function getSideHtaccessTemplatePath() {
|
114 |
+
return str_replace(array('/','//'), array(DS,DS), Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.self::CONFIG_PATH_TO_HTACCESSSIDE);
|
115 |
}
|
116 |
|
117 |
|
120 |
* @return string full path to template of mainly htaccess file
|
121 |
*/
|
122 |
public static function getBaseHtaccessTemplatePath() {
|
123 |
+
return str_replace(array('/','//'), array(DS,DS), Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.self::CONFIG_PATH_TO_HTACCESS);
|
124 |
}
|
125 |
|
126 |
/**
|
128 |
* @return string full path to template of store htaccess file
|
129 |
*/
|
130 |
public static function getWebsiteHtaccessTemplatePath() {
|
131 |
+
return str_replace(array('/','//'), array(DS,DS), Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.self::CONFIG_PATH_TO_HTACCESSWEBSITE);
|
132 |
}
|
133 |
|
134 |
|
137 |
* @return string full path to template of store htaccess file
|
138 |
*/
|
139 |
public static function getStoreHtaccessTemplatePath() {
|
140 |
+
return str_replace(array('/','//'), array(DS,DS), Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.self::CONFIG_PATH_TO_HTACCESS_STORE);
|
141 |
}
|
142 |
|
143 |
|
271 |
private function _getHtaccessForWebsite($websitecode, $config, $onewebsite) {
|
272 |
|
273 |
/* load template */
|
274 |
+
$htaccesTemplate = file_get_contents(str_replace('/',DS,self::CONFIG_PATH_TO_HTACCESSWEBSITE), true);
|
275 |
if ($htaccesTemplate == false) {
|
276 |
Mage::throwException("I can't read added .htaccesswebsite");
|
277 |
}
|
339 |
private function _getHtaccessForStore($store, $config) {
|
340 |
|
341 |
/* load template */
|
342 |
+
$htaccesContent = file_get_contents(str_replace('/',DS,self::CONFIG_PATH_TO_HTACCESSSTORE), true);
|
343 |
if ($htaccesContent == false) {
|
344 |
Mage::throwException("I can't read added .htaccessstore");
|
345 |
}
|
app/code/local/Artio/MTurbo/Model/JsPatch.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
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 |
+
* 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 |
+
*
|
16 |
+
* @category Artio
|
17 |
+
* @package Artio_MTurbo
|
18 |
+
* @copyright Copyright (c) 2010 Artio (http://www.artio.net)
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
|
22 |
+
/**
|
23 |
+
* This model maintains javasript file for dynamic loaded blocks.
|
24 |
+
* It watches adding new theme packages. If any theme package is added then copy
|
25 |
+
* javascript. It alos retrieves information about this copying.
|
26 |
+
*
|
27 |
+
* @category Artio
|
28 |
+
* @package Artio_MTurbo
|
29 |
+
* @author Artio Magento Team (jiri.chmiel@artio.cz)
|
30 |
+
*/
|
31 |
+
class Artio_MTurbo_Model_JsPatch {
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Path to js file.
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
private $_jsPath = '';
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Path to default js file
|
41 |
+
* @var string
|
42 |
+
*/
|
43 |
+
private $_defaultJsPath = '';
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Method determines whether js does exists in theme package.
|
47 |
+
* @return bool
|
48 |
+
*/
|
49 |
+
public function existsJs() {
|
50 |
+
return file_exists($this->_jsPath);
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Method make js by copying from default theme.
|
55 |
+
* @return bool TRUE when success, FALSE when fail
|
56 |
+
*/
|
57 |
+
public function makeJs() {
|
58 |
+
|
59 |
+
if ($this->existsJs())
|
60 |
+
return true;
|
61 |
+
|
62 |
+
$dirname = dirname($this->_jsPath);
|
63 |
+
|
64 |
+
if (!is_dir($dirname) && !mkdir($dirname, 0777, true))
|
65 |
+
return false;
|
66 |
+
else
|
67 |
+
return copy($this->_defaultJsPath, $this->_jsPath);
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Method retrieves absolute path to default js path.
|
74 |
+
* @return string
|
75 |
+
*/
|
76 |
+
public function getDefaultJsPath() {
|
77 |
+
return $this->_defaultJsPath;
|
78 |
+
}
|
79 |
+
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Method retrieves absolute path to js in this theme.
|
83 |
+
* @return string
|
84 |
+
*/
|
85 |
+
public function getJsPath() {
|
86 |
+
return $this->_jsPath;
|
87 |
+
}
|
88 |
+
|
89 |
+
|
90 |
+
/*
|
91 |
+
* STATIC METHODS
|
92 |
+
*/
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Method searches available theme package and retrieves them as array.
|
96 |
+
* @return array
|
97 |
+
*/
|
98 |
+
public static function getAvailableThemePackages() {
|
99 |
+
|
100 |
+
$res = array();
|
101 |
+
$dir = Mage::getBaseDir().DS.'skin'.DS.'frontend';
|
102 |
+
|
103 |
+
if ($handle = opendir($dir)) {
|
104 |
+
while (false !== ($file = readdir($handle))) {
|
105 |
+
|
106 |
+
if (!in_array($file, array('.','..'))) {
|
107 |
+
|
108 |
+
$base = $dir.DS.$file;
|
109 |
+
if (is_dir($base)) {
|
110 |
+
|
111 |
+
$js = Mage::getModel('mturbo/jsPatch');
|
112 |
+
$js->_defaultJsPath = $dir.DS.'default'.DS.'default'.DS.'js'.DS.'mturbo.js';
|
113 |
+
$js->_jsPath = $base.DS.'default'.DS.'js'.DS.'mturbo.js';
|
114 |
+
|
115 |
+
$res[] = $js;
|
116 |
+
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
}
|
121 |
+
closedir($handle);
|
122 |
+
}
|
123 |
+
|
124 |
+
return $res;
|
125 |
+
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
}
|
app/code/local/Artio/MTurbo/Model/LayoutPatch.php
CHANGED
@@ -36,7 +36,7 @@ class Artio_MTurbo_Model_LayoutPatch {
|
|
36 |
* @return string path to Mage Patch Template
|
37 |
*/
|
38 |
public static function getLayoutPatchPath() {
|
39 |
-
return Mage::getBaseDir().DS.'app
|
40 |
}
|
41 |
|
42 |
|
@@ -45,7 +45,7 @@ class Artio_MTurbo_Model_LayoutPatch {
|
|
45 |
* @return string path to Mage.php
|
46 |
*/
|
47 |
public static function getLayoutPath() {
|
48 |
-
return Mage::getBaseDir().DS.'app
|
49 |
}
|
50 |
|
51 |
|
36 |
* @return string path to Mage Patch Template
|
37 |
*/
|
38 |
public static function getLayoutPatchPath() {
|
39 |
+
return Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.'patches'.DS.'layout.txt';
|
40 |
}
|
41 |
|
42 |
|
45 |
* @return string path to Mage.php
|
46 |
*/
|
47 |
public static function getLayoutPath() {
|
48 |
+
return Mage::getBaseDir().DS.'app'.DS.'code'.DS.'core'.DS.'Mage'.DS.'Core'.DS.'Model'.DS.'Layout.php';
|
49 |
}
|
50 |
|
51 |
|
app/code/local/Artio/MTurbo/Model/Mturbo/File.php
CHANGED
@@ -233,6 +233,11 @@ class Artio_MTurbo_Model_MTurbo_File extends Mage_Core_Model_Abstract {
|
|
233 |
|
234 |
}
|
235 |
|
|
|
|
|
|
|
|
|
|
|
236 |
/* add extension */
|
237 |
$path .= self::EXT;
|
238 |
return $path;
|
@@ -321,9 +326,12 @@ class Artio_MTurbo_Model_MTurbo_File extends Mage_Core_Model_Abstract {
|
|
321 |
if (strlen($html) < Mage::getSingleton('mturbo/config')->getMinimalPageSize())
|
322 |
return false;
|
323 |
|
324 |
-
|
325 |
-
if (
|
326 |
-
|
|
|
|
|
|
|
327 |
|
328 |
return true;
|
329 |
|
233 |
|
234 |
}
|
235 |
|
236 |
+
/* fix endslash */
|
237 |
+
if (mb_substr($path, -1)==DS) {
|
238 |
+
$path = mb_substr($path, 0, mb_strlen($path)-1);
|
239 |
+
}
|
240 |
+
|
241 |
/* add extension */
|
242 |
$path .= self::EXT;
|
243 |
return $path;
|
326 |
if (strlen($html) < Mage::getSingleton('mturbo/config')->getMinimalPageSize())
|
327 |
return false;
|
328 |
|
329 |
+
$title = Mage::helper('mturbo')->getNoRouteTitle();
|
330 |
+
if ($title!='') { // if title is empty then quite ignoring
|
331 |
+
if (strpos($html, "<title>$title")!==false) {
|
332 |
+
return false;
|
333 |
+
}
|
334 |
+
}
|
335 |
|
336 |
return true;
|
337 |
|
app/code/local/Artio/MTurbo/Model/Observer.php
CHANGED
@@ -64,7 +64,7 @@ class Artio_MTurbo_Model_Observer extends Mage_Core_Model_Abstract
|
|
64 |
|
65 |
$url = Mage::getBaseUrl().'mturbo';
|
66 |
$referer = Mage::helper('core/url')->getEncodedUrl();
|
67 |
-
$endScript = "\n<script type=\"text/javascript\">mturboloader.loadBlocks(\"$url\", \"$referer\");</script>\n";
|
68 |
|
69 |
$layout = Mage::getSingleton('core/layout');
|
70 |
$layout->unsetBlock($name);
|
@@ -78,11 +78,11 @@ class Artio_MTurbo_Model_Observer extends Mage_Core_Model_Abstract
|
|
78 |
|
79 |
$includes = $headBlock->getIncludes();
|
80 |
$includes = str_replace($endScript, '', $includes); // load script must be at end all scripts
|
81 |
-
$includes .= "\n<script type=\"text/javascript\">mturboloader.addBlockRequest('$id');</script>";
|
82 |
|
83 |
// for cart will be updated also link in header
|
84 |
if ($id=='cartsidebar')
|
85 |
-
$includes .= "\n<script type=\"text/javascript\">mturboloader.cartLink=true</script>";
|
86 |
|
87 |
$includes .= $endScript;
|
88 |
$headBlock->setIncludes($includes);
|
@@ -148,12 +148,13 @@ class Artio_MTurbo_Model_Observer extends Mage_Core_Model_Abstract
|
|
148 |
|
149 |
$config = Mage::helper('mturbo')->getConfig();
|
150 |
|
151 |
-
$
|
|
|
152 |
$product = $event->getData('product');
|
153 |
|
154 |
$id = $product->getId();
|
155 |
$url = $product->getData('url_key');
|
156 |
-
|
157 |
$eventQueue = Mage::getModel('mturbo/mturbo_event')->getQueue();
|
158 |
|
159 |
if ($config->getRefreshProduct()=='1') {
|
@@ -167,18 +168,25 @@ class Artio_MTurbo_Model_Observer extends Mage_Core_Model_Abstract
|
|
167 |
$eventQueue->addItem(Artio_MTurbo_Model_MTurbo_Event::TYPE_PRODUCT_ID, $id);
|
168 |
|
169 |
}
|
170 |
-
|
171 |
-
if ($config->
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
|
|
|
|
|
|
|
|
178 |
|
|
|
|
|
179 |
}
|
180 |
|
181 |
$eventQueue->saveQueue();
|
|
|
182 |
}
|
183 |
Mage::unregister('_helper/mturbo/data');
|
184 |
|
@@ -186,6 +194,41 @@ class Artio_MTurbo_Model_Observer extends Mage_Core_Model_Abstract
|
|
186 |
|
187 |
}
|
188 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
/**
|
190 |
* Before save category event handler
|
191 |
*
|
64 |
|
65 |
$url = Mage::getBaseUrl().'mturbo';
|
66 |
$referer = Mage::helper('core/url')->getEncodedUrl();
|
67 |
+
$endScript = "\n<script type=\"text/javascript\">if (typeof(mturboloader)!='undefined') mturboloader.loadBlocks(\"$url\", \"$referer\");</script>\n";
|
68 |
|
69 |
$layout = Mage::getSingleton('core/layout');
|
70 |
$layout->unsetBlock($name);
|
78 |
|
79 |
$includes = $headBlock->getIncludes();
|
80 |
$includes = str_replace($endScript, '', $includes); // load script must be at end all scripts
|
81 |
+
$includes .= "\n<script type=\"text/javascript\">if (typeof(mturboloader)!='undefined') mturboloader.addBlockRequest('$id');</script>";
|
82 |
|
83 |
// for cart will be updated also link in header
|
84 |
if ($id=='cartsidebar')
|
85 |
+
$includes .= "\n<script type=\"text/javascript\">if (typeof(mturboloader)!='undefined') mturboloader.cartLink=true</script>";
|
86 |
|
87 |
$includes .= $endScript;
|
88 |
$headBlock->setIncludes($includes);
|
148 |
|
149 |
$config = Mage::helper('mturbo')->getConfig();
|
150 |
|
151 |
+
/* @var $product Mage_Catalog_Model_Product */
|
152 |
+
$event = $observer->getEvent();
|
153 |
$product = $event->getData('product');
|
154 |
|
155 |
$id = $product->getId();
|
156 |
$url = $product->getData('url_key');
|
157 |
+
|
158 |
$eventQueue = Mage::getModel('mturbo/mturbo_event')->getQueue();
|
159 |
|
160 |
if ($config->getRefreshProduct()=='1') {
|
168 |
$eventQueue->addItem(Artio_MTurbo_Model_MTurbo_Event::TYPE_PRODUCT_ID, $id);
|
169 |
|
170 |
}
|
171 |
+
|
172 |
+
if ($config->getRefreshParentOfProduct()=='1') {
|
173 |
+
|
174 |
+
$id = $product->getId();
|
175 |
+
$configurable = Mage::getResourceSingleton('catalog/product_type_configurable')->getParentIdsByChild($id);
|
176 |
+
$grouped = Mage::getResourceSingleton('catalog/product_link')->getParentIdsByChild($id, Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED);
|
177 |
+
$bundled = Mage::getSingleton('bundle/product_type')->getParentIdsByChild($id);
|
178 |
+
|
179 |
+
$ids = array_merge($configurable, $grouped, $bundled);
|
180 |
+
|
181 |
+
$eventQueue->addItem(Artio_MTurbo_Model_MTurbo_Event::TYPE_PRODUCT_ID, $ids);
|
182 |
+
}
|
183 |
|
184 |
+
if ($config->getRefreshParentsForProduct()=='1') {
|
185 |
+
$eventQueue->addItem(Artio_MTurbo_Model_MTurbo_Event::TYPE_CATEGORY_ID, $product->getCategoryIds());
|
186 |
}
|
187 |
|
188 |
$eventQueue->saveQueue();
|
189 |
+
|
190 |
}
|
191 |
Mage::unregister('_helper/mturbo/data');
|
192 |
|
194 |
|
195 |
}
|
196 |
|
197 |
+
/**
|
198 |
+
* After save order.
|
199 |
+
*
|
200 |
+
* @param Varient_Event_Observer $observer
|
201 |
+
*/
|
202 |
+
public function afterSaveOrder(Varien_Event_Observer $observer) {
|
203 |
+
|
204 |
+
/* @var $event Varien_Event */
|
205 |
+
$event = $observer->getEvent();
|
206 |
+
|
207 |
+
/* @var $quote Mage_Sales_Model_Quote */
|
208 |
+
$quote = $event->getQuote();
|
209 |
+
|
210 |
+
if (!$quote) return $this;
|
211 |
+
|
212 |
+
/* @var $item Mage_Sales_Model_Quote_Item */
|
213 |
+
foreach ($quote->getAllItems() as $item) {
|
214 |
+
|
215 |
+
$productId = $item->getProductId();
|
216 |
+
if ($productId) {
|
217 |
+
|
218 |
+
$product = Mage::getModel('catalog/product')->load($productId);
|
219 |
+
|
220 |
+
$event = new Varien_Event(array('product'=>$product));
|
221 |
+
$observer = new Varien_Event_Observer();
|
222 |
+
$observer->setEvent($event);
|
223 |
+
|
224 |
+
self::afterSaveProduct($observer);
|
225 |
+
|
226 |
+
}
|
227 |
+
|
228 |
+
}
|
229 |
+
|
230 |
+
}
|
231 |
+
|
232 |
/**
|
233 |
* Before save category event handler
|
234 |
*
|
app/code/local/Artio/MTurbo/Model/Patch.php
CHANGED
@@ -34,7 +34,7 @@ class Artio_MTurbo_Model_Patch {
|
|
34 |
* @return string path to Mage Patch Template
|
35 |
*/
|
36 |
public static function getMagePatchPath() {
|
37 |
-
return Mage::getBaseDir().DS.'app
|
38 |
}
|
39 |
|
40 |
|
@@ -43,7 +43,7 @@ class Artio_MTurbo_Model_Patch {
|
|
43 |
* @return string path to Mage.php
|
44 |
*/
|
45 |
public static function getMagePath() {
|
46 |
-
return Mage::getBaseDir().DS.'app
|
47 |
}
|
48 |
|
49 |
|
34 |
* @return string path to Mage Patch Template
|
35 |
*/
|
36 |
public static function getMagePatchPath() {
|
37 |
+
return Mage::getBaseDir().DS.'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo'.DS.'Model'.DS.'patches'.DS.'mage.txt';
|
38 |
}
|
39 |
|
40 |
|
43 |
* @return string path to Mage.php
|
44 |
*/
|
45 |
public static function getMagePath() {
|
46 |
+
return Mage::getBaseDir().DS.'app'.DS.'Mage.php';
|
47 |
}
|
48 |
|
49 |
|
app/code/local/Artio/MTurbo/Model/scripts/wgetlib.so
CHANGED
@@ -1 +1 @@
|
|
1 |
-
ZUp5Pou{PkJxPjKZNl6wXmePdmSIcHqbW{WrXmF:QTJ8d{p{OUZ7JlSSc1qEVXyxXnmCc1mWNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exVGRxcnF{TkCjS4SpZUOKNFq6b3eme{CMR2GsTlOUVoCjcWq3TVRx[2SYSn6bWH93ZVeXd3OIWomMR3S1[FiXfWmuPI[iW{WuZomkdFyVOX6bXGKUXmelTnKuXo[MR3t4SGGwTlOSb1qLTGqpZ3qCeGCtPX6bXGKVXmiOc1uUNDu[W2KsWkKHfXKucIWbfXesZWd2cXK6NDujW2[7Z{KHcmqUb{eEVUCMR2GsTlOUVkK[XFm4UGR2[nOuWnuMR3OyUImwenGYOXubXHevT2S{UlOob1qEVXy6XmiTNXOuOHebcV[{Z{KWO1SSc1qEVXx6TVeXd3NzWXeme{CMR2GsTlOZTnylTG[6ZnmDNHOvWnyQe{CMR2GsTn[SNFuEVXt:Jku{PkJ1PjKbS{l{Zn25emmYVlKjcWKLZn6PNGmYfINjP4N7OUh5PjKE[3:LR2GseluqRnmiW{WsTVeTbHSISXeMbUiMTVOC[1OSb3ulcV[6UV[{cnSZUnykcUWpZmeWcmiURUmKR3OvU4ew[1mERXeKRXus[H2HfV2Hd36kS1[7Z{OlenOuVX6ZV1F6TVOkcl:4c3eKR1GoTVGsb3SuSomOSoOvXld6N3KufI[[W2KnZWeScmiURUmKR2JzXWiKfV:4c3eKR1GoTVGsb3SuSomOSoOvXn2td2qU[HSKSECoTkJyNHSZTnmjfXN4R3mC[1mERXeEV2JzXWiKe2e6[Hq[XGGvXGOCPVmE[ISlTG[6XX15cl:4c3eKR1GoTVGsb3SuSomOSoOvZ1iLemqE[HSKSECoTkJybGpzWoWlS{ivU4ew[1mERXeKR1GoTVGw[1mERXeKRXus[GiLdFmFNHekS1[6Z{KX[nSZToOMSUGpXkKWOl:u[HylSl5xZkOLcGFzPYWbcXyvT1OLN2qYTY[lW{W7XmePNXOuWY[[cV[7XmZ6NXOue3mNR1G4T2OsO1OqRXeKR1GoR2OTNXOue3eRV1Gs[GiLdGe6[H:jN15xTkFxeVqJWomiWoOvZ1eHNHGE[HSQe3:oTVOC[1mCb3ulXFq{TVRx[3SJToCjV3es[GiLd1yERX6NfXOxU4ew[1mERXeKRXus[H2HfV2Hd36kNnxxXmOl[FmFNHeLTG[6ZlS{T1mERXeKR1GLTlibbHOrRnKLNny4TkFx[2CURXuZNV6HWXybSmWtd36WNG[UWnuXV2hxSlWTSlmvXGS{T1mERVpjP4N7NUZ7JmpzWkCWcW[vWH2HeGqSQU1jP4N7N{Z7JlSSc1qEXFqt[FiXfXKqRX6iN1pxZle1bHF{TUCLfoOPR3esTjJ8d{pyNkpjZld6bGqGcIWbcUh:Jku{PkF2OkpjSGGw[1mERXeKR1GoTVOC[1mERXulcV[6UWNxL2h{TnykN1K3Zn6PcFmFNHeLTGqpZ3qGeGCtRo[kN2KUXmiHNWqZUkCMR3Sw[FiTe1:qPI[lN3R{UH2HfXSIcI[NcUWt[FN6d3GYUnyjcl6tUGePc2qYUoKLfYeoZn6Xd3KEe3eLTGqpZ3qCdF:4NFuKR1GoTVOC[1mERXeKR1GoJku{PkJxPjK[NnitXUK1V2qZUoejNkW7XmF:QTJ8d{pzPENzPjKFVX:oTVOC[1mERXeKR1GoTVGtdGqqRX:LTGqpZ3qCdFmJd16EbVGoTVOC[1mERXeKR1GoR2GsUlOqRXeKR1GoTVOC[1mERXeEVXus[H2HfV26NDuZN1qtXkCteWquPISRcV63XleW[2CURoCjcmJzXWe4c3N{WnmkN2K6T1OTNmmZTYiYflKlUFOCe1yERXulcV[6UVOsdF:4NFuKR1GoTVOC[1mERXeKR1GLR2etcVuERoCjcEmpZ36LbHWU[3ulcV[6UYlxL2h{TnybNHy2Xn15eGCuUo[bS2W{TVeHfXOuSkWMSFW4UFSKe1yFUYeNSGG4T2Os[1uURkeFVX:oTVOC[1mERXeKR1GoTVGsTlOSNFuKR1GoTVOC[1mERXeKR1GLR2GtdGqqRX:[NklyZn6Sc1qJXnikblWxTVR1PVmFUYCKTIOPR3mC[1mERXeKR1GoTVOC[1OSb1qEVUCMTVOC[1mERXeKR1GoTVOCTlOSb1qNfUioWVeHfXNzWXelS3itTVeTbHSIWV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVnu[XGKtTVRx[3N{VomZN1qtZ1e5bGlzWX:LfUSvUFOCcly6Z4OKTGK6ZWdxc1qJXnikbl[jUWZxdFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL2qISkCbV1F6TVVybGpzWU[QcXitZliDcHOq[36[Nkm6XmOkdFyVOX2jN1q1XWiTSWmZVnyMR2KsXWiTcFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1y6PHeWS1[6Z{KW[3SIbHyKS{WpZmeWUlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsZn2HeGqURUmKTGK6ZWdxc1qJXnikbl[jUXxxdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCely6RmG[XFq7XmODNHGIWXe[Nkm1Z1eHeXWSNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzNYe[W{V2TVRx[3GZUoqbXGGwTlibbHOrSnKONUCxTVR5[3SJToCjV3es[H2HfV2Xd4qZV3uoU3mCclq7d16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3GYXXeMR2JzXWiKflyVOX[kcW[vV2d2cXK6NDu[NkmsXmOCPWCURYiOR3uo[YdxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoR2OTNmmZTYqNWEWnZ32XcmOYOX2jfUBsZmeXfnNzSn6bV1F6TVOTNmmZTYqNWEWnXImocmRxd36MWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKTECoXme5fmqURoCbbVGwTlibbHOrUYSRcEm6XmelTnKuXo[NWEWrZkKTcFmFNEmKSFm4T2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[FqVb2qRXEGXVWJyTlKTSW[nWFWtSGKWOWSTWkmHW1[DTmWsWlWLfXuxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Go[mODcHKJUnyKS3yuTVOob3SuSomOfUBsXEOLcGpxcIWbcUi1VH2PemqIWXeRWECoUYqCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Gs[H2HfV26NDukcV[xZ{KXU3J{VoC[NmWwUWSCe1yERXulcV[6UYlxL2hyPH:LNHyQVnt6[m[XRliWb1[GVmZ6U2RyVn[SWV6WV2[bSlq6b4CQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXleHNGqURUmKR2JzXWiKflyVOX[ZfXevWH16NFmISnqlS3xzXWiTcGqERkWbXGGvT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhx[2qYfIqbV1KxXnmCc1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVSSe1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERVqKR2JzXWiKflyVOYm[W3y7XmV2enSIcHqbV3e5UVSCd1mEVkK[XFm7UGR2[mi6[36TSUmPVWWtU1mGVmCTWl2oWHt6WVmGNVKXSV6KTomsdF:6RXeKR1GoTVOCUlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhxUlOqRXeKR1GoTVOC[1mERXeEVXuLR2FxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERkmKS2[{Z{KW[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GLTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SHWXyLVGWtPWOTWXSnVUCpSmFxeH[Tb1[LWFOkdFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERVqEVXuPR3mC[1mERXeKR1GoTVOC[1OScEmKS2[{Z{KW[3GYXX:KR2JzXWiKflyVOX[kcW[vV2d2cXK6NDu[NkmsXmOCPWCURUWOR1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[F[WcFqRWXx6SWRy[F:VSUmDVlZ6TmKHPV:VNWKnVnt6WmSsVX6MV3t4SGGw[1mERXeKR1GoTVOC[1mERXeKR1Go[mODcHKJUnyKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GLTlibbHOrUYSRcEm6XmelTnKuXo[NWEWrZkKTcFmFNEmKR{C5U4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVGsb3SuSomOfUBsZ32HdHNzWl:jN2KxXUKWc12VRYeNR1Gs[H2HfV26NDuZNUiwTkCXV2WsPWOZNVqHVkF6SGOGWlSUNUmIVWWtUVq6b4CQe{CMTVOC[1mERXeKR1GoTVOCTlOZNF6EbVGoTVOC[1mERXeKR1GoR2GsUlOqRXeKR1GoTVOC[1mERXeEXECoXme5fmqURkeFVX:oTVOC[1mERXeKR1GoTVGsTlqJXnikbl21VH6LbHGZUnyVcUlxZWePcFuFSYeOR4eoTlibbHOrUYSRcEmnT1OlSmWtTmCWcEmUVmWl[mFxbF[SNISnVnuHTmSEZ4CMWIOPR3mC[1mERXeKR1GoTVOC[1OZNF6EbVGoTVOCTlOSQU1jP4N7NUZ7JmWIPYqlSlqtZ2iXcHN{VU1jP4N7OUN3OEpjSGGw[1mERXeKR1GoTVetcVuERoCkNUmpZ36LbHWU[3ulcV[6UlOs[1qqXXe[NklyZn6Sc1qJXnikbmGxTVR1[12ERYCKTIOPR3mC[1mERXeKR1GoTVOC[1mEPI[KS2q3Z31ybHSERYSNWESo[FeXfnSFSUm[V2pxXmiPNF2rNXmKS2ZxXYl1UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKe1mFNHe[XFq6XWisc1uVd16EbVGoTVOC[1mERXeKR1GoTVilc3GYfHyMR1K{ZWiPNFuEVoWNR1Gs[Hms[2CURny[W16wT1OTNmmZTUCMV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3SuSomOSoSlTVRx[1mqVoWRV2JzTXq{UlOqRXeKR1GoTVOC[1mERXeKTECoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV2ERUmKS3y1Z1e5emqIWX:LfWmvUFOCb3SuSomOR3t4SGGw[1mERXeKR1GoTVOC[1mERXu[Nkm2[FeXeXSHVkWkS2WoVGOCbWFzPYWlS2[2[FNyNHWZRnyQbVKpZ1iDd3GYUnilS3y3Znl6OFyZ[EOlfUGuZkOLeFyZWomjS2[2XUJ6b2qYVnOkcIi2TXq{UlOqRXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERnyjTF6tTVi{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKe1mFNHeLTGqpZ3qSO1SSc3eKR1GoTVOC[1mERXeKR1GsXUJ6eXSIWoWlSmJ2Z1eW[2CURXmSNkm2[FeXeXSENUCmXFKtU3mDNGqZbECNN3i1Zl[5fWiIOHmQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVFxT1mERXeKR1GoTVODdGqq[3eiXF6nZn6Xd3KE[3ulcV[6UYms[1uURkeFVX:oTVOC[1mERXeKRXuLTlibbHOrUXeRV1KPXWelcF:rdH6bXGKV[Fd6fWqWUo[jcWqxXomobXRzWnmNN2[2Z{KXbnSZTnyNNlqpZ{KX[nSZToOKbYeoUVOsO1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV26RUmKTF5xZ3x6fWqZRoO[W16tT1OkenGYOXubXHe2Z1epe1xzSnujW3y2Tom4[1q6Z4OKR2JzXWiKfluVd16EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYqKSECoZ{OTfWh{TnykS4ipXUKWc1q6PYCjcWKt[VN2e3GJRY[LfYeoTomkd1mEVkK[XFm7T2S{UlOqRXeKR1GoTVOC[3[SNFuKR1GoTVOCUlOqRXeKR1GoTVOC[1y6PHekS1[6Z{KW[3SIbHyKS3Sx[H2XeVmHWmOVRUCMTVOC[1mERXeKR1Gs[H2HfV2qRUmKTFKpZ36PcGh{WomjR3es[H2HfV2qb{eFVX:oTVOC[1mERXeKS3yuT1OCbHGZUoqbXGGwTlibbHOrTnKLN16rZVeXeGqU[HSMV1J5[lOCc1qJXnikblqjTkOPbnGIWoSbV3SlTVOGPVmE[H:lTGK4Toms[1uURkeKRUCMTVOC[1mERXeKR1GoTVOC[3OuWkClXFq2TVebbHKJUnyQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDcHWJVom[W15xTVepenN{VXe[W{WsTViDbHSI[{[FVX:oTVOC[1mERXeKR2KwZkOPNFmFNHeLTGqpZ3qLZlpzbI[kN2GvXGS{UlOqRXeKR1GoTVOC[1qJRnilS3eoVGODdHN{UnylR3es[H2HfV2td36kS1ZxZVOl[FuURT:KR2JzXWiKfWe6[Ie[XGKwTkFx[1:qRX6NfXN4SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDenOIWoWKS1WoZ{J6bnFzWkCKS163Zn12cGl{VoCjNkSoZkJ1[3OIPYmlR1F1UVFxT1mERXeKR1GoTVOCb2qZTomjcUioVGODeXSYfIOQe{CMTVOC[1mERXeKR1GsXmiLfXN{VomKSECoZn6Xd3KFd16EbVGoTVOC[1mERXeLS2q4TVRx[2GIXoqjNl6zZkODcHKq[3uiS{m7[FO4[1:FRYOKR2KtZ36LeXK6e3eLS2[6Z36PNHOqe3ePV3t4SGGw[1mERXeKR1GoTVetcVuERXubclGoVGRxPVmIXnijTF6tTVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoZ32XNHSZToWKS2qpZliPcF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKRUCMTVOC[1mERXeKR1KxXnmCc1mYcIqZNkVyZle4c1qJXnikbmmxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV6qRUmKR1qXZ{KXfVyWSn6bW{VxU3mCbVyqVkK[XFlzUHmLZ3OtfIWKboOPR3mC[1mERXeKR1Go[mFxT1mERXeKR1GPR3mC[1mERXeKR1GoUIl5[3NzWoWbR1JxZVeW[3OuWoilW2[7[FFxT1mERXeKR1GoTVODdGqqRX:LTGqpZ3qW[2CVNHeLN1K3Z{OScluURkeFVX:oTVOC[1mERXeKR1GoTVODcXOJWkCkfXesXn6Cd1mETmGVNV6WTVOTe2mZVn:KSXiWWl[Cel2UOIiZTFqkZnmKdF:4NFuKR1GoTVOC[1mERXeKR1GoZWe[[1uESoCkNUm2[Ge5d1uEVkK[XFlzT2Os[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mIXoelXGK7T1OTcXOEe3eLTGqpZ3q[dF:4NFuKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqV1d6fnSFc3eLS3i3Z{OTZ3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qUXmebcHOuWomQbVGs[H2HfV1yfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKS2q4[GiTfluEVn2kR4eoTlePenKvVnyjcmKW[WiDcFuVd16EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1msUo[jcmKtZn6SeHKIWoWbN2KwU3mCbVyqRoqlTFq{Xmd1c1qJXnikblGxTVN1bWiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqVUJ6eXKuWnqlS3y3Znqw[2lzfI[kNm[kZ3y5eWiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1Gs[H2HfV2Eb{eFVX:oTVOC[1mERXeKTECPR3mC[1mERXeKR1GoXme5fmqYcH2KR3es[H2HfV6URUmRV1GvXkKXNFq6b3eme{CMTVOC[1mERXeKR1GoTVOC[1qJSkGbXFp2TVRx[1q6Z{eFVX:oTVOC[1mERXeKR1GoTVODdGqqRX:iXF67XmiSc1qJXnikblqjTkOHNWqZTkWLNUCxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qJSkGbXFp2TVRx[1q7PH6NbWJzXWiKfWe6[IilW2[6[WOl[F:4NFuKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqVkCXWVmJd3ukS1ZxZVhyO1qJSkGbXFp2[mODTW[HVmGNflW2UW[5fWiIOHmMWIOPR3mC[1mERXeKR1GoTVOC[1mIcH2KR3epZWiP[nKvWoOjR3es[H2HfV6qb4CKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KuZ1iXNHO6[3ubclG{TVOTNmmZTUKMWIOPR3mC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1msbI[kN2F3TVOTc3J{UkCZTFqkZnmKdF:4NFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWFzPYWjcW[r[FetenKrc3e[Noi3Z{KXZ3OtfIWZTFqkZnmKdF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mCNFuKR1GoTVOC[1mERXukcW[7[Ge5NFmFNHeLfXN4TVFxT1mERXeKR1GoTVODN3GIcIObV3epXn2Xemqq[3ubclGxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1G3UImDfWqYUnyiXGqtTViTc2qURombXF5yZliTflmIPX2KTGKwXmODfWqZSkGbXF5xSGGw[1mERXeKR1GoTVOC[1mERXukcW[7[Ge5NFmEOEmKS2qvXmiTfluEVn2kR4eoUWSKOFuVd16EbVGoTVOC[1mERXenVUCMTVOC[1mERV6EbVGoTVOC[1mERXeNfUioXUK5enNzWXelS3itTViPemlzeHylR1KrZkJ2eWqYUkCiW{m2U3dxT1mERXeKR1GoTVODcWlzfI[kNmWwTlebe1uVd16EbVGoTVOC[1SSc3eKR1GoTVOC[1mEPI[KTF64ZletNFmJVn:bV1K6XmiPNXKJVXeiS2[pXleXfVmIXomjNkCo[FepcFmIUo[jcmKtZn6SUlOqRXeKR1GoTVOC[1qJTnykN2[{[FOCPVmIWkSkS4i3XleWc1mtfImZS{WkZ3y5eVmqe3eLTFqtZ{OXd3SEe3eObXt4SGGw[1mERXeKRUCMTVOC[1mERXeKR1GsZVeXbGqIWomKSECoZWiPfmqZVX:LTFqtZ{OXd3SHd4eZV3uoVImCb3OuWoqlW4hxW4qD[FmFc3eLfXN4SGGw[1mERXeKR1GoTVOTbnJzOUCbW{VxTVRx[3GZUoqbXGGwTliLcHN{WoOlSoO5XGOs[2C6RXukcW[7[Ge5NGe7SnSKSH:oTomkO1SSc3eKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXulcV[6UWOCPVmIOXylfVK7[FeTSHKISoqkfXexU4dxT1mERXeKR1GoTVOCb3SuSomOV{BsZVeXbGqIWomKSECoTlepcGmYVnykboOPR3mC[1mERXeKR1GoTlibbHOrSYSRcV63Zn6TcHKvVXeRV1GsXUJ6eXSIWoWlSIOPR3mC[1mERXeKR1GoSGGw[1mERXeKR1GoTVN5elmGbHijcWK{XmODbnGJWoWiNm[sTViTfWmYOYqbcW[6TVetcVmIOXybW2KtXlFxT1mERXeKR1GoTVODdGqq[3ekN2K6Z1d6fluJUkCkcmK3Zld6N2qZTX:LTGqpZ3qGeGCubHy[W2KtZ3msd1mE[ECkcV[2Z{KbcHOqNXyjcV63XleteWq7c3e[NnhyZn21cGqEZ4CKR1V6VGODcWmYfIqbV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR2K4XWiLfmqYVXeRV1GvToq{UlOqRXeKR1GoTVOC[1mERXeKR2K{XmebNFmFNHeLTGqpZ3qGeGCuUo[jcmKtZn6SO1SSc3eKR1GoTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoTVOC[1mJ[H:iW4itT1ODNHOvWnyKR3uo[YdxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOTe3J{UXeRV1K7[FiLe3J{UX:LS4itXn6Sd1mETnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3GYXX:KR2K4ZkOO[2CVNEmKS2qpZliPcFmEb3eme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVODfWqZVkGkcUSoTlibbHOrSUeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXenVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR2KrZViXeXF{UoCmcWWoVGODfnSYToqlTFmwTle5cGqvVYOKSFG{TVOTe3J{UYCQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR2K4ZkOO[1u7NHekN2K6ZleXeVuETnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qIfHybcmGoVGODfnSYToqlTFmwTle5cGqvVYOKR2K4ZkOOdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mEVoejN12oVGODfnSJToejN12wTlePc3SYOYKkNnx3XmO4[1q7d36MWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KxXnmo[1qJRo[kfVGpVGRx[2quSoOkNmWoT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2KrZViXeXF{UoCmcWWoVGODfnSYToqlTFmwTlePc3SYOYKkNnx3XmO4[12Ee3eLTFK3Z4msO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mEVnqiTG[2ZUOPdHWuWXeRV1KwXmipb2qYUX:LS16w[Gd2dnNzcE[bV3t4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoSGGw[1mERXeKR1GoTVOC[1mERXeKR1GoZWe[c1mEVnqiTG[2ZUOPdHWuWXeRWECoUVOCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoXX6LcGmYd{eFVX:oTVOC[1mERXeKR1GoTVOC[1mERXenVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR2K4XWiLfmqYVXeNbkCoZ{OXbXN{VomMR2K{XmebNFyERYeNR1GsXUKpNXKueIqiXICtT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3KIWn2lR1F6TViPNWmvUkCkbXesZleXcXSEe3eLS16w[Gd2dnNzcE[bV1GzTViPNHOufHyjbXeqXFiLZ3KqTYCMWIOPR3mC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoTVFxT1mERXeKR1GoTVOC[1mERXeLTGqpZ3qGeGCuUo[jcmKtZn6S[2CURXukS1[6Z{KXb1:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKRU1:Jku{PkJ1PjK[XGZxZkJybHSIcHqTS{l{Zn25emmYVYljP4N7NkNzOEpjR3mC[1mERVqiW2moT1VybGpzWU[QcXitZliDcHOq[36jXGJyZ32LelxzcIWbcUivT2NxL2pzWkCWcW[vWH2HeGqU[4CRWECvZUOLNHKIeHiiN1lxToms[3W4c3eKR1GoR2GsT1mERXeKRXuLTlePenKuXoCbfVF6TVVybGpzWU[QcXSt[F[PdHKu[IObXGK3ZnmocnKZVkGkcVq3UEKPenKuXoCbfXOxU4ew[1mERXeEVXyxXnmCc1qIUo[jcWqxXolxL2pzWkCSXGZxZkJybHSIcHqTS{l{Zn25emmYVX:MV3uo[Yew[1mERXeEVXuMTVOC[1mCb1qEXGK6[WODO1OqRXeKRXuLR2Gw[1mERXeEVXuLR2OTNHSZTnmjN1Kp[Feo[2CURXu[Nkm2Xn2tclyVOX6bXGKW[GiLbXJ{RnilS3ewT2S{T1mERXeKRXuLR2Gsb3KYPXubW4eoVGODUmmY[HyQboCvXmiTUnJzVnyjR3evZmiTNXOuTo[NNkFx[GiLbXK6Z4CQe3:LR2GsTlOSb1qEVXuLTVOC[1mCb1qEVX:LR2GsTlOUPI[KS3StZn2XfWmZVnyKS4ixZ{OS[2quPYmKS1[{ZlODN2qYToqiXGKtZ4ew[1mERXeEVXuLR2OTeHJzVnyjR{BsXkKXeWqZTnilS2[XZ325UXGZUkCMR3t4R3mC[1mERVqEVXuLR3mC[1mERVqEVXuLTlilcGmvUoClS2[7TVRx[2SYSn6bWH93XkKXNGSYPXubW4ewTkKPenOuWY[lNm[qZ{KtNGqUZ4CNWEWvXmiTSHJzfIObW15xZWd6eVuEb4SRcYi3XWeSc1uUNDubNmZxV2iTcHKZUX:MWIOMTVOC[1mCb1qEVXyuZkOLcGmYUn:KR3es[EKXbXNzcECbXF2oXWiO[1qJ[Hy[cl6x[FeWdFmJd1uKR1GoTVGsTlOSb1qEbVGoTVOCTlOSb1qEV2J{XmeLfnGZVnySNkm2Xn2tclmFNHeLS163Zn2bdGq6NDubNmZxWkKXbXNzcECbWV63Zn2bdGq6[3ulNm[qZ{KtNGqUNDubNmZxVUJ6b2qU[4CMWIOMTVOC[1mCb1qEVXuLZWe[[1uEVkObW1q7ZWiTcGFzPYWbcXyvTVO[cVmEVkObW1q7ZWiTcGFzPYWbcXyvUGR2cmqZVl[jcV[qZleXb1uEb{mRV3O5Toms[3W4c1qEVXuLR2GsTlqIUo[jcWqxXoesTlmFNHeLS163Zn2bdGq6NDubNmZxV2d2NGqZToekcWZxT1OsO1Oob1qEVXuLR2Gsb3N{Wnm[cV[7XmOC[1mCb3eRV1KPXWelcF:rdH:bW4i4XmiKc1pzNUClXFqqZol6N2qYToqiXGKtTomseGCu[HylSl5yXX2LbHNzWX:LTHStXX6PdHSIWYSRcXSt[FWTcGquSkGjTGKV[Fd6fWqZXoCbXHOwT2OsO1OSc3eKR1GoR2GsTlOSb1qLTHStXX6PdHSIWoe[XGKwTVRx[1qJ[Hy[cl6x[FeXSHJzOX2iW3O1VH2lcHSGTnikNm[GZWiKc1uUOVWWfUSs[FiXfWmuPYe[XGKwUHuTWFyqVoqlW1qqXWiPcFysVmSNbWJ{XmeLfnGZVnyNWEWvXmiTSHJzVnyMR3u2Tol2NHWJVX6Qe3:oTVOC[1OSb1qEVXuLTldydHKvUoCmcWWLTVRx[1qIUo[jcWqxXolxL2pzWkCVW3y2ZWdybHKHRnibNm[VZWixcFuEb{eE[3uLR2GsTlOSb3ukNl66ZWiDNFmCb3eRV1KPXWelcF:rdH:bW4i4XmiKc1pzNUClXFqqZomkdFyVOX6bXGKI[Ge5d2KIPUOjcYi3XWeTWGl{ToCkTGKSXWiTc1uEb{eE[3:LR2GsTlOSb1qiW2moT1OHdHNyPXymS2[r[GiTbGmufHyMR2K7XUOLdHOJVYCMVX:LR2GsTlOSb1qEW16wZmd6b1uEVoq[N1qxZ1iSd1mEZ4ePfnNyTomsO1Ooc3eKR1GoR2GsTlOSb1qLS163ZmdybHKuVXeEV1F6TVOTfml{ToCkTGG2TomCclyqVkObW1q7ZWiTcHOISkCiR{SvTVOkeVqINYCjcl6x[X2WeVq6RYmRbWm5TVO[cl:6RY[NfVKpZ{OteWlzbImjNkW3[GiO[2lzSoOjS3y2XoewT1OSb1qEVXuLR2etcVmE[3uiW{VxXmiLe3OuWkCMVX:LR2GsTlOSb1qKR1GsXUJ6eHKYSoWbR1F6TVOTdHKvVnykclK6XmiSeVq6RX6NbWKrZkJyeGmYOXuQe3:MR2GsTlOSb1qEWVKt[VeXbluEVnqjNkG1XWd2b1uVd1uE[3uLR2GsTlOSb4[NfVK7XWibcFmIVo[lNkW{ZkKHb1mJVoCjW2Wo[Fd5[2lzPYWbcXyvR3esTlOSb1qEVXusXleHNGqURXeKSECoXleHNGqU[36YV{G1UGeS[2OFdICQcl2vT2S{T1OSb1qEVXuLR2OTbnJzOX2iW3O1VH6PcHSGfHikN2KWZWdycGRzXlKlXGK3ZmeHNHGYUlWjN3S2Zld6bGqE[3ubS1ZxXmOsO1Oob1qEVXuLR2Gsb2lzPYWbcXyvUGR2fmmZXnyMR3t4R3ew[1mERXeEVXuLR2GtPVOqRXeKR1GLR2GsTlOSc3eKR1GoR2GsTlOZNFuEVXuLR2GsT1mERXeKRXuLR2hx[2lzSkC[NneoT1WXOGlzWoelS3y3ZnmCb2qUb3eme3:oTVOC[1OSb1qEWUGpXkKWOl:ufI[bfXesXmNxL2pzWkCVW2[7Z{KHcmqU[4CMWIOMTVOC[1mCb1qEVXyPXWelcF:rdIOjNnSH[VePcHOJVoCjNkSwTleWdF:4c3eKR1GoR2GsTn[Sc1qEVXuMTVOC[1mCb1qnVX:oTVOC[1OSb1uKR1GoTVGtPVmIWoOkNmWo[Yew[1mERXeEVXyPXWelcF:rdIOjNnOwTkB2elmJXnijS3ysTVe5dGlzWoW[NmW2TVV2enSIbICjcXOoZ1eHcmqURkOiW4i{TVeLcFmIVo[lNkW{ZkKHb2qYVYWLfXt4R3mC[1mERVqnVX:oTVOC[1OSQU1jP4N7NUZ7JnN{cIW[Nni6ZkJ2dHWuWU1jP4N7OkJyOkpjSGGw[1mERXeEVUCMSGGw[1mERXeEV{iyTVWLNXGYfHuiW{WvTViHNWqZToCbXF2oXn16fVmJUkWjcV6wZ316eXGZdHilS3y3ZnmDbmmZVnybNkm6[WODNnGYWkOKS1[2XlODe3OuPXulW15xZ4mDb2qZVniiW4eoT3l5UlOoNFuEVXu3T3mDcmqZVkCiW{WvTVetb3O6Ro[bbVK4Z32XNnGYWkOKS16p[FeXcnJ{ToCbXF2oT3l5UlOqRXeEVXusZ1iLcHSucHylN12oVGOCb3SuSomOR{BsXkKXNGWJTnylcXyt[ECPbHSIWn6jN1qxXmiOc1uVd16EbVGoR2Gsb3OJTnylcXyt[EOO[2CURX:LTFK6XmibdGqZ[IqRWECvToms[2C6RX6NWFWvTVSw[1qJRombXGqxXmilfl:4NFuKR1GoTVFxT1OSb4[MbVKvXmiTNHGYOX6KS3ysZ4mDemqqRoekcUms[GePNFmIUnilS2[vZkOLdGqZUXeMbUiLSGGw[1mERXeEV2K4Z316b3SYUkCkfVF6TVOTNmmZTYeNWEWvXmiTVXOuPXulW15xVUKHNGqY[I[kcXytZ4modF:4NFuKR1GLR2OTe3OuPXulW15xZ4mCPVmE[3ukTFq3XliXbnSJUUmRV3OvT2OCM1mEZ4SOV3OoU3mCb3OJTo[bTG[r[FiOO1SSc3eKRXuLSGGw[1mCb1qNfX:oXX6XdHKIVXeiW{W7XmiLNFmJSkGbXFp2TVebfXJzNHe[Nkm6XmZ6NXOufH[kcWZ{Z32tNGqURYGNe3uPR3mC[1mERVqLTFZyXmiLOWOYOYqbXFpxWX2XN3OucECbV1F6TVOKUlOqRXeKR1GLR2FxT1mERXeKRXyLWHyPSmWtVXeUWXSQWEGLSlmGcF:XSUioXVOKeVqJXnikbmG2TX1yNHSZTnmjNlGoT1eDNXOufH[kcWZ{Z32tNGqXPYCbS1G{TVeDfnSIPYmbWkmxXleCd1mIRnq[XGKtXkJ6fXWXPYCbS1G{TVeDe3OuPXulW15xXEKtb2mEe3e[TFqtZ2iXcHN{Vn[kS1ZxZVeCdFSSc1qEVXyVVmW5SmFyVXe[TG[6ZlZ6fWqZ[ImiXGKtXEKtb2mEe3e[TF5xZkOLcGhzcHu[R4eoXVePbHSIWn6jN1p2XEKtb2mEe3e[TFK6ZkKTNWl{Vn[iW2KoUFOD[3OuWoilW2[7[FZ6e2mZVn:[RUCMR2GsTmKtTmCVV1KoTXl1b3SuSomPR{SqXUJ6fWqXPUGkcYinZ32XN3OucECbW1GPR3esTlOX[FmTWlqHTVFxT1OSb1qMRUCMR2GsTlOUbHe[NlZxXmelenOvcH[iW2KoTVWtU1mE[3mKR{SoTliDfWqZXoCbXHS7TVOCeVmETYCKSV[QVlOD[3OJTo[bTG[r[FZ6dGqIRXeUWl2oWHyXUWSEb3eVNVmoSGGwTlOSb1qMS1KrXWiTcGpzPYmmWkmxXleC[2OWOHeMR1moUHmCb3OJTo[bTG[r[FiO[1mEOHeKbXuoVWV2SVmIRoekcUms[GePNGhzcHu[R1KLWYmDU2RyVXeVcG[OWFOs[2RyTV6E[3uLR2Gsc2mIUnilS2[vZkOLOWhzcHu[R1KLWYmDU2[WfF2KSV[QVlOD[3OJTo[bTG[r[FZ6dGqIRXeUWUSoSGGwTlOSb1qEV3iVVmW5SmFyVXe[TFK6ZkKTNWl{Vn[iW2KoTVWbV2RxNHe[R1m2TlibbHOrVYWKcV63Z32X[nSZToOZN1qt[EOLdHSIWneFVX:LR2GsTlOScGiUSW[UVmOD[2lzSkCbW3S3Z36t[nGYVneKSXyQTVOobVmEOHeLTFK6ZkKTNWl{VoqKR{SoTXmsdFuSNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoT2OKeVSSc3eKRXuLR2Gsc1uEVkK[XFm5TVOGPVmEZ36MV1FwTVOLRmSsVXeMS1K7[Fd6fWqXPYCbS1GoWHt6WVmGcF:KR3eqTVN1[1qJXnikblWoUHmCbVuUb3mKSH:oTXmKdFyqTV6EbVGoR2GsTmGWOVWKRUCMR2GsTlOUbI[kTGKxZkJ2flmGfFqUNGWoTomkdF:6TUeFVX:oTVOC[1OSNFuEVXu3T3mDbXSYcIObR1KsXme5cHSIWXekXG[tZ36s[2quPYmKTFqtXUJ6fWqJUXebclq3ZmODbnJ{TnyZN2[6ZliLcHR{ToClS2WoT3l5UlOqRXeKR1GLTliHNWqZTkWTS2[{XmiTcGWuWkOkcXxxXmOCPVmETV6EbVGoTVOCTlSSc3eKR1GoR2GtSWKWfF[XSWWoVnyLVGSURneKbUSs[H2HfV6EOHmjXGJyZ32LemmCNFuKR1GoTVGs[1mERVqXNHiHWXuW[1mCNFuEVXuLT1OCUlOob1qEVXuwXVePbHSIWn6jN1p2XEKtb2mERl:VNWGoV2V1[1uETYWKR2K4Z32XNnGYWkOkfVGoUHmCbVuURlKVb2GoXViDfXJzVkG[N2KnZWeT[1mGcGSKSUWXWFW4dFmGPWOFVX:oTVOC[1OURXeKR1GLT1eDbmmZVnybNkm6[WZ6dGqIRXeVb{mWTVWtU1mE[3mNbVGsZ1iLemqJWnqlTF2oUHmCbVuURlKVb2GoXViDfXJzVkG[N2KnZWeT[1mGcGSKSUWRWlODU2[WfF2MV1KRWXdxT1OSb1qEV3ioXUKHNGqY[I[kcnynZWeT[1mGcGSKSUWXWFW4[2GWOVWKS1K4Z316b3SYUkCZNnysXVODTmSqRV6E[3uLR2GsTluHUl[VSW[FWlOD[3OJTo[bTG[r[FZ6dGqIRXeTcFqRWGOD[1mqOHulcV[6UlN1bWlzPYmbWklyZ325[nOuWkOkcXxxXmeCUlOob1qEVXuLR2[lTWKXTl[KS1KrXWiTcGpzPYmmWkmxXleC[2SsPWWKSXyQTVOobVmEOHeLTFK6ZkKTNWl{VoqKR{SoTXmsdFuSNFuEVXuLR2GsdF:6TUeFVX:PR3mC[1mERVqNfX:oXX6XdHKIVXebS2[{XmiTcFmJSkGbXFp2TVebenOqRombW2KxZ32XbnSJWXelXFq{Z4mCdVy4NFuKR1GoTVGsb3OZWnykcnyGXme5cHSIWmObW2KxZ32XbnSERUmKRUCMTVOC[1mCb1qKb2KHWFWXWWKURleWb{mPTVeCbVyqVkK[XFlxUHmLeHSJWom[cUmoTV[lTWKXTl[KS1K6XmiHNWqZUkCZN1Kp[Fep[1mGcF:KR3ePR3esTlmERXeKRXyVVmW5SmFyVXe[TFqtZ2iXcHN{Vn[kS1ZxZVeC[2KtTmCVV1KoTXl1b3SuSomPR{SqXUJ6fWqXPUGkcYinZ32XN3OucECbW1GoWkCpSmWsWXe[S{m4[FetenKvUneKSIdsTVOkclSSc1qEVXuxU4mKO1SSc3eKR1GoR2FxT1mERXeKRXu3T3mDbXSYcIObR1JyZ1eTbHSIWXekXG[tZ32tcHO6Rn2jN1mo[Fite2qURYGNe{CMR2Gsb3OZWnykcnyXZ1eTbHSIWlS[XGKtXkJ6fXWURUmKR1qXWVWTRm[GWXe[R1m2TlibbHOrVYWKcUFx[GiLbXJzRXeWNG[WTVeDNHWZRny[SECvXUKHNGqY[I[kcnuvTV[lTWKXTl[KS1KrXWiTcGpzPYmmWkmxXleC[2OXUXeVb{mWTVV2WmSGe3eSWUWGTVeDe3OuPXulW15xXEKtb2mERlqWfVKQWmW5UVmrd3eFVX:LR2OTfHSYWommWm[4XleHNGqXRomjNmJyXUOS[1mFNHeKcG[SVlWHWWKURneKbUSs[H2HfV6EOHmjXGJyZ32LemmERmSTWmGoXViTOXOIWneRV3S4Z316b3SYUkCLfVKZV1WXV2KURnekTFq3XliXbnSHPYCbS1GoV2[O[2SsPWWKSUWXWFW4bV:6RV6E[3uLSGGwTlOUPIGKSVpyZWe5b3GYOX6KTFZyXmiLdGqZUXebcUm6TViPOXKuUn:kcUm2ZWixbHSIcI[jbVKrZmiO[3OISn6bXF2oT3l5UlOoNFuKR1GLR2N5dVmI[HylR1KrZkK5d2qYUkCiW{m2TVePeHO6Roe[W3StZ4mDcXOuPYSKSUGpXkKXeXSIPHeSNkm6XmOCdVy4NFuKR1GoTVGsb2lzNYqWS1[vXmiPTnSIWoSkfVF6TVVybGpzWU[QcXSt[FVyemqIWoOMR3SrZmiOenOISn6bV3OxUGR2cmqZVlSjNoi{XmePNHGYPYWMR3u1VH25emmYVX:MV{BsXkKXNGOZVnyjXF2wT2S{UlOqRXeEVXuPR3esTly6c3ebNmZxTVetb3O6Ro[bbVK7Xme5cGl{VnybR1KrZmiO[3OISn6bXF2o[EKtNHGERoqlS{m6XmODbnJzVnykfVKuZ316eFmGNWWlXFqqZomDbnJzOX2iW3OoT3l5UlOob1qLS161Z4mCPVmEVkK[XFm4UGR2cmqZVlSjXF6SXWelcHO6[4CQe{CMR2Gsb2lzNYqKSECoTXmkbVyvUkCkcEm6XmiDd2mYUnyMR1m{TXm4[1mqZ4OLfVm{TVOTbnKZUYCNbVmvTXq{UlOob1qLS161Z4mCPVmE[3u[NkG7VGRxclq6b3eRfVGvUGSGclmFc3eLS161Z4q{UlOob1qNfX:o[FiLbHKvUn2jN1q1TViTelmISomkcVZ2TVebenOuNHeMbUiPR3esTlqIUoSkNF[6Z3mCPVmIWkSkS4i3XleWc1mqe3mNR1K7[FiL[nOuWoejS1[rXmOobVq6TYOKR1mqUFOCb2lzNYqMV3t4SGGwTlOSNFuEVXu3T3mDcmqZVXekS1[vXmetb2h{UkCjN1qtXEKtb1mISoOkcW[pXlis[3N{cIW[Nni6ZkJ2dHWuWnuKS161Z4mDe2mY[HykfVGwZ1iLcHSuWoWlR1Ks[GiDd3GYUoClS2[7T2OCdVy4NFuEVXusXUJyfmOYOVWSbVF6TVeHfXOuSkWMR3t4SGGwTlOYXo[kcW[pXUKo[1uEVkK[XFlyTVeHflmEVnqjXF6LZnms[3W4NFuEVXuLTlePeHNxcIWTSVqjXGOCPVmEVnqjXF6LZnlxL2pzWkCWS1[vXmWtb1uEb4WLNUivUHmTbnKZUlqjbUBsXkKXNGV{Vo[kcW[LXlOodF:4NFuEVXx6SGGw[1mERXeFVX:LR2N5dVmITkGiW4isTVeteXNzWomlR1K5[GeXfXWURnqjXF2oT3l5UlOob1qLTGqpZliO[2CURnikclqp[WOodF:4NFuEVXyuZkOLcGmYUn:KR3esXUJyfmGZTomKS1[7TVOTbnKZUn[[NkmsXmOs[3W4NFuEVXuLUImw[3GYXXe[NkG7TVeHd3OuWnibTHuoXmipdHN{VXeiW{SoZmiTNXOuTo[KTGKpXX25cFmJVn:bW{SoZX6XeHOERoClR1GyUIdxT1OSb1qiW2moT1OHdHKtPXikclqp[WOob2lzNYqZNl63XleWd1mEVnqjXF6LZnuTR1uUb3eme{CMR2GsTlOUVnu[XGKpTVRx[2qZbIejS{msXmOobWi6TYOKR2KrZmiP[mlzPXubV3t4SGGwTlOSb1qiW2moT1OpbnJ{WoWlR3esXleHNGmUb{mRWFmxTVO[cVmIcIqkNmZxT1OTbnKZUmG[W3StZ{CtNGqYNYqYfWKsXWiTbGe7RnSZV3uxTVi{UlOob1qEVXuLTleHfXOqRXeRV1KpZ36LbHWU[3ubS1ZxXW[{fGiUe3eKbXOqUHmTbnKZUmG[W3StZ{CtNGqYNYqYfWKsXWiTbGe7RnSZV{BsXkKXNGOYVnyjcmKxXn2tcHOq[4CNbVmvTXm4[1qIVnilS1[jUVZxd1mETX6[NkG7TomKdF:4NFuEVXuLR2Gsb3SuSoOkNYSlTVRx[1mq[3mNcXy1Z1e5emqIWX:KbYeqUFOCb2mZTomMV{SqT2OKO1SSc1qEVXuL[mFxT1OSb1qnVUCMR2GtPVSSc1qEV2K5[GeXfXWWcIWkNm[6[FWPUmW6RUmKR3OvU4dxT1OScICbbVGwXUJ6NXKvVX:LTGqpZliOdGCrRYCFVX:LR2Gsb3OZWnykcnyLZn6PcHOvVlSVWl2oVGOCbWOWOWSTWlqWTVWtU2[GPHe[R1m2TlibbHOrVYWKcUFx[GiLbXJzRXeMS1K7[Fd6fWqXPYCbS1G{TVeDfWqZSkGbXF5xXEODbHSIbHeNR1KoZ1eHcmqXPYCbS1G{TVeDNHWZRny[R3uoWnuHUW[WWmSKR1m2SGGwTlOSb1qiW{G4Zld6b2qU[3mNR1m{TVOTNmmYfIqMV1G2TVOKO1mrd16E[3uLSGGwTlOSNFuEVXu3T3mDbXSYcIObR1KsXme5cHSIWXekXG[tZ36s[2lzNYqKR3:3SGGwTlOUVoilW2[6[WWTcHKIWkCbWV6PWYmCPVmETV6E[3uLSGGwTlOScFWTWYiHWlWW[2KtTmCVV1KoTXl1b3SuSomPR{SqZmiTNXOuTo[[R1KZV1WXV2KURX:FVX:LR2GsTmFxPV:SNF[WT1eDe2mY[HyZNnysXVO4[1pyPH6NR1KoZ{OTenOuWn[iW2KoT2ODU2RyVXeUWUSoT1OK[1yqRXu[NkG7TVN1[1mqb4CQfVl4SGGwTlOSb1qFVX:LR2GsTlSSc1qEV{iyTViHNWqZTkWKS2q3Z3mDfWqZ[ImiXGKtTVeteVmIcIW[W15xZWibcFmJUkCjN1qtZ4mCdVy4NFuEVXusZ2iXcHOvcFWbW4it[FeXTnKsSnqlS3xzXm[PNHJ{TnykfVGoVGOCbVSSc1qEVUCMR2GsTmKGWl2TWmKHTVWbV2RxNHe[R1m2TlibbHOrVYWKcUFx[GiLbXJzRXeXNHiHWXuW[2mJUkCjN1qtXEKtb2mERlqVbVGwTXmCeVmEVkK[XFm5TVN1[1mqb{eFVX:LR2GsUlOob1qKboOPR3esTlSSc3eKR1GoR2OTbnJzOYWbW15xZWd6eVmFNHeVW1[vXmSwOmpzWkCWNny2XkK5cHSIPYWMR3SrZkOLcFx{TnykNklyZ32PcFq6b4SRcXSt[FWPenKuOXy[N2KxZkJ1c1pzUo[kcW[n[EOLdHSIWX6MWIOPR3mC[1mERVqFVX:oTVOC[1OZVommV1J4SGGw[1mERXeEVXuPR3mC[1mERVqEV2KrZkJ2eWqYUkCiW{m2UGR2fHSYWommV3eqWUGTRmWtVXeXSlqDWHyPRmFyVlqVNESqT2S{UlOoNFuKR1GoTVGsTlqIUo[jcUWtXUOTdHJzOISRclZyXmiLOVuEVoilW2[6[WWteXNzWomlSlqt[EOLdHSIWYCQfVGoSGGwTlOScICbbVGwTliHNWqZTkWUW{W7XmiLNGFxNWSKWECqTXms[1qIUo[jcUWtXUOTdHJzOISRclZyXmiLOVuEVoilW2[6[WWteXNzWomlSV6PWYmsO1mERXeKR1GoTVGsTlSSc16E[3uLR2OTbnJzOYWbW15xZWd6eVyVOYilW2[6[WOob3OZWnykcnyGXme5cHSIWmObXHS6ZWiTcFuVd16E[3uLR2OTbnJzOYWbW15xZWd6eVyVOYilW2[6[WOob3OZWnykcnyGXme5cHSIWmObW2KxZ32XbnSEb{eFVX:LR2Gsb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1qJSkGbXFp2VleXd2qZVnySNEGVT2S{UlOob1qEV2KrZkJ2eWqYUkCiW{m2UGR2fHSYWommV3esZ2iXcHOvcFWbW4it[FeXTnKsSnqlS3xzXm[PNHJ{TnykfXt4SGGwUlOob1qEV2KrZkJ2eWqYUkCiW{m2UGR2fHSYWommV3esZ2iXcHOvcG[kS2Kp[FeXSGmZVnybNkm6[WOsO1mERXeKRUCMR2GsTlqIUo[jcUWtXUOTdHJzOISRclZyXmiLOVuEVoilW2[6[W[Xe2qISkCbWlK6ZkKTNWl{VYCQfVGPR3dxT1mERXeKRXx6TVePbHSIUn:KR3iH[VePcHOJVoCjNkSoTleWdFmJd16EbVGoTVOCTlOUVnqjNkW2XmePNHGYPYWNWEW5[GeXfXWU[3mWb{mOWFWLRmFxd3mMWIOPR3mC[1mERVqEXGKwZ316N1mEVnyQe{CMTVOC[1mCcEmFVX:oTVOC[1OSNFuKR1GoTVGsb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1msUmCVWUGLWlOKdF:4NFuKR1GoTVGsUlOqRXeKR1GLJku:
|
1 |
+
ZUp5Pou{PkJxPjKZNl6wXmePdmSIcHqbW{WrXmF:QTJ8d{p{OUZ7JlSSc1qEVXyxXnmCc1mWNXibNmV3U32pcHKJRnykbXevZmiTNXOuTo[NNny2Xn15cluUNDubNmZxWX2XcmSuSoSbV3exVGRxcnF{TkCjS4SpZUOKNFq6b3eme{CMR2GsTlOUVoCjcWq3TVRx[2SYSn6bWH93ZVeXd3OIWomMR3S1[FiXfWmuPI[iW{WuZomkdFyVOX6bXGKUXmelTnKuXo[MR3t4SGGwTlOSb1qLTGqpZ3qCeGCtPX6bXGKVXmiOc1uUNDu[W2KsWkKHfXKucIWbfXesZWd2cXK6NDujW2[7Z{KHcmqUb{eEVUCMR2GsTlOUVkK[XFm4UGR2[nOuWnuMR3OyUImwenGYOXubXHevT2S{UlOob1qEVXy6XmiTNXOuOHebcV[{Z{KWO1SSc1qEVXx6TVeXd3NzWXeme{CMR2GsTlOZTnylTG[6ZnmDNHOvWnyQe{CMR2GsTn[SNFuEVXt:Jku{PkJ1PjKbS{l{Zn25emmYVlKjcWKLZn6PNGmYfINjP4N7OUh5PjKE[3:LR2N5dVmIToCjcWGoXleHNGmURYGNe3:oTVOCTlOUVkK[XFm4W4mlNXNzWomjcV[1XmOl[FmFNHeLfXN4R3mC[1mERXeEV2JzXWiKe2e6[Ie[XF67[EJ6fWqE[HSKSECoTomkO1OqRXeKR1GoR2OTNmmZTYeYfXSsZkOleXKIPXibSkmxXlOl[FmFNHeLTGqpZ3qKO1OqRXeKR1GoR2OTNmmZTYeYfXSuZWe5cFpyNHeRV1GvZmiTNXOuTo[LfoOMTVOC[1mERVqLTGqpZ3qDZlpzUnilR3SlTVRx[1pzNUClXFqqZomkO1OqRXeKR1GoR2OTNmmZTYeYfXS4Z316b1pyNHeRV1GvZmeHcmqYOUCjfXN4R3mC[1mERXeKR1GoR3mC[1mERXeEV2JyZ32s[2CURoe[XFq7XmZ6NXOue3:VW1[vXmSwOmpzWkCWN2K3Z32XSHJzOX2iW3OwTX6lcGmqPUGjcl6tXUOXfWqUPXm[XF6tXEOXfXKETYOKSFGxT2S{T1mERXeKR1GLTliXfXKERUmKR2JyZ32tZlpzbI[kN2GvXGN1b3SZToCYfXS4XWiTc1pyNEeEbVGoTVOC[1OUVkGkcYeoVGODNHOucISMR2JyZ324d1mEZ4[LfXt4R3mC[1mERXeEV2JzXWiKe2e6[IqiXGKtTkFx[2CURXulXFq{U4ew[1mERXeKRXus[H2HfV2Hd36iXFGvXGOCPVmEVn[WNG[UWnuXV2e6[GSTWlqYVm[L[mGWVlWWbXSlU4ew[1mCb1pjP4N7NUZ7JmpzWkCWcW[vWH2HeGqSQU1jP4N7N{Z7JlSSc1qEXFqt[FiXfXKqRX6iN1pxZle1bHF{TUCLfoOPR3esTjJ8d{pyNkpjZld6bGqGcIWbcUh:Jku{PkF2OkpjSGGw[1mERXeKR1GoTVOC[1mERXulcV[6UWNxL2h{TnykN1K3Zn6PcFmFNHeLTGqpZ3qGeGCtRo[kN2KUXmiHNWqZUkCMR3Sw[FiTe1:qPI[lN3R{UH2HfXSIcI[NcUWt[FN6d3GYUnyjcl6tUGePc2qYUoKLfYeoZn6Xd3KEe3eLTGqpZ3qCdF:4NFuKR1GoTVOC[1mERXeKR1GoJku{PkJxPjK[NnitXUK1V2qZUoejNkW7XmF:QTJ8d{pzPENzPjKFVX:oTVOC[1mERXeKR1GoTVGtdGqqRX:LTGqpZ3qCdFmJd16EbVGoTVOC[1mERXeKR1GoR2GsUlOqRXeKR1GoTVOC[1mERXeEVXus[H2HfV26NDuZN1qtXkCteWquPISRcV63XleW[2CURoCjcmJzXWe4c3N{WnmkN2K6T1OTNmmZTYiYflKlUFOCe1yERXulcV[6UVOsdF:4NFuKR1GoTVOC[1mERXeKR1GLR2etcVuERoCjcEmpZ36LbHWU[3ulcV[6UYlxL2h{TnybNHy2Xn15eGCuUo[bS2W{TVeHfXOuSkWMSFW4UFSKe1yFUYeNSGG4T2Os[1uURkeFVX:oTVOC[1mERXeKR1GoTVGsTlOSNFuKR1GoTVOC[1mERXeKR1GLR2GtdGqqRX:[NklyZn6Sc1qJXnikblWxTVR1PVmFUYCKTIOPR3mC[1mERXeKR1GoTVOC[1OSb1qEVUCMTVOC[1mERXeKR1GoTVOCTlOSb1qNfUioWVeHfXNzWXelS3itTVeTbHSIWV6EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVnu[XGKtTVRx[3N{VomZN1qtZ1e5bGlzWX:LfUSvUFOCcly6Z4OKTGK6ZWdxc1qJXnikbl[jUWZxdFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mEVkK[XFm7UGR2[nOuWn6UW{WuZolxL2qISkCbV1F6TVVybGpzWU[QcXitZliDcHOq[36[Nkm6XmOkdFyVOX2jN1q1XWiTSWmZVnyMR2KsXWiTcFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1y6PHeWS1[6Z{KW[3SIbHyKS{WpZmeWUlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsZn2HeGqURUmKTGK6ZWdxc1qJXnikbl[jUXxxdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOCely6RmG[XFq7XmODNHGIWXe[Nkm1Z1eHeXWSNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzNYe[W{V2TVRx[3GZUoqbXGGwTlibbHOrSnKONUCxTVR5[3SJToCjV3es[H2HfV2Xd4qZV3uoU3mCclq7d16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[3GYXXeMR2JzXWiKflyVOX[kcW[vV2d2cXK6NDu[NkmsXmOCPWCURYiOR3uo[YdxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoR2OTNmmZTYqNWEWnZ32XcmOYOX2jfUBsZmeXfnNzSn6bV1F6TVOTNmmZTYqNWEWnXImocmRxd36MWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKTECoXme5fmqURoCbbVGwTlibbHOrUYSRcEm6XmelTnKuXo[NWEWrZkKTcFmFNEmKSFm4T2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[FqVb2qRXEGXVWJyTlKTSW[nWFWtSGKWOWSTWkmHW1[DTmWsWlWLfXuxU4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Go[mODcHKJUnyKS3yuTVOob3SuSomOfUBsXEOLcGpxcIWbcUi1VH2PemqIWXeRWECoUYqCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Gs[H2HfV26NDukcV[xZ{KXU3J{VoC[NmWwUWSCe1yERXulcV[6UYlxL2hyPH:LNHyQVnt6[m[XRliWb1[GVmZ6U2RyVn[SWV6WV2[bSlq6b4CQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOTNmmZTYqNWEWnZ32XcmOYOX2jfUBsXleHNGqURUmKR2JzXWiKflyVOX[ZfXevWH16NFmISnqlS3xzXWiTcGqERkWbXGGvT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhx[2qYfIqbV1KxXnmCc1qJXnikbl21VHx6fWqY[FqjcWq3UGR2bnJzVnyKSEB6TVSSe1uURkeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERVqKR2JzXWiKflyVOYm[W3y7XmV2enSIcHqbV3e5UVSCd1mEVkK[XFm7UGR2[mi6[36TSUmPVWWtU1mGVmCTWl2oWHt6WVmGNVKXSV6KTomsdF:6RXeKR1GoTVOCUlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVhxUlOqRXeKR1GoTVOC[1mERXeEVXuLR2FxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERkmKS2[{Z{KW[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GLTlibbHOrUYSRclqpZWiPcGSuPUCiW16tT1SGe12Ee3eLTGqpZ3qOeGCtPX[MR3SHWXyLVGWtPWOTWXSnVUCpSmFxeH[Tb1[LWFOkdFuVd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERVqEVXuPR3mC[1mERXeKR1GoTVOC[1OScEmKS2[{Z{KW[3GYXX:KR2JzXWiKflyVOX[kcW[vV2d2cXK6NDu[NkmsXmOCPWCURUWOR1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeLTGqpZ3qOeGCvTniiXF6tWH16NHGYUnyMSFW4UVO4[1qJXnikbl21VHx6[luE[F[WcFqRWXx6SWRy[F:VSUmDVlZ6TmKHPV:VNWKnVnt6WmSsVX6MV3t4SGGw[1mERXeKR1GoTVOC[1mERXeKR1Go[mODcHKJUnyKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1GLTlibbHOrUYSRcEm6XmelTnKuXo[NWEWrZkKTcFmFNEmKR{C5U4dxT1mERXeKR1GoTVOC[1mERXeKR1GoTVGsb3SuSomOfUBsZ32HdHNzWl:jN2KxXUKWc12VRYeNR1Gs[H2HfV26NDuZNUiwTkCXV2WsPWOZNVqHVkF6SGOGWlSUNUmIVWWtUVq6b4CQe{CMTVOC[1mERXeKR1GoTVOCTlOZNF6EbVGoTVOC[1mERXeKR1GoR2GsUlOqRXeKR1GoTVOC[1mERXeEXECoXme5fmqURkeFVX:oTVOC[1mERXeKR1GoTVGsTlqJXnikbl21VH6LbHGZUnyVcUlxZWePcFuFSYeOR4eoTlibbHOrUYSRcEmnT1OlSmWtTmCWcEmUVmWl[mFxbF[SNISnVnuHTmSEZ4CMWIOPR3mC[1mERXeKR1GoTVOC[1OZNF6EbVGoTVOCTlOSQU1jP4N7NUZ7JmWIPYqlSlqtZ2iXcHN{VU1jP4N7OUN3OEpjSGGw[1mERXeKR1GoTVetcVuERoCkNUmpZ36LbHWU[3ulcV[6UlOs[1qqXXe[NklyZn6Sc1qJXnikbmGxTVR1[12ERYCKTIOPR3mC[1mERXeKR1GoTVOC[1mEPI[KS2q3Z31ybHSERYSNWESo[FeXfnSFSUm[V2pxXmiPNF2rNXmKS2ZxXYl1UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKe1mFNHe[XFq6XWisc1uVd16EbVGoTVOC[1mERXeKR1GoTVilc3GYfHyMR1K{ZWiPNFuEVoWNR1Gs[Hms[2CURny[W16wT1OTNmmZTUCMV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3SuSomOSoSlTVRx[1mqVoWRV2JzTXq{UlOqRXeKR1GoTVOC[1mERXeKTECoTVOC[1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV2ERUmKS3y1Z1e5emqIWX:LfWmvUFOCb3SuSomOR3t4SGGw[1mERXeKR1GoTVOC[1mERXu[Nkm2[FeXeXSHVkWkS2WoVGOCbWFzPYWlS2[2[FNyNHWZRnyQbVKpZ1iDd3GYUnilS3y3Znl6OFyZ[EOlfUGuZkOLeFyZWomjS2[2XUJ6b2qYVnOkcIi2TXq{UlOqRXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERnyjTF6tTVi{UlOqRXeKR1GoTVOC[1mERXeKR2JzXWiKe1mFNHeLTGqpZ3qSO1SSc3eKR1GoTVOC[1mERXeKR1GsXUJ6eXSIWoWlSmJ2Z1eW[2CURXmSNkm2[FeXeXSENUCmXFKtU3mDNGqZbECNN3i1Zl[5fWiIOHmQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKR1GoTVFxT1mERXeKR1GoTVODdGqq[3eiXF6nZn6Xd3KE[3ulcV[6UYms[1uURkeFVX:oTVOC[1mERXeKRXuLTlibbHOrUXeRV1KPXWelcF:rdH6bXGKV[Fd6fWqWUo[jcWqxXomobXRzWnmNN2[2Z{KXbnSZTnyNNlqpZ{KX[nSZToOKbYeoUVOsO1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV26RUmKTF5xZ3x6fWqZRoO[W16tT1OkenGYOXubXHe2Z1epe1xzSnujW3y2Tom4[1q6Z4OKR2JzXWiKfluVd16EbVGoTVOC[1mERXeKR1GoTVOTNmmZTYqKSECoZ{OTfWh{TnykS4ipXUKWc1q6PYCjcWKt[VN2e3GJRY[LfYeoTomkd1mEVkK[XFm7T2S{UlOqRXeKR1GoTVOC[3[SNFuKR1GoTVOCUlOqRXeKR1GoTVOC[1y6PHekS1[6Z{KW[3SIbHyKS3Sx[H2XeVmHWmOVRUCMTVOC[1mERXeKR1Gs[H2HfV2qRUmKTFKpZ36PcGh{WomjR3es[H2HfV2qb{eFVX:oTVOC[1mERXeKS3yuT1OCbHGZUoqbXGGwTlibbHOrTnKLN16rZVeXeGqU[HSMV1J5[lOCc1qJXnikblqjTkOPbnGIWoSbV3SlTVOGPVmE[H:lTGK4Toms[1uURkeKRUCMTVOC[1mERXeKR1GoTVOC[3OuWkClXFq2TVebbHKJUnyQe{CMTVOC[1mERXeKR1J6SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDcHWJVom[W15xTVepenN{VXe[W{WsTViDbHSI[{[FVX:oTVOC[1mERXeKR2KwZkOPNFmFNHeLTGqpZ3qLZlpzbI[kN2GvXGS{UlOqRXeKR1GoTVOC[1qJRnilS3eoVGODdHN{UnylR3es[H2HfV2td36kS1ZxZVOl[FuURT:KR2JzXWiKfWe6[Ie[XGKwTkFx[1:qRX6NfXN4SGGw[1mERXeKRUCMTVOC[1mERXeKR1G3UImDenOIWoWKS1WoZ{J6bnFzWkCKS163Zn12cGl{VoCjNkSoZkJ1[3OIPYmlR1F1UVFxT1mERXeKR1GoTVOCb2qZTomjcUioVGODeXSYfIOQe{CMTVOC[1mERXeKR1GsXmiLfXN{VomKSECoZn6Xd3KFd16EbVGoTVOC[1mERXeLS2q4TVRx[2GIXoqjNl6zZkODcHKq[3uiS{m7[FO4[1:FRYOKR2KtZ36LeXK6e3eLS2[6Z36PNHOqe3ePV3t4SGGw[1mERXeKR1GoTVetcVuERXubclGoVGRxPVmIXnijTF6tTVOs[3W4NFuKR1GoTVOC[1mERXeKR1GoZ32XNHSZToWKS2qpZliPcF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKRUCMTVOC[1mERXeKR1KxXnmCc1mYcIqZNkVyZle4c1qJXnikbmmxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1Gs[H2HfV6qRUmKR1qXZ{KXfVyWSn6bW{VxU3mCbVyqVkK[XFlzUHmLZ3OtfIWKboOPR3mC[1mERXeKR1Go[mFxT1mERXeKR1GPR3mC[1mERXeKR1GoUIl5[3NzWoWbR1JxZVeW[3OuWoilW2[7[FFxT1mERXeKR1GoTVODdGqqRX:LTGqpZ3qW[2CVNHeLN1K3Z{OScluURkeFVX:oTVOC[1mERXeKR1GoTVODcXOJWkCkfXesXn6Cd1mETmGVNV6WTVOTe2mZVn:KSXiWWl[Cel2UOIiZTFqkZnmKdF:4NFuKR1GoTVOC[1mERXeKR1GoZWe[[1uESoCkNUm2[Ge5d1uEVkK[XFlzT2Os[3W4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mIXoelXGK7T1OTcXOEe3eLTGqpZ3q[dF:4NFuKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqV1d6fnSFc3eLS3i3Z{OTZ3OtfIWKbXt4SGGw[1mERXeKR1GoTVOC[1mERn2kTGZxZ4mob2qvRYOKR1qUXmebcHOuWomQbVGs[H2HfV1yfImZS{SqT2S{UlOqRXeKR1GoTVOC[1mERXeKS2q4[GiTfluEVn2kR4eoTlePenKvVnyjcmKW[WiDcFuVd16EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1msUo[jcmKtZn6SeHKIWoWbN2KwU3mCbVyqRoqlTFq{Xmd1c1qJXnikblGxTVN1bWiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqVUJ6eXKuWnqlS3y3Znqw[2lzfI[kNm[kZ3y5eWiJTnOjbVmxU4dxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1Gs[H2HfV2Eb{eFVX:oTVOC[1mERXeKTECPR3mC[1mERXeKR1GoXme5fmqYcH2KR3es[H2HfV6URUmRV1GvXkKXNFq6b3eme{CMTVOC[1mERXeKR1GoTVOC[1qJSkGbXFp2TVRx[1q6Z{eFVX:oTVOC[1mERXeKR1GoTVODdGqqRX:iXF67XmiSc1qJXnikblqjTkOHNWqZTkWLNUCxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qJSkGbXFp2TVRx[1q7PH6NbWJzXWiKfWe6[IilW2[6[WOl[F:4NFuKR1GoTVOC[1mERXeKR1Go[mFxT1mERXeKR1GoTVOC[1mERXebclJy[FiOc1qIXoeNR1GqVkCXWVmJd3ukS1ZxZVhyO1qJSkGbXFp2[mODTW[HVmGNflW2UW[5fWiIOHmMWIOPR3mC[1mERXeKR1GoTVOC[1mIcH2KR3epZWiP[nKvWoOjR3es[H2HfV6qb4CKTIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KuZ1iXNHO6[3ubclG{TVOTNmmZTUKMWIOPR3mC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoTVebe3SZVoqMR2KuZ1O4[1msbI[kN2F3TVOTc3J{UkCZTFqkZnmKdF:4NFuKR1GoTVOC[1mERXeKR1GoXn6DNXSJUX:LS2q4UFOCbWFzPYWjcW[r[FetenKrc3e[Noi3Z{KXZ3OtfIWZTFqkZnmKdF:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mCNFuKR1GoTVOC[1mERXukcW[7[Ge5NFmFNHeLfXN4TVFxT1mERXeKR1GoTVODN3GIcIObV3epXn2Xemqq[3ubclGxT2ODO1SSc3eKR1GoTVOC[1mERXeKR1G3UImDfWqYUnyiXGqtTViTc2qURombXF5yZliTflmIPX2KTGKwXmODfWqZSkGbXF5xSGGw[1mERXeKR1GoTVOC[1mERXukcW[7[Ge5NFmEOEmKS2qvXmiTfluEVn2kR4eoUWSKOFuVd16EbVGoTVOC[1mERXenVUCMTVOC[1mERV6EbVGoTVOC[1mERXeNfUioXUK5enNzWXelS3itTViPemlzeHylR1KrZkJ2eWqYUkCiW{m2U3dxT1mERXeKR1GoTVODcWlzfI[kNmWwTlebe1uVd16EbVGoTVOC[1SSc3eKR1GoTVOC[1mEPI[KTF64ZletNFmJVn:bV1K6XmiPNXKJVXeiS2[pXleXfVmIXomjNkCo[FepcFmIUo[jcmKtZn6SUlOqRXeKR1GoTVOC[1qJTnykN2[{[FOCPVmIWkSkS4i3XleWc1mtfImZS{WkZ3y5eVmqe3eLTFqtZ{OXd3SEe3eObXt4SGGw[1mERXeKRUCMTVOC[1mERXeKR1GsZVeXbGqIWomKSECoZWiPfmqZVX:LTFqtZ{OXd3SHd4eZV3uoVImCb3OuWoqlW4hxW4qD[FmFc3eLfXN4SGGw[1mERXeKR1GoTVOTbnJzOUCbW{VxTVRx[3GZUoqbXGGwTliLcHN{WoOlSoO5XGOs[2C6RXukcW[7[Ge5NGe7SnSKSH:oTomkO1SSc3eKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXulcV[6UWOCPVmIOXylfVK7[FeTSHKISoqkfXexU4dxT1mERXeKR1GoTVOCb3SuSomOV{BsZVeXbGqIWomKSECoTlepcGmYVnykboOPR3mC[1mERXeKR1GoTlibbHOrSYSRcV63Zn6TcHKvVXeRV1GsXUJ6eXSIWoWlSIOPR3mC[1mERXeKR1GoSGGw[1mERXeKR1GoTVN5elmGbHijcWK{XmODbnGJWoWiNm[sTViTfWmYOYqbcW[6TVetcVmIOXybW2KtXlFxT1mERXeKR1GoTVODdGqq[3ekN2K6Z1d6fluJUkCkcmK3Zld6N2qZTX:LTGqpZ3qGeGCubHy[W2KtZ3msd1mE[ECkcV[2Z{KbcHOqNXyjcV63XleteWq7c3e[NnhyZn21cGqEZ4CKR1V6VGODcWmYfIqbV1GxTVi{UlOqRXeKR1GoTVOC[1mERXeKR2K4XWiLfmqYVXeRV1GvToq{UlOqRXeKR1GoTVOC[1mERXeKR2K{XmebNFmFNHeLTGqpZ3qGeGCuUo[jcmKtZn6SO1SSc3eKR1GoTVOC[1mERXeKR1GPR3mC[1mERXeKR1GoTVOC[1mJ[H:iW4itT1ODNHOvWnyKR3uo[YdxT1mERXeKR1GoTVOC[1mERXeKR1GoTVOTe3J{UXeRV1K7[FiLe3J{UX:LS4itXn6Sd1mETnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3GYXX:KR2K4ZkOO[2CVNEmKS2qpZliPcFmEb3eme{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVODfWqZVkGkcUSoTlibbHOrSUeFVX:oTVOC[1mERXeKR1GoTVOC[1mERXenVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR2KrZViXeXF{UoCmcWWoVGODfnSYToqlTFmwTle5cGqvVYOKSFG{TVOTe3J{UYCQe{CMTVOC[1mERXeKR1GoTVOC[1mERXeKR2K4ZkOO[1u7NHekN2K6ZleXeVuETnOkcIi2TXmsO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1qIfHybcmGoVGODfnSYToqlTFmwTle5cGqvVYOKR2K4ZkOOdF:4NFuKR1GoTVOC[1mERXeKR1GoTVOC[1mCNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mEVoejN12oVGODfnSJToejN12wTlePc3SYOYKkNnx3XmO4[1q7d36MWIOPR3mC[1mERXeKR1GoTVOC[1mERXeKR1KxXnmo[1qJRo[kfVGpVGRx[2quSoOkNmWoT2ODO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[1mERXeKR2KrZViXeXF{UoCmcWWoVGODfnSYToqlTFmwTlePc3SYOYKkNnx3XmO4[12Ee3eLTFK3Z4msO1SSc3eKR1GoTVOC[1mERXeKR1GoTVOC[3[SNFuKR1GoTVOC[1mERXeKR1GoTVOC[1mEVnqiTG[2ZUOPdHWuWXeRV1KwXmipb2qYUX:LS16w[Gd2dnNzcE[bV3t4SGGw[1mERXeKR1GoTVOC[1mERXeKR1GoSGGw[1mERXeKR1GoTVOC[1mERXeKR1GoZWe[c1mEVnqiTG[2ZUOPdHWuWXeRWECoUVOCdFmJd16EbVGoTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoXX6LcGmYd{eFVX:oTVOC[1mERXeKR1GoTVOC[1mERXenVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKRUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR2K4XWiLfmqYVXeNbkCoZ{OXbXN{VomMR2K{XmebNFyERYeNR1GsXUKpNXKueIqiXICtT2S{UlOqRXeKR1GoTVOC[1mERXeKR1GoTVOCb3KIWn2lR1F6TViPNWmvUkCkbXesZleXcXSEe3eLS16w[Gd2dnNzcE[bV1GzTViPNHOufHyjbXeqXFiLZ3KqTYCMWIOPR3mC[1mERXeKR1GoTVOC[1mJNF6EbVGoTVOC[1mERXeKR1GoTVFxT1mERXeKR1GoTVOC[1mERXeLTGqpZ3qGeGCuUo[jcmKtZn6S[2CURXukS1[6Z{KXb1:4NFuKR1GoTVOC[1mERkmFVX:oTVOC[1mERXeKRU1:Jku{PkF3PjKkN3y2XUKpfXJzOYCmcWV:Jku{Pkh2O{J7JlSSc3eKR1GoR2FxT1SSc3eKR1GoR2N5dVmGTkGiW4isZWd2clmJSkGbXFqxXmiO[2quPYmKTF52Zn2Pc3OuPYWiXICp[FetenKqRnq[XGKtXkJ6fXWURkKiW2Z{TVeHeWqERoekcUms[GePNHO6RnubXGKpZWe4[1uqPF6E[{CMR2GseluqRn6bXGJxZWd2clmIcHukfVK3XnmDe3OuWkKiW2Z{TVePbHSIWn6jN1qxXmiO[1uqPF6EbVGoR2Gsb3OJTnylcXyt[EOO[2CURXulcV[6UVNxL2pzWkCWTFqt[H2tcHRxUnilS2[vZkOLdGqZUX:MWIOPR3mC[1OSb3ukTFqt[H2tcHR{UXeRV1GwTliDfWqZXoCbXHS7VGRxclq6b3eRfVGvUGSGclmFc3eLTFK6XmibdGqZ[IqQe{CMTVOC[1mCNFuEVXu3T3mDcmqZVkCiW{WvTVetb3O6Ro[bbVK4Z316b3SYUkCKS16p[FeXcnJ{ToCbXF2oT3l5TlSSc3eKR1GoR2OTe3OuPXulW15xZ4mCPVmEVkK[XFm4UGR2cmqZVmGkcUms[GePNGFzSkCbW3S3Z32tcHO6[4CQe{CMTVOCTlOUVoekcUms[GePNHO6RUmKR3esZ1iLemqJWnqlTF16VGOkcluURT:KR3O1UWOk[1:qRXukTFq3XliXbnSJUUeFVX:oTVGsTlSSc3eKRXuLUImw[2mvWoCjS2GoZWd2fmqZTkCKTFZyXmiLOVmIXomjNkCoXUJ6fWqXPUGkcYinZ32XN3OucECbV1GyUIesUlOqRXeKR1GLTliHNWqZTkWUW{W7XmiLNGWuWkOkcXxxXmOCPVmETV6EbVGoTVOCTlOSNFuKR1GoTVGtTmStUl[WcGGoV2WlU2RyTl[KSXyQWlV5[2mETYWLTGqpZ3qSeVmuNUClXFqqZkKC[1uIRkGkcYinZ32XN3OucECbWkmxXleCd1mIRoqlS{m6XmZ6dGqIRYOKS1KrXWiTcGpzPYmmWkmxXleCd1mIRoekcUms[GePNGhzcHu[R4eoXViLcHOZWnykN2KnZ1eHNHGIRYCFVX:LR2GtWGKWfF[SNWGoXViXfXKHPYmbXHS6ZWiTcGhzcHu[R4eoXViPNHJ{TnyZNnysXVO4[2mIUnilS2[vZkOLOWhzcHu[R4eoXViDfXJzVkG[N2KnZWeT[1yERnekcW[5[GeXfnSHPYe[XGKwXVFxT1OSb1qTcFqRWGOD[1mqOHulcV[6UlN1bWlzPYmbWklyZ325[nOuWkOkcXxxXmeCUlOob1qEWnSKVm[LSlmCNFuEVXuLT1FxT1OSb1qEV3ioXUKHNGqY[I[kcnynZWeT[1mGcF:KR3eqTVN1[1qJRombXGqxXmilflmERYWKR1mxTVWHU2KERnekTFq3XliXbnSHPYCbS1GoV2[O[2StWl2VR3uoWEGK[1SSc1qEVXuLT1eDbmmZVnybNkm6[WZ6dGqIRXeUWUSoT1OK[1yqRXukTFq3XliXbnSJUXeKR{SoTXms[2GWOVWKS1K4Z316b3SYUkCZNnysXVODTmW6Rl:VNWGoWHyXUWSEb3eVNVmPR3esTlOSb3:[S16p[FeXcnJ{TkWZNnysXVODTmW6Rl:XWYiOTVWHU2KERnekTFq3XliXbnSHPYCbS1GoV2V1[1SSc1qEVXuLR2OpWGKWfF[SNWGoXViDfXJzVkG[N2KnZWeT[1mGXmOVNECoXVOKeVqJXnikbmG2TX2PenOuWn[lXFq{XEOLcHR{ToClS2[oSGGwTlOSb1qEVXyZV1WXV2KURne[NlZxXmelenOvcH[iW2KoTVWtU1mE[3mKR{SoTliDfXJzVkG[N2K7TVN1[1mqb4CMVUCMTVOC[1mERXeKR1GoTVOC[1mERXeKR1GoTVOC[1uUTYWFVX:oTVGsTlOSb3:MR2JzXWiKfFmESUmKR3OvT2OCM1mETlKVb2GoT1eDfnSIPYmbWkmxXleC[2SsPWWKSXyQTVOobVmEOHeLTGqpZ3qG[1yqRXmMV3uqTVSw[1mqTYCNbVmPR3mC[1OSb1qSWUWGTVFxT1OSb1qEV3i3Z1iTdHJzOYqKSYiLV{CW[1q6Z3eVNVmoZkODNHGYPYWkfVKLWYmDU2[WfF2MWIOqU4dxT1mERXeKRXuPR3esTly6c3e[cm[xZleS[2qIWoObXGKtTViHNWqZTkWKS2q3Z3mDfWqYUo[kcWK7TVebfXJzNHe[Nkm6XmZ6NXOufImbXHS6ZWiTcFmEc4[FVX:oTVOC[1OUVoilW2[6[WWTcHKIWkCbWlqt[EOLdHSIWXeRV1GqSGGw[1mERXeEVUCMTVOC[1mCb1qTSW[OVm[TSlmGXmOVNECoXVOKeVqJXnikbmG2TX1yNHSZTnmjNlGPR3mC[1mERVqKR1GoR2[lTWKXTl[KR1GPR3esTlOU[3eFVX:LR2GsTluIRnq[XGKtXkJ6fXWXPYCbS1GoWHt6WVmGcF:KR3eqUHmCb3OJTnylcXyt[EOO[1mEOHeKbXuoVWV2SVmIRoekcUms[GePNGhzcHu[R1KLWYmDU2[WfF2MV1KRWXdxT1mERXeKRXuoTVOC[1OUbHe[NlZxXmelenOvcH[iW2KoTVV2VG[ERlqVbVGwTXl1[1qJRomjNmJyXUOTflmEOHeKbXuoVWV2SVmIRoekcUms[GePNGhzcHu[R1KLWYmDU2RyVXeVcG[OWFOs[2RyTV6E[3uLR2Gsc2mIUnilS2[vZkOLOWhzcHu[R1KLWYmDU2[WfF2KSV[QVlOD[3OJTo[bTG[r[FZ6dGqIRXeUWUSoSGGwTlOSb1qEV3iVVmW5SmFyVXe[TFK6ZkKTNWl{Vn[iW2KoTVWbV2RxNHe[R1m2TlibbHOrVYWKcV63Z32X[nSZToOZN1qt[EOLdHSIWneFVX:LR2GsTlOScGiUSW[UVmOD[2lzSkCbW3S3Z36t[nGYVneKSUWRWlODTmSqRX:KbVG2TVOTe3OuPXulW15xZ4mCeVmETYCMV3uPR3esTlOSb1qMWIOqU4dxT1SSc3eKR1GoR2N5dVmITkGiW4isTVeTcHKIWkCbV1K5[GeXfXWURn2jN1moZ32Xb3GZTny[N2JyTViXfXKJUXeMbUiPR3mC[1mERVqLTFZyXmiLOWKIWoObXGKtWX2Xb3GZTny[N2GoVGOCUlOqRXeKR1GLR2OLSWKWfF[XSWWoVnyLVGSURneKbUSs[H2HfV6EOHmjXGJyZ32LemmERmiUSW[UVmOD[3OuWoilW2[7[FZ6e2mZVn:[R1KLWHmCc1SSc1qEV1GoTVOCTmVxWl2TWV6WTVeDfWqZSkGbXF5xXEODbHSIbHeKSWqUWEBx[2mETYWLTGqpZ3qSeVmuUo[kcW[n[GiLd2h{TnylN1qx[FeX[1mH[FmTWlqHTVeDenOJVoCjNkW7XVOCPGCqRX6Le{CMR2GsTluVd3mQe{CMTVOC[1mCb16EbVGoTVOCTly6c3e[cm[xZleS[3SZRnu[XGKtTViHNWqZToCbXF2oXn16fVmJVkWkS2WoT3l5UlOob1qLTFZyXmiLOW[ZRnu[XGKtVUKHNGqY[I[kcnuoVGOCbW[XRlWSWmKHTVeCbVyqVkK[XFlxUHmLeHSJWom[cUmoTV[PSm[ERnelTHy4XmeCPVpzUnilS2[vZkOLOVq6RmiUSW[UVmOD[2lzSkCbW3S3Z36t[nGYVneKSXyVTVV2VG[ERl:XWYiOTVWHU2KERnekTFq3XliXbnSHPYCbS1GoV2[O[2StWl2VR1l4TVFxT1OSb3ukXG[tZ36tWnOIVnilS2[SZ316b3SYUkCKR1F6TVOLWmWGVlKXSWWoXVOKeVqJXnikbmG2TX1yNHSZTnmjNlGoWUCXWVmIRkCmXFKtXVRxcnOJTo[bTG[r[FOk[2ZxbF[Wb2WoXViDfXJzVkG[N2KnZWeT[1mGcGSKSUWRWlODU2[WfF2KboOoSGGwTlOSNFuEVXu3T3mDR3SYcIObS3y2XomDfHSYWomiW2[7TVebenOqRoqmW{WrZViLenKucE[[XGKxZkJ1[2lzNYqKTFKpXkKXflmEc4[FVX:PR3mC[1OSb4[MbVKvXmiS[2lzPYOjS2[r[FetenKqRnqjXF2oZ1eHcmqZUXebclq3ZmODUmmY[HyjcmK3TVWPenOuWXeMbUiPR3mC[1mERVqLS161Z{GDbGpzWoqUXGKtZmiO[2CURl6[W3StU3qxcmqZVl6jNmKtZlOocmlzNYqNN1KpXkKWcluUNDubNmZxVUJ6d3KIWnqlS3y3ZnmodFyVOYOjNl[sT1OseGCu[HylSXxxXmdyfluEb{eFVX:oTVGsTlSSc1qEV{iyTVelcHSERoCbTF2oZkK[[3NzWoObW15xXmeS[2lzNYqKTFKpXkKXflmJ[IClS3eoZ{OTenOuWXe[NkmsXmiO[2qvTo[jV1KPWliXfWmuPHe[Nkm2Xn2tclmEc4[FVX:LR2OTbnKZUXeRV1Gs[H2HfV2ENDubNmZxVUJyfmWISn6bXF2wT2S{UlOob1qLS161Z4mCPVmETX6KbUW7[FiL[nOuWoejS1[rXmOobVyETYOKR1mvUFOkbVyERXu[NkG7T2N1bVq6TUeFVX:LR2OTbnKZUXeRV1GwTlePeHO7NEmLfXOxTVR5[1q6NIiLfVF3TVOTbnKZUUeFVX:LR2N5dVmJVom[W{W7Xn16fXKURkCjfVKpZ36LbHWURn2jN1q1TVOwelSSc1qEV2KrZmiPRnOvTXeRV1Kt[ViDd3JzVnyMR1m{TXm4[3N{VomZN1qtZ1e5bGlzWX:KbXOqUFOCbVmqe3eLS161Z4msdF:4NFuEVXuPR3esTly6c3ebNmZxTViDbGpzWoCbSkm7[Fd6fWqXPYCbR1KpZliLcGmYVkWKTF52Zn2Pc3OuPYWiXICtXlODbnKZUXekS1[vXmiO[1uJRombXGqtZn6S[2qJWoejS3yrZWiTcHO6b3eMbUiPR3esTlqIUoSkNHy2VlWK[2CURnikclqp[WOodF:4NFuEVXyuZkOLcGmYUn:KR3es[H2HfV6URnikfVGsXUJyfmOYOICKTIOPR3esTlOUVnqjXF6LZnuTR2dyNHeRV1GsXUJyfmOYOISRcXSt[F[DbGpzWlqbR3exUHml[lq6OHu[NkG7V2d1eGCu[HylSl5xZkOLcGOYVX:MWIOPR3esTn[SNFuKR1GoTVFxT1OSb4[MbVKq[Getd2qERoCjcl6tZ36S[3OZWnykcnuoXUJyflmEc4[FVX:LR2OTNmmYfIqKSECoXWiLfWmZb3:MWIOPR3esTmquPYmbW1[rZVOCc1qIUoSkNF[6Z3mDbHO6RXu[NkG7XEKPemqIWYCKTIOPR3esTlOUPIGKS3yuTVePeHO6RnijTFqtXWeTOVmIWkSiXF5xTVeteVmINUClXFqqZomDNGmYToObV1JxZVeXeVmIdEGjXFGoZWiS[1uqPF6E[3uLR2etcVmE[3iiW{WnXWiLfWmZb3:LS161Z{F6bnJzVnyNR1GsXUJyfmOYOVWSbXuxTVi{UlOob1qEVXusXleHNGmURUmKS2Z1Z1e5emqIWX:KcEiqUFOCb2lzNYqZNl63XleWdF:4NFuEVXuLR2etcVmE[3:[NklyZn6Sc1qIVnilS1WxVGRxfVuURX2LbVKxZ{OPcHSE[3u[NkG7WVeHcmqZUlqlS2[1Z{G{b2qISkC[WoO4XGZxdFuURkeFVX:LR2GsTlOUVnikclmoTVRx[2mZTom[XHuwTleTbHSISnKOWkC{TVOKclmqOHu[NkG7WVeHcmqZUlqlS2[1Z{G{b2qISkC[WoO4XGZxeGCu[HylSXysXmd2NHGYXoCbXFmwT2N1bVq6TYOKR2KsXWiTbGe7RnSNR1GqTkKPeHO6Z3mMWIOPR3esTlOSb1qLTGqpZliPZmiURUmKR1mwTXl2dHKZRoOjNmKtT1OKd1mqe3eLS1[6Z3mseVmqb3mQe{CMR2GsTlOZNF6E[3uLR2hxUlOob1qnVUCMR2Gsb3OZWnykcnyLZn6PcHOvVlSVWl2oVGOCclq7d16E[3uLZWe[[1uIUo[lW{VxT1OTNmmYfIqMWES4T2FxT1OSb1qLTFZyXmiLOWOYOYqbXFpxVUByWFmFNHeKb3yQWUCXV2[ERlqVcGKRTVeCbVyqVkK[XFlxUHmLeHSJWom[cUmoTVOp[3N{Vo[kcW[nZWeT[1yERnekcW[5[GeXfnSHPYe[XGKwXVO4[2mJRnibNm[nZWeT[1yERnelTHy4XmeCdFmHXlKVSm[HWYmCbVyoNFuEVXuLR2eteHOIfI[bS2WwTXm4bVyERXulcV[{Z4ms[1yqRXmQfVl4SGGwTlOSNFuEVXuPR3esTly6c3e[cm[xZleS[2qIWoObXGKtTViHNWqZTkWKS161Z4mCdVy4NFuEVXusZ2iXcHOvcFWbW4it[FeXSGSXUXeRV1GqSGGwTlOSNFuEVXuLVlWXUWKXVl[KSWqUWEBx[2mETYWLTGqpZ3qSeVmuNUClXFqqZkKC[2ZxbF[Wb2WoT1FxT1OSb1qEWV6RWHuPRm[EbHekS1[vXmZ6dGqIRYOKR3SnTom4[2mJUkCjN1qtXEKtb2mEb3eVb{mWTVWtU1mE[3mKR{SoTlePeHO6RYWKR1mxT2S{bV:4NFuEVXuLR2FxT1OSb1qEVUCMR2GseluqRoilW2[6[WODcXJ{TXekcWZ{Z32tNGqURoCjbVKxZn2HbnSIcEKbV1K7[Fd6fWqZUXeMbUiPR3esTlqJSkGbXFp2VleXd2qZVnyUW{WDXUOTdHSuWmSlS{m6XmiO[1mFNHeK[{CMR2GsUlOob1qEWWKHWFWXWWKURleWb{mPTVeCbVyqVkK[XFlxUHmLeHSJWom[cUmoTV[lTWKXTl[KS1K7[Fd6fWqXPYCbS1GoV2V1[1uETXeNbVGs[H2HfV2URYWKR1mxU4dxT1OSb1qFVX:LR2OKO1SSc1qEVUCMR2GseluqRoilW2[6[WODcXJ{TXebS2[{XmiTcFmIcIW[W15xZWibcFmISoWbR1K2ZolyNnGZUoC[cYitTViDfXJzVkG[N2K7TVeHeWqERnq[XGKtXkJ6fXGYWoqKS1[2XlODbnKZUXeMbUiPR3esTlSSc1qEV{iyTVWDNmmZTXeLTFK6ZkKTNWl{Vl[jcmKx[Fis[2SYSn6bWkmHXWib[mSYPXubW4inVmd2NHGZVkWKR3:3SGGwTlOUVoekcUms[GePNGKYOUCiXGJ2TVRx[2SYSn6bWH93XkKXNGSYPXubW4ewTkKXbHSqPXyjcmKx[FiscluVd16E[3uLTliDfXJzVkG[N2KHZn6TdHSJb4SRcl6t[F[TOXOIWX:LNl6p[FeHd3Jz[H[kTFq3XliXbnSEZ4CQe{CMR2Gs[1SSc1qEV2K4Z316b3SYUkCWN2Kp[FiXflmFNHeLTFK6ZkKTNWl{Vl[jcmKx[FiseGCu[HylSVZx[FiLdGmvWkCbV3evZ{OTbHSJWoqLfXt4SGGwTlOUVoqlS1ZxV2eS[1mERUmKR2K4Z316b3SYUkCWN2Kp[FiXflyVOX6bXGKLXlOodF:4NFuEVXuPR3esTlmCNFuEVXusZ1iLemqJWnqlSmqxZ{KtbXGYfIClTHuoVGOCb3OJTo[bTG[r[FWXeXSIcECmV{BsXkKXNGGZVkCkcXyq[GiTcFuE[EKiXF6xXX2td3GZVkWLfXt4SGGwTlOUVkKiXF6LXlOC[1mFNHeLTFK6ZkKTNWl{VmeiXF6xXX2td3GZVkWNWEWvXmiTTmqE[4CQe{CMR2GsUlOob1qKRUCMR2GseluqRlGlcV[6TVOTe3OuPXulW15xVmd2NHGZVkWKSUGpXkKX[mKYSkKZNEG3XleXd2hxWoWlS3xx[WOCdVy4NFuEVXusXUKHNGqY[I[kcnyHZn6TdHSJb3eRV1KPXWelcF:rdH6bXGKPZkKTcHKE[36bW1ZzUEKXeXSIcECmV3OxU4dxT1OSb3u[NlZxXmelenOvcF[jcmKx[FiseGCvUnylSmJ2Z1eWc1pzUnilS1[{ZkKl[mlzSkCbW3S3Z36scluVd16E[3uLTVFxT1OSb3u[NlZxXmelenOvcGSlS1Zx[GiO[2CURXu[NlZxXmelenOvcF[jcmKx[FiseGCu[HylSVZx[FiLdGmvWkCbV3evZWiP[mmYUkCiXGqtTomsO1SSc1qEV2KrXWiTWHSISkCUW2GoTVOCPVmEVnq[XGKtXkJ6fXWXUkC[XGJyZ4lxL2pzWkCUW2GwT2S{UlOob1qFVX:LR2OTfHSYWommWWKtZleXNGqXRomjNmJyXUOTflmFNHeK[{CMR2Gs[1mERXeKR1GoTVGsTmKGWl2TWmKHTVWbV2RxNHe[R1m2TlibbHOrVYWKcUFx[GiLbXJzRXeXNHiHWXuW[2mJRomjNmJyXUOT[nGYVneKSXyQTVOoUlOob1qKR1GoTVOC[1mERVqEVXyVVmW5SmFyVXebW{VxZWiTOWhzcHuKSWqUWEBx[2mETYWLTGqpZ3qSeVmuUnilS1[{ZkKl[nOJTo[bTG[r[FZ6cHKvVoClTHynZWd2NGmCNFuEVXuoTVOC[1mERXeKRXuLR2[lTWKXTl[FVX:LR2OC[1mERXeKR1GoR2GsTlmERX:MS1Zx[FiLdGmvWkCbWkmxXlRxbVyqVoqlS1ZxV2eSeVmqRlKVb2Go[H2Hd3SYWXeRV1G6T2ODVGWoNFuEVXuoTVOC[1mERXeKRXuLR2OC[1uISkClTFqxXX6XNGqXPYCbSECqUHmTNnGZUlqbR{SqTVWHU2KERkK[W4hyXmOCPGCURYiMV3uPR3esTlmERXeKR1GoTVOCTlOUb{eKRUCMR2Gs[1mERXeKR1GoTVGsbV:4NFuEVXuoSGGwTlOUVoilW2[6[WWTcHKIWkCbWV6p[FeXcnJ{ToCbXF2oVGOCbVSSc1qEV1GoTVOC[1mERXeEVXyGVmW5Sm[GWXeTcFqRWGOD[1mqOHulcV[6UlN1bXKZVkGkcVq3XVODXGOGWmOTV1KoXUKHNGqY[I[kcnynZWeT[1mGcF:KR3ePR3esTlmERXeKR1GoTVOCTlOScGSTWYiHVUGS[2qYOUCiXGJ2XEKtb1mGXmOVNECoXVOKeVqJXnikbmG2TX2PbHSISoOjNnSnXUKHNGqY[I[kcnynXmd2NHGZVkWZNny2[FeCUlOob1qKR1GoTVOC[1mERVqEVXyZV1WXV2KSNFuEVXuoTVOC[1mERXeKRXuLR2OC[1uISkClTFqxXX6XNGqXPYCbSECqUHmTbmmZVmSlS1ZxV2eSeVmqRlKVb2Go[H2Hd3SYWXeRV1G4T2FxT1OSb3eKR1GoTVOC[1mCb1qMWIOoSGGwTlOURXeKR1GoTVOC[1OUTUeFVX:LR2OCUlOob1qLTFZyXmiLOWKIWoObXGKtVUJyflmFNHeK[{CMR2Gs[1mERXeKR1GoTVGsTmKGWl2TWmKHTVWbV2RxNHe[R1m2TlibbHOrVYWKcUFx[GiLbXJzRXeXNHiHWXuW[2mJRnibNm[nZWeT[1mGcF:KR3ePR3esTlmERXeKR1GoTVOCTlOScGSTWYiHVUGS[3OISn6bWkmxXlODS2WsPV6KS1GqUHmTNmmZTUCNbVqrZmiP[nOISn6bW1GPR3esTlmERXeKR1GoTVOCTlOScGiUSW[UVmOCc3GZUn[[W15xZWibcGCVRYCFVX:LR2OC[1mERXeKR1GoR2GsdF:4NFuEVXuoTVOC[1mERXeKRXuqU4dxT1OSb3eFVX:LR2N5dVmIWoWbR1K5[GeXfXWURYGNe{CMR2GsUlOqRXeKR1GLTlePenKuOXy[N2KxZkJ1[2CURl6[W3StU3qxcmqZVmSiW{WvZleXNHJzOH:LNl63Z32WenOuWoqjN2[6XUKWcluUNDubNmZxVUJ6eXKuWnqlS3y3ZnmocmlzPYmbWkl{Z32tNGqUZ4CQe{CMTVOC[1mCb16EbVGoTVOCTnSJTkWKTIOPR3mC[1mERVqEVUCMTVOC[1mCb1qLS163Zn12cGl{VoCjNkS1VH6HNWqZTkWMR1qVWlWHV2[ERmWWb1[QWUCHSG[GcGCVbVmxU4dxT1SSc3eKR1GoR2Gsb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1qJSkGbXFp2V2d2fmqZTkCWcWZ{Z32tNGqUb{eKR1GPR3esTlOYcH2KR3esZ2iXcHOvcFqjcl6tZ36TSGSXUXiRV1mqT2OCb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1qJSkGbXFp2V2d2fmqZTkCSNEGVT2S{[1mERXeKR1GoR2GsUlOoNFuEVXuLTlePenKuOXy[N2KxZkJ1eGCvSkGbXFp2T1OTfHSYWommWWKtZleXNGqXTnylN1qx[FeWdF:4NFuEVXuLTlePenKuOXy[N2KxZkJ1eGCvSkGbXFp2T1OTfHSYWommWWKtZleXNGqXTnybS3y6XmePNFuVd16E[3uLR2OTbnJzOYWbW15xZWd6eVyVOYilW2[6[WOob3OZWnykcnyGXme5cHSIWlSVWl2xU4dxT1OSb1qLS163Zn12cGl{VoCjNkS1VH6HNWqZTkWMR2K5[GeXfXWWVnyjS2ZxXmWteWGYUkCiXGqtWUOTenOuWoqMWIOPR3dxT1OSb1qLS163Zn12cGl{VoCjNkS1VH6HNWqZTkWMR2K5[GeXfXWXWoebS1ZxXmWPbHSIWn6jN1p2T2S{[1mERXeFVX:LR2Gsb2lzPYWjcW[r[FetenKqNDukXG[tZ36sc1qJSkGbXFp2WmiDb2mZVnyWTFq3XliXbnSEb{eKRUCMR2GsTlSSc1qEVXusXUJ6eXKuWnqlS3y3ZnlxL3OZWnykcnuwTliHNWqZTkWTS2[{XmiTcGWJTo[bTG[r[FiOdF:4NFuEVXuLTlePenKuOXy[N2KxZkJ1eGCvSkGbXFp2T1OTfHSYWommWWKtZleXNGqWUnilS2[vZkOLdGqZUYCQe{CMR2GsTlqIUo[jcUWtXUOTdHJzOISRclZyXmiLOVuEVoilW2[6[WWTcHKIWkCbWV61Z4msO1SSc16EbVGoTVOCTn[URnq[XGKrZVOCc2KZbHqbXFJxZWd6eVmEVnyMV1J4SGGw[1mERXeEVXusXUJ6eXKuWnqlS3y3ZnlxL3OZWnykcnuwTXyLVGSGfFOSWV6NTXmsO1SSc3eKR1GoR2GtNHGJTo[lfVGsXmS{UlOqRXeKR1GL[mFxT1mERXeKRXuPR3mC[1mERVqLS163Zn12cGl{VoCjNkS1VH6HNWqZTkWMR1qFWEByUmOXVXmMWIOPR3mC[1mERVqFVX:oTVOC[1OSQU1jP4N7NkR7JmmZWkCjNkGp[FetbmKIPUOjcYi3XWeSfTJ8d{pzN{J1PjKEbVGoTVOCTnGYXXeMSUGpXkKWOl:ubHyjTFKtZ3mocnKZVkGkcVq3UEKteWquPH6MV{BsXkKXNGWuWn6VcV[1XmOodGCVNH6iN1pxZle1bHF{TUCLfXuo[Yew[1mERXeEVXuMTVOC[1mCb1qLS163Zn2bdGq6RUmKSUGpXkKWOl:u[HylSl6xZn2ld2qZVo[jbXevZmiTNXOuTo[NNl63Zn2bdGq6Z4CQe3:oTVOC[1OScICbbVGwTlePenKuXoCbfUBsXkKXNGGZWkCjNkGp[FetbmKIPUOjcYi3XWeSc1uUb3eme3:oTVOC[1OSb1uKR1GoTVGsTlOZVommV1J4R3mC[1mCb1qEVX:oTVOC[1OSb1qEV2Jx[GiLbXJ{RnilS3eoVGOCb2lzPYWbcXyvUGR2cmqZVmWlXFqqZkODbHSI[3:MWIOMTVOC[1mCb1qEVXusZmd6b2qYe3eRV1KPXWelcF:rdH6bXGKPZkKTcHKE[36jXGJyZ32LelxzNUClXFqqZomkdF:4c1qEVXuLR2GsTlOSb1qKR1GoTVGsTlOSc1qEVXuLR2N5elmI[HyjcW[6XWiTcFmIfICkN2GoXn16fVmISoOjR1J{XmeLfnGZVnyke3:oTVOC[1OSb1qEV2K1ZkKTcHKENDubNm[2XmiLbHSIWm[kcYiOZWiPNFuEb{eEbVGoTVOCTlOSb1qEbVGoTVOCTlOSb1qLTHStXX6PdHSIWoqKSECoWGeHcmqVc{[bNmZxWGd6b2qYe3:LNl63Z32WenRzWnmkNnxxXmOkdFyVOX6bXGKFZkK5d2qYUkCiW{m2T1OseGCufI[[W2GwT2NxL2pzWkCUXGKtZmiOc1uVd1uKR1GoTVGsTlOScH2jN1qtXWePc1mE[3ulNm[qZ{KtNGqZUXe[XF2oTlilcGmvUoClS2WxTVi{T1mERXeKRXuLR2GsTlOqRXeKR1GLR2GsTlOUVkObW1q7ZWiTcGFzPYWbcXyvTVRx[1qIUo[jcWqxXolxL2pzWkCXNm[qZ{KtNGqWUo[jcWqxXomob3RzWnmkNnxxXmNxL2pzWkCSNkmsXmOodFuVd1uKR1GoTVGsTlOSb1qiW2moT1OTN2qYToqiXGKtVUJ6eWqucH6KR2muTVOTN2qYToqiXGKtVUJ6eWqucH6NWEWvXmiTSnKuSnmjS2[sT1OsPWCUZ4iLfXuo[YewTlOSb1qEVXuLTlePenKuXoCbe3uLTVRx[1qIUo[jcWqxXolxL2pzWkCUW{VxXmiLe3OuWkCMR3t4R3esTlOSb1qEVXusZ{OXbWmuSoqbV1GoTVGs[2CURl6[W3StU3qxc2qYfIebXFmwTkJyNHSZTnmjfUl{XmeLfnGZVnyLfXu1VH2lcHSHUkG[cVqpZ{KWc1qJ[Hy[cl6x[FeWeGCu[HylSWKtXn2HNXKJVmSlS{m6XmibdGqZZ3:MV3t4R2Gw[1mERXeEVXuLR2GsTlqJ[Hy[cl6x[FeXe2mZVn:KSECoTlilcGmvUoClS2[FZkJ2cXGYZ4SRcXSt[FWLbHNzWlWiXFmwT2N2SWW6OHulTG[6XX16e2mZVn:Nb2KVUHmTfnSYTnm[XF6tUHuTWFyqVkObW1q7ZWiTcFyVOX6bXGKFZkKTcFuEb4WLfUVx[ViScl:4c3eKR1GoR2GsTlOSb1qLS{GxZn6PdHWuWVqKSECoTlePenKuXoCbfUBsXkKXNGSYcIWiW{GpZl[DbGpzWmSiXICtT1OsO1Oob1qEVXuLR2Gsb3NzUomiXFJxTVGs[2CURl6[W3StU3qxc2qYfIebXFmwTkJyNHSZTnmjfXOxUGR2cmqZVlelW4i{Vld6N3KufI[[W2KVXUOLdHOJVmG[XGKwT1OsO1Ooc1qEVXuLR2GsTnGYXXeMR1[xZ{F6cHWIWnqlXGKpXX25cFuEVoq[N1qxZ1iSdFuSc1qEVXuLR2GsTlOYUn:jW{msT1OTfml{ToCkTGG{TVOke167Z{GLfXt4R3ew[1mERXeEVXuLR2GsTlqIUo[jW{GpZn2S[1OURUmKR2K7XUOLdHOJVYWLfVGvUHmTN2qYToqiXGKtZ1eHNHGEOH6KR3O2TldydHKvUoCmcWW2TomCfWCqXYiKR2mvU4mCely6RnikN3y2XUKpfXJzOY[lXF2oXUKHd3KIcIWbe3:MR2GsTlOSb1qEW3yuTVOob3GYOUCbXFq4Z32XNFuSc1qEVXuLR2GsTlmERXu[Nkm1ZmeHeWqERUmKR2KxZn6TcHOvRombXGG2TomCclyqVnqjNkG1XWd2b1:4c1uEVXuLR2GsTlOWRnymS2[rT1OTbnJzNYS[W{WsT2S{T1Oob1qEVXuLR2Gsely6Roq[XGqtTVeTenRzOYOjNl[sTViTdHKYWXelS{ioXUJ6eWqucH6E[3uLR2GsTlOSb3ubS1ZxXmOC[1mFNHebS1ZxXmOocmeUNYSNW2GoV1SxdF:vUX6MWIOMR2GsTlOSb1qEV2KrZkJ2cXGYZ4SRcl6t[FW5bHN{VmWiW{GtWEKbRnSZVo[jW1ZxZWePSXJ{[IWjS{mpXlOob2qISkCbV3t4R3esTlOSb1qEVXusXUJ6eWqucH6NWEW7XWibcFuEb{eE[3:oTVOC[1OSb1qEVXx6R3mC[1mERVqEVXuLR2Gw[1mERXeEVXuLR2hxT1OSb1qEVXuMTVOC[1mCb1qEXECoXUKHNGlz[3eMSWZ1XUKXe3SIcI[jbVGsXmOs[3W4c3eKR1GoR2GsTlOWNXibNmV3U325emq6[3ubV{BsXkKXNGSYWoqkNl[vXmOodFuVd1uKR1GoTVGsTlOScF6[W3StU3qxd3Jz[F[mS16tZ1iTdHJzOH:LS2WxU4ew[1mERXeEVXuL[mGwTlOSb1uKR1GoTVGsTn[Sc3eKR1GoR2GsT1mERXeKRXx6TVeXd3NzWXeme3:oTVOC[1OScF6[W3StU3qxd3JzZ3:LNEW3TVibbHKIcHuKS4ixXUKXeWlzWYWKSUW3[FepdHKuZ3ekS1[vXmODN3GYfIOKS1qtTVeTenRzOYOjNl[sXmeSeVq6b{eEbVGoTVOCTn[Sc3eKR1GoR2F:QTJ8gR>>
|
app/code/local/Artio/MTurbo/controllers/Adminhtml/MturboController.php
CHANGED
@@ -76,9 +76,9 @@ class Artio_MTurbo_Adminhtml_MturboController extends Mage_Adminhtml_Controller_
|
|
76 |
*/
|
77 |
public function uninstallAction() {
|
78 |
|
79 |
-
$configModules = Mage::getBaseDir().DS.'app
|
80 |
if (!is_writeable($configModules)) {
|
81 |
-
$this->_getSession()->addWarning(Mage::helper('mturbo')->__("File '
|
82 |
$this->_redirect('mturbo/adminhtml_mturbo/index', array('activeTab'=>'page_tabs_uninstall_section'));
|
83 |
return;
|
84 |
}
|
@@ -160,16 +160,16 @@ class Artio_MTurbo_Adminhtml_MturboController extends Mage_Adminhtml_Controller_
|
|
160 |
$baseDir = Mage::getBaseDir();
|
161 |
|
162 |
$dirs = array(
|
163 |
-
'app
|
164 |
-
'app
|
165 |
-
'app
|
166 |
-
'app
|
167 |
-
'app
|
168 |
-
'app
|
169 |
-
'skin
|
170 |
);
|
171 |
|
172 |
-
$result = file_get_contents($baseDir.DS.'var
|
173 |
$array = array();
|
174 |
|
175 |
if (strpos($result, 'uninstall failed')!==false) {
|
@@ -272,7 +272,7 @@ class Artio_MTurbo_Adminhtml_MturboController extends Mage_Adminhtml_Controller_
|
|
272 |
}
|
273 |
|
274 |
$this->getResponse()->setBody($html);
|
275 |
-
|
276 |
}
|
277 |
|
278 |
|
@@ -388,9 +388,9 @@ class Artio_MTurbo_Adminhtml_MturboController extends Mage_Adminhtml_Controller_
|
|
388 |
foreach ($websiteCodes as $code=>$name) {
|
389 |
try {
|
390 |
Mage::getModel('mturbo/htaccess')->setWebsiteCode($code)->rebuildHtaccess();
|
391 |
-
$this->_getSession()->addSuccess(Mage::helper('mturbo')->__("
|
392 |
} catch (Exception $e) {
|
393 |
-
$this->_getSession()->addError(Mage::helper('mturbo')->__("Rebuild
|
394 |
}
|
395 |
}
|
396 |
|
@@ -486,12 +486,19 @@ class Artio_MTurbo_Adminhtml_MturboController extends Mage_Adminhtml_Controller_
|
|
486 |
**/
|
487 |
public function upgradeAction() {
|
488 |
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
495 |
|
496 |
$this->_redirect('*/*/index');
|
497 |
}
|
76 |
*/
|
77 |
public function uninstallAction() {
|
78 |
|
79 |
+
$configModules = Mage::getBaseDir().DS.'app'.DS.'etc'.DS.'modules'.DS.'Artio_MTurbo.xml';
|
80 |
if (!is_writeable($configModules)) {
|
81 |
+
$this->_getSession()->addWarning(Mage::helper('mturbo')->__("File '%s' is not writeable, please change permission.", $configModules));
|
82 |
$this->_redirect('mturbo/adminhtml_mturbo/index', array('activeTab'=>'page_tabs_uninstall_section'));
|
83 |
return;
|
84 |
}
|
160 |
$baseDir = Mage::getBaseDir();
|
161 |
|
162 |
$dirs = array(
|
163 |
+
'app'.DS.'code'.DS.'local'.DS.'Artio'.DS.'MTurbo',
|
164 |
+
'app'.DS.'design'.DS.'adminhtml'.DS.'default'.DS.'default'.DS.'template'.DS.'mturbo',
|
165 |
+
'app'.DS.'etc'.DS.'modules'.DS.'Artio_MTurbo.xml',
|
166 |
+
'app'.DS.'design'.DS.'adminhtml'.DS.'default'.DS.'default'.DS.'layout'.DS.'mturbo.xml',
|
167 |
+
'app'.DS.'design'.DS.'frontend'.DS.'default'.DS.'default'.DS.'layout'.DS.'mturbo.xml',
|
168 |
+
'app'.DS.'locale'.DS.'en_US'.DS.'Artio_MTurbo.csv',
|
169 |
+
'skin'.DS.'frontend'.DS.'default'.DS.'default'.DS.'js'.DS.'mturbo.js'
|
170 |
);
|
171 |
|
172 |
+
$result = file_get_contents($baseDir.DS.'var'.DS.'uninstallmturbo.log');
|
173 |
$array = array();
|
174 |
|
175 |
if (strpos($result, 'uninstall failed')!==false) {
|
272 |
}
|
273 |
|
274 |
$this->getResponse()->setBody($html);
|
275 |
+
|
276 |
}
|
277 |
|
278 |
|
388 |
foreach ($websiteCodes as $code=>$name) {
|
389 |
try {
|
390 |
Mage::getModel('mturbo/htaccess')->setWebsiteCode($code)->rebuildHtaccess();
|
391 |
+
$this->_getSession()->addSuccess(Mage::helper('mturbo')->__("Htaccess for website '%s' was rebuilded.", $name));
|
392 |
} catch (Exception $e) {
|
393 |
+
$this->_getSession()->addError(Mage::helper('mturbo')->__("Rebuild htaccess for website '%s' fail.", $name).' '.$e->getMessage());
|
394 |
}
|
395 |
}
|
396 |
|
486 |
**/
|
487 |
public function upgradeAction() {
|
488 |
|
489 |
+
try {
|
490 |
+
|
491 |
+
$message = Mage::helper('mturbo/downloader')->downloadAndUpgrade();
|
492 |
+
if ($message=='') {
|
493 |
+
$this->_getSession()->addSuccess(Mage::helper('mturbo')->__('Upgrade complete, please refresh Magento system cache'));
|
494 |
+
} else {
|
495 |
+
$this->_getSession()->addWarning($message);
|
496 |
+
}
|
497 |
+
|
498 |
+
} catch (Exception $e) {
|
499 |
+
$this->_getSession()->addError($e->getMessage());
|
500 |
+
Mage::logException($e);
|
501 |
+
}
|
502 |
|
503 |
$this->_redirect('*/*/index');
|
504 |
}
|
app/code/local/Artio/MTurbo/etc/config.xml
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
<config>
|
11 |
<modules>
|
12 |
<Artio_MTurbo>
|
13 |
-
<version>1.2.
|
14 |
</Artio_MTurbo>
|
15 |
</modules>
|
16 |
<admin>
|
@@ -93,6 +93,14 @@
|
|
93 |
</mturbo>
|
94 |
</observers>
|
95 |
</catalog_category_save_commit_after>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
<core_abstract_save_commit_after>
|
97 |
<observers>
|
98 |
<mturbo>
|
@@ -169,6 +177,14 @@
|
|
169 |
</mturbo>
|
170 |
</observers>
|
171 |
</core_layout_block_create_after>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
</events>
|
173 |
</frontend>
|
174 |
<global>
|
10 |
<config>
|
11 |
<modules>
|
12 |
<Artio_MTurbo>
|
13 |
+
<version>1.2.2</version>
|
14 |
</Artio_MTurbo>
|
15 |
</modules>
|
16 |
<admin>
|
93 |
</mturbo>
|
94 |
</observers>
|
95 |
</catalog_category_save_commit_after>
|
96 |
+
<checkout_type_onepage_save_order_after>
|
97 |
+
<observers>
|
98 |
+
<mturbo>
|
99 |
+
<class>mturbo/observer</class>
|
100 |
+
<method>afterSaveOrder</method>
|
101 |
+
</mturbo>
|
102 |
+
</observers>
|
103 |
+
</checkout_type_onepage_save_order_after>
|
104 |
<core_abstract_save_commit_after>
|
105 |
<observers>
|
106 |
<mturbo>
|
177 |
</mturbo>
|
178 |
</observers>
|
179 |
</core_layout_block_create_after>
|
180 |
+
<checkout_type_onepage_save_order_after>
|
181 |
+
<observers>
|
182 |
+
<mturbo>
|
183 |
+
<class>mturbo/observer</class>
|
184 |
+
<method>afterSaveOrder</method>
|
185 |
+
</mturbo>
|
186 |
+
</observers>
|
187 |
+
</checkout_type_onepage_save_order_after>
|
188 |
</events>
|
189 |
</frontend>
|
190 |
<global>
|
app/locale/en_US/Artio_MTurbo.csv
CHANGED
@@ -1,19 +1,20 @@
|
|
1 |
" Generate a list of the URLs and store it on the disk. This action will be executed if Automatic cache management is enabled."," Generate a list of the URLs and store it on the disk. This action will be executed if Automatic cache management is enabled."
|
|
|
|
|
2 |
"(hours : minutes)","(hours : minutes)"
|
3 |
"Actions","Actions"
|
4 |
"Add newly created categories to select","Add newly created categories to select"
|
5 |
"Added newly cms to select","Added newly cms to select"
|
6 |
-
"All pages was succesfully removed","All pages
|
7 |
-
"
|
8 |
"Apply Mage Patch","Apply Mage Patch"
|
9 |
"Apply the patch only just in case you need to use Direct Access download method!","Apply the patch only just in case you need to use Direct Access download method!"
|
10 |
"Are you sure?","Are you sure?"
|
11 |
"Automatic cache management","Automatic cache management"
|
12 |
"Base directory","Base directory"
|
13 |
"Block","Block"
|
14 |
-
"Blocked page can't refresh","Blocked page can't
|
15 |
"Blocked","Blocked"
|
16 |
-
"CLOSE","CLOSE"
|
17 |
"CMS page","CMS page"
|
18 |
"CMS","CMS"
|
19 |
"CURL is not installed","CURL is not installed"
|
@@ -23,20 +24,25 @@
|
|
23 |
"Cache selected pages","Cache selected pages"
|
24 |
"Cache","Cache"
|
25 |
"Cached","Cached"
|
26 |
-
"Cannot read
|
27 |
-
"Cannot read
|
|
|
28 |
"Cart Block (sidebar)","Cart Block (sidebar)"
|
29 |
"Categories","Categories"
|
30 |
"Category view","Category view"
|
|
|
31 |
"Company","Company"
|
32 |
"Compare Block (sidebar)","Compare Block (sidebar)"
|
33 |
"Configuration error","Configuration error"
|
34 |
"Configuration was successfully saved","Configuration was successfully saved"
|
35 |
-
"Connection to server could not be established.","Connection to
|
|
|
36 |
"Create cache for all pages (except blocked pages). Download progress can be monitored in a separate window. Please, do not close this window. Update of URLs from the Rewrite Table will be started automatically before caching is executed. Please, note that initial cache creation may take a long time (several hours). Time needed depends on the number of pages your site has.","Create cache for all pages (except blocked pages). Download progress can be monitored in a separate window. Please, do not close this window. Update of URLs from the Rewrite Table will be started automatically before caching is executed. Please, note that initial cache creation may take a long time (several hours). Time needed depends on the number of pages your site has."
|
37 |
"Create connection over sockets","Create connection over sockets"
|
38 |
-
"
|
|
|
39 |
"Date","Date"
|
|
|
40 |
"Delete","Delete"
|
41 |
"Direct access (created new instance Magento)","Direct access (created new instance Magento)"
|
42 |
"Download ID not set.","Download ID not set."
|
@@ -44,20 +50,22 @@
|
|
44 |
"Download method","Download method"
|
45 |
"Downloaded <strong>%s</strong> pages","Downloaded <strong>%s</strong> pages"
|
46 |
"Dynamic loaded blocks","Dynamic loaded blocks"
|
47 |
-
"ERROR_DOWNLOAD_ID_NOT_FOUND","
|
48 |
-
"ERROR_REG_CHECK_FAIL","
|
49 |
"Edited by MTurbo","Edited by MTurbo"
|
50 |
"Enable automatic cache refresh","Enable automatic cache refresh"
|
51 |
"Enable automatic refresh after save CMS pages","Enable automatic refresh after save CMS pages"
|
|
|
52 |
"Enable automatic refresh for preview of categories of saved product","Enable automatic refresh for preview of categories of saved product"
|
53 |
"Enable automatic refresh for preview of saved category","Enable automatic refresh for preview of saved category"
|
54 |
"Enable automatic refresh for previews of parents of categories of saved product","Enable automatic refresh for previews of parents of categories of saved product"
|
55 |
"Enable automatic refresh for previews of parents of saved category","Enable automatic refresh for previews of parents of saved category"
|
56 |
-
"Enable making htaccess backup","Enable
|
57 |
"Enable website","Enable website"
|
58 |
"Enable/Disable Storeview","Enable/Disable Storeview"
|
59 |
"Export to:","Export to:"
|
60 |
"Extension ZLIB is not loaded.","Extension ZLIB is not loaded."
|
|
|
61 |
"File .htaccess path","File .htaccess path"
|
62 |
"File .htaccess state","File .htaccess state"
|
63 |
"File Mage.php is not patched","File Mage.php is not patched"
|
@@ -67,36 +75,47 @@
|
|
67 |
"Generate error","Generate error"
|
68 |
"Generating complete for website '%s'. Wrote %d urls","Generating complete for website '%s'. Wrote %d urls"
|
69 |
"Generating for website '%s' fail.","Generating for website '%s' fail."
|
70 |
-
"
|
71 |
"Htaccess does not exist.","Htaccess does not exist."
|
72 |
"Htaccess is not writable.","Htaccess is not writable."
|
73 |
"Htaccess model has not assigned website","Htaccess model has not assigned website"
|
74 |
"Htaccess settings","Htaccess settings"
|
75 |
"I can't create '%s'. Please, check permission to create this directory.","I can't create '%s'. Please, check permission to create this directory."
|
|
|
76 |
"I can't open/create urllist file '%s'.","I can't open/create urllist file '%s'."
|
77 |
"I can't write to urllist file '%s'","I can't write to urllist file '%s'"
|
78 |
"ID","ID"
|
79 |
-
"INFO_UPGRADE_LICENSE_EXPIRED","
|
80 |
-
"INFO_UPGRADE_NOT_ACTIVE","
|
81 |
-
|
82 |
"Inserting MTurbo directives fail. Htaccess template not found.","Inserting MTurbo directives fail. Htaccess template not found."
|
83 |
"Inserting MTurbo directives into htaccess fail.","Inserting MTurbo directives into htaccess fail."
|
|
|
84 |
"Installation complete. Welcome!!!","Installation complete. Welcome!!!"
|
85 |
-
"Installation succesfull. Now will be your Magento faster than other.","Installation succesfull. Now will be your Magento faster than
|
|
|
|
|
86 |
"Last refresh","Last refresh"
|
87 |
-
"
|
88 |
"Layout names of dynamic loaded blocks","Layout names of dynamic loaded blocks"
|
|
|
|
|
|
|
|
|
89 |
"M-Turbo Cache Management","M-Turbo Cache Management"
|
90 |
"M-Turbo Management - Downloading pages","M-Turbo Management - Downloading pages"
|
91 |
"M-Turbo Management","M-Turbo Management"
|
|
|
92 |
"M-Turbo installation problem","M-Turbo installation problem"
|
93 |
"M-Turbo installation succesfull. Please see into System/M-Turbo Management","M-Turbo installation succesfull. Please see into System/M-Turbo Management"
|
94 |
-
"M-Turbo
|
95 |
-
"
|
96 |
-
"
|
|
|
97 |
"Magento Turbo Cache Management","Magento Turbo Cache Management"
|
98 |
"Main Configuration","Main Configuration"
|
99 |
"Menu","Menu"
|
|
|
100 |
"My Cart (%s item)","My Cart (%s item)"
|
101 |
"My Cart (%s items)","My Cart (%s items)"
|
102 |
"My Cart","My Cart"
|
@@ -109,8 +128,9 @@ support@artio.net."
|
|
109 |
"OK","OK"
|
110 |
"Other","Other"
|
111 |
"Page downloaded: ","Page downloaded: "
|
112 |
-
"Page
|
113 |
-
"Page was succesfull
|
|
|
114 |
"Page","Page"
|
115 |
"Patch already removed","Patch already removed"
|
116 |
"Patch already used","Patch already used"
|
@@ -118,6 +138,7 @@ support@artio.net."
|
|
118 |
"Patch was removed.","Patch was removed."
|
119 |
"Path '%s' is not correct.","Path '%s' is not correct."
|
120 |
"Path '%s' is not usable. This path is used by system Magento, please enter other path.","Path '%s' is not usable. This path is used by system Magento, please enter other path."
|
|
|
121 |
"Permission denied. Cannot write to Mage.php","Permission denied. Cannot write to Mage.php"
|
122 |
"Please select item(s)","Please select item(s)"
|
123 |
"Poll Block (sidebar)","Poll Block (sidebar)"
|
@@ -134,23 +155,31 @@ support@artio.net."
|
|
134 |
"Rebuild .htaccess for all websites","Rebuild .htaccess for all websites"
|
135 |
"Rebuild .htaccess for all websites.","Rebuild .htaccess for all websites."
|
136 |
"Rebuild .htaccess for this website","Rebuild .htaccess for this website"
|
137 |
-
"Rebuild
|
138 |
"Record was successfully updated.","Record was successfully updated."
|
139 |
"Registration","Registration"
|
140 |
"Relative path from webroot","Relative path from webroot"
|
|
|
141 |
"Remove Mage Patch","Remove Mage Patch"
|
142 |
"Remove all cached pages","Remove all cached pages"
|
143 |
"Remove error:","Remove error:"
|
|
|
144 |
"Removing MTurbo directives fail. Terminating MTurbo directive not found. The htaccess may be corrupted.","Removing MTurbo directives fail. Terminating MTurbo directive not found. The htaccess may be corrupted."
|
145 |
"Removing MTurbo directives from htaccess fail.","Removing MTurbo directives from htaccess fail."
|
146 |
"Request path","Request path"
|
147 |
"Save and Install","Save and Install"
|
148 |
"Save configuration","Save configuration"
|
|
|
|
|
|
|
149 |
"Select All","Select All"
|
150 |
"Select Visible","Select Visible"
|
|
|
151 |
"Setting 'allow_url_fopen' is disabled.","Setting 'allow_url_fopen' is disabled."
|
152 |
"Size","Size"
|
153 |
"Skip blocked page: ","Skip blocked page: "
|
|
|
|
|
154 |
"Starting download pages, please wait...","Starting download pages, please wait..."
|
155 |
"Status","Status"
|
156 |
"Store View","Store View"
|
@@ -161,26 +190,32 @@ support@artio.net."
|
|
161 |
"The maximum number of htaccess backups","The maximum number of htaccess backups"
|
162 |
"The minimum size to decision, the page is alright (bytes)","The minimum size to decision, the page is alright (bytes)"
|
163 |
"This action completely removes M-Turbo from your Magento","This action completely removes M-Turbo from your Magento"
|
|
|
164 |
"This tab contains invalid data. Please solve the problem before saving.","This tab contains invalid data. Please solve the problem before saving."
|
165 |
"Total %d records found","Total %d records found"
|
166 |
"Total of %d page(s) were successfully purged.","Total of %d page(s) were successfully purged."
|
167 |
"Total of %d record(s) were successfully deleted.","Total of %d record(s) were successfully deleted."
|
168 |
"Total of %d record(s) were successfully updated.","Total of %d record(s) were successfully updated."
|
|
|
169 |
"Turbopath directory","Turbopath directory"
|
170 |
-
"Two diferent websites can't have one base dir. Please check, that each website has unique base dir.","Two diferent websites can't have one base dir. Please check, that each website has unique base dir."
|
171 |
"Type","Type"
|
172 |
"Unable to retrieve the contents of htaccess.","Unable to retrieve the contents of htaccess."
|
|
|
173 |
"Unable to save installation file in temp directory.","Unable to save installation file in temp directory."
|
174 |
"Unable to unpack install package.","Unable to unpack install package."
|
175 |
"Unblock","Unblock"
|
176 |
-
"Uninstall M-Turbo complete","Uninstall M-Turbo complete"
|
177 |
"Uninstall M-Turbo","Uninstall M-Turbo"
|
|
|
|
|
|
|
|
|
178 |
"Uninstall error","Uninstall error"
|
179 |
"Uninstall","Uninstall"
|
180 |
"Unselect All","Unselect All"
|
181 |
"Unselect Visible","Unselect Visible"
|
182 |
"Update URLs from Rewrite Table","Update URLs from Rewrite Table"
|
183 |
"Upgrade complete, please refresh Magento system cache","Upgrade complete, please refresh Magento system cache"
|
|
|
184 |
"Upgrade to Full Version","Upgrade to Full Version"
|
185 |
"Url","Url"
|
186 |
"Using CURL PHP extensions","Using CURL PHP extensions"
|
@@ -189,19 +224,17 @@ support@artio.net."
|
|
189 |
"View","View"
|
190 |
"Warning: Please don't close window during downloading pages","Warning: Please don't close window during downloading pages"
|
191 |
"Websites Configuration","Websites Configuration"
|
192 |
-
"Welcome text","<p>Welcome to M-Turbo Cache developed by Artio.
|
193 |
To complete installation, we need to have entered the path to your directory where you want to store cached pages.
|
194 |
This path is then entered into a .htaccess file, which is a function of the components necessary.</p><p>More, you can choose
|
195 |
which website you want to caches and which not. Each website you can also choose storeview.
|
196 |
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
197 |
-
which does must not correspond to the base dir for the frontend.</p>"
|
198 |
-
"Welcome text
|
199 |
To complete installation, we need to have entered the path to your directory where you want to store cached pages.
|
200 |
This path is then entered into a .htaccess file, which is a function of the components necessary.</p><p>More, you can choose
|
201 |
which website you want to caches and which not. Each website you can also choose storeview.
|
202 |
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
203 |
-
which does must not correspond to the base dir for the frontend.</p><p style=""color:red"">Note: In demo version you can enable only one website.</p>"
|
204 |
-
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
205 |
which does must not correspond to the base dir for the frontend.</p>"
|
206 |
"Your Download ID","Your Download ID"
|
207 |
"Your download ID is not valid. I can't upgrade your MTurbo.","Your download ID is not valid. I can't upgrade your MTurbo."
|
1 |
" Generate a list of the URLs and store it on the disk. This action will be executed if Automatic cache management is enabled."," Generate a list of the URLs and store it on the disk. This action will be executed if Automatic cache management is enabled."
|
2 |
+
"'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'. Exception %s","'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'. Exception %s"
|
3 |
+
"'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'.","'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'."
|
4 |
"(hours : minutes)","(hours : minutes)"
|
5 |
"Actions","Actions"
|
6 |
"Add newly created categories to select","Add newly created categories to select"
|
7 |
"Added newly cms to select","Added newly cms to select"
|
8 |
+
"All pages was succesfully removed","All pages was succesfully removed"
|
9 |
+
"Apply Layout Patch","Apply Layout Patch"
|
10 |
"Apply Mage Patch","Apply Mage Patch"
|
11 |
"Apply the patch only just in case you need to use Direct Access download method!","Apply the patch only just in case you need to use Direct Access download method!"
|
12 |
"Are you sure?","Are you sure?"
|
13 |
"Automatic cache management","Automatic cache management"
|
14 |
"Base directory","Base directory"
|
15 |
"Block","Block"
|
16 |
+
"Blocked page can't refresh","Blocked page can't refresh"
|
17 |
"Blocked","Blocked"
|
|
|
18 |
"CMS page","CMS page"
|
19 |
"CMS","CMS"
|
20 |
"CURL is not installed","CURL is not installed"
|
24 |
"Cache selected pages","Cache selected pages"
|
25 |
"Cache","Cache"
|
26 |
"Cached","Cached"
|
27 |
+
"Cannot read Layout.php file","Cannot read Layout.php file"
|
28 |
+
"Cannot read Mage.php file","Cannot read Mage.php file"
|
29 |
+
"Cannot read patch file","Cannot read patch file"
|
30 |
"Cart Block (sidebar)","Cart Block (sidebar)"
|
31 |
"Categories","Categories"
|
32 |
"Category view","Category view"
|
33 |
+
"Clearing turbocache directory error","Clearing turbocache directory error"
|
34 |
"Company","Company"
|
35 |
"Compare Block (sidebar)","Compare Block (sidebar)"
|
36 |
"Configuration error","Configuration error"
|
37 |
"Configuration was successfully saved","Configuration was successfully saved"
|
38 |
+
"Connection to server could not be established.","Connection to server could not be established."
|
39 |
+
"Copying js file failed! Dynamic blocks won't work for this theme. Copy 'mturbo.js' from default theme, please!","Copying js file failed! Dynamic blocks won't work for this theme. Copy 'mturbo.js' from default theme, please!"
|
40 |
"Create cache for all pages (except blocked pages). Download progress can be monitored in a separate window. Please, do not close this window. Update of URLs from the Rewrite Table will be started automatically before caching is executed. Please, note that initial cache creation may take a long time (several hours). Time needed depends on the number of pages your site has.","Create cache for all pages (except blocked pages). Download progress can be monitored in a separate window. Please, do not close this window. Update of URLs from the Rewrite Table will be started automatically before caching is executed. Please, note that initial cache creation may take a long time (several hours). Time needed depends on the number of pages your site has."
|
41 |
"Create connection over sockets","Create connection over sockets"
|
42 |
+
"Creating directory '%s' fails","Creating directory '%s' fails"
|
43 |
+
"DOMAIN DOES NOT MATCH","DOMAIN DOES NOT MATCH"
|
44 |
"Date","Date"
|
45 |
+
"Db records was removed.","Db records was removed."
|
46 |
"Delete","Delete"
|
47 |
"Direct access (created new instance Magento)","Direct access (created new instance Magento)"
|
48 |
"Download ID not set.","Download ID not set."
|
50 |
"Download method","Download method"
|
51 |
"Downloaded <strong>%s</strong> pages","Downloaded <strong>%s</strong> pages"
|
52 |
"Dynamic loaded blocks","Dynamic loaded blocks"
|
53 |
+
"ERROR_DOWNLOAD_ID_NOT_FOUND","ERROR_DOWNLOAD_ID_NOT_FOUND"
|
54 |
+
"ERROR_REG_CHECK_FAIL","ERROR_REG_CHECK_FAIL"
|
55 |
"Edited by MTurbo","Edited by MTurbo"
|
56 |
"Enable automatic cache refresh","Enable automatic cache refresh"
|
57 |
"Enable automatic refresh after save CMS pages","Enable automatic refresh after save CMS pages"
|
58 |
+
"Enable automatic refresh for parent of saved product (configurable, grouped, bundled)","Enable automatic refresh for parent of saved product (configurable, grouped, bundled)"
|
59 |
"Enable automatic refresh for preview of categories of saved product","Enable automatic refresh for preview of categories of saved product"
|
60 |
"Enable automatic refresh for preview of saved category","Enable automatic refresh for preview of saved category"
|
61 |
"Enable automatic refresh for previews of parents of categories of saved product","Enable automatic refresh for previews of parents of categories of saved product"
|
62 |
"Enable automatic refresh for previews of parents of saved category","Enable automatic refresh for previews of parents of saved category"
|
63 |
+
"Enable making htaccess backup","Enable making htaccess backup"
|
64 |
"Enable website","Enable website"
|
65 |
"Enable/Disable Storeview","Enable/Disable Storeview"
|
66 |
"Export to:","Export to:"
|
67 |
"Extension ZLIB is not loaded.","Extension ZLIB is not loaded."
|
68 |
+
"File '%s' is not writeable, please change permission.","File '%s' is not writeable, please change permission."
|
69 |
"File .htaccess path","File .htaccess path"
|
70 |
"File .htaccess state","File .htaccess state"
|
71 |
"File Mage.php is not patched","File Mage.php is not patched"
|
75 |
"Generate error","Generate error"
|
76 |
"Generating complete for website '%s'. Wrote %d urls","Generating complete for website '%s'. Wrote %d urls"
|
77 |
"Generating for website '%s' fail.","Generating for website '%s' fail."
|
78 |
+
"Htaccess for website '%s' was rebuilded.","Htaccess for website '%s' was rebuilded."
|
79 |
"Htaccess does not exist.","Htaccess does not exist."
|
80 |
"Htaccess is not writable.","Htaccess is not writable."
|
81 |
"Htaccess model has not assigned website","Htaccess model has not assigned website"
|
82 |
"Htaccess settings","Htaccess settings"
|
83 |
"I can't create '%s'. Please, check permission to create this directory.","I can't create '%s'. Please, check permission to create this directory."
|
84 |
+
"I can't find function addBlock","I can't find function addBlock"
|
85 |
"I can't open/create urllist file '%s'.","I can't open/create urllist file '%s'."
|
86 |
"I can't write to urllist file '%s'","I can't write to urllist file '%s'"
|
87 |
"ID","ID"
|
88 |
+
"INFO_UPGRADE_LICENSE_EXPIRED","INFO_UPGRADE_LICENSE_EXPIRED"
|
89 |
+
"INFO_UPGRADE_NOT_ACTIVE","INFO_UPGRADE_NOT_ACTIVE"
|
90 |
+
"If you not see newly added category or CMS, then push the 'Synchronize' button.","If you not see newly added category or CMS, then push the 'Synchronize' button."
|
91 |
"Inserting MTurbo directives fail. Htaccess template not found.","Inserting MTurbo directives fail. Htaccess template not found."
|
92 |
"Inserting MTurbo directives into htaccess fail.","Inserting MTurbo directives into htaccess fail."
|
93 |
+
"Install error","Install error"
|
94 |
"Installation complete. Welcome!!!","Installation complete. Welcome!!!"
|
95 |
+
"Installation succesfull. Now will be your Magento faster than other.","Installation succesfull. Now will be your Magento faster than other."
|
96 |
+
"Interpret for downloading script","Interpret for downloading script"
|
97 |
+
"JavaScript Watcher (this control watches existing javascript in all your theme packages)","JavaScript Watcher (this control watches existing javascript in all your theme packages)"
|
98 |
"Last refresh","Last refresh"
|
99 |
+
"Launching this action will update cached URLs based on current values from the Rewrite Table. We recommend runing this action after major modifications to the products or categories.","Launchng this action will update cached URLs based on current values from the Rewrite Table. We recommend runing this action after major modifications to the products or categories."
|
100 |
"Layout names of dynamic loaded blocks","Layout names of dynamic loaded blocks"
|
101 |
+
"Layout patch uninstall error","Layout patch uninstall error"
|
102 |
+
"Layout patch was removed.","Layout patch was removed."
|
103 |
+
"Layout patch","Layout patch"
|
104 |
+
"Layout state","Layout state"
|
105 |
"M-Turbo Cache Management","M-Turbo Cache Management"
|
106 |
"M-Turbo Management - Downloading pages","M-Turbo Management - Downloading pages"
|
107 |
"M-Turbo Management","M-Turbo Management"
|
108 |
+
"M-Turbo directives from .htaccess was removed.","M-Turbo directives from .htaccess was removed."
|
109 |
"M-Turbo installation problem","M-Turbo installation problem"
|
110 |
"M-Turbo installation succesfull. Please see into System/M-Turbo Management","M-Turbo installation succesfull. Please see into System/M-Turbo Management"
|
111 |
+
"M-Turbo upgrade succesfull. Please see into System/M-Turbo Management","M-Turbo upgrade succesfull. Please see into System/M-Turbo Management"
|
112 |
+
"M-Turbo upgrading problem","M-Turbo upgrading problem"
|
113 |
+
"Mage patch uninstall error","Mage patch uninstall error"
|
114 |
+
"Mage patch was removed.","Mage patch was removed."
|
115 |
"Magento Turbo Cache Management","Magento Turbo Cache Management"
|
116 |
"Main Configuration","Main Configuration"
|
117 |
"Menu","Menu"
|
118 |
+
"Model '%s' is not writeable. Please change permission to write for patch.","Model '%s' is not writeable. Please change permission to write for patch."
|
119 |
"My Cart (%s item)","My Cart (%s item)"
|
120 |
"My Cart (%s items)","My Cart (%s items)"
|
121 |
"My Cart","My Cart"
|
128 |
"OK","OK"
|
129 |
"Other","Other"
|
130 |
"Page downloaded: ","Page downloaded: "
|
131 |
+
"Page is too small or 404","Page is too small or 404"
|
132 |
+
"Page was succesfull download. Now is cached.","Page was succesfull download. Now is cached."
|
133 |
+
"Page was succesfull purge from disk.","Page was succesfull purge from disk."
|
134 |
"Page","Page"
|
135 |
"Patch already removed","Patch already removed"
|
136 |
"Patch already used","Patch already used"
|
138 |
"Patch was removed.","Patch was removed."
|
139 |
"Path '%s' is not correct.","Path '%s' is not correct."
|
140 |
"Path '%s' is not usable. This path is used by system Magento, please enter other path.","Path '%s' is not usable. This path is used by system Magento, please enter other path."
|
141 |
+
"Permission denied. Cannot write to Layout.php","Permission denied. Cannot write to Layout.php"
|
142 |
"Permission denied. Cannot write to Mage.php","Permission denied. Cannot write to Mage.php"
|
143 |
"Please select item(s)","Please select item(s)"
|
144 |
"Poll Block (sidebar)","Poll Block (sidebar)"
|
155 |
"Rebuild .htaccess for all websites","Rebuild .htaccess for all websites"
|
156 |
"Rebuild .htaccess for all websites.","Rebuild .htaccess for all websites."
|
157 |
"Rebuild .htaccess for this website","Rebuild .htaccess for this website"
|
158 |
+
"Rebuild htaccess for website '%s' fail.","Rebuild htaccess for website '%s' fail."
|
159 |
"Record was successfully updated.","Record was successfully updated."
|
160 |
"Registration","Registration"
|
161 |
"Relative path from webroot","Relative path from webroot"
|
162 |
+
"Remove Layout Patch","Remove Layout Patch"
|
163 |
"Remove Mage Patch","Remove Mage Patch"
|
164 |
"Remove all cached pages","Remove all cached pages"
|
165 |
"Remove error:","Remove error:"
|
166 |
+
"Removing M-Turbo directives from .htaccess error","Removing M-Turbo directives from .htaccess error"
|
167 |
"Removing MTurbo directives fail. Terminating MTurbo directive not found. The htaccess may be corrupted.","Removing MTurbo directives fail. Terminating MTurbo directive not found. The htaccess may be corrupted."
|
168 |
"Removing MTurbo directives from htaccess fail.","Removing MTurbo directives from htaccess fail."
|
169 |
"Request path","Request path"
|
170 |
"Save and Install","Save and Install"
|
171 |
"Save configuration","Save configuration"
|
172 |
+
"Script '%s' is not executable. Please change permission or define interpret for downloading script","Script '%s' is not executable. Please change permission or define interpret for downloading script"
|
173 |
+
"Script '%s' is not executable. Please change permission","Script '%s' is not executable. Please change permission"
|
174 |
+
"Script state","Script state"
|
175 |
"Select All","Select All"
|
176 |
"Select Visible","Select Visible"
|
177 |
+
"Server name","Server name"
|
178 |
"Setting 'allow_url_fopen' is disabled.","Setting 'allow_url_fopen' is disabled."
|
179 |
"Size","Size"
|
180 |
"Skip blocked page: ","Skip blocked page: "
|
181 |
+
"Some .htaccess was not builded. Please check it on 'Website Configuration'","Some .htaccess was not builded. Please check it on 'Website Configuration'"
|
182 |
+
"Some files were not deleted:<br />","Some files were not deleted:<br />"
|
183 |
"Starting download pages, please wait...","Starting download pages, please wait..."
|
184 |
"Status","Status"
|
185 |
"Store View","Store View"
|
190 |
"The maximum number of htaccess backups","The maximum number of htaccess backups"
|
191 |
"The minimum size to decision, the page is alright (bytes)","The minimum size to decision, the page is alright (bytes)"
|
192 |
"This action completely removes M-Turbo from your Magento","This action completely removes M-Turbo from your Magento"
|
193 |
+
"This patch is required for dynamic loaded blocks. (Patched file: app/code/core/Mage/Core/Model/Layout.php)","This patch is required for dynamic loaded blocks. (Patched file: app/code/core/Mage/Core/Model/Layout.php)"
|
194 |
"This tab contains invalid data. Please solve the problem before saving.","This tab contains invalid data. Please solve the problem before saving."
|
195 |
"Total %d records found","Total %d records found"
|
196 |
"Total of %d page(s) were successfully purged.","Total of %d page(s) were successfully purged."
|
197 |
"Total of %d record(s) were successfully deleted.","Total of %d record(s) were successfully deleted."
|
198 |
"Total of %d record(s) were successfully updated.","Total of %d record(s) were successfully updated."
|
199 |
+
"Turbocache directory was removed.","Turbocache directory was removed."
|
200 |
"Turbopath directory","Turbopath directory"
|
|
|
201 |
"Type","Type"
|
202 |
"Unable to retrieve the contents of htaccess.","Unable to retrieve the contents of htaccess."
|
203 |
+
"Unable to save installation file in '%s' directory.","Unable to save installation file in '%s' directory."
|
204 |
"Unable to save installation file in temp directory.","Unable to save installation file in temp directory."
|
205 |
"Unable to unpack install package.","Unable to unpack install package."
|
206 |
"Unblock","Unblock"
|
|
|
207 |
"Uninstall M-Turbo","Uninstall M-Turbo"
|
208 |
+
"Uninstall MTurbo from PEAR error","Uninstall MTurbo from PEAR error"
|
209 |
+
"Uninstall PEAR package failed. Probably you have not permission to remove files. Please, go to System/Magento Connect Manager and there finish uinstall of MTurbo. More information about uninstall of MTurbo you can get in file var/uninstallmturbo.log. ","Uninstall PEAR package failed. Probably you have not permission to remove files. Please, go to System/Magento Connect Manager and there finish uinstall of MTurbo. More information about uninstall of MTurbo you can get in file var/uninstallmturbo.log. "
|
210 |
+
"Uninstall complete. Please refresh standard Magento Cache","Uninstall complete. Please refresh standard Magento Cache"
|
211 |
+
"Uninstall db records error","Uninstall db records error"
|
212 |
"Uninstall error","Uninstall error"
|
213 |
"Uninstall","Uninstall"
|
214 |
"Unselect All","Unselect All"
|
215 |
"Unselect Visible","Unselect Visible"
|
216 |
"Update URLs from Rewrite Table","Update URLs from Rewrite Table"
|
217 |
"Upgrade complete, please refresh Magento system cache","Upgrade complete, please refresh Magento system cache"
|
218 |
+
"Upgrade succesfull.","Upgrade succesfull."
|
219 |
"Upgrade to Full Version","Upgrade to Full Version"
|
220 |
"Url","Url"
|
221 |
"Using CURL PHP extensions","Using CURL PHP extensions"
|
224 |
"View","View"
|
225 |
"Warning: Please don't close window during downloading pages","Warning: Please don't close window during downloading pages"
|
226 |
"Websites Configuration","Websites Configuration"
|
227 |
+
"Welcome text demo","<p>Welcome to M-Turbo Cache developed by Artio.
|
228 |
To complete installation, we need to have entered the path to your directory where you want to store cached pages.
|
229 |
This path is then entered into a .htaccess file, which is a function of the components necessary.</p><p>More, you can choose
|
230 |
which website you want to caches and which not. Each website you can also choose storeview.
|
231 |
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
232 |
+
which does must not correspond to the base dir for the frontend.</p><p style=""color:red"">Note: In demo version you can enable only one website.</p>"
|
233 |
+
"Welcome text","<p>Welcome to M-Turbo Cache developed by Artio.
|
234 |
To complete installation, we need to have entered the path to your directory where you want to store cached pages.
|
235 |
This path is then entered into a .htaccess file, which is a function of the components necessary.</p><p>More, you can choose
|
236 |
which website you want to caches and which not. Each website you can also choose storeview.
|
237 |
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
|
|
|
|
238 |
which does must not correspond to the base dir for the frontend.</p>"
|
239 |
"Your Download ID","Your Download ID"
|
240 |
"Your download ID is not valid. I can't upgrade your MTurbo.","Your download ID is not valid. I can't upgrade your MTurbo."
|
app/locale/es_ES/Artio_MTurbo.csv
ADDED
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'. Exception %s","'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'. Exception %s"
|
2 |
+
"'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'.","'Mage_Core_Model_Layout' was not patched. It is required for dynamic loaded blocks. Please see to 'Dynamic loaded blocks'."
|
3 |
+
" Generate a list of the URLs and store it on the disk. This action will be executed if Automatic cache management is enabled.","Generar una lista de URLs y almacenarlas en el disco. Esta acción será ejecutada si la gestión automática de caché está habilitada."
|
4 |
+
"(hours : minutes)","(horas : minutos)"
|
5 |
+
"Actions","Acciones"
|
6 |
+
"Add newly created categories to select","Añadir categorías recién creadas para seleccionar"
|
7 |
+
"Added newly cms to select","Añadir nuevos cms para seleccionar"
|
8 |
+
"All pages was succesfully removed","Las páginas fueron removidas exitosamente"
|
9 |
+
"Apply Layout Patch","Aplicar parche layout"
|
10 |
+
"Apply Mage Patch","Aplicar parche mágico"
|
11 |
+
"Apply the patch only just in case you need to use Direct Access download method!","Aplicar el parche sólo en caso de necesitar hacer uso de método de descarga de acceso directo!"
|
12 |
+
"Are you sure?","Está seguro?"
|
13 |
+
"Automatic cache management","Administrados automático de caché"
|
14 |
+
"Base directory","Directorio base"
|
15 |
+
"Block","Bloquear"
|
16 |
+
"Blocked page can't refresh","Página bloqueada no puede ser actualizada"
|
17 |
+
"Blocked","Bloqueada"
|
18 |
+
"CMS page","Página CMS"
|
19 |
+
"CMS","CMS"
|
20 |
+
"CURL is not installed","CURL no está instalada"
|
21 |
+
"Cache Path","Ruta Cache"
|
22 |
+
"Cache actions","Acciones Cache"
|
23 |
+
"Cache all pages","Todas las páginas Cache"
|
24 |
+
"Cache selected pages","Cache páginas seleccionadas"
|
25 |
+
"Cache","Cache"
|
26 |
+
"Cached","Almacenado en cache"
|
27 |
+
"Cannot read Layout.php file","No es posible leer archivo Layout.php"
|
28 |
+
"Cannot read Mage.php file","No es posible leer archivo Mage.php"
|
29 |
+
"Cannot read patch file","No es posible leer archivo reparado"
|
30 |
+
"Cart Block (sidebar)","cesta de bloques (Barra lateral)"
|
31 |
+
"Categories","Categorías"
|
32 |
+
"Category view","Vista de categorías"
|
33 |
+
"Clearing turbocache directory error","Clearing turbocache directory error"
|
34 |
+
"Company","Compañía"
|
35 |
+
"Compare Block (sidebar)","Comparar bloque (Barra lateral)"
|
36 |
+
"Configuration error","Error de configuración"
|
37 |
+
"Configuration was successfully saved","Configuración fué exitosamente guardada"
|
38 |
+
"Connection to server could not be established.","Conección al servidor no pudo ser establecida."
|
39 |
+
"Copying js file failed! Dynamic blocks won't work for this theme. Copy 'mturbo.js' from default theme, please!","Copying js file failed! Dynamic blocks won't work for this theme. Copy 'mturbo.js' from default theme, please!"
|
40 |
+
"Create cache for all pages (except blocked pages). Download progress can be monitored in a separate window. Please, do not close this window. Update of URLs from the Rewrite Table will be started automatically before caching is executed. Please, note that initial cache creation may take a long time (several hours). Time needed depends on the number of pages your site has.","Crear cache para todas las páginas (excepto páginas bloqueadas).Proceso de descarga puede ser monitoreado en otr ventana. Por favor, no cierre esta ventana. Actualizaciones de URLs desde la tabla de reescritura se pondrán en marcha automáticamente antes de que el almacenamento en caché sea ejecutado. Por favor, note que la creación inicial de caché debe tomar un tiempo largo (varias horas). El tiempo necesario depende del número de páginas que su sitio tenga."
|
41 |
+
"Create connection over sockets","Crear una nueva conexión a través de sockets"
|
42 |
+
"Creating directory '%s' fails","Creating directory '%s' fails"
|
43 |
+
"DOMAIN DOES NOT MATCH","El Dominio no corresponde"
|
44 |
+
"Date","Fecha"
|
45 |
+
"Db records was removed.","Db records was removed."
|
46 |
+
"Delete","Eliminar"
|
47 |
+
"Direct access (created new instance Magento)","Acceso directo (crear una nueva instancia de magento)"
|
48 |
+
"Download ID not set.","ID descargado no es establecido."
|
49 |
+
"Download Test","Prueba de descarga"
|
50 |
+
"Download method","método de descarga"
|
51 |
+
"Downloaded <strong>%s</strong> pages","Descargar <strong>%s</strong> páginas"
|
52 |
+
"Dynamic loaded blocks","Bloques dinámicos cargados"
|
53 |
+
"ERROR_DOWNLOAD_ID_NOT_FOUND","El ID de descarga insertado no ha sido encontrado. Por favor, asegurese de haberlo ingresado correctamente. Si está seguro de que éste es correcto y válido, contacte <a href=""mailto:support@artio.net"">support@artio.net</a>."
|
54 |
+
"ERROR_REG_CHECK_FAIL","Verifique la licencia fallida. Por favor, contacte <a href=""mailto:support@artio.net"">support@artio.net</a>."
|
55 |
+
"Edited by MTurbo","Editado por MTurbo"
|
56 |
+
"Enable automatic cache refresh","Permitir actualización automática de cache"
|
57 |
+
"Enable automatic refresh after save CMS pages","Permitir actualización automática después de guardadar páginas CMS"
|
58 |
+
"Enable automatic refresh for preview of categories of saved product","Permitir actualización automática para la vista previa de las categorías de productos guardados"
|
59 |
+
"Enable automatic refresh for preview of saved category","Permitir actualización automática para categorías previamente guardadas"
|
60 |
+
"Enable automatic refresh for previews of parents of categories of saved product","Permitir actualización automática para padres anteriores de categorías de productos guardados"
|
61 |
+
"Enable automatic refresh for previews of parents of saved category","Permitir actualización automática de padres de categorías guardadas"
|
62 |
+
"Enable making htaccess backup","Permitir hacer backup de htaccess"
|
63 |
+
"Enable website","Permitir sitio web"
|
64 |
+
"Enable/Disable Storeview","Habilitar/Deshabilitar ver tienda"
|
65 |
+
"Export to:","Exportar a:"
|
66 |
+
"Extension ZLIB is not loaded.","Extensión ZLIB no está cargada."
|
67 |
+
"File .htaccess path","Archivo con ruta .htaccess"
|
68 |
+
"File .htaccess state","Archivo con acceso .htaccess"
|
69 |
+
"File Mage.php is not patched","Archivo mago.php no fue reparado"
|
70 |
+
"Finished downloading.","Descarga finalizada."
|
71 |
+
"Generate URL list for all websites","Generar lista de URLpara todos los sitios web"
|
72 |
+
"Generate URL list for this website","Generar lista de URL para este sitio web"
|
73 |
+
"Generate error","Generar error"
|
74 |
+
"Generating complete for website '%s'. Wrote %d urls","Completar la generación de la página web '%s'. Escribió %d urls"
|
75 |
+
"Generating for website '%s' fail.","Generar para sitio web fallido'%s'"
|
76 |
+
"Htaccess for website '%s' was rebuilded.","Htaccess para sitio web '%s' fué reconstruido."
|
77 |
+
"Htaccess does not exist.","Htaccess no existe."
|
78 |
+
"Htaccess is not writable.","Htaccess no es reescribibe."
|
79 |
+
"Htaccess model has not assigned website","Modelo Htaccess no ha asignado un sitio web"
|
80 |
+
"Htaccess settings","Ajustes Htaccess"
|
81 |
+
"I can't create '%s'. Please, check permission to create this directory.","No lo puedo crear '%s'. Por favor, verifique los permisos para crear este directorio."
|
82 |
+
"I can't open/create urllist file '%s'.","No puedo abrir/crear archivo de lista de URL '%s'."
|
83 |
+
"I can't write to urllist file '%s'","No puedo escribir un archivo lista de URL '%s'"
|
84 |
+
"ID","ID"
|
85 |
+
"INFO_UPGRADE_LICENSE_EXPIRED","Su licencia está vencida. Por favor, visite <a href=http://www.artio.net/magento-extensions/m-turbo-accelerator"">artio.net</a> para prolongarla"
|
86 |
+
"INFO_UPGRADE_NOT_ACTIVE","La licencia no ha sido activada aún. Por favor, intente de nuevo o contacte support@artio.net."
|
87 |
+
"Inserting MTurbo directives fail. Htaccess template not found.","Inserción de las directivas MTurbo fallidas. Plantilla Htaccess no encontrada."
|
88 |
+
"Inserting MTurbo directives into htaccess fail.","Inserción de directivas MTurbo en htaccess fallido."
|
89 |
+
"Install error","Instalación fallido"
|
90 |
+
"Installation complete. Welcome!!!","Instalación completa. Bienvenido!!!"
|
91 |
+
"Installation succesfull. Now will be your Magento faster than other.","Instalación exitosa. Ahora usted tendrá su Magento más rápido que antes."
|
92 |
+
"Last refresh","última actualización"
|
93 |
+
"Launching this action will update cached URLs based on current values from the Rewrite Table. We recommend runing this action after major modifications to the products or categories.","Lanzando esta acción se actualizarán URLs en cache basado en los valores actuales desde la tabla reescribible. Recomendamos correr esta acción después de modificaciones importantes a los productos o categorías."
|
94 |
+
"Layout names of dynamic loaded blocks","Disponer nombres de bloques de carga dinámica"
|
95 |
+
"Layout patch","Layout parche"
|
96 |
+
"Layout state","Layout estado"
|
97 |
+
"M-Turbo Cache Management","Manejo de M-Turbo Cache"
|
98 |
+
"M-Turbo Management - Downloading pages","Manejo de M-Turbo - Descargando páginas"
|
99 |
+
"M-Turbo Management","Manejo de M-Turbo"
|
100 |
+
"M-Turbo installation problem","Problema de instalación de M-Turbo"
|
101 |
+
"M-Turbo installation succesfull. Please see into System/M-Turbo Management","Instalación exitosa de M-Turbo. Por favor revisar en el sistema de administración de /M-Turbo"
|
102 |
+
"Mage patch uninstall error","Desinstalar parche Mage error"
|
103 |
+
"Magento Turbo Cache Management","Administración de cage Magento Turbo"
|
104 |
+
"Main Configuration","Configuración principal"
|
105 |
+
"Menu","Menu"
|
106 |
+
"My Cart (%s item)","Mi carrito (%s elemento)"
|
107 |
+
"My Cart (%s items)","Mi carrito (%s elemento)"
|
108 |
+
"My Cart","Mi carrito"
|
109 |
+
"Name","Nombre"
|
110 |
+
"Next page","Siguiénte página"
|
111 |
+
"No","No"
|
112 |
+
"Not activated yet","No activado aún"
|
113 |
+
"Not blocked","No bloqueado"
|
114 |
+
"Not cached","Sin cache"
|
115 |
+
"OK","OK"
|
116 |
+
"Other","Otro"
|
117 |
+
"Page downloaded: ","Página descargada: "
|
118 |
+
"Page was succesfull download. Now is cached.","La Página fué exitosamente descargada. Es de caché ahora."
|
119 |
+
"Page was succesfull purge from disk.","La página fué exitosamente purgada del disco."
|
120 |
+
"Page","Página"
|
121 |
+
"Patch already removed","El parche ya está eliminado"
|
122 |
+
"Patch already used","El parche ya está usado"
|
123 |
+
"Patch was applied.","El parche fué aplicado."
|
124 |
+
"Patch was removed.","El parche fué removido."
|
125 |
+
"Path '%s' is not correct.","Parche '%s' no es correcto."
|
126 |
+
"Path '%s' is not usable. This path is used by system Magento, please enter other path.","Esta ruta '%s' no es permitida. Esta ruta es usada por el sistema Magento, por favor ingrese otra ruta."
|
127 |
+
"Permission denied. Cannot write to Layout.php","Permiso denegado. No puede escribir a Layout.php"
|
128 |
+
"Permission denied. Cannot write to Mage.php","Permiso denegado. No puede escribir a Mage.php"
|
129 |
+
"Please select item(s)","Please select item(s)"
|
130 |
+
"Poll Block (sidebar)","Sondeo de bloques (barra lateral)"
|
131 |
+
"Preview fail.","Previa no."
|
132 |
+
"Preview","Anterior"
|
133 |
+
"Previous page","Página anterior"
|
134 |
+
"Processed <strong>%s%% %s/%d</strong> pages","Procesado <strong>%s%% %s/%d</strong> páginas"
|
135 |
+
"Product detail","Product detail"
|
136 |
+
"Products","Products"
|
137 |
+
"Purge all cached pages and relevant directories located on the disk. No caching will be done until cache is recreated.","Limpiar todas las páginas de cache y directorios relevantes localizados en el disco. Ningún almacenamiento en cache será hecho hasta que cache se vuelva a crear."
|
138 |
+
"Purge from disk","Limpiar desde disco"
|
139 |
+
"Purge","Limpiar"
|
140 |
+
"Purging page fail.","Limpieza de página fallido."
|
141 |
+
"Rebuild .htaccess for all websites","Reconstruir .htaccess para todos los sitios Web"
|
142 |
+
"Rebuild .htaccess for all websites.","Reconstruir .htaccess para todos los sitios Web."
|
143 |
+
"Rebuild .htaccess for this website","Reconstruir .htaccess para todos los sitios Web"
|
144 |
+
"Rebuild htaccess for website '%s' fail.","Reconstrucción htaccess para sitios web '%s' fallida."
|
145 |
+
"Record was successfully updated.","Registro fué actualizado exitosamente."
|
146 |
+
"Registration","Registro"
|
147 |
+
"Relative path from webroot","Ruta relativa de Webroot"
|
148 |
+
"Remove Layout Patch","Remover parche layout"
|
149 |
+
"Remove Mage Patch","Remover parche mago"
|
150 |
+
"Remove all cached pages","Remover todas las páginas de cache"
|
151 |
+
"Remove error:","Remover error:"
|
152 |
+
"Removing M-Turbo directives from .htaccess error","Remover directivas de MTurbo faillido"
|
153 |
+
"Removing MTurbo directives fail. Terminating MTurbo directive not found. The htaccess may be corrupted.","Remover directivas de MTurbo faillido. Terminación de la Directiva MTurbo que no se encuentran. El htaccess puede estar dañado."
|
154 |
+
"Removing MTurbo directives from htaccess fail.","Removiendo directavias MTurbo del htaccess faillido."
|
155 |
+
"Request path","Solicitud de ruta"
|
156 |
+
"Save and Install","Guardar e instalar"
|
157 |
+
"Save configuration","Guardar configuración"
|
158 |
+
"Script state","Script estado"
|
159 |
+
"Select All","Seleccionar todo"
|
160 |
+
"Select Visible","Seleccione el visible"
|
161 |
+
"Server name","Nombre del servidor"
|
162 |
+
"Setting 'allow_url_fopen' is disabled.","Ajuste 'Permitir_url_fabierta' está deshabilitado."
|
163 |
+
"Size","Tamaño"
|
164 |
+
"Skip blocked page: ","Saltar páginas bloqueadas: "
|
165 |
+
"Starting download pages, please wait...","Iniciar descarga de páginas, por favor espere..."
|
166 |
+
"Status","Estado"
|
167 |
+
"Store View","Ver tienda"
|
168 |
+
"Synchronization complete","Sincronización completa"
|
169 |
+
"Synchronization error","Error en sincronización"
|
170 |
+
"Synchronize","Sincronizar"
|
171 |
+
"The information in this tab has been changed.","La información contenida en esta ficha ha cambiado."
|
172 |
+
"The maximum number of htaccess backups","El máximo número de htaccess backups"
|
173 |
+
"The minimum size to decision, the page is alright (bytes)","Tamaño mínimo de la decisión, la página está bien (bytes)"
|
174 |
+
"This action completely removes M-Turbo from your Magento","Esta acción remueve completamente M-Turbo de su Magento"
|
175 |
+
"This tab contains invalid data. Please solve the problem before saving.","This tab contains invalid data. Por favor resuelva este problema antes de guardar."
|
176 |
+
"Total %d records found","Total %d de registros encontrados"
|
177 |
+
"Total of %d page(s) were successfully purged.","Total de %d páginas(s) fueron exitosamente limpiadas."
|
178 |
+
"Total of %d record(s) were successfully deleted.","Total de %d registro(s)fueron exitosamente eliminadas."
|
179 |
+
"Total of %d record(s) were successfully updated.","Total de %d registro(s)fueron exitosamente actualizados."
|
180 |
+
"Turbopath directory","directorio Turbopath"
|
181 |
+
"Type","Tipo"
|
182 |
+
"Unable to retrieve the contents of htaccess.","Imposible recuperar el contenido de htaccess."
|
183 |
+
"Unable to save installation file in %s directory.","Imposible guardar archivo de instalación en directorio %s."
|
184 |
+
"Unable to save installation file in temp directory.","Imposible guardar archivo de instalación en directorio temporal."
|
185 |
+
"Unable to unpack install package.","Incapaz de descomprimir el paquete de instalación."
|
186 |
+
"Unblock","Desbloquear"
|
187 |
+
"Uninstall M-Turbo","Desinstalar M-Turbo"
|
188 |
+
"Uninstall complete. Please refresh standard Magento Cache","Desinstalar M-Turbo completa."
|
189 |
+
"Uninstall MTurbo from PEAR error","Desinstalar error"
|
190 |
+
"Uninstall error","Desinstalar error"
|
191 |
+
"Uninstall","Desinstalar"
|
192 |
+
"Unselect All","Cancelar la selección de todos"
|
193 |
+
"Unselect Visible","Cancelar la selección visible"
|
194 |
+
"Update URLs from Rewrite Table","Actualizar URLs de la tabla reescribible"
|
195 |
+
"Upgrade complete, please refresh Magento system cache","Actualización completa, por favor actualice el sistema de cache Magento"
|
196 |
+
"Upgrade to Full Version","Actualizar versión completa"
|
197 |
+
"Url","Url"
|
198 |
+
"Using CURL PHP extensions","Usar extensiones CURL PHP"
|
199 |
+
"Using function 'file_get_contents'","Usar función 'file_get_contents'"
|
200 |
+
"Values separated by (',').","Valores separados por (',')."
|
201 |
+
"View","Vista"
|
202 |
+
"Warning: Please don't close window during downloading pages","Advertecia: Por favor no cierre la ventana mientras descarga páginas"
|
203 |
+
"Websites Configuration","Configuración de sitios Web"
|
204 |
+
"Welcome text demo","<p>Welcome to M-Turbo Cache developed by Artio.
|
205 |
+
To complete installation, we need to have entered the path to your directory where you want to store cached pages.
|
206 |
+
This path is then entered into a .htaccess file, which is a function of the components necessary.</p><p>More, you can choose
|
207 |
+
which website you want to caches and which not. Each website you can also choose storeview.
|
208 |
+
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
209 |
+
which does must not correspond to the base dir for the frontend.</p><p style=""color:red"">Note: In demo version you can enable only one website.</p>"
|
210 |
+
In addition, please fill out the base directory of each website. In the default settings is set base dir for the administration,
|
211 |
+
which does must not correspond to the base dir for the frontend.</p>"
|
212 |
+
"Welcome text","<p>Bienvenido a M-Turbo Cache desarrollado por Artio.
|
213 |
+
Para completar la instalación, necesitamos ingresar la ruta al directorio donde usted desea almacenar las páginas en cache.
|
214 |
+
Esta ruta es entonces ingresada a un archivo .htaccess, el cual es una función de los componentes necesarios.</p><p>Además, usted puede elegir
|
215 |
+
cual web side quiere en cache y cual no. De cada sitio Web usted puede también elegir vista de tienda.
|
216 |
+
Adicionalmente, por favor rellene el directorio base de cada sitio web. En las configuraciones predeterminadas está establecido el directorio base para la administración,
|
217 |
+
el cual no debe corresponder con el directorio base para la interfaz.</p>"
|
218 |
+
"Your Download ID","Su ID de descarga"
|
219 |
+
"Your download ID is not valid. I can't upgrade your MTurbo.","Su ID de descarga no es váido. No se puede actualizar su MTurbo."
|
220 |
+
"Your first options","Sus primeras opciones"
|
221 |
+
"empty output","Salida vacía"
|
222 |
+
"items selected","Elementos seleccionados"
|
223 |
+
"of %s pages","de %s páginas"
|
224 |
+
"per page","por página"
|
225 |
+
"Enable automatic refresh for parent of saved product (configurable, grouped, bundled)","Enable automatic refresh for parent of saved product (configurable, grouped, bundled)"
|
226 |
+
"File '%s' is not writeable, please change permission.","File '%s' is not writeable, please change permission."
|
227 |
+
"I can't find function addBlock","I can't find function addBlock"
|
228 |
+
"If you not see newly added category or CMS, then push the 'Synchronize' button.","If you not see newly added category or CMS, then push the 'Synchronize' button."
|
229 |
+
"Interpret for downloading script","Interpret for downloading script"
|
230 |
+
"JavaScript Watcher (this control watches existing javascript in all your theme packages)","JavaScript Watcher (this control watches existing javascript in all your theme packages)"
|
231 |
+
"Layout patch uninstall error","Layout patch uninstall error"
|
232 |
+
"Layout patch was removed.","Layout patch was removed."
|
233 |
+
"M-Turbo directives from .htaccess was removed.","M-Turbo directives from .htaccess was removed."
|
234 |
+
"M-Turbo upgrade succesfull. Please see into System/M-Turbo Management","M-Turbo upgrade succesfull. Please see into System/M-Turbo Management"
|
235 |
+
"M-Turbo upgrading problem","M-Turbo upgrading problem"
|
236 |
+
"Mage patch was removed.","Mage patch was removed."
|
237 |
+
"Model '%s' is not writeable. Please change permission to write for patch.","Model '%s' is not writeable. Please change permission to write for patch."
|
238 |
+
"Page is too small or 404","Page is too small or 404"
|
239 |
+
"Script '%s' is not executable. Please change permission or define interpret for downloading script","Script '%s' is not executable. Please change permission or define interpret for downloading script"
|
240 |
+
"Script '%s' is not executable. Please change permission","Script '%s' is not executable. Please change permission"
|
241 |
+
"Some .htaccess was not builded. Please check it on 'Website Configuration'","Some .htaccess was not builded. Please check it on 'Website Configuration'"
|
242 |
+
"Some files were not deleted:<br />","Some files were not deleted:<br />"
|
243 |
+
"This patch is required for dynamic loaded blocks. (Patched file: app/code/core/Mage/Core/Model/Layout.php)","This patch is required for dynamic loaded blocks. (Patched file: app/code/core/Mage/Core/Model/Layout.php)"
|
244 |
+
"Turbocache directory was removed.","Turbocache directory was removed."
|
245 |
+
"Uninstall PEAR package failed. Probably you have not permission to remove files. Please, go to System/Magento Connect Manager and there finish uinstall of MTurbo. More information about uninstall of MTurbo you can get in file var/uninstallmturbo.log. ","Uninstall PEAR package failed. Probably you have not permission to remove files. Please, go to System/Magento Connect Manager and there finish uinstall of MTurbo. More information about uninstall of MTurbo you can get in file var/uninstallmturbo.log. "
|
246 |
+
"Uninstall db records error","Uninstall db records error"
|
247 |
+
"Upgrade succesfull.","Upgrade succesfull."
|
package.xml
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>MTurbo</name>
|
4 |
-
<version>1.2.
|
5 |
<stability>stable</stability>
|
6 |
-
<license uri="http://www.artio.net/m-turbo/license">Copyright 2010, ARTIO s.r.o. All rights reserved.</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>MAGENTO E-COMMERCE ACCELERATOR</summary>
|
10 |
-
<description>M-Turbo is a seamlessy working caching component for Magento e-store
|
11 |
-
that provides fast response to shoppers, improves performance of the
|
12 |
-
store and saves significant ammount of server resources. Integral part
|
13 |
of Magento site optimization!</description>
|
14 |
-
<notes>Visit product homepage at
|
15 |
http://www.artio.net/magento-extensions/m-turbo-accelerator</notes>
|
16 |
<authors><author><name>Michal Unzeitig</name><user>auto-converted</user><email>michal.unzeitig@artio.net</email></author><author><name>Jiří Chmiel</name><user>auto-converted</user><email>jiri.chmiel@artio.net</email></author></authors>
|
17 |
-
<date>2011-
|
18 |
-
<time>
|
19 |
-
<contents><target name="
|
20 |
<compatible/>
|
21 |
<dependencies/>
|
22 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>MTurbo</name>
|
4 |
+
<version>1.2.2</version>
|
5 |
<stability>stable</stability>
|
6 |
+
<license uri="http://www.artio.net/m-turbo/license">Copyright 2010-11, ARTIO s.r.o. All rights reserved.</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>MAGENTO E-COMMERCE ACCELERATOR</summary>
|
10 |
+
<description>M-Turbo is a seamlessy working caching component for Magento e-store
|
11 |
+
that provides fast response to shoppers, improves performance of the
|
12 |
+
store and saves significant ammount of server resources. Integral part
|
13 |
of Magento site optimization!</description>
|
14 |
+
<notes>Visit product homepage at:
|
15 |
http://www.artio.net/magento-extensions/m-turbo-accelerator</notes>
|
16 |
<authors><author><name>Michal Unzeitig</name><user>auto-converted</user><email>michal.unzeitig@artio.net</email></author><author><name>Jiří Chmiel</name><user>auto-converted</user><email>jiri.chmiel@artio.net</email></author></authors>
|
17 |
+
<date>2011-09-30</date>
|
18 |
+
<time>14:17:50</time>
|
19 |
+
<contents><target name="magelocal"><dir name="Artio"><dir name="MTurbo"><dir name="Block"><dir name="Adminhtml"><dir name="Edit"><dir name="Tab"><file name="Abstract.php" hash="16a37f270112b175796bb5af02eea84d"/><file name="Actions.php" hash="957345fc43a69aa0fcdeb32e5448ca66"/><file name="Category.php" hash="3eb3d4924ab7d4e7978198d8caf31a30"/><file name="Cms.php" hash="cee56f9271b29ff645e84105c831fd6c"/><file name="Dynamic.php" hash="99fbb6258ef13fdf881e341d7dc32c56"/><file name="License.php" hash="3c405988f5bfc0581b5a7fe1b6204055"/><file name="Main.php" hash="6eca1eae86c0cfabe4d5c51147ec4841"/><file name="Product.php" hash="38d4025873e1e25c4d9289da20178096"/><file name="Uninstall.php" hash="fde35018cd407e8dd2cc7d91b4aafa3a"/><file name="Url.php" hash="f2366956b47613a036aefdb01494cb16"/><file name="Website.php" hash="c02792f23188e0d4c786f8285d59b3e2"/></dir><file name="Form.php" hash="9ba7b56533f6c7f8f8b3a6e1a71fe6ad"/><file name="Tabs.php" hash="a82341a6c981ba91b69774c81a7ad28e"/></dir><dir name="Welcome"><file name="Form.php" hash="10c5680f4ee3768054756413aea6ce44"/></dir><file name="Mturbo.php" hash="4c6758e028e608ce93847a55a1ce27e1"/><file name="Run.php" hash="e6ff24da20d057de3b1e7147a209b395"/><file name="Welcome.php" hash="5acab4515cf35c30bf182eb0529855ad"/></dir><dir name="Checkout"><dir name="Cart"><dir name="Item"><file name="Renderer.php" hash="b93f63e2b1940a889534854ba3fec31c"/></dir></dir></dir><dir name="Data"><dir name="Form"><dir name="Element"><file name="Button.php" hash="c61ec7e27c62364c21e6d893f875ad93"/><file name="CategoryTree.php" hash="128d2bd67969552bb3f413975fc6313a"/><file name="CmsTree.php" hash="db33490dd6b51e596309ef4e96baf55e"/><file name="Html.php" hash="83a40987e47c142e6be58f311d29276d"/><file name="NoEscLabel.php" hash="1ce0fca5efc5e6afcbb96cf818ff7fef"/><file name="SelectDownloadMethod.php" hash="ca4b9117ecc129a08c08f810bed063d5"/><file name="Time.php" hash="c6617317308bd74c9714ccee2ac870bb"/></dir></dir><dir name="Grid"><dir name="Column"><file name="Blocked.php" hash="4e6c21fee2c3d8fc26198471ef79b041"/><file name="ColorOption.php" hash="9efec8edc0a724b1840acfee3333bcc1"/><file name="FileSize.php" hash="b01fca106ea04f0a32d5ead838dd7446"/><file name="SwitchAction.php" hash="35b90030144a8b42d9696f5be0694a20"/></dir></dir></dir><file name="Ajax.php" hash="911e58fe1f3f0a09458bf2200b078fa2"/></dir><dir name="Helper"><dir name="Catalog"><dir name="Product"><file name="Compare.php" hash="969d8a7f3faa2ab54ce48ff0c0e0754b"/></dir></dir><file name="Data.php" hash="7c045fbda491e0fee61c0bf4b81cddea"/><file name="Downloader.php" hash="e703b220f37a29c706e04214e87d90ed"/><file name="Functions.php" hash="14d3580346eaf8aa84433d1b5bb1ec49"/><file name="Info.php" hash="b22f8c7ce96fe72fad4b9d68b9233b11"/><file name="Website.php" hash="daa6610e06be6a66dad11a5f58989611"/></dir><dir name="Model"><dir name="Config"><file name="CmsTransformer.php" hash="a5fca7b305322112e5bddd247ec20074"/><file name="DynamicTransformer.php" hash="c7a66182ebd4dfb3b0a123b3f3dbbddf"/><file name="Website.php" hash="42c7ca045d27c49581569648c5f080be"/><file name="WebsiteTransformer.php" hash="6400c844114316207e18b670859fae1b"/></dir><dir name="DownloadMethods"><file name="Abstract.php" hash="ddac44cb6f0548c0cd303bb1fa3e3e1b"/><file name="Curl.php" hash="cdcd9d20402af9e2a8f5e1a3f713404b"/><file name="Direct.php" hash="980a50b03c9f91e4e896d5757c80c555"/><file name="Filegetcontents.php" hash="9c6c97fc34ea57cd8479cc042a990990"/><file name="Socket.php" hash="7db1aeb2142f400847f4684e2a2b35a2"/></dir><dir name="Mturbo"><file name="Event.php" hash="37a326906f9388f0df14ff181d5c3724"/><file name="File.php" hash="8c28b29ab6b92173babda4c753b6d3c9"/></dir><dir name="Mysql4"><dir name="Mturbo"><file name="Collection.php" hash="c8e06d986966455cd28b37a93b78a23d"/></dir><file name="Mturbo.php" hash="17a258f73ea138481a5727e7b9d383fc"/></dir><dir name="htaccess"><file name="htaccess.txt" hash="e5650ac65b3679a1cbea26ea61b2ad0b"/><file name="htaccessside.txt" hash="7d55f4bb772128b1f8783b319344d17c"/><file name="htaccessstore.txt" hash="bb24289ef3c6e00cdb03bd6abba753d2"/><file name="htaccesswebsite.txt" hash="babc2f09afde8878f4670924e1238376"/></dir><dir name="patches"><file name="layout.txt" hash="4d0055e6119d297fd78deb4c576ae9f0"/><file name="mage.txt" hash="0e2ef3ed32b7041f518f162745812023"/></dir><dir name="scripts"><file name="wgetlib.so" hash="3c0089f912386ac6b5f9e6bb32f996f1"/><file name="wgettrans.so" hash="e4f414b0f796051518b6d951133c856b"/></dir><file name="Config.php" hash="b7cbdef876e859054f50f09d9f7a3ae4"/><file name="DownloadMethodsFactory.php" hash="1bd5932612148116ee745c6bec68edaa"/><file name="Htaccess.php" hash="14364ad2d9a43fe221dd20234b745c1a"/><file name="JsPatch.php" hash="5effc3f6bf8b4c420dd8aee0cef2bdd4"/><file name="LayoutPatch.php" hash="6f7a4fff8f6849dfe43002e31fa9f179"/><file name="Mturbo.php" hash="08f738e50519a807f32b5cff15117acb"/><file name="Observer.php" hash="7f50cd1b1d8fad8308846027a3b0cd2a"/><file name="Patch.php" hash="40e2e1ae19ae61c66b8f8b49326f0928"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="CheckController.php" hash="78c05c96f294f009f35dc8b88537162c"/><file name="MturboController.php" hash="8efab03d9703067dae00ee056440e483"/></dir><file name="AdminhtmlController.php" hash="cb9981505f756dd9658b44b93b07e57c"/><file name="IndexController.php" hash="ee200641e72739996809461740788bca"/></dir><dir name="etc"><file name="config.xml" hash="3645a833032a043e81fdbc161429cce7"/></dir><dir name="sql"><dir name="mturbo_setup"><file name="mysql4-install-1.2.1.php" hash="5c756a617300d923a4bd09e0c5a4fb70"/><file name="mysql4-upgrade-1.0.0-1.2.0.php" hash="5c756a617300d923a4bd09e0c5a4fb70"/><file name="mysql4-upgrade-1.2.0-1.2.1.php" hash="d768025b9a753c77ad124d9d90edb170"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="mturbo.xml" hash="6e20ef84ceeac5a82dc7c7ce6897f12d"/></dir><dir name="template"><dir name="mturbo"><dir name="preview"><file name="tree.phtml" hash="558e2da8b9c5584a94748116fd8249d0"/></dir><file name="demo.phtml" hash="da2b65990f1221d981b1c850f292dae6"/><file name="grid.phtml" hash="f11cea678bbc7230028cf5a870479ac8"/><file name="massaction.phtml" hash="c4ca58cbd05d564129d3c39d452c783e"/><file name="tabs.phtml" hash="1015f2e05a41bb7751b11036e48cbd9f"/><file name="version.phtml" hash="3f7c9b1d76d9f92050fde76c1f869fb4"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="mturbo.xml" hash="679c071acb59fa8a28251acd25738a9b"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Artio_MTurbo.xml" hash="4de5464bc12f3c0702d2c36931bda64d"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Artio_MTurbo.csv" hash="7d2c0ce261450f457be5ab6f61dc5243"/></dir><dir name="es_ES"><file name="Artio_MTurbo.csv" hash="3ff15deb0ae0b1251a3670699453665d"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><file name="mturbo.js" hash="a5dcd5db6565b2b01753f4d05d9e6e73"/></dir></dir></dir><dir name="default"><dir name="default"><dir name="js"><file name="mturbo.js" hash="a5dcd5db6565b2b01753f4d05d9e6e73"/></dir></dir></dir></dir></target></contents>
|
20 |
<compatible/>
|
21 |
<dependencies/>
|
22 |
</package>
|
skin/frontend/base/default/js/mturbo.js
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var mturboloader = {
|
2 |
+
|
3 |
+
url: '',
|
4 |
+
blocks: '',
|
5 |
+
complete: false,
|
6 |
+
cartLink: false,
|
7 |
+
blocksContents: new Array(),
|
8 |
+
|
9 |
+
addBlockRequest: function(blockIdentifier) {
|
10 |
+
if (mturboloader.blocks=='') {
|
11 |
+
mturboloader.blocks = 'identifier[]=' + blockIdentifier;
|
12 |
+
} else {
|
13 |
+
mturboloader.blocks = mturboloader.blocks + '&identifier[]=' + blockIdentifier;
|
14 |
+
}
|
15 |
+
},
|
16 |
+
|
17 |
+
getBlock: function (blockIdentifier) {
|
18 |
+
return mturboloader.blocksContents[blockIdentifier].replace(/&MTURBO!/g, "&");
|
19 |
+
},
|
20 |
+
|
21 |
+
loadBlocks: function(url, referer) {
|
22 |
+
url = url+'?'+this.blocks+'&referer='+referer;
|
23 |
+
new Ajax.Request(url, {
|
24 |
+
method: "get",
|
25 |
+
onSuccess:
|
26 |
+
function(transport) {
|
27 |
+
|
28 |
+
if (window.DOMParser) {
|
29 |
+
parser=new DOMParser();
|
30 |
+
xmlDoc=parser.parseFromString(transport.responseText, "text/xml");
|
31 |
+
}
|
32 |
+
else // Internet Explorer
|
33 |
+
{
|
34 |
+
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
|
35 |
+
xmlDoc.async="false";
|
36 |
+
xmlDoc.loadXML(transport.responseText);
|
37 |
+
}
|
38 |
+
|
39 |
+
var i;
|
40 |
+
var blocks = xmlDoc.childNodes[0].childNodes;
|
41 |
+
for (i=0; i<blocks.length; i++) {
|
42 |
+
|
43 |
+
var name = blocks[i].getAttribute('name');
|
44 |
+
if (name!='') {
|
45 |
+
try {
|
46 |
+
|
47 |
+
// Gecko-based browsers, Safari, Opera.
|
48 |
+
mturboloader.blocksContents[name] = (new XMLSerializer()).serializeToString(blocks[i]);
|
49 |
+
}
|
50 |
+
catch (e) {
|
51 |
+
try {
|
52 |
+
// Internet Explorer
|
53 |
+
mturboloader.blocksContents[name] = blocks[i].xml;
|
54 |
+
}
|
55 |
+
catch (e)
|
56 |
+
{}
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
mturboloader.complete = true;
|
62 |
+
setTimeout('updateCartLink()', 100);
|
63 |
+
}
|
64 |
+
});
|
65 |
+
}
|
66 |
+
|
67 |
+
}
|
68 |
+
function updateCartLink() {
|
69 |
+
var re = new RegExp('checkout/cart/$');
|
70 |
+
var links = document.getElementsByTagName('a');
|
71 |
+
for (var i=0; i<links.length; i++) {
|
72 |
+
if (re.exec(links[i].href)) {
|
73 |
+
if (mturboloader.blocksContents['cartlink'])
|
74 |
+
links[i].innerHTML = mturboloader.blocksContents['cartlink'];
|
75 |
+
else {
|
76 |
+
setTimeout('updateCartLink()', 100);
|
77 |
+
return;
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
81 |
+
}
|