From 4cf34c73a46209ea5b08ca5069e953188fccf983 Mon Sep 17 00:00:00 2001 From: Philip Molter Date: Fri, 4 Nov 2022 11:04:38 -0500 Subject: [PATCH] Squashed 'vendor/github.com/leethomason/tinyxml2/' changes from 37bc3aca4..1dee28e51 1dee28e51 setting the version to 9.0.0 55716da04 Merge pull request #865 from JonasVautherin/fix-android-x86_64 41151ce21 Add defined(__ANDROID__) for fseeko defined and android-x86_64 4c7cc9d6e Merge pull request #862 from heitbaum/patch-1 0838dd11a meson.build: fix typo 329139033 update the docs 9c6752a64 setting the version to 8.1.0 cc2efbbd2 Merge pull request #861 from leethomason/modern-cmake-2 95b80f445 update readme 7d054695e update gitignore 212a53bb5 refresh visual studio project be4eaaac8 remove bit rotted premake5, update readme 97739352a test new build links efefbb85b Merge branch 'master' of https://github.com/modern-cmake/tinyxml2 into modern-cmake-master f2db58e65 Merge pull request #859 from cugone/FixWrongQueryAssignment 5e7657389 Fix Query function results being assigned to int instead of XMLError 6376b3fbc Merge pull request #845 from dov/patch-1 7df6b3ff4 Overhaul CMake build 9d899a73c Update meson.build d4514ad72 Merge pull request #837 from dcbaker/meson 91bfd4b7f Merge pull request #827 from ngc92/ClearError 4ec7320e5 Merge pull request #790 from offlinemark/mark/cmake-namespace ee6684483 Merge pull request #831 from plekakis/master a9ed6746d Merge pull request #838 from dfaure-kdab/Wundef 11376382f Merge pull request #840 from dota17/master 8e1af3a7f Merge pull request #841 from pazner/master d3a82c5e4 Fix format string errors in sscanf d59fd15db skip comment node before get text c509d569c Add meson build system b5d3b93e0 Add missing `defined`, detected by -Werror=undef 4001a468b cmake: Use a namespace for the tinyxml2 target in local export c87bf8187 reverted the strong typed enum change 1aeb57d26 Merge pull request #823 from c72578/2020-06-17_Fix_pkgconfig_lib_postfix a0ce5527a Merge pull request #789 from offlinemark/mark/cmake-clean 54e1d6b2f Merge pull request #820 from orudge/fix-symbol-export 6df0cae18 - Allowing TIXMLASERT to be defined before including the main header. - Fix for enum bitmask usage 2c6a41a92 removed overhead of clear error 2c5a6bfdd reorder 51d9f51d1 update readme link 463796533 add test case d34d0ef5e Merge pull request #822 from ghost/queryattr 1e384d503 Fix debug postfix in pkgconfig file 5ee20feaf Add QueryAttribute for const char** fc8967074 update the docs 2e6912bf8 Merge pull request #816 from a-lunkov/master 098eb3739 Merge branch 'master' of github.com:leethomason/tinyxml2 8812f197a make printer functions virtual 6b7effe54 Merge pull request #812 from amai2012/master 1578df3bf Merge pull request #811 from hyperair/fix-first-line-indentation 98ca9146b Merge branch 'netcan-master' 18468b8cc minor changes to hex parsing c9c9d8cdf Merge branch 'master' of https://github.com/netcan/tinyxml2 into netcan-master b341e66e3 cmake: Don't export symbols if building static library a953b9565 Suppress UndefinedBehaviorSanitizer warnings ba02706e6 Merge pull request #1 from leethomason/master eefc07a73 Rename action 064d90da1 Try to install dcc28da4c Add macos-latest e3abe1bd0 Remove distcheck e120ee328 Add github action bfbcc0333 Merge pull request #809 from a-lunkov/patch-1 99db0247d Merge pull request #807 from jsenn/sharpen-ftell-ifdef 6a514399c XMLPrinter: Fix first line indentation 63fb154ad Update tinyxml2.cpp 1fdee25d1 Sharpened check for 64-bit Unix when defining fseek/ftell macros. bd5950bb0 Merge pull request #798 from DanRStevens/removeCleanBeforeTest 67271b1fd Merge pull request #787 from jsenn/feature/large-file-support a9f29b74d Fixed warning caused by sloppy conversion between signed/unsigned types. dfb45cb73 support IntText(),UnsignedText(),Int64Text() for hex value bf15233ad Setting the version to 8.0.0 850419584 fix vs version 8db004b74 Merge pull request #802 from LilyWangL/vcpkg-instructions 3d6a5477a Merge pull request #797 from DanRStevens/gitIgnoreLinux bbbb8c9a9 Merge branch 'master' of github.com:leethomason/tinyxml2 e44426810 add convenience methods 6ac05b2b9 Merge branch 'push' of https://github.com/ngc92/tinyxml2 into ngc92-push 655b15c07 Merge pull request #781 from daniel347x/patch-1 59b01033f Merge branch 'Alanscut-tinyxml2_addtestcase' 37ccc7100 fix some casting 3574d3e22 Merge branch 'tinyxml2_addtestcase' of https://github.com/Alanscut/tinyxml2 into Alanscut-tinyxml2_addtestcase de62366e6 Merge branch 'master' of github.com:leethomason/tinyxml2 20f2d5eec Merge pull request #773 from Alanscut/fix_issue712 a9c28ce3e Merge pull request #768 from Alanscut/fix_wrong_symbol 2c642bf25 update to visstudio 2019 f4520c990 Merge pull request #762 from orbitcowboy/master 1eb8a3f76 Add vcpkg installation instructions 22e5db140 Remove `clean` before `test` or `check` d09f879ad Add Makefile outputs to .gitignore 60e96163c cmake: Move TARGETS_EXPORT_NAME to top 588c6577d cmake: Clarify comment around exported cmake script 57cd52b04 cmake: Use TARGETS_EXPORT_NAME var throughout file e86e947cb cmake: Use CMAKE_PROJECT_NAME instead of PROJECT_NAME e62024504 PushNewChild* family of convenience functions d58436c4b Fixed bug caused by type checking code in `LoadFile`. bf59a2d4c Added support for files larger than ~2GB. d7455034e Change constants used in 'ToBool' to support MSVC 7d9ca1e73 Supplementary test case ad7bdf9ed fix issue#712 8916a3c58 fix wrong symbol 73f5409b6 Improved const correctness. There are no functional changes intended. ff6165051 Merge branch 'master' of github.com:leethomason/tinyxml2 9c740e8d2 setting the version to 7.1.0 a9a0ea22f Merge pull request #761 from untereiner/master 50daa32fc minor fixes to test cases f60928eaa Merge branch 'supplementary_test_case' of git://github.com/wangkirin/tinyxml2 into wangkirin-supplementary_test_case 4994f1cc5 Merge pull request #754 from wangkirin/reorg_file_path 5bf58f0d1 Merge pull request #753 from orbitcowboy/master 141d2117b Merge pull request #751 from wangkirin/fix_comment 87aaa2592 Merge pull request #750 from equalent/patch-1 c3601c62f Merge branch 'cugone-master' effdf95f8 add test cases c36d59f6b Merge branch 'master' of git://github.com/cugone/tinyxml2 into cugone-master 7fd646a8a support more bool options 1675bec2f Merge pull request #743 from deduktionstheorem/master d39b13bbb Add COMPONENT support at cmake install stage f12d7a241 Supplement test case in xmltest.cpp e08c2d2e0 adjust path of testfile `bomtest.xml` to `resource/out` 38f7d65b4 Merge pull request #1 from aaronkirkham/master c341cea50 add missing uint64_t methods to XMLPrinter add missing XMLElement::Unsigned64Attribute body 710a3324f Fixed -Wold-style-cast warnings from g++. 4add958b4 fix comment in Programmatic DOM test case eda7f81b1 Fixed typos 1dbfe3185 Missing uint64_t XMLElement::Unsigned64Text(uint64_t defaultValue) implementation 47e229e18 Forgot Text and XMLElement versions; 75a5acc6b UnsignedInt64 support 61a4c7d50 Merge branch 'master' of github.com:leethomason/tinyxml2 db39dbc0f add license and minor readme edit eb2b8c47c Merge pull request #732 from orbitcowboy/master bd5a1414d Merge pull request #731 from aarnchng/cmake_verspec e1b301318 Issue 742: allow intermittent calls of XMLPrinter::ClearBuffer 0e7f28959 Improved const correctness of local variables. There are no functional changes intended. f5641e547 CMakeList.txt: fix wrong version 8f4a9a8cc Merge pull request #721 from MortenMacFly/master d944ef762 * removed merge artifact from Doxygen control file de6d16482 fix export issue and cmake. version to 7.0.1 08da3d91c Merge pull request #720 from scpeters/patch-1 e06a24016 tinyxml2.pc.in: use exec_prefix for libdir c3e09dabc tinyxml2.pc.in: restore prefix to lib/include dir 44ac39514 new docs 397f22581 setting the version to 7.0.0 dcedec857 Merge pull request #718 from bolry/patch-1 992e40538 Merge pull request #716 from Dmitry-Me/fixInt64Slicing de6f6616c Merge pull request #715 from Dmitry-Me/checkLastChildBeforeInsertion b894947c9 Merge pull request #714 from Masadow/pic 65c1b8658 Correct assigment interface for StrPair ed3e9dc82 Fix slicing of int64_t 178149439 Check the element is the last child of the document 4be5bc805 Add support for position independant code compilation 7e8e24999 Merge pull request #707 from SwiftEngineering/issue_706 25b23b88e Merge pull request #703 from orbitcowboy/master ade41cdfe Make resources folder for xml test relative to current source and binary directory 2cc8a4c71 Added explicit-keyword to constructors having 1 argument. c07409b5c remove virtual call in destruction 3be5d2b74 Merge pull request #695 from leethomason/manydecs 92506ca69 Merge remote-tracking branch 'origin/master' into manydecs baf8bc93a Merge pull request #690 from orbitcowboy/master db13a82e6 fix huge number of declaration security issue 22b21ec9b Fixed typos in comments. There are no functional changes intended. c483646db fix test cases 93a8fb18e Merge branch 'issue647' 92fc089e1 remove deprecated errors. next version will be major. 9f14aca07 Merge pull request #645 from jasjuang/master 30d0c3d5f add assertion 2bdb13ae5 Merge pull request #686 from leethomason/issue647 233b2cb82 Merge pull request #685 from leethomason/deadcode fc80df3b3 fix query return type 70d942e30 remove dead yet conflicting method 1cc174c2d Merge pull request #682 from lsolanka/pr.unify-cmake-build 1b029f2bd add target_compile_definitions 392ec1832 use configure_package_config_file() b7c169ccb Replace absolute installation paths with relative c0ff86950 Merge pull request #681 from johnb003/patch-1 d89d6d955 Updated CMakeLists.txt for relocatable installs b54cf3cb4 Made CMakeLists.txt installation relocatable. a1d462d33 Merge pull request #670 from dquam/ProcessEntitiesBugWhenFalse be69ae635 In PrintString, move the optimization under the if ( _processEntities ) block and retain the strlen Write in the new else block. Added a test case. 3cdaf8b15 update the readme c1424ee4e setting the version to 6.2.0 b94eefc7a Merge pull request #669 from leethomason/overflow e2d02e162 and the same fix in the test case befc3c3ae fix compiler inconsistency f928c3518 clean up the depth tracking a bit d946ddadc upgrade to vs2017. fix stack overflow attack. 65b5366a0 Merge pull request #667 from Dmitry-Me/simplifyToUnknownTests e59e3c346 Merge pull request #668 from Dmitry-Me/improveDeclarationTestMessage 7dd295609 Merge pull request #666 from Dmitry-Me/clarifyErrorNameTests 6a18a3105 Improve test message to avoid duplicate log output f5af951f1 Simplify checks 95f687b1f Cleanup ErrorName() tests 074194158 Merge pull request #662 from mschmieder/fix_testrun_windows ecbc16ae4 add namespace for cmake export 00b74a40b Merge pull request #657 from noloader/master 72407d205 Merge pull request #663 from Dmitry-Me/clarifyHandlesTests 938560f9f Improve handles tests 3c9370561 fixed issue where CTest is executed in the wrong directory 0bb8767e3 Merge pull request #656 from Gumichan01/master 51a1d1c93 Merge pull request #653 from fcami/master ff7543037 Fix typo in permissions 5dd529236 Add install and uninstall target to Makefile This PR closes some gaps in the makefile. It follows GNU coding standards and conventions at https://www.gnu.org/prep/standards/standards.html. It is not specific to GNU, and most of the world follows it. 0f1fa6d27 fix "dereference before null check" defect 59785ec38 fix installation path for *.cmake cc1745b55 Merge pull request #649 from PeterMatula/rename-DEBUG-define dc75a362c Merge pull request #648 from Dmitry-Me/removeUnneededConversions 50689919b rename DEBUG define to TINYXML2_DEBUG 63d8de627 Remove unneeded conversions 703f91e6b Merge pull request #643 from leethomason/querystring c8593733a Merge pull request #641 from leethomason/error-str 588e4ef8a Merge pull request #639 from zyndor/DEV_PremakeBuilds f26a547fd sync the version 28f9a48d5 Merge branch 'master' into querystring f6dc9be12 merge master ff97dbb2c Merge branch 'master' into error-str 5b00e0662 add query string method a36f7ac77 fix error string output when there is no formatting bd197877c write the version number as a macro c9e3b5274 Added premake5 build configuration with projects for Windows & Mac. - updated .gitignore with the .projects / .artifacts directories. e1b50439c remove dead files cf1006943 tweaking docs 71b12596e update the docs 8c8293ba8 setting the version to 6.0.0 2ab76dab6 Merge pull request #632 from alabuzhev/size_t_to_int_warning 90e69c95e Suppress MSVC warning C4267: conversion from 'size_t' to 'int', possible loss of data 4155ac0c7 Merge pull request #628 from leethomason/errorstr d548b7e71 Merge branch 'master' into errorstr eb2f51e63 removed unused variables 82e48435d Merge pull request #629 from brad-anderson/memcpy-unformatted 85aac0217 Minor performance tweaks b2e08e4bc XMLPrinter optimization 0c0f98bf8 merge from master d556e6df9 Merge branch 'master' into errorstr f49b9658b fix up error system issues 8b83b2387 make effc compilation optional 714ccfe29 fix line number tracker. error msg wip 7abfa6b1a Merge branch 'gccWeffc' of git://github.com/lelegard/tinyxml2 into lelegard-gccWeffc dd4034c51 Merge pull request #626 from Dmitry-Me/betterTestDeletionLoop c59b17e5a Merge pull request #625 from Dmitry-Me/checkAcceptResult b41e24aa1 Better test deletion loop f0f2e99cf Check result of Accept() 884852eb6 Merge pull request #584 from DragonValley/patch-1 aa1883928 Error string re-work 3a37e6411 Merge pull request #623 from Dmitry-Me/testErrorName 620cb1c55 Merge pull request #624 from Dmitry-Me/fixCrashWhenInsertingAfterItself e8f4a8b56 Fix crash when element is being inserted "after itself" 47845b699 Test ErrorName() returns valid string after SetError() bdad8d73a Merge pull request #620 from Dmitry-Me/clarifyComment c8c4618f2 Merge pull request #618 from Dmitry-Me/buildDebugToo a9e75d1b2 Clarify comment 20166d2b4 Build and test Debug configuration too 7f0f754cb Code cleanup to pass gcc -Weffc++ warnings dbf18add4 Merge pull request #613 from Dmitry-Me/testResultOfSetError da24c3b22 Merge pull request #612 from Dmitry-Me/fixMisleadingComment d3f6c6361 Test SetError() has effect 260433673 Fix misleading comment 4b173cbcf Merge pull request #611 from Dmitry-Me/testClearResetErrorState b0c421d9a Merge pull request #610 from Dmitry-Me/reuseConversionCode 985ea1f78 Test Clear() clears the error a28eb0763 Extract and reuse conversion code d69e2c0d0 Merge pull request #609 from JugglerShu/master 33883d6fe Merge pull request #605 from Dmitry-Me/clarifyTestStrings 87cd4e058 Add 'const' on XMLDocument::DeepCopy. This make us copy const XMLDocument being copied to another document. caed4ec7d Clarify what is being tested 4bbf74205 Merge pull request #603 from Dmitry-Me/cleanupFopenTests 30dec7591 Merge pull request #602 from Dmitry-Me/testWithStopwatchOff cd453f86e Merge pull request #596 from Dmitry-Me/useValidPointerForUserData 520009ef1 Cleanup fopen() tests 1ab85878b Stopwatch must be stopped before test check 82e20b183 Merge pull request #601 from Dmitry-Me/testErrorIdAfterParse e9945966c Merge pull request #600 from Dmitry-Me/cleanupStreamModeTests 8d40f7a56 Test ErrorID after Parse() c0fad2908 Cleanup stream mode tests c11a7c5ca Merge pull request #599 from Dmitry-Me/cleanupSomeChecks 68edbcee4 Merge pull request #598 from Dmitry-Me/fallThroughComments 63fe21f4d Merge pull request #597 from Dmitry-Me/betterTestQueryXText 30cdecada Merge pull request #595 from Dmitry-Me/checkInsertionReturnValues bc6920b68 Cleanup and simplify checks 3cc6f5c6f Annotate fall throughs with comments 43c019d44 Better tests for Query???Text() 7d8dfb9ee Use valid pointer for user data 8e0637019 Test return values from nodes insertion 02d2764fd Merge pull request #593 from Dmitry-Me/testDeletionViaDocument 8d1bfbbf7 Merge pull request #592 from Dmitry-Me/clarifyTestOutput 152958073 Merge pull request #591 from Dmitry-Me/properIndentDirectives 48725fa8e Merge pull request #590 from Dmitry-Me/betterVariableName e5790dba9 Test nodes deletion via document 6f4c4e726 Clarify and simplify test output de381df35 Indent directives consistently with surrounding code effab6ff0 Better variable name f0f506fe5 Update html5-printer.cpp f3f9925f1 update docs aca4fb16d new docs 528986ff2 update readme 757375631 add docs 646af8d21 Merge pull request #582 from Dmitry-Me/distinctDefaultAndReplacement 057058017 Merge pull request #581 from Dmitry-Me/testQueryingAttributesBetter 80379a331 Merge pull request #580 from Dmitry-Me/checkLoadSaveResult bf9b3a263 remove code that creates directory. add file in out directory so that git creates the directory ef11c2f8e Update on html5-printer.cpp 3d20c5de6 Use distinct values as default and replacement values 2087a276c Test querying attributes thoroughly 46b70ce51 Check result of LoadFile()/SaveFile() 3a6e51a12 fix build issue e4dc7218a fix an issue on windows fc2a0017d Merge pull request #578 from Dmitry-Me/checkReadingResults cd3369992 Merge pull request #577 from Dmitry-Me/checkParseResult 7096e779d Merge pull request #573 from kbinny62/master d1b82825f Check various stages of reading the XML file 68578f473 Check result of Parse() call c1f1de724 Merge pull request #575 from Dmitry-Me/extractDuplicatedString 5d1aec10f Extract duplicated text string 9720fbaf4 xmltest.cpp: path separator is '\\' under WIN32 bf29a1524 xmltest: create dir resources/out to avoid crashes git-subtree-dir: vendor/github.com/leethomason/tinyxml2 git-subtree-split: 1dee28e51f9175a31955b9791c74c430fe13dc82 --- .github/workflows/test.yml | 111 + .gitignore | 8 +- .travis.yml | 15 - CMakeLists.txt | 293 ++- LICENSE.txt | 18 + Makefile | 66 +- appveyor.yml | 7 - biicode.conf | 7 - cmake/tinyxml2-config.cmake | 57 + cmake/tinyxml2.pc.in | 10 + cmake_uninstall.cmake.in | 21 - contrib/html5-printer.cpp | 2 +- docs/_example_1.html | 83 + docs/_example_2.html | 84 + docs/_example_3.html | 121 + docs/_example_4.html | 94 + docs/annotated.html | 92 + docs/bc_s.png | Bin 0 -> 676 bytes docs/bdwn.png | Bin 0 -> 147 bytes docs/classes.html | 81 + ...stinyxml2_1_1_x_m_l_attribute-members.html | 106 + docs/classtinyxml2_1_1_x_m_l_attribute.html | 232 ++ ...asstinyxml2_1_1_x_m_l_comment-members.html | 114 + docs/classtinyxml2_1_1_x_m_l_comment.html | 301 +++ docs/classtinyxml2_1_1_x_m_l_comment.png | Bin 0 -> 650 bytes ...nyxml2_1_1_x_m_l_const_handle-members.html | 81 + .../classtinyxml2_1_1_x_m_l_const_handle.html | 88 + ...inyxml2_1_1_x_m_l_declaration-members.html | 114 + docs/classtinyxml2_1_1_x_m_l_declaration.html | 303 +++ docs/classtinyxml2_1_1_x_m_l_declaration.png | Bin 0 -> 688 bytes ...sstinyxml2_1_1_x_m_l_document-members.html | 138 ++ docs/classtinyxml2_1_1_x_m_l_document.html | 747 +++++++ docs/classtinyxml2_1_1_x_m_l_document.png | Bin 0 -> 657 bytes ...asstinyxml2_1_1_x_m_l_element-members.html | 171 ++ docs/classtinyxml2_1_1_x_m_l_element.html | 774 +++++++ docs/classtinyxml2_1_1_x_m_l_element.png | Bin 0 -> 618 bytes ...lasstinyxml2_1_1_x_m_l_handle-members.html | 99 + docs/classtinyxml2_1_1_x_m_l_handle.html | 190 ++ .../classtinyxml2_1_1_x_m_l_node-members.html | 114 + docs/classtinyxml2_1_1_x_m_l_node.html | 582 +++++ docs/classtinyxml2_1_1_x_m_l_node.png | Bin 0 -> 1845 bytes ...asstinyxml2_1_1_x_m_l_printer-members.html | 108 + docs/classtinyxml2_1_1_x_m_l_printer.html | 416 ++++ docs/classtinyxml2_1_1_x_m_l_printer.png | Bin 0 -> 586 bytes .../classtinyxml2_1_1_x_m_l_text-members.html | 116 + docs/classtinyxml2_1_1_x_m_l_text.html | 311 +++ docs/classtinyxml2_1_1_x_m_l_text.png | Bin 0 -> 591 bytes ...asstinyxml2_1_1_x_m_l_unknown-members.html | 114 + docs/classtinyxml2_1_1_x_m_l_unknown.html | 302 +++ docs/classtinyxml2_1_1_x_m_l_unknown.png | Bin 0 -> 647 bytes ...asstinyxml2_1_1_x_m_l_visitor-members.html | 90 + docs/classtinyxml2_1_1_x_m_l_visitor.html | 139 ++ docs/classtinyxml2_1_1_x_m_l_visitor.png | Bin 0 -> 592 bytes docs/closed.png | Bin 0 -> 132 bytes docs/doc.png | Bin 0 -> 746 bytes docs/doxygen.css | 1793 +++++++++++++++ docs/doxygen.png | Bin 0 -> 3779 bytes docs/doxygen.svg | 26 + docs/dynsections.js | 121 + docs/files.html | 80 + docs/folderclosed.png | Bin 0 -> 616 bytes docs/folderopen.png | Bin 0 -> 597 bytes docs/functions.html | 87 + docs/functions_b.html | 84 + docs/functions_c.html | 96 + docs/functions_d.html | 102 + docs/functions_e.html | 87 + docs/functions_f.html | 98 + docs/functions_func.html | 87 + docs/functions_func_b.html | 84 + docs/functions_func_c.html | 96 + docs/functions_func_d.html | 102 + docs/functions_func_e.html | 87 + docs/functions_func_f.html | 98 + docs/functions_func_g.html | 88 + docs/functions_func_h.html | 78 + docs/functions_func_i.html | 111 + docs/functions_func_l.html | 86 + docs/functions_func_n.html | 108 + docs/functions_func_o.html | 81 + docs/functions_func_p.html | 110 + docs/functions_func_q.html | 144 ++ docs/functions_func_r.html | 78 + docs/functions_func_s.html | 118 + docs/functions_func_t.html | 106 + docs/functions_func_u.html | 90 + docs/functions_func_v.html | 91 + docs/functions_func_x.html | 84 + docs/functions_g.html | 88 + docs/functions_h.html | 78 + docs/functions_i.html | 111 + docs/functions_l.html | 86 + docs/functions_n.html | 108 + docs/functions_o.html | 81 + docs/functions_p.html | 110 + docs/functions_q.html | 144 ++ docs/functions_r.html | 78 + docs/functions_s.html | 118 + docs/functions_t.html | 106 + docs/functions_u.html | 90 + docs/functions_v.html | 91 + docs/functions_x.html | 84 + docs/hierarchy.html | 91 + docs/index.html | 222 ++ docs/jquery.js | 35 + docs/menu.js | 51 + docs/menudata.js | 76 + docs/nav_f.png | Bin 0 -> 153 bytes docs/nav_g.png | Bin 0 -> 95 bytes docs/nav_h.png | Bin 0 -> 98 bytes docs/open.png | Bin 0 -> 123 bytes docs/pages.html | 83 + docs/search/all_0.html | 37 + docs/search/all_0.js | 5 + docs/search/all_1.html | 37 + docs/search/all_1.js | 6 + docs/search/all_10.html | 37 + docs/search/all_10.js | 11 + docs/search/all_11.html | 37 + docs/search/all_11.js | 8 + docs/search/all_12.html | 37 + docs/search/all_12.js | 7 + docs/search/all_13.html | 37 + docs/search/all_13.js | 15 + docs/search/all_2.html | 37 + docs/search/all_2.js | 10 + docs/search/all_3.html | 37 + docs/search/all_3.js | 12 + docs/search/all_4.html | 37 + docs/search/all_4.js | 7 + docs/search/all_5.html | 37 + docs/search/all_5.js | 10 + docs/search/all_6.html | 37 + docs/search/all_6.js | 8 + docs/search/all_7.html | 37 + docs/search/all_7.js | 4 + docs/search/all_8.html | 37 + docs/search/all_8.js | 15 + docs/search/all_9.html | 37 + docs/search/all_9.js | 7 + docs/search/all_a.html | 37 + docs/search/all_a.js | 13 + docs/search/all_b.html | 37 + docs/search/all_b.js | 5 + docs/search/all_c.html | 37 + docs/search/all_c.js | 15 + docs/search/all_d.html | 37 + docs/search/all_d.js | 26 + docs/search/all_e.html | 37 + docs/search/all_e.js | 5 + docs/search/all_f.html | 37 + docs/search/all_f.js | 13 + docs/search/classes_0.html | 37 + docs/search/classes_0.js | 15 + docs/search/close.png | Bin 0 -> 273 bytes docs/search/close.svg | 31 + docs/search/functions_0.html | 37 + docs/search/functions_0.js | 5 + docs/search/functions_1.html | 37 + docs/search/functions_1.js | 6 + docs/search/functions_10.html | 37 + docs/search/functions_10.js | 10 + docs/search/functions_11.html | 37 + docs/search/functions_11.js | 8 + docs/search/functions_12.html | 37 + docs/search/functions_12.js | 7 + docs/search/functions_13.html | 37 + docs/search/functions_13.js | 6 + docs/search/functions_2.html | 37 + docs/search/functions_2.js | 10 + docs/search/functions_3.html | 37 + docs/search/functions_3.js | 12 + docs/search/functions_4.html | 37 + docs/search/functions_4.js | 7 + docs/search/functions_5.html | 37 + docs/search/functions_5.js | 10 + docs/search/functions_6.html | 37 + docs/search/functions_6.js | 7 + docs/search/functions_7.html | 37 + docs/search/functions_7.js | 4 + docs/search/functions_8.html | 37 + docs/search/functions_8.js | 15 + docs/search/functions_9.html | 37 + docs/search/functions_9.js | 6 + docs/search/functions_a.html | 37 + docs/search/functions_a.js | 13 + docs/search/functions_b.html | 37 + docs/search/functions_b.js | 5 + docs/search/functions_c.html | 37 + docs/search/functions_c.js | 14 + docs/search/functions_d.html | 37 + docs/search/functions_d.js | 26 + docs/search/functions_e.html | 37 + docs/search/functions_e.js | 4 + docs/search/functions_f.html | 37 + docs/search/functions_f.js | 13 + docs/search/mag_sel.png | Bin 0 -> 465 bytes docs/search/mag_sel.svg | 74 + docs/search/nomatches.html | 13 + docs/search/pages_0.html | 37 + docs/search/pages_0.js | 4 + docs/search/pages_1.html | 37 + docs/search/pages_1.js | 4 + docs/search/pages_2.html | 37 + docs/search/pages_2.js | 4 + docs/search/pages_3.html | 37 + docs/search/pages_3.js | 4 + docs/search/pages_4.html | 37 + docs/search/pages_4.js | 4 + docs/search/search.css | 257 +++ docs/search/search.js | 816 +++++++ docs/search/search_l.png | Bin 0 -> 567 bytes docs/search/search_m.png | Bin 0 -> 158 bytes docs/search/search_r.png | Bin 0 -> 553 bytes docs/search/searchdata.js | 24 + docs/splitbar.png | Bin 0 -> 314 bytes docs/sync_off.png | Bin 0 -> 853 bytes docs/sync_on.png | Bin 0 -> 845 bytes docs/tab_a.png | Bin 0 -> 142 bytes docs/tab_b.png | Bin 0 -> 169 bytes docs/tab_h.png | Bin 0 -> 177 bytes docs/tab_s.png | Bin 0 -> 184 bytes docs/tabs.css | 1 + docs/tinyxml2_8h_source.html | 1955 +++++++++++++++++ dox | 417 ++-- meson.build | 104 + meson_options.txt | 28 + readme.md | 140 +- resources/out/readme.txt | 1 + resources/xmltest-4636783552757760.xml | 1 + resources/xmltest-5330.xml | 1 + resources/xmltest-5662204197076992.xml | 1 + resources/xmltest-5720541257269248.xml | 1 + setversion.py | 58 +- test/CMakeLists.txt | 20 + tinyxml2.cpp | 689 ++++-- tinyxml2.h | 320 ++- tinyxml2.pc.in | 10 - tinyxml2/test.vcxproj | 352 --- tinyxml2/test.vcxproj.filters | 6 - tinyxml2/tinyxml2-cbp/README | 3 - tinyxml2/tinyxml2-cbp/tinyxml2-cbp.cbp | 49 - tinyxml2/tinyxml2.sln | 56 - tinyxml2/tinyxml2.vcxproj | 393 ---- tinyxml2/tinyxml2.vcxproj.filters | 9 - tinyxml2/tinyxml2.xcodeproj/project.pbxproj | 211 -- vs/tinyxml2.sln | 31 + vs/tinyxml2.vcxproj | 151 ++ vs/tinyxml2.vcxproj.filters | 22 + xmltest.cpp | 911 ++++++-- 250 files changed, 20578 insertions(+), 2057 deletions(-) create mode 100644 .github/workflows/test.yml delete mode 100644 .travis.yml create mode 100644 LICENSE.txt delete mode 100644 appveyor.yml delete mode 100644 biicode.conf create mode 100644 cmake/tinyxml2-config.cmake create mode 100644 cmake/tinyxml2.pc.in delete mode 100644 cmake_uninstall.cmake.in create mode 100644 docs/_example_1.html create mode 100644 docs/_example_2.html create mode 100644 docs/_example_3.html create mode 100644 docs/_example_4.html create mode 100644 docs/annotated.html create mode 100644 docs/bc_s.png create mode 100644 docs/bdwn.png create mode 100644 docs/classes.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_attribute-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_attribute.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_comment-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_comment.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_comment.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_const_handle-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_const_handle.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_declaration-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_declaration.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_declaration.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_document-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_document.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_document.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_element-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_element.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_element.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_handle-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_handle.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_node-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_node.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_node.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_printer-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_printer.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_printer.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_text-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_text.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_text.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_unknown-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_unknown.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_unknown.png create mode 100644 docs/classtinyxml2_1_1_x_m_l_visitor-members.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_visitor.html create mode 100644 docs/classtinyxml2_1_1_x_m_l_visitor.png create mode 100644 docs/closed.png create mode 100644 docs/doc.png create mode 100644 docs/doxygen.css create mode 100644 docs/doxygen.png create mode 100644 docs/doxygen.svg create mode 100644 docs/dynsections.js create mode 100644 docs/files.html create mode 100644 docs/folderclosed.png create mode 100644 docs/folderopen.png create mode 100644 docs/functions.html create mode 100644 docs/functions_b.html create mode 100644 docs/functions_c.html create mode 100644 docs/functions_d.html create mode 100644 docs/functions_e.html create mode 100644 docs/functions_f.html create mode 100644 docs/functions_func.html create mode 100644 docs/functions_func_b.html create mode 100644 docs/functions_func_c.html create mode 100644 docs/functions_func_d.html create mode 100644 docs/functions_func_e.html create mode 100644 docs/functions_func_f.html create mode 100644 docs/functions_func_g.html create mode 100644 docs/functions_func_h.html create mode 100644 docs/functions_func_i.html create mode 100644 docs/functions_func_l.html create mode 100644 docs/functions_func_n.html create mode 100644 docs/functions_func_o.html create mode 100644 docs/functions_func_p.html create mode 100644 docs/functions_func_q.html create mode 100644 docs/functions_func_r.html create mode 100644 docs/functions_func_s.html create mode 100644 docs/functions_func_t.html create mode 100644 docs/functions_func_u.html create mode 100644 docs/functions_func_v.html create mode 100644 docs/functions_func_x.html create mode 100644 docs/functions_g.html create mode 100644 docs/functions_h.html create mode 100644 docs/functions_i.html create mode 100644 docs/functions_l.html create mode 100644 docs/functions_n.html create mode 100644 docs/functions_o.html create mode 100644 docs/functions_p.html create mode 100644 docs/functions_q.html create mode 100644 docs/functions_r.html create mode 100644 docs/functions_s.html create mode 100644 docs/functions_t.html create mode 100644 docs/functions_u.html create mode 100644 docs/functions_v.html create mode 100644 docs/functions_x.html create mode 100644 docs/hierarchy.html create mode 100644 docs/index.html create mode 100644 docs/jquery.js create mode 100644 docs/menu.js create mode 100644 docs/menudata.js create mode 100644 docs/nav_f.png create mode 100644 docs/nav_g.png create mode 100644 docs/nav_h.png create mode 100644 docs/open.png create mode 100644 docs/pages.html create mode 100644 docs/search/all_0.html create mode 100644 docs/search/all_0.js create mode 100644 docs/search/all_1.html create mode 100644 docs/search/all_1.js create mode 100644 docs/search/all_10.html create mode 100644 docs/search/all_10.js create mode 100644 docs/search/all_11.html create mode 100644 docs/search/all_11.js create mode 100644 docs/search/all_12.html create mode 100644 docs/search/all_12.js create mode 100644 docs/search/all_13.html create mode 100644 docs/search/all_13.js create mode 100644 docs/search/all_2.html create mode 100644 docs/search/all_2.js create mode 100644 docs/search/all_3.html create mode 100644 docs/search/all_3.js create mode 100644 docs/search/all_4.html create mode 100644 docs/search/all_4.js create mode 100644 docs/search/all_5.html create mode 100644 docs/search/all_5.js create mode 100644 docs/search/all_6.html create mode 100644 docs/search/all_6.js create mode 100644 docs/search/all_7.html create mode 100644 docs/search/all_7.js create mode 100644 docs/search/all_8.html create mode 100644 docs/search/all_8.js create mode 100644 docs/search/all_9.html create mode 100644 docs/search/all_9.js create mode 100644 docs/search/all_a.html create mode 100644 docs/search/all_a.js create mode 100644 docs/search/all_b.html create mode 100644 docs/search/all_b.js create mode 100644 docs/search/all_c.html create mode 100644 docs/search/all_c.js create mode 100644 docs/search/all_d.html create mode 100644 docs/search/all_d.js create mode 100644 docs/search/all_e.html create mode 100644 docs/search/all_e.js create mode 100644 docs/search/all_f.html create mode 100644 docs/search/all_f.js create mode 100644 docs/search/classes_0.html create mode 100644 docs/search/classes_0.js create mode 100644 docs/search/close.png create mode 100644 docs/search/close.svg create mode 100644 docs/search/functions_0.html create mode 100644 docs/search/functions_0.js create mode 100644 docs/search/functions_1.html create mode 100644 docs/search/functions_1.js create mode 100644 docs/search/functions_10.html create mode 100644 docs/search/functions_10.js create mode 100644 docs/search/functions_11.html create mode 100644 docs/search/functions_11.js create mode 100644 docs/search/functions_12.html create mode 100644 docs/search/functions_12.js create mode 100644 docs/search/functions_13.html create mode 100644 docs/search/functions_13.js create mode 100644 docs/search/functions_2.html create mode 100644 docs/search/functions_2.js create mode 100644 docs/search/functions_3.html create mode 100644 docs/search/functions_3.js create mode 100644 docs/search/functions_4.html create mode 100644 docs/search/functions_4.js create mode 100644 docs/search/functions_5.html create mode 100644 docs/search/functions_5.js create mode 100644 docs/search/functions_6.html create mode 100644 docs/search/functions_6.js create mode 100644 docs/search/functions_7.html create mode 100644 docs/search/functions_7.js create mode 100644 docs/search/functions_8.html create mode 100644 docs/search/functions_8.js create mode 100644 docs/search/functions_9.html create mode 100644 docs/search/functions_9.js create mode 100644 docs/search/functions_a.html create mode 100644 docs/search/functions_a.js create mode 100644 docs/search/functions_b.html create mode 100644 docs/search/functions_b.js create mode 100644 docs/search/functions_c.html create mode 100644 docs/search/functions_c.js create mode 100644 docs/search/functions_d.html create mode 100644 docs/search/functions_d.js create mode 100644 docs/search/functions_e.html create mode 100644 docs/search/functions_e.js create mode 100644 docs/search/functions_f.html create mode 100644 docs/search/functions_f.js create mode 100644 docs/search/mag_sel.png create mode 100644 docs/search/mag_sel.svg create mode 100644 docs/search/nomatches.html create mode 100644 docs/search/pages_0.html create mode 100644 docs/search/pages_0.js create mode 100644 docs/search/pages_1.html create mode 100644 docs/search/pages_1.js create mode 100644 docs/search/pages_2.html create mode 100644 docs/search/pages_2.js create mode 100644 docs/search/pages_3.html create mode 100644 docs/search/pages_3.js create mode 100644 docs/search/pages_4.html create mode 100644 docs/search/pages_4.js create mode 100644 docs/search/search.css create mode 100644 docs/search/search.js create mode 100644 docs/search/search_l.png create mode 100644 docs/search/search_m.png create mode 100644 docs/search/search_r.png create mode 100644 docs/search/searchdata.js create mode 100644 docs/splitbar.png create mode 100644 docs/sync_off.png create mode 100644 docs/sync_on.png create mode 100644 docs/tab_a.png create mode 100644 docs/tab_b.png create mode 100644 docs/tab_h.png create mode 100644 docs/tab_s.png create mode 100644 docs/tabs.css create mode 100644 docs/tinyxml2_8h_source.html create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 resources/out/readme.txt create mode 100644 resources/xmltest-4636783552757760.xml create mode 100644 resources/xmltest-5330.xml create mode 100644 resources/xmltest-5662204197076992.xml create mode 100644 resources/xmltest-5720541257269248.xml create mode 100644 test/CMakeLists.txt delete mode 100644 tinyxml2.pc.in delete mode 100644 tinyxml2/test.vcxproj delete mode 100644 tinyxml2/test.vcxproj.filters delete mode 100644 tinyxml2/tinyxml2-cbp/README delete mode 100644 tinyxml2/tinyxml2-cbp/tinyxml2-cbp.cbp delete mode 100755 tinyxml2/tinyxml2.sln delete mode 100755 tinyxml2/tinyxml2.vcxproj delete mode 100755 tinyxml2/tinyxml2.vcxproj.filters delete mode 100644 tinyxml2/tinyxml2.xcodeproj/project.pbxproj create mode 100644 vs/tinyxml2.sln create mode 100644 vs/tinyxml2.vcxproj create mode 100644 vs/tinyxml2.vcxproj.filters mode change 100644 => 100755 xmltest.cpp diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..049f8cde --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,111 @@ +name: Test +on: [ push, pull_request ] +jobs: + test: + name: ${{ matrix.os }}, ${{ matrix.cmake_name }} + strategy: + fail-fast: false + matrix: + os: [ windows-2019, macos-10.15, ubuntu-20.04 ] + cmake: [ 3.15, 3.x ] + include: + - os: windows-2019 + static_postfix: _static + tree: tree /F + CXX: cl + + - os: ubuntu-20.04 + tree: tree + + - os: macos-10.15 + tree: find + + - cmake: 3.15 + cmake_name: CMake 3.15 + - cmake: 3.x + cmake_name: Latest CMake + env: + # CMake 3.15 doesn't detect Visual Studio correctly without these. + CXX: ${{ matrix.CXX }} + CC: ${{ matrix.CXX }} + runs-on: ${{ matrix.os }} + steps: + # System set-up + - uses: actions/checkout@v2 + - uses: ilammy/msvc-dev-cmd@v1 + - uses: seanmiddleditch/gha-setup-ninja@master + - uses: jwlawson/actions-setup-cmake@v1.8 + with: + cmake-version: ${{ matrix.cmake }} + + # Static Debug + - name: "Static Debug: Configure" + run: cmake -G Ninja -S . -B build-static-dbg -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_DEBUG_POSTFIX=d${{matrix.static_postfix}}" + - name: "Static Debug: Build" + run: cmake --build build-static-dbg + - name: "Static Debug: Test" + run: ctest --output-on-failure + working-directory: build-static-dbg + + # Shared Debug + - name: "Shared Debug: Configure" + run: cmake -G Ninja -S . -B build-shared-dbg -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEBUG_POSTFIX=d -DBUILD_SHARED_LIBS=ON + - name: "Shared Debug: Build" + run: cmake --build build-shared-dbg + - name: "Shared Debug: Test" + run: ctest --output-on-failure + working-directory: build-shared-dbg + + # Static Release + - name: "Static Release: Configure" + run: cmake -G Ninja -S . -B build-static-rel -DCMAKE_BUILD_TYPE=Release "-DCMAKE_RELEASE_POSTFIX=${{matrix.static_postfix}}" + - name: "Static Release: Build" + run: cmake --build build-static-rel + - name: "Static Release: Test" + run: ctest --output-on-failure + working-directory: build-static-rel + + # Shared Release + - name: "Shared Release: Configure" + run: cmake -G Ninja -S . -B build-shared-rel -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON + - name: "Shared Release: Build" + run: cmake --build build-shared-rel + - name: "Shared Release: Test" + run: ctest --output-on-failure + working-directory: build-shared-rel + + # Joint install + - name: Install + run: | + cmake --install build-shared-dbg --prefix install + cmake --install build-static-dbg --prefix install + cmake --install build-shared-rel --prefix install + cmake --install build-static-rel --prefix install + - name: List install tree + run: ${{matrix.tree}} install + + # Test find_package + - name: "Test find_package: Static Debug" + run: >- + ctest --build-and-test test test-static-dbg + --build-generator Ninja + --build-options -DCMAKE_BUILD_TYPE=Debug -Dtinyxml2_SHARED_LIBS=NO -DCMAKE_PREFIX_PATH=${{github.workspace}}/install + --test-command ctest --output-on-failure + - name: "Test find_package: Static Release" + run: >- + ctest --build-and-test test test-static-rel + --build-generator Ninja + --build-options -DCMAKE_BUILD_TYPE=Release -Dtinyxml2_SHARED_LIBS=NO -DCMAKE_PREFIX_PATH=${{github.workspace}}/install + --test-command ctest --output-on-failure + - name: "Test find_package: Shared Debug" + run: >- + ctest --build-and-test test test-shared-dbg + --build-generator Ninja + --build-options -DCMAKE_BUILD_TYPE=Debug -Dtinyxml2_SHARED_LIBS=YES -DCMAKE_PREFIX_PATH=${{github.workspace}}/install + --test-command ctest --output-on-failure + - name: "Test find_package: Shared Release" + run: >- + ctest --build-and-test test test-shared-rel + --build-generator Ninja + --build-options -DCMAKE_BUILD_TYPE=Release -Dtinyxml2_SHARED_LIBS=YES -DCMAKE_PREFIX_PATH=${{github.workspace}}/install + --test-command ctest --output-on-failure diff --git a/.gitignore b/.gitignore index ca322427..2c3e2b35 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ tinyxml2/tinyxml2-cbp/bin/ tinyxml2/tinyxml2-cbp/obj/ tinyxml2/bin/ tinyxml2/temp/ +.artifacts/ +.projects/ *.sdf *.suo *.opensdf @@ -15,4 +17,8 @@ tinyxml2/temp/ *.layout *.o *.vc.db -*.vc.opendb \ No newline at end of file +*.vc.opendb +libtinyxml2.a +xmltest +vs/debug + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0634ccbe..00000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: cpp - -os: - - linux - - osx - -compiler: - - g++ - - clang - -before_script: cmake . - -script: - - make -j3 - - make test diff --git a/CMakeLists.txt b/CMakeLists.txt index cec4470f..8802fb81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,176 +1,129 @@ -IF(BIICODE) - ADD_BIICODE_TARGETS() - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/resources) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - ENDIF() - RETURN() -ENDIF(BIICODE) -cmake_minimum_required(VERSION 2.6 FATAL_ERROR) -cmake_policy(VERSION 2.6) -if(POLICY CMP0063) - cmake_policy(SET CMP0063 OLD) -endif() - -project(tinyxml2) -include(GNUInstallDirs) -include(CTest) -#enable_testing() - -#CMAKE_BUILD_TOOL - -################################ -# set lib version here +cmake_minimum_required(VERSION 3.15) +project(tinyxml2 VERSION 9.0.0) -set(GENERIC_LIB_VERSION "5.0.1") -set(GENERIC_LIB_SOVERSION "5") - -################################ -# Add definitions +include(CTest) +option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") +## +## Honor tinyxml2_SHARED_LIBS to match install interface +## -################################ -# Add targets -# By Default shared libray is being built -# To build static libs also - Do cmake . -DBUILD_STATIC_LIBS:BOOL=ON -# User can choose not to build shared library by using cmake -DBUILD_SHARED_LIBS:BOOL=OFF -# To build only static libs use cmake . -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_STATIC_LIBS:BOOL=ON -# To build the tests, use cmake . -DBUILD_TESTS:BOOL=ON -# To disable the building of the tests, use cmake . -DBUILD_TESTS:BOOL=OFF +if (DEFINED tinyxml2_SHARED_LIBS) + set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}") +endif () -option(BUILD_SHARED_LIBS "build as shared library" ON) -option(BUILD_STATIC_LIBS "build as static library" OFF) -option(BUILD_TESTS "build xmltest (deprecated: Use BUILD_TESTING)" ON) +## +## Main library build +## set(CMAKE_CXX_VISIBILITY_PRESET hidden) -set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) - -# to distinguish between debug and release lib -set(CMAKE_DEBUG_POSTFIX "d") - -if(BUILD_SHARED_LIBS) -add_library(tinyxml2 SHARED tinyxml2.cpp tinyxml2.h) - -set_target_properties(tinyxml2 PROPERTIES - COMPILE_DEFINITIONS "TINYXML2_EXPORT" - VERSION "${GENERIC_LIB_VERSION}" - SOVERSION "${GENERIC_LIB_SOVERSION}") - - -if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") - target_include_directories(tinyxml2 PUBLIC - $ - $) - - if(MSVC) - target_compile_definitions(tinyxml2 PUBLIC -D_CRT_SECURE_NO_WARNINGS) - endif(MSVC) -else() - include_directories(${PROJECT_SOURCE_DIR}) - - if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) - endif(MSVC) -endif() - -# export targets for find_package config mode -export(TARGETS tinyxml2 - FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake) - -install(TARGETS tinyxml2 - EXPORT ${CMAKE_PROJECT_NAME}Targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() - -if(BUILD_STATIC_LIBS) -add_library(tinyxml2_static STATIC tinyxml2.cpp tinyxml2.h) -set_target_properties(tinyxml2_static PROPERTIES - COMPILE_DEFINITONS "TINYXML2_EXPORT" - VERSION "${GENERIC_LIB_VERSION}" - SOVERSION "${GENERIC_LIB_SOVERSION}") -set_target_properties( tinyxml2_static PROPERTIES OUTPUT_NAME tinyxml2 ) - -target_compile_definitions(tinyxml2_static PUBLIC -D_CRT_SECURE_NO_WARNINGS) - -if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") - target_include_directories(tinyxml2_static PUBLIC - $ - $) - - if(MSVC) - target_compile_definitions(tinyxml2_static PUBLIC -D_CRT_SECURE_NO_WARNINGS) - endif(MSVC) -else() - include_directories(${PROJECT_SOURCE_DIR}) - - if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) - endif(MSVC) -endif() - -# export targets for find_package config mode -export(TARGETS tinyxml2_static - FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake) - -install(TARGETS tinyxml2_static - EXPORT ${CMAKE_PROJECT_NAME}Targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() - -if(BUILD_TESTING AND BUILD_TESTS) - add_executable(xmltest xmltest.cpp) - if(BUILD_SHARED_LIBS) - add_dependencies(xmltest tinyxml2) - target_link_libraries(xmltest tinyxml2) - else(BUILD_STATIC_LIBS) - add_dependencies(xmltest tinyxml2_static) - target_link_libraries(xmltest tinyxml2_static) - endif() - - # Copy test resources and create test output directory - add_custom_command(TARGET xmltest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/resources $/resources - COMMAND ${CMAKE_COMMAND} -E make_directory $/resources/out - COMMENT "Configuring xmltest resources directory: ${CMAKE_BINARY_DIR}/resources" - ) - - add_test(NAME xmltest COMMAND xmltest) -endif() - -install(FILES tinyxml2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - -foreach(p LIB INCLUDE) - set(var CMAKE_INSTALL_${p}DIR) - if(NOT IS_ABSOLUTE "${${var}}") - set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") - endif() -endforeach() - -configure_file(tinyxml2.pc.in tinyxml2.pc @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - -# uninstall target -if(NOT TARGET uninstall) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY) - - add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) -endif() - -file(WRITE - ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake - "include(\${CMAKE_CURRENT_LIST_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)\n") - -install(FILES - ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake - DESTINATION lib/cmake/${CMAKE_PROJECT_NAME}) - -install(EXPORT ${CMAKE_PROJECT_NAME}Targets - DESTINATION lib/cmake/${CMAKE_PROJECT_NAME}) +set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) + +add_library(tinyxml2 tinyxml2.cpp tinyxml2.h) +add_library(tinyxml2::tinyxml2 ALIAS tinyxml2) + +# Uncomment the following line to require C++11 (or greater) to use tinyxml2 +# target_compile_features(tinyxml2 PUBLIC cxx_std_11) +target_include_directories(tinyxml2 PUBLIC "$") + +target_compile_definitions( + tinyxml2 + PUBLIC $<$:TINYXML2_DEBUG> + INTERFACE $<$:TINYXML2_IMPORT> + PRIVATE $<$:_CRT_SECURE_NO_WARNINGS> +) + +set_target_properties( + tinyxml2 + PROPERTIES + DEFINE_SYMBOL "TINYXML2_EXPORT" + VERSION "${tinyxml2_VERSION}" + SOVERSION "${tinyxml2_VERSION_MAJOR}" +) + +if (tinyxml2_BUILD_TESTING) + add_executable(xmltest xmltest.cpp) + target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) + + add_test( + NAME xmltest + COMMAND xmltest + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + ) + + set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0") +endif () + +## +## Installation +## + +## Standard modules +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +## Custom locations +set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" + CACHE PATH "Directory for pkgconfig files") + +set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2" + CACHE STRING "Path to tinyxml2 CMake files") + +## CMake targets and export scripts + +install( + TARGETS tinyxml2 EXPORT tinyxml2-targets + RUNTIME COMPONENT tinyxml2_runtime + LIBRARY COMPONENT tinyxml2_runtime + NAMELINK_COMPONENT tinyxml2_development + ARCHIVE COMPONENT tinyxml2_development + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + +# Type-specific targets + +if (BUILD_SHARED_LIBS) + set(type shared) +else () + set(type static) +endif () + +install( + EXPORT tinyxml2-targets + DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" + NAMESPACE tinyxml2:: + FILE tinyxml2-${type}-targets.cmake + COMPONENT tinyxml2_development +) + +# Auto-generated version compatibility file +write_basic_package_version_file( + tinyxml2-config-version.cmake + COMPATIBILITY SameMajorVersion +) + +install( + FILES + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake" + DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" + COMPONENT tinyxml2_development +) + +## Headers + +install( + FILES tinyxml2.h + TYPE INCLUDE + COMPONENT tinyxml2_development +) + +## pkg-config + +configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY) +file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen") +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc" + DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}" + COMPONENT tinyxml2_development +) diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..85a6a36f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,18 @@ +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. diff --git a/Makefile b/Makefile index eba6fef1..e76d8ec0 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,75 @@ +# For GNU conventions and targets see https://www.gnu.org/prep/standards/standards.html +# Using GNU standards makes it easier for some users to keep doing what they are used to. + +# 'mkdir -p' is non-portable, but it is widely supported. A portable solution +# is elusive due to race conditions on testing the directory and creating it. +# Anemic toolchain users can sidestep the problem using MKDIR="mkdir". + +AR = ar +ARFLAGS = cr +RM = rm -f +RANLIB = ranlib +MKDIR = mkdir -p +CXXFLAGS = -fPIC + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + +prefix = /usr/local +bindir = $(prefix)/bin +libdir = $(prefix)/lib +includedir = $(prefix)/include + all: xmltest staticlib rebuild: clean all xmltest: xmltest.cpp libtinyxml2.a +effc: + gcc -Werror -Wall -Wextra -Wshadow -Wpedantic -Wformat-nonliteral \ + -Wformat-security -Wswitch-default -Wuninitialized -Wundef \ + -Wpointer-arith -Woverloaded-virtual -Wctor-dtor-privacy \ + -Wnon-virtual-dtor -Woverloaded-virtual -Wsign-promo \ + -Wno-unused-parameter -Weffc++ xmltest.cpp tinyxml2.cpp -o xmltest + clean: - $(RM) *.o xmltest libtinyxml2.a - -test: clean xmltest + -$(RM) *.o xmltest libtinyxml2.a + +# Standard GNU target +distclean: + -$(RM) *.o xmltest libtinyxml2.a + +test: xmltest + ./xmltest + +# Standard GNU target +check: xmltest ./xmltest staticlib: libtinyxml2.a libtinyxml2.a: tinyxml2.o - $(AR) $(ARFLAGS)s $@ $^ - + $(AR) $(ARFLAGS) $@ $^ + $(RANLIB) $@ + tinyxml2.o: tinyxml2.cpp tinyxml2.h +directories: + $(MKDIR) $(DESTDIR)$(prefix) + $(MKDIR) $(DESTDIR)$(bindir) + $(MKDIR) $(DESTDIR)$(libdir) + $(MKDIR) $(DESTDIR)$(includedir) + +# Standard GNU target. +install: xmltest staticlib directories + $(INSTALL_PROGRAM) xmltest $(DESTDIR)$(bindir)/xmltest + $(INSTALL_DATA) tinyxml2.h $(DESTDIR)$(includedir)/tinyxml2.h + $(INSTALL_DATA) libtinyxml2.a $(DESTDIR)$(libdir)/libtinyxml2.a + +# Standard GNU target +uninstall: + $(RM) $(DESTDIR)$(bindir)/xmltest + $(RM) $(DESTDIR)$(includedir)/tinyxml2.h + $(RM) $(DESTDIR)$(libdir)/libtinyxml2.a diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 0c60b672..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,7 +0,0 @@ -before_build: - - cmake . - -build_script: - - msbuild tinyxml2.sln /m /p:Configuration=Release /t:ALL_BUILD - - cd Release - - xmltest.exe diff --git a/biicode.conf b/biicode.conf deleted file mode 100644 index 5dca6b1b..00000000 --- a/biicode.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Biicode configuration file - -[paths] - / - -[dependencies] - xmltest.cpp + resources/*.xml \ No newline at end of file diff --git a/cmake/tinyxml2-config.cmake b/cmake/tinyxml2-config.cmake new file mode 100644 index 00000000..5baa3641 --- /dev/null +++ b/cmake/tinyxml2-config.cmake @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.15) + +set(tinyxml2_known_comps static shared) +set(tinyxml2_comp_static NO) +set(tinyxml2_comp_shared NO) +foreach (tinyxml2_comp IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) + if (tinyxml2_comp IN_LIST tinyxml2_known_comps) + set(tinyxml2_comp_${tinyxml2_comp} YES) + else () + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE + "tinyxml2 does not recognize component `${tinyxml2_comp}`.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + return() + endif () +endforeach () + +if (tinyxml2_comp_static AND tinyxml2_comp_shared) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE + "tinyxml2 `static` and `shared` components are mutually exclusive.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + return() +endif () + +set(tinyxml2_static_targets "${CMAKE_CURRENT_LIST_DIR}/tinyxml2-static-targets.cmake") +set(tinyxml2_shared_targets "${CMAKE_CURRENT_LIST_DIR}/tinyxml2-shared-targets.cmake") + +macro(tinyxml2_load_targets type) + if (NOT EXISTS "${tinyxml2_${type}_targets}") + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE + "tinyxml2 `${type}` libraries were requested but not found.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + return() + endif () + include("${tinyxml2_${type}_targets}") +endmacro() + +if (tinyxml2_comp_static) + tinyxml2_load_targets(static) +elseif (tinyxml2_comp_shared) + tinyxml2_load_targets(shared) +elseif (DEFINED tinyxml2_SHARED_LIBS AND tinyxml2_SHARED_LIBS) + tinyxml2_load_targets(shared) +elseif (DEFINED tinyxml2_SHARED_LIBS AND NOT tinyxml2_SHARED_LIBS) + tinyxml2_load_targets(static) +elseif (BUILD_SHARED_LIBS) + if (EXISTS "${tinyxml2_shared_targets}") + tinyxml2_load_targets(shared) + else () + tinyxml2_load_targets(static) + endif () +else () + if (EXISTS "${tinyxml2_static_targets}") + tinyxml2_load_targets(static) + else () + tinyxml2_load_targets(shared) + endif () +endif () diff --git a/cmake/tinyxml2.pc.in b/cmake/tinyxml2.pc.in new file mode 100644 index 00000000..a4fe22fa --- /dev/null +++ b/cmake/tinyxml2.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: TinyXML2 +Description: simple, small, C++ XML parser +Version: @tinyxml2_VERSION@ +Libs: -L${libdir} -l$ +Cflags: -I${includedir} diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in deleted file mode 100644 index 2c34c819..00000000 --- a/cmake_uninstall.cmake.in +++ /dev/null @@ -1,21 +0,0 @@ -if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") -endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - -file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) -string(REGEX REPLACE "\n" ";" files "${files}") -foreach(file ${files}) - message(STATUS "Uninstalling $ENV{DESTDIR}${file}") - if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - exec_program( - "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") - endif(NOT "${rm_retval}" STREQUAL 0) - else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - message(STATUS "File $ENV{DESTDIR}${file} does not exist.") - endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") -endforeach(file) \ No newline at end of file diff --git a/contrib/html5-printer.cpp b/contrib/html5-printer.cpp index 7728b692..e9a423d2 100644 --- a/contrib/html5-printer.cpp +++ b/contrib/html5-printer.cpp @@ -40,7 +40,7 @@ distribution. */ -#include +#include "../tinyxml2.h" #include #if defined (_MSC_VER) diff --git a/docs/_example_1.html b/docs/_example_1.html new file mode 100644 index 00000000..6cccb312 --- /dev/null +++ b/docs/_example_1.html @@ -0,0 +1,83 @@ + + + + + + + +TinyXML-2: Load an XML File + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Load an XML File
+
+
+

Basic XML file loading. The basic syntax to load an XML file from disk and check for an error. (ErrorID() will return 0 for no error.)

int example_1()
+
{
+
XMLDocument doc;
+
doc.LoadFile( "resources/dream.xml" );
+
+
return doc.ErrorID();
+
}
+
+
+ + + + diff --git a/docs/_example_2.html b/docs/_example_2.html new file mode 100644 index 00000000..fb406a46 --- /dev/null +++ b/docs/_example_2.html @@ -0,0 +1,84 @@ + + + + + + + +TinyXML-2: Parse an XML from char buffer + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Parse an XML from char buffer
+
+
+

Basic XML string parsing. The basic syntax to parse an XML for a char* and check for an error. (ErrorID() will return 0 for no error.)

int example_2()
+
{
+
static const char* xml = "<element/>";
+
XMLDocument doc;
+
doc.Parse( xml );
+
+
return doc.ErrorID();
+
}
+
+
+ + + + diff --git a/docs/_example_3.html b/docs/_example_3.html new file mode 100644 index 00000000..2994ed67 --- /dev/null +++ b/docs/_example_3.html @@ -0,0 +1,121 @@ + + + + + + + +TinyXML-2: Get information out of XML + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Get information out of XML
+
+
+

In this example, we navigate a simple XML file, and read some interesting text. Note that this example doesn't use error checking; working code should check for null pointers when walking an XML tree, or use XMLHandle.

+

(The XML is an excerpt from "dream.xml").

+
int example_3()
+
{
+
static const char* xml =
+
"<?xml version=\"1.0\"?>"
+
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
+
"<PLAY>"
+
"<TITLE>A Midsummer Night's Dream</TITLE>"
+
"</PLAY>";
+

The structure of the XML file is:

+
    +
  • +(declaration)
  • +
  • +(dtd stuff)
  • +
  • +Element "PLAY"
      +
    • +Element "TITLE"
        +
      • +Text "A Midsummer Night's Dream"
      • +
      +
    • +
    +
  • +
+

For this example, we want to print out the title of the play. The text of the title (what we want) is child of the "TITLE" element which is a child of the "PLAY" element.

+

We want to skip the declaration and dtd, so the method FirstChildElement() is a good choice. The FirstChildElement() of the Document is the "PLAY" Element, the FirstChildElement() of the "PLAY" Element is the "TITLE" Element.

+
+
XMLDocument doc;
+
doc.Parse( xml );
+
+
XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );
+

We can then use the convenience function GetText() to get the title of the play.

+
const char* title = titleElement->GetText();
+
printf( "Name of play (1): %s\n", title );
+

Text is just another Node in the XML DOM. And in fact you should be a little cautious with it, as text nodes can contain elements.

+
Consider: A Midsummer Night's <b>Dream</b>
+

It is more correct to actually query the Text Node if in doubt:

+
+
XMLText* textNode = titleElement->FirstChild()->ToText();
+
title = textNode->Value();
+
printf( "Name of play (2): %s\n", title );
+

Noting that here we use FirstChild() since we are looking for XMLText, not an element, and ToText() is a cast from a Node to a XMLText.

+
+
+ + + + diff --git a/docs/_example_4.html b/docs/_example_4.html new file mode 100644 index 00000000..5f8d3918 --- /dev/null +++ b/docs/_example_4.html @@ -0,0 +1,94 @@ + + + + + + + +TinyXML-2: Read attributes and text information. + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Read attributes and text information.
+
+
+

+

There are fundamentally 2 ways of writing a key-value pair into an XML file. (Something that's always annoyed me about XML.) Either by using attributes, or by writing the key name into an element and the value into the text node wrapped by the element. Both approaches are illustrated in this example, which shows two ways to encode the value "2" into the key "v":

+
bool example_4()
+
{
+
static const char* xml =
+
"<information>"
+
" <attributeApproach v='2' />"
+
" <textApproach>"
+
" <v>2</v>"
+
" </textApproach>"
+
"</information>";
+

TinyXML-2 has accessors for both approaches.

+

When using an attribute, you navigate to the XMLElement with that attribute and use the QueryIntAttribute() group of methods. (Also QueryFloatAttribute(), etc.)

+
XMLElement* attributeApproachElement = doc.FirstChildElement()->FirstChildElement( "attributeApproach" );
+
attributeApproachElement->QueryIntAttribute( "v", &v0 );
+

When using the text approach, you need to navigate down one more step to the XMLElement that contains the text. Note the extra FirstChildElement( "v" ) in the code below. The value of the text can then be safely queried with the QueryIntText() group of methods. (Also QueryFloatText(), etc.)

+
XMLElement* textApproachElement = doc.FirstChildElement()->FirstChildElement( "textApproach" );
+
textApproachElement->FirstChildElement( "v" )->QueryIntText( &v1 );
+
+
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 00000000..24d5b3f9 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,92 @@ + + + + + + + +TinyXML-2: Class List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + +
 Ntinyxml2
 CXMLVisitor
 CXMLNode
 CXMLText
 CXMLComment
 CXMLDeclaration
 CXMLUnknown
 CXMLAttribute
 CXMLElement
 CXMLDocument
 CXMLHandle
 CXMLConstHandle
 CXMLPrinter
+
+
+ + + + diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/bdwn.png b/docs/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +TinyXML-2: Class Index + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+ +
+
+
X
+
XMLAttribute (tinyxml2)
XMLComment (tinyxml2)
XMLConstHandle (tinyxml2)
XMLDeclaration (tinyxml2)
XMLDocument (tinyxml2)
XMLElement (tinyxml2)
XMLHandle (tinyxml2)
XMLNode (tinyxml2)
XMLPrinter (tinyxml2)
XMLText (tinyxml2)
XMLUnknown (tinyxml2)
XMLVisitor (tinyxml2)
+
+
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_attribute-members.html b/docs/classtinyxml2_1_1_x_m_l_attribute-members.html new file mode 100644 index 00000000..bb41a263 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_attribute-members.html @@ -0,0 +1,106 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLAttribute Member List
+
+ + + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_attribute.html b/docs/classtinyxml2_1_1_x_m_l_attribute.html new file mode 100644 index 00000000..bcec9428 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_attribute.html @@ -0,0 +1,232 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLAttribute Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLAttribute Class Reference
+
+
+ +

#include <tinyxml2.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const char * Name () const
 The name of the attribute.
 
+const char * Value () const
 The value of the attribute.
 
+int GetLineNum () const
 Gets the line number the attribute is in, if the document was parsed from a file.
 
+const XMLAttributeNext () const
 The next attribute in the list.
 
int IntValue () const
 
+unsigned UnsignedValue () const
 Query as an unsigned integer. See IntValue()
 
+bool BoolValue () const
 Query as a boolean. See IntValue()
 
+double DoubleValue () const
 Query as a double. See IntValue()
 
+float FloatValue () const
 Query as a float. See IntValue()
 
XMLError QueryIntValue (int *value) const
 
+XMLError QueryUnsignedValue (unsigned int *value) const
 See QueryIntValue.
 
+XMLError QueryInt64Value (int64_t *value) const
 See QueryIntValue.
 
+XMLError QueryUnsigned64Value (uint64_t *value) const
 See QueryIntValue.
 
+XMLError QueryBoolValue (bool *value) const
 See QueryIntValue.
 
+XMLError QueryDoubleValue (double *value) const
 See QueryIntValue.
 
+XMLError QueryFloatValue (float *value) const
 See QueryIntValue.
 
+void SetAttribute (const char *value)
 Set the attribute to a string value.
 
+void SetAttribute (int value)
 Set the attribute to value.
 
+void SetAttribute (unsigned value)
 Set the attribute to value.
 
+void SetAttribute (int64_t value)
 Set the attribute to value.
 
+void SetAttribute (uint64_t value)
 Set the attribute to value.
 
+void SetAttribute (bool value)
 Set the attribute to value.
 
+void SetAttribute (double value)
 Set the attribute to value.
 
+void SetAttribute (float value)
 Set the attribute to value.
 
+

Detailed Description

+

An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name.

+
Note
The attributes are not XMLNodes. You may only query the Next() attribute in a list.
+

Member Function Documentation

+ +

◆ IntValue()

+ +
+
+ + + + + +
+ + + + + + + +
int tinyxml2::XMLAttribute::IntValue () const
+
+inline
+
+

IntValue interprets the attribute as an integer, and returns the value. If the value isn't an integer, 0 will be returned. There is no error checking; use QueryIntValue() if you need error checking.

+ +
+
+ +

◆ QueryIntValue()

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLAttribute::QueryIntValue (int * value) const
+
+

QueryIntValue interprets the attribute as an integer, and returns the value in the provided parameter. The function will return XML_SUCCESS on success, and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_comment-members.html b/docs/classtinyxml2_1_1_x_m_l_comment-members.html new file mode 100644 index 00000000..1e7f36a6 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_comment-members.html @@ -0,0 +1,114 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLComment Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLComment, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLCommentvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLCommentvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLCommentvirtual
ToComment()tinyxml2::XMLCommentinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_comment.html b/docs/classtinyxml2_1_1_x_m_l_comment.html new file mode 100644 index 00000000..dd1a5d4f --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_comment.html @@ -0,0 +1,301 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLComment Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLComment Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLComment:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

An XML Comment.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLComment::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLComment::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLComment::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_comment.png b/docs/classtinyxml2_1_1_x_m_l_comment.png new file mode 100644 index 0000000000000000000000000000000000000000..3a076f05c0f83dc3e8e2d11062ee57c9d8c2a377 GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^y+9nm!3-pY71+{%lth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C0q^FBxNCo5Dxexo6Ce`0>f z0k-Im&&;f!T$0WzWSO;z@$czPI;TxGcwACx=~ej&!WL$k+LKC7-kNvmV)lL`=Kj;S zuJBG@BD}9xr~(H=9)QXy)0C>c`CP)|hUd|8DlT7c;t5WK;dOhGx$@Sn^}JvFgcb z?Ca${e+jmk?bkHk@-uYik2dd1tcl8=c9(DJoZfVX=>Y!+rWtK3bK=&|ELpax^0dzq z_!i{ad;5g=07T zI1VVUI+Dm-;6887)tjQ59hARmEX$vK{@3sLxrF>3m;jn6shG>G-nP36nI8mz>>KyChoLWBH}fax=@>dwunTdAd&( z&#s+qzj39%_agnjiodTc%a^|?Q=OD^xz*INxg_vi*eYAAXG#YHv+CZi+h+FEHaRQ& zMTW-gpU-0d%r*bgdUm><_`b8-_r-qXW&gk_%`pFEPLNlo*guA)_HxFp)r-1;35UVc L)z4*}Q$iB}2?{U4 literal 0 HcmV?d00001 diff --git a/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html b/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html new file mode 100644 index 00000000..03c24bf7 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html @@ -0,0 +1,81 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLConstHandle Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLConstHandle, including all inherited members.

+
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_const_handle.html b/docs/classtinyxml2_1_1_x_m_l_const_handle.html new file mode 100644 index 00000000..eb72a01b --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_const_handle.html @@ -0,0 +1,88 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLConstHandle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLConstHandle Class Reference
+
+
+ +

#include <tinyxml2.h>

+

Detailed Description

+

A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the same in all regards, except for the 'const' qualifiers. See XMLHandle for API.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_declaration-members.html b/docs/classtinyxml2_1_1_x_m_l_declaration-members.html new file mode 100644 index 00000000..c470c21b --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_declaration-members.html @@ -0,0 +1,114 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLDeclaration Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLDeclaration, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLDeclarationvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLDeclarationvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLDeclarationvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLDeclarationinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_declaration.html b/docs/classtinyxml2_1_1_x_m_l_declaration.html new file mode 100644 index 00000000..6e8f9e2b --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_declaration.html @@ -0,0 +1,303 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLDeclaration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLDeclaration Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLDeclaration:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

In correct XML the declaration is the first entry in the file.

    <?xml version="1.0" standalone="yes"?>
+

TinyXML-2 will happily read or write files without a declaration, however.

+

The text of the declaration isn't interpreted. It is parsed and written as a string.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDeclaration::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLDeclaration::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDeclaration::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_declaration.png b/docs/classtinyxml2_1_1_x_m_l_declaration.png new file mode 100644 index 0000000000000000000000000000000000000000..c7aa6319fcb939dc39dc72310971fd68db7611eb GIT binary patch literal 688 zcmV;h0#E&kP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0006%Nklb)L9y(^B)#yTuZ-F8Vj(?>Q*`lJ-Pg^R%Pr(xT#53#-TvAf>AMkW7g zq07kyn^}u)(u_&Fq{gmln%pPHWiEpopaO1425iRDA?=c^U9z>M%So(@!#a)Fh7KQM z%axFVu>)G>&0wbP_AKPf`%jWay2;kmBuLi!#&xkt(wSUr^(PyM(B_HE4G;FIBx^Tbcarp^?y`LW?JnCl(EjMRUXs46#U@F9P0qG$+cu{Fp3@J& zq?(xR=VxBHiP>Ig)56Wnw)zy{H(G1}el0ctzZM&SUyBXEuf+!7*J1`>vBc;UVnFw{oQP=!`Nm3jm8nq zLR&U~Pf9*oxCoqpD%;rQDI35+nJv9dUjItK93U;UaqqC%M8}Jr*uCys(u*wLQWD

!f9COP3$EE_MaT40qVt%(rLs82S@is>ERT z@kGSKaD<2j>q?!vBv;zaRx&}Lx4v;N*!qM8pwn;I%$dDp8x^mc?jtzZ+IBR90M+^` z^zrfy<^4A7(|Tt1*Ff8+M>fFP3}1^AwkbYjW41ZIv47%Q4=|Y)8-QPvvxN}Cocaes W_8~7%yCIwa0000 + + + + + + +TinyXML-2: Member List + + + + + + + + + +

+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLDocument Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLDocument, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLDocumentvirtual
Clear()tinyxml2::XMLDocument
ClearError()tinyxml2::XMLDocument
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeepCopy(XMLDocument *target) consttinyxml2::XMLDocument
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
DeleteNode(XMLNode *node)tinyxml2::XMLDocument
Error() consttinyxml2::XMLDocumentinline
ErrorID() consttinyxml2::XMLDocumentinline
ErrorLineNum() consttinyxml2::XMLDocumentinline
ErrorStr() consttinyxml2::XMLDocument
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
HasBOM() consttinyxml2::XMLDocumentinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
LoadFile(const char *filename)tinyxml2::XMLDocument
LoadFile(FILE *)tinyxml2::XMLDocument
NewComment(const char *comment)tinyxml2::XMLDocument
NewDeclaration(const char *text=0)tinyxml2::XMLDocument
NewElement(const char *name)tinyxml2::XMLDocument
NewText(const char *text)tinyxml2::XMLDocument
NewUnknown(const char *text)tinyxml2::XMLDocument
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
Parse(const char *xml, size_t nBytes=static_cast< size_t >(-1))tinyxml2::XMLDocument
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
Print(XMLPrinter *streamer=0) consttinyxml2::XMLDocument
PrintError() consttinyxml2::XMLDocument
RootElement()tinyxml2::XMLDocumentinline
SaveFile(const char *filename, bool compact=false)tinyxml2::XMLDocument
SaveFile(FILE *fp, bool compact=false)tinyxml2::XMLDocument
SetBOM(bool useBOM)tinyxml2::XMLDocumentinline
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *) consttinyxml2::XMLDocumentinlinevirtual
ShallowEqual(const XMLNode *) consttinyxml2::XMLDocumentinlinevirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLDocumentinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
XMLDocument(bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)tinyxml2::XMLDocument
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_document.html b/docs/classtinyxml2_1_1_x_m_l_document.html new file mode 100644 index 00000000..43c6c5d2 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_document.html @@ -0,0 +1,747 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLDocument Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLDocument Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLDocument:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

XMLDocument (bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)
 constructor
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
XMLError Parse (const char *xml, size_t nBytes=static_cast< size_t >(-1))
 
XMLError LoadFile (const char *filename)
 
XMLError LoadFile (FILE *)
 
XMLError SaveFile (const char *filename, bool compact=false)
 
XMLError SaveFile (FILE *fp, bool compact=false)
 
bool HasBOM () const
 
void SetBOM (bool useBOM)
 
XMLElementRootElement ()
 
void Print (XMLPrinter *streamer=0) const
 
virtual bool Accept (XMLVisitor *visitor) const
 
XMLElementNewElement (const char *name)
 
XMLCommentNewComment (const char *comment)
 
XMLTextNewText (const char *text)
 
XMLDeclarationNewDeclaration (const char *text=0)
 
XMLUnknownNewUnknown (const char *text)
 
void DeleteNode (XMLNode *node)
 
+void ClearError ()
 Clears the error flags.
 
+bool Error () const
 Return true if there was an error parsing the document.
 
+XMLError ErrorID () const
 Return the errorID.
 
const char * ErrorStr () const
 
+void PrintError () const
 A (trivial) utility function that prints the ErrorStr() to stdout.
 
+int ErrorLineNum () const
 Return the line where the error occurred, or zero if unknown.
 
+void Clear ()
 Clear the document, resetting it to the initial state.
 
void DeepCopy (XMLDocument *target) const
 
virtual XMLNodeShallowClone (XMLDocument *) const
 
virtual bool ShallowEqual (const XMLNode *) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

A Document binds together all the functionality. It can be saved, loaded, and printed to the screen. All Nodes are connected and allocated to a Document. If the Document is deleted, all its Nodes are also deleted.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDocument::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ DeepCopy()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::DeepCopy (XMLDocumenttarget) const
+
+

Copies this document to a target document. The target will be completely cleared before the copy. If you want to copy a sub-tree, see XMLNode::DeepClone().

+

NOTE: that the 'target' must be non-null.

+ +
+
+ +

◆ DeleteNode()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::DeleteNode (XMLNodenode)
+
+

Delete a node associated with this document. It will be unlinked from the DOM.

+ +
+
+ +

◆ ErrorStr()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLDocument::ErrorStr () const
+
+

Returns a "long form" error description. A hopefully helpful diagnostic with location, line number, and/or additional info.

+ +
+
+ +

◆ HasBOM()

+ +
+
+ + + + + +
+ + + + + + + +
bool tinyxml2::XMLDocument::HasBOM () const
+
+inline
+
+

Returns true if this document has a leading Byte Order Mark of UTF8.

+ +
+
+ +

◆ LoadFile() [1/2]

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLDocument::LoadFile (const char * filename)
+
+

Load an XML file from disk. Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ LoadFile() [2/2]

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLDocument::LoadFile (FILE * )
+
+

Load an XML file from disk. You are responsible for providing and closing the FILE*.

+

NOTE: The file should be opened as binary ("rb") not text in order for TinyXML-2 to correctly do newline normalization.

+

Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ NewComment()

+ +
+
+ + + + + + + + +
XMLComment* tinyxml2::XMLDocument::NewComment (const char * comment)
+
+

Create a new Comment associated with this Document. The memory for the Comment is managed by the Document.

+ +
+
+ +

◆ NewDeclaration()

+ +
+
+ + + + + + + + +
XMLDeclaration* tinyxml2::XMLDocument::NewDeclaration (const char * text = 0)
+
+

Create a new Declaration associated with this Document. The memory for the object is managed by the Document.

+

If the 'text' param is null, the standard declaration is used.:

    <?xml version="1.0" encoding="UTF-8"?>
+
+
+
+ +

◆ NewElement()

+ +
+
+ + + + + + + + +
XMLElement* tinyxml2::XMLDocument::NewElement (const char * name)
+
+

Create a new Element associated with this Document. The memory for the Element is managed by the Document.

+ +
+
+ +

◆ NewText()

+ +
+
+ + + + + + + + +
XMLText* tinyxml2::XMLDocument::NewText (const char * text)
+
+

Create a new Text associated with this Document. The memory for the Text is managed by the Document.

+ +
+
+ +

◆ NewUnknown()

+ +
+
+ + + + + + + + +
XMLUnknown* tinyxml2::XMLDocument::NewUnknown (const char * text)
+
+

Create a new Unknown associated with this Document. The memory for the object is managed by the Document.

+ +
+
+ +

◆ Parse()

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::Parse (const char * xml,
size_t nBytes = static_cast< size_t >(-1) 
)
+
+

Parse an XML file from a character string. Returns XML_SUCCESS (0) on success, or an errorID.

+

You may optionally pass in the 'nBytes', which is the number of bytes which will be parsed. If not specified, TinyXML-2 will assume 'xml' points to a null terminated string.

+ +
+
+ +

◆ Print()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::Print (XMLPrinterstreamer = 0) const
+
+

Print the Document. If the Printer is not provided, it will print to stdout. If you provide Printer, this can print to a file:

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Or you can use a printer to print to memory:

XMLPrinter printer;
+doc.Print( &printer );
+// printer.CStr() has a const char* to the XML
+
+
+
+ +

◆ RootElement()

+ +
+
+ + + + + +
+ + + + + + + +
XMLElement* tinyxml2::XMLDocument::RootElement ()
+
+inline
+
+

Return the root element of DOM. Equivalent to FirstChildElement(). To get the first node, use FirstChild().

+ +
+
+ +

◆ SaveFile() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::SaveFile (const char * filename,
bool compact = false 
)
+
+

Save the XML file to disk. Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ SaveFile() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::SaveFile (FILE * fp,
bool compact = false 
)
+
+

Save the XML file to disk. You are responsible for providing and closing the FILE*.

+

Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ SetBOM()

+ +
+
+ + + + + +
+ + + + + + + + +
void tinyxml2::XMLDocument::SetBOM (bool useBOM)
+
+inline
+
+

Sets whether to write the BOM when writing the file.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLDocument::ShallowClone (XMLDocumentdocument) const
+
+inlinevirtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDocument::ShallowEqual (const XMLNodecompare) const
+
+inlinevirtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_document.png b/docs/classtinyxml2_1_1_x_m_l_document.png new file mode 100644 index 0000000000000000000000000000000000000000..4fcf9f466dbe8299ecf452e000e909c62318e62f GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^lYlsYgBeI3ZM_4cBm#UwT>t<74`jZ0^R=}9&;%e0 zj1L?*z}k679?0b=3GxeO04f53tEWPY7#NroJY5_^Dj46+ecSh1frqtSc;);5C$@9O zw_P#~U9DSwv}?F>}esYbgapp0WN~6M) zS)0P28LfY)v4<_8Aw|cQrBZ0+S%1FBSQ)kC788>nazT9CMSQ9iPR*EkT;;l&P5JZr zDy6d=vY6ymZvPUh;q;uuHp^|*_apAF=1h~=UpoEPA){u6t76LeKW8=1V86HC!gHJN zo@FX8oo6}zid`hRBwp=Tz1{9fUrcjVJU?wwyHqH1Jc#K>PaZ>drtOm3xt7bmPI%|C z+EBM+i#FeZ>uyXRwoGKO$yH(Sm*zZh88^3HO0z}anh;}xDpYN-=q?bo;)` z%un}T35oeSsob>nMyO1}ZSngr{U_}EIaN}*_UrELpVGw>ctJkNR%#VE6!eQdTuk2O UU-YshVESS3boFyt=akR{09U0V`2YX_ literal 0 HcmV?d00001 diff --git a/docs/classtinyxml2_1_1_x_m_l_element-members.html b/docs/classtinyxml2_1_1_x_m_l_element-members.html new file mode 100644 index 00000000..2c3f55e0 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_element-members.html @@ -0,0 +1,171 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLElement Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLElement, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLElementvirtual
Attribute(const char *name, const char *value=0) consttinyxml2::XMLElement
BoolAttribute(const char *name, bool defaultValue=false) consttinyxml2::XMLElement
BoolText(bool defaultValue=false) consttinyxml2::XMLElement
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteAttribute(const char *name)tinyxml2::XMLElement
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
DoubleAttribute(const char *name, double defaultValue=0) consttinyxml2::XMLElement
DoubleText(double defaultValue=0) consttinyxml2::XMLElement
FindAttribute(const char *name) consttinyxml2::XMLElement
FirstAttribute() consttinyxml2::XMLElementinline
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
FloatAttribute(const char *name, float defaultValue=0) consttinyxml2::XMLElement
FloatText(float defaultValue=0) consttinyxml2::XMLElement
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetText() consttinyxml2::XMLElement
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
InsertNewChildElement(const char *name)tinyxml2::XMLElement
InsertNewComment(const char *comment)tinyxml2::XMLElement
InsertNewDeclaration(const char *text)tinyxml2::XMLElement
InsertNewText(const char *text)tinyxml2::XMLElement
InsertNewUnknown(const char *text)tinyxml2::XMLElement
Int64Attribute(const char *name, int64_t defaultValue=0) consttinyxml2::XMLElement
Int64Text(int64_t defaultValue=0) consttinyxml2::XMLElement
IntAttribute(const char *name, int defaultValue=0) consttinyxml2::XMLElement
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
Name() consttinyxml2::XMLElementinline
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
QueryAttribute(const char *name, int *value) consttinyxml2::XMLElementinline
QueryBoolAttribute(const char *name, bool *value) consttinyxml2::XMLElementinline
QueryBoolText(bool *bval) consttinyxml2::XMLElement
QueryDoubleAttribute(const char *name, double *value) consttinyxml2::XMLElementinline
QueryDoubleText(double *dval) consttinyxml2::XMLElement
QueryFloatAttribute(const char *name, float *value) consttinyxml2::XMLElementinline
QueryFloatText(float *fval) consttinyxml2::XMLElement
QueryInt64Attribute(const char *name, int64_t *value) consttinyxml2::XMLElementinline
QueryInt64Text(int64_t *uval) consttinyxml2::XMLElement
QueryIntAttribute(const char *name, int *value) consttinyxml2::XMLElementinline
QueryIntText(int *ival) consttinyxml2::XMLElement
QueryStringAttribute(const char *name, const char **value) consttinyxml2::XMLElementinline
QueryUnsigned64Attribute(const char *name, uint64_t *value) consttinyxml2::XMLElementinline
QueryUnsigned64Text(uint64_t *uval) consttinyxml2::XMLElement
QueryUnsignedAttribute(const char *name, unsigned int *value) consttinyxml2::XMLElementinline
QueryUnsignedText(unsigned *uval) consttinyxml2::XMLElement
SetAttribute(const char *name, const char *value)tinyxml2::XMLElementinline
SetAttribute(const char *name, int value)tinyxml2::XMLElementinline
SetAttribute(const char *name, unsigned value)tinyxml2::XMLElementinline
SetAttribute(const char *name, int64_t value)tinyxml2::XMLElementinline
SetAttribute(const char *name, uint64_t value)tinyxml2::XMLElementinline
SetAttribute(const char *name, bool value)tinyxml2::XMLElementinline
SetAttribute(const char *name, double value)tinyxml2::XMLElementinline
SetAttribute(const char *name, float value)tinyxml2::XMLElementinline
SetName(const char *str, bool staticMem=false)tinyxml2::XMLElementinline
SetText(const char *inText)tinyxml2::XMLElement
SetText(int value)tinyxml2::XMLElement
SetText(unsigned value)tinyxml2::XMLElement
SetText(int64_t value)tinyxml2::XMLElement
SetText(uint64_t value)tinyxml2::XMLElement
SetText(bool value)tinyxml2::XMLElement
SetText(double value)tinyxml2::XMLElement
SetText(float value)tinyxml2::XMLElement
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLElementvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLElementvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLElementinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Unsigned64Attribute(const char *name, uint64_t defaultValue=0) consttinyxml2::XMLElement
Unsigned64Text(uint64_t defaultValue=0) consttinyxml2::XMLElement
UnsignedAttribute(const char *name, unsigned defaultValue=0) consttinyxml2::XMLElement
UnsignedText(unsigned defaultValue=0) consttinyxml2::XMLElement
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_element.html b/docs/classtinyxml2_1_1_x_m_l_element.html new file mode 100644 index 00000000..7a56950b --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_element.html @@ -0,0 +1,774 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLElement Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLElement Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLElement:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const char * Name () const
 Get the name of an element (which is the Value() of the node.)
 
+void SetName (const char *str, bool staticMem=false)
 Set the name of the element.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
const char * Attribute (const char *name, const char *value=0) const
 
int IntAttribute (const char *name, int defaultValue=0) const
 
+unsigned UnsignedAttribute (const char *name, unsigned defaultValue=0) const
 See IntAttribute()
 
+int64_t Int64Attribute (const char *name, int64_t defaultValue=0) const
 See IntAttribute()
 
+uint64_t Unsigned64Attribute (const char *name, uint64_t defaultValue=0) const
 See IntAttribute()
 
+bool BoolAttribute (const char *name, bool defaultValue=false) const
 See IntAttribute()
 
+double DoubleAttribute (const char *name, double defaultValue=0) const
 See IntAttribute()
 
+float FloatAttribute (const char *name, float defaultValue=0) const
 See IntAttribute()
 
XMLError QueryIntAttribute (const char *name, int *value) const
 
+XMLError QueryUnsignedAttribute (const char *name, unsigned int *value) const
 See QueryIntAttribute()
 
+XMLError QueryInt64Attribute (const char *name, int64_t *value) const
 See QueryIntAttribute()
 
+XMLError QueryUnsigned64Attribute (const char *name, uint64_t *value) const
 See QueryIntAttribute()
 
+XMLError QueryBoolAttribute (const char *name, bool *value) const
 See QueryIntAttribute()
 
+XMLError QueryDoubleAttribute (const char *name, double *value) const
 See QueryIntAttribute()
 
+XMLError QueryFloatAttribute (const char *name, float *value) const
 See QueryIntAttribute()
 
+XMLError QueryStringAttribute (const char *name, const char **value) const
 See QueryIntAttribute()
 
XMLError QueryAttribute (const char *name, int *value) const
 
+void SetAttribute (const char *name, const char *value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, int value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, unsigned value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, int64_t value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, uint64_t value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, bool value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, double value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, float value)
 Sets the named attribute to value.
 
void DeleteAttribute (const char *name)
 
+const XMLAttributeFirstAttribute () const
 Return the first attribute in the list.
 
+const XMLAttributeFindAttribute (const char *name) const
 Query a specific attribute in the list.
 
const char * GetText () const
 
void SetText (const char *inText)
 
+void SetText (int value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (unsigned value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (int64_t value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (uint64_t value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (bool value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (double value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (float value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
XMLError QueryIntText (int *ival) const
 
+XMLError QueryUnsignedText (unsigned *uval) const
 See QueryIntText()
 
+XMLError QueryInt64Text (int64_t *uval) const
 See QueryIntText()
 
+XMLError QueryUnsigned64Text (uint64_t *uval) const
 See QueryIntText()
 
+XMLError QueryBoolText (bool *bval) const
 See QueryIntText()
 
+XMLError QueryDoubleText (double *dval) const
 See QueryIntText()
 
+XMLError QueryFloatText (float *fval) const
 See QueryIntText()
 
+unsigned UnsignedText (unsigned defaultValue=0) const
 See QueryIntText()
 
+int64_t Int64Text (int64_t defaultValue=0) const
 See QueryIntText()
 
+uint64_t Unsigned64Text (uint64_t defaultValue=0) const
 See QueryIntText()
 
+bool BoolText (bool defaultValue=false) const
 See QueryIntText()
 
+double DoubleText (double defaultValue=0) const
 See QueryIntText()
 
+float FloatText (float defaultValue=0) const
 See QueryIntText()
 
XMLElementInsertNewChildElement (const char *name)
 
+XMLCommentInsertNewComment (const char *comment)
 See InsertNewChildElement()
 
+XMLTextInsertNewText (const char *text)
 See InsertNewChildElement()
 
+XMLDeclarationInsertNewDeclaration (const char *text)
 See InsertNewChildElement()
 
+XMLUnknownInsertNewUnknown (const char *text)
 See InsertNewChildElement()
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLElement::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ Attribute()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* tinyxml2::XMLElement::Attribute (const char * name,
const char * value = 0 
) const
+
+

Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. For example:

+
const char* value = ele->Attribute( "foo" );
+

The 'value' parameter is normally null. However, if specified, the attribute will only be returned if the 'name' and 'value' match. This allow you to write code:

+
if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();
+

rather than:

if ( ele->Attribute( "foo" ) ) {
+    if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();
+}
+
+
+
+ +

◆ DeleteAttribute()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLElement::DeleteAttribute (const char * name)
+
+

Delete an attribute.

+ +
+
+ +

◆ GetText()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLElement::GetText () const
+
+

Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the XMLText child and accessing it directly.

+

If the first child of 'this' is a XMLText, the GetText() returns the character string of the Text node, else null is returned.

+

This is a convenient method for getting the text of simple contained text:

<foo>This is text</foo>
+    const char* str = fooElement->GetText();
+

'str' will be a pointer to "This is text".

+

Note that this function can be misleading. If the element foo was created from this XML:

    <foo><b>This is text</b></foo>
+

then the value of str would be null. The first child node isn't a text node, it is another element. From this XML:

    <foo>This is <b>text</b></foo>
+

GetText() will return "This is ".

+ +
+
+ +

◆ InsertNewChildElement()

+ +
+
+ + + + + + + + +
XMLElement* tinyxml2::XMLElement::InsertNewChildElement (const char * name)
+
+

Convenience method to create a new XMLElement and add it as last (right) child of this node. Returns the created and inserted element.

+ +
+
+ +

◆ IntAttribute()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int tinyxml2::XMLElement::IntAttribute (const char * name,
int defaultValue = 0 
) const
+
+

Given an attribute name, IntAttribute() returns the value of the attribute interpreted as an integer. The default value will be returned if the attribute isn't present, or if there is an error. (For a method with error checking, see QueryIntAttribute()).

+ +
+
+ +

◆ QueryAttribute()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLElement::QueryAttribute (const char * name,
int * value 
) const
+
+inline
+
+

Given an attribute name, QueryAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. It is overloaded for the primitive types, and is a generally more convenient replacement of QueryIntAttribute() and related functions.

+

If successful, the result of the conversion will be written to 'value'. If not successful, nothing will be written to 'value'. This allows you to provide default value:

+
int value = 10;
+QueryAttribute( "foo", &value );        // if "foo" isn't found, value will still be 10
+
+
+
+ +

◆ QueryIntAttribute()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLElement::QueryIntAttribute (const char * name,
int * value 
) const
+
+inline
+
+

Given an attribute name, QueryIntAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. If successful, the result of the conversion will be written to 'value'. If not successful, nothing will be written to 'value'. This allows you to provide default value:

+
int value = 10;
+QueryIntAttribute( "foo", &value );     // if "foo" isn't found, value will still be 10
+
+
+
+ +

◆ QueryIntText()

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLElement::QueryIntText (int * ival) const
+
+

Convenience method to query the value of a child text node. This is probably best shown by example. Given you have a document is this form:

    <point>
+        <x>1</x>
+        <y>1.4</y>
+    </point>
+

The QueryIntText() and similar functions provide a safe and easier way to get to the "value" of x and y.

+
    int x = 0;
+    float y = 0;    // types of x and y are contrived for example
+    const XMLElement* xElement = pointElement->FirstChildElement( "x" );
+    const XMLElement* yElement = pointElement->FirstChildElement( "y" );
+    xElement->QueryIntText( &x );
+    yElement->QueryFloatText( &y );
+
Returns
XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted to the requested type, and XML_NO_TEXT_NODE if there is no child text to query.
+ +
+
+ +

◆ SetText()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLElement::SetText (const char * inText)
+
+

Convenience function for easy access to the text inside an element. Although easy and concise, SetText() is limited compared to creating an XMLText child and mutating it directly.

+

If the first child of 'this' is a XMLText, SetText() sets its value to the given string, otherwise it will create a first child that is an XMLText.

+

This is a convenient method for setting the text of simple contained text:

<foo>This is text</foo>
+    fooElement->SetText( "Hullaballoo!" );
+<foo>Hullaballoo!</foo>
+

Note that this function can be misleading. If the element foo was created from this XML:

    <foo><b>This is text</b></foo>
+

then it will not change "This is text", but rather prefix it with a text element:

    <foo>Hullaballoo!<b>This is text</b></foo>
+

For this XML:

    <foo />
+

SetText() will generate

    <foo>Hullaballoo!</foo>
+
+
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLElement::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLElement::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_element.png b/docs/classtinyxml2_1_1_x_m_l_element.png new file mode 100644 index 0000000000000000000000000000000000000000..b76dc5b5465b9f7c5586846f92b117a0035c0983 GIT binary patch literal 618 zcmV-w0+s!VP)%jey0000OP)t-s|Ns90 z008Lh^>vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0005`NklyGOn41~vn)c1en)0CU-dP8znN}`o3Pk{jThk@iTN-5=jp^)U=N{qxH$w(eU zK1Py1YU>x7qiRh}oYm3grjw*mfI*UbYEdjlWvfkv@hQ(^Y^(fu`8cR*u3Cp%=>kLb zRX6R4O6Ja{G*8XPc-9$J?7^sl1{liIS2A}nZ0>t%W@nh_2qScO9;2s{6lGr&9j!B{ zjnkXii|t2p+AfAks*u|J)j5Shl12wG=Dx2nT%eK5(`Un82vresTFt6vGVp4^|J@Xl z+77%%Nb=X($GD1OALBBL{KAr)mKe{(D5aF!1pvR*3jprdGcaDSM{qm?<4y4dj)!36 zO#z@RF%km+A|*y*06?U~NDKgolo*Kt0Fe?SF#sS^V*F7I5s~`^0f4)e7>NM@kp{-Q zSOIPQ+o9HNGjUei@n5fTM4uP{u&3tMa#Xe!Te&^x)nT-&`~DlgYtL5L_-8R{0*9B` z-X8R+c2kh0Ff zc0Z{*Z_$h2tv_H~{f3V*F8|Kt7d9~fAkuR%L_}`aKX!Q>!ZILyHvj+t07*qoM6N<$ Ef;>?j^Z)<= literal 0 HcmV?d00001 diff --git a/docs/classtinyxml2_1_1_x_m_l_handle-members.html b/docs/classtinyxml2_1_1_x_m_l_handle-members.html new file mode 100644 index 00000000..13e9036f --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_handle-members.html @@ -0,0 +1,99 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLHandle Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLHandle, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
FirstChild()tinyxml2::XMLHandleinline
FirstChildElement(const char *name=0)tinyxml2::XMLHandleinline
LastChild()tinyxml2::XMLHandleinline
LastChildElement(const char *name=0)tinyxml2::XMLHandleinline
NextSibling()tinyxml2::XMLHandleinline
NextSiblingElement(const char *name=0)tinyxml2::XMLHandleinline
operator=(const XMLHandle &ref)tinyxml2::XMLHandleinline
PreviousSibling()tinyxml2::XMLHandleinline
PreviousSiblingElement(const char *name=0)tinyxml2::XMLHandleinline
ToDeclaration()tinyxml2::XMLHandleinline
ToElement()tinyxml2::XMLHandleinline
ToNode()tinyxml2::XMLHandleinline
ToText()tinyxml2::XMLHandleinline
ToUnknown()tinyxml2::XMLHandleinline
XMLHandle(XMLNode *node)tinyxml2::XMLHandleinlineexplicit
XMLHandle(XMLNode &node)tinyxml2::XMLHandleinlineexplicit
XMLHandle(const XMLHandle &ref)tinyxml2::XMLHandleinline
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_handle.html b/docs/classtinyxml2_1_1_x_m_l_handle.html new file mode 100644 index 00000000..3aacea37 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_handle.html @@ -0,0 +1,190 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLHandle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLHandle Class Reference
+
+
+ +

#include <tinyxml2.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

XMLHandle (XMLNode *node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 
XMLHandle (XMLNode &node)
 Create a handle from a node.
 
XMLHandle (const XMLHandle &ref)
 Copy constructor.
 
+XMLHandleoperator= (const XMLHandle &ref)
 Assignment.
 
+XMLHandle FirstChild ()
 Get the first child of this handle.
 
+XMLHandle FirstChildElement (const char *name=0)
 Get the first child element of this handle.
 
+XMLHandle LastChild ()
 Get the last child of this handle.
 
+XMLHandle LastChildElement (const char *name=0)
 Get the last child element of this handle.
 
+XMLHandle PreviousSibling ()
 Get the previous sibling of this handle.
 
+XMLHandle PreviousSiblingElement (const char *name=0)
 Get the previous sibling element of this handle.
 
+XMLHandle NextSibling ()
 Get the next sibling of this handle.
 
+XMLHandle NextSiblingElement (const char *name=0)
 Get the next sibling element of this handle.
 
+XMLNodeToNode ()
 Safe cast to XMLNode. This can return null.
 
+XMLElementToElement ()
 Safe cast to XMLElement. This can return null.
 
+XMLTextToText ()
 Safe cast to XMLText. This can return null.
 
+XMLUnknownToUnknown ()
 Safe cast to XMLUnknown. This can return null.
 
+XMLDeclarationToDeclaration ()
 Safe cast to XMLDeclaration. This can return null.
 
+

Detailed Description

+

A XMLHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2 DOM structure. It is a separate utility class.

+

Take an example:

<Document>
+    <Element attributeA = "valueA">
+        <Child attributeB = "value1" />
+        <Child attributeB = "value2" />
+    </Element>
+</Document>
+

Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a lot of code that looks like:

+
XMLElement* root = document.FirstChildElement( "Document" );
+if ( root )
+{
+    XMLElement* element = root->FirstChildElement( "Element" );
+    if ( element )
+    {
+        XMLElement* child = element->FirstChildElement( "Child" );
+        if ( child )
+        {
+            XMLElement* child2 = child->NextSiblingElement( "Child" );
+            if ( child2 )
+            {
+                // Finally do something useful.
+

And that doesn't even cover "else" cases. XMLHandle addresses the verbosity of such code. A XMLHandle checks for null pointers so it is perfectly safe and correct to use:

+
XMLHandle docHandle( &document );
+XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement();
+if ( child2 )
+{
+    // do something useful
+

Which is MUCH more concise and useful.

+

It is also safe to copy handles - internally they are nothing more than node pointers.

XMLHandle handleCopy = handle;
+

See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_node-members.html b/docs/classtinyxml2_1_1_x_m_l_node-members.html new file mode 100644 index 00000000..6359fb28 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_node-members.html @@ -0,0 +1,114 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLNode Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLNode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) const =0tinyxml2::XMLNodepure virtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) const =0tinyxml2::XMLNodepure virtual
ShallowEqual(const XMLNode *compare) const =0tinyxml2::XMLNodepure virtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_node.html b/docs/classtinyxml2_1_1_x_m_l_node.html new file mode 100644 index 00000000..a6f21a6f --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_node.html @@ -0,0 +1,582 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLNode Class Referenceabstract
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLNode:
+
+
+ + +tinyxml2::XMLComment +tinyxml2::XMLDeclaration +tinyxml2::XMLDocument +tinyxml2::XMLElement +tinyxml2::XMLText +tinyxml2::XMLUnknown + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
virtual XMLNodeShallowClone (XMLDocument *document) const =0
 
XMLNodeDeepClone (XMLDocument *target) const
 
virtual bool ShallowEqual (const XMLNode *compare) const =0
 
virtual bool Accept (XMLVisitor *visitor) const =0
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

XMLNode is a base class for every object that is in the XML Document Object Model (DOM), except XMLAttributes. Nodes have siblings, a parent, and children which can be navigated. A node is always in a XMLDocument. The type of a XMLNode can be queried, and it can be cast to its more defined type.

+

A XMLDocument allocates memory for all its Nodes. When the XMLDocument gets deleted, all its Nodes will also be deleted.

+
A Document can contain: Element (container or leaf)
+                        Comment (leaf)
+                        Unknown (leaf)
+                        Declaration( leaf )
+
+An Element can contain: Element (container or leaf)
+                        Text    (leaf)
+                        Attributes (not on tree)
+                        Comment (leaf)
+                        Unknown (leaf)

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLNode::Accept (XMLVisitorvisitor) const
+
+pure virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implemented in tinyxml2::XMLDocument, tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, and tinyxml2::XMLText.

+ +
+
+ +

◆ DeepClone()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::DeepClone (XMLDocumenttarget) const
+
+

Make a copy of this node and all its children.

+

If the 'target' is null, then the nodes will be allocated in the current document. If 'target' is specified, the memory will be allocated is the specified XMLDocument.

+

NOTE: This is probably not the correct tool to copy a document, since XMLDocuments can have multiple top level XMLNodes. You probably want to use XMLDocument::DeepCopy()

+ +
+
+ +

◆ DeleteChild()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLNode::DeleteChild (XMLNodenode)
+
+

Delete a child of this node.

+ +
+
+ +

◆ DeleteChildren()

+ +
+
+ + + + + + + +
void tinyxml2::XMLNode::DeleteChildren ()
+
+

Delete all the children of this node.

+ +
+
+ +

◆ FirstChildElement()

+ +
+
+ + + + + + + + +
const XMLElement* tinyxml2::XMLNode::FirstChildElement (const char * name = 0) const
+
+

Get the first child element, or optionally the first child element with the specified name.

+ +
+
+ +

◆ GetUserData()

+ +
+
+ + + + + +
+ + + + + + + +
void* tinyxml2::XMLNode::GetUserData () const
+
+inline
+
+

Get user data set into the XMLNode. TinyXML-2 in no way processes or interprets user data. It is initially 0.

+ +
+
+ +

◆ InsertAfterChild()

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertAfterChild (XMLNodeafterThis,
XMLNodeaddThis 
)
+
+

Add a node after the specified child node. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the afterThis node is not a child of this node, or if the node does not belong to the same document.

+ +
+
+ +

◆ InsertEndChild()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertEndChild (XMLNodeaddThis)
+
+

Add a child node as the last (right) child. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the node does not belong to the same document.

+ +
+
+ +

◆ InsertFirstChild()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertFirstChild (XMLNodeaddThis)
+
+

Add a child node as the first (left) child. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the node does not belong to the same document.

+ +
+
+ +

◆ LastChildElement()

+ +
+
+ + + + + + + + +
const XMLElement* tinyxml2::XMLNode::LastChildElement (const char * name = 0) const
+
+

Get the last child element or optionally the last child element with the specified name.

+ +
+
+ +

◆ SetUserData()

+ +
+
+ + + + + +
+ + + + + + + + +
void tinyxml2::XMLNode::SetUserData (void * userData)
+
+inline
+
+

Set user data into the XMLNode. TinyXML-2 in no way processes or interprets user data. It is initially 0.

+ +
+
+ +

◆ SetValue()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLNode::SetValue (const char * val,
bool staticMem = false 
)
+
+

Set the Value of an XML node.

See also
Value()
+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLNode::ShallowClone (XMLDocumentdocument) const
+
+pure virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implemented in tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, tinyxml2::XMLText, and tinyxml2::XMLDocument.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLNode::ShallowEqual (const XMLNodecompare) const
+
+pure virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implemented in tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, tinyxml2::XMLText, and tinyxml2::XMLDocument.

+ +
+
+ +

◆ Value()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLNode::Value () const
+
+

The meaning of 'value' changes for the specific type.

Document:   empty (NULL is returned, not an empty string)
+Element:    name of the element
+Comment:    the comment text
+Unknown:    the tag contents
+Text:       the text string
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_node.png b/docs/classtinyxml2_1_1_x_m_l_node.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1e7ce191b61a5d9696a6ad4e8d0851896e182b GIT binary patch literal 1845 zcmb_dc~BE)6b~R^X=ADt)SzVOghQfGsmdj{N0!?VP)3fHN~1sv0YXigERx8TmcCc{a*H>-?o#j7Y^U;&C06I&#^jV%lw#RoLd`IG zV^?1SJDS@{b&|^$!kJ)vHUn*7SyrrH;X-_Ui7K#G7B^Nqx;h!x^{L@E!xlsNwD8kA zFnU#s%BF*<s~2<2lKq1GjGtk(cDdtdNpFB1GG>r)O;0Em*3z)ma8az#Kq%$*}!ymwgx}#18DFJHWz1EP!7!4T`Z4 z59V1NLt6l1!mQ9Yqc9*YPzIbj94dP)Fnj7NEJd{~^l4s9WzD;2L>IUsUfnD6dvSbj z>?yv$4dd}!z%%iu?=i!m?3aUb|b*2gg5?XzsZgQsGnQsoG@GNZ15p+Z4tNkz}cdB;` z86P3ThK!EmguXIv<{N=rL0;UgXMg0!)505OE~NoHm+LkxlT`8P(&8N-sPdC|^YcYf z{8_R5z`(*VeR#}jEwZ=jVd(5z04FS}S@srNQ^tSdF`O$y$rHgHB%jgSqRGyDrF|E5 z7+0W9c{V=&Y*KPSwXe5+DYvlSsk8XZ!U09B!!XNB>@2=r&1riPYm*hy9##vAw$+oZ z6-1fEU6tpoNiDc%zWdrpWFGSkI;McXbg+B5Wcu-Bdl4%Ss7m&f{rq5`fA)DJBT+Qd zahLT#f2F&uZqoWVJM6}pg@lO|f~)HUy=yS%VJw}03RH-2PAO>|Od&r|QV9mKd>JuA zO#b*a8`L9t1L@%|<4PBB8E2d_`~BYbk$W+8b-jN2hm_o;&iAWd7Tx$t=$&Cj;g-n> z(p#M;DrR^i+4f6?v`lbtuDkC?F1V*^)`8$3l#cHn=qD%A6el@7>?UvVUU9=VXRO0# znP6IG-6@$ov40<>$uMH*p$K#>pe0J8R)1O?#Pa&gDeUvNY*YyrCJNTIuuih&2w2iYHn{($h9S^Iu^rzE0x3K(YKz~N) z+pQd@yQ+aPC(UIsC_ht_=~zfr-WK+f z-3{`o3QbPg3(KXkgdmybWY6eOgbbqD>{)%)d65^X{DQOm*fD&}rpu1Rc>UcV!J@dS z!4n6RJ`)F}pXZ-w9I44XtezXVgZd^lOwvcUF(N66K8!+goVK)evMMN@+M65^zEgRE zu$C-&Oy?Sr%m%aVMp^HqzFU1J_;;myNg6c@WaC%m)Ikqn=&i-T13)?xvqucfm8?q* z)?7XaJh%i)ZC!H=M*#X7KvG-R9CWnx{#m8185~I9QfB|A>!bEU3&VunPwwk)*fm5p Xzr(?>R=o-O$02}Yen;y(KKc3&bpL#% literal 0 HcmV?d00001 diff --git a/docs/classtinyxml2_1_1_x_m_l_printer-members.html b/docs/classtinyxml2_1_1_x_m_l_printer-members.html new file mode 100644 index 00000000..81c73192 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_printer-members.html @@ -0,0 +1,108 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLPrinter Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLPrinter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClearBuffer(bool resetToFirstElement=true)tinyxml2::XMLPrinterinline
CloseElement(bool compactMode=false)tinyxml2::XMLPrintervirtual
CStr() consttinyxml2::XMLPrinterinline
CStrSize() consttinyxml2::XMLPrinterinline
OpenElement(const char *name, bool compactMode=false)tinyxml2::XMLPrinter
PrintSpace(int depth)tinyxml2::XMLPrinterprotectedvirtual
PushAttribute(const char *name, const char *value)tinyxml2::XMLPrinter
PushComment(const char *comment)tinyxml2::XMLPrinter
PushHeader(bool writeBOM, bool writeDeclaration)tinyxml2::XMLPrinter
PushText(const char *text, bool cdata=false)tinyxml2::XMLPrinter
PushText(int value)tinyxml2::XMLPrinter
PushText(unsigned value)tinyxml2::XMLPrinter
PushText(int64_t value)tinyxml2::XMLPrinter
PushText(uint64_t value)tinyxml2::XMLPrinter
PushText(bool value)tinyxml2::XMLPrinter
PushText(float value)tinyxml2::XMLPrinter
PushText(double value)tinyxml2::XMLPrinter
Visit(const XMLText &text)tinyxml2::XMLPrintervirtual
Visit(const XMLComment &comment)tinyxml2::XMLPrintervirtual
Visit(const XMLDeclaration &declaration)tinyxml2::XMLPrintervirtual
Visit(const XMLUnknown &unknown)tinyxml2::XMLPrintervirtual
VisitEnter(const XMLDocument &)tinyxml2::XMLPrintervirtual
VisitEnter(const XMLElement &element, const XMLAttribute *attribute)tinyxml2::XMLPrintervirtual
VisitExit(const XMLDocument &)tinyxml2::XMLPrinterinlinevirtual
VisitExit(const XMLElement &element)tinyxml2::XMLPrintervirtual
XMLPrinter(FILE *file=0, bool compact=false, int depth=0)tinyxml2::XMLPrinter
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_printer.html b/docs/classtinyxml2_1_1_x_m_l_printer.html new file mode 100644 index 00000000..d0444193 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_printer.html @@ -0,0 +1,416 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLPrinter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLPrinter Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLPrinter:
+
+
+ + +tinyxml2::XMLVisitor + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 XMLPrinter (FILE *file=0, bool compact=false, int depth=0)
 
void PushHeader (bool writeBOM, bool writeDeclaration)
 
void OpenElement (const char *name, bool compactMode=false)
 
+void PushAttribute (const char *name, const char *value)
 If streaming, add an attribute to an open element.
 
+virtual void CloseElement (bool compactMode=false)
 If streaming, close the Element.
 
+void PushText (const char *text, bool cdata=false)
 Add a text node.
 
+void PushText (int value)
 Add a text node from an integer.
 
+void PushText (unsigned value)
 Add a text node from an unsigned.
 
+void PushText (int64_t value)
 Add a text node from a signed 64bit integer.
 
+void PushText (uint64_t value)
 Add a text node from an unsigned 64bit integer.
 
+void PushText (bool value)
 Add a text node from a bool.
 
+void PushText (float value)
 Add a text node from a float.
 
+void PushText (double value)
 Add a text node from a double.
 
+void PushComment (const char *comment)
 Add a comment.
 
+virtual bool VisitEnter (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitExit (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitEnter (const XMLElement &element, const XMLAttribute *attribute)
 Visit an element.
 
+virtual bool VisitExit (const XMLElement &element)
 Visit an element.
 
+virtual bool Visit (const XMLText &text)
 Visit a text node.
 
+virtual bool Visit (const XMLComment &comment)
 Visit a comment node.
 
+virtual bool Visit (const XMLDeclaration &declaration)
 Visit a declaration.
 
+virtual bool Visit (const XMLUnknown &unknown)
 Visit an unknown node.
 
const char * CStr () const
 
int CStrSize () const
 
void ClearBuffer (bool resetToFirstElement=true)
 
+ + + +

+Protected Member Functions

virtual void PrintSpace (int depth)
 
+

Detailed Description

+

Printing functionality. The XMLPrinter gives you more options than the XMLDocument::Print() method.

+

It can:

    +
  1. Print to memory.
  2. +
  3. Print to a file you provide.
  4. +
  5. Print XML without a XMLDocument.
  6. +
+

Print to Memory

+
XMLPrinter printer;
+doc.Print( &printer );
+SomeFunction( printer.CStr() );
+

Print to a File

+

You provide the file pointer.

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Print without a XMLDocument

+

When loading, an XML parser is very useful. However, sometimes when saving, it just gets in the way. The code is often set up for streaming, and constructing the DOM is just overhead.

+

The Printer supports the streaming case. The following code prints out a trivially simple XML file without ever creating an XML document.

+
XMLPrinter printer( fp );
+printer.OpenElement( "foo" );
+printer.PushAttribute( "foo", "bar" );
+printer.CloseElement();
+

Constructor & Destructor Documentation

+ +

◆ XMLPrinter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
tinyxml2::XMLPrinter::XMLPrinter (FILE * file = 0,
bool compact = false,
int depth = 0 
)
+
+

Construct the printer. If the FILE* is specified, this will print to the FILE. Else it will print to memory, and the result is available in CStr(). If 'compact' is set to true, then output is created with only required whitespace and newlines.

+ +
+
+

Member Function Documentation

+ +

◆ ClearBuffer()

+ +
+
+ + + + + +
+ + + + + + + + +
void tinyxml2::XMLPrinter::ClearBuffer (bool resetToFirstElement = true)
+
+inline
+
+

If in print to memory mode, reset the buffer to the beginning.

+ +
+
+ +

◆ CStr()

+ +
+
+ + + + + +
+ + + + + + + +
const char* tinyxml2::XMLPrinter::CStr () const
+
+inline
+
+

If in print to memory mode, return a pointer to the XML file in memory.

+ +
+
+ +

◆ CStrSize()

+ +
+
+ + + + + +
+ + + + + + + +
int tinyxml2::XMLPrinter::CStrSize () const
+
+inline
+
+

If in print to memory mode, return the size of the XML file in memory. (Note the size returned includes the terminating null.)

+ +
+
+ +

◆ OpenElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLPrinter::OpenElement (const char * name,
bool compactMode = false 
)
+
+

If streaming, start writing an element. The element must be closed with CloseElement()

+ +
+
+ +

◆ PrintSpace()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void tinyxml2::XMLPrinter::PrintSpace (int depth)
+
+protectedvirtual
+
+

Prints out the space before an element. You may override to change the space and tabs used. A PrintSpace() override should call Print().

+ +
+
+ +

◆ PushHeader()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLPrinter::PushHeader (bool writeBOM,
bool writeDeclaration 
)
+
+

If streaming, write the BOM and declaration.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_printer.png b/docs/classtinyxml2_1_1_x_m_l_printer.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc674855364f4b2b9731ddf08f0b2af7159034e GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^4L}^g!3-py-Rr#uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IXgZ+f~ohEy=VotxcvSb?YIt>de|{d-hx z{&2K}Om*5?)G8fy_{U+1Pt$|EGM5K3HPnhRFe)(Am@v$U`euB3#id~3rPW1ezwk0J z#6(`*z|y+vj|{^PRtAH$%ulAue&*kpbiC!yhKcVPI#%!8T=Z@F#?U`|SVI^4z5Q=$ zrMkBClyk2k1J8?P6WJNeF6+uZDyhuz;bvH`uT|V2^p@qpWAhbav7)ihw`y%?_%-Xm zhqLnCrVIyG)iNmj-p#h*r(Am+!;PeHS+*rl`o}Xpdb7U zXUo3fVRf*b z@P7TeTOq3scim@wahX5;e^BFFv5?+Xcm8LWXsrs< + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLText Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLText, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLTextvirtual
CData() consttinyxml2::XMLTextinline
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetCData(bool isCData)tinyxml2::XMLTextinline
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLTextvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLTextvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLTextinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_text.html b/docs/classtinyxml2_1_1_x_m_l_text.html new file mode 100644 index 00000000..7317358c --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_text.html @@ -0,0 +1,311 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLText Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLText Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLText:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool Accept (XMLVisitor *visitor) const
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+void SetCData (bool isCData)
 Declare whether this should be CDATA or standard text.
 
+bool CData () const
 Returns true if this is a CDATA text element.
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

XML text.

+

Note that a text node can have child element nodes, for example:

<root>This is <b>bold</b></root>
+

A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with SetCData() and query it with CData().

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLText::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLText::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLText::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_text.png b/docs/classtinyxml2_1_1_x_m_l_text.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9863acc475a4164a359cdca7f2ba64ba74433f GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%o!3-pyx;pL#QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;un$8s_wr3PH5_!%PyN|NpG0hop@<-(1vAKPMTLvO}Er` z){c}s!+68x)64A%@fY{}v8s&Nr~D!DfLwvzgjEv1A3RGjx|-8|cTvsFf9npc3t5!4 zHuv-T1Iy=6X1@M+H@o>l@4Z&vZkVr^?8w?0p*_3R`}&>>x38|sTKjl&Sm@u~eh2!C z{STZkzJ7kus#g+!RV-Qr)HoiTuVOrNLFdD3(@q=iKhMr7`ZNDe2-i0_Afan;Kma>- z*zV$z#=$7Do|R2v(SN2ta(7cVp3Rrdd_Ol?^4UGsRWon1@f0i-x&He|j?g)ux?|RC z%ky9VUGLI8`Swxa{fzHV_Z8Nxy%n_ld(e?jI_aqys;i3(-=}QoFW!1wEi1C?`xn(S zJ7b!&C9MyvwA0=3^x2P@w;F;QcOOjU#YMK&OXfDq+j;pP^p}75I$bcKqfSUi$;k0PgPVlp+Lc99 R9f7gW;OXk;vd$@?2>?U}6ovo* literal 0 HcmV?d00001 diff --git a/docs/classtinyxml2_1_1_x_m_l_unknown-members.html b/docs/classtinyxml2_1_1_x_m_l_unknown-members.html new file mode 100644 index 00000000..31f01b97 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_unknown-members.html @@ -0,0 +1,114 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLUnknown Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLUnknown, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLUnknownvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLUnknownvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLUnknownvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLUnknowninlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_unknown.html b/docs/classtinyxml2_1_1_x_m_l_unknown.html new file mode 100644 index 00000000..8b10ba7b --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_unknown.html @@ -0,0 +1,302 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLUnknown Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLUnknown Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLUnknown:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

Any tag that TinyXML-2 doesn't recognize is saved as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved.

+

DTD tags get thrown into XMLUnknowns.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLUnknown::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLUnknown::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLUnknown::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_unknown.png b/docs/classtinyxml2_1_1_x_m_l_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..217b62c5590fd41f7e30a49d292a0a03662d9083 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^y+9nm!3-pY71+{%lth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C0n5Tv(X1Z$W+JwA7hwVxF^FwoF_y1B4GO%W<8g7x~-!<>GJCc5XC} zzFx3fWo}2V%1hBwqxGA$-`V$`4f}s1t@fGj4YBm)Zfj%@7vH}zW1p?h-lU-F{XwP) zyjR!Bu5w$ra@I~}Y2lYsZdFU~S8!icl|JL|2{oP{$+MOB2N^z9DVC7aN;7@SC4cpo zx@VuY^z@fXH;v>r?cX$UiSYZIUu+BWjn7;+`hB_faerT?$ja%qSHsTQHcNi+PxqRn zo4=<{<)!kSTYr|FS$lTqkezT*3o63I7ytn1$$6x)n`^#ocd!M-Um4$TT z-m(=^t;=p{885qS(w}!*e(Sb3x%ZCgcT{gM{9E=q=2po{!yVk!>A}TTw|b1yJQv0O z5u82mB$Klw|IKK#x{Tdr_a z{mLr|b}?(vy + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLVisitor Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLVisitor, including all inherited members.

+ + + + + + + + + +
Visit(const XMLDeclaration &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLText &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLComment &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLUnknown &)tinyxml2::XMLVisitorinlinevirtual
VisitEnter(const XMLDocument &)tinyxml2::XMLVisitorinlinevirtual
VisitEnter(const XMLElement &, const XMLAttribute *)tinyxml2::XMLVisitorinlinevirtual
VisitExit(const XMLDocument &)tinyxml2::XMLVisitorinlinevirtual
VisitExit(const XMLElement &)tinyxml2::XMLVisitorinlinevirtual
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_visitor.html b/docs/classtinyxml2_1_1_x_m_l_visitor.html new file mode 100644 index 00000000..d4412bb7 --- /dev/null +++ b/docs/classtinyxml2_1_1_x_m_l_visitor.html @@ -0,0 +1,139 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLVisitor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLVisitor Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLVisitor:
+
+
+ + +tinyxml2::XMLPrinter + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool VisitEnter (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitExit (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitEnter (const XMLElement &, const XMLAttribute *)
 Visit an element.
 
+virtual bool VisitExit (const XMLElement &)
 Visit an element.
 
+virtual bool Visit (const XMLDeclaration &)
 Visit a declaration.
 
+virtual bool Visit (const XMLText &)
 Visit a text node.
 
+virtual bool Visit (const XMLComment &)
 Visit a comment node.
 
+virtual bool Visit (const XMLUnknown &)
 Visit an unknown node.
 
+

Detailed Description

+

Implements the interface to the "Visitor pattern" (see the Accept() method.) If you call the Accept() method, it requires being passed a XMLVisitor class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs are simply called with Visit().

+

If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its siblings will be visited.

+

All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you.

+

Generally Accept() is called on the XMLDocument, although all nodes support visiting.

+

You should never change the document from a callback.

+
See also
XMLNode::Accept()
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtinyxml2_1_1_x_m_l_visitor.png b/docs/classtinyxml2_1_1_x_m_l_visitor.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae4c23cfa5be521ed0b30b0fa6a8048f73e4ee2 GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^4L}^g!3-py-Rr#uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IXg?|Zs9hEy=Vo%?!Sivmx}a@CK2<$tb- zsS-SLR&A4I=B0IObT6Oh`XTP(qAkn9@Y;rf$${b9>z=0_@~^}Gn+vB_aQ1%TWnj2d zd2s{FOs)TK8Gf)cB&=baBD?dy$yFIEy=|X_891+gSXgtUc-@uKx7t#vS-ZnuPT6wp zr1;ci2968MCR#IWyS!CasHAp{k1)gf_0x}WD1`53`0-10RoM4a*N<1QT$snnl3y2n zhLIuY8)L(s`<4xF%lCg_IiOc&s^IYEPlKeCcC^qLznt|B@0)IV{&i0R7CQWtETEz3+#Pf^sj7T451LOOZ7q?f^s3g+MMWYF*Gn&mGu(c8i;r`cUf42j zhgjyY0PpYO3w_@J{k+v{?YsEPq6-$>W!{pWlmzs34cCKfk7dEWj+8QPsAGSV6waI^ zcAEE!Nmz)`E`}=cJM&xk`&iSSy{~2X5cQYwK=s$h*%A!)j1z*qxc~CcJ|-QRW+x*J PjD7}BS3j3^P61|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/doc.png b/docs/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/docs/doxygen.png b/docs/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 zcmV;!4m|ORP)tMIv#Q0*~7*`IBSO7_x;@a8#Zk6_PeKR_s92J&)(m+);m9Iz3blw)z#Gi zP!9lj4$%+*>Hz@HCmM9L9|8c+0u=!H$O3?R0Kgx|#WP<6fKfC8fM-CQZT|_r@`>VO zX^Hgb|9cJqpdJA5$MCEK`F_2@2Y@s>^+;pF`~jdI0Pvr|vl4`=C)EH@1IFe7pdJ8F zH(qGi004~QnF)Ggga~8v08kGAs2hKTATxr7pwfNk|4#_AaT>w8P6TV+R2kbS$v==} zAjf`s0g#V8lB+b3)5oEI*q+{Yt$MZDruD2^;$+(_%Qn+%v0X-bJO=;@kiJ^ygLBnC z?1OVv_%aex1M@jKU|Z~$eI?PoF4Vj>fDzyo zAiLfpXY*a^Sj-S5D0S3@#V$sRW)g)_1e#$%8xdM>Jm7?!h zu0P2X=xoN>^!4DoPRgph2(2va07yfpXF+WH7EOg1GY%Zn z7~1A<(z7Q$ktEXhW_?GMpHp9l_UL18F3KOsxu81pqoBiNbFSGsof-W z6~eloMoz=4?OOnl2J268x5rOY`dCk0us(uS#Ud4yqOr@?=Q57a}tit|BhY>}~frH1sP`ScHS_d)oqH^lYy zZ%VP`#10MlE~P?cE(%(#(AUSv_T{+;t@$U}El}(1ig`vZo`Rm;+5&(AYzJ^Ae=h2X z@Re%vHwZU>|f0NI&%$*4eJweC5OROQrpPMA@*w|o z()A==l}(@bv^&>H1Ob3C=<^|hob?0+xJ?QQ3-ueQC}zy&JQNib!OqSO@-=>XzxlSF zAZ^U*1l6EEmg3r};_HY>&Jo_{dOPEFTWPmt=U&F#+0(O59^UIlHbNX+eF8UzyDR*T z(=5X$VF3!gm@RooS-&iiUYGG^`hMR(07zr_xP`d!^BH?uD>Phl8Rdifx3Af^Zr`Ku ztL+~HkVeL#bJ)7;`=>;{KNRvjmc}1}c58Sr#Treq=4{xo!ATy|c>iRSp4`dzMMVd@ zL8?uwXDY}Wqgh4mH`|$BTXpUIu6A1-cSq%hJw;@^Zr8TP=GMh*p(m(tN7@!^D~sl$ zz^tf4II4|};+irE$Fnm4NTc5%p{PRA`%}Zk`CE5?#h3|xcyQsS#iONZ z6H(@^i9td!$z~bZiJLTax$o>r(p}3o@< zyD7%(>ZYvy=6$U3e!F{Z`uSaYy`xQyl?b{}eg|G3&fz*`QH@mDUn)1%#5u`0m$%D} z?;tZ0u(mWeMV0QtzjgN!lT*pNRj;6510Wwx?Yi_=tYw|J#7@(Xe7ifDzXuK;JB;QO z#bg~K$cgm$@{QiL_3yr}y&~wuv=P=#O&Tj=Sr)aCUlYmZMcw?)T?c%0rUe1cS+o!qs_ zQ6Gp)-{)V!;=q}llyK3|^WeLKyjf%y;xHku;9(vM!j|~<7w1c*Mk-;P{T&yG) z@C-8E?QPynNQ<8f01D`2qexcVEIOU?y}MG)TAE6&VT5`rK8s(4PE;uQ92LTXUQ<>^ ztyQ@=@kRdh@ebUG^Z6NWWIL;_IGJ2ST>$t!$m$qvtj0Qmw8moN6GUV^!QKNK zHBXCtUH8)RY9++gH_TUV4^=-j$t}dD3qsN7GclJ^Zc&(j6&a_!$jCf}%c5ey`pm~1)@{yI3 zTdWyB+*X{JFw#z;PwRr5evb2!ueWF;v`B0HoUu4-(~aL=z;OXUUEtG`_$)Oxw6FKg zEzY`CyKaSBK3xt#8gA|r_|Kehn_HYVBMpEwbn9-fI*!u*eTA1ef8Mkl1=!jV4oYwWYM}i`A>_F4nhmlCIC6WLa zY%;4&@AlnaG11ejl61Jev21|r*m+?Kru3;1tFDl}#!OzUp6c>go4{C|^erwpG*&h6bspUPJag}oOkN2912Y3I?(eRc@U9>z#HPBHC?nps7H5!zP``90!Q1n80jo+B3TWXp!8Pe zwuKuLLI6l3Gv@+QH*Y}2wPLPQ1^EZhT#+Ed8q8Wo z1pTmIBxv14-{l&QVKxAyQF#8Q@NeJwWdKk>?cpiJLkJr+aZ!Me+Cfp!?FWSRf^j2k z73BRR{WSKaMkJ>1Nbx5dan5hg^_}O{Tj6u%iV%#QGz0Q@j{R^Ik)Z*+(YvY2ziBG)?AmJa|JV%4UT$k`hcOg5r9R?5>?o~JzK zJCrj&{i#hG>N7!B4kNX(%igb%kDj0fOQThC-8mtfap82PNRXr1D>lbgg)dYTQ(kbx z`Ee5kXG~Bh+BHQBf|kJEy6(ga%WfhvdQNDuOfQoe377l#ht&DrMGeIsI5C<&ai zWG$|hop2@@q5YDa)_-A?B02W;#fH!%k`daQLEItaJJ8Yf1L%8x;kg?)k)00P-lH+w z)5$QNV6r2$YtnV(4o=0^3{kmaXn*Dm0F*fU(@o)yVVjk|ln8ea6BMy%vZAhW9|wvA z8RoDkVoMEz1d>|5(k0Nw>22ZT){V<3$^C-cN+|~hKt2)){+l-?3m@-$c?-dlzQ)q- zZ)j%n^gerV{|+t}9m1_&&Ly!9$rtG4XX|WQ8`xYzGC~U@nYh~g(z9)bdAl#xH)xd5a=@|qql z|FzEil{P5(@gy!4ek05i$>`E^G~{;pnf6ftpLh$h#W?^#4UkPfa;;?bsIe&kz!+40 zI|6`F2n020)-r`pFaZ38F!S-lJM-o&inOw|66=GMeP@xQU5ghQH{~5Uh~TMTd;I9` z>YhVB`e^EVj*S7JF39ZgNf}A-0DwOcTT63ydN$I3b?yBQtUI*_fae~kPvzoD$zjX3 zoqBe#>12im4WzZ=f^4+u=!lA|#r%1`WB0-6*3BL#at`47#ebPpR|D1b)3BjT34nYY z%Ds%d?5$|{LgOIaRO{{oC&RK`O91$fqwM0(C_TALcozu*fWHb%%q&p-q{_8*2Zsi^ zh1ZCnr^UYa;4vQEtHk{~zi>wwMC5o{S=$P0X681y`SXwFH?Ewn{x-MOZynmc)JT5v zuHLwh;tLfxRrr%|k370}GofLl7thg>ACWWY&msqaVu&ry+`7+Ss>NL^%T1|z{IGMA zW-SKl=V-^{(f!Kf^#3(|T2W47d(%JVCI4JgRrT1pNz>+ietmFToNv^`gzC@&O-)+i zPQ~RwK8%C_vf%;%e>NyTp~dM5;!C|N0Q^6|CEb7Bw=Vz~$1#FA;Z*?mKSC)Hl-20s t8QyHj(g6VK0RYbl8UjE)0O0w=e*@m04r>stuEhWV002ovPDHLkV1hl;dM*F} literal 0 HcmV?d00001 diff --git a/docs/doxygen.svg b/docs/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/docs/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 00000000..3174bd7b --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +TinyXML-2: File List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + +
 tinyxml2.h
+
+
+ + + + diff --git a/docs/folderclosed.png b/docs/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 00000000..91f878e7 --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,87 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/docs/functions_b.html b/docs/functions_b.html new file mode 100644 index 00000000..7f6a77a3 --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,84 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/docs/functions_c.html b/docs/functions_c.html new file mode 100644 index 00000000..9050d951 --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,96 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/docs/functions_d.html b/docs/functions_d.html new file mode 100644 index 00000000..1d214aa8 --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,102 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/docs/functions_e.html b/docs/functions_e.html new file mode 100644 index 00000000..1d2c5a36 --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,87 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/docs/functions_f.html b/docs/functions_f.html new file mode 100644 index 00000000..4d4cce5b --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,98 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 00000000..dd3c76d2 --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,87 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html new file mode 100644 index 00000000..da6fdf4e --- /dev/null +++ b/docs/functions_func_b.html @@ -0,0 +1,84 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html new file mode 100644 index 00000000..a9c8d30f --- /dev/null +++ b/docs/functions_func_c.html @@ -0,0 +1,96 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html new file mode 100644 index 00000000..272ba3c6 --- /dev/null +++ b/docs/functions_func_d.html @@ -0,0 +1,102 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html new file mode 100644 index 00000000..194408c5 --- /dev/null +++ b/docs/functions_func_e.html @@ -0,0 +1,87 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html new file mode 100644 index 00000000..95f324f7 --- /dev/null +++ b/docs/functions_func_f.html @@ -0,0 +1,98 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html new file mode 100644 index 00000000..06909ed0 --- /dev/null +++ b/docs/functions_func_g.html @@ -0,0 +1,88 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html new file mode 100644 index 00000000..fe71afb4 --- /dev/null +++ b/docs/functions_func_h.html @@ -0,0 +1,78 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html new file mode 100644 index 00000000..195a666a --- /dev/null +++ b/docs/functions_func_i.html @@ -0,0 +1,111 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html new file mode 100644 index 00000000..41da93c0 --- /dev/null +++ b/docs/functions_func_l.html @@ -0,0 +1,86 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html new file mode 100644 index 00000000..195bdb50 --- /dev/null +++ b/docs/functions_func_n.html @@ -0,0 +1,108 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html new file mode 100644 index 00000000..fea324d7 --- /dev/null +++ b/docs/functions_func_o.html @@ -0,0 +1,81 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+ + + + diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html new file mode 100644 index 00000000..59bab84d --- /dev/null +++ b/docs/functions_func_p.html @@ -0,0 +1,110 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- p -

+
+ + + + diff --git a/docs/functions_func_q.html b/docs/functions_func_q.html new file mode 100644 index 00000000..9f97d62d --- /dev/null +++ b/docs/functions_func_q.html @@ -0,0 +1,144 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- q -

+
+ + + + diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html new file mode 100644 index 00000000..a30280fe --- /dev/null +++ b/docs/functions_func_r.html @@ -0,0 +1,78 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html new file mode 100644 index 00000000..ddc05245 --- /dev/null +++ b/docs/functions_func_s.html @@ -0,0 +1,118 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html new file mode 100644 index 00000000..afb9ff63 --- /dev/null +++ b/docs/functions_func_t.html @@ -0,0 +1,106 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html new file mode 100644 index 00000000..ef4de8ce --- /dev/null +++ b/docs/functions_func_u.html @@ -0,0 +1,90 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html new file mode 100644 index 00000000..b189d4e3 --- /dev/null +++ b/docs/functions_func_v.html @@ -0,0 +1,91 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html new file mode 100644 index 00000000..dd3040fd --- /dev/null +++ b/docs/functions_func_x.html @@ -0,0 +1,84 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- x -

+
+ + + + diff --git a/docs/functions_g.html b/docs/functions_g.html new file mode 100644 index 00000000..d788ac5e --- /dev/null +++ b/docs/functions_g.html @@ -0,0 +1,88 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/docs/functions_h.html b/docs/functions_h.html new file mode 100644 index 00000000..79938c75 --- /dev/null +++ b/docs/functions_h.html @@ -0,0 +1,78 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/docs/functions_i.html b/docs/functions_i.html new file mode 100644 index 00000000..26f42e1e --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,111 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/docs/functions_l.html b/docs/functions_l.html new file mode 100644 index 00000000..fdaeaa84 --- /dev/null +++ b/docs/functions_l.html @@ -0,0 +1,86 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/docs/functions_n.html b/docs/functions_n.html new file mode 100644 index 00000000..da911b63 --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,108 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/docs/functions_o.html b/docs/functions_o.html new file mode 100644 index 00000000..a75344f0 --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,81 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/docs/functions_p.html b/docs/functions_p.html new file mode 100644 index 00000000..3411ec0e --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,110 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/docs/functions_q.html b/docs/functions_q.html new file mode 100644 index 00000000..6df8d6e3 --- /dev/null +++ b/docs/functions_q.html @@ -0,0 +1,144 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+ + + + diff --git a/docs/functions_r.html b/docs/functions_r.html new file mode 100644 index 00000000..75f15a37 --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,78 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 00000000..7d81025c --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,118 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/docs/functions_t.html b/docs/functions_t.html new file mode 100644 index 00000000..4afc96c8 --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,106 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/docs/functions_u.html b/docs/functions_u.html new file mode 100644 index 00000000..b2a40317 --- /dev/null +++ b/docs/functions_u.html @@ -0,0 +1,90 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/docs/functions_v.html b/docs/functions_v.html new file mode 100644 index 00000000..2b0b5d98 --- /dev/null +++ b/docs/functions_v.html @@ -0,0 +1,91 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/docs/functions_x.html b/docs/functions_x.html new file mode 100644 index 00000000..04887918 --- /dev/null +++ b/docs/functions_x.html @@ -0,0 +1,84 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
+ + + + diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 00000000..65db86d6 --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,91 @@ + + + + + + + +TinyXML-2: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..033d6179 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,222 @@ + + + + + + + +TinyXML-2: TinyXML-2 + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  9.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
TinyXML-2
+
+
+

+

Build

+

TinyXML-2 Logo

+

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs.

+

The master is hosted on github: https://github.com/leethomason/tinyxml2

+

The online HTML version of these docs: http://leethomason.github.io/tinyxml2/

+

Examples are in the "related pages" tab of the HTML docs.

+

What it does.

+

In brief, TinyXML-2 parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved.

+

XML stands for "eXtensible Markup Language." It is a general purpose human and machine readable markup language to describe arbitrary data. All those random file formats created to store application data can all be replaced with XML. One parser for everything.

+

http://en.wikipedia.org/wiki/XML

+

There are different ways to access and interact with XML data. TinyXML-2 uses a Document Object Model (DOM), meaning the XML data is parsed into a C++ objects that can be browsed and manipulated, and then written to disk or another output stream. You can also construct an XML document from scratch with C++ objects and write this to disk or another output stream. You can even use TinyXML-2 to stream XML programmatically from code without creating a document first.

+

TinyXML-2 is designed to be easy and fast to learn. It is one header and one cpp file. Simply add these to your project and off you go. There is an example file - xmltest.cpp - to get you started.

+

TinyXML-2 is released under the ZLib license, so you can use it in open source or commercial code. The details of the license are at the top of every source file.

+

TinyXML-2 attempts to be a flexible parser, but with truly correct and compliant XML output. TinyXML-2 should compile on any reasonably C++ compliant system. It does not rely on exceptions, RTTI, or the STL.

+

What it doesn't do.

+

TinyXML-2 doesn't parse or use DTDs (Document Type Definitions) or XSLs (eXtensible Stylesheet Language.) There are other parsers out there that are much more fully featured. But they are generally bigger and more difficult to use. If you are working with browsers or have more complete XML needs, TinyXML-2 is not the parser for you.

+

TinyXML-1 vs. TinyXML-2

+

TinyXML-2 long been the focus of all development. It is well tested and should be used instead of TinyXML-1.

+

TinyXML-2 uses a similar API to TinyXML-1 and the same rich test cases. But the implementation of the parser is completely re-written to make it more appropriate for use in a game. It uses less memory, is faster, and uses far fewer memory allocations.

+

TinyXML-2 has no requirement or support for STL.

+

Features

+

Code Page

+

TinyXML-2 uses UTF-8 exclusively when interpreting XML. All XML is assumed to be UTF-8.

+

Filenames for loading / saving are passed unchanged to the underlying OS.

+

Memory Model

+

An XMLDocument is a C++ object like any other, that can be on the stack, or new'd and deleted on the heap.

+

However, any sub-node of the Document, XMLElement, XMLText, etc, can only be created by calling the appropriate XMLDocument::NewElement, NewText, etc. method. Although you have pointers to these objects, they are still owned by the Document. When the Document is deleted, so are all the nodes it contains.

+

White Space

+

Whitespace Preservation (default)

+

Microsoft has an excellent article on white space: http://msdn.microsoft.com/en-us/library/ms256097.aspx

+

By default, TinyXML-2 preserves white space in a (hopefully) sane way that is almost compliant with the spec. (TinyXML-1 used a completely different model, much more similar to 'collapse', below.)

+

As a first step, all newlines / carriage-returns / line-feeds are normalized to a line-feed character, as required by the XML spec.

+

White space in text is preserved. For example:

<element> Hello,  World</element>
+

The leading space before the "Hello" and the double space after the comma are preserved. Line-feeds are preserved, as in this example:

<element> Hello again,
+          World</element>
+

However, white space between elements is not preserved. Although not strictly compliant, tracking and reporting inter-element space is awkward, and not normally valuable. TinyXML-2 sees these as the same XML:

<document>
+    <data>1</data>
+    <data>2</data>
+    <data>3</data>
+</document>
+
+<document><data>1</data><data>2</data><data>3</data></document>
+

Whitespace Collapse

+

For some applications, it is preferable to collapse whitespace. Collapsing whitespace gives you "HTML-like" behavior, which is sometimes more suitable for hand typed documents.

+

TinyXML-2 supports this with the 'whitespace' parameter to the XMLDocument constructor. (The default is to preserve whitespace, as described above.)

+

However, you may also use COLLAPSE_WHITESPACE, which will:

+
    +
  • Remove leading and trailing whitespace
  • +
  • Convert newlines and line-feeds into a space character
  • +
  • Collapse a run of any number of space characters into a single space character
  • +
+

Note that (currently) there is a performance impact for using COLLAPSE_WHITESPACE. It essentially causes the XML to be parsed twice.

+

Error Reporting

+

TinyXML-2 reports the line number of any errors in an XML document that cannot be parsed correctly. In addition, all nodes (elements, declarations, text, comments etc.) and attributes have a line number recorded as they are parsed. This allows an application that performs additional validation of the parsed XML document (e.g. application-implemented DTD validation) to report line number information for error messages.

+

Entities

+

TinyXML-2 recognizes the pre-defined "character entities", meaning special characters. Namely:

&amp;   &
+&lt;    <
+&gt;    >
+&quot;  "
+&apos;  '
+

These are recognized when the XML document is read, and translated to their UTF-8 equivalents. For instance, text with the XML of:

Far &amp; Away
+

will have the Value() of "Far & Away" when queried from the XMLText object, and will be written back to the XML stream/file as an ampersand.

+

Additionally, any character can be specified by its Unicode code point: The syntax &#xA0; or &#160; are both to the non-breaking space character. This is called a 'numeric character reference'. Any numeric character reference that isn't one of the special entities above, will be read, but written as a regular code point. The output is correct, but the entity syntax isn't preserved.

+

Printing

+

Print to file

+

You can directly use the convenience function:

XMLDocument doc;
+...
+doc.SaveFile( "foo.xml" );
+

Or the XMLPrinter class:

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Print to memory

+

Printing to memory is supported by the XMLPrinter.

XMLPrinter printer;
+doc.Print( &printer );
+// printer.CStr() has a const char* to the XML
+

Print without an XMLDocument

+

When loading, an XML parser is very useful. However, sometimes when saving, it just gets in the way. The code is often set up for streaming, and constructing the DOM is just overhead.

+

The Printer supports the streaming case. The following code prints out a trivially simple XML file without ever creating an XML document.

XMLPrinter printer( fp );
+printer.OpenElement( "foo" );
+printer.PushAttribute( "foo", "bar" );
+printer.CloseElement();
+

Examples

+

Load and parse an XML file.

+
/* ------ Example 1: Load and parse an XML file. ---- */
+{
+    XMLDocument doc;
+    doc.LoadFile( "dream.xml" );
+}
+

Lookup information.

+
/* ------ Example 2: Lookup information. ---- */
+{
+    XMLDocument doc;
+    doc.LoadFile( "dream.xml" );
+
+    // Structure of the XML file:
+    // - Element "PLAY"      the root Element, which is the
+    //                       FirstChildElement of the Document
+    // - - Element "TITLE"   child of the root PLAY Element
+    // - - - Text            child of the TITLE Element
+
+    // Navigate to the title, using the convenience function,
+    // with a dangerous lack of error checking.
+    const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText();
+    printf( "Name of play (1): %s\n", title );
+
+    // Text is just another Node to TinyXML-2. The more
+    // general way to get to the XMLText:
+    XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText();
+    title = textNode->Value();
+    printf( "Name of play (2): %s\n", title );
+}
+

Using and Installing

+

There are 2 files in TinyXML-2:

+

And additionally a test file:

    +
  • xmltest.cpp
  • +
+

Generally speaking, the intent is that you simply include the tinyxml2.cpp and tinyxml2.h files in your project and build with your other source code.

+

There is also a CMake build included. CMake is the general build for TinyXML-2. Additional build systems are costly to maintain, and tend to bit-rot.

+

A Visual Studio project is included, but that is largely for developer convenience, and is not intended to integrate well with other builds.

+

Building TinyXML-2 - Using vcpkg

+

You can download and install TinyXML-2 using the vcpkg dependency manager:

git clone https://github.com/Microsoft/vcpkg.git
+cd vcpkg
+./bootstrap-vcpkg.sh
+./vcpkg integrate install
+./vcpkg install tinyxml2
+

The TinyXML-2 port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

+

Versioning

+

TinyXML-2 uses semantic versioning. http://semver.org/ Releases are now tagged in github.

+

Note that the major version will (probably) change fairly rapidly. API changes are fairly common.

+

License

+

TinyXML-2 is released under the zlib license:

+

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

+

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

+
    +
  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. +
  3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
  4. +
  5. This notice may not be removed or altered from any source distribution.
  6. +
+

Contributors

+

Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun.

+

The original TinyXML-1 has many contributors, who all deserve thanks in shaping what is a very successful library. Extra thanks to Yves Berquin and Andrew Ellerton who were key contributors.

+

TinyXML-2 grew from that effort. Lee Thomason is the original author of TinyXML-2 (and TinyXML-1) but TinyXML-2 has been and is being improved by many contributors.

+

Thanks to John Mackay at http://john.mackay.rosalilastudio.com for the TinyXML-2 logo!

+
+
+ + + + diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/menu.js b/docs/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/docs/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js new file mode 100644 index 00000000..323de981 --- /dev/null +++ b/docs/menudata.js @@ -0,0 +1,76 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"x",url:"functions_x.html#index_x"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"q",url:"functions_func_q.html#index_q"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"x",url:"functions_func_x.html#index_x"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +TinyXML-2: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    TinyXML-2 +  9.0.0 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/docs/search/all_0.html b/docs/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/docs/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 00000000..69ff10e1 --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['accept_0',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a1b2c1448f1a21299d0a7913f18b55206',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a4a33dc32fae0285b03f9cfcb3e43e122',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a5f376019fb34752eb248548f42f32045',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a70983aa1b1cff3d3aa6d4d0a80e5ee48',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#a3ea8a40e788fb9ad876c28a32932c6d5',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a9efa54f7ecb37c17ab1fa2b3078ccca1',1,'tinyxml2::XMLDocument::Accept()']]], + ['attribute_1',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a70e49ed60b11212ae35f7e354cfe1de9',1,'tinyxml2::XMLElement']]] +]; diff --git a/docs/search/all_1.html b/docs/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/docs/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 00000000..a8b11676 --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['boolattribute_2',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], + ['booltext_3',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], + ['boolvalue_4',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_10.html b/docs/search/all_10.html new file mode 100644 index 00000000..3bf11961 --- /dev/null +++ b/docs/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 00000000..cac5f2a7 --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['tinyxml_2d2_113',['TinyXML-2',['../index.html',1,'']]], + ['tocomment_114',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#aff47671055aa99840a1c1ebd661e63e3',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a8093e1dc8a34fa446d9dc3fde0e6c0ee',1,'tinyxml2::XMLComment::ToComment()']]], + ['todeclaration_115',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a174fd4c22c010b58138c1b84a0dfbd51',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a159d8ac45865215e88059ea1e5b52fc5',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a108858be7ee3eb53f73b5194c1aa8ff0',1,'tinyxml2::XMLHandle::ToDeclaration()']]], + ['todocument_116',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a836e2966ed736fc3c94f70e12a2a3357',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a3e185f880882bd978367bb55937735ec',1,'tinyxml2::XMLDocument::ToDocument()']]], + ['toelement_117',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#aab516e699567f75cc9ab2ef2eee501e8',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ff5c2dbc15df36cf664ce1b0ea0a5d',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a5e73ed8f3f6f9619d5a8bb1862c47d99',1,'tinyxml2::XMLHandle::ToElement()']]], + ['tonode_118',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a03ea6ec970a021b71bf1219a0f6717df',1,'tinyxml2::XMLHandle']]], + ['totext_119',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a41c55dab9162d1eb62db2008430e376b',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#ab1213b4ddebe9b17ec7e7040e9f1caf7',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#a6ab9e8cbfb41417246e5657e3842c62a',1,'tinyxml2::XMLHandle::ToText()']]], + ['tounknown_120',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#a8675a74aa0ada6eccab0c77ef3e5b9bd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#af4374856421921cad578c8affae872b6',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#aa387368a1ad8d843a9f12df863d298de',1,'tinyxml2::XMLHandle::ToUnknown()']]] +]; diff --git a/docs/search/all_11.html b/docs/search/all_11.html new file mode 100644 index 00000000..c9f79d28 --- /dev/null +++ b/docs/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 00000000..aa21f644 --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['unsigned64attribute_121',['Unsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a226502bab8f1be7ede1fdd255398eb85',1,'tinyxml2::XMLElement']]], + ['unsigned64text_122',['Unsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#af48c1023abbac1acdf4927c51c3a5f0c',1,'tinyxml2::XMLElement']]], + ['unsignedattribute_123',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], + ['unsignedtext_124',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], + ['unsignedvalue_125',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_12.html b/docs/search/all_12.html new file mode 100644 index 00000000..ab934722 --- /dev/null +++ b/docs/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 00000000..886312d9 --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value_126',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a66344989a4b436155bcda72bd6b07b82',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a1aab1dd0e43ecbcfa306adbcf3a3d853',1,'tinyxml2::XMLAttribute::Value()']]], + ['visit_127',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a275ae25544a12199ae40b6994ca6e4de',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3f16a30be1537ac141d9bd2db824ba9e',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment)'],['../classtinyxml2_1_1_x_m_l_printer.html#a9ceff5cd85e5db65838962174fcdcc46',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa15e1da81e17dea5da6499ac5b08d9d8',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown)']]], + ['visitenter_128',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae966b988a7a28c41e91c5ca17fb2054b',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a2ce2aa508c21ac91615093ddb9c282c5',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute)']]], + ['visitexit_129',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a15fc1f2b922f540917dcf52808737b29',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae99e0a7086543591edfb565f24689098',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element)']]] +]; diff --git a/docs/search/all_13.html b/docs/search/all_13.html new file mode 100644 index 00000000..51172c2f --- /dev/null +++ b/docs/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 00000000..a438148c --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['xmlattribute_130',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment_131',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle_132',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration_133',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument_134',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2::XMLDocument'],['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument::XMLDocument()']]], + ['xmlelement_135',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle_136',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2::XMLHandle'],['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], + ['xmlnode_137',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter_138',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2::XMLPrinter'],['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter::XMLPrinter()']]], + ['xmltext_139',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown_140',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor_141',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] +]; diff --git a/docs/search/all_2.html b/docs/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/docs/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 00000000..211e24ef --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cdata_5',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], + ['clear_6',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], + ['clearbuffer_7',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a690cb140ba98b7339734ff865f56b0b3',1,'tinyxml2::XMLPrinter']]], + ['clearerror_8',['ClearError',['../classtinyxml2_1_1_x_m_l_document.html#a4085d9c52f1d93214311459d6d1fcf17',1,'tinyxml2::XMLDocument']]], + ['closeelement_9',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], + ['cstr_10',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#a180671d73844f159f2d4aafbc11d106e',1,'tinyxml2::XMLPrinter']]], + ['cstrsize_11',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/docs/search/all_3.html b/docs/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/docs/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 00000000..6520bfaa --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['deepclone_12',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a62c71b6bf8734b5424063b8d9a61c266',1,'tinyxml2::XMLNode']]], + ['deepcopy_13',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], + ['deleteattribute_14',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], + ['deletechild_15',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], + ['deletechildren_16',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], + ['deletenode_17',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], + ['doubleattribute_18',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], + ['doubletext_19',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], + ['doublevalue_20',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_4.html b/docs/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/docs/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 00000000..52bdc46b --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['error_21',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], + ['errorid_22',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], + ['errorlinenum_23',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], + ['errorstr_24',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ad75aa9d32c4e8b300655186808aa9abf',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/all_5.html b/docs/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/docs/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 00000000..1d4413af --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['findattribute_25',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a2dcd4d5d6fb63396cd2f257c318b42c4',1,'tinyxml2::XMLElement']]], + ['firstattribute_26',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a3e191704c8d499906ec11fe2f60c6686',1,'tinyxml2::XMLElement']]], + ['firstchild_27',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ae7dc225e1018cdd685f7563593a1fe08',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], + ['firstchildelement_28',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1795a35852dc8aae877cc8ded986e59b',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], + ['floatattribute_29',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], + ['floattext_30',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], + ['floatvalue_31',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_6.html b/docs/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/docs/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 00000000..9dddc4ff --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['get_20information_20out_20of_20xml_32',['Get information out of XML',['../_example_3.html',1,'']]], + ['getdocument_33',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a2de84cfa4ec3fe249bad745069d145f1',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#af343d1ef0b45c0020e62d784d7e67a68',1,'tinyxml2::XMLNode::GetDocument()']]], + ['getlinenum_34',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], + ['gettext_35',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a6d5c8d115561ade4e4456b71d91b6f51',1,'tinyxml2::XMLElement']]], + ['getuserdata_36',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a7f0687574afa03bc479dc44f29db0afe',1,'tinyxml2::XMLNode']]] +]; diff --git a/docs/search/all_7.html b/docs/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/docs/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 00000000..118d61e2 --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasbom_37',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/all_8.html b/docs/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/docs/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 00000000..9256a19a --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['insertafterchild_38',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a85adb8f0b7477eec30f9a41d420b09c2',1,'tinyxml2::XMLNode']]], + ['insertendchild_39',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#aeb249ed60f4e8bfad3709151c3ee4286',1,'tinyxml2::XMLNode']]], + ['insertfirstchild_40',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#a8ff7dc071f3a1a6ae2ac25a37492865d',1,'tinyxml2::XMLNode']]], + ['insertnewchildelement_41',['InsertNewChildElement',['../classtinyxml2_1_1_x_m_l_element.html#abc9506eff9780f666f49dc3d5e5cae13',1,'tinyxml2::XMLElement']]], + ['insertnewcomment_42',['InsertNewComment',['../classtinyxml2_1_1_x_m_l_element.html#ae4f2c2e781b8dc030411d84cd20fa46d',1,'tinyxml2::XMLElement']]], + ['insertnewdeclaration_43',['InsertNewDeclaration',['../classtinyxml2_1_1_x_m_l_element.html#adec237e788b50c4ed73c918a166adde6',1,'tinyxml2::XMLElement']]], + ['insertnewtext_44',['InsertNewText',['../classtinyxml2_1_1_x_m_l_element.html#a189e155810fc9fdd4da1409cbadee187',1,'tinyxml2::XMLElement']]], + ['insertnewunknown_45',['InsertNewUnknown',['../classtinyxml2_1_1_x_m_l_element.html#acaa5fe3957760e68185006965e2c11c2',1,'tinyxml2::XMLElement']]], + ['int64attribute_46',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], + ['int64text_47',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], + ['intattribute_48',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], + ['intvalue_49',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_9.html b/docs/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/docs/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 00000000..f6023fe3 --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['lastchild_50',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a9b8583a277e8e26f4cbbb5492786778e',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], + ['lastchildelement_51',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a173e9d1341bc56992e2d320a35936551',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], + ['load_20an_20xml_20file_52',['Load an XML File',['../_example_1.html',1,'']]], + ['loadfile_53',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] +]; diff --git a/docs/search/all_a.html b/docs/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/docs/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 00000000..5211f98c --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name_54',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#ab886c486ec19f02ed826f8dc129e5ad8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#a63e057fb5baee1dd29f323cb85907b35',1,'tinyxml2::XMLElement::Name()']]], + ['newcomment_55',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#ade4874bcb439954972ef2b3723ff3259',1,'tinyxml2::XMLDocument']]], + ['newdeclaration_56',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#aee2eb3435923f5494dcc70ac225b60a2',1,'tinyxml2::XMLDocument']]], + ['newelement_57',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a8aa7817d4a1001364b06373763ab99d6',1,'tinyxml2::XMLDocument']]], + ['newtext_58',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#ab7e8b29ae4099092a8bb947da6361296',1,'tinyxml2::XMLDocument']]], + ['newunknown_59',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a5385c937734ff6db9226ab707d2c7147',1,'tinyxml2::XMLDocument']]], + ['next_60',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aee53571b21e7ce5421eb929523a8bbe6',1,'tinyxml2::XMLAttribute']]], + ['nextsibling_61',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#a79db9ef0fe014d27790f2218b87bcbb5',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], + ['nextsiblingelement_62',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a1264c86233328f0cd36297552d982f80',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], + ['nochildren_63',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] +]; diff --git a/docs/search/all_b.html b/docs/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/docs/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 00000000..38c0c2a3 --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['openelement_64',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], + ['operator_3d_65',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#a75b908322bb4b83be3281b6845252b20',1,'tinyxml2::XMLHandle']]] +]; diff --git a/docs/search/all_c.html b/docs/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/docs/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 00000000..1ec43192 --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['parent_66',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#ae0f62bc186c56c2e0483ebd52dbfbe34',1,'tinyxml2::XMLNode']]], + ['parse_67',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#af2b616169e6517182f6725f2498e9a01',1,'tinyxml2::XMLDocument']]], + ['parse_20an_20xml_20from_20char_20buffer_68',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['previoussibling_69',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#aac667c513d445f8b783e1e15ef9d3551',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], + ['previoussiblingelement_70',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a872936cae46fb473eb47fec99129fc70',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], + ['print_71',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], + ['printerror_72',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], + ['printspace_73',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], + ['pushattribute_74',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], + ['pushcomment_75',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], + ['pushheader_76',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], + ['pushtext_77',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a60b0a4cf57371ff8679c2c7556ccb708',1,'tinyxml2::XMLPrinter::PushText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] +]; diff --git a/docs/search/all_d.html b/docs/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/docs/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 00000000..cab2932b --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['queryattribute_78',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5b7df3bed2b8954eabf227fa204522eb',1,'tinyxml2::XMLElement']]], + ['queryboolattribute_79',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], + ['querybooltext_80',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], + ['queryboolvalue_81',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], + ['querydoubleattribute_82',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], + ['querydoubletext_83',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], + ['querydoublevalue_84',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], + ['queryfloatattribute_85',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], + ['queryfloattext_86',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], + ['queryfloatvalue_87',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], + ['queryint64attribute_88',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], + ['queryint64text_89',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], + ['queryint64value_90',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], + ['queryintattribute_91',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], + ['queryinttext_92',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], + ['queryintvalue_93',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], + ['querystringattribute_94',['QueryStringAttribute',['../classtinyxml2_1_1_x_m_l_element.html#adb8ae765f98d0c5037faec48deea78bc',1,'tinyxml2::XMLElement']]], + ['queryunsigned64attribute_95',['QueryUnsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a13dd590b5d3958ce2ed79844aacd9405',1,'tinyxml2::XMLElement']]], + ['queryunsigned64text_96',['QueryUnsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#ac2239b3bd172ad8f5b78d04d4236144b',1,'tinyxml2::XMLElement']]], + ['queryunsigned64value_97',['QueryUnsigned64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#af793c695e7ee65cf20b8010d38b1d157',1,'tinyxml2::XMLAttribute']]], + ['queryunsignedattribute_98',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], + ['queryunsignedtext_99',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], + ['queryunsignedvalue_100',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/all_e.html b/docs/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/docs/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 00000000..0ccf8e1a --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['read_20attributes_20and_20text_20information_2e_101',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['rootelement_102',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#ad2b70320d3c2a071c2f36928edff3e1c',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/all_f.html b/docs/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/docs/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 00000000..54bdc74a --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['savefile_103',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], + ['setattribute_104',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a10964060a5c0d92486ecf8705bdf37da',1,'tinyxml2::XMLAttribute::SetAttribute(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ad598868c0599ddc4695dab18552c308d',1,'tinyxml2::XMLElement::SetAttribute(const char *name, uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], + ['setbom_105',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], + ['setcdata_106',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], + ['setname_107',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], + ['settext_108',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#a6e615bc745afd1ca8ded56d7aac02657',1,'tinyxml2::XMLElement::SetText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], + ['setuserdata_109',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], + ['setvalue_110',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], + ['shallowclone_111',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a8402cbd3129d20e9e6024bbcc0531283',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#af3a81ed4dd49d5151c477b3f265a3011',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a08991cc63fadf7e95078ac4f9ea1b073',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a118d47518dd9e522644e42efa259aed7',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0125f41c89763dea06619b5fd5246b4c',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#ac035742d68b0c50c3f676374e59fe750',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#aa37cc1709d7e1e988bc17dcfb24a69b8',1,'tinyxml2::XMLDocument::ShallowClone()']]], + ['shallowequal_112',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#ae0fff8a24e2de7eb073fd192e9db0331',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a6f7d227b25afa8cc3c763b7cc8833739',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#aa26b70011694e9b9e9480b929e9b78d6',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0715ab2c05d7f74845c188122213b116',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ea913a460b48979bd83cf9871c99f6',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#a6fe5ef18699091844fcf64b56ffa5bf9',1,'tinyxml2::XMLDocument::ShallowEqual()']]] +]; diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/docs/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 00000000..a9be1214 --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['xmlattribute_142',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment_143',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle_144',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration_145',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument_146',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2']]], + ['xmlelement_147',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle_148',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2']]], + ['xmlnode_149',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter_150',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2']]], + ['xmltext_151',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown_152',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor_153',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] +]; diff --git a/docs/search/close.png b/docs/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/docs/search/close.svg b/docs/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/docs/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/search/functions_0.html b/docs/search/functions_0.html new file mode 100644 index 00000000..eb4c5014 --- /dev/null +++ b/docs/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 00000000..782a6628 --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['accept_154',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a1b2c1448f1a21299d0a7913f18b55206',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a4a33dc32fae0285b03f9cfcb3e43e122',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a5f376019fb34752eb248548f42f32045',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a70983aa1b1cff3d3aa6d4d0a80e5ee48',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#a3ea8a40e788fb9ad876c28a32932c6d5',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a9efa54f7ecb37c17ab1fa2b3078ccca1',1,'tinyxml2::XMLDocument::Accept()']]], + ['attribute_155',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a70e49ed60b11212ae35f7e354cfe1de9',1,'tinyxml2::XMLElement']]] +]; diff --git a/docs/search/functions_1.html b/docs/search/functions_1.html new file mode 100644 index 00000000..ef4088b8 --- /dev/null +++ b/docs/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 00000000..44f3cf94 --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['boolattribute_156',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], + ['booltext_157',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], + ['boolvalue_158',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_10.html b/docs/search/functions_10.html new file mode 100644 index 00000000..1bdc1257 --- /dev/null +++ b/docs/search/functions_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js new file mode 100644 index 00000000..d3cd46f9 --- /dev/null +++ b/docs/search/functions_10.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['tocomment_263',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#aff47671055aa99840a1c1ebd661e63e3',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a8093e1dc8a34fa446d9dc3fde0e6c0ee',1,'tinyxml2::XMLComment::ToComment()']]], + ['todeclaration_264',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a174fd4c22c010b58138c1b84a0dfbd51',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a159d8ac45865215e88059ea1e5b52fc5',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a108858be7ee3eb53f73b5194c1aa8ff0',1,'tinyxml2::XMLHandle::ToDeclaration()']]], + ['todocument_265',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a836e2966ed736fc3c94f70e12a2a3357',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a3e185f880882bd978367bb55937735ec',1,'tinyxml2::XMLDocument::ToDocument()']]], + ['toelement_266',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#aab516e699567f75cc9ab2ef2eee501e8',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ff5c2dbc15df36cf664ce1b0ea0a5d',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a5e73ed8f3f6f9619d5a8bb1862c47d99',1,'tinyxml2::XMLHandle::ToElement()']]], + ['tonode_267',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a03ea6ec970a021b71bf1219a0f6717df',1,'tinyxml2::XMLHandle']]], + ['totext_268',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a41c55dab9162d1eb62db2008430e376b',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#ab1213b4ddebe9b17ec7e7040e9f1caf7',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#a6ab9e8cbfb41417246e5657e3842c62a',1,'tinyxml2::XMLHandle::ToText()']]], + ['tounknown_269',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#a8675a74aa0ada6eccab0c77ef3e5b9bd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#af4374856421921cad578c8affae872b6',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#aa387368a1ad8d843a9f12df863d298de',1,'tinyxml2::XMLHandle::ToUnknown()']]] +]; diff --git a/docs/search/functions_11.html b/docs/search/functions_11.html new file mode 100644 index 00000000..188076ef --- /dev/null +++ b/docs/search/functions_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js new file mode 100644 index 00000000..11799315 --- /dev/null +++ b/docs/search/functions_11.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['unsigned64attribute_270',['Unsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a226502bab8f1be7ede1fdd255398eb85',1,'tinyxml2::XMLElement']]], + ['unsigned64text_271',['Unsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#af48c1023abbac1acdf4927c51c3a5f0c',1,'tinyxml2::XMLElement']]], + ['unsignedattribute_272',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], + ['unsignedtext_273',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], + ['unsignedvalue_274',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_12.html b/docs/search/functions_12.html new file mode 100644 index 00000000..eb29d8f9 --- /dev/null +++ b/docs/search/functions_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_12.js b/docs/search/functions_12.js new file mode 100644 index 00000000..6ec91512 --- /dev/null +++ b/docs/search/functions_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value_275',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a66344989a4b436155bcda72bd6b07b82',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a1aab1dd0e43ecbcfa306adbcf3a3d853',1,'tinyxml2::XMLAttribute::Value()']]], + ['visit_276',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a275ae25544a12199ae40b6994ca6e4de',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3f16a30be1537ac141d9bd2db824ba9e',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment)'],['../classtinyxml2_1_1_x_m_l_printer.html#a9ceff5cd85e5db65838962174fcdcc46',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa15e1da81e17dea5da6499ac5b08d9d8',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown)']]], + ['visitenter_277',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae966b988a7a28c41e91c5ca17fb2054b',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a2ce2aa508c21ac91615093ddb9c282c5',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute)']]], + ['visitexit_278',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a15fc1f2b922f540917dcf52808737b29',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae99e0a7086543591edfb565f24689098',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element)']]] +]; diff --git a/docs/search/functions_13.html b/docs/search/functions_13.html new file mode 100644 index 00000000..3da2ea69 --- /dev/null +++ b/docs/search/functions_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_13.js b/docs/search/functions_13.js new file mode 100644 index 00000000..195574aa --- /dev/null +++ b/docs/search/functions_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['xmldocument_279',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument']]], + ['xmlhandle_280',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], + ['xmlprinter_281',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/docs/search/functions_2.html b/docs/search/functions_2.html new file mode 100644 index 00000000..ca5aa10e --- /dev/null +++ b/docs/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 00000000..497e75a7 --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cdata_159',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], + ['clear_160',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], + ['clearbuffer_161',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a690cb140ba98b7339734ff865f56b0b3',1,'tinyxml2::XMLPrinter']]], + ['clearerror_162',['ClearError',['../classtinyxml2_1_1_x_m_l_document.html#a4085d9c52f1d93214311459d6d1fcf17',1,'tinyxml2::XMLDocument']]], + ['closeelement_163',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], + ['cstr_164',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#a180671d73844f159f2d4aafbc11d106e',1,'tinyxml2::XMLPrinter']]], + ['cstrsize_165',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html new file mode 100644 index 00000000..d79f55b8 --- /dev/null +++ b/docs/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 00000000..f54c8935 --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['deepclone_166',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a62c71b6bf8734b5424063b8d9a61c266',1,'tinyxml2::XMLNode']]], + ['deepcopy_167',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], + ['deleteattribute_168',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], + ['deletechild_169',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], + ['deletechildren_170',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], + ['deletenode_171',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], + ['doubleattribute_172',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], + ['doubletext_173',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], + ['doublevalue_174',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_4.html b/docs/search/functions_4.html new file mode 100644 index 00000000..1657cad0 --- /dev/null +++ b/docs/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 00000000..55d93b47 --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['error_175',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], + ['errorid_176',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], + ['errorlinenum_177',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], + ['errorstr_178',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ad75aa9d32c4e8b300655186808aa9abf',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/functions_5.html b/docs/search/functions_5.html new file mode 100644 index 00000000..9301d6b9 --- /dev/null +++ b/docs/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 00000000..6a7db0b8 --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['findattribute_179',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a2dcd4d5d6fb63396cd2f257c318b42c4',1,'tinyxml2::XMLElement']]], + ['firstattribute_180',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a3e191704c8d499906ec11fe2f60c6686',1,'tinyxml2::XMLElement']]], + ['firstchild_181',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ae7dc225e1018cdd685f7563593a1fe08',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], + ['firstchildelement_182',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1795a35852dc8aae877cc8ded986e59b',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], + ['floatattribute_183',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], + ['floattext_184',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], + ['floatvalue_185',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_6.html b/docs/search/functions_6.html new file mode 100644 index 00000000..9c4f5fc6 --- /dev/null +++ b/docs/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 00000000..71d80905 --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getdocument_186',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a2de84cfa4ec3fe249bad745069d145f1',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#af343d1ef0b45c0020e62d784d7e67a68',1,'tinyxml2::XMLNode::GetDocument()']]], + ['getlinenum_187',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], + ['gettext_188',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a6d5c8d115561ade4e4456b71d91b6f51',1,'tinyxml2::XMLElement']]], + ['getuserdata_189',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a7f0687574afa03bc479dc44f29db0afe',1,'tinyxml2::XMLNode']]] +]; diff --git a/docs/search/functions_7.html b/docs/search/functions_7.html new file mode 100644 index 00000000..46b5c0f6 --- /dev/null +++ b/docs/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 00000000..676d3b56 --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasbom_190',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/functions_8.html b/docs/search/functions_8.html new file mode 100644 index 00000000..31a1d950 --- /dev/null +++ b/docs/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 00000000..f6448310 --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['insertafterchild_191',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a85adb8f0b7477eec30f9a41d420b09c2',1,'tinyxml2::XMLNode']]], + ['insertendchild_192',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#aeb249ed60f4e8bfad3709151c3ee4286',1,'tinyxml2::XMLNode']]], + ['insertfirstchild_193',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#a8ff7dc071f3a1a6ae2ac25a37492865d',1,'tinyxml2::XMLNode']]], + ['insertnewchildelement_194',['InsertNewChildElement',['../classtinyxml2_1_1_x_m_l_element.html#abc9506eff9780f666f49dc3d5e5cae13',1,'tinyxml2::XMLElement']]], + ['insertnewcomment_195',['InsertNewComment',['../classtinyxml2_1_1_x_m_l_element.html#ae4f2c2e781b8dc030411d84cd20fa46d',1,'tinyxml2::XMLElement']]], + ['insertnewdeclaration_196',['InsertNewDeclaration',['../classtinyxml2_1_1_x_m_l_element.html#adec237e788b50c4ed73c918a166adde6',1,'tinyxml2::XMLElement']]], + ['insertnewtext_197',['InsertNewText',['../classtinyxml2_1_1_x_m_l_element.html#a189e155810fc9fdd4da1409cbadee187',1,'tinyxml2::XMLElement']]], + ['insertnewunknown_198',['InsertNewUnknown',['../classtinyxml2_1_1_x_m_l_element.html#acaa5fe3957760e68185006965e2c11c2',1,'tinyxml2::XMLElement']]], + ['int64attribute_199',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], + ['int64text_200',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], + ['intattribute_201',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], + ['intvalue_202',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html new file mode 100644 index 00000000..9a8e4290 --- /dev/null +++ b/docs/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 00000000..1cf1c10b --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lastchild_203',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a9b8583a277e8e26f4cbbb5492786778e',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], + ['lastchildelement_204',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a173e9d1341bc56992e2d320a35936551',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], + ['loadfile_205',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] +]; diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html new file mode 100644 index 00000000..5ecc152c --- /dev/null +++ b/docs/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 00000000..28686f0d --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name_206',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#ab886c486ec19f02ed826f8dc129e5ad8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#a63e057fb5baee1dd29f323cb85907b35',1,'tinyxml2::XMLElement::Name()']]], + ['newcomment_207',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#ade4874bcb439954972ef2b3723ff3259',1,'tinyxml2::XMLDocument']]], + ['newdeclaration_208',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#aee2eb3435923f5494dcc70ac225b60a2',1,'tinyxml2::XMLDocument']]], + ['newelement_209',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a8aa7817d4a1001364b06373763ab99d6',1,'tinyxml2::XMLDocument']]], + ['newtext_210',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#ab7e8b29ae4099092a8bb947da6361296',1,'tinyxml2::XMLDocument']]], + ['newunknown_211',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a5385c937734ff6db9226ab707d2c7147',1,'tinyxml2::XMLDocument']]], + ['next_212',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aee53571b21e7ce5421eb929523a8bbe6',1,'tinyxml2::XMLAttribute']]], + ['nextsibling_213',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#a79db9ef0fe014d27790f2218b87bcbb5',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], + ['nextsiblingelement_214',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a1264c86233328f0cd36297552d982f80',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], + ['nochildren_215',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] +]; diff --git a/docs/search/functions_b.html b/docs/search/functions_b.html new file mode 100644 index 00000000..e301fedd --- /dev/null +++ b/docs/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 00000000..22db1d69 --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['openelement_216',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], + ['operator_3d_217',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#a75b908322bb4b83be3281b6845252b20',1,'tinyxml2::XMLHandle']]] +]; diff --git a/docs/search/functions_c.html b/docs/search/functions_c.html new file mode 100644 index 00000000..c4f32687 --- /dev/null +++ b/docs/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js new file mode 100644 index 00000000..ffa08563 --- /dev/null +++ b/docs/search/functions_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['parent_218',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#ae0f62bc186c56c2e0483ebd52dbfbe34',1,'tinyxml2::XMLNode']]], + ['parse_219',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#af2b616169e6517182f6725f2498e9a01',1,'tinyxml2::XMLDocument']]], + ['previoussibling_220',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#aac667c513d445f8b783e1e15ef9d3551',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], + ['previoussiblingelement_221',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a872936cae46fb473eb47fec99129fc70',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], + ['print_222',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], + ['printerror_223',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], + ['printspace_224',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], + ['pushattribute_225',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], + ['pushcomment_226',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], + ['pushheader_227',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], + ['pushtext_228',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a60b0a4cf57371ff8679c2c7556ccb708',1,'tinyxml2::XMLPrinter::PushText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] +]; diff --git a/docs/search/functions_d.html b/docs/search/functions_d.html new file mode 100644 index 00000000..7a1ed065 --- /dev/null +++ b/docs/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js new file mode 100644 index 00000000..080168cc --- /dev/null +++ b/docs/search/functions_d.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['queryattribute_229',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5b7df3bed2b8954eabf227fa204522eb',1,'tinyxml2::XMLElement']]], + ['queryboolattribute_230',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], + ['querybooltext_231',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], + ['queryboolvalue_232',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], + ['querydoubleattribute_233',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], + ['querydoubletext_234',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], + ['querydoublevalue_235',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], + ['queryfloatattribute_236',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], + ['queryfloattext_237',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], + ['queryfloatvalue_238',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], + ['queryint64attribute_239',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], + ['queryint64text_240',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], + ['queryint64value_241',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], + ['queryintattribute_242',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], + ['queryinttext_243',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], + ['queryintvalue_244',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], + ['querystringattribute_245',['QueryStringAttribute',['../classtinyxml2_1_1_x_m_l_element.html#adb8ae765f98d0c5037faec48deea78bc',1,'tinyxml2::XMLElement']]], + ['queryunsigned64attribute_246',['QueryUnsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a13dd590b5d3958ce2ed79844aacd9405',1,'tinyxml2::XMLElement']]], + ['queryunsigned64text_247',['QueryUnsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#ac2239b3bd172ad8f5b78d04d4236144b',1,'tinyxml2::XMLElement']]], + ['queryunsigned64value_248',['QueryUnsigned64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#af793c695e7ee65cf20b8010d38b1d157',1,'tinyxml2::XMLAttribute']]], + ['queryunsignedattribute_249',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], + ['queryunsignedtext_250',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], + ['queryunsignedvalue_251',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/docs/search/functions_e.html b/docs/search/functions_e.html new file mode 100644 index 00000000..22d2a6bf --- /dev/null +++ b/docs/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js new file mode 100644 index 00000000..a61c4274 --- /dev/null +++ b/docs/search/functions_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rootelement_252',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#ad2b70320d3c2a071c2f36928edff3e1c',1,'tinyxml2::XMLDocument']]] +]; diff --git a/docs/search/functions_f.html b/docs/search/functions_f.html new file mode 100644 index 00000000..54b7dee0 --- /dev/null +++ b/docs/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js new file mode 100644 index 00000000..83d3b690 --- /dev/null +++ b/docs/search/functions_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['savefile_253',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], + ['setattribute_254',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a10964060a5c0d92486ecf8705bdf37da',1,'tinyxml2::XMLAttribute::SetAttribute(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ad598868c0599ddc4695dab18552c308d',1,'tinyxml2::XMLElement::SetAttribute(const char *name, uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], + ['setbom_255',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], + ['setcdata_256',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], + ['setname_257',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], + ['settext_258',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#a6e615bc745afd1ca8ded56d7aac02657',1,'tinyxml2::XMLElement::SetText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], + ['setuserdata_259',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], + ['setvalue_260',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], + ['shallowclone_261',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a8402cbd3129d20e9e6024bbcc0531283',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#af3a81ed4dd49d5151c477b3f265a3011',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a08991cc63fadf7e95078ac4f9ea1b073',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a118d47518dd9e522644e42efa259aed7',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0125f41c89763dea06619b5fd5246b4c',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#ac035742d68b0c50c3f676374e59fe750',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#aa37cc1709d7e1e988bc17dcfb24a69b8',1,'tinyxml2::XMLDocument::ShallowClone()']]], + ['shallowequal_262',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#ae0fff8a24e2de7eb073fd192e9db0331',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a6f7d227b25afa8cc3c763b7cc8833739',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#aa26b70011694e9b9e9480b929e9b78d6',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0715ab2c05d7f74845c188122213b116',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ea913a460b48979bd83cf9871c99f6',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#a6fe5ef18699091844fcf64b56ffa5bf9',1,'tinyxml2::XMLDocument::ShallowEqual()']]] +]; diff --git a/docs/search/mag_sel.png b/docs/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB literal 0 HcmV?d00001 diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/docs/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/search/nomatches.html b/docs/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/docs/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/search/pages_0.html b/docs/search/pages_0.html new file mode 100644 index 00000000..8517b48f --- /dev/null +++ b/docs/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 00000000..d992ed08 --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_20information_20out_20of_20xml_282',['Get information out of XML',['../_example_3.html',1,'']]] +]; diff --git a/docs/search/pages_1.html b/docs/search/pages_1.html new file mode 100644 index 00000000..a0fb6796 --- /dev/null +++ b/docs/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js new file mode 100644 index 00000000..2d10aa6f --- /dev/null +++ b/docs/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['load_20an_20xml_20file_283',['Load an XML File',['../_example_1.html',1,'']]] +]; diff --git a/docs/search/pages_2.html b/docs/search/pages_2.html new file mode 100644 index 00000000..084edfd0 --- /dev/null +++ b/docs/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js new file mode 100644 index 00000000..e7cdf36f --- /dev/null +++ b/docs/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parse_20an_20xml_20from_20char_20buffer_284',['Parse an XML from char buffer',['../_example_2.html',1,'']]] +]; diff --git a/docs/search/pages_3.html b/docs/search/pages_3.html new file mode 100644 index 00000000..c0b45b0f --- /dev/null +++ b/docs/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js new file mode 100644 index 00000000..8f6a8fc8 --- /dev/null +++ b/docs/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['read_20attributes_20and_20text_20information_2e_285',['Read attributes and text information.',['../_example_4.html',1,'']]] +]; diff --git a/docs/search/pages_4.html b/docs/search/pages_4.html new file mode 100644 index 00000000..0f05c2e7 --- /dev/null +++ b/docs/search/pages_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_4.js b/docs/search/pages_4.js new file mode 100644 index 00000000..e97fabfa --- /dev/null +++ b/docs/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tinyxml_2d2_286',['TinyXML-2',['../index.html',1,'']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/docs/search/search_r.png b/docs/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/docs/search/searchdata.js b/docs/search/searchdata.js new file mode 100644 index 00000000..c9ca82e9 --- /dev/null +++ b/docs/search/searchdata.js @@ -0,0 +1,24 @@ +var indexSectionsWithContent = +{ + 0: "abcdefghilnopqrstuvx", + 1: "x", + 2: "abcdefghilnopqrstuvx", + 3: "glprt" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "functions", + 3: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Functions", + 3: "Pages" +}; + diff --git a/docs/splitbar.png b/docs/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 00000000..85a0cd5b --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/tinyxml2_8h_source.html b/docs/tinyxml2_8h_source.html new file mode 100644 index 00000000..dc1d92ae --- /dev/null +++ b/docs/tinyxml2_8h_source.html @@ -0,0 +1,1955 @@ + + + + + + + +TinyXML-2: tinyxml2.h Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    TinyXML-2 +  9.0.0 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyxml2.h
    +
    +
    +
    1 /*
    +
    2 Original code by Lee Thomason (www.grinninglizard.com)
    +
    3 
    +
    4 This software is provided 'as-is', without any express or implied
    +
    5 warranty. In no event will the authors be held liable for any
    +
    6 damages arising from the use of this software.
    +
    7 
    +
    8 Permission is granted to anyone to use this software for any
    +
    9 purpose, including commercial applications, and to alter it and
    +
    10 redistribute it freely, subject to the following restrictions:
    +
    11 
    +
    12 1. The origin of this software must not be misrepresented; you must
    +
    13 not claim that you wrote the original software. If you use this
    +
    14 software in a product, an acknowledgment in the product documentation
    +
    15 would be appreciated but is not required.
    +
    16 
    +
    17 2. Altered source versions must be plainly marked as such, and
    +
    18 must not be misrepresented as being the original software.
    +
    19 
    +
    20 3. This notice may not be removed or altered from any source
    +
    21 distribution.
    +
    22 */
    +
    23 
    +
    24 #ifndef TINYXML2_INCLUDED
    +
    25 #define TINYXML2_INCLUDED
    +
    26 
    +
    27 #if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
    +
    28 # include <ctype.h>
    +
    29 # include <limits.h>
    +
    30 # include <stdio.h>
    +
    31 # include <stdlib.h>
    +
    32 # include <string.h>
    +
    33 # if defined(__PS3__)
    +
    34 # include <stddef.h>
    +
    35 # endif
    +
    36 #else
    +
    37 # include <cctype>
    +
    38 # include <climits>
    +
    39 # include <cstdio>
    +
    40 # include <cstdlib>
    +
    41 # include <cstring>
    +
    42 #endif
    +
    43 #include <stdint.h>
    +
    44 
    +
    45 /*
    +
    46  TODO: intern strings instead of allocation.
    +
    47 */
    +
    48 /*
    +
    49  gcc:
    +
    50  g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
    +
    51 
    +
    52  Formatting, Artistic Style:
    +
    53  AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
    +
    54 */
    +
    55 
    +
    56 #if defined( _DEBUG ) || defined (__DEBUG__)
    +
    57 # ifndef TINYXML2_DEBUG
    +
    58 # define TINYXML2_DEBUG
    +
    59 # endif
    +
    60 #endif
    +
    61 
    +
    62 #ifdef _MSC_VER
    +
    63 # pragma warning(push)
    +
    64 # pragma warning(disable: 4251)
    +
    65 #endif
    +
    66 
    +
    67 #ifdef _WIN32
    +
    68 # ifdef TINYXML2_EXPORT
    +
    69 # define TINYXML2_LIB __declspec(dllexport)
    +
    70 # elif defined(TINYXML2_IMPORT)
    +
    71 # define TINYXML2_LIB __declspec(dllimport)
    +
    72 # else
    +
    73 # define TINYXML2_LIB
    +
    74 # endif
    +
    75 #elif __GNUC__ >= 4
    +
    76 # define TINYXML2_LIB __attribute__((visibility("default")))
    +
    77 #else
    +
    78 # define TINYXML2_LIB
    +
    79 #endif
    +
    80 
    +
    81 
    +
    82 #if !defined(TIXMLASSERT)
    +
    83 #if defined(TINYXML2_DEBUG)
    +
    84 # if defined(_MSC_VER)
    +
    85 # // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
    +
    86 # define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); }
    +
    87 # elif defined (ANDROID_NDK)
    +
    88 # include <android/log.h>
    +
    89 # define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
    +
    90 # else
    +
    91 # include <assert.h>
    +
    92 # define TIXMLASSERT assert
    +
    93 # endif
    +
    94 #else
    +
    95 # define TIXMLASSERT( x ) {}
    +
    96 #endif
    +
    97 #endif
    +
    98 
    +
    99 /* Versioning, past 1.0.14:
    +
    100  http://semver.org/
    +
    101 */
    +
    102 static const int TIXML2_MAJOR_VERSION = 9;
    +
    103 static const int TIXML2_MINOR_VERSION = 0;
    +
    104 static const int TIXML2_PATCH_VERSION = 0;
    +
    105 
    +
    106 #define TINYXML2_MAJOR_VERSION 9
    +
    107 #define TINYXML2_MINOR_VERSION 0
    +
    108 #define TINYXML2_PATCH_VERSION 0
    +
    109 
    +
    110 // A fixed element depth limit is problematic. There needs to be a
    +
    111 // limit to avoid a stack overflow. However, that limit varies per
    +
    112 // system, and the capacity of the stack. On the other hand, it's a trivial
    +
    113 // attack that can result from ill, malicious, or even correctly formed XML,
    +
    114 // so there needs to be a limit in place.
    +
    115 static const int TINYXML2_MAX_ELEMENT_DEPTH = 100;
    +
    116 
    +
    117 namespace tinyxml2
    +
    118 {
    +
    119 class XMLDocument;
    +
    120 class XMLElement;
    +
    121 class XMLAttribute;
    +
    122 class XMLComment;
    +
    123 class XMLText;
    +
    124 class XMLDeclaration;
    +
    125 class XMLUnknown;
    +
    126 class XMLPrinter;
    +
    127 
    +
    128 /*
    +
    129  A class that wraps strings. Normally stores the start and end
    +
    130  pointers into the XML file itself, and will apply normalization
    +
    131  and entity translation if actually read. Can also store (and memory
    +
    132  manage) a traditional char[]
    +
    133 
    +
    134  Isn't clear why TINYXML2_LIB is needed; but seems to fix #719
    +
    135 */
    +
    136 class TINYXML2_LIB StrPair
    +
    137 {
    +
    138 public:
    +
    139  enum Mode {
    +
    140  NEEDS_ENTITY_PROCESSING = 0x01,
    +
    141  NEEDS_NEWLINE_NORMALIZATION = 0x02,
    +
    142  NEEDS_WHITESPACE_COLLAPSING = 0x04,
    +
    143 
    +
    144  TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    +
    145  TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    +
    146  ATTRIBUTE_NAME = 0,
    +
    147  ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    +
    148  ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    +
    149  COMMENT = NEEDS_NEWLINE_NORMALIZATION
    +
    150  };
    +
    151 
    +
    152  StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
    +
    153  ~StrPair();
    +
    154 
    +
    155  void Set( char* start, char* end, int flags ) {
    +
    156  TIXMLASSERT( start );
    +
    157  TIXMLASSERT( end );
    +
    158  Reset();
    +
    159  _start = start;
    +
    160  _end = end;
    +
    161  _flags = flags | NEEDS_FLUSH;
    +
    162  }
    +
    163 
    +
    164  const char* GetStr();
    +
    165 
    +
    166  bool Empty() const {
    +
    167  return _start == _end;
    +
    168  }
    +
    169 
    +
    170  void SetInternedStr( const char* str ) {
    +
    171  Reset();
    +
    172  _start = const_cast<char*>(str);
    +
    173  }
    +
    174 
    +
    175  void SetStr( const char* str, int flags=0 );
    +
    176 
    +
    177  char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
    +
    178  char* ParseName( char* in );
    +
    179 
    +
    180  void TransferTo( StrPair* other );
    +
    181  void Reset();
    +
    182 
    +
    183 private:
    +
    184  void CollapseWhitespace();
    +
    185 
    +
    186  enum {
    +
    187  NEEDS_FLUSH = 0x100,
    +
    188  NEEDS_DELETE = 0x200
    +
    189  };
    +
    190 
    +
    191  int _flags;
    +
    192  char* _start;
    +
    193  char* _end;
    +
    194 
    +
    195  StrPair( const StrPair& other ); // not supported
    +
    196  void operator=( const StrPair& other ); // not supported, use TransferTo()
    +
    197 };
    +
    198 
    +
    199 
    +
    200 /*
    +
    201  A dynamic array of Plain Old Data. Doesn't support constructors, etc.
    +
    202  Has a small initial memory pool, so that low or no usage will not
    +
    203  cause a call to new/delete
    +
    204 */
    +
    205 template <class T, int INITIAL_SIZE>
    +
    206 class DynArray
    +
    207 {
    +
    208 public:
    +
    209  DynArray() :
    +
    210  _mem( _pool ),
    +
    211  _allocated( INITIAL_SIZE ),
    +
    212  _size( 0 )
    +
    213  {
    +
    214  }
    +
    215 
    +
    216  ~DynArray() {
    +
    217  if ( _mem != _pool ) {
    +
    218  delete [] _mem;
    +
    219  }
    +
    220  }
    +
    221 
    +
    222  void Clear() {
    +
    223  _size = 0;
    +
    224  }
    +
    225 
    +
    226  void Push( T t ) {
    +
    227  TIXMLASSERT( _size < INT_MAX );
    +
    228  EnsureCapacity( _size+1 );
    +
    229  _mem[_size] = t;
    +
    230  ++_size;
    +
    231  }
    +
    232 
    +
    233  T* PushArr( int count ) {
    +
    234  TIXMLASSERT( count >= 0 );
    +
    235  TIXMLASSERT( _size <= INT_MAX - count );
    +
    236  EnsureCapacity( _size+count );
    +
    237  T* ret = &_mem[_size];
    +
    238  _size += count;
    +
    239  return ret;
    +
    240  }
    +
    241 
    +
    242  T Pop() {
    +
    243  TIXMLASSERT( _size > 0 );
    +
    244  --_size;
    +
    245  return _mem[_size];
    +
    246  }
    +
    247 
    +
    248  void PopArr( int count ) {
    +
    249  TIXMLASSERT( _size >= count );
    +
    250  _size -= count;
    +
    251  }
    +
    252 
    +
    253  bool Empty() const {
    +
    254  return _size == 0;
    +
    255  }
    +
    256 
    +
    257  T& operator[](int i) {
    +
    258  TIXMLASSERT( i>= 0 && i < _size );
    +
    259  return _mem[i];
    +
    260  }
    +
    261 
    +
    262  const T& operator[](int i) const {
    +
    263  TIXMLASSERT( i>= 0 && i < _size );
    +
    264  return _mem[i];
    +
    265  }
    +
    266 
    +
    267  const T& PeekTop() const {
    +
    268  TIXMLASSERT( _size > 0 );
    +
    269  return _mem[ _size - 1];
    +
    270  }
    +
    271 
    +
    272  int Size() const {
    +
    273  TIXMLASSERT( _size >= 0 );
    +
    274  return _size;
    +
    275  }
    +
    276 
    +
    277  int Capacity() const {
    +
    278  TIXMLASSERT( _allocated >= INITIAL_SIZE );
    +
    279  return _allocated;
    +
    280  }
    +
    281 
    +
    282  void SwapRemove(int i) {
    +
    283  TIXMLASSERT(i >= 0 && i < _size);
    +
    284  TIXMLASSERT(_size > 0);
    +
    285  _mem[i] = _mem[_size - 1];
    +
    286  --_size;
    +
    287  }
    +
    288 
    +
    289  const T* Mem() const {
    +
    290  TIXMLASSERT( _mem );
    +
    291  return _mem;
    +
    292  }
    +
    293 
    +
    294  T* Mem() {
    +
    295  TIXMLASSERT( _mem );
    +
    296  return _mem;
    +
    297  }
    +
    298 
    +
    299 private:
    +
    300  DynArray( const DynArray& ); // not supported
    +
    301  void operator=( const DynArray& ); // not supported
    +
    302 
    +
    303  void EnsureCapacity( int cap ) {
    +
    304  TIXMLASSERT( cap > 0 );
    +
    305  if ( cap > _allocated ) {
    +
    306  TIXMLASSERT( cap <= INT_MAX / 2 );
    +
    307  const int newAllocated = cap * 2;
    +
    308  T* newMem = new T[newAllocated];
    +
    309  TIXMLASSERT( newAllocated >= _size );
    +
    310  memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs
    +
    311  if ( _mem != _pool ) {
    +
    312  delete [] _mem;
    +
    313  }
    +
    314  _mem = newMem;
    +
    315  _allocated = newAllocated;
    +
    316  }
    +
    317  }
    +
    318 
    +
    319  T* _mem;
    +
    320  T _pool[INITIAL_SIZE];
    +
    321  int _allocated; // objects allocated
    +
    322  int _size; // number objects in use
    +
    323 };
    +
    324 
    +
    325 
    +
    326 /*
    +
    327  Parent virtual class of a pool for fast allocation
    +
    328  and deallocation of objects.
    +
    329 */
    +
    330 class MemPool
    +
    331 {
    +
    332 public:
    +
    333  MemPool() {}
    +
    334  virtual ~MemPool() {}
    +
    335 
    +
    336  virtual int ItemSize() const = 0;
    +
    337  virtual void* Alloc() = 0;
    +
    338  virtual void Free( void* ) = 0;
    +
    339  virtual void SetTracked() = 0;
    +
    340 };
    +
    341 
    +
    342 
    +
    343 /*
    +
    344  Template child class to create pools of the correct type.
    +
    345 */
    +
    346 template< int ITEM_SIZE >
    +
    347 class MemPoolT : public MemPool
    +
    348 {
    +
    349 public:
    +
    350  MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
    +
    351  ~MemPoolT() {
    +
    352  MemPoolT< ITEM_SIZE >::Clear();
    +
    353  }
    +
    354 
    +
    355  void Clear() {
    +
    356  // Delete the blocks.
    +
    357  while( !_blockPtrs.Empty()) {
    +
    358  Block* lastBlock = _blockPtrs.Pop();
    +
    359  delete lastBlock;
    +
    360  }
    +
    361  _root = 0;
    +
    362  _currentAllocs = 0;
    +
    363  _nAllocs = 0;
    +
    364  _maxAllocs = 0;
    +
    365  _nUntracked = 0;
    +
    366  }
    +
    367 
    +
    368  virtual int ItemSize() const {
    +
    369  return ITEM_SIZE;
    +
    370  }
    +
    371  int CurrentAllocs() const {
    +
    372  return _currentAllocs;
    +
    373  }
    +
    374 
    +
    375  virtual void* Alloc() {
    +
    376  if ( !_root ) {
    +
    377  // Need a new block.
    +
    378  Block* block = new Block();
    +
    379  _blockPtrs.Push( block );
    +
    380 
    +
    381  Item* blockItems = block->items;
    +
    382  for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
    +
    383  blockItems[i].next = &(blockItems[i + 1]);
    +
    384  }
    +
    385  blockItems[ITEMS_PER_BLOCK - 1].next = 0;
    +
    386  _root = blockItems;
    +
    387  }
    +
    388  Item* const result = _root;
    +
    389  TIXMLASSERT( result != 0 );
    +
    390  _root = _root->next;
    +
    391 
    +
    392  ++_currentAllocs;
    +
    393  if ( _currentAllocs > _maxAllocs ) {
    +
    394  _maxAllocs = _currentAllocs;
    +
    395  }
    +
    396  ++_nAllocs;
    +
    397  ++_nUntracked;
    +
    398  return result;
    +
    399  }
    +
    400 
    +
    401  virtual void Free( void* mem ) {
    +
    402  if ( !mem ) {
    +
    403  return;
    +
    404  }
    +
    405  --_currentAllocs;
    +
    406  Item* item = static_cast<Item*>( mem );
    +
    407 #ifdef TINYXML2_DEBUG
    +
    408  memset( item, 0xfe, sizeof( *item ) );
    +
    409 #endif
    +
    410  item->next = _root;
    +
    411  _root = item;
    +
    412  }
    +
    413  void Trace( const char* name ) {
    +
    414  printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
    +
    415  name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
    +
    416  ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
    +
    417  }
    +
    418 
    +
    419  void SetTracked() {
    +
    420  --_nUntracked;
    +
    421  }
    +
    422 
    +
    423  int Untracked() const {
    +
    424  return _nUntracked;
    +
    425  }
    +
    426 
    +
    427  // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
    +
    428  // The test file is large, 170k.
    +
    429  // Release: VS2010 gcc(no opt)
    +
    430  // 1k: 4000
    +
    431  // 2k: 4000
    +
    432  // 4k: 3900 21000
    +
    433  // 16k: 5200
    +
    434  // 32k: 4300
    +
    435  // 64k: 4000 21000
    +
    436  // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
    +
    437  // in private part if ITEMS_PER_BLOCK is private
    +
    438  enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
    +
    439 
    +
    440 private:
    +
    441  MemPoolT( const MemPoolT& ); // not supported
    +
    442  void operator=( const MemPoolT& ); // not supported
    +
    443 
    +
    444  union Item {
    +
    445  Item* next;
    +
    446  char itemData[ITEM_SIZE];
    +
    447  };
    +
    448  struct Block {
    +
    449  Item items[ITEMS_PER_BLOCK];
    +
    450  };
    +
    451  DynArray< Block*, 10 > _blockPtrs;
    +
    452  Item* _root;
    +
    453 
    +
    454  int _currentAllocs;
    +
    455  int _nAllocs;
    +
    456  int _maxAllocs;
    +
    457  int _nUntracked;
    +
    458 };
    +
    459 
    +
    460 
    +
    461 
    +
    481 class TINYXML2_LIB XMLVisitor
    +
    482 {
    +
    483 public:
    +
    484  virtual ~XMLVisitor() {}
    +
    485 
    +
    487  virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
    +
    488  return true;
    +
    489  }
    +
    491  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
    +
    492  return true;
    +
    493  }
    +
    494 
    +
    496  virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
    +
    497  return true;
    +
    498  }
    +
    500  virtual bool VisitExit( const XMLElement& /*element*/ ) {
    +
    501  return true;
    +
    502  }
    +
    503 
    +
    505  virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
    +
    506  return true;
    +
    507  }
    +
    509  virtual bool Visit( const XMLText& /*text*/ ) {
    +
    510  return true;
    +
    511  }
    +
    513  virtual bool Visit( const XMLComment& /*comment*/ ) {
    +
    514  return true;
    +
    515  }
    +
    517  virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
    +
    518  return true;
    +
    519  }
    +
    520 };
    +
    521 
    +
    522 // WARNING: must match XMLDocument::_errorNames[]
    +
    523 enum XMLError {
    +
    524  XML_SUCCESS = 0,
    +
    525  XML_NO_ATTRIBUTE,
    +
    526  XML_WRONG_ATTRIBUTE_TYPE,
    +
    527  XML_ERROR_FILE_NOT_FOUND,
    +
    528  XML_ERROR_FILE_COULD_NOT_BE_OPENED,
    +
    529  XML_ERROR_FILE_READ_ERROR,
    +
    530  XML_ERROR_PARSING_ELEMENT,
    +
    531  XML_ERROR_PARSING_ATTRIBUTE,
    +
    532  XML_ERROR_PARSING_TEXT,
    +
    533  XML_ERROR_PARSING_CDATA,
    +
    534  XML_ERROR_PARSING_COMMENT,
    +
    535  XML_ERROR_PARSING_DECLARATION,
    +
    536  XML_ERROR_PARSING_UNKNOWN,
    +
    537  XML_ERROR_EMPTY_DOCUMENT,
    +
    538  XML_ERROR_MISMATCHED_ELEMENT,
    +
    539  XML_ERROR_PARSING,
    +
    540  XML_CAN_NOT_CONVERT_TEXT,
    +
    541  XML_NO_TEXT_NODE,
    +
    542  XML_ELEMENT_DEPTH_EXCEEDED,
    +
    543 
    +
    544  XML_ERROR_COUNT
    +
    545 };
    +
    546 
    +
    547 
    +
    548 /*
    +
    549  Utility functionality.
    +
    550 */
    +
    551 class TINYXML2_LIB XMLUtil
    +
    552 {
    +
    553 public:
    +
    554  static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) {
    +
    555  TIXMLASSERT( p );
    +
    556 
    +
    557  while( IsWhiteSpace(*p) ) {
    +
    558  if (curLineNumPtr && *p == '\n') {
    +
    559  ++(*curLineNumPtr);
    +
    560  }
    +
    561  ++p;
    +
    562  }
    +
    563  TIXMLASSERT( p );
    +
    564  return p;
    +
    565  }
    +
    566  static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) {
    +
    567  return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
    +
    568  }
    +
    569 
    +
    570  // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
    +
    571  // correct, but simple, and usually works.
    +
    572  static bool IsWhiteSpace( char p ) {
    +
    573  return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
    +
    574  }
    +
    575 
    +
    576  inline static bool IsNameStartChar( unsigned char ch ) {
    +
    577  if ( ch >= 128 ) {
    +
    578  // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
    +
    579  return true;
    +
    580  }
    +
    581  if ( isalpha( ch ) ) {
    +
    582  return true;
    +
    583  }
    +
    584  return ch == ':' || ch == '_';
    +
    585  }
    +
    586 
    +
    587  inline static bool IsNameChar( unsigned char ch ) {
    +
    588  return IsNameStartChar( ch )
    +
    589  || isdigit( ch )
    +
    590  || ch == '.'
    +
    591  || ch == '-';
    +
    592  }
    +
    593 
    +
    594  inline static bool IsPrefixHex( const char* p) {
    +
    595  p = SkipWhiteSpace(p, 0);
    +
    596  return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X');
    +
    597  }
    +
    598 
    +
    599  inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
    +
    600  if ( p == q ) {
    +
    601  return true;
    +
    602  }
    +
    603  TIXMLASSERT( p );
    +
    604  TIXMLASSERT( q );
    +
    605  TIXMLASSERT( nChar >= 0 );
    +
    606  return strncmp( p, q, nChar ) == 0;
    +
    607  }
    +
    608 
    +
    609  inline static bool IsUTF8Continuation( const char p ) {
    +
    610  return ( p & 0x80 ) != 0;
    +
    611  }
    +
    612 
    +
    613  static const char* ReadBOM( const char* p, bool* hasBOM );
    +
    614  // p is the starting location,
    +
    615  // the UTF-8 value of the entity will be placed in value, and length filled in.
    +
    616  static const char* GetCharacterRef( const char* p, char* value, int* length );
    +
    617  static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
    +
    618 
    +
    619  // converts primitive types to strings
    +
    620  static void ToStr( int v, char* buffer, int bufferSize );
    +
    621  static void ToStr( unsigned v, char* buffer, int bufferSize );
    +
    622  static void ToStr( bool v, char* buffer, int bufferSize );
    +
    623  static void ToStr( float v, char* buffer, int bufferSize );
    +
    624  static void ToStr( double v, char* buffer, int bufferSize );
    +
    625  static void ToStr(int64_t v, char* buffer, int bufferSize);
    +
    626  static void ToStr(uint64_t v, char* buffer, int bufferSize);
    +
    627 
    +
    628  // converts strings to primitive types
    +
    629  static bool ToInt( const char* str, int* value );
    +
    630  static bool ToUnsigned( const char* str, unsigned* value );
    +
    631  static bool ToBool( const char* str, bool* value );
    +
    632  static bool ToFloat( const char* str, float* value );
    +
    633  static bool ToDouble( const char* str, double* value );
    +
    634  static bool ToInt64(const char* str, int64_t* value);
    +
    635  static bool ToUnsigned64(const char* str, uint64_t* value);
    +
    636  // Changes what is serialized for a boolean value.
    +
    637  // Default to "true" and "false". Shouldn't be changed
    +
    638  // unless you have a special testing or compatibility need.
    +
    639  // Be careful: static, global, & not thread safe.
    +
    640  // Be sure to set static const memory as parameters.
    +
    641  static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
    +
    642 
    +
    643 private:
    +
    644  static const char* writeBoolTrue;
    +
    645  static const char* writeBoolFalse;
    +
    646 };
    +
    647 
    +
    648 
    +
    674 class TINYXML2_LIB XMLNode
    +
    675 {
    +
    676  friend class XMLDocument;
    +
    677  friend class XMLElement;
    +
    678 public:
    +
    679 
    +
    681  const XMLDocument* GetDocument() const {
    +
    682  TIXMLASSERT( _document );
    +
    683  return _document;
    +
    684  }
    + +
    687  TIXMLASSERT( _document );
    +
    688  return _document;
    +
    689  }
    +
    690 
    +
    692  virtual XMLElement* ToElement() {
    +
    693  return 0;
    +
    694  }
    +
    696  virtual XMLText* ToText() {
    +
    697  return 0;
    +
    698  }
    +
    700  virtual XMLComment* ToComment() {
    +
    701  return 0;
    +
    702  }
    +
    704  virtual XMLDocument* ToDocument() {
    +
    705  return 0;
    +
    706  }
    + +
    709  return 0;
    +
    710  }
    +
    712  virtual XMLUnknown* ToUnknown() {
    +
    713  return 0;
    +
    714  }
    +
    715 
    +
    716  virtual const XMLElement* ToElement() const {
    +
    717  return 0;
    +
    718  }
    +
    719  virtual const XMLText* ToText() const {
    +
    720  return 0;
    +
    721  }
    +
    722  virtual const XMLComment* ToComment() const {
    +
    723  return 0;
    +
    724  }
    +
    725  virtual const XMLDocument* ToDocument() const {
    +
    726  return 0;
    +
    727  }
    +
    728  virtual const XMLDeclaration* ToDeclaration() const {
    +
    729  return 0;
    +
    730  }
    +
    731  virtual const XMLUnknown* ToUnknown() const {
    +
    732  return 0;
    +
    733  }
    +
    734 
    +
    744  const char* Value() const;
    +
    745 
    +
    749  void SetValue( const char* val, bool staticMem=false );
    +
    750 
    +
    752  int GetLineNum() const { return _parseLineNum; }
    +
    753 
    +
    755  const XMLNode* Parent() const {
    +
    756  return _parent;
    +
    757  }
    +
    758 
    +
    759  XMLNode* Parent() {
    +
    760  return _parent;
    +
    761  }
    +
    762 
    +
    764  bool NoChildren() const {
    +
    765  return !_firstChild;
    +
    766  }
    +
    767 
    +
    769  const XMLNode* FirstChild() const {
    +
    770  return _firstChild;
    +
    771  }
    +
    772 
    +
    773  XMLNode* FirstChild() {
    +
    774  return _firstChild;
    +
    775  }
    +
    776 
    +
    780  const XMLElement* FirstChildElement( const char* name = 0 ) const;
    +
    781 
    +
    782  XMLElement* FirstChildElement( const char* name = 0 ) {
    +
    783  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
    +
    784  }
    +
    785 
    +
    787  const XMLNode* LastChild() const {
    +
    788  return _lastChild;
    +
    789  }
    +
    790 
    +
    791  XMLNode* LastChild() {
    +
    792  return _lastChild;
    +
    793  }
    +
    794 
    +
    798  const XMLElement* LastChildElement( const char* name = 0 ) const;
    +
    799 
    +
    800  XMLElement* LastChildElement( const char* name = 0 ) {
    +
    801  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
    +
    802  }
    +
    803 
    +
    805  const XMLNode* PreviousSibling() const {
    +
    806  return _prev;
    +
    807  }
    +
    808 
    +
    809  XMLNode* PreviousSibling() {
    +
    810  return _prev;
    +
    811  }
    +
    812 
    +
    814  const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ;
    +
    815 
    +
    816  XMLElement* PreviousSiblingElement( const char* name = 0 ) {
    +
    817  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
    +
    818  }
    +
    819 
    +
    821  const XMLNode* NextSibling() const {
    +
    822  return _next;
    +
    823  }
    +
    824 
    +
    825  XMLNode* NextSibling() {
    +
    826  return _next;
    +
    827  }
    +
    828 
    +
    830  const XMLElement* NextSiblingElement( const char* name = 0 ) const;
    +
    831 
    +
    832  XMLElement* NextSiblingElement( const char* name = 0 ) {
    +
    833  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
    +
    834  }
    +
    835 
    + +
    844 
    +
    845  XMLNode* LinkEndChild( XMLNode* addThis ) {
    +
    846  return InsertEndChild( addThis );
    +
    847  }
    + +
    864  XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
    +
    865 
    + +
    870 
    +
    874  void DeleteChild( XMLNode* node );
    +
    875 
    +
    885  virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
    +
    886 
    +
    900  XMLNode* DeepClone( XMLDocument* target ) const;
    +
    901 
    +
    908  virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
    +
    909 
    +
    932  virtual bool Accept( XMLVisitor* visitor ) const = 0;
    +
    933 
    +
    939  void SetUserData(void* userData) { _userData = userData; }
    +
    940 
    +
    946  void* GetUserData() const { return _userData; }
    +
    947 
    +
    948 protected:
    +
    949  explicit XMLNode( XMLDocument* );
    +
    950  virtual ~XMLNode();
    +
    951 
    +
    952  virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
    +
    953 
    +
    954  XMLDocument* _document;
    +
    955  XMLNode* _parent;
    +
    956  mutable StrPair _value;
    +
    957  int _parseLineNum;
    +
    958 
    +
    959  XMLNode* _firstChild;
    +
    960  XMLNode* _lastChild;
    +
    961 
    +
    962  XMLNode* _prev;
    +
    963  XMLNode* _next;
    +
    964 
    +
    965  void* _userData;
    +
    966 
    +
    967 private:
    +
    968  MemPool* _memPool;
    +
    969  void Unlink( XMLNode* child );
    +
    970  static void DeleteNode( XMLNode* node );
    +
    971  void InsertChildPreamble( XMLNode* insertThis ) const;
    +
    972  const XMLElement* ToElementWithName( const char* name ) const;
    +
    973 
    +
    974  XMLNode( const XMLNode& ); // not supported
    +
    975  XMLNode& operator=( const XMLNode& ); // not supported
    +
    976 };
    +
    977 
    +
    978 
    +
    991 class TINYXML2_LIB XMLText : public XMLNode
    +
    992 {
    +
    993  friend class XMLDocument;
    +
    994 public:
    +
    995  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    996 
    +
    997  virtual XMLText* ToText() {
    +
    998  return this;
    +
    999  }
    +
    1000  virtual const XMLText* ToText() const {
    +
    1001  return this;
    +
    1002  }
    +
    1003 
    +
    1005  void SetCData( bool isCData ) {
    +
    1006  _isCData = isCData;
    +
    1007  }
    +
    1009  bool CData() const {
    +
    1010  return _isCData;
    +
    1011  }
    +
    1012 
    +
    1013  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    +
    1014  virtual bool ShallowEqual( const XMLNode* compare ) const;
    +
    1015 
    +
    1016 protected:
    +
    1017  explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
    +
    1018  virtual ~XMLText() {}
    +
    1019 
    +
    1020  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    +
    1021 
    +
    1022 private:
    +
    1023  bool _isCData;
    +
    1024 
    +
    1025  XMLText( const XMLText& ); // not supported
    +
    1026  XMLText& operator=( const XMLText& ); // not supported
    +
    1027 };
    +
    1028 
    +
    1029 
    +
    1031 class TINYXML2_LIB XMLComment : public XMLNode
    +
    1032 {
    +
    1033  friend class XMLDocument;
    +
    1034 public:
    +
    1035  virtual XMLComment* ToComment() {
    +
    1036  return this;
    +
    1037  }
    +
    1038  virtual const XMLComment* ToComment() const {
    +
    1039  return this;
    +
    1040  }
    +
    1041 
    +
    1042  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    1043 
    +
    1044  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    +
    1045  virtual bool ShallowEqual( const XMLNode* compare ) const;
    +
    1046 
    +
    1047 protected:
    +
    1048  explicit XMLComment( XMLDocument* doc );
    +
    1049  virtual ~XMLComment();
    +
    1050 
    +
    1051  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
    +
    1052 
    +
    1053 private:
    +
    1054  XMLComment( const XMLComment& ); // not supported
    +
    1055  XMLComment& operator=( const XMLComment& ); // not supported
    +
    1056 };
    +
    1057 
    +
    1058 
    +
    1070 class TINYXML2_LIB XMLDeclaration : public XMLNode
    +
    1071 {
    +
    1072  friend class XMLDocument;
    +
    1073 public:
    + +
    1075  return this;
    +
    1076  }
    +
    1077  virtual const XMLDeclaration* ToDeclaration() const {
    +
    1078  return this;
    +
    1079  }
    +
    1080 
    +
    1081  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    1082 
    +
    1083  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    +
    1084  virtual bool ShallowEqual( const XMLNode* compare ) const;
    +
    1085 
    +
    1086 protected:
    +
    1087  explicit XMLDeclaration( XMLDocument* doc );
    +
    1088  virtual ~XMLDeclaration();
    +
    1089 
    +
    1090  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    +
    1091 
    +
    1092 private:
    +
    1093  XMLDeclaration( const XMLDeclaration& ); // not supported
    +
    1094  XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
    +
    1095 };
    +
    1096 
    +
    1097 
    +
    1105 class TINYXML2_LIB XMLUnknown : public XMLNode
    +
    1106 {
    +
    1107  friend class XMLDocument;
    +
    1108 public:
    +
    1109  virtual XMLUnknown* ToUnknown() {
    +
    1110  return this;
    +
    1111  }
    +
    1112  virtual const XMLUnknown* ToUnknown() const {
    +
    1113  return this;
    +
    1114  }
    +
    1115 
    +
    1116  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    1117 
    +
    1118  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    +
    1119  virtual bool ShallowEqual( const XMLNode* compare ) const;
    +
    1120 
    +
    1121 protected:
    +
    1122  explicit XMLUnknown( XMLDocument* doc );
    +
    1123  virtual ~XMLUnknown();
    +
    1124 
    +
    1125  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    +
    1126 
    +
    1127 private:
    +
    1128  XMLUnknown( const XMLUnknown& ); // not supported
    +
    1129  XMLUnknown& operator=( const XMLUnknown& ); // not supported
    +
    1130 };
    +
    1131 
    +
    1132 
    +
    1133 
    +
    1140 class TINYXML2_LIB XMLAttribute
    +
    1141 {
    +
    1142  friend class XMLElement;
    +
    1143 public:
    +
    1145  const char* Name() const;
    +
    1146 
    +
    1148  const char* Value() const;
    +
    1149 
    +
    1151  int GetLineNum() const { return _parseLineNum; }
    +
    1152 
    +
    1154  const XMLAttribute* Next() const {
    +
    1155  return _next;
    +
    1156  }
    +
    1157 
    +
    1162  int IntValue() const {
    +
    1163  int i = 0;
    +
    1164  QueryIntValue(&i);
    +
    1165  return i;
    +
    1166  }
    +
    1167 
    +
    1168  int64_t Int64Value() const {
    +
    1169  int64_t i = 0;
    +
    1170  QueryInt64Value(&i);
    +
    1171  return i;
    +
    1172  }
    +
    1173 
    +
    1174  uint64_t Unsigned64Value() const {
    +
    1175  uint64_t i = 0;
    +
    1176  QueryUnsigned64Value(&i);
    +
    1177  return i;
    +
    1178  }
    +
    1179 
    +
    1181  unsigned UnsignedValue() const {
    +
    1182  unsigned i=0;
    +
    1183  QueryUnsignedValue( &i );
    +
    1184  return i;
    +
    1185  }
    +
    1187  bool BoolValue() const {
    +
    1188  bool b=false;
    +
    1189  QueryBoolValue( &b );
    +
    1190  return b;
    +
    1191  }
    +
    1193  double DoubleValue() const {
    +
    1194  double d=0;
    +
    1195  QueryDoubleValue( &d );
    +
    1196  return d;
    +
    1197  }
    +
    1199  float FloatValue() const {
    +
    1200  float f=0;
    +
    1201  QueryFloatValue( &f );
    +
    1202  return f;
    +
    1203  }
    +
    1204 
    +
    1209  XMLError QueryIntValue( int* value ) const;
    +
    1211  XMLError QueryUnsignedValue( unsigned int* value ) const;
    +
    1213  XMLError QueryInt64Value(int64_t* value) const;
    +
    1215  XMLError QueryUnsigned64Value(uint64_t* value) const;
    +
    1217  XMLError QueryBoolValue( bool* value ) const;
    +
    1219  XMLError QueryDoubleValue( double* value ) const;
    +
    1221  XMLError QueryFloatValue( float* value ) const;
    +
    1222 
    +
    1224  void SetAttribute( const char* value );
    +
    1226  void SetAttribute( int value );
    +
    1228  void SetAttribute( unsigned value );
    +
    1230  void SetAttribute(int64_t value);
    +
    1232  void SetAttribute(uint64_t value);
    +
    1234  void SetAttribute( bool value );
    +
    1236  void SetAttribute( double value );
    +
    1238  void SetAttribute( float value );
    +
    1239 
    +
    1240 private:
    +
    1241  enum { BUF_SIZE = 200 };
    +
    1242 
    +
    1243  XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
    +
    1244  virtual ~XMLAttribute() {}
    +
    1245 
    +
    1246  XMLAttribute( const XMLAttribute& ); // not supported
    +
    1247  void operator=( const XMLAttribute& ); // not supported
    +
    1248  void SetName( const char* name );
    +
    1249 
    +
    1250  char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
    +
    1251 
    +
    1252  mutable StrPair _name;
    +
    1253  mutable StrPair _value;
    +
    1254  int _parseLineNum;
    +
    1255  XMLAttribute* _next;
    +
    1256  MemPool* _memPool;
    +
    1257 };
    +
    1258 
    +
    1259 
    +
    1264 class TINYXML2_LIB XMLElement : public XMLNode
    +
    1265 {
    +
    1266  friend class XMLDocument;
    +
    1267 public:
    +
    1269  const char* Name() const {
    +
    1270  return Value();
    +
    1271  }
    +
    1273  void SetName( const char* str, bool staticMem=false ) {
    +
    1274  SetValue( str, staticMem );
    +
    1275  }
    +
    1276 
    +
    1277  virtual XMLElement* ToElement() {
    +
    1278  return this;
    +
    1279  }
    +
    1280  virtual const XMLElement* ToElement() const {
    +
    1281  return this;
    +
    1282  }
    +
    1283  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    1284 
    +
    1308  const char* Attribute( const char* name, const char* value=0 ) const;
    +
    1309 
    +
    1316  int IntAttribute(const char* name, int defaultValue = 0) const;
    +
    1318  unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
    +
    1320  int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
    +
    1322  uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const;
    +
    1324  bool BoolAttribute(const char* name, bool defaultValue = false) const;
    +
    1326  double DoubleAttribute(const char* name, double defaultValue = 0) const;
    +
    1328  float FloatAttribute(const char* name, float defaultValue = 0) const;
    +
    1329 
    +
    1343  XMLError QueryIntAttribute( const char* name, int* value ) const {
    +
    1344  const XMLAttribute* a = FindAttribute( name );
    +
    1345  if ( !a ) {
    +
    1346  return XML_NO_ATTRIBUTE;
    +
    1347  }
    +
    1348  return a->QueryIntValue( value );
    +
    1349  }
    +
    1350 
    +
    1352  XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
    +
    1353  const XMLAttribute* a = FindAttribute( name );
    +
    1354  if ( !a ) {
    +
    1355  return XML_NO_ATTRIBUTE;
    +
    1356  }
    +
    1357  return a->QueryUnsignedValue( value );
    +
    1358  }
    +
    1359 
    +
    1361  XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
    +
    1362  const XMLAttribute* a = FindAttribute(name);
    +
    1363  if (!a) {
    +
    1364  return XML_NO_ATTRIBUTE;
    +
    1365  }
    +
    1366  return a->QueryInt64Value(value);
    +
    1367  }
    +
    1368 
    +
    1370  XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const {
    +
    1371  const XMLAttribute* a = FindAttribute(name);
    +
    1372  if(!a) {
    +
    1373  return XML_NO_ATTRIBUTE;
    +
    1374  }
    +
    1375  return a->QueryUnsigned64Value(value);
    +
    1376  }
    +
    1377 
    +
    1379  XMLError QueryBoolAttribute( const char* name, bool* value ) const {
    +
    1380  const XMLAttribute* a = FindAttribute( name );
    +
    1381  if ( !a ) {
    +
    1382  return XML_NO_ATTRIBUTE;
    +
    1383  }
    +
    1384  return a->QueryBoolValue( value );
    +
    1385  }
    +
    1387  XMLError QueryDoubleAttribute( const char* name, double* value ) const {
    +
    1388  const XMLAttribute* a = FindAttribute( name );
    +
    1389  if ( !a ) {
    +
    1390  return XML_NO_ATTRIBUTE;
    +
    1391  }
    +
    1392  return a->QueryDoubleValue( value );
    +
    1393  }
    +
    1395  XMLError QueryFloatAttribute( const char* name, float* value ) const {
    +
    1396  const XMLAttribute* a = FindAttribute( name );
    +
    1397  if ( !a ) {
    +
    1398  return XML_NO_ATTRIBUTE;
    +
    1399  }
    +
    1400  return a->QueryFloatValue( value );
    +
    1401  }
    +
    1402 
    +
    1404  XMLError QueryStringAttribute(const char* name, const char** value) const {
    +
    1405  const XMLAttribute* a = FindAttribute(name);
    +
    1406  if (!a) {
    +
    1407  return XML_NO_ATTRIBUTE;
    +
    1408  }
    +
    1409  *value = a->Value();
    +
    1410  return XML_SUCCESS;
    +
    1411  }
    +
    1412 
    +
    1413 
    +
    1414 
    +
    1432  XMLError QueryAttribute( const char* name, int* value ) const {
    +
    1433  return QueryIntAttribute( name, value );
    +
    1434  }
    +
    1435 
    +
    1436  XMLError QueryAttribute( const char* name, unsigned int* value ) const {
    +
    1437  return QueryUnsignedAttribute( name, value );
    +
    1438  }
    +
    1439 
    +
    1440  XMLError QueryAttribute(const char* name, int64_t* value) const {
    +
    1441  return QueryInt64Attribute(name, value);
    +
    1442  }
    +
    1443 
    +
    1444  XMLError QueryAttribute(const char* name, uint64_t* value) const {
    +
    1445  return QueryUnsigned64Attribute(name, value);
    +
    1446  }
    +
    1447 
    +
    1448  XMLError QueryAttribute( const char* name, bool* value ) const {
    +
    1449  return QueryBoolAttribute( name, value );
    +
    1450  }
    +
    1451 
    +
    1452  XMLError QueryAttribute( const char* name, double* value ) const {
    +
    1453  return QueryDoubleAttribute( name, value );
    +
    1454  }
    +
    1455 
    +
    1456  XMLError QueryAttribute( const char* name, float* value ) const {
    +
    1457  return QueryFloatAttribute( name, value );
    +
    1458  }
    +
    1459 
    +
    1460  XMLError QueryAttribute(const char* name, const char** value) const {
    +
    1461  return QueryStringAttribute(name, value);
    +
    1462  }
    +
    1463 
    +
    1465  void SetAttribute( const char* name, const char* value ) {
    +
    1466  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1467  a->SetAttribute( value );
    +
    1468  }
    +
    1470  void SetAttribute( const char* name, int value ) {
    +
    1471  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1472  a->SetAttribute( value );
    +
    1473  }
    +
    1475  void SetAttribute( const char* name, unsigned value ) {
    +
    1476  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1477  a->SetAttribute( value );
    +
    1478  }
    +
    1479 
    +
    1481  void SetAttribute(const char* name, int64_t value) {
    +
    1482  XMLAttribute* a = FindOrCreateAttribute(name);
    +
    1483  a->SetAttribute(value);
    +
    1484  }
    +
    1485 
    +
    1487  void SetAttribute(const char* name, uint64_t value) {
    +
    1488  XMLAttribute* a = FindOrCreateAttribute(name);
    +
    1489  a->SetAttribute(value);
    +
    1490  }
    +
    1491 
    +
    1493  void SetAttribute( const char* name, bool value ) {
    +
    1494  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1495  a->SetAttribute( value );
    +
    1496  }
    +
    1498  void SetAttribute( const char* name, double value ) {
    +
    1499  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1500  a->SetAttribute( value );
    +
    1501  }
    +
    1503  void SetAttribute( const char* name, float value ) {
    +
    1504  XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1505  a->SetAttribute( value );
    +
    1506  }
    +
    1507 
    +
    1511  void DeleteAttribute( const char* name );
    +
    1512 
    +
    1514  const XMLAttribute* FirstAttribute() const {
    +
    1515  return _rootAttribute;
    +
    1516  }
    +
    1518  const XMLAttribute* FindAttribute( const char* name ) const;
    +
    1519 
    +
    1548  const char* GetText() const;
    +
    1549 
    +
    1584  void SetText( const char* inText );
    +
    1586  void SetText( int value );
    +
    1588  void SetText( unsigned value );
    +
    1590  void SetText(int64_t value);
    +
    1592  void SetText(uint64_t value);
    +
    1594  void SetText( bool value );
    +
    1596  void SetText( double value );
    +
    1598  void SetText( float value );
    +
    1599 
    +
    1626  XMLError QueryIntText( int* ival ) const;
    +
    1628  XMLError QueryUnsignedText( unsigned* uval ) const;
    +
    1630  XMLError QueryInt64Text(int64_t* uval) const;
    +
    1632  XMLError QueryUnsigned64Text(uint64_t* uval) const;
    +
    1634  XMLError QueryBoolText( bool* bval ) const;
    +
    1636  XMLError QueryDoubleText( double* dval ) const;
    +
    1638  XMLError QueryFloatText( float* fval ) const;
    +
    1639 
    +
    1640  int IntText(int defaultValue = 0) const;
    +
    1641 
    +
    1643  unsigned UnsignedText(unsigned defaultValue = 0) const;
    +
    1645  int64_t Int64Text(int64_t defaultValue = 0) const;
    +
    1647  uint64_t Unsigned64Text(uint64_t defaultValue = 0) const;
    +
    1649  bool BoolText(bool defaultValue = false) const;
    +
    1651  double DoubleText(double defaultValue = 0) const;
    +
    1653  float FloatText(float defaultValue = 0) const;
    +
    1654 
    +
    1659  XMLElement* InsertNewChildElement(const char* name);
    +
    1661  XMLComment* InsertNewComment(const char* comment);
    +
    1663  XMLText* InsertNewText(const char* text);
    + +
    1667  XMLUnknown* InsertNewUnknown(const char* text);
    +
    1668 
    +
    1669 
    +
    1670  // internal:
    +
    1671  enum ElementClosingType {
    +
    1672  OPEN, // <foo>
    +
    1673  CLOSED, // <foo/>
    +
    1674  CLOSING // </foo>
    +
    1675  };
    +
    1676  ElementClosingType ClosingType() const {
    +
    1677  return _closingType;
    +
    1678  }
    +
    1679  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    +
    1680  virtual bool ShallowEqual( const XMLNode* compare ) const;
    +
    1681 
    +
    1682 protected:
    +
    1683  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    +
    1684 
    +
    1685 private:
    +
    1686  XMLElement( XMLDocument* doc );
    +
    1687  virtual ~XMLElement();
    +
    1688  XMLElement( const XMLElement& ); // not supported
    +
    1689  void operator=( const XMLElement& ); // not supported
    +
    1690 
    +
    1691  XMLAttribute* FindOrCreateAttribute( const char* name );
    +
    1692  char* ParseAttributes( char* p, int* curLineNumPtr );
    +
    1693  static void DeleteAttribute( XMLAttribute* attribute );
    +
    1694  XMLAttribute* CreateAttribute();
    +
    1695 
    +
    1696  enum { BUF_SIZE = 200 };
    +
    1697  ElementClosingType _closingType;
    +
    1698  // The attribute list is ordered; there is no 'lastAttribute'
    +
    1699  // because the list needs to be scanned for dupes before adding
    +
    1700  // a new attribute.
    +
    1701  XMLAttribute* _rootAttribute;
    +
    1702 };
    +
    1703 
    +
    1704 
    +
    1705 enum Whitespace {
    +
    1706  PRESERVE_WHITESPACE,
    +
    1707  COLLAPSE_WHITESPACE
    +
    1708 };
    +
    1709 
    +
    1710 
    +
    1716 class TINYXML2_LIB XMLDocument : public XMLNode
    +
    1717 {
    +
    1718  friend class XMLElement;
    +
    1719  // Gives access to SetError and Push/PopDepth, but over-access for everything else.
    +
    1720  // Wishing C++ had "internal" scope.
    +
    1721  friend class XMLNode;
    +
    1722  friend class XMLText;
    +
    1723  friend class XMLComment;
    +
    1724  friend class XMLDeclaration;
    +
    1725  friend class XMLUnknown;
    +
    1726 public:
    +
    1728  XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
    +
    1729  ~XMLDocument();
    +
    1730 
    + +
    1732  TIXMLASSERT( this == _document );
    +
    1733  return this;
    +
    1734  }
    +
    1735  virtual const XMLDocument* ToDocument() const {
    +
    1736  TIXMLASSERT( this == _document );
    +
    1737  return this;
    +
    1738  }
    +
    1739 
    +
    1750  XMLError Parse( const char* xml, size_t nBytes=static_cast<size_t>(-1) );
    +
    1751 
    +
    1757  XMLError LoadFile( const char* filename );
    +
    1758 
    +
    1770  XMLError LoadFile( FILE* );
    +
    1771 
    +
    1777  XMLError SaveFile( const char* filename, bool compact = false );
    +
    1778 
    +
    1786  XMLError SaveFile( FILE* fp, bool compact = false );
    +
    1787 
    +
    1788  bool ProcessEntities() const {
    +
    1789  return _processEntities;
    +
    1790  }
    +
    1791  Whitespace WhitespaceMode() const {
    +
    1792  return _whitespaceMode;
    +
    1793  }
    +
    1794 
    +
    1798  bool HasBOM() const {
    +
    1799  return _writeBOM;
    +
    1800  }
    +
    1803  void SetBOM( bool useBOM ) {
    +
    1804  _writeBOM = useBOM;
    +
    1805  }
    +
    1806 
    + +
    1811  return FirstChildElement();
    +
    1812  }
    +
    1813  const XMLElement* RootElement() const {
    +
    1814  return FirstChildElement();
    +
    1815  }
    +
    1816 
    +
    1831  void Print( XMLPrinter* streamer=0 ) const;
    +
    1832  virtual bool Accept( XMLVisitor* visitor ) const;
    +
    1833 
    +
    1839  XMLElement* NewElement( const char* name );
    +
    1845  XMLComment* NewComment( const char* comment );
    +
    1851  XMLText* NewText( const char* text );
    +
    1863  XMLDeclaration* NewDeclaration( const char* text=0 );
    +
    1869  XMLUnknown* NewUnknown( const char* text );
    +
    1870 
    +
    1875  void DeleteNode( XMLNode* node );
    +
    1876 
    +
    1878  void ClearError();
    +
    1879 
    +
    1881  bool Error() const {
    +
    1882  return _errorID != XML_SUCCESS;
    +
    1883  }
    +
    1885  XMLError ErrorID() const {
    +
    1886  return _errorID;
    +
    1887  }
    +
    1888  const char* ErrorName() const;
    +
    1889  static const char* ErrorIDToName(XMLError errorID);
    +
    1890 
    +
    1894  const char* ErrorStr() const;
    +
    1895 
    +
    1897  void PrintError() const;
    +
    1898 
    +
    1900  int ErrorLineNum() const
    +
    1901  {
    +
    1902  return _errorLineNum;
    +
    1903  }
    +
    1904 
    +
    1906  void Clear();
    +
    1907 
    +
    1915  void DeepCopy(XMLDocument* target) const;
    +
    1916 
    +
    1917  // internal
    +
    1918  char* Identify( char* p, XMLNode** node );
    +
    1919 
    +
    1920  // internal
    +
    1921  void MarkInUse(const XMLNode* const);
    +
    1922 
    +
    1923  virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const {
    +
    1924  return 0;
    +
    1925  }
    +
    1926  virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const {
    +
    1927  return false;
    +
    1928  }
    +
    1929 
    +
    1930 private:
    +
    1931  XMLDocument( const XMLDocument& ); // not supported
    +
    1932  void operator=( const XMLDocument& ); // not supported
    +
    1933 
    +
    1934  bool _writeBOM;
    +
    1935  bool _processEntities;
    +
    1936  XMLError _errorID;
    +
    1937  Whitespace _whitespaceMode;
    +
    1938  mutable StrPair _errorStr;
    +
    1939  int _errorLineNum;
    +
    1940  char* _charBuffer;
    +
    1941  int _parseCurLineNum;
    +
    1942  int _parsingDepth;
    +
    1943  // Memory tracking does add some overhead.
    +
    1944  // However, the code assumes that you don't
    +
    1945  // have a bunch of unlinked nodes around.
    +
    1946  // Therefore it takes less memory to track
    +
    1947  // in the document vs. a linked list in the XMLNode,
    +
    1948  // and the performance is the same.
    +
    1949  DynArray<XMLNode*, 10> _unlinked;
    +
    1950 
    +
    1951  MemPoolT< sizeof(XMLElement) > _elementPool;
    +
    1952  MemPoolT< sizeof(XMLAttribute) > _attributePool;
    +
    1953  MemPoolT< sizeof(XMLText) > _textPool;
    +
    1954  MemPoolT< sizeof(XMLComment) > _commentPool;
    +
    1955 
    +
    1956  static const char* _errorNames[XML_ERROR_COUNT];
    +
    1957 
    +
    1958  void Parse();
    +
    1959 
    +
    1960  void SetError( XMLError error, int lineNum, const char* format, ... );
    +
    1961 
    +
    1962  // Something of an obvious security hole, once it was discovered.
    +
    1963  // Either an ill-formed XML or an excessively deep one can overflow
    +
    1964  // the stack. Track stack depth, and error out if needed.
    +
    1965  class DepthTracker {
    +
    1966  public:
    +
    1967  explicit DepthTracker(XMLDocument * document) {
    +
    1968  this->_document = document;
    +
    1969  document->PushDepth();
    +
    1970  }
    +
    1971  ~DepthTracker() {
    +
    1972  _document->PopDepth();
    +
    1973  }
    +
    1974  private:
    +
    1975  XMLDocument * _document;
    +
    1976  };
    +
    1977  void PushDepth();
    +
    1978  void PopDepth();
    +
    1979 
    +
    1980  template<class NodeType, int PoolElementSize>
    +
    1981  NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
    +
    1982 };
    +
    1983 
    +
    1984 template<class NodeType, int PoolElementSize>
    +
    1985 inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
    +
    1986 {
    +
    1987  TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
    +
    1988  TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
    +
    1989  NodeType* returnNode = new (pool.Alloc()) NodeType( this );
    +
    1990  TIXMLASSERT( returnNode );
    +
    1991  returnNode->_memPool = &pool;
    +
    1992 
    +
    1993  _unlinked.Push(returnNode);
    +
    1994  return returnNode;
    +
    1995 }
    +
    1996 
    +
    2052 class TINYXML2_LIB XMLHandle
    +
    2053 {
    +
    2054 public:
    +
    2056  explicit XMLHandle( XMLNode* node ) : _node( node ) {
    +
    2057  }
    +
    2059  explicit XMLHandle( XMLNode& node ) : _node( &node ) {
    +
    2060  }
    +
    2062  XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
    +
    2063  }
    +
    2065  XMLHandle& operator=( const XMLHandle& ref ) {
    +
    2066  _node = ref._node;
    +
    2067  return *this;
    +
    2068  }
    +
    2069 
    + +
    2072  return XMLHandle( _node ? _node->FirstChild() : 0 );
    +
    2073  }
    +
    2075  XMLHandle FirstChildElement( const char* name = 0 ) {
    +
    2076  return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
    +
    2077  }
    + +
    2080  return XMLHandle( _node ? _node->LastChild() : 0 );
    +
    2081  }
    +
    2083  XMLHandle LastChildElement( const char* name = 0 ) {
    +
    2084  return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
    +
    2085  }
    + +
    2088  return XMLHandle( _node ? _node->PreviousSibling() : 0 );
    +
    2089  }
    +
    2091  XMLHandle PreviousSiblingElement( const char* name = 0 ) {
    +
    2092  return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    +
    2093  }
    + +
    2096  return XMLHandle( _node ? _node->NextSibling() : 0 );
    +
    2097  }
    +
    2099  XMLHandle NextSiblingElement( const char* name = 0 ) {
    +
    2100  return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    +
    2101  }
    +
    2102 
    + +
    2105  return _node;
    +
    2106  }
    + +
    2109  return ( _node ? _node->ToElement() : 0 );
    +
    2110  }
    + +
    2113  return ( _node ? _node->ToText() : 0 );
    +
    2114  }
    + +
    2117  return ( _node ? _node->ToUnknown() : 0 );
    +
    2118  }
    + +
    2121  return ( _node ? _node->ToDeclaration() : 0 );
    +
    2122  }
    +
    2123 
    +
    2124 private:
    +
    2125  XMLNode* _node;
    +
    2126 };
    +
    2127 
    +
    2128 
    +
    2133 class TINYXML2_LIB XMLConstHandle
    +
    2134 {
    +
    2135 public:
    +
    2136  explicit XMLConstHandle( const XMLNode* node ) : _node( node ) {
    +
    2137  }
    +
    2138  explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) {
    +
    2139  }
    +
    2140  XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
    +
    2141  }
    +
    2142 
    +
    2143  XMLConstHandle& operator=( const XMLConstHandle& ref ) {
    +
    2144  _node = ref._node;
    +
    2145  return *this;
    +
    2146  }
    +
    2147 
    +
    2148  const XMLConstHandle FirstChild() const {
    +
    2149  return XMLConstHandle( _node ? _node->FirstChild() : 0 );
    +
    2150  }
    +
    2151  const XMLConstHandle FirstChildElement( const char* name = 0 ) const {
    +
    2152  return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
    +
    2153  }
    +
    2154  const XMLConstHandle LastChild() const {
    +
    2155  return XMLConstHandle( _node ? _node->LastChild() : 0 );
    +
    2156  }
    +
    2157  const XMLConstHandle LastChildElement( const char* name = 0 ) const {
    +
    2158  return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
    +
    2159  }
    +
    2160  const XMLConstHandle PreviousSibling() const {
    +
    2161  return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
    +
    2162  }
    +
    2163  const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const {
    +
    2164  return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    +
    2165  }
    +
    2166  const XMLConstHandle NextSibling() const {
    +
    2167  return XMLConstHandle( _node ? _node->NextSibling() : 0 );
    +
    2168  }
    +
    2169  const XMLConstHandle NextSiblingElement( const char* name = 0 ) const {
    +
    2170  return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    +
    2171  }
    +
    2172 
    +
    2173 
    +
    2174  const XMLNode* ToNode() const {
    +
    2175  return _node;
    +
    2176  }
    +
    2177  const XMLElement* ToElement() const {
    +
    2178  return ( _node ? _node->ToElement() : 0 );
    +
    2179  }
    +
    2180  const XMLText* ToText() const {
    +
    2181  return ( _node ? _node->ToText() : 0 );
    +
    2182  }
    +
    2183  const XMLUnknown* ToUnknown() const {
    +
    2184  return ( _node ? _node->ToUnknown() : 0 );
    +
    2185  }
    +
    2186  const XMLDeclaration* ToDeclaration() const {
    +
    2187  return ( _node ? _node->ToDeclaration() : 0 );
    +
    2188  }
    +
    2189 
    +
    2190 private:
    +
    2191  const XMLNode* _node;
    +
    2192 };
    +
    2193 
    +
    2194 
    +
    2237 class TINYXML2_LIB XMLPrinter : public XMLVisitor
    +
    2238 {
    +
    2239 public:
    +
    2246  XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
    +
    2247  virtual ~XMLPrinter() {}
    +
    2248 
    +
    2250  void PushHeader( bool writeBOM, bool writeDeclaration );
    +
    2254  void OpenElement( const char* name, bool compactMode=false );
    +
    2256  void PushAttribute( const char* name, const char* value );
    +
    2257  void PushAttribute( const char* name, int value );
    +
    2258  void PushAttribute( const char* name, unsigned value );
    +
    2259  void PushAttribute( const char* name, int64_t value );
    +
    2260  void PushAttribute( const char* name, uint64_t value );
    +
    2261  void PushAttribute( const char* name, bool value );
    +
    2262  void PushAttribute( const char* name, double value );
    +
    2264  virtual void CloseElement( bool compactMode=false );
    +
    2265 
    +
    2267  void PushText( const char* text, bool cdata=false );
    +
    2269  void PushText( int value );
    +
    2271  void PushText( unsigned value );
    +
    2273  void PushText( int64_t value );
    +
    2275  void PushText( uint64_t value );
    +
    2277  void PushText( bool value );
    +
    2279  void PushText( float value );
    +
    2281  void PushText( double value );
    +
    2282 
    +
    2284  void PushComment( const char* comment );
    +
    2285 
    +
    2286  void PushDeclaration( const char* value );
    +
    2287  void PushUnknown( const char* value );
    +
    2288 
    +
    2289  virtual bool VisitEnter( const XMLDocument& /*doc*/ );
    +
    2290  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
    +
    2291  return true;
    +
    2292  }
    +
    2293 
    +
    2294  virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
    +
    2295  virtual bool VisitExit( const XMLElement& element );
    +
    2296 
    +
    2297  virtual bool Visit( const XMLText& text );
    +
    2298  virtual bool Visit( const XMLComment& comment );
    +
    2299  virtual bool Visit( const XMLDeclaration& declaration );
    +
    2300  virtual bool Visit( const XMLUnknown& unknown );
    +
    2301 
    +
    2306  const char* CStr() const {
    +
    2307  return _buffer.Mem();
    +
    2308  }
    +
    2314  int CStrSize() const {
    +
    2315  return _buffer.Size();
    +
    2316  }
    +
    2321  void ClearBuffer( bool resetToFirstElement = true ) {
    +
    2322  _buffer.Clear();
    +
    2323  _buffer.Push(0);
    +
    2324  _firstElement = resetToFirstElement;
    +
    2325  }
    +
    2326 
    +
    2327 protected:
    +
    2328  virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
    +
    2329 
    +
    2333  virtual void PrintSpace( int depth );
    +
    2334  virtual void Print( const char* format, ... );
    +
    2335  virtual void Write( const char* data, size_t size );
    +
    2336  virtual void Putc( char ch );
    +
    2337 
    +
    2338  inline void Write(const char* data) { Write(data, strlen(data)); }
    +
    2339 
    +
    2340  void SealElementIfJustOpened();
    +
    2341  bool _elementJustOpened;
    +
    2342  DynArray< const char*, 10 > _stack;
    +
    2343 
    +
    2344 private:
    +
    2349  void PrepareForNewNode( bool compactMode );
    +
    2350  void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
    +
    2351 
    +
    2352  bool _firstElement;
    +
    2353  FILE* _fp;
    +
    2354  int _depth;
    +
    2355  int _textDepth;
    +
    2356  bool _processEntities;
    +
    2357  bool _compactMode;
    +
    2358 
    +
    2359  enum {
    +
    2360  ENTITY_RANGE = 64,
    +
    2361  BUF_SIZE = 200
    +
    2362  };
    +
    2363  bool _entityFlag[ENTITY_RANGE];
    +
    2364  bool _restrictedEntityFlag[ENTITY_RANGE];
    +
    2365 
    +
    2366  DynArray< char, 20 > _buffer;
    +
    2367 
    +
    2368  // Prohibit cloning, intentionally not implemented
    +
    2369  XMLPrinter( const XMLPrinter& );
    +
    2370  XMLPrinter& operator=( const XMLPrinter& );
    +
    2371 };
    +
    2372 
    +
    2373 
    +
    2374 } // tinyxml2
    +
    2375 
    +
    2376 #if defined(_MSC_VER)
    +
    2377 # pragma warning(pop)
    +
    2378 #endif
    +
    2379 
    +
    2380 #endif // TINYXML2_INCLUDED
    +
    Definition: tinyxml2.h:1141
    +
    int GetLineNum() const
    Gets the line number the attribute is in, if the document was parsed from a file.
    Definition: tinyxml2.h:1151
    +
    XMLError QueryFloatValue(float *value) const
    See QueryIntValue.
    +
    unsigned UnsignedValue() const
    Query as an unsigned integer. See IntValue()
    Definition: tinyxml2.h:1181
    +
    void SetAttribute(uint64_t value)
    Set the attribute to value.
    +
    const char * Value() const
    The value of the attribute.
    +
    float FloatValue() const
    Query as a float. See IntValue()
    Definition: tinyxml2.h:1199
    +
    XMLError QueryDoubleValue(double *value) const
    See QueryIntValue.
    +
    void SetAttribute(const char *value)
    Set the attribute to a string value.
    +
    XMLError QueryUnsignedValue(unsigned int *value) const
    See QueryIntValue.
    +
    double DoubleValue() const
    Query as a double. See IntValue()
    Definition: tinyxml2.h:1193
    +
    XMLError QueryInt64Value(int64_t *value) const
    See QueryIntValue.
    +
    XMLError QueryBoolValue(bool *value) const
    See QueryIntValue.
    +
    XMLError QueryIntValue(int *value) const
    +
    void SetAttribute(int64_t value)
    Set the attribute to value.
    +
    bool BoolValue() const
    Query as a boolean. See IntValue()
    Definition: tinyxml2.h:1187
    +
    void SetAttribute(double value)
    Set the attribute to value.
    +
    void SetAttribute(bool value)
    Set the attribute to value.
    +
    const char * Name() const
    The name of the attribute.
    +
    void SetAttribute(int value)
    Set the attribute to value.
    +
    int IntValue() const
    Definition: tinyxml2.h:1162
    +
    void SetAttribute(unsigned value)
    Set the attribute to value.
    +
    void SetAttribute(float value)
    Set the attribute to value.
    +
    const XMLAttribute * Next() const
    The next attribute in the list.
    Definition: tinyxml2.h:1154
    +
    XMLError QueryUnsigned64Value(uint64_t *value) const
    See QueryIntValue.
    +
    Definition: tinyxml2.h:1032
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    virtual bool ShallowEqual(const XMLNode *compare) const
    +
    virtual XMLComment * ToComment()
    Safely cast to a Comment, or null.
    Definition: tinyxml2.h:1035
    +
    Definition: tinyxml2.h:2134
    +
    Definition: tinyxml2.h:1071
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    virtual XMLDeclaration * ToDeclaration()
    Safely cast to a Declaration, or null.
    Definition: tinyxml2.h:1074
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    virtual bool ShallowEqual(const XMLNode *compare) const
    +
    Definition: tinyxml2.h:1717
    +
    void SetBOM(bool useBOM)
    Definition: tinyxml2.h:1803
    +
    void PrintError() const
    A (trivial) utility function that prints the ErrorStr() to stdout.
    +
    XMLError LoadFile(const char *filename)
    +
    bool HasBOM() const
    Definition: tinyxml2.h:1798
    +
    bool Error() const
    Return true if there was an error parsing the document.
    Definition: tinyxml2.h:1881
    +
    virtual XMLDocument * ToDocument()
    Safely cast to a Document, or null.
    Definition: tinyxml2.h:1731
    +
    void ClearError()
    Clears the error flags.
    +
    XMLUnknown * NewUnknown(const char *text)
    +
    int ErrorLineNum() const
    Return the line where the error occurred, or zero if unknown.
    Definition: tinyxml2.h:1900
    +
    XMLDocument(bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)
    constructor
    +
    XMLError LoadFile(FILE *)
    +
    void Clear()
    Clear the document, resetting it to the initial state.
    +
    virtual bool ShallowEqual(const XMLNode *) const
    Definition: tinyxml2.h:1926
    +
    XMLError SaveFile(const char *filename, bool compact=false)
    +
    void Print(XMLPrinter *streamer=0) const
    +
    XMLElement * NewElement(const char *name)
    +
    XMLError SaveFile(FILE *fp, bool compact=false)
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    virtual XMLNode * ShallowClone(XMLDocument *) const
    Definition: tinyxml2.h:1923
    +
    XMLText * NewText(const char *text)
    +
    void DeleteNode(XMLNode *node)
    +
    XMLElement * RootElement()
    Definition: tinyxml2.h:1810
    +
    const char * ErrorStr() const
    +
    XMLComment * NewComment(const char *comment)
    +
    XMLDeclaration * NewDeclaration(const char *text=0)
    +
    XMLError Parse(const char *xml, size_t nBytes=static_cast< size_t >(-1))
    +
    void DeepCopy(XMLDocument *target) const
    +
    XMLError ErrorID() const
    Return the errorID.
    Definition: tinyxml2.h:1885
    +
    Definition: tinyxml2.h:1265
    +
    double DoubleAttribute(const char *name, double defaultValue=0) const
    See IntAttribute()
    +
    void SetAttribute(const char *name, const char *value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1465
    +
    XMLError QueryInt64Text(int64_t *uval) const
    See QueryIntText()
    +
    XMLError QueryUnsigned64Attribute(const char *name, uint64_t *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1370
    +
    XMLError QueryBoolAttribute(const char *name, bool *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1379
    +
    XMLError QueryUnsignedText(unsigned *uval) const
    See QueryIntText()
    +
    XMLText * InsertNewText(const char *text)
    See InsertNewChildElement()
    +
    void SetText(const char *inText)
    +
    uint64_t Unsigned64Attribute(const char *name, uint64_t defaultValue=0) const
    See IntAttribute()
    +
    void SetAttribute(const char *name, double value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1498
    +
    XMLError QueryUnsignedAttribute(const char *name, unsigned int *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1352
    +
    const XMLAttribute * FindAttribute(const char *name) const
    Query a specific attribute in the list.
    +
    const XMLAttribute * FirstAttribute() const
    Return the first attribute in the list.
    Definition: tinyxml2.h:1514
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    XMLError QueryBoolText(bool *bval) const
    See QueryIntText()
    +
    float FloatText(float defaultValue=0) const
    See QueryIntText()
    +
    unsigned UnsignedText(unsigned defaultValue=0) const
    See QueryIntText()
    +
    void SetText(float value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    bool BoolAttribute(const char *name, bool defaultValue=false) const
    See IntAttribute()
    +
    void SetAttribute(const char *name, float value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1503
    +
    XMLError QueryAttribute(const char *name, int *value) const
    Definition: tinyxml2.h:1432
    +
    XMLError QueryDoubleAttribute(const char *name, double *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1387
    +
    const char * Name() const
    Get the name of an element (which is the Value() of the node.)
    Definition: tinyxml2.h:1269
    +
    int64_t Int64Attribute(const char *name, int64_t defaultValue=0) const
    See IntAttribute()
    +
    void SetText(double value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    XMLError QueryDoubleText(double *dval) const
    See QueryIntText()
    +
    bool BoolText(bool defaultValue=false) const
    See QueryIntText()
    +
    const char * GetText() const
    +
    void SetText(uint64_t value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    const char * Attribute(const char *name, const char *value=0) const
    +
    void SetText(int64_t value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    void SetText(unsigned value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    XMLError QueryInt64Attribute(const char *name, int64_t *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1361
    +
    double DoubleText(double defaultValue=0) const
    See QueryIntText()
    +
    XMLError QueryIntAttribute(const char *name, int *value) const
    Definition: tinyxml2.h:1343
    +
    XMLError QueryIntText(int *ival) const
    +
    int IntAttribute(const char *name, int defaultValue=0) const
    +
    void SetName(const char *str, bool staticMem=false)
    Set the name of the element.
    Definition: tinyxml2.h:1273
    +
    void SetAttribute(const char *name, bool value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1493
    +
    int64_t Int64Text(int64_t defaultValue=0) const
    See QueryIntText()
    +
    void SetAttribute(const char *name, int value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1470
    +
    void SetAttribute(const char *name, int64_t value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1481
    +
    float FloatAttribute(const char *name, float defaultValue=0) const
    See IntAttribute()
    +
    XMLElement * InsertNewChildElement(const char *name)
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    XMLError QueryUnsigned64Text(uint64_t *uval) const
    See QueryIntText()
    +
    XMLUnknown * InsertNewUnknown(const char *text)
    See InsertNewChildElement()
    +
    XMLError QueryFloatAttribute(const char *name, float *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1395
    +
    void SetAttribute(const char *name, uint64_t value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1487
    +
    virtual bool ShallowEqual(const XMLNode *compare) const
    +
    virtual XMLElement * ToElement()
    Safely cast to an Element, or null.
    Definition: tinyxml2.h:1277
    +
    XMLError QueryStringAttribute(const char *name, const char **value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1404
    +
    XMLDeclaration * InsertNewDeclaration(const char *text)
    See InsertNewChildElement()
    +
    void SetAttribute(const char *name, unsigned value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1475
    +
    void SetText(bool value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    XMLComment * InsertNewComment(const char *comment)
    See InsertNewChildElement()
    +
    void SetText(int value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    +
    void DeleteAttribute(const char *name)
    +
    uint64_t Unsigned64Text(uint64_t defaultValue=0) const
    See QueryIntText()
    +
    XMLError QueryFloatText(float *fval) const
    See QueryIntText()
    +
    unsigned UnsignedAttribute(const char *name, unsigned defaultValue=0) const
    See IntAttribute()
    +
    Definition: tinyxml2.h:2053
    +
    XMLNode * ToNode()
    Safe cast to XMLNode. This can return null.
    Definition: tinyxml2.h:2104
    +
    XMLDeclaration * ToDeclaration()
    Safe cast to XMLDeclaration. This can return null.
    Definition: tinyxml2.h:2120
    +
    XMLHandle PreviousSibling()
    Get the previous sibling of this handle.
    Definition: tinyxml2.h:2087
    +
    XMLHandle LastChildElement(const char *name=0)
    Get the last child element of this handle.
    Definition: tinyxml2.h:2083
    +
    XMLHandle FirstChild()
    Get the first child of this handle.
    Definition: tinyxml2.h:2071
    +
    XMLElement * ToElement()
    Safe cast to XMLElement. This can return null.
    Definition: tinyxml2.h:2108
    +
    XMLText * ToText()
    Safe cast to XMLText. This can return null.
    Definition: tinyxml2.h:2112
    +
    XMLHandle FirstChildElement(const char *name=0)
    Get the first child element of this handle.
    Definition: tinyxml2.h:2075
    +
    XMLHandle & operator=(const XMLHandle &ref)
    Assignment.
    Definition: tinyxml2.h:2065
    +
    XMLHandle PreviousSiblingElement(const char *name=0)
    Get the previous sibling element of this handle.
    Definition: tinyxml2.h:2091
    +
    XMLHandle(XMLNode *node)
    Create a handle from any node (at any depth of the tree.) This can be a null pointer.
    Definition: tinyxml2.h:2056
    +
    XMLHandle LastChild()
    Get the last child of this handle.
    Definition: tinyxml2.h:2079
    +
    XMLHandle(XMLNode &node)
    Create a handle from a node.
    Definition: tinyxml2.h:2059
    +
    XMLUnknown * ToUnknown()
    Safe cast to XMLUnknown. This can return null.
    Definition: tinyxml2.h:2116
    +
    XMLHandle NextSibling()
    Get the next sibling of this handle.
    Definition: tinyxml2.h:2095
    +
    XMLHandle NextSiblingElement(const char *name=0)
    Get the next sibling element of this handle.
    Definition: tinyxml2.h:2099
    +
    XMLHandle(const XMLHandle &ref)
    Copy constructor.
    Definition: tinyxml2.h:2062
    +
    Definition: tinyxml2.h:675
    +
    void SetUserData(void *userData)
    Definition: tinyxml2.h:939
    + +
    void SetValue(const char *val, bool staticMem=false)
    +
    const XMLElement * NextSiblingElement(const char *name=0) const
    Get the next (right) sibling element of this node, with an optionally supplied name.
    +
    const XMLElement * LastChildElement(const char *name=0) const
    +
    virtual XMLDeclaration * ToDeclaration()
    Safely cast to a Declaration, or null.
    Definition: tinyxml2.h:708
    +
    const XMLElement * FirstChildElement(const char *name=0) const
    +
    const XMLDocument * GetDocument() const
    Get the XMLDocument that owns this XMLNode.
    Definition: tinyxml2.h:681
    +
    void DeleteChild(XMLNode *node)
    +
    virtual XMLText * ToText()
    Safely cast to Text, or null.
    Definition: tinyxml2.h:696
    +
    XMLNode * DeepClone(XMLDocument *target) const
    +
    const char * Value() const
    +
    const XMLNode * NextSibling() const
    Get the next (right) sibling node of this node.
    Definition: tinyxml2.h:821
    +
    virtual bool ShallowEqual(const XMLNode *compare) const =0
    +
    void * GetUserData() const
    Definition: tinyxml2.h:946
    +
    virtual bool Accept(XMLVisitor *visitor) const =0
    +
    virtual XMLDocument * ToDocument()
    Safely cast to a Document, or null.
    Definition: tinyxml2.h:704
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const =0
    +
    XMLNode * InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)
    +
    virtual XMLUnknown * ToUnknown()
    Safely cast to an Unknown, or null.
    Definition: tinyxml2.h:712
    +
    const XMLElement * PreviousSiblingElement(const char *name=0) const
    Get the previous (left) sibling element of this node, with an optionally supplied name.
    +
    XMLNode * InsertFirstChild(XMLNode *addThis)
    +
    int GetLineNum() const
    Gets the line number the node is in, if the document was parsed from a file.
    Definition: tinyxml2.h:752
    +
    const XMLNode * LastChild() const
    Get the last child node, or null if none exists.
    Definition: tinyxml2.h:787
    +
    virtual XMLElement * ToElement()
    Safely cast to an Element, or null.
    Definition: tinyxml2.h:692
    +
    const XMLNode * PreviousSibling() const
    Get the previous (left) sibling node of this node.
    Definition: tinyxml2.h:805
    +
    bool NoChildren() const
    Returns true if this node has no children.
    Definition: tinyxml2.h:764
    +
    const XMLNode * Parent() const
    Get the parent of this node on the DOM.
    Definition: tinyxml2.h:755
    +
    const XMLNode * FirstChild() const
    Get the first child node, or null if none exists.
    Definition: tinyxml2.h:769
    +
    XMLNode * InsertEndChild(XMLNode *addThis)
    +
    XMLDocument * GetDocument()
    Get the XMLDocument that owns this XMLNode.
    Definition: tinyxml2.h:686
    +
    virtual XMLComment * ToComment()
    Safely cast to a Comment, or null.
    Definition: tinyxml2.h:700
    +
    Definition: tinyxml2.h:2238
    +
    virtual void PrintSpace(int depth)
    +
    virtual bool VisitExit(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:2290
    +
    void PushHeader(bool writeBOM, bool writeDeclaration)
    +
    const char * CStr() const
    Definition: tinyxml2.h:2306
    +
    void PushText(const char *text, bool cdata=false)
    Add a text node.
    +
    void PushText(float value)
    Add a text node from a float.
    +
    void OpenElement(const char *name, bool compactMode=false)
    +
    virtual bool Visit(const XMLText &text)
    Visit a text node.
    +
    virtual bool VisitEnter(const XMLElement &element, const XMLAttribute *attribute)
    Visit an element.
    +
    int CStrSize() const
    Definition: tinyxml2.h:2314
    +
    void PushText(int value)
    Add a text node from an integer.
    +
    virtual bool Visit(const XMLComment &comment)
    Visit a comment node.
    +
    void PushText(bool value)
    Add a text node from a bool.
    +
    void PushText(uint64_t value)
    Add a text node from an unsigned 64bit integer.
    +
    void PushText(unsigned value)
    Add a text node from an unsigned.
    +
    void ClearBuffer(bool resetToFirstElement=true)
    Definition: tinyxml2.h:2321
    +
    void PushText(int64_t value)
    Add a text node from a signed 64bit integer.
    +
    void PushAttribute(const char *name, const char *value)
    If streaming, add an attribute to an open element.
    +
    virtual bool Visit(const XMLDeclaration &declaration)
    Visit a declaration.
    +
    virtual bool Visit(const XMLUnknown &unknown)
    Visit an unknown node.
    +
    XMLPrinter(FILE *file=0, bool compact=false, int depth=0)
    +
    void PushText(double value)
    Add a text node from a double.
    +
    virtual void CloseElement(bool compactMode=false)
    If streaming, close the Element.
    +
    virtual bool VisitEnter(const XMLDocument &)
    Visit a document.
    +
    virtual bool VisitExit(const XMLElement &element)
    Visit an element.
    +
    void PushComment(const char *comment)
    Add a comment.
    +
    Definition: tinyxml2.h:992
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    virtual XMLText * ToText()
    Safely cast to Text, or null.
    Definition: tinyxml2.h:997
    +
    bool CData() const
    Returns true if this is a CDATA text element.
    Definition: tinyxml2.h:1009
    +
    void SetCData(bool isCData)
    Declare whether this should be CDATA or standard text.
    Definition: tinyxml2.h:1005
    +
    virtual bool ShallowEqual(const XMLNode *compare) const
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    Definition: tinyxml2.h:1106
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    virtual bool ShallowEqual(const XMLNode *compare) const
    +
    virtual bool Accept(XMLVisitor *visitor) const
    +
    virtual XMLUnknown * ToUnknown()
    Safely cast to an Unknown, or null.
    Definition: tinyxml2.h:1109
    +
    Definition: tinyxml2.h:482
    +
    virtual bool Visit(const XMLUnknown &)
    Visit an unknown node.
    Definition: tinyxml2.h:517
    +
    virtual bool VisitExit(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:491
    +
    virtual bool VisitExit(const XMLElement &)
    Visit an element.
    Definition: tinyxml2.h:500
    +
    virtual bool VisitEnter(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:487
    +
    virtual bool Visit(const XMLComment &)
    Visit a comment node.
    Definition: tinyxml2.h:513
    +
    virtual bool Visit(const XMLDeclaration &)
    Visit a declaration.
    Definition: tinyxml2.h:505
    +
    virtual bool Visit(const XMLText &)
    Visit a text node.
    Definition: tinyxml2.h:509
    +
    virtual bool VisitEnter(const XMLElement &, const XMLAttribute *)
    Visit an element.
    Definition: tinyxml2.h:496
    +
    + + + + diff --git a/dox b/dox index 601feed4..99921de0 100644 --- a/dox +++ b/dox @@ -1,4 +1,4 @@ -# Doxyfile 1.8.6 +# Doxyfile 1.8.13 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -38,7 +38,7 @@ PROJECT_NAME = "TinyXML-2" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 5.0.1 +PROJECT_NUMBER = 9.0.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -46,10 +46,10 @@ PROJECT_NUMBER = 5.0.1 PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. PROJECT_LOGO = @@ -60,7 +60,7 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = . -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where @@ -70,6 +70,14 @@ OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. @@ -85,14 +93,14 @@ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -127,7 +135,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -197,9 +205,9 @@ MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO @@ -261,11 +269,14 @@ OPTIMIZE_OUTPUT_VHDL = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. # -# Note For files without extension you can use no_extension as a placeholder. +# Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. @@ -282,10 +293,19 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES @@ -325,13 +345,20 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first +# tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent @@ -390,7 +417,7 @@ LOOKUP_CACHE_SIZE = 0 # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -400,35 +427,35 @@ LOOKUP_CACHE_SIZE = 0 EXTRACT_ALL = NO -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local methods, +# This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are +# included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. @@ -453,21 +480,21 @@ HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be +# (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these +# documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -481,7 +508,7 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also +# names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. @@ -490,12 +517,19 @@ INTERNAL_DOCS = NO CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the +# their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -523,14 +557,14 @@ INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. +# name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that +# name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. @@ -575,27 +609,25 @@ SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = NO -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = NO -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = NO -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. @@ -620,8 +652,8 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES @@ -669,8 +701,7 @@ LAYOUT_FILE = # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -686,7 +717,7 @@ CITE_BIB_FILES = QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -694,7 +725,7 @@ QUIET = NO WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. @@ -711,12 +742,18 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -740,7 +777,7 @@ WARN_LOGFILE = # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with -# spaces. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = tinyxml2.h \ @@ -758,12 +795,17 @@ INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = @@ -849,6 +891,10 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -858,11 +904,15 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for +# INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. @@ -922,7 +972,7 @@ REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. @@ -969,13 +1019,13 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES -# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the # cost of reduced performance. This can be particularly helpful with template # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. +# generated with the -Duse-libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1018,7 +1068,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1080,13 +1130,15 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1102,7 +1154,7 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to +# will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 @@ -1133,8 +1185,9 @@ HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES @@ -1230,28 +1283,29 @@ GENERATE_HTMLHELP = NO CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1364,7 +1418,7 @@ DISABLE_INDEX = NO # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has @@ -1392,7 +1446,7 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1421,7 +1475,7 @@ FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. @@ -1491,11 +1545,11 @@ SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1507,7 +1561,7 @@ SERVER_BASED_SEARCH = NO # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). # @@ -1520,7 +1574,7 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). See the section "External Indexing and # Searching" for details. @@ -1558,7 +1612,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1589,7 +1643,7 @@ LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1607,9 +1661,12 @@ COMPACT_LATEX = NO PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1623,23 +1680,36 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or @@ -1657,8 +1727,8 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a # higher quality PDF documentation. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1699,11 +1769,19 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1718,7 +1796,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1755,11 +1833,21 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -1783,6 +1871,13 @@ MAN_OUTPUT = man MAN_EXTENSION = .3 +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without @@ -1796,7 +1891,7 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -1810,19 +1905,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify a XML DTD, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -1835,7 +1918,7 @@ XML_PROGRAMLISTING = YES # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -1849,14 +1932,23 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen -# Definitions (see http://autogen.sf.net) file that captures the structure of -# the code including all documentation. Note that this feature is still -# experimental and incomplete at the moment. +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1865,7 +1957,7 @@ GENERATE_AUTOGEN_DEF = NO # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -1873,7 +1965,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -1881,9 +1973,9 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO the +# understand what is going on. On the other hand, if this tag is set to NO, the # size of the Perl module output will be much smaller and Perl will parse it # just the same. # The default value is: YES. @@ -1903,14 +1995,14 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names -# in the source code. If set to NO only conditional compilation will be +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. @@ -1926,7 +2018,7 @@ MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO -# If the SEARCH_INCLUDES tag is set to YES the includes files in the +# If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1968,9 +2060,9 @@ PREDEFINED = EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all refrences to function-like macros that are alone on a line, have an -# all uppercase name, and do not end with a semicolon. Such function macros are -# typically used for boiler-plate code, and will confuse the parser if not +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1990,7 +2082,7 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. @@ -2002,20 +2094,21 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. # The default value is: NO. ALLEXTERNALS = NO -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in -# the modules index. If set to NO, only the current project's groups will be +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = YES -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. @@ -2032,7 +2125,7 @@ PERL_PATH = /usr/bin/perl # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to # NO turns the diagrams off. Note that this option also works with HAVE_DOT # disabled, but it is recommended to install and use dot, since it yields more @@ -2057,7 +2150,7 @@ MSCGEN_PATH = DIA_PATH = -# If set to YES, the inheritance and collaboration graphs will hide inheritance +# If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2082,7 +2175,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by @@ -2130,7 +2223,7 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2182,7 +2275,8 @@ INCLUDED_BY_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2193,7 +2287,8 @@ CALL_GRAPH = NO # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2216,11 +2311,15 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif and svg. +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2263,6 +2362,24 @@ MSCFILE_DIRS = DIAFILE_DIRS = +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized @@ -2299,7 +2416,7 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support # this, this feature is disabled by default. @@ -2316,7 +2433,7 @@ DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot # files that are used to generate the various graphs. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..3546c158 --- /dev/null +++ b/meson.build @@ -0,0 +1,104 @@ +# Copyright © 2020 Dylan Baker + +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any +# damages arising from the use of this software. + +# Permission is granted to anyone to use this software for any +# purpose, including commercial applications, and to alter it and +# redistribute it freely, subject to the following restrictions: + +# 1. The origin of this software must not be misrepresented; you must +# not claim that you wrote the original software. If you use this +# software in a product, an acknowledgment in the product documentation +# would be appreciated but is not required. + +# 2. Altered source versions must be plainly marked as such, and +# must not be misrepresented as being the original software. + +# 3. This notice may not be removed or altered from any source +# distribution. + +project( + 'tinyxml2', + ['cpp'], + version : '9.0.0', + meson_version : '>= 0.49.0', +) + +cpp = meson.get_compiler('cpp') + +tinyxml_extra_args = [] +if cpp.get_argument_syntax() == 'msvc' + tinyxml_extra_args += '-D_CRT_SECURE_NO_WARNINGS' +endif + +if get_option('default_library') == 'shared' + tinyxml_extra_args += '-DTINYXML2_EXPORT' +endif + +if get_option('debug') + tinyxml_extra_args += '-DTINYXML2_DEBUG' +endif + +lib_tinyxml2 = library( + 'tinyxml2', + ['tinyxml2.cpp'], + cpp_args : tinyxml_extra_args, + gnu_symbol_visibility : 'hidden', + version : meson.project_version(), + install : true, +) + +dep_tinyxml2 = declare_dependency( + link_with : lib_tinyxml2, + include_directories : include_directories('.'), +) + +# This is the new way to set dependencies, but let's not break users of older +# versions of meson +if meson.version().version_compare('>= 0.54.0') + meson.override_dependency('tinyxml2', dep_tinyxml2) +endif + +if get_option('tests') + # Try to find a copy command. If this is windows we probably don't have cp, + # but if this is msys then we do, so make cp not required in that case, and + # try Xcopy if cp isn't found + prog_cp = find_program('cp', required : build_machine.system() != 'windows') + command = ['-r'] + if not prog_cp.found() + prog_cp = find_program('Xcopy') + command = ['/E', '/I'] + endif + + # Copy the test resources into the build dir + run_command( + prog_cp, + [ + command, + meson.current_source_dir() / 'resources', + meson.current_build_dir(), + ], + ) + + test( + 'xmltest', + executable( + 'xmltest', + ['xmltest.cpp'], + link_with : [lib_tinyxml2], + ), + workdir : meson.current_build_dir(), + ) +endif + +install_headers('tinyxml2.h') + +# This is better than using the .in because meson tracks dependencies +# internally, and will generate a more accurate pkg-config file +pkg = import('pkgconfig') +pkg.generate( + lib_tinyxml2, + description : 'simple, small, C++ XML parser', +) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..d368061a --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,28 @@ +# Copyright © 2020 Dylan Baker + +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any +# damages arising from the use of this software. + +# Permission is granted to anyone to use this software for any +# purpose, including commercial applications, and to alter it and +# redistribute it freely, subject to the following restrictions: + +# 1. The origin of this software must not be misrepresented; you must +# not claim that you wrote the original software. If you use this +# software in a product, an acknowledgment in the product documentation +# would be appreciated but is not required. + +# 2. Altered source versions must be plainly marked as such, and +# must not be misrepresented as being the original software. + +# 3. This notice may not be removed or altered from any source +# distribution. + +option( + 'tests', + type : 'boolean', + description : 'Enable unit tests', + value : true, + yield : true, +) \ No newline at end of file diff --git a/readme.md b/readme.md index 54f752a9..5245ac4e 100644 --- a/readme.md +++ b/readme.md @@ -1,44 +1,47 @@ -TinyXML-2 [![TravisCI Status](https://travis-ci.org/leethomason/tinyxml2.svg?branch=master)](https://travis-ci.org/leethomason/tinyxml2) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/leethomason/tinyxml2?branch=master&svg=true)](https://ci.appveyor.com/project/leethomason/tinyxml2) +TinyXML-2 ========= + +![Build](https://github.com/leethomason/tinyxml2/actions/workflows/test.yml/badge.svg) + ![TinyXML-2 Logo](http://www.grinninglizard.com/tinyxml2/TinyXML2_small.png) -TinyXML-2 is a simple, small, efficient, C++ XML parser that can be +TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs. The master is hosted on github: https://github.com/leethomason/tinyxml2 The online HTML version of these docs: -http://grinninglizard.com/tinyxml2docs/index.html +http://leethomason.github.io/tinyxml2/ Examples are in the "related pages" tab of the HTML docs. What it does. ------------- - -In brief, TinyXML-2 parses an XML document, and builds from that a + +In brief, TinyXML-2 parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved. XML stands for "eXtensible Markup Language." It is a general purpose human and machine readable markup language to describe arbitrary data. -All those random file formats created to store application data can +All those random file formats created to store application data can all be replaced with XML. One parser for everything. http://en.wikipedia.org/wiki/XML There are different ways to access and interact with XML data. TinyXML-2 uses a Document Object Model (DOM), meaning the XML data is parsed -into a C++ objects that can be browsed and manipulated, and then -written to disk or another output stream. You can also construct an XML document +into a C++ objects that can be browsed and manipulated, and then +written to disk or another output stream. You can also construct an XML document from scratch with C++ objects and write this to disk or another output stream. You can even use TinyXML-2 to stream XML programmatically from code without creating a document first. TinyXML-2 is designed to be easy and fast to learn. It is one header and -one cpp file. Simply add these to your project and off you go. -There is an example file - xmltest.cpp - to get you started. +one cpp file. Simply add these to your project and off you go. +There is an example file - xmltest.cpp - to get you started. -TinyXML-2 is released under the ZLib license, +TinyXML-2 is released under the ZLib license, so you can use it in open source or commercial code. The details of the license are at the top of every source file. @@ -50,49 +53,33 @@ What it doesn't do. ------------------- TinyXML-2 doesn't parse or use DTDs (Document Type Definitions) or XSLs -(eXtensible Stylesheet Language.) There are other parsers out there -that are much more fully featured. But they are also much bigger, -take longer to set up in your project, have a higher learning curve, -and often have a more restrictive license. If you are working with +(eXtensible Stylesheet Language.) There are other parsers out there +that are much more fully featured. But they are generally bigger and +more difficult to use. If you are working with browsers or have more complete XML needs, TinyXML-2 is not the parser for you. TinyXML-1 vs. TinyXML-2 ----------------------- -TinyXML-2 is now the focus of all development, well tested, and your -best choice unless you have a requirement to maintain TinyXML-1 code. +TinyXML-2 long been the focus of all development. It is well tested +and should be used instead of TinyXML-1. TinyXML-2 uses a similar API to TinyXML-1 and the same rich test cases. But the implementation of the parser is completely re-written to make it more appropriate for use in a game. It uses less memory, is faster, and uses far fewer memory allocations. -TinyXML-2 has no requirement for STL, but has also dropped all STL support. All -strings are query and set as 'const char*'. This allows the use of internal -allocators, and keeps the code much simpler. - -Both parsers: - -1. Simple to use with similar APIs. -2. DOM based parser. -3. UTF-8 Unicode support. http://en.wikipedia.org/wiki/UTF-8 - -Advantages of TinyXML-2 +TinyXML-2 has no requirement or support for STL. -1. The focus of all future dev. -2. Many fewer memory allocation (1/10th to 1/100th), uses less memory - (about 40% of TinyXML-1), and faster. -3. No STL requirement. -4. More modern C++, including a proper namespace. -5. Proper and useful handling of whitespace +Features +-------- -Advantages of TinyXML-1 +### Code Page -1. Support for some C++ STL conventions: streams and strings -2. Very mature and well debugged code base. +TinyXML-2 uses UTF-8 exclusively when interpreting XML. All XML is assumed to +be UTF-8. -Features --------- +Filenames for loading / saving are passed unchanged to the underlying OS. ### Memory Model @@ -120,13 +107,13 @@ White space in text is preserved. For example: Hello, World -The leading space before the "Hello" and the double space after the comma are +The leading space before the "Hello" and the double space after the comma are preserved. Line-feeds are preserved, as in this example: - Hello again, + Hello again, World -However, white space between elements is **not** preserved. Although not strictly +However, white space between elements is **not** preserved. Although not strictly compliant, tracking and reporting inter-element space is awkward, and not normally valuable. TinyXML-2 sees these as the same XML: @@ -142,7 +129,7 @@ valuable. TinyXML-2 sees these as the same XML: For some applications, it is preferable to collapse whitespace. Collapsing whitespace gives you "HTML-like" behavior, which is sometimes more suitable -for hand typed documents. +for hand typed documents. TinyXML-2 supports this with the 'whitespace' parameter to the XMLDocument constructor. (The default is to preserve whitespace, as described above.) @@ -163,7 +150,7 @@ cannot be parsed correctly. In addition, all nodes (elements, declarations, text, comments etc.) and attributes have a line number recorded as they are parsed. This allows an application that performs additional validation of the parsed XML document (e.g. application-implemented DTD validation) to report -line number information in it's errors. +line number information for error messages. ### Entities @@ -182,10 +169,10 @@ UTF-8 equivalents. For instance, text with the XML of: Far & Away will have the Value() of "Far & Away" when queried from the XMLText object, -and will be written back to the XML stream/file as an ampersand. +and will be written back to the XML stream/file as an ampersand. Additionally, any character can be specified by its Unicode code point: -The syntax ` ` or ` ` are both to the non-breaking space character. +The syntax ` ` or ` ` are both to the non-breaking space character. This is called a 'numeric character reference'. Any numeric character reference that isn't one of the special entities above, will be read, but written as a regular code point. The output is correct, but the entity syntax isn't preserved. @@ -231,7 +218,7 @@ Examples #### Load and parse an XML file. - /* ------ Example 1: Load and parse an XML file. ---- */ + /* ------ Example 1: Load and parse an XML file. ---- */ { XMLDocument doc; doc.LoadFile( "dream.xml" ); @@ -239,22 +226,22 @@ Examples #### Lookup information. - /* ------ Example 2: Lookup information. ---- */ + /* ------ Example 2: Lookup information. ---- */ { XMLDocument doc; doc.LoadFile( "dream.xml" ); // Structure of the XML file: - // - Element "PLAY" the root Element, which is the + // - Element "PLAY" the root Element, which is the // FirstChildElement of the Document // - - Element "TITLE" child of the root PLAY Element // - - - Text child of the TITLE Element - + // Navigate to the title, using the convenience function, // with a dangerous lack of error checking. const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText(); printf( "Name of play (1): %s\n", title ); - + // Text is just another Node to TinyXML-2. The more // general way to get to the XMLText: XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText(); @@ -272,10 +259,27 @@ There are 2 files in TinyXML-2: And additionally a test file: * xmltest.cpp -Simply compile and run. There is a visual studio 2015 project included, a simple Makefile, -an Xcode project, a Code::Blocks project, and a cmake CMakeLists.txt included to help you. -The top of tinyxml.h even has a simple g++ command line if you are are *nix and don't want -to use a build system. +Generally speaking, the intent is that you simply include the tinyxml2.cpp and +tinyxml2.h files in your project and build with your other source code. + +There is also a CMake build included. CMake is the general build for TinyXML-2. +Additional build systems are costly to maintain, and tend to bit-rot. + +A Visual Studio project is included, but that is largely for developer convenience, +and is not intended to integrate well with other builds. + +Building TinyXML-2 - Using vcpkg +-------------------------------- + +You can download and install TinyXML-2 using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: + + git clone https://github.com/Microsoft/vcpkg.git + cd vcpkg + ./bootstrap-vcpkg.sh + ./vcpkg integrate install + ./vcpkg install tinyxml2 + +The TinyXML-2 port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. Versioning ---------- @@ -285,38 +289,32 @@ TinyXML-2 uses semantic versioning. http://semver.org/ Releases are now tagged i Note that the major version will (probably) change fairly rapidly. API changes are fairly common. -Documentation -------------- - -The documentation is build with Doxygen, using the 'dox' -configuration file. - License ------- TinyXML-2 is released under the zlib license: -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source +3. This notice may not be removed or altered from any source distribution. Contributors ------------ -Thanks very much to everyone who sends suggestions, bugs, ideas, and +Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun. The original TinyXML-1 has many contributors, who all deserve thanks diff --git a/resources/out/readme.txt b/resources/out/readme.txt new file mode 100644 index 00000000..5c8861af --- /dev/null +++ b/resources/out/readme.txt @@ -0,0 +1 @@ +This file is here to create this output directory when the source is pulled from git. \ No newline at end of file diff --git a/resources/xmltest-4636783552757760.xml b/resources/xmltest-4636783552757760.xml new file mode 100644 index 00000000..b3f4df79 --- /dev/null +++ b/resources/xmltest-4636783552757760.xml @@ -0,0 +1 @@ +Ï:schemaÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>á<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>þ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<à>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ xml:space="1">ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<õ>ÿ<ÿ>ÿ<ÿ>ÿ<ÿ>ÿ<á>ÿ<ÿ>ÿ<ÿ>ÿÿ<ÿ>ÿ<ÿ>ÿ<ÿ> \ No newline at end of file diff --git a/resources/xmltest-5330.xml b/resources/xmltest-5330.xml new file mode 100644 index 00000000..8a6c4263 --- /dev/null +++ b/resources/xmltest-5330.xml @@ -0,0 +1 @@ +>:><:><:><:><:><:><:><:><:><:><:>2:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>;<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:>ÄÅÁÃ:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-<:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-<:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#ÝÙÜ~Ú>>GF- \ No newline at end of file diff --git a/resources/xmltest-5662204197076992.xml b/resources/xmltest-5662204197076992.xml new file mode 100644 index 00000000..71325d3e --- /dev/null +++ b/resources/xmltest-5662204197076992.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/xmltest-5720541257269248.xml b/resources/xmltest-5720541257269248.xml new file mode 100644 index 00000000..c3ac8e0f --- /dev/null +++ b/resources/xmltest-5720541257269248.xml @@ -0,0 +1 @@ +:768ff1Àµ502f14aef-5cd1a32768a2ee67967bd0c1><:><:><:>=:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>ó ·<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>|:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:--:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:···································································><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>|:><:>><:><:><<:><:><:><:><:><:><:><::> \ No newline at end of file diff --git a/setversion.py b/setversion.py index 85523d75..ad303698 100755 --- a/setversion.py +++ b/setversion.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 # Python program to set the version. ############################################## @@ -18,14 +19,14 @@ def fileProcess( name, lineFunction ): if not line: break output += lineFunction( line ) filestream.close() - + if not output: return # basic error checking - + print( "Writing file " + name ) filestream = open( name, "w" ); filestream.write( output ); filestream.close() - + def echoInput( line ): return line @@ -67,6 +68,28 @@ def engineRule( line ): fileProcess( "tinyxml2.h", engineRule ) +def macroVersionRule( line ): + + matchMajor = "#define TINYXML2_MAJOR_VERSION" + matchMinor = "#define TINYXML2_MINOR_VERSION" + matchBuild = "#define TINYXML2_PATCH_VERSION" + + if line[0:len(matchMajor)] == matchMajor: + print( "1)macro Major found" ) + return matchMajor + " " + major + "\n" + + elif line[0:len(matchMinor)] == matchMinor: + print( "2)macro Minor found" ) + return matchMinor + " " + minor + "\n" + + elif line[0:len(matchBuild)] == matchBuild: + print( "3)macro Build found" ) + return matchBuild + " " + build + "\n" + + else: + return line; + +fileProcess("tinyxml2.h", macroVersionRule) #### Write the dox #### @@ -86,38 +109,33 @@ def doxRule( line ): #### Write the CMakeLists.txt #### -def cmakeRule1( line ): +def cmakeRule( line ): - matchVersion = "set(GENERIC_LIB_VERSION" + matchVersion = "project(tinyxml2 VERSION" if line[0:len(matchVersion)] == matchVersion: print( "1)tinyxml2.h Major found" ) - return matchVersion + " \"" + major + "." + minor + "." + build + "\")" + "\n" + return matchVersion + " " + major + "." + minor + "." + build + ")\n" else: return line; -fileProcess( "CMakeLists.txt", cmakeRule1 ) - -def cmakeRule2( line ): - - matchSoversion = "set(GENERIC_LIB_SOVERSION" +fileProcess( "CMakeLists.txt", cmakeRule ) - if line[0:len(matchSoversion)] == matchSoversion: - print( "1)tinyxml2.h Major found" ) - return matchSoversion + " \"" + major + "\")" + "\n" - else: - return line; +def mesonRule(line): + match = re.search(r"(\s*version) : '(\d+.\d+.\d+)',", line) + if match: + print("1)meson.build version found.") + return "{} : '{}.{}.{}',\n".format(match.group(1), major, minor, build) + return line -fileProcess( "CMakeLists.txt", cmakeRule2 ) +fileProcess("meson.build", mesonRule) print( "Release note:" ) -print( '1. Build. g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' ) +print( '1. Build. g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' ) print( '2. Commit. git commit -am"setting the version to ' + versionStr + '"' ) print( '3. Tag. git tag ' + versionStr ) print( ' OR git tag -a ' + versionStr + ' -m [tag message]' ) print( 'Remember to "git push" both code and tag. For the tag:' ) print( 'git push origin [tagname]') - - \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..bf3a61fe --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.15) +project(tinyxml2-test) + +enable_testing() + +find_package(tinyxml2 REQUIRED) + +add_executable(xmltest ../xmltest.cpp) +target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) + +add_test( + NAME xmltest + COMMAND xmltest + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." +) + +set_tests_properties(xmltest + PROPERTIES + PASS_REGULAR_EXPRESSION ", Fail 0" + ENVIRONMENT "PATH=$") diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 3043ab3a..31925d96 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -45,14 +45,14 @@ distribution. { va_list va; va_start( va, format ); - int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); va_end( va ); return result; } static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va ) { - int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); return result; } @@ -100,10 +100,24 @@ distribution. #define TIXML_SSCANF sscanf #endif +#if defined(_WIN64) + #define TIXML_FSEEK _fseeki64 + #define TIXML_FTELL _ftelli64 +#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__ANDROID__) + #define TIXML_FSEEK fseeko + #define TIXML_FTELL ftello +#elif defined(__unix__) && defined(__x86_64__) + #define TIXML_FSEEK fseeko64 + #define TIXML_FTELL ftello64 +#else + #define TIXML_FSEEK fseek + #define TIXML_FTELL ftell +#endif -static const char LINE_FEED = (char)0x0a; // all line endings are normalized to LF + +static const char LINE_FEED = static_cast(0x0a); // all line endings are normalized to LF static const char LF = LINE_FEED; -static const char CARRIAGE_RETURN = (char)0x0d; // CR gets filtered out +static const char CARRIAGE_RETURN = static_cast(0x0d); // CR gets filtered out static const char CR = CARRIAGE_RETURN; static const char SINGLE_QUOTE = '\''; static const char DOUBLE_QUOTE = '\"'; @@ -165,6 +179,7 @@ void StrPair::TransferTo( StrPair* other ) _end = 0; } + void StrPair::Reset() { if ( _flags & NEEDS_DELETE ) { @@ -196,7 +211,7 @@ char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLin TIXMLASSERT(curLineNumPtr); char* start = p; - char endChar = *endTag; + const char endChar = *endTag; size_t length = strlen( endTag ); // Inner loop of text parsing. @@ -219,13 +234,13 @@ char* StrPair::ParseName( char* p ) if ( !p || !(*p) ) { return 0; } - if ( !XMLUtil::IsNameStartChar( *p ) ) { + if ( !XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { return 0; } char* const start = p; ++p; - while ( *p && XMLUtil::IsNameChar( *p ) ) { + while ( *p && XMLUtil::IsNameChar( (unsigned char) *p ) ) { ++p; } @@ -309,7 +324,7 @@ const char* StrPair::GetStr() const int buflen = 10; char buf[buflen] = { 0 }; int len = 0; - char* adjusted = const_cast( XMLUtil::GetCharacterRef( p, buf, &len ) ); + const char* adjusted = const_cast( XMLUtil::GetCharacterRef( p, buf, &len ) ); if ( adjusted == 0 ) { *q = *p; ++p; @@ -424,23 +439,27 @@ void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length output += *length; - // Scary scary fall throughs. + // Scary scary fall throughs are annotated with carefully designed comments + // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc switch (*length) { case 4: --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 3: --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 2: --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 1: --output; - *output = (char)(input | FIRST_BYTE_MARK[*length]); + *output = static_cast(input | FIRST_BYTE_MARK[*length]); break; default: TIXMLASSERT( false ); @@ -577,24 +596,38 @@ void XMLUtil::ToStr( double v, char* buffer, int bufferSize ) } -void XMLUtil::ToStr(int64_t v, char* buffer, int bufferSize) +void XMLUtil::ToStr( int64_t v, char* buffer, int bufferSize ) { // horrible syntax trick to make the compiler happy about %lld - TIXML_SNPRINTF(buffer, bufferSize, "%lld", (long long)v); + TIXML_SNPRINTF(buffer, bufferSize, "%lld", static_cast(v)); } +void XMLUtil::ToStr( uint64_t v, char* buffer, int bufferSize ) +{ + // horrible syntax trick to make the compiler happy about %llu + TIXML_SNPRINTF(buffer, bufferSize, "%llu", (long long)v); +} -bool XMLUtil::ToInt( const char* str, int* value ) +bool XMLUtil::ToInt(const char* str, int* value) { - if ( TIXML_SSCANF( str, "%d", value ) == 1 ) { - return true; + if (IsPrefixHex(str)) { + unsigned v; + if (TIXML_SSCANF(str, "%x", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + if (TIXML_SSCANF(str, "%d", value) == 1) { + return true; + } } return false; } -bool XMLUtil::ToUnsigned( const char* str, unsigned *value ) +bool XMLUtil::ToUnsigned(const char* str, unsigned* value) { - if ( TIXML_SSCANF( str, "%u", value ) == 1 ) { + if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%x" : "%u", value) == 1) { return true; } return false; @@ -607,13 +640,20 @@ bool XMLUtil::ToBool( const char* str, bool* value ) *value = (ival==0) ? false : true; return true; } - if ( StringEqual( str, "true" ) ) { - *value = true; - return true; + static const char* TRUE_VALS[] = { "true", "True", "TRUE", 0 }; + static const char* FALSE_VALS[] = { "false", "False", "FALSE", 0 }; + + for (int i = 0; TRUE_VALS[i]; ++i) { + if (StringEqual(str, TRUE_VALS[i])) { + *value = true; + return true; + } } - else if ( StringEqual( str, "false" ) ) { - *value = false; - return true; + for (int i = 0; FALSE_VALS[i]; ++i) { + if (StringEqual(str, FALSE_VALS[i])) { + *value = false; + return true; + } } return false; } @@ -639,15 +679,34 @@ bool XMLUtil::ToDouble( const char* str, double* value ) bool XMLUtil::ToInt64(const char* str, int64_t* value) { - long long v = 0; // horrible syntax trick to make the compiler happy about %lld - if (TIXML_SSCANF(str, "%lld", &v) == 1) { - *value = (int64_t)v; - return true; - } + if (IsPrefixHex(str)) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llx + if (TIXML_SSCANF(str, "%llx", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + long long v = 0; // horrible syntax trick to make the compiler happy about %lld + if (TIXML_SSCANF(str, "%lld", &v) == 1) { + *value = static_cast(v); + return true; + } + } return false; } +bool XMLUtil::ToUnsigned64(const char* str, uint64_t* value) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llu + if(TIXML_SSCANF(str, IsPrefixHex(str) ? "%llx" : "%llu", &v) == 1) { + *value = (uint64_t)v; + return true; + } + return false; +} + + char* XMLDocument::Identify( char* p, XMLNode** node ) { TIXMLASSERT( node ); @@ -737,6 +796,7 @@ bool XMLDocument::Accept( XMLVisitor* visitor ) const XMLNode::XMLNode( XMLDocument* doc ) : _document( doc ), _parent( 0 ), + _value(), _parseLineNum( 0 ), _firstChild( 0 ), _lastChild( 0 ), _prev( 0 ), _next( 0 ), @@ -754,7 +814,7 @@ XMLNode::~XMLNode() } } -const char* XMLNode::Value() const +const char* XMLNode::Value() const { // Edge case: XMLDocuments don't have a Value. Return null. if ( this->ToDocument() ) @@ -907,6 +967,13 @@ XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ) TIXMLASSERT( false ); return 0; } + if ( afterThis == addThis ) { + // Current state: BeforeThis -> AddThis -> OneAfterAddThis + // Now AddThis must disappear from it's location and then + // reappear between BeforeThis and OneAfterAddThis. + // So just leave it where it is. + return addThis; + } if ( afterThis->_next == 0 ) { // The last node or the only node. @@ -991,7 +1058,11 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) // 'endTag' is the end tag for this node, it is returned by a call to a child. // 'parentEnd' is the end tag for the parent, which is filled in and returned. - while( p && *p ) { + XMLDocument::DepthTracker tracker(_document); + if (_document->Error()) + return 0; + + while( p && *p ) { XMLNode* node = 0; p = _document->Identify( p, &node ); @@ -1000,34 +1071,44 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) break; } - int initialLineNum = node->_parseLineNum; + const int initialLineNum = node->_parseLineNum; StrPair endTag; p = node->ParseDeep( p, &endTag, curLineNumPtr ); if ( !p ) { DeleteNode( node ); if ( !_document->Error() ) { - _document->SetError( XML_ERROR_PARSING, 0, 0, initialLineNum); + _document->SetError( XML_ERROR_PARSING, initialLineNum, 0); } break; } - XMLDeclaration* decl = node->ToDeclaration(); + const XMLDeclaration* const decl = node->ToDeclaration(); if ( decl ) { // Declarations are only allowed at document level - bool wellLocated = ( ToDocument() != 0 ); - if ( wellLocated ) { - // Multiple declarations are allowed but all declarations - // must occur before anything else - for ( const XMLNode* existingNode = _document->FirstChild(); existingNode; existingNode = existingNode->NextSibling() ) { - if ( !existingNode->ToDeclaration() ) { - wellLocated = false; - break; - } + // + // Multiple declarations are allowed but all declarations + // must occur before anything else. + // + // Optimized due to a security test case. If the first node is + // a declaration, and the last node is a declaration, then only + // declarations have so far been added. + bool wellLocated = false; + + if (ToDocument()) { + if (FirstChild()) { + wellLocated = + FirstChild() && + FirstChild()->ToDeclaration() && + LastChild() && + LastChild()->ToDeclaration(); + } + else { + wellLocated = true; } } if ( !wellLocated ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, decl->Value(), 0, initialLineNum); + _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value()); DeleteNode( node ); break; } @@ -1062,7 +1143,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) } } if ( mismatch ) { - _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, ele->Name(), 0, initialLineNum); + _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name()); DeleteNode( node ); break; } @@ -1119,11 +1200,10 @@ const XMLElement* XMLNode::ToElementWithName( const char* name ) const // --------- XMLText ---------- // char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { - const char* start = p; if ( this->CData() ) { p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( !p ) { - _document->SetError( XML_ERROR_PARSING_CDATA, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 ); } return p; } @@ -1138,7 +1218,7 @@ char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) return p-1; } if ( !p ) { - _document->SetError( XML_ERROR_PARSING_TEXT, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 ); } } return 0; @@ -1186,10 +1266,9 @@ XMLComment::~XMLComment() char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Comment parses as text. - const char* start = p; p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr ); if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_COMMENT, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 ); } return p; } @@ -1236,10 +1315,9 @@ XMLDeclaration::~XMLDeclaration() char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Declaration parses as text. - const char* start = p; p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 ); } return p; } @@ -1285,11 +1363,9 @@ XMLUnknown::~XMLUnknown() char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Unknown parses as text. - const char* start = p; - p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( !p ) { - _document->SetError( XML_ERROR_PARSING_UNKNOWN, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 ); } return p; } @@ -1321,12 +1397,12 @@ bool XMLUnknown::Accept( XMLVisitor* visitor ) const // --------- XMLAttribute ---------- // -const char* XMLAttribute::Name() const +const char* XMLAttribute::Name() const { return _name.GetStr(); } -const char* XMLAttribute::Value() const +const char* XMLAttribute::Value() const { return _value.GetStr(); } @@ -1351,7 +1427,7 @@ char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr return 0; } - char endTag[2] = { *p, 0 }; + const char endTag[2] = { *p, 0 }; ++p; // move past opening quote p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr ); @@ -1392,6 +1468,15 @@ XMLError XMLAttribute::QueryInt64Value(int64_t* value) const } +XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const +{ + if(XMLUtil::ToUnsigned64(Value(), value)) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + XMLError XMLAttribute::QueryBoolValue( bool* value ) const { if ( XMLUtil::ToBool( Value(), value )) { @@ -1448,6 +1533,12 @@ void XMLAttribute::SetAttribute(int64_t v) _value.SetStr(buf); } +void XMLAttribute::SetAttribute(uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + _value.SetStr(buf); +} void XMLAttribute::SetAttribute( bool v ) @@ -1513,42 +1604,49 @@ const char* XMLElement::Attribute( const char* name, const char* value ) const return 0; } -int XMLElement::IntAttribute(const char* name, int defaultValue) const +int XMLElement::IntAttribute(const char* name, int defaultValue) const { int i = defaultValue; QueryIntAttribute(name, &i); return i; } -unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const +unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const { unsigned i = defaultValue; QueryUnsignedAttribute(name, &i); return i; } -int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const +int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const { int64_t i = defaultValue; QueryInt64Attribute(name, &i); return i; } -bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const +uint64_t XMLElement::Unsigned64Attribute(const char* name, uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Attribute(name, &i); + return i; +} + +bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const { bool b = defaultValue; QueryBoolAttribute(name, &b); return b; } -double XMLElement::DoubleAttribute(const char* name, double defaultValue) const +double XMLElement::DoubleAttribute(const char* name, double defaultValue) const { double d = defaultValue; QueryDoubleAttribute(name, &d); return d; } -float XMLElement::FloatAttribute(const char* name, float defaultValue) const +float XMLElement::FloatAttribute(const char* name, float defaultValue) const { float f = defaultValue; QueryFloatAttribute(name, &f); @@ -1557,8 +1655,18 @@ float XMLElement::FloatAttribute(const char* name, float defaultValue) const const char* XMLElement::GetText() const { - if ( FirstChild() && FirstChild()->ToText() ) { - return FirstChild()->Value(); + /* skip comment node */ + const XMLNode* node = FirstChild(); + while (node) { + if (node->ToComment()) { + node = node->NextSibling(); + continue; + } + break; + } + + if ( node && node->ToText() ) { + return node->Value(); } return 0; } @@ -1575,7 +1683,7 @@ void XMLElement::SetText( const char* inText ) } -void XMLElement::SetText( int v ) +void XMLElement::SetText( int v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1583,7 +1691,7 @@ void XMLElement::SetText( int v ) } -void XMLElement::SetText( unsigned v ) +void XMLElement::SetText( unsigned v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1598,6 +1706,12 @@ void XMLElement::SetText(int64_t v) SetText(buf); } +void XMLElement::SetText(uint64_t v) { + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + SetText(buf); +} + void XMLElement::SetText( bool v ) { @@ -1607,7 +1721,7 @@ void XMLElement::SetText( bool v ) } -void XMLElement::SetText( float v ) +void XMLElement::SetText( float v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1615,7 +1729,7 @@ void XMLElement::SetText( float v ) } -void XMLElement::SetText( double v ) +void XMLElement::SetText( double v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1662,6 +1776,19 @@ XMLError XMLElement::QueryInt64Text(int64_t* ival) const } +XMLError XMLElement::QueryUnsigned64Text(uint64_t* ival) const +{ + if(FirstChild() && FirstChild()->ToText()) { + const char* t = FirstChild()->Value(); + if(XMLUtil::ToUnsigned64(t, ival)) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + XMLError XMLElement::QueryBoolText( bool* bval ) const { if ( FirstChild() && FirstChild()->ToText() ) { @@ -1721,6 +1848,13 @@ int64_t XMLElement::Int64Text(int64_t defaultValue) const return i; } +uint64_t XMLElement::Unsigned64Text(uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Text(&i); + return i; +} + bool XMLElement::BoolText(bool defaultValue) const { bool b = defaultValue; @@ -1792,29 +1926,28 @@ void XMLElement::DeleteAttribute( const char* name ) char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) { - const char* start = p; XMLAttribute* prevAttribute = 0; // Read the attributes. while( p ) { p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); if ( !(*p) ) { - _document->SetError( XML_ERROR_PARSING_ELEMENT, start, Name(), _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() ); return 0; } // attribute. - if (XMLUtil::IsNameStartChar( *p ) ) { + if (XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { XMLAttribute* attrib = CreateAttribute(); TIXMLASSERT( attrib ); attrib->_parseLineNum = _document->_parseCurLineNum; - int attrLineNum = attrib->_parseLineNum; + const int attrLineNum = attrib->_parseLineNum; p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr ); if ( !p || Attribute( attrib->Name() ) ) { DeleteAttribute( attrib ); - _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, start, p, attrLineNum ); + _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() ); return 0; } // There is a minor bug here: if the attribute in the source xml @@ -1843,7 +1976,7 @@ char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) return p+2; // done; sealed element. } else { - _document->SetError( XML_ERROR_PARSING_ELEMENT, start, p, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 ); return 0; } } @@ -1870,6 +2003,39 @@ XMLAttribute* XMLElement::CreateAttribute() return attrib; } + +XMLElement* XMLElement::InsertNewChildElement(const char* name) +{ + XMLElement* node = _document->NewElement(name); + return InsertEndChild(node) ? node : 0; +} + +XMLComment* XMLElement::InsertNewComment(const char* comment) +{ + XMLComment* node = _document->NewComment(comment); + return InsertEndChild(node) ? node : 0; +} + +XMLText* XMLElement::InsertNewText(const char* text) +{ + XMLText* node = _document->NewText(text); + return InsertEndChild(node) ? node : 0; +} + +XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text) +{ + XMLDeclaration* node = _document->NewDeclaration(text); + return InsertEndChild(node) ? node : 0; +} + +XMLUnknown* XMLElement::InsertNewUnknown(const char* text) +{ + XMLUnknown* node = _document->NewUnknown(text); + return InsertEndChild(node) ? node : 0; +} + + + // // // foobar @@ -1966,10 +2132,8 @@ const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { "XML_ERROR_FILE_NOT_FOUND", "XML_ERROR_FILE_COULD_NOT_BE_OPENED", "XML_ERROR_FILE_READ_ERROR", - "UNUSED_XML_ERROR_ELEMENT_MISMATCH", "XML_ERROR_PARSING_ELEMENT", "XML_ERROR_PARSING_ATTRIBUTE", - "UNUSED_XML_ERROR_IDENTIFYING_TAG", "XML_ERROR_PARSING_TEXT", "XML_ERROR_PARSING_CDATA", "XML_ERROR_PARSING_COMMENT", @@ -1979,7 +2143,8 @@ const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { "XML_ERROR_MISMATCHED_ELEMENT", "XML_ERROR_PARSING", "XML_CAN_NOT_CONVERT_TEXT", - "XML_NO_TEXT_NODE" + "XML_NO_TEXT_NODE", + "XML_ELEMENT_DEPTH_EXCEEDED" }; @@ -1989,9 +2154,16 @@ XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) : _processEntities( processEntities ), _errorID(XML_SUCCESS), _whitespaceMode( whitespaceMode ), + _errorStr(), _errorLineNum( 0 ), _charBuffer( 0 ), - _parseCurLineNum( 0 ) + _parseCurLineNum( 0 ), + _parsingDepth(0), + _unlinked(), + _elementPool(), + _attributePool(), + _textPool(), + _commentPool() { // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+) _document = this; @@ -2004,7 +2176,7 @@ XMLDocument::~XMLDocument() } -void XMLDocument::MarkInUse(XMLNode* node) +void XMLDocument::MarkInUse(const XMLNode* const node) { TIXMLASSERT(node); TIXMLASSERT(node->_parent == 0); @@ -2024,13 +2196,14 @@ void XMLDocument::Clear() DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete. } -#ifdef DEBUG +#ifdef TINYXML2_DEBUG const bool hadError = Error(); #endif ClearError(); delete [] _charBuffer; _charBuffer = 0; + _parsingDepth = 0; #if 0 _textPool.Trace( "text" ); @@ -2038,8 +2211,8 @@ void XMLDocument::Clear() _commentPool.Trace( "comment" ); _attributePool.Trace( "attribute" ); #endif - -#ifdef DEBUG + +#ifdef TINYXML2_DEBUG if ( !hadError ) { TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() ); TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() ); @@ -2050,7 +2223,7 @@ void XMLDocument::Clear() } -void XMLDocument::DeepCopy(XMLDocument* target) +void XMLDocument::DeepCopy(XMLDocument* target) const { TIXMLASSERT(target); if (target == this) { @@ -2108,7 +2281,7 @@ static FILE* callfopen( const char* filepath, const char* mode ) TIXMLASSERT( mode ); #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) FILE* fp = 0; - errno_t err = fopen_s( &fp, filepath, mode ); + const errno_t err = fopen_s( &fp, filepath, mode ); if ( err ) { return 0; } @@ -2117,7 +2290,7 @@ static FILE* callfopen( const char* filepath, const char* mode ) #endif return fp; } - + void XMLDocument::DeleteNode( XMLNode* node ) { TIXMLASSERT( node ); TIXMLASSERT(node->_document == this ); @@ -2138,10 +2311,16 @@ void XMLDocument::DeleteNode( XMLNode* node ) { XMLError XMLDocument::LoadFile( const char* filename ) { + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + Clear(); FILE* fp = callfopen( filename, "rb" ); if ( !fp ) { - SetError( XML_ERROR_FILE_NOT_FOUND, filename, 0, 0 ); + SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ); return _errorID; } LoadFile( fp ); @@ -2149,65 +2328,50 @@ XMLError XMLDocument::LoadFile( const char* filename ) return _errorID; } -// This is likely overengineered template art to have a check that unsigned long value incremented -// by one still fits into size_t. If size_t type is larger than unsigned long type -// (x86_64-w64-mingw32 target) then the check is redundant and gcc and clang emit -// -Wtype-limits warning. This piece makes the compiler select code with a check when a check -// is useful and code with no check when a check is redundant depending on how size_t and unsigned long -// types sizes relate to each other. -template -= sizeof(size_t))> -struct LongFitsIntoSizeTMinusOne { - static bool Fits( unsigned long value ) - { - return value < (size_t)-1; - } -}; - -template <> -struct LongFitsIntoSizeTMinusOne { - static bool Fits( unsigned long ) - { - return true; - } -}; - XMLError XMLDocument::LoadFile( FILE* fp ) { Clear(); - fseek( fp, 0, SEEK_SET ); + TIXML_FSEEK( fp, 0, SEEK_SET ); if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } - fseek( fp, 0, SEEK_END ); - const long filelength = ftell( fp ); - fseek( fp, 0, SEEK_SET ); - if ( filelength == -1L ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); - return _errorID; + TIXML_FSEEK( fp, 0, SEEK_END ); + + unsigned long long filelength; + { + const long long fileLengthSigned = TIXML_FTELL( fp ); + TIXML_FSEEK( fp, 0, SEEK_SET ); + if ( fileLengthSigned == -1L ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + TIXMLASSERT( fileLengthSigned >= 0 ); + filelength = static_cast(fileLengthSigned); } - TIXMLASSERT( filelength >= 0 ); - if ( !LongFitsIntoSizeTMinusOne<>::Fits( filelength ) ) { + const size_t maxSizeT = static_cast(-1); + // We'll do the comparison as an unsigned long long, because that's guaranteed to be at + // least 8 bytes, even on a 32-bit platform. + if ( filelength >= static_cast(maxSizeT) ) { // Cannot handle files which won't fit in buffer together with null terminator - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } if ( filelength == 0 ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return _errorID; } - const size_t size = filelength; + const size_t size = static_cast(filelength); TIXMLASSERT( _charBuffer == 0 ); _charBuffer = new char[size+1]; - size_t read = fread( _charBuffer, 1, size, fp ); + const size_t read = fread( _charBuffer, 1, size, fp ); if ( read != size ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } @@ -2220,9 +2384,15 @@ XMLError XMLDocument::LoadFile( FILE* fp ) XMLError XMLDocument::SaveFile( const char* filename, bool compact ) { + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + FILE* fp = callfopen( filename, "w" ); if ( !fp ) { - SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, filename, 0, 0 ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ); return _errorID; } SaveFile(fp, compact); @@ -2247,10 +2417,10 @@ XMLError XMLDocument::Parse( const char* p, size_t len ) Clear(); if ( len == 0 || !p || !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return _errorID; } - if ( len == (size_t)(-1) ) { + if ( len == static_cast(-1) ) { len = strlen( p ); } TIXMLASSERT( _charBuffer == 0 ); @@ -2285,21 +2455,41 @@ void XMLDocument::Print( XMLPrinter* streamer ) const } -void XMLDocument::SetError( XMLError error, const char* str1, const char* str2, int lineNum ) +void XMLDocument::ClearError() { + _errorID = XML_SUCCESS; + _errorLineNum = 0; + _errorStr.Reset(); +} + + +void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... ) { TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT ); _errorID = error; - - _errorStr1.Reset(); - _errorStr2.Reset(); _errorLineNum = lineNum; + _errorStr.Reset(); - if (str1) - _errorStr1.SetStr(str1); - if (str2) - _errorStr2.SetStr(str2); + const size_t BUFFER_SIZE = 1000; + char* buffer = new char[BUFFER_SIZE]; + + TIXMLASSERT(sizeof(error) <= sizeof(int)); + TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); + + if (format) { + size_t len = strlen(buffer); + TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); + len = strlen(buffer); + + va_list va; + va_start(va, format); + TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); + va_end(va); + } + _errorStr.SetStr(buffer); + delete[] buffer; } + /*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID) { TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT ); @@ -2308,14 +2498,15 @@ void XMLDocument::SetError( XMLError error, const char* str1, const char* str2, return errorName; } -const char* XMLDocument::GetErrorStr1() const +const char* XMLDocument::ErrorStr() const { - return _errorStr1.GetStr(); + return _errorStr.Empty() ? "" : _errorStr.GetStr(); } -const char* XMLDocument::GetErrorStr2() const + +void XMLDocument::PrintError() const { - return _errorStr2.GetStr(); + printf("%s\n", ErrorStr()); } const char* XMLDocument::ErrorName() const @@ -2323,28 +2514,6 @@ const char* XMLDocument::ErrorName() const return ErrorIDToName(_errorID); } -void XMLDocument::PrintError() const -{ - if ( Error() ) { - static const int LEN = 20; - char buf1[LEN] = { 0 }; - char buf2[LEN] = { 0 }; - - if ( !_errorStr1.Empty() ) { - TIXML_SNPRINTF( buf1, LEN, "%s", _errorStr1.GetStr() ); - } - if ( !_errorStr2.Empty() ) { - TIXML_SNPRINTF( buf2, LEN, "%s", _errorStr2.GetStr() ); - } - - // Should check INT_MIN <= _errorID && _errorId <= INT_MAX, but that - // causes a clang "always true" -Wtautological-constant-out-of-range-compare warning - TIXMLASSERT( 0 <= _errorID && XML_ERROR_COUNT - 1 <= INT_MAX ); - printf( "XMLDocument error id=%d '%s' str1=%s str2=%s line=%d\n", - static_cast( _errorID ), ErrorName(), buf1, buf2, _errorLineNum ); - } -} - void XMLDocument::Parse() { TIXMLASSERT( NoChildren() ); // Clear() must have been called previously @@ -2355,20 +2524,36 @@ void XMLDocument::Parse() p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); p = const_cast( XMLUtil::ReadBOM( p, &_writeBOM ) ); if ( !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return; } ParseDeep(p, 0, &_parseCurLineNum ); } +void XMLDocument::PushDepth() +{ + _parsingDepth++; + if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) { + SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." ); + } +} + +void XMLDocument::PopDepth() +{ + TIXMLASSERT(_parsingDepth > 0); + --_parsingDepth; +} + XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : _elementJustOpened( false ), + _stack(), _firstElement( true ), _fp( file ), _depth( depth ), _textDepth( -1 ), _processEntities( true ), - _compactMode( compact ) + _compactMode( compact ), + _buffer() { for( int i=0; i(entityValue); + TIXMLASSERT( flagIndex < ENTITY_RANGE ); + _entityFlag[flagIndex] = true; } - _restrictedEntityFlag[(unsigned char)'&'] = true; - _restrictedEntityFlag[(unsigned char)'<'] = true; - _restrictedEntityFlag[(unsigned char)'>'] = true; // not required, but consistency is nice + _restrictedEntityFlag[static_cast('&')] = true; + _restrictedEntityFlag[static_cast('<')] = true; + _restrictedEntityFlag[static_cast('>')] = true; // not required, but consistency is nice _buffer.Push( 0 ); } @@ -2408,10 +2594,36 @@ void XMLPrinter::Print( const char* format, ... ) } +void XMLPrinter::Write( const char* data, size_t size ) +{ + if ( _fp ) { + fwrite ( data , sizeof(char), size, _fp); + } + else { + char* p = _buffer.PushArr( static_cast(size) ) - 1; // back up over the null terminator. + memcpy( p, data, size ); + p[size] = 0; + } +} + + +void XMLPrinter::Putc( char ch ) +{ + if ( _fp ) { + fputc ( ch, _fp); + } + else { + char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator. + p[0] = ch; + p[1] = 0; + } +} + + void XMLPrinter::PrintSpace( int depth ) { for( int i=0; i(*q)] ) { while ( p < q ) { const size_t delta = q - p; - // %.*s accepts type int as "precision" - const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta; - Print( "%.*s", toPrint, p ); + const int toPrint = ( INT_MAX < delta ) ? INT_MAX : static_cast(delta); + Write( p, toPrint ); p += toPrint; } bool entityPatternPrinted = false; for( int i=0; i(delta); + Write( p, toPrint ); + } } - // Flush the remaining string. This will be the entire - // string if an entity wasn't found. - TIXMLASSERT( p <= q ); - if ( !_processEntities || ( p < q ) ) { - Print( "%s", p ); + else { + Write( p ); } } @@ -2470,29 +2687,40 @@ void XMLPrinter::PushHeader( bool writeBOM, bool writeDec ) { if ( writeBOM ) { static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 }; - Print( "%s", bom ); + Write( reinterpret_cast< const char* >( bom ) ); } if ( writeDec ) { PushDeclaration( "xml version=\"1.0\"" ); } } - -void XMLPrinter::OpenElement( const char* name, bool compactMode ) +void XMLPrinter::PrepareForNewNode( bool compactMode ) { SealElementIfJustOpened(); - _stack.Push( name ); - if ( _textDepth < 0 && !_firstElement && !compactMode ) { - Print( "\n" ); + if ( compactMode ) { + return; } - if ( !compactMode ) { + + if ( _firstElement ) { + PrintSpace (_depth); + } else if ( _textDepth < 0) { + Putc( '\n' ); PrintSpace( _depth ); } - Print( "<%s", name ); - _elementJustOpened = true; _firstElement = false; +} + +void XMLPrinter::OpenElement( const char* name, bool compactMode ) +{ + PrepareForNewNode( compactMode ); + _stack.Push( name ); + + Write ( "<" ); + Write ( name ); + + _elementJustOpened = true; ++_depth; } @@ -2500,9 +2728,11 @@ void XMLPrinter::OpenElement( const char* name, bool compactMode ) void XMLPrinter::PushAttribute( const char* name, const char* value ) { TIXMLASSERT( _elementJustOpened ); - Print( " %s=\"", name ); + Putc ( ' ' ); + Write( name ); + Write( "=\"" ); PrintString( value, false ); - Print( "\"" ); + Putc ( '\"' ); } @@ -2530,6 +2760,14 @@ void XMLPrinter::PushAttribute(const char* name, int64_t v) } +void XMLPrinter::PushAttribute(const char* name, uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + PushAttribute(name, buf); +} + + void XMLPrinter::PushAttribute( const char* name, bool v ) { char buf[BUF_SIZE]; @@ -2552,21 +2790,23 @@ void XMLPrinter::CloseElement( bool compactMode ) const char* name = _stack.Pop(); if ( _elementJustOpened ) { - Print( "/>" ); + Write( "/>" ); } else { if ( _textDepth < 0 && !compactMode) { - Print( "\n" ); + Putc( '\n' ); PrintSpace( _depth ); } - Print( "", name ); + Write ( "" ); } if ( _textDepth == _depth ) { _textDepth = -1; } if ( _depth == 0 && !compactMode) { - Print( "\n" ); + Putc( '\n' ); } _elementJustOpened = false; } @@ -2578,7 +2818,7 @@ void XMLPrinter::SealElementIfJustOpened() return; } _elementJustOpened = false; - Print( ">" ); + Putc( '>' ); } @@ -2588,13 +2828,16 @@ void XMLPrinter::PushText( const char* text, bool cdata ) SealElementIfJustOpened(); if ( cdata ) { - Print( "", text ); + Write( "" ); } else { PrintString( text, true ); } } + void XMLPrinter::PushText( int64_t value ) { char buf[BUF_SIZE]; @@ -2602,6 +2845,15 @@ void XMLPrinter::PushText( int64_t value ) PushText( buf, false ); } + +void XMLPrinter::PushText( uint64_t value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(value, buf, BUF_SIZE); + PushText(buf, false); +} + + void XMLPrinter::PushText( int value ) { char buf[BUF_SIZE]; @@ -2644,37 +2896,31 @@ void XMLPrinter::PushText( double value ) void XMLPrinter::PushComment( const char* comment ) { - SealElementIfJustOpened(); - if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); - PrintSpace( _depth ); - } - _firstElement = false; - Print( "", comment ); + PrepareForNewNode( _compactMode ); + + Write( "" ); } void XMLPrinter::PushDeclaration( const char* value ) { - SealElementIfJustOpened(); - if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); - PrintSpace( _depth ); - } - _firstElement = false; - Print( "", value ); + PrepareForNewNode( _compactMode ); + + Write( "" ); } void XMLPrinter::PushUnknown( const char* value ) { - SealElementIfJustOpened(); - if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); - PrintSpace( _depth ); - } - _firstElement = false; - Print( "", value ); + PrepareForNewNode( _compactMode ); + + Write( "' ); } @@ -2738,4 +2984,3 @@ bool XMLPrinter::Visit( const XMLUnknown& unknown ) } } // namespace tinyxml2 - diff --git a/tinyxml2.h b/tinyxml2.h index e6a0ced1..452ae95b 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -47,15 +47,15 @@ distribution. */ /* gcc: - g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe + g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe Formatting, Artistic Style: AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h */ #if defined( _DEBUG ) || defined (__DEBUG__) -# ifndef DEBUG -# define DEBUG +# ifndef TINYXML2_DEBUG +# define TINYXML2_DEBUG # endif #endif @@ -79,7 +79,8 @@ distribution. #endif -#if defined(DEBUG) +#if !defined(TIXMLASSERT) +#if defined(TINYXML2_DEBUG) # if defined(_MSC_VER) # // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like # define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); } @@ -93,14 +94,25 @@ distribution. #else # define TIXMLASSERT( x ) {} #endif - +#endif /* Versioning, past 1.0.14: http://semver.org/ */ -static const int TIXML2_MAJOR_VERSION = 5; +static const int TIXML2_MAJOR_VERSION = 9; static const int TIXML2_MINOR_VERSION = 0; -static const int TIXML2_PATCH_VERSION = 1; +static const int TIXML2_PATCH_VERSION = 0; + +#define TINYXML2_MAJOR_VERSION 9 +#define TINYXML2_MINOR_VERSION 0 +#define TINYXML2_PATCH_VERSION 0 + +// A fixed element depth limit is problematic. There needs to be a +// limit to avoid a stack overflow. However, that limit varies per +// system, and the capacity of the stack. On the other hand, it's a trivial +// attack that can result from ill, malicious, or even correctly formed XML, +// so there needs to be a limit in place. +static const int TINYXML2_MAX_ELEMENT_DEPTH = 100; namespace tinyxml2 { @@ -118,11 +130,13 @@ class XMLPrinter; pointers into the XML file itself, and will apply normalization and entity translation if actually read. Can also store (and memory manage) a traditional char[] + + Isn't clear why TINYXML2_LIB is needed; but seems to fix #719 */ -class StrPair +class TINYXML2_LIB StrPair { public: - enum { + enum Mode { NEEDS_ENTITY_PROCESSING = 0x01, NEEDS_NEWLINE_NORMALIZATION = 0x02, NEEDS_WHITESPACE_COLLAPSING = 0x04, @@ -179,7 +193,7 @@ class StrPair char* _end; StrPair( const StrPair& other ); // not supported - void operator=( StrPair& other ); // not supported, use TransferTo() + void operator=( const StrPair& other ); // not supported, use TransferTo() }; @@ -192,10 +206,11 @@ template class DynArray { public: - DynArray() { - _mem = _pool; - _allocated = INITIAL_SIZE; - _size = 0; + DynArray() : + _mem( _pool ), + _allocated( INITIAL_SIZE ), + _size( 0 ) + { } ~DynArray() { @@ -276,7 +291,7 @@ class DynArray return _mem; } - T* Mem() { + T* Mem() { TIXMLASSERT( _mem ); return _mem; } @@ -289,7 +304,7 @@ class DynArray TIXMLASSERT( cap > 0 ); if ( cap > _allocated ) { TIXMLASSERT( cap <= INT_MAX / 2 ); - int newAllocated = cap * 2; + const int newAllocated = cap * 2; T* newMem = new T[newAllocated]; TIXMLASSERT( newAllocated >= _size ); memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs @@ -322,7 +337,6 @@ class MemPool virtual void* Alloc() = 0; virtual void Free( void* ) = 0; virtual void SetTracked() = 0; - virtual void Clear() = 0; }; @@ -333,16 +347,16 @@ template< int ITEM_SIZE > class MemPoolT : public MemPool { public: - MemPoolT() : _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} + MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} ~MemPoolT() { - Clear(); + MemPoolT< ITEM_SIZE >::Clear(); } - + void Clear() { // Delete the blocks. while( !_blockPtrs.Empty()) { - Block* b = _blockPtrs.Pop(); - delete b; + Block* lastBlock = _blockPtrs.Pop(); + delete lastBlock; } _root = 0; _currentAllocs = 0; @@ -383,14 +397,14 @@ class MemPoolT : public MemPool ++_nUntracked; return result; } - + virtual void Free( void* mem ) { if ( !mem ) { return; } --_currentAllocs; Item* item = static_cast( mem ); -#ifdef DEBUG +#ifdef TINYXML2_DEBUG memset( item, 0xfe, sizeof( *item ) ); #endif item->next = _root; @@ -513,10 +527,8 @@ enum XMLError { XML_ERROR_FILE_NOT_FOUND, XML_ERROR_FILE_COULD_NOT_BE_OPENED, XML_ERROR_FILE_READ_ERROR, - UNUSED_XML_ERROR_ELEMENT_MISMATCH, // remove at next major version XML_ERROR_PARSING_ELEMENT, XML_ERROR_PARSING_ATTRIBUTE, - UNUSED_XML_ERROR_IDENTIFYING_TAG, // remove at next major version XML_ERROR_PARSING_TEXT, XML_ERROR_PARSING_CDATA, XML_ERROR_PARSING_COMMENT, @@ -527,6 +539,7 @@ enum XMLError { XML_ERROR_PARSING, XML_CAN_NOT_CONVERT_TEXT, XML_NO_TEXT_NODE, + XML_ELEMENT_DEPTH_EXCEEDED, XML_ERROR_COUNT }; @@ -550,7 +563,7 @@ class TINYXML2_LIB XMLUtil TIXMLASSERT( p ); return p; } - static char* SkipWhiteSpace( char* p, int* curLineNumPtr ) { + static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) { return const_cast( SkipWhiteSpace( const_cast(p), curLineNumPtr ) ); } @@ -559,7 +572,7 @@ class TINYXML2_LIB XMLUtil static bool IsWhiteSpace( char p ) { return !IsUTF8Continuation(p) && isspace( static_cast(p) ); } - + inline static bool IsNameStartChar( unsigned char ch ) { if ( ch >= 128 ) { // This is a heuristic guess in attempt to not implement Unicode-aware isalpha() @@ -570,7 +583,7 @@ class TINYXML2_LIB XMLUtil } return ch == ':' || ch == '_'; } - + inline static bool IsNameChar( unsigned char ch ) { return IsNameStartChar( ch ) || isdigit( ch ) @@ -578,6 +591,11 @@ class TINYXML2_LIB XMLUtil || ch == '-'; } + inline static bool IsPrefixHex( const char* p) { + p = SkipWhiteSpace(p, 0); + return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X'); + } + inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) { if ( p == q ) { return true; @@ -587,8 +605,8 @@ class TINYXML2_LIB XMLUtil TIXMLASSERT( nChar >= 0 ); return strncmp( p, q, nChar ) == 0; } - - inline static bool IsUTF8Continuation( char p ) { + + inline static bool IsUTF8Continuation( const char p ) { return ( p & 0x80 ) != 0; } @@ -605,6 +623,7 @@ class TINYXML2_LIB XMLUtil static void ToStr( float v, char* buffer, int bufferSize ); static void ToStr( double v, char* buffer, int bufferSize ); static void ToStr(int64_t v, char* buffer, int bufferSize); + static void ToStr(uint64_t v, char* buffer, int bufferSize); // converts strings to primitive types static bool ToInt( const char* str, int* value ); @@ -613,7 +632,7 @@ class TINYXML2_LIB XMLUtil static bool ToFloat( const char* str, float* value ); static bool ToDouble( const char* str, double* value ); static bool ToInt64(const char* str, int64_t* value); - + static bool ToUnsigned64(const char* str, uint64_t* value); // Changes what is serialized for a boolean value. // Default to "true" and "false". Shouldn't be changed // unless you have a special testing or compatibility need. @@ -869,11 +888,11 @@ class TINYXML2_LIB XMLNode Make a copy of this node and all its children. If the 'target' is null, then the nodes will - be allocated in the current document. If 'target' - is specified, the memory will be allocated is the + be allocated in the current document. If 'target' + is specified, the memory will be allocated is the specified XMLDocument. - NOTE: This is probably not the correct tool to + NOTE: This is probably not the correct tool to copy a document, since XMLDocuments can have multiple top level XMLNodes. You probably want to use XMLDocument::DeepCopy() @@ -912,8 +931,8 @@ class TINYXML2_LIB XMLNode */ virtual bool Accept( XMLVisitor* visitor ) const = 0; - /** - Set user data into the XMLNode. TinyXML-2 in + /** + Set user data into the XMLNode. TinyXML-2 in no way processes or interprets user data. It is initially 0. */ @@ -927,7 +946,7 @@ class TINYXML2_LIB XMLNode void* GetUserData() const { return _userData; } protected: - XMLNode( XMLDocument* ); + explicit XMLNode( XMLDocument* ); virtual ~XMLNode(); virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); @@ -995,7 +1014,7 @@ class TINYXML2_LIB XMLText : public XMLNode virtual bool ShallowEqual( const XMLNode* compare ) const; protected: - XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {} + explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {} virtual ~XMLText() {} char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); @@ -1026,7 +1045,7 @@ class TINYXML2_LIB XMLComment : public XMLNode virtual bool ShallowEqual( const XMLNode* compare ) const; protected: - XMLComment( XMLDocument* doc ); + explicit XMLComment( XMLDocument* doc ); virtual ~XMLComment(); char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); @@ -1065,7 +1084,7 @@ class TINYXML2_LIB XMLDeclaration : public XMLNode virtual bool ShallowEqual( const XMLNode* compare ) const; protected: - XMLDeclaration( XMLDocument* doc ); + explicit XMLDeclaration( XMLDocument* doc ); virtual ~XMLDeclaration(); char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); @@ -1100,7 +1119,7 @@ class TINYXML2_LIB XMLUnknown : public XMLNode virtual bool ShallowEqual( const XMLNode* compare ) const; protected: - XMLUnknown( XMLDocument* doc ); + explicit XMLUnknown( XMLDocument* doc ); virtual ~XMLUnknown(); char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); @@ -1152,6 +1171,12 @@ class TINYXML2_LIB XMLAttribute return i; } + uint64_t Unsigned64Value() const { + uint64_t i = 0; + QueryUnsigned64Value(&i); + return i; + } + /// Query as an unsigned integer. See IntValue() unsigned UnsignedValue() const { unsigned i=0; @@ -1186,6 +1211,8 @@ class TINYXML2_LIB XMLAttribute XMLError QueryUnsignedValue( unsigned int* value ) const; /// See QueryIntValue XMLError QueryInt64Value(int64_t* value) const; + /// See QueryIntValue + XMLError QueryUnsigned64Value(uint64_t* value) const; /// See QueryIntValue XMLError QueryBoolValue( bool* value ) const; /// See QueryIntValue @@ -1201,7 +1228,9 @@ class TINYXML2_LIB XMLAttribute void SetAttribute( unsigned value ); /// Set the attribute to value. void SetAttribute(int64_t value); - /// Set the attribute to value. + /// Set the attribute to value. + void SetAttribute(uint64_t value); + /// Set the attribute to value. void SetAttribute( bool value ); /// Set the attribute to value. void SetAttribute( double value ); @@ -1211,7 +1240,7 @@ class TINYXML2_LIB XMLAttribute private: enum { BUF_SIZE = 200 }; - XMLAttribute() : _parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} + XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} virtual ~XMLAttribute() {} XMLAttribute( const XMLAttribute& ); // not supported @@ -1289,6 +1318,8 @@ class TINYXML2_LIB XMLElement : public XMLNode unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const; /// See IntAttribute() int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const; + /// See IntAttribute() + uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const; /// See IntAttribute() bool BoolAttribute(const char* name, bool defaultValue = false) const; /// See IntAttribute() @@ -1335,6 +1366,15 @@ class TINYXML2_LIB XMLElement : public XMLNode return a->QueryInt64Value(value); } + /// See QueryIntAttribute() + XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const { + const XMLAttribute* a = FindAttribute(name); + if(!a) { + return XML_NO_ATTRIBUTE; + } + return a->QueryUnsigned64Value(value); + } + /// See QueryIntAttribute() XMLError QueryBoolAttribute( const char* name, bool* value ) const { const XMLAttribute* a = FindAttribute( name ); @@ -1360,14 +1400,25 @@ class TINYXML2_LIB XMLElement : public XMLNode return a->QueryFloatValue( value ); } - + /// See QueryIntAttribute() + XMLError QueryStringAttribute(const char* name, const char** value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + *value = a->Value(); + return XML_SUCCESS; + } + + + /** Given an attribute name, QueryAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. It is overloaded for the primitive types, and is a generally more convenient replacement of QueryIntAttribute() and related functions. - + If successful, the result of the conversion will be written to 'value'. If not successful, nothing will be written to 'value'. This allows you to provide default @@ -1378,30 +1429,38 @@ class TINYXML2_LIB XMLElement : public XMLNode QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 @endverbatim */ - int QueryAttribute( const char* name, int* value ) const { + XMLError QueryAttribute( const char* name, int* value ) const { return QueryIntAttribute( name, value ); } - int QueryAttribute( const char* name, unsigned int* value ) const { + XMLError QueryAttribute( const char* name, unsigned int* value ) const { return QueryUnsignedAttribute( name, value ); } - int QueryAttribute(const char* name, int64_t* value) const { + XMLError QueryAttribute(const char* name, int64_t* value) const { return QueryInt64Attribute(name, value); } - int QueryAttribute( const char* name, bool* value ) const { + XMLError QueryAttribute(const char* name, uint64_t* value) const { + return QueryUnsigned64Attribute(name, value); + } + + XMLError QueryAttribute( const char* name, bool* value ) const { return QueryBoolAttribute( name, value ); } - int QueryAttribute( const char* name, double* value ) const { + XMLError QueryAttribute( const char* name, double* value ) const { return QueryDoubleAttribute( name, value ); } - int QueryAttribute( const char* name, float* value ) const { + XMLError QueryAttribute( const char* name, float* value ) const { return QueryFloatAttribute( name, value ); } + XMLError QueryAttribute(const char* name, const char** value) const { + return QueryStringAttribute(name, value); + } + /// Sets the named attribute to value. void SetAttribute( const char* name, const char* value ) { XMLAttribute* a = FindOrCreateAttribute( name ); @@ -1424,7 +1483,13 @@ class TINYXML2_LIB XMLElement : public XMLNode a->SetAttribute(value); } - /// Sets the named attribute to value. + /// Sets the named attribute to value. + void SetAttribute(const char* name, uint64_t value) { + XMLAttribute* a = FindOrCreateAttribute(name); + a->SetAttribute(value); + } + + /// Sets the named attribute to value. void SetAttribute( const char* name, bool value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( value ); @@ -1506,7 +1571,7 @@ class TINYXML2_LIB XMLElement : public XMLNode @verbatim Hullaballoo!This is text @endverbatim - + For this XML: @verbatim @@ -1520,15 +1585,17 @@ class TINYXML2_LIB XMLElement : public XMLNode /// Convenience method for setting text inside an element. See SetText() for important limitations. void SetText( int value ); /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( unsigned value ); + void SetText( unsigned value ); /// Convenience method for setting text inside an element. See SetText() for important limitations. void SetText(int64_t value); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText(uint64_t value); /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( bool value ); + void SetText( bool value ); /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( double value ); + void SetText( double value ); /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( float value ); + void SetText( float value ); /** Convenience method to query the value of a child text node. This is probably best @@ -1562,6 +1629,8 @@ class TINYXML2_LIB XMLElement : public XMLNode /// See QueryIntText() XMLError QueryInt64Text(int64_t* uval) const; /// See QueryIntText() + XMLError QueryUnsigned64Text(uint64_t* uval) const; + /// See QueryIntText() XMLError QueryBoolText( bool* bval ) const; /// See QueryIntText() XMLError QueryDoubleText( double* dval ) const; @@ -1574,12 +1643,29 @@ class TINYXML2_LIB XMLElement : public XMLNode unsigned UnsignedText(unsigned defaultValue = 0) const; /// See QueryIntText() int64_t Int64Text(int64_t defaultValue = 0) const; + /// See QueryIntText() + uint64_t Unsigned64Text(uint64_t defaultValue = 0) const; /// See QueryIntText() bool BoolText(bool defaultValue = false) const; /// See QueryIntText() double DoubleText(double defaultValue = 0) const; /// See QueryIntText() - float FloatText(float defaultValue = 0) const; + float FloatText(float defaultValue = 0) const; + + /** + Convenience method to create a new XMLElement and add it as last (right) + child of this node. Returns the created and inserted element. + */ + XMLElement* InsertNewChildElement(const char* name); + /// See InsertNewChildElement() + XMLComment* InsertNewComment(const char* comment); + /// See InsertNewChildElement() + XMLText* InsertNewText(const char* text); + /// See InsertNewChildElement() + XMLDeclaration* InsertNewDeclaration(const char* text); + /// See InsertNewChildElement() + XMLUnknown* InsertNewUnknown(const char* text); + // internal: enum ElementClosingType { @@ -1602,11 +1688,7 @@ class TINYXML2_LIB XMLElement : public XMLNode XMLElement( const XMLElement& ); // not supported void operator=( const XMLElement& ); // not supported - XMLAttribute* FindAttribute( const char* name ) { - return const_cast(const_cast(this)->FindAttribute( name )); - } XMLAttribute* FindOrCreateAttribute( const char* name ); - //void LinkAttribute( XMLAttribute* attrib ); char* ParseAttributes( char* p, int* curLineNumPtr ); static void DeleteAttribute( XMLAttribute* attribute ); XMLAttribute* CreateAttribute(); @@ -1634,6 +1716,13 @@ enum Whitespace { class TINYXML2_LIB XMLDocument : public XMLNode { friend class XMLElement; + // Gives access to SetError and Push/PopDepth, but over-access for everything else. + // Wishing C++ had "internal" scope. + friend class XMLNode; + friend class XMLText; + friend class XMLComment; + friend class XMLDeclaration; + friend class XMLUnknown; public: /// constructor XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE ); @@ -1658,7 +1747,7 @@ class TINYXML2_LIB XMLDocument : public XMLNode specified, TinyXML-2 will assume 'xml' points to a null terminated string. */ - XMLError Parse( const char* xml, size_t nBytes=(size_t)(-1) ); + XMLError Parse( const char* xml, size_t nBytes=static_cast(-1) ); /** Load an XML file from disk. @@ -1669,8 +1758,8 @@ class TINYXML2_LIB XMLDocument : public XMLNode /** Load an XML file from disk. You are responsible - for providing and closing the FILE*. - + for providing and closing the FILE*. + NOTE: The file should be opened as binary ("rb") not text in order for TinyXML-2 to correctly do newline normalization. @@ -1785,11 +1874,8 @@ class TINYXML2_LIB XMLDocument : public XMLNode */ void DeleteNode( XMLNode* node ); - void SetError( XMLError error, const char* str1, const char* str2, int lineNum ); - - void ClearError() { - SetError(XML_SUCCESS, 0, 0, 0); - } + /// Clears the error flags. + void ClearError(); /// Return true if there was an error parsing the document. bool Error() const { @@ -1802,20 +1888,20 @@ class TINYXML2_LIB XMLDocument : public XMLNode const char* ErrorName() const; static const char* ErrorIDToName(XMLError errorID); - /// Return a possibly helpful diagnostic location or string. - const char* GetErrorStr1() const; + /** Returns a "long form" error description. A hopefully helpful + diagnostic with location, line number, and/or additional info. + */ + const char* ErrorStr() const; - /// Return a possibly helpful secondary diagnostic location or string. - const char* GetErrorStr2() const; + /// A (trivial) utility function that prints the ErrorStr() to stdout. + void PrintError() const; - /// Return the line where the error occured, or zero if unknown. - int GetErrorLineNum() const + /// Return the line where the error occurred, or zero if unknown. + int ErrorLineNum() const { return _errorLineNum; } - /// If there is an error, print it to stdout. - void PrintError() const; - + /// Clear the document, resetting it to the initial state. void Clear(); @@ -1826,13 +1912,13 @@ class TINYXML2_LIB XMLDocument : public XMLNode NOTE: that the 'target' must be non-null. */ - void DeepCopy(XMLDocument* target); + void DeepCopy(XMLDocument* target) const; // internal char* Identify( char* p, XMLNode** node ); // internal - void MarkInUse(XMLNode*); + void MarkInUse(const XMLNode* const); virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const { return 0; @@ -1849,11 +1935,11 @@ class TINYXML2_LIB XMLDocument : public XMLNode bool _processEntities; XMLError _errorID; Whitespace _whitespaceMode; - mutable StrPair _errorStr1; - mutable StrPair _errorStr2; + mutable StrPair _errorStr; int _errorLineNum; char* _charBuffer; int _parseCurLineNum; + int _parsingDepth; // Memory tracking does add some overhead. // However, the code assumes that you don't // have a bunch of unlinked nodes around. @@ -1871,6 +1957,26 @@ class TINYXML2_LIB XMLDocument : public XMLNode void Parse(); + void SetError( XMLError error, int lineNum, const char* format, ... ); + + // Something of an obvious security hole, once it was discovered. + // Either an ill-formed XML or an excessively deep one can overflow + // the stack. Track stack depth, and error out if needed. + class DepthTracker { + public: + explicit DepthTracker(XMLDocument * document) { + this->_document = document; + document->PushDepth(); + } + ~DepthTracker() { + _document->PopDepth(); + } + private: + XMLDocument * _document; + }; + void PushDepth(); + void PopDepth(); + template NodeType* CreateUnlinkedNode( MemPoolT& pool ); }; @@ -1947,16 +2053,13 @@ class TINYXML2_LIB XMLHandle { public: /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - XMLHandle( XMLNode* node ) { - _node = node; + explicit XMLHandle( XMLNode* node ) : _node( node ) { } /// Create a handle from a node. - XMLHandle( XMLNode& node ) { - _node = &node; + explicit XMLHandle( XMLNode& node ) : _node( &node ) { } /// Copy constructor - XMLHandle( const XMLHandle& ref ) { - _node = ref._node; + XMLHandle( const XMLHandle& ref ) : _node( ref._node ) { } /// Assignment XMLHandle& operator=( const XMLHandle& ref ) { @@ -2030,14 +2133,11 @@ class TINYXML2_LIB XMLHandle class TINYXML2_LIB XMLConstHandle { public: - XMLConstHandle( const XMLNode* node ) { - _node = node; + explicit XMLConstHandle( const XMLNode* node ) : _node( node ) { } - XMLConstHandle( const XMLNode& node ) { - _node = &node; + explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) { } - XMLConstHandle( const XMLConstHandle& ref ) { - _node = ref._node; + XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) { } XMLConstHandle& operator=( const XMLConstHandle& ref ) { @@ -2156,7 +2256,8 @@ class TINYXML2_LIB XMLPrinter : public XMLVisitor void PushAttribute( const char* name, const char* value ); void PushAttribute( const char* name, int value ); void PushAttribute( const char* name, unsigned value ); - void PushAttribute(const char* name, int64_t value); + void PushAttribute( const char* name, int64_t value ); + void PushAttribute( const char* name, uint64_t value ); void PushAttribute( const char* name, bool value ); void PushAttribute( const char* name, double value ); /// If streaming, close the Element. @@ -2168,8 +2269,10 @@ class TINYXML2_LIB XMLPrinter : public XMLVisitor void PushText( int value ); /// Add a text node from an unsigned. void PushText( unsigned value ); - /// Add a text node from an unsigned. - void PushText(int64_t value); + /// Add a text node from a signed 64bit integer. + void PushText( int64_t value ); + /// Add a text node from an unsigned 64bit integer. + void PushText( uint64_t value ); /// Add a text node from a bool. void PushText( bool value ); /// Add a text node from a float. @@ -2215,10 +2318,10 @@ class TINYXML2_LIB XMLPrinter : public XMLVisitor If in print to memory mode, reset the buffer to the beginning. */ - void ClearBuffer() { + void ClearBuffer( bool resetToFirstElement = true ) { _buffer.Clear(); _buffer.Push(0); - _firstElement = true; + _firstElement = resetToFirstElement; } protected: @@ -2228,13 +2331,22 @@ class TINYXML2_LIB XMLPrinter : public XMLVisitor the space and tabs used. A PrintSpace() override should call Print(). */ virtual void PrintSpace( int depth ); - void Print( const char* format, ... ); + virtual void Print( const char* format, ... ); + virtual void Write( const char* data, size_t size ); + virtual void Putc( char ch ); + + inline void Write(const char* data) { Write(data, strlen(data)); } void SealElementIfJustOpened(); bool _elementJustOpened; DynArray< const char*, 10 > _stack; private: + /** + Prepares to write a new node. This includes sealing an element that was + just opened, and writing any whitespace necessary if not in compact mode. + */ + void PrepareForNewNode( bool compactMode ); void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities. bool _firstElement; @@ -2252,6 +2364,10 @@ class TINYXML2_LIB XMLPrinter : public XMLVisitor bool _restrictedEntityFlag[ENTITY_RANGE]; DynArray< char, 20 > _buffer; + + // Prohibit cloning, intentionally not implemented + XMLPrinter( const XMLPrinter& ); + XMLPrinter& operator=( const XMLPrinter& ); }; diff --git a/tinyxml2.pc.in b/tinyxml2.pc.in deleted file mode 100644 index 5a44e89e..00000000 --- a/tinyxml2.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=@CMAKE_INSTALL_LIBDIR@ -includedir=@CMAKE_INSTALL_INCLUDEDIR@ - -Name: TinyXML2 -Description: simple, small, C++ XML parser -Version: @GENERIC_LIB_VERSION@ -Libs: -L${libdir} -ltinyxml2 -Cflags: -I${includedir} diff --git a/tinyxml2/test.vcxproj b/tinyxml2/test.vcxproj deleted file mode 100644 index 9929f756..00000000 --- a/tinyxml2/test.vcxproj +++ /dev/null @@ -1,352 +0,0 @@ - - - - - Debug-Dll - Win32 - - - Debug-Dll - x64 - - - Debug-Lib - Win32 - - - Debug-Lib - x64 - - - Release-Dll - Win32 - - - Release-Dll - x64 - - - Release-Lib - Win32 - - - Release-Lib - x64 - - - - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260} - test - 8.1 - - - - Application - true - Unicode - v140 - - - Application - true - Unicode - v140 - - - Application - true - Unicode - v140 - - - Application - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - Unicode - - - Unicode - true - - - Unicode - - - Unicode - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)$(Configuration)\ - - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)$(Configuration)\ - - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)$(Configuration)\ - - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)$(Configuration)\ - - - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - - - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - - Level4 - Disabled - - - true - - - - - Level4 - Disabled - - - true - - - - - Level4 - Disabled - TINYXML2_IMPORT;%(PreprocessorDefinitions) - - - true - Console - - - - - Level4 - Disabled - TINYXML2_IMPORT;%(PreprocessorDefinitions) - - - true - Console - - - - - Level4 - MaxSpeed - true - true - - - true - true - true - - - - - Level4 - MaxSpeed - true - true - - - true - true - true - - - - - Level4 - MaxSpeed - true - true - AnySuitable - Speed - true - true - true - TINYXML2_IMPORT;%(PreprocessorDefinitions) - - - false - true - true - Console - true - - - - - Level4 - MaxSpeed - true - true - AnySuitable - Speed - true - true - true - TINYXML2_IMPORT;%(PreprocessorDefinitions) - - - false - true - true - Console - true - - - - - Level4 - - - Console - - - - - Level4 - AnySuitable - true - Speed - true - true - true - - - false - Console - true - true - true - - - - - Level4 - - - Console - - - - - Level4 - AnySuitable - true - Speed - true - true - true - - - false - Console - true - true - true - - - - - - - - {d1c528b6-aa02-4d29-9d61-dc08e317a70d} - - - - - - \ No newline at end of file diff --git a/tinyxml2/test.vcxproj.filters b/tinyxml2/test.vcxproj.filters deleted file mode 100644 index 0a70dc68..00000000 --- a/tinyxml2/test.vcxproj.filters +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/tinyxml2/tinyxml2-cbp/README b/tinyxml2/tinyxml2-cbp/README deleted file mode 100644 index 828448e9..00000000 --- a/tinyxml2/tinyxml2-cbp/README +++ /dev/null @@ -1,3 +0,0 @@ -The (default) Release configuration of this project builds a ready to use static library. -The Debug configuration of this project builds an executable console application that -executes all tests provided for tinyxml2 in the xmltest.cpp file. \ No newline at end of file diff --git a/tinyxml2/tinyxml2-cbp/tinyxml2-cbp.cbp b/tinyxml2/tinyxml2-cbp/tinyxml2-cbp.cbp deleted file mode 100644 index 915746f3..00000000 --- a/tinyxml2/tinyxml2-cbp/tinyxml2-cbp.cbp +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - diff --git a/tinyxml2/tinyxml2.sln b/tinyxml2/tinyxml2.sln deleted file mode 100755 index 1c0c92f9..00000000 --- a/tinyxml2/tinyxml2.sln +++ /dev/null @@ -1,56 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml2", "tinyxml2.vcxproj", "{D1C528B6-AA02-4D29-9D61-DC08E317A70D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcxproj", "{E8FB2712-8666-4662-A5B8-2B5B0FB1A260}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug-Dll|Win32 = Debug-Dll|Win32 - Debug-Dll|x64 = Debug-Dll|x64 - Debug-Lib|Win32 = Debug-Lib|Win32 - Debug-Lib|x64 = Debug-Lib|x64 - Release-Dll|Win32 = Release-Dll|Win32 - Release-Dll|x64 = Release-Dll|x64 - Release-Lib|Win32 = Release-Lib|Win32 - Release-Lib|x64 = Release-Lib|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Dll|Win32.ActiveCfg = Debug-Dll|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Dll|Win32.Build.0 = Debug-Dll|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Dll|x64.ActiveCfg = Debug-Dll|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Dll|x64.Build.0 = Debug-Dll|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Lib|Win32.ActiveCfg = Debug-Lib|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Lib|Win32.Build.0 = Debug-Lib|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Lib|x64.ActiveCfg = Debug-Lib|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Debug-Lib|x64.Build.0 = Debug-Lib|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Dll|Win32.ActiveCfg = Release-Dll|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Dll|Win32.Build.0 = Release-Dll|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Dll|x64.ActiveCfg = Release-Dll|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Dll|x64.Build.0 = Release-Dll|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Lib|Win32.ActiveCfg = Release-Lib|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Lib|Win32.Build.0 = Release-Lib|Win32 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Lib|x64.ActiveCfg = Release-Lib|x64 - {D1C528B6-AA02-4D29-9D61-DC08E317A70D}.Release-Lib|x64.Build.0 = Release-Lib|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Dll|Win32.ActiveCfg = Debug-Dll|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Dll|Win32.Build.0 = Debug-Dll|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Dll|x64.ActiveCfg = Debug-Dll|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Dll|x64.Build.0 = Debug-Dll|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Lib|Win32.ActiveCfg = Debug-Lib|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Lib|Win32.Build.0 = Debug-Lib|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Lib|x64.ActiveCfg = Debug-Lib|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Debug-Lib|x64.Build.0 = Debug-Lib|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Dll|Win32.ActiveCfg = Release-Dll|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Dll|Win32.Build.0 = Release-Dll|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Dll|x64.ActiveCfg = Release-Dll|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Dll|x64.Build.0 = Release-Dll|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Lib|Win32.ActiveCfg = Release-Lib|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Lib|Win32.Build.0 = Release-Lib|Win32 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Lib|x64.ActiveCfg = Release-Lib|x64 - {E8FB2712-8666-4662-A5B8-2B5B0FB1A260}.Release-Lib|x64.Build.0 = Release-Lib|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/tinyxml2/tinyxml2.vcxproj b/tinyxml2/tinyxml2.vcxproj deleted file mode 100755 index a91d72d9..00000000 --- a/tinyxml2/tinyxml2.vcxproj +++ /dev/null @@ -1,393 +0,0 @@ - - - - - Debug-Dll - Win32 - - - Debug-Dll - x64 - - - Debug-Lib - Win32 - - - Debug-Lib - x64 - - - Release-Dll - Win32 - - - Release-Dll - x64 - - - Release-Lib - Win32 - - - Release-Lib - x64 - - - - {D1C528B6-AA02-4D29-9D61-DC08E317A70D} - Win32Proj - tinyxml2 - 8.1 - - - - StaticLibrary - true - Unicode - v140 - - - DynamicLibrary - true - Unicode - v140 - - - StaticLibrary - true - Unicode - v140 - - - DynamicLibrary - true - Unicode - v140 - - - StaticLibrary - false - true - Unicode - v140 - - - DynamicLibrary - false - true - Unicode - v140 - - - StaticLibrary - false - true - Unicode - v140 - - - DynamicLibrary - false - true - Unicode - v140 - - - StaticLibrary - Unicode - - - StaticLibrary - true - Unicode - - - StaticLibrary - Unicode - - - StaticLibrary - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - true - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - true - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - false - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - false - $(SolutionDir)bin\$(ProjectName)\$(Platform)-$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Platform)-$(Configuration)\ - - - - - - Level4 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level4 - Disabled - WIN32;TINYXML2_EXPORT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - NotSet - true - - - - - - - Level4 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - - - - - - - Level4 - Disabled - WIN32;TINYXML2_EXPORT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - NotSet - true - - - - - Level4 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - AnySuitable - Speed - true - true - true - false - - - Console - true - true - true - true - - - - - Level4 - - - MaxSpeed - true - true - WIN32;TINYXML2_EXPORT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - AnySuitable - Speed - true - true - true - false - - - NotSet - true - true - true - true - - - - - Level4 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - AnySuitable - Speed - true - true - true - false - - - Console - true - true - true - true - - - - - Level4 - - - MaxSpeed - true - true - WIN32;TINYXML2_EXPORT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - AnySuitable - Speed - true - true - true - false - - - NotSet - true - true - true - true - - - - - true - - - - - true - - - AnySuitable - - - true - - - Speed - - - true - - - true - true - false - - - - - true - - - - - true - - - AnySuitable - - - true - - - Speed - - - true - - - true - true - false - - - - - - - - - - - - \ No newline at end of file diff --git a/tinyxml2/tinyxml2.vcxproj.filters b/tinyxml2/tinyxml2.vcxproj.filters deleted file mode 100755 index e19968a7..00000000 --- a/tinyxml2/tinyxml2.vcxproj.filters +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/tinyxml2/tinyxml2.xcodeproj/project.pbxproj b/tinyxml2/tinyxml2.xcodeproj/project.pbxproj deleted file mode 100644 index 58c4fccc..00000000 --- a/tinyxml2/tinyxml2.xcodeproj/project.pbxproj +++ /dev/null @@ -1,211 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 037AE8A5151E692700E0F29F /* xmltest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 037AE8A3151E692700E0F29F /* xmltest.cpp */; }; - 03F28B53152E9B1B00D4CD90 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03F28B4A152E9B1B00D4CD90 /* tinyxml2.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 037AE86D151E685F00E0F29F /* xmltest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xmltest; sourceTree = BUILT_PRODUCTS_DIR; }; - 037AE8A3151E692700E0F29F /* xmltest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xmltest.cpp; path = ../xmltest.cpp; sourceTree = SOURCE_ROOT; }; - 03F28B4A152E9B1B00D4CD90 /* tinyxml2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml2.cpp; sourceTree = ""; }; - 03F28B4B152E9B1B00D4CD90 /* tinyxml2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml2.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 037AE86B151E685F00E0F29F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 037AE056151CCC5200E0F29F = { - isa = PBXGroup; - children = ( - 037AE069151CCC7000E0F29F /* Classes */, - 03F28B60152E9B4C00D4CD90 /* Libraries */, - 037AE06F151CCCB900E0F29F /* Products */, - ); - sourceTree = ""; - }; - 037AE069151CCC7000E0F29F /* Classes */ = { - isa = PBXGroup; - children = ( - 037AE8A3151E692700E0F29F /* xmltest.cpp */, - ); - name = Classes; - sourceTree = ""; - }; - 037AE06F151CCCB900E0F29F /* Products */ = { - isa = PBXGroup; - children = ( - 037AE86D151E685F00E0F29F /* xmltest */, - ); - name = Products; - sourceTree = ""; - }; - 03F28AD7152E9B1B00D4CD90 /* tinyxml2 */ = { - isa = PBXGroup; - children = ( - 03F28B4A152E9B1B00D4CD90 /* tinyxml2.cpp */, - 03F28B4B152E9B1B00D4CD90 /* tinyxml2.h */, - ); - name = tinyxml2; - path = ..; - sourceTree = SOURCE_ROOT; - }; - 03F28B60152E9B4C00D4CD90 /* Libraries */ = { - isa = PBXGroup; - children = ( - 03F28AD7152E9B1B00D4CD90 /* tinyxml2 */, - ); - name = Libraries; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 037AE86C151E685F00E0F29F /* xmltest */ = { - isa = PBXNativeTarget; - buildConfigurationList = 037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "xmltest" */; - buildPhases = ( - 037AE86A151E685F00E0F29F /* Sources */, - 037AE86B151E685F00E0F29F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = xmltest; - productName = tinyxml2; - productReference = 037AE86D151E685F00E0F29F /* xmltest */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 037AE058151CCC5200E0F29F /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0610; - }; - buildConfigurationList = 037AE05B151CCC5200E0F29F /* Build configuration list for PBXProject "tinyxml2" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 037AE056151CCC5200E0F29F; - productRefGroup = 037AE06F151CCCB900E0F29F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 037AE86C151E685F00E0F29F /* xmltest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 037AE86A151E685F00E0F29F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 037AE8A5151E692700E0F29F /* xmltest.cpp in Sources */, - 03F28B53152E9B1B00D4CD90 /* tinyxml2.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 037AE059151CCC5200E0F29F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)/Debug"; - COPY_PHASE_STRIP = NO; - "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = DEBUG; - ONLY_ACTIVE_ARCH = YES; - SYMROOT = build; - }; - name = Debug; - }; - 037AE05A151CCC5200E0F29F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - name = Release; - }; - 037AE86F151E686000E0F29F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = ..; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - INSTALL_PATH = /usr/local/bin; - MACOSX_DEPLOYMENT_TARGET = ""; - PREBINDING = NO; - PRODUCT_NAME = xmltest; - }; - name = Debug; - }; - 037AE870151E686000E0F29F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = ..; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_MODEL_TUNING = G5; - INSTALL_PATH = /usr/local/bin; - MACOSX_DEPLOYMENT_TARGET = ""; - PREBINDING = NO; - PRODUCT_NAME = tinyxml2; - ZERO_LINK = NO; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 037AE05B151CCC5200E0F29F /* Build configuration list for PBXProject "tinyxml2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 037AE059151CCC5200E0F29F /* Debug */, - 037AE05A151CCC5200E0F29F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "xmltest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 037AE86F151E686000E0F29F /* Debug */, - 037AE870151E686000E0F29F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 037AE058151CCC5200E0F29F /* Project object */; -} diff --git a/vs/tinyxml2.sln b/vs/tinyxml2.sln new file mode 100644 index 00000000..be0c85a5 --- /dev/null +++ b/vs/tinyxml2.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31229.75 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml2", "tinyxml2.vcxproj", "{7C72653A-E6F8-4584-B553-DE3A0AEE4356}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Debug|x64.ActiveCfg = Debug|x64 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Debug|x64.Build.0 = Debug|x64 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Debug|x86.ActiveCfg = Debug|Win32 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Debug|x86.Build.0 = Debug|Win32 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Release|x64.ActiveCfg = Release|x64 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Release|x64.Build.0 = Release|x64 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Release|x86.ActiveCfg = Release|Win32 + {7C72653A-E6F8-4584-B553-DE3A0AEE4356}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8F57874D-F373-476E-93F5-EB09D74866E8} + EndGlobalSection +EndGlobal diff --git a/vs/tinyxml2.vcxproj b/vs/tinyxml2.vcxproj new file mode 100644 index 00000000..be2a81ad --- /dev/null +++ b/vs/tinyxml2.vcxproj @@ -0,0 +1,151 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {7c72653a-e6f8-4584-b553-de3a0aee4356} + tinyxml2 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/vs/tinyxml2.vcxproj.filters b/vs/tinyxml2.vcxproj.filters new file mode 100644 index 00000000..b729bf84 --- /dev/null +++ b/vs/tinyxml2.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/xmltest.cpp b/xmltest.cpp old mode 100644 new mode 100755 index 276c61b8..7f196f11 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -5,16 +5,20 @@ #endif #include "tinyxml2.h" +#include #include #include #include -#if defined( _MSC_VER ) +#if defined( _MSC_VER ) || defined (WIN32) #include #define WIN32_LEAN_AND_MEAN #include _CrtMemState startMemState; _CrtMemState endMemState; +#else + #include + #include #endif using namespace tinyxml2; @@ -30,7 +34,7 @@ bool XMLTest (const char* testString, const char* expected, const char* found, b pass = true; else if ( !expected || !found ) pass = false; - else + else pass = !strcmp( expected, found ); if ( pass ) printf ("[pass]"); @@ -78,8 +82,15 @@ template< class T > bool XMLTest( const char* testString, T expected, T found, b if ( !echo ) printf (" %s\n", testString); - else - printf (" %s [%d][%d]\n", testString, static_cast(expected), static_cast(found) ); + else { + char expectedAsString[64]; + XMLUtil::ToStr(expected, expectedAsString, sizeof(expectedAsString)); + + char foundAsString[64]; + XMLUtil::ToStr(found, foundAsString, sizeof(foundAsString)); + + printf (" %s [%s][%s]\n", testString, expectedAsString, foundAsString ); + } if ( pass ) ++gPass; @@ -108,7 +119,7 @@ int example_1() return doc.ErrorID(); } -/** @page Example-1 Load an XML File +/** @page Example_1 Load an XML File * @dontinclude ./xmltest.cpp * Basic XML file loading. * The basic syntax to load an XML file from @@ -117,7 +128,7 @@ int example_1() * @skip example_1() * @until } */ - + int example_2() { @@ -127,7 +138,7 @@ int example_2() return doc.ErrorID(); } -/** @page Example-2 Parse an XML from char buffer +/** @page Example_2 Parse an XML from char buffer * @dontinclude ./xmltest.cpp * Basic XML string parsing. * The basic syntax to parse an XML for @@ -160,7 +171,7 @@ int example_3() return doc.ErrorID(); } -/** @page Example-3 Get information out of XML +/** @page Example_3 Get information out of XML @dontinclude ./xmltest.cpp In this example, we navigate a simple XML file, and read some interesting text. Note @@ -168,8 +179,8 @@ int example_3() checking; working code should check for null pointers when walking an XML tree, or use XMLHandle. - - (The XML is an excerpt from "dream.xml"). + + (The XML is an excerpt from "dream.xml"). @skip example_3() @until "; @@ -188,7 +199,7 @@ int example_3() - For this example, we want to print out the + For this example, we want to print out the title of the play. The text of the title (what we want) is child of the "TITLE" element which is a child of the "PLAY" element. @@ -208,8 +219,8 @@ int example_3() Text is just another Node in the XML DOM. And in fact you should be a little cautious with it, as - text nodes can contain elements. - + text nodes can contain elements. + @verbatim Consider: A Midsummer Night's Dream @endverbatim @@ -221,7 +232,7 @@ int example_3() Noting that here we use FirstChild() since we are looking for XMLText, not an element, and ToText() - is a cast from a Node to a XMLText. + is a cast from a Node to a XMLText. */ @@ -251,7 +262,7 @@ bool example_4() return !doc.Error() && ( v0 == v1 ); } -/** @page Example-4 Read attributes and text information. +/** @page Example_4 Read attributes and text information. @dontinclude ./xmltest.cpp There are fundamentally 2 ways of writing a key-value @@ -265,7 +276,7 @@ bool example_4() @skip example_4() @until ""; - TinyXML-2 has accessors for both approaches. + TinyXML-2 has accessors for both approaches. When using an attribute, you navigate to the XMLElement with that attribute and use the QueryIntAttribute() @@ -288,7 +299,7 @@ bool example_4() int main( int argc, const char ** argv ) { - #if defined( _MSC_VER ) && defined( DEBUG ) + #if defined( _MSC_VER ) && defined( TINYXML2_DEBUG ) _CrtMemCheckpoint( &startMemState ); // Enable MS Visual C++ debug heap memory leaks dump on exit _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); @@ -334,10 +345,10 @@ int main( int argc, const char ** argv ) } fclose( fp ); - XMLTest( "Example-1", 0, example_1() ); - XMLTest( "Example-2", 0, example_2() ); - XMLTest( "Example-3", 0, example_3() ); - XMLTest( "Example-4", true, example_4() ); + XMLTest( "Example_1", 0, example_1() ); + XMLTest( "Example_2", 0, example_2() ); + XMLTest( "Example_3", 0, example_3() ); + XMLTest( "Example_4", true, example_4() ); /* ------ Example 2: Lookup information. ---- */ @@ -362,6 +373,7 @@ int main( int argc, const char ** argv ) for( int i=0; test[i]; ++i ) { XMLDocument doc; doc.Parse( test[i] ); + XMLTest( "Element test", false, doc.Error() ); doc.Print(); printf( "----------------------------------------------\n" ); } @@ -376,13 +388,43 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( test ); + XMLTest( "Hello world declaration", false, doc.Error() ); doc.Print(); } + { + // This test is pre-test for the next one + // (where Element1 is inserted "after itself". + // This code didn't use to crash. + XMLDocument doc; + XMLElement* element1 = doc.NewElement("Element1"); + XMLElement* element2 = doc.NewElement("Element2"); + doc.InsertEndChild(element1); + doc.InsertEndChild(element2); + doc.InsertAfterChild(element2, element2); + doc.InsertAfterChild(element2, element2); + } + + { + XMLDocument doc; + XMLElement* element1 = doc.NewElement("Element1"); + XMLElement* element2 = doc.NewElement("Element2"); + doc.InsertEndChild(element1); + doc.InsertEndChild(element2); + + // This insertion "after itself" + // used to cause invalid memory access and crash + doc.InsertAfterChild(element1, element1); + doc.InsertAfterChild(element1, element1); + doc.InsertAfterChild(element2, element2); + doc.InsertAfterChild(element2, element2); + } + { static const char* test = "Text before."; XMLDocument doc; doc.Parse( test ); + XMLTest( "Element text before", false, doc.Error() ); XMLElement* root = doc.FirstChildElement(); XMLElement* newElement = doc.NewElement( "Subelement" ); root->InsertEndChild( newElement ); @@ -392,16 +434,36 @@ int main( int argc, const char ** argv ) XMLDocument* doc = new XMLDocument(); static const char* test = ""; doc->Parse( test ); + XMLTest( "Element with sub element", false, doc->Error() ); delete doc; } + { + // Test: Programmatic DOM nodes insertion return values + XMLDocument doc; + + XMLNode* first = doc.NewElement( "firstElement" ); + XMLTest( "New element", true, first != 0 ); + XMLNode* firstAfterInsertion = doc.InsertFirstChild( first ); + XMLTest( "New element inserted first", true, firstAfterInsertion == first ); + + XMLNode* last = doc.NewElement( "lastElement" ); + XMLTest( "New element", true, last != 0 ); + XMLNode* lastAfterInsertion = doc.InsertEndChild( last ); + XMLTest( "New element inserted last", true, lastAfterInsertion == last ); + + XMLNode* middle = doc.NewElement( "middleElement" ); + XMLTest( "New element", true, middle != 0 ); + XMLNode* middleAfterInsertion = doc.InsertAfterChild( first, middle ); + XMLTest( "New element inserted middle", true, middleAfterInsertion == middle ); + } { // Test: Programmatic DOM // Build: // // + // // - // - // & Text! + // & Text! // XMLDocument* doc = new XMLDocument(); @@ -412,8 +474,12 @@ int main( int argc, const char ** argv ) sub[i]->SetAttribute( "attrib", i ); } element->InsertEndChild( sub[2] ); + + const int dummyInitialValue = 1000; + int dummyValue = dummyInitialValue; + XMLNode* comment = element->InsertFirstChild( doc->NewComment( "comment" ) ); - comment->SetUserData((void*)2); + comment->SetUserData(&dummyValue); element->InsertAfterChild( comment, sub[0] ); element->InsertAfterChild( sub[0], sub[1] ); sub[2]->InsertFirstChild( doc->NewText( "& Text!" )); @@ -423,7 +489,8 @@ int main( int argc, const char ** argv ) XMLTest( "Programmatic DOM", 2, doc->FirstChildElement()->LastChildElement( "sub" )->IntAttribute( "attrib" ) ); XMLTest( "Programmatic DOM", "& Text!", doc->FirstChildElement()->LastChildElement( "sub" )->FirstChild()->ToText()->Value() ); - XMLTest("User data", (void*)2 == comment->GetUserData(), true, false); + XMLTest("User data - pointer", true, &dummyValue == comment->GetUserData(), false); + XMLTest("User data - value behind pointer", dummyInitialValue, dummyValue, false); // And now deletion: element->DeleteChild( sub[2] ); @@ -433,12 +500,14 @@ int main( int argc, const char ** argv ) element->LastChildElement()->DeleteAttribute( "attrib" ); XMLTest( "Programmatic DOM", true, doc->FirstChildElement()->FirstChildElement()->BoolAttribute( "attrib" ) ); - int value1 = 10; - int value2 = doc->FirstChildElement()->LastChildElement()->IntAttribute( "attrib", 10 ); + const int defaultIntValue = 10; + const int replacementIntValue = 20; + int value1 = defaultIntValue; + int value2 = doc->FirstChildElement()->LastChildElement()->IntAttribute( "attrib", replacementIntValue ); XMLError result = doc->FirstChildElement()->LastChildElement()->QueryIntAttribute( "attrib", &value1 ); XMLTest( "Programmatic DOM", XML_NO_ATTRIBUTE, result ); - XMLTest( "Programmatic DOM", 10, value1 ); - XMLTest( "Programmatic DOM", 10, value2 ); + XMLTest( "Programmatic DOM", defaultIntValue, value1 ); + XMLTest( "Programmatic DOM", replacementIntValue, value2 ); doc->Print(); @@ -453,7 +522,9 @@ int main( int argc, const char ** argv ) XMLTest( "Compact mode", "", streamer.CStr(), false ); } doc->SaveFile( "./resources/out/pretty.xml" ); + XMLTest( "Save pretty.xml", false, doc->Error() ); doc->SaveFile( "./resources/out/compact.xml", true ); + XMLTest( "Save compact.xml", false, doc->Error() ); delete doc; } { @@ -463,13 +534,15 @@ int main( int argc, const char ** argv ) //int newStart = gNew; XMLDocument doc; doc.LoadFile( "resources/dream.xml" ); + XMLTest( "Load dream.xml", false, doc.Error() ); doc.SaveFile( "resources/out/dreamout.xml" ); + XMLTest( "Save dreamout.xml", false, doc.Error() ); doc.PrintError(); XMLTest( "Dream", "xml version=\"1.0\"", doc.FirstChild()->ToDeclaration()->Value() ); - XMLTest( "Dream", true, doc.FirstChild()->NextSibling()->ToUnknown() ? true : false ); + XMLTest( "Dream", true, doc.FirstChild()->NextSibling()->ToUnknown() != 0 ); XMLTest( "Dream", "DOCTYPE PLAY SYSTEM \"play.dtd\"", doc.FirstChild()->NextSibling()->ToUnknown()->Value() ); XMLTest( "Dream", "And Robin shall restore amends.", @@ -479,9 +552,10 @@ int main( int argc, const char ** argv ) XMLDocument doc2; doc2.LoadFile( "resources/out/dreamout.xml" ); + XMLTest( "Load dreamout.xml", false, doc2.Error() ); XMLTest( "Dream-out", "xml version=\"1.0\"", doc2.FirstChild()->ToDeclaration()->Value() ); - XMLTest( "Dream-out", true, doc2.FirstChild()->NextSibling()->ToUnknown() ? true : false ); + XMLTest( "Dream-out", true, doc2.FirstChild()->NextSibling()->ToUnknown() != 0 ); XMLTest( "Dream-out", "DOCTYPE PLAY SYSTEM \"play.dtd\"", doc2.FirstChild()->NextSibling()->ToUnknown()->Value() ); XMLTest( "Dream-out", "And Robin shall restore amends.", @@ -500,6 +574,10 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( error ); XMLTest( "Bad XML", XML_ERROR_PARSING_ATTRIBUTE, doc.ErrorID() ); + const char* errorStr = doc.ErrorStr(); + XMLTest("Formatted error string", + "Error=XML_ERROR_PARSING_ATTRIBUTE ErrorID=7 (0x7) Line number=3: XMLElement name=wrong", + errorStr); } { @@ -507,6 +585,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); + XMLTest( "Top level attributes", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); @@ -542,6 +621,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); + XMLTest( "Empty top element", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); @@ -552,12 +632,28 @@ int main( int argc, const char ** argv ) ele->SetAttribute( "int", 1 ); ele->SetAttribute( "double", -1.0 ); + const char* answer = 0; + ele->QueryAttribute("str", &answer); + XMLTest("Query char attribute", "strValue", answer); + const char* cStr = ele->Attribute( "str" ); - ele->QueryIntAttribute( "int", &iVal ); - ele->QueryDoubleAttribute( "double", &dVal ); + { + XMLError queryResult = ele->QueryIntAttribute( "int", &iVal ); + XMLTest( "Query int attribute", XML_SUCCESS, queryResult); + } + { + XMLError queryResult = ele->QueryDoubleAttribute( "double", &dVal ); + XMLTest( "Query double attribute", XML_SUCCESS, queryResult); + } - ele->QueryAttribute( "int", &iVal2 ); - ele->QueryAttribute( "double", &dVal2 ); + { + XMLError queryResult = ele->QueryAttribute( "int", &iVal2 ); + XMLTest( "Query int attribute generic", (int)XML_SUCCESS, queryResult); + } + { + XMLError queryResult = ele->QueryAttribute( "double", &dVal2 ); + XMLTest( "Query double attribute generic", (int)XML_SUCCESS, queryResult); + } XMLTest( "Attribute match test", "strValue", ele->Attribute( "str", "strValue" ) ); XMLTest( "Attribute round trip. c-string.", "strValue", cStr ); @@ -566,12 +662,13 @@ int main( int argc, const char ** argv ) XMLTest( "Alternate query", true, iVal == iVal2 ); XMLTest( "Alternate query", true, dVal == dVal2 ); XMLTest( "Alternate query", true, iVal == ele->IntAttribute("int") ); - XMLTest( "Alternate query", true, dVal == ele->DoubleAttribute("double") ); + XMLTest( "Alternate query", true, dVal == ele->DoubleAttribute("double") ); } { XMLDocument doc; doc.LoadFile( "resources/utf8test.xml" ); + XMLTest( "Load utf8test.xml", false, doc.Error() ); // Get the attribute "value" from the "Russian" element and check it. XMLElement* element = doc.FirstChildElement( "document" )->FirstChildElement( "Russian" ); @@ -593,16 +690,20 @@ int main( int argc, const char ** argv ) // Now try for a round trip. doc.SaveFile( "resources/out/utf8testout.xml" ); + XMLTest( "UTF-8: Save testout.xml", false, doc.Error() ); // Check the round trip. - int okay = 0; + bool roundTripOkay = false; FILE* saved = fopen( "resources/out/utf8testout.xml", "r" ); + XMLTest( "UTF-8: Open utf8testout.xml", true, saved != 0 ); + FILE* verify = fopen( "resources/utf8testverify.xml", "r" ); + XMLTest( "UTF-8: Open utf8testverify.xml", true, verify != 0 ); if ( saved && verify ) { - okay = 1; + roundTripOkay = true; char verifyBuf[256]; while ( fgets( verifyBuf, 256, verify ) ) { @@ -615,7 +716,7 @@ int main( int argc, const char ** argv ) { printf( "verify:%s<\n", verifyBuf ); printf( "saved :%s<\n", savedBuf ); - okay = 0; + roundTripOkay = false; break; } } @@ -624,7 +725,7 @@ int main( int argc, const char ** argv ) fclose( saved ); if ( verify ) fclose( verify ); - XMLTest( "UTF-8: Verified multi-language round trip.", 1, okay ); + XMLTest( "UTF-8: Verified multi-language round trip.", true, roundTripOkay ); } // --------GetText()----------- @@ -632,12 +733,14 @@ int main( int argc, const char ** argv ) const char* str = "This is text"; XMLDocument doc; doc.Parse( str ); + XMLTest( "Double whitespace", false, doc.Error() ); const XMLElement* element = doc.RootElement(); XMLTest( "GetText() normal use.", "This is text", element->GetText() ); str = "This is text"; doc.Parse( str ); + XMLTest( "Bold text simulation", false, doc.Error() ); element = doc.RootElement(); XMLTest( "GetText() contained element.", element->GetText() == 0, true ); @@ -649,6 +752,7 @@ int main( int argc, const char ** argv ) const char* str = ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "Empty closed element", false, doc.Error() ); XMLElement* element = doc.RootElement(); element->SetText("darkness."); @@ -659,6 +763,7 @@ int main( int argc, const char ** argv ) str = ""; doc.Parse( str ); + XMLTest( "Empty self-closed element", false, doc.Error() ); element = doc.RootElement(); element->SetText("The driver"); @@ -670,15 +775,17 @@ int main( int argc, const char ** argv ) str = "Text in nested element"; doc.Parse( str ); + XMLTest( "Text in nested element", false, doc.Error() ); element = doc.RootElement(); - + element->SetText("wolves"); XMLTest( "SetText() prefix to nested non-text children.", "wolves", element->GetText() ); str = ""; doc.Parse( str ); + XMLTest( "Empty self-closed element round 2", false, doc.Error() ); element = doc.RootElement(); - + element->SetText( "str" ); XMLTest( "SetText types", "str", element->GetText() ); @@ -701,44 +808,97 @@ int main( int argc, const char ** argv ) // ---------- Attributes --------- { static const int64_t BIG = -123456789012345678; + static const uint64_t BIG_POS = 123456789012345678; XMLDocument doc; XMLElement* element = doc.NewElement("element"); doc.InsertFirstChild(element); { element->SetAttribute("attrib", int(-100)); - int v = 0; - element->QueryIntAttribute("attrib", &v); - XMLTest("Attribute: int", -100, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: int", -100, v, true); + { + int v = 0; + XMLError queryResult = element->QueryIntAttribute("attrib", &v); + XMLTest("Attribute: int", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int", -100, v, true); + } + { + int v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: int", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int", -100, v, true); + } XMLTest("Attribute: int", -100, element->IntAttribute("attrib"), true); } { element->SetAttribute("attrib", unsigned(100)); - unsigned v = 0; - element->QueryUnsignedAttribute("attrib", &v); - XMLTest("Attribute: unsigned", unsigned(100), v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: unsigned", unsigned(100), v, true); + { + unsigned v = 0; + XMLError queryResult = element->QueryUnsignedAttribute("attrib", &v); + XMLTest("Attribute: unsigned", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: unsigned", unsigned(100), v, true); + } + { + unsigned v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: unsigned", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: unsigned", unsigned(100), v, true); + } + { + const char* v = "failed"; + XMLError queryResult = element->QueryStringAttribute("not-attrib", &v); + XMLTest("Attribute: string default", false, queryResult == XML_SUCCESS); + queryResult = element->QueryStringAttribute("attrib", &v); + XMLTest("Attribute: string", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: string", "100", v); + } XMLTest("Attribute: unsigned", unsigned(100), element->UnsignedAttribute("attrib"), true); } { element->SetAttribute("attrib", BIG); - int64_t v = 0; - element->QueryInt64Attribute("attrib", &v); - XMLTest("Attribute: int64_t", BIG, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: int64_t", BIG, v, true); + { + int64_t v = 0; + XMLError queryResult = element->QueryInt64Attribute("attrib", &v); + XMLTest("Attribute: int64_t", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int64_t", BIG, v, true); + } + { + int64_t v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: int64_t", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int64_t", BIG, v, true); + } XMLTest("Attribute: int64_t", BIG, element->Int64Attribute("attrib"), true); } - { + { + element->SetAttribute("attrib", BIG_POS); + { + uint64_t v = 0; + XMLError queryResult = element->QueryUnsigned64Attribute("attrib", &v); + XMLTest("Attribute: uint64_t", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: uint64_t", BIG_POS, v, true); + } + { + uint64_t v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: uint64_t", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: uint64_t", BIG_POS, v, true); + } + XMLTest("Attribute: uint64_t", BIG_POS, element->Unsigned64Attribute("attrib"), true); + } + { element->SetAttribute("attrib", true); - bool v = false; - element->QueryBoolAttribute("attrib", &v); - XMLTest("Attribute: bool", true, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: bool", true, v, true); + { + bool v = false; + XMLError queryResult = element->QueryBoolAttribute("attrib", &v); + XMLTest("Attribute: bool", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: bool", true, v, true); + } + { + bool v = false; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: bool", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: bool", true, v, true); + } XMLTest("Attribute: bool", true, element->BoolAttribute("attrib"), true); } { @@ -755,40 +915,64 @@ int main( int argc, const char ** argv ) } { element->SetAttribute("attrib", 100.0); - double v = 0; - element->QueryDoubleAttribute("attrib", &v); - XMLTest("Attribute: double", 100.0, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: double", 100.0, v, true); + { + double v = 0; + XMLError queryResult = element->QueryDoubleAttribute("attrib", &v); + XMLTest("Attribute: double", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: double", 100.0, v, true); + } + { + double v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: bool", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: double", 100.0, v, true); + } XMLTest("Attribute: double", 100.0, element->DoubleAttribute("attrib"), true); } { element->SetAttribute("attrib", 100.0f); - float v = 0; - element->QueryFloatAttribute("attrib", &v); - XMLTest("Attribute: float", 100.0f, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: float", 100.0f, v, true); + { + float v = 0; + XMLError queryResult = element->QueryFloatAttribute("attrib", &v); + XMLTest("Attribute: float", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: float", 100.0f, v, true); + } + { + float v = 0; + XMLError queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: float", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: float", 100.0f, v, true); + } XMLTest("Attribute: float", 100.0f, element->FloatAttribute("attrib"), true); } { element->SetText(BIG); int64_t v = 0; - element->QueryInt64Text(&v); + XMLError queryResult = element->QueryInt64Text(&v); + XMLTest("Element: int64_t", XML_SUCCESS, queryResult, true); XMLTest("Element: int64_t", BIG, v, true); } - } + { + element->SetText(BIG_POS); + uint64_t v = 0; + XMLError queryResult = element->QueryUnsigned64Text(&v); + XMLTest("Element: uint64_t", XML_SUCCESS, queryResult, true); + XMLTest("Element: uint64_t", BIG_POS, v, true); + } + } // ---------- XMLPrinter stream mode ------ { { - FILE* printerfp = fopen("resources/printer.xml", "w"); + FILE* printerfp = fopen("resources/out/printer.xml", "w"); + XMLTest("Open printer.xml", true, printerfp != 0); XMLPrinter printer(printerfp); printer.OpenElement("foo"); printer.PushAttribute("attrib-text", "text"); printer.PushAttribute("attrib-int", int(1)); printer.PushAttribute("attrib-unsigned", unsigned(2)); printer.PushAttribute("attrib-int64", int64_t(3)); + printer.PushAttribute("attrib-uint64", uint64_t(37)); printer.PushAttribute("attrib-bool", true); printer.PushAttribute("attrib-double", 4.0); printer.CloseElement(); @@ -796,7 +980,7 @@ int main( int argc, const char ** argv ) } { XMLDocument doc; - doc.LoadFile("resources/printer.xml"); + doc.LoadFile("resources/out/printer.xml"); XMLTest("XMLPrinter Stream mode: load", XML_SUCCESS, doc.ErrorID(), true); const XMLDocument& cdoc = doc; @@ -809,12 +993,111 @@ int main( int argc, const char ** argv ) XMLTest("attrib-unsigned", unsigned(2), attrib->UnsignedValue(), true); attrib = cdoc.FirstChildElement("foo")->FindAttribute("attrib-int64"); XMLTest("attrib-int64", int64_t(3), attrib->Int64Value(), true); + attrib = cdoc.FirstChildElement("foo")->FindAttribute("attrib-uint64"); + XMLTest("attrib-uint64", uint64_t(37), attrib->Unsigned64Value(), true); attrib = cdoc.FirstChildElement("foo")->FindAttribute("attrib-bool"); XMLTest("attrib-bool", true, attrib->BoolValue(), true); attrib = cdoc.FirstChildElement("foo")->FindAttribute("attrib-double"); XMLTest("attrib-double", 4.0, attrib->DoubleValue(), true); } + // Add API_testcatse :PushDeclaration();PushText();PushComment() + { + FILE* fp1 = fopen("resources/out/printer_1.xml", "w"); + XMLPrinter printer(fp1); + + printer.PushDeclaration("version = '1.0' enconding = 'utf-8'"); + + printer.OpenElement("foo"); + printer.PushAttribute("attrib-text", "text"); + + printer.OpenElement("text"); + printer.PushText("Tinyxml2"); + printer.CloseElement(); + + printer.OpenElement("int"); + printer.PushText(int(11)); + printer.CloseElement(); + + printer.OpenElement("unsigned"); + printer.PushText(unsigned(12)); + printer.CloseElement(); + + printer.OpenElement("int64_t"); + printer.PushText(int64_t(13)); + printer.CloseElement(); + + printer.OpenElement("uint64_t"); + printer.PushText(uint64_t(14)); + printer.CloseElement(); + + printer.OpenElement("bool"); + printer.PushText(true); + printer.CloseElement(); + + printer.OpenElement("float"); + printer.PushText("1.56"); + printer.CloseElement(); + + printer.OpenElement("double"); + printer.PushText("12.12"); + printer.CloseElement(); + + printer.OpenElement("comment"); + printer.PushComment("this is Tinyxml2"); + printer.CloseElement(); + + printer.CloseElement(); + fclose(fp1); + } + { + XMLDocument doc; + doc.LoadFile("resources/out/printer_1.xml"); + XMLTest("XMLPrinter Stream mode: load", XML_SUCCESS, doc.ErrorID(), true); + + const XMLDocument& cdoc = doc; + + const XMLElement* root = cdoc.FirstChildElement("foo"); + const char* text_value; + text_value = root->FirstChildElement("text")->GetText(); + XMLTest("PushText( const char* text, bool cdata=false ) test", "Tinyxml2", text_value); + + int int_value; + int_value = root->FirstChildElement("int")->IntText(); + XMLTest("PushText( int value ) test", 11, int_value); + + unsigned unsigned_value; + unsigned_value = root->FirstChildElement("unsigned")->UnsignedText(); + XMLTest("PushText( unsigned value ) test", (unsigned)12, unsigned_value); + + int64_t int64_t_value; + int64_t_value = root->FirstChildElement("int64_t")->Int64Text(); + XMLTest("PushText( int64_t value ) test", (int64_t) 13, int64_t_value); + + uint64_t uint64_t_value; + uint64_t_value = root->FirstChildElement("uint64_t")->Unsigned64Text(); + XMLTest("PushText( uint64_t value ) test", (uint64_t) 14, uint64_t_value); + + float float_value; + float_value = root->FirstChildElement("float")->FloatText(); + XMLTest("PushText( float value ) test", 1.56f, float_value); + + double double_value; + double_value = root->FirstChildElement("double")->DoubleText(); + XMLTest("PushText( double value ) test", 12.12, double_value); + + bool bool_value; + bool_value = root->FirstChildElement("bool")->BoolText(); + XMLTest("PushText( bool value ) test", true, bool_value); + + const XMLComment* comment = root->FirstChildElement("comment")->FirstChild()->ToComment(); + const char* comment_value = comment->Value(); + XMLTest("PushComment() test", "this is Tinyxml2", comment_value); + + const XMLDeclaration* declaration = cdoc.FirstChild()->ToDeclaration(); + const char* declaration_value = declaration->Value(); + XMLTest("PushDeclaration() test", "version = '1.0' enconding = 'utf-8'", declaration_value); + } } @@ -828,6 +1111,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "CDATA symbolic puns round 1", false, doc.Error() ); doc.Print(); XMLTest( "CDATA parse.", "I am > the rules!\n...since I make symbolic puns", @@ -845,6 +1129,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "CDATA symbolic puns round 2", false, doc.Error() ); doc.Print(); XMLTest( "CDATA parse. [ tixml1:1480107 ]", @@ -864,7 +1149,9 @@ int main( int argc, const char ** argv ) XMLElement* childText1 = doc.NewElement( "childText1" ); XMLNode* childNode0 = parent->InsertEndChild( childText0 ); + XMLTest( "InsertEndChild() return", true, childNode0 == childText0 ); XMLNode* childNode1 = parent->InsertAfterChild( childNode0, childText1 ); + XMLTest( "InsertAfterChild() return", true, childNode1 == childText1 ); XMLTest( "Test InsertAfterChild on empty node. ", true, ( childNode1 == parent->LastChild() ) ); } @@ -882,22 +1169,26 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( passages ); + XMLTest( "Entity transformation parse round 1", false, doc.Error() ); XMLElement* psg = doc.RootElement()->FirstChildElement(); const char* context = psg->Attribute( "context" ); const char* expected = "Line 5 has \"quotation marks\" and 'apostrophe marks'. It also has <, >, and &, as well as a fake copyright \xC2\xA9."; XMLTest( "Entity transformation: read. ", expected, context, true ); - FILE* textfile = fopen( "resources/out/textfile.txt", "w" ); + const char* textFilePath = "resources/out/textfile.txt"; + FILE* textfile = fopen( textFilePath, "w" ); + XMLTest( "Entity transformation: open text file for writing", true, textfile != 0, true ); if ( textfile ) { XMLPrinter streamer( textfile ); - psg->Accept( &streamer ); + bool acceptResult = psg->Accept( &streamer ); fclose( textfile ); + XMLTest( "Entity transformation: Accept", true, acceptResult ); } - textfile = fopen( "resources/out/textfile.txt", "r" ); - TIXMLASSERT( textfile ); + textfile = fopen( textFilePath, "r" ); + XMLTest( "Entity transformation: open text file for reading", true, textfile != 0, true ); if ( textfile ) { char buf[ 1024 ]; @@ -920,6 +1211,7 @@ int main( int argc, const char ** argv ) XMLDocument doc( false ); doc.Parse( passages ); + XMLTest( "Entity transformation parse round 2", false, doc.Error() ); XMLTest( "No entity parsing.", "Line 5 has "quotation marks" and 'apostrophe marks'.", @@ -944,6 +1236,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( test ); + XMLTest( "fin thickness", false, doc.Error() ); XMLText* text = doc.FirstChildElement()->FirstChildElement()->FirstChild()->ToText(); XMLTest( "Entity with one digit.", @@ -963,9 +1256,12 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( doctype ); + XMLTest( "PLAY SYSTEM parse", false, doc.Error() ); doc.SaveFile( "resources/out/test7.xml" ); + XMLTest( "PLAY SYSTEM save", false, doc.Error() ); doc.DeleteChild( doc.RootElement() ); doc.LoadFile( "resources/out/test7.xml" ); + XMLTest( "PLAY SYSTEM load", false, doc.Error() ); doc.Print(); const XMLUnknown* decl = doc.FirstChild()->NextSibling()->ToUnknown(); @@ -979,6 +1275,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( doctype ); + XMLTest( "Comment somewhat evil", false, doc.Error() ); XMLComment* comment = doc.FirstChild()->ToComment(); @@ -1010,6 +1307,12 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); XMLTest( "Empty document error", XML_ERROR_EMPTY_DOCUMENT, doc.ErrorID() ); + + // But be sure there is an error string! + const char* errorStr = doc.ErrorStr(); + XMLTest("Error string should be set", + "Error=XML_ERROR_EMPTY_DOCUMENT ErrorID=13 (0xd) Line number=0", + errorStr); } { @@ -1024,6 +1327,7 @@ int main( int argc, const char ** argv ) // Low entities XMLDocument doc; doc.Parse( "" ); + XMLTest( "Hex values", false, doc.Error() ); const char result[] = { 0x0e, 0 }; XMLTest( "Low entities.", result, doc.FirstChildElement()->GetText() ); doc.Print(); @@ -1053,6 +1357,7 @@ int main( int argc, const char ** argv ) XMLDocument xml; xml.Parse("" "" ); + XMLTest( "Declarations for head and body", false, xml.Error() ); XMLNode* e0 = xml.FirstChild(); XMLNode* e1 = e0->NextSibling(); @@ -1070,6 +1375,7 @@ int main( int argc, const char ** argv ) "" "" "" ); + XMLTest( "Comments iteration", false, xml.Error() ); xml.Print(); int count = 0; @@ -1085,13 +1391,14 @@ int main( int argc, const char ** argv ) } { - // trying to repro ]1874301]. If it doesn't go into an infinite loop, all is well. + // trying to repro [1874301]. If it doesn't go into an infinite loop, all is well. unsigned char buf[] = "loop" ); + XMLTest( "No closing element", true, xml.Error() ); XMLTest( "Infinite loop test.", true, true ); } #endif @@ -1114,6 +1422,7 @@ int main( int argc, const char ** argv ) const char* pub = " "; XMLDocument doc; doc.Parse( pub ); + XMLTest( "Trailing DOCTYPE", false, doc.Error() ); XMLDocument clone; for( const XMLNode* node=doc.FirstChild(); node; node=node->NextSibling() ) { @@ -1147,6 +1456,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning root element", false, doc.Error() ); doc.Print(&printer1); XMLNode* root = doc.RootElement()->DeepClone(&doc2); @@ -1173,9 +1483,11 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning sub element", false, doc.Error() ); const XMLElement* subElement = doc.FirstChildElement("root")->FirstChildElement("child2"); - subElement->Accept(&printer1); + bool acceptResult = subElement->Accept(&printer1); + XMLTest( "Accept before deep cloning", true, acceptResult ); XMLNode* clonedSubElement = subElement->DeepClone(&doc2); doc2.InsertFirstChild(clonedSubElement); @@ -1202,6 +1514,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning document", false, doc.Error() ); doc.Print(&printer1); doc.DeepCopy(&doc2); @@ -1228,6 +1541,7 @@ int main( int argc, const char ** argv ) static const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse for attribute ordering", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); const XMLAttribute* a = ele->FirstAttribute(); @@ -1246,7 +1560,7 @@ int main( int argc, const char ** argv ) ele->DeleteAttribute( "attrib1" ); ele->DeleteAttribute( "attrib3" ); - XMLTest( "Attribute order (empty)", false, ele->FirstAttribute() ? true : false ); + XMLTest( "Attribute order (empty)", true, ele->FirstAttribute() == 0 ); } { @@ -1256,10 +1570,13 @@ int main( int argc, const char ** argv ) static const char* xml2 = ""; XMLDocument doc0; doc0.Parse( xml0 ); + XMLTest( "Parse attribute with space 1", false, doc0.Error() ); XMLDocument doc1; doc1.Parse( xml1 ); + XMLTest( "Parse attribute with space 2", false, doc1.Error() ); XMLDocument doc2; doc2.Parse( xml2 ); + XMLTest( "Parse attribute with space 3", false, doc2.Error() ); XMLElement* ele = 0; ele = doc0.FirstChildElement(); @@ -1275,6 +1592,7 @@ int main( int argc, const char ** argv ) static const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse two elements with attribute", false, doc.Error() ); XMLElement* ele0 = doc.FirstChildElement()->FirstChildElement(); XMLElement* ele1 = ele0->NextSiblingElement(); bool equal = ele0->ShallowEqual( ele1 ); @@ -1287,26 +1605,31 @@ int main( int argc, const char ** argv ) static const char* xml = "Text"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Handle, parse element with attribute and nested element", false, doc.Error() ); - XMLElement* ele = XMLHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); - XMLTest( "Handle, success, mutable", "sub", ele->Value() ); - - XMLHandle docH( doc ); - ele = docH.FirstChildElement( "none" ).FirstChildElement( "element" ).ToElement(); - XMLTest( "Handle, dne, mutable", false, ele != 0 ); - } + { + XMLElement* ele = XMLHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); + XMLTest( "Handle, non-const, element is found", true, ele != 0 ); + XMLTest( "Handle, non-const, element name matches", "sub", ele->Value() ); + } - { - static const char* xml = "Text"; - XMLDocument doc; - doc.Parse( xml ); - XMLConstHandle docH( doc ); + { + XMLHandle docH( doc ); + XMLElement* ele = docH.FirstChildElement( "noSuchElement" ).FirstChildElement( "element" ).ToElement(); + XMLTest( "Handle, non-const, element not found", true, ele == 0 ); + } - const XMLElement* ele = docH.FirstChildElement( "element" ).FirstChild().ToElement(); - XMLTest( "Handle, success, const", ele->Value(), "sub" ); + { + const XMLElement* ele = XMLConstHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); + XMLTest( "Handle, const, element is found", true, ele != 0 ); + XMLTest( "Handle, const, element name matches", "sub", ele->Value() ); + } - ele = docH.FirstChildElement( "none" ).FirstChildElement( "element" ).ToElement(); - XMLTest( "Handle, dne, const", false, ele != 0 ); + { + XMLConstHandle docH( doc ); + const XMLElement* ele = docH.FirstChildElement( "noSuchElement" ).FirstChildElement( "element" ).ToElement(); + XMLTest( "Handle, const, element not found", true, ele == 0 ); + } } { // Default Declaration & BOM @@ -1328,32 +1651,131 @@ int main( int argc, const char ** argv ) XMLTest( "Ill formed XML", true, doc.Error() ); } + { + //API:IntText(),UnsignedText(),Int64Text(),DoubleText(),BoolText() and FloatText() test + const char* xml = " -24 42 \ + 38 true 2.35 "; + XMLDocument doc; + doc.Parse(xml); + + const XMLElement* pointElement = doc.RootElement(); + int test1 = pointElement->FirstChildElement("IntText")->IntText(); + XMLTest("IntText() test", -24, test1); + + unsigned test2 = pointElement->FirstChildElement("UnsignedText")->UnsignedText(); + XMLTest("UnsignedText() test", static_cast(42), test2); + + int64_t test3 = pointElement->FirstChildElement("Int64Text")->Int64Text(); + XMLTest("Int64Text() test", static_cast(38), test3); + + double test4 = pointElement->FirstChildElement("DoubleText")->DoubleText(); + XMLTest("DoubleText() test", 2.35, test4); + + float test5 = pointElement->FirstChildElement("DoubleText")->FloatText(); + XMLTest("FloatText()) test", 2.35f, test5); + + bool test6 = pointElement->FirstChildElement("BoolText")->BoolText(); + XMLTest("FloatText()) test", true, test6); + } + + { + // hex value test + const char* xml = " 0x2020 0X2020 \ + 0x1234"; + XMLDocument doc; + doc.Parse(xml); + + const XMLElement* pointElement = doc.RootElement(); + int test1 = pointElement->FirstChildElement("IntText")->IntText(); + XMLTest("IntText() hex value test", 0x2020, test1); + + unsigned test2 = pointElement->FirstChildElement("UnsignedText")->UnsignedText(); + XMLTest("UnsignedText() hex value test", static_cast(0x2020), test2); + + int64_t test3 = pointElement->FirstChildElement("Int64Text")->Int64Text(); + XMLTest("Int64Text() hex value test", static_cast(0x1234), test3); + } + + { + //API:ShallowEqual() test + const char* xml = "" + "voice" + ""; + XMLDocument doc; + doc.Parse( xml ); + const XMLNode* PlaylistNode = doc.RootElement(); + const XMLNode* PropertyNode = PlaylistNode->FirstChildElement(); + bool result; + result = PlaylistNode->ShallowEqual(PropertyNode); + XMLTest("ShallowEqual() test",false,result); + result = PlaylistNode->ShallowEqual(PlaylistNode); + XMLTest("ShallowEqual() test",true,result); + } + + { + //API: previousSiblingElement() and NextSiblingElement() test + const char* xml = "" + "voice" + "" + "" + ""; + XMLDocument doc; + doc.Parse( xml ); + XMLElement* ElementPlaylist = doc.FirstChildElement("playlist"); + XMLTest("previousSiblingElement() test",true,ElementPlaylist != 0); + const XMLElement* pre = ElementPlaylist->PreviousSiblingElement(); + XMLTest("previousSiblingElement() test",true,pre == 0); + const XMLElement* ElementBlank = ElementPlaylist->FirstChildElement("entry")->NextSiblingElement("blank"); + XMLTest("NextSiblingElement() test",true,ElementBlank != 0); + const XMLElement* next = ElementBlank->NextSiblingElement(); + XMLTest("NextSiblingElement() test",true,next == 0); + const XMLElement* ElementEntry = ElementBlank->PreviousSiblingElement("entry"); + XMLTest("PreviousSiblingElement test",true,ElementEntry != 0); + } + // QueryXYZText { const char* xml = " 1.2 1 38 true "; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse points", false, doc.Error() ); const XMLElement* pointElement = doc.RootElement(); - int intValue = 0; - unsigned unsignedValue = 0; - float floatValue = 0; - double doubleValue = 0; - bool boolValue = false; + { + int intValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "y" )->QueryIntText( &intValue ); + XMLTest( "QueryIntText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryIntText", 1, intValue, false ); + } + + { + unsigned unsignedValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "y" )->QueryUnsignedText( &unsignedValue ); + XMLTest( "QueryUnsignedText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryUnsignedText", (unsigned)1, unsignedValue, false ); + } - pointElement->FirstChildElement( "y" )->QueryIntText( &intValue ); - pointElement->FirstChildElement( "y" )->QueryUnsignedText( &unsignedValue ); - pointElement->FirstChildElement( "x" )->QueryFloatText( &floatValue ); - pointElement->FirstChildElement( "x" )->QueryDoubleText( &doubleValue ); - pointElement->FirstChildElement( "valid" )->QueryBoolText( &boolValue ); + { + float floatValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "x" )->QueryFloatText( &floatValue ); + XMLTest( "QueryFloatText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryFloatText", 1.2f, floatValue, false ); + } + { + double doubleValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "x" )->QueryDoubleText( &doubleValue ); + XMLTest( "QueryDoubleText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryDoubleText", 1.2, doubleValue, false ); + } - XMLTest( "QueryIntText", 1, intValue, false ); - XMLTest( "QueryUnsignedText", (unsigned)1, unsignedValue, false ); - XMLTest( "QueryFloatText", 1.2f, floatValue, false ); - XMLTest( "QueryDoubleText", 1.2, doubleValue, false ); - XMLTest( "QueryBoolText", true, boolValue, false ); + { + bool boolValue = false; + XMLError queryResult = pointElement->FirstChildElement( "valid" )->QueryBoolText( &boolValue ); + XMLTest( "QueryBoolText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryBoolText", true, boolValue, false ); + } } { @@ -1362,14 +1784,14 @@ int main( int argc, const char ** argv ) doc.Parse( xml ); XMLTest( "Non-alpha element lead letter parses.", false, doc.Error() ); } - + { const char* xml = ""; XMLDocument doc; doc.Parse( xml ); XMLTest("Non-alpha attribute lead character parses.", false, doc.Error()); } - + { const char* xml = "<3lement>"; XMLDocument doc; @@ -1390,11 +1812,22 @@ int main( int argc, const char ** argv ) doc.Clear(); XMLTest( "Empty is empty after Clear()", true, doc.NoChildren() ); doc.LoadFile( "resources/dream.xml" ); + XMLTest( "Load dream.xml", false, doc.Error() ); XMLTest( "Document has something to Clear()", false, doc.NoChildren() ); doc.Clear(); XMLTest( "Document Clear()'s", true, doc.NoChildren() ); } - + + { + XMLDocument doc; + XMLTest( "No error initially", false, doc.Error() ); + XMLError error = doc.Parse( "This is not XML" ); + XMLTest( "Error after invalid XML", true, doc.Error() ); + XMLTest( "Error after invalid XML", error, doc.ErrorID() ); + doc.Clear(); + XMLTest( "No error after Clear()", false, doc.Error() ); + } + // ----------- Whitespace ------------ { const char* xml = "" @@ -1404,6 +1837,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc( true, COLLAPSE_WHITESPACE ); doc.Parse( xml ); + XMLTest( "Parse with whitespace collapsing and &apos", false, doc.Error() ); const XMLElement* element = doc.FirstChildElement(); for( const XMLElement* parent = element->FirstChildElement(); @@ -1431,6 +1865,7 @@ int main( int argc, const char ** argv ) const char* xml = " "; XMLDocument doc( true, COLLAPSE_WHITESPACE ); doc.Parse( xml ); + XMLTest( "Parse with all whitespaces", false, doc.Error() ); XMLTest( "Whitespace all space", true, 0 == doc.FirstChildElement()->FirstChild() ); } @@ -1439,6 +1874,7 @@ int main( int argc, const char ** argv ) const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse with self-closed element", false, doc.Error() ); XMLElement* ele = doc.NewElement( "unused" ); // This will get cleaned up with the 'doc' going out of scope. XMLTest( "Tracking unused elements", true, ele != 0, false ); } @@ -1448,10 +1884,12 @@ int main( int argc, const char ** argv ) const char* xml = "abc"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse for printing of sub-element", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement( "parent")->FirstChildElement( "child"); XMLPrinter printer; - ele->Accept( &printer ); + bool acceptResult = ele->Accept( &printer ); + XMLTest( "Accept of sub-element", true, acceptResult ); XMLTest( "Printing of sub-element", "abc\n", printer.CStr(), false ); } @@ -1474,11 +1912,13 @@ int main( int argc, const char ** argv ) doc.Print( &printer ); XMLTest( "BOM preservation (compare)", xml_bom_preservation, printer.CStr(), false, true ); - doc.SaveFile( "resources/bomtest.xml" ); + doc.SaveFile( "resources/out/bomtest.xml" ); + XMLTest( "Save bomtest.xml", false, doc.Error() ); } { XMLDocument doc; - doc.LoadFile( "resources/bomtest.xml" ); + doc.LoadFile( "resources/out/bomtest.xml" ); + XMLTest( "Load bomtest.xml", false, doc.Error() ); XMLTest( "BOM preservation (load)", true, doc.HasBOM(), false ); XMLPrinter printer; @@ -1526,35 +1966,44 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse(xml); + XMLTest( "Insertion with removal parse round 1", false, doc.Error() ); XMLElement* subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); XMLElement* two = doc.RootElement()->FirstChildElement("two"); two->InsertFirstChild(subtree); XMLPrinter printer1(0, true); - doc.Accept(&printer1); + bool acceptResult = doc.Accept(&printer1); + XMLTest("Move node from within to - Accept()", true, acceptResult); XMLTest("Move node from within to ", xmlInsideTwo, printer1.CStr()); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 2", false, doc.Error() ); subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); two = doc.RootElement()->FirstChildElement("two"); doc.RootElement()->InsertAfterChild(two, subtree); XMLPrinter printer2(0, true); - doc.Accept(&printer2); + acceptResult = doc.Accept(&printer2); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterTwo, printer2.CStr(), false); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 3", false, doc.Error() ); XMLNode* one = doc.RootElement()->FirstChildElement("one"); subtree = one->FirstChildElement("subtree"); doc.RootElement()->InsertAfterChild(one, subtree); XMLPrinter printer3(0, true); - doc.Accept(&printer3); + acceptResult = doc.Accept(&printer3); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterOne, printer3.CStr(), false); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 4", false, doc.Error() ); subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); two = doc.RootElement()->FirstChildElement("two"); + XMLTest(" is the last child at root level", true, two == doc.RootElement()->LastChildElement()); doc.RootElement()->InsertEndChild(subtree); XMLPrinter printer4(0, true); - doc.Accept(&printer4); + acceptResult = doc.Accept(&printer4); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterTwo, printer4.CStr(), false); } @@ -1564,6 +2013,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse svg with text", false, doc.Error() ); doc.Print(); } @@ -1572,17 +2022,19 @@ int main( int argc, const char ** argv ) const char* xml = "<12"; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse root-sample-field0", true, doc.Error() ); doc.PrintError(); } #if 1 - // the question being explored is what kind of print to use: + // the question being explored is what kind of print to use: // https://github.com/leethomason/tinyxml2/issues/63 { //const char* xml = ""; const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse self-closed empty element", false, doc.Error() ); doc.FirstChildElement()->SetAttribute( "attrA-f64", 123456789.123456789 ); doc.FirstChildElement()->SetAttribute( "attrB-f64", 1.001e9 ); doc.FirstChildElement()->SetAttribute( "attrC-f64", 1.0e9 ); @@ -1602,39 +2054,60 @@ int main( int argc, const char ** argv ) /* The result of this test is platform, compiler, and library version dependent. :(" XMLPrinter printer; doc.Print( &printer ); - XMLTest( "Float and double formatting.", + XMLTest( "Float and double formatting.", "\n", - printer.CStr(), + printer.CStr(), true ); */ } #endif - + { // Issue #184 // If it doesn't assert, it passes. Caused by objects // getting created during parsing which are then // inaccessible in the memory pools. + const char* xmlText = ""; { XMLDocument doc; - doc.Parse(""); + doc.Parse(xmlText); + XMLTest( "Parse hex no closing tag round 1", true, doc.Error() ); } { XMLDocument doc; - doc.Parse(""); + doc.Parse(xmlText); + XMLTest( "Parse hex no closing tag round 2", true, doc.Error() ); doc.Clear(); } } - + { - // If this doesn't assert in DEBUG, all is well. + // If this doesn't assert in TINYXML2_DEBUG, all is well. tinyxml2::XMLDocument doc; tinyxml2::XMLElement *pRoot = doc.NewElement("Root"); doc.DeleteNode(pRoot); } + { + XMLDocument doc; + XMLElement* root = doc.NewElement( "Root" ); + XMLTest( "Node document before insertion", true, &doc == root->GetDocument() ); + doc.InsertEndChild( root ); + XMLTest( "Node document after insertion", true, &doc == root->GetDocument() ); + } + + { + // If this doesn't assert in TINYXML2_DEBUG, all is well. + XMLDocument doc; + XMLElement* unlinkedRoot = doc.NewElement( "Root" ); + XMLElement* linkedRoot = doc.NewElement( "Root" ); + doc.InsertFirstChild( linkedRoot ); + unlinkedRoot->GetDocument()->DeleteNode( linkedRoot ); + unlinkedRoot->GetDocument()->DeleteNode( unlinkedRoot ); + } + { - // Should not assert in DEBUG + // Should not assert in TINYXML2_DEBUG XMLPrinter printer; } @@ -1643,17 +2116,19 @@ int main( int argc, const char ** argv ) const char* xml = "�"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse hex with closing tag", false, doc.Error() ); XMLPrinter printer; doc.Print( &printer ); } { - // Issue 299. Can print elements that are not linked in. + // Issue 299. Can print elements that are not linked in. // Will crash if issue not fixed. XMLDocument doc; XMLElement* newElement = doc.NewElement( "printme" ); XMLPrinter printer; - newElement->Accept( &printer ); + bool acceptResult = newElement->Accept( &printer ); + XMLTest( "printme - Accept()", true, acceptResult ); // Delete the node to avoid possible memory leak report in debug output doc.DeleteNode( newElement ); } @@ -1700,7 +2175,7 @@ int main( int argc, const char ** argv ) doc.Parse(xml1); XMLTest("Test that the second declaration is allowed", false, doc.Error() ); doc.Parse(xml2); - XMLTest("Test that declaration after a child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); + XMLTest("Test that declaration after self-closed child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); doc.Parse(xml3); XMLTest("Test that declaration after a child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); doc.Parse(xml4); @@ -1709,13 +2184,15 @@ int main( int argc, const char ** argv ) { // No matter - before or after successfully parsing a text - - // calling XMLDocument::Value() causes an assert in debug. + // calling XMLDocument::Value() used to cause an assert in debug. + // Null must be returned. const char* validXml = "" "" ""; XMLDocument* doc = new XMLDocument(); XMLTest( "XMLDocument::Value() returns null?", NULL, doc->Value() ); doc->Parse( validXml ); + XMLTest( "Parse to test XMLDocument::Value()", false, doc->Error()); XMLTest( "XMLDocument::Value() returns null?", NULL, doc->Value() ); delete doc; } @@ -1723,29 +2200,49 @@ int main( int argc, const char ** argv ) { XMLDocument doc; for( int i = 0; i < XML_ERROR_COUNT; i++ ) { - doc.SetError( (XMLError)i, 0, 0, 0 ); - doc.ErrorName(); + const XMLError error = static_cast(i); + const char* name = XMLDocument::ErrorIDToName(error); + XMLTest( "ErrorName() not null after ClearError()", true, name != 0 ); + if( name == 0 ) { + // passing null pointer into strlen() is undefined behavior, so + // compiler is allowed to optimise away the null test above if it's + // as reachable as the strlen() call + continue; + } + XMLTest( "ErrorName() not empty after ClearError()", true, strlen(name) > 0 ); } } { - // Evil memory leaks. + const char* html("

    test


    "); + XMLDocument doc(false); + doc.Parse(html); + + XMLPrinter printer(0, true); + doc.Print(&printer); + + XMLTest(html, html, printer.CStr()); + } + + { + // Evil memory leaks. // If an XMLElement (etc) is allocated via NewElement() (etc.) // and NOT added to the XMLDocument, what happens? // // Previously (buggy): // The memory would be free'd when the XMLDocument is - // destructed. But the destructor wasn't called, so that - // memory allocated by the XMLElement would not be free'd. - // In practice this meant strings allocated by the XMLElement - // would leak. An edge case, but annoying. + // destructed. But the XMLElement destructor wasn't called, so + // memory allocated for the XMLElement text would not be free'd. + // In practice this meant strings allocated for the XMLElement + // text would be leaked. An edge case, but annoying. // Now: - // The destructor is called. But the list of unlinked nodes - // has to be tracked. This has a minor performance impact - // that can become significant if you have a lot. (But why - // would you do that?) - // The only way to see this bug is in a leak tracker. This - // is compiled in by default on Windows Debug. + // The XMLElement destructor is called. But the unlinked nodes + // have to be tracked using a list. This has a minor performance + // impact that can become significant if you have a lot of + // unlinked nodes. (But why would you do that?) + // The only way to see this bug was in a Visual C++ runtime debug heap + // leak tracker. This is compiled in by default on Windows Debug and + // enabled with _CRTDBG_LEAK_CHECK_DF parameter passed to _CrtSetDbgFlag(). { XMLDocument doc; doc.NewElement("LEAK 1"); @@ -1757,6 +2254,32 @@ int main( int argc, const char ** argv ) } } + { + // Bad bad crash. Parsing error results in stack overflow, if uncaught. + const char* TESTS[] = { + "./resources/xmltest-5330.xml", + "./resources/xmltest-4636783552757760.xml", + "./resources/xmltest-5720541257269248.xml", + 0 + }; + for (int i=0; TESTS[i]; ++i) { + XMLDocument doc; + doc.LoadFile(TESTS[i]); + XMLTest("Stack overflow prevented.", XML_ELEMENT_DEPTH_EXCEEDED, doc.ErrorID()); + } + } + { + const char* TESTS[] = { + "./resources/xmltest-5662204197076992.xml", // Security-level performance issue. + 0 + }; + for (int i = 0; TESTS[i]; ++i) { + XMLDocument doc; + doc.LoadFile(TESTS[i]); + // Need only not crash / lock up. + XMLTest("Fuzz attack prevented.", true, true); + } + } { // Crashing reported via email. const char* xml = @@ -1782,25 +2305,36 @@ int main( int argc, const char ** argv ) XMLElement* playlist = doc.FirstChildElement("playlist"); XMLTest("Crash bug parsing", true, playlist != 0); - tinyxml2::XMLElement* entry = playlist->FirstChildElement("entry"); - XMLTest("Crash bug parsing", true, entry != 0); - while (entry) { - tinyxml2::XMLElement* todelete = entry; - entry = entry->NextSiblingElement("entry"); - playlist->DeleteChild(todelete); - }; - tinyxml2::XMLElement* blank = playlist->FirstChildElement("blank"); - while (blank) { - tinyxml2::XMLElement* todelete = blank; - blank = blank->NextSiblingElement("blank"); - playlist->DeleteChild(todelete); - }; + { + const char* elementName = "entry"; + XMLElement* entry = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, entry != 0); + while (entry) { + XMLElement* todelete = entry; + entry = entry->NextSiblingElement(elementName); + playlist->DeleteChild(todelete); + } + entry = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, entry == 0); + } + { + const char* elementName = "blank"; + XMLElement* blank = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, blank != 0); + while (blank) { + XMLElement* todelete = blank; + blank = blank->NextSiblingElement(elementName); + playlist->DeleteChild(todelete); + } + XMLTest("Crash bug parsing", true, blank == 0); + } tinyxml2::XMLPrinter printer; - playlist->Accept(&printer); + const bool acceptResult = playlist->Accept(&printer); + XMLTest("Crash bug parsing - Accept()", true, acceptResult); printf("%s\n", printer.CStr()); - // No test; it only need to not crash. + // No test; it only need to not crash. // Still, wrap it up with a sanity check int nProperty = 0; for (const XMLElement* p = playlist->FirstChildElement("property"); p; p = p->NextSiblingElement("property")) { @@ -1813,14 +2347,17 @@ int main( int argc, const char ** argv ) { struct TestUtil: XMLVisitor { + TestUtil() : str() {} + void TestParseError(const char *testString, const char *docStr, XMLError expected_error, int expectedLine) { XMLDocument doc; - XMLError err = doc.Parse(docStr); + const XMLError parseError = doc.Parse(docStr); + XMLTest(testString, parseError, doc.ErrorID()); XMLTest(testString, true, doc.Error()); - XMLTest(testString, expected_error, err); - XMLTest(testString, expectedLine, doc.GetErrorLineNum()); + XMLTest(testString, expected_error, parseError); + XMLTest(testString, expectedLine, doc.ErrorLineNum()); }; void TestStringLines(const char *testString, const char *docStr, const char *expectedLines) @@ -1885,7 +2422,8 @@ int main( int argc, const char ** argv ) void TestDocLines(const char *testString, XMLDocument &doc, const char *expectedLines) { str.Clear(); - doc.Accept(this); + const bool acceptResult = doc.Accept(this); + XMLTest(testString, true, acceptResult); str.Push(0); XMLTest(testString, expectedLines, str.Mem()); } @@ -1938,6 +2476,18 @@ int main( int argc, const char ** argv ) "D01L01E02E03A03A03T03E04A04A04T04E05A05A05T05E06A06A06T06E07A07A07T07E08A08A08T08E09T09E10T10"); } + { + const char* xml = "Text"; + XMLDocument doc; + doc.Parse(xml); + XMLTest("Test mismatched elements.", true, doc.Error()); + XMLTest("Test mismatched elements.", XML_ERROR_MISMATCHED_ELEMENT, doc.ErrorID()); + // For now just make sure calls work & doesn't crash. + // May solidify the error output in the future. + printf("%s\n", doc.ErrorStr()); + doc.PrintError(); + } + // ----------- Performance tracking -------------- { #if defined( _MSC_VER ) @@ -1946,12 +2496,15 @@ int main( int argc, const char ** argv ) #endif FILE* perfFP = fopen("resources/dream.xml", "r"); + XMLTest("Open dream.xml", true, perfFP != 0); fseek(perfFP, 0, SEEK_END); long size = ftell(perfFP); fseek(perfFP, 0, SEEK_SET); char* mem = new char[size + 1]; - fread(mem, size, 1, perfFP); + memset(mem, 0xfe, size); + size_t bytesRead = fread(mem, 1, size, perfFP); + XMLTest("Read dream.xml", true, uint32_t(size) >= uint32_t(bytesRead)); fclose(perfFP); mem[size] = 0; @@ -1960,34 +2513,39 @@ int main( int argc, const char ** argv ) #else clock_t cstart = clock(); #endif + bool parseDreamXmlFailed = false; static const int COUNT = 10; for (int i = 0; i < COUNT; ++i) { XMLDocument doc; doc.Parse(mem); + parseDreamXmlFailed = parseDreamXmlFailed || doc.Error(); } #if defined( _MSC_VER ) QueryPerformanceCounter((LARGE_INTEGER*)&end); #else clock_t cend = clock(); #endif + XMLTest( "Parse dream.xml", false, parseDreamXmlFailed ); delete[] mem; static const char* note = -#ifdef DEBUG +#ifdef TINYXML2_DEBUG "DEBUG"; #else "Release"; #endif #if defined( _MSC_VER ) - printf("\nParsing %s of dream.xml: %.3f milli-seconds\n", note, 1000.0 * (double)(end - start) / ((double)freq * (double)COUNT)); + const double duration = 1000.0 * (double)(end - start) / ((double)freq * (double)COUNT); #else - printf("\nParsing %s of dream.xml: %.3f milli-seconds\n", note, (double)(cend - cstart) / (double)COUNT); + const double duration = (double)(cend - cstart) / (double)COUNT; #endif + printf("\nParsing dream.xml (%s): %.3f milli-seconds\n", note, duration); } - #if defined( _MSC_VER ) && defined( DEBUG ) +#if defined( _MSC_VER ) && defined( TINYXML2_DEBUG ) + { _CrtMemCheckpoint( &endMemState ); _CrtMemState diffMemState; @@ -1998,7 +2556,8 @@ int main( int argc, const char ** argv ) int leaksBeforeExit = _CrtDumpMemoryLeaks(); XMLTest( "No leaks before exit?", FALSE, leaksBeforeExit ); } - #endif + } +#endif printf ("\nPass %d, Fail %d\n", gPass, gFail);