Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 65 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
65
Dung lượng
529,08 KB
Nội dung
490 Part IV ✦ Advanced Zope Concepts To distribute your Product, select the Distribution tab from within the product. For example, click the Distribution tab within the ZFAQ product. The form on the Distribution tab gives you fine control over the distribution you create. The Version field specifies the version that will be visible in the products list for whoever installs the product. Every time you make a distribution, the number will be incremented, but you can change it to whatever number you want. We sug- gest leaving it at 1.0 unless you have some reason to do otherwise. Next on the form, there are two radio-buttons that let you select the kind of Distribution you want to create. If you want others to be able to customize and/or redistribute your Product, select the “Allow Redistribution” option. If you want to disallow redistribution, select the “Disallow redistribution and allow the user to configure only the selected objects:” option, and you can choose which objects your users can customize in your Product. The list defaults to having no objects selected, which won’t allow any changes to the distributed product. If you want them to be able to change the FAQManager ZClass, select that ZClass. If you want the whole product to be customizable but still disallow redistribution, select all of the objects in the list. Notice that the QandA Zclass, which is contained within the FAQManager Zclass, is not listed within this object list. This means that there is no way to allow or disallow customization of the QandA ZClass independently from the FAQManager ZClass. Whether the QandA Zclass is customizable is dependent on the whether the FAQManager ZClass is customizable. To get around this limitation, the QandA object would have to have been created in a separate product. After you made your decisions regarding the redistribution and customization of the ZFAQ product distribution, click the Create a distribution archive button. Zope will now create a file called ZFAQ-1.0.tar.gz, and attempt to download it to your com- puter. Save the file on your desktop or in a “Downloads” directory on your computer. The ZFAQ-1.0.tar.gz file can be installed in a Zope installation just like any other downloaded product. If you think that your product would be useful to other Zope users, we suggest that you add your product to your zope.org member folder to make it generally available. Summary In this chapter, you learned about creating through-the-Web products using ZClasses, defining property sheets and views, and building a simple Web applica- tion using them. You also learned to add permissions to ZClasses, make your ZClasses CatalogAware, subclass Python classes in your ZClass products, and distribute your through-the-Web products. ✦✦✦ i4857-3 Ch16.F 3/1/02 9:42 AM Page 490 Searching Content M ost of this book describes using Zope to accomplish fairly ordinary Web site building and maintenance tasks. Even Part II of the book, which shows you how to build custom object types using Zope’s object oriented framework, isn’t that different from building a similar application using JavaBeans, for example. In this chapter, we are going to introduce one of Zope’s fea- tures that sets Zope apart from other Web development envi- ronments — its integrated framework for indexing and searching objects and their attributes. Adding and Populating ZCatalogs Zope has built-in searching and indexing capabilities that enable you to easily find objects in your site that conform to various criteria (such as containing some text) via ad-hoc queries. What is a ZCatalog? ZCatalogs are Zope’s general-purpose search engines and indexers. A ZCatalog examines objects, indexes whatever properties you’ve marked as significant, and enables you to query the ZCatalog for objects whose properties match your criteria. Additionally, ZCatalogs don’t return the actual objects in their results, but instead return a special lightweight object with whatever metadata you’ve told the ZCatalog to retain for the object and a pointer to the actual object if you need it. 17 17 CHAPTER ✦✦✦✦ In This Chapter Adding and populating ZCatalogs Configuring and querying the ZCatalog Accessing ZCatalogs from Python More about ZCatalog ✦✦✦✦ i4857-3 Ch17.F 3/1/02 9:42 AM Page 491 492 Part IV ✦ Advanced Zope Concepts Adding a ZCatalog to your site In your root folder, click on the drop-down to select ZCatalog from the list of addable products. Fill the Add ZCatalog form that comes up with an id of Catalog, leave the title field blank, and leave the vocabulary drop-down set on the default of Create one for me (we’ll go into more detail about Vocabularies in the “About Vocabularies” sidebar in the “More about ZCatalog” section). Click the Add button. You should now have a ZCatalog instance named Catalog in your root folder. The icon for a ZCatalog is a folder with a magnifying glass, and the ZCatalog user inter- face does resemble that of a folder somewhat. But there are a few differences, as shown in Figure 17-1. Figure 17-1: The ZCatalog Contents tab ZCatalogs have several tabs that folders do not have, including the following: Catalog Indexes Metadata Advanced The Find tab that folders have is replaced with a Find Objects tab in a ZCatalog. i4857-3 Ch17.F 3/1/02 9:42 AM Page 492 493 Chapter 17 ✦ Searching Content Populating a ZCatalog ZCatalogs can be populated in two ways: manually and automatically. Populating a ZCatalog manually is fairly simple; just go to the Find Objects tab in a ZCatalog (shown in Figure 17-2), and select the criteria for the objects that you want to cata- log and index. Figure 17-2: The ZCatalog Find Objects tab For the time being, leave the default settings in the form, and click the Find and Catalog button at the bottom of the form. The operation may take a few moments, so be patient while Zope works. After Zope is done finding and cataloging the objects that meet the criteria you specified (in this case, all objects stored in the ZODB), the browser is redirected to the Catalog tab of the ZCatalog, and it shows you how long it took to complete the operation, as shown in Figure 17-3. As you can see, the find objects operation found all objects in the ZODB, all of which are now recorded in the ZCatalog. i4857-3 Ch17.F 3/1/02 9:42 AM Page 493 494 Part IV ✦ Advanced Zope Concepts Figure 17-3: The Catalog tab, after finding objects Configuring and Querying the ZCatalog ZCatalogs store two types of information about the objects that they catalog: indexes and metadata. Indexes are the lookup tables that the ZCatalog consults in order to determine which objects match a particular query, and metadata is the information about an object that a ZCatalog stores in order to make its result sets more meaningful. ZCatalog indexes The ZCatalog uses indexes to determine which objects that it knows about match a particular query. In order for you to query a ZCatalog about a particular object attribute, that attribute must be indexed by the ZCatalog in an Index. As you can see in Figure 17-4, the ZCatalog’s index tab has several indexes by default. i4857-3 Ch17.F 3/1/02 9:42 AM Page 494 495 Chapter 17 ✦ Searching Content Figure 17-4: The ZCatalog Indexes tab The following are the four built-in types of indexes: ✦ Text indexes. These indexes break up text contained in an attribute into indi- vidual words. The more times a particular word appears in an attribute indexed by a text index, the higher its score. Results are sorted by score, high- est to lowest from the most relevant to the lest relevant. Text indexes are often referred to as full-text indexes. PrincipiaSearchSource and title are text indexes included in a ZCatalog by default. ✦ Field indexes. These indexes treat the object’s attribute as a single unit, and they are used to keep track of object attributes that conform to a particular value. Field indexes included in a ZCatalog by default are bobobase_ modification_time, id, and meta_type. ✦ Keyword indexes. These indexes take a sequence of objects and break them up into keywords, which are then indexed individually. A Keyword index returns any objects that have one or more indexed keywords that match any keywords from the query. They are particularly useful for building categories. ✦ Path indexes. These indexes break up the physical path to an indexed object into all its subpaths. A Path index returns all objects that match a partial path specified in a search query. By default, a ZCatalog includes a path index named path. i4857-3 Ch17.F 3/1/02 9:42 AM Page 495 [...]... virtual hosting several domain names on the same Zope server, and also avoids problems associated with accessing the same server using different IP addresses or network names You should always use Products.ZCatalog.CatalogPathAwareness CatalogAware to make your Zope Products CatalogAware 5 09 i4857-3 Ch17.F 510 3/1/02 9: 42 AM Page 510 Part IV ✦ Advanced Zope Concepts More about ZCatalog There is more... content as it is added to and changed ✦ ✦ ✦ 515 i4857-3 Ch17.F 3/1/02 9: 42 AM Page 516 i4857-3 Ch18.F 3/1/02 9: 42 AM Page 517 18 C H A P T E R Zope Page Templates ✦ ✦ ✦ ✦ In This Chapter I n this chapter, we’ll discuss the drawbacks of DTML and you’ll meet Zope Page Templates, a new presentation scripting technology introduced in Zope 2.5 As always, we provide some references for further reading at... Programming ✦ Marketing ✦ Java ✦ HTML ✦ Sales ✦ Python ✦ Branding ✦ Microsoft ✦ Design ✦ Typography ✦ Zope You can see that a book about designing Web sites would probably be categorized under both Design and HTML, while this book (the Zope Bible) would be categorized under Programming, Python, and Zope In your search interface, you would provide a multiple selection form element, like the following:... i4857-3 Ch18.F 3/1/02 9: 42 AM Page 5 19 Chapter 18 ✦ Zope Page Templates There is just no way that an HTML editor can interpret this as a valid HTML document, even if it ignores the DTML tags The capability to inline and render modular code sections is a powerful capability for application servers such as Zope, but its implementation in DTML (and similar server-side... code Python Script objects (added to Zope in version 2.3) finally enabled developers to cleanly separate presentation and logic from each other and still write code through the Web, but the temptation to cross the line from presentation logic to application logic when working in DTML is always there 5 19 i4857-3 Ch18.F 520 3/1/02 9: 42 AM Page 520 Part IV ✦ Advanced Zope Concepts Clearly, an alternative... click Add and Edit You should now see a form like the form shown in Figure 18-2 i4857-3 Ch18.F 3/1/02 9: 42 AM Page 521 Chapter 18 ✦ Zope Page Templates Figure 18-1: The Add Page Template form Figure 18-2: The Edit Page Template form 521 i4857-3 Ch18.F 522 3/1/02 9: 42 AM Page 522 Part IV ✦ Advanced Zope Concepts Rather a lot is going on in the default template content, so before you go any further,... to replace the content of the tag only, leaving the tag itself intact i4857-3 Ch18.F 3/1/02 9: 42 AM Page 523 Chapter 18 ✦ Zope Page Templates Figure 18-3: The rendered Test Page Template Figure 18-4: Browsing the unrendered template source 523 i4857-3 Ch18.F 524 3/1/02 9: 42 AM Page 524 Part IV ✦ Advanced Zope Concepts TAL statements TAL defines several statements for adding presentation logic (as... and type Both syntaxes are still supported within Zope, but you won’t find too much code written in the old style anymore Nevertheless, despite these improvements, DTML still has problems The problem with DTML Template Attribute Language TAL Expression Syntax Macro Expansion TAL ✦ ✦ ✦ ✦ i4857-3 Ch18.F 518 3/1/02 9: 42 AM Page 518 Part IV ✦ Advanced Zope Concepts DTML tags are not friendly to HTML editors... when you need to dynamically create other file formats such as comma-delimited text files For this reason, and for reasons of backward compatibility, Zope will continue to support DTML in the foreseeable future TAL (Template Attribute Language) In Zope 2.5, Zope is integrating a new syntax and paradigm for developing Page Templates that avoids the problems of DTML, and introduces some interesting new capabilities... omit), the type of Splitter (choose ZopeSplitter), and whether the Vocabulary object is Globbing (non-Globbing is the default, select the checkbox to make the Vocabulary Globbing) Once you’ve made your selections, click Add, and a Vocabulary with the settings you’ve selected will be added to the ZCatalog 511 i4857-3 Ch17.F 512 3/1/02 9: 42 AM Page 512 Part IV ✦ Advanced Zope Concepts By default, ZCatalogs . src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCYAAACiCAIAAAASp1u1AAAACXBIWXMAABYlAAAWJQFJUiTwAAAYOklEQVR42u3d61Ib2dXG8d0ndbcOGLAZg8GnwmaSVCWuXEbuIXeUe0tSmRrHcTkz9ngGPEggCRCW+vh+WC8rm92CwQl4NMz /90 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 +9/ lDj6KIskJv/ /97 +232/MY9t5xO9XopLiECkkOus1DjrqSYGPOyhpORGkGD2OMhBOpe9R1fXJyMp1OZd5DSh/yvKHKAQAAQOTAz+XyKsf+/v5wONSOJtkAuLW1pSs47G4oLWtoIcJYOzfspCGHU2lyCIJAShwSPIw1ay7f1E44drbRxi0JRTJqUhTFZDI5OjoKwzBNU6l72IMiVDkAAACIHPh8Lq9yfPvtt3YjU1EUm5ubSZJIRcK+ZTfWiVXN6Y7mzb19l68vk8wgZROpscisuQ6H2NPkeqiuOaufaE1DI9B4PD4+Po6iKE3TTqcTx/EldQ8AAAAQOXD9Lq9y/Pvf/9aqghwk9fz5cylH2OFBL6VJwx7k0O2B8qTmB23KkrfYE+eSPWRUQ/aayyFXOnGuIcfu6dJpEGc2fTqdZlk2Go2CIFhaWup2uzLvQZUDAACAyIEbd0mVo9/vj8djKW5IbNCuKjtOmPNH5Tb7oMz5moZ+yc4q2qnlhBlJGlL0sHef2z+2rg7Ud0mMkaYsexqkqqrhcDgcDmXYo9PpaPbgNwEAAIDIgRtxSZXj/fv3smtcXpDn+dbWVrfbdTYANi8o9/pa8WgOl+tX9fxcYx1y1UwsusfD87w8z+WsXnmNXRtxtpvLV51BdvkW0+n09PR0OByGYbiystLpdMIwtMMSAAAAful8/goWhNQNzLyzqr766qswDLUJyhizs7Mj 89/ 6jI532/frWlgwVhXFziFORNEnneEQfdJYVZEgCCQeSJiRBefOcbpOtplbaZEoled5v 99/ 9+6drPgAAAAAkQPXzB7yth+Hw+F4PP7PP5jvt9vtx48f22v+nLfrWVXNOGFXHuZ+6kyHOznEzjZaMJFzrmS7uc6aa5zQa2o5ZW62kVdKjOGXAQAAgMiB63dRlePdu3e6j0/6mjY2NtI0NefHP+yKh50u7JUa9nlW5nzLk7NlXK+pOUSjgi7i0Agkj/LiKIrkGVltLlMfGirM+e3mdvCQj6Wxil8GAAAAIgeu39wqhzHm3bt3uhZD7sufPn2qd/xOf5Rdr7Abmez2KqdXSoa59e2SHOyt4TpD4rRaOQsB7dN4gyDQtisJHnqQrh147DESeXJ5eZnfBAAAACIHbsTcKsd4PB4Oh1qpqOs6juPNzU0dHHcCgHYumfPz6BIq9NgoXRbuWZzGJ6dgMnfGw5zfpCHBQ56RUXVjjNQ95NhcnTh3jrqSxziOpTsLAAAARA5cv7lVju+//342m0nAkO6m1dXVXq83dy7cvpSdZIy1LNz5Xs2DpOyk0ZzxaM6R62v0eFy7M8rOP1EU6XZzqXs4iavX69nHZAEAAIDIgevUrHJUVfXq1asoiuwqxO9+9zt7wUVzg559SJSZ18g0d2WHkx+MdejtuV+Xsye1n0o6ppyVf852Dnv/oO/7YRhKLNH1gvJnb7fb7OUAAAAgcuCmNKscBwcHg8FAKgMyztFut588eeIcRGsnB9PY72HOlvQ5wcOcL6fYUxnGasdytm048xtzr2mfhGtv93Oyjc6ay4qPJEkkXPGbAAAAQOTAjWhWOXZ3d/VJY0xVVffv34/jWG/07Q/k0RnksPuvzNnpVeb8lkD9kmkclmWfinvJcnRz8R6P5qoQ5+QrY0wQBFEULS8vO11eAAAAIHLgOjlVDmPM7u5uHMfSvCQFh62tLXsEwmmdat7r2+yRcWc6vHk1qU5oceOSkKOH5DqNW3b3l+7c0Hhjt1p5nheGYafTMY0+LgAAABA5cG2cKsdkMun3+5IQWq2WfLCxsaEH2uq7zPl6wkWVh//8k89roGq+XYKHpgL5wKl4mHnD5TrI4Qy42xex315Vla7joMoBAABA5MBNcaoc 79+ /z/PcWBPbGxsburbCKTg0b/2bEaI5Mm6sE6vs4GEalRNncqP5yrkrO5qby/Wr9lpAz/O63W6zBQsAAABEDlwnu8pRVdXLly 993 5fJDbkv 397 edoKEvR9wbvywm6MumrXQV+o1jTHavmWfsTs3TuiOv+ZQe7MAoonF/jnDMEySxBkOAQAAAJEDN2g0Go1GI9/38zzX1qOdnR1nOlxTgX04lXMpJ4c4rVb20IV9dJU5K4DMPU5XXuC0Y+lZVdI6ZZ+RJZ/a518ZqxlseXlZXwwAAAAiB26Kfeu/v78vnyZJEoah53lra2utVss5LWpuyWLuHkB7qntuy9NFT5rGMLpdG3Gu1pwzueQ4XQknvu/3ej1zfiQdAAAARA5cP7ux6u3bt1ITKMuyruuyLB8/fpxlmVPNmHuDftEhuc4eD6cpyzTasUxjuNy+jtQ0tHChb2luFXRarewnq6pKkkRKHDRWAQAAEDlws/Q2fTKZjEajMAyDIJB+pCRJNjY27MNn7YYop5Jg5i3EsIPH3BHzS645tzbizGOY8xMmTlnDTi/2TyjLDZt7CQEAAEDkwPXTKsfe3t7Hjx/rui6KQkocDx48aLfb9s36T05umEvrBnoRO5zY1QwnjZjznVd2wtE9Hk7GsI/TlYF4Y42Y6wXTNJ27WxAAAABEDlwzLSZ 899 13dq9RWZbb29vOrHZz64U5PzvhTG6YxiG89uG2dg6xv4WGiubGwGYVRXdu6IyHJg35QB6rqsrzXL6aJEmr1aLKAQAAcLuF/BUsCLnFPzo62tvb06OfyrJM03R9fd1ZFGjOqiJandC7/It28DmTG/pKpylLXynJwU4jGnucioedmvTbSfYoisIYUxSFJI08z+X5NE2NMbJmhCoHAAAAkQOfg9yv9/t9e9K6ruv19fUwDOW0XHtKe24A0EvpCnA7Ttg5xE4sYRjaJ9hecpyuOaulOPvIzVkpQ5NGXdeSMbIsm81mWZYdHh4eHBw8e/as2+3KOg7pFnO+HakDAACAyIEbIRnghx9+iKIoz3MJAEVRPHr0qCgKe0pbmpTsrKIlCPvRrmM4aWTuUbmSH+zLNs+q0tYpe448CALJGMaYsizzPD86OhqNRvv7+7u7u2VZ3rlzZzKZFEXxxz/+cXl5OQxD3/d1cJwqBwAAAJEDn4Pneaenp4PBwPO8MAxlcDxJkrW1NXtAwilu2PnB2U3uXNxZI+hs27DTizPdcUlTlq4qF+Px+Mcff/zhhx/evn17fHwsSWlpaekPf/jD3bt3O51Oq9UqikKKKt1ut1nfoMoBAABA5MBNqet6f39fGqi0gLC1tRXHcVmWxjrSyn7L3Izh3LvPnTUXZVnKObz2yLg9hq5vdIKHHks1m836/f633367u7s7HA6lPlMURRRFW1tbT58+ffDgwf3 793 U9eRRFctk4jpv1DfIGAAAAkQM3GDnevHkTBIEGCc/ztra2mnfh+oyzbcPZMq4dUM7b7ZV/9tvtr84tbhhrHYd0T33zzTevX78eDAYymyHiOH769Onz58+/+OIL6bmSP5TdlNXr9WSrOlUOAAAAIgc+k8lkMp1OZQJbNwA+ePBgbgeUHQDsFePO6r3m5IZmjGbwKMtSP20uKZdGr+l0OhqN3r9///bt24ODA6nJRFEUBEGn09nY2Hj48OH6+nq73dapkiAInGNw67rudrtmXn2DvAEAAEDkwE3p9Xp/+tOfhsPhq1evfvzxxyzLNjY2giAoy1KnJpr9UXPHxPUgKS2YSJxoflP7lU5EMWetXFVVTafTwWDw/fffv379ejQa1XUdRZHnea1Wq9vtbm5ubm9vf/HFF2ma6qS77/tyyK9TfpF6SKvVMvPOqqLKAQAAcPtwh7co7BLEdDrd3d1N03RlZcU+ReqiYkUzeNgn2DobPMz5uXC7/8rzPOmDKoqiLMvJZDIajfb29vb29vb 397 Msk7e0Wq1 79+ 49fPjw0aNHS0tLSZLIIVqaMTQgyevt+omEq5WVlct+KVkICAAAcItQ5ViY8GcdVpum6bNnz7SdSQKA8+KLhjTm3rU7k9/OK+2IUtf18fHxYDA4PDw8Pj4Ow/Cbb74ZjUZ37typqqrX6z1//vzLL7+UT40x+oPpWg/5FjqV7nme9FZpGknT9KL6BlUOAAAAIgduil27MNZpVDKTXVWVnT3ss6qcIDF3ZLyZUux5bjlj6uTk5PDwsN/vj0ajqqra7fb9+/fLsuz1esvLyw8fPlxbW7t3754cPKWFC3tUQ3rAnPjkdGpJV9VFUxzkDQAAgNuH/1ReuOBxeQWgqqo8z4ui0Ft5+7ZeixWSB5yzp+xvZK8nPzw8fP/+/WAwKMsyTVOZ7f7w4UOWZY8fP97a2lpaWnKGQ+TtesaufCPJIRI85FOZRdFWq7qul5eXl5aWLv8z0lgFAABwm1DlWKCwYX9w0aPv+3Ecy049iR/2Pg3nQFt7TbiTN+SD2Wy2t7cXBEGe52maSpiZTCa9Xu/FixcrKyt6aK+Tbezjp+YuMnfmN7TVKk3Tn/wzAgAAgMiB6+f0R13+KDv1jDGtVqssy9lspgPc9o4Oe2TcNHaQy9iG53n//Oc/jTFra2tPnjxZXl6O49gYI3PkWqlwShzOFLtev7krUI/bquu61WqFYWguPquKWQ4AAIBbeKPLHd6C+F/+IaTUkOe5zHuY84s1tNXKzgDyWNe1HGsr8xXSDeVc1skY9glUzeOw7NN1fd/P81wGUeTJlZWVXq93xfQFAACA28Hnr2BRwt/ZRr//4lFGuuM4brfbnU4nSRKJBJo0NH40U0EYhlEUSSrQqQxt1jKNZSBaP3G6ueRncOoV0pelfVxJktjXvOgRAAAAtwmNVYviirMcPzn/EARBEASSIrIscw65MuenMuw0oqMXFy3ZMGclDgkSc1d8NIsh+o2SJJFmMMMsBwAAwK8JVY5F8b9UOcy8ukcQBGma9nq9Tqcj277NWXFDSxzOikB7OtxuzXIWDs4dGW+OYeifSL5Rp9O54s8PAACA24Qqx6L4H6scl9QKoiiKoqgsy7Ispe7RTA6X/AwaPMxZ95RprAHRxNJcxCEfhGF4lbOqqHIAAADcPlQ5FsX1Vjmaj0EQtFqtbrd7586ddrsdhqEzsGGHBHsfufOkHQ+EfSxV82ryA8RxbK8np8oBAADw60GVY1Fce5XjouqB53my2UOKHlmWybCHvRxQX2kXLow1uWGfwysvrqpKNm/oM7oWsK5rKXEYqhwAAAC/PlQ5FsVNVzmcRzmrqtPpLC8vr66uttttXViuP4/z4zlpROOHHZac/CCvkdO0rv6zAQAA4Fbd6PL/ygvi5/qHsCcx8jyfzWZ5nud53ixryAlU5vx+8eaWQF0Doq1WaZrevXv3k9IXvw8AAAC3Bo1VCxP+PmX7+OV7uz/pXfr6IAg8z0uSpK7rLMtOTk6yLLMziZm3etycXzquMUZeIMFD1v 996 p8CAAAAt+RGlzu8BbGA/xBlWc5ms9lslmWZlCy0gqELyKXiURRFEARS8TDnayNBENy/f/+TChdUOQAAAG4TZjkWJvx93lmOqzyGYdhut1dWVu7evdvr9WQ63JnWaE6c2xWPuq7b7fanfl8AAADcqhtdqhwLYvH/Ieq6zvN8Op3KvIcOlOs4x9zBj7W1tTiOPzV98fsAAABwa1DlWJjwt3hV. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCYAAACiCAIAAAASp1u1AAAACXBIWXMAABYlAAAWJQFJUiTwAAAYOklEQVR42u3d61Ib2dXG8d0ndbcOGLAZg8GnwmaSVCWuXEbuIXeUe0tSmRrHcTkz9ngGPEggCRCW+vh+WC8rm92CwQl4NMz /90 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 +9/ lDj6KIskJv/ /97 +232/MY9t5xO9XopLiECkkOus1DjrqSYGPOyhpORGkGD2OMhBOpe9R1fXJyMp1OZd5DSh/yvKHKAQAAQOTAz+XyKsf+/v5wONSOJtkAuLW1pSs47G4oLWtoIcJYOzfspCGHU2lyCIJAShwSPIw1ay7f1E44drbRxi0JRTJqUhTFZDI5OjoKwzBNU6l72IMiVDkAAACIHPh8Lq9yfPvtt3YjU1EUm5ubSZJIRcK+ZTfWiVXN6Y7mzb19l68vk8wgZROpscisuQ6H2NPkeqiuOaufaE1DI9B4PD4+Po6iKE3TTqcTx/EldQ8AAAAQOXD9Lq9y/Pvf/9aqghwk9fz5cylH2OFBL6VJwx7k0O2B8qTmB23KkrfYE+eSPWRUQ/aayyFXOnGuIcfu6dJpEGc2fTqdZlk2Go2CIFhaWup2uzLvQZUDAACAyIEbd0mVo9/vj8djKW5IbNCuKjtOmPNH5Tb7oMz5moZ+yc4q2qnlhBlJGlL0sHef2z+2rg7Ud0mMkaYsexqkqqrhcDgcDmXYo9PpaPbgNwEAAIDIgRtxSZXj/fv3smtcXpDn+dbWVrfbdTYANi8o9/pa8WgOl+tX9fxcYx1y1UwsusfD87w8z+WsXnmNXRtxtpvLV51BdvkW0+n09PR0OByGYbiystLpdMIwtMMSAAAAful8/goWhNQNzLyzqr766qswDLUJyhizs7Mj 89/ 6jI532/frWlgwVhXFziFORNEnneEQfdJYVZEgCCQeSJiRBefOcbpOtplbaZEoled5v 99/ 9+6drPgAAAAAkQPXzB7yth+Hw+F4PP7PP5jvt9vtx48f22v+nLfrWVXNOGFXHuZ+6kyHOznEzjZaMJFzrmS7uc6aa5zQa2o5ZW62kVdKjOGXAQAAgMiB63dRlePdu3e6j0/6mjY2NtI0NefHP+yKh50u7JUa9nlW5nzLk7NlXK+pOUSjgi7i0Agkj/LiKIrkGVltLlMfGirM+e3mdvCQj6Wxil8GAAAAIgeu39wqhzHm3bt3uhZD7sufPn2qd/xOf5Rdr7Abmez2KqdXSoa59e2SHOyt4TpD4rRaOQsB7dN4gyDQtisJHnqQrh147DESeXJ5eZnfBAAAACIHbsTcKsd4PB4Oh1qpqOs6juPNzU0dHHcCgHYumfPz6BIq9NgoXRbuWZzGJ6dgMnfGw5zfpCHBQ56RUXVjjNQ95NhcnTh3jrqSxziOpTsLAAAARA5cv7lVju+//342m0nAkO6m1dXVXq83dy7cvpSdZIy1LNz5Xs2DpOyk0ZzxaM6R62v0eFy7M8rOP1EU6XZzqXs4iavX69nHZAEAAIDIgevUrHJUVfXq1asoiuwqxO9+9zt7wUVzg559SJSZ18g0d2WHkx+MdejtuV+Xsye1n0o6ppyVf852Dnv/oO/7YRhKLNH1gvJnb7fb7OUAAAAgcuCmNKscBwcHg8FAKgMyztFut588eeIcRGsnB9PY72HOlvQ5wcOcL6fYUxnGasdytm048xtzr2mfhGtv93Oyjc6ay4qPJEkkXPGbAAAAQOTAjWhWOXZ3d/VJY0xVVffv34/jWG/07Q/k0RnksPuvzNnpVeb8lkD9kmkclmWfinvJcnRz8R6P5qoQ5+QrY0wQBFEULS8vO11eAAAAIHLgOjlVDmPM7u5uHMfSvCQFh62tLXsEwmmdat7r2+yRcWc6vHk1qU5oceOSkKOH5DqNW3b3l+7c0Hhjt1p5nheGYafTMY0+LgAAABA5cG2cKsdkMun3+5IQWq2WfLCxsaEH2uq7zPl6wkWVh//8k89roGq+XYKHpgL5wKl4mHnD5TrI4Qy42xex315Vla7joMoBAABA5MBNcaoc 79+ /z/PcWBPbGxsburbCKTg0b/2bEaI5Mm6sE6vs4GEalRNncqP5yrkrO5qby/Wr9lpAz/O63W6zBQsAAABEDlwnu8pRVdXLly 993 5fJDbkv 397 edoKEvR9wbvywm6MumrXQV+o1jTHavmWfsTs3TuiOv+ZQe7MAoonF/jnDMEySxBkOAQAAAJEDN2g0Go1GI9/38zzX1qOdnR1nOlxTgX04lXMpJ4c4rVb20IV9dJU5K4DMPU5XXuC0Y+lZVdI6ZZ+RJZ/a518ZqxlseXlZXwwAAAAiB26Kfeu/v78vnyZJEoah53lra2utVss5LWpuyWLuHkB7qntuy9NFT5rGMLpdG3Gu1pwzueQ4XQknvu/3ej1zfiQdAAAARA5cP7ux6u3bt1ITKMuyruuyLB8/fpxlmVPNmHuDftEhuc4eD6cpyzTasUxjuNy+jtQ0tHChb2luFXRarewnq6pKkkRKHDRWAQAAEDlws/Q2fTKZjEajMAyDIJB+pCRJNjY27MNn7YYop5Jg5i3EsIPH3BHzS645tzbizGOY8xMmTlnDTi/2TyjLDZt7CQEAAEDkwPXTKsfe3t7Hjx/rui6KQkocDx48aLfb9s36T05umEvrBnoRO5zY1QwnjZjznVd2wtE9Hk7GsI/TlYF4Y42Y6wXTNJ27WxAAAABEDlwzLSZ 899 13dq9RWZbb29vOrHZz64U5PzvhTG6YxiG89uG2dg6xv4WGiubGwGYVRXdu6IyHJg35QB6rqsrzXL6aJEmr1aLKAQAAcLuF/BUsCLnFPzo62tvb06OfyrJM03R9fd1ZFGjOqiJandC7/It28DmTG/pKpylLXynJwU4jGnucioedmvTbSfYoisIYUxSFJI08z+X5NE2NMbJmhCoHAAAAkQOfg9yv9/t9e9K6ruv19fUwDOW0XHtKe24A0EvpCnA7Ttg5xE4sYRjaJ9hecpyuOaulOPvIzVkpQ5NGXdeSMbIsm81mWZYdHh4eHBw8e/as2+3KOg7pFnO+HakDAACAyIEbIRnghx9+iKIoz3MJAEVRPHr0qCgKe0pbmpTsrKIlCPvRrmM4aWTuUbmSH+zLNs+q0tYpe448CALJGMaYsizzPD86OhqNRvv7+7u7u2VZ3rlzZzKZFEXxxz/+cXl5OQxD3/d1cJwqBwAAAJEDn4Pneaenp4PBwPO8MAxlcDxJkrW1NXtAwilu2PnB2U3uXNxZI+hs27DTizPdcUlTlq4qF+Px+Mcff/zhhx/evn17fHwsSWlpaekPf/jD3bt3O51Oq9UqikKKKt1ut1nfoMoBAABA5MBNqet6f39fGqi0gLC1tRXHcVmWxjrSyn7L3Izh3LvPnTUXZVnKObz2yLg9hq5vdIKHHks1m836/f633367u7s7HA6lPlMURRRFW1tbT58+ffDgwf3 793 U9eRRFctk4jpv1DfIGAAAAkQM3GDnevHkTBIEGCc/ztra2mnfh+oyzbcPZMq4dUM7b7ZV/9tvtr84tbhhrHYd0T33zzTevX78eDAYymyHiOH769Onz58+/+OIL6bmSP5TdlNXr9WSrOlUOAAAAIgc+k8lkMp1OZQJbNwA+ePBgbgeUHQDsFePO6r3m5IZmjGbwKMtSP20uKZdGr+l0OhqN3r9///bt24ODA6nJRFEUBEGn09nY2Hj48OH6+nq73dapkiAInGNw67rudrtmXn2DvAEAAEDkwE3p9Xp/+tOfhsPhq1evfvzxxyzLNjY2giAoy1KnJpr9UXPHxPUgKS2YSJxoflP7lU5EMWetXFVVTafTwWDw/fffv379ejQa1XUdRZHnea1Wq9vtbm5ubm9vf/HFF2ma6qS77/tyyK9TfpF6SKvVMvPOqqLKAQAAcPtwh7co7BLEdDrd3d1N03RlZcU+ReqiYkUzeNgn2DobPMz5uXC7/8rzPOmDKoqiLMvJZDIajfb29vb29vb 397 Msk7e0Wq1 79+ 49fPjw0aNHS0tLSZLIIVqaMTQgyevt+omEq5WVlct+KVkICAAAcItQ5ViY8GcdVpum6bNnz7SdSQKA8+KLhjTm3rU7k9/OK+2IUtf18fHxYDA4PDw8Pj4Ow/Cbb74ZjUZ37typqqrX6z1//vzLL7+UT40x+oPpWg/5FjqV7nme9FZpGknT9KL6BlUOAAAAIgduil27MNZpVDKTXVWVnT3ss6qcIDF3ZLyZUux5bjlj6uTk5PDwsN/vj0ajqqra7fb9+/fLsuz1esvLyw8fPlxbW7t3754cPKWFC3tUQ3rAnPjkdGpJV9VFUxzkDQAAgNuH/1ReuOBxeQWgqqo8z4ui0Ft5+7ZeixWSB5yzp+xvZK8nPzw8fP/+/WAwKMsyTVOZ7f7w4UOWZY8fP97a2lpaWnKGQ+TtesaufCPJIRI85FOZRdFWq7qul5eXl5aWLv8z0lgFAABwm1DlWKCwYX9w0aPv+3Ecy049iR/2Pg3nQFt7TbiTN+SD2Wy2t7cXBEGe52maSpiZTCa9Xu/FixcrKyt6aK+Tbezjp+YuMnfmN7TVKk3Tn/wzAgAAgMiB6+f0R13+KDv1jDGtVqssy9lspgPc9o4Oe2TcNHaQy9iG53n//Oc/jTFra2tPnjxZXl6O49gYI3PkWqlwShzOFLtev7krUI/bquu61WqFYWguPquKWQ4AAIBbeKPLHd6C+F/+IaTUkOe5zHuY84s1tNXKzgDyWNe1HGsr8xXSDeVc1skY9glUzeOw7NN1fd/P81wGUeTJlZWVXq93xfQFAACA28Hnr2BRwt/ZRr//4lFGuuM4brfbnU4nSRKJBJo0NH40U0EYhlEUSSrQqQxt1jKNZSBaP3G6ueRncOoV0pelfVxJktjXvOgRAAAAtwmNVYviirMcPzn/EARBEASSIrIscw65MuenMuw0oqMXFy3ZMGclDgkSc1d8NIsh+o2SJJFmMMMsBwAAwK8JVY5F8b9UOcy8ukcQBGma9nq9Tqcj277NWXFDSxzOikB7OtxuzXIWDs4dGW+OYeifSL5Rp9O54s8PAACA24Qqx6L4H6scl9QKoiiKoqgsy7Ispe7RTA6X/AwaPMxZ95RprAHRxNJcxCEfhGF4lbOqqHIAAADcPlQ5FsX1Vjmaj0EQtFqtbrd7586ddrsdhqEzsGGHBHsfufOkHQ+EfSxV82ryA8RxbK8np8oBAADw60GVY1Fce5XjouqB53my2UOKHlmWybCHvRxQX2kXLow1uWGfwysvrqpKNm/oM7oWsK5rKXEYqhwAAAC/PlQ5FsVNVzmcRzmrqtPpLC8vr66uttttXViuP4/z4zlpROOHHZac/CCvkdO0rv6zAQAA4Fbd6PL/ygvi5/qHsCcx8jyfzWZ5nud53ixryAlU5vx+8eaWQF0Doq1WaZrevXv3k9IXvw8AAAC3Bo1VCxP+PmX7+OV7uz/pXfr6IAg8z0uSpK7rLMtOTk6yLLMziZm3etycXzquMUZeIMFD1v 996 p8CAAAAt+RGlzu8BbGA/xBlWc5ms9lslmWZlCy0gqELyKXiURRFEARS8TDnayNBENy/f/+TChdUOQAAAG4TZjkWJvx93lmOqzyGYdhut1dWVu7evdvr9WQ63JnWaE6c2xWPuq7b7fanfl8AAADcqhtdqhwLYvH/Ieq6zvN8Op3KvIcOlOs4x9zBj7W1tTiOPzV98fsAAABwa1DlWJjwt3hV. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCYAAACiCAIAAAASp1u1AAAACXBIWXMAABYlAAAWJQFJUiTwAAAYOklEQVR42u3d61Ib2dXG8d0ndbcOGLAZg8GnwmaSVCWuXEbuIXeUe0tSmRrHcTkz9ngGPEggCRCW+vh+WC8rm92CwQl4NMz /90 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 +9/ lDj6KIskJv/ /97 +232/MY9t5xO9XopLiECkkOus1DjrqSYGPOyhpORGkGD2OMhBOpe9R1fXJyMp1OZd5DSh/yvKHKAQAAQOTAz+XyKsf+/v5wONSOJtkAuLW1pSs47G4oLWtoIcJYOzfspCGHU2lyCIJAShwSPIw1ay7f1E44drbRxi0JRTJqUhTFZDI5OjoKwzBNU6l72IMiVDkAAACIHPh8Lq9yfPvtt3YjU1EUm5ubSZJIRcK+ZTfWiVXN6Y7mzb19l68vk8wgZROpscisuQ6H2NPkeqiuOaufaE1DI9B4PD4+Po6iKE3TTqcTx/EldQ8AAAAQOXD9Lq9y/Pvf/9aqghwk9fz5cylH2OFBL6VJwx7k0O2B8qTmB23KkrfYE+eSPWRUQ/aayyFXOnGuIcfu6dJpEGc2fTqdZlk2Go2CIFhaWup2uzLvQZUDAACAyIEbd0mVo9/vj8djKW5IbNCuKjtOmPNH5Tb7oMz5moZ+yc4q2qnlhBlJGlL0sHef2z+2rg7Ud0mMkaYsexqkqqrhcDgcDmXYo9PpaPbgNwEAAIDIgRtxSZXj/fv3smtcXpDn+dbWVrfbdTYANi8o9/pa8WgOl+tX9fxcYx1y1UwsusfD87w8z+WsXnmNXRtxtpvLV51BdvkW0+n09PR0OByGYbiystLpdMIwtMMSAAAAful8/goWhNQNzLyzqr766qswDLUJyhizs7Mj 89/ 6jI532/frWlgwVhXFziFORNEnneEQfdJYVZEgCCQeSJiRBefOcbpOtplbaZEoled5v 99/ 9+6drPgAAAAAkQPXzB7yth+Hw+F4PP7PP5jvt9vtx48f22v+nLfrWVXNOGFXHuZ+6kyHOznEzjZaMJFzrmS7uc6aa5zQa2o5ZW62kVdKjOGXAQAAgMiB63dRlePdu3e6j0/6mjY2NtI0NefHP+yKh50u7JUa9nlW5nzLk7NlXK+pOUSjgi7i0Agkj/LiKIrkGVltLlMfGirM+e3mdvCQj6Wxil8GAAAAIgeu39wqhzHm3bt3uhZD7sufPn2qd/xOf5Rdr7Abmez2KqdXSoa59e2SHOyt4TpD4rRaOQsB7dN4gyDQtisJHnqQrh147DESeXJ5eZnfBAAAACIHbsTcKsd4PB4Oh1qpqOs6juPNzU0dHHcCgHYumfPz6BIq9NgoXRbuWZzGJ6dgMnfGw5zfpCHBQ56RUXVjjNQ95NhcnTh3jrqSxziOpTsLAAAARA5cv7lVju+//342m0nAkO6m1dXVXq83dy7cvpSdZIy1LNz5Xs2DpOyk0ZzxaM6R62v0eFy7M8rOP1EU6XZzqXs4iavX69nHZAEAAIDIgevUrHJUVfXq1asoiuwqxO9+9zt7wUVzg559SJSZ18g0d2WHkx+MdejtuV+Xsye1n0o6ppyVf852Dnv/oO/7YRhKLNH1gvJnb7fb7OUAAAAgcuCmNKscBwcHg8FAKgMyztFut588eeIcRGsnB9PY72HOlvQ5wcOcL6fYUxnGasdytm048xtzr2mfhGtv93Oyjc6ay4qPJEkkXPGbAAAAQOTAjWhWOXZ3d/VJY0xVVffv34/jWG/07Q/k0RnksPuvzNnpVeb8lkD9kmkclmWfinvJcnRz8R6P5qoQ5+QrY0wQBFEULS8vO11eAAAAIHLgOjlVDmPM7u5uHMfSvCQFh62tLXsEwmmdat7r2+yRcWc6vHk1qU5oceOSkKOH5DqNW3b3l+7c0Hhjt1p5nheGYafTMY0+LgAAABA5cG2cKsdkMun3+5IQWq2WfLCxsaEH2uq7zPl6wkWVh//8k89roGq+XYKHpgL5wKl4mHnD5TrI4Qy42xex315Vla7joMoBAABA5MBNcaoc 79+ /z/PcWBPbGxsburbCKTg0b/2bEaI5Mm6sE6vs4GEalRNncqP5yrkrO5qby/Wr9lpAz/O63W6zBQsAAABEDlwnu8pRVdXLly 993 5fJDbkv 397 edoKEvR9wbvywm6MumrXQV+o1jTHavmWfsTs3TuiOv+ZQe7MAoonF/jnDMEySxBkOAQAAAJEDN2g0Go1GI9/38zzX1qOdnR1nOlxTgX04lXMpJ4c4rVb20IV9dJU5K4DMPU5XXuC0Y+lZVdI6ZZ+RJZ/a518ZqxlseXlZXwwAAAAiB26Kfeu/v78vnyZJEoah53lra2utVss5LWpuyWLuHkB7qntuy9NFT5rGMLpdG3Gu1pwzueQ4XQknvu/3ej1zfiQdAAAARA5cP7ux6u3bt1ITKMuyruuyLB8/fpxlmVPNmHuDftEhuc4eD6cpyzTasUxjuNy+jtQ0tHChb2luFXRarewnq6pKkkRKHDRWAQAAEDlws/Q2fTKZjEajMAyDIJB+pCRJNjY27MNn7YYop5Jg5i3EsIPH3BHzS645tzbizGOY8xMmTlnDTi/2TyjLDZt7CQEAAEDkwPXTKsfe3t7Hjx/rui6KQkocDx48aLfb9s36T05umEvrBnoRO5zY1QwnjZjznVd2wtE9Hk7GsI/TlYF4Y42Y6wXTNJ27WxAAAABEDlwzLSZ 899 13dq9RWZbb29vOrHZz64U5PzvhTG6YxiG89uG2dg6xv4WGiubGwGYVRXdu6IyHJg35QB6rqsrzXL6aJEmr1aLKAQAAcLuF/BUsCLnFPzo62tvb06OfyrJM03R9fd1ZFGjOqiJandC7/It28DmTG/pKpylLXynJwU4jGnucioedmvTbSfYoisIYUxSFJI08z+X5NE2NMbJmhCoHAAAAkQOfg9yv9/t9e9K6ruv19fUwDOW0XHtKe24A0EvpCnA7Ttg5xE4sYRjaJ9hecpyuOaulOPvIzVkpQ5NGXdeSMbIsm81mWZYdHh4eHBw8e/as2+3KOg7pFnO+HakDAACAyIEbIRnghx9+iKIoz3MJAEVRPHr0qCgKe0pbmpTsrKIlCPvRrmM4aWTuUbmSH+zLNs+q0tYpe448CALJGMaYsizzPD86OhqNRvv7+7u7u2VZ3rlzZzKZFEXxxz/+cXl5OQxD3/d1cJwqBwAAAJEDn4Pneaenp4PBwPO8MAxlcDxJkrW1NXtAwilu2PnB2U3uXNxZI+hs27DTizPdcUlTlq4qF+Px+Mcff/zhhx/evn17fHwsSWlpaekPf/jD3bt3O51Oq9UqikKKKt1ut1nfoMoBAABA5MBNqet6f39fGqi0gLC1tRXHcVmWxjrSyn7L3Izh3LvPnTUXZVnKObz2yLg9hq5vdIKHHks1m836/f633367u7s7HA6lPlMURRRFW1tbT58+ffDgwf3 793 U9eRRFctk4jpv1DfIGAAAAkQM3GDnevHkTBIEGCc/ztra2mnfh+oyzbcPZMq4dUM7b7ZV/9tvtr84tbhhrHYd0T33zzTevX78eDAYymyHiOH769Onz58+/+OIL6bmSP5TdlNXr9WSrOlUOAAAAIgc+k8lkMp1OZQJbNwA+ePBgbgeUHQDsFePO6r3m5IZmjGbwKMtSP20uKZdGr+l0OhqN3r9///bt24ODA6nJRFEUBEGn09nY2Hj48OH6+nq73dapkiAInGNw67rudrtmXn2DvAEAAEDkwE3p9Xp/+tOfhsPhq1evfvzxxyzLNjY2giAoy1KnJpr9UXPHxPUgKS2YSJxoflP7lU5EMWetXFVVTafTwWDw/fffv379ejQa1XUdRZHnea1Wq9vtbm5ubm9vf/HFF2ma6qS77/tyyK9TfpF6SKvVMvPOqqLKAQAAcPtwh7co7BLEdDrd3d1N03RlZcU+ReqiYkUzeNgn2DobPMz5uXC7/8rzPOmDKoqiLMvJZDIajfb29vb29vb 397 Msk7e0Wq1 79+ 49fPjw0aNHS0tLSZLIIVqaMTQgyevt+omEq5WVlct+KVkICAAAcItQ5ViY8GcdVpum6bNnz7SdSQKA8+KLhjTm3rU7k9/OK+2IUtf18fHxYDA4PDw8Pj4Ow/Cbb74ZjUZ37typqqrX6z1//vzLL7+UT40x+oPpWg/5FjqV7nme9FZpGknT9KL6BlUOAAAAIgduil27MNZpVDKTXVWVnT3ss6qcIDF3ZLyZUux5bjlj6uTk5PDwsN/vj0ajqqra7fb9+/fLsuz1esvLyw8fPlxbW7t3754cPKWFC3tUQ3rAnPjkdGpJV9VFUxzkDQAAgNuH/1ReuOBxeQWgqqo8z4ui0Ft5+7ZeixWSB5yzp+xvZK8nPzw8fP/+/WAwKMsyTVOZ7f7w4UOWZY8fP97a2lpaWnKGQ+TtesaufCPJIRI85FOZRdFWq7qul5eXl5aWLv8z0lgFAABwm1DlWKCwYX9w0aPv+3Ecy049iR/2Pg3nQFt7TbiTN+SD2Wy2t7cXBEGe52maSpiZTCa9Xu/FixcrKyt6aK+Tbezjp+YuMnfmN7TVKk3Tn/wzAgAAgMiB6+f0R13+KDv1jDGtVqssy9lspgPc9o4Oe2TcNHaQy9iG53n//Oc/jTFra2tPnjxZXl6O49gYI3PkWqlwShzOFLtev7krUI/bquu61WqFYWguPquKWQ4AAIBbeKPLHd6C+F/+IaTUkOe5zHuY84s1tNXKzgDyWNe1HGsr8xXSDeVc1skY9glUzeOw7NN1fd/P81wGUeTJlZWVXq93xfQFAACA28Hnr2BRwt/ZRr//4lFGuuM4brfbnU4nSRKJBJo0NH40U0EYhlEUSSrQqQxt1jKNZSBaP3G6ueRncOoV0pelfVxJktjXvOgRAAAAtwmNVYviirMcPzn/EARBEASSIrIscw65MuenMuw0oqMXFy3ZMGclDgkSc1d8NIsh+o2SJJFmMMMsBwAAwK8JVY5F8b9UOcy8ukcQBGma9nq9Tqcj277NWXFDSxzOikB7OtxuzXIWDs4dGW+OYeifSL5Rp9O54s8PAACA24Qqx6L4H6scl9QKoiiKoqgsy7Ispe7RTA6X/AwaPMxZ95RprAHRxNJcxCEfhGF4lbOqqHIAAADcPlQ5FsX1Vjmaj0EQtFqtbrd7586ddrsdhqEzsGGHBHsfufOkHQ+EfSxV82ryA8RxbK8np8oBAADw60GVY1Fce5XjouqB53my2UOKHlmWybCHvRxQX2kXLow1uWGfwysvrqpKNm/oM7oWsK5rKXEYqhwAAAC/PlQ5FsVNVzmcRzmrqtPpLC8vr66uttttXViuP4/z4zlpROOHHZac/CCvkdO0rv6zAQAA4Fbd6PL/ygvi5/qHsCcx8jyfzWZ5nud53ixryAlU5vx+8eaWQF0Doq1WaZrevXv3k9IXvw8AAAC3Bo1VCxP+PmX7+OV7uz/pXfr6IAg8z0uSpK7rLMtOTk6yLLMziZm3etycXzquMUZeIMFD1v 996 p8CAAAAt+RGlzu8BbGA/xBlWc5ms9lslmWZlCy0gqELyKXiURRFEARS8TDnayNBENy/f/+TChdUOQAAAG4TZjkWJvx93lmOqzyGYdhut1dWVu7evdvr9WQ63JnWaE6c2xWPuq7b7fanfl8AAADcqhtdqhwLYvH/Ieq6zvN8Op3KvIcOlOs4x9zBj7W1tTiOPzV98fsAAABwa1DlWJjwt3hV