.gitattributes000075500000000210144760121710007436 0ustar00# Auto detect text files and perform LF normalization * text=auto *.png binary tests/ export-ignore phpunit.xml.dist export-ignore .gitignore000075500000000050144760121710006535 0ustar00/composer.phar /composer.lock /vendor/* .scrutinizer.yml000064400000000126144760121710007730 0ustar00build: environment: variables: COMPOSER_ROOT_VERSION: '1.8.0' .travis.yml000075500000001263144760121710006665 0ustar00language: php sudo: false env: global: - COMPOSER_ROOT_VERSION=1.8.0 php: - '7.1' - '7.2' - nightly matrix: fast_finish: true include: - php: '7.1' env: COMPOSER_FLAGS="--prefer-lowest" allow_failures: - php: nightly cache: directories: - $HOME/.composer/cache/files install: - composer update --no-interaction --no-progress --no-suggest --prefer-dist $COMPOSER_FLAGS - wget https://github.com/satooshi/php-coveralls/releases/download/v1.0.0/coveralls.phar before_script: - mkdir -p build/logs script: - vendor/bin/phpunit --coverage-clover build/logs/clover.xml after_script: - php coveralls.phar -v notifications: email: false LICENSE000064400000002065144760121710005557 0ustar00The MIT License (MIT) Copyright (c) 2013 My C-Sense Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md000064400000023145144760121710006033 0ustar00# DeepCopy DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. [![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=1.x)](https://travis-ci.org/myclabs/DeepCopy) [![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=1.x)](https://coveralls.io/r/myclabs/DeepCopy?branch=1.x) [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) [![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) **You are browsing the 1.x version, this version is in maintenance mode only. Please check the new [2.x](https://github.com/myclabs/DeepCopy/tree/2.x) version.** ## Table of Contents 1. [How](#how) 1. [Why](#why) 1. [Using simply `clone`](#using-simply-clone) 1. [Overridding `__clone()`](#overridding-__clone) 1. [With `DeepCopy`](#with-deepcopy) 1. [How it works](#how-it-works) 1. [Going further](#going-further) 1. [Matchers](#matchers) 1. [Property name](#property-name) 1. [Specific property](#specific-property) 1. [Type](#type) 1. [Filters](#filters) 1. [`SetNullFilter`](#setnullfilter-filter) 1. [`KeepFilter`](#keepfilter-filter) 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) 1. [`ReplaceFilter`](#replacefilter-type-filter) 1. [`ShallowCopyFilter`](#shallowcopyfilter-type-filter) 1. [Edge cases](#edge-cases) 1. [Contributing](#contributing) 1. [Tests](#tests) ## How? Install with Composer: ```json composer require myclabs/deep-copy ``` Use simply: ```php use DeepCopy\DeepCopy; $copier = new DeepCopy(); $myCopy = $copier->copy($myObject); ``` ## Why? - How do you create copies of your objects? ```php $myCopy = clone $myObject; ``` - How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior yourself. - But how do you handle **cycles** in the association graph? Now you're in for a big mess :( ![association graph](doc/graph.png) ### Using simply `clone` ![Using clone](doc/clone.png) ### Overridding `__clone()` ![Overridding __clone](doc/deep-clone.png) ### With `DeepCopy` ![With DeepCopy](doc/deep-copy.png) ## How it works DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it keeps a hash map of all instances and thus preserves the object graph. To use it: ```php use function DeepCopy\deep_copy; $copy = deep_copy($var); ``` Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: ```php use DeepCopy\DeepCopy; $copier = new DeepCopy(true); $copy = $copier->copy($var); ``` You may want to roll your own deep copy function: ```php namespace Acme; use DeepCopy\DeepCopy; function deep_copy($var) { static $copier = null; if (null === $copier) { $copier = new DeepCopy(true); } return $copier->copy($var); } ``` ## Going further You can add filters to customize the copy process. The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, with `$filter` implementing `DeepCopy\Filter\Filter` and `$matcher` implementing `DeepCopy\Matcher\Matcher`. We provide some generic filters and matchers. ### Matchers - `DeepCopy\Matcher` applies on a object attribute. - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. #### Property name The `PropertyNameMatcher` will match a property by its name: ```php use DeepCopy\Matcher\PropertyNameMatcher; // Will apply a filter to any property of any objects named "id" $matcher = new PropertyNameMatcher('id'); ``` #### Specific property The `PropertyMatcher` will match a specific property of a specific class: ```php use DeepCopy\Matcher\PropertyMatcher; // Will apply a filter to the property "id" of any objects of the class "MyClass" $matcher = new PropertyMatcher('MyClass', 'id'); ``` #### Type The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of [gettype()](http://php.net/manual/en/function.gettype.php) function): ```php use DeepCopy\TypeMatcher\TypeMatcher; // Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); ``` ### Filters - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` #### `SetNullFilter` (filter) Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have any ID: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\SetNullFilter; use DeepCopy\Matcher\PropertyNameMatcher; $object = MyClass::load(123); echo $object->id; // 123 $copier = new DeepCopy(); $copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); $copy = $copier->copy($object); echo $copy->id; // null ``` #### `KeepFilter` (filter) If you want a property to remain untouched (for example, an association to an object): ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\KeepFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); $copy = $copier->copy($object); // $copy->category has not been touched ``` #### `DoctrineCollectionFilter` (filter) If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; use DeepCopy\Matcher\PropertyTypeMatcher; $copier = new DeepCopy(); $copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); $copy = $copier->copy($object); ``` #### `DoctrineEmptyCollectionFilter` (filter) If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the `DoctrineEmptyCollectionFilter` ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); $copy = $copier->copy($object); // $copy->myProperty will return an empty collection ``` #### `DoctrineProxyFilter` (filter) If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a Doctrine proxy class (...\\\_\_CG\_\_\Proxy). You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. **Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded before other filters are applied!** ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; $copier = new DeepCopy(); $copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher()); $copy = $copier->copy($object); // $copy should now contain a clone of all entities, including those that were not yet fully loaded. ``` #### `ReplaceFilter` (type filter) 1. If you want to replace the value of a property: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\ReplaceFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $callback = function ($currentValue) { return $currentValue . ' (copy)' }; $copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); $copy = $copier->copy($object); // $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' ``` 2. If you want to replace whole element: ```php use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\ReplaceFilter; use DeepCopy\TypeMatcher\TypeMatcher; $copier = new DeepCopy(); $callback = function (MyClass $myClass) { return get_class($myClass); }; $copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); $copy = $copier->copy([new MyClass, 'some string', new MyClass]); // $copy will contain ['MyClass', 'some string', 'MyClass'] ``` The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. #### `ShallowCopyFilter` (type filter) Stop *DeepCopy* from recursively copying element, using standard `clone` instead: ```php use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\ShallowCopyFilter; use DeepCopy\TypeMatcher\TypeMatcher; use Mockery as m; $this->deepCopy = new DeepCopy(); $this->deepCopy->addTypeFilter( new ShallowCopyFilter, new TypeMatcher(m\MockInterface::class) ); $myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); // All mocks will be just cloned, not deep copied ``` ## Edge cases The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are not applied. There is two ways for you to handle them: - Implement your own `__clone()` method - Use a filter with a type matcher ## Contributing DeepCopy is distributed under the MIT license. ### Tests Running the tests is simple: ```php vendor/bin/phpunit ``` composer.json000064400000001514144760121710007272 0ustar00{ "name": "myclabs/deep-copy", "type": "library", "description": "Create deep copies (clones) of your objects", "keywords": ["clone", "copy", "duplicate", "object", "object graph"], "license": "MIT", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, "files": [ "src/DeepCopy/deep_copy.php" ] }, "autoload-dev": { "psr-4": { "DeepCopy\\": "fixtures/", "DeepCopyTest\\": "tests/DeepCopyTest/" } }, "require": { "php": "^7.1" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", "phpunit/phpunit": "^7.1" }, "replace": { "myclabs/deep-copy": "self.version" }, "config": { "sort-packages": true } } doc/clone.png000064400000030134144760121710007123 0ustar00‰PNG  IHDR{hîâÿsRGB®ÎégAMA±� üa pHYsÃÃÇo¨d/ñIDATx^íÝÛ�mYY7àV� ± jh Ò‰¡ 7Ä+½¢!rabl A½�nLÄÄ �nàJ@0!^4º!†È!Í4ghQ0 &Ч½{Ms>þƒú¾_Ùc9kíQU«ªÖšc̱ž'y³««fUWÕZë�ïoÎ9f]wÀp„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°Ç�žýìg« æPÛ©öÅü„=†Tk0ª}Àjû Õ¾˜Ÿ°Ç�JSùÉO~¢:(M€9™ú*s@;ÂC*MåÇ?þ±ê 4yædè«Ìí{ I“ï«ÊãqéÒ¥U}ðƒ|ôÑ€í2ôUæ€v„=†TšÊ�~ô#ÕA•Ç#�}Z° 怾ÊÐŽ°Ç�4ù¾J“`N怾ÊÐŽ°Ç�JSùá¨:(M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂC*Må?ø�ê 4yædè«Ìí{ I“ï«4yædè«Ìí{ ©4•ïÿûªƒÒ䘓9 ¯2´#ì1$M¾¯Ò䘓9 ¯2´#ì1$M¾¯Ò䘓9 ¯2´#ì1¤ÒT¾÷½ï©J“`N怾ÊÐŽ°Ç�4ù¾J“`N怾ÊÐŽ°Ç�JSùîw¿«:(M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂC*Må;ßùŽê 4yædè«Ìí{ I“ï«4yædè«Ìí{ ©4•oûÛªƒÒ䘓9 ¯2´#ì1$M¾¯Ò䘓9 ¯2´#ì1¤¥7ù×¼æ5×]wÝa=ñ‰O<øô§?]Ýn)¥É0§^ç€mïßÿçþçàÆo\}Íi½÷½ï­~N‹2´#ì1¤ÒT¾õ­o-®>ÿùÏ_Ó¸ßüæ7W·]JiòÌ©Ç9`›û÷Ú×:®új_cÎ2´#ì1¤›ü¦õö·¿ýšF}à 7|éK_ªn¿„Òä˜S�sÀ¶öïýèG¯ù:§UëÀghGØcH¥©|ó›ß\T}ýë_?xÉK^rؘ³ø‹¿ø‹U£¾ë®»ªŸ³„Òä˜SosÀ¶öï�<òÈÁ³žõ¬Õç¦Þô¦7]³ÝwÜqd›ü?¯^½zÍvs•9 a�!õÖä7­Ï}îs«Ë2^ð‚Ü}÷Ý«Fýò—¿¼ú9K(M€9õ6lkÿþ¶·½mõyYó÷oÿöoÕíRùÈGVÛ¦j¡p®2´#ì1¤ÒT¾ñ�o,ª¦M {›·ó|Î.ÊÐŽ°Ç�JSÉ‚è¥Ôí·ß¾júû·»zÿÃ?|äˆà§>õ©#Ÿ·„Òä˜SOs@Ëýû‡>ô¡Õÿ;aïÊ•+Õív]æ€v„=†ÔS“ߤNkøÓÅm·ÝväcK(M€9õ2´Þ¿÷2?˜ÚöRi*¹&~ 5=òöüç?ÿðoî÷ñ™»|ùò‘�÷^š<sêeh¹ÿ¯ÿú¯Õ%œ©÷¼ç=Õíæ(s@;ÂCê¥ÉoRY¸ýâ¿xÕŒßøÆ7^³M®ã/G[7ìó”&Àœz˜Zîß×ÿßµ 9g™ÚöRM~ÓšyË%Ÿüä'«Û½úÕ¯î¦iŸµ4yæÔÃÐjÿ¾ôNúÏUæ€v„=†TšÊ#�<Ò}ýã?þã‘&õêÕêviŠÓÆý‰O|¢º]�¥É0§æ€û÷¬|Ñ‹^´úz©w¿ûÝÕmç,s@;ÂCê¡ÉoRëM9—xÔ¶K}ùË_>r©ÇIÛöVš<sj=´Ø¿÷ôRæ€v„=†TšJ.eè¹>ð�iÊg©'?ùÉ<ð@õëöVš<sj=̽Ï¥Ÿ7ÝtÓ‘¯ó®w½«ºm‹2´#ì1¤ÖM~ÓzÕ«^u¤1Ÿµzjä'•&ÀœZÏsîßÿó?ÿóà©O}êêsË¥ µm[•9 a�!µnò›Tí(ÜYëÖ[o­~íÞJ“`N-ç€9÷ïëg{½êÇÐŽ°Ç�JSÉõë½ÖÝwß}¤9ßÿýÕíÖë­o}ëêó®¿þúƒý×­n×SiòÌ©å0×þ}º}êæ›o>¸råJuÛÖehGØcH-›ü¦5½Äãe/{Yu›Z}ö³Ÿ=r¹ÆÞð†êv=•&ÀœZÎsìß׃ÞYþ?-ÊÐŽ°Ç�JSÉ+í±>ó™Ïièï|ç;«ÛÕ*—‡ÜrË-«ÏÍ‘¼Ë—/W·í¥4yæÔj˜cÿ^ zëÛôVæ€v„=†ÔªÉoZÓF�K<î»ï¾êvÇÕz£?ËΤEiò̩հëýûûßÿþ#_BÐK™ÚöR«&¿I­¹;O£^?rØ{³×ä˜S‹9`×û÷%^ÙSÊÐŽ°Ç�JSÉ*í­þã?þãH#ÿçþçêv'ÕÕ«W�4ü=¼÷Þ{«ÛöPš<sj1ìzÿ¾~Vﬕ›¾|üã¿æÿ9G™ÚöR‹&¿iÝyç�«Æ{‘�¶ÞôϳS™«4yæÔbØõþý•¯|å‘÷Ÿµ„½ý$ì1¤ÒTrÉCO•Ë-žùÌg®ïŸýÙŸU·Û¤Ö¿Öóž÷¼Ã¿­SÛ¶uiòÌiî9`×û÷¬ýû£?ú£ÕûÎS {ûØÇªÿÏ]—9 a�!ÍÝäÕÉ¥É0's@_ehGØcH¥©äÚwÕ¾4yædè«Ìí{ I“ï«4yædè«Ìí{ I“ï«4yædè«Ìí{ ©4•‡zHuPš<s2ôUæ€v„=†¤É÷Uš<s2ôUæ€v„=†TšÊ•+WT¥É0's@_ehGØcHš|_¥É0's@_ehGØcHš|_¥É0's@_ehGØcH¥©\¾|YuPš<s2ôUæ€v„=†¤É÷Uš<s2ôUæ€v„=†TšÊƒ>¨:(M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂCÒäû*M€9™ú*s@;ÂC*Må�P”&ÀœÌ}•9 a�!iò}•&ÀœÌ}•9 a�!•¦rÿý÷«J“`N怾ÊÐŽ°Ç�4ù¾J“`N怾ÊÐŽ°Ç�4ù¾J“`N怾ÊÐŽ°Ç�JS¹ï¾ûT¥É0's@_ehGØcHš|_¥É0's@_ehGØcH¥©Ü{ェƒÒ䘓9 ¯2´#ì1$M¾¯Ò䘓9 ¯2´#ì1¤ÒT¾øÅ/ªJ“`N怾ÊÐŽ°Ç�4ù¾J“`N怾ÊÐŽ°Ç�JS™³nºé¦ƒo¼±ú±ž*ßc¾×ÚÇv]š<s¨íƒvUO{ÚÓn¸á†ƒë¯¿þà OxBu›Öõô§?ýð{lýý™æ'ì1¤ZƒÙu¥�^wÝuOyÊSªï¡ò½å{Ì©öñ]—&Àjû mTBSö¥OzÒ“÷¸ÇîS×+ÛÔ>wîJÍ÷ù˜Ç<¦›ïÏ0?a�½ñÚ×¾öš&³­úýßÿýUýû¿ÿûê6=Ôë_ÿúÕ÷yË-·T·™³`.g�þéŸþéàöÛo?Ü_>ãÏ8ø…_ø…Õ>tZyÿsžóœÃí²Ÿ}ï{ß[ýzsTf�Ì$¿üË¿|Í÷™ïñ/ÿò/›~ëÅî {ì�]…½4ÎÒHóvm›žª§ïærÒ�” –À–PT K¥ü²]‚`aíëÍYù>j/!ô÷~ï÷?ÞSÀ›»'ì±7.]º´õºãŽ;VMõw÷w«ÛôX¿ó;¿sø=?ö±�=üjÛìº4yæ4ÝýÕ_ýÕÁþáîí×~mµ/_¯ßú­ß:Ü¿¿ô¥/m¶¿¬Õm·Ývø½g?>ý~óßy>^û¼žÊ0aÎé‘GY­Ó{á _øè{—ã¹Ï}îá÷žŸá§?ýé£ï€±|á _8xÇ;ÞqðŠW¼âðeÓp4­|,¡î-oyËÁ=÷Üóèg÷ã}ï{ßá÷Wf�RYC˜Ÿ-‡uœCÂQÙaäß%†¥~˜Ê�Ø„ž×½îu«ƒšµJ@Ê�Úl—`×ã>0ßSBj¾ÏÚ÷Ÿ€— 'öàJãÍѵìX–*;‰r„0G `)†ÔJ°[?ãU*ïÏdz]‚`Ï7<¶M؃3J£-�w„†›eùy²#€e•K,„|ʾk½첯NhZÂÙ|�ù¹jg"såM>¶äË´%ìÁdÇQpÞŨ?Ë”ƒ© 9¹ê¤,9¨U>–m²ïZÒØðj?›€Ç6 {°¡ìDJ#ÎÃÑdg™Ÿ-—»¸D€¹$Ô$¬eߺÉ:»¡o ršì[sM-àåçÊï@ÀcÛ„=Ø@tY �†<ª²“͵ç5 ,SÂÌô*'­³Ëþ6Ûõz•Md~Hˆ­]vZžý-»$ìÁ)Ò„ËQ¸ü;rSÎÏVvHùY༲O)7PI°9m�]¶K\úÙ­ã^l¹äTÀc.œ¢œíJ“Þ‡æ<=‹é�lªÜ@å´uvÙ¯–¨dŸ3‚„ÔüÜëg*KÀËÇ¡aN�]šõ(;¤Md§TvTÙqÀTö‰e�ÝIÁ.˾t©ëìN"à±Â#;±Ò¸óö¾É޹üüvXûk}�]Ù7¬W.[a�ÝqòódÈϸðò³'øîÓ�a–A؃Šì¤JÏNk_íë™M€}µ¾În=Ô”Êû§ëìF]æ0 xë¿�%ö`MšvÙ¹%ìì»ryNvj£îÌöUYg·É TÊ:»Ñÿ<@~¾ò;Yÿ=dŸ˜� x,…° 3%Üä_áæ'eÈï€eJ@IXË�̲¯«U>–mö)Ô”€Wû½ä}ùØè!—1 {0±owÞÜ”³�Ë’`’`—³q›¬³K˜í*§É¾í¸€W~'K'ìÁ£¬O;YÖd”�`v€ô!'§7P)çÖ+ï/ëìF¼�Ê&²O®]²š€—€ì`/#öàÿKs/Í>oS—�W~OîÐ 0¿‘é TN[gWn ²Ïg¨Ž x ¿£öØ{Ó3VÙ)r2g@æSn ²É:»r½ùÿþ^-àåýX²/„=öZvˆår—46SŽüëh(ÀvdŸ”°vÚ:»ôÞì³÷m�ÝIJÀ+ûõRûLØco%¤”#~Ùq²¹üîÊÎ4 g“Ë*>Ê:»i8™VöS¹ÔpŸ×Ù'¿‹„ãZÀËï-¡Yfß {ì­rv*;;ϳsV`3ÙÇL×Ù­“Ry¿uv'+/¿Çõß_ x.c…ÿ#ì±—NÊŽÕNáü²Ã-;Ù¼ €?T¾mùÝðrà6áØ¾ê„=öŽ;JnWv²å÷ér`ß”uv9ˆX®©Õt��`rº¼ü®j¿Ó¼/�átÂ{%á®ì,²£`;œ)öA9ÃtÚ TÊ:»ìgÛÜI/¿oÎNØco$„Xc¶YCQvÎù×H`éÒǦ7PÙd�]‚�þw6Ù7'<×^sµß)œŸ°Ç^ÈŽ¢¬›È…íËï¸ C|–"ýkz•ÓÖÙe;7P9¿ðj¿g¶KØc/”#†Ù±Ø�쎳§À”¨l²Î®Ü@Å%ê“p\ xÙgäqÈÇíŸaû„=†g=Ù¼2•�xÞh)}?½è´uv vÙ_Xg·= pù�–ƒ€¥¦Ø-a�¡Mïi§2Ÿéï]Àæ’Ë*ÓëÓƒN v9»”˳�uvÛ“ßãq/¿ónûb˜—°Ç°œaj+ƒT~÷Ùá[×l[‚Åt�Ýz¸(•÷[g·;y²�-=Z%à9èí{ );–²ãÏFæ— ¬…É¿ŽœQÖÙ%T¬¯ûšV‚]Yg'ØíÆI¯¬sð ÂÃÉN¨½ìôi'ƒVy,2l¢¬³ËÁºrШVÓuvÂÅn¥Ÿç÷\{<ò¾|L¸†þ{ ÅÙ¤þd+AŽöL% $Ø¥?l²ÎÎ Tæ#àÁò { %Gx³ÊÙ$Gyû‘A® yØO97½�J9ó¿^yYgç*óʾ3¿÷ZÀKØN÷xÀr{ #;§²CrÔ·?9j_AÆ—@0½�Êiëì²�¨´‘žœ]{Œeèˆõø2à”aÇãͨrÐj“uvå*ÖÙ�CÀæ$ìÑ5gzöS9«‘áÇpËÒå9<]gw\°Ëû­³Oÿì¿j�}Â|h:°슰G·²ó+;Äì ÙެÑd©¦ëìj7Ø(•`—Þ– `ØË4à­?î0'a�.e'XŽ€fgÉþ™>24C�ò<ÍPŸçèi7PÉ6 �†ü1åLìq/�¿ÇhAØ£;ÎêPä I–2(AKe�]ÎÊœv• üe�ãÊs"½©ôKÀs9.Ð’°Gw¬×b*ÃRžÜ¸€¹¤÷äùvÚ Tòþ²ÎÎ TöÃI/Ï艰GWr™S \îBáyÁ®Mo ²É:;7PÙ/é;yÜkÏ�æ*ûKÀF ìÑ…éÚ¬]‡uªÊЕ!6‘�=Cù&ëìÊ T¬³Û_9c›çÁzÀËUy¿KÉ�¥öh.ÃXY“�)Çs…“ä²ÊMÖÙe�ŸÞ@ÅÙ™ýVÞúóEÀF ìÑT†¬rUþ5tqš ^eËYöSzÅt�ÝqÁ.ï/7PÉsÇ:;òÜ9.àå@@Î;» ŒBØ£©rYUv¸‚›JÈ+Ù£îû!ÃwYg·~‰Ý´Ê T¬³c*û—<'r``ý9Sžç 0"a�f2´eG› g'ËYyþŒ+�gó<ƧÝ@%Û$z°î¤€—玀ìa�&².;ݼ çQ‚@ŽÌ;3¼Le�Ý&7P™®³ƒš<Ÿþk ò¾|Ì¥¼À>ö˜ÝtÍU78¯¼rI_‚}Ëã•×^÷y¼Ö×K•ÊûóñìyN"àOØcV¹d¦ x¹ü .Êsª_Ó¨l²Î.AÐPÎ&òºÏs¦ðò|Ë#{Ìhz&;hØ—·7½�Jm/•�eHÏãd½gQ^íÀ�€P'ì1›2fGm‡Ì¶å Rü¬éÚ­ ݬ7YgWn â1á<ÊzÎõ€—³ùynåãö'Çö˜EvÊeíh>»ây¶}¹¬r“uvƧ7P1€s^y¾åµ¼þ\›<6#ì±s9ª_vÖvÒìRF9ƒœ޳ÉïkºÎî¸`—÷—¨ä5m�u\ÀËA„œÙ³ï8a��ʺì´ú`×XÊÀ˜@Âñ¦ëìÖ/“›V¹�ŠuvlK^§y>å Âúó­<Ï5€‹öØ™ì¨ËÐ�aæâ¹w­üN2\ç÷qÚ T²MB a›mðæ'ì±Ù©—3an*Ë ™·÷IYg—áù´¨L×ÙÁ¶å¹˜µçaö ù˜Ë€vGØc'Ê™ƒ “ ~ÐBBL,G 3y}%ØågÍ@½¾æ©TÞŸ�—`çuÉ®”€W;ƒ,àÌKØcër X.]’CkÓçãæô*åìy­Ê:»Aƒ5»–^Ÿçe-à幚³ëž‡óöتé™wO£9ƒUÐü»¤3ZÓ¨Ô†èRù˜¨0·<×ò¼«t(Ïd€¶„=¶fŸ×HÑ·œQ(—7fíQç¼n6YgWn b�s;.àåõ•祀Ða�­ÈP†éìð¡7yŽ–Á4ÃjK Ÿ›¬³Ë@=½�Š!šò\M__ž–€ç*€~ {\XÐ2dp…^µ8ûœ×Çt�ÝqÁ.ï/7P±ÎŽÖ<€1{\HÙ¥®‡b?å¬^\s¶oÛ¦ëì6¹�JBç.¾8‹ôî<k$ò<ÎsÕó`y„=.$m†� –"myÞ^ä Zžó�3Ÿv•¼V½NèÅ4à­?g<€1{œÛôΛnÁ’œçŒtYg—ø´¨L×ÙAOò<ÎA‡ZÀËkÁ €±{œKŽ—!oÃÒdè-—«eð�Jø+ëìNº�JÞ?]g·Ih„¹•€W;û\ÞEÎpÐ/a�3ËQß2üæÒ4Xª<—ËÐûœç<ç0ôm²ÎÎ Tè]žÛǼ<Ï<€ý ìq&9sQ‚^_Xš2ç@Em.•�e›œ¹vYK�çiFÔX$àå¹ìì3À~öØX†„2ç_C½Ëð›÷´uv�üãWo¿ýíoô³¡Ç¼”ðöØX‡2D8ÓAorIZ.¯Üd�]žËå*ež>¿ Çô,Ïóœu®¼¼?€öØHŽ—�BУµ„±r•„´ãÖÙeø�Þ@å¤5JùšÎ\Ó«ðÖbxœDØãT¹ ¨ yæ–`WÖÙmr•–A8!p›Co¾VùäŒ Ì¥¼rIñ´JÀseg!ìq¬\òVŽ(gø€m+ëì2Äžt• ºÓuv»–�»ü¿ó6ìJ^ǼÐÈs^À༄=ª¬_bÛòJPËðzÚ T¦ëìZ=÷rÖ°|?†m¶)︿�—÷ùxl‹°GU9ÊœA×ÐÁy”`—çÒ&ëìN»�J ålc^xp'¼<Ï<vAØã¼Ë⌛Èó$ÃjΆՆÙRùX¶ÉekKxn9ÃÍEä9~ÜÚÓÉëÀs €]ö8ÂZ%N“6Ï�MÖÙíâ*sËÏ[.9ÍÏ')¯v6[À`nÂ+RÊP’arYY.¯Üd�]Ùl—`7Ú0›Ÿ©ü¬ùaªÜdh=àåu‘-מ°ß„=MÏ^dhgÿdÝd�]ž' ~Ù®Çuv»2=ë�Ÿ›ý–ç@‚Üú�iÀ€Ö„=‡|ë’öO‚]Yg·É TvrP`Ÿåw•ßIú}ÿ]ì›ôÅã^^?y�xôFØcµî*Œ 7¦“²Î®v³ˆRùX†Ù¥¯³Û¥òûË€ïõ2¶<¾yÝäL÷úk¥<¡€ž {{ΙŠñ”uvDO»�Êt�›I(gBüËI/�·€À’{{lº)o³<LË:»Ón 2]gçŒÔÅdØ/¿ë0aÙNúxy_>æoà°DÂÞžJ@(ÃLËP‚ÝI7PI•uv v†ÔÝÈï¶ü¾X€} ìí!g%–!�SΖmrvÖåeóÊãS7çè_^9XR{=åJ^CÎz0aoÏd�)ƒNþ5Øô!ChÍMÖÙ%Ø%dXgׇ<yl¬{íS“¼®jgÂ<F'ìí™$2˜pÚÈ¥a9 ´É:»é T<^ý*P(ööDŽd—á'o³ ve�ÝqÁ.Un ’ÇBðCÇ4òø³{Ǽ¼ö<ööBž2åÌÛ‘á>a-¡­vÇRùXOëìÆ7}­9¨²}9ƒšßkÎ’O_c©¼¼<€ÿ#ì ÎÙ†í(ëì2Lžv•é:;öOûò|ð¸8ÎOؘuDç3]gwÚ T¦ëìòy9°Rž#‚ÈÙ•¿�W xéeù˜u­p:ao`åÒÂ>Aäx%Ø�t•TYg—`gÐä$y½•×_þõú;] xå÷6-ÎGØ”3 uù]dhÌï§6T–ÊDz�¨p^ xå¬pp­òz¬½sðEÀ€‹ö”© L9 µ¯2$–¨œ¶Î.Á.¿7k¬Ø¦„™øòã'yMÖ΢'àå5ëL(l‡°7˜éÝ^öE‚]~öMÖÙe Ìv v†Jv-á¥<ÿòö>:.à•×£€»!ì d_Î"d(<Ë:»r—ƒÑJžƒå9¹/g�óšKZ?ð’ÿÎû÷ùª˜‹°7ˆ z²þe$Žs–2âIëìÊ Tr– Áz’çož§ ;£>?<è‹°7ˆ‚ø–|9T†à„µ„¶“‚]>–áÑ:;–"¯ËòœÎ¿#\¶˜Ÿ!¯×œa_xéEy;ðí{XêƒõuvÓAqZ­³cyî–P”çüM^íµ*à@?„½…›®êù© ˆe�Ýi7P™®³ìM‚Pyþ'-A¹³m-àå,eΰ xÐaoÁ2|•�+o÷¤¬³Ûä*e��¨°/z~íy=æ5\»œº<¯Yè›°·9jž!+á©üw9;�Ë8[Ê÷’Á/ßGm0,•�e› ·Î°ïr�£¼6Ê로9kõú8)àåÀŒ€Ë"ì-D –Z®ûÉ —°–ï'ÿïé08­²Î.á¨@] wy=çµUÖßÎyyg‚eþµ3ðùþòzw95,“°·e{÷»ß½:êžw9„eøœÞ@¥ÌõÊû3º� œM^+Ó×s^ßy;¯÷M�ç2Pöƒ°·Ì2„%T•#ÿy;ïÏ@¶�³ä딨dØ« �¥üÊ T\Ò“×P9�’×^y{“K9K?Èëñ4y½fûõ×vé+Ûè#@_„½(—pN×Ñ$˜ýû¿ÿûÁ¯ÿú¯¯þû,²ý&ëììòÿ·Î¶+Á.¯Áh)tR¿ýÛ¿}øïi—r– wÒþðJ€,%àÀ~ö`ýHü›ßüæÃAñg~ægVïËå_ÇÉ YÖÙ�ìò± €ÖÙÁnåõU^w ^ymæu=}=žt)çqA¯œé¯¼|½ü¼¶`{�+GüK°û�ßø�#ÜcûØÃÁ®\N¹¾Înºí´2ø%0ZgóËë4Ák=�•³z¥jgÓ׃^*sòzž~nªô€%•m ö~üã«Ê ÇÜô€¾J€6„=µó*�Ç¥K—V•³’°+z@_¥@C‡½ýèGªƒ*�G†»iÁ®è}•m{jçeÐcnz@_¥@C‡½þð‡ªƒ2è17= ¯Ò  aOí¼ zÌMè«ôhCØS;/ƒsÓú*=Ú:ìýà?P”A�¹é}•m{jçeÐcnz@_¥@C‡½ïÿûªƒ2è17= ¯Ò  aOí¼ zÌMè«ôhCØS;/ƒsÓú*=Ú:ì}ï{ßS”A�¹é}•m{jçeÐcnz@_¥@C‡½ï~÷»ªƒ2è17= ¯Ò  aOí¼ zÌMè«ôhCØS;/ƒsÓú*=Ú:ì}ç;ßQ”A�¹é}•m{jçeÐcnz@_¥@C‡½oûÛªƒ2è17= ¯Ò  aOí¼ zÌMè«ôhCØkTûØÇ®»îº3ÕŸøÄƒOúÓÕ¯×sô˜ÛzÀIõš×¼¦ÚR÷wWýœžK€6†{ßúÖ·º­�~ô£ÕAn“*¡¯öu{,ƒs[BX¯Ïþó7Þxcõ5_«?ÿó?¯~�K€6„½Fu‘°—ZRà3è1·%ô€i�t&鷺ᆾô¥/U¿fO¥@C‡½o~ó›ÝÖG>ò‘ÕÀö‚¼ààᇮn7­·½ím× zW¯^­nÛSô˜Ûz@êë_ÿúÁK^ò’#¯ëÔq=ásŸûÜ5gÿ–ÐôhCØkTç {©õaï®»îªn×Sô˜Ûz@êŽ;îX½–ÏÒ Öü¼üå/¯n×KéÐÆÐaïßøF·õáøÈ€÷•¯|¥º]­¦b†¼Ú6=•A�¹-¡¬¸9k˜¾\Ö}Ï=÷T·ë¡ôhCØkT {Ó!O؃kõÞ¾öµ¯¹|3—b>ôÐCÕm�«¯~õ«ÏzÖ³Ñ ôhCØkTžA�Ý齬ŸÕ{Ó›ÞTÝî´šö‚ó~�9J€6†{¹ùA¯õ¡}h5¤=ÿùÏ?øò—¿\Ý®V·ß~ûêsßóž÷T·é© zÌ­÷péÒ¥Õk8—`~êSŸªn7JéІ°×¨Îöþû¿ÿ{uF —~]¹r¥º]OeÐc[^øÂ¼å-o9øéOúè{êzïÓ6g=سÄÒ �¡Ã^ÖÅôZëa/+«¶Ý´^ýêW¯>'•³zµíz+ƒÛ��”çþžð„ƒW¼â�<òÈ£=ªç�µv/~ñ‹W?Ëm·ÝVÝn¤Ò  a¯QMÃÞY+—}}ò“Ÿ¬~ÝË Ç6$Ø%à%èM_/}éKƒàTÏ= ës§7VyãßXÝn¤Ò  a¯Q]$쥖4 ôئ\™K9Ÿò”§yM<÷¹Ï=xÇ;Þq¸MÏ=@ØÓ`.C‡½œ èµ2èLÕóTÖì=øàƒÕ¯ßS屨}ÿJí¢S½ö€¬Ï[{µíFªÒ“…=˜—°×¨¦a/kö®^½ZÝnZëCâY>·e屘~ÏJíº®¿þún{€°'ìÀ\†{¹B¯õ�|`5ìÝ|ó͇P¹¶]­þáþaõ¹©w½ë]Õíz)ƒÛö…/|áp­Þôu�µ|yß4\Ôž�­+—q¾èE/Z}ß·Þzku»‘J€6„½Fu‘°—;wÞtÓMçþü¹Ë Ç¶¼ï}ï;\›Wžû©\²ùº×½îÈŸcè½¼êU¯ZÌëw¥@Â^£ºHØKM‡Å'?ùÉ<ð@u»Ê Ç6äæ+å9ŸÊ�rC–u½÷€éë?w×ýÄ'>QÝî´Z?Kø†7¼¡º]ëÒ �¡ÃÞÃ?ÜmÝ}÷Ý«-a/½¶ÝqõÖ·¾uõù {÷ßu»ʠǶäRÍüaõõ?µ°®÷�u¶Ó³ó iµíN«Ï~ö³O}êSW_ç�ï|gu»Ö¥@Â^£ºhØ[¿ 쬟?gô˜ÛzÀúÙùó°YJР�¡Ã^.qêµÞÿþ÷Ò._¾\Ý®V¹äszVàe/{Yu»^Ê ÇÜ–Ð>ó™Ï9+wÖ>0í!©×¿þõÕíz(=ÚöÕEÂÞ+_ùÊ#C^.ݪm×Kô˜Ûz@jýµœ3|÷Ýw_uÛiM/ãN�µ‡Ì]z´!ì5ªó„½õ3zKòR=æ¶„�Ê�uo¹å–#¯é“^×ëgSù›‚ÿò/ÿrͶ=•m öòÇ‹{­õK°ÎSò>þñ�W¿~OeÐcnKè¥r³–ZàÛ¤ôà$Â^£ºhØËå^÷Þ{oõk÷V=æ¶„°^wÞygõµ~\=ïyÏ;xðÁ«_«·Ò �¡Ã^.‘êµòÇ¡kÜi•/S¯ö5{-ƒs[B8®rùæ3ŸùÌêë?õ7ó7ÕÏë¹ôhCØS;/ƒsÓú*=Ú:ìe-Œj_=æ¦ôUz´!ì©�—A�¹é}•m{jçeÐcnz@_¥@C‡½ü]:Õ¾ zÌMè«ôhCØS;/ƒsÓú*=Ú:ì]¹rEuP=æ¦ôUz´!ì©�—A�¹é}•m{jçeÐcnz@_¥@C‡½Ë—/«Ê ÇÜô€¾J€6„=µó2è17= ¯Ò �¡ÃÞƒ>¨:(ƒsÓú*=ÚöÔÎË ÇÜô€¾J€6„=µó2è17= ¯Ò �¡ÃÞ< :(ƒsÓú*=ÚöÔÎË ÇÜô€¾J€6†{÷ß¿ê  zÌMè«ôhCØS;/ƒsÓú*=ÚöÔÎË ÇÜô€¾J€6†{÷ÝwŸê  zÌMè«ôhCØS;/ƒsÓú*=Ú:ìÝ{ェƒ2è17= ¯Ò  aOí¼ zÌMè«ôhcè°÷Å/~QuP=æ¦ôUz´!ì©�—A�¹é}•m öT_eÐc.µçŸj_zÌKØS³•A�¹Ôžª}é0¯!Ã^Ík_ûÚk Õ¶`Nz@ì–°§šÌI诀ÝÚ›°wéÒ%ÕQô˜[íy¨Ú•»·7a`Ÿ{ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì HØ�°0 a`@ÂÀ€„=€ {ö$ì çààÿ(ä´Íþ$ÕIEND®B`‚doc/deep-clone.png000064400000033271144760121710010043 0ustar00‰PNG  IHDR¬øN»`ŒsRGB®ÎégAMA±� üa pHYsÃÃÇo¨d6NIDATx^íÝÛ«gå}?ð)-’a¼ÓÂà”BK‹#B/ze(äÂC;…’QA ¥Q�Bo4Žz5r¡íXŠT ænùDD£ $ë€X± VŠÑ¨bE£ $ë€X± VŠé ãÇ,¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñ£�>’Ѩ(É: V¬h…�•b4ªXѨ(É: V¬h…�•bºÂøá‡J€hT”d+Ö´ÂÀJ1U¬hT”d+Ö´ÂÀJ1­7ª[o½u²mÛ¶¥œþù“_ýêWÙíZ‰F@IQ×óîï¿ýío';wîœþÌ~~úÓŸf¿§F¬h…�•bºÂøÁ4—W^yeEó¹çž{²Û¶� €’"®æÙßs?kµ¤Á5÷3JÆ:€VX)&b£Zoþë¿þkE³¹ð '¯¿þzvû¢QPRÄuÀ¼úûÏþó?ç\©=´ZÐ +Åt…ñý÷ßo*ï¾ûîäÚk¯]j.©‰ýë¿þë´Ù<òÈ#Ùïi!%E[Ì«¿Ÿ9sfrÉ%—L¿7åî»ï^±Ý¾}û–m“~ÏÓ§O¯Ø®T¬h…�•b¢5ªõæå—_ž^âsÕUWM{ì±i³¹ñƳßÓB4*Jж˜W¿ÿþû§ß—î�}á…²Û¥<õÔSÓmSrƒm©XÐ +Åt…ñ½÷Þk*ýF”K¿Á¥ÆtèСì÷E�F@IÑÖóèïï¼óÎô,m÷srÛõÓ?Óšå7ß|3»Ý¢c@+ ¬­Q­'o¿ýöô2Ÿ®ym¦9EŒF@I‘Öóêï›rŸ|òÉéï‘. >uêTv»EÇ:€VX)&R£ZoúM¥´T¶æÑÑ­D£ ¤Hë€yõ÷þÀºÞás3ß³ˆXÐ +Åt…1=ä •ÜrË-ÓÆõÃþpúõ·ÞzkÙ‘ÙçŸ~Ù÷µ� €’"­jö÷ŸýìgÓß; ¬'OžÌn·èXÐ +ÅDjTëɹšV¿ÙÝpà Ë~­…hT”eP»¿GY?XÐ +Åt…1Ý#ÒBúG@¯¼òÊ¥w²­öëéé‰'–ýzôhT”eP³¿ÿæ7¿™^œò“Ÿü$»]‰XÐ +ÅDiTëIzÃ5×\3m(wÝu׊mÒ}-ÝÚÚMg3Ѩ()Â: fŸý½sÃrÉXÐ +ÅDhTëMÿhº\è¹çžËn÷ýï?LãÙh4*Jа¨Õßg‡Õµ~ïR± VŠé ã™3gÂç?ÿó?—5ªÓ§Og·K…½ß|ž}öÙìv£QPR„u@�þžî™½úê«§?/åá‡În[2Ö´ÂÀJ1Õz2ÛXÒåB¹íRÞxã�e— ­µm´hT”T{P£¿GVS¬h…�•bºÂ˜.‹‰œÇ|YcÙH.¸à‚ɱcDz?7Z4*Jª½(ÝßÓeÄ»víZöszè¡ì¶5b@+ ¬S»Q­77ß|󲿲ÑDjFkE£ ¤Ú뀒ýý׿þõ䢋.š~owYqnÛZ± VŠ©Ý¨Ö“ÜÑÐ�æúë¯ÏþìhѨ(©æ: dŸ=“õê+ëZa`¥˜®0¦û9¢æ±Ç[Ö`Ž=šÝn6÷Ýwßôû¶oß>ùå/™Ý.R4*Jª¹(ÕßûÛ§\qÅ““'Of·­ëZa`¥˜š�j½é_.ôÝï~7»M./½ôÒ²Kî¼óÎìv‘¢QPRÍu@‰þ>;¬nä÷©ëZa`¥˜®0¦rGÌ‹/¾¸¬)=øàƒÙírI—íÙ³gú½éˆê‰'²ÛF‰F@IµÖ%ú{nX�Ý&Z¬h…�•bj5ªõ¦ßlÒåBGŽÉn·Zf›ÕFb�hT”Tk°èþþè£�.ûõ†ÕëZa`¥˜Z�j=™=‚º™f3{7zÃÒ¨(©Æ:`Ñý½Å+¬ºXÐ +Åt…1½Œ;Zþ÷ÿwY3úŸÿùŸìvkåôéÓËšV:Š{øðáì¶¢QPR�uÀ¢ûûìÙÕ�&=Èé™gžYñ{–ˆu­0°RL�FµÞÜ{ï½Ó汕As¶qm¦1–ŠF@I5Ö‹îï7ÝtÓ²¯o4V87+Åt…1]>)éÒ�‹/¾xÚ<þå_þ%»Ýz2û³.¿üò¥w¯å¶­� €’J¯ÝßÓ½°ßùÎw¦_ÛLÒÀúôÓOgÏEÇ:€VX)¦t£’µ£QP’u@¬XÐ +Åt…1Ý "õ£QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñÔ©S %YÄŠu­0°RŒF+%YÄŠu­0°RLWOž<)¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñĉ %YÄŠu­0°RŒF+%YÄŠu­0°RLW�?.¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñرc %YÄŠu­0°RŒF+%YÄŠu­0°RLW�=*¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñÈ‘# %YÄŠu­0°RŒF+%YÄŠu­0°RLW>,¢QP’u@¬XÐ +ÅhT±¢QP’u@¬XÐ +Åt…ñµ×^“Ѩ(É: V¬h…�•b4ªXѨ(É: V¬h…�•bºÂX2»víšìܹ3ûk‘’þŒéÏšûµEG£ „\Zt¬Îë¢3°RL®H.:ç�wÞdÛ¶m“;vd=BÒŸ-ý·oßžýõEG£ „\ZtRome�Ö,¹__t¬ˆÎÀJU·ÝvÛŠB9¯üýßÿýRHùñ�œÝ&Bî¸ãŽéŸsÏž=ÙmJJYä: õÔ®¿¦^›Û&BÒ¥ûs¦µKn›’�h ¬Tµ¨FõoÿöoÓâŸþ=·M¤Dúó@)Ö¿‹u¬ÎÀJU˜{öíÛ7-úû·›Ý&bþæoþféÏü�o|cé¿!·Í¢£QPR®m5©‡¦^šzjê­¹m"&­YºõË¿ÿû¿g·Yt¬ˆÈÀÊ œ9sfzßêîÝ»Ï~µ—]vÙÒŸ=ý7|ýõ×g¿ ¬Gê�Ý=¡©§¶æºë®›®^}õÕ³_…q3°2©I¥'ì¥BŸþÙâÀ7„ÿ¨¥ë¡ihµ€a0°2éŒjwT2�imU:¢Ú�%NGZ€sÊÙÉ4¤vë€4´ÂØX„½{÷.ö”!\BsèСéÏí·ß~ö«@Î<0í›<ûÕv9x ¿g`¥yý&•þ}(†úßó4Ôƒ¼iðîþ»öïßö«0>Vš–Ž@vÅ<�e_€Õ ýLdT»uÎÎÃfXiV¿IµøDàõêžÜê$`Æò€"¯;+MK“JÒ[÷ˆ~_€ßé?lqÈ뀤[óŒá¿fXiÒØÞW:ôKž`#†ö°ÅsIk�±¨‡YVš3ÖKc<|ÆûPB¯++Mû“s=|€1ëmC|Øâ¹ôŸˆ<Æÿ~ÆÉÀJ3¼›ôw<|€1J—ÁvÃjº5h¬Æ~ðžñ1°Ò—Á,×ÝÇâÉÁŒ�{8—Û=¼Œ›�•ð4©•ÒÿO`,\]´Rÿ)ÉþŸ0dVÂÛ�×ËYgÆ ÿü†t{¿ã€>ca`%4GT׿ÉÁ ™>·¶4¤v¯Ç|_/Ãf`%,XO`ˆ\I´>þ?1tVBêQó�×Ë™h†dörWÖÖ?ÈïL4Cc`%G 7Ç}, …çWlœ+®*+¡¤¦äé·›ã>†ÀUC›çÿCd`%”î,¡÷‹n޳ӴÌó+¶ÎZŠ¡1°†£‚ó¡ÙТÔû»þåù›7{µš¡•ÖX Á}ó•}÷ÿÓ;ëˆîÌ™3Ó+„vïÞ}ö«l–+®+ÕyÇÚb8c @ ÒÀî2Vgç'°îÖWÎXÓ2+U9¸8´ €5�ie~Ü&ÄX©& Pž¼Xéÿqw@À“ƒˆÆ-,‹×HqÅ-2°RMwöÏSìËYl"rö¯œt_púÿì,6-2°R…û+˲( SËr›-3°R\ÿòO.§ÿÿÝAjéßäv•rúOböÿ�–X)Ê™¾º\@mn ªÇ™mZd`¥E²>—P“[‚êsò€ÖX)" F.C‰ÁËÙ¨!½k½”ÜT—Û³h‰�•…sV/žtT»kT{÷î=ûUXŒôÊš®ï¤Á•úœí¦VNAŒÉ%A”à– ¸ÜOL ¬,”‚ǖήv?&0o®²Š-ý}tOlö÷CTVƼ6xr0‹Òï1†¡˜œ':+ ¡øµÃÑoÁU<íèßcœ®ŽƒH ¬Ì]xºaÕ�ÛàÉÁÌ“«¬Úã ¬Ì•³uíJG¿»Fåè*›Õï'žDßÊ$"+sÕ¿WE¡k�£«lEÿ*+Wì´)]×­å<Û‚ ¬Ì�{U†ÁÑU6ÃUVÃàï‘h ¬Ì…3sÃÒ?ºªQ°x‡g[‰�•-KM©VÝ«2 Ž®°û÷¼w}úë;o| &+[âÜp¥FÕýÝjT¬æàÁƒÓÁ& ® ‡+èˆÀÀʦ9 7|ÞËÀZܾÔÿ»µ€³çÔ``eÓúOö¹árt€œt zÇŽKý!¸f¸ÜŸLMV6Å�ÇE£`V÷€¾4´ºÊjØúWÕùû¦4+æŒÛ8yr02ÇÇuj1°²!©)uê'�Kÿèª{–ÆË�ëñJëÀt�"ýÝ»g™R ¬¬[¿Hy"ð8iTãÖ?pía|ãÔ*´}€ ¬¬‹³ktúOöú€ñð*;:βS’�•uqÿ"}ýħ#­ ›×Ìr3¥X9'‰ûÀxx•9NhP‚�•5¹äƒµtGÛ=â`¸Ò}ŠÝZÀJúœy§+«êß«è¦zrRcòˆ{€áràšsI1ÒÖ´�¸·™E0°’Õ/>žËZì+ä¾³^i_IûIŠ×2oVVpyÕĽ'´¯MºOÎÅÙxÅÀÊ n g3<9`8ºמQÀF¤³«ÝZ ÝZó``eO~e+ì?íSËÙ ûóf`eÊ¥̃£òírµ [•z¿[˘'+Kú÷ z"0[‘“ûžÚÓ;€ç°i-�ΰ¦}) ­°V–.×芊§2ö)€¶¨ÛÌ›}Šy1°Ž\ÿl˜#`Ì“KÌÚàNÅ[˜ëÈu Êý†,Bº¼¼kTž“·°Hýû¢Àf3 ¬#æ)n”`?ˆ«{ ‰Í"Y °Ö‘ò@Jq©@LnÝ $gòÙ,빟€ÒRcJ *ísž P_:ËÕ­ÒYVX4°Ù,ëȤÕ žØFIö=€úwïÞ}ö«°xýµ€}�õ2°ŽHjPžLM.?¨ËY.jsvŸ�2°ŽH× <˜š<9 ¿!°ÙëHhPDÒßÏœ9sö«,’†DÒ=¡:ÅÚ”µXG ß <˜\’PVÿ�‹ÎhEº�5í“N¨°ëÀ¹ä‚¨Ò™U^X¼4tõÖCïˆÄlÖÃÀ:`Ñ¥}4íŸ)¼0iðÀE"Kûh·^õê;r ¬åÃO+\°8i �ê«.™“,¬ÅÀ:@©!¹¼‚–xðÀüyà"-éÀÞ¿ÿÙ¯‚�u�4(ZÔð‚'l�«WhQT»ýÖƒBéXÆ#ëi•+æ#õÿn-�ÖÐ'^˜e`GSi�'lM¿Žº�Vu°Ó¾ì6Ö�p³:C‘öå´§xr0Àú¹R…¡°/Óg`€ô!î†UOf\-°qžÀ�8CÇÀÚ8G *OX¿þ3,ÔL†¢?¶«®ÆËÀÚ¸þÑT Š¡éï߯ä¹*…!³c`m˜3P �+Öæ²IÆÀšwÜ ¬�r´‰±°ÈKñºúè �{´ÇËÀÚ ´€ï†U×ó3Þ)°’+PW]�—�µ1ÞSÉX¹ªà÷Ò'©¦5�K$‹þ:ØUãa`mˆ#KŒ�Àd²ÿþ¥Z˜rðàÁ³_…qp«ÐøXâÚ}˜,Qí>ÚcÓ¿E" ®0F®ºk#< ~Ç•ÀX9³¿×÷°+ †ÍÀÚG‘`9‹6`l¬ƒ•Ü*4ÖàÒ‡¯V=~Ï“ƒ�1q;äurvìØá³1PÖÀúg‘<Vê_}àr `¨ºÛ‚œE‚•Ò�š†ÕôqõÁ0XƒJ6—þÀ¹¹2·Á¹õOò¸Uhx ¬A¹ôÖÏå@À¹-ÖÏ­BÃe` È#ؘ4¤ö/h]z}]wÆÈmA°>®H&k0>h°9.†ÂmA°y݉Ÿ'~†ÁÀˆK`kÒƒ—ºÏ�ê­ê_i•δ“®JðkÎÁ|¤AµZ=9hM:`ÝÕ°t Ø8W) ‹�5*˜/÷�-ê_%â¶ Øšþ}àéa¦´ËÀ€'Ãüu�<9h�+­`þ|®†ÁÀZ™3A°iHõä` ê,Žš¶ÏÀZ‘,–#«@ \‹åÞð¶X+éß§â‰À°8î "s¥”á³Ö.kÎú@Yެõ¯´òTsX¬tõ‚«Úd`-Ì}*P‡#«@$Þ½åY‡·ÉÀZ˜#;PGÿÈjú§ÏPKÿu®´‚²\éØkAÎð@]iHíš”w²58xõy–L[ ¬…ìß¿úÁpŸ ÔãÈ*PÓîÝ»—êOªCéL+P‡·u´ÃÀZ@ÿ(N\�º4) †½{÷Nk�+­ >W?¶ÁÀº`Îæ@Lž ”ä@Ä”nJŸKW=Äe`] t_Š'‘A\ެ%ô^§³¬@î+�ÏÀº@ÝÎï‰À“&,Zª+ݰêaoSÿÉÝé>sb1°.ˆ37ЋI`‘ƒ6¤õzú¬¦¸�/ëôï�óD`ˆÏåzÀ"8x mq¯yLÖ9³£C›|v�yò:;h“‡2Æc`Ý‚îÒ�îZ÷þY—@{r¯œèÞ™èì°šÙõ€×ÙAÛrWGXÔc`Ý‚nq›vj÷ÁÁ0t )}žÓCº¦åRa`5ýõ@ZÌ:x mKëúÙûÏ­ê1°nA÷Êš‡~ØC` f›Tú|§OŸw€œÕÖ@»ú'£Òç¹»rÂz <ë&u—ÿ¤¹;â’þÝeоÙÇÛwÿîó Ìê¯ÒVÝ¿;x 훽bÂz ë&u—ÿtGRSÒ�Ù©A¥¶t÷±íHŸÛt¿Yúw‹Ð”¿ø‹¿Xú§Ë€€YÝz «iA›ê‡õ´«¿èß“þ×ý×ÖX7©»ü§Ë=÷ܳôT±îÈKЧB;Ò§î³›>Ç©¥Ïu÷µ—³¬`Xrë�[o½uúµë�² ¬›Ð�yùƒ?øƒ¥þéŸþé²�8íÜé²�tY!ІôyMM©¿ÈLéΚtqÐé_‰‘2[/¬ =«­ºõ~·þ·(ÇÀº ×_ý²¸K:Ú’ŽªºoÚ•>¿é2 Ù³&]þéŸþéì–ÀØ¥z�«Öоs­Ò<@ÖM˜=â’îcM÷©Ã’>×ÝCTº¤Ï?@b=ã`=P—�uƒú—ÿ|ë[ßZºÎ¶ô9ÿ‡ø‡égße@@=ðíoÛzF }ÎÿîïþÎz °b륗^:ˆìܹs²}ûöÉ_þå_f½µ@)¹ý¯µ¤Ï}úü§Ëƒr¿Þb ´Ü~(õ¥äö?©ŸÈ ¬#”’Ûÿ¤~ ´Ü~(õ¥äö?©ŸÈЬ_}õ•H ;'âÄŠ@-jA¬¨”¦ÄJ 5 øÀúå—_J€´°s2,j@¬¨Ô¢ÄŠZ@ij@¬´P ¬#M÷÷qàÀ�ižx≳[0j@¬¨Ô¢ÄŠZ@ij@¬´PЬ_|ñ…H÷÷‘vÈ~`QÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j@ñ�õóÏ?—iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡X?ûì3 �vN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡X?ýôS �vN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j@ñ�õ“O>‘iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j@ñ�õã�?–iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡X?úè# �vN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡X?üðC �vN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡X{yúé§'Û¶mÛPÎ?ÿüɯ~õ«ìÏ‹œvN†¥…°Vn½õÖl HùÑ�~”ýžÈQ¨¥f-(ÝçûÛßNvîÜ™ý¹?ýéO³ßS:j¥Õ¬keQ}>zh¡X?øàƒ°ùùϞݙ֓®¡å~nÄ´°s2,-Ô€Ù¼òÊ+«6™\¾÷½ïeNĨÔR³”êó©iÁšû¥¢PZÍ0›EöùVê@ 5ÀÀÚËVYJKCk ;'ÃÒB èg­#­kå /œ¼þúëÙŸ)jµÔ¬%úüf~‹UƤf èg‘}¾¥:ÐB (>°¾ÿþûaóÔSOMwš«®ºjòÖ[oe·ëçþûï_¶³¥�øôéÓÙm#¥…�“ai¡¤¼ûk¯½vÙç:eµšðòË/¯8‚ÚBP¨¥f-XtŸ?sæÌä’K.Y¶ýÝwß½b»}ûö-Û¦fÍP (­f HYtŸo­´P ¬½l¦‘¥ÌîÈ�<òHv»HiaçdXZ¨)³ d³‹Úo¼1»]”¨ÔR³,ºÏ÷ë@:û /d·KéÿYRr ÚQ (­f HYtŸo­´PЬï½÷^Ø<ùä“Ó&í¼o¾ùfv»\ú;Ú�sÛDJ ;'ÃÒB ˜]”n´Ì6©C‡e·‹5€ZjÖ‚EöùwÞygÙY›´ðœÝf6ýŸ¹Ñ?ϼ¢PZͰè>ßbh¡X{ÙJ#ëïÀVX)z ˜m2éÒœS§Ne·]-o¿ýö²Ë€"×5€ZjÖ‚EöùþBx½¬úžÍÔœyD- ´Z5 DŸo±´P ¬½X5('z ˜=꺞£¢¹ôkÁfF‰¨ÔR³”X×»èÜÌ÷Ì;j¥Õª%ú|‹u …P|`M7:GÍÏ~ö³éxå•WNÞxã�ìv¹ÜrË-ÓïýÉO~’Ý&RZØ9–è5àÀ�ÓÏp:*úüóÏg·JÔj©Y ¢õùþŸ'-TOž<™Ýn‘Q (­V ˆÚçk×�j€�µ—Í6²ÿû¿ÿ[vd¤FÃÙhZØ9iÃîÝ»'û÷ïŸ|ýõ×g¿’½ô£]ȶ5€ZjÖ‚h}¾_wn¸á†ì6‹ŽZ@iµj@Ô>_»´PЬéúñ¨™mdéK¹íúùþ÷¿?ýž”tÔ5·]´´°s_º7£Û÷Ï;ï¼ÉÞ½{—çž¹¤{R®¹æšéKj¹í†5€ZjÖ‚H}þ7¿ùͲËk­ÔJ«Q¢öùu …``í¥ßÈ6štiÁsÏ=—ý¹ÓÂÎI|i8MCjVûŸ‡ë®»ni˜í‹\Ò}lý‡(Üu×]Ùí†5€ZjÖ‚(}~vñ¼ÞáyQ (­F ˆØç£Ô�j€�µ—­4²”–¹-윴#]œ. Þ±cDzÏÄe—]6yà�–¶‰\ ¬jåÔ¬úüì"µöoµ€ÒjÔ€h}>Rh¡XÓ™¨I9ÝŽ³Ù¤{[Ž?žýù‘’þ.r~‘E$ ²)Qk@º�e¶‘å¶Rºš¹A1Lݾ—Û/�Ú}þ­·Þš\}õÕË~ÞÃ?œÝ¶TÔJ«Q"õùhu …``í%ýåt;N:-úôéìvýÌ~6ò½5“þ.úf‘Egûöíak€�5fƒb˜º}/·_.:5û|Äa5E- ´5 JŸwÐjsЬéxÔ<þøãÓ�çŠ+®XzRn»\þã?þcÙÎ÷ÐCe·‹’vNÚòꫯ.Ý»Úÿ¤{[Ó×ú1·?ÖNºT¨ß@®¿þúìvCŠ@-5kA­>ŸîKÛµkצ¿‘Q (­F ˆÐç£Ö�j€�µ—­4²Ù�p£ß_:-윴áàÁƒK÷ªvû~Jºü÷öÛo_öª›è5àæ›onæó;�¨ÔR³Ôèó¿þõ¯']tÑôûÒ½jÏ>ûlvÛQ (­V ¨Ùç#×�j€�µ—­4²”þá‚ .˜;v,»]„´°s_z R·Ï§¤Å\÷�¥YÑk@ÿó¿•F2{÷Î;ïÌnW;jµÔ¬¥û|ÿ÷[ï÷”ŽZ@iµj@­>½´PЬéÚí¨yì±Ç¦;SjdéÅà¹íVË}÷Ý·lgßJh¡XÓiô¨yôÑG—í€'NœÈn—Kº¬¨Ô&í”¹í¢¤…�“ai¡¼øâ‹ËŽšn´ôkHÊwÜ‘Ý.BÔj©Y JôùÜ"5·]”¨”V³”êó-Õ�j€�µ—­4²›nºiÙŽ™.Èm%-ìœ K 5 eö³œŽÀ9r$»m?¹Ë~6RCJG  –šµ`Ñ}~v1}XMQ (­f HYtŸo­´P ¬½l¦‘ÍqÝÈ÷ÖL ;'ÃÒB HIOݳgϲÏôZŸëÙ£µ)é�³¿øÅ/Vl)jµÔ¬‹ìó³µ£…µ@ŠZ@i5k@Ê"û|‹u …P|`M/î�šÙ#"›IÚ�Ÿyæ™ìÏ�”vN†¥…Ð%=˜!×ÌÖ5ÖV³,²Ïoõgתj¥Õ¬]Õç[¬-Ôk/[ÝÉÒ%‡ÎþìhiaçdXZ¨³¹÷Þ{³ŸõÕrùå—OŽ?žýYÑ¢PKÍZ°È>?{™áFc`e,jÖ€Ù̻ϷXZ¨ÅÖtª°¦kÆ¥~ZØ95 VÔjQ bE- 45 VZ¨Ö‘¦…�“aQbE  µ VÔJSb¥…``iZØ95 VÔjQ bE- 45 VZ¨ÅÖtC²ÔO ;'âÄŠ@-jA¬¨”¦ÄJ 5ÀÀ:Ò´°s2,j@¬¨Ô¢ÄŠZ@ij@¬´PЬ'Ož”iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XOœ8!ÒÂÎɰ¨±¢P‹Z+j¥©±ÒB 0°Ž4-ìœ ‹+jµ¨±¢Pš+-Ô€âëñãÇ%@ZØ95 VÔjQ bE- 45 VZ¨Ö‘¦…�“aQbE  µ VÔJSb¥…``iZØ95 VÔjQ bE- 45 VZ¨ÅÖcÇŽI€´°s2,j@¬¨Ô¢ÄŠZ@ij@¬´P ¬#M ;'âÄŠ@-jA¬¨”¦ÄJ 5 øÀzôèQ �vN†E ˆ5€ZÔ‚XQ (M ˆ•j€�u¤iaçdXÔ€XQ¨E-ˆµ€ÒÔ€Xi¡XGšvN†E ˆ5€ZÔ‚XQ (M ˆ•j@ñ�õÈ‘# -ìœ ‹+jµ¨±¢Pš+-ÔëHÓÂÎɰ¨±¢P‹Z+j¥©±ÒB (>°>|X¤…�“aQbE  µ VÔJSb¥…``iZØ95 VÔjQ bE- 45 VZ¨ÅÖ×^{M¤…�“aQbE  µ VÔJSb¥…``iZØ95 VÔjQ bE- 45 VZ¨ÅV‰•È;'Ã’Ûÿ¤~ÔJË퇭fÇŽ“]»ve­µ¨”’Ûÿ¤~"×ëÈyçdXrûŸÔ�@i¹ý°ÅüÙŸýÙdÛ¶m“?üÃ?œìܹ3»MKQ (%·ÿIýD®ÅÖœÛn»mÅÿ©(I ˆ¨¡ÕZ°gÏž¥¡5å¯þê¯&ÿýßÿ�Ý®Å@IÖñ‰�U–JRâjh¹üøÇ?^VÓÐúÍo~sòÏÿüÏÙíZ ”d=/‘TX8 �mçdørû¡Ô‹@-¹ý±µüã?þãäßøÆÒàú'ò'“}ûöe·k!j¥åöC©+À�9sf²{÷îée·ß~ûä믿>û«l†�`Ž<89ï¼ó–†Öô$áC‡�ý6ÊÀ 0géÌêÞ½{§g[¯»î:g[6ÁÀ ° éìj:Ëš†ÖtÖ5�}`ý ¬ –îgíζ^vÙeK÷»pnV€^}õÕ¥aµ;Ûºÿþ³¿Àj ¬¥Aµ{(Ó®]»–Yò ¬…yÀúX*ñ €µX*ò €ÕX𠀕 ¬�xÀïX‚ñ €ß1°å8ÀØXó `Ì ¬ ð `Œ ¬�ð `l ¬�ñ `, ¬�ò `è ¬ ó `È ¬à8ÀXÂ+p€¡1° ŒWàCa` ¯À†ÀÀ 0`^�´ÌÀ 0^�´ÈÀ 0^�´ÆÀ 02^�´ÂÀ 0B^�´ÀÀ 0b^�Df`9¯À¢2°°Ä+p€h ¬,ã8@VVð  +«ò  &+kò  +ëâ8@iVÖÍ+p€’ ¬l˜Wà%XØ4¯ÀÉÀ À–x°(VæÂ+p€y3°07^�Ì“�€¹ó ` ¬,„Wà[e``¡¼Ø,+Ex°QVŠñ `# ¬ç8ÀzX¨Â+p€s1°P•Wà«1°P�Wà9VÂð  ÏÀ @8^�$VBò ÀÀ @h^�ãe` <¯À�q2°Ð ¯À�q1°Ð¯À�ñ0°Ð$¯À�á3°Ð4¯À�á2°Ð<¯À�a2°0^�Ãb``P¼†ÃÀ À y´ÏÀ À`y´ÍÀ Àày´ÉÀ Àhx´ÅÀ À¨x´ÃÀ À(yÄg``´6ó ƒ-”c``ôÖû œîRâxàìW€E2°Àÿ·žWà¤Aµj�Å3°@Ϲ^�“îwM¿–.ËÀ «½' ´Ý0{®û]�­1°À*V{N÷µt 1°8V8‡ÙWà<ùä“KÿžÒ�yæÏÀ kH_J¹çž{&ßúÖ·¦ƒjw/kz-°VXEºGµP»|ó›ßœüÑýѲ¯­ö`k ¬°Š4°¦a4=€)Ý·Ú]<›t¶˜?+U]zé¥MåÏÿüÏ—^{³}ûöÉÿñO‡ÖôµÜö­"0°PUnXj)éìêÎ�; ¬°Vªê¤¯¾úJÄÀJ$Vªê¤/¿üRÄÀJ$Vª2°ÆJ÷÷qàÀ�ižx≳[P–�€ªºé‹/¾�éþ>Ò�ÚÔ`` *k¬X‰ÄÀ @UÝ€ôùçŸK€X‰ÄÀ @UÖX1°‰�€ª ¬±b`%+UuÒgŸ}&b`%+UXcÅÀJ$Vªê¤O?ýTÄÀJ$Vª2°ÆŠ�•H ¬Te`�+‘X¨ª�>ùä +‘X¨ÊÀ+V"1°PU7 }üñÇ V"1°P•�5V ¬Db` *k¬X‰ÄÀ @UÝ€ôÑGI€X‰ÄÀ @UÖX1°‰�€ªºéÃ?”1°‰�€ª ¬±b`%+UEXo½õÖɶmÛ²ùÑ�~”ýžõäé§ŸžûÏœg ¬Db` ªn@úàƒªç•W^™ìܹ3;Pæò½ï}/ûsrYïϾçž{²ß_*V"1°PU”�u­3ªkå /œ¼þúëÙŸÙe£ƒpÍ¡ÕÀJ$Vªê¤÷ß¿JÞ}÷Ýɵ×^»bh¼êª«&o½õÖŠí_~ùåÃgZOŸ>½bÛ”ÜÏä‘G–msæÌ™É%—\²æ6¥b`%+UÕX÷íÛ·lP\mP�Íý÷ß¿ìûn¼ñÆìvO=õÔt›óÏ?ò /d·›lWûy‹Ž�•H ¬TÕ Hï½÷^ñÌž-MÃê›o¾™Ý6—þК†ÑC‡-ûõwÞygÙz÷Ýw/ûõÙ<ùä“ÓmÓYÛS§Ne·[d ¬Db` ªZëì0¹™ñí·ß^v)o:+ºÚ¯çÚÙôh+X¨¬ÖÀ:{võ\g?WKÿ,ëfF—þÖ�ží�W ¬Db` ªn@J÷p–Ì�¦Ãa:ûùüóÏg·+•tßlÿlíøÃìv‹Ž�•H ¬TUk`½å–[¦Ãá•W^9yã�7²Û•HxN¹á†²Û•ˆ�•H ¬TÕ HéžÒRI÷–^sÍ5ËÄÜv‹ÊìïßÏ]wÝ•ýžR1°‰�€ªj ¬éÞÐþå·¥‡ÄÙß¿ŸÒÃól ¬Db` *ëʤ{jŸ{î¹ì÷.:V"1°PU7 �9s¦XÒýª³kn»’™ý3¥¡õÙgŸÍn»ÈX‰ÄÀ @UÖß'=)øê«¯žþ¹®¿þúìv‹Œ�•H ¬TÕ HéAD¥’.É� sÛÕÈã�?>ýsugYsÛ-*V"1°PU��5åæ›ož†W\qÅäÔ©SÙíJçõ×_ŸìÚµkúg{衇²Û-*V"1°PU­�u^g2gÏÖÞyç�ÙíÖ›ÙŸg`eÌ ¬TÕ HéþÍ’9}úô²3™iÐÌmw®¼ôÒK“‹.ºhús|ðÁìvëMº¿¶?°nõçm4V"1°PU­�5¥Yð\09zôhv»µ2{iñÉ“'§¿öØc�møç÷éíÛ·O~ùË_f·[T ¬Db` ªn@J—–΋/¾¸ììh8Oœ8‘Ý6—G}tú½)wÜqDz_Ÿýùéliÿ×s¹ï¾û¦ÛoôÏ3�X‰ÄÀ @U5Ö”›nºi: ¦¤3¡GŽÉnÛO°LYm¸ìÿüs  ³îì\"V"1°PUí�5=•wÏž=Ó!±ËjÃåìP™’.ÝýÅ/~±bÛÜö«m»ÞxÑ1°‰�€ªº)=l¨VÒ}£¹¡u=Iè3Ï<“ý¹]f/>WÒYÞÇgÖ¢c`%+UEX»Ü{ï½Ùrµ\~ùå“ãÇ�gÖlÖ;´näg."V"1°PU7 ¥Ks£$]Š{ñÅgÊ”üàÙï[O<˜ý™iP=vìXö{JÆÀJ$VªŠ8°Ž9V"1°PU7 ¥ûH¥~ ¬Db` *k¬X‰ÄÀ @UÖX1°‰�€ªºéÔ©S V"1°P•�5V ¬Db` ªn@:yò¤ˆ�•H ¬Te`�+‘X¨ÊÀ+V"1°PU7 �8qBÄÀJ$Vª2°ÆŠ�•H ¬TÕ HÇ�—1°‰�€ª ¬±b`%+UXcÅÀJ$Vªê¤cÇŽI€X‰ÄÀ @UÖX1°‰�€ªºéèÑ£ V"1°P•�5V ¬Db` *k¬X‰ÄÀ @UÝ€täÈ +‘X¨ÊÀ+V"1°PU7 >|XÄÀJ$Vª2°ÆŠ�•H ¬TÕ H¯½öšˆ�•H ¬Te`�+‘X¨ª�$V ¬D`` ªÜ°$õc`%+áÜvÛm+&©¨ÁÀ @8Öx� ¬„sàÀ +µXÉÀ @HVB2°’�€� ¬„d` $+!XÉÀ @HVB2°’�€� ¬„d` $+!XÉÀ @HVB2°’�€� ¬„d` $+!XÉÀ @HVB2°’�€� ¬„d` $+M&ÿX&N†Ök¨6IEND®B`‚doc/deep-copy.png000064400000025217144760121710007716 0ustar00‰PNG  IHDRŸ^:«DsRGB®ÎégAMA±� üa pHYsÃÃÇo¨d*$IDATx^íÝɯeeÕ`œ~#’bƒ 82&BL8˜8@Ð84!N¤1±Lœ€ÒŒT“ŠÐÒ‘&0£ï”F#ú*Š®è”^ÿƒûå½Ö>î{jWÕmÎû®µ÷~žäÈ­}›ª»ÏZïÚÝ9i *3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'U}ùË_–„€†z�Ä¢>©j¨àI| …¡$ñ�(†OªêŠÜ¿ÿýoIM€–¬rÅ:€h†OªêŠÜgŸ}& ¢éÐ’u@®XÍðIUšN®t¿�ýû÷/rï½÷ùmÀjYäŠuÑ ŸTÕ¹O?ýT¤û}”FÓÔ`�+ÖD3|R•¦“+š-YäŠuÑ ŸTÕ¹O>ùDDÓ %ë€\± šá“ª4�\ÑthÉ: W¬ˆfø¤*M'W4Z²Èë¢>©ª+rü±$ˆ¦@KÖ¹b@4Ã'Ui:¹¢éÐ’u@®XÍðIU]‘ûè£�$A4Z²Èë¢>©JÓÉM€–¬rÅ:€h†OªÒtrEÓ %ë€\± šá“ªº"÷á‡J‚h:´d�+ÖD3|R•¦“+š-YäŠuÑ ŸTÕ¹>ø@DÓ %ë€\± šá“ª4�\ÑthÉ: W¬ˆfø¤*M'W4Z²Èë¢>©ª+rÿú׿$A4Z²Èë¢>©JÓÉM€–¬rÅ:€h†OªêŠÜ?ÿùOIM€–¬rÅ:€h†OªÒtrEÓ %ë€\± šá“ªÆÞt®ºêªµ“N:i=§œrÊÚ_ÿú×ÁíÆM€–²®VÝߟ}öÙµ3Î8cñ5û¹ãŽ;?'"ÖD3|RUWäÞÿýÑå™gž9ª‘\ýõƒÛŽ%š-e\¬²¿}­c¥ ¡C_£e¬ˆfø¤ªŒMg³ùÃþpTã8í´ÓÖ^{íµÁíÇM€–2®VÕß|ðÁ£¾Î‰=€ZÍðIU]‘{ï½÷F•wÞygí{ßûÞz£( éG?úÑ¢qÜ~û탟3†h:´”m°ªþ~øðáµ³Î:kñ¹%×]wÝQÛ]yå•¶)ßóСCGm×*ÖD3|RU¶¦³Ù<ýôÓ‹ËhÎ;ï¼µ»ï¾{Ñ8.»ì²ÁÏC4ZʶXUÿýï¿ø¼rÏè_þò—ÁíJxà�Ŷ%CCj«XÍðIU]‘{÷ÝwG•~S)M¢ß¬J“yüñÇ?/{4ZʶXEûí·gO»¯3´]?ý3 eè}ã�7·«ë¢>©*[ÓÙLÞzë­Å¥4]#ÚN£ÉM€–2­VÕß·3°Þÿý‹ïQ.½}õÕW·«ë¢>©*SÓÙlú ¢t²´4ò¨åN¢éÐR¦uÀªú{øÜì ¹�Ï©ë¢>©ª+råÿ±äg?ûÙ¢ ýêW¿Z|üÍ7ßÜpÄô±ÇÛðycˆ¦@K™Ö‘ýý¾ûî[|ï2|©*KÓÙLʃ¾ûÝï.šÃµ×^{Ô6å>�îÈitÙN4ZʰˆìïËß{hðmë¢>©*CÓÙlúG&Ë%9�>úèàv?ýéOÓ4‘­FÓ ¥ 뀨þ¾©ª+råғ̹çž{64‰­äÔSO]{ùå—¿n¶h:´½hÝßË¥ºgžy憯sË-· në¢>©*ºél6W\qņF±Õdj,Ç‹¦@KÑ뀖ýý©§žZ;ýôÓŸÛ]º;´mT¬ˆfø¤ªè¦³™ ¥Üj.¹ä’Á¯�-š-E®Zö÷å3¬Y¯Š² šá“ªº"WîÈš»ï¾{C³x饗·[Î�7Þ¸ø¼]»v­ýùÏÜ.S4ZŠ\´êïýíK¾ùÍo®©ª+råÍ›3æ‰'žØÐ`n¾ùæÁí†R.ç¹à‚ Ÿ[Žt8p`pÛ,Ñth)jТ¿ žËÛd‹uÑ ŸTÕt6›~ã(—ä¼øâ‹ƒÛ+Ë�g+Í-"š-E­j÷÷»îºkß�að,± šá“ª¢šÎf²|ds;�cùÈjöæ£éÐRÄ: vã•O]¬ˆfø¤ª®È•7nΖ¿ýíoËÿøÇÁ펗C‡mh@åèê /¼0¸m†h:´±¨Ýß—Ïzn5å!F?üðQß³E¬ˆfø¤ªˆ¦³ÙÜpà ‹F°“¡q¹ m§ÉµŠ¦@Kë€ÚýýòË/ßðñ­ÆðÉœ>©ª+rå•L)—Ç|éK_Z4‚üàƒÛm&Ë_ëœsÎYo¯¡m££éÐRëu@íþ^î=ÿüóÛNÊðùÐC ~ÏÚ± šá“ªZ79~4Z²Èë¢>©ª+råÞ ‰�¦@KÖ¹b@4Ã'Ui:¹¢éÐ’u@®XÍðIUšN®h:´d�+ÖD3|RUWä^}õUIM€–¬rÅ:€h†OªÒtrEÓ %ë€\± šá“ªº"wðàAIM€–¬rÅ:€h†OªÒtrEÓ %ë€\± šá“ª4�\ÑthÉ: W¬ˆfø¤ª®È8p@DÓ %ë€\± šá“ª4�\ÑthÉ: W¬ˆfø¤ª®È½òÊ+’ š-YäŠuÑ ŸT¥é䊦@KÖ¹b@4Ã'Ui:¹¢éÐ’u@®XÍðIU]‘{ùå—%A4Z²Èë¢>©JÓÉM€–¬rÅ:€h†OªêŠÜK/½$ ¢éÐ’u@®XÍðIUšN®h:´d�+ÖD3|R•¦“+š-YäŠuÑ ŸTÕ¹_|QDÓ %ë€\± šá“ª4�\ÑthÉ: W¬ˆfø¤ª®È½ð ’ š-YäŠuÑ ŸT¥é䊦@KÖ¹b@4Ã'UuEîù矗ÑthÉ: W¬ˆfø¤*M'W4Z²Èë¢>©ª+r-sæ™g®�qƃ–)åg,?ëПՎ¦@ C=¨v¬Në¢>©j¨àÕÎÉ'Ÿ¼vÒI'­íÞ½{ðÏ3¤ülågܵk×àŸ×ަ@ C=¨vJoË: ¬Y†þ¼v¬ˆbø¤¹«¯¾ú¨¢·ª|ûÛß^/æ%¿ùÍo·É�_ü⋟ó‚ .ܦe •šë€ÒS»þZzíÐ6RÖ(ÝÏYÖ.CÛ´ ´bø¤¹ZMçÇ?þñ¢�—ÿÚ&S2ý¼ÐŠuÀcÀ>inÿþý+Ï•W^¹(à_ÿú׷ɘ¯~õ«ë?óÿýßÿ­ÿ†¶©M€–†zÑNSzh饥§–Þ:´MÆ”5K·~ùÉO~2¸MíXÐ’á“Ñ;|øðâ>Ï={öùèxœ}öÙë?{ù;üç?ÿ9òQ`3Jïìî¡,=ul.ºè¢Å:à¹çž;òQ˜&Ã'£VNyR\)Úå¿cÞ¦ðw€(]-¨uäfødÔÊ™Îîha9:VåHgwö¶Nl*g ËÀÙ­Ê Seød´öîÝ»^¤K¦p™Êã�?¾øû\sÍ5G> ¹é¦›}óÎ;ï<òÑñr š90|2Jý†Sþ*¦ú÷€UšêÛ2Dw¯}ûöù(L‡á“Ñ)G»Â\Î~N�À±Mý a:»uÎÎèBŸá“Qé7œ1>Ùv³º'àŽõá PÃ\Îã@4Seød4æÒpŠòwëïÁð_ý NyPtkž9ü]™Ã'£1·÷ÜúeE°S{Ðà‰”µÎ\º3†OFa®—ŸxðÌ÷�|D35†OÒ›û`=x€9ë`S|Ðà‰ôŸì;Ç¿?Óbø$5ï}ù_<À•KM»Á³Ü~3Ws?Ït>IË¥&u÷}x.sàžÇ�ævÏ+Ódø$% çhåßÀp˜ Wý­ÿ´_ÿ&Œ‘á“”æödÛÍr6€9è?ï Ü‚Ã98ÏØ>IÇ‘Îãó\¦LŸ;¾2pv¢ç|,ãdø$7ÔoŽ'à0E®ðÙÿNŒ•á“4úG:çüdÛÍr†€)Y¾¤”ãë°w†˜±0|’‚#xÛ㾦Âó¶Î•PŒ�á“p¥ÁxŠëö¸ï€)p5Ïöù·cL Ÿ„ëÎÞyÿÊíqÖ€1ó¼‡�³–b, Ÿ„r´n54nƨôþ®yÞÃö-_Ef%+Ã'aܧ°Z¥iwÿžÞ €ì>¼¸rgÏž=G>Êv¹Š10|Â{xÕáL2cPÎÌu—Š:S·:åàs·¾r&™Œ Ÿ4çÈ\=š9cÐ?XZ΀²:nÅ!3Ã'M•aÈ“më*ÿÆÝpï ¸dã6‘úºá¾Ä•Pdbø¤©î¬œ§±Õåì29+×N¹�¶ü;;»L&†Ošq?b[<™80Ú–[qÈÈðIýKl<Ù¶�þ¿»�€(ýÛnÜÒNÿ‰ÂþÝÉÀðIuÎÀÅrÙ ÑÜvÇg21|R•‚Ïe7DrÛM<'ÈÂðI5eÈq©GÞȀ彼»¡Çm7±ÜE†Oªp¶-Ÿr´¹k:{÷î=òQ¨£¼�J×wÊJº'ûýКᓕrfm<€Zú=Æ`““3ÓD1|²2 Ùx8* @ ®®�þ=¹åª5hÁðÉJ”á¥<=Ùv<€UrõÓøø�Ñšá“sm¼ÊQé®é8ê Àvõû‰'ª�‹‡DÒ’á“ëßÛ¡h��£žìDÿê'WÒŒS¹j­[Ëy5>Ù÷vLƒ£žl‡«Ÿ¦Áï‘V Ÿl›3fÓÒ?ê©é°^N‡gAЂá“m) ¦<ÝÛ1 Žz°ûöí[¬¼¯÷4ô×wÞ¹€ Ÿl™#cÓUšN÷»Õt8–;ï¼s1¤”!”épe5>ÙgǦÏû~p<TN_éÿÝZÀYmVÉðÉ–ôŸlëihÓå¨'CÊAçÝ»w¯÷‡ršér?/5>Ù4O¶�M€eÝÃéÊêê§ië_íæ÷ͪ>ÙgÂæÉpè8(9?Ît³j†ON¨4˜nðôdÛyéõt�/À|9=_eX8”ß½{|Ù)Ã'ÇÕ/8žl;OšÀ¼õB{Ý<õŸnl`' Ÿ“³^túOÀõH}€ùðöjtœýf Ÿ“ûýèë¿™x9 À´9Í2÷ý²S†O). ±_̇·Wcˆ“ì„á“£¸¬‚ã鎂{ì:Àt•ûúºµ€ƒ�ô9#ÎN>Ù oŸÊRšŒÇ®L—ƒÐœH9 QÎ|–}ĽÀl…á“…~!ñTSŽÇ¾0Mê;›Uö•²Ÿ”x+>6ËðÉ:—P°UýÇ®{.Àøõ¯l)÷õÁ‰8KÎV>Yçæq¶Ãp¦£;íž~¶¢œõìÖåö-8Ã'ž`ÊŽØÆO-g'ì?l–ásæ\.Á*8Z0^®ba§Jïwû›aøœ±þ={žlËN”&ã>!€ñé?åÞýûìDY ”3Ÿe_*( 1|ÎT¹$¢+žfÇ*اÆEÝfÕìSœˆás†úg©™b•\Æ 0.“¤OÃçx Ÿ3Ô5÷çQC¹„»k:žz�“§ÜSSÿ>b£é3|ÎŒ§‘Ñ‚ý ¯î­1Ôhj²`ˆásF<ÍŽV\Î�“Û#hÉv–>gÂõ÷´VšLi6eŸó\€xåìS·(g?¡6£Yføœ�Òlº!À“Çhɾ�Cÿ€àž={Ž|êë¯ì{>'®4O¶%’K¼b9ûD4gÝé>'®k6žlK$OÀˆãÁ/dà`4…ásÂ42éï�‡>òQjrð�Lº'-—X›Î“ás¢úÍÆ“mÉÀe_mõ6èLY”û>Ë>éäÈ<>'Èe dUÎxzè@}eQßÕ[|#£çÍð91š Ù•}´ìŸ%:°ze1ïaƒdVöÑn½êíØæÅð9!^ÈŒ…³óõtoìïaƒdæ„É<>'¢4—00&:°z6ȘôFïÛ·ïÈG™2ÃçDh6ŒQÿ¡ž€ °3®*aŒÊÐÙí·’9}†Ï ðuÆÊ{€Õ(ý¿[ ”uŒ‰“(óaø9G9;OÀØ™~uïcÕŒ.û²ƒÑÓeø17j3e_.ûq‰'àlž+H˜ ûò<>Gª¼ »ÁÓ“m™gñ¶Î½óL‰+Ógø!G†˜*OÀؼþ3ÔL¦¢ÿ²«¡¦Çð9Bý£œš SÓß¿Xæj¦Ìþ=]†Ï‘qfˆ©sfàø\šÈXóN“ásDb.,¬†•r]}ô̦Î=ÍÓcø‰²ïO׿3Þ³àh® aN\ 5=†Ïð>ˆÌ•³ýÿS®)õ°¬ \†È\ô×ÁÎö�Ÿá39G|˜;‹-€µµ}ûö­×Â’;ï¼óÈGaÜŽ3†Ïä\ëkëG:»×�0ÀÜôoC(C(Ì‘«¡¦Á𙘧|Á¹˜+g|àúïmë €q2|&åèldÌ�op4·ãŒ›á3¡òBêOO¶…ÿñ\`NÜrúƒ2»wïöÚÃg2ý³;žl Gë_à’`ªº[oœÝ�£•�³ žå5⪀q1|&R^8.¯�sÉ 0en½�런q;Îx>qy lžKn€)rë lžÛqÆÇð™„39°5eàì_r0vý7Ówë lŽ+ÆÅ𙀠l�Kn€©pë l_w§ÄIœÜ ŸÁ\.;S:Ô½†¼ù:0Vý+ ÊP`kÊÕ^Cù>9k«Q†Înõ\`lúoœ_J[çê�q0|ñ�Õrß40Fý«7Üz;Ó¿oº<È“| ŸA<ÙV¯; ã ¸À¸ VÏë*7Ãggh Ž2pz.0êÔãažy>ób€ºñÆÀ•P—{©s2|6Ô¿¯Ã“m¡÷P™¹ ÚðZËÇðÙˆ³1Ж#ž@Fý+ <�ê*W¸Ê Ãgî뀎x™xoohÏ:<Ãgޏ@ŒþÏò_¯? Jÿ- \m¹1Ãgeμ@¬2pv Ç{~ƒxž½’ƒá³¢}ûö-vr÷u@G<�H{öìY¯?¥•3 @ ï:ÏðYIÿèJB�XaïÞ½‹Úã (ˆçªÄX†Ï œe�œ<hÉA/ȩ܆S^—®FhÏð¹bå>OÔ‚¼ñZèˆ.g?�<܇Çð¹bÝŽìɶ�“†ÔVêJ7xzÐäÔu¹/›6 Ÿ+äŒ Œƒ…!P“\0e½^^«%n•kÃð¹"ý{É<ÙòsIPƒÑ0.îÍnËð¹vZ'¯]`•¼ÅŒ“¶cøÜ¢îô|wmxÿì‰Óõ0>CoƒÐ½'Ÿ³À±,¯¼ÅŒÛÐU Ö«gøÜ¢n¡ZvP÷�Á4tÍ¥¼žËºär\àXúë�²0u Æ­¬ë—ï×¶X=Ãçuo£rë­·z LÄrÃ)¯ïòÿåõ0äXë`¼ú'–Êë¹»¢Áz`u Ÿ[Ð]bSvÊîHHù§âaü–¹Þý¿×7°¬¿è¿Y½Ñ0~ËW2X¬–ás ºKlº#œ%å¦äÒlÊÃJºû>€ñ(¯ÛrVyw Ê’/|á ëÿu© °¬[tu¢,NKý°€ñê¯ú÷på+_±X!Ãçt—Øt¹þúëןŽÕ)ñt;�rð¨{í–×qi,åuÝ}¬Ä¥6À2똖¡õÀUW]µøX‰õÀj>7©;#ò¹Ï}ný¿Ÿÿüç7ì�eG-§æË¥{À8”×ki0ýcIw6£‹Km€Nÿ ‰’åza=ãs¬õ@·ÞïÖÿÖ;gøÜ¤K.¹dÃÎØ¥)G;ÝçãU^¿åR›å³]¾ÿýïÙ˜»R†ê„õŒß‰Öe`g Ÿ›´|$¤Ü÷éMéazÊëº{€H—òú(¬`¬ê0|nBÿ›¯}íkë×…ÓV^çßùÎw¯}—ÚýõÀ7¾ñ ë˜�ò:ÿÖ·¾e=°"U‡Ï/ùË“Ègœ±¶k×®µ/~ñ‹ƒ>¶@+CûߨR^÷åõ_.Áúó1ZÚ%>ÐÊÐþ'ñ‰`øœa •¡ýOâ­ í‡hehÿ“øDh2|þûßÿ–‰Üј'5 WÔ¢¨¹¢К�+‘5 ÉðùÙgŸI‚DîhÌ“�+jQÔ‚\Q hM È•È`øœQºßÇþýû¹÷Þ{�ü¶`õÔ€\Qˆ¢äŠZ@kj@®DÖ€&Ãç§Ÿ~* Òý>ÊÎÕÔ¢äŠ@µ WÔZSr%²>g”È�yRrE ŠZ�+j­©¹Yš ŸŸ|ò‰$HäŽÆ<©¹¢E-ȵ€ÖÔ€\‰¬†Ï%rGcžÔ€\Qˆ¢äŠZ@kj@®DÖÃ猹£1Oj@®¨DQ rE- 55 W"k@“áóã�?–‰Üј'5 WÔ¢¨¹¢К�+‘5Àð9£DîhÌ“�+jQÔ‚\Q hM È•ÈÐdøüè£�$A"w4æI È5€(jA®¨´¦äJd 0|Î(‘;ó¤äŠ@µ WÔZSr%²>g”È�yRrE ŠZ�+j­©¹Yš Ÿ~ø¡$HäŽÆ<©¹¢E-ȵ€ÖÔ€\‰¬†Ï%rGcžÔ€\Qˆ¢äŠZ@kj@®DÖ€&Ãç| ¹£1Oj@®¨DQ rE- 55 W"k€ásF‰Üј'5 WÔ¢¨¹¢К�+‘5Àð9£DîhÌ“�+jQÔ‚\Q hM È•ÈÐdøü׿þ% ¹£1Oj@®¨DQ rE- 55 W"k€ásF‰Üј'5 WÔ¢¨¹¢К�+‘5 ÉðùÏþS$rGcžÔ€\Qˆ¢äŠZ@kj@®DÖÃ猹£1Oj@®¨DQ rE- 55 W"kÀì‡Ï‡zhí¤“NÚRN9唵¿þõ¯ƒ_/s"w4æi 5àx¹êª«k@ɯýëÁÏÉ5€(‘µ uŸöÙg×Î8ãŒÁ¯{Çw ~N먴YŽ—Z}>{ˆ¬M†Ï÷ß?m|ðÁÁc3éšÓÐ×͘È�yC XÎ3χ¾F«¨´Y–S³Ï�¥DÖÃçšRɘÐÈ�yC èçxG@�—ÓN;míµ×^üš™¢%²´èóÛùs]x2O‘5 Ÿš}~Lu ²4>ß{ï½´yà�;Àyç�·öæ›on×Ïïÿû ;NÙ!:4¸m¦DîhÌÓj@É;ï¼³ö½ï}oÃëºäX5áé§Ÿ>êÈæê€@”ÈZP»Ï>|xí¬³ÎÚ°ýu×]wÔvW^yå†m"k†Z@k‘5 ¤vŸ[ˆ¬†Ïm4¥’å�òöÛoÜ.S"w4æi 5 d¹lw�zÙe— n—%jQ"kAí>߯å,é_þò—ÁíJú?KÉÐâ´EÔZ‹¬%µûüØê@d h2|¾ûî»isÿý÷/~ùeG|ã�7·JG.;ãÐ6™¹£1Oc¨Ë Ì­Ö�å†óøã�n—!jQ"kAÍ>ÿöÛoo8›R‘ËÛ,§ÿ5·úó¬*j­EÖ€Ú}~Œu ²>wДú;£áŽ–½,7ŒrùË«¯¾:¸í±òÖ[om¸Ô&s-PˆY jöùþ¢v³Ÿú?ÏvjÎ*¢ÐZT hÑçÇX"k€áÓðyä·«—½, ÝÌÑÊ¡ôkÁv¿F‹¨D‰¬­†ÏÍ. ·ó9«ŽZ@kQ5 EŸcˆ¬M†Ïr“oÖÜwß}‹�éÜsÏ]{ýõ×·ÊÏ~ö³ÅçÞvÛmƒÛdJäŽÆ·Ù”þñ�l8bÑ<¶šÈ�iÙ³gÏÚ¾}ûÖþóŸÿùȰì5 ¿°Üê¢tŒQˆY ²õù~ݹôÒK·©µ€UɾÈÚç£ë@d h2|–ë­³f¹)•÷ðÚ®ŸŸþô§‹Ï))GC‡¶Ë–È�é(÷2tûþÉ'Ÿ¼¶wïÞõGŒÉ\Ê=ßýîw—Rü‡¶›RÔ¢DÖ‚L}þïÿû†K£Öj«�}=�µÏg¨‘5ÀðÙkJ[M9}ÿè£�~ÝŒ‰ÜјŽÒXJƒ)�¦ÿz¸è¢‹ÖQ_æPîûê?@àÚk¯ÜnJQˆY ²ôùå…ðfáQ X…ìë�Œ}>Kˆ¬†Ï4¥’1-X#w4¦§\bS.µÙ½{÷†×ÄÙgŸ½vÓM7­o“¹>ÕÚ‰¬úüò‚3úàµZÀ*e]dëó™ê@d h2|–##YSþ¡»�`»)÷‚¼òÊ+ƒ_?SÊïbèç©‘Ò„J²Ö€rßÇrSÚnJéjrD³aÞº}oh¿¬�è>_ÞÈþ /Üðõn½õÖÁm[¥ü.ú?�HÍD­2õùlu «ÉëÃg¯)•S߇Ü®Ÿå�y+Ÿ™ò»èÿÌ"µ³k×®´5ÀðÙ¶Ù0oݾ7´_ÖNdŸÏ8x–”ßEÿg©�ˆõ@–>ŸõTIÄz ÉðYN3gÍ=÷ܳؾùÍo®¿ÏÎÐvCùío»aGºå–[·Ë’È�izî¹çÖïíè¿ʽåcýâ6´?F§\ŽÓo—\rÉàvSŠ@”ÈZÕçË}\gžyæ¶?¿fÔV-ãz CŸÏZ"k€ásMiy‡Úêç·NäŽÆ´Üyç�ë÷rtû~I¹¤æšk®Ùð¸õì5àŠ+®ÍëwQˆY "úüSO=µvúé§/>¯ÜÛõÈ#� nµ€Uɾˆìó™ë@d 0|î )•ôwêSO=uíå—_Ü.C"w4¦£<< ÛçKʬ{ À²ì5 ÿúßISX>ºúË_þrp»è¨D‰¬­û|ÿûmösZG-`ưˆêóÙë@d h2|–k�³æî»ï^ì¥)•7‘ÚîX¹ñÆ7ìX/½ôÒàv¹£1-åRšòÆÒË�R_–½”û·úg5J3ÚîDyòÉ'7ݼùæ›·‹Ž@”ÈZвÏ÷·Ýî÷kµ€Uɾˆèóc¨‘5Àð¹Ã¦´|:?c“é¹£1Oc¨Ëg5¶si,u@ Jd-hÕç—œ_|ñàv¢ÐZd hÙçÇR"k@“᳜ªÎš»îºkÃÎtàÀ�Áí†R.ÝéM);ØÐvY¹£1Oc¨O<ñĆ£™[­ýRò‹_übp» QˆY Zôù¡çÐvY¢ÐZd hÕçÇT"k€ásMéòË/ß°“•SðCÛeIäŽÆ<�¡”,¿–Ë‘Ñ_|qpÛ~†.­ÙJ i5€(‘µ vŸ_^˜f?Æ:Yš ŸåM^³fùHÅvRvƇ~xðëgJäŽÆ<�¡t)%jL›‰ÇY jöù�~í¨Ú¡ÐZd èR«Ï�±DÖÃçw˜rÚþ…^üÚÙ¹£1Oc¨˹á†_ëÇÊ9眳öÊ+¯ ~­lQˆY jöùåKù¶Ã'sY–³ê>?Æ:Yš ŸåttÖ”7ÇÚN”²#–÷ëúšY¹£1Oc¨ÇJ¹dæK_úÒàë¿äç?ÿùàçeŽ@”ÈZP«Ï—KsÏ?ÿüÁÏÝlÊ¢ó¡‡üú5£ÐZd 8VVÑçÇZ"kÀì‡Ï9%rGcžÔ€\Qˆ¢äŠZ@kj@®DÖ€&Ãg¹ÆZâ¹£1Oj@®¨DQ rE- 55 W"k€ásF‰Üј'5 WÔ¢¨¹¢К�+‘5Àð9£DîhÌ“�+jQÔ‚\Q hM È•ÈÐdø,7ãJ|"w4æI È5€(jA®¨´¦äJd 0|Î(‘;ó¤äŠ@µ WÔZSr%²4><( ¹£1Oj@®¨DQ rE- 55 W"k€ásF‰Üј'5 WÔ¢¨¹¢К�+‘5Àð9£DîhÌ“�+jQÔ‚\Q hM È•ÈÐdø_zé%I�È�yRrE ŠZ�+j­©¹Y Ÿ3JäŽÆ<©¹¢E-ȵ€ÖÔ€\‰¬†Ï%rGcžÔ€\Qˆ¢äŠZ@kj@®DÖ€&Ãç‹/¾( ¹£1Oj@®¨DQ rE- 55 W"k€ásF‰Üј'5 WÔ¢¨¹¢К�+‘5 Éðù /H‚DîhÌ“�+jQÔ‚\Q hM È•È`øœQ"w4æI È5€(jA®¨´¦äJd h2|>ÿüó’ ‘;ó¤äŠ@µ WÔZSr%²>g”È�yRrE ŠZ�+j­©¹Yš Ÿ’+;ó4´ÿI|ÔZÚ%>j­ ퟈`øœa"v4æihÿ“ø¨´6´J|ÔZÚÿ$>5 êð9äꫯ>ê/*±�–Ô€|�jA¾@Kj@¾´`ø”#¿hC Ȉ ä ´¤äK ͇Ïýû÷K¢´ÚÑ 3´J\Ô¢ í�µ€Ö†öC‰Ëd‡OæÇð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†Oª3|P�á€ê ŸTgø :Ã'Õ>¨Îð @u†O*[[û{ÓÚÂý÷-µIEND®B`‚doc/graph.png000064400000014444144760121710007132 0ustar00‰PNG  IHDRÀ]”ݽîsRGB®ÎégAMA±� üa pHYsÃÃÇo¨d¹IDATx^íݹoTׯqÒ¦B2NED—Š(‹â"‹„Ò„%Rœ2ìU€@$+$& Qš5+‹P@J Ûì›Ù÷å?˜ßï�ø\ÝŽ�íYîûÜóýH�’˜kËÆç¾Ï̽g&S*$ˆ$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰$‰„¤¹s燔P€�¾¤øJ(@H ÷Õ«WÄA(@(¢!) Ü—/_¡¡ˆ„$ ÐWÂ¯/ËáÇG~[€O $…�ûâÅ â á÷a¥—àI ¯P€PDBR¸ÏŸ?'BBI ¯P€PDBè+ Q€�î³gψƒP€PDBè+ Q€�îÓ§O‰ƒP€PDBè+ Q€�Dú E $…�ûäÉâ  Q€�Dú E $…�ûøñcâ  Q€�Dú E $Q€¾BBIaà>zôˆ8E $Q€¾BBIaà>|ø�8E $Q€¾BBIê¸aÆʔ)Sª™6mZåÔ©SÑãTBBIaà>xð@.çÎ�«tuuehÙ¾}{ôX•P€PDB’rþôÓO5åg™1cFåúõëÑãBBIaàÞ¿_*wïÞ­,[¶,+½/¿ü2+Áýû÷G?G! Q€�¤Z€gÏžÍ..Z´¨rðàÁ¬W¯^ý…P€PDBR¸÷îݓʮ]»²ÂÛ¶m[M!Úf˜“'OF?Ï{(@(¢!I±oß¾]™3gNMÙݹs'»$J1ö¹ÞCBIŠxôèѬèìòçÍ›7«Ï?+Ì\) Q€�®m*Qɺuë²¢ûöÛo³�ߺu«æ™á‰'j>O! Q€�¤V€o+¹|9®ZµªæÏBBIaàÚ=4…9r$+¸… V_ó7ÚŸÛË#._¾\óçÞCBIJh›_–.]šÜÖ­[ß8Æîû…gˆ–}ûö½qŒçP€PDB’RþóÏ?5/u8~üxô¸µk×f{–è9 Q€�îðð°ûüøã�5ÅvíÚµèqVá8+ÊcÇŽE�ó Š(@HR)@Ûü²dÉ’¬Øìògì8Ë�7j.ƒŽu¬·P€PDBR¸vÍs:”ÚD3}úôÊÅ‹£_×[(@(¢!I¥×¬Y-·ñfï޽ѯë- Q€�¤P€¶‰eöìÙÑboV®\ýÚÞBBIaàÚ=6¯ÉÿŸìræÐÐPô¸úìܹ3û¼ŽŽŽÊ_ý=ÎS(@(¢!I¡ó—?W¬X=&–3gÎTfΜ™}î–-[¢Çy E $…�k/ ÷˜Ó§Oה؞={¢ÇÅb—N/^œ}î‚ ªï ;ÖK(@(¢!É{æ/cÚåÏÁÁÁèq£%ÿù–‰h¡¡ˆ„$ÏXÿ Î.ÆŽ+õÏ 'ó5Ú Š(@H ×^<î-ÿýwMyýüóÏÑãÆŠ½[L¾DíYäÀÀ@ôX¡¡ˆ„$ϸcÇŽ¦×�²¯c™L‘¶+ Q€�®]nôÛ¬2kÖ¬¬´>ÿüóèqãIýך?~õ�abÇ Š(@HòZ€©†„" ’ÂÀµ{e¤øP€PDBè+ Q€�Dú E $…�{õêUâ  Q€�Dú E $…�{åÊâ  Q€�Dú E $Q€¾BBIaàÚ»¥�âCBI ¯P€PDBR¸—.]"BBI ¯P€PDBè+ Q€�®ýï�Hñ¡¡ˆ„$ ÐW(@(¢!) Ü¡¡!â  Q€�Dú E $Q€¾BBIaà¡¡ˆ„$ ÐW(@(¢!) Ü��â  Q€�Dú E $…�{áÂâ  Q€�Dú E $…�ÛÎÌž=»ÒÕÕý3O±ïÑ¾×ØŸµ: ”P€�¾­ÎÔ©S+S¦L©tvvFÿÜCì{³ï±££#úç­% JcãÆ�o àfå“O>©‹åûï¿�ã!›7oξÏÅ‹G�igÏ(@”F« 𫯾ÊJÅþ=vŒ§xú~Ï(@”F___Ó³~ýú¬L>þøãè1óá‡V¿çwß}·ú3ÄŽiu(@xG£Îîûuww�|TǼyóªß»ý ¯_¿ù(€€"¬0l'¥ˆýS±@Êð3­DöŒ/<{²g‚ªÎŸ?Ÿ=‹]¾|ùÈG ¨ÓÓÓS- ‹ˆº“'Of?ϦM›F> €rvïÞ�•…ý{Y”õçA#ìÙ^( {X6v Ô~6»$Z†g¶@£(@àÿò÷Êw|ŽWØjïæ¤ŽDòRÚ-i?[x»4ûY�”Q€H^j¯—cg(ð IKõ¾Xõç¶ôööŽ|H ˆd¥¾3ÒŠ/üüVˆ@j(@$‰×Æý‡�¡Hˆäp¬VØÄÎP¤†DRRÚñ9^ì Eª(@$…ÿCBÏŠ‘" Éà~רØŠÔP€Hï…9>ì EJ(@”^þ™ ÿ7„·ã™2RA¢Ô¸·59lB (@”»'ÏþîÂÛ8”ˆÒ Ïbx}ÛäðìeG¢”¸�ÕlB™Q€(v26—m Ÿör@YP€(^ËÖ<£FQ€( îYµŽÝCeg(ʆD)°ã³õØв¡Q ìølže£L(@ÈãþT{±3eABZ~‡";>Û'ÿ÷΃¨¢!‹g"Åêîî®þÝÛ3ïááá‘�:(@Hâ^TñØ u ä°Ñ{æ~öŒPBB Ï:ü±gãöû°ôôôŒ|ð�„v|úÄýX(¢!ƒ÷¤ôÍžý…ßN €„žah`g(”P€p�Ÿ:¸G % \cǧv†B·x6¡+¿3ÔîÝQ€p+?‰Mz¸o ï(@¸ÄŽÂràe+ðŒ„; ´ˆ¶ãþò¬øB ö÷÷�|h= mÅ@İ.P mÃŽOŒ%\ïììäÊÚ‚D[ð. x+=+?[#V†@«Q€h9vûa¼X+h' -ÅŽOL”m„±õbag(Z‰DK±ã“ÁÎP´ˆ–agÁúA«Q€h v|¢ØŠV¢Ñtù{8ìøD#ò;Cír:ÐL šŠ]|h6ÖZ…DÓä­ó:.4—ÔÑ  š†û5h%»œJÐÞXhˆ¦`ÇÚ�u†f¢Ñ0^³…v±+ ¼±š…DCx×´›•^ØÃÎP4‚Ĥ±;Eaí¡(@L ;>Q4v†¢Q &…Ÿð€�¡hˆ c'<ɯÇááá‘�oGbBò�¸Ùñ ØŠÉ¢1nÜs�WöÌ/lŠéîîù(06 ã®;xgk4<@ëééù(0: oÅë® ‚«˜ câþ ÔØ³¿P‚lÒÂX(@Œ‰ŸPd÷úeg(FCbT¼Æ ª¸r�ñ Ž¨cg(Þ†ÄØñ‰²`g(ÆB¢;>Q6\ÍÀh(@d¸o‚²bg(b(@dò;ç(›üúæÁ ˆ*!£ì¸Â�z ¸G‚d°Á y`âØ%‡ÔØkZڷ׺"]`Âx�RÅU 0QÜAêx›?P€‰â½�Jõµ®á<àA`z(À±ãøWBÒF&†{@-v†¦‹L;>�8v†¦‰LDþQ.;>�7寎ô÷÷�|eF&€ûÀø°34-`ØéŒ_x°ØÙÙÉùRr`Éñˆ˜+=+¿pÅåE–;>�Éagh(À’bWÐÛΡÞÞÞ‘�¢L(ÀâÑ+ÐV|¡ÙZ>`ɰãh.X2ìøš��¡åD–�T�Ö`gh9Q€%ÁŽO µ¸·^>` äw«±ãh�ü¹ÆM} 8•íe2C ÚË� ‹Æ}  Üo/ P;Ó€bØùÎ?û'çŸ& P�@�bYé…Ûöò#è¡ñî€܃×FŠáý _x ’. P�6ŸØª‰ÁŽOÀ7îËë¡E°ãð��¡z(@<²4°3T è\þÞ;>ÿò÷ê{zzF> �(@ÇØ]hâÜÕ@:a�ídéîîÎþ›Ÿ€.{öJ0ܺ°ó;ÿß(èD8Y¬ì¸�”C(<;Ÿ‡‡‡³ûù\õ�t"¼Äá—_~a'Põ;Cíü¶·óÅ£—?íQ";>�r±g~኎=# ÿÎù]< Ð�pù3v^ÛËšòç»�ÿ(X ü�ñ�>úˆÿ� �;Ï?ýôÓìÜç2hq$ pîܹ¥HWWW¥£££òÁDÿ\-@»ÄÖŸZì¼·óß.�Æþ\1j(@Ò´í[¤ø¨‘.ÀW¯^Q]üÐÅ ðÕ ]€/_¾$¢ºø¡‹à+ª3€$ 'ü>úúú²>|xä·43ÀWTg€t¾xñ‚8Hø}Ø‚Ïhf€¯¨Î �4ÕÅ]Ì_Q�Òøüùsâ ª‹º˜¾¢:(@ÒpT?t1|EuP€¤á¨.~èbøŠê �.ÀgÏžQ]üÐÅ ðÕ@’†£ºø¡‹à+ª3@ºŸ>}JDuñC3ÀWTgHŽêâ‡.f€¯¨Î �4ÕÅ]Ì_Q�ÒøäÉâ ª‹º˜¾¢:(@ÒpT?t1|EuHàãÇ�‰ƒ¨.~èbøŠê  IÃQ]üÐÅ ðÕ@’†£ºø¡‹à+ª3@º=zDDuñC3ÀWTgHŽêâ‡.f€¯¨Îé|øð!qÕÅ]Ì_Q� i8ª‹º˜¾¢:(Àå÷߯L™2eB™6mZåÔ©Sѯç9ª‹ºfÀXÙ°aCtX¾ûî»èçxŽê �.À¸Ío¿ý]ÜãI(ÂØ×õÕÅ] 3 >çÎ�«tuuEÏùX¾øâ‹è×ñÕ@¶(� E©U?t)Ì€|ÆzÆ7Vf̘Q¹~ýzôkzŠê �.Àû÷ï»Í¯¿þš-âE‹Unݺ=.Ÿ]»v½±ø¯]»=ÖST?t)ÌËÝ»w+Ë–-«9¯-£Í„³gϾñ,Qa¨Î °E™LZêO€ýû÷G�óÕÅ] 3À²~ýúì\žÈ,¨0¼zõêèq^¢:¤ ðÞ½{nsôèÑšEóæÍèq±äO[ø±c½rñâÅèq¢ºøá‹mp kÞbæ—zÞg@þü·]ÝÇŽ‹÷¶Ô?›Ü²eKô¸¢£:¤ ÐÞUÝk<˜-Z+@{A{ì¸Ñ²sçÎì󭇆†¢Çyˆêâ‡?v™Ó^ _ÿ²‡zÞg€Ý·Ï_űâŠ÷¶œ9s¦2sæÌìëìÙ³'z\ÑQ�`‹ÒhÖ_B™èç·3ª‹ºf@ýUœÉ<ˆU™ª3@ºíò€×8p fá^¾|9z\,v¹4ÿèqÅŠÑã¼DuñC— 8}útͳ·‰Î�ü ±lÞ¼9zœ‡¨Î °Ei¤¿þúëš…o—=bÇy‰êâ‡.…`©?—í™ààà`ôØ|ò·@,�!íŽê  [”É`ý3?……oQ]üÐ¥0,¶£{ñâÅ5çôXçuý³F‹½æñÏ?ÿ|ãXOQ�Òh/8õšúË“‰-ü?þø#úõ=EuñC— ± 1±O˜­E¶(� ]*ˆ~moQ]üÐ¥0ê³cÇŽè¹>ZæÏŸ_}+ÄØ×òÕ ]€vyÁkì½±Eý¶Ø¢·×üž¦×¨.~èR˜£Å.}Κ5+zþ[¾ùæ›èçyŽê  IÃQ]üÐÅ ðÕ ]€vm�ÕÅ]Ì_Q� i8ª‹º˜¾¢:(@ÒpT?t1|EuH ½nŽÕÅ]Ì_Q� i8ª‹º˜¾¢:¤ ÐÞ–ÕÅ]Ì_Q� i8ª‹º˜¾¢:(@ÒpT?t1|EuH ½£)>ª‹º˜¾¢:(@ÒpT?t1|EuH ½Q,)>ª‹º˜¾¢:(@ÒpT?t1|EuP€¤á¨.~èbøŠê �.@ûß‘⣺ø¡‹à+ª3€$ GuñC3ÀWTg€t Q]üÐÅ ðÕ@’†£ºø¡‹à+ª3€$ GuñC3ÀWTg€tQ]üÐÅ ðÕ@’†£ºø¡‹à+ª3@ºˆƒ¨.~èbøŠê  IÃQ]üÐÅ ðÕ ]€.\ ¢ºø¡‹à+ª3€$ GuñC3ÀWTg€t_Q[üÐ[¤ø¨Í �4-j‹ºbë�µ Y€17n|ã/Ÿ �˜þâHZ �˜þâ]i °¯¯�8ŠÂâG¹ÄÖ!). NQ€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€$Q€€U*ÿç­uW’»ºIEND®B`‚fixtures/f001/A.php000064400000000360144760121710007756 0ustar00aProp; } public function setAProp($prop) { $this->aProp = $prop; return $this; } } fixtures/f001/B.php000064400000000372144760121710007762 0ustar00bProp; } public function setBProp($prop) { $this->bProp = $prop; return $this; } } fixtures/f002/A.php000064400000000663144760121710007765 0ustar00prop1; } public function setProp1($prop) { $this->prop1 = $prop; return $this; } public function getProp2() { return $this->prop2; } public function setProp2($prop) { $this->prop2 = $prop; return $this; } } fixtures/f003/Foo.php000064400000000520144760121710010321 0ustar00name = $name; } public function getProp() { return $this->prop; } public function setProp($prop) { $this->prop = $prop; return $this; } }fixtures/f004/UnclonableItem.php000064400000000301144760121710012475 0ustar00cloned = true; } } fixtures/f006/A.php000064400000000525144760121710007766 0ustar00aProp; } public function setAProp($prop) { $this->aProp = $prop; return $this; } public function __clone() { $this->cloned = true; } } fixtures/f006/B.php000064400000000525144760121710007767 0ustar00bProp; } public function setBProp($prop) { $this->bProp = $prop; return $this; } public function __clone() { $this->cloned = true; } } fixtures/f007/FooDateInterval.php000064400000000310144760121710012625 0ustar00cloned = true; } } fixtures/f007/FooDateTimeZone.php000064400000000310144760121710012573 0ustar00cloned = true; } } fixtures/f008/A.php000064400000000322144760121710007763 0ustar00foo = $foo; } public function getFoo() { return $this->foo; } } fixtures/f008/B.php000064400000000067144760121710007772 0ustar00 Filter, 'matcher' => Matcher] pairs. */ private $filters = []; /** * Type Filters to apply. * * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $typeFilters = []; /** * @var bool */ private $skipUncloneable = false; /** * @var bool */ private $useCloneMethod; /** * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used * instead of the regular deep cloning. */ public function __construct($useCloneMethod = false) { $this->useCloneMethod = $useCloneMethod; $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); } /** * If enabled, will not throw an exception when coming across an uncloneable property. * * @param $skipUncloneable * * @return $this */ public function skipUncloneable($skipUncloneable = true) { $this->skipUncloneable = $skipUncloneable; return $this; } /** * Deep copies the given object. * * @param mixed $object * * @return mixed */ public function copy($object) { $this->hashMap = []; return $this->recursiveCopy($object); } public function addFilter(Filter $filter, Matcher $matcher) { $this->filters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } public function prependFilter(Filter $filter, Matcher $matcher) { array_unshift($this->filters, [ 'matcher' => $matcher, 'filter' => $filter, ]); } public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) { $this->typeFilters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } private function recursiveCopy($var) { // Matches Type Filter if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) { return $filter->apply($var); } // Resource if (is_resource($var)) { return $var; } // Array if (is_array($var)) { return $this->copyArray($var); } // Scalar if (! is_object($var)) { return $var; } // Object return $this->copyObject($var); } /** * Copy an array * @param array $array * @return array */ private function copyArray(array $array) { foreach ($array as $key => $value) { $array[$key] = $this->recursiveCopy($value); } return $array; } /** * Copies an object. * * @param object $object * * @throws CloneException * * @return object */ private function copyObject($object) { $objectHash = spl_object_hash($object); if (isset($this->hashMap[$objectHash])) { return $this->hashMap[$objectHash]; } $reflectedObject = new ReflectionObject($object); $isCloneable = $reflectedObject->isCloneable(); if (false === $isCloneable) { if ($this->skipUncloneable) { $this->hashMap[$objectHash] = $object; return $object; } throw new CloneException( sprintf( 'The class "%s" is not cloneable.', $reflectedObject->getName() ) ); } $newObject = clone $object; $this->hashMap[$objectHash] = $newObject; if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { return $newObject; } if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { return $newObject; } foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { $this->copyObjectProperty($newObject, $property); } return $newObject; } private function copyObjectProperty($object, ReflectionProperty $property) { // Ignore static properties if ($property->isStatic()) { return; } // Apply the filters foreach ($this->filters as $item) { /** @var Matcher $matcher */ $matcher = $item['matcher']; /** @var Filter $filter */ $filter = $item['filter']; if ($matcher->matches($object, $property->getName())) { $filter->apply( $object, $property->getName(), function ($object) { return $this->recursiveCopy($object); } ); // If a filter matches, we stop processing this property return; } } $property->setAccessible(true); $propertyValue = $property->getValue($object); // Copy the property $property->setValue($object, $this->recursiveCopy($propertyValue)); } /** * Returns first filter that matches variable, `null` if no such filter found. * * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and * 'matcher' with value of type {@see TypeMatcher} * @param mixed $var * * @return TypeFilter|null */ private function getFirstMatchedTypeFilter(array $filterRecords, $var) { $matched = $this->first( $filterRecords, function (array $record) use ($var) { /* @var TypeMatcher $matcher */ $matcher = $record['matcher']; return $matcher->matches($var); } ); return isset($matched) ? $matched['filter'] : null; } /** * Returns first element that matches predicate, `null` if no such element found. * * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. * @param callable $predicate Predicate arguments are: element. * * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' * with value of type {@see TypeMatcher} or `null`. */ private function first(array $elements, callable $predicate) { foreach ($elements as $element) { if (call_user_func($predicate, $element)) { return $element; } } return null; } } src/DeepCopy/Exception/CloneException.php000064400000000177144760121710014441 0ustar00setAccessible(true); $oldCollection = $reflectionProperty->getValue($object); $newCollection = $oldCollection->map( function ($item) use ($objectCopier) { return $objectCopier($item); } ); $reflectionProperty->setValue($object, $newCollection); } } src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php000064400000001301144760121710020516 0ustar00setAccessible(true); $reflectionProperty->setValue($object, new ArrayCollection()); } } src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php000064400000000623144760121710016533 0ustar00__load(); } } src/DeepCopy/Filter/Filter.php000064400000000534144760121710012233 0ustar00callback = $callable; } /** * Replaces the object property by the result of the callback called with the object property. * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); $reflectionProperty->setValue($object, $value); } } src/DeepCopy/Filter/SetNullFilter.php000064400000000742144760121710013543 0ustar00setAccessible(true); $reflectionProperty->setValue($object, null); } } src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php000064400000000557144760121710017035 0ustar00class = $class; $this->property = $property; } /** * Matches a specific property of a specific class. * * {@inheritdoc} */ public function matches($object, $property) { return ($object instanceof $this->class) && $property == $this->property; } } src/DeepCopy/Matcher/PropertyNameMatcher.php000064400000000770144760121710015077 0ustar00property = $property; } /** * Matches a property by its name. * * {@inheritdoc} */ public function matches($object, $property) { return $property == $this->property; } } src/DeepCopy/Matcher/PropertyTypeMatcher.php000064400000002046144760121710015136 0ustar00propertyType = $propertyType; } /** * {@inheritdoc} */ public function matches($object, $property) { try { $reflectionProperty = ReflectionHelper::getProperty($object, $property); } catch (ReflectionException $exception) { return false; } $reflectionProperty->setAccessible(true); return $reflectionProperty->getValue($object) instanceof $this->propertyType; } } src/DeepCopy/Reflection/ReflectionHelper.php000064400000004176144760121710015113 0ustar00getProperties() does not return private properties from ancestor classes. * * @author muratyaman@gmail.com * @see http://php.net/manual/en/reflectionclass.getproperties.php * * @param ReflectionClass $ref * * @return ReflectionProperty[] */ public static function getProperties(ReflectionClass $ref) { $props = $ref->getProperties(); $propsArr = array(); foreach ($props as $prop) { $propertyName = $prop->getName(); $propsArr[$propertyName] = $prop; } if ($parentClass = $ref->getParentClass()) { $parentPropsArr = self::getProperties($parentClass); foreach ($propsArr as $key => $property) { $parentPropsArr[$key] = $property; } return $parentPropsArr; } return $propsArr; } /** * Retrieves property by name from object and all its ancestors. * * @param object|string $object * @param string $name * * @throws PropertyException * @throws ReflectionException * * @return ReflectionProperty */ public static function getProperty($object, $name) { $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); if ($reflection->hasProperty($name)) { return $reflection->getProperty($name); } if ($parentClass = $reflection->getParentClass()) { return self::getProperty($parentClass->getName(), $name); } throw new PropertyException( sprintf( 'The class "%s" doesn\'t have a property with the given name: "%s".', is_object($object) ? get_class($object) : $object, $name ) ); } } src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php000064400000001177144760121710016261 0ustar00 $propertyValue) { $copy->{$propertyName} = $propertyValue; } return $copy; } } src/DeepCopy/TypeFilter/ReplaceFilter.php000064400000001014144760121710014363 0ustar00callback = $callable; } /** * {@inheritdoc} */ public function apply($element) { return call_user_func($this->callback, $element); } } src/DeepCopy/TypeFilter/ShallowCopyFilter.php000064400000000337144760121710015263 0ustar00copier = $copier; } /** * {@inheritdoc} */ public function apply($element) { $newElement = clone $element; $copy = $this->createCopyClosure(); return $copy($newElement); } private function createCopyClosure() { $copier = $this->copier; $copy = function (SplDoublyLinkedList $list) use ($copier) { // Replace each element in the list with a deep copy of itself for ($i = 1; $i <= $list->count(); $i++) { $copy = $copier->recursiveCopy($list->shift()); $list->push($copy); } return $list; }; return Closure::bind($copy, null, DeepCopy::class); } } src/DeepCopy/TypeFilter/TypeFilter.php000064400000000302144760121710013730 0ustar00type = $type; } /** * @param mixed $element * * @return boolean */ public function matches($element) { return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; } } src/DeepCopy/deep_copy.php000064400000000614144760121710011527 0ustar00copy($value); } }