cac6a132 by Marty Penner

Fix line endings in a few files

1 parent 06b69566
Showing 25 changed files with 4376 additions and 4376 deletions
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_APC 30 * PHPExcel_CachedObjectStorage_APC
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private $_cachePrefix = null; 38 private $_cachePrefix = null;
39 39
40 private $_cacheTime = 600; 40 private $_cacheTime = 600;
41 41
42 42
43 private function _storeData() { 43 private function _storeData() {
44 $this->_currentObject->detach(); 44 $this->_currentObject->detach();
45 45
46 if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) { 46 if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) {
47 $this->__destruct(); 47 $this->__destruct();
48 throw new Exception('Failed to store cell '.$cellID.' in APC'); 48 throw new Exception('Failed to store cell '.$cellID.' in APC');
49 } 49 }
50 $this->_currentObjectID = $this->_currentObject = null; 50 $this->_currentObjectID = $this->_currentObject = null;
51 } // function _storeData() 51 } // function _storeData()
52 52
53 53
54 /** 54 /**
55 * Add or Update a cell in cache identified by coordinate address 55 * Add or Update a cell in cache identified by coordinate address
56 * 56 *
57 * @param string $pCoord Coordinate address of the cell to update 57 * @param string $pCoord Coordinate address of the cell to update
58 * @param PHPExcel_Cell $cell Cell to update 58 * @param PHPExcel_Cell $cell Cell to update
59 * @return void 59 * @return void
60 * @throws Exception 60 * @throws Exception
61 */ 61 */
62 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 62 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
63 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 63 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
64 $this->_storeData(); 64 $this->_storeData();
65 } 65 }
66 $this->_cellCache[$pCoord] = true; 66 $this->_cellCache[$pCoord] = true;
67 67
68 $this->_currentObjectID = $pCoord; 68 $this->_currentObjectID = $pCoord;
69 $this->_currentObject = $cell; 69 $this->_currentObject = $cell;
70 70
71 return $cell; 71 return $cell;
72 } // function addCacheData() 72 } // function addCacheData()
73 73
74 74
75 /** 75 /**
76 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? 76 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
77 * 77 *
78 * @param string $pCoord Coordinate address of the cell to check 78 * @param string $pCoord Coordinate address of the cell to check
79 * @return void 79 * @return void
80 * @return boolean 80 * @return boolean
81 */ 81 */
82 public function isDataSet($pCoord) { 82 public function isDataSet($pCoord) {
83 // Check if the requested entry is the current object, or exists in the cache 83 // Check if the requested entry is the current object, or exists in the cache
84 if (parent::isDataSet($pCoord)) { 84 if (parent::isDataSet($pCoord)) {
85 if ($this->_currentObjectID == $pCoord) { 85 if ($this->_currentObjectID == $pCoord) {
86 return true; 86 return true;
87 } 87 }
88 // Check if the requested entry still exists in apc 88 // Check if the requested entry still exists in apc
89 $success = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); 89 $success = apc_fetch($this->_cachePrefix.$pCoord.'.cache');
90 if ($success === false) { 90 if ($success === false) {
91 // Entry no longer exists in APC, so clear it from the cache array 91 // Entry no longer exists in APC, so clear it from the cache array
92 parent::deleteCacheData($pCoord); 92 parent::deleteCacheData($pCoord);
93 throw new Exception('Cell entry '.$cellID.' no longer exists in APC'); 93 throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
94 } 94 }
95 return true; 95 return true;
96 } 96 }
97 return false; 97 return false;
98 } // function isDataSet() 98 } // function isDataSet()
99 99
100 100
101 /** 101 /**
102 * Get cell at a specific coordinate 102 * Get cell at a specific coordinate
103 * 103 *
104 * @param string $pCoord Coordinate of the cell 104 * @param string $pCoord Coordinate of the cell
105 * @throws Exception 105 * @throws Exception
106 * @return PHPExcel_Cell Cell that was found, or null if not found 106 * @return PHPExcel_Cell Cell that was found, or null if not found
107 */ 107 */
108 public function getCacheData($pCoord) { 108 public function getCacheData($pCoord) {
109 if ($pCoord === $this->_currentObjectID) { 109 if ($pCoord === $this->_currentObjectID) {
110 return $this->_currentObject; 110 return $this->_currentObject;
111 } 111 }
112 $this->_storeData(); 112 $this->_storeData();
113 113
114 // Check if the entry that has been requested actually exists 114 // Check if the entry that has been requested actually exists
115 if (parent::isDataSet($pCoord)) { 115 if (parent::isDataSet($pCoord)) {
116 $obj = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); 116 $obj = apc_fetch($this->_cachePrefix.$pCoord.'.cache');
117 if ($obj === false) { 117 if ($obj === false) {
118 // Entry no longer exists in APC, so clear it from the cache array 118 // Entry no longer exists in APC, so clear it from the cache array
119 parent::deleteCacheData($pCoord); 119 parent::deleteCacheData($pCoord);
120 throw new Exception('Cell entry '.$cellID.' no longer exists in APC'); 120 throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
121 } 121 }
122 } else { 122 } else {
123 // Return null if requested entry doesn't exist in cache 123 // Return null if requested entry doesn't exist in cache
124 return null; 124 return null;
125 } 125 }
126 126
127 // Set current entry to the requested entry 127 // Set current entry to the requested entry
128 $this->_currentObjectID = $pCoord; 128 $this->_currentObjectID = $pCoord;
129 $this->_currentObject = unserialize($obj); 129 $this->_currentObject = unserialize($obj);
130 // Re-attach the parent worksheet 130 // Re-attach the parent worksheet
131 $this->_currentObject->attach($this->_parent); 131 $this->_currentObject->attach($this->_parent);
132 132
133 // Return requested entry 133 // Return requested entry
134 return $this->_currentObject; 134 return $this->_currentObject;
135 } // function getCacheData() 135 } // function getCacheData()
136 136
137 137
138 /** 138 /**
139 * Delete a cell in cache identified by coordinate address 139 * Delete a cell in cache identified by coordinate address
140 * 140 *
141 * @param string $pCoord Coordinate address of the cell to delete 141 * @param string $pCoord Coordinate address of the cell to delete
142 * @throws Exception 142 * @throws Exception
143 */ 143 */
144 public function deleteCacheData($pCoord) { 144 public function deleteCacheData($pCoord) {
145 // Delete the entry from APC 145 // Delete the entry from APC
146 apc_delete($this->_cachePrefix.$pCoord.'.cache'); 146 apc_delete($this->_cachePrefix.$pCoord.'.cache');
147 147
148 // Delete the entry from our cell address array 148 // Delete the entry from our cell address array
149 parent::deleteCacheData($pCoord); 149 parent::deleteCacheData($pCoord);
150 } // function deleteCacheData() 150 } // function deleteCacheData()
151 151
152 152
153 /** 153 /**
154 * Clone the cell collection 154 * Clone the cell collection
155 * 155 *
156 * @return void 156 * @return void
157 */ 157 */
158 public function copyCellCollection(PHPExcel_Worksheet $parent) { 158 public function copyCellCollection(PHPExcel_Worksheet $parent) {
159 parent::copyCellCollection($parent); 159 parent::copyCellCollection($parent);
160 // Get a new id for the new file name 160 // Get a new id for the new file name
161 $baseUnique = $this->_getUniqueID(); 161 $baseUnique = $this->_getUniqueID();
162 $newCachePrefix = substr(md5($baseUnique),0,8).'.'; 162 $newCachePrefix = substr(md5($baseUnique),0,8).'.';
163 $cacheList = $this->getCellList(); 163 $cacheList = $this->getCellList();
164 foreach($cacheList as $cellID) { 164 foreach($cacheList as $cellID) {
165 if ($cellID != $this->_currentObjectID) { 165 if ($cellID != $this->_currentObjectID) {
166 $obj = apc_fetch($this->_cachePrefix.$cellID.'.cache'); 166 $obj = apc_fetch($this->_cachePrefix.$cellID.'.cache');
167 if ($obj === false) { 167 if ($obj === false) {
168 // Entry no longer exists in APC, so clear it from the cache array 168 // Entry no longer exists in APC, so clear it from the cache array
169 parent::deleteCacheData($cellID); 169 parent::deleteCacheData($cellID);
170 throw new Exception('Cell entry '.$cellID.' no longer exists in APC'); 170 throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
171 } 171 }
172 if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) { 172 if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) {
173 $this->__destruct(); 173 $this->__destruct();
174 throw new Exception('Failed to store cell '.$cellID.' in APC'); 174 throw new Exception('Failed to store cell '.$cellID.' in APC');
175 } 175 }
176 } 176 }
177 } 177 }
178 $this->_cachePrefix = $newCachePrefix; 178 $this->_cachePrefix = $newCachePrefix;
179 } // function copyCellCollection() 179 } // function copyCellCollection()
180 180
181 181
182 public function unsetWorksheetCells() { 182 public function unsetWorksheetCells() {
183 if(!is_null($this->_currentObject)) { 183 if(!is_null($this->_currentObject)) {
184 $this->_currentObject->detach(); 184 $this->_currentObject->detach();
185 $this->_currentObject = $this->_currentObjectID = null; 185 $this->_currentObject = $this->_currentObjectID = null;
186 } 186 }
187 187
188 // Flush the APC cache 188 // Flush the APC cache
189 $this->__destruct(); 189 $this->__destruct();
190 190
191 $this->_cellCache = array(); 191 $this->_cellCache = array();
192 192
193 // detach ourself from the worksheet, so that it can then delete this object successfully 193 // detach ourself from the worksheet, so that it can then delete this object successfully
194 $this->_parent = null; 194 $this->_parent = null;
195 } // function unsetWorksheetCells() 195 } // function unsetWorksheetCells()
196 196
197 197
198 public function __construct(PHPExcel_Worksheet $parent, $arguments) { 198 public function __construct(PHPExcel_Worksheet $parent, $arguments) {
199 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; 199 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
200 200
201 if (is_null($this->_cachePrefix)) { 201 if (is_null($this->_cachePrefix)) {
202 $baseUnique = $this->_getUniqueID(); 202 $baseUnique = $this->_getUniqueID();
203 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; 203 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
204 $this->_cacheTime = $cacheTime; 204 $this->_cacheTime = $cacheTime;
205 205
206 parent::__construct($parent); 206 parent::__construct($parent);
207 } 207 }
208 } // function __construct() 208 } // function __construct()
209 209
210 210
211 public function __destruct() { 211 public function __destruct() {
212 $cacheList = $this->getCellList(); 212 $cacheList = $this->getCellList();
213 foreach($cacheList as $cellID) { 213 foreach($cacheList as $cellID) {
214 apc_delete($this->_cachePrefix.$cellID.'.cache'); 214 apc_delete($this->_cachePrefix.$cellID.'.cache');
215 } 215 }
216 } // function __destruct() 216 } // function __destruct()
217 217
218 } 218 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_DiscISAM 30 * PHPExcel_CachedObjectStorage_DiscISAM
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private $_fileName = null; 38 private $_fileName = null;
39 private $_fileHandle = null; 39 private $_fileHandle = null;
40 40
41 41
42 private function _storeData() { 42 private function _storeData() {
43 $this->_currentObject->detach(); 43 $this->_currentObject->detach();
44 44
45 fseek($this->_fileHandle,0,SEEK_END); 45 fseek($this->_fileHandle,0,SEEK_END);
46 $offset = ftell($this->_fileHandle); 46 $offset = ftell($this->_fileHandle);
47 fwrite($this->_fileHandle, serialize($this->_currentObject)); 47 fwrite($this->_fileHandle, serialize($this->_currentObject));
48 $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, 48 $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset,
49 'sz' => ftell($this->_fileHandle) - $offset 49 'sz' => ftell($this->_fileHandle) - $offset
50 ); 50 );
51 $this->_currentObjectID = $this->_currentObject = null; 51 $this->_currentObjectID = $this->_currentObject = null;
52 } // function _storeData() 52 } // function _storeData()
53 53
54 54
55 /** 55 /**
56 * Add or Update a cell in cache identified by coordinate address 56 * Add or Update a cell in cache identified by coordinate address
57 * 57 *
58 * @param string $pCoord Coordinate address of the cell to update 58 * @param string $pCoord Coordinate address of the cell to update
59 * @param PHPExcel_Cell $cell Cell to update 59 * @param PHPExcel_Cell $cell Cell to update
60 * @return void 60 * @return void
61 * @throws Exception 61 * @throws Exception
62 */ 62 */
63 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 63 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
64 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 64 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
65 $this->_storeData(); 65 $this->_storeData();
66 } 66 }
67 67
68 $this->_currentObjectID = $pCoord; 68 $this->_currentObjectID = $pCoord;
69 $this->_currentObject = $cell; 69 $this->_currentObject = $cell;
70 70
71 return $cell; 71 return $cell;
72 } // function addCacheData() 72 } // function addCacheData()
73 73
74 74
75 /** 75 /**
76 * Get cell at a specific coordinate 76 * Get cell at a specific coordinate
77 * 77 *
78 * @param string $pCoord Coordinate of the cell 78 * @param string $pCoord Coordinate of the cell
79 * @throws Exception 79 * @throws Exception
80 * @return PHPExcel_Cell Cell that was found, or null if not found 80 * @return PHPExcel_Cell Cell that was found, or null if not found
81 */ 81 */
82 public function getCacheData($pCoord) { 82 public function getCacheData($pCoord) {
83 if ($pCoord === $this->_currentObjectID) { 83 if ($pCoord === $this->_currentObjectID) {
84 return $this->_currentObject; 84 return $this->_currentObject;
85 } 85 }
86 $this->_storeData(); 86 $this->_storeData();
87 87
88 // Check if the entry that has been requested actually exists 88 // Check if the entry that has been requested actually exists
89 if (!isset($this->_cellCache[$pCoord])) { 89 if (!isset($this->_cellCache[$pCoord])) {
90 // Return null if requested entry doesn't exist in cache 90 // Return null if requested entry doesn't exist in cache
91 return null; 91 return null;
92 } 92 }
93 93
94 // Set current entry to the requested entry 94 // Set current entry to the requested entry
95 $this->_currentObjectID = $pCoord; 95 $this->_currentObjectID = $pCoord;
96 fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); 96 fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
97 $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); 97 $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
98 // Re-attach the parent worksheet 98 // Re-attach the parent worksheet
99 $this->_currentObject->attach($this->_parent); 99 $this->_currentObject->attach($this->_parent);
100 100
101 // Return requested entry 101 // Return requested entry
102 return $this->_currentObject; 102 return $this->_currentObject;
103 } // function getCacheData() 103 } // function getCacheData()
104 104
105 105
106 /** 106 /**
107 * Clone the cell collection 107 * Clone the cell collection
108 * 108 *
109 * @return void 109 * @return void
110 */ 110 */
111 public function copyCellCollection(PHPExcel_Worksheet $parent) { 111 public function copyCellCollection(PHPExcel_Worksheet $parent) {
112 parent::copyCellCollection($parent); 112 parent::copyCellCollection($parent);
113 // Get a new id for the new file name 113 // Get a new id for the new file name
114 $baseUnique = $this->_getUniqueID(); 114 $baseUnique = $this->_getUniqueID();
115 $newFileName = PHPExcel_Shared_File::sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache'; 115 $newFileName = PHPExcel_Shared_File::sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';
116 // Copy the existing cell cache file 116 // Copy the existing cell cache file
117 copy ($this->_fileName,$newFileName); 117 copy ($this->_fileName,$newFileName);
118 $this->_fileName = $newFileName; 118 $this->_fileName = $newFileName;
119 // Open the copied cell cache file 119 // Open the copied cell cache file
120 $this->_fileHandle = fopen($this->_fileName,'a+'); 120 $this->_fileHandle = fopen($this->_fileName,'a+');
121 } // function copyCellCollection() 121 } // function copyCellCollection()
122 122
123 123
124 public function unsetWorksheetCells() { 124 public function unsetWorksheetCells() {
125 if(!is_null($this->_currentObject)) { 125 if(!is_null($this->_currentObject)) {
126 $this->_currentObject->detach(); 126 $this->_currentObject->detach();
127 $this->_currentObject = $this->_currentObjectID = null; 127 $this->_currentObject = $this->_currentObjectID = null;
128 } 128 }
129 $this->_cellCache = array(); 129 $this->_cellCache = array();
130 130
131 // detach ourself from the worksheet, so that it can then delete this object successfully 131 // detach ourself from the worksheet, so that it can then delete this object successfully
132 $this->_parent = null; 132 $this->_parent = null;
133 133
134 // Close down the temporary cache file 134 // Close down the temporary cache file
135 $this->__destruct(); 135 $this->__destruct();
136 } // function unsetWorksheetCells() 136 } // function unsetWorksheetCells()
137 137
138 138
139 public function __construct(PHPExcel_Worksheet $parent) { 139 public function __construct(PHPExcel_Worksheet $parent) {
140 parent::__construct($parent); 140 parent::__construct($parent);
141 if (is_null($this->_fileHandle)) { 141 if (is_null($this->_fileHandle)) {
142 $baseUnique = $this->_getUniqueID(); 142 $baseUnique = $this->_getUniqueID();
143 $this->_fileName = PHPExcel_Shared_File::sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache'; 143 $this->_fileName = PHPExcel_Shared_File::sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';
144 $this->_fileHandle = fopen($this->_fileName,'a+'); 144 $this->_fileHandle = fopen($this->_fileName,'a+');
145 } 145 }
146 } // function __construct() 146 } // function __construct()
147 147
148 148
149 public function __destruct() { 149 public function __destruct() {
150 if (!is_null($this->_fileHandle)) { 150 if (!is_null($this->_fileHandle)) {
151 fclose($this->_fileHandle); 151 fclose($this->_fileHandle);
152 unlink($this->_fileName); 152 unlink($this->_fileName);
153 } 153 }
154 $this->_fileHandle = null; 154 $this->_fileHandle = null;
155 } // function __destruct() 155 } // function __destruct()
156 156
157 } 157 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_Memcache 30 * PHPExcel_CachedObjectStorage_Memcache
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private $_cachePrefix = null; 38 private $_cachePrefix = null;
39 39
40 private $_cacheTime = 600; 40 private $_cacheTime = 600;
41 41
42 private $_memcache = null; 42 private $_memcache = null;
43 43
44 44
45 private function _storeData() { 45 private function _storeData() {
46 $this->_currentObject->detach(); 46 $this->_currentObject->detach();
47 47
48 $obj = serialize($this->_currentObject); 48 $obj = serialize($this->_currentObject);
49 if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { 49 if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {
50 if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { 50 if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {
51 $this->__destruct(); 51 $this->__destruct();
52 throw new Exception('Failed to store cell '.$cellID.' in MemCache'); 52 throw new Exception('Failed to store cell '.$cellID.' in MemCache');
53 } 53 }
54 } 54 }
55 $this->_currentObjectID = $this->_currentObject = null; 55 $this->_currentObjectID = $this->_currentObject = null;
56 } // function _storeData() 56 } // function _storeData()
57 57
58 58
59 /** 59 /**
60 * Add or Update a cell in cache identified by coordinate address 60 * Add or Update a cell in cache identified by coordinate address
61 * 61 *
62 * @param string $pCoord Coordinate address of the cell to update 62 * @param string $pCoord Coordinate address of the cell to update
63 * @param PHPExcel_Cell $cell Cell to update 63 * @param PHPExcel_Cell $cell Cell to update
64 * @return void 64 * @return void
65 * @throws Exception 65 * @throws Exception
66 */ 66 */
67 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 67 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
68 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 68 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
69 $this->_storeData(); 69 $this->_storeData();
70 } 70 }
71 $this->_cellCache[$pCoord] = true; 71 $this->_cellCache[$pCoord] = true;
72 72
73 $this->_currentObjectID = $pCoord; 73 $this->_currentObjectID = $pCoord;
74 $this->_currentObject = $cell; 74 $this->_currentObject = $cell;
75 75
76 return $cell; 76 return $cell;
77 } // function addCacheData() 77 } // function addCacheData()
78 78
79 79
80 /** 80 /**
81 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? 81 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
82 * 82 *
83 * @param string $pCoord Coordinate address of the cell to check 83 * @param string $pCoord Coordinate address of the cell to check
84 * @return void 84 * @return void
85 * @return boolean 85 * @return boolean
86 */ 86 */
87 public function isDataSet($pCoord) { 87 public function isDataSet($pCoord) {
88 // Check if the requested entry is the current object, or exists in the cache 88 // Check if the requested entry is the current object, or exists in the cache
89 if (parent::isDataSet($pCoord)) { 89 if (parent::isDataSet($pCoord)) {
90 if ($this->_currentObjectID == $pCoord) { 90 if ($this->_currentObjectID == $pCoord) {
91 return true; 91 return true;
92 } 92 }
93 // Check if the requested entry still exists in Memcache 93 // Check if the requested entry still exists in Memcache
94 $success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); 94 $success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');
95 if ($success === false) { 95 if ($success === false) {
96 // Entry no longer exists in Memcache, so clear it from the cache array 96 // Entry no longer exists in Memcache, so clear it from the cache array
97 parent::deleteCacheData($pCoord); 97 parent::deleteCacheData($pCoord);
98 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache'); 98 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
99 } 99 }
100 return true; 100 return true;
101 } 101 }
102 return false; 102 return false;
103 } // function isDataSet() 103 } // function isDataSet()
104 104
105 105
106 /** 106 /**
107 * Get cell at a specific coordinate 107 * Get cell at a specific coordinate
108 * 108 *
109 * @param string $pCoord Coordinate of the cell 109 * @param string $pCoord Coordinate of the cell
110 * @throws Exception 110 * @throws Exception
111 * @return PHPExcel_Cell Cell that was found, or null if not found 111 * @return PHPExcel_Cell Cell that was found, or null if not found
112 */ 112 */
113 public function getCacheData($pCoord) { 113 public function getCacheData($pCoord) {
114 if ($pCoord === $this->_currentObjectID) { 114 if ($pCoord === $this->_currentObjectID) {
115 return $this->_currentObject; 115 return $this->_currentObject;
116 } 116 }
117 $this->_storeData(); 117 $this->_storeData();
118 118
119 // Check if the entry that has been requested actually exists 119 // Check if the entry that has been requested actually exists
120 if (parent::isDataSet($pCoord)) { 120 if (parent::isDataSet($pCoord)) {
121 $obj = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); 121 $obj = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');
122 if ($obj === false) { 122 if ($obj === false) {
123 // Entry no longer exists in Memcache, so clear it from the cache array 123 // Entry no longer exists in Memcache, so clear it from the cache array
124 parent::deleteCacheData($pCoord); 124 parent::deleteCacheData($pCoord);
125 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache'); 125 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
126 } 126 }
127 } else { 127 } else {
128 // Return null if requested entry doesn't exist in cache 128 // Return null if requested entry doesn't exist in cache
129 return null; 129 return null;
130 } 130 }
131 131
132 // Set current entry to the requested entry 132 // Set current entry to the requested entry
133 $this->_currentObjectID = $pCoord; 133 $this->_currentObjectID = $pCoord;
134 $this->_currentObject = unserialize($obj); 134 $this->_currentObject = unserialize($obj);
135 // Re-attach the parent worksheet 135 // Re-attach the parent worksheet
136 $this->_currentObject->attach($this->_parent); 136 $this->_currentObject->attach($this->_parent);
137 137
138 // Return requested entry 138 // Return requested entry
139 return $this->_currentObject; 139 return $this->_currentObject;
140 } // function getCacheData() 140 } // function getCacheData()
141 141
142 142
143 /** 143 /**
144 * Delete a cell in cache identified by coordinate address 144 * Delete a cell in cache identified by coordinate address
145 * 145 *
146 * @param string $pCoord Coordinate address of the cell to delete 146 * @param string $pCoord Coordinate address of the cell to delete
147 * @throws Exception 147 * @throws Exception
148 */ 148 */
149 public function deleteCacheData($pCoord) { 149 public function deleteCacheData($pCoord) {
150 // Delete the entry from Memcache 150 // Delete the entry from Memcache
151 $this->_memcache->delete($this->_cachePrefix.$pCoord.'.cache'); 151 $this->_memcache->delete($this->_cachePrefix.$pCoord.'.cache');
152 152
153 // Delete the entry from our cell address array 153 // Delete the entry from our cell address array
154 parent::deleteCacheData($pCoord); 154 parent::deleteCacheData($pCoord);
155 } // function deleteCacheData() 155 } // function deleteCacheData()
156 156
157 157
158 /** 158 /**
159 * Clone the cell collection 159 * Clone the cell collection
160 * 160 *
161 * @return void 161 * @return void
162 */ 162 */
163 public function copyCellCollection(PHPExcel_Worksheet $parent) { 163 public function copyCellCollection(PHPExcel_Worksheet $parent) {
164 parent::copyCellCollection($parent); 164 parent::copyCellCollection($parent);
165 // Get a new id for the new file name 165 // Get a new id for the new file name
166 $baseUnique = $this->_getUniqueID(); 166 $baseUnique = $this->_getUniqueID();
167 $newCachePrefix = substr(md5($baseUnique),0,8).'.'; 167 $newCachePrefix = substr(md5($baseUnique),0,8).'.';
168 $cacheList = $this->getCellList(); 168 $cacheList = $this->getCellList();
169 foreach($cacheList as $cellID) { 169 foreach($cacheList as $cellID) {
170 if ($cellID != $this->_currentObjectID) { 170 if ($cellID != $this->_currentObjectID) {
171 $obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache'); 171 $obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache');
172 if ($obj === false) { 172 if ($obj === false) {
173 // Entry no longer exists in Memcache, so clear it from the cache array 173 // Entry no longer exists in Memcache, so clear it from the cache array
174 parent::deleteCacheData($cellID); 174 parent::deleteCacheData($cellID);
175 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache'); 175 throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
176 } 176 }
177 if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) { 177 if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) {
178 $this->__destruct(); 178 $this->__destruct();
179 throw new Exception('Failed to store cell '.$cellID.' in MemCache'); 179 throw new Exception('Failed to store cell '.$cellID.' in MemCache');
180 } 180 }
181 } 181 }
182 } 182 }
183 $this->_cachePrefix = $newCachePrefix; 183 $this->_cachePrefix = $newCachePrefix;
184 } // function copyCellCollection() 184 } // function copyCellCollection()
185 185
186 186
187 public function unsetWorksheetCells() { 187 public function unsetWorksheetCells() {
188 if(!is_null($this->_currentObject)) { 188 if(!is_null($this->_currentObject)) {
189 $this->_currentObject->detach(); 189 $this->_currentObject->detach();
190 $this->_currentObject = $this->_currentObjectID = null; 190 $this->_currentObject = $this->_currentObjectID = null;
191 } 191 }
192 192
193 // Flush the Memcache cache 193 // Flush the Memcache cache
194 $this->__destruct(); 194 $this->__destruct();
195 195
196 $this->_cellCache = array(); 196 $this->_cellCache = array();
197 197
198 // detach ourself from the worksheet, so that it can then delete this object successfully 198 // detach ourself from the worksheet, so that it can then delete this object successfully
199 $this->_parent = null; 199 $this->_parent = null;
200 } // function unsetWorksheetCells() 200 } // function unsetWorksheetCells()
201 201
202 202
203 public function __construct(PHPExcel_Worksheet $parent, $arguments) { 203 public function __construct(PHPExcel_Worksheet $parent, $arguments) {
204 $memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost'; 204 $memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost';
205 $memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211; 205 $memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211;
206 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; 206 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
207 207
208 if (is_null($this->_cachePrefix)) { 208 if (is_null($this->_cachePrefix)) {
209 $baseUnique = $this->_getUniqueID(); 209 $baseUnique = $this->_getUniqueID();
210 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; 210 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
211 211
212 // Set a new Memcache object and connect to the Memcache server 212 // Set a new Memcache object and connect to the Memcache server
213 $this->_memcache = new Memcache(); 213 $this->_memcache = new Memcache();
214 if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) { 214 if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
215 throw new Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort); 215 throw new Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort);
216 } 216 }
217 $this->_cacheTime = $cacheTime; 217 $this->_cacheTime = $cacheTime;
218 218
219 parent::__construct($parent); 219 parent::__construct($parent);
220 } 220 }
221 } // function __construct() 221 } // function __construct()
222 222
223 223
224 public function failureCallback($host, $port) { 224 public function failureCallback($host, $port) {
225 throw new Exception('memcache '.$host.':'.$port.' failed'); 225 throw new Exception('memcache '.$host.':'.$port.' failed');
226 } 226 }
227 227
228 228
229 public function __destruct() { 229 public function __destruct() {
230 $cacheList = $this->getCellList(); 230 $cacheList = $this->getCellList();
231 foreach($cacheList as $cellID) { 231 foreach($cacheList as $cellID) {
232 $this->_memcache->delete($this->_cachePrefix.$cellID.'.cache'); 232 $this->_memcache->delete($this->_cachePrefix.$cellID.'.cache');
233 } 233 }
234 } // function __destruct() 234 } // function __destruct()
235 235
236 } 236 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_MemoryGZip 30 * PHPExcel_CachedObjectStorage_MemoryGZip
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private function _storeData() { 38 private function _storeData() {
39 $this->_currentObject->detach(); 39 $this->_currentObject->detach();
40 40
41 $this->_cellCache[$this->_currentObjectID] = gzdeflate(serialize($this->_currentObject)); 41 $this->_cellCache[$this->_currentObjectID] = gzdeflate(serialize($this->_currentObject));
42 $this->_currentObjectID = $this->_currentObject = null; 42 $this->_currentObjectID = $this->_currentObject = null;
43 } // function _storeData() 43 } // function _storeData()
44 44
45 45
46 /** 46 /**
47 * Add or Update a cell in cache identified by coordinate address 47 * Add or Update a cell in cache identified by coordinate address
48 * 48 *
49 * @param string $pCoord Coordinate address of the cell to update 49 * @param string $pCoord Coordinate address of the cell to update
50 * @param PHPExcel_Cell $cell Cell to update 50 * @param PHPExcel_Cell $cell Cell to update
51 * @return void 51 * @return void
52 * @throws Exception 52 * @throws Exception
53 */ 53 */
54 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 54 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
55 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 55 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
56 $this->_storeData(); 56 $this->_storeData();
57 } 57 }
58 58
59 $this->_currentObjectID = $pCoord; 59 $this->_currentObjectID = $pCoord;
60 $this->_currentObject = $cell; 60 $this->_currentObject = $cell;
61 61
62 return $cell; 62 return $cell;
63 } // function addCacheData() 63 } // function addCacheData()
64 64
65 65
66 /** 66 /**
67 * Get cell at a specific coordinate 67 * Get cell at a specific coordinate
68 * 68 *
69 * @param string $pCoord Coordinate of the cell 69 * @param string $pCoord Coordinate of the cell
70 * @throws Exception 70 * @throws Exception
71 * @return PHPExcel_Cell Cell that was found, or null if not found 71 * @return PHPExcel_Cell Cell that was found, or null if not found
72 */ 72 */
73 public function getCacheData($pCoord) { 73 public function getCacheData($pCoord) {
74 if ($pCoord === $this->_currentObjectID) { 74 if ($pCoord === $this->_currentObjectID) {
75 return $this->_currentObject; 75 return $this->_currentObject;
76 } 76 }
77 $this->_storeData(); 77 $this->_storeData();
78 78
79 // Check if the entry that has been requested actually exists 79 // Check if the entry that has been requested actually exists
80 if (!isset($this->_cellCache[$pCoord])) { 80 if (!isset($this->_cellCache[$pCoord])) {
81 // Return null if requested entry doesn't exist in cache 81 // Return null if requested entry doesn't exist in cache
82 return null; 82 return null;
83 } 83 }
84 84
85 // Set current entry to the requested entry 85 // Set current entry to the requested entry
86 $this->_currentObjectID = $pCoord; 86 $this->_currentObjectID = $pCoord;
87 $this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord])); 87 $this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord]));
88 // Re-attach the parent worksheet 88 // Re-attach the parent worksheet
89 $this->_currentObject->attach($this->_parent); 89 $this->_currentObject->attach($this->_parent);
90 90
91 // Return requested entry 91 // Return requested entry
92 return $this->_currentObject; 92 return $this->_currentObject;
93 } // function getCacheData() 93 } // function getCacheData()
94 94
95 95
96 public function unsetWorksheetCells() { 96 public function unsetWorksheetCells() {
97 if(!is_null($this->_currentObject)) { 97 if(!is_null($this->_currentObject)) {
98 $this->_currentObject->detach(); 98 $this->_currentObject->detach();
99 $this->_currentObject = $this->_currentObjectID = null; 99 $this->_currentObject = $this->_currentObjectID = null;
100 } 100 }
101 $this->_cellCache = array(); 101 $this->_cellCache = array();
102 102
103 // detach ourself from the worksheet, so that it can then delete this object successfully 103 // detach ourself from the worksheet, so that it can then delete this object successfully
104 $this->_parent = null; 104 $this->_parent = null;
105 } // function unsetWorksheetCells() 105 } // function unsetWorksheetCells()
106 106
107 } 107 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_MemorySerialized 30 * PHPExcel_CachedObjectStorage_MemorySerialized
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private function _storeData() { 38 private function _storeData() {
39 $this->_currentObject->detach(); 39 $this->_currentObject->detach();
40 40
41 $this->_cellCache[$this->_currentObjectID] = serialize($this->_currentObject); 41 $this->_cellCache[$this->_currentObjectID] = serialize($this->_currentObject);
42 $this->_currentObjectID = $this->_currentObject = null; 42 $this->_currentObjectID = $this->_currentObject = null;
43 } // function _storeData() 43 } // function _storeData()
44 44
45 45
46 /** 46 /**
47 * Add or Update a cell in cache identified by coordinate address 47 * Add or Update a cell in cache identified by coordinate address
48 * 48 *
49 * @param string $pCoord Coordinate address of the cell to update 49 * @param string $pCoord Coordinate address of the cell to update
50 * @param PHPExcel_Cell $cell Cell to update 50 * @param PHPExcel_Cell $cell Cell to update
51 * @return void 51 * @return void
52 * @throws Exception 52 * @throws Exception
53 */ 53 */
54 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 54 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
55 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 55 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
56 $this->_storeData(); 56 $this->_storeData();
57 } 57 }
58 58
59 $this->_currentObjectID = $pCoord; 59 $this->_currentObjectID = $pCoord;
60 $this->_currentObject = $cell; 60 $this->_currentObject = $cell;
61 61
62 return $cell; 62 return $cell;
63 } // function addCacheData() 63 } // function addCacheData()
64 64
65 65
66 /** 66 /**
67 * Get cell at a specific coordinate 67 * Get cell at a specific coordinate
68 * 68 *
69 * @param string $pCoord Coordinate of the cell 69 * @param string $pCoord Coordinate of the cell
70 * @throws Exception 70 * @throws Exception
71 * @return PHPExcel_Cell Cell that was found, or null if not found 71 * @return PHPExcel_Cell Cell that was found, or null if not found
72 */ 72 */
73 public function getCacheData($pCoord) { 73 public function getCacheData($pCoord) {
74 if ($pCoord === $this->_currentObjectID) { 74 if ($pCoord === $this->_currentObjectID) {
75 return $this->_currentObject; 75 return $this->_currentObject;
76 } 76 }
77 $this->_storeData(); 77 $this->_storeData();
78 78
79 // Check if the entry that has been requested actually exists 79 // Check if the entry that has been requested actually exists
80 if (!isset($this->_cellCache[$pCoord])) { 80 if (!isset($this->_cellCache[$pCoord])) {
81 // Return null if requested entry doesn't exist in cache 81 // Return null if requested entry doesn't exist in cache
82 return null; 82 return null;
83 } 83 }
84 84
85 // Set current entry to the requested entry 85 // Set current entry to the requested entry
86 $this->_currentObjectID = $pCoord; 86 $this->_currentObjectID = $pCoord;
87 $this->_currentObject = unserialize($this->_cellCache[$pCoord]); 87 $this->_currentObject = unserialize($this->_cellCache[$pCoord]);
88 // Re-attach the parent worksheet 88 // Re-attach the parent worksheet
89 $this->_currentObject->attach($this->_parent); 89 $this->_currentObject->attach($this->_parent);
90 90
91 // Return requested entry 91 // Return requested entry
92 return $this->_currentObject; 92 return $this->_currentObject;
93 } // function getCacheData() 93 } // function getCacheData()
94 94
95 95
96 public function unsetWorksheetCells() { 96 public function unsetWorksheetCells() {
97 if(!is_null($this->_currentObject)) { 97 if(!is_null($this->_currentObject)) {
98 $this->_currentObject->detach(); 98 $this->_currentObject->detach();
99 $this->_currentObject = $this->_currentObjectID = null; 99 $this->_currentObject = $this->_currentObjectID = null;
100 } 100 }
101 $this->_cellCache = array(); 101 $this->_cellCache = array();
102 102
103 // detach ourself from the worksheet, so that it can then delete this object successfully 103 // detach ourself from the worksheet, so that it can then delete this object successfully
104 $this->_parent = null; 104 $this->_parent = null;
105 } // function unsetWorksheetCells() 105 } // function unsetWorksheetCells()
106 106
107 } 107 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_PHPTemp 30 * PHPExcel_CachedObjectStorage_PHPTemp
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private $_fileHandle = null; 38 private $_fileHandle = null;
39 39
40 40
41 private $_memoryCacheSize = null; 41 private $_memoryCacheSize = null;
42 42
43 private function _storeData() { 43 private function _storeData() {
44 $this->_currentObject->detach(); 44 $this->_currentObject->detach();
45 45
46 fseek($this->_fileHandle,0,SEEK_END); 46 fseek($this->_fileHandle,0,SEEK_END);
47 $offset = ftell($this->_fileHandle); 47 $offset = ftell($this->_fileHandle);
48 fwrite($this->_fileHandle, serialize($this->_currentObject)); 48 fwrite($this->_fileHandle, serialize($this->_currentObject));
49 $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, 49 $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset,
50 'sz' => ftell($this->_fileHandle) - $offset 50 'sz' => ftell($this->_fileHandle) - $offset
51 ); 51 );
52 $this->_currentObjectID = $this->_currentObject = null; 52 $this->_currentObjectID = $this->_currentObject = null;
53 } // function _storeData() 53 } // function _storeData()
54 54
55 55
56 /** 56 /**
57 * Add or Update a cell in cache identified by coordinate address 57 * Add or Update a cell in cache identified by coordinate address
58 * 58 *
59 * @param string $pCoord Coordinate address of the cell to update 59 * @param string $pCoord Coordinate address of the cell to update
60 * @param PHPExcel_Cell $cell Cell to update 60 * @param PHPExcel_Cell $cell Cell to update
61 * @return void 61 * @return void
62 * @throws Exception 62 * @throws Exception
63 */ 63 */
64 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 64 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
65 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 65 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
66 $this->_storeData(); 66 $this->_storeData();
67 } 67 }
68 68
69 $this->_currentObjectID = $pCoord; 69 $this->_currentObjectID = $pCoord;
70 $this->_currentObject = $cell; 70 $this->_currentObject = $cell;
71 71
72 return $cell; 72 return $cell;
73 } // function addCacheData() 73 } // function addCacheData()
74 74
75 75
76 /** 76 /**
77 * Get cell at a specific coordinate 77 * Get cell at a specific coordinate
78 * 78 *
79 * @param string $pCoord Coordinate of the cell 79 * @param string $pCoord Coordinate of the cell
80 * @throws Exception 80 * @throws Exception
81 * @return PHPExcel_Cell Cell that was found, or null if not found 81 * @return PHPExcel_Cell Cell that was found, or null if not found
82 */ 82 */
83 public function getCacheData($pCoord) { 83 public function getCacheData($pCoord) {
84 if ($pCoord === $this->_currentObjectID) { 84 if ($pCoord === $this->_currentObjectID) {
85 return $this->_currentObject; 85 return $this->_currentObject;
86 } 86 }
87 $this->_storeData(); 87 $this->_storeData();
88 88
89 // Check if the entry that has been requested actually exists 89 // Check if the entry that has been requested actually exists
90 if (!isset($this->_cellCache[$pCoord])) { 90 if (!isset($this->_cellCache[$pCoord])) {
91 // Return null if requested entry doesn't exist in cache 91 // Return null if requested entry doesn't exist in cache
92 return null; 92 return null;
93 } 93 }
94 94
95 // Set current entry to the requested entry 95 // Set current entry to the requested entry
96 $this->_currentObjectID = $pCoord; 96 $this->_currentObjectID = $pCoord;
97 fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); 97 fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
98 $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); 98 $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
99 // Re-attach the parent worksheet 99 // Re-attach the parent worksheet
100 $this->_currentObject->attach($this->_parent); 100 $this->_currentObject->attach($this->_parent);
101 101
102 // Return requested entry 102 // Return requested entry
103 return $this->_currentObject; 103 return $this->_currentObject;
104 } // function getCacheData() 104 } // function getCacheData()
105 105
106 106
107 /** 107 /**
108 * Clone the cell collection 108 * Clone the cell collection
109 * 109 *
110 * @return void 110 * @return void
111 */ 111 */
112 public function copyCellCollection(PHPExcel_Worksheet $parent) { 112 public function copyCellCollection(PHPExcel_Worksheet $parent) {
113 parent::copyCellCollection($parent); 113 parent::copyCellCollection($parent);
114 // Open a new stream for the cell cache data 114 // Open a new stream for the cell cache data
115 $newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); 115 $newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
116 // Copy the existing cell cache data to the new stream 116 // Copy the existing cell cache data to the new stream
117 fseek($this->_fileHandle,0); 117 fseek($this->_fileHandle,0);
118 while (!feof($this->_fileHandle)) { 118 while (!feof($this->_fileHandle)) {
119 fwrite($newFileHandle,fread($this->_fileHandle, 1024)); 119 fwrite($newFileHandle,fread($this->_fileHandle, 1024));
120 } 120 }
121 $this->_fileHandle = $newFileHandle; 121 $this->_fileHandle = $newFileHandle;
122 } // function copyCellCollection() 122 } // function copyCellCollection()
123 123
124 124
125 public function unsetWorksheetCells() { 125 public function unsetWorksheetCells() {
126 if(!is_null($this->_currentObject)) { 126 if(!is_null($this->_currentObject)) {
127 $this->_currentObject->detach(); 127 $this->_currentObject->detach();
128 $this->_currentObject = $this->_currentObjectID = null; 128 $this->_currentObject = $this->_currentObjectID = null;
129 } 129 }
130 $this->_cellCache = array(); 130 $this->_cellCache = array();
131 131
132 // detach ourself from the worksheet, so that it can then delete this object successfully 132 // detach ourself from the worksheet, so that it can then delete this object successfully
133 $this->_parent = null; 133 $this->_parent = null;
134 134
135 // Close down the php://temp file 135 // Close down the php://temp file
136 $this->__destruct(); 136 $this->__destruct();
137 } // function unsetWorksheetCells() 137 } // function unsetWorksheetCells()
138 138
139 139
140 public function __construct(PHPExcel_Worksheet $parent, $memoryCacheSize = '1MB') { 140 public function __construct(PHPExcel_Worksheet $parent, $memoryCacheSize = '1MB') {
141 $this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB'; 141 $this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
142 142
143 parent::__construct($parent); 143 parent::__construct($parent);
144 if (is_null($this->_fileHandle)) { 144 if (is_null($this->_fileHandle)) {
145 $this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); 145 $this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
146 } 146 }
147 } // function __construct() 147 } // function __construct()
148 148
149 149
150 public function __destruct() { 150 public function __destruct() {
151 if (!is_null($this->_fileHandle)) { 151 if (!is_null($this->_fileHandle)) {
152 fclose($this->_fileHandle); 152 fclose($this->_fileHandle);
153 } 153 }
154 $this->_fileHandle = null; 154 $this->_fileHandle = null;
155 } // function __destruct() 155 } // function __destruct()
156 156
157 } 157 }
......
1 <?php 1 <?php
2 /** 2 /**
3 * PHPExcel 3 * PHPExcel
4 * 4 *
5 * Copyright (c) 2006 - 2011 PHPExcel 5 * Copyright (c) 2006 - 2011 PHPExcel
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details. 15 * Lesser General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Lesser General Public 17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software 18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 * @category PHPExcel 21 * @category PHPExcel
22 * @package PHPExcel_CachedObjectStorage 22 * @package PHPExcel_CachedObjectStorage
23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 23 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version 1.7.6, 2011-02-27 25 * @version 1.7.6, 2011-02-27
26 */ 26 */
27 27
28 28
29 /** 29 /**
30 * PHPExcel_CachedObjectStorage_Wincache 30 * PHPExcel_CachedObjectStorage_Wincache
31 * 31 *
32 * @category PHPExcel 32 * @category PHPExcel
33 * @package PHPExcel_CachedObjectStorage 33 * @package PHPExcel_CachedObjectStorage
34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel) 34 * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */ 35 */
36 class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache { 36 class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
37 37
38 private $_cachePrefix = null; 38 private $_cachePrefix = null;
39 39
40 private $_cacheTime = 600; 40 private $_cacheTime = 600;
41 41
42 42
43 private function _storeData() { 43 private function _storeData() {
44 $this->_currentObject->detach(); 44 $this->_currentObject->detach();
45 45
46 $obj = serialize($this->_currentObject); 46 $obj = serialize($this->_currentObject);
47 if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) { 47 if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) {
48 if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { 48 if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {
49 $this->__destruct(); 49 $this->__destruct();
50 throw new Exception('Failed to store cell '.$cellID.' in WinCache'); 50 throw new Exception('Failed to store cell '.$cellID.' in WinCache');
51 } 51 }
52 } else { 52 } else {
53 if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { 53 if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {
54 $this->__destruct(); 54 $this->__destruct();
55 throw new Exception('Failed to store cell '.$cellID.' in WinCache'); 55 throw new Exception('Failed to store cell '.$cellID.' in WinCache');
56 } 56 }
57 } 57 }
58 58
59 $this->_currentObjectID = $this->_currentObject = null; 59 $this->_currentObjectID = $this->_currentObject = null;
60 } // function _storeData() 60 } // function _storeData()
61 61
62 62
63 /** 63 /**
64 * Add or Update a cell in cache identified by coordinate address 64 * Add or Update a cell in cache identified by coordinate address
65 * 65 *
66 * @param string $pCoord Coordinate address of the cell to update 66 * @param string $pCoord Coordinate address of the cell to update
67 * @param PHPExcel_Cell $cell Cell to update 67 * @param PHPExcel_Cell $cell Cell to update
68 * @return void 68 * @return void
69 * @throws Exception 69 * @throws Exception
70 */ 70 */
71 public function addCacheData($pCoord, PHPExcel_Cell $cell) { 71 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
72 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { 72 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
73 $this->_storeData(); 73 $this->_storeData();
74 } 74 }
75 $this->_cellCache[$pCoord] = true; 75 $this->_cellCache[$pCoord] = true;
76 76
77 $this->_currentObjectID = $pCoord; 77 $this->_currentObjectID = $pCoord;
78 $this->_currentObject = $cell; 78 $this->_currentObject = $cell;
79 79
80 return $cell; 80 return $cell;
81 } // function addCacheData() 81 } // function addCacheData()
82 82
83 83
84 /** 84 /**
85 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? 85 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
86 * 86 *
87 * @param string $pCoord Coordinate address of the cell to check 87 * @param string $pCoord Coordinate address of the cell to check
88 * @return void 88 * @return void
89 * @return boolean 89 * @return boolean
90 */ 90 */
91 public function isDataSet($pCoord) { 91 public function isDataSet($pCoord) {
92 // Check if the requested entry is the current object, or exists in the cache 92 // Check if the requested entry is the current object, or exists in the cache
93 if (parent::isDataSet($pCoord)) { 93 if (parent::isDataSet($pCoord)) {
94 if ($this->_currentObjectID == $pCoord) { 94 if ($this->_currentObjectID == $pCoord) {
95 return true; 95 return true;
96 } 96 }
97 // Check if the requested entry still exists in cache 97 // Check if the requested entry still exists in cache
98 $success = wincache_ucache_exists($this->_cachePrefix.$pCoord.'.cache'); 98 $success = wincache_ucache_exists($this->_cachePrefix.$pCoord.'.cache');
99 if ($success === false) { 99 if ($success === false) {
100 // Entry no longer exists in Wincache, so clear it from the cache array 100 // Entry no longer exists in Wincache, so clear it from the cache array
101 parent::deleteCacheData($pCoord); 101 parent::deleteCacheData($pCoord);
102 throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache'); 102 throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');
103 } 103 }
104 return true; 104 return true;
105 } 105 }
106 return false; 106 return false;
107 } // function isDataSet() 107 } // function isDataSet()
108 108
109 109
110 /** 110 /**
111 * Get cell at a specific coordinate 111 * Get cell at a specific coordinate
112 * 112 *
113 * @param string $pCoord Coordinate of the cell 113 * @param string $pCoord Coordinate of the cell
114 * @throws Exception 114 * @throws Exception
115 * @return PHPExcel_Cell Cell that was found, or null if not found 115 * @return PHPExcel_Cell Cell that was found, or null if not found
116 */ 116 */
117 public function getCacheData($pCoord) { 117 public function getCacheData($pCoord) {
118 if ($pCoord === $this->_currentObjectID) { 118 if ($pCoord === $this->_currentObjectID) {
119 return $this->_currentObject; 119 return $this->_currentObject;
120 } 120 }
121 $this->_storeData(); 121 $this->_storeData();
122 122
123 // Check if the entry that has been requested actually exists 123 // Check if the entry that has been requested actually exists
124 $obj = null; 124 $obj = null;
125 if (parent::isDataSet($pCoord)) { 125 if (parent::isDataSet($pCoord)) {
126 $success = false; 126 $success = false;
127 $obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success); 127 $obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success);
128 if ($success === false) { 128 if ($success === false) {
129 // Entry no longer exists in WinCache, so clear it from the cache array 129 // Entry no longer exists in WinCache, so clear it from the cache array
130 parent::deleteCacheData($pCoord); 130 parent::deleteCacheData($pCoord);
131 throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache'); 131 throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');
132 } 132 }
133 } else { 133 } else {
134 // Return null if requested entry doesn't exist in cache 134 // Return null if requested entry doesn't exist in cache
135 return null; 135 return null;
136 } 136 }
137 137
138 // Set current entry to the requested entry 138 // Set current entry to the requested entry
139 $this->_currentObjectID = $pCoord; 139 $this->_currentObjectID = $pCoord;
140 $this->_currentObject = unserialize($obj); 140 $this->_currentObject = unserialize($obj);
141 // Re-attach the parent worksheet 141 // Re-attach the parent worksheet
142 $this->_currentObject->attach($this->_parent); 142 $this->_currentObject->attach($this->_parent);
143 143
144 // Return requested entry 144 // Return requested entry
145 return $this->_currentObject; 145 return $this->_currentObject;
146 } // function getCacheData() 146 } // function getCacheData()
147 147
148 148
149 /** 149 /**
150 * Delete a cell in cache identified by coordinate address 150 * Delete a cell in cache identified by coordinate address
151 * 151 *
152 * @param string $pCoord Coordinate address of the cell to delete 152 * @param string $pCoord Coordinate address of the cell to delete
153 * @throws Exception 153 * @throws Exception
154 */ 154 */
155 public function deleteCacheData($pCoord) { 155 public function deleteCacheData($pCoord) {
156 // Delete the entry from Wincache 156 // Delete the entry from Wincache
157 wincache_ucache_delete($this->_cachePrefix.$pCoord.'.cache'); 157 wincache_ucache_delete($this->_cachePrefix.$pCoord.'.cache');
158 158
159 // Delete the entry from our cell address array 159 // Delete the entry from our cell address array
160 parent::deleteCacheData($pCoord); 160 parent::deleteCacheData($pCoord);
161 } // function deleteCacheData() 161 } // function deleteCacheData()
162 162
163 163
164 /** 164 /**
165 * Clone the cell collection 165 * Clone the cell collection
166 * 166 *
167 * @return void 167 * @return void
168 */ 168 */
169 public function copyCellCollection(PHPExcel_Worksheet $parent) { 169 public function copyCellCollection(PHPExcel_Worksheet $parent) {
170 parent::copyCellCollection($parent); 170 parent::copyCellCollection($parent);
171 // Get a new id for the new file name 171 // Get a new id for the new file name
172 $baseUnique = $this->_getUniqueID(); 172 $baseUnique = $this->_getUniqueID();
173 $newCachePrefix = substr(md5($baseUnique),0,8).'.'; 173 $newCachePrefix = substr(md5($baseUnique),0,8).'.';
174 $cacheList = $this->getCellList(); 174 $cacheList = $this->getCellList();
175 foreach($cacheList as $cellID) { 175 foreach($cacheList as $cellID) {
176 if ($cellID != $this->_currentObjectID) { 176 if ($cellID != $this->_currentObjectID) {
177 $success = false; 177 $success = false;
178 $obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success); 178 $obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success);
179 if ($success === false) { 179 if ($success === false) {
180 // Entry no longer exists in WinCache, so clear it from the cache array 180 // Entry no longer exists in WinCache, so clear it from the cache array
181 parent::deleteCacheData($cellID); 181 parent::deleteCacheData($cellID);
182 throw new Exception('Cell entry '.$cellID.' no longer exists in Wincache'); 182 throw new Exception('Cell entry '.$cellID.' no longer exists in Wincache');
183 } 183 }
184 if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) { 184 if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) {
185 $this->__destruct(); 185 $this->__destruct();
186 throw new Exception('Failed to store cell '.$cellID.' in Wincache'); 186 throw new Exception('Failed to store cell '.$cellID.' in Wincache');
187 } 187 }
188 } 188 }
189 } 189 }
190 $this->_cachePrefix = $newCachePrefix; 190 $this->_cachePrefix = $newCachePrefix;
191 } // function copyCellCollection() 191 } // function copyCellCollection()
192 192
193 193
194 public function unsetWorksheetCells() { 194 public function unsetWorksheetCells() {
195 if(!is_null($this->_currentObject)) { 195 if(!is_null($this->_currentObject)) {
196 $this->_currentObject->detach(); 196 $this->_currentObject->detach();
197 $this->_currentObject = $this->_currentObjectID = null; 197 $this->_currentObject = $this->_currentObjectID = null;
198 } 198 }
199 199
200 // Flush the WinCache cache 200 // Flush the WinCache cache
201 $this->__destruct(); 201 $this->__destruct();
202 202
203 $this->_cellCache = array(); 203 $this->_cellCache = array();
204 204
205 // detach ourself from the worksheet, so that it can then delete this object successfully 205 // detach ourself from the worksheet, so that it can then delete this object successfully
206 $this->_parent = null; 206 $this->_parent = null;
207 } // function unsetWorksheetCells() 207 } // function unsetWorksheetCells()
208 208
209 209
210 public function __construct(PHPExcel_Worksheet $parent, $arguments) { 210 public function __construct(PHPExcel_Worksheet $parent, $arguments) {
211 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; 211 $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
212 212
213 if (is_null($this->_cachePrefix)) { 213 if (is_null($this->_cachePrefix)) {
214 $baseUnique = $this->_getUniqueID(); 214 $baseUnique = $this->_getUniqueID();
215 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; 215 $this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
216 $this->_cacheTime = $cacheTime; 216 $this->_cacheTime = $cacheTime;
217 217
218 parent::__construct($parent); 218 parent::__construct($parent);
219 } 219 }
220 } // function __construct() 220 } // function __construct()
221 221
222 222
223 public function __destruct() { 223 public function __destruct() {
224 $cacheList = $this->getCellList(); 224 $cacheList = $this->getCellList();
225 foreach($cacheList as $cellID) { 225 foreach($cacheList as $cellID) {
226 wincache_ucache_delete($this->_cachePrefix.$cellID.'.cache'); 226 wincache_ucache_delete($this->_cachePrefix.$cellID.'.cache');
227 } 227 }
228 } // function __destruct() 228 } // function __destruct()
229 229
230 } 230 }
......
...@@ -184,9 +184,9 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader ...@@ -184,9 +184,9 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
184 */ 184 */
185 public function canRead($pFilename) 185 public function canRead($pFilename)
186 { 186 {
187 // Check if zip class exists 187 // Check if zip class exists
188 if (!class_exists('ZipArchive')) { 188 if (!class_exists('ZipArchive')) {
189 return false; 189 return false;
190 } 190 }
191 191
192 // Check if file exists 192 // Check if file exists
...@@ -822,11 +822,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader ...@@ -822,11 +822,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
822 } else { 822 } else {
823 // Formula 823 // Formula
824 $this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool'); 824 $this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool');
825 if (isset($c->f['t'])) { 825 if (isset($c->f['t'])) {
826 $att = array(); 826 $att = array();
827 $att = $c->f; 827 $att = $c->f;
828 $docSheet->getCell($r)->setFormulaAttributes($att); 828 $docSheet->getCell($r)->setFormulaAttributes($att);
829 } 829 }
830 // echo '$calculatedValue = '.$calculatedValue.'<br />'; 830 // echo '$calculatedValue = '.$calculatedValue.'<br />';
831 } 831 }
832 break; 832 break;
...@@ -1592,7 +1592,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader ...@@ -1592,7 +1592,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
1592 if (isset($style->fill)) { 1592 if (isset($style->fill)) {
1593 if ($style->fill->gradientFill) { 1593 if ($style->fill->gradientFill) {
1594 $gradientFill = $style->fill->gradientFill[0]; 1594 $gradientFill = $style->fill->gradientFill[0];
1595 if(!empty($gradientFill["type"])) { 1595 if(!empty($gradientFill["type"])) {
1596 $docStyle->getFill()->setFillType((string) $gradientFill["type"]); 1596 $docStyle->getFill()->setFillType((string) $gradientFill["type"]);
1597 } 1597 }
1598 $docStyle->getFill()->setRotation(floatval($gradientFill["degree"])); 1598 $docStyle->getFill()->setRotation(floatval($gradientFill["degree"]));
......
This diff could not be displayed because it is too large.
1 GNU LESSER GENERAL PUBLIC LICENSE 1 GNU LESSER GENERAL PUBLIC LICENSE
2 Version 2.1, February 1999 2 Version 2.1, February 1999
3 3
4 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 4 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 Everyone is permitted to copy and distribute verbatim copies 6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed. 7 of this license document, but changing it is not allowed.
8 8
9 [This is the first released version of the Lesser GPL. It also counts 9 [This is the first released version of the Lesser GPL. It also counts
10 as the successor of the GNU Library Public License, version 2, hence 10 as the successor of the GNU Library Public License, version 2, hence
11 the version number 2.1.] 11 the version number 2.1.]
12 12
13 Preamble 13 Preamble
14 14
15 The licenses for most software are designed to take away your 15 The licenses for most software are designed to take away your
16 freedom to share and change it. By contrast, the GNU General Public 16 freedom to share and change it. By contrast, the GNU General Public
17 Licenses are intended to guarantee your freedom to share and change 17 Licenses are intended to guarantee your freedom to share and change
18 free software--to make sure the software is free for all its users. 18 free software--to make sure the software is free for all its users.
19 19
20 This license, the Lesser General Public License, applies to some 20 This license, the Lesser General Public License, applies to some
21 specially designated software packages--typically libraries--of the 21 specially designated software packages--typically libraries--of the
22 Free Software Foundation and other authors who decide to use it. You 22 Free Software Foundation and other authors who decide to use it. You
23 can use it too, but we suggest you first think carefully about whether 23 can use it too, but we suggest you first think carefully about whether
24 this license or the ordinary General Public License is the better 24 this license or the ordinary General Public License is the better
25 strategy to use in any particular case, based on the explanations below. 25 strategy to use in any particular case, based on the explanations below.
26 26
27 When we speak of free software, we are referring to freedom of use, 27 When we speak of free software, we are referring to freedom of use,
28 not price. Our General Public Licenses are designed to make sure that 28 not price. Our General Public Licenses are designed to make sure that
29 you have the freedom to distribute copies of free software (and charge 29 you have the freedom to distribute copies of free software (and charge
30 for this service if you wish); that you receive source code or can get 30 for this service if you wish); that you receive source code or can get
31 it if you want it; that you can change the software and use pieces of 31 it if you want it; that you can change the software and use pieces of
32 it in new free programs; and that you are informed that you can do 32 it in new free programs; and that you are informed that you can do
33 these things. 33 these things.
34 34
35 To protect your rights, we need to make restrictions that forbid 35 To protect your rights, we need to make restrictions that forbid
36 distributors to deny you these rights or to ask you to surrender these 36 distributors to deny you these rights or to ask you to surrender these
37 rights. These restrictions translate to certain responsibilities for 37 rights. These restrictions translate to certain responsibilities for
38 you if you distribute copies of the library or if you modify it. 38 you if you distribute copies of the library or if you modify it.
39 39
40 For example, if you distribute copies of the library, whether gratis 40 For example, if you distribute copies of the library, whether gratis
41 or for a fee, you must give the recipients all the rights that we gave 41 or for a fee, you must give the recipients all the rights that we gave
42 you. You must make sure that they, too, receive or can get the source 42 you. You must make sure that they, too, receive or can get the source
43 code. If you link other code with the library, you must provide 43 code. If you link other code with the library, you must provide
44 complete object files to the recipients, so that they can relink them 44 complete object files to the recipients, so that they can relink them
45 with the library after making changes to the library and recompiling 45 with the library after making changes to the library and recompiling
46 it. And you must show them these terms so they know their rights. 46 it. And you must show them these terms so they know their rights.
47 47
48 We protect your rights with a two-step method: (1) we copyright the 48 We protect your rights with a two-step method: (1) we copyright the
49 library, and (2) we offer you this license, which gives you legal 49 library, and (2) we offer you this license, which gives you legal
50 permission to copy, distribute and/or modify the library. 50 permission to copy, distribute and/or modify the library.
51 51
52 To protect each distributor, we want to make it very clear that 52 To protect each distributor, we want to make it very clear that
53 there is no warranty for the free library. Also, if the library is 53 there is no warranty for the free library. Also, if the library is
54 modified by someone else and passed on, the recipients should know 54 modified by someone else and passed on, the recipients should know
55 that what they have is not the original version, so that the original 55 that what they have is not the original version, so that the original
56 author's reputation will not be affected by problems that might be 56 author's reputation will not be affected by problems that might be
57 introduced by others. 57 introduced by others.
58 58
59 Finally, software patents pose a constant threat to the existence of 59 Finally, software patents pose a constant threat to the existence of
60 any free program. We wish to make sure that a company cannot 60 any free program. We wish to make sure that a company cannot
61 effectively restrict the users of a free program by obtaining a 61 effectively restrict the users of a free program by obtaining a
62 restrictive license from a patent holder. Therefore, we insist that 62 restrictive license from a patent holder. Therefore, we insist that
63 any patent license obtained for a version of the library must be 63 any patent license obtained for a version of the library must be
64 consistent with the full freedom of use specified in this license. 64 consistent with the full freedom of use specified in this license.
65 65
66 Most GNU software, including some libraries, is covered by the 66 Most GNU software, including some libraries, is covered by the
67 ordinary GNU General Public License. This license, the GNU Lesser 67 ordinary GNU General Public License. This license, the GNU Lesser
68 General Public License, applies to certain designated libraries, and 68 General Public License, applies to certain designated libraries, and
69 is quite different from the ordinary General Public License. We use 69 is quite different from the ordinary General Public License. We use
70 this license for certain libraries in order to permit linking those 70 this license for certain libraries in order to permit linking those
71 libraries into non-free programs. 71 libraries into non-free programs.
72 72
73 When a program is linked with a library, whether statically or using 73 When a program is linked with a library, whether statically or using
74 a shared library, the combination of the two is legally speaking a 74 a shared library, the combination of the two is legally speaking a
75 combined work, a derivative of the original library. The ordinary 75 combined work, a derivative of the original library. The ordinary
76 General Public License therefore permits such linking only if the 76 General Public License therefore permits such linking only if the
77 entire combination fits its criteria of freedom. The Lesser General 77 entire combination fits its criteria of freedom. The Lesser General
78 Public License permits more lax criteria for linking other code with 78 Public License permits more lax criteria for linking other code with
79 the library. 79 the library.
80 80
81 We call this license the "Lesser" General Public License because it 81 We call this license the "Lesser" General Public License because it
82 does Less to protect the user's freedom than the ordinary General 82 does Less to protect the user's freedom than the ordinary General
83 Public License. It also provides other free software developers Less 83 Public License. It also provides other free software developers Less
84 of an advantage over competing non-free programs. These disadvantages 84 of an advantage over competing non-free programs. These disadvantages
85 are the reason we use the ordinary General Public License for many 85 are the reason we use the ordinary General Public License for many
86 libraries. However, the Lesser license provides advantages in certain 86 libraries. However, the Lesser license provides advantages in certain
87 special circumstances. 87 special circumstances.
88 88
89 For example, on rare occasions, there may be a special need to 89 For example, on rare occasions, there may be a special need to
90 encourage the widest possible use of a certain library, so that it becomes 90 encourage the widest possible use of a certain library, so that it becomes
91 a de-facto standard. To achieve this, non-free programs must be 91 a de-facto standard. To achieve this, non-free programs must be
92 allowed to use the library. A more frequent case is that a free 92 allowed to use the library. A more frequent case is that a free
93 library does the same job as widely used non-free libraries. In this 93 library does the same job as widely used non-free libraries. In this
94 case, there is little to gain by limiting the free library to free 94 case, there is little to gain by limiting the free library to free
95 software only, so we use the Lesser General Public License. 95 software only, so we use the Lesser General Public License.
96 96
97 In other cases, permission to use a particular library in non-free 97 In other cases, permission to use a particular library in non-free
98 programs enables a greater number of people to use a large body of 98 programs enables a greater number of people to use a large body of
99 free software. For example, permission to use the GNU C Library in 99 free software. For example, permission to use the GNU C Library in
100 non-free programs enables many more people to use the whole GNU 100 non-free programs enables many more people to use the whole GNU
101 operating system, as well as its variant, the GNU/Linux operating 101 operating system, as well as its variant, the GNU/Linux operating
102 system. 102 system.
103 103
104 Although the Lesser General Public License is Less protective of the 104 Although the Lesser General Public License is Less protective of the
105 users' freedom, it does ensure that the user of a program that is 105 users' freedom, it does ensure that the user of a program that is
106 linked with the Library has the freedom and the wherewithal to run 106 linked with the Library has the freedom and the wherewithal to run
107 that program using a modified version of the Library. 107 that program using a modified version of the Library.
108 108
109 The precise terms and conditions for copying, distribution and 109 The precise terms and conditions for copying, distribution and
110 modification follow. Pay close attention to the difference between a 110 modification follow. Pay close attention to the difference between a
111 "work based on the library" and a "work that uses the library". The 111 "work based on the library" and a "work that uses the library". The
112 former contains code derived from the library, whereas the latter must 112 former contains code derived from the library, whereas the latter must
113 be combined with the library in order to run. 113 be combined with the library in order to run.
114 114
115 GNU LESSER GENERAL PUBLIC LICENSE 115 GNU LESSER GENERAL PUBLIC LICENSE
116 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 116 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117 117
118 0. This License Agreement applies to any software library or other 118 0. This License Agreement applies to any software library or other
119 program which contains a notice placed by the copyright holder or 119 program which contains a notice placed by the copyright holder or
120 other authorized party saying it may be distributed under the terms of 120 other authorized party saying it may be distributed under the terms of
121 this Lesser General Public License (also called "this License"). 121 this Lesser General Public License (also called "this License").
122 Each licensee is addressed as "you". 122 Each licensee is addressed as "you".
123 123
124 A "library" means a collection of software functions and/or data 124 A "library" means a collection of software functions and/or data
125 prepared so as to be conveniently linked with application programs 125 prepared so as to be conveniently linked with application programs
126 (which use some of those functions and data) to form executables. 126 (which use some of those functions and data) to form executables.
127 127
128 The "Library", below, refers to any such software library or work 128 The "Library", below, refers to any such software library or work
129 which has been distributed under these terms. A "work based on the 129 which has been distributed under these terms. A "work based on the
130 Library" means either the Library or any derivative work under 130 Library" means either the Library or any derivative work under
131 copyright law: that is to say, a work containing the Library or a 131 copyright law: that is to say, a work containing the Library or a
132 portion of it, either verbatim or with modifications and/or translated 132 portion of it, either verbatim or with modifications and/or translated
133 straightforwardly into another language. (Hereinafter, translation is 133 straightforwardly into another language. (Hereinafter, translation is
134 included without limitation in the term "modification".) 134 included without limitation in the term "modification".)
135 135
136 "Source code" for a work means the preferred form of the work for 136 "Source code" for a work means the preferred form of the work for
137 making modifications to it. For a library, complete source code means 137 making modifications to it. For a library, complete source code means
138 all the source code for all modules it contains, plus any associated 138 all the source code for all modules it contains, plus any associated
139 interface definition files, plus the scripts used to control compilation 139 interface definition files, plus the scripts used to control compilation
140 and installation of the library. 140 and installation of the library.
141 141
142 Activities other than copying, distribution and modification are not 142 Activities other than copying, distribution and modification are not
143 covered by this License; they are outside its scope. The act of 143 covered by this License; they are outside its scope. The act of
144 running a program using the Library is not restricted, and output from 144 running a program using the Library is not restricted, and output from
145 such a program is covered only if its contents constitute a work based 145 such a program is covered only if its contents constitute a work based
146 on the Library (independent of the use of the Library in a tool for 146 on the Library (independent of the use of the Library in a tool for
147 writing it). Whether that is true depends on what the Library does 147 writing it). Whether that is true depends on what the Library does
148 and what the program that uses the Library does. 148 and what the program that uses the Library does.
149 149
150 1. You may copy and distribute verbatim copies of the Library's 150 1. You may copy and distribute verbatim copies of the Library's
151 complete source code as you receive it, in any medium, provided that 151 complete source code as you receive it, in any medium, provided that
152 you conspicuously and appropriately publish on each copy an 152 you conspicuously and appropriately publish on each copy an
153 appropriate copyright notice and disclaimer of warranty; keep intact 153 appropriate copyright notice and disclaimer of warranty; keep intact
154 all the notices that refer to this License and to the absence of any 154 all the notices that refer to this License and to the absence of any
155 warranty; and distribute a copy of this License along with the 155 warranty; and distribute a copy of this License along with the
156 Library. 156 Library.
157 157
158 You may charge a fee for the physical act of transferring a copy, 158 You may charge a fee for the physical act of transferring a copy,
159 and you may at your option offer warranty protection in exchange for a 159 and you may at your option offer warranty protection in exchange for a
160 fee. 160 fee.
161 161
162 2. You may modify your copy or copies of the Library or any portion 162 2. You may modify your copy or copies of the Library or any portion
163 of it, thus forming a work based on the Library, and copy and 163 of it, thus forming a work based on the Library, and copy and
164 distribute such modifications or work under the terms of Section 1 164 distribute such modifications or work under the terms of Section 1
165 above, provided that you also meet all of these conditions: 165 above, provided that you also meet all of these conditions:
166 166
167 a) The modified work must itself be a software library. 167 a) The modified work must itself be a software library.
168 168
169 b) You must cause the files modified to carry prominent notices 169 b) You must cause the files modified to carry prominent notices
170 stating that you changed the files and the date of any change. 170 stating that you changed the files and the date of any change.
171 171
172 c) You must cause the whole of the work to be licensed at no 172 c) You must cause the whole of the work to be licensed at no
173 charge to all third parties under the terms of this License. 173 charge to all third parties under the terms of this License.
174 174
175 d) If a facility in the modified Library refers to a function or a 175 d) If a facility in the modified Library refers to a function or a
176 table of data to be supplied by an application program that uses 176 table of data to be supplied by an application program that uses
177 the facility, other than as an argument passed when the facility 177 the facility, other than as an argument passed when the facility
178 is invoked, then you must make a good faith effort to ensure that, 178 is invoked, then you must make a good faith effort to ensure that,
179 in the event an application does not supply such function or 179 in the event an application does not supply such function or
180 table, the facility still operates, and performs whatever part of 180 table, the facility still operates, and performs whatever part of
181 its purpose remains meaningful. 181 its purpose remains meaningful.
182 182
183 (For example, a function in a library to compute square roots has 183 (For example, a function in a library to compute square roots has
184 a purpose that is entirely well-defined independent of the 184 a purpose that is entirely well-defined independent of the
185 application. Therefore, Subsection 2d requires that any 185 application. Therefore, Subsection 2d requires that any
186 application-supplied function or table used by this function must 186 application-supplied function or table used by this function must
187 be optional: if the application does not supply it, the square 187 be optional: if the application does not supply it, the square
188 root function must still compute square roots.) 188 root function must still compute square roots.)
189 189
190 These requirements apply to the modified work as a whole. If 190 These requirements apply to the modified work as a whole. If
191 identifiable sections of that work are not derived from the Library, 191 identifiable sections of that work are not derived from the Library,
192 and can be reasonably considered independent and separate works in 192 and can be reasonably considered independent and separate works in
193 themselves, then this License, and its terms, do not apply to those 193 themselves, then this License, and its terms, do not apply to those
194 sections when you distribute them as separate works. But when you 194 sections when you distribute them as separate works. But when you
195 distribute the same sections as part of a whole which is a work based 195 distribute the same sections as part of a whole which is a work based
196 on the Library, the distribution of the whole must be on the terms of 196 on the Library, the distribution of the whole must be on the terms of
197 this License, whose permissions for other licensees extend to the 197 this License, whose permissions for other licensees extend to the
198 entire whole, and thus to each and every part regardless of who wrote 198 entire whole, and thus to each and every part regardless of who wrote
199 it. 199 it.
200 200
201 Thus, it is not the intent of this section to claim rights or contest 201 Thus, it is not the intent of this section to claim rights or contest
202 your rights to work written entirely by you; rather, the intent is to 202 your rights to work written entirely by you; rather, the intent is to
203 exercise the right to control the distribution of derivative or 203 exercise the right to control the distribution of derivative or
204 collective works based on the Library. 204 collective works based on the Library.
205 205
206 In addition, mere aggregation of another work not based on the Library 206 In addition, mere aggregation of another work not based on the Library
207 with the Library (or with a work based on the Library) on a volume of 207 with the Library (or with a work based on the Library) on a volume of
208 a storage or distribution medium does not bring the other work under 208 a storage or distribution medium does not bring the other work under
209 the scope of this License. 209 the scope of this License.
210 210
211 3. You may opt to apply the terms of the ordinary GNU General Public 211 3. You may opt to apply the terms of the ordinary GNU General Public
212 License instead of this License to a given copy of the Library. To do 212 License instead of this License to a given copy of the Library. To do
213 this, you must alter all the notices that refer to this License, so 213 this, you must alter all the notices that refer to this License, so
214 that they refer to the ordinary GNU General Public License, version 2, 214 that they refer to the ordinary GNU General Public License, version 2,
215 instead of to this License. (If a newer version than version 2 of the 215 instead of to this License. (If a newer version than version 2 of the
216 ordinary GNU General Public License has appeared, then you can specify 216 ordinary GNU General Public License has appeared, then you can specify
217 that version instead if you wish.) Do not make any other change in 217 that version instead if you wish.) Do not make any other change in
218 these notices. 218 these notices.
219 219
220 Once this change is made in a given copy, it is irreversible for 220 Once this change is made in a given copy, it is irreversible for
221 that copy, so the ordinary GNU General Public License applies to all 221 that copy, so the ordinary GNU General Public License applies to all
222 subsequent copies and derivative works made from that copy. 222 subsequent copies and derivative works made from that copy.
223 223
224 This option is useful when you wish to copy part of the code of 224 This option is useful when you wish to copy part of the code of
225 the Library into a program that is not a library. 225 the Library into a program that is not a library.
226 226
227 4. You may copy and distribute the Library (or a portion or 227 4. You may copy and distribute the Library (or a portion or
228 derivative of it, under Section 2) in object code or executable form 228 derivative of it, under Section 2) in object code or executable form
229 under the terms of Sections 1 and 2 above provided that you accompany 229 under the terms of Sections 1 and 2 above provided that you accompany
230 it with the complete corresponding machine-readable source code, which 230 it with the complete corresponding machine-readable source code, which
231 must be distributed under the terms of Sections 1 and 2 above on a 231 must be distributed under the terms of Sections 1 and 2 above on a
232 medium customarily used for software interchange. 232 medium customarily used for software interchange.
233 233
234 If distribution of object code is made by offering access to copy 234 If distribution of object code is made by offering access to copy
235 from a designated place, then offering equivalent access to copy the 235 from a designated place, then offering equivalent access to copy the
236 source code from the same place satisfies the requirement to 236 source code from the same place satisfies the requirement to
237 distribute the source code, even though third parties are not 237 distribute the source code, even though third parties are not
238 compelled to copy the source along with the object code. 238 compelled to copy the source along with the object code.
239 239
240 5. A program that contains no derivative of any portion of the 240 5. A program that contains no derivative of any portion of the
241 Library, but is designed to work with the Library by being compiled or 241 Library, but is designed to work with the Library by being compiled or
242 linked with it, is called a "work that uses the Library". Such a 242 linked with it, is called a "work that uses the Library". Such a
243 work, in isolation, is not a derivative work of the Library, and 243 work, in isolation, is not a derivative work of the Library, and
244 therefore falls outside the scope of this License. 244 therefore falls outside the scope of this License.
245 245
246 However, linking a "work that uses the Library" with the Library 246 However, linking a "work that uses the Library" with the Library
247 creates an executable that is a derivative of the Library (because it 247 creates an executable that is a derivative of the Library (because it
248 contains portions of the Library), rather than a "work that uses the 248 contains portions of the Library), rather than a "work that uses the
249 library". The executable is therefore covered by this License. 249 library". The executable is therefore covered by this License.
250 Section 6 states terms for distribution of such executables. 250 Section 6 states terms for distribution of such executables.
251 251
252 When a "work that uses the Library" uses material from a header file 252 When a "work that uses the Library" uses material from a header file
253 that is part of the Library, the object code for the work may be a 253 that is part of the Library, the object code for the work may be a
254 derivative work of the Library even though the source code is not. 254 derivative work of the Library even though the source code is not.
255 Whether this is true is especially significant if the work can be 255 Whether this is true is especially significant if the work can be
256 linked without the Library, or if the work is itself a library. The 256 linked without the Library, or if the work is itself a library. The
257 threshold for this to be true is not precisely defined by law. 257 threshold for this to be true is not precisely defined by law.
258 258
259 If such an object file uses only numerical parameters, data 259 If such an object file uses only numerical parameters, data
260 structure layouts and accessors, and small macros and small inline 260 structure layouts and accessors, and small macros and small inline
261 functions (ten lines or less in length), then the use of the object 261 functions (ten lines or less in length), then the use of the object
262 file is unrestricted, regardless of whether it is legally a derivative 262 file is unrestricted, regardless of whether it is legally a derivative
263 work. (Executables containing this object code plus portions of the 263 work. (Executables containing this object code plus portions of the
264 Library will still fall under Section 6.) 264 Library will still fall under Section 6.)
265 265
266 Otherwise, if the work is a derivative of the Library, you may 266 Otherwise, if the work is a derivative of the Library, you may
267 distribute the object code for the work under the terms of Section 6. 267 distribute the object code for the work under the terms of Section 6.
268 Any executables containing that work also fall under Section 6, 268 Any executables containing that work also fall under Section 6,
269 whether or not they are linked directly with the Library itself. 269 whether or not they are linked directly with the Library itself.
270 270
271 6. As an exception to the Sections above, you may also combine or 271 6. As an exception to the Sections above, you may also combine or
272 link a "work that uses the Library" with the Library to produce a 272 link a "work that uses the Library" with the Library to produce a
273 work containing portions of the Library, and distribute that work 273 work containing portions of the Library, and distribute that work
274 under terms of your choice, provided that the terms permit 274 under terms of your choice, provided that the terms permit
275 modification of the work for the customer's own use and reverse 275 modification of the work for the customer's own use and reverse
276 engineering for debugging such modifications. 276 engineering for debugging such modifications.
277 277
278 You must give prominent notice with each copy of the work that the 278 You must give prominent notice with each copy of the work that the
279 Library is used in it and that the Library and its use are covered by 279 Library is used in it and that the Library and its use are covered by
280 this License. You must supply a copy of this License. If the work 280 this License. You must supply a copy of this License. If the work
281 during execution displays copyright notices, you must include the 281 during execution displays copyright notices, you must include the
282 copyright notice for the Library among them, as well as a reference 282 copyright notice for the Library among them, as well as a reference
283 directing the user to the copy of this License. Also, you must do one 283 directing the user to the copy of this License. Also, you must do one
284 of these things: 284 of these things:
285 285
286 a) Accompany the work with the complete corresponding 286 a) Accompany the work with the complete corresponding
287 machine-readable source code for the Library including whatever 287 machine-readable source code for the Library including whatever
288 changes were used in the work (which must be distributed under 288 changes were used in the work (which must be distributed under
289 Sections 1 and 2 above); and, if the work is an executable linked 289 Sections 1 and 2 above); and, if the work is an executable linked
290 with the Library, with the complete machine-readable "work that 290 with the Library, with the complete machine-readable "work that
291 uses the Library", as object code and/or source code, so that the 291 uses the Library", as object code and/or source code, so that the
292 user can modify the Library and then relink to produce a modified 292 user can modify the Library and then relink to produce a modified
293 executable containing the modified Library. (It is understood 293 executable containing the modified Library. (It is understood
294 that the user who changes the contents of definitions files in the 294 that the user who changes the contents of definitions files in the
295 Library will not necessarily be able to recompile the application 295 Library will not necessarily be able to recompile the application
296 to use the modified definitions.) 296 to use the modified definitions.)
297 297
298 b) Use a suitable shared library mechanism for linking with the 298 b) Use a suitable shared library mechanism for linking with the
299 Library. A suitable mechanism is one that (1) uses at run time a 299 Library. A suitable mechanism is one that (1) uses at run time a
300 copy of the library already present on the user's computer system, 300 copy of the library already present on the user's computer system,
301 rather than copying library functions into the executable, and (2) 301 rather than copying library functions into the executable, and (2)
302 will operate properly with a modified version of the library, if 302 will operate properly with a modified version of the library, if
303 the user installs one, as long as the modified version is 303 the user installs one, as long as the modified version is
304 interface-compatible with the version that the work was made with. 304 interface-compatible with the version that the work was made with.
305 305
306 c) Accompany the work with a written offer, valid for at 306 c) Accompany the work with a written offer, valid for at
307 least three years, to give the same user the materials 307 least three years, to give the same user the materials
308 specified in Subsection 6a, above, for a charge no more 308 specified in Subsection 6a, above, for a charge no more
309 than the cost of performing this distribution. 309 than the cost of performing this distribution.
310 310
311 d) If distribution of the work is made by offering access to copy 311 d) If distribution of the work is made by offering access to copy
312 from a designated place, offer equivalent access to copy the above 312 from a designated place, offer equivalent access to copy the above
313 specified materials from the same place. 313 specified materials from the same place.
314 314
315 e) Verify that the user has already received a copy of these 315 e) Verify that the user has already received a copy of these
316 materials or that you have already sent this user a copy. 316 materials or that you have already sent this user a copy.
317 317
318 For an executable, the required form of the "work that uses the 318 For an executable, the required form of the "work that uses the
319 Library" must include any data and utility programs needed for 319 Library" must include any data and utility programs needed for
320 reproducing the executable from it. However, as a special exception, 320 reproducing the executable from it. However, as a special exception,
321 the materials to be distributed need not include anything that is 321 the materials to be distributed need not include anything that is
322 normally distributed (in either source or binary form) with the major 322 normally distributed (in either source or binary form) with the major
323 components (compiler, kernel, and so on) of the operating system on 323 components (compiler, kernel, and so on) of the operating system on
324 which the executable runs, unless that component itself accompanies 324 which the executable runs, unless that component itself accompanies
325 the executable. 325 the executable.
326 326
327 It may happen that this requirement contradicts the license 327 It may happen that this requirement contradicts the license
328 restrictions of other proprietary libraries that do not normally 328 restrictions of other proprietary libraries that do not normally
329 accompany the operating system. Such a contradiction means you cannot 329 accompany the operating system. Such a contradiction means you cannot
330 use both them and the Library together in an executable that you 330 use both them and the Library together in an executable that you
331 distribute. 331 distribute.
332 332
333 7. You may place library facilities that are a work based on the 333 7. You may place library facilities that are a work based on the
334 Library side-by-side in a single library together with other library 334 Library side-by-side in a single library together with other library
335 facilities not covered by this License, and distribute such a combined 335 facilities not covered by this License, and distribute such a combined
336 library, provided that the separate distribution of the work based on 336 library, provided that the separate distribution of the work based on
337 the Library and of the other library facilities is otherwise 337 the Library and of the other library facilities is otherwise
338 permitted, and provided that you do these two things: 338 permitted, and provided that you do these two things:
339 339
340 a) Accompany the combined library with a copy of the same work 340 a) Accompany the combined library with a copy of the same work
341 based on the Library, uncombined with any other library 341 based on the Library, uncombined with any other library
342 facilities. This must be distributed under the terms of the 342 facilities. This must be distributed under the terms of the
343 Sections above. 343 Sections above.
344 344
345 b) Give prominent notice with the combined library of the fact 345 b) Give prominent notice with the combined library of the fact
346 that part of it is a work based on the Library, and explaining 346 that part of it is a work based on the Library, and explaining
347 where to find the accompanying uncombined form of the same work. 347 where to find the accompanying uncombined form of the same work.
348 348
349 8. You may not copy, modify, sublicense, link with, or distribute 349 8. You may not copy, modify, sublicense, link with, or distribute
350 the Library except as expressly provided under this License. Any 350 the Library except as expressly provided under this License. Any
351 attempt otherwise to copy, modify, sublicense, link with, or 351 attempt otherwise to copy, modify, sublicense, link with, or
352 distribute the Library is void, and will automatically terminate your 352 distribute the Library is void, and will automatically terminate your
353 rights under this License. However, parties who have received copies, 353 rights under this License. However, parties who have received copies,
354 or rights, from you under this License will not have their licenses 354 or rights, from you under this License will not have their licenses
355 terminated so long as such parties remain in full compliance. 355 terminated so long as such parties remain in full compliance.
356 356
357 9. You are not required to accept this License, since you have not 357 9. You are not required to accept this License, since you have not
358 signed it. However, nothing else grants you permission to modify or 358 signed it. However, nothing else grants you permission to modify or
359 distribute the Library or its derivative works. These actions are 359 distribute the Library or its derivative works. These actions are
360 prohibited by law if you do not accept this License. Therefore, by 360 prohibited by law if you do not accept this License. Therefore, by
361 modifying or distributing the Library (or any work based on the 361 modifying or distributing the Library (or any work based on the
362 Library), you indicate your acceptance of this License to do so, and 362 Library), you indicate your acceptance of this License to do so, and
363 all its terms and conditions for copying, distributing or modifying 363 all its terms and conditions for copying, distributing or modifying
364 the Library or works based on it. 364 the Library or works based on it.
365 365
366 10. Each time you redistribute the Library (or any work based on the 366 10. Each time you redistribute the Library (or any work based on the
367 Library), the recipient automatically receives a license from the 367 Library), the recipient automatically receives a license from the
368 original licensor to copy, distribute, link with or modify the Library 368 original licensor to copy, distribute, link with or modify the Library
369 subject to these terms and conditions. You may not impose any further 369 subject to these terms and conditions. You may not impose any further
370 restrictions on the recipients' exercise of the rights granted herein. 370 restrictions on the recipients' exercise of the rights granted herein.
371 You are not responsible for enforcing compliance by third parties with 371 You are not responsible for enforcing compliance by third parties with
372 this License. 372 this License.
373 373
374 11. If, as a consequence of a court judgment or allegation of patent 374 11. If, as a consequence of a court judgment or allegation of patent
375 infringement or for any other reason (not limited to patent issues), 375 infringement or for any other reason (not limited to patent issues),
376 conditions are imposed on you (whether by court order, agreement or 376 conditions are imposed on you (whether by court order, agreement or
377 otherwise) that contradict the conditions of this License, they do not 377 otherwise) that contradict the conditions of this License, they do not
378 excuse you from the conditions of this License. If you cannot 378 excuse you from the conditions of this License. If you cannot
379 distribute so as to satisfy simultaneously your obligations under this 379 distribute so as to satisfy simultaneously your obligations under this
380 License and any other pertinent obligations, then as a consequence you 380 License and any other pertinent obligations, then as a consequence you
381 may not distribute the Library at all. For example, if a patent 381 may not distribute the Library at all. For example, if a patent
382 license would not permit royalty-free redistribution of the Library by 382 license would not permit royalty-free redistribution of the Library by
383 all those who receive copies directly or indirectly through you, then 383 all those who receive copies directly or indirectly through you, then
384 the only way you could satisfy both it and this License would be to 384 the only way you could satisfy both it and this License would be to
385 refrain entirely from distribution of the Library. 385 refrain entirely from distribution of the Library.
386 386
387 If any portion of this section is held invalid or unenforceable under any 387 If any portion of this section is held invalid or unenforceable under any
388 particular circumstance, the balance of the section is intended to apply, 388 particular circumstance, the balance of the section is intended to apply,
389 and the section as a whole is intended to apply in other circumstances. 389 and the section as a whole is intended to apply in other circumstances.
390 390
391 It is not the purpose of this section to induce you to infringe any 391 It is not the purpose of this section to induce you to infringe any
392 patents or other property right claims or to contest validity of any 392 patents or other property right claims or to contest validity of any
393 such claims; this section has the sole purpose of protecting the 393 such claims; this section has the sole purpose of protecting the
394 integrity of the free software distribution system which is 394 integrity of the free software distribution system which is
395 implemented by public license practices. Many people have made 395 implemented by public license practices. Many people have made
396 generous contributions to the wide range of software distributed 396 generous contributions to the wide range of software distributed
397 through that system in reliance on consistent application of that 397 through that system in reliance on consistent application of that
398 system; it is up to the author/donor to decide if he or she is willing 398 system; it is up to the author/donor to decide if he or she is willing
399 to distribute software through any other system and a licensee cannot 399 to distribute software through any other system and a licensee cannot
400 impose that choice. 400 impose that choice.
401 401
402 This section is intended to make thoroughly clear what is believed to 402 This section is intended to make thoroughly clear what is believed to
403 be a consequence of the rest of this License. 403 be a consequence of the rest of this License.
404 404
405 12. If the distribution and/or use of the Library is restricted in 405 12. If the distribution and/or use of the Library is restricted in
406 certain countries either by patents or by copyrighted interfaces, the 406 certain countries either by patents or by copyrighted interfaces, the
407 original copyright holder who places the Library under this License may add 407 original copyright holder who places the Library under this License may add
408 an explicit geographical distribution limitation excluding those countries, 408 an explicit geographical distribution limitation excluding those countries,
409 so that distribution is permitted only in or among countries not thus 409 so that distribution is permitted only in or among countries not thus
410 excluded. In such case, this License incorporates the limitation as if 410 excluded. In such case, this License incorporates the limitation as if
411 written in the body of this License. 411 written in the body of this License.
412 412
413 13. The Free Software Foundation may publish revised and/or new 413 13. The Free Software Foundation may publish revised and/or new
414 versions of the Lesser General Public License from time to time. 414 versions of the Lesser General Public License from time to time.
415 Such new versions will be similar in spirit to the present version, 415 Such new versions will be similar in spirit to the present version,
416 but may differ in detail to address new problems or concerns. 416 but may differ in detail to address new problems or concerns.
417 417
418 Each version is given a distinguishing version number. If the Library 418 Each version is given a distinguishing version number. If the Library
419 specifies a version number of this License which applies to it and 419 specifies a version number of this License which applies to it and
420 "any later version", you have the option of following the terms and 420 "any later version", you have the option of following the terms and
421 conditions either of that version or of any later version published by 421 conditions either of that version or of any later version published by
422 the Free Software Foundation. If the Library does not specify a 422 the Free Software Foundation. If the Library does not specify a
423 license version number, you may choose any version ever published by 423 license version number, you may choose any version ever published by
424 the Free Software Foundation. 424 the Free Software Foundation.
425 425
426 14. If you wish to incorporate parts of the Library into other free 426 14. If you wish to incorporate parts of the Library into other free
427 programs whose distribution conditions are incompatible with these, 427 programs whose distribution conditions are incompatible with these,
428 write to the author to ask for permission. For software which is 428 write to the author to ask for permission. For software which is
429 copyrighted by the Free Software Foundation, write to the Free 429 copyrighted by the Free Software Foundation, write to the Free
430 Software Foundation; we sometimes make exceptions for this. Our 430 Software Foundation; we sometimes make exceptions for this. Our
431 decision will be guided by the two goals of preserving the free status 431 decision will be guided by the two goals of preserving the free status
432 of all derivatives of our free software and of promoting the sharing 432 of all derivatives of our free software and of promoting the sharing
433 and reuse of software generally. 433 and reuse of software generally.
434 434
435 NO WARRANTY 435 NO WARRANTY
436 436
437 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 437 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 438 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439 EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 439 EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440 OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 440 OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441 KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 441 KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 442 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 443 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 444 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445 THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 445 THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446 446
447 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 447 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 448 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449 AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 449 AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 450 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 451 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452 LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 452 LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 453 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454 FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 454 FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 455 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456 DAMAGES. 456 DAMAGES.
457 457
458 END OF TERMS AND CONDITIONS 458 END OF TERMS AND CONDITIONS
459 459
460 How to Apply These Terms to Your New Libraries 460 How to Apply These Terms to Your New Libraries
461 461
462 If you develop a new library, and you want it to be of the greatest 462 If you develop a new library, and you want it to be of the greatest
463 possible use to the public, we recommend making it free software that 463 possible use to the public, we recommend making it free software that
464 everyone can redistribute and change. You can do so by permitting 464 everyone can redistribute and change. You can do so by permitting
465 redistribution under these terms (or, alternatively, under the terms of the 465 redistribution under these terms (or, alternatively, under the terms of the
466 ordinary General Public License). 466 ordinary General Public License).
467 467
468 To apply these terms, attach the following notices to the library. It is 468 To apply these terms, attach the following notices to the library. It is
469 safest to attach them to the start of each source file to most effectively 469 safest to attach them to the start of each source file to most effectively
470 convey the exclusion of warranty; and each file should have at least the 470 convey the exclusion of warranty; and each file should have at least the
471 "copyright" line and a pointer to where the full notice is found. 471 "copyright" line and a pointer to where the full notice is found.
472 472
473 <one line to give the library's name and a brief idea of what it does.> 473 <one line to give the library's name and a brief idea of what it does.>
474 Copyright (C) <year> <name of author> 474 Copyright (C) <year> <name of author>
475 475
476 This library is free software; you can redistribute it and/or 476 This library is free software; you can redistribute it and/or
477 modify it under the terms of the GNU Lesser General Public 477 modify it under the terms of the GNU Lesser General Public
478 License as published by the Free Software Foundation; either 478 License as published by the Free Software Foundation; either
479 version 2.1 of the License, or (at your option) any later version. 479 version 2.1 of the License, or (at your option) any later version.
480 480
481 This library is distributed in the hope that it will be useful, 481 This library is distributed in the hope that it will be useful,
482 but WITHOUT ANY WARRANTY; without even the implied warranty of 482 but WITHOUT ANY WARRANTY; without even the implied warranty of
483 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 483 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484 Lesser General Public License for more details. 484 Lesser General Public License for more details.
485 485
486 You should have received a copy of the GNU Lesser General Public 486 You should have received a copy of the GNU Lesser General Public
487 License along with this library; if not, write to the Free Software 487 License along with this library; if not, write to the Free Software
488 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 488 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
489 489
490 Also add information on how to contact you by electronic and paper mail. 490 Also add information on how to contact you by electronic and paper mail.
491 491
492 You should also get your employer (if you work as a programmer) or your 492 You should also get your employer (if you work as a programmer) or your
493 school, if any, to sign a "copyright disclaimer" for the library, if 493 school, if any, to sign a "copyright disclaimer" for the library, if
494 necessary. Here is a sample; alter the names: 494 necessary. Here is a sample; alter the names:
495 495
496 Yoyodyne, Inc., hereby disclaims all copyright interest in the 496 Yoyodyne, Inc., hereby disclaims all copyright interest in the
497 library `Frob' (a library for tweaking knobs) written by James Random Hacker. 497 library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498 498
499 <signature of Ty Coon>, 1 April 1990 499 <signature of Ty Coon>, 1 April 1990
500 Ty Coon, President of Vice 500 Ty Coon, President of Vice
501 501
502 That's all there is to it! 502 That's all there is to it!
503 503
504 504
......
This diff could not be displayed because it is too large.
1 // -------------------------------------------------------------------------------- 1 // --------------------------------------------------------------------------------
2 // PclZip 2.8.2 - readme.txt 2 // PclZip 2.8.2 - readme.txt
3 // -------------------------------------------------------------------------------- 3 // --------------------------------------------------------------------------------
4 // License GNU/LGPL - August 2009 4 // License GNU/LGPL - August 2009
5 // Vincent Blavet - vincent@phpconcept.net 5 // Vincent Blavet - vincent@phpconcept.net
6 // http://www.phpconcept.net 6 // http://www.phpconcept.net
7 // -------------------------------------------------------------------------------- 7 // --------------------------------------------------------------------------------
8 // $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $ 8 // $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
9 // -------------------------------------------------------------------------------- 9 // --------------------------------------------------------------------------------
10 10
11 11
12 12
13 0 - Sommaire 13 0 - Sommaire
14 ============ 14 ============
15 1 - Introduction 15 1 - Introduction
16 2 - What's new 16 2 - What's new
17 3 - Corrected bugs 17 3 - Corrected bugs
18 4 - Known bugs or limitations 18 4 - Known bugs or limitations
19 5 - License 19 5 - License
20 6 - Warning 20 6 - Warning
21 7 - Documentation 21 7 - Documentation
22 8 - Author 22 8 - Author
23 9 - Contribute 23 9 - Contribute
24 24
25 1 - Introduction 25 1 - Introduction
26 ================ 26 ================
27 27
28 PclZip is a library that allow you to manage a Zip archive. 28 PclZip is a library that allow you to manage a Zip archive.
29 29
30 Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip 30 Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
31 31
32 2 - What's new 32 2 - What's new
33 ============== 33 ==============
34 34
35 Version 2.8.2 : 35 Version 2.8.2 :
36 - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with 36 - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with
37 extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string 37 extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
38 can also be modified in the post-extract call back. 38 can also be modified in the post-extract call back.
39 **Bugs correction : 39 **Bugs correction :
40 - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly 40 - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly
41 - Remove use of eval() and do direct call to callback functions 41 - Remove use of eval() and do direct call to callback functions
42 - Correct support of 64bits systems (Thanks to WordPress team) 42 - Correct support of 64bits systems (Thanks to WordPress team)
43 43
44 Version 2.8.1 : 44 Version 2.8.1 :
45 - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is 45 - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
46 deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will 46 deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
47 automatically replace it by PCLZIP_OPT_BY_PREG. 47 automatically replace it by PCLZIP_OPT_BY_PREG.
48 48
49 Version 2.8 : 49 Version 2.8 :
50 - Improve extraction of zip archive for large files by using temporary files 50 - Improve extraction of zip archive for large files by using temporary files
51 This feature is working like the one defined in r2.7. 51 This feature is working like the one defined in r2.7.
52 Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF, 52 Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
53 PCLZIP_OPT_TEMP_FILE_THRESHOLD 53 PCLZIP_OPT_TEMP_FILE_THRESHOLD
54 - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto 54 - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
55 sense of temporary file use. 55 sense of temporary file use.
56 - Bug correction : Reduce filepath in returned file list to remove ennoying 56 - Bug correction : Reduce filepath in returned file list to remove ennoying
57 './/' preambule in file path. 57 './/' preambule in file path.
58 58
59 Version 2.7 : 59 Version 2.7 :
60 - Improve creation of zip archive for large files : 60 - Improve creation of zip archive for large files :
61 PclZip will now autosense the configured memory and use temporary files 61 PclZip will now autosense the configured memory and use temporary files
62 when large file is suspected. 62 when large file is suspected.
63 This feature can also ne triggered by manual options in create() and add() 63 This feature can also ne triggered by manual options in create() and add()
64 methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files, 64 methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
65 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic, 65 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic,
66 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size 66 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
67 threshold to use temporary files. 67 threshold to use temporary files.
68 Using "temporary files" rather than "memory" might take more time, but 68 Using "temporary files" rather than "memory" might take more time, but
69 might give the ability to zip very large files : 69 might give the ability to zip very large files :
70 Tested on my win laptop with a 88Mo file : 70 Tested on my win laptop with a 88Mo file :
71 Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo) 71 Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
72 Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo) 72 Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
73 - Replace use of mktime() by time() to limit the E_STRICT error messages. 73 - Replace use of mktime() by time() to limit the E_STRICT error messages.
74 - Bug correction : When adding files with full windows path (drive letter) 74 - Bug correction : When adding files with full windows path (drive letter)
75 PclZip is now working. Before, if the drive letter is not the default 75 PclZip is now working. Before, if the drive letter is not the default
76 path, PclZip was not able to add the file. 76 path, PclZip was not able to add the file.
77 77
78 Version 2.6 : 78 Version 2.6 :
79 - Code optimisation 79 - Code optimisation
80 - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to 80 - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
81 add a comment for a specific file. (Don't really know if this is usefull) 81 add a comment for a specific file. (Don't really know if this is usefull)
82 - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string 82 - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string
83 as a file. 83 as a file.
84 - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with 84 - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
85 a file. 85 a file.
86 - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted 86 - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
87 with current time 87 with current time
88 - Add CRC value in the informations returned back for each file after an 88 - Add CRC value in the informations returned back for each file after an
89 action. 89 action.
90 - Add missing closedir() statement. 90 - Add missing closedir() statement.
91 - When adding a folder, and removing the path of this folder, files were 91 - When adding a folder, and removing the path of this folder, files were
92 incorrectly added with a '/' at the beginning. Which means files are 92 incorrectly added with a '/' at the beginning. Which means files are
93 related to root in unix systems. Corrected. 93 related to root in unix systems. Corrected.
94 - Add conditional if before constant definition. This will allow users 94 - Add conditional if before constant definition. This will allow users
95 to redefine constants without changing the file, and then improve 95 to redefine constants without changing the file, and then improve
96 upgrade of pclzip code for new versions. 96 upgrade of pclzip code for new versions.
97 97
98 Version 2.5 : 98 Version 2.5 :
99 - Introduce the ability to add file/folder with individual properties (file descriptor). 99 - Introduce the ability to add file/folder with individual properties (file descriptor).
100 This gives for example the ability to change the filename of a zipped file. 100 This gives for example the ability to change the filename of a zipped file.
101 . Able to add files individually 101 . Able to add files individually
102 . Able to change full name 102 . Able to change full name
103 . Able to change short name 103 . Able to change short name
104 . Compatible with global options 104 . Compatible with global options
105 - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME 105 - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
106 - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE 106 - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
107 - Add a security control feature. PclZip can extract any file in any folder 107 - Add a security control feature. PclZip can extract any file in any folder
108 of a system. People may use this to upload a zip file and try to override 108 of a system. People may use this to upload a zip file and try to override
109 a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the 109 a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
110 ability to forgive any directory transversal behavior. 110 ability to forgive any directory transversal behavior.
111 - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path 111 - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
112 - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION 112 - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
113 - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend 113 - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
114 by current path (getcwd()) 114 by current path (getcwd())
115 115
116 Version 2.4 : 116 Version 2.4 :
117 - Code improvment : try to speed up the code by removing unusefull call to pack() 117 - Code improvment : try to speed up the code by removing unusefull call to pack()
118 - Correct bug in delete() : delete() should be called with no argument. This was not 118 - Correct bug in delete() : delete() should be called with no argument. This was not
119 the case in 2.3. This is corrected in 2.4. 119 the case in 2.3. This is corrected in 2.4.
120 - Correct a bug in path_inclusion function. When the path has several '../../', the 120 - Correct a bug in path_inclusion function. When the path has several '../../', the
121 result was bad. 121 result was bad.
122 - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will 122 - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will
123 disable it while working and det it back to its original value. 123 disable it while working and det it back to its original value.
124 This resolve a lots of bad formated archive errors. 124 This resolve a lots of bad formated archive errors.
125 - Bug correction : PclZip now correctly unzip file in some specific situation, 125 - Bug correction : PclZip now correctly unzip file in some specific situation,
126 when compressed content has same size as uncompressed content. 126 when compressed content has same size as uncompressed content.
127 - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH', 127 - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH',
128 directories are not any more created. 128 directories are not any more created.
129 - Code improvment : correct unclosed opendir(), better handling of . and .. in 129 - Code improvment : correct unclosed opendir(), better handling of . and .. in
130 loops. 130 loops.
131 131
132 132
133 Version 2.3 : 133 Version 2.3 :
134 - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not 134 - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
135 give the same result in PHP4 and PHP5 .... 135 give the same result in PHP4 and PHP5 ....
136 136
137 Version 2.2 : 137 Version 2.2 :
138 - Try development of PCLZIP_OPT_CRYPT ..... 138 - Try development of PCLZIP_OPT_CRYPT .....
139 However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers, 139 However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
140 the result (greater than a long) is not supported by PHP. Even the use of bcmath 140 the result (greater than a long) is not supported by PHP. Even the use of bcmath
141 functions does not help. I did not find yet a solution ...; 141 functions does not help. I did not find yet a solution ...;
142 - Add missing '/' at end of directory entries 142 - Add missing '/' at end of directory entries
143 - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or 143 - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
144 error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION. 144 error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
145 - Corrected : Bad "version need to extract" field in local file header 145 - Corrected : Bad "version need to extract" field in local file header
146 - Add private method privCheckFileHeaders() in order to check local and central 146 - Add private method privCheckFileHeaders() in order to check local and central
147 file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives 147 file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
148 the ability to have a local file header without size, compressed size and crc filled. 148 the ability to have a local file header without size, compressed size and crc filled.
149 - Add a generic status 'error' for file status 149 - Add a generic status 'error' for file status
150 - Add control of compression type. PclZip only support deflate compression method. 150 - Add control of compression type. PclZip only support deflate compression method.
151 Before v2.2, PclZip does not check the compression method used in an archive while 151 Before v2.2, PclZip does not check the compression method used in an archive while
152 extracting. With v2.2 PclZip returns a new error status for a file using an unsupported 152 extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
153 compression method. New status is "unsupported_compression". New error code is 153 compression method. New status is "unsupported_compression". New error code is
154 PCLZIP_ERR_UNSUPPORTED_COMPRESSION. 154 PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
155 - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files 155 - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
156 when errors like 'a folder with same name exists' or 'a newer file exists' or 156 when errors like 'a folder with same name exists' or 'a newer file exists' or
157 'a write protected file' exists, rather than set a status for the concerning file 157 'a write protected file' exists, rather than set a status for the concerning file
158 and resume the extract of the zip. 158 and resume the extract of the zip.
159 - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the 159 - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
160 replacement of the file, even if a newer version of the file exists. 160 replacement of the file, even if a newer version of the file exists.
161 Note that today if a file with the same name already exists but is older it will be 161 Note that today if a file with the same name already exists but is older it will be
162 replaced by the extracted one. 162 replaced by the extracted one.
163 - Improve PclZipUtilOption() 163 - Improve PclZipUtilOption()
164 - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central 164 - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
165 directory structure is the last data in the archive. Crypt encryption/decryption of 165 directory structure is the last data in the archive. Crypt encryption/decryption of
166 zip archive put trailing 0 bytes after decryption. PclZip is now supporting this. 166 zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
167 167
168 Version 2.1 : 168 Version 2.1 :
169 - Add the ability to abort the extraction by using a user callback function. 169 - Add the ability to abort the extraction by using a user callback function.
170 The user can now return the value '2' in its callback which indicates to stop the 170 The user can now return the value '2' in its callback which indicates to stop the
171 extraction. For a pre call-back extract is stopped before the extration of the current 171 extraction. For a pre call-back extract is stopped before the extration of the current
172 file. For a post call back, the extraction is stopped after. 172 file. For a post call back, the extraction is stopped after.
173 - Add the ability to extract a file (or several files) directly in the standard output. 173 - Add the ability to extract a file (or several files) directly in the standard output.
174 This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract(). 174 This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
175 - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT, 175 - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
176 PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments 176 PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
177 in the zip archive. 177 in the zip archive.
178 - When merging two archives, the comments are not any more lost, but merged, with a 178 - When merging two archives, the comments are not any more lost, but merged, with a
179 blank space separator. 179 blank space separator.
180 - Corrected bug : Files are not deleted when all files are asked to be deleted. 180 - Corrected bug : Files are not deleted when all files are asked to be deleted.
181 - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature. 181 - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
182 182
183 183
184 Version 2.0 : 184 Version 2.0 :
185 ***** Warning : Some new features may break the backward compatibility for your scripts. 185 ***** Warning : Some new features may break the backward compatibility for your scripts.
186 Please carefully read the readme file. 186 Please carefully read the readme file.
187 - Add the ability to delete by Index, name and regular expression. This feature is 187 - Add the ability to delete by Index, name and regular expression. This feature is
188 performed by the method delete(), which uses the optional parameters 188 performed by the method delete(), which uses the optional parameters
189 PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG. 189 PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
190 - Add the ability to extract by regular expression. To extract by regexp you must use the method 190 - Add the ability to extract by regular expression. To extract by regexp you must use the method
191 extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG 191 extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG
192 (depending if you want to use ereg() or preg_match() syntax) followed by the 192 (depending if you want to use ereg() or preg_match() syntax) followed by the
193 regular expression pattern. 193 regular expression pattern.
194 - Add the ability to extract by index, directly with the extract() method. This is a 194 - Add the ability to extract by index, directly with the extract() method. This is a
195 code improvment of the extractByIndex() method. 195 code improvment of the extractByIndex() method.
196 - Add the ability to extract by name. To extract by name you must use the method 196 - Add the ability to extract by name. To extract by name you must use the method
197 extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to 197 extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
198 extract or an array of filenames to extract. To extract all a folder, use the folder 198 extract or an array of filenames to extract. To extract all a folder, use the folder
199 name rather than the filename with a '/' at the end. 199 name rather than the filename with a '/' at the end.
200 - Add the ability to add files without compression. This is done with a new attribute 200 - Add the ability to add files without compression. This is done with a new attribute
201 which is PCLZIP_OPT_NO_COMPRESSION. 201 which is PCLZIP_OPT_NO_COMPRESSION.
202 - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly 202 - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
203 in a string without using any file (or temporary file). 203 in a string without using any file (or temporary file).
204 - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string. 204 - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
205 The default separator is now a comma (,) and not any more a blank space. 205 The default separator is now a comma (,) and not any more a blank space.
206 THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with 206 THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
207 your script. 207 your script.
208 - Improve algorythm performance by removing the use of temporary files when adding or 208 - Improve algorythm performance by removing the use of temporary files when adding or
209 extracting files in an archive. 209 extracting files in an archive.
210 - Add (correct) detection of empty filename zipping. This can occurs when the removed 210 - Add (correct) detection of empty filename zipping. This can occurs when the removed
211 path is the same 211 path is the same
212 as a zipped dir. The dir is not zipped (['status'] = filtered), only its content. 212 as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
213 - Add better support for windows paths (thanks for help from manus@manusfreedom.com). 213 - Add better support for windows paths (thanks for help from manus@manusfreedom.com).
214 - Corrected bug : When the archive file already exists with size=0, the add() method 214 - Corrected bug : When the archive file already exists with size=0, the add() method
215 fails. Corrected in 2.0. 215 fails. Corrected in 2.0.
216 - Remove the use of OS_WINDOWS constant. Use php_uname() function rather. 216 - Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
217 - Control the order of index ranges in extract by index feature. 217 - Control the order of index ranges in extract by index feature.
218 - Change the internal management of folders (better handling of internal flag). 218 - Change the internal management of folders (better handling of internal flag).
219 219
220 220
221 Version 1.3 : 221 Version 1.3 :
222 - Removing the double include check. This is now done by include_once() and require_once() 222 - Removing the double include check. This is now done by include_once() and require_once()
223 PHP directives. 223 PHP directives.
224 - Changing the error handling mecanism : Remove the use of an external error library. 224 - Changing the error handling mecanism : Remove the use of an external error library.
225 The former PclError...() functions are replaced by internal equivalent methods. 225 The former PclError...() functions are replaced by internal equivalent methods.
226 By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library. 226 By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
227 Introducing the use of constants for error codes rather than integer values. This will help 227 Introducing the use of constants for error codes rather than integer values. This will help
228 in futur improvment. 228 in futur improvment.
229 Introduction of error handling functions like errorCode(), errorName() and errorInfo(). 229 Introduction of error handling functions like errorCode(), errorName() and errorInfo().
230 - Remove the deprecated use of calling function with arguments passed by reference. 230 - Remove the deprecated use of calling function with arguments passed by reference.
231 - Add the calling of extract(), extractByIndex(), create() and add() functions 231 - Add the calling of extract(), extractByIndex(), create() and add() functions
232 with variable options rather than fixed arguments. 232 with variable options rather than fixed arguments.
233 - Add the ability to remove all the file path while extracting or adding, 233 - Add the ability to remove all the file path while extracting or adding,
234 without any need to specify the path to remove. 234 without any need to specify the path to remove.
235 This is available for extract(), extractByIndex(), create() and add() functionS by using 235 This is available for extract(), extractByIndex(), create() and add() functionS by using
236 the new variable options parameters : 236 the new variable options parameters :
237 - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct. 237 - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
238 - Ability to change the mode of a file after the extraction (chmod()). 238 - Ability to change the mode of a file after the extraction (chmod()).
239 This is available for extract() and extractByIndex() functionS by using 239 This is available for extract() and extractByIndex() functionS by using
240 the new variable options parameters. 240 the new variable options parameters.
241 - PCLZIP_OPT_SET_CHMOD : by setting the value of this option. 241 - PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
242 - Ability to definition call-back options. These call-back will be called during the adding, 242 - Ability to definition call-back options. These call-back will be called during the adding,
243 or the extracting of file (extract(), extractByIndex(), create() and add() functions) : 243 or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
244 - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user 244 - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
245 can trigerred the change the filename of the extracted file. The user can triggered the 245 can trigerred the change the filename of the extracted file. The user can triggered the
246 skip of the extraction. This is adding a 'skipped' status in the file list result value. 246 skip of the extraction. This is adding a 'skipped' status in the file list result value.
247 - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file. 247 - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
248 Nothing can be triggered from that point. 248 Nothing can be triggered from that point.
249 - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user 249 - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
250 can trigerred the change the stored filename of the added file. The user can triggered the 250 can trigerred the change the stored filename of the added file. The user can triggered the
251 skip of the add. This is adding a 'skipped' status in the file list result value. 251 skip of the add. This is adding a 'skipped' status in the file list result value.
252 - PCLZIP_CB_POST_ADD : will be called after each add of a file. 252 - PCLZIP_CB_POST_ADD : will be called after each add of a file.
253 Nothing can be triggered from that point. 253 Nothing can be triggered from that point.
254 - Two status are added in the file list returned as function result : skipped & filename_too_long 254 - Two status are added in the file list returned as function result : skipped & filename_too_long
255 'skipped' is used when a call-back function ask for skipping the file. 255 'skipped' is used when a call-back function ask for skipping the file.
256 'filename_too_long' is used while adding a file with a too long filename to archive (the file is 256 'filename_too_long' is used while adding a file with a too long filename to archive (the file is
257 not added) 257 not added)
258 - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into 258 - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
259 a directory. 259 a directory.
260 - Add a check of the presence of the archive file before some actions (like list, ...) 260 - Add a check of the presence of the archive file before some actions (like list, ...)
261 - Add the initialisation of field "index" in header array. This means that by 261 - Add the initialisation of field "index" in header array. This means that by
262 default index will be -1 when not explicitly set by the methods. 262 default index will be -1 when not explicitly set by the methods.
263 263
264 Version 1.2 : 264 Version 1.2 :
265 - Adding a duplicate function. 265 - Adding a duplicate function.
266 - Adding a merge function. The merge function is a "quick merge" function, 266 - Adding a merge function. The merge function is a "quick merge" function,
267 it just append the content of an archive at the end of the first one. There 267 it just append the content of an archive at the end of the first one. There
268 is no check for duplicate files or more recent files. 268 is no check for duplicate files or more recent files.
269 - Improve the search of the central directory end. 269 - Improve the search of the central directory end.
270 270
271 Version 1.1.2 : 271 Version 1.1.2 :
272 272
273 - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license 273 - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
274 (see License section). 274 (see License section).
275 - Adding the optional support of a static temporary directory. You will need to configure 275 - Adding the optional support of a static temporary directory. You will need to configure
276 the constant PCLZIP_TEMPORARY_DIR if you want to use this feature. 276 the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
277 - Improving the rename() function. In some cases rename() does not work (different 277 - Improving the rename() function. In some cases rename() does not work (different
278 Filesystems), so it will be replaced by a copy() + unlink() functions. 278 Filesystems), so it will be replaced by a copy() + unlink() functions.
279 279
280 Version 1.1.1 : 280 Version 1.1.1 :
281 281
282 - Maintenance release, no new feature. 282 - Maintenance release, no new feature.
283 283
284 Version 1.1 : 284 Version 1.1 :
285 285
286 - New method Add() : adding files in the archive 286 - New method Add() : adding files in the archive
287 - New method ExtractByIndex() : partial extract of the archive, files are identified by 287 - New method ExtractByIndex() : partial extract of the archive, files are identified by
288 their index in the archive 288 their index in the archive
289 - New method DeleteByIndex() : delete some files/folder entries from the archive, 289 - New method DeleteByIndex() : delete some files/folder entries from the archive,
290 files are identified by their index in the archive. 290 files are identified by their index in the archive.
291 - Adding a test of the zlib extension presence. If not present abort the script. 291 - Adding a test of the zlib extension presence. If not present abort the script.
292 292
293 Version 1.0.1 : 293 Version 1.0.1 :
294 294
295 - No new feature 295 - No new feature
296 296
297 297
298 3 - Corrected bugs 298 3 - Corrected bugs
299 ================== 299 ==================
300 300
301 Corrected in Version 2.0 : 301 Corrected in Version 2.0 :
302 - Corrected : During an extraction, if a call-back fucntion is used and try to skip 302 - Corrected : During an extraction, if a call-back fucntion is used and try to skip
303 a file, all the extraction process is stopped. 303 a file, all the extraction process is stopped.
304 304
305 Corrected in Version 1.3 : 305 Corrected in Version 1.3 :
306 - Corrected : Support of static synopsis for method extract() is broken. 306 - Corrected : Support of static synopsis for method extract() is broken.
307 - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF). 307 - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
308 - Corrected : When an extract is done with a remove_path parameter, the entry for 308 - Corrected : When an extract is done with a remove_path parameter, the entry for
309 the directory with exactly the same path is not skipped/filtered. 309 the directory with exactly the same path is not skipped/filtered.
310 - Corrected : extractByIndex() and deleteByIndex() were not managing index in the 310 - Corrected : extractByIndex() and deleteByIndex() were not managing index in the
311 right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This 311 right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
312 is due to a sort of the index resulting table that puts 11 before 3-5 (sort on 312 is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
313 string and not interger). The sort is temporarilly removed, this means that 313 string and not interger). The sort is temporarilly removed, this means that
314 you must provide a sorted list of index ranges. 314 you must provide a sorted list of index ranges.
315 315
316 Corrected in Version 1.2 : 316 Corrected in Version 1.2 :
317 317
318 - Nothing. 318 - Nothing.
319 319
320 Corrected in Version 1.1.2 : 320 Corrected in Version 1.1.2 :
321 321
322 - Corrected : Winzip is unable to delete or add new files in a PclZip created archives. 322 - Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
323 323
324 Corrected in Version 1.1.1 : 324 Corrected in Version 1.1.1 :
325 325
326 - Corrected : When archived file is not compressed (0% compression), the 326 - Corrected : When archived file is not compressed (0% compression), the
327 extract method fails. 327 extract method fails.
328 328
329 Corrected in Version 1.1 : 329 Corrected in Version 1.1 :
330 330
331 - Corrected : Adding a complete tree of folder may result in a bad archive 331 - Corrected : Adding a complete tree of folder may result in a bad archive
332 creation. 332 creation.
333 333
334 Corrected in Version 1.0.1 : 334 Corrected in Version 1.0.1 :
335 335
336 - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). 336 - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
337 337
338 338
339 4 - Known bugs or limitations 339 4 - Known bugs or limitations
340 ============================= 340 =============================
341 341
342 Please publish bugs reports in SourceForge : 342 Please publish bugs reports in SourceForge :
343 http://sourceforge.net/tracker/?group_id=40254&atid=427564 343 http://sourceforge.net/tracker/?group_id=40254&atid=427564
344 344
345 In Version 2.x : 345 In Version 2.x :
346 - PclZip does only support file uncompressed or compressed with deflate (compression method 8) 346 - PclZip does only support file uncompressed or compressed with deflate (compression method 8)
347 - PclZip does not support password protected zip archive 347 - PclZip does not support password protected zip archive
348 - Some concern were seen when changing mtime of a file while archiving. 348 - Some concern were seen when changing mtime of a file while archiving.
349 Seems to be linked to Daylight Saving Time (PclTest_changing_mtime). 349 Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
350 350
351 In Version 1.2 : 351 In Version 1.2 :
352 352
353 - merge() methods does not check for duplicate files or last date of modifications. 353 - merge() methods does not check for duplicate files or last date of modifications.
354 354
355 In Version 1.1 : 355 In Version 1.1 :
356 356
357 - Limitation : Using 'extract' fields in the file header in the zip archive is not supported. 357 - Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
358 - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to 358 - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
359 add a file in a PclZip created archive. (Corrected in v.1.2) 359 add a file in a PclZip created archive. (Corrected in v.1.2)
360 360
361 In Version 1.0.1 : 361 In Version 1.0.1 :
362 362
363 - Adding a complete tree of folder may result in a bad archive 363 - Adding a complete tree of folder may result in a bad archive
364 creation. (Corrected in V.1.1). 364 creation. (Corrected in V.1.1).
365 - Path given to methods must be in the unix format (/) and not the Windows format (\). 365 - Path given to methods must be in the unix format (/) and not the Windows format (\).
366 Workaround : Use only / directory separators. 366 Workaround : Use only / directory separators.
367 - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz 367 - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
368 added suffix. Files with these names may already exist and may be overwritten. 368 added suffix. Files with these names may already exist and may be overwritten.
369 Workaround : none. 369 Workaround : none.
370 - PclZip does not check if the zlib extension is present. If it is absent, the zip 370 - PclZip does not check if the zlib extension is present. If it is absent, the zip
371 file is not created and the lib abort without warning. 371 file is not created and the lib abort without warning.
372 Workaround : enable the zlib extension on the php install 372 Workaround : enable the zlib extension on the php install
373 373
374 In Version 1.0 : 374 In Version 1.0 :
375 375
376 - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). 376 - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
377 (Corrected in v.1.0.1) 377 (Corrected in v.1.0.1)
378 - Limitation : Multi-disk zip archive are not supported. 378 - Limitation : Multi-disk zip archive are not supported.
379 379
380 380
381 5 - License 381 5 - License
382 =========== 382 ===========
383 383
384 Since version 1.1.2, PclZip Library is released under GNU/LGPL license. 384 Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
385 This library is free, so you can use it at no cost. 385 This library is free, so you can use it at no cost.
386 386
387 HOWEVER, if you release a script, an application, a library or any kind of 387 HOWEVER, if you release a script, an application, a library or any kind of
388 code using PclZip library (or a part of it), YOU MUST : 388 code using PclZip library (or a part of it), YOU MUST :
389 - Indicate in the documentation (or a readme file), that your work 389 - Indicate in the documentation (or a readme file), that your work
390 uses PclZip Library, and make a reference to the author and the web site 390 uses PclZip Library, and make a reference to the author and the web site
391 http://www.phpconcept.net 391 http://www.phpconcept.net
392 - Gives the ability to the final user to update the PclZip libary. 392 - Gives the ability to the final user to update the PclZip libary.
393 393
394 I will also appreciate that you send me a mail (vincent@phpconcept.net), just to 394 I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
395 be aware that someone is using PclZip. 395 be aware that someone is using PclZip.
396 396
397 For more information about GNU/LGPL license : http://www.gnu.org 397 For more information about GNU/LGPL license : http://www.gnu.org
398 398
399 6 - Warning 399 6 - Warning
400 ================= 400 =================
401 401
402 This library and the associated files are non commercial, non professional work. 402 This library and the associated files are non commercial, non professional work.
403 It should not have unexpected results. However if any damage is caused by this software 403 It should not have unexpected results. However if any damage is caused by this software
404 the author can not be responsible. 404 the author can not be responsible.
405 The use of this software is at the risk of the user. 405 The use of this software is at the risk of the user.
406 406
407 7 - Documentation 407 7 - Documentation
408 ================= 408 =================
409 PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php 409 PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
410 A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/ 410 A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
411 411
412 8 - Author 412 8 - Author
413 ========== 413 ==========
414 414
415 This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time. 415 This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
416 416
417 9 - Contribute 417 9 - Contribute
418 ============== 418 ==============
419 If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net. 419 If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
420 If you can help in financing PhpConcept hosting service, please go to 420 If you can help in financing PhpConcept hosting service, please go to
421 http://www.phpconcept.net/soutien.php 421 http://www.phpconcept.net/soutien.php
......
1 Sentences that contain all letters commonly used in a language 1 Sentences that contain all letters commonly used in a language
2 -------------------------------------------------------------- 2 --------------------------------------------------------------
3 3
4 Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -- 2001-09-02 4 Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -- 2001-09-02
5 5
6 This file is UTF-8 encoded. 6 This file is UTF-8 encoded.
7 7
8 8
9 Danish (da) 9 Danish (da)
10 --------- 10 ---------
11 11
12 Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen 12 Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen
13 Wolther spillede på xylofon. 13 Wolther spillede på xylofon.
14 (= Quiz contestants were eating strawbery with cream while Wolther 14 (= Quiz contestants were eating strawbery with cream while Wolther
15 the circus clown played on xylophone.) 15 the circus clown played on xylophone.)
16 16
17 German (de) 17 German (de)
18 ----------- 18 -----------
19 19
20 Falsches Üben von Xylophonmusik quält jeden größeren Zwerg 20 Falsches Üben von Xylophonmusik quält jeden größeren Zwerg
21 (= Wrongful practicing of xylophone music tortures every larger dwarf) 21 (= Wrongful practicing of xylophone music tortures every larger dwarf)
22 22
23 Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich 23 Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich
24 (= Twelve boxing fighters hunted Eva across the dike of Sylt) 24 (= Twelve boxing fighters hunted Eva across the dike of Sylt)
25 25
26 Heizölrückstoßabdämpfung 26 Heizölrückstoßabdämpfung
27 (= fuel oil recoil absorber) 27 (= fuel oil recoil absorber)
28 (jqvwxy missing, but all non-ASCII letters in one word) 28 (jqvwxy missing, but all non-ASCII letters in one word)
29 29
30 English (en) 30 English (en)
31 ------------ 31 ------------
32 32
33 The quick brown fox jumps over the lazy dog 33 The quick brown fox jumps over the lazy dog
34 34
35 Spanish (es) 35 Spanish (es)
36 ------------ 36 ------------
37 37
38 El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y 38 El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y
39 frío, añoraba a su querido cachorro. 39 frío, añoraba a su querido cachorro.
40 (Contains every letter and every accent, but not every combination 40 (Contains every letter and every accent, but not every combination
41 of vowel + acute.) 41 of vowel + acute.)
42 42
43 French (fr) 43 French (fr)
44 ----------- 44 -----------
45 45
46 Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à 46 Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à
47 côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce 47 côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce
48 qui lui permet de penser à la cænogenèse de l'être dont il est question 48 qui lui permet de penser à la cænogenèse de l'être dont il est question
49 dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, 49 dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui,
50 pense-t-il, diminue çà et là la qualité de son œuvre. 50 pense-t-il, diminue çà et là la qualité de son œuvre.
51 51
52 l'île exiguë 52 l'île exiguë
53 Où l'obèse jury mûr 53 Où l'obèse jury mûr
54 Fête l'haï volapük, 54 Fête l'haï volapük,
55 Âne ex aéquo au whist, 55 Âne ex aéquo au whist,
56 Ôtez ce vœu déçu. 56 Ôtez ce vœu déçu.
57 57
58 Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en 58 Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en
59 canoë au delà des îles, près du mälström où brûlent les novæ. 59 canoë au delà des îles, près du mälström où brûlent les novæ.
60 60
61 Irish Gaelic (ga) 61 Irish Gaelic (ga)
62 ----------------- 62 -----------------
63 63
64 D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh 64 D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh
65 65
66 Hungarian (hu) 66 Hungarian (hu)
67 -------------- 67 --------------
68 68
69 Árvíztűrő tükörfúrógép 69 Árvíztűrő tükörfúrógép
70 (= flood-proof mirror-drilling machine, only all non-ASCII letters) 70 (= flood-proof mirror-drilling machine, only all non-ASCII letters)
71 71
72 Icelandic (is) 72 Icelandic (is)
73 -------------- 73 --------------
74 74
75 Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa 75 Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa
76 76
77 Sævör grét áðan því úlpan var ónýt 77 Sævör grét áðan því úlpan var ónýt
78 (some ASCII letters missing) 78 (some ASCII letters missing)
79 79
80 Greek (el) 80 Greek (el)
81 ------------- 81 -------------
82 82
83 Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο 83 Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο
84 (= No more shall I see acacias or myrtles in the golden clearing) 84 (= No more shall I see acacias or myrtles in the golden clearing)
85 85
86 Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία 86 Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία
87 (= I uncover the soul-destroying abhorrence) 87 (= I uncover the soul-destroying abhorrence)
88 88
89 Hebrew (iw) 89 Hebrew (iw)
90 ----------- 90 -----------
91 91
92 ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה 92 ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה
93 93
94 Polish (pl) 94 Polish (pl)
95 ----------- 95 -----------
96 96
97 Pchnąć w tę łódź jeża lub osiem skrzyń fig 97 Pchnąć w tę łódź jeża lub osiem skrzyń fig
98 (= To push a hedgehog or eight bins of figs in this boat) 98 (= To push a hedgehog or eight bins of figs in this boat)
99 99
100 Zażółć gęślą jaźń 100 Zażółć gęślą jaźń
101 101
102 Russian (ru) 102 Russian (ru)
103 ------------ 103 ------------
104 104
105 В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! 105 В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!
106 (= Would a citrus live in the bushes of south? Yes, but only a fake one!) 106 (= Would a citrus live in the bushes of south? Yes, but only a fake one!)
107 107
108 Thai (th) 108 Thai (th)
109 --------- 109 ---------
110 110
111 [--------------------------|------------------------] 111 [--------------------------|------------------------]
112 ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน 112 ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
113 จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร 113 จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
114 ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย 114 ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
115 ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ 115 ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ
116 116
117 [The copyright for the Thai example is owned by The Computer 117 [The copyright for the Thai example is owned by The Computer
118 Association of Thailand under the Royal Patronage of His Majesty the 118 Association of Thailand under the Royal Patronage of His Majesty the
119 King.] 119 King.]
120 120
121 Please let me know if you find others! Special thanks to the people 121 Please let me know if you find others! Special thanks to the people
122 from all over the world who contributed these sentences. 122 from all over the world who contributed these sentences.
......
1 <?php 1 <?php
2 $type='TrueTypeUnicode'; 2 $type='TrueTypeUnicode';
3 $name='AlMohanad'; 3 $name='AlMohanad';
4 $desc=array('Ascent'=>1093,'Descent'=>-509,'CapHeight'=>1093,'Flags'=>32,'FontBBox'=>'[-278 -507 1124 1093]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); 4 $desc=array('Ascent'=>1093,'Descent'=>-509,'CapHeight'=>1093,'Flags'=>32,'FontBBox'=>'[-278 -507 1124 1093]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
5 $up=-136; 5 $up=-136;
6 $ut=64; 6 $ut=64;
7 $dw=600; 7 $dw=600;
8 $cw=array( 8 $cw=array(
9 0=>0,32=>139,33=>185,34=>308,35=>278,36=>278,37=>556,38=>463,39=>154,40=>185,41=>185,42=>278,43=>317,44=>139,45=>185,46=>139, 9 0=>0,32=>139,33=>185,34=>308,35=>278,36=>278,37=>556,38=>463,39=>154,40=>185,41=>185,42=>278,43=>317,44=>139,45=>185,46=>139,
10 47=>154,48=>278,49=>278,50=>278,51=>278,52=>278,53=>278,54=>278,55=>278,56=>278,57=>278,58=>185,59=>185,60=>317,61=>317,62=>317, 10 47=>154,48=>278,49=>278,50=>278,51=>278,52=>278,53=>278,54=>278,55=>278,56=>278,57=>278,58=>185,59=>185,60=>317,61=>317,62=>317,
11 63=>278,64=>517,65=>401,66=>371,67=>401,68=>402,69=>371,70=>339,71=>432,72=>430,73=>214,74=>278,75=>424,76=>369,77=>524,78=>401, 11 63=>278,64=>517,65=>401,66=>371,67=>401,68=>402,69=>371,70=>339,71=>432,72=>430,73=>214,74=>278,75=>424,76=>369,77=>524,78=>401,
12 79=>432,80=>339,81=>432,82=>396,83=>309,84=>371,85=>401,86=>401,87=>556,88=>401,89=>401,90=>371,91=>185,92=>154,93=>185,94=>323, 12 79=>432,80=>339,81=>432,82=>396,83=>309,84=>371,85=>401,86=>401,87=>556,88=>401,89=>401,90=>371,91=>185,92=>154,93=>185,94=>323,
13 95=>278,96=>185,97=>278,98=>309,99=>247,100=>309,101=>247,102=>185,103=>278,104=>309,105=>154,106=>185,107=>309,108=>154,109=>463,110=>309, 13 95=>278,96=>185,97=>278,98=>309,99=>247,100=>309,101=>247,102=>185,103=>278,104=>309,105=>154,106=>185,107=>309,108=>154,109=>463,110=>309,
14 111=>278,112=>309,113=>309,114=>247,115=>216,116=>185,117=>309,118=>278,119=>401,120=>278,121=>278,122=>247,123=>219,124=>122,125=>219,126=>289, 14 111=>278,112=>309,113=>309,114=>247,115=>216,116=>185,117=>309,118=>278,119=>401,120=>278,121=>278,122=>247,123=>219,124=>122,125=>219,126=>289,
15 8364=>278,1027=>339,8218=>185,1107=>254,8222=>278,8230=>556,8224=>278,8225=>278,710=>185,8240=>556,352=>309,8249=>185,338=>556,1036=>432,381=>371,1039=>432, 15 8364=>278,1027=>339,8218=>185,1107=>254,8222=>278,8230=>556,8224=>278,8225=>278,710=>185,8240=>556,352=>309,8249=>185,338=>556,1036=>432,381=>371,1039=>432,
16 8216=>185,8217=>185,8220=>278,8221=>278,8226=>194,8211=>278,8212=>556,732=>185,8482=>556,353=>216,8250=>185,339=>401,1116=>297,382=>247,376=>401,161=>185, 16 8216=>185,8217=>185,8220=>278,8221=>278,8226=>194,8211=>278,8212=>556,732=>185,8482=>556,353=>216,8250=>185,339=>401,1116=>297,382=>247,376=>401,161=>185,
17 162=>278,163=>278,164=>278,165=>278,166=>122,167=>278,168=>185,169=>415,170=>167,171=>278,172=>317,174=>415,175=>185,176=>222,177=>317,178=>167, 17 162=>278,163=>278,164=>278,165=>278,166=>122,167=>278,168=>185,169=>415,170=>167,171=>278,172=>317,174=>415,175=>185,176=>222,177=>317,178=>167,
18 179=>167,180=>185,181=>309,182=>300,183=>139,184=>185,185=>167,186=>183,187=>278,188=>417,189=>417,190=>417,191=>278,192=>401,193=>401,194=>401, 18 179=>167,180=>185,181=>309,182=>300,183=>139,184=>185,185=>167,186=>183,187=>278,188=>417,189=>417,190=>417,191=>278,192=>401,193=>401,194=>401,
19 195=>401,196=>401,197=>401,198=>556,199=>401,200=>371,201=>371,202=>371,203=>371,204=>216,205=>216,206=>216,207=>216,208=>401,209=>401,210=>432, 19 195=>401,196=>401,197=>401,198=>556,199=>401,200=>371,201=>371,202=>371,203=>371,204=>216,205=>216,206=>216,207=>216,208=>401,209=>401,210=>432,
20 211=>432,212=>432,213=>432,214=>432,215=>317,216=>432,217=>401,218=>401,219=>401,220=>401,221=>401,222=>339,223=>309,224=>278,225=>278,226=>278, 20 211=>432,212=>432,213=>432,214=>432,215=>317,216=>432,217=>401,218=>401,219=>401,220=>401,221=>401,222=>339,223=>309,224=>278,225=>278,226=>278,
21 227=>278,228=>278,229=>278,230=>401,231=>247,232=>247,233=>247,234=>247,235=>247,236=>154,237=>154,238=>154,239=>154,240=>278,241=>309,242=>278, 21 227=>278,228=>278,229=>278,230=>401,231=>247,232=>247,233=>247,234=>247,235=>247,236=>154,237=>154,238=>154,239=>154,240=>278,241=>309,242=>278,
22 243=>278,244=>278,245=>278,246=>278,247=>317,248=>278,249=>309,250=>309,251=>309,252=>309,253=>278,254=>309,255=>278,256=>401,257=>278,258=>401, 22 243=>278,244=>278,245=>278,246=>278,247=>317,248=>278,249=>309,250=>309,251=>309,252=>309,253=>278,254=>309,255=>278,256=>401,257=>278,258=>401,
23 259=>278,260=>401,261=>278,262=>401,263=>247,264=>401,265=>247,266=>401,267=>247,268=>401,269=>247,270=>401,271=>309,272=>401,273=>309,274=>371, 23 259=>278,260=>401,261=>278,262=>401,263=>247,264=>401,265=>247,266=>401,267=>247,268=>401,269=>247,270=>401,271=>309,272=>401,273=>309,274=>371,
24 275=>247,276=>371,277=>247,278=>371,279=>247,280=>371,281=>247,282=>371,283=>247,284=>432,285=>278,286=>432,287=>278,288=>432,289=>278,290=>432, 24 275=>247,276=>371,277=>247,278=>371,279=>247,280=>371,281=>247,282=>371,283=>247,284=>432,285=>278,286=>432,287=>278,288=>432,289=>278,290=>432,
25 291=>278,292=>432,293=>309,294=>432,295=>309,296=>216,297=>154,298=>216,299=>154,300=>216,301=>154,302=>216,303=>154,304=>216,305=>154,306=>490, 25 291=>278,292=>432,293=>309,294=>432,295=>309,296=>216,297=>154,298=>216,299=>154,300=>216,301=>154,302=>216,303=>154,304=>216,305=>154,306=>490,
26 307=>270,308=>278,309=>185,310=>432,311=>309,312=>297,313=>371,314=>154,315=>371,316=>154,317=>371,318=>154,319=>371,320=>293,321=>371,322=>154, 26 307=>270,308=>278,309=>185,310=>432,311=>309,312=>297,313=>371,314=>154,315=>371,316=>154,317=>371,318=>154,319=>371,320=>293,321=>371,322=>154,
27 323=>401,324=>309,325=>401,326=>309,327=>401,328=>309,329=>391,330=>401,331=>309,332=>432,333=>278,334=>432,335=>278,336=>432,337=>278,340=>401, 27 323=>401,324=>309,325=>401,326=>309,327=>401,328=>309,329=>391,330=>401,331=>309,332=>432,333=>278,334=>432,335=>278,336=>432,337=>278,340=>401,
28 341=>247,342=>401,343=>247,344=>401,345=>247,346=>309,347=>216,348=>309,349=>216,350=>309,351=>216,354=>371,355=>185,356=>371,357=>185,358=>371, 28 341=>247,342=>401,343=>247,344=>401,345=>247,346=>309,347=>216,348=>309,349=>216,350=>309,351=>216,354=>371,355=>185,356=>371,357=>185,358=>371,
29 359=>185,360=>401,361=>309,362=>401,363=>309,364=>401,365=>309,366=>401,367=>309,368=>401,369=>309,370=>401,371=>309,372=>556,373=>401,374=>401, 29 359=>185,360=>401,361=>309,362=>401,363=>309,364=>401,365=>309,366=>401,367=>309,368=>401,369=>309,370=>401,371=>309,372=>556,373=>401,374=>401,
30 375=>278,377=>371,378=>247,379=>371,380=>247,383=>185,450=>317,477=>247,484=>432,485=>278,536=>309,537=>216,538=>371,539=>185,658=>282,711=>185, 30 375=>278,377=>371,378=>247,379=>371,380=>247,383=>185,450=>317,477=>247,484=>432,485=>278,536=>309,537=>216,538=>371,539=>185,658=>282,711=>185,
31 728=>185,729=>185,730=>185,731=>185,733=>185,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, 31 728=>185,729=>185,730=>185,731=>185,733=>185,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,
32 779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0, 32 779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,
33 795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0, 33 795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,
34 811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, 34 811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,
35 827=>0,828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>111,885=>111,890=>0,894=>185,900=>100,901=>183,902=>401,903=>139,904=>451, 35 827=>0,828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>111,885=>111,890=>0,894=>185,900=>100,901=>183,902=>401,903=>139,904=>451,
36 905=>532,906=>316,908=>451,910=>501,911=>451,912=>183,913=>401,914=>371,915=>339,916=>422,917=>371,918=>371,919=>432,920=>432,921=>216,922=>432, 36 905=>532,906=>316,908=>451,910=>501,911=>451,912=>183,913=>401,914=>371,915=>339,916=>422,917=>371,918=>371,919=>432,920=>432,921=>216,922=>432,
37 923=>401,924=>524,925=>401,926=>361,927=>432,928=>451,929=>339,931=>361,932=>371,933=>401,934=>482,935=>401,936=>482,937=>451,938=>0,939=>401, 37 923=>401,924=>524,925=>401,926=>361,927=>432,928=>451,929=>339,931=>361,932=>371,933=>401,934=>482,935=>401,936=>482,937=>451,938=>0,939=>401,
38 940=>336,941=>244,942=>336,943=>183,944=>306,945=>336,946=>306,947=>306,948=>306,949=>244,950=>275,951=>336,952=>306,953=>183,954=>338,955=>275, 38 940=>336,941=>244,942=>336,943=>183,944=>306,945=>336,946=>306,947=>306,948=>306,949=>244,950=>275,951=>336,952=>306,953=>183,954=>338,955=>275,
39 956=>336,957=>275,958=>275,959=>306,960=>336,961=>306,962=>244,963=>306,964=>244,965=>306,966=>367,967=>275,968=>397,969=>397,970=>183,971=>306, 39 956=>336,957=>275,958=>275,959=>306,960=>336,961=>306,962=>244,963=>306,964=>244,965=>306,966=>367,967=>275,968=>397,969=>397,970=>183,971=>306,
40 972=>306,973=>306,974=>397,976=>306,977=>306,978=>401,979=>401,980=>401,981=>367,982=>336,986=>283,987=>237,988=>339,989=>261,1024=>371,1025=>371, 40 972=>306,973=>306,974=>397,976=>306,977=>306,978=>401,979=>401,980=>401,981=>367,982=>336,986=>283,987=>237,988=>339,989=>261,1024=>371,1025=>371,
41 1026=>371,1028=>401,1029=>309,1030=>216,1031=>216,1032=>278,1033=>573,1034=>573,1035=>449,1037=>432,1038=>401,1040=>401,1041=>371,1042=>371,1043=>328,1044=>432, 41 1026=>371,1028=>401,1029=>309,1030=>216,1031=>216,1032=>278,1033=>573,1034=>573,1035=>449,1037=>432,1038=>401,1040=>401,1041=>371,1042=>371,1043=>328,1044=>432,
42 1045=>371,1046=>615,1047=>313,1048=>429,1049=>429,1050=>424,1051=>432,1052=>524,1053=>432,1054=>432,1055=>430,1056=>339,1057=>401,1058=>371,1059=>401,1060=>444, 42 1045=>371,1046=>615,1047=>313,1048=>429,1049=>429,1050=>424,1051=>432,1052=>524,1053=>432,1054=>432,1055=>430,1056=>339,1057=>401,1058=>371,1059=>401,1060=>444,
43 1061=>401,1062=>429,1063=>432,1064=>618,1065=>618,1066=>482,1067=>539,1068=>350,1069=>401,1070=>619,1071=>408,1072=>278,1073=>278,1074=>279,1075=>246,1076=>309, 43 1061=>401,1062=>429,1063=>432,1064=>618,1065=>618,1066=>482,1067=>539,1068=>350,1069=>401,1070=>619,1071=>408,1072=>278,1073=>278,1074=>279,1075=>246,1076=>309,
44 1077=>247,1078=>417,1079=>227,1080=>319,1081=>319,1082=>297,1083=>302,1084=>376,1085=>309,1086=>278,1087=>309,1088=>309,1089=>247,1090=>274,1091=>278,1092=>458, 44 1077=>247,1078=>417,1079=>227,1080=>319,1081=>319,1082=>297,1083=>302,1084=>376,1085=>309,1086=>278,1087=>309,1088=>309,1089=>247,1090=>274,1091=>278,1092=>458,
45 1093=>278,1094=>309,1095=>309,1096=>454,1097=>454,1098=>340,1099=>423,1100=>284,1101=>247,1102=>439,1103=>284,1104=>247,1105=>247,1106=>309,1108=>247,1109=>216, 45 1093=>278,1094=>309,1095=>309,1096=>454,1097=>454,1098=>340,1099=>423,1100=>284,1101=>247,1102=>439,1103=>284,1104=>247,1105=>247,1106=>309,1108=>247,1109=>216,
46 1110=>154,1111=>154,1112=>185,1113=>440,1114=>437,1115=>309,1117=>309,1118=>278,1119=>309,1164=>339,1165=>284,1166=>339,1167=>309,1168=>339,1169=>254,1170=>339, 46 1110=>154,1111=>154,1112=>185,1113=>440,1114=>437,1115=>309,1117=>309,1118=>278,1119=>309,1164=>339,1165=>284,1166=>339,1167=>309,1168=>339,1169=>254,1170=>339,
47 1171=>254,1172=>339,1173=>254,1174=>615,1175=>417,1176=>322,1177=>216,1178=>432,1179=>297,1180=>432,1181=>297,1182=>432,1183=>297,1184=>537,1185=>352,1186=>432, 47 1171=>254,1172=>339,1173=>254,1174=>615,1175=>417,1176=>322,1177=>216,1178=>432,1179=>297,1180=>432,1181=>297,1182=>432,1183=>297,1184=>537,1185=>352,1186=>432,
48 1187=>309,1188=>563,1189=>408,1190=>432,1191=>461,1192=>401,1193=>247,1194=>401,1195=>247,1196=>371,1197=>274,1198=>401,1199=>278,1200=>401,1201=>278,1202=>401, 48 1187=>309,1188=>563,1189=>408,1190=>432,1191=>461,1192=>401,1193=>247,1194=>401,1195=>247,1196=>371,1197=>274,1198=>401,1199=>278,1200=>401,1201=>278,1202=>401,
49 1203=>278,1204=>581,1205=>432,1206=>432,1207=>309,1208=>432,1209=>309,1210=>432,1211=>309,1212=>367,1213=>247,1214=>367,1215=>247,1216=>216,1217=>615,1218=>417, 49 1203=>278,1204=>581,1205=>432,1206=>432,1207=>309,1208=>432,1209=>309,1210=>432,1211=>309,1212=>367,1213=>247,1214=>367,1215=>247,1216=>216,1217=>615,1218=>417,
50 1219=>432,1220=>297,1223=>432,1224=>309,1227=>432,1228=>309,1232=>401,1233=>278,1234=>401,1235=>278,1236=>556,1237=>401,1238=>371,1239=>247,1240=>367,1241=>247, 50 1219=>432,1220=>297,1223=>432,1224=>309,1227=>432,1228=>309,1232=>401,1233=>278,1234=>401,1235=>278,1236=>556,1237=>401,1238=>371,1239=>247,1240=>367,1241=>247,
51 1242=>367,1243=>247,1244=>615,1245=>417,1246=>313,1247=>227,1248=>322,1249=>216,1250=>432,1251=>309,1252=>432,1253=>309,1254=>432,1255=>278,1256=>432,1257=>278, 51 1242=>367,1243=>247,1244=>615,1245=>417,1246=>313,1247=>227,1248=>322,1249=>216,1250=>432,1251=>309,1252=>432,1253=>309,1254=>432,1255=>278,1256=>432,1257=>278,
52 1258=>432,1259=>278,1260=>401,1261=>247,1262=>401,1263=>278,1264=>401,1265=>278,1266=>401,1267=>278,1268=>432,1269=>309,1272=>548,1273=>423,1488=>280,1489=>280, 52 1258=>432,1259=>278,1260=>401,1261=>247,1262=>401,1263=>278,1264=>401,1265=>278,1266=>401,1267=>278,1268=>432,1269=>309,1272=>548,1273=>423,1488=>280,1489=>280,
53 1490=>174,1491=>280,1492=>280,1493=>158,1494=>158,1495=>280,1496=>280,1497=>158,1498=>287,1499=>280,1500=>280,1501=>280,1502=>280,1503=>156,1504=>158,1505=>280, 53 1490=>174,1491=>280,1492=>280,1493=>158,1494=>158,1495=>280,1496=>280,1497=>158,1498=>287,1499=>280,1500=>280,1501=>280,1502=>280,1503=>156,1504=>158,1505=>280,
54 1506=>280,1507=>292,1508=>280,1509=>273,1510=>280,1511=>305,1512=>285,1513=>299,1514=>280,1548=>195,1563=>246,1567=>340,1569=>392,1570=>306,1571=>247,1572=>447, 54 1506=>280,1507=>292,1508=>280,1509=>273,1510=>280,1511=>305,1512=>285,1513=>299,1514=>280,1548=>195,1563=>246,1567=>340,1569=>392,1570=>306,1571=>247,1572=>447,
55 1573=>247,1574=>602,1575=>192,1576=>635,1577=>369,1578=>635,1579=>635,1580=>548,1581=>1173,1582=>548,1583=>363,1584=>363,1585=>439,1586=>442,1587=>875,1588=>875, 55 1573=>247,1574=>602,1575=>192,1576=>635,1577=>369,1578=>635,1579=>635,1580=>548,1581=>1173,1582=>548,1583=>363,1584=>363,1585=>439,1586=>442,1587=>875,1588=>875,
56 1589=>1061,1590=>1061,1591=>811,1592=>811,1593=>549,1594=>547,1600=>389,1601=>755,1602=>574,1603=>717,1604=>555,1605=>423,1606=>532,1607=>371,1608=>454,1609=>633, 56 1589=>1061,1590=>1061,1591=>811,1592=>811,1593=>549,1594=>547,1600=>389,1601=>755,1602=>574,1603=>717,1604=>555,1605=>423,1606=>532,1607=>371,1608=>454,1609=>633,
57 1610=>643,1611=>-19,1612=>-26,1613=>-20,1614=>-19,1615=>-18,1616=>-19,1617=>-19,1618=>-15,1632=>383,1633=>383,1634=>383,1635=>383,1636=>383,1637=>383,1638=>383, 57 1610=>643,1611=>-19,1612=>-26,1613=>-20,1614=>-19,1615=>-18,1616=>-19,1617=>-19,1618=>-15,1632=>383,1633=>383,1634=>383,1635=>383,1636=>383,1637=>383,1638=>383,
58 1639=>383,1640=>383,1641=>383,1642=>383,1645=>398,7936=>336,7937=>336,7938=>336,7939=>336,7940=>336,7941=>336,7942=>336,7943=>336,7944=>401,7945=>401,7946=>401, 58 1639=>383,1640=>383,1641=>383,1642=>383,1645=>398,7936=>336,7937=>336,7938=>336,7939=>336,7940=>336,7941=>336,7942=>336,7943=>336,7944=>401,7945=>401,7946=>401,
59 7947=>401,7948=>401,7949=>401,7950=>401,7951=>401,7952=>244,7953=>244,7954=>244,7955=>244,7956=>244,7957=>244,7960=>371,7961=>371,7962=>371,7963=>371,7964=>371, 59 7947=>401,7948=>401,7949=>401,7950=>401,7951=>401,7952=>244,7953=>244,7954=>244,7955=>244,7956=>244,7957=>244,7960=>371,7961=>371,7962=>371,7963=>371,7964=>371,
60 7965=>371,7968=>336,7969=>336,7970=>336,7971=>336,7972=>336,7973=>336,7974=>336,7975=>336,7976=>432,7977=>432,7978=>432,7979=>432,7980=>432,7981=>432,7982=>432, 60 7965=>371,7968=>336,7969=>336,7970=>336,7971=>336,7972=>336,7973=>336,7974=>336,7975=>336,7976=>432,7977=>432,7978=>432,7979=>432,7980=>432,7981=>432,7982=>432,
61 7983=>432,7984=>183,7985=>183,7986=>183,7987=>183,7988=>183,7989=>183,7990=>183,7991=>183,7992=>216,7993=>216,7994=>216,7995=>216,7996=>216,7997=>216,7998=>216, 61 7983=>432,7984=>183,7985=>183,7986=>183,7987=>183,7988=>183,7989=>183,7990=>183,7991=>183,7992=>216,7993=>216,7994=>216,7995=>216,7996=>216,7997=>216,7998=>216,
62 7999=>216,8000=>306,8001=>306,8002=>306,8003=>306,8004=>306,8005=>306,8008=>432,8009=>432,8010=>432,8011=>432,8012=>432,8013=>432,8016=>306,8017=>306,8018=>306, 62 7999=>216,8000=>306,8001=>306,8002=>306,8003=>306,8004=>306,8005=>306,8008=>432,8009=>432,8010=>432,8011=>432,8012=>432,8013=>432,8016=>306,8017=>306,8018=>306,
63 8019=>306,8020=>306,8021=>306,8022=>306,8023=>306,8025=>401,8027=>401,8029=>401,8031=>401,8032=>397,8033=>397,8034=>397,8035=>397,8036=>397,8037=>397,8038=>397, 63 8019=>306,8020=>306,8021=>306,8022=>306,8023=>306,8025=>401,8027=>401,8029=>401,8031=>401,8032=>397,8033=>397,8034=>397,8035=>397,8036=>397,8037=>397,8038=>397,
64 8039=>397,8040=>451,8041=>451,8042=>451,8043=>451,8044=>451,8045=>451,8046=>451,8047=>451,8048=>336,8049=>336,8050=>244,8051=>244,8052=>336,8053=>336,8054=>183, 64 8039=>397,8040=>451,8041=>451,8042=>451,8043=>451,8044=>451,8045=>451,8046=>451,8047=>451,8048=>336,8049=>336,8050=>244,8051=>244,8052=>336,8053=>336,8054=>183,
65 8055=>183,8056=>306,8057=>306,8058=>306,8059=>306,8060=>397,8061=>397,8064=>336,8065=>336,8066=>336,8067=>336,8068=>336,8069=>336,8070=>336,8071=>336,8072=>401, 65 8055=>183,8056=>306,8057=>306,8058=>306,8059=>306,8060=>397,8061=>397,8064=>336,8065=>336,8066=>336,8067=>336,8068=>336,8069=>336,8070=>336,8071=>336,8072=>401,
66 8073=>401,8074=>401,8075=>401,8076=>401,8077=>401,8078=>401,8079=>401,8080=>336,8081=>336,8082=>336,8083=>336,8084=>336,8085=>336,8086=>336,8087=>336,8088=>432, 66 8073=>401,8074=>401,8075=>401,8076=>401,8077=>401,8078=>401,8079=>401,8080=>336,8081=>336,8082=>336,8083=>336,8084=>336,8085=>336,8086=>336,8087=>336,8088=>432,
67 8089=>432,8090=>432,8091=>432,8092=>432,8093=>432,8094=>432,8095=>432,8096=>397,8097=>397,8098=>397,8099=>397,8100=>397,8101=>397,8102=>397,8103=>397,8104=>451, 67 8089=>432,8090=>432,8091=>432,8092=>432,8093=>432,8094=>432,8095=>432,8096=>397,8097=>397,8098=>397,8099=>397,8100=>397,8101=>397,8102=>397,8103=>397,8104=>451,
68 8105=>451,8106=>451,8107=>451,8108=>451,8109=>451,8110=>451,8111=>451,8112=>336,8113=>336,8114=>336,8115=>336,8116=>336,8118=>336,8119=>336,8120=>401,8121=>401, 68 8105=>451,8106=>451,8107=>451,8108=>451,8109=>451,8110=>451,8111=>451,8112=>336,8113=>336,8114=>336,8115=>336,8116=>336,8118=>336,8119=>336,8120=>401,8121=>401,
69 8122=>401,8123=>401,8124=>401,8125=>278,8126=>0,8127=>278,8128=>278,8129=>306,8130=>336,8131=>336,8132=>336,8134=>336,8135=>336,8136=>371,8137=>371,8138=>432, 69 8122=>401,8123=>401,8124=>401,8125=>278,8126=>0,8127=>278,8128=>278,8129=>306,8130=>336,8131=>336,8132=>336,8134=>336,8135=>336,8136=>371,8137=>371,8138=>432,
70 8139=>432,8140=>432,8141=>278,8142=>278,8143=>278,8144=>183,8145=>183,8146=>183,8147=>183,8150=>183,8151=>183,8152=>216,8153=>216,8154=>216,8155=>216,8157=>278, 70 8139=>432,8140=>432,8141=>278,8142=>278,8143=>278,8144=>183,8145=>183,8146=>183,8147=>183,8150=>183,8151=>183,8152=>216,8153=>216,8154=>216,8155=>216,8157=>278,
71 8158=>278,8159=>278,8160=>306,8161=>306,8162=>306,8163=>306,8164=>306,8165=>306,8166=>306,8167=>306,8168=>401,8169=>401,8170=>401,8171=>401,8172=>339,8173=>306, 71 8158=>278,8159=>278,8160=>306,8161=>306,8162=>306,8163=>306,8164=>306,8165=>306,8166=>306,8167=>306,8168=>401,8169=>401,8170=>401,8171=>401,8172=>339,8173=>306,
72 8174=>306,8175=>278,8178=>397,8179=>397,8180=>397,8182=>397,8183=>397,8184=>432,8185=>432,8186=>451,8187=>451,8188=>451,8189=>278,8190=>278,8208=>185,8209=>185, 72 8174=>306,8175=>278,8178=>397,8179=>397,8180=>397,8182=>397,8183=>397,8184=>432,8185=>432,8186=>451,8187=>451,8188=>451,8189=>278,8190=>278,8208=>185,8209=>185,
73 8219=>185,8223=>278,8227=>311,8241=>1011,8248=>261,8251=>404,8253=>386,8255=>529,8256=>529,8257=>188,8258=>517,8259=>185,8260=>93,8261=>184,8262=>184,8267=>300, 73 8219=>185,8223=>278,8227=>311,8241=>1011,8248=>261,8251=>404,8253=>386,8255=>529,8256=>529,8257=>188,8258=>517,8259=>185,8260=>93,8261=>184,8262=>184,8267=>300,
74 8308=>167,8309=>556,8321=>167,8322=>167,8323=>167,8324=>167,8352=>394,8353=>401,8354=>435,8355=>339,8356=>278,8357=>463,8358=>401,8359=>389,8361=>556,8470=>530, 74 8308=>167,8309=>556,8321=>167,8322=>167,8323=>167,8324=>167,8352=>394,8353=>401,8354=>435,8355=>339,8356=>278,8357=>463,8358=>401,8359=>389,8361=>556,8470=>530,
75 8471=>415,8479=>401,8483=>401,8486=>451,8487=>451,8494=>306,8498=>339,8543=>417,8706=>274,8710=>340,8721=>396,8722=>317,8730=>305,8734=>418,8800=>317,8804=>317, 75 8471=>415,8479=>401,8483=>401,8486=>451,8487=>451,8494=>306,8498=>339,8543=>417,8706=>274,8710=>340,8721=>396,8722=>317,8730=>305,8734=>418,8800=>317,8804=>317,
76 8805=>317,9674=>274,12353=>556,12354=>556,12355=>556,12356=>556,12357=>556,12358=>556,12359=>556,12360=>556,12361=>556,12362=>556,12363=>556,12364=>556,12365=>556,12366=>556, 76 8805=>317,9674=>274,12353=>556,12354=>556,12355=>556,12356=>556,12357=>556,12358=>556,12359=>556,12360=>556,12361=>556,12362=>556,12363=>556,12364=>556,12365=>556,12366=>556,
77 12367=>556,12368=>556,12369=>556,12370=>556,12371=>556,12372=>556,12373=>556,12374=>556,12375=>556,12376=>556,12377=>556,12378=>556,12379=>556,12380=>556,12381=>556,12382=>556, 77 12367=>556,12368=>556,12369=>556,12370=>556,12371=>556,12372=>556,12373=>556,12374=>556,12375=>556,12376=>556,12377=>556,12378=>556,12379=>556,12380=>556,12381=>556,12382=>556,
78 12383=>556,12384=>556,12385=>556,12386=>556,12387=>556,12388=>556,12389=>556,12390=>556,12391=>556,12392=>556,12393=>556,12394=>556,12395=>556,12396=>556,12397=>556,12398=>556, 78 12383=>556,12384=>556,12385=>556,12386=>556,12387=>556,12388=>556,12389=>556,12390=>556,12391=>556,12392=>556,12393=>556,12394=>556,12395=>556,12396=>556,12397=>556,12398=>556,
79 12399=>556,12400=>556,12401=>556,12402=>556,12403=>556,12404=>556,12405=>556,12406=>556,12407=>556,12408=>556,12409=>556,12410=>556,12411=>556,12412=>556,12413=>556,12414=>556, 79 12399=>556,12400=>556,12401=>556,12402=>556,12403=>556,12404=>556,12405=>556,12406=>556,12407=>556,12408=>556,12409=>556,12410=>556,12411=>556,12412=>556,12413=>556,12414=>556,
80 12415=>556,12416=>556,12417=>556,12418=>556,12419=>556,12420=>556,12421=>556,12422=>556,12423=>556,12424=>556,12425=>556,12426=>556,12427=>556,12428=>556,12429=>556,12430=>556, 80 12415=>556,12416=>556,12417=>556,12418=>556,12419=>556,12420=>556,12421=>556,12422=>556,12423=>556,12424=>556,12425=>556,12426=>556,12427=>556,12428=>556,12429=>556,12430=>556,
81 12431=>556,12432=>556,12433=>556,12434=>556,12435=>556,12449=>556,12450=>556,12451=>556,12452=>556,12453=>556,12454=>556,12455=>556,12456=>556,12457=>556,12458=>556,12459=>556, 81 12431=>556,12432=>556,12433=>556,12434=>556,12435=>556,12449=>556,12450=>556,12451=>556,12452=>556,12453=>556,12454=>556,12455=>556,12456=>556,12457=>556,12458=>556,12459=>556,
82 12460=>556,12461=>556,12462=>556,12463=>556,12464=>556,12465=>556,12466=>556,12467=>556,12468=>556,12469=>556,12470=>556,12471=>556,12472=>556,12473=>556,12474=>556,12475=>556, 82 12460=>556,12461=>556,12462=>556,12463=>556,12464=>556,12465=>556,12466=>556,12467=>556,12468=>556,12469=>556,12470=>556,12471=>556,12472=>556,12473=>556,12474=>556,12475=>556,
83 12476=>556,12477=>556,12478=>556,12479=>556,12480=>556,12481=>556,12482=>556,12483=>556,12484=>556,12485=>556,12486=>556,12487=>556,12488=>556,12489=>556,12490=>556,12491=>556, 83 12476=>556,12477=>556,12478=>556,12479=>556,12480=>556,12481=>556,12482=>556,12483=>556,12484=>556,12485=>556,12486=>556,12487=>556,12488=>556,12489=>556,12490=>556,12491=>556,
84 12492=>556,12493=>556,12494=>556,12495=>556,12496=>556,12497=>556,12498=>556,12499=>556,12500=>556,12501=>556,12502=>556,12503=>556,12504=>556,12505=>556,12506=>556,12507=>556, 84 12492=>556,12493=>556,12494=>556,12495=>556,12496=>556,12497=>556,12498=>556,12499=>556,12500=>556,12501=>556,12502=>556,12503=>556,12504=>556,12505=>556,12506=>556,12507=>556,
85 12508=>556,12509=>556,12510=>556,12511=>556,12512=>556,12513=>556,12514=>556,12515=>556,12516=>556,12517=>556,12518=>556,12519=>556,12520=>556,12521=>556,12522=>556,12523=>556, 85 12508=>556,12509=>556,12510=>556,12511=>556,12512=>556,12513=>556,12514=>556,12515=>556,12516=>556,12517=>556,12518=>556,12519=>556,12520=>556,12521=>556,12522=>556,12523=>556,
86 12524=>556,12525=>556,12526=>556,12527=>556,12528=>556,12529=>556,12530=>556,12531=>556,12532=>556,12533=>556,12534=>556,63033=>278,63034=>278,63035=>278,63036=>278,63037=>278, 86 12524=>556,12525=>556,12526=>556,12527=>556,12528=>556,12529=>556,12530=>556,12531=>556,12532=>556,12533=>556,12534=>556,63033=>278,63034=>278,63035=>278,63036=>278,63037=>278,
87 63038=>278,63039=>278,63040=>278,63041=>278,63171=>185,63196=>278,64256=>309,64257=>309,64258=>309,64259=>463,64260=>463,64262=>402,64606=>0,64607=>0,64608=>0,64609=>0, 87 63038=>278,63039=>278,63040=>278,63041=>278,63171=>185,63196=>278,64256=>309,64257=>309,64258=>309,64259=>463,64260=>463,64262=>402,64606=>0,64607=>0,64608=>0,64609=>0,
88 64610=>0,64830=>467,64831=>467,65010=>814,65152=>392,65153=>306,65154=>281,65155=>247,65156=>250,65157=>447,65158=>412,65159=>247,65160=>222,65161=>602,65162=>535,65163=>360, 88 64610=>0,64830=>467,64831=>467,65010=>814,65152=>392,65153=>306,65154=>281,65155=>247,65156=>250,65157=>447,65158=>412,65159=>247,65160=>222,65161=>602,65162=>535,65163=>360,
89 65164=>329,65165=>192,65166=>220,65167=>635,65168=>644,65169=>338,65170=>321,65171=>369,65172=>419,65173=>635,65174=>644,65175=>345,65176=>336,65177=>635,65178=>644,65179=>393, 89 65164=>329,65165=>192,65166=>220,65167=>635,65168=>644,65169=>338,65170=>321,65171=>369,65172=>419,65173=>635,65174=>644,65175=>345,65176=>336,65177=>635,65178=>644,65179=>393,
90 65180=>345,65181=>548,65182=>553,65183=>637,65184=>652,65185=>548,65186=>546,65187=>637,65188=>656,65189=>548,65190=>544,65191=>637,65192=>656,65193=>363,65194=>439,65195=>363, 90 65180=>345,65181=>548,65182=>553,65183=>637,65184=>652,65185=>548,65186=>546,65187=>637,65188=>656,65189=>548,65190=>544,65191=>637,65192=>656,65193=>363,65194=>439,65195=>363,
91 65196=>439,65197=>440,65198=>471,65199=>439,65200=>474,65201=>875,65202=>871,65203=>608,65204=>588,65205=>875,65206=>871,65207=>609,65208=>587,65209=>1061,65210=>1033,65211=>794, 91 65196=>439,65197=>440,65198=>471,65199=>439,65200=>474,65201=>875,65202=>871,65203=>608,65204=>588,65205=>875,65206=>871,65207=>609,65208=>587,65209=>1061,65210=>1033,65211=>794,
92 65212=>758,65213=>1061,65214=>1033,65215=>794,65216=>761,65217=>811,65218=>793,65219=>659,65220=>647,65221=>811,65222=>793,65223=>659,65224=>642,65225=>549,65226=>481,65227=>512, 92 65212=>758,65213=>1061,65214=>1033,65215=>794,65216=>761,65217=>811,65218=>793,65219=>659,65220=>647,65221=>811,65222=>793,65223=>659,65224=>642,65225=>549,65226=>481,65227=>512,
93 65228=>409,65229=>547,65230=>476,65231=>512,65232=>409,65233=>755,65234=>748,65235=>416,65236=>442,65237=>574,65238=>550,65239=>416,65240=>442,65241=>717,65242=>687,65243=>883, 93 65228=>409,65229=>547,65230=>476,65231=>512,65232=>409,65233=>755,65234=>748,65235=>416,65236=>442,65237=>574,65238=>550,65239=>416,65240=>442,65241=>717,65242=>687,65243=>883,
94 65244=>409,65245=>555,65246=>511,65247=>338,65248=>297,65249=>423,65250=>478,65251=>489,65252=>476,65253=>532,65254=>548,65255=>336,65256=>326,65257=>371,65258=>391,65259=>524, 94 65244=>409,65245=>555,65246=>511,65247=>338,65248=>297,65249=>423,65250=>478,65251=>489,65252=>476,65253=>532,65254=>548,65255=>336,65256=>326,65257=>371,65258=>391,65259=>524,
95 65260=>412,65261=>454,65262=>412,65263=>633,65264=>566,65265=>643,65266=>560,65267=>357,65268=>333,65269=>623,65270=>617,65271=>603,65272=>621,65273=>576,65274=>617,65275=>576, 95 65260=>412,65261=>454,65262=>412,65263=>633,65264=>566,65265=>643,65266=>560,65267=>357,65268=>333,65269=>623,65270=>617,65271=>603,65272=>621,65273=>576,65274=>617,65275=>576,
96 65276=>625); 96 65276=>625);
97 $enc=''; 97 $enc='';
98 $diff=''; 98 $diff='';
99 $file='almohanad.z'; 99 $file='almohanad.z';
100 $ctg='almohanad.ctg.z'; 100 $ctg='almohanad.ctg.z';
101 $originalsize=227760; 101 $originalsize=227760;
102 // --- EOF --- 102 // --- EOF ---
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 <?php 1 <?php
2 // core font definition file for TCPDF (www.tcpdf.org) 2 // core font definition file for TCPDF (www.tcpdf.org)
3 $type='core'; 3 $type='core';
4 $dw=500; 4 $dw=500;
5 $cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, 5 $cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
6 10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, 6 10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
7 20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, 7 20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
8 30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439, 8 30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439,
9 40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500, 9 40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500,
10 50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278, 10 50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,
11 60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611, 11 60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611,
12 70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722, 12 70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722,
13 80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795, 13 80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795,
14 90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549, 14 90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549,
15 100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549, 15 100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549,
16 109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576, 16 109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576,
17 118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549, 17 118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549,
18 127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0, 18 127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0,
19 138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0, 19 138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,
20 149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0, 20 149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,
21 160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753, 21 160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753,
22 169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549, 22 169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549,
23 178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549, 23 178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549,
24 187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987, 24 187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987,
25 196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713, 25 196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713,
26 205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823, 26 205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823,
27 214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987, 27 214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987,
28 223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384, 28 223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384,
29 232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0, 29 232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0,
30 241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384, 30 241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384,
31 250=>384,251=>384,252=>494,253=>494,254=>494,255=>0); 31 250=>384,251=>384,252=>494,253=>494,254=>494,255=>0);
32 // --- EOF --- 32 // --- EOF ---
......
1 <?php 1 <?php
2 //============================================================+ 2 //============================================================+
3 // File name : makeallttffonts.php 3 // File name : makeallttffonts.php
4 // Begin : 2008-12-07 4 // Begin : 2008-12-07
5 // Last Update : 2010-08-08 5 // Last Update : 2010-08-08
6 // 6 //
7 // Description : Process all TTF files on current directory to 7 // Description : Process all TTF files on current directory to
8 // build TCPDF compatible font files. 8 // build TCPDF compatible font files.
9 // 9 //
10 // Author: Nicola Asuni 10 // Author: Nicola Asuni
11 // 11 //
12 // (c) Copyright: 12 // (c) Copyright:
13 // Nicola Asuni 13 // Nicola Asuni
14 // Tecnick.com S.r.l. 14 // Tecnick.com S.r.l.
15 // Via della Pace, 11 15 // Via della Pace, 11
16 // 09044 Quartucciu (CA) 16 // 09044 Quartucciu (CA)
17 // ITALY 17 // ITALY
18 // www.tecnick.com 18 // www.tecnick.com
19 // info@tecnick.com 19 // info@tecnick.com
20 // 20 //
21 // License: 21 // License:
22 // Copyright (C) 2004-2010 Nicola Asuni - Tecnick.com S.r.l. 22 // Copyright (C) 2004-2010 Nicola Asuni - Tecnick.com S.r.l.
23 // 23 //
24 // This file is part of TCPDF software library. 24 // This file is part of TCPDF software library.
25 // 25 //
26 // TCPDF is free software: you can redistribute it and/or modify it 26 // TCPDF is free software: you can redistribute it and/or modify it
27 // under the terms of the GNU Lesser General Public License as 27 // under the terms of the GNU Lesser General Public License as
28 // published by the Free Software Foundation, either version 3 of the 28 // published by the Free Software Foundation, either version 3 of the
29 // License, or (at your option) any later version. 29 // License, or (at your option) any later version.
30 // 30 //
31 // TCPDF is distributed in the hope that it will be useful, but 31 // TCPDF is distributed in the hope that it will be useful, but
32 // WITHOUT ANY WARRANTY; without even the implied warranty of 32 // WITHOUT ANY WARRANTY; without even the implied warranty of
33 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 33 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
34 // See the GNU Lesser General Public License for more details. 34 // See the GNU Lesser General Public License for more details.
35 // 35 //
36 // You should have received a copy of the GNU Lesser General Public License 36 // You should have received a copy of the GNU Lesser General Public License
37 // along with TCPDF. If not, see <http://www.gnu.org/licenses/>. 37 // along with TCPDF. If not, see <http://www.gnu.org/licenses/>.
38 // 38 //
39 // See LICENSE.TXT file for more information. 39 // See LICENSE.TXT file for more information.
40 //============================================================+ 40 //============================================================+
41 41
42 /** 42 /**
43 * Process all TTF files on current directory to build TCPDF compatible font files. 43 * Process all TTF files on current directory to build TCPDF compatible font files.
44 * @package com.tecnick.tcpdf 44 * @package com.tecnick.tcpdf
45 * @author Nicola Asuni 45 * @author Nicola Asuni
46 * @copyright Copyright &copy; 2004-2009, Nicola Asuni - Tecnick.com S.r.l. - ITALY - www.tecnick.com - info@tecnick.com 46 * @copyright Copyright &copy; 2004-2009, Nicola Asuni - Tecnick.com S.r.l. - ITALY - www.tecnick.com - info@tecnick.com
47 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License 47 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
48 * @link www.tecnick.com 48 * @link www.tecnick.com
49 * @since 2008-12-07 49 * @since 2008-12-07
50 */ 50 */
51 51
52 /** 52 /**
53 */ 53 */
54 54
55 // read directory for files (only graphics files). 55 // read directory for files (only graphics files).
56 $handle = opendir('.'); 56 $handle = opendir('.');
57 while($file = readdir($handle)) { 57 while($file = readdir($handle)) {
58 $path_parts = pathinfo($file); 58 $path_parts = pathinfo($file);
59 $file_ext = strtolower($path_parts['extension']); 59 $file_ext = strtolower($path_parts['extension']);
60 if ($file_ext == 'ttf') { 60 if ($file_ext == 'ttf') {
61 exec('./ttf2ufm -a -F '.$path_parts['basename'].''); 61 exec('./ttf2ufm -a -F '.$path_parts['basename'].'');
62 exec('php -q makefont.php '.$path_parts['basename'].' '.$path_parts['filename'].'.ufm'); 62 exec('php -q makefont.php '.$path_parts['basename'].' '.$path_parts['filename'].'.ufm');
63 } 63 }
64 } 64 }
65 closedir($handle); 65 closedir($handle);
66 66
67 //============================================================+ 67 //============================================================+
68 // END OF FILE 68 // END OF FILE
69 //============================================================+ 69 //============================================================+
......
1 To embed TrueType and OpenType font files, you need to extract the 1 To embed TrueType and OpenType font files, you need to extract the
2 font metrics from the font files and build the required tables using 2 font metrics from the font files and build the required tables using
3 the utility TTF2UFM. 3 the utility TTF2UFM.
4 4
5 TTF2UFM is a modified version of Mark Heath's TTF 2 PT1 converter 5 TTF2UFM is a modified version of Mark Heath's TTF 2 PT1 converter
6 (http://ttf2pt1.sourceforge.net/) by Steven Wittens <steven@acko.net> 6 (http://ttf2pt1.sourceforge.net/) by Steven Wittens <steven@acko.net>
7 (http://www.acko.net/blog/ufpdf). That version has been further 7 (http://www.acko.net/blog/ufpdf). That version has been further
8 modified by Ulrich Telle for use with the wxWidgets component 8 modified by Ulrich Telle for use with the wxWidgets component
9 wxPdfDocument. 9 wxPdfDocument.
10 10
11 Following changes where made: 11 Following changes where made:
12 12
13 1) Generated AFM files contain the glyph number for each character. 13 1) Generated AFM files contain the glyph number for each character.
14 2) Generated UFM files contain the bounding box for each character. 14 2) Generated UFM files contain the bounding box for each character.
15 3) OpenType support has been activated for the Windows binary, 15 3) OpenType support has been activated for the Windows binary,
16 and the generated AFM/UFM files contain the associated 16 and the generated AFM/UFM files contain the associated
17 original Unicode codes for each character. 17 original Unicode codes for each character.
......
1 <?php 1 <?php
2 // core font definition file for TCPDF (www.tcpdf.org) 2 // core font definition file for TCPDF (www.tcpdf.org)
3 $type='core'; 3 $type='core';
4 $dw=788; 4 $dw=788;
5 $cw=array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0, 5 $cw=array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0,
6 13=>0,14=>0,15=>0,16=>0,17=>0,18=>0,19=>0,20=>0,21=>0,22=>0,23=>0,24=>0,25=>0, 6 13=>0,14=>0,15=>0,16=>0,17=>0,18=>0,19=>0,20=>0,21=>0,22=>0,23=>0,24=>0,25=>0,
7 26=>0,27=>0,28=>0,29=>0,30=>0,31=>0,32=>278,33=>974,34=>961,35=>974,36=>980, 7 26=>0,27=>0,28=>0,29=>0,30=>0,31=>0,32=>278,33=>974,34=>961,35=>974,36=>980,
8 37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911, 8 37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911,
9 47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677, 9 47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,
10 57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786, 10 57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,
11 67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823, 11 67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823,
12 77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695, 12 77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,
13 87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815, 13 87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,
14 97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713, 14 97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,
15 106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759, 15 106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,
16 115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392, 16 115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392,
17 124=>392,125=>668,126=>668,127=>0,128=>390,129=>390,130=>317,131=>317,132=>276, 17 124=>392,125=>668,126=>668,127=>0,128=>390,129=>390,130=>317,131=>317,132=>276,
18 133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334, 18 133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,
19 142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,149=>0,150=>0,151=>0,152=>0, 19 142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,149=>0,150=>0,151=>0,152=>0,
20 153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,160=>0,161=>732,162=>544,163=>544, 20 153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,160=>0,161=>732,162=>544,163=>544,
21 164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788, 21 164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788,
22 173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788, 22 173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,
23 182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788, 23 182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,
24 191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788, 24 191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,
25 200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788, 25 200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,
26 209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924, 26 209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924,
27 218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924, 27 218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,
28 227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867, 28 227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,
29 236=>867,237=>696,238=>696,239=>874,240=>0,241=>874,242=>760,243=>946,244=>771, 29 236=>867,237=>696,238=>696,239=>874,240=>0,241=>874,242=>760,243=>946,244=>771,
30 245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970, 30 245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,
31 254=>918,255=>0); 31 254=>918,255=>0);
32 // --- EOF --- 32 // --- EOF ---
......
1 <?php 1 <?php
2 /* Mohammad Ali Golkar 2 /* Mohammad Ali Golkar
3 m.a.golkar@gmail.com 3 m.a.golkar@gmail.com
4 http://www.30minonline.com 4 http://www.30minonline.com
5 LICENSE : GPLv2 */ 5 LICENSE : GPLv2 */
6 $type='TrueTypeUnicode'; 6 $type='TrueTypeUnicode';
7 $name='ZarBold'; 7 $name='ZarBold';
8 $desc=array('Ascent'=>733,'Descent'=>-317,'CapHeight'=>733,'Flags'=>32,'FontBBox'=>'[-126 -535 1164 1046]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); 8 $desc=array('Ascent'=>733,'Descent'=>-317,'CapHeight'=>733,'Flags'=>32,'FontBBox'=>'[-126 -535 1164 1046]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
9 $up=-356; 9 $up=-356;
10 $ut=49; 10 $ut=49;
11 $dw=600; 11 $dw=600;
12 $cw=array( 12 $cw=array(
13 0=>0,32=>227,33=>235,34=>282,35=>667,36=>458,37=>493,38=>635,39=>156,40=>303,41=>303,42=>489,43=>489,44=>237,45=>489,46=>231,47=>277, 13 0=>0,32=>227,33=>235,34=>282,35=>667,36=>458,37=>493,38=>635,39=>156,40=>303,41=>303,42=>489,43=>489,44=>237,45=>489,46=>231,47=>277,
14 48=>552,49=>552,50=>552,51=>552,52=>552,53=>552,54=>552,55=>552,56=>552,57=>552,58=>231,59=>237,60=>667,61=>489,62=>667,63=>448, 14 48=>552,49=>552,50=>552,51=>552,52=>552,53=>552,54=>552,55=>552,56=>552,57=>552,58=>231,59=>237,60=>667,61=>489,62=>667,63=>448,
15 64=>917,65=>604,66=>542,67=>615,68=>708,69=>479,70=>427,71=>667,72=>688,73=>302,74=>292,75=>583,76=>469,77=>885,78=>677,79=>729, 15 64=>917,65=>604,66=>542,67=>615,68=>708,69=>479,70=>427,71=>667,72=>688,73=>302,74=>292,75=>583,76=>469,77=>885,78=>677,79=>729,
16 80=>479,81=>729,82=>542,83=>448,84=>521,85=>677,86=>615,87=>969,88=>604,89=>583,90=>594,91=>208,92=>510,93=>208,94=>469,95=>500, 16 80=>479,81=>729,82=>542,83=>448,84=>521,85=>677,86=>615,87=>969,88=>604,89=>583,90=>594,91=>208,92=>510,93=>208,94=>469,95=>500,
17 96=>333,97=>469,98=>510,99=>448,100=>521,101=>438,102=>313,103=>500,104=>552,105=>271,106=>260,107=>500,108=>271,109=>802,110=>552,111=>490, 17 96=>333,97=>469,98=>510,99=>448,100=>521,101=>438,102=>313,103=>500,104=>552,105=>271,106=>260,107=>500,108=>271,109=>802,110=>552,111=>490,
18 112=>531,113=>521,114=>396,115=>365,116=>292,117=>552,118=>479,119=>750,120=>521,121=>469,122=>448,123=>479,124=>510,125=>479,126=>667,8218=>240, 18 112=>531,113=>521,114=>396,115=>365,116=>292,117=>552,118=>479,119=>750,120=>521,121=>469,122=>448,123=>479,124=>510,125=>479,126=>667,8218=>240,
19 402=>531,8222=>458,8230=>1000,8224=>438,8225=>438,710=>333,8240=>1010,352=>448,8249=>250,338=>865,8216=>240,8217=>240,8220=>317,8221=>317,8226=>281,8211=>500, 19 402=>531,8222=>458,8230=>1000,8224=>438,8225=>438,710=>333,8240=>1010,352=>448,8249=>250,338=>865,8216=>240,8217=>240,8220=>317,8221=>317,8226=>281,8211=>500,
20 8212=>1000,8482=>906,353=>365,8250=>250,339=>823,376=>583,160=>244,161=>317,162=>448,163=>583,164=>500,165=>583,166=>200,167=>417,168=>333,169=>765, 20 8212=>1000,8482=>906,353=>365,8250=>250,339=>823,376=>583,160=>244,161=>317,162=>448,163=>583,164=>500,165=>583,166=>200,167=>417,168=>333,169=>765,
21 170=>313,171=>417,172=>667,173=>564,174=>765,175=>333,176=>375,177=>462,178=>354,179=>354,180=>333,181=>510,182=>438,183=>198,184=>333,185=>354, 21 170=>313,171=>417,172=>667,173=>564,174=>765,175=>333,176=>375,177=>462,178=>354,179=>354,180=>333,181=>510,182=>438,183=>198,184=>333,185=>354,
22 186=>323,187=>417,188=>854,189=>854,190=>854,191=>448,192=>604,711=>333,215=>462,224=>469,226=>469,231=>448,232=>438,233=>438,234=>438,235=>438, 22 186=>323,187=>417,188=>854,189=>854,190=>854,191=>448,192=>604,711=>333,215=>462,224=>469,226=>469,231=>448,232=>438,233=>438,234=>438,235=>438,
23 238=>271,239=>271,244=>490,305=>271,247=>483,249=>552,251=>552,252=>552,255=>469,9249=>781,1548=>237,1563=>237,1567=>340,1569=>426,1570=>416,1571=>238, 23 238=>271,239=>271,244=>490,305=>271,247=>483,249=>552,251=>552,252=>552,255=>469,9249=>781,1548=>237,1563=>237,1567=>340,1569=>426,1570=>416,1571=>238,
24 1572=>429,1573=>260,1574=>817,1575=>238,1576=>853,1577=>439,1578=>853,1579=>853,1580=>720,1581=>720,1582=>720,1583=>485,1584=>485,1585=>423,1586=>423,1587=>1016, 24 1572=>429,1573=>260,1574=>817,1575=>238,1576=>853,1577=>439,1578=>853,1579=>853,1580=>720,1581=>720,1582=>720,1583=>485,1584=>485,1585=>423,1586=>423,1587=>1016,
25 1588=>1016,1589=>1128,1590=>1128,1591=>794,1592=>794,1593=>685,1594=>685,1600=>371,1601=>840,1602=>696,1603=>1148,1604=>744,1605=>514,1606=>686,1607=>439,1608=>429, 25 1588=>1016,1589=>1128,1590=>1128,1591=>794,1592=>794,1593=>685,1594=>685,1600=>371,1601=>840,1602=>696,1603=>1148,1604=>744,1605=>514,1606=>686,1607=>439,1608=>429,
26 1609=>817,1610=>817,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>479,1633=>479,1634=>479,1635=>479,1636=>479,1637=>479, 26 1609=>817,1610=>817,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>479,1633=>479,1634=>479,1635=>479,1636=>479,1637=>479,
27 1638=>479,1639=>479,1640=>479,1641=>483,1642=>493,1645=>563,1648=>227,1649=>363,1652=>227,1662=>853,1670=>720,1688=>423,1700=>840,1705=>1148,1711=>1149,1740=>817, 27 1638=>479,1639=>479,1640=>479,1641=>483,1642=>493,1645=>563,1648=>227,1649=>363,1652=>227,1662=>853,1670=>720,1688=>423,1700=>840,1705=>1148,1711=>1149,1740=>817,
28 1749=>439,1764=>227,1776=>479,1777=>479,1778=>479,1779=>479,1780=>479,1781=>479,1782=>479,1783=>479,1784=>479,1785=>483,8204=>22,8205=>22,8206=>22,8207=>22, 28 1749=>439,1764=>227,1776=>479,1777=>479,1778=>479,1779=>479,1780=>479,1781=>479,1782=>479,1783=>479,1784=>479,1785=>483,8204=>22,8205=>22,8206=>22,8207=>22,
29 59424=>227,59425=>227,59426=>227,59427=>227,59428=>227,59429=>227,59430=>227,59431=>227,59432=>227,59433=>227,59434=>227,59435=>227,59436=>227,59416=>227,59437=>227,59442=>227, 29 59424=>227,59425=>227,59426=>227,59427=>227,59428=>227,59429=>227,59430=>227,59431=>227,59432=>227,59433=>227,59434=>227,59435=>227,59436=>227,59416=>227,59437=>227,59442=>227,
30 59443=>227,59444=>227,59445=>227,59446=>227,64336=>363,64337=>263,64342=>853,64343=>967,64344=>267,64345=>271,64362=>840,64363=>959,64364=>305,64365=>341,64378=>720,64379=>725, 30 59443=>227,59444=>227,59445=>227,59446=>227,64336=>363,64337=>263,64342=>853,64343=>967,64344=>267,64345=>271,64362=>840,64363=>959,64364=>305,64365=>341,64378=>720,64379=>725,
31 64380=>630,64381=>652,64394=>423,64395=>450,64398=>1148,64399=>1089,64400=>522,64401=>461,64402=>1149,64403=>1084,64404=>525,64405=>462,64508=>817,64509=>784,64606=>227,64607=>227, 31 64380=>630,64381=>652,64394=>423,64395=>450,64398=>1148,64399=>1089,64400=>522,64401=>461,64402=>1149,64403=>1084,64404=>525,64405=>462,64508=>817,64509=>784,64606=>227,64607=>227,
32 64608=>227,64609=>227,64610=>227,64754=>371,64755=>371,64756=>371,64828=>331,64829=>276,64830=>303,64831=>303,65010=>866,65136=>227,65137=>371,65138=>227,65140=>227,65142=>227, 32 64608=>227,64609=>227,64610=>227,64754=>371,64755=>371,64756=>371,64828=>331,64829=>276,64830=>303,64831=>303,65010=>866,65136=>227,65137=>371,65138=>227,65140=>227,65142=>227,
33 65143=>371,65144=>227,65145=>371,65146=>227,65147=>371,65148=>227,65149=>371,65150=>227,65151=>371,65152=>426,65153=>416,65154=>354,65155=>238,65156=>282,65157=>429,65158=>507, 33 65143=>371,65144=>227,65145=>371,65146=>227,65147=>371,65148=>227,65149=>371,65150=>227,65151=>371,65152=>426,65153=>416,65154=>354,65155=>238,65156=>282,65157=>429,65158=>507,
34 65159=>260,65160=>286,65161=>817,65162=>784,65163=>190,65164=>276,65165=>238,65166=>263,65167=>853,65168=>967,65169=>186,65170=>271,65171=>439,65172=>452,65173=>853,65174=>967, 34 65159=>260,65160=>286,65161=>817,65162=>784,65163=>190,65164=>276,65165=>238,65166=>263,65167=>853,65168=>967,65169=>186,65170=>271,65171=>439,65172=>452,65173=>853,65174=>967,
35 65175=>256,65176=>271,65177=>853,65178=>967,65179=>267,65180=>271,65181=>720,65182=>725,65183=>630,65184=>652,65185=>720,65186=>725,65187=>630,65188=>652,65189=>720,65190=>725, 35 65175=>256,65176=>271,65177=>853,65178=>967,65179=>267,65180=>271,65181=>720,65182=>725,65183=>630,65184=>652,65185=>720,65186=>725,65187=>630,65188=>652,65189=>720,65190=>725,
36 65191=>630,65192=>652,65193=>485,65194=>608,65195=>485,65196=>608,65197=>423,65198=>450,65199=>423,65200=>450,65201=>1016,65202=>1041,65203=>498,65204=>475,65205=>1016,65206=>1041, 36 65191=>630,65192=>652,65193=>485,65194=>608,65195=>485,65196=>608,65197=>423,65198=>450,65199=>423,65200=>450,65201=>1016,65202=>1041,65203=>498,65204=>475,65205=>1016,65206=>1041,
37 65207=>498,65208=>475,65209=>1128,65210=>1150,65211=>633,65212=>655,65213=>1128,65214=>1150,65215=>633,65216=>655,65217=>794,65218=>814,65219=>566,65220=>588,65221=>794,65222=>814, 37 65207=>498,65208=>475,65209=>1128,65210=>1150,65211=>633,65212=>655,65213=>1128,65214=>1150,65215=>633,65216=>655,65217=>794,65218=>814,65219=>566,65220=>588,65221=>794,65222=>814,
38 65223=>566,65224=>588,65225=>685,65226=>655,65227=>414,65228=>330,65229=>685,65230=>655,65231=>414,65232=>330,65233=>840,65234=>959,65235=>305,65236=>341,65237=>696,65238=>780, 38 65223=>566,65224=>588,65225=>685,65226=>655,65227=>414,65228=>330,65229=>685,65230=>655,65231=>414,65232=>330,65233=>840,65234=>959,65235=>305,65236=>341,65237=>696,65238=>780,
39 65239=>305,65240=>341,65241=>1148,65242=>1089,65243=>522,65244=>461,65245=>744,65246=>741,65247=>202,65248=>259,65249=>514,65250=>585,65251=>345,65252=>477,65253=>686,65254=>764, 39 65239=>305,65240=>341,65241=>1148,65242=>1089,65243=>522,65244=>461,65245=>744,65246=>741,65247=>202,65248=>259,65249=>514,65250=>585,65251=>345,65252=>477,65253=>686,65254=>764,
40 65255=>186,65256=>271,65257=>439,65258=>452,65259=>501,65260=>381,65261=>429,65262=>507,65263=>817,65264=>784,65265=>817,65266=>784,64510=>265,64511=>271,65269=>610,65270=>652, 40 65255=>186,65256=>271,65257=>439,65258=>452,65259=>501,65260=>381,65261=>429,65262=>507,65263=>817,65264=>784,65265=>817,65266=>784,64510=>265,64511=>271,65269=>610,65270=>652,
41 65271=>539,65272=>611,65273=>539,65274=>611,65275=>539,65276=>611,65279=>0,64486=>408,64487=>408); 41 65271=>539,65272=>611,65273=>539,65274=>611,65275=>539,65276=>611,65279=>0,64486=>408,64487=>408);
42 $enc=''; 42 $enc='';
43 $diff=''; 43 $diff='';
44 $file='zarbold.z'; 44 $file='zarbold.z';
45 $ctg='zarbold.ctg.z'; 45 $ctg='zarbold.ctg.z';
46 $originalsize=73296; 46 $originalsize=73296;
47 // --- EOF --- 47 // --- EOF ---
......
1 %!PS-Adobe-3.0 EPSF-3.0 1 %!PS-Adobe-3.0 EPSF-3.0
2 %%Creator: Adobe Illustrator(TM) 3.2 2 %%Creator: Adobe Illustrator(TM) 3.2
3 %%AI8_CreatorVersion: 12.0.0 3 %%AI8_CreatorVersion: 12.0.0
4 %%For: (fluxus) (x) 4 %%For: (fluxus) (x)
5 %%Title: (bug.eps) 5 %%Title: (bug.eps)
6 %%CreationDate: 4/15/2006 11:11 PM 6 %%CreationDate: 4/15/2006 11:11 PM
7 %%BoundingBox: -2 747 53 843 7 %%BoundingBox: -2 747 53 843
8 % -2 747 53 843 8 % -2 747 53 843
9 %%DocumentProcessColors: Cyan Magenta Yellow Black 9 %%DocumentProcessColors: Cyan Magenta Yellow Black
10 %%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 10 %%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0
11 %%+ procset Adobe_cmykcolor 1.1 0 11 %%+ procset Adobe_cmykcolor 1.1 0
12 %%+ procset Adobe_cshow 1.1 0 12 %%+ procset Adobe_cshow 1.1 0
13 %%+ procset Adobe_customcolor 1.0 0 13 %%+ procset Adobe_customcolor 1.0 0
14 %%+ procset Adobe_pattern_AI3 1.0 0 14 %%+ procset Adobe_pattern_AI3 1.0 0
15 %%+ procset Adobe_Illustrator_AI3 1.0 1 15 %%+ procset Adobe_Illustrator_AI3 1.0 1
16 %AI3_ColorUsage: Color 16 %AI3_ColorUsage: Color
17 %AI3_IncludePlacedImages 17 %AI3_IncludePlacedImages
18 %%CMYKCustomColor: 1 1 1 1 ([Registration]) 18 %%CMYKCustomColor: 1 1 1 1 ([Registration])
19 %AI3_TemplateBox: 298.5 420.3896 298.5 420.3896 19 %AI3_TemplateBox: 298.5 420.3896 298.5 420.3896
20 %AI3_TileBox: 0.157715 0.044861 595.1177 841.9648 20 %AI3_TileBox: 0.157715 0.044861 595.1177 841.9648
21 %AI3_DocumentPreview: Header 21 %AI3_DocumentPreview: Header
22 %%PageOrigin:-32 11.8896 22 %%PageOrigin:-32 11.8896
23 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 23 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
24 %AI9_Flatten: 1 24 %AI9_Flatten: 1
25 %AI12_CMSettings: 00.MS 25 %AI12_CMSettings: 00.MS
26 %%EndComments 26 %%EndComments
27 %%BeginProlog 27 %%BeginProlog
28 %%BeginResource: procset Adobe_packedarray 2.0 0 28 %%BeginResource: procset Adobe_packedarray 2.0 0
29 %%Title: (Packed Array Operators) 29 %%Title: (Packed Array Operators)
30 %%Version: 2.0 0 30 %%Version: 2.0 0
31 %%CreationDate: (8/2/90) () 31 %%CreationDate: (8/2/90) ()
32 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 32 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
33 userdict /Adobe_packedarray 5 dict dup begin put 33 userdict /Adobe_packedarray 5 dict dup begin put
34 /initialize 34 /initialize
35 { 35 {
36 /packedarray where 36 /packedarray where
37 { 37 {
38 pop 38 pop
39 } 39 }
40 { 40 {
41 Adobe_packedarray begin 41 Adobe_packedarray begin
42 Adobe_packedarray 42 Adobe_packedarray
43 { 43 {
44 dup xcheck 44 dup xcheck
45 { 45 {
46 bind 46 bind
47 } if 47 } if
48 userdict 3 1 roll put 48 userdict 3 1 roll put
49 } forall 49 } forall
50 end 50 end
51 } ifelse 51 } ifelse
52 } def 52 } def
53 /terminate 53 /terminate
54 { 54 {
55 } def 55 } def
56 /packedarray 56 /packedarray
57 { 57 {
58 array astore readonly 58 array astore readonly
59 } def 59 } def
60 /setpacking 60 /setpacking
61 { 61 {
62 pop 62 pop
63 } def 63 } def
64 /currentpacking 64 /currentpacking
65 { 65 {
66 false 66 false
67 } def 67 } def
68 currentdict readonly pop end 68 currentdict readonly pop end
69 %%EndResource 69 %%EndResource
70 Adobe_packedarray /initialize get exec 70 Adobe_packedarray /initialize get exec
71 %%BeginResource: procset Adobe_cmykcolor 1.1 0 71 %%BeginResource: procset Adobe_cmykcolor 1.1 0
72 %%Title: (CMYK Color Operators) 72 %%Title: (CMYK Color Operators)
73 %%Version: 1.1 0 73 %%Version: 1.1 0
74 %%CreationDate: (1/23/89) () 74 %%CreationDate: (1/23/89) ()
75 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 75 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
76 currentpacking true setpacking 76 currentpacking true setpacking
77 userdict /Adobe_cmykcolor 4 dict dup begin put 77 userdict /Adobe_cmykcolor 4 dict dup begin put
78 /initialize 78 /initialize
79 { 79 {
80 /setcmykcolor where 80 /setcmykcolor where
81 { 81 {
82 pop 82 pop
83 } 83 }
84 { 84 {
85 userdict /Adobe_cmykcolor_vars 2 dict dup begin put 85 userdict /Adobe_cmykcolor_vars 2 dict dup begin put
86 /_setrgbcolor 86 /_setrgbcolor
87 /setrgbcolor load def 87 /setrgbcolor load def
88 /_currentrgbcolor 88 /_currentrgbcolor
89 /currentrgbcolor load def 89 /currentrgbcolor load def
90 Adobe_cmykcolor begin 90 Adobe_cmykcolor begin
91 Adobe_cmykcolor 91 Adobe_cmykcolor
92 { 92 {
93 dup xcheck 93 dup xcheck
94 { 94 {
95 bind 95 bind
96 } if 96 } if
97 pop pop 97 pop pop
98 } forall 98 } forall
99 end 99 end
100 end 100 end
101 Adobe_cmykcolor begin 101 Adobe_cmykcolor begin
102 } ifelse 102 } ifelse
103 } def 103 } def
104 /terminate 104 /terminate
105 { 105 {
106 currentdict Adobe_cmykcolor eq 106 currentdict Adobe_cmykcolor eq
107 { 107 {
108 end 108 end
109 } if 109 } if
110 } def 110 } def
111 /setcmykcolor 111 /setcmykcolor
112 { 112 {
113 1 sub 4 1 roll 113 1 sub 4 1 roll
114 3 114 3
115 { 115 {
116 3 index add neg dup 0 lt 116 3 index add neg dup 0 lt
117 { 117 {
118 pop 0 118 pop 0
119 } if 119 } if
120 3 1 roll 120 3 1 roll
121 } repeat 121 } repeat
122 Adobe_cmykcolor_vars /_setrgbcolor get exec 122 Adobe_cmykcolor_vars /_setrgbcolor get exec
123 pop 123 pop
124 } def 124 } def
125 /currentcmykcolor 125 /currentcmykcolor
126 { 126 {
127 Adobe_cmykcolor_vars /_currentrgbcolor get exec 127 Adobe_cmykcolor_vars /_currentrgbcolor get exec
128 3 128 3
129 { 129 {
130 1 sub neg 3 1 roll 130 1 sub neg 3 1 roll
131 } repeat 131 } repeat
132 0 132 0
133 } def 133 } def
134 currentdict readonly pop end 134 currentdict readonly pop end
135 setpacking 135 setpacking
136 %%EndResource 136 %%EndResource
137 %%BeginResource: procset Adobe_cshow 1.1 0 137 %%BeginResource: procset Adobe_cshow 1.1 0
138 %%Title: (cshow Operator) 138 %%Title: (cshow Operator)
139 %%Version: 1.1 0 139 %%Version: 1.1 0
140 %%CreationDate: (1/23/89) () 140 %%CreationDate: (1/23/89) ()
141 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 141 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
142 currentpacking true setpacking 142 currentpacking true setpacking
143 userdict /Adobe_cshow 3 dict dup begin put 143 userdict /Adobe_cshow 3 dict dup begin put
144 /initialize 144 /initialize
145 { 145 {
146 /cshow where 146 /cshow where
147 { 147 {
148 pop 148 pop
149 } 149 }
150 { 150 {
151 userdict /Adobe_cshow_vars 1 dict dup begin put 151 userdict /Adobe_cshow_vars 1 dict dup begin put
152 /_cshow 152 /_cshow
153 {} def 153 {} def
154 Adobe_cshow begin 154 Adobe_cshow begin
155 Adobe_cshow 155 Adobe_cshow
156 { 156 {
157 dup xcheck 157 dup xcheck
158 { 158 {
159 bind 159 bind
160 } if 160 } if
161 userdict 3 1 roll put 161 userdict 3 1 roll put
162 } forall 162 } forall
163 end 163 end
164 end 164 end
165 } ifelse 165 } ifelse
166 } def 166 } def
167 /terminate 167 /terminate
168 { 168 {
169 } def 169 } def
170 /cshow 170 /cshow
171 { 171 {
172 exch 172 exch
173 Adobe_cshow_vars 173 Adobe_cshow_vars
174 exch /_cshow 174 exch /_cshow
175 exch put 175 exch put
176 { 176 {
177 0 0 Adobe_cshow_vars /_cshow get exec 177 0 0 Adobe_cshow_vars /_cshow get exec
178 } forall 178 } forall
179 } def 179 } def
180 currentdict readonly pop end 180 currentdict readonly pop end
181 setpacking 181 setpacking
182 %%EndResource 182 %%EndResource
183 %%BeginResource: procset Adobe_customcolor 1.0 0 183 %%BeginResource: procset Adobe_customcolor 1.0 0
184 %%Title: (Custom Color Operators) 184 %%Title: (Custom Color Operators)
185 %%Version: 1.0 0 185 %%Version: 1.0 0
186 %%CreationDate: (5/9/88) () 186 %%CreationDate: (5/9/88) ()
187 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 187 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
188 currentpacking true setpacking 188 currentpacking true setpacking
189 userdict /Adobe_customcolor 5 dict dup begin put 189 userdict /Adobe_customcolor 5 dict dup begin put
190 /initialize 190 /initialize
191 { 191 {
192 /setcustomcolor where 192 /setcustomcolor where
193 { 193 {
194 pop 194 pop
195 } 195 }
196 { 196 {
197 Adobe_customcolor begin 197 Adobe_customcolor begin
198 Adobe_customcolor 198 Adobe_customcolor
199 { 199 {
200 dup xcheck 200 dup xcheck
201 { 201 {
202 bind 202 bind
203 } if 203 } if
204 pop pop 204 pop pop
205 } forall 205 } forall
206 end 206 end
207 Adobe_customcolor begin 207 Adobe_customcolor begin
208 } ifelse 208 } ifelse
209 } def 209 } def
210 /terminate 210 /terminate
211 { 211 {
212 currentdict Adobe_customcolor eq 212 currentdict Adobe_customcolor eq
213 { 213 {
214 end 214 end
215 } if 215 } if
216 } def 216 } def
217 /findcmykcustomcolor 217 /findcmykcustomcolor
218 { 218 {
219 5 packedarray 219 5 packedarray
220 } def 220 } def
221 /setcustomcolor 221 /setcustomcolor
222 { 222 {
223 exch 223 exch
224 aload pop pop 224 aload pop pop
225 4 225 4
226 { 226 {
227 4 index mul 4 1 roll 227 4 index mul 4 1 roll
228 } repeat 228 } repeat
229 5 -1 roll pop 229 5 -1 roll pop
230 setcmykcolor 230 setcmykcolor
231 } def 231 } def
232 /setoverprint 232 /setoverprint
233 { 233 {
234 pop 234 pop
235 } def 235 } def
236 currentdict readonly pop end 236 currentdict readonly pop end
237 setpacking 237 setpacking
238 %%EndResource 238 %%EndResource
239 %%BeginResource: procset Adobe_pattern_AI3 1.1 0 239 %%BeginResource: procset Adobe_pattern_AI3 1.1 0
240 %%Title: (Adobe Illustrator (R) Version 3.0 Pattern Operators) 240 %%Title: (Adobe Illustrator (R) Version 3.0 Pattern Operators)
241 %%Version: 1.1 0 241 %%Version: 1.1 0
242 %%CreationDate: (7/21/89) () 242 %%CreationDate: (7/21/89) ()
243 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 243 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
244 currentpacking true setpacking 244 currentpacking true setpacking
245 userdict /Adobe_pattern_AI3 16 dict dup begin put 245 userdict /Adobe_pattern_AI3 16 dict dup begin put
246 /initialize 246 /initialize
247 { 247 {
248 /definepattern where 248 /definepattern where
249 { 249 {
250 pop 250 pop
251 } 251 }
252 { 252 {
253 Adobe_pattern_AI3 begin 253 Adobe_pattern_AI3 begin
254 Adobe_pattern_AI3 254 Adobe_pattern_AI3
255 { 255 {
256 dup xcheck 256 dup xcheck
257 { 257 {
258 bind 258 bind
259 } if 259 } if
260 pop pop 260 pop pop
261 } forall 261 } forall
262 mark 262 mark
263 cachestatus 7 1 roll pop pop pop pop exch pop exch 263 cachestatus 7 1 roll pop pop pop pop exch pop exch
264 { 264 {
265 { 265 {
266 10000 add 266 10000 add
267 dup 2 index gt 267 dup 2 index gt
268 { 268 {
269 exit 269 exit
270 } if 270 } if
271 dup setcachelimit 271 dup setcachelimit
272 } loop 272 } loop
273 } stopped 273 } stopped
274 cleartomark 274 cleartomark
275 } ifelse 275 } ifelse
276 } def 276 } def
277 /terminate 277 /terminate
278 { 278 {
279 currentdict Adobe_pattern_AI3 eq 279 currentdict Adobe_pattern_AI3 eq
280 { 280 {
281 end 281 end
282 } if 282 } if
283 } def 283 } def
284 errordict 284 errordict
285 /nocurrentpoint 285 /nocurrentpoint
286 { 286 {
287 pop 287 pop
288 stop 288 stop
289 } put 289 } put
290 errordict 290 errordict
291 /invalidaccess 291 /invalidaccess
292 { 292 {
293 pop 293 pop
294 stop 294 stop
295 } put 295 } put
296 /patternencoding 296 /patternencoding
297 256 array def 297 256 array def
298 0 1 255 298 0 1 255
299 { 299 {
300 patternencoding exch ( ) 2 copy exch 0 exch put cvn put 300 patternencoding exch ( ) 2 copy exch 0 exch put cvn put
301 } for 301 } for
302 /definepattern 302 /definepattern
303 { 303 {
304 17 dict begin 304 17 dict begin
305 /uniform exch def 305 /uniform exch def
306 /cache exch def 306 /cache exch def
307 /key exch def 307 /key exch def
308 /procarray exch def 308 /procarray exch def
309 /mtx exch matrix invertmatrix def 309 /mtx exch matrix invertmatrix def
310 /height exch def 310 /height exch def
311 /width exch def 311 /width exch def
312 /ctm matrix currentmatrix def 312 /ctm matrix currentmatrix def
313 /ptm matrix def 313 /ptm matrix def
314 /str 32 string def 314 /str 32 string def
315 /slice 9 dict def 315 /slice 9 dict def
316 slice /s 1 put 316 slice /s 1 put
317 slice /q 256 procarray length div sqrt floor cvi put 317 slice /q 256 procarray length div sqrt floor cvi put
318 slice /b 0 put 318 slice /b 0 put
319 /FontBBox [0 0 0 0] def 319 /FontBBox [0 0 0 0] def
320 /FontMatrix mtx matrix copy def 320 /FontMatrix mtx matrix copy def
321 /Encoding patternencoding def 321 /Encoding patternencoding def
322 /FontType 3 def 322 /FontType 3 def
323 /BuildChar 323 /BuildChar
324 { 324 {
325 exch 325 exch
326 begin 326 begin
327 /setstrokeadjust where {pop true setstrokeadjust} if 327 /setstrokeadjust where {pop true setstrokeadjust} if
328 slice begin 328 slice begin
329 dup q dup mul mod s idiv /i exch def 329 dup q dup mul mod s idiv /i exch def
330 dup q dup mul mod s mod /j exch def 330 dup q dup mul mod s mod /j exch def
331 q dup mul idiv procarray exch get 331 q dup mul idiv procarray exch get
332 /xl j width s div mul def 332 /xl j width s div mul def
333 /xg j 1 add width s div mul def 333 /xg j 1 add width s div mul def
334 /yl i height s div mul def 334 /yl i height s div mul def
335 /yg i 1 add height s div mul def 335 /yg i 1 add height s div mul def
336 uniform 336 uniform
337 { 337 {
338 1 1 338 1 1
339 } 339 }
340 { 340 {
341 width 0 dtransform 341 width 0 dtransform
342 dup mul exch dup mul add sqrt dup 1 add exch div 342 dup mul exch dup mul add sqrt dup 1 add exch div
343 0 height dtransform 343 0 height dtransform
344 dup mul exch dup mul add sqrt dup 1 add exch div 344 dup mul exch dup mul add sqrt dup 1 add exch div
345 } ifelse 345 } ifelse
346 width 0 cache 346 width 0 cache
347 { 347 {
348 xl 4 index mul yl 4 index mul xg 6 index mul yg 6 index mul 348 xl 4 index mul yl 4 index mul xg 6 index mul yg 6 index mul
349 setcachedevice 349 setcachedevice
350 } 350 }
351 { 351 {
352 setcharwidth 352 setcharwidth
353 } ifelse 353 } ifelse
354 gsave 354 gsave
355 scale 355 scale
356 newpath 356 newpath
357 xl yl moveto 357 xl yl moveto
358 xg yl lineto 358 xg yl lineto
359 xg yg lineto 359 xg yg lineto
360 xl yg lineto 360 xl yg lineto
361 closepath 361 closepath
362 clip 362 clip
363 newpath 363 newpath
364 end 364 end
365 end 365 end
366 exec 366 exec
367 grestore 367 grestore
368 } def 368 } def
369 key currentdict definefont 369 key currentdict definefont
370 end 370 end
371 } def 371 } def
372 /patterncachesize 372 /patterncachesize
373 { 373 {
374 gsave 374 gsave
375 newpath 375 newpath
376 0 0 moveto 376 0 0 moveto
377 width 0 lineto 377 width 0 lineto
378 width height lineto 378 width height lineto
379 0 height lineto 379 0 height lineto
380 closepath 380 closepath
381 patternmatrix setmatrix 381 patternmatrix setmatrix
382 pathbbox 382 pathbbox
383 exch ceiling 4 -1 roll floor sub 3 1 roll 383 exch ceiling 4 -1 roll floor sub 3 1 roll
384 ceiling exch floor sub 384 ceiling exch floor sub
385 mul 1 add 385 mul 1 add
386 grestore 386 grestore
387 } def 387 } def
388 /patterncachelimit 388 /patterncachelimit
389 { 389 {
390 cachestatus 7 1 roll 6 npop 8 mul 390 cachestatus 7 1 roll 6 npop 8 mul
391 } def 391 } def
392 /patternpath 392 /patternpath
393 { 393 {
394 exch dup begin setfont 394 exch dup begin setfont
395 ctm setmatrix 395 ctm setmatrix
396 concat 396 concat
397 slice exch /b exch slice /q get dup mul mul put 397 slice exch /b exch slice /q get dup mul mul put
398 FontMatrix concat 398 FontMatrix concat
399 uniform 399 uniform
400 { 400 {
401 width 0 dtransform round width div exch round width div exch 401 width 0 dtransform round width div exch round width div exch
402 0 height dtransform round height div exch height div exch 402 0 height dtransform round height div exch height div exch
403 0 0 transform round exch round exch 403 0 0 transform round exch round exch
404 ptm astore setmatrix 404 ptm astore setmatrix
405 } 405 }
406 { 406 {
407 ptm currentmatrix pop 407 ptm currentmatrix pop
408 } ifelse 408 } ifelse
409 {currentpoint} stopped not 409 {currentpoint} stopped not
410 { 410 {
411 2 npop 411 2 npop
412 pathbbox 412 pathbbox
413 true 413 true
414 4 index 3 index eq 414 4 index 3 index eq
415 4 index 3 index eq 415 4 index 3 index eq
416 and 416 and
417 { 417 {
418 pop false 418 pop false
419 { 419 {
420 {2 npop} 420 {2 npop}
421 {3 npop true} 421 {3 npop true}
422 {7 npop true} 422 {7 npop true}
423 {pop true} 423 {pop true}
424 pathforall 424 pathforall
425 } stopped 425 } stopped
426 { 426 {
427 5 npop true 427 5 npop true
428 } if 428 } if
429 } if 429 } if
430 { 430 {
431 height div ceiling height mul 4 1 roll 431 height div ceiling height mul 4 1 roll
432 width div ceiling width mul 4 1 roll 432 width div ceiling width mul 4 1 roll
433 height div floor height mul 4 1 roll 433 height div floor height mul 4 1 roll
434 width div floor width mul 4 1 roll 434 width div floor width mul 4 1 roll
435 2 index sub height div ceiling cvi exch 435 2 index sub height div ceiling cvi exch
436 3 index sub width div ceiling cvi exch 436 3 index sub width div ceiling cvi exch
437 4 2 roll moveto 437 4 2 roll moveto
438 FontMatrix mtx invertmatrix 438 FontMatrix mtx invertmatrix
439 dup dup 4 get exch 5 get rmoveto 439 dup dup 4 get exch 5 get rmoveto
440 ptm ptm concatmatrix pop 440 ptm ptm concatmatrix pop
441 slice /s 441 slice /s
442 patterncachesize patterncachelimit div ceiling sqrt ceiling cvi 442 patterncachesize patterncachelimit div ceiling sqrt ceiling cvi
443 dup slice /q get gt 443 dup slice /q get gt
444 { 444 {
445 pop slice /q get 445 pop slice /q get
446 } if 446 } if
447 put 447 put
448 0 1 slice /s get dup mul 1 sub 448 0 1 slice /s get dup mul 1 sub
449 { 449 {
450 slice /b get add 450 slice /b get add
451 gsave 451 gsave
452 0 1 str length 1 sub 452 0 1 str length 1 sub
453 { 453 {
454 str exch 2 index put 454 str exch 2 index put
455 } for 455 } for
456 pop 456 pop
457 dup 457 dup
458 { 458 {
459 gsave 459 gsave
460 ptm setmatrix 460 ptm setmatrix
461 1 index str length idiv {str show} repeat 461 1 index str length idiv {str show} repeat
462 1 index str length mod str exch 0 exch getinterval show 462 1 index str length mod str exch 0 exch getinterval show
463 grestore 463 grestore
464 0 height rmoveto 464 0 height rmoveto
465 } repeat 465 } repeat
466 grestore 466 grestore
467 } for 467 } for
468 2 npop 468 2 npop
469 } 469 }
470 { 470 {
471 4 npop 471 4 npop
472 } ifelse 472 } ifelse
473 } if 473 } if
474 end 474 end
475 } def 475 } def
476 /patternclip 476 /patternclip
477 { 477 {
478 clip 478 clip
479 } def 479 } def
480 /patternstrokepath 480 /patternstrokepath
481 { 481 {
482 strokepath 482 strokepath
483 } def 483 } def
484 /patternmatrix 484 /patternmatrix
485 matrix def 485 matrix def
486 /patternfill 486 /patternfill
487 { 487 {
488 dup type /dicttype eq 488 dup type /dicttype eq
489 { 489 {
490 Adobe_pattern_AI3 /patternmatrix get 490 Adobe_pattern_AI3 /patternmatrix get
491 } if 491 } if
492 gsave 492 gsave
493 patternclip 493 patternclip
494 Adobe_pattern_AI3 /patternpath get exec 494 Adobe_pattern_AI3 /patternpath get exec
495 grestore 495 grestore
496 newpath 496 newpath
497 } def 497 } def
498 /patternstroke 498 /patternstroke
499 { 499 {
500 dup type /dicttype eq 500 dup type /dicttype eq
501 { 501 {
502 Adobe_pattern_AI3 /patternmatrix get 502 Adobe_pattern_AI3 /patternmatrix get
503 } if 503 } if
504 gsave 504 gsave
505 patternstrokepath 505 patternstrokepath
506 true 506 true
507 { 507 {
508 { 508 {
509 { 509 {
510 newpath 510 newpath
511 moveto 511 moveto
512 } 512 }
513 { 513 {
514 lineto 514 lineto
515 } 515 }
516 { 516 {
517 curveto 517 curveto
518 } 518 }
519 { 519 {
520 closepath 520 closepath
521 3 copy 521 3 copy
522 Adobe_pattern_AI3 /patternfill get exec 522 Adobe_pattern_AI3 /patternfill get exec
523 } pathforall 523 } pathforall
524 3 npop 524 3 npop
525 } stopped 525 } stopped
526 { 526 {
527 5 npop 527 5 npop
528 patternclip 528 patternclip
529 Adobe_pattern_AI3 /patternfill get exec 529 Adobe_pattern_AI3 /patternfill get exec
530 } if 530 } if
531 } 531 }
532 { 532 {
533 patternclip 533 patternclip
534 Adobe_pattern_AI3 /patternfill get exec 534 Adobe_pattern_AI3 /patternfill get exec
535 } ifelse 535 } ifelse
536 grestore 536 grestore
537 newpath 537 newpath
538 } def 538 } def
539 /patternashow 539 /patternashow
540 { 540 {
541 3 index type /dicttype eq 541 3 index type /dicttype eq
542 { 542 {
543 Adobe_pattern_AI3 /patternmatrix get 4 1 roll 543 Adobe_pattern_AI3 /patternmatrix get 4 1 roll
544 } if 544 } if
545 { 545 {
546 2 npop (0) exch 546 2 npop (0) exch
547 2 copy 0 exch put pop 547 2 copy 0 exch put pop
548 gsave 548 gsave
549 false charpath currentpoint 549 false charpath currentpoint
550 6 index 6 index 6 index 550 6 index 6 index 6 index
551 Adobe_pattern_AI3 /patternfill get exec 551 Adobe_pattern_AI3 /patternfill get exec
552 grestore 552 grestore
553 newpath moveto 553 newpath moveto
554 2 copy rmoveto 554 2 copy rmoveto
555 } exch cshow 555 } exch cshow
556 5 npop 556 5 npop
557 } def 557 } def
558 /patternawidthshow 558 /patternawidthshow
559 { 559 {
560 6 index type /dicttype eq 560 6 index type /dicttype eq
561 { 561 {
562 Adobe_pattern_AI3 /patternmatrix get 7 1 roll 562 Adobe_pattern_AI3 /patternmatrix get 7 1 roll
563 } if 563 } if
564 { 564 {
565 2 npop (0) exch 565 2 npop (0) exch
566 2 copy 0 exch put 566 2 copy 0 exch put
567 gsave 567 gsave
568 _sp eq {5 index 5 index rmoveto} if 568 _sp eq {5 index 5 index rmoveto} if
569 false charpath currentpoint 569 false charpath currentpoint
570 9 index 9 index 9 index 570 9 index 9 index 9 index
571 Adobe_pattern_AI3 /patternfill get exec 571 Adobe_pattern_AI3 /patternfill get exec
572 grestore 572 grestore
573 newpath moveto 573 newpath moveto
574 2 copy rmoveto 574 2 copy rmoveto
575 } exch cshow 575 } exch cshow
576 8 npop 576 8 npop
577 } def 577 } def
578 /patternashowstroke 578 /patternashowstroke
579 { 579 {
580 4 index type /dicttype eq 580 4 index type /dicttype eq
581 { 581 {
582 patternmatrix /patternmatrix get 5 1 roll 582 patternmatrix /patternmatrix get 5 1 roll
583 } if 583 } if
584 4 1 roll 584 4 1 roll
585 { 585 {
586 2 npop (0) exch 586 2 npop (0) exch
587 2 copy 0 exch put pop 587 2 copy 0 exch put pop
588 gsave 588 gsave
589 false charpath 589 false charpath
590 currentpoint 590 currentpoint
591 4 index setmatrix 591 4 index setmatrix
592 7 index 7 index 7 index 592 7 index 7 index 7 index
593 Adobe_pattern_AI3 /patternstroke get exec 593 Adobe_pattern_AI3 /patternstroke get exec
594 grestore 594 grestore
595 newpath moveto 595 newpath moveto
596 2 copy rmoveto 596 2 copy rmoveto
597 } exch cshow 597 } exch cshow
598 6 npop 598 6 npop
599 } def 599 } def
600 /patternawidthshowstroke 600 /patternawidthshowstroke
601 { 601 {
602 7 index type /dicttype eq 602 7 index type /dicttype eq
603 { 603 {
604 patternmatrix /patternmatrix get 8 1 roll 604 patternmatrix /patternmatrix get 8 1 roll
605 } if 605 } if
606 7 1 roll 606 7 1 roll
607 { 607 {
608 2 npop (0) exch 608 2 npop (0) exch
609 2 copy 0 exch put 609 2 copy 0 exch put
610 gsave 610 gsave
611 _sp eq {5 index 5 index rmoveto} if 611 _sp eq {5 index 5 index rmoveto} if
612 false charpath currentpoint 612 false charpath currentpoint
613 7 index setmatrix 613 7 index setmatrix
614 10 index 10 index 10 index 614 10 index 10 index 10 index
615 Adobe_pattern_AI3 /patternstroke get exec 615 Adobe_pattern_AI3 /patternstroke get exec
616 grestore 616 grestore
617 newpath moveto 617 newpath moveto
618 2 copy rmoveto 618 2 copy rmoveto
619 } exch cshow 619 } exch cshow
620 9 npop 620 9 npop
621 } def 621 } def
622 currentdict readonly pop end 622 currentdict readonly pop end
623 setpacking 623 setpacking
624 %%EndResource 624 %%EndResource
625 %%BeginResource: procset Adobe_Illustrator_AI3 1.1 0 625 %%BeginResource: procset Adobe_Illustrator_AI3 1.1 0
626 %%Title: (Adobe Illustrator (R) Version 3.0 Full Prolog) 626 %%Title: (Adobe Illustrator (R) Version 3.0 Full Prolog)
627 %%Version: 1.1 0 627 %%Version: 1.1 0
628 %%CreationDate: (3/7/1994) () 628 %%CreationDate: (3/7/1994) ()
629 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) 629 %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
630 currentpacking true setpacking 630 currentpacking true setpacking
631 userdict /Adobe_Illustrator_AI3 71 dict dup begin put 631 userdict /Adobe_Illustrator_AI3 71 dict dup begin put
632 /initialize 632 /initialize
633 { 633 {
634 userdict /Adobe_Illustrator_AI3_vars 67 dict dup begin put 634 userdict /Adobe_Illustrator_AI3_vars 67 dict dup begin put
635 /_lp /none def 635 /_lp /none def
636 /_pf {} def 636 /_pf {} def
637 /_ps {} def 637 /_ps {} def
638 /_psf {} def 638 /_psf {} def
639 /_pss {} def 639 /_pss {} def
640 /_pjsf {} def 640 /_pjsf {} def
641 /_pjss {} def 641 /_pjss {} def
642 /_pola 0 def 642 /_pola 0 def
643 /_doClip 0 def 643 /_doClip 0 def
644 /cf currentflat def 644 /cf currentflat def
645 /_tm matrix def 645 /_tm matrix def
646 /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def 646 /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def
647 /_renderEnd [null null null null /i1 /i1 /i1 /i1] def 647 /_renderEnd [null null null null /i1 /i1 /i1 /i1] def
648 /_render -1 def 648 /_render -1 def
649 /_rise 0 def 649 /_rise 0 def
650 /_ax 0 def 650 /_ax 0 def
651 /_ay 0 def 651 /_ay 0 def
652 /_cx 0 def 652 /_cx 0 def
653 /_cy 0 def 653 /_cy 0 def
654 /_leading [0 0] def 654 /_leading [0 0] def
655 /_ctm matrix def 655 /_ctm matrix def
656 /_mtx matrix def 656 /_mtx matrix def
657 /_sp 16#020 def 657 /_sp 16#020 def
658 /_hyphen (-) def 658 /_hyphen (-) def
659 /_fScl 0 def 659 /_fScl 0 def
660 /_cnt 0 def 660 /_cnt 0 def
661 /_hs 1 def 661 /_hs 1 def
662 /_nativeEncoding 0 def 662 /_nativeEncoding 0 def
663 /_useNativeEncoding 0 def 663 /_useNativeEncoding 0 def
664 /_tempEncode 0 def 664 /_tempEncode 0 def
665 /_pntr 0 def 665 /_pntr 0 def
666 /_tDict 2 dict def 666 /_tDict 2 dict def
667 /_wv 0 def 667 /_wv 0 def
668 /Tx {} def 668 /Tx {} def
669 /Tj {} def 669 /Tj {} def
670 /CRender {} def 670 /CRender {} def
671 /_AI3_savepage {} def 671 /_AI3_savepage {} def
672 /_gf null def 672 /_gf null def
673 /_cf 4 array def 673 /_cf 4 array def
674 /_if null def 674 /_if null def
675 /_of false def 675 /_of false def
676 /_fc {} def 676 /_fc {} def
677 /_gs null def 677 /_gs null def
678 /_cs 4 array def 678 /_cs 4 array def
679 /_is null def 679 /_is null def
680 /_os false def 680 /_os false def
681 /_sc {} def 681 /_sc {} def
682 /_pd 1 dict def 682 /_pd 1 dict def
683 /_ed 15 dict def 683 /_ed 15 dict def
684 /_pm matrix def 684 /_pm matrix def
685 /_fm null def 685 /_fm null def
686 /_fd null def 686 /_fd null def
687 /_fdd null def 687 /_fdd null def
688 /_sm null def 688 /_sm null def
689 /_sd null def 689 /_sd null def
690 /_sdd null def 690 /_sdd null def
691 /_i null def 691 /_i null def
692 Adobe_Illustrator_AI3 begin 692 Adobe_Illustrator_AI3 begin
693 Adobe_Illustrator_AI3 dup /nc get begin 693 Adobe_Illustrator_AI3 dup /nc get begin
694 { 694 {
695 dup xcheck 695 dup xcheck
696 { 696 {
697 bind 697 bind
698 } if 698 } if
699 pop pop 699 pop pop
700 } forall 700 } forall
701 end 701 end
702 end 702 end
703 end 703 end
704 Adobe_Illustrator_AI3 begin 704 Adobe_Illustrator_AI3 begin
705 Adobe_Illustrator_AI3_vars begin 705 Adobe_Illustrator_AI3_vars begin
706 newpath 706 newpath
707 } def 707 } def
708 /terminate 708 /terminate
709 { 709 {
710 end 710 end
711 end 711 end
712 } def 712 } def
713 /_ 713 /_
714 null def 714 null def
715 /ddef 715 /ddef
716 { 716 {
717 Adobe_Illustrator_AI3_vars 3 1 roll put 717 Adobe_Illustrator_AI3_vars 3 1 roll put
718 } def 718 } def
719 /xput 719 /xput
720 { 720 {
721 dup load dup length exch maxlength eq 721 dup load dup length exch maxlength eq
722 { 722 {
723 dup dup load dup 723 dup dup load dup
724 length 2 mul dict copy def 724 length 2 mul dict copy def
725 } if 725 } if
726 load begin def end 726 load begin def end
727 } def 727 } def
728 /npop 728 /npop
729 { 729 {
730 { 730 {
731 pop 731 pop
732 } repeat 732 } repeat
733 } def 733 } def
734 /sw 734 /sw
735 { 735 {
736 dup length exch stringwidth 736 dup length exch stringwidth
737 exch 5 -1 roll 3 index mul add 737 exch 5 -1 roll 3 index mul add
738 4 1 roll 3 1 roll mul add 738 4 1 roll 3 1 roll mul add
739 } def 739 } def
740 /swj 740 /swj
741 { 741 {
742 dup 4 1 roll 742 dup 4 1 roll
743 dup length exch stringwidth 743 dup length exch stringwidth
744 exch 5 -1 roll 3 index mul add 744 exch 5 -1 roll 3 index mul add
745 4 1 roll 3 1 roll mul add 745 4 1 roll 3 1 roll mul add
746 6 2 roll /_cnt 0 ddef 746 6 2 roll /_cnt 0 ddef
747 {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop 747 {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop
748 exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop 748 exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
749 } def 749 } def
750 /ss 750 /ss
751 { 751 {
752 4 1 roll 752 4 1 roll
753 { 753 {
754 2 npop 754 2 npop
755 (0) exch 2 copy 0 exch put pop 755 (0) exch 2 copy 0 exch put pop
756 gsave 756 gsave
757 false charpath currentpoint 757 false charpath currentpoint
758 4 index setmatrix 758 4 index setmatrix
759 stroke 759 stroke
760 grestore 760 grestore
761 moveto 761 moveto
762 2 copy rmoveto 762 2 copy rmoveto
763 } exch cshow 763 } exch cshow
764 3 npop 764 3 npop
765 } def 765 } def
766 /jss 766 /jss
767 { 767 {
768 4 1 roll 768 4 1 roll
769 { 769 {
770 2 npop 770 2 npop
771 (0) exch 2 copy 0 exch put 771 (0) exch 2 copy 0 exch put
772 gsave 772 gsave
773 _sp eq 773 _sp eq
774 { 774 {
775 exch 6 index 6 index 6 index 5 -1 roll widthshow 775 exch 6 index 6 index 6 index 5 -1 roll widthshow
776 currentpoint 776 currentpoint
777 } 777 }
778 { 778 {
779 false charpath currentpoint 779 false charpath currentpoint
780 4 index setmatrix stroke 780 4 index setmatrix stroke
781 }ifelse 781 }ifelse
782 grestore 782 grestore
783 moveto 783 moveto
784 2 copy rmoveto 784 2 copy rmoveto
785 } exch cshow 785 } exch cshow
786 6 npop 786 6 npop
787 } def 787 } def
788 /sp 788 /sp
789 { 789 {
790 { 790 {
791 2 npop (0) exch 791 2 npop (0) exch
792 2 copy 0 exch put pop 792 2 copy 0 exch put pop
793 false charpath 793 false charpath
794 2 copy rmoveto 794 2 copy rmoveto
795 } exch cshow 795 } exch cshow
796 2 npop 796 2 npop
797 } def 797 } def
798 /jsp 798 /jsp
799 { 799 {
800 { 800 {
801 2 npop 801 2 npop
802 (0) exch 2 copy 0 exch put 802 (0) exch 2 copy 0 exch put
803 _sp eq 803 _sp eq
804 { 804 {
805 exch 5 index 5 index 5 index 5 -1 roll widthshow 805 exch 5 index 5 index 5 index 5 -1 roll widthshow
806 } 806 }
807 { 807 {
808 false charpath 808 false charpath
809 }ifelse 809 }ifelse
810 2 copy rmoveto 810 2 copy rmoveto
811 } exch cshow 811 } exch cshow
812 5 npop 812 5 npop
813 } def 813 } def
814 /pl 814 /pl
815 { 815 {
816 transform 816 transform
817 0.25 sub round 0.25 add exch 817 0.25 sub round 0.25 add exch
818 0.25 sub round 0.25 add exch 818 0.25 sub round 0.25 add exch
819 itransform 819 itransform
820 } def 820 } def
821 /setstrokeadjust where 821 /setstrokeadjust where
822 { 822 {
823 pop true setstrokeadjust 823 pop true setstrokeadjust
824 /c 824 /c
825 { 825 {
826 curveto 826 curveto
827 } def 827 } def
828 /C 828 /C
829 /c load def 829 /c load def
830 /v 830 /v
831 { 831 {
832 currentpoint 6 2 roll curveto 832 currentpoint 6 2 roll curveto
833 } def 833 } def
834 /V 834 /V
835 /v load def 835 /v load def
836 /y 836 /y
837 { 837 {
838 2 copy curveto 838 2 copy curveto
839 } def 839 } def
840 /Y 840 /Y
841 /y load def 841 /y load def
842 /l 842 /l
843 { 843 {
844 lineto 844 lineto
845 } def 845 } def
846 /L 846 /L
847 /l load def 847 /l load def
848 /m 848 /m
849 { 849 {
850 moveto 850 moveto
851 } def 851 } def
852 } 852 }
853 { 853 {
854 /c 854 /c
855 { 855 {
856 pl curveto 856 pl curveto
857 } def 857 } def
858 /C 858 /C
859 /c load def 859 /c load def
860 /v 860 /v
861 { 861 {
862 currentpoint 6 2 roll pl curveto 862 currentpoint 6 2 roll pl curveto
863 } def 863 } def
864 /V 864 /V
865 /v load def 865 /v load def
866 /y 866 /y
867 { 867 {
868 pl 2 copy curveto 868 pl 2 copy curveto
869 } def 869 } def
870 /Y 870 /Y
871 /y load def 871 /y load def
872 /l 872 /l
873 { 873 {
874 pl lineto 874 pl lineto
875 } def 875 } def
876 /L 876 /L
877 /l load def 877 /l load def
878 /m 878 /m
879 { 879 {
880 pl moveto 880 pl moveto
881 } def 881 } def
882 } ifelse 882 } ifelse
883 /d 883 /d
884 { 884 {
885 setdash 885 setdash
886 } def 886 } def
887 /cf {} def 887 /cf {} def
888 /i 888 /i
889 { 889 {
890 dup 0 eq 890 dup 0 eq
891 { 891 {
892 pop cf 892 pop cf
893 } if 893 } if
894 setflat 894 setflat
895 } def 895 } def
896 /j 896 /j
897 { 897 {
898 setlinejoin 898 setlinejoin
899 } def 899 } def
900 /J 900 /J
901 { 901 {
902 setlinecap 902 setlinecap
903 } def 903 } def
904 /M 904 /M
905 { 905 {
906 setmiterlimit 906 setmiterlimit
907 } def 907 } def
908 /w 908 /w
909 { 909 {
910 setlinewidth 910 setlinewidth
911 } def 911 } def
912 /H 912 /H
913 {} def 913 {} def
914 /h 914 /h
915 { 915 {
916 closepath 916 closepath
917 } def 917 } def
918 /N 918 /N
919 { 919 {
920 _pola 0 eq 920 _pola 0 eq
921 { 921 {
922 _doClip 1 eq {clip /_doClip 0 ddef} if 922 _doClip 1 eq {clip /_doClip 0 ddef} if
923 newpath 923 newpath
924 } 924 }
925 { 925 {
926 /CRender {N} ddef 926 /CRender {N} ddef
927 }ifelse 927 }ifelse
928 } def 928 } def
929 /n 929 /n
930 {N} def 930 {N} def
931 /F 931 /F
932 { 932 {
933 _pola 0 eq 933 _pola 0 eq
934 { 934 {
935 _doClip 1 eq 935 _doClip 1 eq
936 { 936 {
937 gsave _pf grestore clip newpath /_lp /none ddef _fc 937 gsave _pf grestore clip newpath /_lp /none ddef _fc
938 /_doClip 0 ddef 938 /_doClip 0 ddef
939 } 939 }
940 { 940 {
941 _pf 941 _pf
942 }ifelse 942 }ifelse
943 } 943 }
944 { 944 {
945 /CRender {F} ddef 945 /CRender {F} ddef
946 }ifelse 946 }ifelse
947 } def 947 } def
948 /f 948 /f
949 { 949 {
950 closepath 950 closepath
951 F 951 F
952 } def 952 } def
953 /S 953 /S
954 { 954 {
955 _pola 0 eq 955 _pola 0 eq
956 { 956 {
957 _doClip 1 eq 957 _doClip 1 eq
958 { 958 {
959 gsave _ps grestore clip newpath /_lp /none ddef _sc 959 gsave _ps grestore clip newpath /_lp /none ddef _sc
960 /_doClip 0 ddef 960 /_doClip 0 ddef
961 } 961 }
962 { 962 {
963 _ps 963 _ps
964 }ifelse 964 }ifelse
965 } 965 }
966 { 966 {
967 /CRender {S} ddef 967 /CRender {S} ddef
968 }ifelse 968 }ifelse
969 } def 969 } def
970 /s 970 /s
971 { 971 {
972 closepath 972 closepath
973 S 973 S
974 } def 974 } def
975 /B 975 /B
976 { 976 {
977 _pola 0 eq 977 _pola 0 eq
978 { 978 {
979 _doClip 1 eq 979 _doClip 1 eq
980 gsave F grestore 980 gsave F grestore
981 { 981 {
982 gsave S grestore clip newpath /_lp /none ddef _sc 982 gsave S grestore clip newpath /_lp /none ddef _sc
983 /_doClip 0 ddef 983 /_doClip 0 ddef
984 } 984 }
985 { 985 {
986 S 986 S
987 }ifelse 987 }ifelse
988 } 988 }
989 { 989 {
990 /CRender {B} ddef 990 /CRender {B} ddef
991 }ifelse 991 }ifelse
992 } def 992 } def
993 /b 993 /b
994 { 994 {
995 closepath 995 closepath
996 B 996 B
997 } def 997 } def
998 /W 998 /W
999 { 999 {
1000 /_doClip 1 ddef 1000 /_doClip 1 ddef
1001 } def 1001 } def
1002 /* 1002 /*
1003 { 1003 {
1004 count 0 ne 1004 count 0 ne
1005 { 1005 {
1006 dup type (stringtype) eq {pop} if 1006 dup type (stringtype) eq {pop} if
1007 } if 1007 } if
1008 _pola 0 eq {newpath} if 1008 _pola 0 eq {newpath} if
1009 } def 1009 } def
1010 /u 1010 /u
1011 {} def 1011 {} def
1012 /U 1012 /U
1013 {} def 1013 {} def
1014 /q 1014 /q
1015 { 1015 {
1016 _pola 0 eq {gsave} if 1016 _pola 0 eq {gsave} if
1017 } def 1017 } def
1018 /Q 1018 /Q
1019 { 1019 {
1020 _pola 0 eq {grestore} if 1020 _pola 0 eq {grestore} if
1021 } def 1021 } def
1022 /*u 1022 /*u
1023 { 1023 {
1024 _pola 1 add /_pola exch ddef 1024 _pola 1 add /_pola exch ddef
1025 } def 1025 } def
1026 /*U 1026 /*U
1027 { 1027 {
1028 _pola 1 sub /_pola exch ddef 1028 _pola 1 sub /_pola exch ddef
1029 _pola 0 eq {CRender} if 1029 _pola 0 eq {CRender} if
1030 } def 1030 } def
1031 /D 1031 /D
1032 {pop} def 1032 {pop} def
1033 /*w 1033 /*w
1034 {} def 1034 {} def
1035 /*W 1035 /*W
1036 {} def 1036 {} def
1037 /` 1037 /`
1038 { 1038 {
1039 /_i save ddef 1039 /_i save ddef
1040 6 1 roll 4 npop 1040 6 1 roll 4 npop
1041 concat pop 1041 concat pop
1042 userdict begin 1042 userdict begin
1043 /showpage {} def 1043 /showpage {} def
1044 0 setgray 1044 0 setgray
1045 0 setlinecap 1045 0 setlinecap
1046 1 setlinewidth 1046 1 setlinewidth
1047 0 setlinejoin 1047 0 setlinejoin
1048 10 setmiterlimit 1048 10 setmiterlimit
1049 [] 0 setdash 1049 [] 0 setdash
1050 /setstrokeadjust where {pop false setstrokeadjust} if 1050 /setstrokeadjust where {pop false setstrokeadjust} if
1051 newpath 1051 newpath
1052 0 setgray 1052 0 setgray
1053 false setoverprint 1053 false setoverprint
1054 } def 1054 } def
1055 /~ 1055 /~
1056 { 1056 {
1057 end 1057 end
1058 _i restore 1058 _i restore
1059 } def 1059 } def
1060 /@ 1060 /@
1061 {} def 1061 {} def
1062 /& 1062 /&
1063 {} def 1063 {} def
1064 /O 1064 /O
1065 { 1065 {
1066 0 ne 1066 0 ne
1067 /_of exch ddef 1067 /_of exch ddef
1068 /_lp /none ddef 1068 /_lp /none ddef
1069 } def 1069 } def
1070 /R 1070 /R
1071 { 1071 {
1072 0 ne 1072 0 ne
1073 /_os exch ddef 1073 /_os exch ddef
1074 /_lp /none ddef 1074 /_lp /none ddef
1075 } def 1075 } def
1076 /g 1076 /g
1077 { 1077 {
1078 /_gf exch ddef 1078 /_gf exch ddef
1079 /_fc 1079 /_fc
1080 { 1080 {
1081 _lp /fill ne 1081 _lp /fill ne
1082 { 1082 {
1083 _of setoverprint 1083 _of setoverprint
1084 _gf setgray 1084 _gf setgray
1085 /_lp /fill ddef 1085 /_lp /fill ddef
1086 } if 1086 } if
1087 } ddef 1087 } ddef
1088 /_pf 1088 /_pf
1089 { 1089 {
1090 _fc 1090 _fc
1091 fill 1091 fill
1092 } ddef 1092 } ddef
1093 /_psf 1093 /_psf
1094 { 1094 {
1095 _fc 1095 _fc
1096 ashow 1096 ashow
1097 } ddef 1097 } ddef
1098 /_pjsf 1098 /_pjsf
1099 { 1099 {
1100 _fc 1100 _fc
1101 awidthshow 1101 awidthshow
1102 } ddef 1102 } ddef
1103 /_lp /none ddef 1103 /_lp /none ddef
1104 } def 1104 } def
1105 /G 1105 /G
1106 { 1106 {
1107 /_gs exch ddef 1107 /_gs exch ddef
1108 /_sc 1108 /_sc
1109 { 1109 {
1110 _lp /stroke ne 1110 _lp /stroke ne
1111 { 1111 {
1112 _os setoverprint 1112 _os setoverprint
1113 _gs setgray 1113 _gs setgray
1114 /_lp /stroke ddef 1114 /_lp /stroke ddef
1115 } if 1115 } if
1116 } ddef 1116 } ddef
1117 /_ps 1117 /_ps
1118 { 1118 {
1119 _sc 1119 _sc
1120 stroke 1120 stroke
1121 } ddef 1121 } ddef
1122 /_pss 1122 /_pss
1123 { 1123 {
1124 _sc 1124 _sc
1125 ss 1125 ss
1126 } ddef 1126 } ddef
1127 /_pjss 1127 /_pjss
1128 { 1128 {
1129 _sc 1129 _sc
1130 jss 1130 jss
1131 } ddef 1131 } ddef
1132 /_lp /none ddef 1132 /_lp /none ddef
1133 } def 1133 } def
1134 /k 1134 /k
1135 { 1135 {
1136 _cf astore pop 1136 _cf astore pop
1137 /_fc 1137 /_fc
1138 { 1138 {
1139 _lp /fill ne 1139 _lp /fill ne
1140 { 1140 {
1141 _of setoverprint 1141 _of setoverprint
1142 _cf aload pop setcmykcolor 1142 _cf aload pop setcmykcolor
1143 /_lp /fill ddef 1143 /_lp /fill ddef
1144 } if 1144 } if
1145 } ddef 1145 } ddef
1146 /_pf 1146 /_pf
1147 { 1147 {
1148 _fc 1148 _fc
1149 fill 1149 fill
1150 } ddef 1150 } ddef
1151 /_psf 1151 /_psf
1152 { 1152 {
1153 _fc 1153 _fc
1154 ashow 1154 ashow
1155 } ddef 1155 } ddef
1156 /_pjsf 1156 /_pjsf
1157 { 1157 {
1158 _fc 1158 _fc
1159 awidthshow 1159 awidthshow
1160 } ddef 1160 } ddef
1161 /_lp /none ddef 1161 /_lp /none ddef
1162 } def 1162 } def
1163 /K 1163 /K
1164 { 1164 {
1165 _cs astore pop 1165 _cs astore pop
1166 /_sc 1166 /_sc
1167 { 1167 {
1168 _lp /stroke ne 1168 _lp /stroke ne
1169 { 1169 {
1170 _os setoverprint 1170 _os setoverprint
1171 _cs aload pop setcmykcolor 1171 _cs aload pop setcmykcolor
1172 /_lp /stroke ddef 1172 /_lp /stroke ddef
1173 } if 1173 } if
1174 } ddef 1174 } ddef
1175 /_ps 1175 /_ps
1176 { 1176 {
1177 _sc 1177 _sc
1178 stroke 1178 stroke
1179 } ddef 1179 } ddef
1180 /_pss 1180 /_pss
1181 { 1181 {
1182 _sc 1182 _sc
1183 ss 1183 ss
1184 } ddef 1184 } ddef
1185 /_pjss 1185 /_pjss
1186 { 1186 {
1187 _sc 1187 _sc
1188 jss 1188 jss
1189 } ddef 1189 } ddef
1190 /_lp /none ddef 1190 /_lp /none ddef
1191 } def 1191 } def
1192 /x 1192 /x
1193 { 1193 {
1194 /_gf exch ddef 1194 /_gf exch ddef
1195 findcmykcustomcolor 1195 findcmykcustomcolor
1196 /_if exch ddef 1196 /_if exch ddef
1197 /_fc 1197 /_fc
1198 { 1198 {
1199 _lp /fill ne 1199 _lp /fill ne
1200 { 1200 {
1201 _of setoverprint 1201 _of setoverprint
1202 _if _gf 1 exch sub setcustomcolor 1202 _if _gf 1 exch sub setcustomcolor
1203 /_lp /fill ddef 1203 /_lp /fill ddef
1204 } if 1204 } if
1205 } ddef 1205 } ddef
1206 /_pf 1206 /_pf
1207 { 1207 {
1208 _fc 1208 _fc
1209 fill 1209 fill
1210 } ddef 1210 } ddef
1211 /_psf 1211 /_psf
1212 { 1212 {
1213 _fc 1213 _fc
1214 ashow 1214 ashow
1215 } ddef 1215 } ddef
1216 /_pjsf 1216 /_pjsf
1217 { 1217 {
1218 _fc 1218 _fc
1219 awidthshow 1219 awidthshow
1220 } ddef 1220 } ddef
1221 /_lp /none ddef 1221 /_lp /none ddef
1222 } def 1222 } def
1223 /X 1223 /X
1224 { 1224 {
1225 /_gs exch ddef 1225 /_gs exch ddef
1226 findcmykcustomcolor 1226 findcmykcustomcolor
1227 /_is exch ddef 1227 /_is exch ddef
1228 /_sc 1228 /_sc
1229 { 1229 {
1230 _lp /stroke ne 1230 _lp /stroke ne
1231 { 1231 {
1232 _os setoverprint 1232 _os setoverprint
1233 _is _gs 1 exch sub setcustomcolor 1233 _is _gs 1 exch sub setcustomcolor
1234 /_lp /stroke ddef 1234 /_lp /stroke ddef
1235 } if 1235 } if
1236 } ddef 1236 } ddef
1237 /_ps 1237 /_ps
1238 { 1238 {
1239 _sc 1239 _sc
1240 stroke 1240 stroke
1241 } ddef 1241 } ddef
1242 /_pss 1242 /_pss
1243 { 1243 {
1244 _sc 1244 _sc
1245 ss 1245 ss
1246 } ddef 1246 } ddef
1247 /_pjss 1247 /_pjss
1248 { 1248 {
1249 _sc 1249 _sc
1250 jss 1250 jss
1251 } ddef 1251 } ddef
1252 /_lp /none ddef 1252 /_lp /none ddef
1253 } def 1253 } def
1254 /dp 1254 /dp
1255 { 1255 {
1256 dup null eq 1256 dup null eq
1257 { 1257 {
1258 pop 1258 pop
1259 _dp 0 ne 1259 _dp 0 ne
1260 { 1260 {
1261 0 1 _dp 1 sub _dl mod 1261 0 1 _dp 1 sub _dl mod
1262 { 1262 {
1263 _da exch get 3 get 1263 _da exch get 3 get
1264 } for 1264 } for
1265 _dp 1 sub _dl mod 1 add packedarray 1265 _dp 1 sub _dl mod 1 add packedarray
1266 _da 0 get aload pop 8 -1 roll 5 -1 roll pop 4 1 roll 1266 _da 0 get aload pop 8 -1 roll 5 -1 roll pop 4 1 roll
1267 definepattern pop 1267 definepattern pop
1268 } if 1268 } if
1269 } 1269 }
1270 { 1270 {
1271 _dp 0 ne _dp _dl mod 0 eq and 1271 _dp 0 ne _dp _dl mod 0 eq and
1272 { 1272 {
1273 null dp 1273 null dp
1274 } if 1274 } if
1275 7 packedarray _da exch _dp _dl mod exch put 1275 7 packedarray _da exch _dp _dl mod exch put
1276 _dp _dl mod _da 0 get 4 get 2 packedarray 1276 _dp _dl mod _da 0 get 4 get 2 packedarray
1277 /_dp _dp 1 add def 1277 /_dp _dp 1 add def
1278 } ifelse 1278 } ifelse
1279 } def 1279 } def
1280 /E 1280 /E
1281 { 1281 {
1282 _ed begin 1282 _ed begin
1283 dup 0 get type /arraytype ne 1283 dup 0 get type /arraytype ne
1284 { 1284 {
1285 0 1285 0
1286 { 1286 {
1287 dup 1 add index type /arraytype eq 1287 dup 1 add index type /arraytype eq
1288 { 1288 {
1289 1 add 1289 1 add
1290 } 1290 }
1291 { 1291 {
1292 exit 1292 exit
1293 } ifelse 1293 } ifelse
1294 } loop 1294 } loop
1295 array astore 1295 array astore
1296 } if 1296 } if
1297 /_dd exch def 1297 /_dd exch def
1298 /_ury exch def 1298 /_ury exch def
1299 /_urx exch def 1299 /_urx exch def
1300 /_lly exch def 1300 /_lly exch def
1301 /_llx exch def 1301 /_llx exch def
1302 /_n exch def 1302 /_n exch def
1303 /_y 0 def 1303 /_y 0 def
1304 /_dl 4 def 1304 /_dl 4 def
1305 /_dp 0 def 1305 /_dp 0 def
1306 /_da _dl array def 1306 /_da _dl array def
1307 0 1 _dd length 1 sub 1307 0 1 _dd length 1 sub
1308 { 1308 {
1309 /_d exch _dd exch get def 1309 /_d exch _dd exch get def
1310 0 2 _d length 2 sub 1310 0 2 _d length 2 sub
1311 { 1311 {
1312 /_x exch def 1312 /_x exch def
1313 /_c _d _x get _ ne def 1313 /_c _d _x get _ ne def
1314 /_r _d _x 1 add get cvlit def 1314 /_r _d _x 1 add get cvlit def
1315 _r _ ne 1315 _r _ ne
1316 { 1316 {
1317 _urx _llx sub _ury _lly sub [1 0 0 1 0 0] 1317 _urx _llx sub _ury _lly sub [1 0 0 1 0 0]
1318 [ 1318 [
1319 /save cvx 1319 /save cvx
1320 _llx neg _lly neg /translate cvx 1320 _llx neg _lly neg /translate cvx
1321 _c 1321 _c
1322 { 1322 {
1323 nc /begin cvx 1323 nc /begin cvx
1324 } if 1324 } if
1325 _r dup type /stringtype eq 1325 _r dup type /stringtype eq
1326 { 1326 {
1327 cvx 1327 cvx
1328 } 1328 }
1329 { 1329 {
1330 {exec} /forall cvx 1330 {exec} /forall cvx
1331 } ifelse 1331 } ifelse
1332 _c 1332 _c
1333 { 1333 {
1334 /end cvx 1334 /end cvx
1335 } if 1335 } if
1336 /restore cvx 1336 /restore cvx
1337 ] cvx 1337 ] cvx
1338 /_fn 12 _n length add string def 1338 /_fn 12 _n length add string def
1339 _y _fn cvs pop 1339 _y _fn cvs pop
1340 /_y _y 1 add def 1340 /_y _y 1 add def
1341 _fn 12 _n putinterval 1341 _fn 12 _n putinterval
1342 _fn _c false dp 1342 _fn _c false dp
1343 _d exch _x 1 add exch put 1343 _d exch _x 1 add exch put
1344 } if 1344 } if
1345 } for 1345 } for
1346 } for 1346 } for
1347 null dp 1347 null dp
1348 _n _dd /_pd 1348 _n _dd /_pd
1349 end xput 1349 end xput
1350 } def 1350 } def
1351 /fc 1351 /fc
1352 { 1352 {
1353 _fm dup concatmatrix pop 1353 _fm dup concatmatrix pop
1354 } def 1354 } def
1355 /p 1355 /p
1356 { 1356 {
1357 /_fm exch ddef 1357 /_fm exch ddef
1358 9 -2 roll _pm translate fc 1358 9 -2 roll _pm translate fc
1359 7 -2 roll _pm scale fc 1359 7 -2 roll _pm scale fc
1360 5 -1 roll _pm rotate fc 1360 5 -1 roll _pm rotate fc
1361 4 -2 roll exch 0 ne 1361 4 -2 roll exch 0 ne
1362 { 1362 {
1363 dup _pm rotate fc 1363 dup _pm rotate fc
1364 1 -1 _pm scale fc 1364 1 -1 _pm scale fc
1365 neg _pm rotate fc 1365 neg _pm rotate fc
1366 } 1366 }
1367 { 1367 {
1368 pop 1368 pop
1369 } ifelse 1369 } ifelse
1370 dup _pm rotate fc 1370 dup _pm rotate fc
1371 exch dup sin exch cos div 1 0 0 1 0 6 2 roll 1371 exch dup sin exch cos div 1 0 0 1 0 6 2 roll
1372 _pm astore fc 1372 _pm astore fc
1373 neg _pm rotate fc 1373 neg _pm rotate fc
1374 _pd exch get /_fdd exch ddef 1374 _pd exch get /_fdd exch ddef
1375 /_pf 1375 /_pf
1376 { 1376 {
1377 save 1377 save
1378 /_doClip 0 ddef 1378 /_doClip 0 ddef
1379 0 1 _fdd length 1 sub 1379 0 1 _fdd length 1 sub
1380 { 1380 {
1381 /_fd exch _fdd exch get ddef 1381 /_fd exch _fdd exch get ddef
1382 _fd 1382 _fd
1383 0 2 _fd length 2 sub 1383 0 2 _fd length 2 sub
1384 { 1384 {
1385 gsave 1385 gsave
1386 2 copy get dup _ ne 1386 2 copy get dup _ ne
1387 { 1387 {
1388 cvx exec _fc 1388 cvx exec _fc
1389 } 1389 }
1390 { 1390 {
1391 pop 1391 pop
1392 } ifelse 1392 } ifelse
1393 2 copy 1 add get dup _ ne 1393 2 copy 1 add get dup _ ne
1394 { 1394 {
1395 aload pop findfont _fm 1395 aload pop findfont _fm
1396 patternfill 1396 patternfill
1397 } 1397 }
1398 { 1398 {
1399 pop 1399 pop
1400 fill 1400 fill
1401 } ifelse 1401 } ifelse
1402 grestore 1402 grestore
1403 pop 1403 pop
1404 } for 1404 } for
1405 pop 1405 pop
1406 } for 1406 } for
1407 restore 1407 restore
1408 newpath 1408 newpath
1409 } ddef 1409 } ddef
1410 /_psf 1410 /_psf
1411 { 1411 {
1412 save 1412 save
1413 /_doClip 0 ddef 1413 /_doClip 0 ddef
1414 0 1 _fdd length 1 sub 1414 0 1 _fdd length 1 sub
1415 { 1415 {
1416 /_fd exch _fdd exch get ddef 1416 /_fd exch _fdd exch get ddef
1417 _fd 1417 _fd
1418 0 2 _fd length 2 sub 1418 0 2 _fd length 2 sub
1419 { 1419 {
1420 gsave 1420 gsave
1421 2 copy get dup _ ne 1421 2 copy get dup _ ne
1422 { 1422 {
1423 cvx exec _fc 1423 cvx exec _fc
1424 } 1424 }
1425 { 1425 {
1426 pop 1426 pop
1427 } ifelse 1427 } ifelse
1428 2 copy 1 add get dup _ ne 1428 2 copy 1 add get dup _ ne
1429 { 1429 {
1430 aload pop findfont _fm 1430 aload pop findfont _fm
1431 9 copy 6 npop patternashow 1431 9 copy 6 npop patternashow
1432 } 1432 }
1433 { 1433 {
1434 pop 1434 pop
1435 6 copy 3 npop ashow 1435 6 copy 3 npop ashow
1436 } ifelse 1436 } ifelse
1437 grestore 1437 grestore
1438 pop 1438 pop
1439 } for 1439 } for
1440 pop 1440 pop
1441 } for 1441 } for
1442 restore 1442 restore
1443 %3 npop newpath 1443 %3 npop newpath
1444 sw rmoveto 1444 sw rmoveto
1445 } ddef 1445 } ddef
1446 /_pjsf 1446 /_pjsf
1447 { 1447 {
1448 save 1448 save
1449 /_doClip 0 ddef 1449 /_doClip 0 ddef
1450 0 1 _fdd length 1 sub 1450 0 1 _fdd length 1 sub
1451 { 1451 {
1452 /_fd exch _fdd exch get ddef 1452 /_fd exch _fdd exch get ddef
1453 _fd 1453 _fd
1454 0 2 _fd length 2 sub 1454 0 2 _fd length 2 sub
1455 { 1455 {
1456 gsave 1456 gsave
1457 2 copy get dup _ ne 1457 2 copy get dup _ ne
1458 { 1458 {
1459 cvx exec _fc 1459 cvx exec _fc
1460 } 1460 }
1461 { 1461 {
1462 pop 1462 pop
1463 } ifelse 1463 } ifelse
1464 2 copy 1 add get dup _ ne 1464 2 copy 1 add get dup _ ne
1465 { 1465 {
1466 aload pop findfont _fm 1466 aload pop findfont _fm
1467 12 copy 6 npop patternawidthshow 1467 12 copy 6 npop patternawidthshow
1468 } 1468 }
1469 { 1469 {
1470 pop 9 copy 3 npop awidthshow 1470 pop 9 copy 3 npop awidthshow
1471 } ifelse 1471 } ifelse
1472 grestore 1472 grestore
1473 pop 1473 pop
1474 } for 1474 } for
1475 pop 1475 pop
1476 } for 1476 } for
1477 restore 1477 restore
1478 swj rmoveto 1478 swj rmoveto
1479 } ddef 1479 } ddef
1480 /_lp /none ddef 1480 /_lp /none ddef
1481 } def 1481 } def
1482 /sc 1482 /sc
1483 { 1483 {
1484 _sm dup concatmatrix pop 1484 _sm dup concatmatrix pop
1485 } def 1485 } def
1486 /P 1486 /P
1487 { 1487 {
1488 /_sm exch ddef 1488 /_sm exch ddef
1489 9 -2 roll _pm translate sc 1489 9 -2 roll _pm translate sc
1490 7 -2 roll _pm scale sc 1490 7 -2 roll _pm scale sc
1491 5 -1 roll _pm rotate sc 1491 5 -1 roll _pm rotate sc
1492 4 -2 roll exch 0 ne 1492 4 -2 roll exch 0 ne
1493 { 1493 {
1494 dup _pm rotate sc 1494 dup _pm rotate sc
1495 1 -1 _pm scale sc 1495 1 -1 _pm scale sc
1496 neg _pm rotate sc 1496 neg _pm rotate sc
1497 } 1497 }
1498 { 1498 {
1499 pop 1499 pop
1500 } ifelse 1500 } ifelse
1501 dup _pm rotate sc 1501 dup _pm rotate sc
1502 exch dup sin exch cos div 1 0 0 1 0 6 2 roll 1502 exch dup sin exch cos div 1 0 0 1 0 6 2 roll
1503 _pm astore sc 1503 _pm astore sc
1504 neg _pm rotate sc 1504 neg _pm rotate sc
1505 _pd exch get /_sdd exch ddef 1505 _pd exch get /_sdd exch ddef
1506 /_ps 1506 /_ps
1507 { 1507 {
1508 save 1508 save
1509 /_doClip 0 ddef 1509 /_doClip 0 ddef
1510 0 1 _sdd length 1 sub 1510 0 1 _sdd length 1 sub
1511 { 1511 {
1512 /_sd exch _sdd exch get ddef 1512 /_sd exch _sdd exch get ddef
1513 _sd 1513 _sd
1514 0 2 _sd length 2 sub 1514 0 2 _sd length 2 sub
1515 { 1515 {
1516 gsave 1516 gsave
1517 2 copy get dup _ ne 1517 2 copy get dup _ ne
1518 { 1518 {
1519 cvx exec _sc 1519 cvx exec _sc
1520 } 1520 }
1521 { 1521 {
1522 pop 1522 pop
1523 } ifelse 1523 } ifelse
1524 2 copy 1 add get dup _ ne 1524 2 copy 1 add get dup _ ne
1525 { 1525 {
1526 aload pop findfont _sm 1526 aload pop findfont _sm
1527 patternstroke 1527 patternstroke
1528 } 1528 }
1529 { 1529 {
1530 pop stroke 1530 pop stroke
1531 } ifelse 1531 } ifelse
1532 grestore 1532 grestore
1533 pop 1533 pop
1534 } for 1534 } for
1535 pop 1535 pop
1536 } for 1536 } for
1537 restore 1537 restore
1538 newpath 1538 newpath
1539 } ddef 1539 } ddef
1540 /_pss 1540 /_pss
1541 { 1541 {
1542 save 1542 save
1543 /_doClip 0 ddef 1543 /_doClip 0 ddef
1544 0 1 _sdd length 1 sub 1544 0 1 _sdd length 1 sub
1545 { 1545 {
1546 /_sd exch _sdd exch get ddef 1546 /_sd exch _sdd exch get ddef
1547 _sd 1547 _sd
1548 0 2 _sd length 2 sub 1548 0 2 _sd length 2 sub
1549 { 1549 {
1550 gsave 1550 gsave
1551 2 copy get dup _ ne 1551 2 copy get dup _ ne
1552 { 1552 {
1553 cvx exec _sc 1553 cvx exec _sc
1554 } 1554 }
1555 { 1555 {
1556 pop 1556 pop
1557 } ifelse 1557 } ifelse
1558 2 copy 1 add get dup _ ne 1558 2 copy 1 add get dup _ ne
1559 { 1559 {
1560 aload pop findfont _sm 1560 aload pop findfont _sm
1561 10 copy 6 npop patternashowstroke 1561 10 copy 6 npop patternashowstroke
1562 } 1562 }
1563 { 1563 {
1564 pop 7 copy 3 npop ss 1564 pop 7 copy 3 npop ss
1565 } ifelse 1565 } ifelse
1566 grestore 1566 grestore
1567 pop 1567 pop
1568 } for 1568 } for
1569 pop 1569 pop
1570 } for 1570 } for
1571 restore 1571 restore
1572 pop sw rmoveto 1572 pop sw rmoveto
1573 } ddef 1573 } ddef
1574 /_pjss 1574 /_pjss
1575 { 1575 {
1576 save 1576 save
1577 /_doClip 0 ddef 1577 /_doClip 0 ddef
1578 0 1 _sdd length 1 sub 1578 0 1 _sdd length 1 sub
1579 { 1579 {
1580 /_sd exch _sdd exch get ddef 1580 /_sd exch _sdd exch get ddef
1581 _sd 1581 _sd
1582 0 2 _sd length 2 sub 1582 0 2 _sd length 2 sub
1583 { 1583 {
1584 gsave 1584 gsave
1585 2 copy get dup _ ne 1585 2 copy get dup _ ne
1586 { 1586 {
1587 cvx exec _sc 1587 cvx exec _sc
1588 } 1588 }
1589 { 1589 {
1590 pop 1590 pop
1591 } ifelse 1591 } ifelse
1592 2 copy 1 add get dup _ ne 1592 2 copy 1 add get dup _ ne
1593 { 1593 {
1594 aload pop findfont _sm 1594 aload pop findfont _sm
1595 13 copy 6 npop patternawidthshowstroke 1595 13 copy 6 npop patternawidthshowstroke
1596 } 1596 }
1597 { 1597 {
1598 pop 10 copy 3 npop jss 1598 pop 10 copy 3 npop jss
1599 } ifelse 1599 } ifelse
1600 grestore 1600 grestore
1601 pop 1601 pop
1602 } for 1602 } for
1603 pop 1603 pop
1604 } for 1604 } for
1605 restore 1605 restore
1606 pop swj rmoveto 1606 pop swj rmoveto
1607 } ddef 1607 } ddef
1608 /_lp /none ddef 1608 /_lp /none ddef
1609 } def 1609 } def
1610 /A 1610 /A
1611 { 1611 {
1612 pop 1612 pop
1613 } def 1613 } def
1614 /nc 3 dict def 1614 /nc 3 dict def
1615 nc begin 1615 nc begin
1616 /setgray 1616 /setgray
1617 { 1617 {
1618 pop 1618 pop
1619 } bind def 1619 } bind def
1620 /setcmykcolor 1620 /setcmykcolor
1621 { 1621 {
1622 4 npop 1622 4 npop
1623 } bind def 1623 } bind def
1624 /setcustomcolor 1624 /setcustomcolor
1625 { 1625 {
1626 2 npop 1626 2 npop
1627 } bind def 1627 } bind def
1628 currentdict readonly pop end 1628 currentdict readonly pop end
1629 currentdict readonly pop end 1629 currentdict readonly pop end
1630 setpacking 1630 setpacking
1631 /annotatepage 1631 /annotatepage
1632 { 1632 {
1633 } def 1633 } def
1634 %%EndResource 1634 %%EndResource
1635 %%EndProlog 1635 %%EndProlog
1636 %%BeginSetup 1636 %%BeginSetup
1637 Adobe_cmykcolor /initialize get exec 1637 Adobe_cmykcolor /initialize get exec
1638 Adobe_cshow /initialize get exec 1638 Adobe_cshow /initialize get exec
1639 Adobe_customcolor /initialize get exec 1639 Adobe_customcolor /initialize get exec
1640 Adobe_pattern_AI3 /initialize get exec 1640 Adobe_pattern_AI3 /initialize get exec
1641 Adobe_Illustrator_AI3 /initialize get exec 1641 Adobe_Illustrator_AI3 /initialize get exec
1642 %%EndSetup 1642 %%EndSetup
1643 0 A 1643 0 A
1644 0 O 1644 0 O
1645 0.25 1 1 0.25 k 1645 0.25 1 1 0.25 k
1646 0 R 1646 0 R
1647 0 0 0 1 K 1647 0 0 0 1 K
1648 0 J 0 j 0.2 w 4 M []0 d 1648 0 J 0 j 0.2 w 4 M []0 d
1649 9.19971 841.8735 m 1649 9.19971 841.8735 m
1650 10.3311 842.1226 8.4126 839.4165 8 839.2729 c 1650 10.3311 842.1226 8.4126 839.4165 8 839.2729 c
1651 9.57471 839.1421 9.3999 839.0728 v 1651 9.57471 839.1421 9.3999 839.0728 v
1652 9 838.9233 8.8623 838.561 8.6001 838.2729 c 1652 9 838.9233 8.8623 838.561 8.6001 838.2729 c
1653 7.39355 836.9985 6.49365 836.7915 7.3999 834.8735 C 1653 7.39355 836.9985 6.49365 836.7915 7.3999 834.8735 C
1654 8.03125 834.9233 8.1626 835.1919 8.6001 834.8735 c 1654 8.03125 834.9233 8.1626 835.1919 8.6001 834.8735 c
1655 9.32471 834.3423 7.78125 832.979 10 832.0728 c 1655 9.32471 834.3423 7.78125 832.979 10 832.0728 c
1656 11.356 831.5229 14.1997 832.1792 15.7998 832.2729 C 1656 11.356 831.5229 14.1997 832.1792 15.7998 832.2729 C
1657 15.1997 831.8481 12.5186 830.4546 12.3999 829.6733 c 1657 15.1997 831.8481 12.5186 830.4546 12.3999 829.6733 c
1658 12.1812 828.2612 12.9434 828.686 13.5996 828.4731 C 1658 12.1812 828.2612 12.9434 828.686 13.5996 828.4731 C
1659 13.2998 827.2544 13.106 827.5854 14.1997 827.0737 C 1659 13.2998 827.2544 13.106 827.5854 14.1997 827.0737 C
1660 13.9058 825.7485 14.3687 824.8296 15.3999 824.0737 C 1660 13.9058 825.7485 14.3687 824.8296 15.3999 824.0737 C
1661 15.1309 824.0229 15.0996 823.2983 15.1997 823.4731 C 1661 15.1309 824.0229 15.0996 823.2983 15.1997 823.4731 C
1662 16.7246 820.23 19.1123 818.5229 21.9995 816.6733 C 1662 16.7246 820.23 19.1123 818.5229 21.9995 816.6733 C
1663 21.6309 816.3979 20.6558 815.2925 20.5996 815.2739 C 1663 21.6309 816.3979 20.6558 815.2925 20.5996 815.2739 C
1664 21.5811 815.061 22.6807 814.1675 23.1997 814.0737 c 1664 21.5811 815.061 22.6807 814.1675 23.1997 814.0737 c
1665 25.1621 813.7358 24.1309 815.5171 25.7998 814.2739 C 1665 25.1621 813.7358 24.1309 815.5171 25.7998 814.2739 C
1666 26.6689 815.0239 26.7061 815.8735 25.9995 816.2729 C 1666 26.6689 815.0239 26.7061 815.8735 25.9995 816.2729 C
1667 28.0439 816.4048 32.4873 820.0112 33.7998 821.6733 c 1667 28.0439 816.4048 32.4873 820.0112 33.7998 821.6733 c
1668 34.6494 822.7612 35.0557 823.9985 34.999 825.4731 C 1668 34.6494 822.7612 35.0557 823.9985 34.999 825.4731 C
1669 36.499 826.3667 36.6807 826.5669 35.999 828.0737 C 1669 36.499 826.3667 36.6807 826.5669 35.999 828.0737 C
1670 38.5498 828.7544 34.6494 830.9604 33.5996 831.6733 C 1670 38.5498 828.7544 34.6494 830.9604 33.5996 831.6733 C
1671 35.2559 831.6235 37.4619 830.6421 39.3994 831.0728 c 1671 35.2559 831.6235 37.4619 830.6421 39.3994 831.0728 c
1672 40.8428 831.4048 40.2432 832.3169 40.5996 833.2729 c 1672 40.8428 831.4048 40.2432 832.3169 40.5996 833.2729 c
1673 41.0186 834.4165 42.5557 833.5415 42.999 834.4731 c 1673 41.0186 834.4165 42.5557 833.5415 42.999 834.4731 c
1674 43.1182 834.7417 42.999 836.0728 Y 1674 43.1182 834.7417 42.999 836.0728 Y
1675 42.3311 836.8979 41.6055 837.5981 40.7998 838.2729 c 1675 42.3311 836.8979 41.6055 837.5981 40.7998 838.2729 c
1676 40.0811 838.8794 42.4736 838.6919 41.999 838.8735 c 1676 40.0811 838.8794 42.4736 838.6919 41.999 838.8735 c
1677 41.293 839.1479 40.9424 840.7671 40.5996 841.4731 C 1677 41.293 839.1479 40.9424 840.7671 40.5996 841.4731 C
1678 42.5557 840.1978 45.3623 837.6665 44.5986 833.8735 c 1678 42.5557 840.1978 45.3623 837.6665 44.5986 833.8735 c
1679 44.124 831.5298 41.2871 829.8423 40.1992 827.8735 c 1679 44.124 831.5298 41.2871 829.8423 40.1992 827.8735 c
1680 37.6934 823.3608 36.5117 817.7612 33.3994 813.8735 c 1680 37.6934 823.3608 36.5117 817.7612 33.3994 813.8735 c
1681 33.2178 813.6548 33.1182 813.3608 32.7998 813.2739 c 1681 33.2178 813.6548 33.1182 813.3608 32.7998 813.2739 c
1682 32.3496 813.1606 33.4121 812.8677 33.5996 812.8735 c 1682 32.3496 813.1606 33.4121 812.8677 33.5996 812.8735 c
1683 38.4121 813.0864 39.874 811.2544 40.7998 816.0737 C 1683 38.4121 813.0864 39.874 811.2544 40.7998 816.0737 C
1684 40.8428 815.8169 40.4053 818.0737 42.1992 818.6733 C 1684 40.8428 815.8169 40.4053 818.0737 42.1992 818.6733 C
1685 42.5557 815.4302 40.749 813.4673 39.3994 811.2739 C 1685 42.5557 815.4302 40.749 813.4673 39.3994 811.2739 C
1686 37.5996 811.7231 36.3115 812.2739 33.7998 812.2739 C 1686 37.5996 811.7231 36.3115 812.2739 33.7998 812.2739 C
1687 33.7998 810.0112 33.793 805.686 33.1992 804.4731 c 1687 33.7998 810.0112 33.793 805.686 33.1992 804.4731 c
1688 33.168 804.4233 32.6182 803.5981 32.7998 803.4731 c 1688 33.168 804.4233 32.6182 803.5981 32.7998 803.4731 c
1689 33.9248 802.7231 34.6367 801.4048 34.1992 800.0737 c 1689 33.9248 802.7231 34.6367 801.4048 34.1992 800.0737 c
1690 33.9365 799.3052 32.999 797.7427 33.7998 797.2739 c 1690 33.9365 799.3052 32.999 797.7427 33.7998 797.2739 c
1691 35.624 796.2114 37.168 797.3052 38.7998 796.8735 C 1691 35.624 796.2114 37.168 797.3052 38.7998 796.8735 C
1692 40.0742 800.6548 40.874 803.8608 42.1992 807.8735 C 1692 40.0742 800.6548 40.874 803.8608 42.1992 807.8735 C
1693 42.624 807.6987 42.6924 807.5425 42.999 807.2739 C 1693 42.624 807.6987 42.6924 807.5425 42.999 807.2739 C
1694 44.7861 810.73 46.999 812.7485 47.999 817.0737 C 1694 44.7861 810.73 46.999 812.7485 47.999 817.0737 C
1695 48.3994 815.8735 L 1695 48.3994 815.8735 L
1696 49.7373 815.98 49.999 816.0737 V 1696 49.7373 815.98 49.999 816.0737 V
1697 48.4678 814.7856 47.0674 812.6235 46.999 812.4731 c 1697 48.4678 814.7856 47.0674 812.6235 46.999 812.4731 c
1698 44.9561 809.3237 44.4111 808.8481 43.999 807.2739 C 1698 44.9561 809.3237 44.4111 808.8481 43.999 807.2739 C
1699 44.9932 807.2427 44.6494 807.5552 45.5986 806.6733 C 1699 44.9932 807.2427 44.6494 807.5552 45.5986 806.6733 C
1700 44.6436 805.8989 45.2686 805.9048 44.7998 805.0737 c 1700 44.6436 805.8989 45.2686 805.9048 44.7998 805.0737 c
1701 44.7617 805.0171 44.0742 805.0737 43.999 805.0737 C 1701 44.7617 805.0171 44.0742 805.0737 43.999 805.0737 C
1702 43.624 803.2427 42.4307 802.436 41.999 801.0737 c 1702 43.624 803.2427 42.4307 802.436 41.999 801.0737 c
1703 41.3994 799.2046 41.5557 798.2983 40.3994 796.4741 c 1703 41.3994 799.2046 41.5557 798.2983 40.3994 796.4741 c
1704 38.4561 793.4302 38.249 794.9546 34.5996 793.8745 c 1704 38.4561 793.4302 38.249 794.9546 34.5996 793.8745 c
1705 33.7686 792.7495 33.5996 792.6733 v 1705 33.7686 792.7495 33.5996 792.6733 v
1706 32.6748 792.2983 31.1309 792.1987 30.1992 792.0737 C 1706 32.6748 792.2983 31.1309 792.1987 30.1992 792.0737 C
1707 30.9619 790.1802 31.7998 790.4741 34.3994 790.4741 C 1707 30.9619 790.1802 31.7998 790.4741 34.3994 790.4741 C
1708 35.0371 788.0308 35.1934 789.2681 37.1992 788.2739 c 1708 35.0371 788.0308 35.1934 789.2681 37.1992 788.2739 c
1709 38.0742 787.8433 38.793 786.0991 39.3994 785.2739 c 1709 38.0742 787.8433 38.793 786.0991 39.3994 785.2739 c
1710 39.999 784.4614 41.499 783.8433 41.999 783.0737 c 1710 39.999 784.4614 41.499 783.8433 41.999 783.0737 c
1711 42.1807 782.7866 41.668 782.5308 41.5996 782.4741 C 1711 42.1807 782.7866 41.668 782.5308 41.5996 782.4741 C
1712 44.5049 779.7056 47.499 773.8804 51.1992 772.0737 c 1712 44.5049 779.7056 47.499 773.8804 51.1992 772.0737 c
1713 51.3242 772.0181 51.7803 771.8862 51.7998 771.8745 c 1713 51.3242 772.0181 51.7803 771.8862 51.7998 771.8745 c
1714 52.1436 771.6929 52.2178 771.3745 52.3994 771.2749 C 1714 52.1436 771.6929 52.2178 771.3745 52.3994 771.2749 C
1715 50.8682 771.6245 51.3057 771.1558 50.999 771.2749 C 1715 50.8682 771.6245 51.3057 771.1558 50.999 771.2749 C
1716 51.2178 769.8745 50.5986 769.8745 V 1716 51.2178 769.8745 50.5986 769.8745 V
1717 49.4561 774.1743 45.3369 775.1304 43.5986 778.8745 C 1717 49.4561 774.1743 45.3369 775.1304 43.5986 778.8745 C
1718 43.3555 778.4624 42.8369 778.3179 42.7998 778.2749 C 1718 43.3555 778.4624 42.8369 778.3179 42.7998 778.2749 C
1719 40.999 780.8931 38.7305 783.2056 37.3994 786.0737 C 1719 40.999 780.8931 38.7305 783.2056 37.3994 786.0737 C
1720 36.4248 785.9429 35.9678 785.9429 34.999 786.0737 C 1720 36.4248 785.9429 35.9678 785.9429 34.999 786.0737 C
1721 35.1553 784.6245 35.5244 783.0181 35.3994 781.2749 c 1721 35.1553 784.6245 35.5244 783.0181 35.3994 781.2749 c
1722 35.2432 779.2612 34.8623 776.6558 34.5996 774.6743 C 1722 35.2432 779.2612 34.8623 776.6558 34.5996 774.6743 C
1723 35.3623 774.3237 36.1309 773.9556 36.7998 773.4741 c 1723 35.3623 774.3237 36.1309 773.9556 36.7998 773.4741 c
1724 37.2559 773.1499 38.1992 772.437 38.3994 771.8745 c 1724 37.2559 773.1499 38.1992 772.437 38.3994 771.8745 c
1725 39.1621 769.6929 38.1992 765.2183 38.5996 762.0747 c 1725 39.1621 769.6929 38.1992 765.2183 38.5996 762.0747 c
1726 38.6748 761.437 39.2871 760.2368 39.1992 759.4741 c 1726 38.6748 761.437 39.2871 760.2368 39.1992 759.4741 c
1727 39.1494 759.0991 38.4619 758.9116 38.5996 758.0747 c 1727 39.1494 759.0991 38.4619 758.9116 38.5996 758.0747 c
1728 38.7686 757.0122 39.7549 755.5435 40.1992 754.6753 c 1728 38.7686 757.0122 39.7549 755.5435 40.1992 754.6753 c
1729 41.0811 752.9253 41.6924 751.1128 41.999 748.8745 C 1729 41.0811 752.9253 41.6924 751.1128 41.999 748.8745 C
1730 40.3496 749.8628 41.7373 748.5815 40.1992 748.0747 c 1730 40.3496 749.8628 41.7373 748.5815 40.1992 748.0747 c
1731 39.7061 747.9185 40.1992 748.8745 Y 1731 39.7061 747.9185 40.1992 748.8745 Y
1732 40.3115 751.7866 39.9424 753.1685 38.999 755.2749 c 1732 40.3115 751.7866 39.9424 753.1685 38.999 755.2749 c
1733 38.9492 755.3804 38.0498 756.2866 37.999 756.4741 c 1733 38.9492 755.3804 38.0498 756.2866 37.999 756.4741 c
1734 37.2178 759.269 36.6367 763.4556 36.999 767.4741 c 1734 37.2178 759.269 36.6367 763.4556 36.999 767.4741 c
1735 37.1992 769.7495 37.5303 770.1245 35.999 770.8745 c 1735 37.1992 769.7495 37.5303 770.1245 35.999 770.8745 c
1736 35.3311 771.2056 34.8994 771.2437 33.999 771.4741 C 1736 35.3311 771.2056 34.8994 771.2437 33.999 771.4741 C
1737 33.3057 768.7056 32.5557 766.3491 30.999 764.4741 c 1737 33.3057 768.7056 32.5557 766.3491 30.999 764.4741 c
1738 27.2686 759.9995 20.481 761.3491 17.9995 766.0737 c 1738 27.2686 759.9995 20.481 761.3491 17.9995 766.0737 c
1739 17.1621 767.6675 16.3745 769.3179 15.7998 771.2749 C 1739 17.1621 767.6675 16.3745 769.3179 15.7998 771.2749 C
1740 14.7061 770.8745 14.106 770.73 13 770.2749 C 1740 14.7061 770.8745 14.106 770.73 13 770.2749 C
1741 13.5308 766.6675 12.6812 763.0366 12.7998 760.0747 C 1741 13.5308 766.6675 12.6812 763.0366 12.7998 760.0747 C
1742 12.5308 760.4312 12.0562 760.731 11.7998 761.0747 C 1742 12.5308 760.4312 12.0562 760.731 11.7998 761.0747 C
1743 10.4248 756.4253 6.0376 755.6304 5 750.2749 C 1743 10.4248 756.4253 6.0376 755.6304 5 750.2749 C
1744 4.7998 752.7437 4 751.8745 Y 1744 4.7998 752.7437 4 751.8745 Y
1745 3.20605 751.9312 3.625 752.4683 3.6001 752.4741 C 1745 3.20605 751.9312 3.625 752.4683 3.6001 752.4741 C
1746 5.65625 753.9116 9.43115 757.1304 10.3999 759.4741 c 1746 5.65625 753.9116 9.43115 757.1304 10.3999 759.4741 c
1747 11.6875 762.606 10.7437 769.3433 12 771.8745 c 1747 11.6875 762.606 10.7437 769.3433 12 771.8745 c
1748 12.4497 772.7993 14.3062 773.5366 15.1997 774.0737 C 1748 12.4497 772.7993 14.3062 773.5366 15.1997 774.0737 C
1749 14.7124 777.6558 14.1436 781.7925 14.5996 785.8745 C 1749 14.7124 777.6558 14.1436 781.7925 14.5996 785.8745 C
1750 13.8184 785.8745 12.9746 785.8745 12.1997 785.8745 C 1750 13.8184 785.8745 12.9746 785.8745 12.1997 785.8745 C
1751 11.6997 783.9868 10.1812 779.5679 9.19971 778.0737 c 1751 11.6997 783.9868 10.1812 779.5679 9.19971 778.0737 c
1752 9.125 777.9683 8.5376 778.2368 8.3999 778.2749 C 1752 9.125 777.9683 8.5376 778.2368 8.3999 778.2749 C
1753 8.10596 777.1675 8.2876 776.6616 7.7998 775.6743 c 1753 8.10596 777.1675 8.2876 776.6616 7.7998 775.6743 c
1754 7.79346 775.6675 7.2251 775.6743 7.19971 775.6743 C 1754 7.79346 775.6675 7.2251 775.6743 7.19971 775.6743 C
1755 6.08105 773.3062 2.625 770.9116 4.19971 767.8745 C 1755 6.08105 773.3062 2.625 770.9116 4.19971 767.8745 C
1756 3.88721 768.0425 3.49365 768.4312 3.3999 768.4741 C 1756 3.88721 768.0425 3.49365 768.4312 3.3999 768.4741 C
1757 3.33105 768.4741 3.26855 768.4741 3.19971 768.4741 C 1757 3.33105 768.4741 3.26855 768.4741 3.19971 768.4741 C
1758 3 768.6675 3.08105 769.1304 3 769.4741 C 1758 3 768.6675 3.08105 769.1304 3 769.4741 C
1759 0.90625 769.6245 1.65625 769.6187 2.6001 770.4741 c 1759 0.90625 769.6245 1.65625 769.6187 2.6001 770.4741 c
1760 3.94971 771.7124 5.19385 773.7368 6.19971 775.2749 c 1760 3.94971 771.7124 5.19385 773.7368 6.19971 775.2749 c
1761 4.34375 772.1187 8.3125 778.4487 7 778.4741 C 1761 4.34375 772.1187 8.3125 778.4487 7 778.4741 C
1762 7.51855 779.5181 8.44336 780.4995 9 781.4741 C 1762 7.51855 779.5181 8.44336 780.4995 9 781.4741 C
1763 8.78125 781.5181 9.19971 782.2749 Y 1763 8.78125 781.5181 9.19971 782.2749 Y
1764 8.9751 782.2241 8.8999 782.1812 8.6001 782.0737 C 1764 8.9751 782.2241 8.8999 782.1812 8.6001 782.0737 C
1765 10.2813 783.4116 10.3062 786.6304 12 787.8745 c 1765 10.2813 783.4116 10.3062 786.6304 12 787.8745 c
1766 14.1748 789.48 14.7935 787.48 15.5996 790.6733 C 1766 14.1748 789.48 14.7935 787.48 15.5996 790.6733 C
1767 18.1558 790.6733 19.1245 790.0806 19.7998 792.0737 C 1767 18.1558 790.6733 19.1245 790.0806 19.7998 792.0737 C
1768 19.8496 792.0864 18.7998 792.0737 Y 1768 19.8496 792.0864 18.7998 792.0737 Y
1769 18.0435 792.2983 16.062 792.2495 15.1997 792.6733 c 1769 18.0435 792.2983 16.062 792.2495 15.1997 792.6733 c
1770 14.9434 792.8052 14.6685 793.7808 14.3999 793.8745 c 1770 14.9434 792.8052 14.6685 793.7808 14.3999 793.8745 c
1771 10.856 795.1489 10.5747 792.9116 8.6001 796.6733 c 1771 10.856 795.1489 10.5747 792.9116 8.6001 796.6733 c
1772 6.70605 800.2739 6.4126 803.3481 4.19971 806.0737 C 1772 6.70605 800.2739 6.4126 803.3481 4.19971 806.0737 C
1773 4.76855 806.9175 4.86865 806.7544 5.3999 807.0737 C 1773 4.76855 806.9175 4.86865 806.7544 5.3999 807.0737 C
1774 3.6626 809.73 2.69385 813.2114 0 814.2739 C 1774 3.6626 809.73 2.69385 813.2114 0 814.2739 C
1775 0 814.3481 0.037598 815.0552 0 815.0737 C 1775 0 814.3481 0.037598 815.0552 0 815.0737 C
1776 1.2251 815.4106 1.44385 815.311 2.3999 815.8735 C 1776 1.2251 815.4106 1.44385 815.311 2.3999 815.8735 C
1777 1.44385 813.9487 5.23096 809.1489 6.3999 806.6733 C 1777 1.44385 813.9487 5.23096 809.1489 6.3999 806.6733 C
1778 7.1748 807.186 7.13721 807.6177 7.7998 806.2739 C 1778 7.1748 807.186 7.13721 807.6177 7.7998 806.2739 C
1779 7.70605 806.2173 7.5874 805.2612 7.6001 805.0737 c 1779 7.70605 806.2173 7.5874 805.2612 7.6001 805.0737 c
1780 7.75 802.3608 9.5625 799.7358 10.1997 796.6733 C 1780 7.75 802.3608 9.5625 799.7358 10.1997 796.6733 C
1781 12.1748 797.1802 13.3999 796.6304 15.5996 797.2739 C 1781 12.1748 797.1802 13.3999 796.6304 15.5996 797.2739 C
1782 15.2061 799.3921 14.6309 800.1548 14.1997 802.2739 C 1782 15.2061 799.3921 14.6309 800.1548 14.1997 802.2739 C
1783 15.4873 802.5171 15.231 802.6548 16.1997 803.4731 c 1783 15.4873 802.5171 15.231 802.6548 16.1997 803.4731 c
1784 16.437 803.6802 15.8184 804.23 15.7998 804.2739 c 1784 16.437 803.6802 15.8184 804.23 15.7998 804.2739 c
1785 15.2749 805.3735 15.1875 810.2046 15.3999 812.0737 C 1785 15.2749 805.3735 15.1875 810.2046 15.3999 812.0737 C
1786 13.7124 811.73 12.3311 810.6606 11.1997 810.4731 c 1786 13.7124 811.73 12.3311 810.6606 11.1997 810.4731 c
1787 10.7749 810.4106 10.4248 810.4731 10 810.4731 C 1787 10.7749 810.4106 10.4248 810.4731 10 810.4731 C
1788 9.2749 812.2671 6.80615 814.355 6.6001 815.4731 c 1788 9.2749 812.2671 6.80615 814.355 6.6001 815.4731 c
1789 6.4375 816.3481 6.875 816.7856 7 817.2729 C 1789 6.4375 816.3481 6.875 816.7856 7 817.2729 C
1790 7.1499 817.1733 7.94336 817.0854 8 817.0737 C 1790 7.1499 817.1733 7.94336 817.0854 8 817.0737 C
1791 8.44336 814.0796 9.2373 813.8921 10.5996 811.4731 C 1791 8.44336 814.0796 9.2373 813.8921 10.5996 811.4731 C
1792 12.6558 811.8794 14.0186 812.7231 16.3999 813.0737 C 1792 12.6558 811.8794 14.0186 812.7231 16.3999 813.0737 C
1793 13.4497 817.5854 12.0747 823.5542 9.3999 828.4731 c 1793 13.4497 817.5854 12.0747 823.5542 9.3999 828.4731 c
1794 8.1875 830.6978 5.5249 832.2856 5.19971 835.2729 c 1794 8.1875 830.6978 5.5249 832.2856 5.19971 835.2729 c
1795 5.16846 835.5103 5.38086 836.1919 5.3999 836.0728 C 1795 5.16846 835.5103 5.38086 836.1919 5.3999 836.0728 C
1796 5.79346 838.0298 6.21875 838.8296 7.19971 840.0728 c 1796 5.79346 838.0298 6.21875 838.8296 7.19971 840.0728 c
1797 7.50586 840.4731 7.81836 840.9673 8.19971 841.2729 c 1797 7.50586 840.4731 7.81836 840.9673 8.19971 841.2729 c
1798 8.3999 841.4419 8.9624 841.8228 9.19971 841.8735 c 1798 8.3999 841.4419 8.9624 841.8228 9.19971 841.8735 c
1799 b 1799 b
1800 %%PageTrailer 1800 %%PageTrailer
1801 gsave annotatepage grestore showpage 1801 gsave annotatepage grestore showpage
1802 %%Trailer 1802 %%Trailer
1803 Adobe_Illustrator_AI3 /terminate get exec 1803 Adobe_Illustrator_AI3 /terminate get exec
1804 Adobe_pattern_AI3 /terminate get exec 1804 Adobe_pattern_AI3 /terminate get exec
1805 Adobe_customcolor /terminate get exec 1805 Adobe_customcolor /terminate get exec
1806 Adobe_cshow /terminate get exec 1806 Adobe_cshow /terminate get exec
1807 Adobe_cmykcolor /terminate get exec 1807 Adobe_cmykcolor /terminate get exec
1808 Adobe_packedarray /terminate get exec 1808 Adobe_packedarray /terminate get exec
1809 %%EOF 1809 %%EOF
......