<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3109994058962333981</id><updated>2026-10-17T16:52:54.335-07:00</updated><category term="Big Data"/><category term="Cloud Applications"/><category term="Cloud Basics"/><category term="Azure"/><category term="Big Data Analysis"/><category term="Cloud Applications;"/><category term="Machine Learning"/><category term="Cloud Architecture"/><category term="Service Bus"/><category term="Azure SDK"/><category term="Hadoop Azure"/><category term="Machine Learning Basics"/><category term="Messaging"/><category term="PaaS"/><category term="Azure Machine Learning"/><category term="Best practices for Large Azure Projects"/><category term="Cloud Learning Session"/><category term="Enterprise Cloud Solution"/><category term="Large Azure Deployment"/><category term="Regression"/><category term="API Management"/><category term="API Platforms"/><category term="Apache"/><category term="Apache Cassandra"/><category term="Apache Kafka"/><category term="Apache Mesos"/><category term="Apache NiFi"/><category term="Apache Storm"/><category term="Cloud Data Security"/><category term="Data Science"/><category term="Data Security"/><category term="Deep Learning"/><category term="Failsafe Computing"/><category term="Forrester -Tech Changes"/><category term="Hadoop"/><category term="Hybrid Cloud"/><category term="IaaS"/><category term="Mobile Architecture"/><category term="NSA"/><category term="Oracle Accquisations"/><category term="Predicting Gold Buy Sell"/><category term="Prediction"/><category term="RMS"/><category term="Stock Market"/><category term="blockchain"/><title type='text'>Ajay Solanki</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-8211856732506999984</id><published>2022-01-20T03:13:00.001-08:00</published><updated>2022-01-20T03:14:15.877-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blockchain"/><title type='text'>Blockchain MDM Synergies</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; white-space: pre-wrap;&quot;&gt;The current state of data is highly distributed by nature, for example banking, healthcare, transportation, energy, manufacturing, and other sectors, the trend is decentralized locations and teams managing local data. But it’s a trend that comes with the potential for chaos — especially for master data, where accuracy, security, and conformity are essential.&lt;/span&gt;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-dfd1b485-7fff-e56d-bdc1-18ef8b2a4681&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Most organizations would have moved on the idea of building Master Data Management capabilities as an organic path of technology growth, they would write tons of ETL data pipelines on clouds of their choice OR on premise.&amp;nbsp;&amp;nbsp;ETL data pipelines or alternate technologies can be costly and after the multi year project they still don’t seem to come to the gospel truth of the “&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Single Source of Truth&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;”.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.295; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;color: #2f5496; font-family: Calibri, sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Common Thread&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Blockchain is a distributed ledger that is encrypted and immutable. Each new block that is added to the chain needs to be verified by the previous block with a unique identifier. Blockchains are cloud-hosted (hence the term ‘distributed’).&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;So, while this is obviously useful for transactions and has traditional finance institutes scrambling because Blockchain can cut the middleman, Blockchain’s native safety features make it a great choice for what’s known as ‘&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;the single source of truth’&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;as well.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.295; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;color: #2f5496; font-family: Calibri, sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;How can Blockchain help in Master Data Management?&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Master Data Management (MDM) depends on creating consensus truth for the enterprise which is e-commerce business. If Enterprise A merges with Enterprise B, their big stores of master data need to merge as well. It’s critical that the process reliably matches customer records when it should, while carefully avoiding false matches. Business can depend on the accuracy of the master data matching process.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Traditionally, matching has meant linking the records within the two different databases, based on identifiers like Customer Name, Address, date of birth, drivers’ license information, and so on. The MDM system could write the linkage information to a central database accessible from different locations. But having a single copy of the linkage data in a single location has meant that admins need to take special care to ensure that the data is highly available and secure. Private blockchain networks (also called ‘permissioned networks’) offer an intriguing alternative.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.295; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;color: #2f5496; font-family: Calibri, sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;A better MDM solution with Blockchain&lt;/span&gt;&lt;/h1&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Digital Ledger has much more to offer for example over time, large enterprises will adopt distributed ledger models to record and manage biographic and biometric data. For example, imagine hospitals, banks, and governments all wanting to maintain their master data on the blockchain. But those organizations will need ways to match and link that data across&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;networks.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The submission here is “&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;One can build an MDM without necessarily having to go down the path of ETL, Data pipeline&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;leveraging distributed ledger”&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #4a86e8; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Consider Enterprise A and Enterprise B. If they each maintain their customer records, how will they combine those records in the event of a merger?&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The enterprises could first create a business network using the blockchain technology.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;That offers an advantage because data sharing then happens on the blockchain network as opposed to being centralized&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Once the teams create the network and begin sharing data on the network, sophisticated &lt;/span&gt;&lt;span style=&quot;color: #4a86e8; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;algorithms kick in to perform matching and linking &lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;— and the linking information is also stored natively on the blockchain.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Teams could also choose whether each node should maintain its own copy of the linkage information on the ledger.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;If not, the node can simply consume the linkage information that’s maintained elsewhere on the network. That option keeps transaction activity from swamping any nodes that might have less compute power or connectivity, while helping to ensure that the linkage data is stored redundantly across multiple nodes.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Hopefully, the e-commerce example puts a compelling argument on the potential advantages of MDM on the blockchain, but the gains don’t stop there. Consider…&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; margin-left: -18pt; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Data reconciliation&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&amp;nbsp;When every participating business unit is part of the blockchain network, there’s no longer a need to move data between the business units. With traditional MDM, data movement can consume an enormous amount of time and energy.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; margin-left: -18pt; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Cost and Trust&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&amp;nbsp;Maintaining a central infrastructure is expensive and prone to security compromise. With the blockchain system, transactions aren’t committed without the consensus of the whole system.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; margin-left: -18pt; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 7pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Organizational efficiency&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&amp;nbsp;The blockchain eliminates the need for complex reconciliation between different nodes, whether the nodes are branch banks, health clinics, distribution centers, or other peers in the system.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; margin-left: -18pt; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Disintermediation&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&amp;nbsp;Eliminates central intermediaries and reduces the fear of arbitrage within the ecosystem.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; margin-left: -18pt; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Transparency&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&amp;nbsp;Enables audit trails to be established for assets and transactions, minimizing disputes.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.295; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;color: #2f5496; font-family: Calibri, sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Databases which are blockchain enabled.&lt;/span&gt;&lt;/h1&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;BigchainDB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Cassandra&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ChainifyDB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;CovenantSQL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Modex BCDB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Postchain&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ProvenDB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-left: -18pt; margin-top: 0pt; padding: 0pt 0pt 0pt 18pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 18pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Next Steps….&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Like all big data, master data offers important opportunities for machine learning analytics. Obviously, embedded analytics of anonymized master data can yield powerful insights, but machine learning can also play a role further upstream.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Calibri, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Ultimately, the goal is to make Master Data Management as easy and intuitive as possible. New tools will give non-technical users across industries the ability to manage master data flexibly, efficiently, securely — and with perfect confidence.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;background-color: white; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Calibri, sans-serif; font-size: 15pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Food for thought, writing a NFT,Crypto intelligent&amp;nbsp; trading platform which takes intuition on the above principle is worth thinking about…&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/8211856732506999984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/8211856732506999984?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/8211856732506999984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/8211856732506999984'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2022/01/blockchain-mdm-synergies.html' title='Blockchain MDM Synergies'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1729202785608759486</id><published>2022-01-19T23:11:00.003-08:00</published><updated>2022-01-20T00:10:00.019-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices for Large Azure Projects"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Applications"/><title type='text'>Chaos Engineering by Azure </title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;img alt=&quot;Azure Chaos Studio - Chaos engineering experimentation | Microsoft Azure&quot; src=&quot;data:image/jpeg;base64,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&quot; /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Chaos is a part of everyday life. Giving a mathematical twist to the subject “Chaos describes a situation where typical solutions (or orbits) of a differential equation (or typical evolutions of some other model describing deterministic evolution) do not converge to a stationary or periodic function (of time) but continue to exhibit a seemingly unpredictable behavior” .&amp;nbsp; The key word here is unpredictable behavior.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;The IT systems are no stranger to unpredictable behavior the probability of unpredictable behavior becomes higher when cloud is added to the equation. There a long laundry list of items which can fail in a cloud architecture. Most architect now also have begun to add another dimension to there discussion is resiliency or chaos engineering.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;What is Chaos engineering?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Chaos engineering is a methodology that helps developers attain reliability by hardening services against failures in production.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;How is it done?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Deliberating injecting faults that causes the system to fail. For instance taking dependencies offline (stopping API apps, shutting down VMs, restricting access, introducing slowness in services and many more. This can help in identifying if the applications architecture is indeed resilient to failure.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Of course resiliency also can be measured which is a different topic of discussion.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;Introducing Azure Chaos&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Azure Chaos is a service which can help in improving the resiliency by method of experiments. At a simplest level an experiment is a plan to introduce controlled faults into the systems.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;To start with Azure Chaos has a good list of faults given below. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhgExtkYaLMngWhzPX_DNqS0-ufGK-0NSBOoy2gWEZR7jsU_47pOnwEGA9Kc-2RkAt92wn1A-rV5xnnL_e2qUCG_LdcDOxa5HHtbMDvgNfLCuFowYY2WXKaHbtJ9wmJOoSAscpwpMYXN2PnQNj5fXaw0Ti0CqgolJl-vCDOGjD81bDeOLlMroFBntKxtg=s798&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;798&quot; data-original-width=&quot;540&quot; height=&quot;476&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhgExtkYaLMngWhzPX_DNqS0-ufGK-0NSBOoy2gWEZR7jsU_47pOnwEGA9Kc-2RkAt92wn1A-rV5xnnL_e2qUCG_LdcDOxa5HHtbMDvgNfLCuFowYY2WXKaHbtJ9wmJOoSAscpwpMYXN2PnQNj5fXaw0Ti0CqgolJl-vCDOGjD81bDeOLlMroFBntKxtg=w323-h476&quot; width=&quot;323&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;What does AWS have in the same space?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;AWS has Fault Injection Simulator, which is a fully managed service for running fault injection experiments on AWS that makes it easier to improve an application’s performance, observability, and resiliency&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;Does Azure Chaos support custom faults?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;For faults which are not supported the option is go with agent based fault, which requires setup and installation of the chaos agent, unlike a service-direct fault, which runs directly against an Azure resource without any need for instrumentation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Does it have any limitation?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Find the limitations &lt;a href=&quot;https://docs.microsoft.com/en-us/azure/chaos-studio/chaos-studio-limitations&quot;&gt;here&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;&lt;strong&gt;Parting word…&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Calibri; font-size: medium;&quot;&gt;Architect should start looking at all architecture from a chaos engineering stand point of view, especially when cost of downtime on business can be very high.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1729202785608759486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1729202785608759486?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1729202785608759486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1729202785608759486'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2022/01/chaos-engineering-by-azure.html' title='Chaos Engineering by Azure '/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhgExtkYaLMngWhzPX_DNqS0-ufGK-0NSBOoy2gWEZR7jsU_47pOnwEGA9Kc-2RkAt92wn1A-rV5xnnL_e2qUCG_LdcDOxa5HHtbMDvgNfLCuFowYY2WXKaHbtJ9wmJOoSAscpwpMYXN2PnQNj5fXaw0Ti0CqgolJl-vCDOGjD81bDeOLlMroFBntKxtg=s72-w323-h476-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-4599395402365030271</id><published>2019-09-08T01:47:00.000-07:00</published><updated>2019-09-09T00:11:05.683-07:00</updated><title type='text'>Azure Data Share - Quick Facts</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/data-share/&quot;&gt;Azure
Data Share&lt;/a&gt; a new feature to share data between organizations. The regions
are slightly limited to 3 as of now but will grow in the future. Under the hood
it’s a PaaS based share service which expose selected data from Azure storage
to the selected parties and has a couple of features thrown in&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;-Versioning&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;-Tracking and auditing capabilities like who, when accessed the
data.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;-Subscribe to the data share. &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;-Policies around data usage &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: wingdings;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Uses the same security primitives as Azure.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;i style=&quot;mso-bidi-font-style: normal;&quot;&gt;&lt;span style=&quot;color: #4472c4; font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif; mso-themecolor: accent1;&quot;&gt;Quick Facts: Data can be shared in/out to any other organization which
are on Azure.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;The
sharing and receiving possibility in/out are limited to&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_hZJwlo1GivF0-QTQo8QJ0uS-nfQEfLuDTqQGQ6C0M0P-04QQUC9Ma5a0bHNSwLcfHwd01fpjBXe24AfR1gm4wEc47OM0-yOFkVQo1WXGArqTLwn1YArpXMsZoy11rabQypRaFsVL3wcg/s1600/DataSets.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;271&quot; data-original-width=&quot;607&quot; height=&quot;142&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_hZJwlo1GivF0-QTQo8QJ0uS-nfQEfLuDTqQGQ6C0M0P-04QQUC9Ma5a0bHNSwLcfHwd01fpjBXe24AfR1gm4wEc47OM0-yOFkVQo1WXGArqTLwn1YArpXMsZoy11rabQypRaFsVL3wcg/s320/DataSets.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Data
shared via invitation works best with Microsoft suite of authentication schemes
or more specifically Azure, so if there is sharing information to other forms
authentication that will not be possible.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Typical use cases &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;mso-list: l1 level1 lfo2; text-indent: -.25in;&quot;&gt;
&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif; mso-fareast-font-family: &amp;quot;Segoe UI Light&amp;quot;;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Data
Sharing between organizations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif; mso-fareast-font-family: &amp;quot;Segoe UI Light&amp;quot;;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Planning
to find an easier solution then FTP , drop box other forms for sharing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;!--[if !supportLists]--&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot; , sans-serif;&quot;&gt;Good
to see in future allow data share of Azure database which add complexity to
multifold and will be competing with other existing Azure offering (SQL Azure Sync,
ADF etc.…)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/4599395402365030271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/4599395402365030271?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4599395402365030271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4599395402365030271'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2019/09/azure-data-share-quick-facts.html' title='Azure Data Share - Quick Facts'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_hZJwlo1GivF0-QTQo8QJ0uS-nfQEfLuDTqQGQ6C0M0P-04QQUC9Ma5a0bHNSwLcfHwd01fpjBXe24AfR1gm4wEc47OM0-yOFkVQo1WXGArqTLwn1YArpXMsZoy11rabQypRaFsVL3wcg/s72-c/DataSets.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-182518791389906626</id><published>2019-02-02T23:09:00.007-08:00</published><updated>2019-02-03T03:45:24.756-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Science"/><category scheme="http://www.blogger.com/atom/ns#" term="Deep Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Stock Market"/><title type='text'>LSTM for Stock Markets</title><content type='html'>
&lt;!-- saved from url=(0101)http://localhost:8888/nbconvert/html/Trying%20out%20LSTM%20for%20stock%20markets.ipynb?download=false --&gt;

&lt;title&gt;Trying out LSTM for stock markets&lt;/title&gt;&lt;script src=&quot;./Trying out LSTM for stock markets_files/require.min.js.download&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./Trying out LSTM for stock markets_files/jquery.min.js.download&quot;&gt;&lt;/script&gt;

&lt;style type=&quot;text/css&quot;&gt;
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type=&quot;button&quot;],
input[type=&quot;reset&quot;],
input[type=&quot;submit&quot;] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type=&quot;checkbox&quot;],
input[type=&quot;radio&quot;] {
  box-sizing: border-box;
  padding: 0;
}
input[type=&quot;number&quot;]::-webkit-inner-spin-button,
input[type=&quot;number&quot;]::-webkit-outer-spin-button {
  height: auto;
}
input[type=&quot;search&quot;] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type=&quot;search&quot;]::-webkit-search-cancel-button,
input[type=&quot;search&quot;]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: &quot; (&quot; attr(href) &quot;)&quot;;
  }
  abbr[title]:after {
    content: &quot; (&quot; attr(title) &quot;)&quot;;
  }
  a[href^=&quot;#&quot;]:after,
  a[href^=&quot;javascript:&quot;]:after {
    content: &quot;&quot;;
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn &gt; .caret,
  .dropup &gt; .btn &gt; .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: &#39;Glyphicons Halflings&#39;;
  src: url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.eot&#39;);
  src: url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix&#39;) format(&#39;embedded-opentype&#39;), url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.woff2&#39;) format(&#39;woff2&#39;), url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.woff&#39;) format(&#39;woff&#39;), url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.ttf&#39;) format(&#39;truetype&#39;), url(&#39;../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular&#39;) format(&#39;svg&#39;);
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: &#39;Glyphicons Halflings&#39;;
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: &quot;\002a&quot;;
}
.glyphicon-plus:before {
  content: &quot;\002b&quot;;
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: &quot;\20ac&quot;;
}
.glyphicon-minus:before {
  content: &quot;\2212&quot;;
}
.glyphicon-cloud:before {
  content: &quot;\2601&quot;;
}
.glyphicon-envelope:before {
  content: &quot;\2709&quot;;
}
.glyphicon-pencil:before {
  content: &quot;\270f&quot;;
}
.glyphicon-glass:before {
  content: &quot;\e001&quot;;
}
.glyphicon-music:before {
  content: &quot;\e002&quot;;
}
.glyphicon-search:before {
  content: &quot;\e003&quot;;
}
.glyphicon-heart:before {
  content: &quot;\e005&quot;;
}
.glyphicon-star:before {
  content: &quot;\e006&quot;;
}
.glyphicon-star-empty:before {
  content: &quot;\e007&quot;;
}
.glyphicon-user:before {
  content: &quot;\e008&quot;;
}
.glyphicon-film:before {
  content: &quot;\e009&quot;;
}
.glyphicon-th-large:before {
  content: &quot;\e010&quot;;
}
.glyphicon-th:before {
  content: &quot;\e011&quot;;
}
.glyphicon-th-list:before {
  content: &quot;\e012&quot;;
}
.glyphicon-ok:before {
  content: &quot;\e013&quot;;
}
.glyphicon-remove:before {
  content: &quot;\e014&quot;;
}
.glyphicon-zoom-in:before {
  content: &quot;\e015&quot;;
}
.glyphicon-zoom-out:before {
  content: &quot;\e016&quot;;
}
.glyphicon-off:before {
  content: &quot;\e017&quot;;
}
.glyphicon-signal:before {
  content: &quot;\e018&quot;;
}
.glyphicon-cog:before {
  content: &quot;\e019&quot;;
}
.glyphicon-trash:before {
  content: &quot;\e020&quot;;
}
.glyphicon-home:before {
  content: &quot;\e021&quot;;
}
.glyphicon-file:before {
  content: &quot;\e022&quot;;
}
.glyphicon-time:before {
  content: &quot;\e023&quot;;
}
.glyphicon-road:before {
  content: &quot;\e024&quot;;
}
.glyphicon-download-alt:before {
  content: &quot;\e025&quot;;
}
.glyphicon-download:before {
  content: &quot;\e026&quot;;
}
.glyphicon-upload:before {
  content: &quot;\e027&quot;;
}
.glyphicon-inbox:before {
  content: &quot;\e028&quot;;
}
.glyphicon-play-circle:before {
  content: &quot;\e029&quot;;
}
.glyphicon-repeat:before {
  content: &quot;\e030&quot;;
}
.glyphicon-refresh:before {
  content: &quot;\e031&quot;;
}
.glyphicon-list-alt:before {
  content: &quot;\e032&quot;;
}
.glyphicon-lock:before {
  content: &quot;\e033&quot;;
}
.glyphicon-flag:before {
  content: &quot;\e034&quot;;
}
.glyphicon-headphones:before {
  content: &quot;\e035&quot;;
}
.glyphicon-volume-off:before {
  content: &quot;\e036&quot;;
}
.glyphicon-volume-down:before {
  content: &quot;\e037&quot;;
}
.glyphicon-volume-up:before {
  content: &quot;\e038&quot;;
}
.glyphicon-qrcode:before {
  content: &quot;\e039&quot;;
}
.glyphicon-barcode:before {
  content: &quot;\e040&quot;;
}
.glyphicon-tag:before {
  content: &quot;\e041&quot;;
}
.glyphicon-tags:before {
  content: &quot;\e042&quot;;
}
.glyphicon-book:before {
  content: &quot;\e043&quot;;
}
.glyphicon-bookmark:before {
  content: &quot;\e044&quot;;
}
.glyphicon-print:before {
  content: &quot;\e045&quot;;
}
.glyphicon-camera:before {
  content: &quot;\e046&quot;;
}
.glyphicon-font:before {
  content: &quot;\e047&quot;;
}
.glyphicon-bold:before {
  content: &quot;\e048&quot;;
}
.glyphicon-italic:before {
  content: &quot;\e049&quot;;
}
.glyphicon-text-height:before {
  content: &quot;\e050&quot;;
}
.glyphicon-text-width:before {
  content: &quot;\e051&quot;;
}
.glyphicon-align-left:before {
  content: &quot;\e052&quot;;
}
.glyphicon-align-center:before {
  content: &quot;\e053&quot;;
}
.glyphicon-align-right:before {
  content: &quot;\e054&quot;;
}
.glyphicon-align-justify:before {
  content: &quot;\e055&quot;;
}
.glyphicon-list:before {
  content: &quot;\e056&quot;;
}
.glyphicon-indent-left:before {
  content: &quot;\e057&quot;;
}
.glyphicon-indent-right:before {
  content: &quot;\e058&quot;;
}
.glyphicon-facetime-video:before {
  content: &quot;\e059&quot;;
}
.glyphicon-picture:before {
  content: &quot;\e060&quot;;
}
.glyphicon-map-marker:before {
  content: &quot;\e062&quot;;
}
.glyphicon-adjust:before {
  content: &quot;\e063&quot;;
}
.glyphicon-tint:before {
  content: &quot;\e064&quot;;
}
.glyphicon-edit:before {
  content: &quot;\e065&quot;;
}
.glyphicon-share:before {
  content: &quot;\e066&quot;;
}
.glyphicon-check:before {
  content: &quot;\e067&quot;;
}
.glyphicon-move:before {
  content: &quot;\e068&quot;;
}
.glyphicon-step-backward:before {
  content: &quot;\e069&quot;;
}
.glyphicon-fast-backward:before {
  content: &quot;\e070&quot;;
}
.glyphicon-backward:before {
  content: &quot;\e071&quot;;
}
.glyphicon-play:before {
  content: &quot;\e072&quot;;
}
.glyphicon-pause:before {
  content: &quot;\e073&quot;;
}
.glyphicon-stop:before {
  content: &quot;\e074&quot;;
}
.glyphicon-forward:before {
  content: &quot;\e075&quot;;
}
.glyphicon-fast-forward:before {
  content: &quot;\e076&quot;;
}
.glyphicon-step-forward:before {
  content: &quot;\e077&quot;;
}
.glyphicon-eject:before {
  content: &quot;\e078&quot;;
}
.glyphicon-chevron-left:before {
  content: &quot;\e079&quot;;
}
.glyphicon-chevron-right:before {
  content: &quot;\e080&quot;;
}
.glyphicon-plus-sign:before {
  content: &quot;\e081&quot;;
}
.glyphicon-minus-sign:before {
  content: &quot;\e082&quot;;
}
.glyphicon-remove-sign:before {
  content: &quot;\e083&quot;;
}
.glyphicon-ok-sign:before {
  content: &quot;\e084&quot;;
}
.glyphicon-question-sign:before {
  content: &quot;\e085&quot;;
}
.glyphicon-info-sign:before {
  content: &quot;\e086&quot;;
}
.glyphicon-screenshot:before {
  content: &quot;\e087&quot;;
}
.glyphicon-remove-circle:before {
  content: &quot;\e088&quot;;
}
.glyphicon-ok-circle:before {
  content: &quot;\e089&quot;;
}
.glyphicon-ban-circle:before {
  content: &quot;\e090&quot;;
}
.glyphicon-arrow-left:before {
  content: &quot;\e091&quot;;
}
.glyphicon-arrow-right:before {
  content: &quot;\e092&quot;;
}
.glyphicon-arrow-up:before {
  content: &quot;\e093&quot;;
}
.glyphicon-arrow-down:before {
  content: &quot;\e094&quot;;
}
.glyphicon-share-alt:before {
  content: &quot;\e095&quot;;
}
.glyphicon-resize-full:before {
  content: &quot;\e096&quot;;
}
.glyphicon-resize-small:before {
  content: &quot;\e097&quot;;
}
.glyphicon-exclamation-sign:before {
  content: &quot;\e101&quot;;
}
.glyphicon-gift:before {
  content: &quot;\e102&quot;;
}
.glyphicon-leaf:before {
  content: &quot;\e103&quot;;
}
.glyphicon-fire:before {
  content: &quot;\e104&quot;;
}
.glyphicon-eye-open:before {
  content: &quot;\e105&quot;;
}
.glyphicon-eye-close:before {
  content: &quot;\e106&quot;;
}
.glyphicon-warning-sign:before {
  content: &quot;\e107&quot;;
}
.glyphicon-plane:before {
  content: &quot;\e108&quot;;
}
.glyphicon-calendar:before {
  content: &quot;\e109&quot;;
}
.glyphicon-random:before {
  content: &quot;\e110&quot;;
}
.glyphicon-comment:before {
  content: &quot;\e111&quot;;
}
.glyphicon-magnet:before {
  content: &quot;\e112&quot;;
}
.glyphicon-chevron-up:before {
  content: &quot;\e113&quot;;
}
.glyphicon-chevron-down:before {
  content: &quot;\e114&quot;;
}
.glyphicon-retweet:before {
  content: &quot;\e115&quot;;
}
.glyphicon-shopping-cart:before {
  content: &quot;\e116&quot;;
}
.glyphicon-folder-close:before {
  content: &quot;\e117&quot;;
}
.glyphicon-folder-open:before {
  content: &quot;\e118&quot;;
}
.glyphicon-resize-vertical:before {
  content: &quot;\e119&quot;;
}
.glyphicon-resize-horizontal:before {
  content: &quot;\e120&quot;;
}
.glyphicon-hdd:before {
  content: &quot;\e121&quot;;
}
.glyphicon-bullhorn:before {
  content: &quot;\e122&quot;;
}
.glyphicon-bell:before {
  content: &quot;\e123&quot;;
}
.glyphicon-certificate:before {
  content: &quot;\e124&quot;;
}
.glyphicon-thumbs-up:before {
  content: &quot;\e125&quot;;
}
.glyphicon-thumbs-down:before {
  content: &quot;\e126&quot;;
}
.glyphicon-hand-right:before {
  content: &quot;\e127&quot;;
}
.glyphicon-hand-left:before {
  content: &quot;\e128&quot;;
}
.glyphicon-hand-up:before {
  content: &quot;\e129&quot;;
}
.glyphicon-hand-down:before {
  content: &quot;\e130&quot;;
}
.glyphicon-circle-arrow-right:before {
  content: &quot;\e131&quot;;
}
.glyphicon-circle-arrow-left:before {
  content: &quot;\e132&quot;;
}
.glyphicon-circle-arrow-up:before {
  content: &quot;\e133&quot;;
}
.glyphicon-circle-arrow-down:before {
  content: &quot;\e134&quot;;
}
.glyphicon-globe:before {
  content: &quot;\e135&quot;;
}
.glyphicon-wrench:before {
  content: &quot;\e136&quot;;
}
.glyphicon-tasks:before {
  content: &quot;\e137&quot;;
}
.glyphicon-filter:before {
  content: &quot;\e138&quot;;
}
.glyphicon-briefcase:before {
  content: &quot;\e139&quot;;
}
.glyphicon-fullscreen:before {
  content: &quot;\e140&quot;;
}
.glyphicon-dashboard:before {
  content: &quot;\e141&quot;;
}
.glyphicon-paperclip:before {
  content: &quot;\e142&quot;;
}
.glyphicon-heart-empty:before {
  content: &quot;\e143&quot;;
}
.glyphicon-link:before {
  content: &quot;\e144&quot;;
}
.glyphicon-phone:before {
  content: &quot;\e145&quot;;
}
.glyphicon-pushpin:before {
  content: &quot;\e146&quot;;
}
.glyphicon-usd:before {
  content: &quot;\e148&quot;;
}
.glyphicon-gbp:before {
  content: &quot;\e149&quot;;
}
.glyphicon-sort:before {
  content: &quot;\e150&quot;;
}
.glyphicon-sort-by-alphabet:before {
  content: &quot;\e151&quot;;
}
.glyphicon-sort-by-alphabet-alt:before {
  content: &quot;\e152&quot;;
}
.glyphicon-sort-by-order:before {
  content: &quot;\e153&quot;;
}
.glyphicon-sort-by-order-alt:before {
  content: &quot;\e154&quot;;
}
.glyphicon-sort-by-attributes:before {
  content: &quot;\e155&quot;;
}
.glyphicon-sort-by-attributes-alt:before {
  content: &quot;\e156&quot;;
}
.glyphicon-unchecked:before {
  content: &quot;\e157&quot;;
}
.glyphicon-expand:before {
  content: &quot;\e158&quot;;
}
.glyphicon-collapse-down:before {
  content: &quot;\e159&quot;;
}
.glyphicon-collapse-up:before {
  content: &quot;\e160&quot;;
}
.glyphicon-log-in:before {
  content: &quot;\e161&quot;;
}
.glyphicon-flash:before {
  content: &quot;\e162&quot;;
}
.glyphicon-log-out:before {
  content: &quot;\e163&quot;;
}
.glyphicon-new-window:before {
  content: &quot;\e164&quot;;
}
.glyphicon-record:before {
  content: &quot;\e165&quot;;
}
.glyphicon-save:before {
  content: &quot;\e166&quot;;
}
.glyphicon-open:before {
  content: &quot;\e167&quot;;
}
.glyphicon-saved:before {
  content: &quot;\e168&quot;;
}
.glyphicon-import:before {
  content: &quot;\e169&quot;;
}
.glyphicon-export:before {
  content: &quot;\e170&quot;;
}
.glyphicon-send:before {
  content: &quot;\e171&quot;;
}
.glyphicon-floppy-disk:before {
  content: &quot;\e172&quot;;
}
.glyphicon-floppy-saved:before {
  content: &quot;\e173&quot;;
}
.glyphicon-floppy-remove:before {
  content: &quot;\e174&quot;;
}
.glyphicon-floppy-save:before {
  content: &quot;\e175&quot;;
}
.glyphicon-floppy-open:before {
  content: &quot;\e176&quot;;
}
.glyphicon-credit-card:before {
  content: &quot;\e177&quot;;
}
.glyphicon-transfer:before {
  content: &quot;\e178&quot;;
}
.glyphicon-cutlery:before {
  content: &quot;\e179&quot;;
}
.glyphicon-header:before {
  content: &quot;\e180&quot;;
}
.glyphicon-compressed:before {
  content: &quot;\e181&quot;;
}
.glyphicon-earphone:before {
  content: &quot;\e182&quot;;
}
.glyphicon-phone-alt:before {
  content: &quot;\e183&quot;;
}
.glyphicon-tower:before {
  content: &quot;\e184&quot;;
}
.glyphicon-stats:before {
  content: &quot;\e185&quot;;
}
.glyphicon-sd-video:before {
  content: &quot;\e186&quot;;
}
.glyphicon-hd-video:before {
  content: &quot;\e187&quot;;
}
.glyphicon-subtitles:before {
  content: &quot;\e188&quot;;
}
.glyphicon-sound-stereo:before {
  content: &quot;\e189&quot;;
}
.glyphicon-sound-dolby:before {
  content: &quot;\e190&quot;;
}
.glyphicon-sound-5-1:before {
  content: &quot;\e191&quot;;
}
.glyphicon-sound-6-1:before {
  content: &quot;\e192&quot;;
}
.glyphicon-sound-7-1:before {
  content: &quot;\e193&quot;;
}
.glyphicon-copyright-mark:before {
  content: &quot;\e194&quot;;
}
.glyphicon-registration-mark:before {
  content: &quot;\e195&quot;;
}
.glyphicon-cloud-download:before {
  content: &quot;\e197&quot;;
}
.glyphicon-cloud-upload:before {
  content: &quot;\e198&quot;;
}
.glyphicon-tree-conifer:before {
  content: &quot;\e199&quot;;
}
.glyphicon-tree-deciduous:before {
  content: &quot;\e200&quot;;
}
.glyphicon-cd:before {
  content: &quot;\e201&quot;;
}
.glyphicon-save-file:before {
  content: &quot;\e202&quot;;
}
.glyphicon-open-file:before {
  content: &quot;\e203&quot;;
}
.glyphicon-level-up:before {
  content: &quot;\e204&quot;;
}
.glyphicon-copy:before {
  content: &quot;\e205&quot;;
}
.glyphicon-paste:before {
  content: &quot;\e206&quot;;
}
.glyphicon-alert:before {
  content: &quot;\e209&quot;;
}
.glyphicon-equalizer:before {
  content: &quot;\e210&quot;;
}
.glyphicon-king:before {
  content: &quot;\e211&quot;;
}
.glyphicon-queen:before {
  content: &quot;\e212&quot;;
}
.glyphicon-pawn:before {
  content: &quot;\e213&quot;;
}
.glyphicon-bishop:before {
  content: &quot;\e214&quot;;
}
.glyphicon-knight:before {
  content: &quot;\e215&quot;;
}
.glyphicon-baby-formula:before {
  content: &quot;\e216&quot;;
}
.glyphicon-tent:before {
  content: &quot;\26fa&quot;;
}
.glyphicon-blackboard:before {
  content: &quot;\e218&quot;;
}
.glyphicon-bed:before {
  content: &quot;\e219&quot;;
}
.glyphicon-apple:before {
  content: &quot;\f8ff&quot;;
}
.glyphicon-erase:before {
  content: &quot;\e221&quot;;
}
.glyphicon-hourglass:before {
  content: &quot;\231b&quot;;
}
.glyphicon-lamp:before {
  content: &quot;\e223&quot;;
}
.glyphicon-duplicate:before {
  content: &quot;\e224&quot;;
}
.glyphicon-piggy-bank:before {
  content: &quot;\e225&quot;;
}
.glyphicon-scissors:before {
  content: &quot;\e226&quot;;
}
.glyphicon-bitcoin:before {
  content: &quot;\e227&quot;;
}
.glyphicon-btc:before {
  content: &quot;\e227&quot;;
}
.glyphicon-xbt:before {
  content: &quot;\e227&quot;;
}
.glyphicon-yen:before {
  content: &quot;\00a5&quot;;
}
.glyphicon-jpy:before {
  content: &quot;\00a5&quot;;
}
.glyphicon-ruble:before {
  content: &quot;\20bd&quot;;
}
.glyphicon-rub:before {
  content: &quot;\20bd&quot;;
}
.glyphicon-scale:before {
  content: &quot;\e230&quot;;
}
.glyphicon-ice-lolly:before {
  content: &quot;\e231&quot;;
}
.glyphicon-ice-lolly-tasted:before {
  content: &quot;\e232&quot;;
}
.glyphicon-education:before {
  content: &quot;\e233&quot;;
}
.glyphicon-option-horizontal:before {
  content: &quot;\e234&quot;;
}
.glyphicon-option-vertical:before {
  content: &quot;\e235&quot;;
}
.glyphicon-menu-hamburger:before {
  content: &quot;\e236&quot;;
}
.glyphicon-modal-window:before {
  content: &quot;\e237&quot;;
}
.glyphicon-oil:before {
  content: &quot;\e238&quot;;
}
.glyphicon-grain:before {
  content: &quot;\e239&quot;;
}
.glyphicon-sunglasses:before {
  content: &quot;\e240&quot;;
}
.glyphicon-text-size:before {
  content: &quot;\e241&quot;;
}
.glyphicon-text-color:before {
  content: &quot;\e242&quot;;
}
.glyphicon-text-background:before {
  content: &quot;\e243&quot;;
}
.glyphicon-object-align-top:before {
  content: &quot;\e244&quot;;
}
.glyphicon-object-align-bottom:before {
  content: &quot;\e245&quot;;
}
.glyphicon-object-align-horizontal:before {
  content: &quot;\e246&quot;;
}
.glyphicon-object-align-left:before {
  content: &quot;\e247&quot;;
}
.glyphicon-object-align-vertical:before {
  content: &quot;\e248&quot;;
}
.glyphicon-object-align-right:before {
  content: &quot;\e249&quot;;
}
.glyphicon-triangle-right:before {
  content: &quot;\e250&quot;;
}
.glyphicon-triangle-left:before {
  content: &quot;\e251&quot;;
}
.glyphicon-triangle-bottom:before {
  content: &quot;\e252&quot;;
}
.glyphicon-triangle-top:before {
  content: &quot;\e253&quot;;
}
.glyphicon-console:before {
  content: &quot;\e254&quot;;
}
.glyphicon-superscript:before {
  content: &quot;\e255&quot;;
}
.glyphicon-subscript:before {
  content: &quot;\e256&quot;;
}
.glyphicon-menu-left:before {
  content: &quot;\e257&quot;;
}
.glyphicon-menu-right:before {
  content: &quot;\e258&quot;;
}
.glyphicon-menu-down:before {
  content: &quot;\e259&quot;;
}
.glyphicon-menu-up:before {
  content: &quot;\e260&quot;;
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: &quot;Helvetica Neue&quot;, helvetica, arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail &gt; img,
.thumbnail a &gt; img,
.carousel-inner &gt; .item &gt; img,
.carousel-inner &gt; .item &gt; a &gt; img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role=&quot;button&quot;] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline &gt; li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: &#39;\2014 \00A0&#39;;
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: &#39;&#39;;
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: &#39;\00A0 \2014&#39;;
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table &gt; thead &gt; tr &gt; th,
.table &gt; tbody &gt; tr &gt; th,
.table &gt; tfoot &gt; tr &gt; th,
.table &gt; thead &gt; tr &gt; td,
.table &gt; tbody &gt; tr &gt; td,
.table &gt; tfoot &gt; tr &gt; td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table &gt; thead &gt; tr &gt; th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table &gt; caption + thead &gt; tr:first-child &gt; th,
.table &gt; colgroup + thead &gt; tr:first-child &gt; th,
.table &gt; thead:first-child &gt; tr:first-child &gt; th,
.table &gt; caption + thead &gt; tr:first-child &gt; td,
.table &gt; colgroup + thead &gt; tr:first-child &gt; td,
.table &gt; thead:first-child &gt; tr:first-child &gt; td {
  border-top: 0;
}
.table &gt; tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed &gt; thead &gt; tr &gt; th,
.table-condensed &gt; tbody &gt; tr &gt; th,
.table-condensed &gt; tfoot &gt; tr &gt; th,
.table-condensed &gt; thead &gt; tr &gt; td,
.table-condensed &gt; tbody &gt; tr &gt; td,
.table-condensed &gt; tfoot &gt; tr &gt; td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered &gt; thead &gt; tr &gt; th,
.table-bordered &gt; tbody &gt; tr &gt; th,
.table-bordered &gt; tfoot &gt; tr &gt; th,
.table-bordered &gt; thead &gt; tr &gt; td,
.table-bordered &gt; tbody &gt; tr &gt; td,
.table-bordered &gt; tfoot &gt; tr &gt; td {
  border: 1px solid #ddd;
}
.table-bordered &gt; thead &gt; tr &gt; th,
.table-bordered &gt; thead &gt; tr &gt; td {
  border-bottom-width: 2px;
}
.table-striped &gt; tbody &gt; tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover &gt; tbody &gt; tr:hover {
  background-color: #f5f5f5;
}
table col[class*=&quot;col-&quot;] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*=&quot;col-&quot;],
table th[class*=&quot;col-&quot;] {
  position: static;
  float: none;
  display: table-cell;
}
.table &gt; thead &gt; tr &gt; td.active,
.table &gt; tbody &gt; tr &gt; td.active,
.table &gt; tfoot &gt; tr &gt; td.active,
.table &gt; thead &gt; tr &gt; th.active,
.table &gt; tbody &gt; tr &gt; th.active,
.table &gt; tfoot &gt; tr &gt; th.active,
.table &gt; thead &gt; tr.active &gt; td,
.table &gt; tbody &gt; tr.active &gt; td,
.table &gt; tfoot &gt; tr.active &gt; td,
.table &gt; thead &gt; tr.active &gt; th,
.table &gt; tbody &gt; tr.active &gt; th,
.table &gt; tfoot &gt; tr.active &gt; th {
  background-color: #f5f5f5;
}
.table-hover &gt; tbody &gt; tr &gt; td.active:hover,
.table-hover &gt; tbody &gt; tr &gt; th.active:hover,
.table-hover &gt; tbody &gt; tr.active:hover &gt; td,
.table-hover &gt; tbody &gt; tr:hover &gt; .active,
.table-hover &gt; tbody &gt; tr.active:hover &gt; th {
  background-color: #e8e8e8;
}
.table &gt; thead &gt; tr &gt; td.success,
.table &gt; tbody &gt; tr &gt; td.success,
.table &gt; tfoot &gt; tr &gt; td.success,
.table &gt; thead &gt; tr &gt; th.success,
.table &gt; tbody &gt; tr &gt; th.success,
.table &gt; tfoot &gt; tr &gt; th.success,
.table &gt; thead &gt; tr.success &gt; td,
.table &gt; tbody &gt; tr.success &gt; td,
.table &gt; tfoot &gt; tr.success &gt; td,
.table &gt; thead &gt; tr.success &gt; th,
.table &gt; tbody &gt; tr.success &gt; th,
.table &gt; tfoot &gt; tr.success &gt; th {
  background-color: #dff0d8;
}
.table-hover &gt; tbody &gt; tr &gt; td.success:hover,
.table-hover &gt; tbody &gt; tr &gt; th.success:hover,
.table-hover &gt; tbody &gt; tr.success:hover &gt; td,
.table-hover &gt; tbody &gt; tr:hover &gt; .success,
.table-hover &gt; tbody &gt; tr.success:hover &gt; th {
  background-color: #d0e9c6;
}
.table &gt; thead &gt; tr &gt; td.info,
.table &gt; tbody &gt; tr &gt; td.info,
.table &gt; tfoot &gt; tr &gt; td.info,
.table &gt; thead &gt; tr &gt; th.info,
.table &gt; tbody &gt; tr &gt; th.info,
.table &gt; tfoot &gt; tr &gt; th.info,
.table &gt; thead &gt; tr.info &gt; td,
.table &gt; tbody &gt; tr.info &gt; td,
.table &gt; tfoot &gt; tr.info &gt; td,
.table &gt; thead &gt; tr.info &gt; th,
.table &gt; tbody &gt; tr.info &gt; th,
.table &gt; tfoot &gt; tr.info &gt; th {
  background-color: #d9edf7;
}
.table-hover &gt; tbody &gt; tr &gt; td.info:hover,
.table-hover &gt; tbody &gt; tr &gt; th.info:hover,
.table-hover &gt; tbody &gt; tr.info:hover &gt; td,
.table-hover &gt; tbody &gt; tr:hover &gt; .info,
.table-hover &gt; tbody &gt; tr.info:hover &gt; th {
  background-color: #c4e3f3;
}
.table &gt; thead &gt; tr &gt; td.warning,
.table &gt; tbody &gt; tr &gt; td.warning,
.table &gt; tfoot &gt; tr &gt; td.warning,
.table &gt; thead &gt; tr &gt; th.warning,
.table &gt; tbody &gt; tr &gt; th.warning,
.table &gt; tfoot &gt; tr &gt; th.warning,
.table &gt; thead &gt; tr.warning &gt; td,
.table &gt; tbody &gt; tr.warning &gt; td,
.table &gt; tfoot &gt; tr.warning &gt; td,
.table &gt; thead &gt; tr.warning &gt; th,
.table &gt; tbody &gt; tr.warning &gt; th,
.table &gt; tfoot &gt; tr.warning &gt; th {
  background-color: #fcf8e3;
}
.table-hover &gt; tbody &gt; tr &gt; td.warning:hover,
.table-hover &gt; tbody &gt; tr &gt; th.warning:hover,
.table-hover &gt; tbody &gt; tr.warning:hover &gt; td,
.table-hover &gt; tbody &gt; tr:hover &gt; .warning,
.table-hover &gt; tbody &gt; tr.warning:hover &gt; th {
  background-color: #faf2cc;
}
.table &gt; thead &gt; tr &gt; td.danger,
.table &gt; tbody &gt; tr &gt; td.danger,
.table &gt; tfoot &gt; tr &gt; td.danger,
.table &gt; thead &gt; tr &gt; th.danger,
.table &gt; tbody &gt; tr &gt; th.danger,
.table &gt; tfoot &gt; tr &gt; th.danger,
.table &gt; thead &gt; tr.danger &gt; td,
.table &gt; tbody &gt; tr.danger &gt; td,
.table &gt; tfoot &gt; tr.danger &gt; td,
.table &gt; thead &gt; tr.danger &gt; th,
.table &gt; tbody &gt; tr.danger &gt; th,
.table &gt; tfoot &gt; tr.danger &gt; th {
  background-color: #f2dede;
}
.table-hover &gt; tbody &gt; tr &gt; td.danger:hover,
.table-hover &gt; tbody &gt; tr &gt; th.danger:hover,
.table-hover &gt; tbody &gt; tr.danger:hover &gt; td,
.table-hover &gt; tbody &gt; tr:hover &gt; .danger,
.table-hover &gt; tbody &gt; tr.danger:hover &gt; th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive &gt; .table {
    margin-bottom: 0;
  }
  .table-responsive &gt; .table &gt; thead &gt; tr &gt; th,
  .table-responsive &gt; .table &gt; tbody &gt; tr &gt; th,
  .table-responsive &gt; .table &gt; tfoot &gt; tr &gt; th,
  .table-responsive &gt; .table &gt; thead &gt; tr &gt; td,
  .table-responsive &gt; .table &gt; tbody &gt; tr &gt; td,
  .table-responsive &gt; .table &gt; tfoot &gt; tr &gt; td {
    white-space: nowrap;
  }
  .table-responsive &gt; .table-bordered {
    border: 0;
  }
  .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; th:first-child,
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; th:first-child,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:first-child,
  .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; td:first-child,
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; td:first-child,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:first-child {
    border-left: 0;
  }
  .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; th:last-child,
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; th:last-child,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:last-child,
  .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; td:last-child,
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; td:last-child,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:last-child {
    border-right: 0;
  }
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; th,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; th,
  .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; td,
  .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type=&quot;search&quot;] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type=&quot;radio&quot;],
input[type=&quot;checkbox&quot;] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type=&quot;file&quot;] {
  display: block;
}
input[type=&quot;range&quot;] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type=&quot;file&quot;]:focus,
input[type=&quot;radio&quot;]:focus,
input[type=&quot;checkbox&quot;]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type=&quot;search&quot;] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type=&quot;date&quot;].form-control,
  input[type=&quot;time&quot;].form-control,
  input[type=&quot;datetime-local&quot;].form-control,
  input[type=&quot;month&quot;].form-control {
    line-height: 32px;
  }
  input[type=&quot;date&quot;].input-sm,
  input[type=&quot;time&quot;].input-sm,
  input[type=&quot;datetime-local&quot;].input-sm,
  input[type=&quot;month&quot;].input-sm,
  .input-group-sm input[type=&quot;date&quot;],
  .input-group-sm input[type=&quot;time&quot;],
  .input-group-sm input[type=&quot;datetime-local&quot;],
  .input-group-sm input[type=&quot;month&quot;] {
    line-height: 30px;
  }
  input[type=&quot;date&quot;].input-lg,
  input[type=&quot;time&quot;].input-lg,
  input[type=&quot;datetime-local&quot;].input-lg,
  input[type=&quot;month&quot;].input-lg,
  .input-group-lg input[type=&quot;date&quot;],
  .input-group-lg input[type=&quot;time&quot;],
  .input-group-lg input[type=&quot;datetime-local&quot;],
  .input-group-lg input[type=&quot;month&quot;] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type=&quot;radio&quot;],
.radio-inline input[type=&quot;radio&quot;],
.checkbox input[type=&quot;checkbox&quot;],
.checkbox-inline input[type=&quot;checkbox&quot;] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type=&quot;radio&quot;][disabled],
input[type=&quot;checkbox&quot;][disabled],
input[type=&quot;radio&quot;].disabled,
input[type=&quot;checkbox&quot;].disabled,
fieldset[disabled] input[type=&quot;radio&quot;],
fieldset[disabled] input[type=&quot;checkbox&quot;] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group &gt; .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type=&quot;radio&quot;],
  .form-inline .checkbox input[type=&quot;checkbox&quot;] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open &gt; .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open &gt; .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open &gt; .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open &gt; .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open &gt; .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open &gt; .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open &gt; .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open &gt; .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open &gt; .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open &gt; .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open &gt; .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open &gt; .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open &gt; .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open &gt; .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open &gt; .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open &gt; .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open &gt; .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open &gt; .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open &gt; .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open &gt; .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open &gt; .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open &gt; .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open &gt; .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open &gt; .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open &gt; .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open &gt; .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open &gt; .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open &gt; .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open &gt; .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open &gt; .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg &gt; .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm &gt; .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs &gt; .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type=&quot;submit&quot;].btn-block,
input[type=&quot;reset&quot;].btn-block,
input[type=&quot;button&quot;].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu &gt; li &gt; a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu &gt; li &gt; a:hover,
.dropdown-menu &gt; li &gt; a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu &gt; .active &gt; a,
.dropdown-menu &gt; .active &gt; a:hover,
.dropdown-menu &gt; .active &gt; a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu &gt; .disabled &gt; a,
.dropdown-menu &gt; .disabled &gt; a:hover,
.dropdown-menu &gt; .disabled &gt; a:focus {
  color: #777777;
}
.dropdown-menu &gt; .disabled &gt; a:hover,
.dropdown-menu &gt; .disabled &gt; a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:dximagetransform.microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open &gt; .dropdown-menu {
  display: block;
}
.open &gt; a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right &gt; .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: &quot;&quot;;
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group &gt; .btn,
.btn-group-vertical &gt; .btn {
  position: relative;
  float: left;
}
.btn-group &gt; .btn:hover,
.btn-group-vertical &gt; .btn:hover,
.btn-group &gt; .btn:focus,
.btn-group-vertical &gt; .btn:focus,
.btn-group &gt; .btn:active,
.btn-group-vertical &gt; .btn:active,
.btn-group &gt; .btn.active,
.btn-group-vertical &gt; .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar &gt; .btn,
.btn-toolbar &gt; .btn-group,
.btn-toolbar &gt; .input-group {
  margin-left: 5px;
}
.btn-group &gt; .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group &gt; .btn:first-child {
  margin-left: 0;
}
.btn-group &gt; .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group &gt; .btn:last-child:not(:first-child),
.btn-group &gt; .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group &gt; .btn-group {
  float: left;
}
.btn-group &gt; .btn-group:not(:first-child):not(:last-child) &gt; .btn {
  border-radius: 0;
}
.btn-group &gt; .btn-group:first-child:not(:last-child) &gt; .btn:last-child,
.btn-group &gt; .btn-group:first-child:not(:last-child) &gt; .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group &gt; .btn-group:last-child:not(:first-child) &gt; .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group &gt; .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group &gt; .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical &gt; .btn,
.btn-group-vertical &gt; .btn-group,
.btn-group-vertical &gt; .btn-group &gt; .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical &gt; .btn-group &gt; .btn {
  float: none;
}
.btn-group-vertical &gt; .btn + .btn,
.btn-group-vertical &gt; .btn + .btn-group,
.btn-group-vertical &gt; .btn-group + .btn,
.btn-group-vertical &gt; .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical &gt; .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical &gt; .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical &gt; .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical &gt; .btn-group:not(:first-child):not(:last-child) &gt; .btn {
  border-radius: 0;
}
.btn-group-vertical &gt; .btn-group:first-child:not(:last-child) &gt; .btn:last-child,
.btn-group-vertical &gt; .btn-group:first-child:not(:last-child) &gt; .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical &gt; .btn-group:last-child:not(:first-child) &gt; .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified &gt; .btn,
.btn-group-justified &gt; .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified &gt; .btn-group .btn {
  width: 100%;
}
.btn-group-justified &gt; .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle=&quot;buttons&quot;] &gt; .btn input[type=&quot;radio&quot;],
[data-toggle=&quot;buttons&quot;] &gt; .btn-group &gt; .btn input[type=&quot;radio&quot;],
[data-toggle=&quot;buttons&quot;] &gt; .btn input[type=&quot;checkbox&quot;],
[data-toggle=&quot;buttons&quot;] &gt; .btn-group &gt; .btn input[type=&quot;checkbox&quot;] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*=&quot;col-&quot;] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg &gt; .form-control,
.input-group-lg &gt; .input-group-addon,
.input-group-lg &gt; .input-group-btn &gt; .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg &gt; .form-control,
select.input-group-lg &gt; .input-group-addon,
select.input-group-lg &gt; .input-group-btn &gt; .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg &gt; .form-control,
textarea.input-group-lg &gt; .input-group-addon,
textarea.input-group-lg &gt; .input-group-btn &gt; .btn,
select[multiple].input-group-lg &gt; .form-control,
select[multiple].input-group-lg &gt; .input-group-addon,
select[multiple].input-group-lg &gt; .input-group-btn &gt; .btn {
  height: auto;
}
.input-group-sm &gt; .form-control,
.input-group-sm &gt; .input-group-addon,
.input-group-sm &gt; .input-group-btn &gt; .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm &gt; .form-control,
select.input-group-sm &gt; .input-group-addon,
select.input-group-sm &gt; .input-group-btn &gt; .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm &gt; .form-control,
textarea.input-group-sm &gt; .input-group-addon,
textarea.input-group-sm &gt; .input-group-btn &gt; .btn,
select[multiple].input-group-sm &gt; .form-control,
select[multiple].input-group-sm &gt; .input-group-addon,
select[multiple].input-group-sm &gt; .input-group-btn &gt; .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type=&quot;radio&quot;],
.input-group-addon input[type=&quot;checkbox&quot;] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child &gt; .btn,
.input-group-btn:first-child &gt; .btn-group &gt; .btn,
.input-group-btn:first-child &gt; .dropdown-toggle,
.input-group-btn:last-child &gt; .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child &gt; .btn-group:not(:last-child) &gt; .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child &gt; .btn,
.input-group-btn:last-child &gt; .btn-group &gt; .btn,
.input-group-btn:last-child &gt; .dropdown-toggle,
.input-group-btn:first-child &gt; .btn:not(:first-child),
.input-group-btn:first-child &gt; .btn-group:not(:first-child) &gt; .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn &gt; .btn {
  position: relative;
}
.input-group-btn &gt; .btn + .btn {
  margin-left: -1px;
}
.input-group-btn &gt; .btn:hover,
.input-group-btn &gt; .btn:focus,
.input-group-btn &gt; .btn:active {
  z-index: 2;
}
.input-group-btn:first-child &gt; .btn,
.input-group-btn:first-child &gt; .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child &gt; .btn,
.input-group-btn:last-child &gt; .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav &gt; li {
  position: relative;
  display: block;
}
.nav &gt; li &gt; a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav &gt; li &gt; a:hover,
.nav &gt; li &gt; a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav &gt; li.disabled &gt; a {
  color: #777777;
}
.nav &gt; li.disabled &gt; a:hover,
.nav &gt; li.disabled &gt; a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open &gt; a,
.nav .open &gt; a:hover,
.nav .open &gt; a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav &gt; li &gt; a &gt; img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs &gt; li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs &gt; li &gt; a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs &gt; li &gt; a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs &gt; li.active &gt; a,
.nav-tabs &gt; li.active &gt; a:hover,
.nav-tabs &gt; li.active &gt; a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified &gt; li {
  float: none;
}
.nav-tabs.nav-justified &gt; li &gt; a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified &gt; .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified &gt; li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified &gt; li &gt; a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified &gt; li &gt; a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified &gt; .active &gt; a,
.nav-tabs.nav-justified &gt; .active &gt; a:hover,
.nav-tabs.nav-justified &gt; .active &gt; a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified &gt; li &gt; a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified &gt; .active &gt; a,
  .nav-tabs.nav-justified &gt; .active &gt; a:hover,
  .nav-tabs.nav-justified &gt; .active &gt; a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills &gt; li {
  float: left;
}
.nav-pills &gt; li &gt; a {
  border-radius: 2px;
}
.nav-pills &gt; li + li {
  margin-left: 2px;
}
.nav-pills &gt; li.active &gt; a,
.nav-pills &gt; li.active &gt; a:hover,
.nav-pills &gt; li.active &gt; a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked &gt; li {
  float: none;
}
.nav-stacked &gt; li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified &gt; li {
  float: none;
}
.nav-justified &gt; li &gt; a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified &gt; .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified &gt; li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified &gt; li &gt; a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified &gt; li &gt; a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified &gt; .active &gt; a,
.nav-tabs-justified &gt; .active &gt; a:hover,
.nav-tabs-justified &gt; .active &gt; a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified &gt; li &gt; a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified &gt; .active &gt; a,
  .nav-tabs-justified &gt; .active &gt; a:hover,
  .nav-tabs-justified &gt; .active &gt; a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content &gt; .tab-pane {
  display: none;
}
.tab-content &gt; .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container &gt; .navbar-header,
.container-fluid &gt; .navbar-header,
.container &gt; .navbar-collapse,
.container-fluid &gt; .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container &gt; .navbar-header,
  .container-fluid &gt; .navbar-header,
  .container &gt; .navbar-collapse,
  .container-fluid &gt; .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand &gt; img {
  display: block;
}
@media (min-width: 541px) {
  .navbar &gt; .container .navbar-brand,
  .navbar &gt; .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav &gt; li &gt; a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu &gt; li &gt; a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu &gt; li &gt; a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu &gt; li &gt; a:hover,
  .navbar-nav .open .dropdown-menu &gt; li &gt; a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav &gt; li {
    float: left;
  }
  .navbar-nav &gt; li &gt; a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group &gt; .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type=&quot;radio&quot;],
  .navbar-form .checkbox input[type=&quot;checkbox&quot;] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav &gt; li &gt; .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav &gt; li &gt; .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav &gt; li &gt; a {
  color: #777;
}
.navbar-default .navbar-nav &gt; li &gt; a:hover,
.navbar-default .navbar-nav &gt; li &gt; a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav &gt; .active &gt; a,
.navbar-default .navbar-nav &gt; .active &gt; a:hover,
.navbar-default .navbar-nav &gt; .active &gt; a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav &gt; .disabled &gt; a,
.navbar-default .navbar-nav &gt; .disabled &gt; a:hover,
.navbar-default .navbar-nav &gt; .disabled &gt; a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav &gt; .open &gt; a,
.navbar-default .navbar-nav &gt; .open &gt; a:hover,
.navbar-default .navbar-nav &gt; .open &gt; a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu &gt; li &gt; a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu &gt; li &gt; a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu &gt; li &gt; a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .active &gt; a,
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .active &gt; a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .active &gt; a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a,
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav &gt; li &gt; a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav &gt; li &gt; a:hover,
.navbar-inverse .navbar-nav &gt; li &gt; a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav &gt; .active &gt; a,
.navbar-inverse .navbar-nav &gt; .active &gt; a:hover,
.navbar-inverse .navbar-nav &gt; .active &gt; a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav &gt; .disabled &gt; a,
.navbar-inverse .navbar-nav &gt; .disabled &gt; a:hover,
.navbar-inverse .navbar-nav &gt; .disabled &gt; a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav &gt; .open &gt; a,
.navbar-inverse .navbar-nav &gt; .open &gt; a:hover,
.navbar-inverse .navbar-nav &gt; .open &gt; a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; li &gt; a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; li &gt; a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; li &gt; a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .active &gt; a,
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .active &gt; a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .active &gt; a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a,
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu &gt; .disabled &gt; a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb &gt; li {
  display: inline-block;
}
.breadcrumb &gt; li + li:before {
  content: &quot;/\00a0&quot;;
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb &gt; .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination &gt; li {
  display: inline;
}
.pagination &gt; li &gt; a,
.pagination &gt; li &gt; span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination &gt; li:first-child &gt; a,
.pagination &gt; li:first-child &gt; span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination &gt; li:last-child &gt; a,
.pagination &gt; li:last-child &gt; span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination &gt; li &gt; a:hover,
.pagination &gt; li &gt; span:hover,
.pagination &gt; li &gt; a:focus,
.pagination &gt; li &gt; span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination &gt; .active &gt; a,
.pagination &gt; .active &gt; span,
.pagination &gt; .active &gt; a:hover,
.pagination &gt; .active &gt; span:hover,
.pagination &gt; .active &gt; a:focus,
.pagination &gt; .active &gt; span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination &gt; .disabled &gt; span,
.pagination &gt; .disabled &gt; span:hover,
.pagination &gt; .disabled &gt; span:focus,
.pagination &gt; .disabled &gt; a,
.pagination &gt; .disabled &gt; a:hover,
.pagination &gt; .disabled &gt; a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg &gt; li &gt; a,
.pagination-lg &gt; li &gt; span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg &gt; li:first-child &gt; a,
.pagination-lg &gt; li:first-child &gt; span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg &gt; li:last-child &gt; a,
.pagination-lg &gt; li:last-child &gt; span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm &gt; li &gt; a,
.pagination-sm &gt; li &gt; span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm &gt; li:first-child &gt; a,
.pagination-sm &gt; li:first-child &gt; span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm &gt; li:last-child &gt; a,
.pagination-sm &gt; li:last-child &gt; span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li &gt; a,
.pager li &gt; span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li &gt; a:hover,
.pager li &gt; a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next &gt; a,
.pager .next &gt; span {
  float: right;
}
.pager .previous &gt; a,
.pager .previous &gt; span {
  float: left;
}
.pager .disabled &gt; a,
.pager .disabled &gt; a:hover,
.pager .disabled &gt; a:focus,
.pager .disabled &gt; span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs &gt; .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active &gt; .badge,
.nav-pills &gt; .active &gt; a &gt; .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item &gt; .badge {
  float: right;
}
.list-group-item &gt; .badge + .badge {
  margin-right: 5px;
}
.nav-pills &gt; li &gt; a &gt; .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron &gt; hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail &gt; img,
.thumbnail a &gt; img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert &gt; p,
.alert &gt; ul {
  margin-bottom: 0;
}
.alert &gt; p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media &gt; .pull-right {
  padding-left: 10px;
}
.media-left,
.media &gt; .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading &gt; small,
.list-group-item.active:hover .list-group-item-heading &gt; small,
.list-group-item.active:focus .list-group-item-heading &gt; small,
.list-group-item.active .list-group-item-heading &gt; .small,
.list-group-item.active:hover .list-group-item-heading &gt; .small,
.list-group-item.active:focus .list-group-item-heading &gt; .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading &gt; .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title &gt; a,
.panel-title &gt; small,
.panel-title &gt; .small,
.panel-title &gt; small &gt; a,
.panel-title &gt; .small &gt; a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel &gt; .list-group,
.panel &gt; .panel-collapse &gt; .list-group {
  margin-bottom: 0;
}
.panel &gt; .list-group .list-group-item,
.panel &gt; .panel-collapse &gt; .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel &gt; .list-group:first-child .list-group-item:first-child,
.panel &gt; .panel-collapse &gt; .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel &gt; .list-group:last-child .list-group-item:last-child,
.panel &gt; .panel-collapse &gt; .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel &gt; .panel-heading + .panel-collapse &gt; .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel &gt; .table,
.panel &gt; .table-responsive &gt; .table,
.panel &gt; .panel-collapse &gt; .table {
  margin-bottom: 0;
}
.panel &gt; .table caption,
.panel &gt; .table-responsive &gt; .table caption,
.panel &gt; .panel-collapse &gt; .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel &gt; .table:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child,
.panel &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child td:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child td:first-child,
.panel &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child td:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child td:first-child,
.panel &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child th:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child th:first-child,
.panel &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child th:first-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child td:last-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child td:last-child,
.panel &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child td:last-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child td:last-child,
.panel &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child th:last-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; thead:first-child &gt; tr:first-child th:last-child,
.panel &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child th:last-child,
.panel &gt; .table-responsive:first-child &gt; .table:first-child &gt; tbody:first-child &gt; tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel &gt; .table:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child,
.panel &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child td:first-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child td:first-child,
.panel &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child td:first-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child td:first-child,
.panel &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child th:first-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child th:first-child,
.panel &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child th:first-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child td:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child td:last-child,
.panel &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child td:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child td:last-child,
.panel &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child th:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tbody:last-child &gt; tr:last-child th:last-child,
.panel &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child th:last-child,
.panel &gt; .table-responsive:last-child &gt; .table:last-child &gt; tfoot:last-child &gt; tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel &gt; .panel-body + .table,
.panel &gt; .panel-body + .table-responsive,
.panel &gt; .table + .panel-body,
.panel &gt; .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel &gt; .table &gt; tbody:first-child &gt; tr:first-child th,
.panel &gt; .table &gt; tbody:first-child &gt; tr:first-child td {
  border-top: 0;
}
.panel &gt; .table-bordered,
.panel &gt; .table-responsive &gt; .table-bordered {
  border: 0;
}
.panel &gt; .table-bordered &gt; thead &gt; tr &gt; th:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; th:first-child,
.panel &gt; .table-bordered &gt; tbody &gt; tr &gt; th:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; th:first-child,
.panel &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:first-child,
.panel &gt; .table-bordered &gt; thead &gt; tr &gt; td:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; td:first-child,
.panel &gt; .table-bordered &gt; tbody &gt; tr &gt; td:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; td:first-child,
.panel &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:first-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:first-child {
  border-left: 0;
}
.panel &gt; .table-bordered &gt; thead &gt; tr &gt; th:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; th:last-child,
.panel &gt; .table-bordered &gt; tbody &gt; tr &gt; th:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; th:last-child,
.panel &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; th:last-child,
.panel &gt; .table-bordered &gt; thead &gt; tr &gt; td:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr &gt; td:last-child,
.panel &gt; .table-bordered &gt; tbody &gt; tr &gt; td:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr &gt; td:last-child,
.panel &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:last-child,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr &gt; td:last-child {
  border-right: 0;
}
.panel &gt; .table-bordered &gt; thead &gt; tr:first-child &gt; td,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr:first-child &gt; td,
.panel &gt; .table-bordered &gt; tbody &gt; tr:first-child &gt; td,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:first-child &gt; td,
.panel &gt; .table-bordered &gt; thead &gt; tr:first-child &gt; th,
.panel &gt; .table-responsive &gt; .table-bordered &gt; thead &gt; tr:first-child &gt; th,
.panel &gt; .table-bordered &gt; tbody &gt; tr:first-child &gt; th,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:first-child &gt; th {
  border-bottom: 0;
}
.panel &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; td,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; td,
.panel &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; td,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; td,
.panel &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; th,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tbody &gt; tr:last-child &gt; th,
.panel &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; th,
.panel &gt; .table-responsive &gt; .table-bordered &gt; tfoot &gt; tr:last-child &gt; th {
  border-bottom: 0;
}
.panel &gt; .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse &gt; .panel-body,
.panel-group .panel-heading + .panel-collapse &gt; .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default &gt; .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #ddd;
}
.panel-default &gt; .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary &gt; .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #337ab7;
}
.panel-primary &gt; .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success &gt; .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success &gt; .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info &gt; .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #bce8f1;
}
.panel-info &gt; .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning &gt; .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #faebcc;
}
.panel-warning &gt; .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger &gt; .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger &gt; .panel-heading + .panel-collapse &gt; .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger &gt; .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger &gt; .panel-footer + .panel-collapse &gt; .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: &quot;Helvetica Neue&quot;, helvetica, arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: &quot;Helvetica Neue&quot;, helvetica, arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover &gt; .arrow,
.popover &gt; .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover &gt; .arrow {
  border-width: 11px;
}
.popover &gt; .arrow:after {
  border-width: 10px;
  content: &quot;&quot;;
}
.popover.top &gt; .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top &gt; .arrow:after {
  content: &quot; &quot;;
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right &gt; .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right &gt; .arrow:after {
  content: &quot; &quot;;
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom &gt; .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom &gt; .arrow:after {
  content: &quot; &quot;;
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left &gt; .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left &gt; .arrow:after {
  content: &quot; &quot;;
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner &gt; .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner &gt; .item &gt; img,
.carousel-inner &gt; .item &gt; a &gt; img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner &gt; .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner &gt; .item.next,
  .carousel-inner &gt; .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner &gt; .item.prev,
  .carousel-inner &gt; .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner &gt; .item.next.left,
  .carousel-inner &gt; .item.prev.right,
  .carousel-inner &gt; .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner &gt; .active,
.carousel-inner &gt; .next,
.carousel-inner &gt; .prev {
  display: block;
}
.carousel-inner &gt; .active {
  left: 0;
}
.carousel-inner &gt; .next,
.carousel-inner &gt; .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner &gt; .next {
  left: 100%;
}
.carousel-inner &gt; .prev {
  left: -100%;
}
.carousel-inner &gt; .next.left,
.carousel-inner &gt; .prev.right {
  left: 0;
}
.carousel-inner &gt; .active.left {
  left: -100%;
}
.carousel-inner &gt; .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:dximagetransform.microsoft.gradient(startcolorstr=&#39;#80000000&#39;, endcolorstr=&#39;#00000000&#39;, gradienttype=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:dximagetransform.microsoft.gradient(startcolorstr=&#39;#00000000&#39;, endcolorstr=&#39;#80000000&#39;, gradienttype=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: &#39;\2039&#39;;
}
.carousel-control .icon-next:before {
  content: &#39;\203a&#39;;
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical &gt; .btn-group:before,
.btn-group-vertical &gt; .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: &quot; &quot;;
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical &gt; .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: &#39;FontAwesome&#39;;
  src: url(&#39;../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0&#39;);
  src: url(&#39;../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&amp;v=4.2.0&#39;) format(&#39;embedded-opentype&#39;), url(&#39;../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0&#39;) format(&#39;woff&#39;), url(&#39;../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0&#39;) format(&#39;truetype&#39;), url(&#39;../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular&#39;) format(&#39;svg&#39;);
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul &gt; li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:dximagetransform.microsoft.basicimage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:dximagetransform.microsoft.basicimage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:dximagetransform.microsoft.basicimage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:dximagetransform.microsoft.basicimage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:dximagetransform.microsoft.basicimage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: &quot;\f000&quot;;
}
.fa-music:before {
  content: &quot;\f001&quot;;
}
.fa-search:before {
  content: &quot;\f002&quot;;
}
.fa-envelope-o:before {
  content: &quot;\f003&quot;;
}
.fa-heart:before {
  content: &quot;\f004&quot;;
}
.fa-star:before {
  content: &quot;\f005&quot;;
}
.fa-star-o:before {
  content: &quot;\f006&quot;;
}
.fa-user:before {
  content: &quot;\f007&quot;;
}
.fa-film:before {
  content: &quot;\f008&quot;;
}
.fa-th-large:before {
  content: &quot;\f009&quot;;
}
.fa-th:before {
  content: &quot;\f00a&quot;;
}
.fa-th-list:before {
  content: &quot;\f00b&quot;;
}
.fa-check:before {
  content: &quot;\f00c&quot;;
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: &quot;\f00d&quot;;
}
.fa-search-plus:before {
  content: &quot;\f00e&quot;;
}
.fa-search-minus:before {
  content: &quot;\f010&quot;;
}
.fa-power-off:before {
  content: &quot;\f011&quot;;
}
.fa-signal:before {
  content: &quot;\f012&quot;;
}
.fa-gear:before,
.fa-cog:before {
  content: &quot;\f013&quot;;
}
.fa-trash-o:before {
  content: &quot;\f014&quot;;
}
.fa-home:before {
  content: &quot;\f015&quot;;
}
.fa-file-o:before {
  content: &quot;\f016&quot;;
}
.fa-clock-o:before {
  content: &quot;\f017&quot;;
}
.fa-road:before {
  content: &quot;\f018&quot;;
}
.fa-download:before {
  content: &quot;\f019&quot;;
}
.fa-arrow-circle-o-down:before {
  content: &quot;\f01a&quot;;
}
.fa-arrow-circle-o-up:before {
  content: &quot;\f01b&quot;;
}
.fa-inbox:before {
  content: &quot;\f01c&quot;;
}
.fa-play-circle-o:before {
  content: &quot;\f01d&quot;;
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: &quot;\f01e&quot;;
}
.fa-refresh:before {
  content: &quot;\f021&quot;;
}
.fa-list-alt:before {
  content: &quot;\f022&quot;;
}
.fa-lock:before {
  content: &quot;\f023&quot;;
}
.fa-flag:before {
  content: &quot;\f024&quot;;
}
.fa-headphones:before {
  content: &quot;\f025&quot;;
}
.fa-volume-off:before {
  content: &quot;\f026&quot;;
}
.fa-volume-down:before {
  content: &quot;\f027&quot;;
}
.fa-volume-up:before {
  content: &quot;\f028&quot;;
}
.fa-qrcode:before {
  content: &quot;\f029&quot;;
}
.fa-barcode:before {
  content: &quot;\f02a&quot;;
}
.fa-tag:before {
  content: &quot;\f02b&quot;;
}
.fa-tags:before {
  content: &quot;\f02c&quot;;
}
.fa-book:before {
  content: &quot;\f02d&quot;;
}
.fa-bookmark:before {
  content: &quot;\f02e&quot;;
}
.fa-print:before {
  content: &quot;\f02f&quot;;
}
.fa-camera:before {
  content: &quot;\f030&quot;;
}
.fa-font:before {
  content: &quot;\f031&quot;;
}
.fa-bold:before {
  content: &quot;\f032&quot;;
}
.fa-italic:before {
  content: &quot;\f033&quot;;
}
.fa-text-height:before {
  content: &quot;\f034&quot;;
}
.fa-text-width:before {
  content: &quot;\f035&quot;;
}
.fa-align-left:before {
  content: &quot;\f036&quot;;
}
.fa-align-center:before {
  content: &quot;\f037&quot;;
}
.fa-align-right:before {
  content: &quot;\f038&quot;;
}
.fa-align-justify:before {
  content: &quot;\f039&quot;;
}
.fa-list:before {
  content: &quot;\f03a&quot;;
}
.fa-dedent:before,
.fa-outdent:before {
  content: &quot;\f03b&quot;;
}
.fa-indent:before {
  content: &quot;\f03c&quot;;
}
.fa-video-camera:before {
  content: &quot;\f03d&quot;;
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: &quot;\f03e&quot;;
}
.fa-pencil:before {
  content: &quot;\f040&quot;;
}
.fa-map-marker:before {
  content: &quot;\f041&quot;;
}
.fa-adjust:before {
  content: &quot;\f042&quot;;
}
.fa-tint:before {
  content: &quot;\f043&quot;;
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: &quot;\f044&quot;;
}
.fa-share-square-o:before {
  content: &quot;\f045&quot;;
}
.fa-check-square-o:before {
  content: &quot;\f046&quot;;
}
.fa-arrows:before {
  content: &quot;\f047&quot;;
}
.fa-step-backward:before {
  content: &quot;\f048&quot;;
}
.fa-fast-backward:before {
  content: &quot;\f049&quot;;
}
.fa-backward:before {
  content: &quot;\f04a&quot;;
}
.fa-play:before {
  content: &quot;\f04b&quot;;
}
.fa-pause:before {
  content: &quot;\f04c&quot;;
}
.fa-stop:before {
  content: &quot;\f04d&quot;;
}
.fa-forward:before {
  content: &quot;\f04e&quot;;
}
.fa-fast-forward:before {
  content: &quot;\f050&quot;;
}
.fa-step-forward:before {
  content: &quot;\f051&quot;;
}
.fa-eject:before {
  content: &quot;\f052&quot;;
}
.fa-chevron-left:before {
  content: &quot;\f053&quot;;
}
.fa-chevron-right:before {
  content: &quot;\f054&quot;;
}
.fa-plus-circle:before {
  content: &quot;\f055&quot;;
}
.fa-minus-circle:before {
  content: &quot;\f056&quot;;
}
.fa-times-circle:before {
  content: &quot;\f057&quot;;
}
.fa-check-circle:before {
  content: &quot;\f058&quot;;
}
.fa-question-circle:before {
  content: &quot;\f059&quot;;
}
.fa-info-circle:before {
  content: &quot;\f05a&quot;;
}
.fa-crosshairs:before {
  content: &quot;\f05b&quot;;
}
.fa-times-circle-o:before {
  content: &quot;\f05c&quot;;
}
.fa-check-circle-o:before {
  content: &quot;\f05d&quot;;
}
.fa-ban:before {
  content: &quot;\f05e&quot;;
}
.fa-arrow-left:before {
  content: &quot;\f060&quot;;
}
.fa-arrow-right:before {
  content: &quot;\f061&quot;;
}
.fa-arrow-up:before {
  content: &quot;\f062&quot;;
}
.fa-arrow-down:before {
  content: &quot;\f063&quot;;
}
.fa-mail-forward:before,
.fa-share:before {
  content: &quot;\f064&quot;;
}
.fa-expand:before {
  content: &quot;\f065&quot;;
}
.fa-compress:before {
  content: &quot;\f066&quot;;
}
.fa-plus:before {
  content: &quot;\f067&quot;;
}
.fa-minus:before {
  content: &quot;\f068&quot;;
}
.fa-asterisk:before {
  content: &quot;\f069&quot;;
}
.fa-exclamation-circle:before {
  content: &quot;\f06a&quot;;
}
.fa-gift:before {
  content: &quot;\f06b&quot;;
}
.fa-leaf:before {
  content: &quot;\f06c&quot;;
}
.fa-fire:before {
  content: &quot;\f06d&quot;;
}
.fa-eye:before {
  content: &quot;\f06e&quot;;
}
.fa-eye-slash:before {
  content: &quot;\f070&quot;;
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: &quot;\f071&quot;;
}
.fa-plane:before {
  content: &quot;\f072&quot;;
}
.fa-calendar:before {
  content: &quot;\f073&quot;;
}
.fa-random:before {
  content: &quot;\f074&quot;;
}
.fa-comment:before {
  content: &quot;\f075&quot;;
}
.fa-magnet:before {
  content: &quot;\f076&quot;;
}
.fa-chevron-up:before {
  content: &quot;\f077&quot;;
}
.fa-chevron-down:before {
  content: &quot;\f078&quot;;
}
.fa-retweet:before {
  content: &quot;\f079&quot;;
}
.fa-shopping-cart:before {
  content: &quot;\f07a&quot;;
}
.fa-folder:before {
  content: &quot;\f07b&quot;;
}
.fa-folder-open:before {
  content: &quot;\f07c&quot;;
}
.fa-arrows-v:before {
  content: &quot;\f07d&quot;;
}
.fa-arrows-h:before {
  content: &quot;\f07e&quot;;
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: &quot;\f080&quot;;
}
.fa-twitter-square:before {
  content: &quot;\f081&quot;;
}
.fa-facebook-square:before {
  content: &quot;\f082&quot;;
}
.fa-camera-retro:before {
  content: &quot;\f083&quot;;
}
.fa-key:before {
  content: &quot;\f084&quot;;
}
.fa-gears:before,
.fa-cogs:before {
  content: &quot;\f085&quot;;
}
.fa-comments:before {
  content: &quot;\f086&quot;;
}
.fa-thumbs-o-up:before {
  content: &quot;\f087&quot;;
}
.fa-thumbs-o-down:before {
  content: &quot;\f088&quot;;
}
.fa-star-half:before {
  content: &quot;\f089&quot;;
}
.fa-heart-o:before {
  content: &quot;\f08a&quot;;
}
.fa-sign-out:before {
  content: &quot;\f08b&quot;;
}
.fa-linkedin-square:before {
  content: &quot;\f08c&quot;;
}
.fa-thumb-tack:before {
  content: &quot;\f08d&quot;;
}
.fa-external-link:before {
  content: &quot;\f08e&quot;;
}
.fa-sign-in:before {
  content: &quot;\f090&quot;;
}
.fa-trophy:before {
  content: &quot;\f091&quot;;
}
.fa-github-square:before {
  content: &quot;\f092&quot;;
}
.fa-upload:before {
  content: &quot;\f093&quot;;
}
.fa-lemon-o:before {
  content: &quot;\f094&quot;;
}
.fa-phone:before {
  content: &quot;\f095&quot;;
}
.fa-square-o:before {
  content: &quot;\f096&quot;;
}
.fa-bookmark-o:before {
  content: &quot;\f097&quot;;
}
.fa-phone-square:before {
  content: &quot;\f098&quot;;
}
.fa-twitter:before {
  content: &quot;\f099&quot;;
}
.fa-facebook:before {
  content: &quot;\f09a&quot;;
}
.fa-github:before {
  content: &quot;\f09b&quot;;
}
.fa-unlock:before {
  content: &quot;\f09c&quot;;
}
.fa-credit-card:before {
  content: &quot;\f09d&quot;;
}
.fa-rss:before {
  content: &quot;\f09e&quot;;
}
.fa-hdd-o:before {
  content: &quot;\f0a0&quot;;
}
.fa-bullhorn:before {
  content: &quot;\f0a1&quot;;
}
.fa-bell:before {
  content: &quot;\f0f3&quot;;
}
.fa-certificate:before {
  content: &quot;\f0a3&quot;;
}
.fa-hand-o-right:before {
  content: &quot;\f0a4&quot;;
}
.fa-hand-o-left:before {
  content: &quot;\f0a5&quot;;
}
.fa-hand-o-up:before {
  content: &quot;\f0a6&quot;;
}
.fa-hand-o-down:before {
  content: &quot;\f0a7&quot;;
}
.fa-arrow-circle-left:before {
  content: &quot;\f0a8&quot;;
}
.fa-arrow-circle-right:before {
  content: &quot;\f0a9&quot;;
}
.fa-arrow-circle-up:before {
  content: &quot;\f0aa&quot;;
}
.fa-arrow-circle-down:before {
  content: &quot;\f0ab&quot;;
}
.fa-globe:before {
  content: &quot;\f0ac&quot;;
}
.fa-wrench:before {
  content: &quot;\f0ad&quot;;
}
.fa-tasks:before {
  content: &quot;\f0ae&quot;;
}
.fa-filter:before {
  content: &quot;\f0b0&quot;;
}
.fa-briefcase:before {
  content: &quot;\f0b1&quot;;
}
.fa-arrows-alt:before {
  content: &quot;\f0b2&quot;;
}
.fa-group:before,
.fa-users:before {
  content: &quot;\f0c0&quot;;
}
.fa-chain:before,
.fa-link:before {
  content: &quot;\f0c1&quot;;
}
.fa-cloud:before {
  content: &quot;\f0c2&quot;;
}
.fa-flask:before {
  content: &quot;\f0c3&quot;;
}
.fa-cut:before,
.fa-scissors:before {
  content: &quot;\f0c4&quot;;
}
.fa-copy:before,
.fa-files-o:before {
  content: &quot;\f0c5&quot;;
}
.fa-paperclip:before {
  content: &quot;\f0c6&quot;;
}
.fa-save:before,
.fa-floppy-o:before {
  content: &quot;\f0c7&quot;;
}
.fa-square:before {
  content: &quot;\f0c8&quot;;
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: &quot;\f0c9&quot;;
}
.fa-list-ul:before {
  content: &quot;\f0ca&quot;;
}
.fa-list-ol:before {
  content: &quot;\f0cb&quot;;
}
.fa-strikethrough:before {
  content: &quot;\f0cc&quot;;
}
.fa-underline:before {
  content: &quot;\f0cd&quot;;
}
.fa-table:before {
  content: &quot;\f0ce&quot;;
}
.fa-magic:before {
  content: &quot;\f0d0&quot;;
}
.fa-truck:before {
  content: &quot;\f0d1&quot;;
}
.fa-pinterest:before {
  content: &quot;\f0d2&quot;;
}
.fa-pinterest-square:before {
  content: &quot;\f0d3&quot;;
}
.fa-google-plus-square:before {
  content: &quot;\f0d4&quot;;
}
.fa-google-plus:before {
  content: &quot;\f0d5&quot;;
}
.fa-money:before {
  content: &quot;\f0d6&quot;;
}
.fa-caret-down:before {
  content: &quot;\f0d7&quot;;
}
.fa-caret-up:before {
  content: &quot;\f0d8&quot;;
}
.fa-caret-left:before {
  content: &quot;\f0d9&quot;;
}
.fa-caret-right:before {
  content: &quot;\f0da&quot;;
}
.fa-columns:before {
  content: &quot;\f0db&quot;;
}
.fa-unsorted:before,
.fa-sort:before {
  content: &quot;\f0dc&quot;;
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: &quot;\f0dd&quot;;
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: &quot;\f0de&quot;;
}
.fa-envelope:before {
  content: &quot;\f0e0&quot;;
}
.fa-linkedin:before {
  content: &quot;\f0e1&quot;;
}
.fa-rotate-left:before,
.fa-undo:before {
  content: &quot;\f0e2&quot;;
}
.fa-legal:before,
.fa-gavel:before {
  content: &quot;\f0e3&quot;;
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: &quot;\f0e4&quot;;
}
.fa-comment-o:before {
  content: &quot;\f0e5&quot;;
}
.fa-comments-o:before {
  content: &quot;\f0e6&quot;;
}
.fa-flash:before,
.fa-bolt:before {
  content: &quot;\f0e7&quot;;
}
.fa-sitemap:before {
  content: &quot;\f0e8&quot;;
}
.fa-umbrella:before {
  content: &quot;\f0e9&quot;;
}
.fa-paste:before,
.fa-clipboard:before {
  content: &quot;\f0ea&quot;;
}
.fa-lightbulb-o:before {
  content: &quot;\f0eb&quot;;
}
.fa-exchange:before {
  content: &quot;\f0ec&quot;;
}
.fa-cloud-download:before {
  content: &quot;\f0ed&quot;;
}
.fa-cloud-upload:before {
  content: &quot;\f0ee&quot;;
}
.fa-user-md:before {
  content: &quot;\f0f0&quot;;
}
.fa-stethoscope:before {
  content: &quot;\f0f1&quot;;
}
.fa-suitcase:before {
  content: &quot;\f0f2&quot;;
}
.fa-bell-o:before {
  content: &quot;\f0a2&quot;;
}
.fa-coffee:before {
  content: &quot;\f0f4&quot;;
}
.fa-cutlery:before {
  content: &quot;\f0f5&quot;;
}
.fa-file-text-o:before {
  content: &quot;\f0f6&quot;;
}
.fa-building-o:before {
  content: &quot;\f0f7&quot;;
}
.fa-hospital-o:before {
  content: &quot;\f0f8&quot;;
}
.fa-ambulance:before {
  content: &quot;\f0f9&quot;;
}
.fa-medkit:before {
  content: &quot;\f0fa&quot;;
}
.fa-fighter-jet:before {
  content: &quot;\f0fb&quot;;
}
.fa-beer:before {
  content: &quot;\f0fc&quot;;
}
.fa-h-square:before {
  content: &quot;\f0fd&quot;;
}
.fa-plus-square:before {
  content: &quot;\f0fe&quot;;
}
.fa-angle-double-left:before {
  content: &quot;\f100&quot;;
}
.fa-angle-double-right:before {
  content: &quot;\f101&quot;;
}
.fa-angle-double-up:before {
  content: &quot;\f102&quot;;
}
.fa-angle-double-down:before {
  content: &quot;\f103&quot;;
}
.fa-angle-left:before {
  content: &quot;\f104&quot;;
}
.fa-angle-right:before {
  content: &quot;\f105&quot;;
}
.fa-angle-up:before {
  content: &quot;\f106&quot;;
}
.fa-angle-down:before {
  content: &quot;\f107&quot;;
}
.fa-desktop:before {
  content: &quot;\f108&quot;;
}
.fa-laptop:before {
  content: &quot;\f109&quot;;
}
.fa-tablet:before {
  content: &quot;\f10a&quot;;
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: &quot;\f10b&quot;;
}
.fa-circle-o:before {
  content: &quot;\f10c&quot;;
}
.fa-quote-left:before {
  content: &quot;\f10d&quot;;
}
.fa-quote-right:before {
  content: &quot;\f10e&quot;;
}
.fa-spinner:before {
  content: &quot;\f110&quot;;
}
.fa-circle:before {
  content: &quot;\f111&quot;;
}
.fa-mail-reply:before,
.fa-reply:before {
  content: &quot;\f112&quot;;
}
.fa-github-alt:before {
  content: &quot;\f113&quot;;
}
.fa-folder-o:before {
  content: &quot;\f114&quot;;
}
.fa-folder-open-o:before {
  content: &quot;\f115&quot;;
}
.fa-smile-o:before {
  content: &quot;\f118&quot;;
}
.fa-frown-o:before {
  content: &quot;\f119&quot;;
}
.fa-meh-o:before {
  content: &quot;\f11a&quot;;
}
.fa-gamepad:before {
  content: &quot;\f11b&quot;;
}
.fa-keyboard-o:before {
  content: &quot;\f11c&quot;;
}
.fa-flag-o:before {
  content: &quot;\f11d&quot;;
}
.fa-flag-checkered:before {
  content: &quot;\f11e&quot;;
}
.fa-terminal:before {
  content: &quot;\f120&quot;;
}
.fa-code:before {
  content: &quot;\f121&quot;;
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: &quot;\f122&quot;;
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: &quot;\f123&quot;;
}
.fa-location-arrow:before {
  content: &quot;\f124&quot;;
}
.fa-crop:before {
  content: &quot;\f125&quot;;
}
.fa-code-fork:before {
  content: &quot;\f126&quot;;
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: &quot;\f127&quot;;
}
.fa-question:before {
  content: &quot;\f128&quot;;
}
.fa-info:before {
  content: &quot;\f129&quot;;
}
.fa-exclamation:before {
  content: &quot;\f12a&quot;;
}
.fa-superscript:before {
  content: &quot;\f12b&quot;;
}
.fa-subscript:before {
  content: &quot;\f12c&quot;;
}
.fa-eraser:before {
  content: &quot;\f12d&quot;;
}
.fa-puzzle-piece:before {
  content: &quot;\f12e&quot;;
}
.fa-microphone:before {
  content: &quot;\f130&quot;;
}
.fa-microphone-slash:before {
  content: &quot;\f131&quot;;
}
.fa-shield:before {
  content: &quot;\f132&quot;;
}
.fa-calendar-o:before {
  content: &quot;\f133&quot;;
}
.fa-fire-extinguisher:before {
  content: &quot;\f134&quot;;
}
.fa-rocket:before {
  content: &quot;\f135&quot;;
}
.fa-maxcdn:before {
  content: &quot;\f136&quot;;
}
.fa-chevron-circle-left:before {
  content: &quot;\f137&quot;;
}
.fa-chevron-circle-right:before {
  content: &quot;\f138&quot;;
}
.fa-chevron-circle-up:before {
  content: &quot;\f139&quot;;
}
.fa-chevron-circle-down:before {
  content: &quot;\f13a&quot;;
}
.fa-html5:before {
  content: &quot;\f13b&quot;;
}
.fa-css3:before {
  content: &quot;\f13c&quot;;
}
.fa-anchor:before {
  content: &quot;\f13d&quot;;
}
.fa-unlock-alt:before {
  content: &quot;\f13e&quot;;
}
.fa-bullseye:before {
  content: &quot;\f140&quot;;
}
.fa-ellipsis-h:before {
  content: &quot;\f141&quot;;
}
.fa-ellipsis-v:before {
  content: &quot;\f142&quot;;
}
.fa-rss-square:before {
  content: &quot;\f143&quot;;
}
.fa-play-circle:before {
  content: &quot;\f144&quot;;
}
.fa-ticket:before {
  content: &quot;\f145&quot;;
}
.fa-minus-square:before {
  content: &quot;\f146&quot;;
}
.fa-minus-square-o:before {
  content: &quot;\f147&quot;;
}
.fa-level-up:before {
  content: &quot;\f148&quot;;
}
.fa-level-down:before {
  content: &quot;\f149&quot;;
}
.fa-check-square:before {
  content: &quot;\f14a&quot;;
}
.fa-pencil-square:before {
  content: &quot;\f14b&quot;;
}
.fa-external-link-square:before {
  content: &quot;\f14c&quot;;
}
.fa-share-square:before {
  content: &quot;\f14d&quot;;
}
.fa-compass:before {
  content: &quot;\f14e&quot;;
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: &quot;\f150&quot;;
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: &quot;\f151&quot;;
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: &quot;\f152&quot;;
}
.fa-euro:before,
.fa-eur:before {
  content: &quot;\f153&quot;;
}
.fa-gbp:before {
  content: &quot;\f154&quot;;
}
.fa-dollar:before,
.fa-usd:before {
  content: &quot;\f155&quot;;
}
.fa-rupee:before,
.fa-inr:before {
  content: &quot;\f156&quot;;
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: &quot;\f157&quot;;
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: &quot;\f158&quot;;
}
.fa-won:before,
.fa-krw:before {
  content: &quot;\f159&quot;;
}
.fa-bitcoin:before,
.fa-btc:before {
  content: &quot;\f15a&quot;;
}
.fa-file:before {
  content: &quot;\f15b&quot;;
}
.fa-file-text:before {
  content: &quot;\f15c&quot;;
}
.fa-sort-alpha-asc:before {
  content: &quot;\f15d&quot;;
}
.fa-sort-alpha-desc:before {
  content: &quot;\f15e&quot;;
}
.fa-sort-amount-asc:before {
  content: &quot;\f160&quot;;
}
.fa-sort-amount-desc:before {
  content: &quot;\f161&quot;;
}
.fa-sort-numeric-asc:before {
  content: &quot;\f162&quot;;
}
.fa-sort-numeric-desc:before {
  content: &quot;\f163&quot;;
}
.fa-thumbs-up:before {
  content: &quot;\f164&quot;;
}
.fa-thumbs-down:before {
  content: &quot;\f165&quot;;
}
.fa-youtube-square:before {
  content: &quot;\f166&quot;;
}
.fa-youtube:before {
  content: &quot;\f167&quot;;
}
.fa-xing:before {
  content: &quot;\f168&quot;;
}
.fa-xing-square:before {
  content: &quot;\f169&quot;;
}
.fa-youtube-play:before {
  content: &quot;\f16a&quot;;
}
.fa-dropbox:before {
  content: &quot;\f16b&quot;;
}
.fa-stack-overflow:before {
  content: &quot;\f16c&quot;;
}
.fa-instagram:before {
  content: &quot;\f16d&quot;;
}
.fa-flickr:before {
  content: &quot;\f16e&quot;;
}
.fa-adn:before {
  content: &quot;\f170&quot;;
}
.fa-bitbucket:before {
  content: &quot;\f171&quot;;
}
.fa-bitbucket-square:before {
  content: &quot;\f172&quot;;
}
.fa-tumblr:before {
  content: &quot;\f173&quot;;
}
.fa-tumblr-square:before {
  content: &quot;\f174&quot;;
}
.fa-long-arrow-down:before {
  content: &quot;\f175&quot;;
}
.fa-long-arrow-up:before {
  content: &quot;\f176&quot;;
}
.fa-long-arrow-left:before {
  content: &quot;\f177&quot;;
}
.fa-long-arrow-right:before {
  content: &quot;\f178&quot;;
}
.fa-apple:before {
  content: &quot;\f179&quot;;
}
.fa-windows:before {
  content: &quot;\f17a&quot;;
}
.fa-android:before {
  content: &quot;\f17b&quot;;
}
.fa-linux:before {
  content: &quot;\f17c&quot;;
}
.fa-dribbble:before {
  content: &quot;\f17d&quot;;
}
.fa-skype:before {
  content: &quot;\f17e&quot;;
}
.fa-foursquare:before {
  content: &quot;\f180&quot;;
}
.fa-trello:before {
  content: &quot;\f181&quot;;
}
.fa-female:before {
  content: &quot;\f182&quot;;
}
.fa-male:before {
  content: &quot;\f183&quot;;
}
.fa-gittip:before {
  content: &quot;\f184&quot;;
}
.fa-sun-o:before {
  content: &quot;\f185&quot;;
}
.fa-moon-o:before {
  content: &quot;\f186&quot;;
}
.fa-archive:before {
  content: &quot;\f187&quot;;
}
.fa-bug:before {
  content: &quot;\f188&quot;;
}
.fa-vk:before {
  content: &quot;\f189&quot;;
}
.fa-weibo:before {
  content: &quot;\f18a&quot;;
}
.fa-renren:before {
  content: &quot;\f18b&quot;;
}
.fa-pagelines:before {
  content: &quot;\f18c&quot;;
}
.fa-stack-exchange:before {
  content: &quot;\f18d&quot;;
}
.fa-arrow-circle-o-right:before {
  content: &quot;\f18e&quot;;
}
.fa-arrow-circle-o-left:before {
  content: &quot;\f190&quot;;
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: &quot;\f191&quot;;
}
.fa-dot-circle-o:before {
  content: &quot;\f192&quot;;
}
.fa-wheelchair:before {
  content: &quot;\f193&quot;;
}
.fa-vimeo-square:before {
  content: &quot;\f194&quot;;
}
.fa-turkish-lira:before,
.fa-try:before {
  content: &quot;\f195&quot;;
}
.fa-plus-square-o:before {
  content: &quot;\f196&quot;;
}
.fa-space-shuttle:before {
  content: &quot;\f197&quot;;
}
.fa-slack:before {
  content: &quot;\f198&quot;;
}
.fa-envelope-square:before {
  content: &quot;\f199&quot;;
}
.fa-wordpress:before {
  content: &quot;\f19a&quot;;
}
.fa-openid:before {
  content: &quot;\f19b&quot;;
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: &quot;\f19c&quot;;
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: &quot;\f19d&quot;;
}
.fa-yahoo:before {
  content: &quot;\f19e&quot;;
}
.fa-google:before {
  content: &quot;\f1a0&quot;;
}
.fa-reddit:before {
  content: &quot;\f1a1&quot;;
}
.fa-reddit-square:before {
  content: &quot;\f1a2&quot;;
}
.fa-stumbleupon-circle:before {
  content: &quot;\f1a3&quot;;
}
.fa-stumbleupon:before {
  content: &quot;\f1a4&quot;;
}
.fa-delicious:before {
  content: &quot;\f1a5&quot;;
}
.fa-digg:before {
  content: &quot;\f1a6&quot;;
}
.fa-pied-piper:before {
  content: &quot;\f1a7&quot;;
}
.fa-pied-piper-alt:before {
  content: &quot;\f1a8&quot;;
}
.fa-drupal:before {
  content: &quot;\f1a9&quot;;
}
.fa-joomla:before {
  content: &quot;\f1aa&quot;;
}
.fa-language:before {
  content: &quot;\f1ab&quot;;
}
.fa-fax:before {
  content: &quot;\f1ac&quot;;
}
.fa-building:before {
  content: &quot;\f1ad&quot;;
}
.fa-child:before {
  content: &quot;\f1ae&quot;;
}
.fa-paw:before {
  content: &quot;\f1b0&quot;;
}
.fa-spoon:before {
  content: &quot;\f1b1&quot;;
}
.fa-cube:before {
  content: &quot;\f1b2&quot;;
}
.fa-cubes:before {
  content: &quot;\f1b3&quot;;
}
.fa-behance:before {
  content: &quot;\f1b4&quot;;
}
.fa-behance-square:before {
  content: &quot;\f1b5&quot;;
}
.fa-steam:before {
  content: &quot;\f1b6&quot;;
}
.fa-steam-square:before {
  content: &quot;\f1b7&quot;;
}
.fa-recycle:before {
  content: &quot;\f1b8&quot;;
}
.fa-automobile:before,
.fa-car:before {
  content: &quot;\f1b9&quot;;
}
.fa-cab:before,
.fa-taxi:before {
  content: &quot;\f1ba&quot;;
}
.fa-tree:before {
  content: &quot;\f1bb&quot;;
}
.fa-spotify:before {
  content: &quot;\f1bc&quot;;
}
.fa-deviantart:before {
  content: &quot;\f1bd&quot;;
}
.fa-soundcloud:before {
  content: &quot;\f1be&quot;;
}
.fa-database:before {
  content: &quot;\f1c0&quot;;
}
.fa-file-pdf-o:before {
  content: &quot;\f1c1&quot;;
}
.fa-file-word-o:before {
  content: &quot;\f1c2&quot;;
}
.fa-file-excel-o:before {
  content: &quot;\f1c3&quot;;
}
.fa-file-powerpoint-o:before {
  content: &quot;\f1c4&quot;;
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: &quot;\f1c5&quot;;
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: &quot;\f1c6&quot;;
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: &quot;\f1c7&quot;;
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: &quot;\f1c8&quot;;
}
.fa-file-code-o:before {
  content: &quot;\f1c9&quot;;
}
.fa-vine:before {
  content: &quot;\f1ca&quot;;
}
.fa-codepen:before {
  content: &quot;\f1cb&quot;;
}
.fa-jsfiddle:before {
  content: &quot;\f1cc&quot;;
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: &quot;\f1cd&quot;;
}
.fa-circle-o-notch:before {
  content: &quot;\f1ce&quot;;
}
.fa-ra:before,
.fa-rebel:before {
  content: &quot;\f1d0&quot;;
}
.fa-ge:before,
.fa-empire:before {
  content: &quot;\f1d1&quot;;
}
.fa-git-square:before {
  content: &quot;\f1d2&quot;;
}
.fa-git:before {
  content: &quot;\f1d3&quot;;
}
.fa-hacker-news:before {
  content: &quot;\f1d4&quot;;
}
.fa-tencent-weibo:before {
  content: &quot;\f1d5&quot;;
}
.fa-qq:before {
  content: &quot;\f1d6&quot;;
}
.fa-wechat:before,
.fa-weixin:before {
  content: &quot;\f1d7&quot;;
}
.fa-send:before,
.fa-paper-plane:before {
  content: &quot;\f1d8&quot;;
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: &quot;\f1d9&quot;;
}
.fa-history:before {
  content: &quot;\f1da&quot;;
}
.fa-circle-thin:before {
  content: &quot;\f1db&quot;;
}
.fa-header:before {
  content: &quot;\f1dc&quot;;
}
.fa-paragraph:before {
  content: &quot;\f1dd&quot;;
}
.fa-sliders:before {
  content: &quot;\f1de&quot;;
}
.fa-share-alt:before {
  content: &quot;\f1e0&quot;;
}
.fa-share-alt-square:before {
  content: &quot;\f1e1&quot;;
}
.fa-bomb:before {
  content: &quot;\f1e2&quot;;
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: &quot;\f1e3&quot;;
}
.fa-tty:before {
  content: &quot;\f1e4&quot;;
}
.fa-binoculars:before {
  content: &quot;\f1e5&quot;;
}
.fa-plug:before {
  content: &quot;\f1e6&quot;;
}
.fa-slideshare:before {
  content: &quot;\f1e7&quot;;
}
.fa-twitch:before {
  content: &quot;\f1e8&quot;;
}
.fa-yelp:before {
  content: &quot;\f1e9&quot;;
}
.fa-newspaper-o:before {
  content: &quot;\f1ea&quot;;
}
.fa-wifi:before {
  content: &quot;\f1eb&quot;;
}
.fa-calculator:before {
  content: &quot;\f1ec&quot;;
}
.fa-paypal:before {
  content: &quot;\f1ed&quot;;
}
.fa-google-wallet:before {
  content: &quot;\f1ee&quot;;
}
.fa-cc-visa:before {
  content: &quot;\f1f0&quot;;
}
.fa-cc-mastercard:before {
  content: &quot;\f1f1&quot;;
}
.fa-cc-discover:before {
  content: &quot;\f1f2&quot;;
}
.fa-cc-amex:before {
  content: &quot;\f1f3&quot;;
}
.fa-cc-paypal:before {
  content: &quot;\f1f4&quot;;
}
.fa-cc-stripe:before {
  content: &quot;\f1f5&quot;;
}
.fa-bell-slash:before {
  content: &quot;\f1f6&quot;;
}
.fa-bell-slash-o:before {
  content: &quot;\f1f7&quot;;
}
.fa-trash:before {
  content: &quot;\f1f8&quot;;
}
.fa-copyright:before {
  content: &quot;\f1f9&quot;;
}
.fa-at:before {
  content: &quot;\f1fa&quot;;
}
.fa-eyedropper:before {
  content: &quot;\f1fb&quot;;
}
.fa-paint-brush:before {
  content: &quot;\f1fc&quot;;
}
.fa-birthday-cake:before {
  content: &quot;\f1fd&quot;;
}
.fa-area-chart:before {
  content: &quot;\f1fe&quot;;
}
.fa-pie-chart:before {
  content: &quot;\f200&quot;;
}
.fa-line-chart:before {
  content: &quot;\f201&quot;;
}
.fa-lastfm:before {
  content: &quot;\f202&quot;;
}
.fa-lastfm-square:before {
  content: &quot;\f203&quot;;
}
.fa-toggle-off:before {
  content: &quot;\f204&quot;;
}
.fa-toggle-on:before {
  content: &quot;\f205&quot;;
}
.fa-bicycle:before {
  content: &quot;\f206&quot;;
}
.fa-bus:before {
  content: &quot;\f207&quot;;
}
.fa-ioxhost:before {
  content: &quot;\f208&quot;;
}
.fa-angellist:before {
  content: &quot;\f209&quot;;
}
.fa-cc:before {
  content: &quot;\f20a&quot;;
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: &quot;\f20b&quot;;
}
.fa-meanpath:before {
  content: &quot;\f20c&quot;;
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox &gt; * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox &gt; * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error &gt; h1 {
  font-size: 500%;
  line-height: normal;
}
div.error &gt; p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body &gt; #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body &gt; #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body &gt; #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body &gt; #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir=&quot;rtl&quot;] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget &gt; .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget &gt; .button:focus,
#logout:focus,
span#login_widget &gt; .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget &gt; .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget &gt; .button:active,
#logout:active,
span#login_widget &gt; .button.active,
#logout.active,
.open &gt; .dropdown-togglespan#login_widget &gt; .button,
.open &gt; .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget &gt; .button:active:hover,
#logout:active:hover,
span#login_widget &gt; .button.active:hover,
#logout.active:hover,
.open &gt; .dropdown-togglespan#login_widget &gt; .button:hover,
.open &gt; .dropdown-toggle#logout:hover,
span#login_widget &gt; .button:active:focus,
#logout:active:focus,
span#login_widget &gt; .button.active:focus,
#logout.active:focus,
.open &gt; .dropdown-togglespan#login_widget &gt; .button:focus,
.open &gt; .dropdown-toggle#logout:focus,
span#login_widget &gt; .button:active.focus,
#logout:active.focus,
span#login_widget &gt; .button.active.focus,
#logout.active.focus,
.open &gt; .dropdown-togglespan#login_widget &gt; .button.focus,
.open &gt; .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget &gt; .button:active,
#logout:active,
span#login_widget &gt; .button.active,
#logout.active,
.open &gt; .dropdown-togglespan#login_widget &gt; .button,
.open &gt; .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget &gt; .button.disabled:hover,
#logout.disabled:hover,
span#login_widget &gt; .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget &gt; .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget &gt; .button.disabled:focus,
#logout.disabled:focus,
span#login_widget &gt; .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget &gt; .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget &gt; .button.disabled.focus,
#logout.disabled.focus,
span#login_widget &gt; .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget &gt; .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget &gt; .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header &gt; span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* &quot;Drag file onto the list ...&quot; */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir=&quot;rtl&quot;] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir=&quot;rtl&quot;] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir=&quot;rtl&quot;] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir=&quot;rtl&quot;] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir=&quot;rtl&quot;] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*=&quot;span&quot;] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #eee;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container &gt; div {
  border-bottom: 1px solid #ddd;
}
.list_container &gt; div:hover .list-item {
  background-color: red;
}
.list_container &gt; div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header &gt; div,
.list_item &gt; div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header &gt; div input,
.list_item &gt; div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header &gt; div .item_link,
.list_item &gt; div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons &gt; .btn,
.item_buttons &gt; .btn-group,
.item_buttons &gt; .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name &gt; .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir=&quot;rtl&quot;] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f114&quot;;
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f02d&quot;;
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f02d&quot;;
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f016&quot;;
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir=&quot;rtl&quot;] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: &quot;\f096&quot;;
}
.kernel-menu-icon:before {
  content: &quot;\f096&quot;;
}
.kernel-menu-icon-current:before {
  content: &quot;\f00c&quot;;
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #eee;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir=&quot;rtl&quot;] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: &quot;\f00c&quot;;
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f00c&quot;;
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #eee;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .codemirror-gutter,
  #texteditor-backdrop #texteditor-container .codemirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .codemirror-gutter,
  #texteditor-backdrop #texteditor-container .codemirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90caf9;
  border-left-color: #e3f2fd;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #e3f2fd;
  border-right-width: 1px;
  background: #e3f2fd;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42a5f5 -40px, #42a5f5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42a5f5 -40px, #42a5f5 7px, #e3f2fd 7px, #e3f2fd 100%);
}
.edit_mode div.cell.selected {
  border-color: #66bb6a;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66bb6a -40px, #66bb6a 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don&#39;t highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell &gt; div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303f9f;
  border-top: 1px solid transparent;
}
div.input_area &gt; div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area &gt; div.highlight &gt; pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the &lt;head&gt; if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.codemirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.codemirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.codemirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.codemirror-linenumber {
  padding: 0 8px 0 4px;
}
.codemirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.codemirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev &lt;Maniac@SoftwareManiacs.Org&gt;
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #ba2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88f;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #aa22ff;
  font-weight: bold;
}
.highlight-meta {
  color: #aa22ff;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88f;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #aa22ff;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #ba2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #aa22ff;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #d84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .mathjax_display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are &#39;text&#39; as well as &#39;stream&#39;, but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell &gt; div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: &quot;Helvetica Neue&quot;, Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: &quot;Helvetica Neue&quot;, helvetica, arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app &gt; #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #eee;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #cfcfcf;
  border-bottom: none;
  background: #eee;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu &gt; .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover &gt; .dropdown-menu {
  display: block;
}
.dropdown-submenu &gt; a:after {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: &quot;\f0da&quot;;
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu &gt; a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu &gt; a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover &gt; a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left &gt; .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f040&quot;;
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &#39; &#39;;
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f10c&quot;;
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f111&quot;;
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f1e2&quot;;
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 fontawesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: &quot;\f127&quot;;
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open &gt; .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open &gt; .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open &gt; .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open &gt; .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open &gt; .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open &gt; .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open &gt; .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open &gt; .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open &gt; .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open &gt; .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open &gt; .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open &gt; .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open &gt; .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open &gt; .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open &gt; .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open &gt; .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open &gt; .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open &gt; .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open &gt; .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open &gt; .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open &gt; .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open &gt; .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open &gt; .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open &gt; .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open &gt; .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: &#39;&#39;;
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu &gt; li &gt; a.pulse,
li.pulse &gt; a.dropdown-toggle,
li.pulse.open &gt; a.dropdown-toggle {
  background-color: #f37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We&#39;ll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeout {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeout {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after &quot;expand&quot;*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before &quot;expand&quot;*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeout 400ms;
  -moz-animation: fadeout 400ms;
  animation: fadeout 400ms;
  -webkit-animation: fadein 400ms;
  -moz-animation: fadein 400ms;
  animation: fadein 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: &quot;&quot;;
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list &gt; li &gt; a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: &quot;(command)&quot;;
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: &quot;(edit)&quot;;
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #bbdefb;
  border-color: #90caf9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #ffcdd2;
  border-color: #ef9a9a;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #c8e6c9;
  border-color: #a5d6a7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #eee;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    &lt;/style&gt;
&lt;style type=&quot;text/css&quot;&gt;
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #ff0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #bc7a00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #a00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #ff0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00a000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044dd } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #b00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #ba2121 } /* Literal.String */
.highlight .na { color: #7d9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000ff; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #aa22ff } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #d2413a; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000ff } /* Name.Function */
.highlight .nl { color: #a0a000 } /* Name.Label */
.highlight .nn { color: #0000ff; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177c } /* Name.Variable */
.highlight .ow { color: #aa22ff; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #ba2121 } /* Literal.String.Affix */
.highlight .sb { color: #ba2121 } /* Literal.String.Backtick */
.highlight .sc { color: #ba2121 } /* Literal.String.Char */
.highlight .dl { color: #ba2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #ba2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #ba2121 } /* Literal.String.Double */
.highlight .se { color: #bb6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #ba2121 } /* Literal.String.Heredoc */
.highlight .si { color: #bb6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #bb6688 } /* Literal.String.Regex */
.highlight .s1 { color: #ba2121 } /* Literal.String.Single */
.highlight .ss { color: #19177c } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000ff } /* Name.Function.Magic */
.highlight .vc { color: #19177c } /* Name.Variable.Class */
.highlight .vg { color: #19177c } /* Name.Variable.Global */
.highlight .vi { color: #19177c } /* Name.Variable.Instance */
.highlight .vm { color: #19177c } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    &lt;/style&gt;
&lt;style type=&quot;text/css&quot;&gt;
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3e424d; }
.ansi-black-bg { background-color: #3e424d; }
.ansi-black-intense-fg { color: #282c36; }
.ansi-black-intense-bg { background-color: #282c36; }
.ansi-red-fg { color: #e75c58; }
.ansi-red-bg { background-color: #e75c58; }
.ansi-red-intense-fg { color: #b22b31; }
.ansi-red-intense-bg { background-color: #b22b31; }
.ansi-green-fg { color: #00a250; }
.ansi-green-bg { background-color: #00a250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #ddb62b; }
.ansi-yellow-bg { background-color: #ddb62b; }
.ansi-yellow-intense-fg { color: #b27d12; }
.ansi-yellow-intense-bg { background-color: #b27d12; }
.ansi-blue-fg { color: #208ffb; }
.ansi-blue-bg { background-color: #208ffb; }
.ansi-blue-intense-fg { color: #0065ca; }
.ansi-blue-intense-bg { background-color: #0065ca; }
.ansi-magenta-fg { color: #d160c4; }
.ansi-magenta-bg { background-color: #d160c4; }
.ansi-magenta-intense-fg { color: #a03196; }
.ansi-magenta-intense-bg { background-color: #a03196; }
.ansi-cyan-fg { color: #60c6c8; }
.ansi-cyan-bg { background-color: #60c6c8; }
.ansi-cyan-intense-fg { color: #258f8f; }
.ansi-cyan-intense-bg { background-color: #258f8f; }
.ansi-white-fg { color: #c5c1b4; }
.ansi-white-bg { background-color: #c5c1b4; }
.ansi-white-intense-fg { color: #a1a6b2; }
.ansi-white-intense-bg { background-color: #a1a6b2; }

.ansi-bold { font-weight: bold; }

    &lt;/style&gt;


&lt;style type=&quot;text/css&quot;&gt;
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
&lt;/style&gt;

&lt;!-- Custom stylesheet, it must be in the same directory as the html file --&gt;
&lt;link href=&quot;./Trying out LSTM for stock markets_files/custom.css&quot; rel=&quot;stylesheet&quot;&gt;

&lt;!-- Loading mathjax macro --&gt;
&lt;!-- Load mathjax --&gt;
    &lt;script src=&quot;./Trying out LSTM for stock markets_files/MathJax.js.download&quot;&gt;&lt;/script&gt;
    &lt;!-- MathJax configuration --&gt;
    &lt;script type=&quot;text/x-mathjax-config;executed=true&quot;&gt;
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ [&#39;$&#39;,&#39;$&#39;], [&quot;\\(&quot;,&quot;\\)&quot;] ],
            displayMath: [ [&#39;$$&#39;,&#39;$$&#39;], [&quot;\\[&quot;,&quot;\\]&quot;] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: &#39;center&#39;,
        &quot;HTML-CSS&quot;: {
            styles: {&#39;.MathJax_Display&#39;: {&quot;margin&quot;: 0}},
            linebreaks: { automatic: true }
        }
    });
    &lt;/script&gt;
    &lt;!-- End of mathjax configuration --&gt;&lt;style type=&quot;text/css&quot;&gt;.mathjax_hover_frame {border-radius: .25em; -webkit-border-radius: .25em; -moz-border-radius: .25em; -khtml-border-radius: .25em; box-shadow: 0px 0px 15px #83a; -webkit-box-shadow: 0px 0px 15px #83a; -moz-box-shadow: 0px 0px 15px #83a; -khtml-box-shadow: 0px 0px 15px #83a; border: 1px solid #a6d ! important; display: inline-block; position: absolute}
.mathjax_menu_button .mathjax_hover_arrow {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #aaa; border-radius: 4px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; font-family: &#39;Courier New&#39;,courier; font-size: 9px; color: #f0f0f0}
.mathjax_menu_button .mathjax_hover_arrow span {display: block; background-color: #aaa; border: 1px solid; border-radius: 3px; line-height: 0; padding: 4px}
.mathjax_hover_arrow:hover {color: white!important; border: 2px solid #ccc!important}
.mathjax_hover_arrow:hover span {background-color: #ccc!important}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;#mathjax_about {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #dddddd; color: black; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:dximagetransform.microsoft.dropshadow(offx=2, offy=2, color=&#39;gray&#39;, positive=&#39;true&#39;)}
#mathjax_about.mathjax_mousepost {outline: none}
.mathjax_menu {position: absolute; background-color: white; color: black; width: auto; padding: 2px; border: 1px solid #cccccc; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:dximagetransform.microsoft.dropshadow(offx=2, offy=2, color=&#39;gray&#39;, positive=&#39;true&#39;)}
.mathjax_menuitem {padding: 2px 2em; background: transparent}
.mathjax_menuarrow {position: absolute; right: .5em; padding-top: .25em; color: #666666; font-size: .75em}
.mathjax_menuactive .mathjax_menuarrow {color: white}
.mathjax_menuarrow.rtl {left: .5em; right: auto}
.mathjax_menucheck {position: absolute; left: .7em}
.mathjax_menucheck.rtl {right: .7em; left: auto}
.mathjax_menuradiocheck {position: absolute; left: 1em}
.mathjax_menuradiocheck.rtl {right: 1em; left: auto}
.mathjax_menulabel {padding: 2px 2em 4px 1.33em; font-style: italic}
.mathjax_menurule {border-top: 1px solid #cccccc; margin: 4px 1px 0px}
.mathjax_menudisabled {color: graytext}
.mathjax_menuactive {background-color: highlight; color: highlighttext}
.mathjax_menudisabled:focus, .mathjax_menulabel:focus {background-color: #e8e8e8}
.mathjax_contextmenu:focus {outline: none}
.mathjax_contextmenu .mathjax_menuitem:focus {outline: none}
#mathjax_aboutclose {top: .2em; right: .2em}
.mathjax_menu .mathjax_menuclose {top: -10px; left: -10px}
.mathjax_menuclose {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #aaa; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; font-family: &#39;Courier New&#39;,courier; font-size: 24px; color: #f0f0f0}
.mathjax_menuclose span {display: block; background-color: #aaa; border: 1.5px solid; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; line-height: 0; padding: 8px 0 6px}
.mathjax_menuclose:hover {color: white!important; border: 2px solid #ccc!important}
.mathjax_menuclose:hover span {background-color: #ccc!important}
.mathjax_menuclose:hover:focus {outline: none}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;.mathjax_preview .mjxf-math {color: inherit!important}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;.mjx_assistive_mathml {position: absolute!important; top: 0; left: 0; clip: rect(1px, 1px, 1px, 1px); padding: 1px 0 0 0!important; border: 0!important; height: 1px!important; width: 1px!important; overflow: hidden!important; display: block!important; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none}
.mjx_assistive_mathml.mjx_assistive_mathml_block {width: 100%!important}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;#mathjax_zoom {position: absolute; background-color: #f0f0f0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; box-shadow: 5px 5px 15px #aaaaaa; -webkit-box-shadow: 5px 5px 15px #aaaaaa; -moz-box-shadow: 5px 5px 15px #aaaaaa; -khtml-box-shadow: 5px 5px 15px #aaaaaa; filter: progid:dximagetransform.microsoft.dropshadow(offx=2, offy=2, color=&#39;gray&#39;, positive=&#39;true&#39;)}
#mathjax_zoomoverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
#mathjax_zoomframe {position: relative; display: inline-block; height: 0; width: 0}
#mathjax_zoomeventtrap {position: absolute; left: 0; top: 0; z-index: 302; display: inline-block; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;.mathjax_preview {color: #888}
#mathjax_message {position: fixed; left: 1em; bottom: 1.5em; background-color: #e6e6e6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
#mathjax_msie_frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
.mathjax_error {color: #cc0000; font-style: italic}
&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;.mjxp-script {font-size: .8em}
.mjxp-right {-webkit-transform-origin: right; -moz-transform-origin: right; -ms-transform-origin: right; -o-transform-origin: right; transform-origin: right}
.mjxp-bold {font-weight: bold}
.mjxp-italic {font-style: italic}
.mjxp-scr {font-family: mathjax_script,&#39;Times New Roman&#39;,times,stixgeneral,serif}
.mjxp-frak {font-family: mathjax_fraktur,&#39;Times New Roman&#39;,times,stixgeneral,serif}
.mjxp-sf {font-family: mathjax_sansserif,&#39;Times New Roman&#39;,times,stixgeneral,serif}
.mjxp-cal {font-family: mathjax_caligraphic,&#39;Times New Roman&#39;,times,stixgeneral,serif}
.mjxp-mono {font-family: mathjax_typewriter,&#39;Times New Roman&#39;,times,stixgeneral,serif}
.mjxp-largeop {font-size: 150%}
.mjxp-largeop.mjxp-int {vertical-align: -.2em}
.mjxp-math {display: inline-block; line-height: 1.2; text-indent: 0; font-family: &#39;Times New Roman&#39;,times,stixgeneral,serif; white-space: nowrap; border-collapse: collapse}
.mjxp-display {display: block; text-align: center; margin: 1em 0}
.mjxp-math span {display: inline-block}
.mjxp-box {display: block!important; text-align: center}
.mjxp-box:after {content: &quot; &quot;}
.mjxp-rule {display: block!important; margin-top: .1em}
.mjxp-char {display: block!important}
.mjxp-mo {margin: 0 .15em}
.mjxp-mfrac {margin: 0 .125em; vertical-align: .25em}
.mjxp-denom {display: inline-table!important; width: 100%}
.mjxp-denom &gt; * {display: table-row!important}
.mjxp-surd {vertical-align: top}
.mjxp-surd &gt; * {display: block!important}
.mjxp-script-box &gt; *  {display: table!important; height: 50%}
.mjxp-script-box &gt; * &gt; * {display: table-cell!important; vertical-align: top}
.mjxp-script-box &gt; *:last-child &gt; * {vertical-align: bottom}
.mjxp-script-box &gt; * &gt; * &gt; * {display: block!important}
.mjxp-mphantom {visibility: hidden}
.mjxp-munderover {display: inline-table!important}
.mjxp-over {display: inline-block!important; text-align: center}
.mjxp-over &gt; * {display: block!important}
.mjxp-munderover &gt; * {display: table-row!important}
.mjxp-mtable {vertical-align: .25em; margin: 0 .125em}
.mjxp-mtable &gt; * {display: inline-table!important; vertical-align: middle}
.mjxp-mtr {display: table-row!important}
.mjxp-mtd {display: table-cell!important; text-align: center; padding: .5em 0 0 .5em}
.mjxp-mtr &gt; .mjxp-mtd:first-child {padding-left: 0}
.mjxp-mtr:first-child &gt; .mjxp-mtd {padding-top: 0}
.mjxp-mlabeledtr {display: table-row!important}
.mjxp-mlabeledtr &gt; .mjxp-mtd:first-child {padding-left: 0}
.mjxp-mlabeledtr:first-child &gt; .mjxp-mtd {padding-top: 0}
.mjxp-merror {background-color: #ffff88; color: #cc0000; border: 1px solid #cc0000; padding: 1px 3px; font-style: normal; font-size: 90%}
.mjxp-scale0 {-webkit-transform: scalex(.0); -moz-transform: scalex(.0); -ms-transform: scalex(.0); -o-transform: scalex(.0); transform: scalex(.0)}
.mjxp-scale1 {-webkit-transform: scalex(.1); -moz-transform: scalex(.1); -ms-transform: scalex(.1); -o-transform: scalex(.1); transform: scalex(.1)}
.mjxp-scale2 {-webkit-transform: scalex(.2); -moz-transform: scalex(.2); -ms-transform: scalex(.2); -o-transform: scalex(.2); transform: scalex(.2)}
.mjxp-scale3 {-webkit-transform: scalex(.3); -moz-transform: scalex(.3); -ms-transform: scalex(.3); -o-transform: scalex(.3); transform: scalex(.3)}
.mjxp-scale4 {-webkit-transform: scalex(.4); -moz-transform: scalex(.4); -ms-transform: scalex(.4); -o-transform: scalex(.4); transform: scalex(.4)}
.mjxp-scale5 {-webkit-transform: scalex(.5); -moz-transform: scalex(.5); -ms-transform: scalex(.5); -o-transform: scalex(.5); transform: scalex(.5)}
.mjxp-scale6 {-webkit-transform: scalex(.6); -moz-transform: scalex(.6); -ms-transform: scalex(.6); -o-transform: scalex(.6); transform: scalex(.6)}
.mjxp-scale7 {-webkit-transform: scalex(.7); -moz-transform: scalex(.7); -ms-transform: scalex(.7); -o-transform: scalex(.7); transform: scalex(.7)}
.mjxp-scale8 {-webkit-transform: scalex(.8); -moz-transform: scalex(.8); -ms-transform: scalex(.8); -o-transform: scalex(.8); transform: scalex(.8)}
.mjxp-scale9 {-webkit-transform: scalex(.9); -moz-transform: scalex(.9); -ms-transform: scalex(.9); -o-transform: scalex(.9); transform: scalex(.9)}
.mathjax_phtml .noerror {vertical-align: ; font-size: 90%; text-align: left; color: black; padding: 1px 3px; border: 1px solid}
&lt;/style&gt;
&lt;div id=&quot;MathJax_Message&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;
  &lt;div tabindex=&quot;-1&quot; class=&quot;border-box-sizing&quot; id=&quot;notebook&quot;&gt;
    &lt;div class=&quot;container&quot; id=&quot;notebook-container&quot; style=&quot;width: 723px; height: 14942px;&quot;&gt;

&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;h1 id=&quot;Introduction&quot;&gt;Introduction&lt;a class=&quot;anchor-link&quot; href=&quot;http://localhost:8888/nbconvert/html/Trying%20out%20LSTM%20for%20stock%20markets.ipynb?download=false#Introduction&quot;&gt;¶&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM Basics got us to a point of understanding simple LSTM. When it comes real life scenarios the picture gets more complicated a simple 1 layer LSTM just doesnt do the job. Usually multi layer LSTM are required where each layer does a part of the job then sends the output to next layer and so on. Building a deep RNN stacking multiple recurrent hidden layers allows the hidden state at each level to operate at a different timescale.
Starting of with Stacked LSTM which has multiple hidden LSTM layers the architecture where the depth of the network mattered more the number of memory cells in a given layer, A Stacked LSTM can be defined an LSTM model comprising of multiple LSTM.
The implementation example needs to be more close to real life scenarios. 
Stock market prediction are always intriguing. Technical Stock Analysis believes the complete intelligence of predicting movement of a stock is in OHLC (Open , High, Low and Close) and may be volume.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Stock market data is time series data by nature. Quandl has used as the data source. Some key aspects to understand while predicting the trend or price here.Most analyst would look into moving average or exponential moving average over a certain period to define the trend. A more realistic approach would be to also include trend indicators and price indicators into the dataset.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;One Step Ahead Prediction Average
We try to predict the future stock market prices (for example, xt+1) as an average of the previously observed stock market prices within a fixed size window (for example, xt-N, ..., xt) (say previous 100 days)&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Exponential Moving Average
calculate xt+1 as,
xt+1 = EMAt = γ × EMAt-1 + (1-γ) xt where EMA0 = 0 and EMA is the exponential moving average value we maintain over time.
The above equation basically calculates the exponential moving average from t+1 time step and uses that as the one step ahead prediction. γ decides what the contribution of the most recent prediction is to the EMA.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;For the sake of simplicity we are going to take 1 feature close and not include any averaging technique for now.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;GitHub: &lt;a title=&quot;https://github.com/ajayso/LSTM_StockMarkets&quot; href=&quot;https://github.com/ajayso/LSTM_StockMarkets&quot;&gt;https://github.com/ajayso/LSTM_StockMarkets&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [89]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#Imports&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;numpy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;np&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pandas&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pd&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;keras.models&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sequential&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;keras.layers&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LSTM&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;sklearn.preprocessing&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MinMaxScaler&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;plt&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;quandl&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pandas&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DataFrame&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [101]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Data Read &lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Quandl is used to read Open, High , Low .....&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;quandl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiConfig&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;api_key&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Td2oA_m_SYUdi1X9Htdi&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Please replace with API key can get one from quandl.com&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;quandl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;NSE/NIFTY_AUTO&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;c_auto&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dropna&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Some cleansing ....&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;c_auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bins&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;figsize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Ideally one would do a complete EDA on the data to arrive a complete understanding of relationship between features.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;




&lt;div class=&quot;output_png output_subarea &quot;&gt;
&lt;img src=&quot;data:image/png;base64,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&quot;&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Data pulled from Quandl is an Index for the Automobile companies in India.The 
NIFTY Auto Index is designed to reflect the behaviour and performance of the Indian automobiles sector.The NIFTY Auto Index is computed using free float market capitalization method with a base date of January 1, 2004 indexed to a base value of 1000.&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;The data for auto has open, high, low , close , share traded and turnover. There are couple of NA entries which have been cleaned.The goal is build a RNN model with LSTM cell to predict prices for auto nifty index. For sake of simplicity the close feature is used later the other features will be included. Before dwelling into the code a quick recap of RNN, it is a type of Neural Network with a self loop in its hidden layer, this enables RNN to use the previous state to learn the current state given the new input. RNN is suited for processing sequential data. LSTM is a specially designed working unit that helps RNN better memorize long term contracts&lt;/font&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [109]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Some more plot&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;c_auto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;Close&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;figsize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;linewidth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fontsize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Trying to get a sense how is this index doing&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;xlabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;Year&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fontsize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;c_auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_csv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;auto.csv&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sep&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;,&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Saving for future use &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;




&lt;div class=&quot;output_png output_subarea &quot;&gt;
&lt;img src=&quot;data:image/png;base64,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VKcYiat9u5UEGuKXl5NF9/axk01/PndkzGOhhFbI4x8sYuqC9RHtBnUp4cAmVoSJiIiIiIiISMukpFYrVVKQQ15O5P/+QV1KAl/r0kOir0h43ZF78429K7hkXJ+4rrNhWxUPv7sgYv/RgzsH7pOIiIiIiIiItGxKarVSZhZ1Qvgj9w2eQDplZPeIfR2L87j0EC+ZddYBPYN3MEynBia1FxEREREREZHWSUmtVuxX39qX/Xu1ByAny7hm4l5NmiMrNzuLeTcdzYUH96Z3xyJOG9Wdl74/bvcwxu7tC9m/d/sm97OsKK/J54qIiIiIiIhIy6SJ4luxzqUF/OPSA9m8o4o2udnkZDc9x5mVZVw/aRDXTxoU9fjxw7vxwfx1Tbp2WWFuk/slIiIiIiIiIi2TklpC24LEJ41G9Cxr0nn5OVkM6Ny2mXsjIiIiIiIiIplOww8lKfp3KmZARXHg8753WH9KkpB0ExEREREREZHMoqSWJIWZcdPxg+Nuv2+3El65ahyXj++XwF6JiIiIiIiISKZSUkuSZmSv9vhzx0c4qF+H3f8e1r0dT112EP0rNOxQRERERERERKLTnFqSVKeN6s7fPlhcZ99hAyu476z9+GD+OqpqHWP7dSQrK0b2S0REREREREQEVWpJkl04tk/EvsvG9yUnO4sx/TpyyIByJbREREREREREpFFKaklS9S0v5paTh9KltIDytvnceOwg9uvRLtXdEhEREREREZEMo+GHknQnjajkpBGVqe6GiIiIiIiIiGQwVWqJiIiIiIiIiEjGUVJLREREREREREQyjpJaIiIiIiIiIiKScZTUEhERERERERGRjKOkloiIiIiIiIiIZBwltUREREREREREJOMoqSUiIiIiIiIiIhlHSS0REREREREREck4SmqJiIiIiIiIiEjGUVJLREREREREREQyjpJaIiIiIiIiIiKScZTUEhERERERERGRjKOkloiIiIiIiIiIZBwltUREREREREREJOMoqSUiIiIiIiIiIhlHSS0REREREREREck4SmqJiIiIiIiIiEjGUVJLREREREREREQyjpJaIiIiIiIiIiKSccw5l+o+ZCQzWw0sTHU/WqCOwJpUd0IyhuJF4qVYkSAULxKE4kWCULxIEIoXCaIlxUtP51x5PA2V1JK0YmZTnXMjU90PyQyKF4mXYkWCULxIEIoX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0AO4NTyh5Z+/CLgN6A6MDdu/sn5Cy98/FS+pdbiZRXufuBj4ddNfkYiIiEjzyUl1B0RERESkQbcAVwGdgWuiHD/Qf+xrZjdGOT4w7PH10E4z+xZwMd5wwg5Evi8sBdbX2/exc646SOdFREREEkVJLREREZE05pyrNbOd/o/bozTp4D+e3silikP/MLPrgJuBtcCrwCL/2g44CdgHqL/qIsCK+HsuIiIiklhKaomIiIhkto3+40Tn3MuNNfbn4PoZ3lDCEc651fWOH9rA6ZqMVURERNKG5tQSERERyWzv+49jG2z1tS5AEfBWlIRWKTC0GfsmIiIikjBKaomIiIhktifxqq6+b2aH1z9onoPNLM/ftRSoAvY3s8KwdnnAPXhzaYmIiIikPQ0/FBEREclgzrkdZnY88ALwspm9DcwAduCterg/0AsoA3Y556rM7B7g+8AnZvYsUABMwJt36y3ir/oSERERSRlVaomIiIhkOOfcNGAI3kqJHYALgEvxVjb8ADgT2BR2yrXAj4Bq4DLgW8C7wChgWdI6LiIiIrIHzDnN9ykiIiIiIiIiIplFlVoiIiIiIiIiIpJxlNQSEREREREREZGMo6SWiIiIiIiIiIhkHCW1REREREREREQk4yipJSIiIiIiIiIiGUdJLRERERERERERyThKaomIiIiIiIiISMZRUktERERERERERDKOkloiIiIiIiIiIpJxlNQSEREREREREZGM8/8BAmj5iLAD9fkAAAAASUVORK5CYII=&quot;&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [131]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Using the close for LSTM to start with &lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;read_csv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;auto.csv&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Close&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;values&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Convert to Array&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [132]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Scaling is a neccessary evil for algo to perform better&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MinMaxScaler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[132]:&lt;/div&gt;




&lt;div class=&quot;output_text output_subarea output_execute_result&quot;&gt;
&lt;pre&gt;array([[0.02639892],
       [0.01790945],
       [0.01775437],
       ...,
       [0.64306885],
       [0.62752588],
       [0.63235074]])&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;h1 id=&quot;Data-Preparation&quot;&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Data Preparation&lt;/font&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;http://localhost:8888/nbconvert/html/Trying%20out%20LSTM%20for%20stock%20markets.ipynb?download=false#Data-Preparation&quot;&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;¶&lt;/font&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;The idea behind LSTM is more around learning from a set of input sequence to predict the right output sequence. Of course with the backpropagation or how far back the algo has to go, to decide or arrive on the output sequence. 
The data is a time series on length N defined as p0, p1.. pN where pi is close of price on day i. Consider we have sliding window of fixed width sized w  and every time we move right by size w so there is no overlap between the data in all sliding windows. In this example we use a 15 day sliding window, under realistic consideration we would use moving or exponential averages of the close here as mentioned earlier for sake of simplicity close has been used.&lt;/font&gt;
&lt;img alt=&quot;image.png&quot; src=&quot;attachment:image.png&quot;&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [113]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# The key function for building out the data for LSTM consumption.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BuildData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],[]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lb&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BuildData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 15  days back&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;y_train&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_train&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[113]:&lt;/div&gt;




&lt;div class=&quot;output_text output_subarea output_execute_result&quot;&gt;
&lt;pre&gt;((1402, 15), (351, 15), (1402,), (351,))&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [114]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# LSTM Stacked 2 layers ,with 512 memory cells, 1 Dense to conclude the output.&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Optimizer adam and loss is mse.&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sequential&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LSTM&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;return_sequences&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;input_shape&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LSTM&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;optimizer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;adam&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loss&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;mse&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [115]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Build test, train set and finally fit into the model&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Note the Model.fit may take a long time depending on the compute and GPU capacity feel free to bring down the memory cells and &lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# epochs&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Current configuration took ~ 3 hrs on 32 gb 1 gpu based machine.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;history&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_train&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y_train&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;epochs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;validation_data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shuffle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;


&lt;div class=&quot;output_subarea output_stream output_stdout output_text&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [116]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[116]:&lt;/div&gt;




&lt;div class=&quot;output_text output_subarea output_execute_result&quot;&gt;
&lt;pre&gt;array([[0.87985502],
       [0.87369183],
       [0.87312318],
       [0.86555848],
       [0.86898184],
       [0.87175039],
       [0.87260049],
       [0.86511046],
       [0.86341601],
       [0.8423589 ],
       [0.83532263],
       [0.8360636 ],
       [0.83439787],
       [0.83119278],
       [0.84735609]])&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [117]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;history&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;history&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;loss&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;history&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;history&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;val_loss&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[117]:&lt;/div&gt;




&lt;div class=&quot;output_text output_subarea output_execute_result&quot;&gt;
&lt;pre&gt;[&amp;lt;matplotlib.lines.Line2D at 0x1de2bf064a8&amp;gt;]&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;




&lt;div class=&quot;output_png output_subarea &quot;&gt;
&lt;img src=&quot;data:image/png;base64,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&quot;&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [142]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Xt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Xt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# The predicted is quite in line with actual. The thing one can ascertain from this curve in the later part is that the index is &lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# trending downwards...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[142]:&lt;/div&gt;




&lt;div class=&quot;output_text output_subarea output_execute_result&quot;&gt;
&lt;pre&gt;[&amp;lt;matplotlib.lines.Line2D at 0x1de1c3008d0&amp;gt;]&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;




&lt;div class=&quot;output_png output_subarea &quot;&gt;
&lt;img src=&quot;data:image/png;base64,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&quot;&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [147]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# To get an idea of a specific predicted value&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;act&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pred&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;350&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Xt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;predicted:&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{0}&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, actual:&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{1}&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Xt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pred&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Xt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;act&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inverse_transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y_test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# We see there is a difference however when we move into multiple features including trend indicators the gap reduces considerably&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;


&lt;div class=&quot;output_subarea output_stream output_stdout output_text&quot;&gt;
&lt;pre&gt;predicted:[[9081.99]], actual:[[8767.35]]
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [148]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result_df&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;pred&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pred&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))),&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;act&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;act&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))})&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;In [149]:&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot; highlight hl-ipython3&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result_df&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;

&lt;div class=&quot;prompt output_prompt&quot;&gt;Out[149]:&lt;/div&gt;



&lt;div class=&quot;output_html rendered_html output_subarea output_execute_result&quot;&gt;
&lt;div&gt;
&lt;style scoped=&quot;&quot;&gt;
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
&lt;/style&gt;
&lt;table class=&quot;dataframe&quot; border=&quot;1&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;text-align: right;&quot;&gt;
      &lt;th&gt;&lt;/th&gt;
      &lt;th&gt;pred&lt;/th&gt;
      &lt;th&gt;act&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th&gt;0&lt;/th&gt;
      &lt;td&gt;9081.990234&lt;/td&gt;
      &lt;td&gt;8767.35&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;


 



&lt;input id=&quot;hippowiz-ass-injected&quot; type=&quot;hidden&quot; value=&quot;true&quot;&gt;&lt;input id=&quot;hvmessage-toextension-listener&quot; type=&quot;hidden&quot; value=&quot;none&quot;&gt;&lt;div id=&quot;outklip-extension-is-installed&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/182518791389906626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/182518791389906626?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/182518791389906626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/182518791389906626'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2019/02/lstm-for-stock-markets.html' title='LSTM for Stock Markets'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-2172500479148129348</id><published>2019-01-22T20:44:00.000-08:00</published><updated>2019-01-22T22:17:31.214-08:00</updated><title type='text'>LSTM–Digging Deep Part 1</title><content type='html'>&lt;h4&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;3&quot; style=&quot;font-weight: bold;&quot;&gt;Introduction&lt;/font&gt;&lt;/h4&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM (&lt;strong&gt;Long Short Term Memory&lt;/strong&gt;) is gaining a lot of recognition in recent past. LSTM are an interesting type of deep learning network, they are used in some fairly complex problem domain such as language translation, automatic image captioning and text generation. LSTM are designed specifically for sequence prediction problem. This post starts of with an introduction to LSTM, there importance , the mechanics , lstm architectures and close with getting most out of LSTM models&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM is primarily used to solve the &lt;strong&gt;sequence prediction problem&lt;/strong&gt;. There are many types of LSTM some of which covered are Vanilla,Stacked, CNN LSTM, Encoder Decoder LSTM, Bidirectional LSTM and Generative LSTM.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;
To start with lets understand what&amp;nbsp; is sequence prediction and how are they different from predictive modelling.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;
A sequence has an implicit for the observation , the order is important as it is what is useful in the formulation of prediction problem and solution.&lt;br&gt;
Example of a simple sequence&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;
Input : 1,2,3,4,5&lt;br&gt;
Output: 6&lt;/font&gt;&lt;br&gt;

&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;strong&gt;Sequence Classification-&lt;/strong&gt; involves predicting a class label given an input sequence example&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;
Input : 1,2,3,4,5&lt;br&gt;
Output : Good&lt;/font&gt;&lt;br&gt;
Objective here is build a classification model using a labelled dataset so that the model can be used to predict the class label of an unseen sequence. 
This is called as Discrete sequence classification and is used in &lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;ul&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;DNA Sequence classification given a DNA sequence A,C,G and T values predict whether the sequence is for coding or non-coding. &lt;/font&gt;&lt;/li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Anomaly Detection given a sequence of observation predict the sequence is anomalous or not.&lt;/font&gt;&lt;/li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Sentiment Analysis - given a sequence of text predict the sentiment of text.&lt;br&gt;
&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;strong&gt;Sequence Generation:&lt;/strong&gt;&lt;br&gt;
Involves predicting the new output sequence that the same general characteristics as the other sequence for example&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;
Input : [1,3,5] [7,9,11]&lt;br&gt;
Output: [3,5,7]&lt;br&gt;
&lt;/font&gt;RNN can be trained for sequence generation by processing real data sequences one step at a time and predicting what comes next. 
Assuming the predictions are probabilistic, novel sequences can be generated from trained network by iterative sampling from the network&#39;s output distribution and then feeding the sample as an input at the next step. In other words making network treat its invention as if they are real.&lt;br&gt;
Application for sequence generation are &lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;ul&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Text generation, &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Handwriting prediction and &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Music generation.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Sequence generation may also refer to generation of sequence given a single observation as input example image caption generation.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;strong&gt;Sequence to Sequence Prediction&lt;/strong&gt;&lt;br&gt;
Involves predicting an output sequence given an input sequence. &lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;
Input: 1,2,3,4,5&lt;br&gt;
Output: 6,7,8,9,10&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;In Deep neural network while coding the requirement is vectors used for input and output are fixed length.&amp;nbsp; In real life situation the sequences may /may not have fixed length for example speech recognition and machine translation.Likewise question answering can also be seen as mapping a sequence of word representing the question to a sequence of words representing the answer.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Predicting the next value in the sequence , the new sequence predicted may or may not have the same length or be of same time as the input sequence. In abbreviation sequence to sequence is denoted as seq2seq.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;
Seq2seq at its core uses RNN to map variable length to variable length output.&amp;nbsp; If the input and output are time series then the problem is referred to as Multi step time series forecasting. &lt;br&gt;
Some example of sequence to sequence problems are &lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;
&lt;/font&gt;&lt;ul&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Multi-step time series forecasting i.e predict a sequence of observation for a range of future time steps, &lt;/font&gt;&lt;/li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Text summarization given a document or a text predict a short sequence of text that describes the salient parts of the source document, &lt;/font&gt;&lt;/li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Program execution - given the textual description or mathematical equation predict the sequences of characters that describes the correct output.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;MLP and neural net are generally better suited to handle time series forecasting or sequence prediction as they are robust to noise, non linear by nature, They can have multivariate inputs and outputs. Application of MLP for sequence prediction requires an input sequence be divided into smaller overlapping sub sequences to generate a prediction. The time steps of the input sequence becomes an input feature . The subsequence&#39;s are overlapping to simulate a window slid among the sequence in order to generate the output.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;This can work well but there are limitations&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;1.&lt;strong&gt;Stateless- MLP&lt;/strong&gt; learn a fixed function approximation. Any inputs that are conditional on the context of the input sequence must be generalized and frozen into the network weights.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;2.&lt;strong&gt;Unaware of Temporal Structure&lt;/strong&gt;- Time steps are modelled as input features meaning the network has no explicit handling or understanding of temporal structure or order between observations.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;3.&lt;strong&gt;Messy Scaling&lt;/strong&gt; - For problems that require modelling multiple parallel input sequences, the number of input features increased by a factor of the size of the sliding window without any explicit separation of time steps of series.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;4.&lt;strong&gt;Fixed sized inputs&lt;/strong&gt; - Size of the sliding window is fixed and must be imposed on all networks&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;5.&lt;strong&gt;Fixed sized outputs&lt;/strong&gt;- Size of output is fixed and any outputs which don&#39;t conform must be forced.&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;hr&gt;&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;strong&gt;RNN to the rescue&lt;/strong&gt;-&amp;nbsp; LSTM network is type of RNN are special type of neural network specifically designed for sequence problems. Given the standard feed forward network RNN can be thought of as addition loops to the architecture.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;For example in a given layer each neuron may pass its signal sideways in addition to forward to the next layer. The output of the network may feedback as an input to the network with next input vector and so on.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;img alt=&quot;image.png&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5oAAAGkCAYAAABQGlp/AAAgAElEQVR4Aey9Z7NdR5YltjKPu+75B/MevAfoQM8qksVyXdXlpqc53T0zrZEiOmYiNBpFSPqkP6Iv+qJQhEIxo3ZT1aZM05QhWUVPgARhCOIBeHhwz7trj03F2nnOAyqi54NGmCIHzAved+8995w0K/Nc7pVr597KGGPgHg4Bh4BDwCHgEHAIOAQcAg4Bh4BDwCHgELhHCOh7VI4rxiHgEHAIOAQcAg4Bh4BDwCHgEHAIOAQcAoKAI5puIjgEHAIOAYeAQ8Ah4BBwCDgEHAIOAYfAPUXAEc17CqcrzCHgEHAIOAQcAg4Bh4BDwCHgEHAIOAQc0XRzwCHgEHAIOAQcAg4Bh4BDwCHgEHAIOATuKQKOaN5TOF1hDgGHgEPAIeAQcAg4BBwCDgGHgEPAIeCIppsDDgGHgEPAIeAQcAg4BBwCDgGHgEPAIXBPEXBE857C6QpzCDgEHAIOAYeAQ8Ah4BBwCDgEHAIOAUc03RxwCDgEHAIOAYeAQ8Ah4BBwCDgEHAIOgXuKgCOa9xROV5hDwCHgEHAIOAQcAg4Bh4BDwCHgEHAIOKLp5oBDwCHgEHAIOAQcAg4Bh4BDwCHgEHAI3FMEHNG8p3C6whwCDgGHgEPAIeAQcAg4BBwCDgGHgEPAEU03BxwCDgGHgEPAIeAQcAg4BBwCDgGHgEPgniLgiOY9hdMV5hBwCDgEHAIOAYeAQ8Ah4BBwCDgEHAKOaLo54BBwCDgEHAIOAYeAQ8Ah4BBwCDgEHAL3FAFHNO8pnK4wh4BDwCHgEHAIOAQcAg4Bh4BDwCHgEHBE080Bh4BDwCHgEHAIOAQcAg4Bh4BDwCHgELinCDiieU/hdIU5BBwCDgGHgEPAIeAQcAg4BBwCDgGHgCOabg44BBwCDgGHgEPAIeAQcAg4BBwCDgGHwD1FwL+npbnCHAIOAYdAiUABoAD/Ah40lAFQPVV5UvVaFIC26165AhIA/KpAhgAp/KKAMgZQ9jwDjQQegJAlwy/sV1K+ygEvR85zEUAZD6qqp6z2TkPsgapZrNXIszrDgP/sQ4Et9KRlv33dnTMg5/A86S+7rNgPWx6vsoiwHHsum7uFC0/gxRqIlX0bVBcAyDXA0+86DVoaz5OqWjwYpQVAfsWj7BXPU2XbCwVksE+Wxyr5PwM+q7YXykhdGdRWnWwzoSybaM+9q6/8knWyzKo1d7ApZB5IGdLmrcbZtrLQ8hCv5cPWU0DJjMhhECCDjwy6xLGARg4PGTzkMhdsHwMU8GUsWQ7HQleF8rV6z854QEFcyzlS9VGmD0FiW70ChV+ALeB84z++suFsXSE1EWV7umDEOqsD0hlOUiJTjbw9t2oKpzcfXvkq84cA8LPOBFO+lXuJyJTnVfOLTWVZnK9sSTWeioPNNnJsOKdkHgBZeZ/xGlYTFoAvk8tII1Kt0Je+2RaHACJjq+W1cqq0h6NiqsqlsEJpmV9somBRvrIu9k/z4upLHxgASMtDRKcm5d6ZH7wXqnZ64Dwq768SAygt/WMZfFocbLsrHCooeYnMK77hiaxXwf5GsF0F7zPbQI81pQa5NhhEnjQ54H1iIbJ9kALtYLM4Prf6LAf0nQbxi+oms1W7vw4Bh4BD4L5GgD957uEQcAg4BO45Ata8/UeK5Rd83H2C1sjSVMxjFSgEyhqMGr416WmgF/kWe1Pw4JNe5IChMUfLsXrkBXKVw3ikAxVtrCq9YxtWp//2qz3fkhV7LgsX490YeKr6xl7Fqmln8vmferDmqnlVU6tjQib4gQXw9a4nr+FH+8eWzmN31yV1q8IayeUXhqausj1nfXxUxVb1sBwa67ykqqeiPxVBrq6pjpdFbZVVfS9trL4sSYxHw70sv2pDVaecX3WivJiGfvWQ9pTf6+q4MAE7F0jwqjZxtOw/HuVFvIDPkgaSGJWHjFdOn+qUu0/nsfKx1TRbTMkcbC1cZLAlVydbAs8q7+5DVZY0ZesDASmBuQsb1ifzomwDCSExuDPQBWA0tDBf2zv5rmyodKe6pvyianpZ5N0tsO/LdR2/XHCQMvgNB5+MtyTJvA+rOSsEuMSsKt8uwti/XNuQ6stK+fG3ri0XIWTRpzq37CfbUT34FcdXLi7rq06/67Q7E6y8kOfQoOE51ZzjeymP87LsC0/fKqd8w2HhU5cTS8v9Q9bKHxg26M7yEi/5rYUrKaPqHE9mjWUL+LZ6lH25U3n1hXt1CDgEHAL3LwLKmGod9f7tpOuZQ8Ah8NkgIKRHDLtSgaGxxUdp2NEco262ZcYZBVUaefwupsGrrJJSESAUBUyR8wU68KHESrzLyPWATBQgIwarx+9Z4V3lshlVU9gc2oN82jPLbyrrUxp7V/m2B/ZvWXR1SvWV2J5VBdVreS4/bn3PThblCRU7ky9Le19V+pQ1vqvr2DSLHfthNbWqD5YqU1Gy1IvHxX5mNfIsZamyPVtWc/V9Wb/0qaxQ1GR2rrSnWffW5bwu5x+WXx7lC4dcrue55ZvyNCEzZXlynbZt3TrE8wSXskLRqbRVvVloWdxWldTXSLjlf2e8xhNyxv7ydFGCFZFhs5SoalURUtVdePJ49RT1r2ozD/L91rNk1Txe9pUKfnW6HY+q/WwpFwD4yoULKoLUYm1xxJPn22/te44ZtdKt+uRaXnDXvcRj5ZPzwNxFRgVzdl4GQaEo5VVNJkv5lkKbBtKy74GhUkfA2E7LzEQZ5+jdmWy2Pm1Axdv2lipv2TWpi7cax7Ok5OxsOWHYdD7kXq7KZOGlN4P9tpTEqw/sgrYKrMXWKppSJw9Uz+p8qaAC5q6DcoiV3tWYsr2iaLOogmUbGG2Q5xm8lOTVh/EVMp8eAHahwS55VH0u6yhxZOl8sDo+qnGtPpeH3YtDwCHgEPhCIOAUzS/EMLtOOgQ+GwSscVUaxmxCaW3RvqvszDhPEXnUJ2mgaiBJhZh4OkDkWRc92r58itGmNZSnKTLYQsTiLO3jsg5NY97QlDfWqCVhY6WiSFraY+1TNqhUMYU30NCu3AB5Pl1QS7LAC0ob1Rr3v23h2pJI+sqHHKgMfevKWn0lryRSLILn6QKFpjsoD9BAL2AJciFEoDrNo0VcqjNsGl05SW4qNa+qm/SU1/xjLp1bljlPEDmYV5VX8qXEiV9LXdLOknyUWPMr1rr1kcxBfDPLi6prBbqy/GpNU+plJ6zyylOr+m2J9oisMFR4i1ZFAlKSzK3jdngoRXF8C3FNteqj9Eg6YXHItgg5z6uUybLfZZXVJ14m9F0ZaQYXM7bcYMsypc3SJzuOgnlJ9CzG/MuFk7JwmVoaRggav9sqqMSxOpHns4PVQyamZVs8VOEo78tzDGvKZbqW3ElOk0UYkj5xdeVsoEMx+25ZJttWTW/LPQurnEodyhJ3zjkZ22rMbH/Z2uraqrV2PnDQbXukYlbOrrJM3oeCkYbiClIFAVeN5HHXb0XZBh7mJb42yJRQb5nXvNSScTnDXs5rpMyy4Lsh5RzVVf2cIzyH41GVqSx+ZaNIujXvj7QA+gn8SMNvNEBnbfsoF0fKKSnNZYl3dYs1VC7BtpV0M7a/P2Uh7sUh4BBwCNzXCDiieV8Pr+ucQ+AzRqCSMKpmlEYYzcpKzfG8AHm57wppAnnSsFUZvKAGj0ofbTv+WuXcQJWjMNyRBiR5hiCMoL0A8BRykqJcQefa7hvjxrxyc55Qi9L+FIuS5Iqf5Rjflx+2jlnDuOJgPCzugaXaY7tkSUBFGqpXSxSsOmuZBhUge5TnkLTQSGbZPJ5p7kYlJtaM5T40rUmTLfUsT7VtJXiEREmXS7OY5PSOASskQKiStbSFispb2yctRMASbNtv8kt7FftJIsZveR6NbWWq0bJ9sGqprY/D41EtlPJtfRW0lqxZZYvlW+hYnkXPlkvCYs+piLZti2USMhxsBz9WzMZebvmpDKORPbkk3tLushmVUGb3CmfyrWBhaZkQLk0VXSgHi7OkzLbDUvicR8spSMyl7YSxrEN4FMljSSCrQZL5YqmM/M0VVVY75ywhy+1+zJKcUgWsHuwtr5f+8DBdZ6vxldPYC84DQaecxMJkq2UT+6orEmVnkixgVJ0plKwzsElsuyCnrBcA+yn9EGyq+4CvlSrLqq0LM8eKmNt7qWrPXZ+rTcjl/Ce2JNvEumrK1v5Z6VNZN1846iyy6qoUy17ISNlxk8WjctGivDfu4GKvrQqwJL/CgveQvUDmqbhkExMDkyfw0hSYX4O5tYJBliCbHMbQ4QPQfmB9bKtFKCJVQsS2yjCW3a/2/dqxrO5ti9tdLXNvHQIOAYfAfYuAI5r37dC6jjkEPmMESgNxqxWl8UXTrjJHcwnrYvlCmg4QknXRyo0TIONzAPg+EFIRpCFt9QFNy9RTiMIASqfITIICNABDcDdAUNAQ9UoFgySorJyNsczANkvaKFZ1adCynlK9Yytp51YEkfVTCRMFw/aAxvmWJSwl2iNVD637IM+hwmrLkiYYGrv2rCqwSiLUm22xroF85aeydaXtbPfrSVWlxyGDw1Qkjs1he3kyyYx0T/6UJLd0aaSBrUwhRNIaxpaQWNLAwE3Ez5IJ+46FkPZYI79qu22bHTNRl8qFBUterABZUiKLtxA1Un4etWqhbaU1+ImRkDxpZ4Ui+2RL4Vl+qUpL52RYK5dRtpH4c1ZxzEnWLD3zDEkdyTLLoqJpiRzP59zgdBLOVuLNMSbZJlFgnXxynIgpv+NCAZ8WjxLgsnbbUdt2i2p5xHCcNOMKWRQN21a5xnJuVYPNN8Rai8toYQfUfs+q2Gch5uxPOYZVpVuzhd8o8Fq7wMELbeAkKUDqItGzBN/+rdCzbWeRakvRZcctm7JNYCMIQDlXyttLCKdMwmryVX1im+0CC7tjFwRKssmQXZqLGlszdmtRRvAm+HTN5twpHQOE2trJUs53qxTzlmf7bDvkrpNmV4spds5UM9qId/Ydgm8Qp7GEkKr5PtQgxoe/egO/+j//PfI8wfHnn8a3//WfIdi3lzHIrHe2LAjYBRQOZTWHqrZKj+QmsfOX7XYPh4BDwCHwRULAEc0v0mi7vjoEftcIVHZVKUzQZuQhvvJdTvdWJbEdRcFDVgBXr2L14gzCTowm6Uieo4sMSZHD8z00hpoIJkahxoegGgHMcAOq1UIeNZDSvPYi6EihyLgHjXvTaOkxkA9Ndw1RsKqGVHjwlIpUVsSy/I7UhUayfVTUhXYvj5UqndjB1Tk8k4avvYKkxlIUCV4qB1kcCTFtaxIBKpksiwY/z+aeVbncMG6uLZfE0F5cvtLILxR8ucJ+VTZJLF4SSNn2SdJohV6pi/2xRMySJtbEfzTOKwOd15J8sS3SEB4QcmbPJam051uKwr4IjRPWaseXreYxXiHlVB7JhvVYBdRixCUBZfEQ8mZJBa+/M0yig9lFgLK91ZbWqiWWApe9MCSfVCe5H1PBSzOoPJO+GE8j8xhJlKyFGFZrCyVbkr4qq9Ky4UptRTJle+z4sNa7HiXp1IJROc/Kc2X2FVqixfIKiwX/8iJ+Wz3tIYG8xJGu0iT9OclxOT+rWmV+2JOlBFuusFAptyKRBJG0mrF6JV5vNTHLq/yCfbXN4DXUcSvcpQ7OBUbmvStwEA0HqU+moq1TYGPZcq9YUsoqZI5zzEjOCyNEm/ekVfC5TGLLsveJ7R3nDfG1ixel+zv3kFZt5UKSEF07PrLHUu4jzgLbfuLKdgblootdPJFfAIGd5XMmWkWbpNvA90PQmwBJDNPpIl9dA5aW0fSA2voG/H4fSDiPpGXgXKqGULoteJQjxP4yAFW5QLFVXzWA7tUh4BBwCHwBEHBE8wswyK6LDoHPGgEaWZXxyrbQuOQaf6CYnqRAkaXWlbTdxrlfvIYP/ubvxbBrxUxiwtQCvuxVZCEkfXnoI400DjzxMB75xgsYevop1PwIed6DCWj8hciE0FjyZI1ya01bqlTa9xUwdylY3NlJU5VttpoYW2oVSB5hP8TIZhGlqkJrk/+qB4kULWshOxLK0qZ1kDMkyI01kC2foLuidY20hEDDp/VaGq2ivYmLH4Ph3GXJsoEVaeB7PsomiBomClbZKivOiqsklTohWHIB+8Z/1nBmASxCPm2VRcImrZAKrJrHzzzBHifRrNxtWSxdMfm1lCVk2E4Aq8GRfDAQToWxTZ9iDXXbcqmaEJAgsyguGAgGFhbWSpfWqtWkJRwTlkEVT6Dh2AhhLqCSBIhJEBSUr+FFARkIDN06BeuSxbFiudiCKT0k7BUHvWvseYaIfDI7eBkvZHRY2weZIyxbpkKZYue3xqlkcDyn7JsMCXsirs0WY5az1SR7gvy148a/HAm21B6xn+g+bvFgGz26P2cpVJHI2AtwZJfc76w8q/oJWCyG948l9lKvYGK1WRsMh728U6PgxznFk3ku/5TsipjYMbcuufY+4XuWV86dSnVmP2VBxF5j+8wForJYHijKvsp9xwPlgJT3Ou8Oe//amWnLsKfZe4XjII20TS2/svez3bub5zm0VvB8H6ECGnTPz1LU8xgq7gNcsDA2dU5eOv3LApEt9i4c7MBxTtpgZ2yNrem3Ki/b4F4cAg4Bh8D9iIAjmvfjqLo+OQQ+TwjcpRCSwFlKZU0ua7AqaEb2iXMwX8mtMx+jmLsFv9ODF8fQ2iAYaiAzBSLjC9eKB33UAoWVm8t48+0zOPT8s9j7/e+hceIBoFWH8uiWqZDkBYwp4DE9AZWrymilUUirtCQztFtpfNO8zgz1PqqBGppRKGn0Mypq6daZFQUCnwTZ5ssQ+5LBTOQiHrPgF1QsaWjndk+iT8LJwCJpBkQh7XnZcxr5no2gK7yoEOlIbOGyfZLDJfRgPJJd6i0FiqJAqKnqlAY+rfkycFJW0FDP4Uk+Cso8JD9UrRTSOIX2lBjSbC9xFxfTMhiLFCddsUCxSyR0cpzpXYyGp3wrVZIFUjWkKstOM46TXGvEFbJgO7IcgfahYrvHVrYp8jwS85KAx3mCUHkItIc0jhGSBKalS6umiiXTAn4Q2Haw/1Qs6fqrS+3X+CgGseyf80li0xTKt67TKs+BjR5Wz57HysICwolxTJw4gtr0Dhi6ZXO/IMeX0JekjiSNw1PNF9nTqhiQxqqzin0v+899w8SJGGmfLtIF0rQQvH2WT0wyA8Im7znnOEc4IbkPl+OSZeC5vDdYs8kL+L4NQMR5x/QfJNysR+YX3xc5DPcqaw2tfRQ553x1d1k5WURwzt/1NroXz6M7fwubyDH++EmMHzho5yDbsrUCoJCbVBYKiF9e0OPAKr8F90bz/vV8IfOiBJKUcpGBY+HZRRhZGNjinZZQFiZHIBM0FVC5QGO4B9vjUQWVMUUPSa8FnYmObFe17L2VvZRyw3AykLlpkeuJk7g+s4mZgcd7QrhcqZIXuXwv5FH5ol6yr1vjzOqYDonziQtUnhIXaVt8gYLkku79ZoB8sGld+emCHQbIPYOE/VYSp1bmUcALOdacT1TNC7o2W08FuY/5Oyfts78R7q9DwCHgELjfEXBE834fYdc/h8BnhUBJuCouRCPVPizZ5HseEYPVshXQdbbWG2BkkKCVZgjDEIcfewTxxDDaeQ4vMUjWO+ivrmF94TbCTorO0mVcXtxAOACm/2wCwdHhkjTSFvWgcgMSA4+RakmMslyMcmug0kinkkFCSKMUiDybmJ3Mg+qUqC+8hkQrDEUBIpnIcn5fukSSNAnbsESAxi5JNFU+Maoz+vHSl5VqFQlnImREByFMVoDkSB5lVFkpS4xuEjTrf0cyt9FfRxDVRF9ljtGCRI5l0sDm+bS/WW/OKLt2J5z2Qwz6CQLPQxSSJBbicktVkUY2+8kovrYA6+rItnDchH/IOJKs2v2FxM+Q1DAoCskWhULfqog+uyERXa2aJiSCuFB6ZGG5QaoKeDUP/Yyu0AqBDgV7qm5hVJO2yfm2KKTcNxcFUJwjnDOCC+vjPw8Fgz+RNPs1q7PRvfJua55q5uIyzvzsZZw5dRppq44X/tWf4LEffBdBFElfCjbOE6dJSwRYRxkulGom9xBKD0uCad02S99k1kpG5/s2kAx5EOdQXmAwSBD5AVTAcbc48FQuPujQErOMZM4LhawzAjNpCaMwE664nwg2zVZNxjUhiTF08bRRWw3BKPezFhKGWYFTzSceHFICFmfo35rH2b/7B1z94F1sNnx82QPGd00JWSoyLkL4QlZ5gc+6S0WaRF7uz4Iu3J4o27ImYbhmkiHyQxlopgURJbQaHxlqIwQ61B5qXBCoyKxPMiizV26WPE4R6MA2lgSfsMqe2FJtl/HmKoBVpBHwXstsbktPoz8YQOcegiAQQk5MuBAjuTC5FsICGZUYStJi8qO42hJHwckuxPA3IDN0K2eXuJBg97/SdT3ke45IqGFCzrkMxrdBzPp5F6EK0PQ4R3kP2rlJsiy5fPljwONcaWBezsgxTbmR3R+HgEPgC4GAI5pfiGF2nXQIfH4QELuRhpflRVaVowFPKSQrUE8LDKWpBH0JDx/E5L/9N9B7plAIGQpg1tso2h2kZz/GO3/xF/BvZ9CdHi7/+k3UHziKyYlhqJ27YYIQeUrlzxOlg9aeoZpIIhSUxEzMeevqSNqbcy9fqkU9q5QjUbU8KkVUFAsJEGMNxzIybGHVGGtNslNayBDVjjRLhWgYL0ePhEl5CKNIyGaZ0AXJYAAvqlkGRQOXlnCpetF+p0pDeEir6lGjVESYJ7NATpubPFMIns1WIpdLapdMiDL3vnk1G0FWmQz5YGDdJdkOdqSgjyXJLKVJS7aZN5DhlWLRUDUUyaUwmAi+F4hql6QZ/MAThZSklG1mxE5iSHfHgJGA2a6cyQgDGW9ZWNAaSZEhFGJET8QMNc8HlUchBVkiREAEMBLnug9FZkDiJ/AyvU05eegyqey2OZ9Rh8kXSbB8hTShC6SGZzyYbg/963PQqyvINj0U6xvwiANJIEmOFyI1ORIqllTWiCnFSI4DqxLGZiGSjoq8mEsEZJ6cZQnyIkVUr8sCA6e3kAwGAKImZjIhV0mSifKnAw8ZceEeQgaeKd1vuTDC+rnXOIkThLUQvvGRMMCVISm3BF4VKfK0B5YDFWJQpEi411n5UJ5VZ4Msl2BPSAdIVxYQX5uFmZ1D0vKRtTckqjO9BajmsSVcK+FiiqjFXCDJq3yVGgWJsQ4QFFrO0VxYIEjsHQMt0aVV5hFv4RxKiDPx4v5rLW68IndLZN5cVNwszxEoX3CT+cFJTqC5oMM0JDDop10h7Q2PynNm72OVoytzOIDn1bgyJG2KkxiRR08D7mu1YygEs7yXSPxUYCiWy13Pe8bnQgvVVC4q+Z59SoAkrrLQmwEICyCkwsz2cZpTMQ81eiYRUhoRF07+LEYqiycBcq0wMDl8HVm8ihwRiWa1oCQluT8OAYeAQ+D+R8ARzft/jF0PHQKfAwSsmkmzm0qfPEpXVnkvsqd1RwxMgVpBd0SFFQYH2nsAwcFdiH2NMGhAxTFEtpkYxrHlRVx++RUUt5fRX1jC2qXLGHnmcejxcRTMzRnYgDlpmgpRpGYlyhQNTJEfKhdI2oBWaaGSodLYKnxkmVRjfCoiNMipAFpXOInIWZVHRih2aKmEAAh9j5oj8l4bYSNELiyBjngpMhJQkqtCI6yUQao4RQIviOx+VKZvKQrUSFyzXFTQiAQqHsCPQsRikNtzhXfRTqdyK0KbDW4CEs5iIERSMYhJQWPat8xs0AdqNi0MzxNMKbfRlZTERuxiElSr7HA8rAtpBk1c6WpojChbdAs2aYpAKVGVSDpUv2Nl0TpJNGDyTJQyv1ZDYEgOuDe3EJJJ5VMCQZkY3BhH9YgEOkl6aIQNAJElmjJ1ilKlsjyZaqzMKfLzwA4DTyMNki2tJBJ5hiGTY4zYxQpRpws1YETjUPZqQgfwxAXVBkqSNCriSs1qLR6cARLxtiqciwJ8etzP50HTlTWL7X7jiDqYneeKixsmh/J91KgoE7O4JwSkVqvJQgvdjOmaSsU5TTIURYpGGInITMWuEQYW+17P+gFEJKSlkmoy6SvvLEn6UwrncjCJgYJBtXIMJ3308gR5ZhBwr2HSh6pRBbSLDEbIHdVum8OVLuPCsknLSLJYLtVj3ifsOkkTVcYsE7dXvnLtIDQFBiaGUlyUsBF9pWH8CSg9R3mr0HOA91A9oioKxHEMn4oh7yWSO48isW8j31LBzBNOCCAMUfPpnsrfiKScf5EsLljV0xcyKGMjrvPEnkHA6CKbwqNKy4UEugEnA8s6/cgqxVT3OQ8YRqjQ0JmCT+9kuuVKu6zbNj0VeBaXFXhcxQPruktFnvtbRRHm3uMSN05Gu8ryOfgtdk1wCDgEHAK/OwQc0fzdYe1qcgh8sRAQWafsckkQ7KdyA1f5FU+TAB0iHdqLfO6ZKjQaXh0qaAFBU6SqnPvYtA/NgBz7D2D6938Pl997D8XNJeg4wfLcdezsDTBsFLiXciBGt0YQcn9Wbl1FqczR0O51ad0CQWDdU/MMiu+pLlLekeOhuL+SntJ5TjgGjUySLypwWWqVWAaaISlOE5heG3mawG81oEdHrVGbcKMd0CsKUQS1R4NeA6ttqDhHQYN824Swo1SZUkm0aiHTaoR0N0wV1MomQhKERg21RiQBkbjHj9oT02YwiJBaX4OKOwAJ5nANqEVAnAKDAti0BjGaLaAe2dyktdC69A1igLkDSR4CBa/hoUgHKNoxfO6x5F60egTTiGCaNaRCSq07sjIeNIPNdHtQ/YFlgCSyJCtDDWF/amRUFNB0Yw3B8DD6dCsNazY3pmBHd0iFdHkNWTFAbShCTdvotOjFQDuxhIe5VjmGVL/IGIaGoBs1FCSjoUaWW/WPrtLodICleWDxNkazGGvdjuwFba6vAwtLQJ9+phEQhNAjQ/CGG1waEJnYcPFD6iC+7Ardke2eXSxTYqAAACAASURBVJuHFDBJjGyjZ/fykkQ2G9BUKjd7UNLOHKbXg240rKtnvS6EI/ADBKyTglrcg0dSSdfdfipRhqlxev0+TBih4Xnw2h0IBpyz4kJKZc0AzTowOoJQyJpGTOqVxYKLuPNuLAPr6/DWFhElbdSLPobzDNHGKjC/CHR6UFSem0MoQuu+yrrz/kBUTOaoJbHjHAPnugnFpdTuyeRKSAJ0e8AGFxUMVLOOYHIEucrQNzkivyEcVYgmsaRLd7eLOE1tNGjfR2N8lBslQdWf6qq4gsd9qE4CzUWKfg/Z6ip8KvBFLKSdiwIYGgYXCCQEUo0qt2edIpgKR/aqkr/af7o7gBn0oamKNkK7ApHTEyIGOpxXGggi6OEWVKshV8ne5lzDp2txznI8Ub55HvdGRzzC34w4gU5zqO4AiNdhWH4jQDA8ZKNgi9NzuWrBnzeuCrmHQ8Ah4BD4giDgiOYXZKBdNx0CnwcESNSEc1YktAoaIr6KIjOUES9p7NOwz4BBT6LBUGmQa+mqSNWl1USwZzfyRh1hoyZK0NriEpIe1RRfVBeqL+Iqy0igJIM0jJeXsXnpU9w4exa3rlzBxuYmqLJNTu3E9OFD2HH8BBrMlUd2kRQwjabYoeJSSRC5j47qDSWjzIgrb/ejj3H17Hks37yJztoKiiLD6LZJ7Dh6GMeffw7YOQE12YJnaNRmEm03W1zGr//8b5C3B6hPjOFLL/4TeDvHxT2XMguVV5995Xvuq1xawa//4j8i2VxHONLCY//kW2gc2odc+0L6Iiow3QEuvP4GVq7MoB7kOPyVpzGyYwfyG/O48Po7uHz2U7R7A0Q7d+KJF3+Ag089Kskus0EP106fwex7p+EnAxx+6nHseuYkzMoybr7+Li69+REW1tZhto/iwa8/i5O//zUEw03BSA0SYECDu0AyM4ubZ87i5uws1lYWkGQpmhMTOHTiQYzu3Yttx48h2DYJHceoBYEEesr6fRtlt1SBfvXDHyIbdDA21sKT3/wq4PeALtD5+CKuXfgE1z65iKTfx449u3Hg4Ycx+fQT8Kd3yha4POUiAL0sc6TLq7jy3nuIL11CbeYi4mtXMJGnYLCk7Ox5XE4SxFEdedRC3Ghg6onHsPOpR4Am90NS2CW5sGSF6qQQemOEVEowoCTD8pWrOPP2WzDxAPv27cWRJ5+ECjzkS0tYPvMRzp46jfnr1zG6bTuGJidx6NHHsOupp6CHh4HNDaDesCSTc1sr0P2zXivdqDe7UEEOb3UNM2+/hcWZGWzOz6O3voZ6PcLeA/uw98ETaD5wFHrXLkRNZYMhkawlKdTiEubeeAPplSvwZmcxuH0NUdFHfRCj//4HmOsnaIcROkGEpNnCnsdPYt8DD+DK+Qs499Y7MIME+w8cxPHnnkE0vVP8humKTuWVLtN0yS3W1rH68Xlc47xRCmOHD2Av50YrwoCk0K9ZF1sqelyL2ezjyq/fwLWbN5F5CnsfPI4Hn/8yUOOiSiGLAIpEmfcW/ZZn5tC9fBU3Ll7EzRtzWF6+BT/QmJzchu1792P3wcNonjgBtYNKcSHENCXhZOxZKrepQbHSxoXfvIu5Ty5gdKSGE197BuN7tiO+dQuXf/0eLrx9Gp1OgtE9e/HA17+Og89+CV6rZckn3a65D5h+1PQ8oHeD0uLGLC63GZX7FPHsDVx//zRmr15Bbeck9jx1ElNPnkRRow+FzCbZl+vJJubPwy+xa4NDwCHgEPjdIOCI5u8GZ1eLQ+ALiwAJkw17wlc+yDLvPCgciSsaFSjusyN/k9QgKbJ6DjRSIEhFlRRPNBIJuqtR2fE9DPIU/X4XtbCO8YkJhHSHTHMETF/BwJ7cN0VlbXED7bPnceHlVzD/wYdQa6vw+gOJbGuiEBvjo1hufYBwageOPftl7P/K89B79tg0EcyXJ/vQmGMvhUpyFN0+1k59iKtvvoeNcxewPnsNut8XtZVuopuRj86b72P21Tew7+vP4cQffQvRjnEbjCfLkN9axvm/exnthRXUt2/DE08+iWi8VUa0BXScQnk+0mxAQIDlTcz+4jcYLCwiCRWOP3wCzd1TkvuPxFsZH1jfwPlXf4XZU+9iqK4x2aih2RrC2Zd+gWtnPkV3o49OAayMXcfIxBjGprZjbO8ueHGKlYuXcO5nr6DR62M8KTCRJLj869cw8/p7yG5twgt8rAz7mPUL7D+4CxPHDlnlt5dgcGsZV3/6c1x7630k84tIOh3Eg564M6pGC5++ex5pvY7dTz6OJ//0T4DJMXjbJ5DGibgBSzRejtEgxlt/+2NgbQU7hpp4bGwn/M0OXvv5r7B69Rr8ThfZxiZUmmPtwgUsvvc2/NdexuMv/gG2P0+CwD2sWlwZ1z79GKd++Jfonj+PfYMeRtfXMJIY2U+5fvpjbMxcwcCvIYuaWI+oXGtMnzgEXfNlHoqLNOcPA0VRvVK+5CzlNKWiyn2fa5/O4M0f/T3MZhvthx/CkckptM+fx+lXX8XSzAyCPEcjjtFOzyHfvhO/fPnXOPLV5/DMH/8RcGi/BLVJSWa0J/s4g2YIxAnEd7od4/Ybv8THP/8l1q9dQ7G5gbzDvlu1/PrZi5h59TWMn3wYJ3/wPQwdPYpg53b4gS9uwencTVz5+a+weeo0RjbW0OiuocFcmoWPzgdnsHL2Crp+DZ1GC5u1CNF6H/tro1j/4Byu/PSXyPox0iPXMNlqYhddrFsj1rOA7JtsvijQXljA2X94FVdfewu+Mdj3xCPYe/wwvBMH0Aw82eebMTgO90T3MqTXF3Hur36CS7OzyJohdjSHgMf6gBeBoXXEm73XF+W9895pvPOXP0J75hpaSqG/uQ6PezZ9jU4QYil9DTemd2H/s89g+tmnUH/qERSRQix7pH3UfQYg0vDiApunLmLljbewlm9iZ9JHbc8OXHrvXcy8+yHat9eQ6wjXL19Hq9bC7iNHUa81RMFngKWYng0IEJNc8zenN4Cq0dlbA/0cm+dmcOY//i2uvPsBkjyF3jGO6d3T8NMcukZ3e/u7t7VlgD9/smJ25zfQvXMIOAQcAvcrAo5o3q8j6/rlEPjcIGD3NN5pjg12Q2NLtmaWqqaoj5JfkdSU7ooFkqIH49M9tQfFyDckXOKKBoDJ02dn4VGZUhoDpbF9YhJ+sykRQBkt08/o8GqgNzq4+vNf4epLP8fiRx8j7HQRphla9QbGdm7DxqCH2/NLSAIf2fwCNmavI11v49iL/xRq3x4bTZSuslS0uBEwjrF86gw++L/+g+wLNZsdBHRJpGsvI3JmBfIsRZJsoL3axVp/gPrUOPZ//TlgZNjmdGx3kN24hak8RPfWMoI+cz0WUIENslPlPIl0BJX0geU1hGvr0JubSOgW2+4BgxRBo0yhwn10aYp8cQmt1U0ExQDm7CXMLCzh+vsfIe3G8P0IzUYL3SRBr9MV90hxeUxTJPML8G/NY4RBZM59guWVZVz7zevIl7sYMnXZZJastdFZXhPXSnGzRYaNmVl8/P/8CLffPo1kaU2ULQap2b5zOwLfw/riCtLVefj1IXx6+xWs3pzHt/+XfweMjciuQgaOEcubavPmJsKVVQytb2JkrQP1wQW8/9abWF5ZxNLqKkY8H7WsQMC9d5vr6CzPo1hbxOuby/jG9Di2HT9qowEhl72iRZogj21fh2j4M3er76PT62DTBwahQS9OsRn46IvrdM3u2eMKRaln8oWusrKnj4FiSBSoMDPy0CBGuLSKRn+A8PJ1rL/6Ot559WWs3Z6X3JUMeCNRjHsx8tnrGGq1MPO3P0O+0cGz/9O/hdm/C72UrrM2iE3ORQUqYEvLOPcXf4PzP3sFg8UV6W+c9DC1cxL1wENncwP91U100gSrq20sXF/A1/7sv8Mk93xSaeae3jxHr91Fe6ODRsJUKIwCm8KLIuRxhjgdoKcLdOMC/VqEjK6fGTAWtrCj8LG5soR2/zzm9k5h1xMPiZs1gwdRaIzjPmrGoLO0goXTpzCyviLeAsXsEHD9BtTeHfDHh5GYBElu0NRUvzMUtxbQPvuJBPvK0cRuur/ywXuLah/n8GYH1/7+ZZz94U/RvjKHZsF7m4tGOZpRA3k6gJekCOME5sYCLv3kZVw+dx5PZ3+K0a88DX+sgZwu11y4SBOoXg/JjdsIb8yjZToIz32K6x9/hIunTyHtpWgiQo8KeG+AzkYb/XYXde7hZnP4k8O9q4xTxh8rRv3l1GA7BwP0L1zCtZ++irk33ka8sormjklM7zuIqf2HoIO6uGBzv68o49w8zci7drXtzs+he+cQcAg4BO5jBBzRvI8H13XNIfCZIiCr9jYYBiO7iH1VreSLtU5bvjpAoZOM00OmfBjDnWIZQl7epysdw6sy12YKpH1ApzCzV/H+n/8V1FoXnq4jiVoYf/Rx1CbGbUAbkg1PQbU3kZw9j9uv/gJLH7wPxANMHz+OPS+8gOahAwjrEZI8xv6Fm5j5zZu4fOo01MIt3Hz9NbTGWpj6/neAXbsk2izjgYRUej65iNVXX8HGR6fFjRaNGg585QXsf/bL4mprVIR4YR1XTn+MW795G93VHpZml7E/5k9uHVA9UYWaPjDWT1AvatAxo/nYaDY0bIuQ7r8aXmbToTAirMm78IoNNLSRPafItETJjaoQS6pAvUih+j2MG4Vb//AaNgaxqDwHn/sSdj7+GPqNBi4uLGDyoRNojI6WYVozNPMBpvIYI70eNt9/F+vNOuJ+DzuOHcPxL30Fg1YL29aWEG9rorV3n+xp689dx9WfvYKbr7wOb5BJeY9895toPvEQomG71y1ZXkf//Y9x+qXXoVd6WH33LN7+93+NL/2v/w56vG5zftLFmbFP0y6mdI5aZwPbvRou/fRV3FxdweJQgCf/5R9j+vgDouDqjU189OOfwLv4CcIkQ3fmMjbefBNjoy34u3fLvtTh4yfwzf/xf0Z+7TqCmRnceOklrM1eReopTH3jq3joK8+haA4j90LkYYiRAwfK6LiRzEsGx8k97thkJFogkIBPDPTCoEMGCAyCPMZor4OxXgrvyixOra3jZncTwY4d+PIPvodoz254eYLB5Su48MO/tfv4NjqYf/0tbDz7DEamtiEaCsH4pb7KEXIf5CDBwksv4dMf/wSDhWXJOfrI176G8S8/jeb0JDydI+1uIr82hzd/9GOs3V7E2oUZnPrxT/HM9lGMPHQEqGn4h/fiqf/+3yD9/e9CXfgE8796CZ25q+ibALu+8wOceOYZZJGPrBYhrzcwsnsvsHMKuwYp9u/fj6tXr6Ie94Dr15CtLsGfnLBBbqDgM+rP5iaKW/Pwbs5hZ7wpeyd7y3OYOfUuDj9yHGg1EIbaRgFOEhTLS9j85BS8wRqGud83aGHi4G4b9YcRWUne+gPMvPxLnPsPf4lwZQOD3gZqe/fhqRf/GQJ6FzRCcadXK4uYef0NzH94Ft2F26jFCT750Ut4aGwSzccfgKnblCV0t0ek4NUMVNZFM95E5733cLOI0ckzHHjsMRx+4hkkQYTrSysYOXpMXL1lNUExhyiDEPWh0wRhyvDGZJycpwPEl2cw99Of4cpLrwCra6gPNbH3yUfxyH/zz1HftxfGq6EowyPLr5zkTeVvnmOan+n/l1zlDgGHwO8UAUc0f6dwu8ocAl8kBBjBtOxvmQORn2io26R6TGDA/UuUiGh88QvuibLvQ3rNFhpqtQOMd21yQBp7SytYunAaF175Byy8fxq6M0BRq+HQc89h8tFH4U1OSEJ1UUmMEqVu5uVXsPnxWQTdNvY98gAOf//30HruWXjT00ySiEYRY3jzEOrbWmJYzr/7ITYufYLFD6cw/dyTwI5J+Ix+SqWj08UK9wq+/gZG8hT5cBMHv/kV7PnBt9F65GGbFyMaRraZoXbiIUw+fBIff/AO/KExoDkqeyKlv80QSbKJKIsABmShUkI8SGio6NJHk0F2ckY0ChkRiGE/oVVPopxKACW6y+a+pBgROcrkCGkg5xmGCw/9xTUkjTqOfvfrOPS9b6FxeD/yZgvjdCdutBCNkWgWMOkAtSJBPesjiHsweYKuSbDz5Ek88OIfYeTBh1AMjWBEacRmgHBolIkUsTQzh7M/exUjvQStkXEc/M63Mf3id+Ed3Y2cwWV6fYymOdIDezCIY5z70WsIBjmWPzwL8+llqCePoSg00sygxjC3kQ+zsYJx5Bj1FG7fuA61Ywe+8d++iD3ffAH1XXtt8Jq1dTwcBPjoz/8C65cvIcgKzL39HrY9/CBGdpFoNqAmmtjR2ga17ygwPIGbH3yI7u2bGATA7hNHsPMbL8CMjksAKNGcSArYZqbSIPSaqWw4R+/MTn4ydAVl8CY+TYZGmqAluRwHSMIQE8eO4Mk//RfYcfQo/N3TAFORXJ+DF2p8+H/83xhiLtHOABff+A2e/tpzCIciEbrCgi7eObCwgA9//HdYv3pJ0t48/q1v4/Af/wEax49CjbcAFduUMbeP4Fmt8OFf/wTtpVUsf3wO7fOfYGj3BPT2caiJUWx74iRw9EFk49uwcO4jxLfn0fHrCB54CJO//3vAEOcV+xygUIGMRbR7CkN7ptBQBi16DSwuYuP6HCYOHITyGGfVpispVjaAq3No9Xto9dYEk/aaxs2LF3G4G0MbD0GewhMJNEG6uYbZj96HJnGL6jjw4BF4E3THZc4WhhhOgflVfPCjH6N+exG99XUcfOJhHHrxn2L8sSdRO3oMKgyRddbg5T2Eu8YRNkPcfOsUBgsbmH/vDPY/8RSae/fDm4yEbNtgThmMThAGBYJBis7iArrNOo7/3u/hgR98H0OHDkswpO2DBLoxhHBymyx6FHEbJu2iEWkEOkLIhS62M01Q3LqF+ddfx8cvvwy1vo76cB1jT53Ew//qjzB8dD+KVguK+zqrH0AurEkIZK5SON/ZL9L/BV1fHQJfdAQc0fyizwDXf4fAZ4IAjS37lHQj1Ue2hUFYjEI9KzD45DKu/W//OxbCGnKvhloewN/oIFm6hWRzGVGeYDNQeOx738H+P3wRwb492ChsEB26GOrNProXrmH+nY+Qz6+gPlLHxDMnMfy1Z6B27wAY1ZJ5IakMhgbjX3ocO29cQ/vip/BWumhfuYqFcxewY99+GEmsWGDt1m18+pt30J5fRhh4aO3bi4Pf/y6iRx+SqKMS+tIP4E00MfHocYwdmcb48w+iOVwXdYV7UJkOg+kaAuZT9AskHlN/pOJuKa6sTFNC25uGKoPihmyfBnklXYqJEfeMSg4QJoGnEipGLfMBahSBQrufIGtEOPi153DwT/4QzROHJAKsH9YxpkPEaYGc+xmZ/9DzkSiFOM9QiwL0PIWh44dx/I//ACNfeQYYHoGuNdGCjybJUJ4iuXIVG2+dRbGwCV+HqE9NYddXX4A+fAhxPRDFM9CMUprBP7gDu7/7POY/uIj12VvozM3hk1+8hhNHd8Nr1iS3JEmp7E8sDGq1OhbW16H2HMDj/8O/xtS3vwJvfAzw65aUQ2HbCy9g3yefon9rHibu4ur5GRxb3sAI3ROZn5HrFpEPb8gAjPoa2JQqEmaJaShao8DImESDtbswSQLKkKB8qxhnlM62DOciqyNypwhNkAjJpKf8XttIyL4ne2Yf/5f/HNu//CWJhssouNAhvP27MfHtr2P012+ie+Yy8kGM2Y8v4GnjQw8KcA3DS8pFjPffxdzlc2g2NbzROg5/62k0Tu6H4v7NJhcgPIl6DAxjx1efwfQHH+HG4gqShRWsfnQekw8dRW1izBK4IASG6jC1OjJDQl8g1VybsBFyMcw9rZxLZS+5CjQ6hMbeXaiPjcB02ujcXsDSzCwmnk6hfCNjpQY5ujcXsXruEuqJgZ9wuH2EvRTx3Dyy60vw9+yz0V8ZUbjbR7a6hpsXLspSUtYI8cDXnofUT6LJvm92sfTr95HfWELW6SMLPDz0g+9g7KvPodgxjZzRkZlGZmwEytQw/OjDOFZrYOnqTRSLHWTLa7j02ptoPPE4RrZNyu2QF5ncD3Rf9vIcXr0u7sJ7n34Kh158EcOPMvhTE5ny0OD9HdaQKSY3KaC4sKMNsiIFkhgJI1UPeshmr+L2ux/gw7/9GVZuLmBiahv2Pv8MDr74PYw8fExS5jACLn/XvDKgFBvDdDDWifYz+cF1lToEHAIOgc8EAUc0PxPYXaUOAYcAEaD5/luP0tOWi/5+AQSdPlbffh8r3PgYNtDoGwxlQJQM4IUKux46gugbL2DXl59DdGw/zNiwuPXlDK7C6K69AdYuXoG/2kGUFhib2oHRowehJocBkiHuxYsTm3ePUSWbDYztmsL42Bjat9fRvbWA5Suz2BnH0Nz7WeRozy9gefYaIj+StBoTDzyI6PgDMM1hCWrEoDnUwCS9RCuAag1jx65hGMNYmAoZ81+y3gFzKaZIfR+xl0l+TY/BRrgPlelMtJJci4WmqyKLFPYj/LzISTIr5Mo39LdlpF6tkBAvr8DY/mlMf/N5NB48Aoy2gChETgZGIksliwodiRIVLaNQBBF6SKG3jWP6G1/F6JefBMaHYBp1ibzJlCxaNq4ZbMzOi4o0qiIMDw1j/8mH4e/ZJYFtAhPAJEz/YIkmt7XWdo7h4ImDeO/yNTRQw8rlq7InVTN1SaNlZ0PUkP25nTSGGWri+Deew9TXn4W3fbtNNwPmXNRCHPVIir0nT2L2zbeRL2cYrPeQM4VLqlGkVIWZT7FUiCW3YS5zokg1jLBQjpMvIjWjifJUeWzNQQVPXL4tPRB3ZpmxxJmu3DYrbKE9JJ5GNDmJE9//LsYfeQgYG4LxfDlNc/BSprto4sCzX8J7564g7ydI2l3Zs6cyhUDIcShus6deeQkm6aHeamL3sT2o75mAamog5AJDHyTFTICjvBRoejhw4gjaH19CvDLA4oUZ7FlYQe2EFCjkmvMpoxIvCNvcjlantd2Vu5DOB1zZ4F7I0Mfovl0Y27cbq7dvIVnbQHv2JtCNgTrzTEJc2Du3FjB/5RrqCBCN7UCzVYde3QA6Ayyeu4hpqvthXQhX0VlB79oc8o02Qi9AMjKE1iMPykKApKgpUpiNNj76yT+g1u5LWtepE0cw/NhJqPEReEND4rXK1D9hWJM9qLo5hOaRI5h+4DhufHoTtTjH/IVPcOT2AkYeOCyLSFrUWuahTWVBZSNN0Tq0F7u+/k0MPfAA0BoCmHJGwLEpjZizlntrA+aTZY5UT0l+04j4bLaxeOETfPjDv0N8awUT27djz7NP4egffh9Djz8MtBgxWNt0TUz3Uua1ZcRi3meySPGP/e5VQ+FeHQIOAYfAfYaAI5r32YC67jgEPk8IVIbV3W36x8jl1veVkc/4IEohHx6FmtomqQ/6TE2x1kHRTdCk+13ho58MsO/APkT76S7piWEY+R76km+PIYUyLNyYQ9rriEoxMTqCIQYdWV2zhI5BbgZ2vx2NeGwuYyQ12DE0hqyYRTdOkHbasq+T0WvR6yFdW0VnbRUtk6M5MoKxg0csyTQBCt+H5PijnU9S4tnARt1BR9JekJwaliM5CQ0Mcy7STZP5/agskhAwaEghmoqk1CDhFpU0B+hOzGgsqSYR1QD7Ii61EoFI0qqQYCck2bUA0489hOHjR2BGhpDX66Lyae3BM54krmeqCpLNgsF1mNNRUjkY7Dp6FFOPPyYBe4yogTVRCQ1doKX9GQadDlZv3sRQkaHWirBtahvQ3YS6BfjNERgGNiI7y9uAWoe3tIbxiW0IoSQVze3ZOQlmJFFmqKRRmc0LNFrDyPuZkLfxY4egh6gEU9atla7FFlfCW9+/HxmD2yQF6jqAJ0STRJDkmapS5apIIp8gV7lVLalcqhBKBULooTMYlYP5IakZS+qakhBwnyyJmf2Go0rFnbIgx4n/KaSehhodxviDJ4Bt4zCBRs68mJ4HU6SIogg6qmFo127ExqBZZ/qPHFhZASbHbaAr5h/tJ5i/MoMxT2E4T3FkxzZ4aQasbQDYQO4bZBEV+9wqoMtLaDUbQoZq2sfGwhLi3sAGneEUlAA7GXxNV1+6XnswPp82wrOwayp5HvGyRJOLKcPTOzBycB+WPvwIxaAPc3MBuLUAjFAp9JENBmgvzGO1s4Ftw03Uju+HbtWx8Zu3oEyOuZlPMZ3kNpqOUkizHNfPnoHPyM2hxtie3cDERKkgM0hOCvQ2ceviJ2hstAWvIycfhTc+Lsqw5PH0fbkfYlOgoZjfk9Mhxe4Tx7D02rtIF1dg+h2bDomRe03Nuq9yXqexBPbpw8fek49i7KFHoEbGkDO9jfKgWLb16Zd5oxl4jHOHXgNxgtAohBubWH7lF7hy5ixw/TZGmiOYfvpJ7HvxD9B67EGkraYECyYhlSjXnBz8sTNUMm22lvJXYevnzr1xCDgEHAL3OwKOaN7vI+z65xD4PCAgBtd/uiGybakU5mQ7E3mT9lFsn8LBP/lnmNrWQsqQmKtrWD91Bu1T58S9boVufX/9Izyzcwqj4xOiOFKFqtFtjWSuSBHHG+j3V9FSMW5dm8HsX/0l+q/vwCAcgk5r0D0D4zHaawI/a6O+sQp/bk4a28sztGkwRqElWBILJEHcbWOIwXqadTQnaHwzPUYoRqtH+9IwabyCYiTTPEPoB5KLMzUZanRz1Qx2BDRYbi+Hp+xuVStTWoOfKV/4oHDFdB6SsoV5O8V+pUtmSRZE7eQeMCVJ6619bPcX1qZ2ItixHUmtiURc9wwi1p8zZ2Nui2BUTd8XkpzmBQLlIxqdQDSxDUWtgSyoQcNDToKbZiDd87MEeXsDeb8Hv0ixtngLp994FeuXzqBnfAReCyYxyAvmXeygEQ3gr24imo+RKINYGQy4J4/7UZWHtB8jiGrA+qa49IZZgS4jkQ4NgYGWQNXXFPAlUJSRGFJ0g8RQCyYMUWQF6lEkappJc0kLQ/LENKyKeFTQoAAAIABJREFUCrNfoPByFD7Hmvgy76JVNPmRvNFQwRL9jYsDfM/RsGNAMlmtHVAs1tx3SObJoE3MdsKUGnQB9ai8a1EFY8m56Jf7kQOY+jAKP0LhUaHW0L4BEkaZLVlIoWDaHUR5gTqjw/b7mHv3fWyudbHMRYIggIl8dE0fedLHiBdgtJNhaL6L9U4bG3Ef7R7VS5Jp8a62rc8SaKVEbU/ZVoq8gVXN5QQqcAXzPfIYM9Yo+CNDqO2ZhjcyjHTQx+DGbaycu4CJA4dkvPobG1i+eR2xyZBNjKD51OPo+wrrH7wHL+khXFywUaF7dFkOkQz6uHLmIzAKsNccwqGHHgFqdXErZvdNESOPO1DJQKLqpoXC+ImHwdQ4hu6/zI3JQLAkyHyQ5HMRo95ENDkB1YqQLMTIuQjCvLtpBkNVW24lDeV7SHUB4wcIR0YRMNot3WT5G0NXWcq05f1GrIQo8v7IC0SMXp3mWL1yDYNrN2BWVjERNVHfvRsHv/MtNB88jrxZx4DReAsj9xQnBtPicCbZe9qq4pwr7uEQcAg4BL5ICDii+UUabddXh8DnEAEx5St7jDoCVU0KYcpDW9cw+tw3EO7fRnYjxLH72KNo738LZ378CvK1TQwuXMOVn/wSx3fuRWNvJEpfUEgyTqC3AZWuwZhN1CKDzZXrmN+4jm5rDLFqQcch/IEGXTtNLRPXxDDpYHSQoFUL0R+pIR1pWrdNGrbMYdjtIKCja57ArwVoDjHwh1XQhJiwL0zTkht6rzJALhgVNiYl4b5RBvzRntjJacY6bSoGcUmkHV2KKaKdlVhI/r48kxQPBYx41zLtQiHpJkhqrRFOUuXRDZTpXpjqhESOHpe53VsXaA2P2DBdh8d9eVT/CnhaIQgCBNyvGqfIGF3Tq8H4dRjFDId0RaYtTgOa/DBH0e/Cy2N4aYw8TXH9zCncuhiib3yEaQgdhJbUZDHqYBqJAIq8ariJFZWisYN7Lj3ZHyrKJ/MU5gZxnGLc89GoBcipKCWMOqxAF1URnYx1P9a1SAx5ugB7yoPPCL1U/zJSJiPnUqGk+yPHtwgYRZZCNtNVcIJJzgpRycixiBmBLNc7Kh5pqULJK7fmKu+jcs6yKEJahHS9ZKAgg9zXyEraKsSeaTYKDzqoyTbQQdaFIrGuc9NthswP4EcNSUFTxImk7KGr9+rMNSws93GbRF+HiBoN5EWKdNBBFwYdL4RuD1DzI/QaNQS7dsg+XO4D5p5A2WNKFVOIpoahyuprGHpN+9JpS9pyLoqUEi4XMJoNDB/Yh6G9u9BdWkJ7cQnzFy5i4oWvyh7Z7uIili5fFvVXj49IoCJGbg53bkd3fgX50iJwaQaI6kCQoLg2h86tm2iYAuHICPY98qhVqLmHNytQqAz9tMukt8i4OFNrwBsbA4iRx/lHcdaOjSYx5tjRhdtohNsnsZH0QM93j6sAa0tAtwNwn6q4Titq2Uh8I4STOUtB0u4xiJZXCdOiplNkZj28h8RHmBVTheU233odo1ENxcoaUqYH2liT/KbNRw4L0Q0Cm8PVKC2knnOF+3clH0wJ7efw59c1ySHgEHAI/BdFwBHN/6LwusIdAg6B/08IUC0i9xE7XsPUWkBrDGDglgaJUY7m4yNoDE+h9skc0tPn4PcK3Pj1e9j77HNobN8mCoooVhkjRNIllJIg9+fl2LZ9Erv37UHcGkffDCHIm/BTKl5AHtDltAvfS1CnvqM9TE7vxMQTT4gKJq6qSQKdxgiZOsVkCL0CASlJmkLX60Ie+VECbdINNPCgCrr8FTYlBHxkSQEhwgxYUxhwT5jxxaKVfZUSnIWFWGFKusJos2KEU30kQWTAH75S2CHJpYcor8lyqCxH4PmSNkTYFmP9FAo+Q9pQGSWxJTGjkc1ruHeMe+TYBxJQnkumkjGqqgePrpI0mbXEJYJKqYsZeIEHXxnucsTIUB0Hjh3CrvERqOYo8g4T1QOGAWyKAmFsEIUNtJMcWbOG0bqHXScfALZPyP5BUa1ikm6NelgT8kRlmgY9CQGNdiGCpJDygbJcahVEKlA8xmAvXgAlKmoqLqI2u4R1R6aSSUKYGyN7X+0sI25sKIlLAc20G9I7q1RyVKqAyTwu58qE5iS1TyG1KJCR1DPIjrK7KHPDucH9oJlgLPt2ZY8saU+KlLlQwSg6nlVZ4ww6iNDp9jBJF+wsx+FDhzG99zAO1UZhVCgLBnSx5sixFs/XspiQexr9MMDoicPyZBAoEh5m1PA8X1xXudjANmQMJ2VE27R9Y8AacmzBgadwD2wdQ4cOYvjIYdz6+Ky4yvZv3wZWloEwQv/2PNbmrsGHQTg+JqlHaoMupg4dwiwjHc/fxu133sHUgSMoshjxubOSuqXWbKC5fRvq+/fZ6MxUlvNY1Ph+0hcXYPaLBFBWNmp1JKU7M1VH8XymSs0JT6wZhVprRPVQgmSFYQDNeeFbFdMOFRdN6I3OO6RAwQWN8n7xOCfIJalEco2HkYRLZZOLIH4UwgsCZOkA4eQEdh87Lvfc1dk5JFRtX38D9b07MT72PIKanTkM9GXdq3lzctJIZTKr7Py5M4ukfe6PQ8Ah4BC4jxFwRPM+HlzXNYfAf1UIiLFv1SYqTjT8atx/yAA5YiOHNkJqvQa1S+PYt34fp2duIltYRDK/iLX338fI8UMIGOCDzJEWZJ1K6DgKPYS+SbBt+iD2fve70PsPI/NHoAu6zzJoC6NCZsgxgPYzeFSlWMDosOREZFATSXtRC6EiH3VlMEJX1fY60u4aooLxYZnbUgkZIDmhK2UiwoglZYMiRcj9kTTkswTwItkjaIoCvh+gG/fQZJRLnUF7kaihNKyL0EAzoWgEJJRIqXgGVGN8IV8S+ZR+hSSRVPOoAgpBopJFFLXwVCWk234nqRZknyfxFlNb1FIlrrMa9OqUsiRBvVUxWS7LINOTIDtMNUFRkAb6UAsHv/Is0oePQY9PCnegmy1TV4g6xai+8BjCRiLhZr7B2K5dSJoNYXJK8iiSWfsISIipcsWZ2OjsK4kBvVLZG04TYdbWhxhZngr23BtYyeHcUSm7KslAybYYgEkxOqyHLMmR83jkC/HkNeQtFgermonrrBws+SQlLcsapAqJVsP6xOGUixmFvV6O8VySTI8BgzkTLYuzbJh6NLTOYYqkzAlLd0srmfrjk0iVh4HyEAQK2598DN5Xv4lsfDvgN3il5G31TCokUUluRoXUV8iDEOHYMNT0JOIwlLnhk/waDb/QCHK6hIocLQsfBJSu3MSerrzsHokYoxmTXPnbJlDbPQ3daMJsbKC/soi1q5cwRpfxm9ehul00GzVs27MXavtONJIB9jz4MG69dQq63cbNDz/C1He+j6TfwZUP3oEmMW40cfSJJ4DREdlbzIUWEjNdBGjWmwjZb84ptjseAHGMLPMRkaBzAYVzkK7WTM/D+y300dvYRBMekswg5fxkbtgG3WKF2tsFConQzHmeAVpWXuyrpvpt3VpJMIVkMqAWF2M8I4r8wFdyH/ebdURPPYbWxDCyv/spkqVNrJ7/FDdefQPju3dBH9yDgHtKZU8oF5bsbxDVYy40kebaujiLHdn8r+r/Ta6xDgGHwH82Ao5o/mdD5y50CDgE/n8jIEad5QeWQVRqE20xOqIyqEdCucoqfIYRQBgAp44dJx/G0ME92OiuI+i1Mff2W9j2zKMYnZ4CmpFN+eEPI6xPIisakkDdNMZhpvYgevAh6NoIlG7AVyzTRnilZKKEzNH1kvUrSdEgaoihguTBa9QRKAU/HiDq9xGvLkMyIcY96JDRWa3S6AUaWWEQBlRN6B4oVBR5VsCjYtgakbyFVBDJF+J+D01lGAdIcjgG3COmPBRUxNgmKj38nm6heSHug3QjtIGCSDKFKVjCkNO9luqfJRASAVeUzHJvm+w+LN8bxsIld6s+l2yOxjmVHtlvSuYsDM9mAGHwFCo9IbVdkuoGMDyO2oMPWhLh1yQ9jUhl3GNHKqg9xoG1e0FJtOmGmGv4XmgDsUjeQbrPci8mszUyLpJXEjvuYaWhTrdEcm1ruBM4RvMVUimkmmRTNskK5pyf0n7uxcu1KLQR3YvpI5nFVhWV/IjVfjpVCpUcdxuXSdy4Zdcme0qkiJMl5xxREgiGCxIeKcdJqUtiKxGGOQZUO8mUM4FEMwUPGyeuzeLAjILKdNRAbWQC/X4PXmDQ9jXGjx9ENLUbJqrD9yMJtqNJaKluy9gViEhq2AqlMGCwH6p/5dxlcwM/RKRDBAVzW+ZlehQ7pxgLmQScDeN6BVtDF2kvqmF49x6MTU9hfX0DneVl3P70AoaHhpDNXEZkCoxNTmDv8RNAswW/VsPwnv1o1BqobQ6Qzt8G5maRmhQL1y4j537ORg07H38UaNZEYWQEZM+nCh2hUWui1+lh1A9hsgLtm7cw2u0inGihyFNpo/RXAhxxmLlvOUNvaRXFZg/h/8vemwZZcl1VoyuHO9VcXV3V3dXzPEjqQbNaEpJsI3kCZGMbCD+b4QE2Hy8c4Rfwgx/wgyCCACIYTDh4mAA++ODZH2EDsmXJw7OFbcmtyZqlbrV67laP1TXXnTPzxdrnnHuzbldLLaRWd93aKWVl5skz7LNO3uyzcu+zd51hWxIkXZ1AIWdD9/CZNY+ET40uv9zIwl2OZV2w5Fpq8nzzDghk3Om52Qt91PwERS8xYYg688Dq5ehdvQzDY+M4/PAPRfN+6gd7UOjtwsZPfRxBB98zHH+aBNN1tiexWGtxDXn5mEBbevN7EMH0jyKgCCgCbY4A/y3XTRFQBBSBK4KA0RPZYAsyh6cpnLAeG6aDi6a4yzzaTPJJKDoLwNJ+rL7rBkRDOfhhBeOHXsHUvucQj59m/AUgR2+yMXr6e9CZyyGeKaF47hxqE2Ny38tHiDpiVLoSVLqAWpeHqCtA0hEAOa6jJKGgR0yzxzEnjQHiQgdqYSAmr/HUDEb2HwRmihIXk6TY86mBrYlmJhPHCEgmikUUZA2h0WogyEqIDC/ykKO2qVRD5fSIIXa1qhg4imqEprqVGnBmFLXXjqCzWEOuWENXEsArVkV7KkyPDIETaTHnJNc0pDah7Si1VcSPRId7Yw2oCbhgNIVGk8eu1oMEMRPlhlk/SqcoMizEhGvlchkEfb3IDC1BNdOBUsnH0ddOAX4XkO9F3NGPetcA0LUYsZ9DiTw1l0VdzAp9ZMI8ogq9oWYMT3bmhTRrFZ5Ic1h6dyW/JvtxRJDkVyJhGg0jFZbkcR5jgjK0C8kEqZIxLeUaTVmPmYQIPGqJSQEChCTvtTJ80XbWkERVoZIxP3zI40ezYWoACQPHMDIOnkRNzhwUko8jCanolAUf/ogoMz0Fi8aNBJN8jn8Cmj2TxJm6M2TMstbQaFw9fpAoVzC4ZAXqyKESBzh+/DQieqOlV9tcVrzFVnMeSp0hpgs+SvkAMUN4kKQnDOeSY+9s/EaLHz8QkEhyxSZDA/HnRG1zsYiwXkfI9Zt2vS+fE55To0gHUf2rVmNg1Rox8a5NTGL68FEUDxzC+P798lyHA4vQvXUzkM+Lc5/MwCD6h4dF3mRqEsUXngeOHEI8PSVel4Mlg/DWr5Hnp8YPBCTFBJIa7UweOTrpCQLk4eHg408hHp1Ahk6joiqqqEi82RrjzYY0bU+kDydeeFlCrzAWaL6/HwHDEFGjS+dXdA4UJcjQIzFD8/A5prMkjj+dTcX1xvgynWbXXC/Mx5EmuSTu8vOnYymJSdqFjk0bsP4D92LFTbvAp6Z2ZgTHHnkMB77zCDAyDq9asx8RON5m+KWP8oTx2dFNEVAEFIGFg4ASzYUz1tpTReDKIfAG8yvxzmrJpZA7R2Z8hvEAEq6pCulkhRo6Tko9E9JjUQ+W3nUjKoMd8LJ1dCRFjLzwNEqnjyKpTQLZKpCP0Tc8gO6BHmT8COMnjmLmyEFg4hzCqIhQjDmr8AKa1FWAaAZebQZetQS/WjXrEbnusRqJgxAv14Fs/yIUhpejms1iZmoGE68dBo6/bsxha0UhsQFqCGdmkClXEY1PYnTfAUwePYGgbkwqOQP1wizynZ3oyubRESU49sSzSCaLCKp1BOUyQNNKetAcmQCe3Ye9X3sIhbEZdNc85GV5YgiPge6pnCEhltkxtanUoJJYUH9oCDMJmOyGbxgyT42XBJQX8EXjSo+k1cBDRGLasPs0TpiSpI6Yazl9D1Eug87ly7B06zZM1IDJySpOvnYKtRNTQK0A1Bk6pEOOiDPw6WU3jukXBplagFwpRjYKZD0uQ6uQcxkmy+5Qm0wtU0AjWqNJFdNHPkQkguYoWkJr5kgFcY2+YahWlH/VHNUmLAGQ7UQSdCChVrMWQ0LVWK/EJBuGvJq1ejHJhqxZpA1nXYgJvZByJ4mkqLJZoklZZd0o7/DEOnCiGJ4sorX5xXGT+VhB0kfnQNJxMuvEYtDdjU3X7YKX60atHuLEkZOoHH4dyXQJKNcR1GoystTg1hM6h6LsXOpJ0lUDKgn8eiKESjynirD0mhwizmRkDWumFpl4l1Mz8EsVhPJhgw6lYvi+IVnyOwtCedbzS5fJusygGiE8cRqVF15G8dRp5KiJ7O0DliwxXpkLeeQHBzG0aTMN0FGfnsG5p59C+fkXkKHsuTwGtm4CBvtFVUyxxYq8niCqJbIOe8ttt2GSIMd1nNz7CuJjJ4DRcYQJP3TE8EnUUYNXYyiYGXEydPKFl1AtVVAKQizffh06lwzJbyHkeInSluNmLBP48cB8vDDaemLn8xuA+Q5gvq1ECWhCzi8exiSammMOJhcp54DefnRtvw6rP3wvutavlLXK0ZkRHH74exjZ8xQwMwNUS+aDDp/YOokuPwSYZ9o+DXpQBBQBRWBBIMDphG6KgCKgCFwWBBqT8lTtszinkCPHk0xuzg1lXsd1mlEIj+aydJxDczar5ZLIdLk8wlUr0b9hHWpHD6MziXHulVew4sB+0TrUChkE2QSLrr8OZ554ClPnTqI8M4n9P3oUmaEBDN6cIBhYiqCD68UyiGlSR3JZqSOanMHE2fOIsjksWrUGfk8PfJrDBVn0rVyDpTffgn1Hj6Kbyssjx3Ho6w9hFe5DuHKpTNi9IAfMxCidHsFrLz2P1w7sx9IdO3D7/SuNdpET3q4ChjaswfTjz6E3zOLci3tR3/MTZHasAwZ6aEsLTJQx/ezLOP3wdzD6wj5kp8vCdMaLJaO9FFyNllGIpuUuYgwrMTvI1EncSGRiIXCyVrFBikiMDPvkVL5G7Rb9sNAjqaxbNQSV+k46TIk42aZ2MgjQvXw5VtxwPU7teQ710RlUjo1g/79/FxuRQ3Ytnb2YybmPGnIgUSrDL3mozZRw5txprNi2BRgMkQnpbEjsZOWDQp0eW6mFDUKE4g7Y9EG6SrNku1ZTgCDPjiIJmVIPPHAX50ggSTXed70gA/QvRjFDs+Ys8lEd04ePoHjgADoYgiQbosa4q92d8DsXGY2tWLWSoJDcGEJkPOdIpwypF0+uJMbihkmMeR3RpGzUF/N5NWxH1K6SVvNCwbnOvpE2ktiIGjeA31HAqrvvwvOPPIKkUkdtoozn/v0h3NQzhOz6GF4hQKabDmr4GEVm7e1UHeWRKYydGUX/mtXIDQ8ikzOEShxYMZRJVw7lfIB6LiOOnioHj6By4Chymzv4ZQF+JpbYn/yok2GYFuLCMejsQtfqVehdPozo6DF4R0+jdL6IzEwVXYMDGFi1GmCYGTrv4S+kfwC9G7eg7D8k8TdnDryGeqFDPowUwzxW7bjOrNtFgozH8DMM10OiCQQ9/djw0Z/Bi089Ce/0CMK6j+f+499xTRChcOMu5As5w/I5IKU6pve+igMPPoTKyDlU4io6li7GsjtvQ354qbxQPJquyjeJWBxARUL2yOmNt1oh+fJhQL4Y8GEVQiqF+JDZ9c5OuU+yKr+VsAPeYA59u2/C2nPnsP9/fhnV0XF4R45j39cfxLVLBtB34w2AX2VsHeN5OqJxtY1V2vxUkXor6qkioAgoAu2JgBLN9hxX7ZUiMG8QMKSS7NKYftJ8kVolahp8E/RPJo5U3PmhB49eJ7kUj0HbC73YevNuvPL08yiPHUNldBrjz+9F7823Iu7ugZcpoGPDOqx870/hzNEDKB4ronLoKOpffRArD57GovVb0DG0DLneLkRJDVOjY5g4dRbjJ0/j1JnT6Fy/Gjd85H709PcarzdJiMLQMJbcfAsOPf8sJg4elTVi0w99G9MT4+i/biM6GdMv8jB1ZgqnXtmPQ0cPY4zaok7a59bERJAOYYKOAFvfsxt7nnsWfrmE7EwOe//5y+i6aSt6tm7ATKmGs4dOoPj8Pow+8wJW0DtpNsREaQoZeuHlOj2aZgr3MSSd3JKOOEncZGJMjZoozIxzI5JJzpdDalf4hAgZJTvlRJjaNqOd49JPTrg5FhHXhdI0lSahGa6nNOm5/l4Mbt+KVTu34tj39iA+dwZT3/4+qjMz6N1+DfoX96O3t0ec3lSnxzD2+kmMn5/GyLkRnCpN4Bf+r88C3QUgl4EfMKaiIZuVwENFiCYTSNDIbM2pmPba8KHSA1FMJVzJi6pvtLFmXaoHrl+VNZ6EptCFwtJhTBU6kYyex6lnnkemdxGWvn4G1TDA6akx9G3dgtU370bckZO+8rkMSbi5blfIrSyetfpUevo1ppUk56FdH2mYkKzQlJWbJP8MHSP2wFS7xiTzGZTplEjWBtNWlZ5+GceVZsR15K/dilW7b8aBh78rHzxOPvUCno//Bf3bt6J31RB61yyF12W06ZMj45g5cR7nT5zF4VNncPvP/QzWLLoTYa6Aer1uvCWTaPYWgKE+MbX1ywHOv/IqDj7wLfRfP4JSoQdnZkoYXL8Sa7dvQ9DbbRxfEbeODizatBFDmzbg2KHDqI2MY2psRhwfhYVOrNh6jay15bPjUcPZ1YvMqrUIBxYjPnkcwdQEyhPjCPKdCLt7MbhpozFJp1OsBBJLNZfNIAnzYv7becN2DOzejokfPAZvpoTXHv2BRGGp/eRFLF23DgNDg5icnMDUmXM4/czTeP2lFyT8zUzOw4b37EbvjTvg9/eJ2a+EzLHOmThGVXovFu7p1PqGHJsHj8+7tQrge4hEk+bSfA9Rmy13mUZQQiCfQ7hsCEN378bU6TM49LWvw5uYwKkXXoT3nYexa8UAOlathocC6N6Kzy/D85hVxvPm1ayCKgKKgCLwthFQovm2IdQKFAFF4L+LgCgcrDEkJ3OiaCPFsVaIsr5Q5oN1E2Ij4AQ1QCCxM/j66sDSzdfjteGNOH1kBFnPx6GfHELvXaexaMk6JPks4lyAodt3Y9Poabz40ANgmIYz+w6ifGIciwf3It/Tj2xXQRzwzIyPY+TsWZyZmcC5MMGaHmrXymZtI5ku4z4WOtG/5Rps/bmP4OWv/SeKB44hHpvCke8/ivPPPYeOvk6USiWUpis4OzGJmVyA/IplWLdhtXgcrTEWZz5BnPOx/KdvxapnH8fR7+9BV1TGsZ88i9zhV9G9YgmmgiwOnzyNqFrDwEAegzffiCOPPoLRkVFU6IE2F3BZnjhuESUJ+UzACbXZ6WlUYgbShY415ySu4kaHc2pJs0AnRuPCNaimLmGaMuFOEg9VhmGJExT8UDSIYoqYDdG5bgk23X8XavUpnHj6RQTjr+PVh7+O3mcfx8DQAPq6CsgEPiYmxnFudBznpko4V68iGuxCtTKNLDWJXDvHtXSc3JMQeAlm6KXTI4H00MGHRIgcdaOeEGk+EhmSG9G8haIBrQV03kLyR6c/XI/nS3xTeTazOay89loUH9+D+uh5eGMTOPb9H2LkuVdQy+dwpFzE5g/WsHrbDUCuU3ClGW7MmJtxDV5itKPEgk6ixIyScT19xmEMEHuRwZpaM4/hbOhj1TiFErIpwJM0h6gEOYTUMIdZ47DKxYWkj5juvMQt3fZLPwfEZbzyze+hr1zHqcf2YPzlF9E9PIDC8sXyXJdmSpg8P4HJ85M4P1PBSOBj1127hdh7dFEsJAtIsh68gW4sv3E7Rl5+AVOHRoFzIzj+wz04s/cYzocFHCyVcOOH3od169fBo4aS3p4pczaDwsrl6Ni4FvUf5VCrlzBTr6IYhsgO9KFr3WpZI0oNNEOSBIUCaGq75NprMH7udVkrW46qKHcuwtJrtiG7eLGY4Zr1z8aZkU/nODRJjXzQCmH7L/wMjmXr2P+t/w/5YozXn3wa0z9+ETMr1mJ62VKcOnkMlZlxTE2OoJaUkFnUjQ133IH1P3cfcquXo5bPIghDiEaTX6QyAMO/VPkRJQhRz1AdnEUcZkxsVq7llA8JxmKCYyyKaI49P7AwXI0f2/W/9psBP94EGXSuXoUN938ItddP4MSepyS+6SuP/QD5VQPY9YmPwe8ZBGjenuuU35X4I+Jv77/7wtRyioAioAjMMwSUaM6zAVNxFYH5gwCnU8ISjMizZlfpCzvzouYnDFDJZVAu5EDPnHF3DkmBE3qafkYSIsF6f7GEKAt/YAUGr9+No4fOYGZ0EmfOzmDN6RkMVDKiLaN31GTZUqy7731IshGO/PhxTL5yBLWxKs5OHkdUPyYWjGIymMQoxhXkBrqx8dr1WLtrGzp6GB+zKgTAoxbL95Ffthxr7r4bYRTj2A8ex7kX9wGVKqaPn8HUMcZJjJBkcsj1dKF/63oM3nYTtt5+E1AIxVSw7EcIGdZhxSC2ffIjyOTzePnbT6CXXlanZvD6y6+hmu9A2JnH0I4t2Hj9tVh+8414/LWnMeH34mzCyXsWcT4jXFwA9hlbM0SZa0cLOWTiHCI6aZE4lFytabSWhtwbBTIn2ASShKkaZqQsnXpGYUYIk1vT5vkhspRXwp1wvEioqvAHChj4qZ3Y2RMgv7QHo8+/htEjJ1A+XcTrr7+GU1FN+jZVraOWKyDq7MatgUFQAAAgAElEQVTyDSvRf80GYHGPmMpSa8i1cDKgmRDFbAZePoSfC1HOhDYeJlfoGRPViHEyyZwlsCf7WEA5n0OZJrDUjkl/jddVY4PtA4U8hq7dhuSun8KJ4jQmzoxg6vwozp8bE4wYukL83JIkSrwWq0GVtYH0IOsIOU1izTPNtar1MJT4lWQO1WwOIIkRxzuU12mWjUaMppM035zO5VCj/jhHgkWc5ROL/FbqGQ9+4KNj+0bs8j+OfCGPiSdewtTBo6iOjmJ0chTl/fsZ4lS0tVHswc8VsGRwCGuu2Yilm9cjyAZiBi7xHH0fVTq86cpjya3XY/2JY3ilPIXpUydRHp9CdfwIxjJ5JN3dyIkFgQ2Tw0WLJM00K+jtQrBuJZKVS3E+OQWUKoh7ezC8aS2SgT4TzzUguebv10dmUR+W7b4J+x9/BF1sP5/H5OIe3HTXHaL9JKlM6HgnEyKTzYqyVz5rhKGEaFl28y70dpDsxRh7eh9Kx8bRG3eg+OpxnDhwEtWoiKpfQdfiTnQPDWLZHTdiy333orB1K5KublTgk2aLAyY+prQCKIY+JoNA1nuXOzoQ53OI6DWZaeKciWNkvc9yePkjyISoZDOYyoXIxQmqhWwjJE4tShAyZmtnJ7rXrcHm+z+M4sw0DhzYh/HpSTzz+B6suOl6LLlukXkFch2yjdnJ6tNvPxFV/ygCioAi0KYIKNFs04HVbikCVx6B1HTKnbqj2EkaD6wSxY6zL5pL5vMYvuduVJYNy2Q02LIJfn+nrI2kP02GAjEzUy6c44SQZoE9WHnP3Sjl8ybUQRiiZ8t6oCODIE/PnvQQ6sFfugwbP/RzWLT5Wpx5cT+qZ6eA6Qoq0zMSizHH9Wv5HOJ8FvnhxRi6bhN6N61B0NVnnIGgzqAVSNhmNovCsiXY8KEPYPH6TTj0zAsIJ6eQjI2hUpoSByF+Vw+wbAhLd2zD8PXbAXrUzGeRRQbFchVBWEASdqB3583Y2bsC9eEtyE6WEJZLKJXLSDo64S8bwopd24RA+JkA6z/6CZQmx7AKAXrWrJEQDOINiLgypEVXNza95x4sW7cBgZdBz85tQE+nkGPxvipQGNyJCR0Eib/ZjgKW3nQDruVkO46wdPNGwdVjrE54yPo0QyUJk9WfxqJVtIw5eH396Ll+F3YuWY6zz+/DucPH4RdL4t23Xi6L1qiv0IWwpx/+wCIMbliLgbWrkF0+bDV6MTxiSo1mPovrP/FRhDNFMcXMb14PryMnE38JuYEIWYbeEO8sCdDThfUffD8Wn96BKBOgf8sWeAWaYXJ+bxijrJMMPWSXLcHKD78f/kAfzh08hP5SBbU4QZLNIFwyhNW7bwQ6M/B8GhgTULrc4Rl1p6GYDAtJMIpX0fb1bFiHnR//iHhv7V+6FBhYZLTe5Kn0OGy1Y2J7mQ2RWbUcu37hIwjqdXj5HECT7Ky1BY7pBolxLc361Oz69djxf/wSxnfsx+FnXkBQKiOsVDBdKaKWxMhn8/A6OpFbtAidy5aib8sGdF+zGV4uI6Sc6zMZUkfMqMMA2eFlWPPhD8IfGsRZktXJEip1D4Od3YLNqht3SvxJw4JINGOAZredWSzafg02/sLHUDl2AkktQnbRIgxdvwvo67QxIo15ceJHCAa6sHj3jVh/5hPoK07J+s3+oWEsvuUmoKNLPmpwXSbbCUMfMddSkqTSObLPdZjd6Np6PW75PwdxYtdenNt/Armij2hiBnGpjM7eAia8GjqHF6Fv7TAGb9iBcGgx0NWNmCa4/EDF9d38HkKy3NmJNXfsRtcgY5FmMLBrO9DVIY6PwsaHMBvGh1pcokd5Orqx+PobcC1/q1GEJRs3Aot7xbqBJvwMCZPQrLunC5037sImkv99+1BjbM7+HsTZXoDm/bmcdSZkunnl38sqgSKgCCgC7x4CXiKzj3evQW1JEVAEFg4Cb/j13oaSEKJJSLjesFJDQpJVKgn5SwZ64OeyRnvAhYPWeYiYhFITxnlhPYJfqcCrVg0JpUMYhifJhsackSaWErbAeJJkflTo+CdCNFWUNWTVcgXZXBaF/j74jMOXCYEs62B4EOPYhZTM6CJcGBF6ooklhIIXJUhmSqiPjaE0PSMObgqLFgOL+iAB2+kNNWCMPtGbCImRmIBUnzHIPMkF1VQTk6hPTCKK6ibUA4kInbNQw8K1keUikmodXhjCL3QZb59CpMlsqIqsIymWEJfLEJJYKCDO0pFSbLy5Cp8PEDotmmgSDWcX7ItFJLUaPIYhydOEMivr/Ii3rMNzsTglSmUdSUSz0sh4h63Qa6/11jldRG10FNUSvW/SyU03Onr7AWLLmI+Ekt6EKTNJI81IKQvDTlQrSLi+kMwjl4OXz4rWSTRm8pyQFCTw6DWWY1mPkNSqIjMoM2N8UvspshJz33gRrVUBlqlVkczMoDQxjmq9hmxHAblFNiwG5RCTVpoQm5iaNBmmiBSZG58Gkl6PYTIqFXF6Qw2dn8nCy2aFLItJbWIdF3E9Ik2BuT6XsR8rFUTliqxVDAod0kdbsTxr0hAbZN9qdcTVmng99sp1eT6mpifFuU1HZxcyvT3wOjsMuSVO4siH4Upo+Wo1wPw8kiTIVOrw+KxR7mIRpfEJlCtVZGju2teHgCGD+LFHlsaS7AZiepzwd0ns+EzNlI2GjiS5kJdnQ6KY+pZ4SXxQDx7Hkc8SvSdzHPisMsZkGIpmzyBJ821jom0c7cSIqX1lEp8FMafmguMEmC4hmphAbXoKuc48vL4eiZVpNI/sd4g6vS275zSWT0LC77kumu8TkYVaeadJzmTgWSdG4vVXQuhQMr61jOdhPi9JuYSkXjVjm+tEFBiT28Az5JR4JgwXU+N4Mb4t19tS+2k13PJBRyzERctNX9CNd54DQo+KgCKgCLQpAko023RgtVuKwNWAwEWJJm9wE82UO6WzDRv3kPzRi1EJGFbEF5caXp1ESgqJ11PxE8QJf8JQGTE8akk4SeT6N5raymSbZonG7FHICTVMTKFdIyezXGsV1SUmJjVAvsQkpImpMeUUXzkszv+o5ZAzqkpMyARKQytOQ5KMUxc6DBFS4ofipJIkL+Y6MBpnmht0u2Mdi5BkcurJ+H10FhMZT5yow6cGkSSXXaJmCQEirm+kN0xyT5q3skLbb65XlK7STI8TfWpxwwACWxIZ4kV5PWonzQSfE2xql8QTLSfEUSyaZOZh3aw6JpsPMtJ/EiyLsjiEcWFBxLQ0jkQcnzhxMVrVEE9Z60iyRbNWaUMGUdb0CXQkPsSH+LMsHRAx3AfHh9e+L8RK+iNmjoYLcdwFHHmGCJIhRxTXDK1JY98knmKdur1EsnH9YkQSQRImhINjzgeDGJIIy8JgcL0eMXC95nNBJzOEXUrQjJekmCa2XiBmryRoYuYr/TAfAJifsTiJE7/t1kl4qZAXE2UPMU1J5eEw6wTlAWK7rJ8fSSJqR/lAm0dcFhWS8nI8SNbl8aAG0zynxEBwkFb4PCYII3pxZnn7ocQ6e7JZzHpWGXPixvWvHBPRd4sc4hSH7fMZsR9O2O86ybP8NjzE7KOMI9fJJhLn1cSlpFk3n0XKzGdPfghm7TAFEJkY1aSOkOsr5VVAFGmJTPvXBHG1DL9eNaSaHxOIJVlxEIrmtiY/FOvpl+SWY0vyyN8Uf+Nx3TxjjEnKtb1WDmmaOMu4st8cI2o1rZgsn0TGCy+9X3NNrVj7mw8ejaeDsCX8nbuPSayAJt4cE3sUisk8pv+Cvf5RBBQBRaCNEVDT2TYeXO2aInClEXjT6ZTM5uxEk8KSSNjJOCesIQkdJ2VCOoQlSR6SSONQlfepLUitr2J5ccbCaZ5Zl8g85D6cAnKXST21H2QRdGJCE1vKInPw2JSTeiTJaE7lmjNt2yuRndouTmnpAZYkJhTCIRNnclWJj2jXr1HjwqJkACIDizCkAjVkpt/UVFJL41ENSh6FqOFB1ucEmOsPhSPaUCOiFTayy/SVBIHaSK49I9EhNuyTJR6sUdYKNqa6xIqCkqz4tiz/WWCfEsQRSR8n3rbPkm65reiL2Cr7wVqF2RsOxBpI2nmk5odDKDzJeLH1SWJIyCRkihHQTL65Zo7rcYmVIfscF4FS8JcZvvAtn2SADciR8soQyDib/MYxEJ8Qap+EiFstOgl4KOsjBWZTvwhLgtkkmVKnPBam3Vg0cEZbJniRtBA3O4Y0VTUEz3j3NXRHEJJnTkwyyWxoKpzQ/41xRMOPKjRNZqLkkSE1z7HjvvwIYMZFVH5SngRIHgiB3rRtfhHmOTWfE+zYCQmNBHNiLVpxti/fKozW1shuaDXlMGNCYdgfmwcMkyNgIaYjJAk7ZMgTf3ek87wS5ahorEVUGR8T49XUyyr4ezDo2N8xSaVoJe0zxoeXG+uhhpC4cSPOREtINmUzBF7wEZ5sHng68jHhafhxhd6W3AcjYmXysLdcb0uiyXr5bJJoxvb54rNCHPmMi5NnhkcRnbkzI5fBsuXIw81z6XpJiZ2HZHlluPeH6Yn+VQQUAUWgrRFQotnWw6udUwSubgQ4eZOpIye1MvHjZNbs1OSEnMhzUifzTWoFzMyUzmA47ZaJpQvnIRNcTiTpdEVKCfkxU2DmpQbC4CEEjyliUmu0ZmbmauokEbXiOGWLmS3LrJF/WJFILqeiIeT8k4SYs3C5TfLGaI6GzNCxjqSLCCbOoZkYk4iZCb/cF1NN077vZ2StH+fAZI00vZVJL5tmPk6MrRzEyJggsgFfNLycRDO8Bkmg1GGJu6MQhlLwbjqGoJ2EExa2YxVpMklmF6htcggIQWY+0x9yQ5J3GS8zqxZMKD53hiphX9OklP1hv0QWCbNixkB6ahu1fEXqNeTJ9JXtCAkmtjIshqiJhtWSYvaBJI6mxPJsNaUXmWj26giGYVAGK6mbItthZgPibZc422dSbommkc8xgZKbRjPL0CbuUeBdB4Ic7fhLdqNhpqdckjkvJv5WY841tK5vrEA00MTS/F6MZs6QLsFcUHSNWkzkeRMlvBBGWosK1lKdeRL4EYP4MZ2k2YwVYbG/S46R/V0SEMokeaTXPDP5sl4oRtVG2cwGrLZV7lOrK1DzSobL4OceDvMcSH+F7tObryF3zExcQA+1djykDhJg1sUlpUZRbng3m3U4SzxV0y57Rg19o13Bxv7WmCi/ITZBh0q+vB/k+SI+tLag8l1+LXzO5IFuCC9100Mt9dmCG587tmWfWHlh8R3WfHXYodGDIqAIKAJti4Cazrbt0GrHFIGrHwGjpeH819EHKzNN5cisJJkmf2YyK5oV35O4idScyATXTnbN1FemymK6yHshlUeGK8kk0s6ODVNicTNbNu3IxNRmtpNZuW+bts3JwZEP8gruJBSNulw9ktNMKl1+x73cLVOZvXLtGAbdmFBzVixcw91nU4bPmHTmJ5t1myvPa8s53K3GMd2/NB9xsvN+Og8L2iFyWdhf9sd03ZJLXhlbU3tDbG+NJ9b0ELu+UFbXjj3yFrc0Vg383E0nhLu2ZUxBW2e67yQ4zOvakgbsNeVlumvQ1kmMZUxdPbasZGV5d9+dp+tmX21GadblZZp9ZiQ780kGe7R1Ncqk7zuZeWT29DjbLkibrj6br3FwWKfltHIJvhxLy5VFJha0fZAizMstVT9PndKReeXDhM3GfIb82gTimCrL/Lwvaa6MexalYtu+w0CatlpsN1YioCks33jYJq2+WYYb63Ftun7z+mKbu0eLCX40iQyhFAsIMec1HzLkubfY8GVCLTzfWOTCzqSXVZGUiiEtL/gOY2e53trJcjE5NF0RUAQUgTZBQIlmmwykdkMRmJcIyMSOEzD+b47SD5nJudkztTzUcppZKA91ZzonCgKjLXKaPVYpc3BO5sSk004WZXZn2pB5nmMv0qC0bhmdmeByTtiYS6Ymhqxf1lw5wFmPmy2LhtZqgVzfrEbQZTf6FFYuAtq1msYs0cyf3QzcmgOyvE1yXRBHNxRTNC1NEihttBAKM9lvdsD21Iljjs3bdnYvwpt7VlSXIrDxwggrfRfNtMhoNXWudlFt0eTX9tWlO5JkNWkcsIbySyTgZwM3JlYklhVtlNWCu9m6E8z1QYihSZS//EOiyf8kj7tnBtgVa/THtsO2TE4z3pTG1GHbb9y0nWpUZK7d4+WyOcLjsrGu9Fg0ru3PQEiYeeSbANjCxNs5KaI2WTTKrmIrTkN4dy2cy0ljBpVF+OjK48u20gTNlbMySB7+ES2deSaZhTU262j+1li3PHusXzrDoq4yHlnS/XZEksZvQkKAuqyOaPIbRkSvvCSbTOTvg5YApuPuKGKbJDlNY2y6NOumSXJ/HTxcV0liKR+4aHYtIy8fsJzGlVhJ01KGa8sjQzi5pliM3nnDRwYBMny4rcZVPgqlRHBN61ERUAQUgXZEQIlmO46q9kkRmCcIcMLsNjFrtNfG9MysOeN9mafKBNzOijkJ5RyVJnOc+3IBoCMebhIn6zgjcQzEOgwRZXuGMDTyp6b7vGNyGDLBMm7uzTrMPUOKHVcS+WSybcwOjRmspQ0skCI+Ji8FNDcMeTFXvMeNd/jXtGyuqC9hjdz4t07nJMxB00FiZk1oTT5Tt5XAkCOHja3b1CoXNqV5btox03MHJVtlSjPVqFB57fIbmXllUygWq/Vorii+Sa30Rj7mF/mZx5IRlmSdxJ19kXZl/aMbBZOD9brdSN6UlNcsy9Kun7PzmlRjfG3kN6VdLne0ZKbR7+aIW9dBKVSNrEYW0y5TmiWad9g3k9v0la0xn0mnPO66eTSpzfzsnfnYYEgmWZH8Ziz2bM0gYHBie2Y3BIpXLr/Ly3btiMmZKWFOBXX5bRoiSXlcnTazvTY9Zv70b0d+2zTjbjBZtkYJzdFJyTpls8+Dew6kafkdcWRJNF0LkmiuaX5uR8T11bTRqNW253rpcrtG0z2mbMTK7o3nPIQna2kNVJSe7yYx4KVZs2g1GaQmEifSvBMiRDYJ4IkjJnqAaoG52byeKQKKgCLQdgjoGs22G1LtkCIwfxDgRM5pIhy5dNfSCzubFaUh55Qy8aPnTzrtYKg/YZ8plQwncTL9Ey2gYYmcUJqJI+tklZwcpj2o2tTG9JzTZVuLaDbcdNiKI6IJ0W3Ua7SYlN3kMVNoNsQUlm9uzMGNMrm/Joe5joV4kMrNVY55BCtbh3TXytHMb/pLhybGeM+0eMFfM0+fldxEyiUzk6lZkJSO22vTuO0H5aV22fXY9lMENkSRpYiGq83mkI66UWKrhmTaMbBtiDT2Q4STzJU39THVYOrup4uS6prW3V3TU5YlRWnca6hsKYUZT96TTRwUNa7kxLRt2jW1GLhYwtxz7fHK1cc+Ohpq8HCSu3LpozyErhqpxTi1kiSxTjbPGBXEVlJ3qyEDeyN1ilBGDtemkztdWrI1KnPPcLOBplbf9ck6hLKjwLpF9yh12BYa4+cqtkfRbvJnbBZxikOwRg/YYdbG+rgbFG3AHfm5i5axUbcBSkrY8TIppndGkvTT5u42j066xgja1wzVkvIb98RvtDzJNI0lsFyNTTkChiyiQyFB23ysoEltq1K/2ZqeKQKKgCLQvgioRrN9x1Z7pgjMKwQknAUnkSkHJJyzkSxQYRlxIsk5XVQzfkEl7IPzAGId+pCdyUIxo3Ny+hXO+WTi7BBxM8lUoiQ159GSU7QVvMH9TfKyQCqLbclSFdeea99mdtW62+Q4bNMd09n/2+dibnqhZKxP2p3jlpNHbgl2JlMjvzMrleTZFVjOYMXlPVZgaI69mgOnS+vd7LpZNWt0RI2njryZ+hryur5KMlMdcWq2K72w9TVTeWakFuIgTnpm3zVXxmS4Sb5MqlTXyO60so2ESz5p9NsNjCspQruLxveARsLs9hvJduCb1y3VmButv5lm9sZz0ypOKktjjBuyS6k3KmFLW2GY0yBvxeF7IPUhgWiKgy3mc89BqnomcTxmjckb/BbSsjfPpRLbKrWbjO8aS6xWE6AmkLAzjKOb5YuKsT/9GImfIApIS/keIgX1kaFsrlNzAt5sVc8UAUVAEWgXBFSj2S4jqf1QBOY5AiSYbnPzMc7pxKkn47eLF1ogI1pCICnNGBbKYpzN8kjeKdec+PsIJKZGyyJJ18jFjk0xzMTQTRCZ396TQzrfxeqS9IY6ZHYuuwatUe3F6mP7b2ebi22k+/GmdTcBmFNEGbe57jCNE/Vm+Tdt6s0yXICFJW8cfhFhdlupR2p2zS7vBfW1fGlIlaIGXLZZZVL9niWDySp3G1kaJ6la38LpbA6daqDlueQd15Q7umac7O7o0t/isbXaSy7eonWcs5yt3LXhjuxT4NxGsyD7IGzSHl0aj9a0vvlMuJYuPr6SY9YDY1t2bfAjhlcDPMZNDZGEWdT5gvJyCBjLpR4jqUcS85aPCp9MDploVq2IUmOjQ04mPSoCioAi0L4IKNFs37HVnikCVz0Cs+a7dpJnTM6oPaCWssn1GOokpGasVDLB5KenUB0dRVKjbsGsAWxoMDiZo6OQOITHuHezGrp0WGROKBNaW6ZlkijVtqRdWLtpnJNPdqn1eGH+dzpljsn1m8qcloHTZbvA7GLlZk3Q02XNOJhpd0s6L99kXBy3k6yzsHPmmq1aQjNYRsxm5cT9UrZ0exfkdzdTlV2oFzWlnHQy3g1D4FZZL2jhognSNLVxrkutQ+quXT/tMSWqMdp15Vtbulh6a7536Jr9EGwucrxoM2kIKfOlyu1wSQMyV2HJRw05T8ze4MaMqxlECHIxvP4eBINLEAU5xAFDugRg3F8vzNKDELggk6UN2aSQNJSmEbtuioAioAgsLASUaC6s8dbeKgJXFQIklWZSZ8Ry80Y5JlQSmLh3NEUL/bp4//FrNUTjExh/+mmMvPgyvJkZeEmEOKkjYqB1O0dk3L+AcRtJOC/Sa9feXLdtNXLLTfBnzVNb5rmNutKNiaLVqKKYzDytx7nafmfT0j0xNTdktQ2lRU637Ug/PX3KdkEHTMlWXJqZXW0XypC+484bRytgWq7ZTRvT6KbqzpU0BUn0zLNl0m11LtMbHtnm7LZ4bUygzdNqaCSfW1OvYz/pVlx+SsjwFxfv/xsKY2/y+fNjiT7aoEfSmpiTGtLGrE4Cjoe7b6ogo+Maygu3NMburqvHXcvRJVrCP+veG1xQFvf7cdnmxrj523D50kfTfKu0xDm1uQsnq73lLpsEkik2VYRr5hApxMTWPWNGKc9fgFcIkRnoQnbdaiy+6Wbkh1eLVjNKPIRcoyleoA29lOobHnLtk+rkS4msp4qAIqAItDMCSjTbeXS1b4rAVYqAm9ZRPDOJNzMwN/2j0x+xhQwTMJg806NqFRkSnnIRM088iR//wz8hOfY6uqpVhFEdPjUJNoImp4hCNmjm1nD3eOlgUJoL5oQU4oJEM12d1Z9UnvQEm8muivSxVapWMmApXmu2t3UtxDAlRErklnp5h7uVyrGGWRW0FGE/GxXStNCtrLMxEFuyN7Km0tMWkkymqI2m+Wki8W0brWhJTjv2dBplKm1twzwdransqSkvXeYps8zSurFt5jLaxQsJpC0vRR3Z5TrBVOf+G6fsB/t8wWYJpe1m47Zct7QpWMif1tyNYo2TuXOwMbLGC4ljo2DLiZPDjYO7bWF18F5wdPkuPLZ0SsbL5HJt8Si55CPPhTXMSpmFh+u17ac886yJYVTo/MdDMQCm8lnktm3GtTGw7r4B+D05RH4gcTc5QmYJAM/M825rMDLNalwvFAFFQBFofwSUaLb/GGsPFYGrHgEzJTeEwgnLOW25UkM2l0Xi1RGQZMY1oFrE2NFDiM6eQm9xGn21CNmogoCmbWKgRg+QMjNH5EWIG0TH1Tz3MT2F5bmbds6de3ZqOm8rqTCOSmbnn+sq3X76frrudPqlnBtZLq0Gaf+CrGQVhran2ZIhDhdkNiI5bRqvJCO1zMxL48G5N1Nf817rddOhC6VsEoGkES6DZU14GRk50cCyTSPj7DGwdTTu2nYbjV6kX5LNte3qYAgeQa4hvEfPqbKRZLu63LGR7b9xwlA2zWKzW32zdMe6mhU0z5pl5Sw9frNuub43ExvdaybNOmv9Lbibb1bO5UsfRRspmkaTyrrFVN5mEkuGxq/WxNZNt0O8+J5pbHLTXbujQ5WVC21sEE1+XKj5AbrqMaZPnEb59VNAzBi/HGcPdWqdkwQZVmH4uFhrNGuxD5xroiGInigCioAi0L4IKNFs37HVnikCVx6B1vlbi0TG/NCELBAtpr0vnmeRoCOXE8Um40ZmQx9euS4azfGzp9CZ8ZFFFUFcgUfNpR8jYqB1MzUU7UvE4Oku7l0rsXBtmXmh4SdOPlOJmZZeZOKdnsSyWOuk2nW9oQ10dbt2mxkk5WLzT2Zrrbulqje8NCSvpbFUCWnX8RCbnpZFtH8uYVY+jp4jVa5CkdYiSk0etX/OBLG5Qo3VuSpZshXL1mvTf5qgctEuS7rpu5R2jdsjZXAkz5BPaUvKtbTcMraC0iwC0qyaycSi2bbUagmJy2c+cBiCa7BwWtK3M4asvZWmpzFyvWKaSCUdmY2xad990rnwmWqVz0jv+sW6hNnNHrfm7TnPrBhyz52znVbZWwtbZGcl82OBmMHLOBj5+WyzPpJMqb9h4m3ieAoeDhPWZsOkOFnM2PAZbqYY1CgBTe7NInGa4fsx0JEAhXoMTEyhPjIK1OpAvQ4vax4LeT5YVYuptLQjHyDsovO5Ojirt3qhCCgCikB7IKBEsz3GUXuhCMxbBDiB9ZNYwpeQPpCcyJE0RuJA+jLJa0wG83kTrL5eRSapww8SVPN5eMNDqHf1oB4GJt6m1W+alWnNmZ2bUKcnuwSvmWM2lG4KOjt1dv4589jJL+vlVJahGDgxNiEZZDZqJ7jMQUJkZ+AtR05eXTl3pCaH+RQ5VDQAACAASURBVNNHmXFLp0x9RkIzEXetNebTrZ2x/W/FhNmM1qjZQ9bO3WzN9Oa1a41H36yZdaC7YvbIcZ5ra5WDMpjNUFuuViQuTE7DZfIwL++aoytnqnhj6R0RsY3JwdTDU1NWyIS9I2mz+mbaNTI5htMk4/IcuOfhLR6NZrkpWQMSw3Hk59EcF5MvbYIsFDNVaJbYtlqHMi/T5+a26b/8vfCmraHl0PIbaLnbuKScJItpeRs37QnbdeFM3MiyD+b5NL8FpjsM2FW+W0gSzZmpSMrasCf8DZn8TGU2O7ri6tqYSftRhGBqCsG5M8jMzCBbryPP9d/MH4T2mwadlyWIuabcd3WateGNTyJsyJFN05r+VQQUAUWg7RFQotn2Q6wdVASuIAJu1tciQmuyR02VjVEoE+DYTA5Dmm0mDGkSQvL4ERBkkM0WwNOcJRq1JUPY8n//Drp33Qx0dkmZ1jZaRHiXL2VGbFQ5hoVYhmTjt1ATw8ntRY8tjIqz6Fn1vMH1HJTh8nbejJ2hKpdzFFLaoVlN8oL75dzceNqm2M1ZMrDtJsG8nJK8Yd1pGC7nULyhEO/gzTnXqaaBT3eYY2JtWCXZjhnFCchCaYpPj9SkjPZaxiyyKtIAYg87M43xJx7D0f/3n1Dct1ccj4HWFX4A1KhnDhFyzTApK6tLImnWaEQNWWX9xm7DKjvfQUi0KkVAEVAErmYElGhezaOjsikCCwgBp2wRDnWBZoIJnDRyD+TIeXNALYIH1HJZxN09QP8Akq4+ox2xCkKZRLbMPxcQrNpVRUAREARINI0OnV6sjTVAYMIf8T6Jp1c3HwhIUOMQqEdANouoswvlTAbw6RSIlJEaVNZlTLl5FpNg2o8L1GkK/W2EpPEQ+74EOdFJlz6OioAisJAQ0HfeQhpt7asiMA8RkOVOFxBFo56J4xicNIqxGid+PrWCnniqnaXAmXUxD0FQkRUBReDtI0ACSc2jvDOEChpbW0m293hfPmbZ+LuBuBYTM36avpq15PaFZD9+yZWtzgnpDGitba4x43U39agIKAKKwAJBQInmAhlo7aYi0D4IXIQ1SrK5x6VQ1FgY/YU1a2wfALQnioAi8JYRSJs70xLCrMeUD1mNusgWW/bEOFBikB6z3rOR2Zx4hlIKhxXDC0tYeRAGms5v3k/pFD1XBBQBRaCdEVCi2c6jq31TBNoKAZq2mQ4ZRQIneEaD6fm+iV8n942JrTnlX163FRDaGUVAEXirCAjpM+8CF5LGvS6kKnfhtJ7upSExfRnlhxYTjKlpHP+8YfP2fTO3NcYbltSbioAioAi0FQJKNNtqOLUzikB7ITBb23Bh30T3IN4enUkb85CAevBk0acyzAtR0xRFYAEi4F4F9ijvDvJOnlDZKZDwgxVPXCY62eLOg3Psk8JO7pmSote0LyyWNqmpvHqqCCgCisACRECJ5gIcdO2yIjCfELhAK5CaCDa0C+K8gzES6OmTpm48kGwys500zqdOq6yKgCLwziLAl4Jjfy0vFZfsMpj3h1v7bQPlJM7U1nzIMms1rYhiPkvPtUbj+c4KrrUpAoqAIjB/EVCiOX/HTiVXBNocARd1sLWbTeLo+z4S34MvHiDpjZahCpr3W0vqtSKgCCxQBNxrwR7TvDONiPlMJUE4xVQWfmBCmfBd4+pwBay201zypqOshoy6bHpUBBQBRWChIqBEc6GOvPZbEbiKETCaSCOgWSKVinPHMAIN749AvV5DFEfG46ztkzGdbU77ruKuqmiKgCJwGRDge4ObtWZt+fxEUmhCk8zVNN8for9kHazAaSqp1XQVusqFX5p1mySp8vGL5vz0SBYbc1v5DtZKUudqWNMUAUVAEWgzBJRottmAancUgfZDwGoX3lLHOKvTmd1bgkwzKwILGoGLvDMcY30jbFKmuAy5xHeP59vdlnO6zjeqRu8pAoqAItBuCCjRbLcR1f4oAopAAwGlmg0o9EQRWGAIGGpH7eSlb8bkVSxi6eRaToxDIEND37wurt2k1lP+Y3ZlmJcOv+ZUBBSBtkOgEWau7XqmHVIEFIEFiIC+0hbgoGuXFYE3R4CEj5wxNnExHQNscElhhMbDrGgkWaOUMWkenYuJJe2bh0syLSjDfPNB0RyKgCLQ7gjorKzdR1j7pwi0DQKXOnF7c61D20CiHVEEFIG3hIBoGlOvEoY3kRAnqTQyTPEqK2lCL60pvnm3GG2lWbvZWARqpZA1nDbkUhQl4PJxIbOq2nxL46SZFQFFoD0QUNPZ9hhH7YUi0MYIcM2TCVty8U66yaDLoWTTIaFHRUARmBuB9FtCzkksLeG0+kvjNIimsHafuyb6C5r9DpKqhGEySKclrsJoL1aDpisCioAi0H4IKNFsvzHVHikCikADgdTMsZGmJ4qAItDuCJjol+ylo5OzieCc/RcrWRMv09jJkmdSc/kWjb/cGk3fb3wjEw2pE2XOxjVREVAEFIH2Q0CJZvuNqfZIEWhDBDhDc+EIOOnjtQt54rpLzYGbECrBdKjoURFQBJoIMBZmYomgpKbIH9dWNi+tajNhlBIfpSCHOCggDEOUggJyyJp3krW2iBkCRVwAsZyPwNUUABHr4BsrThD4TerblErPFAFFQBFoTwSUaLbnuGqvFIE2QYDTM87QgtSkjmTSmdM6k1rOHgO7O2cddqJIguomfW2CinZDEVAE5kagXq9LLEvfDxBFEaKohiAIEQQ+w1qKZSzNYmuVKgLPhxcEKFcrQACE2RBnz53Fqy/vxeF9+3Hy1QMYPXAY4fkxLK3WsSQ3iMl6EVPTHo7/58P4X48/iWTFMvStWYNVmzZh4+Yt2Lx+E/o6u1CvRgjDQL59RTGQhHw/JajUqshnsqjVashkMrIW1Jjdzt0fTVUEFAFFYD4joERzPo+eyq4ItDUCJJEkjZylcZJmNZaOP6a9ePCeEMpWjWZTP9HWUGnnFAFFAIxhGQSBrJesVCqifcxkqHk0BDNOgFoUI/Q85DIZxPUYI+dG8PSzT+Gh7zyMPU89gTPnzqBaLCOeqSKs1tAbAyvyXVhZ6MFIkMXiTBZT9QpeOXYCr+x7CWfDAJV8BmFHHtlsAYt7B7Bj8zXYfcPNuOvuu7Dl2m0Icj6KUR1JFKMzkxF5SC4pL49TU1Po7u5GtVpFNmvk1eFUBBQBRaAdEFCi2Q6jqH1QBNoeARJGxzBbO+vSLal0l63Z9FoRUAQWBAIkcNQWuo2kMwhDwA8Q+B6K0zN44rEf4z///T/w+BN7cOrsaVSiGkrVEsqVsjiSDeME2TpQjz1UK2WMTY7hqOcj8GJMJwlG4xgTiFD0PFTKNdRLM/BqCUZxGif3HcIPv/1d/D9f/CK2bNuCO993D+65715s2rIJ5VIJhXxetK7UvpJYdnZ2gjIqyXQjpkdFQBFoFwSUaLbLSGo/FAFFQBFQBBSBBYyA7/tiikrHOzyn6SyPuVxOUDk3ch7/+cAD+Lev/G+8tncvitPTKJVLKNeqiGkMITs9xAJhIY8VQ0uxdmgZhjp70JcvoL+zA9lcgGJUw3QS48TYeew9ehTHT59FcbokprEZP0S5NIN6qYSx8fM4fuoYfvzU4/if/+ufsH3nDvz2//gfuOGGG0CSmSbDPFcT2gX88GrXFYE2RUCJZpsOrHZLEVAEFAFFQBFodwTEm6vtJImaM5mlGaozoz116hS+8Y1v4N/+7d/wyiuvYHxsDPVKBb6EJAFy2QwGlg7hml07cONtN+Oaa6/BiuFh9BW60JXNI+eHCOjgR5aKR6hFVdRohhvTFBeoVuuYHJ/EoX0H8cSP9uDxxx7D0cNHUKqVUK9FGB0bw7nx8zh2/BieevJJ3H777fjsZz+LzZs3o6OjQwgmSTHXbaa1mko82/3p1f4pAu2PgBLN9h9j7aEioAgoAoqAItB2CKRJJs9JzOgVluc8zszM4Hvf+x7+5V/+BU8++STGxsbEAj+RtZwhVi5bhttuuxV3v+c9uPb6negfWox8dxe6urpF2xh6PkIP8ONEtKMJ14szQdaE06WQB98L4CU+4lqE7Zuvw0/f89OYmprEqddfx/d/8H08/O1v4+V9L6NUrgjhHB0dxfHjx/HUU0/hYx/7GH71V38VAwMDMjatzoFcn9pu4LRDioAisGAQUKK5YIZaO6oIKAKKgCKgCLQfAo5wOlNZagYPHz6ML33pS/jOd76DEydOiMOdKI7gez6u3boVv/iJT+CO227D8hUrsXjpEgTZEKKyzASIYExvPfiIEgY9AfwwixgxIsRIEMNPAJrJiivbegIfHrp7usWpz5JgKVZvXouN11+LD//ix/Diyy/im998EA9+/euozJRFlv379+Ov/uqv8O1vfxt/9Ed/hFtvvRXT09Po6upST7Tt94hqjxSBBYuAEs0FO/TacUVAEVAEFAFFYH4i4MilO7IXbl3mo48+ii984Qt47LHHMDk5KR1kvuu2XycE873veQ/Wr12Hnu5e0XxGUV3oY8BwIz4QSYkAhmJ68HwfMbWaXLzpewi8DPwkQVyjl1s6GaJ/bKo+jbKzjgRRJsCioUH0Ll6EtRvWieb0Fz7xcfzvf/0KHv7mQyiXy+JllppNmtH+8i//Mj73uc81BoPyUkPrjo0beqIIKAKKwDxCQInmPBosFVURUAQUAUVAEVhoCKTJJPtOAsY1mM6ZDu+TZNJU9h//8R/x5S9/GS+++KJcMy9NU3/pl34JH/35j2Drti3o7+1D6IdghCS6mA0QIpDwuySUkmRD7xpP1o5E+kloIi4lqdsS6tfE7qVFbeQBdXhCVnmLcnV1dqFnTQdWLRvGdZuvwQff/wH87d/+LZ5++mlxVLR371588YtfxDPPPIM//dM/xfDwsKwvdeFOqKnletM0DuyXboqAIqAIXO0IKNG82kdI5VMEFAFFQBFQBBYAAhfT3jnNnoOAxMttvMdwJsViEX/5l38pJPPgwYNCRHnvlltuwWc+8xm8973vxeDQYoQZrql0pc2RGksqJGkjS8ezcltIKJO5JtMQUpdHru19c8+E/BWiacsnpiQ8JAgSgH6EwmwO69asxZIlS7B9+3b88z//M/7mb/5GHALRYdE3v/lNcWb0J3/yJ1izZo0QaUcy2UduSjBnj51eKQKKwNWNgBLNq3t8VDpFQBFQBBQBRWBBIPBGGrs0waKWkNrMiYkJFAoF0Vz+2Z/9Gb761a+Kox2u0ezv78fP//zPiyZz165dxrurb7SAidUGmjqdcx9CnMj/HhmjJZ5ydOgzzVThUhrXNLk1VJBJiRBLGt+GMZ0JAa7OMJNBT6YHlIma1h07duAP//APRW7KwzWb7N/nP/953HjjjeKFliSa/Uxj0BRAzxQBRUARuHoRUKJ59Y6NSqYIKAKKgCKgCCwYBByRckd2PE0+qdVLx59kaBBe//mf/7l4lj1z5oxoN6kx/O3f/m189KMfxapVqxokTeqStY9OM5hijaLGTBFMp8V06Mv9pubSJcvRu5BksmYSzIDsk8RV7Gi5xDNB3Zr6UjaSYcpLsvmTn/xE+kuySQ+5dBa0ZcsWIZvUbNKTrm6KgCKgCMwnBGglopsioAgoAoqAIqAIKAJXFAESzFaSSXLodmr6XGxM5qNDHZKxf/3Xf8XIyIhoOdeuXYvf+Z3fwac//Wls2rSpEZfSkEyaxtI/bMDAJFY9acgmuaBJolMfuzseyqPdyRdlJ3d0u9jPGk1miAQZajITYzIrBalBZZ08prSp7A/J8r333os//uM/liPl5FpTOgn6gz/4A+zbt080nOw3SbX044qOkjauCCgCisClI6Cfxy4dK82pCCgCioAioAgoAu8iAo5kskk6x8nlckJGScb+/u//Xpz/nDx5UjSZK1aswO/+7u/iZ3/2Z7F48WIhpSwnBNbavMqay5T8VFTGHldUmk14oNNeunz2JpPdzlv0SkszWW6+nBs+mrKhbRBL10AUxUIcnWaWWkpqau+8804JjcLrhx9+GKVSSUKz8JpketmyZQ2S7cTSoyKgCCgCVzsCqtG82kdI5VMEFAFFQBFQBBYoAmktJ9dl0oSUxOyHP/yhaDKPHz8umj5nLvuRj3xETFFZjmSOR6MFNOFCGkyRyzETo50kXYwbu7F0pYYz8RIhoSZyJmmlIZYklSxJkmkUnSbda1ZoGClz+QnqPlDxgCoz+0Zr6wg0tZrcKesNN9yA3//938fOnTvFTLZSqeBb3/qWhGrhelTVZi7QH4F2WxGYxwgo0ZzHg6eiKwLtjYBTI/DIeAJut702M0Fr78Y08bhhTdw4BeTrzZnHtTdS2jtFoB0QcOTLHV2fHNnkkaTswIEDEg6EYUGo5ezt7cVv/dZv4Rd/8RflnOUcgeNxzs0oImfdctpKWVZp3ihCLg3FNHcNuTRvF0cynTZTKmvUmxiiCoY7SVCHjc8pMTljIZLsJ+WnjI5Ek2xyvebmzZslD82D6Z32P/7jP8Sz7iyB9UIRUAQUgascgYu8ga9yqVU8RUARWAAImGkcvMCQTCGbJJP836yzQsKgAb5M6OBF4C5aCKtnkMxu9pg+ptCTSW3KJI7Z3EQzlU1PFQFF4DIjwN+i00S6c15Ti8kj03j+hS98AT/60Y9kjSa9sZJgfvzjH8fSpUsb5rIkb249J889z4Ywsd+vzHvEfIpyn6TcZ6lmFhraXvw/voXMms9UDW4dpm2TpbkiNMPwJm6ppyXMjjgTVprIUk72733ve594ne3r65M+nD59Gn/913+N/fv3i+aTGl3urZu8y6hV1U0RUAQUgasEASWaV8lAqBiKgCIwFwKWbFpTNbdCykz9zDTPOPVgWU68IslpOKWNf8dbF5l7cWLWupmyrqXWu3qtCCgC7xYC/H2SUJGA8cjrr33taxJvcnp6Wsjn7bffjk996lPiXdYQSkMT079tErrGtyfHCe2rhQeXNPfRfNbi24b/uYrMVfNa0tlOw5GQucc6STAd0ZQ2rJaVcpFguo3EmDtlv//++/Erv/Ircp9pL774oqxHnZyclPsOD5Z15sQ8l766CvWoCCgCisAVRoDvPN0UAUVAEbgqEZDA6o75OT0jQwOIFa0nselkopjii27qN6tDTLzEzZV/C0UusWbNpggoAm+EgCOUTrvnyCKJFu/R6c/f/d3f4dy5c2JqOjw8jF//9V+XWJQs4/K/URuX597F3xbp98nFczWlIlEkcaQ58Gc/+1ncc8890lf2nyT7v/7rv8C1m45UO80myynJbOKoZ4qAInB1IKBE8+oYB5VCEVAE5kCA/FEcbJBkUvvoSGcCQzblvi1oyaZM7OxyzoYCwtXtZn3u2h5dspsItl63ZNdLRUARuAwIOKLoCJPTZjqnPl/5ylfw6quvCtFi85/85Cdx1113CRFrF6LFPmezWTELZpzNz33ucxgYGBASyTih9LR74sSJBqlmftd3njsML8PwaJWKgCKgCLxlBJRovmXItIAioAi8WwiIRpONOY2lNXU1zjliIaHMY8zamj6DmJ8TLtnT7jxcmj3O1Q9HMue6p2mKgCJw+RCgJo+kiYTJ7WyNaa+99hq++tWvgt5XeW/Xrl2yLnPRokXyO6eGz2n55pJwvhAwykntLLW4tVoNd9xxBz72sY8J+eS9Rx99FD/4wQ/EMRBxcH3muW6KgCKgCFxtCCjRvNpGROVRBBSBCxFwRJN3GueGboo3WinRpIgmtp31FUlSmf4vRTYvbMjWzzYa7cyZSxMVAUXgMiBAUikfiJJEyBa1mSRT9Lp6+PBhIZmMpfnpT38aGzdulHskZSzHjUdHvpx4rj4er/aN8pNgUqvJftAb7Wc+8xnpKwno1NSUYHHq1KkGwXYkk2UdDld7P1U+RUARWBgIKNFcGOOsvVQE5iUCEsGEkps5pGV/xiescEEb646eZpnXmcrKtSWXEgPPxsMTwjlr4aedeEplc5DLq39eOi/HVYVWBOZCgISRGwmW20kOSTAfeOAB0eLx+tZbb8Xdd98Nepx1Wr00iZzrfL4QMPabG/tAYsmNoU4++MEPoru7W4jknj178PTTT4t5LfNxV5IpUOkfRUARuMoQUKJ5lQ2IiqMIKAKtCHDBZZNE8jxu2Q3JNAszSSZJRR0dTZNO3pu10LO1Kb1WBBSBK4YAyZJbj+nOSba+9a1vydpMavq4MZTJkiVLGuSKeR3h4jG9OQLmjul7V+M55aQWM00eef6JT3xCwrc4reaDDz6IkZGRRj7mIelu7f/V2EeVSRFQBBYOAko0F85Ya08VgasWgfTkiOfNHUjSoQlIOH0g9j3EgWcIJ0kl32Tcqbmku38xlyWlbKhCpe+mKmNexgmd2Sz5dBy0FaXZ89bWu3qtCCgC7xAC/N3zd+l+/6y2Wq3ioYceEm0m13DSXHb37t3o6uoS01pqAJmHZdphS/eD584sdtu2bbjzzjvR0dEh3aT32aNHjwoxb+13Gr/We3qtCCgCisC7iYASzXcTbW1LEVAELkCgdWLlMsxaV2kTnXlsLIQysZpNkktrOuusXxsaUMcenY7TaEalbpmY2vsXnDsprCY1damnioAicPkQcOazbIHaOzoBevnll2XdIknlfffdh2XLlonWj3mcqanTWLrj5ZPw8tTs5OaRGwmmMwvmkel0CtTT0yOk+vTp03j22WdlzaYr6whm+p16eaTVWhUBRUARuDQElGheGk6aSxFQBC4TAm5i5ap3k6VYtJIkgkIjDYVkMHSuy0SCKInh1mZSg4m4aWLreT6M9pLuZ11oFHFFa8OkGE2B0xYIgXUC6FERUASuCAJ8FziS5IjW97//fYyNjUl6Z2cnPvCBD8haxcZvN0lA50C8dmWviPDvcKPsC/tEIu288d50001YvXp1w7T2kUcewfj4uJBQNt/6Ln2HRdLqFAFFQBF4ywgo0XzLkGkBRUARuBwIOILJunkuSkn+EYs4o3n0mCok0oPn07dsk1wmJJRRBDmyvOzWohaJWNaSpwpX9S4MhUCy6TSmjf4Z5ULjUk8UAUXg8iIgv/2UVo9kqlwuC+Fav349Nm3a1CCWTpJ2Ipkkldyo2SXJJHnkOdeu0hnQLbfc0jCfpUOg8+fPy/uSGDCvkk33VOhREVAErgYElGheDaOgMigCikBjkuQmSySVdBArhJEx4kRryWMsJNRPPCScXCFBSPLJ1DiBx7Q0UTVLN6U8J7GyctNL4PtzT8qE1wrL1UFRBBSBt4KA+X29lRIX5nV1kGRNT09j7969DW0lY0oy7IcjXyzNc5IskrF2IFnsAzFwJsEknuwb+8hzetvl+lRuZ8+elXWapVKprbS5Fz4VmqIIKALzFQElmvN15FRuRaBNEHATS3aHk6z0TvooFJLsT5ZZRqK1hCWTJJZ+AgRSTlShQk6DpOEbyITZJMGU3ZjXiSb0YoEyxTS3TcDVbigC7zIC/D2nf9Pp5t29i91nXnePx4MHD4rGjgSLROuuu+4Sosl7JGI8Mt1p/tJtzddzRyopP9+FTsNJT7S8t3PnTixevLih5Xz++edlnSYxIBYOv/naf5VbEVAE2gsBJZrtNZ7aG0VgXiPgJo48JlGMerWGpE4tplUxCuFsksuARDThbkxlmc+X/+h6NkZcryOJI6MB5V/hm5Z0tiDlTGeNztNY7Ip2syWfXioCisCbIzAX4Umnpc/TtZFcuY2moZVKRcgTva1u2bIFXKfpNhIr7iwj7wyxWHB35/eR/XFaTYcVr0ky16xZI4SbPXzhhRdE88t77YbB/B5BlV4RUASIgIkGrFgoAoqAInCFEDCTRKtp5KSRX+Xp2IdEcWoKfuDDy4dANjAOf6jBjIEw8ZCh2RzllvWZMV01wotioFZHUisjiaqyltPL5uBlMnRRaSZjdjLLKa2QSZnbUs/ZnOSyWv0Sd4UeCm22LRAg8UkTR3ZqrrS5OstyJFHOdHR4eFjWKFKz5zR3jojxul029oWaS/ab/eM5sXB9pCdeOgSiAySazB47dkzWsLr87YKD9kMRUATaAwElmu0xjtoLReDqQ8CpBimZP1tDKASOXJLrLenUh4sx4zr8qA6PvjCKZRx//gUUD76GTD5E77rV6N+6BX4uC8Y0CeoxslGEEBGiDFDzIsSknGxzpoh49DzOvLoX0yNnEBZyGNy0EZ1r1sDr6kbdpzCerOukaOJSSDzYsjiJJnWiEJNcAXU297z6cFaJFIErgIAjjDxyc9etoqTT34h0unzpPIcPHxaSRbJFckWSld4c0XQki2WdPOl88/Gc/Uhjwr6SbLKvq1atEo0m07hOc2ZmRtKJjyvDI/MzjyOqPKbxnY+4qMyKgCIwvxCY/daeX7KLtHyZctOX5zwcPBW5/RFwZNN6dDW/VqdGpNKS5mEkeDECP4KXRKKNjE+dxo+/9CVUX3keYRhjePdtuPWzn0VueAXgBQijGCE9zEZVRBkf5aSOKJDgc8D4KM4/+kO88MC/48zBg8j1dmPHz34Y6z76EWS6OhEh4AujaXJLduoZjYjxTWvlawgrbLT9x0p7qAi8CQLu31tmc0TGaeDc0eV5s3+T0/ddXSSUjjyyjRMnTjTI1bp160SLx7yOPDlxWc5t6Xpd2nw6uv470kjZHaau3xs3bkShUBAczp07NyuWJsfBYcBy3Hntzl0daUxc/a5c+p6eKwKKgCLwdhCY15Zh7uX4dgDQsoqAInCZEEiRTLbgeFtaQRiEAeIkBvWRvufTxSwwPY3qyZMYPXIYi6MqOs6dxdjTT2PqiScRnz0L1GgO66OKBPXAQ7FaQT2uGxVkaQbVo0dx+HuPIDpwEH2lErzxCZw/cRzF6UkkUQQTY5NeHBPEEddrmv4bcZ3Qc5DNywSTVqsIzAcE+O8tSQw1au7fXl67c0eQSFYcYeE9t7OP7twd0/0mWWQ66+TGdiYmJlCtVuV6xYoVF2g00+UXyjlxWrRokWg0iRHDntCEljgRT4k2wgAAIABJREFUP6f15Rg4ssp0lnPj0opVesxa7+m1IqAIKAJvB4F5r9F0neeL9GIvUZdHj4qAIvAuIkBG6fZUs2miyXMSTeaLqakgz8tlEeVyCHJZJBMROuMYtTPncfTh76J7+XLkli5F5CUoBT4CP0CQKaBAj4y1KlCawanHHkXl1X0ozMyg6PuohSH8jk4EYcbG4OQ6TQ8+tZoktrLKU4KjpKRULeZsMPRqoSPAf19JJvlvLTcSQpIXOus5evQoisUi8vm8kBuuo+ROosNwJOlrlk3/W+3qc/+GO6JJ4kSTUOZlecaQdGR2IY8F8SHODkfidubMmQb+Dkfe5zl3hymxdNgz3dUhJ/pHEVAEFIHLgMC8JZruJZnGhGnuJZpO13NFQBG4QghYoilOY+fibgkQ+jR7SxBFdUM0u7rQuXIltuzcibHvHsUQTcRqHsafewnjTz6Nwd23IuLX+zBELfKQCYAueAhGR1A7+xTO/vhR5EZHkYuBaR/oGR7Gyuu2o2vRYsAPZB0mSS3ZrbwvJFanWNM2XQFRbjMPu0LAabOKwLuLgPs39WL/hvK++zfW5SXxGx0dxQMPPIAf//jHEt+RJIieYRnrkTsJIj3GMp1HklNHQklE3c66eJ9aOuZlGzwnSarValLmYrK9u0hd2daIH3HlkTu3Rx55RDC75pprQM1vb29vQ5vp8pC481zJ+pUdP21dEVhoCMxbornQBkr7qwjMOwREdWkIHWW3nNPGtTS94fpMJD5ijx+JfCAI5RqLF+OaO3bj2Zf2oHrkCAYqHlCOcORHj6Jn2RJkKmVk4CEbZoFKCd10DPT6CYw8+yoKp44jqZZQJZEsdGLVrusxcO218Hp7EfsBIiGZxsMsT40uU4SdDbFLcsfZd/VKEWhLBByJbCV1THf32HHeJwkkUaQ2k2ST9125dF6Xn/dIMkkkucaQO8klj9R8LlmyRDSkg4ODck1yxDL0sMo8ru62BP4SO0VT2f7+fiGMPCdx/PKXv4xvfvObuO222/Ce97wHO3bsANe0Dg0NNcLBcJyYNz0uaTwvln6JYmk2RUARUATmRGBeEk33QnRH9iz9wpyzp5qoCCgC7z4CYppqtYeW0qWFkKgk9DwbePD80LDRag3IhhjYfh023nEHXjxyCP3w0RlHOHv4MGb27EFXJUK+XEVn7IP+g7pmivBeegljL7wEf6YqXm4rvo++tWswfMvNKCxZCoQZJGwDPhh/ExEnzkaT2ZTJ0WHLjJs39EwRWFAI8N/X9L+rjqQ4M0yCQSLY19cnxIbkkWsFuaXL8ZplmUYNJcvQ3JbrL10+HrmTOJGIknDu3LmzQYqcCa1UvsD/EEsSe27UUDqyT4y++93vyk4PvSSc99xzD+g4iMR9YGBASL2bNzlNJ+thmhtvNyYLHGbtviKgCLxDCMxLojlX391Lcq57mqYIKAJXAgFqDbnRuYeoLo22MiWK/G5J+hjdJE4QiIqTM1UfWDKI1fe+Dwee2IPagVPIT86gq1TCmcefwNKhYXROTSM7U0LOi1AYn0T5uWcRnB9HsQZU8l2o9C/C2ltvQe/GjUBnp2gzY3Bdpm/icXpOm0mBSDCNz1nK7HZVZqYGS08XHAKt/67ymjtJCkkjjyQmdE5D7RljOnJzZJR53TXzkSTxnkuXm5bo8JxkiNq49773vfi1X/s13HTTTbL+kGXOnz/fqNeVW4hH4khzZZJ1bsR05cqVQvInJyclpibDwvzDP/wDvvKVr2Dr1q247777cOedd0q+xYsXN9a7KqlciE+Q9lkReHcRmNdEky/J1n+w3l34tDVFQBG4GAKkmS6MOmnmXKTN941THk5HK/UEmawPhAHAWJqZLLB5G9bc816cPf8N+NUqspUZJCdPoVqsoLNcRKZeQSH0kCuWMT01AT9KEOc6MRoG6N+2Bf233IxMf79oM+vWKYYnk2R6uaUW1ZBchjvRTRFYKAik/91Mkw2X7tJ4zT19TYxI/LhukulTU1MYGxsTrdnx48cljSTUlWF+RzBdGo+uXp7TbHbDhg14//vfj9/4jd+Qc96nuaeri1o8nrdurp7W9Ha9JgaOyFMDzPWwn/rUp2Q8nnjiCbz++utgyJPx8XEhn8899xx+8pOfgATz1ltvxYc//GFcd911spaTmk5qkLm5sSGebnNp7lqPioAioAi8VQTmJdFMv/zS52+185crv3tRX42yXa4+a72KQCsCTivYmi7XlteJztPOa7KZDGhKm3g+Q2VyBSZQy2H9vR/E6Euv4tzoCAbLMfrIWkfPoTsIEAZ0V1tHbbyKxE9Qz/ooZgJUBwex+v0fRO+2a4DuHiRBCJ/hE7hGCbTMDRA0BPRgdK8Uiis2zapN2tUyi/6O5xxBTbwCCLSSqvS/Ne7cieWu53p+nVaR90gCuTG/I3UkeMzjrpmP5ySXNNEkuaTpK0nNvn378Oijj4o2k3WkzTkdGSWZoQaOdXDjNU1o2fby5cuF+Pze7/2eaDCdvDxy/SZlYb30bMs6mE7Z0nJLpW34W3VYuP7xSHxPnz4t+PE+cbz33nsFO2o06ZTpoYceEnJ58uRJGSeaNFML+uCDD8o9rt8k4aRpLc1saarMdZ+s+2LPjZOF97k7/NOyubLptLnOXV1z3dM0RUARaC8E5iXRbK8h0N4oAu2KACewNFa9iLbQmq66yYks57QGrJEfI0AAv6MfWBZh8wc+hB/t24t6vQKvWIcfRSBlZDzNep15AT8TYMZPMJXLYuXNt6JnwxagswfI5ERLyrzUYpI+ikwUy5JcY9p74ThcRPILM2qKInCZEZiLHKab5OSdvyXm48ZrkgGmcec173EnoeBO4ketGM/TxIH5mV4ul2U94PT0tGjISPaeeeYZPPvsszhw4ABOnToF3mPd3LmxnGuLR9ZNgkhy6eqlBpNrOzdv3ozf/M3fxCc/+cmGZ1nWR6+qlHPNmjU4dOiQkKmzZ8825KfcaXld2yJAm/9hv1977bWG6SzNjdl/7iSLH/jAB4RE7t+/H9/4xjfw2GOPCYb8KEAtJ3Hl2P3FX/wFvvSlL+GGG27Ahz70Idx8881YtWqVaD5J8N2z47B1zxHhZRrrce3yHjemcXda0jYfCu2eIqAIXAICSjQvASTNoggoAm8HAachtMSO1qrWYpW1ymQlNl55GhMWz0fs+8h6AbzeIfTcficWP/ZDjH3nIXTWfXQkHryYk00Pdd9H6HkoZzIoZgNklq/E6p+6C11r1wH5DiBDJ0NmImZ0N9RbmolRYifHvHKck9Nlkl4hvso0387Aa9l3EAE3qefRbTxPEwCmk9i5zf2eXBnec/dJCLhRY8j71D7SPJUaS+7UgB08eFA0Y3v27MGrr74qmkzmJZl0RIOEhMSCnmEdcaWWjRvzsj3m585zhjshwbz//vvFTJYmnWyb5NPJ644kmpSPhJfkyMns+sD6XV4eed3uG/vINZiO0NP8leazDhP2n1isX78en//85/G5z31OxvCr/z97dwKt21HVCfzc914SwhTQNC1EWwggLLAZhNUIhDAlDOkkTCYhzPMYJkGQADIIKhARCGGQMYyBMAQCSBgFlpoFyFIZpG3UCBFbgW5lMJC8926vX937f2wO5/vud4d3p3dq3XOrTtWuXbt27arau6pOfe9+d9vtzC5nFhE++9nPth1p39je6la3akYn4/MXfuEXuitf+cqtXeDEe3gjL+G1OA9HFjyjGzkwcmDkQDgwGprhRPENmhlES/QYHDkwcmDZHFjY1WzZ8mOabZ/zJ4bdPrW4/dTI4mp5s/R2dLv3sBMP6rqr/Jfuvx9/QvfnX/5i9+8X/6ib63Z3ey/turk9Xbfr4Mt3/3Hpj7sfHXy57tKrXKn75VvesrvS9W/QdVc6rH2buZfy6W8R/8LlRM2c7Obn9rb9TYYoVQm1CynLruiYYeTAfuXApDkpSn7SYxBUYgLDCADnnXEXY8PRSruTX/nKV9pupV1LxozjsYzHihsOxoZdLzuPjBzGjrDdR7tttRy7md4ZknbMbne723WPetSj2qU/8DJKs9upLD9jog4MJzemBpfvP9HjmGeMndQx9cv7dvGH6oU3F110UWs7vLnWta7V2iKGpzwe/OODucUtbtF2LO1oMiwZnb7b9G2tY9Da346xn6hxvJaRapfzuOOOa/i1LaMTTm3EjxzxE0YDN+5obhcJHOsxcmD1HNi2hmZ/gDYQzuKSL/6s+WbBPcKMHDiQOBCDbY75lu1CDPBZ5aKxGZid+qddTcbg4oK4LHvmnHrd0X765PK/dvPuWsfcsbvovHO7Hf93d3fY/M5ux25pV+z+veu6/9x1aHfokdfurnb0bbtDDj+8HZfds2Ou/W7mjvmu28mktPLeLM65zm4mOhZIm3DAN3TPNnwcSM071nWDOBBDMgp+JUMcQ8D8FWNAuneGpW/4HE1lYLowhkH56U9/uvvrv/7r9s7gAJc8fHgYDn6+hHHphlm7XW4z9buNN73pTdttpoyYV7ziFd2LXvSitrsJF3oYjocddlh3wxvesO2unXDCCY3G7GKCibEZo1IcZ2dN+QxLu61f+tKX2iU2dkXxAXxc8uR9O/raUbvZacZf9XdLr3bBD+0UfkrDN04aPuIb49E3nXD4OZQLLrigfWfL4MRjCwNf/epXu7/927/tXv3qV3c3v/nNuxNPPLHdWvuLv/iLbWHB7nXFrQzlZsEg+tMsbXAgtNssfBhhRg5sVw5sW0NTg2WwqwNZ4mZtUPA1f8U7K44RbuTAgcqBGJLNmmO0LR6ZjYEnqqmKAs2ok8PPjNizXDA053d03dzBB3fdnst31z7uf3YXf/kvu+//1Q+6g3+8u7vijkO7H/6o6+au+PPdj690he4Gt7pVd6XrHNl1V7pCt2fXjm5301cV6vdTFLBwXHChsIWdzoUvPH/ylWbLEnray4HaemO915IDy517+mVnHoofI8s73HaTYlwwLBhvDAePsKOnX/jCF7rPfe5zbefyX//1X1saw1S+4GEseOxAMmB8A+jCGDeVHnXUUe33LRmaylAug0M4O5biGEFwMDJvcIMbdI997GObsWJnTHmMGt9oggXHCaNBPeAEp0zfHcIn3veGfh/S7hoXXrSXbfYPP+Jq2E6knV0On371V3+1tRM+akdtzaiMfKRt8Sp8ZShaKLBj7JZfN9O+613vaosOdrbxGx6LEp/5zGfa0VpHnLW/I8+3vvWtWxuQD2V54CcHnpQd+of8tF3afQhmjBs5MHJg63NgWxuaa9U840C4Vpwc8RxIHIiNFj91jw3H5Nuxz/BjTS4YhOAX8iwYm/ZXDt51UDe3Y2fXXfva3ZFHHdX90zf/T3fZD77bdd3lusv2zHWXHXLl7ho3unF3lVvestt55St28wfv6HbvhH2u3S7bjsRC2gpfuE3W/72uFFqwN0Pe6I8c2NQcoKBHSUcoxd7uIMOMb0fqO9/5Tvum0s9duIXUkVjGHVjzWR75GR+MFEaDHS8GoN9l9FMYRx99dDNIxDEmUgajT57gQQ+D9EY3ulHLz1CB46STTupOO+20lqYc5YO1wwkXWnNU1jtjNc67chlSblmVz7FPxg+jJzzgw8slLji2g4/HccJ2IfEX3xxZdnSWAc/hGT4z9MiCh1HpXVpg8Ev7Jc3vldqdJjef/OQn29Fau935XU7lSXOs9kMf+lD7xtbRWjujjFWGP1yRL7IyzVW5mQY3po0cGDmw9TmwbQxNA9f+nGSCnz+6kQMjB1bAgUULMoYkVSThnwQW8Drd6pdL9szv7fbM7egu7fZ0B1/x0G7u+9/rfukWt+q+feHfdJd856vdnsv2dnNXuHL37csd3B15+6O7y/+3X+66K1yxu8xlQm1MWLBfG9b2jWiszYUNzrk5u6cLpq/Ds1IXdlb3fdC5goqOWUYOrD0HKPHZKYoRwVDLrqWdys9//vPdhRde2I4+Msiy0xQjA1XiGAUxNByHtHPI2HBU9Vd+5VeagZcaxIgz94WGGI3woglO6QweBipD8vTTT2/HZcFIj3EKB7rhYNzaOWNgggErnoMXTreh/umf/ml7d3TWTqwd1eTZn/N+eLAZfLzQ7nalGYB45VtKO754JQ3vxOOxsDaOw18uPniuwjDg73Wve3X3uMc92g74+973vmZY+vaWPMmDDrcOO279qle9qh2tvdvd7tZ2mq9+9as3AxhecENtIz4uMPETP/ojB0YObB8OzM3XXr8F6mWgM1AaWA2mBjKPycrAmgEr8eDBegzA4oX5XL/6eQdT0xPPT1h5aKiTo7B0ackvLoO5tJTdAMZ/Iwe2OwcoqHsWdlJ26qMMyPzESDM257tu96IS7Rig41c+62wX9NjV3NP9YPcl3ZV3znUHX/K9bu473+66r1zUfeqMl3f//o/f6i476KDuJqfevbvmKXfvDv7lq3e7L3eFbs/cwd2O7qBuz54FQ3KX/uz07J7d7RvN9puaFJ5Fg1QT7Nq5qx2xbeNKV35fcMHyHPvtdpfTKfXLuJ95BWjihDOmZ07K/OGdy7twYJIHHi7vgeFLA89I83i3u+RiHEco/X4l/xvf+Eb77jI08ZVprjQX8T12nnIM1g2jdrHsPGa+qnQ2onr/4K2uvgszIO2c2hllRKLdHMworLBwpL7xxaljaJHXt6Ruv2Vs+jaRc4vqb//2b7ddTTiDt9JecbZMm/Bf6O6ThvbwAe/wI3qP9r7f/e7Xfr8UT//gD/6gvdtN5uCcVndpk8oNHdIjo2TGt7d2xV0gpHyGvnaOPMJp4cK3u8ccc0z3oAc9qC1caA8LD/zQlbrRh1IOH0zazzsXWtGCjjjpHulxNZy40R85MHJgc3BgyxmalW0GXwOOQas/0DDuMkAZwAyMBqs66MkLBmye4K+DGRguEzYcGShTPh8OMOApA8pzgQInnTM4x+hsEeO/kQPblANkPopS+h35F9Y3kpa+m34mnZPfzuZl83u77+7+fjc3f1l3uR//Z7fz0j3d3Df/rfvCq97Y/eNff6nb9XNX7m5+8t27q9/x6G7uqj/X7d11uW7H/E4ZW3885NBDGj74Mwboq+mTEpWJjkpD6Apc3huy8d8BxwFykKfKzBAjwFV58U7eGQdxZC2ybn7KPAbOQ1b1F9/j+f1K3yc6OuqnRhhfwQ+PsDLgyBFGcZR/3+I5fuqYI98OGJi40CD/SlzNp1+h3bwXvKln+pYyQnv8Wm7wZacTTsc01Z3h6adRPvCBD3TXuc51Gp7UX5r649sQ3lrGZgqnvqHZu7B6ebzTK9Tvt37rt7q3vOUtTb9wrPid73xn+16SXOGTfBVPrWfia9y0sHI98GZ8JIeOztrp9F0nmqRrKzDo5MjcQx7ykHbDsFuCyaHywaI1bQa2T3O/n4BBR507WiHjv5EDIwe2BAe2pKFpUjZYGaDqYIzjGUwz2UivA6V3A5ZjIL77+NrXvtaOgLgoweRtUuczFDnfQbi+3eTsd6Zcz+5yg+tf//rtx6SlGVxN3KFH2dUp00AsfjQyK2fG8IHAgSgr+q3+MuT0UU/6rzBD8dLvXdL9wz/9Q/fFf/hK97/+8X91X/7Chd1/fP0fuqv9eE93yPcu6a51xC923/i3f+v+bdd8t/fnr9rt+Lmf7/7rNf5b99+ve8PuZje6WXft6123u8rVrtpd7vKHNtz6vj7oQZe+SUHiR7mP0ia99uXQNkT/GLe9OUAeyUgdv8kHJ144SnbkSh6ylblIvDi+OGlNzhcVaUq7OL9h6cbPj3/8491HP/rRfcdglcWAi9ERxTs08R19pOTbrbzNbW7TDEsGCbzmNH5/7iTX4jm0TXOT+oB8yQsXuMR5F0ZveJEy+vhiXCYdf8C89rWv7X7nd36nzc3iXvnKV3annHJKO6KL/8EbGvp4g28r+VXP0XZ+bub4449vP22inieffHJ3xhlndNe4xjUaj9TZE74P1XU5fImsBo92jJxoJ7+ryuhldP7zP/9z6wdgtYe85JSBSRbve9/7tqO1+R6Xb7yFL/1GvtQh7Z7yQsN2at/UafRHDmx3DmxJQzODkEGpDk4ZRDMY1QHXoG2gdjmClWFPfvTYxAvWwFfzZtCreExoHjSY1F39ffvb374Nor5tyYTH8ARjcs3qMVoNnCljknClHpPSx/iRA1uFA2Q+ymNkX1/UTygY+kLi9RUKld/h+/CHP9x94iMf7y76yv/uvvu973Y/nN/dzR+8t33UeejerrvK7q47bK7rLn/Qru77l+3pvt/Nd9+f6zo/E+/I7E6glOadO7trXe863f/49Vu01fXb3va27Xf40EQxp7jr9/ocevTZ9FM0cumvY7/cKlK3cjrT1hXDULuTEU5a0uUlP+TZExec8pApvj5A/sA7Bmt3yPFE31f6Bi9KePpG8smrPPH8I444oinylHk3gjI6GJZR3vUpecDDIY93NAWHsLjUJ3T3fXk9XOpUYYJH2fApW1ge9eQrMy648l59Rre+mbHDRTT6rrEBbxjRZ599drsIR7meiq+GK97NFq58DM14J5z3jJe///u/3/3hH/5hO5qsHm6JtUuNx1k8SJ7UM/j78Umf5Pfh0aQtxGchThyZsjDiJ3K0B73Kb3OK9+0wJw9ZZ3Te85737B7xiEe0xXqyAEfqKw9HVpQRp1z1SB0T3/dTV/F9+vuw4/vIgZED68eBLWdoGnQzCCWcAcsAZdAyqInz7keIXSTgiImjN3Yrh5yBKY90YQOXB65aRh3QgstOjd8Tc/W3x3cwmdjBo8WA6buVofzBk7Lr+xgeObCVOBD55lM29VdhyiOlSP/0rj945yz6nHPOOa2fOmUg3+V2HtJdddflu0su/XH3w7k93e6du7tul9/anO8OurTrDp7vukMpsd189yNG5uIvmBw0v6s7pNvZHbJjV/fD+Uu7S+Yv6xbume3a7Ze+Izr11FPbd1++Jct4EcUJTVHQhaO0xN9KbTHSOjsHIrdyJJw2z3xgHJcWuc2cY35InHQPeYrznjnJ8UOK+ac+9al2muaiiy5qynpgU2be+eL0IzeM3u52t2sGxq/92q+1W0fFR0lXDseXp49LfE0LPLiEa7n9cMU3CR6MuktHFx+fwp8+zv67vB7wxgj9E047mn6nkyEjzkU0dvX0YY4+IA8+Vzr7+DfDe3gXPzShWz3UIXoOQ06dLWiTHTB+XuSNb3xjW2iInmHMks8TF/yVH4kLzJCP79rAIjl4D95G/pXB4Fd22hgeP41y7rnnth3oLOTLZwERDeoEL13pAQ94QGs/35dGPsAoi5GqbHm9y6PMpMevtIOLk+4Z3ciBkQMbz4FNZ2jWwWKIPZRVA1AdSAx4nEEpAxJl9a1vfWsb9EzkdYA0MHIGZuWZqBiGRx55ZNulZAw62sEpz+UGDFRHbR0RYbzCxymTMzDDBbeVO8qs3w5z2YJBVjy65Uv5LePAv3GAHGDKGLUlOFD7rzDlgE+m+fqqPiNe/3O5hH5qdd5xdmlg9aed3Y7ukMUfQJnfdVB3xf/6c90vXeuXmnL1Xw47rDv8ylfprnKlK3U/+P4Puv/4/g+6S3784+7/fvf/df/09Yu6b130je6Hl/yw2zM33+2eW9gJ1f+US5HjXMv/sIc9rBmd+V3AMDkwxoHUaeyX4c7W89OGkyiPfErvw6bdE0+GAmc89w7G3MPFJ8sUZjeluhH2ggsu6L785S933/rWt5rCLQ8jgm/OASusHI8dPZ9p3PWud207eJTz7FaST+WQT+VXOkKbdHjgDI2pQ4URlu5Zias4Q7+yU66wJ3PltDKMCeZHeeXhjBlo++53v9t4gZ/q66ZcY4fvTjl54mo4cZvFD7/i9+kSr754kfHQt5mvfvWrmy6BL+p9wgkntMt2al0r//p4l/Me2oIbvz0MfA4NaNQ2yiSHYMF457uZ9nWve133J3/yJ21sF29cV6fkpXsde+yx3QMf+MDujne8Y8MDJkY2PNGXlOldXk9oHKoXWkL7UPoYN3Jg5MD6cWDLGZoGjwxkBr0MNgYe8W7fs9Ln24F8NwDG4BZ417n7fTArwze5yU3arXt2JDOQGdgyuNWmgN/janFXe9sp9Q2NiY+Dn2EqL8VBmY62uCHvxje+cRtk0Sl+mhsHyGncGdM2MwfSH+OjlVJMEaEkUKz1DUcFn/3sZ7c+pM/oe2CiQFOor/8r1+tuf/Ttuzscc2x3k5vfrDvkSod2u+f3dgc5dtvNdXv9tMm8Y1kLP0tiPXu+6abz3Q9+8J/dxRd/s7vwcxd2F1zwkXYk0fE7ipGyqsLkJwLsjPiOyPF3fZRDr3pkLBj75WaWvOm0VXkcgtS2geEnLD6POOHME+SEbHj3SHND51e/+tW2Y2kRRdjCZGTOomNwJ3/e/TTENa95zfYZxl3ucpd2DwA5lZfi7Yn8ZrE1ZaMDnjxwR44jy6mHd+G1dKlDcIcfypHmPf1olnLBMzhST2OE+tvV/OM//uO2wwfmWc96VvfoRz+6faspPfWKP0tZGwETfsUPDegO7WSFruA4tZ8cYWjjId3lDW94Q0depBsz+ZGBiiP4gzPlTPPpOBz5SRhv4+D09MvRHuLRIV+MRHT7FMKJFcfC7c7GoRtu8Bb7nDR58IMf3OpmPiD/wZU6yqus6vr1679X2DE8cmDkwPpyYMsZmhlgDCQGtUxGFFgD2cte9rJ933EYmMAY8Bw5Ou6447rf+I3faKvErt2WDo8BlZ9BVXwtJ4NWBldNBKfHxM+4Pf/889vu6d/8zd80PPJk4Pejyg996EPbtwmukodnmkt502DGtJEDm40Dkevq6yP6k35CoaBk+NbIEThp+hxlQj8m937GQF+xyv3zhx/e7Tz4oG7njp3dZXv2dIcsKpJ79lKCum5+T9ftmuO7nXau27HTb2POd00F2bmwM7WH0rSotOqbb3/729utiXaV0sf1f7tHfkfwkY/Lb7PVAAAgAElEQVR8ZNs1oeSoRwxSvB775WaTuNnpiUxOyqFtA8NPWHyexJHbyIKfevDdP6OS7/QMxZpsgc+cQvYZBByZIm+ODNqVs5ND7oX1lRiINRw85hROf4If3tDSEqb8C93B7x2O5M88OAXFxKTwJrgmAi6RoJ7qjVcxQPBSmLHpcQMtg4WzaPWOd7yjGefyKT/PEkVteHJ41idEvLZRH6epfIpDvrS5n6c577zzOsem7QbWtuy3Xx//ctom8kve0JJ2iU4DN3zitRV5Dmxokqbd4NJu8vg9Tj+TYhx2QswpFnj0CXBwaFMnwU466aTuxBNPbBcxJg2v8CF1rXWq4T5Px/eRAyMHNo4Dm87QxAoDUgbJGJIGM6ubnLCByaBkMHNDn5VNO4wGZnAGI2kuSKA83uEOd2gDs4GvTkhhfQaplJv3pMc34Hmkg+V70OnGWjexUaKt4EnPcSg0uY79937v99ouJzpSloFcXQyeCae80R85sJk5oC+Q2Rhk3vU777V/6Aeuxfe7b1/5ylearOdIufpRKuz86yNw6B8HWeme29t+xdKe5Q6PH+EsbkfbxrTE3W4Bar+RuXBcdsHglH5Qt6PbsXisy7jAyPzIRz7SLq+ws4rejAmOvfvx8Yc//OFN8VcP6WhKHdXXg8ZJ40QhcQyWbwYnMSNj4bT0KLCBqXm0kXTjaFzkr74nHLn1ru0rbvk8YDhtLJ0M++7MkUC7TB6Kc8rmZ94JbZEPsuIYrGOedqQsalh0jIKuHDBr4VLmWuBaKY5+/WfFg4fasF8HbSFNH3TM/klPelLbPYbXDfBvfvObm582S5tqj+CbRFO/rElws9ZhGhzcxg70cejL2MMYIw9g0CTtGc94Rjt+aqecDmGh/MUvfnG7Ab/K7LQy92caWkMvP24ST7WPeulL+tHZZ5+972iteOnyajMGp8fJs8c85jHdLW5xixafeoMD7xGHr2hI26MlcZEB7/IFB5hKd+jn9+tQ01LnGjeGRw6MHBjmwKYzNOvAi+R0aD4j0k4kGJMyg9Nq5llnndWUV/EZfHws74ed3U5n5Q+8wQae4IQ/g0n8pA+zayG2whrkMogJMzgp0HZPzjzzzGZwhi757G76LsxEedhhh7XJU34wfM/oRg5sBQ7oKxyf/JJ/imAmffJOnq1cuy3RcS8r2OkPYO9zn/t0j3rUo7ob3vCGrS/qpxQF/WjnQTu6+cXPxpiZC0FbmT8xNvcZmo2U+WZo7t2xt9s9t2Bo+h3Og+Z87blwwyGaQq/dVd/N6ad+9N7xeenoo9Scdtpp3Z3vfOe2i0DJpaRUYyBjxdhn109atQE54/C9KoyhInJZ37WrJy5tx09awmDEkVWLmH63klHp+8pvf/vb+2Q4MhF4PhxoMk85km1nxm2pjEy/J8hY8MTQUJeUm7jQuFK/1nOlOFabT53iVkoP/oafaWf8IgMMj3zXLc03fo7VumtBurjICr5WGmo4NFY/tC8FV/MsJww/2pzCogN4Z3gxqpRJf2Bw+q1Qv0VpnBLvVJbvHcmV9/1F33LqEtjwLP4QbUmTRzoeMK6dAFCvN73pTc34lGb8B6+P5/SZtnVrLWPbEXNjcfAEZ/VrOLI0acwAGxc6h+oQmNEfOTByYHYObDpDs5LOkDSYmFwyEJv8DTzeTz/99HaMhCJrIOEMwq7P9k1DvmEw6Ug34QgbSOogUsPSJg00NR6eTHryG8D4YAygfN+EOfJiBfKLX/xiM3jtejr+QoF1hND3ouoI3sSjbqMbObAVOFBlPUqyOP3Cuz7nUi6r8p/5zGfajr96MTDt7LzwhS9s30j7HlP/yYp++tH8vNXn+W5ucU9zvtvRbMy9/EUG7XRkllIbQ1Ngx3y7BEgUA3PBRF1Y/UYT+pShD1NoLr744nacy66In09QBzT6zVzfCxlPHHMMXfJnHEH36PY/B4ypHL5z2iJOe1kc4KRnLK7p8ssjLTJa5QAshd43lX6iwTFYssCwNNfAH9kBm7lEGF4Gg+/9HWm0yOm3LMk1OfKEJmWD96CVL24tHZwb7fp1mpUm/TFtmDokL5wxwpxKsEilvcybYJ75zGe2m0wZ9GDxPPKi/YQzTgX3kB/aU+4QzFrEkb84ZSmXrFnwcuLiyU9+cjshRSdAu5NSDC1GKLe/6Qtts/jhGdiEJ9EnPafStIc21z7inAizgOC3OV3ASN/jIhMWaehPfs7HsVqfWFi8V1bKg0vbx1ilX6Xfg1GO91lkYZa6jzAjB0YOTOfApjM0o8RROg0qnMFBfOJMMi4ScRTPQGRAoUj4luFpT3tau9DD4GyCzwRjoMrAngEpuCexqMJl8IRD2EDF5R2sRxpaKCUGOD56XVDE4Aweg9zNbnaz9sPT2c1RP3mCaxJdY/zIgc3EgSrz+iyZF+emTcqf3SB9VJ/x7aOTBnYxr3a1q7XJ3uVa+d5IH9B/FnYXGZB7F4xIuvPcjo65saCWLxoczZj085oLP3uywJeFW2aF6fD0ubm5BaW+zzd9DW0UWHS+/OUvb0fwjRvosBB0v/vdrx2/d9QxfVz9Eh77a5+r+/c9Y25K0RYZj7UFJ47Le3tZPEonDg6X9PjWj2FpIdC39hYCyYL2jwyYOzzkQV4y7uIS31RSeP2WMjnJUT++cTxOntARuipt4tCTOiRf3695+2n1PWXVuPUOD9GKrqH4Pm2BM45wMTKE5Tde4LE28xMZji+bTxlgz33uc1t/FZaPowcIB2+LHJCNxIfGteBjcAU3X5wxB41kTDnoj37jdMWDHvSgZnSBJxvG0Sc84Qnte8XgWgv6gmst/FrXhCuNNaxO2lfbcOqesPal133+859vC4A+icqFWmD1E33QY0x2cRbdjx5FLrS1RxkpU1nCtY8lrdZ9iO6aPoZHDowcWD4HNp2hqQoZIHR6A0YGY2ErzH425OMf/3g7Sgve4GIQdnzGkQqDdpRdYQNKcNbBpYZnZR2aQlfNI04ZfINZ4JRhBc3A+clPfrJ9h0ahkW4V3Ddpri23Am7iqTTVcC1rDI8c2EgOkF2OvFO+9ctM4NLsMLiV+Td/8zebn0neja7Pf/7z23fTVqGDg5zDAReX972XXtbtyI7h4olZewCe7NnwqZN5bwiyQSQyx2wXxwBloDE01zL1U79T51ZLx7h8FwXODskpp5zSjtI6vmVMUXdP6h26W/njv2VzIDI1KWPaLOlD8OK0CafdMn6KJ5Pf/OY3m3FiQcF3whYAGZZ2kciox1wjr0c+OMwvFFoLgy7t4R9xxBH7lF2LJ5lnlB3a4OCqrEhLep/OBjzlX803BWxfvafB7O+00MpPO8xSJvjKt7zDgY8WARgY+K1N/T72c57znHbDPFh9lbF5j3vcY98pBOVqV/nlC/6l6Foqfdb6VLjwg2/sUQaaOMYno9nClvFTPdWX0Wlh3WKGOmTMWQv6Km1rFVa31DM4K63StAfDMvHqrl3CCzB2NPkMz/e85z3tskcnZPAksNLxycbCjW50o/aTLy6LshAU/CkjtEzz4eP6efrv03CMaSMHRg78NAc2paGZQYjiZ2XYhGKyd8Of7xutQPtek3NU1iDsx4ztkBiAMigYNIQ9kwaQn2bH0m/BGXxy1PIS3/fRhWYTyNOf/vS2eyKvgZWx6SY5R/UMmiaT4A3uFjH+GzmwwRyIXCNDOH0rMqvvWom2a0lposSb8F3Kxcj0Mz/6dFb0Kff6gHwUL4stfM9Buw7q5vYumpBulJ3rFnc0HZ79iYH5EyNTaPFt0djcs2d3N1d+6qHSH1YmTl3Uw2KW36ljcDJGjEMuCbr3ve/djrMxOsDp0+EDX/6xv4arS/vhe+XhpFzhdWAjb/jdT4OXAenoq111Y25+ZsSCn/lEm5I9eGqbkVVH83wPx6D89V//9bZTYm5hUJJP8ktmUy4ckYfIQMUZmvtxiU+dh9KTNosffq4WzyxlLQUTWuIHfina8DGGVPLKI1zbyviQMeOVr3xl99KXvrR9qqIcx9z97qSjtcLayRM8oaX6Q3QNxdU8S4VDP7gahtcOHlnijJHk6bOf/WxbiPZdsDg0Gzdf+9rXDn6XuVr6lqJ/Nen9+vZxpb9oQ+2duuiT+qD+iSfShPGL/qQff/CDH2zfr/r5OvD6owdOfVSb+8be51O+j3aEnbyEJn5kAl2J79MYmsTXcB9ufB85MHJgOgc2naGZycTAEqPLoGBAcXvs+9///qZE6PjXu971uuc973nt+NLhhx/eagoWDgNUwhnUvM/iDDxDA0sGJGnCgauwympK8uKtm8IZSMEbWE0kvltz9Negqp7qYgBlUOdSEngr7lloH2FGDuxPDqQPRP75+hU51UfdJGghxTeZ+gLZtgjktlkyrj94yDknHzgueFLGJf/5o+7Qgy/Xze2Y6/buXDAyQerFuzq/oUlLaFkh6ubhymtMzsW+rIxKK7CUExr4HkYwQ8XizxlnnNEMFvHGmPvf//7dU5/61GZ4olddQnfyL5IwehM4EL7HB4Z30xzYwON38mS8daEIw9JupeOwFjnsiDAq7YDEsKx4hMmnRYTrXve67QisY7BOl4ijtHrAKBM8OtPeoTd0hSbv6PKAz/gfeDIjjYNL+lq40LEUL9eirKVwoCX0VNilaEt62lVeceG/I5R+Qsbige/5+G4Cpi9kBwy800JOOLk0yE4gHleez0JTaKmwywmn/vHlFQ4t8Btr6AROO7mR3rFZ8sEIvelNb9q+y3REOzLDoMILbrX0LacuawmLB560qboxKrn0GeHUD4/oSfJYKNKXnTZxSdd73/vedg+Gdw5O+ehQnmtc4xrtln9Ha4dOjbVMZS7IOz/l98MVZgyPHBg5sDQHNp2hieRMCBlgDMxPfOIT2y6DAcXA5Ba/3/3d3+2OOeaYNqBUWDgMStxSg0XgGnD5V/OV6IZ3qTT0U7oNemhXhsnEJIF2z9/93d+1Iz8+eocPrN9T8xtTlBtxKSd+pWMMjxxYbw6kr/R98kmmKfp+ouRjH/tYUwZM9He6053apVd2Acm1vqEvUN75+kdkPWlZyd67Z2+3Y25H26Tcs7ibqc7UrJ0MTbq6bt42Mne0Hc++odmM0X3W6MJ4oBx10Oe41Acdwnm3gm4x6CUveUk7colWRyZdEPSUpzylHdcKrtQBPuHRDXMgvO37aYvhXAtzQmDImgvg3OydY7CMD3ODNmNcmg+4tGd8CquTIy7tcXmPecQ7w9LiBxml5EfxDZ2hy3vaOji9oy1pKTd5Ig9kJeGk8cVJS/1q2nLCoXWojOXgWQvY8KaPaynaks6YcILJmPKlL32pPY61O22gfbOAYJ51nN3Pm5lT7f7Jh592pt06b2HI7rS2n8ZjZYeH6A4t/TrM+h5cfR8NDGNyRmZf9apXtZ8wsUMXuaXXuKmbcYRu9fTQIUJX/Fnp2Wi48CF0eE8dEq7v0ZmkaU+PMZiThlf49/d///dtYdNY7WZosiOPB78cq7Wr6Witn67CWxdFps+Gnml+6JoGM6aNHBg5MMyBTWloUiQyCOjgJg/fXZhkDLYGCYOznRKDCBdDE7wBJs77RgwSoSH0eE/YgMlZdXejpZtp1dnE4zpzii1FHBw+qPOQ4rMR9QpfR//A4gD5JMPkkO8hn2TQQ9F3hO31r3992w2k5Pm9QBdg5btGshxX+3figjc4W/yiIclLr252pcRECM8tvCYqpl78lBFfWbX/eOfiJ2wF3S2IL3rRi1odpduZdSMkg9O7JwpQxV8Vo8Svp5+61HqupPzU8afaZRFRLUM4YxbYKh8pVxyXfJGJwHsHY8yjYIs3tn/9619vJ0EYlgzMf/mXf2nGhvbxgCGjnLaAQxkUTLsajEq/XWl3yPdbjEpzh8WQGCDKmuakw1nh+u/T8h8IaX1+eOfSHsLayfwWx2gwfjgWyaj0/ax3x0ftRlfDUp4sUMFjoeAFL3hB+51sBoYj736uyC6nsrUvGPOqG1sdgQ5NZCxylvk18hm5DGzaXvlpf2k1PfFVfkMv/NKlhRfq60SWG47Jc/KffPLJ7adafNPOoQUPLIIIp8xKS/K2DFvkn3pMo7um1zqrnnd8xA/y4ASKh+z4qRSnw+xwp43xX583HtAffWt917vetR2xFcfBlbYhW2gzNqRs72m/Og8mb+jiT6uX9GmuljcNbkwbObBVOLDpDM10MgOEjm8QfuhDH9oGYgqFIzGUWT/ia+DQ4XV+LsoeHOno8TeiQVKXftniDY6cFTg351GkKEuO+Zg4Tz311H0DnzriB98AiC/qtZF169dpfN/eHIgs8zPBp9+Z0M8///x247OLGyh3bgBkZNo50i/TN3EJjs0mv6lf6Ks+Bcbv9fo5IrsllGTf7ln84uuT+qY+LS248KfWe70lJHSsxTgRXPFr+4lLXYWl8QOr3sas8DRp4PDO2EaJzhjHpzD++Z//edtJZjRYZCRb2sJuEBh54cqOjza46lWv2i6Es3thF8uOkG+2GJUWP/hRKPnaB55KY3sZ+LcWfBxAu62itEefT2lvFdVuPh1xRNTcZ+xgcIm3O5VjkdrYbpR3ThtnzoRfP3M/gyP50QXIIByf+tSn2sLQX/3VXzW88Lh8zM/OMDjdFExWglc+jzjyEHqVU+siHhyf7FSZDhxZAgOPuMDzE0+OXQBoTHExICMSrIXmhz/84d2jH/3odm8DXGiSRjcQFqdccR4ufnvZ5v/wPnUmMxlfyUv6sjGaXDla67dIyRq5wH8OH91ybqxgzDtJZpfTXRnGofAzbZd2TrlD8lHjwHsPnlboMv7VOi4j2wg6cmDTcmDTGZo4lUnGAHzf+963/ah6Bl3HZe0kOOqkI5uIsiJt4NHJ+wPDenM/A0Utt8YJq08UJNd3+4ZAvMnU4MeY9r2QwdMkA9bAp24ZwOLXcsbwyIG15kAmXHiFyR25FNZXXc7lm2M7TeTXjp/LOSh2lKfaJ+UJDnhqX11rupeDr98/a150urH0Na95Tdu1pSgyWOyQ+K7KTZec8Uc/hUu91HMj65c6rXacUC91idKrrt65KHreEweuOnRIC2yUZTDSHHdldPi5ChdJ2c3ym5bi7WpZYJSfbIW3fPjsTtoxd/mH32Y1dtqhsNhhUVI7qX8e+bjwxDt6vIe+SnsNJ0+NG8PDHAif+6kMAD/V4ZijscP8bdcSfOSHEZmbReXXh7SNeZCvHexSWvhxaiJyKQ0sufGtuBMWjE5lSmNEkJU73OEO7WIvu9xx+i2XNo6Mpv/26wNOXJ7kDZy6CMMT+uxafvSjH+3e/va3t4UUMk6m4bIwd9ppp3XHH398k+n0F2nqzVeHOO9xNZy47eqHv+qcRQgLCWmHtBf++R1zbc+Y9ysFeO8UGblL+5ifGJzGcDLF4LRw4RRE5C68lMcj3pP2lZ5xfzltUeuSMviT4ivMGB45sJU4sOkMzQwYOvTLXvaytruXycgtcnYRTBY6elUQEhYft5xOnzxr7WfQCF7v6oY2vknIhOOGSzuZJlhp6uoIkFX4DG7ySgvOzVC/1Gv0ty8HyF8e/SsKDzn0fYxdhbe97W1NaXI07XGPe1y7ddaJgyhsVVYjx+Jq/EZzMP0qdORdHTx22Ryh9R01uo1Dvh13SRmeiMMnvnf5vYdfwbtefuifhceBHaItaXVsTRz41DFxfGWm3PDEO6WZ0W5Xy0UuDEyKIOPAroOxMIaH8uBKfkqhEx8WMuxYUgx9X8mgtPBorATDKau2SWgTn3rA26d1qP6JS33yPvo/zYHwkh9+g8A3jziLBuecc07rN+Z1bRCX9uZb3OAYnWAyjsBhl9olXbe85S3bQgLDgbEhH1i+ON906qt2Do1TcRYf9F3HJ4877ri2w2nXm4M/tIZu8VVWgkf6JId+8kfenVZyFwOj1yIK48fOPDoZKH6Ow8+zuZEbbRwDlCyjB59SP/GRa3DTaJhE21aOx484YQ8+crWN0obS8Mw33XY67Z5/+MMf7j796U+3UxLBoR3MV+TgyCOPbMfsLUg4kcMQrU45HmXUssFkrJeetJp3Uri2Y+pY4yblG+NHDmwFDmwKQzMdKwzL4GzHwAShwzrW8MY3vrEpGCafTDw6NAdGx8wTXJvRzyCl3pQq9TH5OELrIhWTitVXPx5/0kkntfTUI/X2Pg5E4cro7w8OZBLWt8isx0TKp0hRgChyLgBy66ddpBNPPLEZY76DAQdH+malcTPKbn8cCr2Jp7zqnxaEHMfSTym7fraFDy4KZsah8Cy41tMP3UvxOnDTaAsO9fF4T7sak8RR1vjGb2EwTqXk9ysdgXVhCwPAbgPD0u4wvsoHn4U3+Dz4e/3rX7+N+W7gZFQyNBmUOfpmnJRPHZTHHwqH/qE6Jt9QWo2bhqPCHWjhKj/hZW0HceGddrWw4HMYJ3kiJ8aStCP+afvEaWM72xzj0O9mOv5qvImTN44sccp0S60FDcbtRz7ykWZsKBN9DAvylJ+ysTtqAcOiBXzweOAx7qVO/NQp9RIHls+wIfNu3lZHMu+iH2Ok+nPw+V7YQhXZduux/OrNBV/KDW/kF5dyG/AB9A9fuCE+JC3swE8usiHdeMToZPwbw+102v3Oz8kYv41BFq/scjoh4SdSXColTObSNhWvOG1S40LHJD/0pi3jgw++SXnH+JEDW4kDG25oprNhWsImGDfFWYlkgOm8jsH40XQKhsFAnAE3EwFfXDr6Zm4E9Qy9BkwDmzq7lp9h6Xskzmqan3OpR/PqJFMHps1c35G2rcsBckpe9Ss+mYuy5Buopz3tae3338BZkXdTIoUtcp08OLAV5RX9nPp57Li97nWva7u4+qxjmn5QnfJrwSj17POsJazzv9C+2mLhSX3gwgdtGVnwbgzjGI4MytwUSqGj7ItnXPLxLXj4kQsGpNuJHWn02YCdBTvkeOynZSh5VRHPWJ/5IO/oqfQqIzILJuXFD5/y3ogb/83EgfAuwOGh+KSJq/FkgNGn33Daz2MHL21pnsvx2bSZxRxH9I0v0jMXalvh6iKj0uD0e7jue/BzGAxARl/wysuwsDjmyKQFDQvb5I88irOrRcbVCby8yojh4kim3cqLL7647dY7JptdNPXg5JHXMVm3nzomqwzyjT92e+1oWqgh5+hOv9JnhENzreuBFI5MqTOead/KE+/ahY9f+B1ZrDKIt8ZybWQzw4IAo1M7Bh4eixx2Oa95zWu2BQEGp+/ys5AKf1zKDW1pu6T3ffChiZ8wODTU937e8X3kwFbiwE9/TLOBlGcA0bkcUfMNh+NU3t0Odpe73KWtQBogMtAbTKRnsMkAsdk7qAHG4Bj60W1QcnmFY3h2TKRZicUH36lyVmLlC682sLnGog8QDqRPxVdt/ctulNuSfVNHni2GnHDCCc3YjKIUWP4kmd3sfRV96od+4w6F0zc8LppwuyFlxQ+tWySyy9JXPPTXre7SRuGDOnm0c76BsujgWBqljRKPLxbMKM/G7PBRPnjwiczYsbSb40ZYSj1jk2LHsKT8J1/lqziPNuH3eZy0Kn/yBz7pmTe8j275HJjUp4MpfO7DmesYVNpEG3gs0tgJJBsecVlUIGcUfIs5vsUVLx1+T9pfPuEcL827cuxcuhDI7qFFEMcnP/GJTzRDgxFnEYTMOtLN4NXPySJDA618uJWHfuWTa7TZDaOreMg7Q1o6OkKf+lk4ZlzaIXN0l5xHJvnV0MbDKvPKVD684uE9kF3qn7bHF048/qSttAHe4l/y8MmQRSxjkKP45MIiP92TbJjbtKPTFnbgLRwY35xosTjA2DQPyGusitwqR3meWRy40FXDiZsFxwgzcmCzc2BDdzTTGeNjlvCTnvSk9s2id4PGe97znnY0zW6mdAN8BhLp4jKpZODZrIyvtJqkcown9FoVpbD7MWp1M6CdffbZbaJM3eKPg1G4Nvr7gwORVXIWWUuc40ann356++7I5MpQ8DNEjAYu/VI+eeKCJ+9bwTe2cOph7KF8+ObKbi5jiqLh2PsLX/jCNi5lLOLjw0a5yve1oIHS5jsnyjhl3ZFAOziMTXyw+EDZjoKdMtFBRuwC+K7SpT0UNDtHlG2KPKWPYWlsk58f2akyI5z3ofqJS3r80JF2THzye09cYEd/OgfCuz5U5WNg4mtX3+S+853vbN/IUdzzPS7FX7/i0vZwaTOGmd/JNBcyxhgVYOCNHzqSR7y8gRUfeIYhubXz7gIzO5wWiiyQhNbAwyGchxzr0+piLAAvLS7vykcro+Soo45qR37tZNoZY8SGbjgYofw6ZqJbWVzSlIMeeQ9Ul/ZR/8p3/PKON/iVtLQH+NqW4V/g8m78crTf77ea4+x0klk71/LDp70sWuR7cfKpjXN3CLi0XfAO+eA4NISO+EPwY9zIga3KgXXf0cxAkQ5lgMgAa4Aw+J933nltggBz5zvfue2S+J6CM5BEecuAC044ONMYOnLwC1eYDEDyCNf35OfXtMT3y0n8LH6llZHZL9+q/r3vfe+2q4kfVtg+97nPNSUN/tRdGG3cauhpCMZ/IwcGOBBZ1Xc83vUnk65JmFyKN+k6cUCJiiySzfQ9qBM/UMymj8oYkLHHTgfD2mURFsHshNjhtKvn+HD6aPiV95VWVPnhX2iBK+Nf8GoLLrDCySvOeCJP8vXhwaad0aydc3EPo8DY7FszRmWOwTIULJjJF7zKMl4zJCnXFh/4FGw7COSFgWmXSJnkRB6P90pj6iM+LmHwk9xQWuKqD1feJ+E6kOLD26XqHL4Fnl/l3Dt5M8eRD4sTftvQ8URzmstwOOl2FMFyDE5GnHi+38p2S212MlOuNsvTMha5Rwe4Ko9gxXFk0/d2jEBHtOkYjkwyMNBJ1hmiFlVi/MrrQVPkVTnoFo9u44JFJ7hzWdURRxzRjt5aZHH0W9449MUgEU594BOOSz2813DSDyQ/fMGj6sI/cTXsXZ6MT8mfvP13bRsB9A4AACAASURBVOjbWQthZM5lURbUjO8uczIGkmc7nLlcSBpZMvY71u1kGjngwJIT8owGsp5xT3rak1yRBfRk3qxyEPpDd01L3JA/K9xQ3jFu5MBacWDdDU0difDXDiBOR9IhfUPh3Lw4j58yoaBUB666wCYOrjiw0tOhEy8ug35gklbpA8fFl7ZaF1xoCh/ECaPFjbMuLzDAOb5x7rnntgnX4AUusKulY8w/cmAaB2o/CBz5pISZdB0TM4G6TOPYY49tsltls9/ngmOr+elz6MYT44sFIb+/5sp8hqbjVY7iOYLFRRmVdy2ccrmKT5xy8NmTtPjShaPsBIZSIz7v8MJjNV89KNoUbso3ZcpOD8PSAxeHB3B4KEgUNCv8diwdh7XoQLlmWLpcxUMZJz/y1vqI40IvuqoLbI1T7pCbFA92KG0obgjvgRI3jR+ZV9M+2kVc5Cjp4skTnyy9613vat9H2j0kT+DB2sm2S+n3UhlsMdrkE2YAumjMBUBkB23S+jT238HEKct74sB6lM/P978WQhi/ZNwOvUe/9uQoeHa14CazdixjXJqb6SmMCDgZmBZTwCk7Mh664ic+PE18fa/hpB/ofr/N63ufX/gvvcZHHibxkbz5NtfPJzE8fRbhu1oy7MZan4w4wWEOdPrMJwN2xc0BFhock3bc24KDcvUHRia8ys64HbrBCIv3kAvvYENrwskzifbEJ1/eR3/kwEZxYN0NzVRUJ9Bh0mkM/DpYdjPBWRmyquSoAgUnq3/Ski/4hnydV+dOp63lgc8AoOx0ypTRx4+25BkqazVxykr58FDSrORS9NDvdwoZ3yYurk/basoe844cmMSByCXZ1Fcio1Z1fZcoznFH/dRPDnDJI1zzTCpjK8SnHuGD8cKuiCOgHt/zUEz5D3vYwxpP1At8FMnV1DN8D2+9ZwyotImLoiKccY8PLmOsNO8UaEfEYlRaQHBpist77FpSsin8nLweuCjYlGrjFMPS6j8jkyxQzBiXwhYhQic/YfTDFTr4ee/zSVqtfz99fF8/DqSdyFjCkT9yEjnTXna+HS/3TRvlnAEXWSI75nW/He3SnVe84hUNVk3IAecnPxxNN7aQI3mVqbzIRPXliZw0BAPv/Xj0xpn30WVBJHiVaf5lTDhu6z1l8OVnWDKY7VaiM+nBAX/CqZv30W1uDmQc1cba1o6lo7Hk1gLj1772tfa7v8Z8O/TkhOHppI/FFbuc7tdgpFp8dJGVxUnyUeVAOeKid5JvzmIgeeLIS2SoyldLHP+NHNgCHNgQQzOdBn8yUQk7eqYDS9cB3TKrk+uYOmLy8ZdygamTnzw6ajq7sqUHb8WZDp244Mv7/vBThrLvda97tR92NoBRCK2iUeaslo5u5MAsHOjLcD9P5K0fX98rDHwMKhOphQ/vdq0silC2vOu3nHzCmTgrzq0YDi/VJzyheFA6LrzwwqZouGHVzZZ3utOd9o1rxq7AT6r3rOloABv48DtjWPCHRnDKl26hjvFo9d1JCYsFueRCW2pXCjUFJ3UNPoYl45FRYLeSb7WfUs6wJAPaP+XKB0ef3tDdhwOftBoOHTWtpguPbnkcCE+HcvX5PAST/BU2BqQ0ckXBtjhq18fR64wJjDI7QwxMR8/JkkVk6S7Wyk9MOK7IyLSTSXZ/9KMf7Vu0SLl9H63iQl/e+TUu7+Iih8JR/qVz4uBDc/1sp6YFb99PfeFHv3cPfDEo4EkdWoHjv03FAW2T9uFrS+3snhC7lXYqHZO1IOIbTp+RMC4t1vmcwDFs46s+4BMCnw+QZ4aqx5hqrCUPVfYyXmMGmYmMeld+3vW5/ri/qRg4EjNyoHBg3Q1NnaV2XGGdRgdy25fJRpzdO0qcDindkYO4DOx5r768ngzsOqMOLU5YRw5MaIG/psPnvfopM/G1zNWE4QsdwYMXJmJHMNw8S0m00+t3Ra26jm7kwDQORFanwcySFjyRUXkojo4I6UuclV4Tpz6USXOt+8gstO4vmCgB4QGe6J/Gl+zmusjGNzt2AF0e4XtVTh5w4dVKacz40Oerd7RIx3++sjyMRoqOUxEMYGG7lXaa7Fh6HJVVv+BHH3wW9xz9s1NJQbIS72FUehwTpHzL54nyXOlLGpzKCJ1g8kgDV13FIZz0Gl/hx/DsHAgv5ajh2TEsyEfya9M4ixiODfoO84tf/OJPGZhkxbeQbo83VlDULUyQC/3Du4VVP2dmkcbFP46yRq4i05GHabIwLS20Bk/k0nvkE1/CG3HSAi8+7/HhhIcTx4UvwSk+Y0DF0YDHf5uSA2mztHPaNu1HH2VAGhfpai4EcjrEZomFR4ux+oTj1k6MZBHSgopTIAxViy75pj/zBJ882c3Mop+yI1OhI++bknkjUSMHehzYMEMTHTpUHYB995VB20SjI+twieOno9V6ZGIQp6NmMABrR5BTjrR02hiX6bBwe9Lhc5Y+uEND4Gv5qw2jKeXApSwrqa7PdizDgGPVjPKYuq22zDH/9uRAlaOlargUbNJrn7P75SgcGbW7bjGE4eE9fSv59kdfWapOa52euqePpp7qaIxwyoCywIjzjRcFw4q2NGPOLDwIvybRnrLBVdhKG6PRIgBlh1KT3/RjUGozx7rsDBlLqkOjxSv18K2t3Urjrl1KcQxO7WzBr5YXmoKr0iYtT40P7cHjvYaDa/TXlwNpl6VKJftgs6BkDqVMu7XVJT92deyWc+DsVjIi7fpQxh2DtSNE5sghHy4LG49//OPbguoTnvCEpoSLj3yAIyeZm5eis58eGROf/qtfwu/hwHgSV9/l4eSpuEJf+rj3CtsyFcNTujrEgE766K8/B2o7DpVe2zbtKg9ZTDvK592iCcPRMVnfZR5zzDHt5Mhf/uVfthMuDE19Jd+56yc+O/Bbso7V+t1gu53G2uAPbvIUmVV+FhTJ0FJ1GKrXGDdyYCM4sO6GZjpHOjKfsyPg2CzDknHoWIKVULt5lDb5aoeTJ3mlJeybEKtK8mUCsIpqRdWH+ymfTwGzO0Mxo6jp5PkulHIFxgNPcO2vRgpd8CdswHrNa17T3imKflKAEsgIHd3IgT4H0gf68WvxTiYZUI4G6av6ImOEIln7Bzh0eMTvT5rWol5L4Uh91Dd1EvaY7BnZlIQLLrigjVsMOxdDOBaYfrxUGUulw5Pyg9PuKaPSjmWOwDI0E5aeRTb45fMYX41tFB07lnyr8trS40is9KoMp8zg4dd2Fa4w3tGr/cXHF9+HrXWvOBIvTp7RrZ4DQ/xNe4THQzApOW2hbR21/uQnP9keCrUFFnMux3C0AOUIrJ0eSjiZIgcUZfNscEWx9o2347JgGaHgzPtZHIZ3Gm2hcSk/9awyKY/48EJa3vvlJj9aQk/i+rDB2+8L4ke3uTlQ2zZygeLIRWQkix/ihc0HdFc6pxN5NggYmi68ope6DItsmyMsBrrrwOKeXU6PzQULlxw4izWRLzQJZ5EmNG5uTo7UjRzouk1haBqI7dwxpnQenVgnzSSkoepgnYZLR9P5EtZxHcEJLkYZY9LtdTp/cMHte6qzzjqrDQQ6r4ntgQ98YDNK4QvO+MqpZYWOtfaVQdGjxFsBpuCjz5EkP6kwGpprzfGtj4/MrLXryz3l0gRpZ0yaY5RWZDPZpvxMwvuDppSxXr46pB7hR8Yi8XYDKcn55gaPXAjhRIb0wK6GXjgoKHhvUYyx7/EdkMUyhr/bqRmWaMR/zhjCsHS01wKVY86OwjIms2OZi3uqYSlv6sxPvcULp17G0MCKS7ktcuBfxSM5uPrxA1nHqDXmwEp4ro3tyuR2TRehUKIZmMYAfYB8OTpuZ8cCjO94ubQ1Gal9QlgaWbIjRLkmi3w4pc1Ka19WlSuuuuAT74nMJm8fXt7ADOETF/qCo5Y3S3offnzfeA7UNk0biqttLEw2+JHjUE6XvPa1r91OidgwoLfRcRme+o1FQnodPdV8wQg1FjvVZ+6wy+kUABzZfIGz6sQpa/RHDmx2Dqy7oalTcnXA9+6jaXEMKoqRHQFO50rnTudvCRMmEZOV37ZzjA28bz5dpGPSo2jBDZ/Vf9+UKBeMciiNFDA7n1GilBWaa7l9WpK2Vr6J1jdgVobtTuALJTOrxkuVH5qXgpuV3uADv1Y4Zy07cJWGxE3y14PGafSsR/kUMRNdyjLZceIsojjOacfKiqnjPeCGYOVTl6SnXoGFE4xjcnbMhPUXfcluWIVLOP6k9tlK8eriwZfwKRM+5drvQho7XNrlZIRdxigg4UPNq+71XTiGHt5SQOyM5tKeGJMuWrEKLi0/tRD88qHJbhKFhYJi7Mi3lTEsGZlgQgM/9WuRi7T14yp88gQ+NNT3flw/T2DjD8HPkhaY0f9pDpCpuPCWjAh7zC/8yCnY5BEH1iPMUYgZmH7OJzdtklNjkF0Xu+MuBaNQm2vJGRcc8eGThwtd/Mh/4inX8tR5uGWa8i/4Kkg/Lu/qmnDKrPmWE9fPl3f4axnhb7/swMeveRI3+ivnwGr42W9D72lH4fQVYTIsjdzGkV9zr5/xcarO2K2P0OX0IycBzBf6o/nDyRjGJv3XjeYWMW2QMDzdW1LLiRwpT7wHntpnwAROOpf30DirL9+QC96htK0Qt1J+bIW6bRYa193QVPEqmJmAdLg0OOWIMpRJTrxw0icxT7pObDKknFH6GGgmNh9h3/rWt25KITjfldj9lE5pBuMKaquxQzuGaPbIyy1FyyQaZ40PjyiMjAblUTINJKFhGq7QNwvsEJ6Un7T+e+In+SstN/iGyhuKC/xG+CuhZzl8mRV/ndjkUYZJ7Pzzz287CgwOBqdJy45DftMQz8D2yxHnqf0PjF0zl8lIi4FFyZTWx7ER7bE/yuzXy3sm8qQ5dWDH0G6PRSs8Mp5kbAtdgQ9/824nklHpRliLA3YvGfSUkbyDgS8KOPwUG+Ok2289xgrfVdppNoZqc0an8S1O2SmX7z2uhsXVd7A1X8Lgaji4qj8tfVpaxTGGl8eBSXwlQ9q137awJx6MeYZzL4CTNI7J5vgfo5MjV2TOcT/zLoWYHFaXMSS+NP2nli8u9KZvBW4IV41baTjl9fOLR9uk9D58fV8qT9LD57xXHGN483Mg7RY/umnkpspw5Jwv3tjsm2V6p35j3LfZYUfTp2MMUZsJdj89+f7TcVrzN4PVEVvzABxZoKnlCHvQFxr7XDV/SKv9sg/Tf6+4Uh6YlNWH3wrvtR5bgd6tSuO6G5pVWDHNpMZRzrIaQ2nTgWqHHWJwcBGWPFZ9TjrppDY5OtYT/I4s2NmkdNsNsJtpJSmdxG6nyZIf4Qv+Wra4pNf4tQwbBCjwHMURLwwIdjQcW6zlo6dPZ+okfz9tKTqDO/5S8JPSl1tu8CxV7lLpwTNL+dNwLZVf3qXyD+EYigvNy/X7uLxH3imIJjG7kCYlu252HSiGZFw/MGHZ6bKwkr42VC9x5I8RxQji7Lbbtag86NOz3PpsVXiGpot0LAgZwxiHHH6EP/HFaxvHXhmWDEoGqvcYlgx6vA7f5dGu2sgigUsjKPQMSWFjhDHTu/QoH42IYjBWGtJWoVFaHnFJT568B+fobz0OpA21KVkiU54oyqmRdIu0Lv2yGGvepAhXA5PMHXXUUU1Z5pM9LvISXNVP+eKEp8HWfOsdrnSm7CFah+ACP/ojB3Agct6XFXOyHUsGJL3TRos7OPzKgG+ec4GQecCisceYb2fTzmjyGv+N95n3h/qyOI4Mg+vTspKWSr1WknfMc+BxYN0NzbCY0FeB981RnEkraXWAT1zgqg8usCY+x3goxRRtnYtyZ4fHd4/KcgV1jqHq9M7R+66kltGnsZa3P8NRFJVPgWV0ot/3X3Y2QhdaK72haSguaUv5yRteLgU/KX2p/Ckn+ZeCBzcLTPBtVr/Woc+DldJsImHgBJ93YY/yyIyFHN/y+fkNRiJj0wop+dLfhBmh0pIfPZnA4HJUzjFu4RzRBLM/6rRSXqx3PnXPrqI2wDs8oiCIt2iE78YcC0WMUKctGJgMTWnGqBj6+A0nHlvNjhFrh5KiYUU831uKc8lK4NPe3tOGyo8THwc2Lvm81/ih9+QZ/c3HgbRvvw1RKi1Pbe9+mkUOSq/dS2OFxZN8hkJGGZh+liFGpvEjC6FV1mbhTp+OWfJsBEz42i9b/BCv+3Dj+4HNgSrnCUdu+BaB7W7qVxYcnSAwN7id1i6nk2xkzdwh3ekCJ5MYnBaLGZ8u0crnMbNwO/PDLLAjzMiB1XJgwwzNEE7gKVdW9XU64XzfkYkxsH2/TgDyesRR8E4++eT2TQnjzAQIr6MI55xzTjueoPOKU77z8AxTChwXvMHHX08XpRMdJnZOHRxVYjz75o5xPCtdqQ88wvKlbrVeFV8NJ398eWp6xTFruOKaNU+lebXlL1WHWehbioalcCyVvhRfwo/QQZbhtIDC6KlOfB6GkAsIrJw6Aqu/mbCsklIcGTQmMscuyaJHX2FoZqeNLMbIWYqXlY7tFsZ7PMylJ+pn58fV9Y42MSqdnPBNuB1LBqfdIk576cf4K5zjyDn2agGAEpI20S7GNu2oPZQtr7FBOHIANxiuxrWIxX/Sa9qkcM0zhjc3B9LmqKztKT7tnQUp8sYl3kkZ82M1MH0zRrYYkr7HdjnJscce2z5BMQc5CUEOgye4WsTAv0pTksXJFxeY+InfKL/SlnClbShuo2gdy928HIjMkJeEzaGRH/3IWJ6FX/3T/OxYrV1OBqf+aW4xDzthIN2OJiPTd9H6pMv5zBs2J+CGk4M/80Tt+0txLLQGLvTmffRHDszCgQ0zNNPhCLLJz3HWOEqbzhCYxFdfWoQejjzidCodzs21VoCsBMFHAberqcNlN9OOgd1MZ9/TAVPOtPIDsz99dXIUOPU0aPjW1C5IjtYOlR/4+EMwcEuvMOKqq+k1DKYP289X3/vhWmY/Le9RYPLe92fBsRTMatLlXU1+9VltfjjIcuQWvuyqWRXVp1KG9sLTtJt4j0nLbaZ22/wWnkttTFQu1bIAI2wBhvHDcNJv4DBJWkHlgrO9HID/9EtGYsYsi0Fnnnlm26m0kxzjHGvSHvK4dCwXfsW4ZNxTNigNwtktClu1YXAEX31PWyQu78nPT1xgatoY3h4c0LbamV8fMmrMSLr+7AbMP/uzP2s7mJRX84t4sGTQzokdTEf8LEaJj5KsDO+Ry8jWcriYPGjaCNcvdxo9SevTWXFMgpGnwvVxjO/bnwNVNshC3mMEmhfEmWvpsHYrbcI4xs7gZGDy6bVOKlkMMm+7QMg8zeBkeJq/+XRpi5lcZI+fslP+JM4nT9L770vlT7718Cttm4mu9aj7Zi9jwwxNjImw61QxLExaVkr50vmB5VcBEq7CJT3KNMXvnve8Zzv6o6OCo4Q7gsrBK3/OyJtQ+66W1S+nD7uW7ymLT5mnbHrw6d3vfnf3oQ99aB8fwreUH54ER+Krn3qBySM98RU2eCpcTR8Kg+3TNQRX41JO4vrv4mtcDSfPcnz5V4NjqfyT0lPmpPTl1EF7maC49BcybtfLrpmJqLapsHITF19e7cXotLNhYeYv/uIv2o6lXTRGjyvXHfdMfnmyqw5PnuXQv11gKQf5zlV7OGroaD5eeccn/AXnt4Edf3VMmTLAkHdsmW91Om0RfmrPtC8ccILxcNLh5aTFTzvFT1sHpgEu/huKC3yFG8NbiwNp17Ql+YlcGRssLjmeR1G1k+kiEjBkloLqN6Ud6XPaR/8nuxy84DzmpbwLr8ahDa7Q28c1La0PO+s7nHE1nLjqh67QmbSl8gVu9EcOVA6QG30o43nGdPGRKWO7exTop04TWBT2vabvOe1yMjwZm+YBaRaN6IcWiR3FNbeYZ9zJYGGTUyYZjjxXmiaFQ8+k9I2O79PnfTn122j6t3v5q5sZVsmdCIOJbUgodIgoUf2i+vBw5Qms44BWeFwE5AgbpzPDy5kYpVs1Ug46OLgrfngT3wL7+Z+yQ2N2LtFnlZmyL5y6Bi4kyZu0Woek8+uA1s8vvZ8v7+EDmBquuBNOnrzP4lecS+WvsEO4V5t/CGc/bqky+vD996Xq0Ifvv6d8eDJZCTMypZETfto45QU28g4vuDzgwTqmAxeZc7GQdHkteOg7ZDN5+Aeqw5P0SWG8wCNhfPIe3tsJcoqCIm8RCYyxyQIYnxFqVzmLbfBqj7RJ+Ow9eBMO/1MWP/BJy3v8wPATDuzoby0OpE2HqJZGliwkOb7txIPTMb7DtOvOgSF7jMrcwG5XxaKtNPLBkbc4cZHNxK3Gn1SHlL0a3NPyVvw1PImexAc2vjKSNq28MW37c2BWmQBHZgIvbN4wN+QEkb5rcciiL6PRt9R2Ni1oMjjtePpEwyKnNAtI0uxyWjByN4nTCAxPC5r6dMqdpSUi06FRnsTNkn9/wlSa9mc5I+6Vc2DdDU1CYWLSiYQ9OlHepelcKxEeeeDhMvnpUBylWjnpHNI5nddODic98eBCX/JUmpIev5bdkK3yH3wZXKxW1Z0LqENLygeb44x8Lt9/qbt6pf41L7gYHHgXfCnDe3gqzrsnfBJXnTQuZQgnrsJVnDU+4eQfygtmqfzBE38SHuk1rYaTd5I/C2yFqeFJOGv8pDpWPGC0hTg885ikHN+0Q0FuuOSRDj78FU7+4CA/DCHfB/tWM98IuqDASio4MqOf9nFLCz5lTKpDy7iF/oVfQySrLz5njAGbvgae0YkvfBf/aBuKAD7ro75/Y2B6HKG1gi1sB4ni7/i81WjhXNakTOVoa34e5XjCd3Ql3IdBG9j97ZS7HuXs73psBvxkrLZnwmjD4zqWh17853wn7HIfx+wYmO4pIJPSfW9t54OB6ZMTP1ViIaSPj9x5yB0ZD25yzOW9vQz8Wy85QIdHeZ6EQ2N9r2SK5ypfE1fhaj1qej8e/9JHkx8MHuIfJ8zVMlvE+G9LcaC2fZ/wyEiFqe0dGZAONg+Ymifx5gabJH6yz5zi5/osHvmO0421TiXRbS0iWVjy+5wuANS/fWvtBnpGqzsAIodornRWWuyWGi8Yq+YmcGhGX80jHHqT3udF3ms+cRXevKXfVNeHT56UV2GFQwu/5h2Cr+nBU/OLq/mG4JNv9H+WAz/dkj+bvl9iCFQUMRMdhct7Vm/somjIOkBr5DRuiMp7/HRKgzt4nc7V7C4EkhZBVpY8yjbp+gbFMdt8QA0uNIKLgAnDoxNIT0cQF1fhE7cSH23whnY4vDt37zIXg4d6qkuUSUZ1dksYB45PGEi41L3yET6P/OiOsgA2dZY3YX7CDenAv6TDF5e4+OInhZOn74NfSZ6Kp+bv07cW+GtZwhVnDSet0tDP613bxFXaExeYyDsYcqMd3/Wud7Xfk/WuHGnwadu0b/qgdDtojucwLrNqajKyo8H44d72trc1mYeTzGSBRhqc8Cgj5fG3m0vd1Cttghe+h017Gc/wkqEvvvLZmIF/cdIdYfRdXNpKGsPSEWjt4bImk3tunWUASLcYwPDUxykeKR+NaePQmPL40tHMyROYvp88tc6JG/LBeeKCL++jvzoOpO/CkrGfX9uQDOUd/7UHA9OOh7mOwmnnAxx85MfJH3cUHHfcca2/k6/MBVV2lQs3+U7b8sHEJT7va+XPijey2pdFdFTZDNwQ3uStPrjATsqLN9LwFU8STtniwVS44OJzgWkv478tw4HIRiV4KK6mp83F9WHJCJe+BVa/i6v98vDDD+/uda97tf7rwjnfWztSy+BkIDpaq7/nJ1Te9773tU/GGJ30SYvJ5hZzSmjik0V0OQXht+nf+ta3dieccEJ3/PHHt51RacafPp0Zm4IrNMdPPB+OWlZglF1d8ogTzjs/OPh9FzyBrzDSkj/xfbi8x09Z9b1f5vj+sxxYd0NTQ9XO412nYuRF+WFcaUjxEYZ0rJ+twk93UvBwUuAo2zpccOmoUfSUBdYujeuiGZsUa3kZvNLAhgY0OYJLIZSX8n3b2962waFNGZn0h2hcThxc6PDkt8vQgq7HPOYx7XiEehk4fBTuuASa1NmxCXkooWi3W+IolG/AKA9wwsWlnBoWFx7Kn7QWKP/g4eKXpBaEo7oKV8MVpobRETcEX9MDV/1atxqfcM0f/PGHYBK3Ur+PG55Kw0rw1gFd+6ePiKdY2rVIWypfe4YvwiYWBgxjJj934hi5BQryU2mEk9wwfix0mHxyRBdO5fDRALd34e3i8C+8U6e0pzi8wBP1NaE7mvSQhzyktYHbfa0Eax98ST8Gi5dZUXZhUBbYwOrH+rMV6ZQtrwWBtBvlwO6nvm3XMzueFpsYENkJVW5c6NY+tc0SD06dUlfxKb+PI++B7ef1rmzpo1s9B/CRDGi3OPIWozBtSLb0V3OV+c03mB/84Aeb0gleOvmwGGlHxA/IO15HbqRFXpST9ldebeeUv9n8yBq6I9/qE96gV1g9wVZeBkZ/Nt9T0PVJ73aH8E7fTDtoCzqFBV590q4wI91j4Sfl9PmYcZvPhb7QE/5vNt6O9GwuDpBhskUmyZq5geFo/jaf2OF0fJau6HitT2DEk206r289LWLSfX3PabfS3QEWSck2+SSLOWrvojBzmTHF/GZHFQ1caJEHTfJPkmO0kvX0N/mTJ/H6lXDfyQOWLpy6mCvpwPopXnjAcODTT823xr08+Twl/S9lKTd0VFpDj7jEBy55R3+YA+tuaCJDw6YxE7YqQ1A0IMGujRrSJzWqPHEE3fsXvvCFtptpskhZVm4pX47/Ob6mc4D3o9RWdCnchM/ELQ9hNcH4wNpK8Hnnndc6L/z3vve92018hDiw/HS80LMSX7nZXcWL8MWEpnPbcbKblKvorVrp/AYSyiml1wqUFWxKrxsDKRTyMSgYF8GP5nQ0vODEVV99xVVY4cr3lqH8G0obiqvllOz7aKhxwpNwDMFNg5U2rQ7S1tL18U2jF3i2pgAAIABJREFUbbnlaj8PR3bIYNo0fupK/sk5I4UsWISgZAqTfXA1j/fkJetgYmi6ZIvMKC/8DO2hI+/bwU8d+22nLzq+xOGdPvf4xz++fXPJ2P/EJz7Rxhz91OQoP15yxj0KahRV32riL2UgC0cm0kye8nsYoBQJvM94YXGA4al8bWwxTF/X5lGAlcUgZVQYA7Rf2pfPpc3VJe+1zn34wPDB1Sc4G6Lx36o4oK1rf9PueJ32glybkh3KJbnzHSYlk5EEjgGk79vNYGBSMMmDtk57wwN32nlVRK9zZnUI7fpM+lm/LuEZfqb/0gk8DHRzqZ1gY5z+aPFWf6TgyovPebLwo79R3C386HcUdo++l094sEOZ2i3jZuhFe+hdZ7aNxW1CDpCzaS4yTWYqLP3V+G4jxGOuoCsyOrPL6WitMYHh6ESNn+Oy0WJcoA8I0wnMF/I4cq8/OaXz3ve+tx3NfexjH9uO2JtfuNCjX0SmyfiQy7iVNHDJz5dffxDm6zP6of6IBnqxfup0hrrot4xNc2MMTmVkc8m4Z67VL/VR366aI4XNmTZkGKIpU7keThxcceLzXsNJH/2f5cC6G5pVgDQSARNn8iM8nItHxNVJVXwaPo0cv1ZLpyOI73nPe5rxBQ84CrKjQYyuV7/61d2HP/zhfQO+XUGGmQ+mHRWMozzqoHDpiCab0ECo4faow1pPEKm/CQ8fPBRInVhZJq+73vWu3Z3vfOe2q0mhZVwbFAwceGBgMFm+/e1v797//ve3j8gZnL6/8VG4zgZP2gGflMOFt+jgdLYMBuKkhxeBbYCL/4bianoNzwLbh+m/V3zCaPNMg+unpT59XJPe+/knwU2KX0n+SmOdYODKow21PVjtaxCl8FCEXCRAxj0GWDi0J9i0a+j1Dpd21/5wmXgM8JSuXLAFPoNx6IusrKSOKX8z+v36qC9F1QRICc3uhgnOmHb/+9+/9VMKvyNNfhfN5AjWxGnHhKJ/pzvdqR1LoiB4NxbqyyZNioKxhwFh3JGHzyilLHCB0yYuiUibat98A2pizeRqLDHxmlxTJoXZO9q1H6f94dK+XOofWROHB2n36gcmcQ1BwZH3tfBTRuhbC5ybCYf61bppdwql9rUYyicfjs7ZqXA8zoKqNG1o3iCPdi/ucpe7tJ8qoXQZJ6RzFX/aLu2+mXgxjZY6ZpFjTlytmzj9zxxprrSQnJ+PENaX06+SD//xwoNnfQcuMHZMjLUW8fDbLpFxF7+lwRGa9LOUAed2l+M+3w7k99ruK+GDfhuZJDd54CVX6ddk0cbIiSeeuO9zMgtR2ZzInEJ/FM9w9L22nzMiw77/ZJAqizPXmMv0nwc96EHd3e9+97a4Ik25ZDvhFhj4FzmXBD64AyoOLnOruVC/dKLQKT7zojnUnBj9RV3hTD8MnvQ1aWD5cBs7zbM2X+wC04cY13hlvmSYggt88NU2E67vgRn9n+XAuhuaIaEKhMa020igNW6OmhGMCCAYYb5nqIHFy++7TLt5BFEesDqO1Z3b3OY2rYMRWsIKnrPao3wGGGXLZMLIfP7zn9+E20QtnoLNwakjpEOjlYMvNLeIGf+hPQ7uDBJoRIvHRKWDcNLBKYvB+OAHP7i7733v2zmqx+jkG0goqRRSHdYOiMeRYh+EH3300e24RH5agSHBmWTRA7dHncJb6cLK5uK3lzX8t1Z4K18reX38k+Bqnn54qTyrLSP5J5VT4yMv5FE+SqWfJjBgOhJjIDVpZPdCXcBp28isvHFwR76lc5QkxqmB3i5bTgWEDviE+eQm8cG5XfxaL2H9y4KQMcCCllVS9ddn9Vf99gEPeECbkI1Lrp/XP/Xt7KbokxaDtNkDH/jAtprsOnvth5+UX+Oichj6eRirHu1hvGOEwpmdF3IB1qovAxS92pMSTqFAG6PTGOIopTCD01igvYX53tHh4eBIuLareselLO9DsIHjg50EMy2t4gge/iRcffjN/q7ucZXniRen7RlM5i8yRLYog9qC/BkL9H8LrRYmKVLyywumtlkNKzflCG9WnlYa1cm4pR76X97F6QtZIDP/+wknCrMdX8o2Jx986qo/638e/cV7cMMFv36G1/pcjHq4PAx9Br9+Rmm3yGssptDqV8qQH05OWHtVGlrC+O+A5MBS/S1ygznpz8LykSHpkWXxdFgLH3Q/c4ZdSroyObVARVckw04B5mithWU4xHPpV+SfHvCyl72sbWbQPcl1PRUFXt4hl3g+OumccOuv6RcuzNM36eHGNnOfPiePBzy69E96jb7j0U890uFNP9X3PWgXr54W54wDdHuLQU545BixcVM8+JSHtrQLWjnljG46BzbU0ESaBtSQJkJOI1KWCIHVBe+EojZw8qXBI3jiKb+OuBJKAuDRwXzArCMQDr8LZoKxkxkcVmd0LkdoCRqadD6rKYxUOwF2Cwh/HJgIdGhCy3JdzZOwzqeD6Mx8juDX3QZ1CzxfPe3KeiimBhLHgk2qju3hjUmRf/755++7iSxHaxnZDAkTYwYM5aIF39Q3PE25k+oavk5KnxQfvCvNPwnvUvFD5YWWobxD8ENwNW4leeSflA99odEAq3047UXG7ZIZgLVlcIDxgOG0p3BwBZ804bQ3GTToMqI4csSA0VcN9HCSP46sBH+L2Eb/wp/46m2souirsx1NYwWHd3jBB8dYc+nYMccc08YfRkF2OPHRsR9GqNMV2u9+97tfW3GlnOqTHseatKVHm1BwjVNOLjBEc9zPBOoJXsaIRx70UGpz5IgBij7O+EK50M4WoIzBxh110v4UZI9d0BigZC/8aEgW/4XOGicMNvJY04bih/DWPJPCQ7gmwW7W+El114bmHW1PEaMokSU7EhY95NMmTjHEwHSTrDYko5EB4bQ7mUib1HLDx6G0zcC3Pq2pE3rxiCKqD5J3873+ZrHHkxNUYOUzfjl+nid9ji9O/9U/wOOhMTC6ijnVnEuR5etb2gdeYRep+U7W93P6tXaxm2JsBsOh0fiB3rjwPe+jP3IgHKiyHxmu8qJv69fgaj8WNpabh2y86BfRFe0Y6hcWLendTvXBwZFLj/zBa7553ete1/TL0047rX3aZW6oMixvpUt+ruJRFj3CAo0xDR2vfe1r28YIXMrz6NPg3G2gT5qDjHP0VvOWeknXTzn9UV81LmZxVhnmRnXj68fSLdDRlfVTR4gt9Dr9Zw7UT5WPlvC1FTD+m4kD625oEjgCVgVPuP6WpQHaFr7V9bgKn7gqsAk74qrTEDB5CAahsXvnqBhBNdgzrhiNlLPg9k7Jk06ZMhE4cuCmLUJs9QYMgTORezjvqZPwSl3qELpNUAYBgm0yomSaDNUpygbYlC8eTdKsWt/tbndruygU0fAlSqkOZmJzJMFRZRPhjW9847birXPZ4dCB8UHZysE7NIZO9Uw4PEzdJ8UnfZLfxzMEB/dScEuVn/Qh/LPELYeGWfANwSxVR+lkg08G8sDFUBCvzfhkgxuSz6T108VH9uAgU77bUHdpFl4shFgljQy2Qhb/ybPV3SQ5Ee/R10zKeKG+DHtjmTQ8ka7/pN/ih4nQzpIxiOLraL4xi7EaQ8H3dcYiBsIpp5zSjvfgPfyZ6PR17avfOv6jfI+2YVRSAiy4wUt5MJ6YXJVhfARDURaWJ/UxNlCWTbzqAKc6ULgZKyZe4wMDlJyZ8CkXJmM+hdyEXxfF4IgL7/JefWmBFV6Nq7hWg2cj8g7VXVtQyLSftjRHvvnNb24r/tpQunYybzohRHYcl9NOacfan5UBnhMeKjNtEZiN4MUsZYb21CP19E7BdJLn3e9+d/tuVR8g73hCZimteOSIK745+eEmTrKt31bc8nDwi8c/cdpFf8pitMUbc6s+KC6nDiwK6PP67KmnntqOMetTyjEuhP7K91nqP8IceByILEY+caAfzrhOXqO/iTN38Mk/mbfJcNJJJzVDy+Vh9Fx6oXkju5mVw+QzuqaxRx6LLY985CPbAreTMmgJjTVvwnCgixN2As/GyJve9KZ2wlDfSj81pxjX9Ek7j3RhC7B0dHONunGpf/oP3wOPsjzma3qL+Y1RaxOGHWDOs9grbHfXHMxusDhs88YYgSY44BROea3w8d9EDszNrzOnFOchgBGiDNKUJYOy+Kc85Snds5/97CZEFV5NIkTihflwEBLfRLm4J/EE9HnPe14TFoamAZ0hS5he+MIXtsnHikacyfn0009vu5pwoIVA+amUF7/4xe17R+Xd4x736M4555xWjwhc6AquSX7qLV04tCY/nxHoo+tHP/rRbQIzCVlpseOqU+EfOPXmMogEZ+3gUXb5Jjnfi5kIo4AaKNSJg9Mg4ZiP4z7axLvJWIdGb3jSMkz5B1fwokfYk3DNCra65KtxNdyHr2nbJdznQb/O0hOXdkm7iycb3gPD996HTZtIF065yQc+ce985zu7RzziEW3yYfg89alPbTfQgQWXtvWe/Fu5PYb4oT7hCUXypS99aXfWWWe1+lqkodAyyisP4NEeJmdOX0zYxEUBPfvss9s4Q0G1Syp/yjfhOfrIN7kyONPnK9+FOWMSBzcXuaDwUh5igKI/BqiVXsqy8cBYapxEc+oaHHCiC33qYDGKskwRyO+uWmHOinNWmWOEpt5wcKknf8gpvz/GpnzwwTOUdxLOCltx9ePzPguewE7yaznTwvL308VpC2O27wn1QydwtBk5QJ/5jcKY7331z7oDBwc+RibCU/FpW+Ehh564teBFcK3Er/Iuv/qE/sx14siw4+nmUT/NQOY59SaLlFbKquPq+pWj43jJxVeW+sKPB7VdGmCRX2nhLRm3iON7WQtGPs3R7yjjgdFvlO07N+OGd4q/MrmUyU+dU+bob38O1D43VNtZ+mH6Blgy5L3Kc3BUuaZ7Wox5wxve0J155plNjpVv/AFf6ar59SvzAB3c4iiDMGNMfPChAU406RMMvte//vVtXNP3xCvHmMbAcwLAnST00iy26mPwBVY49EzjV/qffqVOxghHcxm5jhEzMvVdYwncTvb4DtWpSAanXdSUC1edz8SHP9NoGaJvO8dtyI5mGiC+htF4hOljH/tYa3yTKCWWgcWBCTyfAHgIMIEhFASWUDLGItgmXt9mUnyChyBTiOxUmoxi3MJjpZ7wwA1OXMoWjpMuPuk1vsIlng+eS0fznnIqnLCyGYTpFHYXKQ6EOvjlBxcX/qh7dekIlA4dFX+s3jg+bKfTcQGdy+CiPMeIKcuO1+pkjG+PFV8KNAUyDv1DDi0eNHpCs3aK8jOUDyyXugzBHChxS/Eg6XgmHB6H55GNwOFb+AtWfE0L32sceLB8ba39yQGZIS92VSzUUJCCW36wfTncqu1W6xUeilNPPLB4490ilt0+izKBA5P86YfStE3iwTh14ch+dl5ytM+YBs53KiZCcMYtR56MYSZdvIYbHFzaSxw/7axfC+u78lhAAhPHwKSIW8VmzBgTlW0sYJzG8GSEeigj8puopdsFddzJ+K2PK4sybzw2pnqMJYxkO6PkxdhuIdBxQbDGBflCl7pwoR1eMiUeTK2rcJ7UCT/C48TFBxsXuJq/n6//nrx9PEPx4uRHc+Yl4do26SvqKsyPjOA1IwV/GUwWUu1qxuGnPmmMtgDqRE76fuhWVuhIud4TH1yT/FrPSTDrFY836FE3T+RD+eGZhRo7Eo7f+VkGYxTnZBJl2ByIV3y6R3CkfVKX8Cd8HOJDTUv58pNtRr92ocy6gNB8azfFLiuazLGMUDtBdjj1EX2ZfMAbOdfP9A9uiIbQO/rbhwNr0c6R58hoxhnviUs5eSfz5ghjNLkTz49Ln5CPfGYsg5se+fKXv7zJu1tpfXaWcd34rX9kHJfPho8+4S4UfZbsK4uewVA13zFc89mb9JTbpyfv1U+dxCUc+sWhxzyqLMaxndwPfOADbeEXbRbynCp85Stf2U4dPexhD2t9OvZEaKl+ysKP8KbSdCCG131HM42gYRI2kRLGl7zkJd2znvWspsQQAMqWD5cJhsdkwAnLT3DSkN6zAm8AJ6wUGU+/weUDT+CTB25lgkeLPGA8yrDSccYZZ7QVF/kcS3WBRxQ8dIEN7kZo718EHZzyvCszeZTjUTYFloFM8VNfR3iVb4Wn1r9XxMyv+AOPsk18lBfKrN0UOxxWdEIPflCeHSmyApujtXY67VZwqUPCGUzUVTlx4FLHxFVfOiff6GbjQHgWXy7h8DB+xZb0obQKV+VUmzre8kd/9EdttVO7Mnh8o2ERJE77cnDXtk/6VvLVBa/0SbxI3fBC3UxKj3rUo1p/MTk+7nGPawtk4MDrO7VdJtXdOMTgwjP58NkJBvgZGSbwpMHh6J0jPXZiTMKMDQ5M4NCHbg493tECvzC46uq7sDGCAap8ijKfEYoWSkEuH2KEeoy7OWZlXFOOhwv/+IxKu59kxmMRzc4ShZ9yTsHJY5cnxxfxPLj46pJ6hPbK6xoOfENQ5pC8p13hCa6kzeorb6m8oYkf+FomOiI7ymWQWNRx74DFvxytxl98ZDS5RZaSlGNkKQNvgi9yAGdojD9r/TYDXNoJLWQrvIsckBELJo4UeyiJ0vDLDqYj6wxMegWjEzyc8ODRanmSdoVLOH0Nvd4t3LzlLW9pbenInkUbMNLsmDzxiU9s37mRf3pR9AN+bcvV0rkZ2nKkYX04QLbialhclX1hMqe/WNR6wQte0OQUXPqZ/J68V7ziyD08xmyf1JBnOoK+Jl3ezJ0WWJzicTpDHzB3MHD10/vc5z7tcksGXWRfPvp26K5jWuhYro8e9HLBp09aQD/33HPbaQSnfsxt+GIhyILQySef3Bb3xMnHDy7v6hreCh/obudznvOc52wEEyKsfA9holS84x3vaEqLRiKcVhwpYJwG6zdabUw4NDLjxyQsnzj40/jyC8tHOLKqTsERJsiEnlCDS7kUK9vrji3BkTPtcMRV2mq4ny5NGek0FDpxcEVgKZlWr8Gh4xnPeEZbHcp7cK7Eh8OjTPyhpFo5MtFR+ExyqTvaDD4UTsqmXRU3laXzwYGX4D14zQnLG96D4QLPz3sLLP4Tn7QaP4aX5kDlW8Lx+7kTH7+f3n8nl9qQ4WQHyzcZ4siPBQeGT3ClP8ORuD6+rfauTuqrPh58sCDj+0oLYnhjVdSRf4tBmRTlW4oH0vUXPjz6Jp76zVzHZY0TDFEwDDowDBC3S1scYnyAQVN8sODiQrt3YY9ywCQtZYdm8do3i0yUcxckWGSzq+rCIotOVq1NwIxHioJx3BiMFnSkLGXDTaGgcDOm7QYbU4z7DCmr2xQQnyoYY2LQWllWd3nRDa8HPg7vhPN4z5P65T1+y1gWZcBVF9yJk2+aG0qvOJIuTlh5xkhOGP+9R7Z8Q+SnuJ773Oe2lXbjMAUOb+2c+6bq6U9/elN68F4+ePCHSxn8yEKtY+hpwFvkn36V9lcXD57FtyDsExdzZ04DmN/0pSc/+cndwx/+8Lbji4+pv7xkyXvaZqXsgCN4E04/g5OeYa7Vl5Rl0YZiq33Mr04ZWTCwaKWd0SYNLn7oXCl9Y74DmwORzXCBbEZOxRnvyZzTdO7toPdJr30kefnS6jgsv3djlfHbWG4esCBmIdH4bS4ztj3pSU9q5YBFhzmEDupTN2ObPiovuYfXk74kLD40VJqWEzaeBL866pNwO4nDQHac3tzjwQsnd5w60m/Ra5427srnCS/g9HgfXdetu6GpMQhnhEQjaGDOhEB5smouzvEtipb4CHvNm3xpSEIojvCASyfS2N455QZX8sVHW80DVwSbgPmOKoam40lWNUJD6hVc/JTZjwMrn3T0KEOHEu9B/zOf+cy2m6mzEWYKhWNvEd5JuMXP8uhMwYEWD8Ncx6q/s6Z8/AudaMML33g6JmdizJEH+ODJJK5O3jn5Uu90xvAldOR99JfHgco/4bzHhy3x/bhpJWmv5EvbWYQw4Lq8xq475V97myAiw9P62LTyNjpNHYecePLL4Yf6ifv/7N0HsHVLUfjt698cMYsRC8SIFChBRVApJEi4wCXHCyIFSFCRUJQBREBBggooCChRguSM5JIgqJRaggFQEC0zZjHur57x/t5vWO5w3nzOec9UzZ7U09Pd09Nr0lrbw/KJT3zikAMZuPrqnepshjEGbpb5OvzhBddYFBonNr98NMgpjAeaU0SuBafQBpgbCRZvHubGsbrglw5tPKe9xiV46WgQcvLRgo9oiy52ybUjO9fen0HjTW5yk6ELJtNspAWRXWkTbAtW9NEhuLSRrMTtGrMtTqTsKLv6aPFp0eBVCpMW9tfzoYWnmxfiJi9woW3Ww/hEf34wtsE+B4+efPBzqGyX016utoXJvz4OlwkXXvD3Ez/xE+c97GEPG3bWRgJdsogn8+te97rj+eDrpSZEHJxwwwW2PCGZcNrL1WbpgxDiL5mh16Q1/TQmfXXXFTx6Y5wYB05H3Ab6kR/5kXH6bzzNOgenulwyKdwkE+WbvDrZh/AIo7N66HJjyTOdHbV5hx/PUnxYaBo7jeXoq4+XtNXWMv8ofSSBpW6kg8Ls8DwO2GHPdzaYreY9S9gVtjX7QrLqZXukxfnw0mtX122mWJjRZwcVFpk2E+Hi3cq5z33uM+wavTeGtMkmcrPtAo92G0zG1ZK/UWGPP5vq40ubNo9tpnI2ltvsdFOCnfZKiLGKVnV4jgzKkz4ZGgfCA/5z1haa5EaZdCZPaSixDvLyPKPrYdEXsVq8qAdmHiT1QXnhTYnky6u8ULuVUZAeBuWXB8Ykzov9dkylN51oKsvN8fKE8GqDQ1cDF1+8ydRDH/rQMfEy0DwoTS4oLhmtw7sub25zjmuDQwNa1BVHCydtQmgC6eTCpNHpsnrgOXHwTlYsNu2AoZuRQiMnrA08iqtXHpjoLhwVL5JR8WVZ+UfhZgnMMpvjc41N+TOMuD6v3/Udp99NiCxU6CWD7D0xOMHQW31ePXX22t5oYB/8oB3N8YSk+PeOs9M312vIwImSKzXGDL7jPfht7Kg/j0ntJTc2yTizUPOlPddlTU4tsNSxCFGft9PqPTAPRDc62MxsBlg40SMOXrwxGp9Crva1XT35pSvPZlYH32yHDSu3UWxaWXz6nzWLUR9ToCcWSBZNnX46vWlSDXcyQSua2F/vzODRBhe5e3WB3bEAddWrd2pMamyGkA09hCs643MwedEPnrh4n8vQkp/z18Xn+skHXPF0gYzA4k0e+iwwLLC9C3T/+99/nFTL9xxsweQ02QfynMqRX88CeNK52oOXj6bi0uWt42E/5iU/tKV/4rMcPXssJt0uyPZ4RvvOg/+YtrDDN1x0QV1xeeI5ctrltslPGZ+80at/agtufRrtvkthTDjdN6Z5my102gaNiazFMUcfZrpnOrfRNMMdxY8ksJRA+kpn01fPG+PHIsvpu1srFoMWi8YS3bTAcghkA8wtHp49V5fN8uwRwmvRar5gnu92ntNOuky3bdB6HcdNmca3MWrMqAvOGOLKV5b9a8ytC5e8LtPa49SNd/GeF8rMfd2IsAC2uGSrbWyy1547fYMAPejk8c7N4x7ec9Wd8Xc0dSbl4VpcijO+OsqEwnsUvkLlgWGR4w63iZx6Oi4cKYc0xZBWnoNfmqKqSwHq7MIUobopdG1Fq90Xu8yueHEmfOjSrvbhmQdB+AujaQ5rW5vRSQ4+DPCsZz1ryMeE0XtaBmPKD5abcc/xuY1NcTi0i794BFs+fPLxlnwt/F3VM8G248VYeDCimQvOO1dOuHjGKuNj4gt/MlNnE93g5rI5Pho7+tkpATLk1sluKd9NyMDxdEGoj/W3j1jYlWR06aivsj32sY8dDxZwOfG5/TkezH4IlzRHU/THvzRvIujr1K59si/elfSFPid80o0b8V0OLPzsVWO8+o1B+ZzJJq/c1zTZI7bJwld9+WTsoe/E5Pa3v/24Dm9xiha0s7PwGv/gaxN+5bllX4Hl5KvPJQ95M3x45IkXZuvQIL+JNR68A2rC7Qqha4/sTTvIeLaJRfeiXX00max4VmTP7MA7PbWgZX8sep2ukoky8CZA+TYxwyfktJOXV/4onH5mvqfsj4qqCw79JiHSdvvJ3saAZ4nxY4FcnyjDh0mOZ4L+1Idoqs3oIh/wdACMOAcOPmF1PoqwfZ5YyhwP8vR3fHnX8W53u9tHXS+24WN8ug2gv5OPunCQIZc+Ji95lZ2IaOCv/6J9KXf50aENk1abIxbF3sVt84i++m4F20pv9Svcs5txz/EZ5ih+JIF1EmAr6EzPhWCWOtbYSLfBqQeOTWanZ+9WBtvGs2fmCPLcgjNn5Nh/7do887XZFqXayI6DM85n+6zdnn9wnKzOay8Hl3Revnj5bLdbjf6twvMfHcrYGK832DRC01xPPBqFxQfQOfRzxheadRwZUyhKXMcKpR/+8IeP9yzs7OkYu7x2xD0wpCl4nQaHNKWVJ81RAnnrHsrguMLaV1fePLAMRs5HedDlL03AtdCEX/twNGDFw104kCx+gjOZMtC0ayHnurCHj7Zdj/IVL7tG4OM9VPBvayO4bWE44RHnagtN8ksXuqPuZIFnQFz/YXTIQ6gOeZjouWLs63t2wixK7HhtcvDPLt4K57Kj+HYJkOUmuW0rm7Gm2/RA3LjSx/6P1am7DRFt2PH0Nx+MLpjZ4MIXHYVzG/shPutd8WQ000wGHpz+68uHy6RtgvnC3r3uda/Bt3pk0IJirr+OV+Nl3cNUveyXdtgd/SDPQ0+5fBs/Fpx2jC3Q2A40GH9OCr1LaQzambYLzY5y4YMHfG0pk+bhjw5pTprPgeG1x4HLloYzfMqrHz5hdjb+yM+rEy08hT5U5sqSSTn8vDj5iaNh2a507eBbX1l42hDwLpzFKLtkM6zJjgWo/mgiA290j8hFP7MMZNXOOtjywLD36MKfq8H+RsBOufZMrNjCaPymAAAgAElEQVRH9LCddMq7QuwmWSrXbrKOBniLawt+Hlz5hcoPgpvlGb3xWRk7ZEFpDJCrBRkbZGxaoAdHtuSXPqSX+pZc+J5b+v9knXbTGzo9040G7dN5ZfpIHA3e8fYRIxNzdZwY+XKuL9fSC+MevPq5+rWw/KPwSALbJJB+0hs6KU0f57gyeRx9TI/Dm86pw0tnc8Bynkeuz9r0dBOKrtv49B+/5gzsLnur/Z6b6sFX29Lqwc1Fc+N4ZJ7gj3Z5uHh0x4u0eA6cV2a8R2qT2XgEb6PZphCbjU7PGvXwkzzQnLzCd66EZ3yhSbB1qjCFSaGkTZac4FnM6DQfqPHRDcf24KpHCbiUP8WeO1P94OSLq1+dWZGiwcNcOUVph9kJqx1nH+mhPBaD3s+CUz3XxZpYpjzKZlrKF6aEBpgHnIebXaF73vOeY9KIRg/NF7/4xeNUVxxd2uBmXje1Mbc3x5Ofess4uORVO2DKry15aCBfX0V0lc21JRNBpxRozYEzcbIj7xqdU2oLZ5Mng1A5vEKeq505PufNuNflV34uh8l1nQy2lQVfX0jPMtb3dPblL3/5eXe/+92H3tLLTjX1K/1uPNVWOITl1dbZDmdexUujNW/ce7DYzXSF0aaQCayHzBOe8ISxgCEbfFefHHo47uJRnfnBFB3Gozg6TKbZijlPGxZcdlstgIUmqvKMT/XYJ1dZfc3PXxw5KWvjrv6tPfDliZe/tAvRFHz8kYG88tEHVggHmXF45cDNugJOWr56ZN5CXB0nn05A+6NtNsdCFL/K6SaPd/W1OcflZb+0Q3dd4/V8sfD0vHFNzPUwuqwczcsFaPwVhrN0vA0mL7LZJl0WmG4EeH5YPOMN7dqwsDBZ8RzwP8baR2+2H+7wy+elC9Ew64Yy8hTO/RdN+zWceZtpTDf0Mx23EHfjh/zI0TPGe5r60Lib9SgZJRN4k0kySg/nNo83rh1OO5x0Y6L25MfLALrovWtj0sLZXMNYh8PmkOdr1/KX+GsHnjke3qPwSALbJGAs0Ru6T7eW+pX+wtF4EqfT2Rv1eengpdkt10s9d9g6eRaZ5gr+e5rNk8ex2ea5S1cb8mdajR/jqfrLeseTjm+4eG1y8GtHGu9C5V6he/CDHzzWA/JsAvlHBjbdTQT4PHM8O6oTnYXHQ99Bhz3j72gSGEHrCE4orTPK02keIt678GC28KSQduR1tgcIBahuD4m5M+pM8GBnhVQ2pyuvfmU+sOG6rOssrqlZUFEetKLPf+688IUvHAPJ+1PoRlODMRrCG3/xXTt4M4AsYp0SaUNdg/N2t7vdsQmhdqNVeT78ew3nepviM64ZJtqFaMGrSZorEBdccME4JQDv+g9+MwyMiMlgf9lgZ4vBwbv+ayJZX8IBf06aI4Mc/HxlwlmPyg9+DuuLbTAz/EGMb+Otsll+Sx7B5JXNMmsSpx8ZXYsBkz192n9ngdcfTZLhSIeF0SB/ji/pOJ1pNMZX4zE60SRPOb0U4tetBidR0t7bMEZd9+eMh1yy2ytv4LIdcFS/uHB+MM/toNMpnV1ik2w2pGvtaDf+LMy80+jkEx6bPdlS9fWJ8crNfNRn8pPVzNMcj6ZCZckVTvGceGXlCWcYaTTWhjKLZqeRngduSvhCYf9DaKFhoaZfOr1VxwPfQhHfHJ44/JCVTT7veHqXyBeV9fFTn/rUscHpA3XeDVU+L2Y9m9RNN9Aojl54ybK4eq7Ikr+PXji1sompPlqMm8td7nJjkeE0zv+csonRGN3aSBbr4sluhpFXeiCc+rH0MlzCL8vndDohT7z08eAIH1moJyQb8uPkzfjI02LMONR35OPL124dsT8z7Fy/fDJJLvJKR8fJhPDVTm3XVnjJaIaRjwd5Nq6MVbeoyMCz1LPTSW0fRjSW6Bq8tdGzdom3No/CIwmsk8BSN+lPegVeOi89j29wxqpQfgcMxi39dFXWHNoHgOBw4OB7I07/3LaZ3Wzj5nz1ctqJNuFcFsyJhPEXvtJwidcunoxJX9G1MWlcOhCzKeRWn3WBQ7JsN/ie6TPOE6HxINc5KyeaBJayCovL1ykMpomRU0OLTQ8VkwQff2CE7fpRbnCUM8Wb8aQwx9s5FAMeOJ1SeA9NO9LKehDCW7sWma73muCgZ344LtuHO7rFKa06Tkz9F5rdH3idOFjcwt1DpTZrd4n7dKVnudYG+crnyUSITiH+vGvrOh8eXAuzEOHxC55jaPBnQd1/LXmQmhRy9bG2ljLVhvaCa0CTzV76Hp3cXmAH4NHP6NvEQH760xceTZztVtqNNPn3lwwWPfqaN145ddJd8XRf2dnsB7qU/qRT6EGjMg7d7JCNJScOTqXwa4PF/9t66MRP42DmdyA5xT/wc2jVtvFinKBVmfeoLZacvPpwAfrB4hWcd0pcZ3Itz+md8Vg/ZOsadzMvYLQFhgNTPenoGoUX0bfMq+xUhtEwt2Ux6OHviqVJAfvqNNTkwAR+tktkOPc3HnlOn5Krcs8i76H7D1ALXrrOOwU1kQLLN9nw/qxrVnbwLWTJjYfP5qQP+ziZc725PsBDMMk7WcWnsLgydXg0JwPlaJnhwrMMqyN/L/Db6p8sjtqPH2l84cUC3d/i3PnOdx7PFvbF+PPulFNg/VP9QvTANaeX9J/J9CzruV30KaNnPi5mY9bz0NilI74+75SbbtHXdE0dnk4duSMJHI8ENunijGMJM4+j7KbnoTGanWR3Xfv28R959NjH4cyVbQLOG9DhK5zb3g/x+Beyy0K0suvmA+wR50aMd60vvPDCkTY+c/uVt+g7neFZW2hiqs6LwTpPWqe4EvPd3/3dxyYEdnntNHvHxuKsSQBYiiwM58l0KiMPj4Wtvxk1IYFfe/BSHsrGMfjo8ue2JhomXTMf8TKApx/1DVD14fcxA7xFd5969tA0GeLAWoAL0XMmXXKtTelk0EQzGGGTAhM9Jyje5fM+Zx8tIWP8c3h2SmGSoL+9W4NHzkSM0xbfIlSeduCpfXiiITmOymt+9gq3puqhz0o2GJ3lOOcXt+ByXcQOpRM0kyDXYiw2PXjA6SN49BO9kGcMHU9/nU6hp8doii+0eRCil87hwcmW0yanW+yPh4qJn69Cw6F+41I9eeBOl4tW+LVX2+yFssYKep2g+Zp373DiLXp9KMe74E5DLaCMPX3HwZMO1F/lla48Pme65AVX+YmE+KudZTjjI/O5P5XpO458Zr3zDQAbfBaeTo+cWLqG69Sa3YJHu/hhq3g4pKNnxqeMHfOl9BahaHUzxmIfrL6R5zSZrO9yl7uM6+cmZb5uqA3lxsp8OqA99bn4H4mLfpL5ujJ1efTxm1w4lK/DI38vMNvwb8I71yGDxg150WP18KBPbBJYlOszz06LczbIpg/5J6eZXnTz+N8LDTM9pys+y1Ib0RWtrogbk25SKSMT49iJULZ1pq36c95R/EgC2yQw62DxTXq0LJfO1tLN7AzbZZ5qE/qOd7zjOHQw7mzGmeO6eWBcm9uqM7c3x7fRfSbLsjt4RZ/nY88Gzxa3VH7gB35gbObi01ek/QepZwAZkQeX/MT3I5+nVaarfeb+8R//cfU///M/x6i6wx3usPrUT/3U1cd8zMfYvl/d/OY3X33gAx9Y/fu///uAC/Zf//VfV//1X//1UXnHkBxHBL7//u//Hl4btSNP/F/+5V9WH/nIR1b/8R//MWCE//AP/zBaUFdauPQzCco44Yc//OHVz//8zw/ePumTPmnwedWrXnX1T//0T6v//M//HLi1zUlXd2Sc4Z91PMlDH9mj79/+7d+GjOQFT17K9O1znvOc1TWvec3V533e560+7dM+bfVxH/dxq0/8xE9cfcInfMKQgfCSl7zk6sd+7MdWv/mbv7n6+7//+yEjOOJdqC+Si5DctYGOuWyTiKJtU/m5kJ8M5nAb3zMcmfNk/ra3vW119atfffShPv3iL/7i1cMf/vChB/qFUxdsOOrP0tvaPZ1leEBDjv7wnDJxtuUd73jH6va3v/3q//2//zd09vM///NX97///QeP+ALDhau6I/M0/SQ77e9F53//939/9YAHPGB1mctcZnWxi11s8IGfj//4jx/xr/7qr1499KEPXYH753/+52N2Dv74STZYKi+e4z+6TmWorXx4Z7GiS7mywrlcPoeX7Hd54VOP/frzP//z1dvf/vbVU5/61NX3f//3D3v1lV/5lavP+ZzPGf6zPuuzhu0iN/LzbPrYj/3YIUOhvE/+5E8e3jOr8rnstre97dCpv/7rv1795V/+5dAjzxbtGzP4iS6htD7m5/Ilj8lokwzCOdcrrqx64ku3LF8Hs6wjDS6/rnyZhwZOiN/a0Xd4/77v+76VPiBXz8wf/MEfXP3Zn/3ZgCOnvPpLH65lm2crvU4u9CD38pe/fHXxi1986BZ+v+EbvmH1nve8Z/AVDJnEF36LV34UHklgmwTSwXWheuvy0zEhncs+SYv/wR/8weqGN7zhsIvs3pd92Zetnv70p4/xCyeYJe6RsQ9/ZhuS7ZXHHuHD8+KBD3zgsXXKZ3zGZ6wuvPDC8Qyd2VnKcS477PEz/o6mVf221bzdAju5wXkHx46BHV+7B3afnZo4RbQj0i6zXcx5t3ZbG9tW7urxnWZoox0IOxN2boTa4rUrDx3ypcMx04Af3u6I3Rywds39N6ero5wrQHa1fYXQlxDt5JKHOlz8zXhHwRn6ia+aiw67O3hLNu1uubeezMCKe3/GlSC7z16a9gVP79jgkezI0dUoHxYiBx82IQewZMGBAZs8wz33SbRF66Zwr3Cb6h+UfLLiZn7llV/ZXL6LN32mPl31X1KukTgxc8rgtMF1NtfJ4TR29Q94af3XqVpt72rvVJXPPBenw2hs/DbmlDu1dQX1Gc94xtjJpI/+usfpJluUjsMx8wQXPMcj0xPhkVzRoB30ooNL7viS5z1A12SdODtRczLkSh4awbht4NTWO+mu2rpO6wp/9Dfm4Gqsqdt4PBHa91oHDfm5TrThWxxdwcmLt2SCB7ICx4HhOfXYLn1Kp9kqV71ue9vbjlNHVzXJz461/41lq+f64mwUWfLkEi3arT1tdMr89Kc/fbwH6uq5Z5t69AvdaHYyQKfQzMPDxyc4XttL/qWjD8wuBzYX3aXnMnnKc3O8POGyzlwmvq4eOusb5XgVkiX+/Wez20NOo8F6r9VHOdif8AnhSEbSs1/ScTbT0TXTQG5oF7o14XnoVhB+vedr7OLbqWZ6Ha/qrMM54z+KH0lglkD6si4EJ3/p5NE1nl4an+yWtHcVfcTyp3/6p8f4pa/+Q/mHfuiHRjpcy/bK369hNgW/HHtk/LHnnhduxHgn1fzH7S6vVbjluMmtk+sm2AOfv99W0nZ0l+6tb33rOCVx8uXExAmnE5O/+Zu/Gbsp6thhsFNth6HdliWevaTboZlh26Wxg2GHVRu89NIt2w5fuz7R58Ty1a9+9epzP/dzx66P57LTvWc+85kDN3hubiP+lm2ejXQywU+uPDKa3bJvnP6AtTuk79785jevbnGLW6w++7M/e5yK1c92cMnE6cAXfMEXrG53u9ut3vjGN45TXnWTkbbE5Wk7OWljl5/pPKzxpQzik8z0n5APrvJlWLkweDDSTuYf//jHrz790z996LM+u/SlL7165StfOfoYfLB27NXRX+FctnW60rUnRFO7koXabWyDsVv5oz/6oyu7lMaoExQn8q973euO7c7GFxz0D97lGDgd/MRLNM9jYuYB3OyMD7Ti7Wd+5mdWV7jCFcYJpz5zGtcp5yUucYnVPe5xj9U73/nOcWLLZuk7uOFMd8TxzEfT8YYzfXuJL/FXRz7eyCI6K9sWqsOHV93qh1Ofisvv9DE5PuMZz1hd6UpXGrLLfmW7OjEW8tk1+iRO7uK8ukInzle72tVWd77zncez7qUvfek4tTPOnDazm3x9ia76oH5Y8isf7Uu4eN6UX3ltzOllvDaDDac0Jz3XCX4Ol+X4DN+Nb3zjIS+nJGT5whe+8Jgs6q8Z1xyPhjlvv8b1K0fnnHgbo/ilH278uGHR8w5f8Z4O71e+jug6mBKYx2TjyFien+HSxupv/MZvDH1l2zxLvuZrvmb1h3/4h2MM0+eDpKPxjebGpB7EqzR+OfEXv/jF48YLe24edO1rX3v1t3/7tx9lc5NdWrBMl3/YwjN+orlpZW4nhLM7YHek3RK7uU5GfDDh9a9//fgTWLsIdt7lu/ftJLDdBiF3orsF6tmxaKdGW/MOsl2Mdg+1o5yXp067NIOIDT948vKwr1U60WsnyHuZvp5oVxyedrLDq+3iJ8rfBpJOKBsNyRtdyQqdZMgnK3mctD62c68+3u1Gn3/++ePDS96/tbvvZMxpMhl0MuC/mPx9g7/VkO/dnD6+0Y733M5eZLQXmBMSzj6ppF/WuSXfy3R1NuUrhzv8+tQL/vrMKb3+dWLvBMLuu7GaPtABp/qdUMO1rZ1oOZVhdKOFjwY0csa80wPvmv7cz/3c+KocODuUd7jDHcb/6KIZH9VVh08u4mfCaa+2ay++kqvQmEGvvjJOnNxd+cpXHqezdmTtRDspyv46SfFBIV/29J5Y/0FJRvCEW1o8nzyiZS9huPYCuw0/PHgnD3GyiT71pNmp8oKZ6wRXCB4cuQn5+tkppI/Q+F81+gI/3efJ19eIvXfuPVgfOmtcaB+OcEpHq3bBeVfUl8292+7vLR75yEeOPzf31yj+Yuf973//2DmHx+kWHmaa0R2vo+CiH/Rzc1g8uGV6Wz66l05e+XDl5zx11rVDFniZn3/Sbrn4uIhnJhjvf/k/a3Klz3Cvw6ed2t3U5pL+s52Od3yxqZ5z5j/GHf7dTvAhvT4eFV/JeZMczjZfR+0fTAnM+lS8kK6yY8aYZ4YbiL/4i7849NZ76P4b1scezfXYquwUXW6+tl+lws6wodkXz0Z50nl5eHH7h932hV0yEbdu8c4+R17xPvObHOe8Qxc/myvndgvmED2dBrT7ajfBzoF3GZ0AOlWwU+L58ZCHPGT1V3/1V4MNuwz8yewShCO5hEtYGXrQllMmTzknPfvqCZ3m2YX1jiL68WF39q53veuxE5J2J4Xt5to5aveodvdDOMtlHT3K40d5sphh550i73Fyf/RHf7S6973vPXZvP+VTPmXs/JOXXd3edXICev7556+e97znjZ2j9EQ4y39bfKbjMMY38T7zGkx9o7946RyYyoXB6Ds77u973/tW73rXu1ZPfOITV9e5znWOva+gv770S7909aIXvWj0SX0d7tqundMZ1taSj2jRNt1B4/vf//6hf04y6RvvhBZ/M57kks2SNk45cfhOl4uO8MeXtLi2hY0/cXU49LItQuWc96Ff8IIXjBPb3hdnn5zM8Z/5mZ+5cqL0ile8YtgxuMKZPpSGL/r2Eg4CTvJnbmeJStkmV5kwecVHeYVkqn9/67d+a5w2suPzCSV5eX/XtwW8Yw5Pu95wkJP67373u1dPetKTxjug173udVfej83OwcfW8eJOsehfaX0hrYy3g+79UadeN73pTVcPetCDVk5A3/ve9x571x/d2kbPzNssk3hcwsjf5INdhtqb21Sfm+HCOdNQHXnZCnEnyLe85S2PnWbi100n+gtnz8Z1OGf8ByHeeKQ3M1/sqm8Y6PMv+ZIvWf3e7/3e6BdwyTU5HwQ+j2jcXxJo7GzSocqjWjpdFaerv/7rv766/OUvP+wTW3jlK195fJuDjlZfOI/t8O3X0Nhil9BdXMj28PEFxvcqLnWpSx27fWDM4pVs1Fk6dc8Fd1a/Ortr1d4u5Bw+7GEPO+/Rj370OGFQ326CHWOfUPZOkR0Tuwl2Duyy2H1oJ0Gck57j63YZwGk3Lw1O3fKW9eTXnt0MOzjS4JQ54fFOzr3vfe+xS2IXBI3e+3FqYFfaO1NC7fDROyKH4Icc9uLsjPW/pHbw7ZA5KfM+Z32QXKX9b54v9Pkaofd31aUbXKcGZGsXyklapxRwpAvL/txEJx7qm00w+zEfn+knXvFADvgxbrxX0Duz3tdzwsXrC3L3rqK4v66R710E7+HS4/qCfMWdfnlfQR9o0zu2/k/L32loVz39Ut+Q1y65pjvJPl6kKyuUF9zc1+IcGtWvTelo8CVSf1niq9PtTPrfLF+Gvuc97zn0R120qz/TAUftDoT77Cf5FCIv+dAB+d4L9L6tk9w3v/nNQy/A1Lf49l9hd73rXc+7xjWucWyckgM5sn1c8lFXPrkUT97ViZ7TLTvt1F/Rqs28MjB4xYc0PoS82xZO1Z7znOeMsYJPcGTnBJMN8k7nN3/zNw89of9wd2tlCOaiH+3Et5DcvRvrL1B++7d/e/wVi1PL3vtJhtVDT3QrKx/6YNlBtwm8U+p9ae+d+uqj8YnHYMFzMz3hKwSDT+2GXxka9KuxwrZ6n/BOd7rT+PsR7+M7ceSiN11Kbuqrm36RmXa0Ab+0v6bxvQY3XeR5ht797ncfdh8sN9cbGQf0B39sqpNMdtJ8QNq70249OTknS1/EZ5Ocbiar+iO9OKAiOCL7FEggXdiESvkuR492OXiMZXME/y5w//vff9gDz3zxbunVnnE6z43hr2zZXvmbaFjCb4I7VfnRU8iWGYvxwz75G6tHPOIRQyZsr//2vdGNbjRIME5nO8XmG9+H3u3X1XS7BHYBeDsnvF0DX0b0zp6dPTt8dnTtotjh7Gut+ALfjgEc4vOOKZjKk0NtCffqwiHUZruQdjLsxMLl1McXc+3E2qFGu/dwfJnLrgjY2oRDPLx7peMgwOFpLz5eyEWfkZFTs4c97GGrr//6rx/93u4uO0WedvnJ9Fu+5VtWj3jEI1Z/8id/ckx3nCTrF06fwIsOuOsvZeSe/OsPcAe1P+IRn0sePvjBD67uc5/7jB04p1Xef+6LmmTrhMX70J1oCZ1QKptPvJK9sste9rKr17/+9aOvbnOb24wTezub8Ogb75z5ajS6yFk/2O3kc8rqK/2OdnnrnPwlX8FtKwum/oeDjnjP4tu//dsHj/QJT76Y91M/9VPHdibDqy6fvmyisbb2S4jOeEh23vszLjiy1x++pv2qV71qdbOb3Wy8P22c8eSi/532+kL2s571rGNfqa0fyaWvccM5y0abXG1XPsMMgFP4oy00zW0Xp2PZADSIk4V8MPqX7fHFXrvVdJkMyIJuu1lBRm94wxvG7Rp1km98kou8bV472pxtnufZhz70ofGl0ac97WmrH/7hHx63OL7qq75qyN+YNP6ygfVRY1LI0+O8ce35+Y3f+I0rY/Qnf/Inx60QJ2TaQ0N0xkt9RIboQysYaV6cU9/XerMVX/7lX756zGMeM0414CJXsMlWPJ0ZCC76ka8NuI1Ldsp7T2wP2n2NtS/UR2M0zHgOajz7h34yxRs5eA9YP+pTzznvvnHkSV4c2MMki8HU0c++kwAda+whzi2N61//+sfsjdNMcwwwbEY6nZ4WqpvOHgS9jdZ4xwcbJm2M+o6IeT4baF7l2yLsmPJcdUsf9tBOwr5ydaJQZ+R1ZorJqP7CL/zC6ou+6IvGg74Hqattj33sY8eirgdUHSwsDmcPc8xrq3Lx2UWHtqsvT3qpLDPe8LmO9trXvnY81E1Q0OphaXF897vffTwsPUjAo4mL5yUtM10HNY6nvXgTXzIGSx7Jm7EygbWYIT8fLDHp48nWRMuDmHyV+cjQ85///PHhKHXJObmGkyzF5/5d9m00J/dwlN6PYXq0iTbysHD/wi/8wqGT5MczkE2kxW2MlCc0uZ7Lydoi1bU9V55NJsnSQ8ZfD9B7dVqcXOUqVxmTcvo+TzKTqb7oobSkHU/101y27J+5DC4ejLBJbvna8zcTj3zkI8dVbfqDZ95fgZjgm9TSO21zwhYPyTn657b3YzxZCdPzaCcLnlNGVsaiTTx/78LmttBKVywATHp9vp6MyIVs4fHgDdccjsxpY2emqbJTHaKHbjYpmPFrX5/GO77B2ax68IMfPPSicYBv+mxTxtX9l7zkJePqfvoAl/r0mwy5mb9N8ehJn0qjq7GiL/J01nV1HyLyef0b3OAGq8td7nJjIUaHW3xmHxu75UuD8zzSp/rRIs5ixgLUX0w9+9nPHteEfYQI3bOLj8YC/v3NCHlpA36bS+TmqqePavk4RmORrJM3vGTW4hFMDu8+KIJWssfnn/7pnw561FcvOVfnMITJIP7I2yY7vcsGeyXBGAOrH+qTZV8dBnkc8bC/JEDHGr90zysVFljGvs03z/70kQ7nGquF8oMrDHY/htE4h9lsfNqUvNWtbjXGKHvFdtlcn/klN3btXHH7eqFZR9aJhU0W7LZf8YpXHCcvDC9v0utetF0FDz4d32DQqXDAywmVzQqw7PhoWOaXTmGWbTD+dqJNzjxsm5gbhHY5HvWoR40HBPyzwkVfNNbOYQl3yTM+41/IiPUQrZy8ydjExn9zXu961xs7/E1+TZ7I3OLGIsiJtxMJ71apFz7y3qUDtVmozjadCW4/heg1GaFr86TEu1x2Hk0GjR1jiI7yTWbEk2uTvSavQouP+973vuM0J13WXhNPJyb6wMRTf6jjgfS93/u9q7/4i784Jibjep1clzqzTIdAvvq8PtXHaBBy8sFw4dCmjQinmPGPPrT6b1AbGib28KgPF/nBX3vhGogPyE80L3nQfzw+47uxZhHpi4K+RGvhoE+TmfHWOPP1YV+0DTfZwSnN1Q/JU95MT/FTKcrGeLjxJ2+mR1ljg+228eCE3gkgvaX7xoQF2bWuda3Vc5/73GMbWOriR30+vGwNHdNebW8Kk71nFvjkFO6BdLEphgftacOGpYUa2r0r5QvmTkAvuOCC8f+L7bLjgX7zxnVjXb40/ccrni1A1XMy6R1Q70n6LsKv/MqvjEXu3/3d3x3jCy3+49F/hKqf3YCXdwLuizuMkwgAACAASURBVKloMu7xlazwy8nLVf6mN73p2AQWzic84QnjfWLlZMWLJ6/qH9QQP7n0Rp5xZBJrQ72+u+c973ns1AisPiAL/sgdSeB0SyBdMw+zkWTc81/7tV+7estb3jLGN7uWM0Zzczw8cxjctnCGXxffVvdkymoLDz1H5BmDfevAnIo9NT9yMJaN0262apbBydCz3+vu63c053vL3Yl2J7t3RNx1fs973jPe/fIlUu+PuSvNezfl27/928f7m1e60pVGXu+A9K7I/J4J/Hlt9N7HnNd9cPfRe7+yu9nhFPoPQV9HfclLXnLsfwXd5QbrK4++UCjURvXdb/d/Q9rQZm3NMjgMcbxxu/gj4+Dqp5Fx0Y93V7zDAp93X8H7HyP/3+RdFu/ZydMfZKw9/e+/73wFzH8Jftd3fdd53r2LJv3hXSGufoGjusJgd9E/03om49GnTbxzaCVDTnl8KPeVUfr4hCc84aPKwCvHP7nwsyzoM1y+KOv96Ktf/erjy4jywAmTof/A1R/+h9B49ZVofab/vFftvc3b3OY24wttaNMH2u6rtOIzD/jQhnzt6Ff0rXPKOfXV4cF7H9UXVZ/2tKeN9xC9k2pMw+Odp1vc4hbjHTDvWIDnkqG4tnll2oD/oDr0zzzMMlvG2Vxy+uM//uPxPo53Ff0fJ30gH/LTb96Z1qe+DOprxPAo750W7z3OrnbmPPFTJdd0SPvpQDqB5vrYe8jezfW/qey4d2jiDV/+Q9M7R/5f05dA1YtGbSz1ML7AFF/yuEyHr/x0TZiMg4FTPhrlxYe89F1oTOk371d73/Hd7373eN+0/36j/+DgV5eb2yhNBvM7RRe72MXOu/jFLz76238+KqMT8KuPvplveca/et5lvcc97jH+gw798UI36BlZosX7mN7R1xe+YukrvL5Onn2ItvopugcTB/QHL/jXb42V+vnmN7/5ea9+9atHn/ua8S//8i+PZ1ryw3/+gLJ/RPYZkMA8Ljc1t2sswcF7p/y+973veLdfHfOB5z//+WMOALe8dFo8G8PecNEi3NXmJlp35Z8uvI3L3uVnR813PP98ldxzgjzYRWM6HtEDNpu9i/6DXH5gFprrhKyDdZSPvJgwPvGJTxwPT3mch5kPEfj4gYeahadO18F89XU8BeBzlRscXBOKlEpamQeiB56Fj48gWOS89rWvHR91QBdnMHm43upWtzrvfve736DJQthkGz5xITj4erCMyofsJ4NCvtvcOjgyks+TFS+P13dCH6ixsPGH6C972cvGp7ZNHsOnTZ+E12d0w2e3L7jggvHxDovQ+juDACeH3nBodxf923g7XWXRB784H634aFzMum7yZtz4wJaPjuC/Onik5+rSS+nkQp99xMoHOWzkSKsLXrsmSMmMPtsE8ncN2mFw9ZNJKVg4LTh9SMUCz2Re3YywONxgOfDhlhbn0AhOOhhx9OOJN9E2UbWY8Hc5JtjqWfRy/r7kLne5y/i7HR8zyMEHDq4muNFT+8Ee1BA/8YLPZEluXCGd0X9gfRSKzbMQ8OEafSbfJgPvozPXu971xkdLLEjqc3AWPnCSZ+0WLmW4KT+4+qL0MtSePsQTl56Ko8EHVvyFCN20wGRDyIDuos+E/nu+53vGBhUe1G8jJbmgQVyoPaE2hdpNb5a0lQanzcJo0xYnnxzA8OLaEyrjKq999M/0qWdsNlbAGZv68X3ve99YhLYQZQ9syMy4o2M0dpHstJmc4O+5lqy1T1b0JhrByzPGbnrTm44xd8lLXnLwBR59+Ib7ile84piwodXHp5785CePxa224l9ZYz7aDnqIPw6P9T0+faTrwQ9+8LBddNGik81kw8grN8fLOwrPbQk0lpPCMl2+kP7s0iE6yvt4nIWVj+E4MLGp/JCHPOQYOu2wB9ldNmi2h9FReKzijsgu+uCbYeb4DtR7LsYXz55x5MF2+qDgYx/72GGXfITNxyyNV+MZPHt1rrgDu9CkQIxuiuvh5ouAThJ9wXVeXFhY6GD/1+hrgN/5nd85Qg85Hc7Nk5AUIENPOfkGVeUmW3YsXvOa14z/+Hrve987vrzlgZpCm4Bf7WpXG/8RefnLX34sdLWHdg9bfMBL+Uy8lg+Lw6aI+OWSzy7+yEYd8GQ0O3I2uOUzXGCbWEmbQDmx8/9rL3zhC8cJljy4ZiPna5FOrpxw3uQmNznvK77iK4ZewAsOfH0vj4+mmZ6zHU+2c4h2fnbSJnJ2Id0EsFDwP4l0kjOmyNHYKE8deq+eUwUbNxaZTqvIQx0y0idkJj07/SHvwx/+8NiQseC04INXPXVsDEmTvxNn41TcGJKPL7CNP/TJKx3fYMMrtIhwemkDiLF3AoePJr7qeTjiyX9kOi1hLzhltVFcPp65mZ6RcUB/8IaX5Catv5JxOj/LGjy7S5bGGfk+/vGPH7qkrnyh/qMz17/+9cf/HrKDyZe4ajPRSS/durwZBr27HPuKZjYjfOyBMfCUpzxlfO3V5iAY/IKxwPRVc5sgTrrpqfraUw6WJxeh/Oqip3aC30Wj8pmXuf4S/1ymn9Aw59U+fI3jGaZyeJUbo/DwjQ8bM3bnLT4933jjxzgOZ/QKefyzH+Sdk8dz2kOnEBx5kq0Fpwmq/3SlM+Atfj2zbQhx/rP0wgsvHPDaSh+X/A/gA/oTL/qDfMjKRjY54fd3f/d3h6zMd5SxpU45/Y8fmdUf6cIBFcMR2adQAulEIdR70Y9dMMYw3XR6aezSWV+4ftSjHjVufWinMRo77Aa8cz66ZtqC3dV+cJvCcIancBP88ebD33iFe7albtexVcrd9njGM54xNuW1QQbG6iyD4237IMHvu4VmijELcVYO5aXFS8vTeSY8Fn/+RuQVr3jFsT93hk+nWsh5iDHKl770pccn3+2kmlwKTYjmSZB6HroerCasroyZlGvDzredYLu+Hqrap2gmV+gxobrXve41dmRdJWvyHi0GpYnLzLN4D+RZBoclHq/14Sa+yHGWQ/WElcFRv4MVVy4EIzTITYZdTXZNzKSSXjh9If/w0Qv9bvPBH2E7hbnKVa4y9EEZfGDp0BzfRP+ZzkcbVyieHOQlnw996ENjgeda9+/8zu8MuXhQ0F/wdBR88oNHXWnemPEXH/5GxgkwRybqLA2udH0YDHiTe96fzvsTetfsTPCjl7wtOtUxHp0yGkseYMaosaQcbu2qJ4TDhNRuorFpUmwx/YEPfGDYBePU4hIfOSep+tpJqpsPNh3CZxxzxj9e0MXVZnDCg+xmeeAjfurz5CCNd3InE+nslzj5+nscf4nihFP/yq/vbfhZRLhGRH/8RQp9gwvM7KKhvGW6/EJ0bXNsgDZ49LMH7IATTH8nwr6zB/oZzXTBFdlrXeta4+YDveBqBw5w6JKnXgtQ+cqjuTqlt9EZbDDVmfPL04586Xz15OcrC0f1Z37Eyw+vPHH9wz40Dowh/cyGWoAKjTX2lRzJOvkIOfIJvzC6o9HYogueyxb1Jq02mUzWxNkL7q1vfeuwBegCz8FRO7UxCg7ozywb/NDL5hTkKP0d3/EdYx6iT9zIeehDHzpePcByMig8oGI4IvsUSYA+ccuQfuzSkW3l8BmHNqOcsv/4j//4GIdXuMIVxnVuc+ocOLiEjVW6y2ZGW/RVR7it/RluU3zGGa7CTXWONx9PvGeLkNOu55+xaU1iI/sBD3jAeFVAObieq6eanuOl/0zA77uF5vEwnRIVqqvTPBQ9mExgXYcyqbZIBEfJwVAKSm6ipMM9tGafYbd45Bl3A4MX9zAVwglfD1IK5SHgRMa1TAsXeBtcYPPVPR6ej2D/dxCTIUeGPFeesAE/5+s7k2G64YTLotOk2OKLPsCjngmxK9YWNN/2bd82duYsPuXnwKmj3/Vt/Vt5Ibj6u7z6PbrLX4bxAwdY7XHVn+HBoAUMWugsOHE8v+Md7xi7jm9729uObY6YMIJRlwPbZFl97afXFuFO5p1ifuu3fuu47q1ONIov6ZLm18HJ076NGlfOXYdz8qxdPAjRZXxKm4iiQSitXaF+ajyiVXv6ucUzPMqFxqF6yp1gO2EzTv2/oIWr8tySr3govzD4wxhu6ju817fLuD4jezdKPGj9r5obH3SLV95Gn/fUvcPpCnb903iCHzzH1tID6Zkm8XQe3uDTA+nqyOPUcfL6pCc9aYwJtoAeBmfn2S70da973XE902sN6cXc53M8vMu80eBp/sHPtnbncvFtDp5gCsGHv5Cs9ZdxRHbi+si1ORsMZJsDG14466O5XNzzltdPxrkTTot8smcb4LfJ9LrXvW7cTFJniSuchyUkrzwZJn/83frWtx7zGn3AHruiZyMuuBn2TMljnc6cqbaX7cy0LMtKnw4Zze2eDvzRfjzhbA/bYKYrNvr673m0ot14jQfjyzOWk8eDi6/y3HjwnQevo7DTxq1bheqGC47qFVZmvt4mLlrZE3hsKrkhY6MYXWi93e1uN67PswvzHB1+7dlobvOazTBn81++aBKPp3gZzJ3kD1zZObxJ8+TiNoy5l+cI2o1TTnnPPHU5dZPNyDhEPx99v+0AMaajuHUhhfOg8u6Yq08mx97HMhDe8pa3jPdvdDLvFAQOvk4WUkhePkVIkbSpnJJz8k2cfBTFyYiFiV17C0yDx8AJ16iwZsCVfxTuTQL10zroZZl0eYyTjQAncTxDawPiTW9603iX05WkTr1MlhktJ2P0xu6694NMQJ2w0QsGctaD2kpnpNMhusYFL118HR/y6Fa6E0754vLhN9Hg4OLhpXPKnL67FutdVXG6zkcLPMaJCT9ZGCMvfelLB35jSPtCMrMoczpPDh4C8Ks/O3mzk57zgq+u8XGJS1xinFp+0zd909gZtSjpQyzg2szRH0tc6EBjD9LwRgPatVm7+tz4NE6dkHpwOamqH2b84RCWvwxnmMMYj9+Zt/KEPNkWT1bsIT1hB+mVceVq6utf//qxCDUB+OAHPzgWo+wx28lGuyJpMmBc6Tu6Tc/TN/hrrz4FR5+D15eNDXTRG+MejE0lN11MYJy8KdMGOLQ61XZ90wYTOix46FfjIDmAX7p1eUuY05He1e6u8iVN4GcZV1+YLMTJmVybIJI5GXudJHkJ4QofGE4+HNJwSBvDPNei1Wlz8Pp3L2N1VDhkP2TFc0Ljw2mRcea0xA0OdpI86bO+Cf5MiqI29bc+3eTA8eA2uW1l6qRLm+pHy6by05V/PO3u4nEXjbvamscZXOAt2p797GePObA5qg8jeibarOiVkfCirzGpPplXBrdyeeYUNoxtUrOZnunKe67OfFQ/esB1qpnuSpuH2RT3/rH35Tn45Htn2/v+2oePbYCHB+8AwZV7tKMPPd6R9EwCXz546Zmmmda9xtXXTvRUj210I0s+22icajM3t3sq6AjvfgwP3EJTp+XmeHkNBh3XCYjJtImEq5AGhEn3u971rjGxppCuAdmZpejhpBhwcSkHnB6MTlGciFz2spc9zzWBr/u6rxsfvTAh9zCk+GDhgkN9DwL56wZftB+FZ0YC+sYJln5kCOzu3fjGNx47UBY6r3rVq45drdVvJqX0xjUxX/jz4QULL8bZB4W49EZf1+/pQIZNmhPShV0u+OoIZ9zS6RNYOuskyYv5eHBt1GKZoTZ5A4s+hpz+WjRf85rXHAaY7jqN8A5jhp3uuirrvUVXQPBqchOvu+hf0o1Gdef6aEaPfkCDB4i+8EBx0mlR4F0kXj/AgQ8yncfrLCuytVDQvzYFjHsn0haWHq4826Bt9ea6czx5z3zshedzESa5CfWv/tFPPgakTy0m6aMbJjYzLEj0H1174xvfOK5xs6c+KOHdXH2nvj4Klwk2+6uN+o6OgpNXGfnDTQ/kOSl3smpn2cYSW28cwGvyQbe9n01X6ODMS30ZX6XPhTA5xOu656EyfaEPXEf2wS/1kpc64tlFfVKeuvJ5efqK/LMFxqvTZ7qinr4Cc664pfzxbWyRgWcWu0l2Fg9kr6yxcDplpB1+dkta05UZZhlf1pnLt5XNcHuJL2lVZy/419Wb29sLjhl+GT/Z+kt829LGqDHE5nm2soOuvLr2zv7ahHVjwHzWhp85rXE4jzf0No7F62MLTXjgNq/yJX8uu7CNLniSQ3YevHmGeRY7zoMRmtu4os9O0P/4wpv+sploE9N8B33yPUu6sbTsU+na30bnXstm/OYYvgsDPzrRjQd0yYtm8VNJw15pPZNwB26hOQunzlkqizSl1ZFgGF9H1xROx9vFca3VjrbJi4Figu4KpR1C+SYj8FBmSk+xvT9i8HVaaTJrYalcWwah9iiVugZpNDZgKVrxmZej+IlLIBnPGNblKZefvgg5fcjQMpAWJK472IjwfpBdNRsRdILxYqBtTjidMYl2YmOiykBnQODNIMMvn5dv4YqGvegAuHSJfs346Xe46bBFmZ081xVNPCwwtaU+Wjh8+vKyhdxlLnOZcZpJrxlEtHkvzWTfCS+HJ+9jutpo7KA5fOjh9+pmuc91jE10CtGhDTQ5xTJWLYSVk7+xaSLLW6CgxTjljFP8WQxb2Jikdu1R3/Jwo8MYrE08yMvN8fLmcFf5DHsuxekYnaSj6UUhmbGR+sYExkeX3BLwgS6THrpnMeHqpfcl6abTRZs59E59MOm/torTfX0PJrhCY/SZz3zmwGnyQWeqSz9udKMbjavTngdoox/awQc48aV+nEt9OvNKFuSa3KXLIyP5xpXJlHwyFHLqcca4CZ/xbeOXvRU6Qe5mAzzGsX41Ztlh9ld/OHHRR4fdzXJLduUJeR9hI0+nJtnHeW4R/InIqjY31VW+DUbb+mubm+ufCK30ZK9ubkudvba3rLepvSU+6b3U3QWzxLup/U358NcGXeHCma3z/DRW2UY20macmwTGpc0Mi05zHGMvWwinOrx+8PqBOTSnzMFO7Y3MLT/hgic77lnveeGmlcWvb0loi66j12GAVxzMx9EUT+Zmrquap8Er31zAMwdN6WRlQv5knXbCE2440duiGwwZ8T3Tgq3uko742lS+hN/P6QO30Fwn9DqMoCmTNEVvIEhTZB1HMS0Q+XCpw1h7uDHWfHjA8/AZnAZDgzSYcGu/tlOSFgrVKX8/K8VBoq0+3ETzXC5O/nNYv9AVfWwjgQFz4sfAWrSZ7Lh+6i9T6AZDZkJlwSN0XYPhsyi6znWuc2wXi15w9IRuwc+XN9M2Mhc/aAIDz0yzOH319UdGV/tO/Dq9RGMG2ILN4tkHNlw5YfhMUuTDGxycdhCdPOETvL9zsPC0YEMLPtCfvmuH/La5pb5rh+eUwQkHnOLRJDT5t6mTQwM58i14ww8nXozPfPXgml00z7TM5XM8Wue8o/j/lQA5pdv1Kyj55C/PAoLdNb48/L2z4m+pfH3Y7rp+NVmw4PTBNYtR19X9LRRd4Og9XPqw/pOWr306YtPFJpGFplsIxmu6a4HpJN87O2iQpi8cGJ5LR8qjW+eKS+fJdXbJpvGkHKzQBKox6Z1ni0d9xt6I25RjW3t+sj82lkzGGq9CctZOemNzSV/o3yaWM03nYpxsTJzJilw4i3Hjhwzrv73KZtnP9eu2+nOdOV6ddKT0tnAdvetwbsNxvGWnAn90F0bDMl3+8Ya78OyFB/aQM6Y8r+E09oTqy6c3nDRbacy59WfTz9zCxpCFpo1n32lgN20YhUNdJ+qcsWqDSFn2YhRs+AFDV8CjVRx9nLjNRotHNNJ1eeZi3lE2N5Dm1PcahjkZPuTDzRZZrKILfmNGWXJR72Tc3AczLvmeR2yWOFq0SU7JR7vK5nonQ8t+rnvgFpqbhFlnpXg6ULz8lHjZsdI8paCMc/3aUs5V1uAorUw7pZvoS1Ns9VNybRy50y+B+n3Z0pyvH+tL/ZQTt+tkYszAOulzqufLij5G4TpXf5HhJJxxU2bnzcTZYs31P1/XtDNHt3htwY2G9LE214VgwfEcPWKoXCd1/fA973nPOIW3wGySB8ZDwE6eq70m6k5sGDwPDBORHjjwo4mTx8BbYFpcer8Z73TYLiK9DV4b4sfjZrlXrzxtaL/xIn/eoAFfm+TJlydUb3ZgOWFxOONVvDaEx8vL3NZR/H/lTA71Q/JNNvUBPbK4MK54OmoScKc73Wl8+t2kxgRHP7ldYvHpuq0PWBhPPupgwaIdOFtcNq58CdwVWeMTHjvt6QDdt8Ck38anRQ99n/seLNzphnGX3sfLQQ7xdTwOfH2XHNUXJ/PK2SQ3P8jfRhtZmwSyQ+wOr6/lNXbVrX64pMlcujwTzGybTYp07Hj4OGiw5JBL/qUrM37orjRZ+XsJG4TSyzrV3RQu4ZfpZT3lwSzjYOe8Zd3S1S+9DPG0ze0q30TD3O4c39bWujLt91xWHq5luK5uecGWXoa7ypfwyzQa4UhnbOqYM5iveN5ycxvgsn/ybR65cWKz3bcqnHa6IWLzyDcOfFfB5rQxShbqz8/nvYxVdaLPODdPyiazvf625wlPeMI4cdWOcnbGxjqbYj4DDq9uc3m9Jr7gcYPLoYF49CQTYfFR6QR/4ODiQ1xbvE16Doy0Z9LM8zYaZnwDyQH+OTQLzbkP6iCdSAHrdPG5rA5XPjv1gpM/x0vDZWAoo+hcSmMwcAZfbc+0jMKjn7MqAf2mb4T1W2n9Jq++62TNh6WcDjphscv2yle+chg3Ey36YHLr+knvPZhEu6Jtkmyx104dWG6pV0uBgGsyYRFrwm2RqQ2nPh4EYDLyJnIWiE5WTaY7RWD88VN78ZUMtKsd3qLajqWFNjj15EcL2OQk3OVqcxMc2msbTPDytM0J8zPNS5xg0Bl9YOWFs3T1tHHkTl4CyZfsk/+sG+Wxkxab5J6NdNpFb00avAvs41VOMo0lsBacJkbGG/13EulaLd02nrRj4mECZGyYEDndka/vLXZs+PjIj7Fr0dMCE4w2hMuxiUb56Uz4Tl5aBwtD/KNavLQ+JSMhGTr98LVZfcyDU25yS3byOrEU2nDgyR2MfmrxRCfgzG6xEWDhOZdcNi/ZzyGZ1RfgvIfs/TV5+mSvTt0Tcdrhqj+Hle0Fb/WWsJvyl3Db0jOOOb6tzvGULfmc25jjm3DuglG+C2YT7vKjER7j0QKTfhiDzXPAgqs95dUTqmeR57aJDXavDrnl5dUHdhse41sI3twBLnjUnV14y1MHjHw0ceqh0zPCHMqrFL4dEX1sgw1/i9zstk1JzwGvYMDJsfU2zdHTIjYas+1LekbF4/hRf+a1OPx8PEGpbXJUB4/RoA53srQcB9lnHPTALTTrlFlScweJp0zic5mO5ea8GZ986epVtg5enoEQzBKvtpQ12GYcM+1H8bMjAX3D19dRMedVVh6jZneMtyDztbYWlQyfU01XT5ww8gyyCRiDbPEG3g6bSTKcu5zTUieXJhEm3r5aZhLNaObQhBaLSx+9cQrptMbELSOvLWOCTvLy5cWXMFiTvR5G6fdy3IDnTkanw6ENYwR94pyTKgYa/mhctiefj7ZRcVoES8MLR2H9GWw0nAwf4TrXw2SYHpEtuadzpVuEVCbU1/TWAsNVVtelnEr68JaFI92w2DSmjAP/f+njPRaOTjzB+isrGz5g4XT65ZqXRakrX8acPGU8eul59KkXD0L0CpXPdc7lfk5uySxZsBk249inyshTnAzFOfE8PaELxjw46eItMG1AeF9LX7AJ8sGeiy59xDu9tfAms/qkk5JkA36T0wdcMIXBV156U7isB26vdcO5DseJ4AnfpnBdO9toXQe/xL2t/hJ2XXovbayrV96u9o0VbdARY4veqMNnJ8MFbqZHfB6/4uGzWDIPgaONwnDLsxDURvC1sY7enhfBmNtkG8B7NtzkJjc5753vfOewAfCjjc33/7oWk2yDjUiLYHH1ec8H9OEdrpmn2jtVIRlrUxvF8S9P28JoD0Z5dMnjpA+jO3ALzb10hA7c1WkzHp1cunBTfeXBz7DBV146WkoLj9zZl0B9V9hAR1l54vqv/p770kLOXXsTZKeHPgjkOod3Jr0r4NSR8TVBtmA0Ebbj7O8VTHydcnrZnSE14WKcGCILVf/x6T0Efwsxn15GIzp8PMOi1fVYp6Wus5iYwQdPPBTOtMsL15JfaYZ56eY64uFdwu01Xf3wZpDVn9uf4Wbc5W/LAxNc4Tb4uewovjcJzHKd42qnc3SN18d8afBg2jhRZkHoQxT02/8RO6X0n2x20OmFnWtfgLa7Lt/iUh4c8BqT3q32oR/jDB472jNt2tFuejaXic/p+IB7mb83CZ08lLa5U93+OrzLPHYp3slMXJ64kLPQdPJAzuxXfQGWrOcJVvJV340MaYsm8WD1i5NrE8nb3/7247oZHPqaTbW5ph54bSgTP9XyGcydpR98LV15JtP1Cxh8+yJvei6dLAqXuDblh29X+RJf6erp310u2MIZXn/ObgmTLGaYOT63X905LD7XmePrypd5y/RcX7xy4dIvYdel43GJJ9zlr6srrzHReDRuvLNuUebkL/xC8gLfmBaXn54JjVMLNws412bd8DLn8LdoPkRoAapO9eY+iOYlrTMP4tE8w/mv68c85jHDRpRvrmVO5VlhzmPe5TnAsQfybDTauIQzN7dX3smG0Y1vLhmwVS18yY9ds1kGnmx67kVT4UwPXOvyZ5iDEP+/M8qDQPUOGo+3Y041/Ixvju8g+6j4DEugvslAbGoe3DzggxcyaD6u4+MMvdvoJNMikfHzURMnMQy7fCegTjntyFmkOoW06GR0wFtkOhn1kaG+yKkNzn1/V3GdXvpfKItLhpbxYtQ6LYqP6EQ/w1ZaebwHO4fLB8RctqvuEnYvabTM9OxqP5xznfLmsPLCuUx8U/4S7ii9WwLrdCv5VjY/8D146byHr3xx+is0UXAly7jy9zpuAhhHj3vc48ZmjlMuu9cWmxz8cNjw8fcoxoiJt/Fim2z4xQAAIABJREFUXLQQiQ6hPPTRNTDiLTzhjPY4X6bL309h/G2iiczxMftgq6tMPFjlM3xllQfvvUxfqew9QXIlY/0ZDqF+ks+zayZiJqj6nnMd7sILLxx2UR+aHPNOScBqD+7oKC08TC65FuItHsnD5iV5cGRnQe4LoSdy6hvebfKbYdKVvcKvg4MjnMsQfHnr6u4lb1l/mYZjGx/BF9bmMl3+unDJ4/HUjb7qFMqf4+vaLW/JnzHnGxLspg0haWOJN56lc+LqG9duTFlcupVl445tdpJos11dNxmCZ0ttGnHojIa90LwORp7bEha23hVlT1wbZw8sbn3gEB0+AOfLuehRx+0VG/Doj5YROQ0/8bhETabN4cB4vtgM4tApD62Fy/qHKX0oF5qHqYOOeDl7EsgIMASzMWAklg4sQ2JyZHffaaUPCLnq57+d/K+lxSM4L6zbnfdivish3kuD3yLUu5cmECbJ8rQFZyeg4nYVndwob3IcTYwbp50cOP7IHUngdEmAfs06N7dTPhj6SVctOIRzWh0TFQsQdcRNMui42wDGjUUJB5d8Ew94pI0d7zJb8PhrHJMfMHDxYLjalebRchjcLOclP8rwzc2yKF3d6pFLfaOMbzIZHjAmd04X2DjXN5Xx+o7LHskLj/y578Cwad599zEh/2fqpAT+cFlMdV1PnjL0zHo044+PgxziB5/CnDjZOb3BvzRZ+ziLTUtl3FynuoXbyoLZFaLrZNw6vmZ82/Cjf1s5PJWfKK8nWm/JQ3iiZy4/kfiMJ9yb8NAPzhgBK90Jnzhcxl44jSveBl+b5r7aakO7G1NONeGqDvx0jofT3MVXa0+V0xb6/SWbW15wt/Huq+L+fs3Cmc/moKVrs2fSttcfZMiRh3GaDURXC01l4MGKb3Lh3FR+UPKPFpoHpaeO6DyrEmjAC3nGwySX8ZgNuTKTIgtBD3+GmtHztUsLS3+ObFJmgmZX0eLTB08Ym/BglEH3HprrH3BYYNpJZJhmGjJq8jL+8KBPHle4FOCm/CXcUfpIArskQJe26RPdDCZdT5fhFjdR6GRLnkmLr2n6CJAd6/mLguAsQk081DP5cE3dpo1xZhfeV2ad8tjV7mGPhsaJNjbFl/xu420Je7bTSx5n2uN3hqlvoluZ/ig/WPauvz5wlZmcnSz3TrrJHjnXBjskXp54Hi75+pCd8x6W00yTXO3pU7BOUNwGYStt2tloUMbuzvoDVr3D5pI9vuKPDMjcOCIDJ5yeN8YEOWxy1V8Hsy5vxlPd8pbp8gv3im8XHvj2AlO7hevqrMsLfq/hLr5mPHN74su6c/lcbxlf1luWb0rTjZzxpr3GjTLjT2iu4ZUF8xTeRrmNH3n0yjiecUVPOOif70KYx9BNG0JggouGEwnh0I55EFvghNBzQb6NRTbI5qL5FP7wxLn1haZ4PJG291pnlg0akgtZsI8cGZKzk1a0o0tfcOrkR8Yh/DlaaB7CTj1i6dRIIEPJCOTEy2c8SpeX0cmQuObBaDM6Ti8ZY5OmDCIjLa4+XNX3YLAI7T0DO/wmEmDBgBc32ejhEZ1C+cI5Lx7Ujd7KKzsKjyRwIhKY9SjdmvHIm2GU0dEWHB7CxoiTfJMJi0tXyS1oXDk3Zug5nXcl6mY3u9n4GqFTNB8H8l60WwK8ceb9HYtTXyw06fDlWYsY7aGlyRMauMbUTPOm+JKPTXCnOn+dXDe1sQl2STv+weI/2wNGnitwJkre6TKhY48s5i02hSaUYMCGQx/BWSifE4aXHSN/ts1f1rgWx0bSAf2rbs7ppmvTcFrI1pZy9IKHV3zJWzgOW4hPi+6eI64x2mhJxvjdJovK6pvgl+lNcqv+pvLwbSvfVbarjV3lu/Arn/ldwi/xz7Diy/Jl/XX4Zxzr4Jd5tVG4LN9L2rhpbIu34PRetbHl6qnTS4tK3jhUpk70aj+exY05Th5vjuMVHt+ToJPGaWNTeDJOW2yFBW83xNh87dpwcn3Wq0g2IeWBNR5c87XBeDKy2yvd2s0VF3qe9YE0dJnDsW1oIpdoExYPz2EL/3+Lftg4O+LnSAInIYEMxtIIyM9DL54xZfjAS/M+WuL00oTXp7dNfl2l+MhHPjLqgWVI+/NtO3TSjJFdfAbU+2iMqRMak2UGFLyJBeOl/Wj0IMkwK5MfjXNcHa68kTj6OZLAKZAA/ePSsVDSNfopnPVWvPEj7ivLFo6uylpgcp1uWWC6GeCU0vuYTsM4J2G+Pmth6uvPJh3Gj49UwGEcGUOun3vf06QIHWjltS+9pHkgv+incSY5x2eY/RjH1+zwi/54FpY2gTNZ9KVfHw3xTpQFJc82kWtfgW3CBJ+Fo/ek7NaTe1dc4eXaIAPLbln8n3/++WMDgD2zudAEmA5wQv1u4ktvtIee4gPoop/oVxZfc/lBjidDPIjrT/L0DQATWXlOevrISHpM1rOb9aB4YXCla7N05WcyjIbaPJW0JMfjwRlsddFVXjQuw1087Kq/xLdsc4l/CQ9/HqyxYR5xt7vdbcwhfCPCKwZO/vq7HPDZiOgLR/il57aNfYtU9dgHm+nVrc6JhuGB20eB/PVVV/TZjF/91V8dp5nmVPjjnMq6ImycnClHHtEq5G2YkoUydo+8c9m5uV5lhzE8Wmgexl494umkJcBQZEwLIRWf0xllRs5kiBE06fXnxq50OA2w++ykRT1wjIzdLV/FtHj0/gPnxMBE2QS5KyJOEixQndK4dutai0m23T3vonlARJcwujO6M73KcnO8vKPwSAInI4HGxSadgzu9NElus8SpmA0Zi0xfmbUpM08cfN3Qu3u+sGzMuEJukgEXPbZwMRaE1772tQcuExCLJuPIiZiFkw/VWIxabDpN8zdFTUbQvG1MxFMwu+BPRo6nom5yhgutOfTz7JbrZmwTeXs/3KTIotKJhA0xstNPFnCcevBmv0xSXenXP2TpNMOXgH3oDFwLP21Js3MWmK40s2E2zNCmXifaTcCE6oBz6wMui1306n+2Fl40xV9peYfBxVdhvLo6SA76hvNMIL/g5G2TAbht5bUz49uFcxByCn+20XeyzcTfyeJZymcXviVPx1t/iX+Jb1kubQyBaxPc6aXNHSeE7C8aomMdPnnlgxMPvtA4ZgeMWe1kQ2zonayrbaFFsteIfAiLPTDexfHBZTt8rdxCM3pPloa91p9pRR8b6kYIOs3TPJ/QJK1fkt9e8R9kuKOF5kHuvSPaT6sEMgYMwtIoMCrKGQ0PfFckTJItLp2gOEkxMWpCDJZBZChNmO26NTluwm1ip8xXZ+GwsLTIhN9pwtvf/vZxlVA7JnMeGD46xNtRNPlaumjPCM7l6/Lm8qP4kQSORwL0ib6lV8Li8KSL4k1KbKp4D9PXlm3QmER7SIN1UnONa1xj/NWF951NHtJx9cEYV9qQ9iB36umEUz3jh7eIgrdNHzcMbOhYbFp0XupSlzq2o7+N3+ifedoGf6rLdrXLFnFLuOg2AWSXfLzHQsXC0qKy9yydRlrgc+TKNUly7dhisvfFLRpdTTOZ1C9ONdzgsLhnm6JFv5jUkrXrzq7qwRPu+k66vpTHbqrLTjopZRvxoe98cRtObaQHysSXvI+GDuAPfrjC4vhz4myTgIxslNB71x238T6XzTg3iWaG3wRzqvNnuk5F+9vwwT+X75WX6NpL3WA34d5Vvpc2NuEu3xgxrthN+IwbafnsbDQUqtfYr31hcXDBFvrAjYWmenC60WD+cqoWmtrWlg0nr0F4naL3QOfxr22nsxbTxsPZcug1Z7MI9i412tkw87XojbZkWPqwhv93ZnrAOTWAdF4dOA8QrC3TS/gZRnzGUzwRwcXP7c1l6+BnnMEehadeAnM/z/GlcdVHlWeApcWFyz4sDY8dK0bP5McC08kA4+L6iEkAZxHJ4DqJ6b+n/GWD0wBt8MG6QtbC0QTYVT+nMRaWJuLaA2syZ2Er7w1veMNYsJp8+f9ARtYEMIMWH0k4+gvj3TjIyVOfE+c9qPAMrocW3Ltc+DfBoQPOcNU/ped64Yr2uUy88vLDC76y6i7Ty/rBhetcDpeykiYf8hVf6kryFtJX5fqzPrWYcVLv9MtC02m9E3+Obhkv/iPWyVf/hQmX+rULJ13hoif8NnB4C043Bn7t135tjBOnmuixyDKGnHD6cqFxY2GqjvEKD5z4097Mn/bk8Tmw5ZeXbKK5fLB8tILjalN8xj3Xk49+sHx15c9xdZwSskU2rSyw8WthKY+3Ceb2hXrq8+gSskMWjxbgZOLErL80sMA0mQNTm/FiwmnRQ4bal7ZQ9J+mrjs7kUiW8VyobX3PxY/TEbqgTfRybJ4Fq4UtuOxFeibvMDh8pePJBY/i3ke28MarCSzbP0+sd8lgV/nZkt+ppmsXvl3l2+RwMnW34Z3LTkUbxiY8S1ylKyu9qX3jkyuc4SwAXXF3S8tmE900L3ILBV51Gqd0mt1A14xr2f4yDVbe9a9//fOe8pSnjAUcXPCEW2iO1YZk+Je4ZtpPRXzmLzptBDkYYMPQaE5mE7TywlPR/kHAcegWmpSqjp8favKWTl751SsNtrzqKUtpl3FKTqF4TnkDqjqF4TsKz4wE9IP+oA/1gVC+kNd/GSxp8PXxnLZT5UTA5NgJjJ07O8w+kFF/mwy4TmLRx/CZCHjxnneFgvGBO11Bl3ROvoWoCZZJsMmyRaz3chgvcacPPBp4E2anNHbNnP6Y2Dk5cKUK/SYpwmSQTOTl0IC2XDTO/BcPZlc4498EG4z2ahOsOFf5XF9Z8l5XXr1wSBef4eHgyFx+MIUz7AA8x3/Iayl3suKTnzDdBkvnjC26ZYH5yle+ckyW3/a2t42TGSK1OPGemauvFpgWiRY68ltcgZvbqY05Tzw4Y8gEyALHwtWC0zix4LQZ5HTPdXULTu+E+nsIcBZX/R9h/BrT2pvxawdfHB5nt9Sb6oFJTsXneuDgTB+VyVMHLcJwlxa6fmzzySLa4tL7jBaUTistME0ALfCjI3zaMQkiJ6cSbEaLuz4QYgKZHak+upJ/9INhs+CqL13xv9KVrjROI5Yyqt4cxiv6grfZYMNNn9EZpxkWvsqDrx9mXAc5Xj+Tsf51Iu/0Ep90lSzwT976S9lhW2wf5P7bL7Q3Rudxi7byxbMn22gGH47C6tJDm0/mOeYgFlnmKhac5jtsuDo8PLUnnHFtar8NFnXZJ/Mq9s0YMDb4bAUb7mNAYOWfbjfzpS1tGqNuoHkdBF1k4PUCc8J4B6vunD7dtJ5N/IduoZkwdaBOXyq38rlzZ8Wf666Lp1QpSGn4wqnNdTjDdxSeGQnoj+WETbp+0nf11dxfxZVzwbli5vTF6SUjarIqzwQADLx2lU1uTaxcEXPNjIFh+Di4wRaOzIt+oqtQNvpM3iwcGXHvHrg64jqtBa7dfRNLE0gnQiYg3g11yqltO2hOFNR39c1kufZrRxucMvLBowkr+k0Y5YNl7MH20Ig+vJyMS75wMMrJZt2kCR1oUIeLB2m+tLC8mbbKlcFTGoy8Jc7yZ7gBdI794D+5iyePZNa40nc8WHojlLY5Q2edxHh30iaNhU/97XSsdzBdHbfgsUvOhft4RY42C1v66goubxzAb9xYdLqFYNwYxxZlFpwmBxY2xprFrvozP/DiKRmga5ZJdFYOPjkpU5db5pcXLuXaLa1cXD55msQ5pXQtmA2woMSHsSvfRAf/Mw51ydzCkjzIWWix0gLRAs71OpOjaBqRPfygj83w33Ymnm5nsH3pgr7U/jaXXITqORll85x+izvZpD/srFNN8oyvbXgPUln8JC/PGHySnc0ReksW5O3mCzmoM+vKQeL3iNbTL4Fsx8m0FI7CdI5uml9Y5Flo2vSy+c7mm3+Ap7vg6bRxzUnv1dUWe+avkJyYakNaGd9il/3SZrZ2r22cKNzclrj5mPmhsYou80IbbuhRzslH+y57eKI07bd6B36hqcOWTmfyypbl5VWurrzqCMubw5F50U+w4S4MpjS4BgIlO1OKHx3nekj+c99avHD1X4Oc8QOXIaj/7MzZSbf4srgUd5rpyhkcnJ1kVzVMYk1QnVr2HlP4BuC026VuxjZ6ojNYofrzZJEh1RaDbkcPTYy5iZfJh8myCUhGzoLTqZBFqlMdE2e0mWjmkhE9xa+FgI+yMIwXXHDBqGfSCS79FQfPJavwzSG4Xa76YPGqT8RnD4avfTgrF1cmXf6ITBPz8qN5hi1eWbDyoy1853JIHmQkbNJQWh7f5gC5GVO8RRCdoosWchZBjTsLTNfDLf6uetWrDt3Ux+rVD8K53zf1QTqAjuo0xpTxxo5TOrcMTNDdDrDgtGljYeYdRt5mjevq4LxbaAcdXvjgyeEfbfw6/QlOqH50VK+8aFYOF/nMsrXQQF+LSjI11ltUWmAau20GwZfMjF12w0LSFVgLNDKwIBQnE1dco0Hb8TPTUDy8M2/F0a+tW93qVuNEsxM4uMmufg1+U6itZKA9tzrQz+7i8QUveMHQGwsssNw2uja1s5/zySo5kAWP91e96lWj78Vdm3UDQP+1qbKfeTqi7exKwDic7dfJUJO9gIOuGovmF74EbhORHaWrNpvYrzbsanOvdBgD2XHtGOdunTjFZwdtunHgzItsnAVfGzOttX+iYTjn+vBrP1rZYu+pO3FFr802z5FsGvj8jOcwxw/0QnNdp+vsOnEulyddHjg7L3ZIPaj7yp5BwWgLwVJau+tOlkyM7JZ4mFIeE3YP03Wu9uYy+LRL4Y7c6ZVAetADWz+Se/1SmD5IcxZqdqJMPi3kCukHWIYDrF0q11QtLi3ixC0yPfTBha+4MJrgKD8pBF8oH1w0S1dGF13v056TjU44XUvsxJUBdrXWItkEn2FGo3eoLIqdWJq8dXKEHnzbKXQV10TWlTuTRqc7JjUceXLxMBIbfuDc5eDDo9DkKX6F5MV5cKFFHzDixq1dQ2O0OsYhb2I9j1Hj1DU++HLkmCzVRyd+ePnSfHDxUZ3wHPYwvgvJRz+RA3lKc/op3ZYGY1HkdNDHeCza9J98/cMbN96LdC3c+NF3cOgP5cVNUNSrbzbJHEw0oRd8thku6eh1FVS7FpAWuE440Un3fbzB1Uw788YS2i10jBc0m0jBow1eu+TBvizT6Y/2g0M/uFw0yStOv51Q9l6lBaW0a77kaBJnbHtO5aKJrls8mnC5Zia0qJRnvHt2mRRG70wjOtHBly/kCmtvU4gO+HPS6tYH5W8KgxXSBX2ov2xG2OQz7m2s0S884YOr/8WT715p3kTLmcyPZm3Ge7yRIVtHL172speNvgfHnnsOGC/xGp7SZ5KHo7b2vwTSi/TkeCmufvXg4dlpf9/BRr761a8eiyw29Q53uMOYexjL6rLR4MX3QgO7YRwY35z67F7XZuVlYzxPPPvVAcct6R2Zp/AnXqBEo7YtgD0/0G2uZgFuU4/LDqLrdNN2Ctk8aVQHeqE5cz8r7dyB8nmG2iLCA4p3IuSBbaHJm2C4RuVBRpF5eAwgDzsTcpNtD1GTVw9sk3cKxNg7ObLwpPS1GU2UHq7yZ7qP4qdHAg1oYf0gzqUfjJ/+0j90wYKshaXFlokefQDD0wX9zXCYHJuoCukCp51wS9e2upwwWkbGjh86SPeWdRg0uLRlkuGqLprw0KLTpNkpp7wmruJOcEw+XWlBu9NOp5wmc+pYXMNrTPjvQaEFnutr9J3DF58x38bGkvZ1sMH0QLHxY1JJ/ibYaDDZbqFpkm0s6z8yqm/0j3FqjLrKg6fGqYegMeo0x2bA3Bf45dERLdGJT2WcsuKVH9ZwlkN6rL+TQTpAjhy5yLMYckXWCWYLTH0Fjv2062x31+LNiSH9VldfcuET11Z07JJ79YTVQQ/XhF18bsc7Mxaa/kIDPehFu80ZuuYUER9sgg0ai80WnY157cFpTNK9ZCSdrAYRF8kIH2CUB+ukzvPHjQmbKvTe80mY3pMhp766eNO2iZUFJG9h2YKyRSY6TXa4eNduDh44k18yF8pL7sm0eptCcOirXmH4NtUrHzz64g8Nnt03velNx/VZtox/3vOeN+wW/tQBv6RRuvbDvx/DmW5xftlH6H7Tm940dMQmIr6cZrZpQE5kwB0EnvdjP5xLNNGRWe9OhvfsmGv3bqiwmcasZ7g5hP/tZHuyMfRUnb3QkC6rw44LjQN2cbZn2rbx0kex8Fbdk+FtrjvLa46DkUaf54ZFpsWm9q0Jrne96425Y3ZxKYe5jcMaP7ALzbmj57hOTAHFGWWdbuHgTrdTHyc3HuIWlhQXHA+P9DwA5nxKoKxyJ5wmrq4keRePNyGh8BYAy7rS8wPksCrVfuCLrLkMgHjGromn00DXTE3wLMqcYEjL5zJuNhYsyExIe+/RaaK+BKON+rX03H640gdpOjS7ZXpZBu8S5wyDJ8bWYtC1QEbewtGHg0ycLUCdBlqYNQ58lMUiE18mpt7xtKhLvy3oTLxNgp2k+Hok3UYHek6FS27aQqNximbjtJMcNOcao9L1IwOeS47geGkLzk54fPG3TQInPU3C1Q8PmvAoPfdtbZxLYTLE86zbZCNNvsYVvfGhFg9ZeuSDNJzFv1M2GyH0krfQVE8ZPMldHi+tDyxCa2OXzKsXDiG3pF+esvpVnB23gHTS76TTRMaGjI0nfHlOGAfGkzKwFsx279l/tJIBWsXhxkNtN+6lwfR+pWeQTRWLSjcI2CGhxWbPsGRD19Fq4mJx5ZlDp7VvkWkDzEaKhUeLd/D5aImGbEkyit45v7JCuLY55fiP5toWwpt8tuGoDP9tssFnY8zGhOt4JrGu93tXqw9saFc7+OPED6rDL97ZvXiy4fnkJz956CJe2S662rVnssX7sv8OqgyO6N7/EqBv6ZyQLhqj5hRspfnGS17ykvNucIMbDDuVDQBLX/cyRum68S5kE8Rf9KIXjU1A+IwVIZvMLtrsgzf8e2njeCWN/nUOLeZdrvZnr7s1gx7lnnm5TXgqP0zhgV1o1glzZ81xSm6y6lqUCYOFhN32eWcYDopIKeyEeIjbdacMKQTF5tUzGbb7LK4tO6sUy+LELg5FtxDxxU+TdxOXeceVshkwR+70SyBdIO8MTw9hGw30wcLGNSwLMRNKdcCApw8mczYOGAsTHYtNxpQDVxvgxXnxnHiTpfLoGj2YYec6wQnVzWDO+dEIB5jaD57uWhCi26QVr7yJrIUc/umyL+WaQJOBCSpDyGuTg1fa3yM86UlPGovNW97yluNkx+Rc+7vcJt7UU9/E2hjl0dZk20NF3yUrcW3qF2PUA8UiMRh0moyZxPPGpnGrfSdTrkN6+Fn06FcLH2PUKZXFJ7xwoSn+d/F2WMvr18L0jYzT+/RS/1mU8RaYdCUd0j/socWl92osMOXRU/0Lf/phXKinD5QVF0bHXuQNNhrhFufk1578cAq1KY9eWTwaOybxePIep/Hh2UGvbEaxGxac+OqE00KPTNLXZGax4CaBBSUcXQMXb8PTOMSnOrPukYnnB9w2kHiLSgtMOkuPjYnqzrziOdmGMxkkB3wnm1nO2+Q2Kmz5UTe84slZXBuVbUIRbdVFe/pyu9vdbtgJsiTT5z73uWNz10aSejP/4Snc1N5+ykcrh3d844fMpG3g2Mhh0+Sff/75g/cm1vE/49hPvB3Rcngl0Bgztm1Y002bxQ55PM+dat7pTnc6Zo/orzrp7F4kYzyAN99mgz3rjYvshG9KOBAoDZaTPl2uNoTaMYd0bRiNZOFW1Q1veMPxukXjGVx2MHt1uujbT3g/ZpW09hNVC1oiUSfVYeUJ+TqwkxGTBIs/iwgP8h5w6ns42wn2wPbw9qDy7o3dUZMNp5G998CwGzDuhFu8mrCaLDgitxPtpMeON+WBW2gyZRJrEmLR6XqWK07RgF5KhmZx9SpbsH7OJ+tbglj2PfmVv5SpySoZ8+q5gskAOM2jExY2+m++62+BZqe4RZo+5E30lv0Dp/bz2o8GNIlv6lf5XPQXjszFD31KVxTBy6mzjM80zWVgTXidoDDSNl5Mli0KTNjoN6d+9Woj2uRbjNmxvPWtbz2uyDhBrQ4awUiTVfnFRwMXLdDx5JTUItd1Re9yoInTB/pOaFw2yXYl0Bg1jvgWLOjThrb1pbFoYcmL48+k3uloG0TJFL7+t9QJlZNOPObwlIOfX+qBvGQU7H4Ld9FYuTA3x+U1juTz7F8nfD58QJ/omDI21BdNLSy938v+tZCvr8KfjKX1u0UFp4+C3at84eDBFxYvTS/jZ4aXJ50ei+PHaxYWld43NXaMIbQpN8n32kRXgW0seq54RrAtJh6eD27U0D+4LJL6K6R41Q59501O2CDPJTpv4kaWxecTLLTiDz2zk8fHk7C8medg5ronG4c/B7907czxYJZhMOEpbWJJThdeeOH4uJSNJPbhcY973LhCSueCJQ9tJh9x/S6MlmW7ZzKNllnvtd3zKrrNO7KFdMf1Q/MZMjBv+aVf+qVhu+jQjCsZ7Ac+z6RMj9o6MQmkLydW+39rwcEJjVPP8nvc4x5jc5t+mgc/+tGPHhvf4NJ/8Pysv+vGKBjjw8bbgx70oPMe//jHj/mDesrMEZ761KeOubY8OORz4T7R8RCecEoXHw1cxLfx+prXvOa8+93vfmO+4dnldaOf/dmfHTfNokVd9gkv55Lbl9zOnasz6tw6pnIT5B7W4ibOjLEOt5CwA51SeEB7aDvWtxPs4e2qK6PtJFPHh1edTQ6MCS3jb9HCW8B0Jdci1IRW+97tsRPpf+HskBtw2jHQ4qnBEp/yGxybaDhI+ZtkWv4uXsiKm2WS7JpQSPNg6ztyNqEzydNHTstMFIXyc+DshLl25vTSiYbTS/phQ2KTm+kBo93aLr1clIRrWbf8deESx7KN6sgPb7IVJiN46DpPH53CW3BbLDi1ISNjCJ7kqE64tONsjPmgAAAgAElEQVQ03/gygXaS5UoMOc2yVzeatS0ePnBw6AOLE1dg0AFGuybuNntcS7bY9wAxRp3eiCuHS5+BN+kS1h780jxeLDSdGvGucmqLt/BEh7H6ile8Yix2LXi989T/KJrkzXzhX3r2ybs+2K8hmjlyif7kVFlhPCjXf/LJVyhtEeV03OmlPtSXZK1c/+grmxF9TVZ/6q9kVTvwc3M6Wy6/Pg0uuvYShnMOw4MOcXrEc5UJefV4OuB5gSc75jZEbI6wI+wKvu3Ye+64hm7BaTwYG/IsNm1wtcGBJzJEA5mwLxaWnVp6Ptm80R488m2ocCZayQRt0Sy+lC14+Vxw5cXjKDwNP3N7y/aXZeuaD0Y489nm7x3veMchc2Paxq8/bycv9oIc0tlkUh9rK1nVxrr2z0QeOni0oSWvbXE8cCav+vxZz3rWsFHsnTHilMRNATzOOJLX2ebvTMjwqI1TI4GT1ZV0OWrYNbbrFre4xdhYY/s8I57+9Kef98AHPnDcKEpP03NprvxwlSef3tN1z2mLWY7+23T2So+NOa4FqXi8FQ6AE/zRdrY7eht/ytj65zznOWOe4bmBHlf72fOZFvHs+AmSciCr7csTTR3H9bCYJatMRyujxCY3JpSOrHmf0ndaAg6Mh3UfbbHj7MMpdofXTX60QylTpLndOa48GO30IQdXrHxMxcCyk23XVTsUz8mma4cWmx6M6qurnDNADCbKfJgUMTnh8XgGfP1HHsmp+nCKm+iRFQ+G8zA2ubPw1w921yymLCo8uFucOGGxeOlqrKuU9MTEDy5+nvgO5Bt+omtD8RnLnmWdjPArHi9NWNEsn1we+chHjquxbgPMbjak6aT+oLNObrzkftvb3nac+sIFHpx4/ZFs9JXNGddoLO4sbm3YKOedDBkjFpmus3a6GO1CPnghXoTarc3SQrzXj+j2MGhxbRPIgsnY5cB7ODiBs4BGixNP9Rujwcnj8art/e7IhisUxy+fU5b//9i781hfl7LQ8+9a+wyCqO1VvN57vdfQfdFuO7kSpzYGEzUxJCQahxYFNEJAhnBEZAqDaAc4MipDQJBBRRAwIMZ56IjpxgnsP+yg1+7E7uj12ujVq6IMh3PO3qvzqbW+e9d5+a1h77Pn/auVd9X01FNPPfU8VfVU1fv+ysczadpojKVTTvYYVXhn/MUHxpANDP3GWHeCSY+UhcMYPddVnbN/XP4MuymMjtqkXnEO7eGe21e4PLDC0mc8c13kiQH5Mz/zM+MdQfJs0TPXHQ6yQT7hE/ZYFJEp11+dWpqHhMk8I9N4NLuZFuniuZnu0mqz+Kb82hX81e7P7Y1WY/j3f//3L+94xzuG/Onfpz3taePEz1yP5/Q13sUTcNJmeQjnlfCbh9DDRR99kUenyJaNDaeZNjbk2Qh91ateNV7LUS7ZEpYvvqnvRyXbf1sOXGQO0Ck6lhyTQTpoI+j7vu/7xoakKs0PTiMf9rCHnR1f09XGz3CAX+s+mQbvBoNNY+sJ62qHBDZerB9a48BnDEgP8i+k6ejoSb+iN5psvpoTbr/99nG4ZYy3hnjxi188DrGqF3xPaTeKf1WeaG5ifoLHJ3AGVIOxkxgfBvCivJOKdgEtGns/yI+BE0S7ouFJ+BIidUorfxMN0oJP2NBhgrOwcv3OlTKnPt6nsChz2sm5fmX3m1K4esjgVTYX3lnZyrtefG2M78e1qX4AbwARj+f1E17hIXlgMOj/TurwXrzTBOXbabKw874l41I/WOzBE23wVsdhdAZ7WP6VSJ9pLpyMxbvaJh5P+AZuA6l8jzRxcOIN3NI9FtkGV1cBnTL4+QH6BZabJxELJ5swFodOMekIp18tsJ0gu2bCyLMAh4Mey4+GUeBAR2vLbADKr0/QF/7K8dXlNoNJgKFkU8oVe5tDDG6bQ2gUNyF+wzd8wzjpVjacwuqprhn/1RpOFta0z22Sl0zU/8q5FcLA7EM/NgikgdE/jCOLXyd+3lnEY67+rw+Ti5G54d/F4mdtUl84S+MXltdDxnJzvja4/dAJvpNKck9OGM/pRPXAUXm85Iw5ZM4449aEscZcZNffIglcY5iyM5/glYY+fro81xfd/ODntOstjJ/e97KJ6GTZuOXanJsPD33oQ8e75vgQ/+OZ+GF8u9w8SkbIT/1b36GTDBgzydqLXvSi4ct3K+sxj3nM2BxVTvnGwKupfZebn9v6riwHGrPIoIdMOsnzTrW5o9fMXv3qV4+bB9bl5NncMI9rWmHMpbPpg/zwS3vSk540dF66scDYKF+ectI9XLp0b7gTPvjT1+iD32a5tf1P/uRPjnkRjHHeBnwb1epX/kZ2V6WhOXfK3NE6ilDpaAtRpxMWu+9+97vHNRod76TKKRXj0hVBE5BFAQGGaxPu8xUEOCgJB6d6OQttC6/v/M7vHL8RZ+ffF6icqFmceV/MpMgA+p7v+Z5xvcz1KThSOmHt2+TkcXMbNsFdzWnacBL69bM+C1Y5fG4wMcDI995TXyl1rcLiw+kL1wKyd/1cr+pUWxjv4az/qqt4A9zVzM81bdqQnMjTBvEGZPFgpDGqPPSp9mo/mGDhSX/g8ugHfLbJY0F02223jauDTjrlGXDhcUrqS5GuldCH6NAnTr7oqd+/ojfqyIFTPlrgy83tm8PpjTKl11ZlhTl6yjhygs3A1QZX3L1naOJghDKgteu7v/u7x4aVMSRa4IA/3OEdyK/wv9q9iQx0Riu42sPP6XOPfrNIcKLSh0j0t/L47DTO+60MTP3IwMRX/SY/A1N4lqPqOV//qHbBVbtqizpnV1tLD672iDNaGJbGacalBVKbV3bRnSq5rpmcaSu5hIOv/XfccceQ48YuiyEGpcWV2yw2uIw78tHCoKi8NtZOvvSe4nObCoOZ3Tpe3mHp5V8LPj647eD3+ego49/jvS2vwLi+7INfjRf1s7YJXwxZvLd80g/oQ49H3CNMXji3L5zemNPSKVfxrGm8j2oDVVsqr0yyfW/p25bfcqBx6KgxA4xnLXfKOATy+oQNIdfbjZvWGT/6oz+6/MAP/MA44QQ3j6G4Tp7TUWGueoy71il0p3mFTxeMvVy6oky6cVQbRqHpn3JcvrLC8KKrdL6x3s0oa3o3XdBlo9y1Ya+PrN350LEue63Hr7qrszqwDhFOWBJmcYsgCyAvGPMtEAicxY6FjwHZKQmjUzlCYmInCAlLAqQDq+98O3OmVdkUAz6POgng2972trHrweCsjF2PZzzjGeMLXb74GZ3K1dY1XcreG3rPt30XAz6aa/dJceJdfa/fUnRpFoBOii3+TMROW5wyGHA4MCZji2HXlC1MKL5TBQaOfPKCv8L4nVyIz31wFL21bd1PR5W5nHm1ZaZTWn2Bx6973evG1VmLNjyoLfgNDp884vFqxifMqHBS47fuvv3bv30YcGD108///M8vr3nNa84OxPrSotupopN9eqDf4FC/cmC4+hxN1Sk9GoWlK8PN9EsPTn7xcFVGnAHlZNOn2N1G8MEX+fTSZPn4xz9+yI9FIPjwRss6Poi5Qv9mPiGh+EzjOl1b47XJ07UnOuWasxNM/JHP2KZTNvKMs67JOq0jH3AkJ3xO2twnI/EC/9WOkxQPll9/oaU4HNLJnZNsss+w9DAmbVy5GcGAsfHAaUdO+xgz3j/tKqxbLfhjQ9HYBAe+KYd34BlBDAUbHPjm1g1DE21tZMx0orF6Z9qjg7+pX9dpM/y1FK4fZ5rxx2ITv573vOeNkwTjjDY70Xz6058+rnDLVx48/htT4kv+Jv7NdV3M8NyW+lLf61+0odN4bIxxFe/1r3/9GJd7ncH8JY3cJCvKKqN8OPPnNl7MdmxxXd8cmOV03dK1TIFN3oINJr1z4/BZz3rW2Gwmq+bUxz3ucctTnvKUcRMQHDlWrrJ86dEiX1hacMHCKT0dQofwbJBG23F+7QFX3dWjjpzxn+7akHaN/ed+7ueGDWIuYGT+4A/+4HhNQhmw0ax8+MJ1o/jnjgmu0hYnhAmaid/JyMtf/vKxGNDhdk98tOERj3jEWOi6xio9wdG5BvCEJ8Fdd3qCLP8oF97wJUgtsExsTW5OznyJyjtfdnZ8UMJixGLOnXXtYRgzgOCBQ9loy0ePcHUeRd/Vmnc+tBtATKiccr4i6qQB37x3iY8Wcz7qgmf1nSsbdpWcZDMsXcd0WtZOMXyMmng5y5e8+K3OwoOIa/hfba0J2uZJzhiJFs2MDHqD9zZvxIU94JPNFjbS8Q+sBXo/geJqG4PEAMzI1HfKuvplse1aiU+gK1u/waVf5r6M/+rm+Ou2iMOzhpnh5FcenEdaMN6d876p0yZXGv1sgk0MevrLv/zLg34To5M7Mqlc9aI/XNUh70q4eBAd0RC98tHLRXNxfe0E140AJ7wMb9fRwdEdCwQGEgPTKbTNAmUb59QRX/P1JSd+qXmiDq62oqt6tQGt+pNh6XFyycC0Eejk1rjC0GR8glVGeQ+5tGnpZNL4YkFhg8TG5gMe8IAhN/LU7b18xrkPJbkuDjfDgV452X/ve987TjbJv9sV5M3Yny6qd25HNKApfpY/AFf/LjWfV9VdkSgeGS+8u0hPfZuB/NoY0U/6i6yS2/oeoXgTPy8nn9SZE577srFUuv6lc67v20S3USHNVesnP/nJQ960h6xIVyZ5CWfx6tv6Ww6clAOznFZGWroyh+XP6eXlN54ZI72radPODUQbJz4MRE+tE4x9ZJk+c/SBE6e/fLINL1+dZFycLw5OHgeXND4XPSNygn/KVobPSfOoA33WOzYiXZe1xmHUuqXixoqbFtZSYPEAbTOeE5BwXYJcdSeacTnBaeAkcDrYwu9lL3vZeN/R5G0BxIhzd9s7kgRY2YStToa39AS1PLCzW8fnPGHlwOTP+dLU40nYwaLVTvdLXvKSMTEykLTJouW5z33uON0hoIQzvCnSjP9aC2uLZ+1OwmO8cHXNaaVrjU6bPvCBD4wFYXyCmwFjwWdQc3rJmOlEO97z8TMZqG9muo6jaYad23Q+5WYclyuszeiNznybHHYc+zKm6y3S6Bn59IhbPJNVMizMtyC3uDPI6gtpHnVZhHv/9Z3vfOfZ0zDGrGuqPuTRx7D0QbSl52iDT7w0tHuKK8OBndOFS+dXDlywM8xctzAY7bNwtSnU+4gmF/JkZ9bXo00e0mY65nrhuRKutuXHA368w1v0iYPTv/TLIsDXuumYuL7RRrrFqPT+pdM4/TrzEj784HvaHMKb6rgY/JjbtIm39UVtJYvkl1Fp8e7UiyFtc8pjXGEAkmt0olGYs3Fp86ETS0akzSsnuXjhVMkCiUtuOmULD1yuijnRZ7QziBiy2oG3jCFj1bd8y7eM03IbY31AqbbWZ+opTfhi8HMQf5X/m9scqfhKLo0/+GjT8YUvfOHYeKwPfAfBLQQ625U6uNZ8K55fHRfbrx35ZEYbyCg/2sipa3hOScirfPMaI9Oi3Kk4fSU7yqVf6E3fLnVbLjZvtviuDg4km2tqSk+u8oOTH0y+PLIrbo1gXWHz0rrdYQG5Na943cZrZtZtdJlOp6/0nJzD0dxC5tNxdaDFWsX801gZDfLgkF5eNB/lVz6Y4nyP+ozr1gcMZvTQS4cablM85CEPGfVqT7xa++G+kfyr0tDUoU3gwgmhD7w85znPGUamfEamhZ8TQzuYCRTBbCCuM8NXvM4vPtcZnvI2+eC5NR71eJpAwISbT+kYmz5ZbmKhkBYYPv3s5Wl1w6nNwh7lqqd2FN9E29WSFo9qP5o9tac2BCeufU7AvHvpCqOTS6cA3lkxaMk3sOCP62oMGKfGTlpsNOAl3senNS/Ihnrq4zUtwUdT8cP82nBY/tWQPrel9qOrtgtrh0e+9AbKyuK9UyDySoYt4E0MToksfuy+W9jrJ3rKeNUH+GyR7l1HO5ttBMG/rle89Jk2eDz6de3Qq476YS63hoUjN8NLkxcPTB6MA1fVyJ92qdtkYqxxjc1EGb5kKV/6pnZU96XyawP89Rsfj2Z60KkfGVs+UOb0zZeAGZjx0tjK+HGK66NIFu1N/NFffcmNOENTnR64oqMym/xg5zxp8HHxVVi6p76SBq7NkU4sLdRrn1NLYf1o8VHZ6Le48X6fTT8GpNN4X0l0S8bYYuMkuVV2bpd4NOBzY08wdMSp5i/8wi+M1zyE6RE61A/O3GXB5au9jFj1S4dbW7m1nM95wrUlekaha/xfbZ+bUVvl4aG5gPwyNp3GG6fwzomxK3p0Vt+lA/ULnDOv5vBc30nDySR4YY+69AsHf+nRHQza6J41gcU4OVWWPFqMP/WpTx26Jw2ecPHDL6+6pW/dlgPnw4HkaC07ZFSe+cIYyzc/esTpmzCZntPFrRPk860PzKVOAo2J8DDQbDx73cZcI834aa5KX9WfvM9p8JuPctENnqvMHA6mMvnKVE8w8WPWYXQbY974xjeODURtM3fYMLQZpB1cdPLh1abwVueN5l+VhubcyTrX4sU7Q66vWRgRSEfVvgxpELbrR+iUmwfjK9WZCbv6C88+xbNr6UeXTTCE0ALHdRnvrqVs/HAkqIT3crcx2qNhTVP5g9hJyaWXN/dN/at9wmD0M+PEFUwvkPsiKKV21QJMC2ULfDtgrpy5qmCjwdUiMhJedMy0Rtcm/6Rwm8peK2n1wZre+gcPZj4UnsuVBkfl+PFcPrl27dSXEvWlPrNg9+GrJzzhCeO92bkvyXIyPuNf03kx4nNbZnxomOuubWCclvggByPM4k97/M6mjxlkeCmrTcolo+K1S/qMf677YobVo94WnI0T6iiMDmOna0x2Zd0O8RqCK6TRaVFOt9wKYGA6wfS+c/lH0VzdYNfw6paWK1+6RQN+lR+shQvHmCiPr50WOTakbNYx3MibzSnvzbj9oE3GlMqFE40WOAzLjEuGnVN2J5YMSxsjncwqdzGcNjrV9FEsc5mbBE5YtUUd2o/vTuN8HEvYh7Xkkyvl+doDXjvkcfFE/kzvHL4YbbhacMQLtw/adOyavu8g2PjivDbhK618J9TWCPiWzgvP8qFM/MW7TXlg1nwNblR6gEMdrUn0k/6tv+TpK/VbrPYdBz/uDrd8RibaLcSFa/Nc/5qO6t/6Ww6sOZCMrmWGTEpLNsmkcdeGsY1+84Wx1oay+Z1vLuwpzTqNPkqXppw6k1u3RGyo2bxjcBqr1Ul/H/WoR40Te/kZj9GrHWua6Qc6o1t47eYyR+EqDy3CyoVXvDHXHON7MG4cdFW/NrnC77U9bqZLfKZjDq/pvd7jV52hmeDrFB1tIGaMGXS988IRRj/S6hTQZFznKlNn5l/JDkyI1z7aKOwb3vCG8a6p3XcGlMWNr+gynsBUThsIPOVtASvtcrRxpmGub04/jMdg0Iz2FpLi9ZdBSNstCi28LHoNQhbCnPJ4YteIIW4B6L0mH33w1VCL4pkmYU+D5px3GI0ngTms7LWUvqm/pHnim/as+VF+bQ0PH59bUJlcbA64Bm4SMYFYwDtVeOYznznkAG66q99nOd5Ub/XdWz96w7Mpji40cejWpuAYmz7L7v0vEyn6XSH1wj9jQFz5+KFdxfmXw1U3vRKOdr40j8WDq5s26vQTI9Mpnz6Ub+OOftm8cRrki7LGpNxJ2jLDpINwb3L4HW34bYzgomdug3S8d9XVhE/WGJaMZf2jHb1fCVafKJ+caZsTWldhjSPmDDvoD3rQg8ZvWLoF0YIif+YdmjzROAi9gH/4gyZjHf47ifM6hVPYjCPy56bGt37rt473hm3UuLUhfW6T6uFbp5VeX8gvbQSu8X/aoy/4+sMiWFv1uQ0humqd0Ed0bELb5PIOto8vmU+UVUZ5MiheWmHpax6uWVd+6ZWd04XRmwtGXJ/7aQTrALQbO8yPTtCtb4wxNkXQQm6SQXFurif8W3/LgU0cIHe55EaaeYE8NR9LszZ1m8fGh808a3CypxzY9E+YDhWHH4xHmjGL3NooMWe6zm4ss8b1mIvUB96rGTZV3OowRktTVh3C4RbPqaN0eMIVTGnBVC584tFeGv3jWgdou7nF/O+6LJq12ThiDWp9Y3Mw/vHVCy844Vx1FL+R/KvO0MwQ0UkWIBYXvi7ny60tSOz4+pF514x0aIJVvg69Wjp1FrTCfDRTaNdoKbSJ0cmBD5I46eyUljASdoJN8fCltuVfSoGN5upQ55y2jgeXX74ywvrXNQqLKzv83rmkxE4x5WufPmVcWuj6kI+TBr/TqN8tFsBxcDZQ4GdyUF3BRcsm/yQwm8pda2lzn0X7nBYf8sHEx8KVm30wFntOn2382PXTJ95r8/uavqxMrvVNuqoOulp/wTfXO+O/t+G5jXM4vHMbowNt0qPPwpWeeodRW02cD3/4w8fJplMxDmxl+HA06Vyqts1tqB3qVV/8BmMzx6mJj9E4+XGSFs30zIaA99x9lIyhqb+a5A9rw7pN6te/0ulwTjo355cHTnpP5dRtjLDIMf7bJWdMunZKzhhq8itXm+G1QJgNS0YlA9pJpbHVySWDc6Z/DsPJrdOkJw/RfyE+HoWfsewdTnKlf2yocmC0Sb/4iqFFGNrplHkgGPxK7qSheaZbWu0pn38tu/qar+0e4drpyvuP//iPj3eNyY50Oup03vuwbiLgY5sR8QJc/AuXuHByXf5cpnA++B5p6GveFjaXi9tgIMt+1F2/K0NuzW9PfOITxwkPI6Ar28qKt7EF97qvo2Hrbzkwc4BszS65aZwRJ1/JuTBD8AUveMEYd8lrMl1Z+CoH3rpO3HwBXpisWr/ZuPR9A5t9xiwbLL7w7pq49+XVq4wPrfnWCqPULTWwxvNcddcecbrPoWHOj94Ztnx+YWXn8UO6MmgyfliX+u1v9FqzSjeeGJPd1PLdCeU9jc3hDg/auNJH5Ab7d8UNTZ2x7gBXngiYRZ2fX/jhH/7hsejQN077XDu166djEwyCSshza5ylXyk/gVc/YSV8jEs0m1h8OKXdFEfxrueZELXDBAOO4ilb2/IvVZtmmqtDndLnfpvj8j0znfpGn1o4WlzZFaK4jExX3zhl8MR1BJOtEweLAj+hYJGor1PYdV9HmzqrFyycx7mTwByH41rJrz9r89xv2lC68GGwMxx4sum685vf/OZx9Rv/TSgMMV9VtqiHS3/MCyULLkZObq67tIvh1441rtKrl9+Ek+w0gYj7GR3tsZAlfwwW1/a9W0c26Wa44K7N+KH8xXLRPeNTh/TGB/WJ0y1XoOiajzHoJ3oIHu/pmZNLP0tjI8f1wvDDAY4LX3XWzuL8ysnzRJN0cbQJe+KHMDiy4MTSeOjE0g4yw9I1WCeWvgjLsFQuPPqAM15YoJMzCwDGmQ1IhpkTS9fsGc5ctEVT9Y/Mg3/qAFeecPTOcBcSTp7IC/z0gbOAsdnG6LT5ZozEF/nqt+HmapZTOQs37dN/8EUb+FkGo095Tn1c8RG5Rv+ZJ+cFrXaTn/TQSfdP//RPjwWi2zLJinnEuGQNYSOX3MATD+PPzKv4JW2dPqfFSn2iL6xf+OHkW8/4GIrFqy9W0sny9fEXfuEXjlNMX3W2GCe36iAHzf/1ObqibSDZ/tty4BAOJLdzNtnJOGxMneXJuHv77bcPHUo/yB4Y8XAqS87FKy9Mnn04zbVYX5mnD8ozPsGTad9ysNFiA9EttnSa8WaT2lVa43eyHx3pc3Rr11y3+sGWNrd7TecchxdtDoDMlW7XWZebh8LJGPbBHyeZXitRRj1o5JRHF1cZPreJnpFxA/y7ooZmHTB3gjSdRQm8OOwKkcHZIG1hZLfSOxcE96iOOyrvSverNkafRZZFlNMEX7kkpCZMP0Ct7doprclmVvJwXIr2zH2zxi/PoIGuTTToP488bTPZ28F1VcypikVk7QBj0eS6hCtsFoeuIrhCkaFdXertUbd0cTiio7D0k7jKnQT2eoOZebTmQ3mli5eGD/HZ5oGPWLh14OTJVS+nYvTUSVJl9Fd63a68vPDnXy4eR9dcH/qkR2thcsYIcr3t+c9//jAGyK+rM36A2gdHlG1yU26W77mOk4Zn+mbezOlwic91GycsuunYb/3Wb42dae8sgvMwzJzy0TNjjrHUokAd2h1+fgsRY1DpMy21RV40lDbzUplgpOOnyZzsGB8Yl4wDE7rNJ+8GaYcya7rIl40MRoLTHgaD3W8GM98cYTxRrv5QX/RJ74mm4tHOlybfU3zOv5Bw7QknHMLotGAxx/lokPecjZf6EB/Qgn7GtEWOkzmLOPqlreYQcwY84ayueDDXGe3wXmsOHzxkldO3wtpCXrWXkSZuDsVLfHTdWjljjw1Mpyw+dEV+yJNyHgtGZdf8UlZdHLjqD06ZdbnKGDtsJthgdWVaH6Mx/bI54p1oG1l9gbP+m9taXYOIG3zhGg+2/tEcWMvMJmhyTXbJdTJr3HHTzqkmOU32wXHhTebpg/Lg6BPdshFrAxMsvGDBGevoIbz0wtdabeTaGDV30UFju7HOHOUVFa8Q9KrUrBPpUPSjTTi6aq+4cuXz0Yo2dMNjjECPL69b05iTbMxy6kYHehjONjWNvbODHy4PvNrZ2AQODTequ2oMzTqgzrFoddLHMCEAOtYpX508C5Kwh+Do5OLhvNp8bUQjISTgBNQ1GrvWrrVpg0WsXU+7nCmDcu2caBMcF+LgO6mbYef6hNE9K6+wPrBgsni0YHzf+943FuiUVjoHRjsMSCZZCmyX2Y69AUWdYA1GnLqqD8/Kw6fcYXSWv/aDn9u0hrkR4viwiQdr/oiv08iuCYJe8hkkTg0smJxEg9dHJi2Dcv2e3JCBNc4rwXN0cWSrMJ7Qtzndrqv3NEzAxiRXaC36GZ/CypLZ2qSdcJ6vq7xy8bBwuGYY9Ygz3pwGmiid6KRz8hhoNnKchj3ykY8c15MyMPUD2rUZvfBxyUV+da/98tUT/+pbcT2Or2kAACAASURBVJM1g5JvXDfG2TFnVLoyaiNxXjDgYXjQjU78ZVwaL+x0+/IvWZPemJ+PfjRFV/QWj3fi6pnbK20eV5QNfp0e3pP61UOuGtsYiXhOdzj0MEzspntdhPHtCpcFGD3q1M6uv68c+riGMbN0uLShuoRrJ/zFC49Kr6F/+sKjHfVLbZGGt/oJHz3GJa+iOD3BR3LmwX/GunHKNTh6YY1BxvQFXHioDvjq++osHy4O32cYfUjWXVvv+p3XCsyLYOGxcWDuM4ZY6xgj6Y164YJbe9YL2roLDVu35cBhHEhW5c/h5Cb5lk/ewEgz1pBTp3k2a4StucAo27xIVqXRM2F5xmdXX5/2tKeN9zGlGbfoG3k2TnHqsdlCtuFj2Fnvmg/oKT00X8BrM9TVd9/nsElKb2yYRje/9tU2PrqkozEY6eLqNPaqo7Wqgx63f2wIyVdW/eZNv2jgy/nGCuMD+uGHiz7Hy/LUo7w2N7ZH2yDmBvt3xQzNBGPN74TWHXFXSC2edBDh9dK8DyXovARbnngDfXivZKdGg7ZtokM+5WtCEyeorgj7YqcylODZz372uNtOmClk7U5xNuFe83NTfKZvU/6ctoatzmhGN95TTCcUFpHeoXINrMldGXCcnaE+yOG9MDvLFo1g6vv6E4+UM6jIE8cH7ZceH+CVjya0ROPcjnW4dp0Edl32Roiv+VN8bru+9lVWj0mjdyz8BEh9VZ/qLzLShEP24Yz/+TP+Sx2uTckmGtDLGV+kJ2fkSp5F40tf+tLl3e9+96DdFVrt9dNEYMFxcM/xkXjCf9GVn5wXz68ei1rXLRmYTnD8Jqbxg66ANTE77fOVbvrWGKq94U6nwNcX8SKjaE1+cMpUTh9bqJAHY7cdYrS9//3vH7zLcIILrzz0nSMTaGZcGifQyZDymoRTcr5bDsqoB831We0Qjy7858TrR/HS5zID8OCftsww4ZthzjcMpz6x0IIP/dohLN0YByZ9Efa4BfKmN71pGJw2EfAWjLJwGUN9ZKPTXEZ5c2NtQCtcXG1Z++fbnisFrx3zRiM+aqf2kNPCweAVOfRu8rve9a7xTphND+WUgY+sOeX8+q//+vFTBcYxfHR1FY89ZDMdUQf+Kwu/sU59ZL6Fq00eXxf2sR9Xv5XVL+Btjrimru/cBHEdGi3y1MNPxvnVq75kdu7LK9UX23qvbg6QFy4/atN96eWRYZunjDzvTbq908+UNT6TPWXTMXF6xBmzbZqYY/zUR4Yg+QVPP4ztwlw6FC3w0EvfQvAagXnDWAcObeBsBjkhZeyZF2wMqZfOpKd0DF3RCq82pqfGWo+2OkE1H/k4Xq9xqQcuPv33CoZXS/waRDfstEU94OIfX53oxS9hMOLCXG0dkRvs3xUxNOuceC2uE/gEgiC4Puk0TEfpYBOFj8IQLB0IlhAJ14Fgw8MvvXpmvzrntIsVhnvt1rSAQW+KqN0mKQa1XViTpl0di0c7rxxYLvxrnCPzBP8qfxzoGq760C3PY3I1KHi3yC68AcqOEKdv0KwtBh47QyZXv3npqpDdLy58eGDQgNfgMk+61Q0+ukoTLxw+8TltVLT6ty63yr6ho2sexwzpHrpHNv02pmt++tck4DemGAgNssrpB/1potHH8tLdw+qpvovpV9eMEz3JiXzyWvuaLMQ9tcP1Nx85ciVcuq8gO+m0eJxxqUd+E81c72Fh8JULBk4PPcmBM07SPZ9bZ/gy5iyq6Rt4i2VjRwama6XS8R5Nwrn4oG9MlPC3cBc+bOwBa9xyehM9FtlOLPnGBRO68urgq7uxz2ROLtBKbryb7TaHhT/jyXhfu6Oh8WJuQ2nao12H8Tz+1vZwz/BgPGA86zLx7Hx9eOhBCxS8q00zf8DpI/zSB/K8G+xkzpxoQ88TP9Ho6vBjH/vYYSgxXPCzNihfG9BcejyIZ5vaU7kZdhPc5UrDl3ilTuEcGpNdclw79S1euWHznve8ZywsnZww3FvEggFPFumJhazH4tYVZcahPHDqgU9Zcg+PL20bBxmVrqpbNMc79OlH5Rmx5kDvdrvFA4d5jg6RdY5MerRNe9Ln2hPeq6VP4v/Wv7gcqL9PijW5AE82iueHJ7khw9ZvxhJyaz43t5FfeVxy2PgIlzQ+PNLN/V51cirvdF4euSbvwh5yDLZ1gXAGmzBc5g9lGH++zYIeNwLQCF/jmPqtJV17d6vFeGcTkp4a9xoT4PSohwHto1vevaSnXsujs/QXTM7YbB6H020Ht3/g1oboFFaGHy+0Dx+kccYpes2VNtczMm6gf1fE0CTECYOO8rT4lO4Y3ReddJ7Ocdf7Wc961hAiaXXgjEefwUMYpPM9dTIfLk/CUbz+DlY6l1/+xfLVg0Zt5iiCNmkbQ831YIrlsTvkap5JKJ5tomtT2preuX2FgxGHwyOMRxweFlY/BbLT5HGV0K6X00unKAYE5cHBYcfJ9VhK6769d069g6K9BpTZHUb/Yelz2W14Mwfq00258nKH8RiMZ9YjsGTAe0/ew/T1Z/kMBD9twqjhwKWHwtWRX93Xgq+9dKDFq6uers96P1N7THg+ze5kSVy7PRaIR/VBbY/H6og/0nLhgBOMeB8VYdjTQfpYffQOTX4iwcdPGHDK6Sf484WrL7zlV7f0uazFgBNUYxOj1mmlhYlrR3bCfXxIvjKcupIDE3GGJd/CwHUoG4h2qbu6qH3KGEfQg/+NfdE186d6yrva/TXt0aut8nqkS+sRd/3SbR+LMOOvfscffc9npDtdx0/9bvyVZ27BQw+jhm/OweecevRX9Yvrx+qXLn+Tk8eBvZIu2tEQTcLJvLCbGH5Ky6LagtNC2wlHMsf3KJPcxQfzML6R8XgKp/BcT7icltowdqvAb/D6irBFOXcSXgWTPwpu/90QHGjcTY6TgTmeXMprniKzybt8Tj6Z5MiqjRBziM1JJ4h8V0jhBqt8Rhd4G5rSy+NzNmBstPqNexszaDBPogGu6gRb+VFwogksOOXQ61HWRuVb3vKWYXj2QTi0mHvkp5/gqweO6lePdGX40V4d0aGd9NRY6YaSV7g85if1HOfiBbjC+ceVvVHyr4ihqaMJCV+HeOpQxoqfsfDDywTKgokhQ4hbSOkcCx4CAo+ylc+XzqlDWhOGcHWmmNWf4Nb50i+FSyngV6e2CJvAGGG+OkfxpTPS3Bu3c5OyaMuatnV8E93xBixcHrhm3tQnYOcHrAVKVyv0iWtdBitw8U4bLBgNQE64vDztfjvlb4DQb9GCzqNoPypvUxu3aec4gMeH8e+k/A9b8kIHyYgPzdgEsTuoP71DYRfSYK1OgztZSJ6kHUZLdVyN/jx+xAPtsFBlXJJ/+mP30xVHE5ZxJT7Ri+PaDW9wwniXjhgPLW6NBeqhf3/0R3803mdxkjlv7jDkjBd2le3EenePU386vuYxOUhO0NCkTF/FGTItqvkMSzvODB50ONVFs/aiMac+ONDOqMQXY7mTSlflv/iLv3jcaECb8lw0GifwnfyggZvldSSs0oIr72r3N7UHL+qP8qX14EntND86xSaHjHs78+QOz/DTe6yPfvSjx80R7zXRS/yFi4M/vMoJh1t4rl9Y3Vx9NCLTvxl+Sr7swehQ8Uz33D7p4uZamyPm1/e+973jxMMc55HX+qBGxD86ojw3+3SA3vKdrDAwrVvoo9NLr4zEx3DOfrhqQ/H8GXYbvnE4YDykm8ZTbpaPte7KJy/kLDmXBge5Nk54/cO44fsnTvnBKqOOZNfJu6+quk5uvH/Na14z5gayD844wxBzKHLbbbeN0zz0GXvUQ/458eR37cuvbvR1AiqNrtkAMm7ZBHLLz3jnp8bMSfSzMS89nfmiLg9cuXgIN1rpqrnJDQa3DBjM5id1Vg6O8IbnMH9T+w6DvdHSr4ihick6LyHU8QSN8FrAuFpJoLnnPOc54x0oQkIwcspSigQhoeKXBlaYqz54SpvhCBaYdX71XUxfPerWhuqjnITf46t0dqWlUSJf/rJjhD/yo3+maVPanC+s3lzwc5o8fFenPvFQaAtMO0o+x+43hYTxywMPmgwsFNR1NxOrK8CuIFj8Bltba7f6oiO61v5x+Wv4bfwcB+rbNQ9LD3KdXzpf33H6TjmP6yxO0n7oh35opLte5oNAroPJJzdzWWF1HFXPKHAV/tN+bUI7Hx84pyJONV/xilcMPXai6x1rp4hcMk83TuIYafMpPx00odIrY6PTK9d+8N3CmE6CB8eYY1TaoHIThEGHXkZoC1/00Dtt8OTm8US+MadFNqPWiY8PlXmHpc/Qx4/6tH7txBJOi2zv7Lgib8PJRplJnWxEi3Bloyf6pMfrmd7g8ssLtvRrwY/2aNXm2l8aX7qHHMzyhI/eh/daiTnDVTCnzGCM4/LJpY8G9dMoxujqATfzLfmQBoaDg4xJM9+ir7yZRuGj8tawlzoeH/nagGZPbdF2YbKuXeIMduuPfqvVIpwOcXgDlo8X8Qh+5TsRcaXPiWXvkdEJOpjc6xfz+OzW/FzzcZ0/l92Gr18OrOVAnCODZJrccdI9yTnZFObIrHnEtVEHA4w1rzZJV4ZcgiejXlFzu8TJu4+N+RCluqz53Koz/qvT2O6VjCc84QljviOf5qLoIt/VP4g4+DfL8RxWjl6Eo7BidHSmk9HpBo1XCBjAwuZC7TE+Bj/XS7e1j6+92mmjk54yLK1fzKHRlK/ekzhwlQE/h09S/kaAuWKGZkqhkwg64SII3jNxXC6fQDg5sSvIzYO7zgyHRRrhTsH4CT2cc8cLJ4zBSdu06JnLXSxh0F60oSs6GjDEPeJOASmStlmkOb3AD+U2uZnWteCDl5Yf3+LXHIdHX7haYXCyc25hS7FNuviEJmUNOBYurmg5hXYtyOAkLzrhhk85D6eN5Y+E6V/tiN7iE8g2eEIOHMbD0kNzFI/1HxcM3+6iD+BYlJkc7AS+/vWvH7IAVt+qQ9n6vPLVeS352kJnaxt5JsPa7/e+nGoyCBmZrhNrK3h6rOxxbQ8mXz3CJk+6ZmHg/byf/dmfHYsGeNVvcWs31scKXEuneyZUEy6+h48+5koTh0Md1eN6lBMeHzFhWDqttmusTOW0xQOnuoy7Jml02GTyUy8+bW/MIgfqIAfKg1VWHH/CFX40zWOHuLxZjsQ3ObiuRTe3RxuK59eu8vCzsZMckgX8YST52I2bJvrNWC0dvLI2IsiIGyb6iQGkLCe/eqo3XkrXV9LT5coEc7X6aO6JZu3BE3KmPbVNXBjP8Bcc3fP+JYPT5po4nnvIMh6a/5z+9DVMeMIRX9BAx+QpJz9+B3OYf1K4w8pv069dDpBHMkMGyIx4skmmpJU/x8kn/bfp1Emgd7yN7+CSKeO3NZyTScalAwKvMpBRDm7OZqOP9Liyb86xieLbDDYR6RKc6Jrl2hwEf3UNRNM6onh0zzjoCt3ipKeXjVfSq1caQ9pNG+tVbWzsUze6rFFcXddOemrDU9vCYRwAi2/qg7N65c3jXnTPPtjcur2l3+j+ZqvlEnJFp9QxOqWO0bl20B3pE1jCblfFAiZlIhg55VKEBEE5wkK4pPG56uQrJy8aGvjBEWjplauui+nPbVaPOrVL2BNdfuqEoYkvPlxg55qyaHPtPoqu2jrDhLv24xV61It3BiYGpp0rCxZXKygw1yAC3uBkcnVSYXAy4EhrIAQrDBatDVwGH/EUeaZNGPzW3TsO1MczllkWNuXPsOtwskZG9avyTrRtQAi7DmZTxFXp9FO6sH4Xvh76NT40RpgILd5dmfVZdnpDT50qeQ85GccH4ZM4E6RJkF7auYXrzW9+8zixco0I/02a+Glzx5fwnGA6tUKfJ91TX+MLeA9anFhaMHu8Z+v6q8WI92EYzAxLbczBUdstHLSFrmsjo9JHaBiV3m3hlG3s1ffCtT/a4DtMNpTJgefgyGnHDFP6teprD1ebal/p8go3t0nTl/hYOafYrnK7yuaDN74+TB7JJRh9/apXvWps4vrQnk/125ggb43P4PQfvHierAvrC3WSh2vFxbd4WDzd1CZpybe2BYMXNlDw1ZOL3+CEPZUXxjN4CiuHf3RHGlcd4VzHS9/6Nx4HkhEtJ1eNp2QkmePPm4lgjevGB+N6V2Ot4Rhf5Dy8ZJPOm7eN3155YWQ6xACjTo8wfee6meKk39jxpCc9acw/8qIJnY3zyhpT0KSuo1ztC0bd5jgOnvLnMQhMuqpt9NRY5skpm37HuzlPPhzwC4OJfmFl1ek5zoHfuqM5cNlnjTolX4cmTD4zzNgkpJSGsUWIErgmOp3fDqHmERgOLgM6ZQundPDqg0deQiouL8XiR9dAeIn+qTP6hA0a2lbdfFedXvjCF579SIFBw3F/ynAS0rRvk1OfOtStXotYi9rf/M3fHFcrLDqjBZ36w4BhNwsNBhtXYxmbtaO6+PFV3cLqUFeTbQNAtFVX8a1/YRyoD5QuHG+Lh1m8vNIO84PVh66Mek+CUURfPu/zPm+cYMHVAg6ecOcfhvtaSW+MIO/aRKZN1jZb/GaldO8reteL8cfhW89R7aQP8Bvr7M7isSuyHnE4mnzpkJ8o8X6sBQCjT77yHN0GA6eJnu9Jx20Q+HAP3yaSdigPhq9t+tmjPz1ObXx5z4dmnFb65LuNBeMouMZT9YtzcOEJn4NXWH7hFkuN38FVHnztGkgO/ikfzJx+LYdrkzbM4blN+sK8WN8ki+DxUr4veVsI+iiXVx2cQtiwtImorB1/csUYNccwOL3PaXxXHu76DV5lyIY5IB2Qrm8Oo3Om+UqH0TjTGc+0pXRpyaJ25pLdOV67Z7z4E2/AwoePs1xLVybYcG79LQfiwCxvwp7WTmSHjInTU3JKzui1NOtmc4/fvmQQWh8rn96qwxzCGLNB6WZDr1ikB9FBRj2NBcJOMcHbVPQNDvoCN5h0SX1oAk/2zWfHucqCU3aOwwePuuA0r6kzPVJGOPrBe8KBNvHyo2WOg82pw1ObwjfDB7v1z48DV+zqLDIJFqdDKYsPWLgPTpgsbkyQdlpMdgSCAOh08Jx0guiOdhOtfHFX2Qg6wVEWfuWELd6kKwuH+sAmUGt/VHYR/6HDQp3ia1MOjehTP94YDBjfFozukbtG7BSl9leOH83Cm/LndG3Xbu99+Z0vRqzFp6+OhUf9aMMbxoRFCcPf3XzpeKeeaEWjNIOBdhgMywcjLF24smu6xXO1IXpK3/qHcyCe5Qe55mH5pecHP/tkxZPukZdnPvOZ4yTM4tR1USclTviS3fAnBzO+azVcm/j4QT/ohuuz3/u93ztuAZBrRuBb3/rWAQN2lvWj2k73bIK9+tWvHteQ6WeLBcYk3rrh4dTKeyX0TP6MX330kDPGuQZrzKDbbkQwMtCtDL+w/vdojzGJEWlBwoh2Wu3E1PvWs/6uZQZPOHQe5tDnWcPMtKzz4FJmXV91yOMOyw/uevD1rf6Z22reIyvS8U6crjav8c2pPlRlc0E+npEdfLd5SK4e97jHjWtz5sFkijyArW+FGweuVp6jcebPYf2eDuOZNnHKcsoLz/HDcMJTnZtkd66n/MNwjcq3/25YDiRv+eTFmEsfObosTKasccW95uD2gkMCPyOlLL1trBZ2IOD1Fus372Bam8ETXmXg9HCzjstDR+OFeUcaGPDqkZaT5+HQN+cFc5gPHt7aTU+E0xd1qRP90tRjDFvDwR8d8oKd0+DNwdtc2FhQ3ta/OBy47CeaOjUBT2hqip/IkGfB5X0/k94sXOAJCCWTRyjk33777ePKrYmYQlgo+ZgOQ80Vs4QVvAXXK1/5yvF5eLAWcXZ/vWvFoEpJoulS+NrRlYIWBmijaBbsFona54tfFooUhVHoPRF3zC9EGdSJVx7vX3nv0uDkfR5pnLbjP0X2UQOnF34ewdVYCxJw6gYDNmUVl68OCpuRWX48lV49I7D9d9E4EI/zT4IYLNk6ysnX52DJp51T7ywJ0x0bD2RWv4MjA57k6Cjc10Je/MQH7eK0s7gxgzHmFgDnXTm7zPTB+IIPRzkwTkKdMHkPBn/xtbIm6q/6qq8aH0XzFUB59NAYSb/Aocu7ZMZP71L7DUvjnFNMMPom2tGtPF3Ub9piTHFK6eMIGZbq4cCnxxke8HnklV894pz6yq/u+Ian0sQ5fmFxuEsfge2/wYGMTLxrLNYnZAyv61fA5EaafB8DsgHid459wMpV6fTZXOpDQuYC/e8DH+YddcHHga3vhT318wC4iv5togu9XHni5NWDl8Yy4VkGwQZf85Jj6YXnMvEmX171hCNaim/9LQdwILnIjyvJmjFRnnHfBqKfJGFguolmDiBnySy5c+poQ5Lu+0icjUJybtw3XsDlIcfKKeNZ148O5ZJlY4KxoDEaPmH1K8vnpJ3EyEyPlGscUz6aolPaPJeWPqeBif54sY6DyckDp27tE0aP9NoDtjZVbuufPweOXgWdP75jS8ydRkgoCcGlPIypnI/LSCfICWN5FnGEQVn5DDNlLdLAupfuN+4c81sINinzfVDDCZ5FWILFQA1ndRzlz8J7FNxheYSagwf9hU3u0vicAcKXPbXPCagXup00ZNSlJAP4YHGnvEdb4QYj7Joc41L7nRTDWd1g0KQ/LDhdp7ID5hoWGDwFY+AI/+xXv74NpzQws1vHN8EEr75NLhyH5YfzqPxNeNdp6rm3ONY4L3Y8GueBXppHf9Zv2mGy4DeggqlcsOgD4wkPHML6lQx6P5OekRW65acq4CYb4VNeuVnXL3bbLxc+bckVxo945OaEj5XhofHIuOK9R59LxxMLA/qMN2DwSnlh70O+9rWvXX7sx35sbCLhKbz4jN+uqr785S8f19XhwlNjFRzep3SaynhgWLpuS6fTQTDqhE9a6cYOP4HCaLWBxLjwkYTGnNq6yUc3h3bP7NSD/tycP4flg12nVY6/zgN/mDsq77Ay12p6ba0vtYNMcMnU3Lb6i09+GJBOLxmaDE5X7cia+YEs+j1WMkXunNKbg5trmqeri68cWtCFDv2mLmnBkcOM1GBG5mX8F9+qco6jNXrLP8yf4dYyqgy8M+5NeI7L31Rmm3Z1ciD9Ooq65sRkR5lkgD5Il9aBwzyGygdLh7yz73df/cY8HYU3/aPbcChrfdhHv7xHP+NrjI/umZbSom1u04wDnAfdYGf4wvy5zIxrHY4v0isvnH7NaXNZ6Zvy1mnr+BqH+EzDHD6q7IxnGz6eA+dWBsfDXhSIOjIhF6cwPkDTtR6KY/EmL8FWeRNZhJjAlLELa/K0CBMnIBZidmpdOfXAZSJ1FdUVAw6cydS1UCeMlNcCT51X0mknnvRulIHGItIphR1oJxEUOUUwIDUoxV9xZfDlDW94wzjBtZjglPVoL99C00vhj3rUo8YJlfZLz2iEs7riTX1Ten58W8dLv7d+eLXvKBedh8HAE64Z5rhyc/6m8jOuk4ZnnMqEd52+xqf/yAp4cl9/SYs/6YM8fUau4K1/wYHhpFU3H5wyHnCuXtpBJY8cnXGV2wQWrcp5lLnenXbaKfauJKfNFgSuKLp2qn/wBr88+IXHYLw799KXvnRsiukb/AUDJ+Pvec973jAM9I3+dFrp2rL3Y42V+sF4h+/KqwsOjzA86lanU2c43VBgYHodAa1g5j6/3vvremqfvtP3+dom7DnM6XPzB0PShqN3uWx0OB0xN8B3xx13jA1N1629u2lu9cE3cl596Xa+9MLqJ7PkkFyao6MtmMPo26ZvOXAtceAoXasdxlf6QSeE6YA4pzx9tN712MyRZrx3K8attt/+7d9e3va2tw0j07xh/g6ndSC8NoN8lM7Pi7n94jYK/ZvdUbSWlz+XW4fBRP86bxvfcuAwDlx2QxMhBNViiMJQKruq73//+8/S6CTNzgxHsMHkUgblpZvMnFz6OI2fFoALforr98X8JqeXmBldjMw/+7M/G8pOESmqkwcLsfBWDx+eTekzzL0Jw71JaU326Hf9wf16JyTa6zRJGW3mtAEsPpjQ5Vl8+hy1axV+M8lv78n3yPfAxYi1+HQ11smp68by0OMxIGZQtECQ30AJhzhXuRE5+Ie28oOZ8y80HM5oulA8tTN84VnHS88/Lj+48/EPw3lYerjxAIyHvHDaRQZ8oMZvTJFvL/L7YnH6pm88ZAKO5Ake5fUtP5kxuZnQ+tS/dJObD8T4KnRl6pPj6I7+a9WPT+jHR6eaPpLla3945zo6Xsjj6CbeM9R/9Vd/dXnRi140No3A4B3eGovw87nPfe7QRzrvt8sYAxb9+qB+UCa8+iI9VQ8jkoHgS4KuwTKC6/tR6EBfC9fXx/XZcfnh2/qXnwPJI7lINjZRAc7GQ85PGfiqsTnR3GnO8HoGuYWHDD7xiU9cXvziF493OB/zmMcMg7NFM5kmP/xo4Gdcqgcu8GQ9uOrf+lsOXK8cSO5t9s06QV886UivKNAR47t53JrNh7xe97rXjZsqrWnNEcqC46x76aRXv2wEgWsdoH719hzGZ/nn65Q5apw5X3xb+OufA5fd0CSgs6CagCyWvOPU4swpCZgmvBbClAzM7JSlpBTOD9I6raTEFl8Wxn4uxXVQ12ldPe2FaXT4NP/Xfu3XDiUN57qOFOpCFDKcJ/Wrw2Ah7PGbZ97TlMbQtAOmvXiCF3a9OCe4rsa6WuFExe4Yh4cNTAYqC08Dk3dgXa3QPnj42m4xgKfxQVwePFx0jcgR/+C4lC7ZUEd8m8P122E0HNcO5T0z7nCVdlwdwZ+PH+6TlNFv+lkf4YeHXJAJC0ZXxP2+JUPISZbTe/LutoAJjhypT18lI3B5ZicejGuzyQkDRnlxLt2UhjfoudRyMNN5qcO1Sz3CnDbjpXeatdnPSRh3hPGUb5PLNUUGJmMUT/DUGAWPK8g+qgTWlUYfZrFZwCiws61P9ZV89Skfb20YeRfHNVibasYL8OrmR8SuBAAAIABJREFUe9QBXj/xOTjgqs9G4hH/au8RINusy8wBfUImuDl8GBn6H5y+V85DHswJL3vZy8bppQ0qH7NyFRusfO9ke4XjJ37iJ8bPp/ho3/yTH2St+pMp5eAn5xbbuegtvsmHa+u2HLiWOUAPkvv0TFrjbnOD8ZkzF3gNwmsUDkQap+mPcta05gC387xv7ZsiwvBw4M0X4uCUO0yPNqVvSoO39LXelj4q3/7bcuAYDtxzRXkM8MXIphCUzSNMiSiFyYxPUbqKtlaWhJ2Qy2viFPZBC8aTBbbfDJPG2aV1qsPI9G6isuq2809hLdI4tMCPntlJUyZ/zrsY4U24W1Si08muAauvUka/ui1CtUsbGaPajn7lW/yDxxtXY/HHV8fgM3DJm52y0vCivpGv7fG6/MqJhwechytthit8Ej88wa7xrfspuPw1fOn52qON3BpW3HNv66iuS+XTlfoxWk1YHgYoXzu9N+gKjmvUPpxFHhgl/UCz00l46r/6ujg5lMaA8rEbdTFw+nkbcPQt+GgRvxEcQ96tCL87i1c+7sNpPwPTe5b0lLzJ12/CFgbGIe9Pu94uHR+DcZ3RpgFY8mizyamn61EMS2MXI1Xf4bly8b766wN5Hg4+D7eW/ZG4/XfNcGDuvzm8qQHJRv2fvNBtzsL1Oc95zniFwpdqGZ1//Md/fFZenNS/4AUvGL/FabPSqxbm6mQPXrjE0eIhf+YjYxHZ7sRlE32lKXNcW4Ld+lsOXE4ONJ6q8zgZpQ/k3vhM15RNP+SJexWCntkUdghiDpBubnCoIOy00q0kH7d0RdbGJji6lDGLFjjpnkd++j3zZ6Z5Ds8wm8Jg0bJ1Ww5cCAcuu6GZcKcMiCbAlIwSUhYnmsLBClOajMcmLWmF4fEStN0gHwbqSqnTBD8Z4CTG1YIWxE52vu7rvm4oqzo9HLpyKRY/Wsq7mP4a9zwZd7qLBrRb6DvtsKh1NdiPcpvIDSwzzwxGrkbZfTY4uYarHqea8Cijze2o1R44uDldOWXwRhlxvN/k4tm6TZtg701a9cw4zqdO9B/WBjjhjxdzHdWrruPqO2k+nOGtruPKgtMfwZF3faTfemqHdPi7gsP3jp8TCidxD3rQg4bhSR8YMsprO/weZeHAL/0vjQHkdyTVHx3yypeuzPXm4vfcLu1swpfOQKSbrj5ZSOAffaPXNgDE4cErG2z4qv84eoyfYLtO6+aFhQYDk4HP6SMLmPrJOKgOtMirT6IXXLDqq2+kgQG/ddc3B8gWN/c/WeTkkQMy56aL34K1OemWkHHCNVpyBd7Vvh/5kR8Z7xmDeexjHzs2MMmf8uQaPjIGZwtt9R7nogdcsntcmW3+lgOXgwOzbM7ho+qmA2CN78ZYcfrjpt273vWu8ZqTQwT6Qr/kCzMy3UJiXNrU8esJ5gS4wIBt7JamDF96Oieeuxi6FI4Zb/i3/pYDR3Hgsq8EE1ZECXsoDIOQsnAWsCalYAm2p7iJrLi0jE3vi3lXkyL7cI4JTp5d2XCoy+LaNUK/D8c1AIzIgZGxDld36Zfa10YTt50ttGuLRerTn/70cU3Waaa2oF06eMalL0riwbd927eN3WaDUgNTbajcvLhUHq/AtKBQr3RpLRLmMngQX4/iB5hgg4uW4mt/zq/8DLOmo7xNsOWt/TXsHJ/bPJdbw8x5FxpWV+09H/zKJPsZOtLIDSeMT/pbP5IhsqCMOH1j6Lh27UScEeNKnHf7vLdrowLeDBiTn0kRPgtKJ6Pwo7mnfhGvTRfKl2ulHJ7SvXTIjYrHP/7xY0yTRz/xywYR/tAvacLy0zG665q/66+MfhsADHoLDPqnXPxVhlO+fo5f4vLrA3Hl02F5lYfvRumn+HO9+vr7KKf/9XvjA9nR/9LJgPLypTmlN/f4UJyP5fn5Ewanj1KRQzhcr/X7nF7ZsJnJOPWuMrxccg83nMnjUTSeBOao8tu8LQcuNQfSs/zD6pPvoV98t1t8BM5H3cyjdMhcyrUJaW3KsPS4fWbOlmfOhgd88zmd4viFxdUFRhrdu9jje2PFqHz7b8uBE3DgihiaFriUgOJwJreMTEJMsUxW0vieFkaUiPLxe5rYxP1+pkWz9xkt7NThCT88rgw6IUgR5UlPIWelPQEPLwkIevDB1Tj0G2i0u6tMKbs2a78BylVG7825Iqz9tQ+B2thCtUFIHesFL3xcZcHGFziE1Scc/9cMCD5ch/nrcnMcbbnKixfOn9PW4cpv8pU/Csc6r/i63CbcJ6WjNoYzP5zxsfjaJxf6J2NT/zIGLRK9k+wUf8YJziMtp59NeOTAZo/r134uw8dBbNy4du4nERifOXKY0wYPmUAvfPAnb8Fdr762MsbpnvbrEyfGdrDl6R/8So/40hmebhk4rWTQu8rsJAn/Mi7B6VN9Awf8+o+L3/isDAeeEy9NXP/IKw0eD5df2ZG44V9wG7K2SVcJB47ro2Rl1l/9TqbIRuM6OOHSfJzvu77ru4Yx6T0yHxBicJpfjR3GGu91umXj1J3B6Wo32SXvHNrgO07OZlaCPa5NM/w2vOXApeJAcpt/knrIvg8zvvOd71xcRfdKhXmBzjQWmy+E/UyYzUnrUpuW5gfp5F8Za0HjeHM+3ZK3P//SE2M+XRM2P9g4MsZPr0c17e9YW3nKz59bBbgCpR/A7S3Lzt7OMtCXdUP78Ql/hPnn486tdZfl4GZRKGGc0O2MfjuoY+8Adso/n1ovJ+xlNzQ1ziTGUVrKSJEoDEeRLNwoWcooXRgM5fLMCl8cLgpqkvO1RhNgEx149VJY75V4Nwo+eKMHnhz44vvKvK/k0nvmCVm58FUuXEf5cHFzGXjwgW9RYFDh8MVJJidPWfTz7ZD5/LW4Nod3AE//1OMBx4GbYefwVOwsrMBMazBHlQvmfPzj8B2XP9NYeC4zh6MrOPE5fw4HexIfvvMpez6w6q/v1UNGyKO+FycffA+XXx3kiwsueYDDRMhYYni6qu0aqI2M6lOOLDKI4KtsvrrSqVHJdfxPm7UVH+Z2W7yL46/xTdgCwtjjtNJvGrpRIU15/EzP9aF+0EczTmwEq39y4DIc0FAZ4Wiq39DCwenJlR6cclz9GVx++TOO8rb+1cuBWSfrQ9SWLo386Pf6Vl5hNxi8nuK1Ex+1shn1G7/xG0MeGZ39VvP73ve+5Su+4iuWRz/60UPOyafNEnOvOuCjE+ZqsqwOpzyMVHpAHuGTz9EHT4traTP9A+jgX7Su80ufy0qjP+rTbs+sC8HOaTOe8ksDFw/54vLSI2ni0ks7IHu0L75He3iD2foXjwP1DR5v6qtqmvuMDK51BZ5kUxny5NUtP6Xn9NKX331tnDxXp34ma76/4eaZ6+d0i7ybU9FEL8Bw9EZa8lA6Y3HXOH4wlu8tbgTaiDS2u+a+s/g7a/sM+2Rv2TvtNY07l53dm5dlx6bxLvO0Jh/4UhQYhQ7SdvetnoPkaQpZlb3c0ei83PXO9cWn/PLw9Rxv93VbX5Z/ZtlbDjYIhpG5u78HcJDNyDRrnz6zLKd2he5cSMXe3Yz9W/f7/qBbzuFsfDTeVA//nrTMOZc6fEUMzZSX4lC6JpAUfr8zYta+n5LlN1BTXsrdAOCrj7//+78/TnPAGASUgVPYhOcKg5MakyGFlmcyhKtHmRZ+dYJ6KDlfOVeLOPFwBHtv/NqmLoYlWjzC6Jtd9JYGTnn+YW5dZg13VNlg66Pis6/8Uflga+Ncbh0+io41H9Zlj6t/Db8pflT9m+DXadFwoXgqv8ZbnDzjI7h0QNhDH+QXLw28dPyLrngp7iF34BlL8vz0jZM3Mu+nEPjhrkw05Ye7+PXq4w9etBiwoODwDw+kg9E/Tpv/5E/+ZFzt9xu/rsp698aJpiuzfpYEr/WR8Sge6kvlxfWNcUmdwvDXF9UpnQPvUT8/nQMnLfjgRqGpnDjcXDiD2frXNgf0ef3Pn5283ByWxhB0wukDJa52k2cnnH5MnvHocSvCz/iYh/0EA4PTz2ipJxmElwySZQvx2267bVwZf81rXnN20Q0X+VbG0xin7Jqu6M2XX7tm2DlNmFx7wMDPVVfhZB+8Z8ZXPXzl5GtXNK/1LJzBFZ/rkLZ1944D+Lt2c7/Ja2zTV/ivTOWC1X8e+Y27xc2P0pSx0e9w4z3vec9io8WH86zXyFSyACfdcc3cdXT64wYa4xL+5lXjPby5aCm+72ufteCpe9qCZ08qjfn7duJZ0+eAJTu7jFMHDft6vp8snN5L2ZtMzIOC9yTgKont03rliJnrj0/8+Fn4KApb0x+cUE6gZxiaZ5blTrfGdu5adj22D8zxdy/L3ieWZedTDrpzKne1BS+7oZkixwhKSKlSdMqfwqXEM2xhPlxgKKIFnsWZ0xcfLph3kObBHn5fgLSDakfJe2nyOXg8cKLBRIcuH/eQHqyBQHqDiDhaxKWDvTdOvXB6tANuONFuwe8roZx0/JMnPMMJ59b0VKb02Z/Dld/kg1vDljbXvamsNHw6zoV/DSe9Nqzziq/7QZnD6NpUj7RN6eE/zle2Ns64wjnnH4frsHz4yW64+GREukWeRWDGovQe+JIVZYQzbMA7ZXvgAx84NmNc6fRFVQs+P/LuChBHRumFfsjFXzhvFKet+qBryvjE4aEPnBlH8Ahv8t088Dgttsiw+23sUNZ1Ze/JOvlkfDr19NTX+qfxR38q1/ip3uiZ+7c+qn/ypddX2gAfJz3ZzR8ZB3Izhytf2ta/9jigD8lEcnFYC+QnJ8YL18UZnDZInvCEJ4wrgt7X7OvnFt/m2j/90z8dV2t95f0Rj3jEOLkh63SDfPmAn+8qeF+cUfrGN75xbMA0t6OP3PPPR942wdbGcInTIT5a0gn50jyNsfgSTunFS6M/0uFQhoNTWnVoU+XAyau8dDjWOjcKbP+dFwdmnm4qWD/LC5Zfv9bn+kL6Og7OoYWfknNw4WTfhxltJkrX3/UvXbFus9niaqzNRIcUdAAefa4O47p6koFo2UT/vnV5BvHLsrdvbO7sWFPddM5E3PGzKWRwWU7tLMvpvWXZO03Ob1p2JIyzsZv2Tz2rZNhF5YmQ49aSfPdmGaoVuNJ+tF0pOjDiZMw415/GlXNyt39dVj8erKUGyv3xY9cp5+6y3Lqzu+wZ/0Yz71oW159v2l12Tt20LKPf99d0cWFfps/ZBKVfKf+yG5qzMtdoCmmn1FU9jrLqFOkpuLiylLB0aQ0EBnBXZd/97nePCWuf0ctQargt7OBX3gLZ4OBE86u/+qvPDgjKeCwQ3//+9y+/8iu/MgYS8AYOhqaPHbjuYAFe3eiQ38RYuy7Ub7GqvBNai3p0S3/qU5+6fNmXfdnZCQwv0IyGeFQ7DqsfT8FywfKLj8AR/6prhp/Lh/sIFIPnR+WvcYS/MtpwlKtdYOaya7zr/BnnXG5OP9/wYXg20TLjPqzcDEPuTFDkIN2Q/5KXvGQs3vy0yZyvTnilCSsjzjBysuYjWd7H9BEQaa7zmCjJuo90ZbiqI1zrdpQ+03m9huMhH48sMhjmfq4E31wxtPHlK78WIq4Xxh8ybKwzvgjrEzvhyiiL9/WBrwH7SJCHAcoQ9S4uuMZDfcmho3Gh/tXH6q1ucU8uePFNsMFt/euHA/VzfX6SlpETT/JORs2vDE6bU76R4J00P9fgI2NkmuFpY5f826zyM1uMTqf55rcXv/jFQ+Zc13caxBj1+7/0iPw2flXvSelF4xp2lvl0Yx4LpaU/6suFK3/GAyZ+zPl0uo0mOHPS4YYjPMoJz3DBb/3z40C8PKqUeTM4fVFf1x/5cMgD6yEfTuD9VJiflfPNDPLdGlH/NSf7uSBXzb0m4f1760f6Qt7AkXfjtzg3y0Xho9qwjCuXg8Jlz9HXctOy7J4+MDR3x3uULBNaYGYYh5iuyTKcT5Ptnf2rt6tKxqxw9h84GPZ1adk58N3pPDd9rDBcPVF9dpSb+/kouEuVh7rJpNxn747rzx5jxqnlrru9nrO73LV3erlp59Ry55DFneWW3f3xY+6GZHqfXjnn5vxL1YaT4L3shiaidG4M4Xt8GMOii1L3g+c1ADzFm4UCnEUv3+KOkfeOd7xjKD7DrMnD1zOdXDJALeByH/jAB8ak5sfr1Q0e/n7T7u1vf/swOA0G6FOPfL8l5mM7Fo5PfOITRx6cBo4mxeq4UD+eKN9JrfZprwWnnzxBDzg0xRfx49wm2NKOK1v+SeoJ9kJ9/Z3bRN+mtOD5x+XPsJcqPLdhE033lsZ0Ap5OB8ih9K7kWMiRm7nPhMGQowc/+MHjnStfuFPGgtGJOX0AA5asecigRaV0OtbvRV4q/l3NeOMn3ht/vJeDLxYOjEPjCj46nXRNSv/QZRteTm4++MEPDgPUR7uMOfjpMYZw4C1e4OVcWfZbqPhvN1wd3pvVhzYInHoyQi3e0RSewvWhuCcZgBusONkBNzvp4LnafFj+nL4NXxscqG9PQi359hgHyMxsRJFL75mRP5sgDE7G5k/91E+dPeH0lVrGp9NLhqQNWyf45lK4jDl0yeJd+de+9rXjJMgcbIEuDwwZje5ZJpPr2jLnlZbPGNAGMq+cdsHLZ0j4ar2TWLcOxOki/USnsm0E0UXjJkOCoU3fXYnHI7j5ObijO/0Ew1X/ug2V3frHc+Cw/t6Uju+lz32ib+WRM30kTi7ModZ91pE2TYzLHQLAkyzZjHV4wcB0KMG4dIIJ3+zAk2l1e9QDT/JCHo521nr7cwUD01nXWP7tOeEyb+8ud8veXZaPfdzYvX+yeWZvWW6+xUbzqWXXCedhS8aDg8t7vuS3bxb5v88z88I954ujab4ec/Fgf37c3LoDnm1g9PhY09gIGBxd9hxQQ7LjGwx3LYu+1F+7ZFXerfvm/sF12jtO7yx7d+8st9w0DjdHn5Chc3K9maIrkXpP6b/MFDS4YoxJykREgE08uX2BLnbOoJPehMc3CHhPxBU2eRTXpOenPr7ma75mTBgmj66iGiT8Rph3NX2cQxnKz5B0mmkxiD6DThMQGJMeg9XOrB1XuOtc+SYik9C9ceqD08SmXU5itccJhsVr+WDUyQmvXXnrdPF13qbym8qVti5f+sXytTG3qS70HkXzpjLhy1f+JHDBn68/t2FT2aPoB39cPpiZ/sLk1sToEZZuoiM/dll9dIPc2rQgT9IZLmDAq9cT/cLkz6LKROrmAD2w+NpEY3RsavP1kDa3WdgGmYWH8QPPLC7wCh/6/dr6Cn+9t+bU2MK5x0+i+HCE8ccCl+/qYX2nL40HDNX4q7/0n5sXFi360KLXabQ6LHQsfH25Wr4+VD8aG9fQ3yJIWBs4MPW/+LrNtWedJ77JRfOmvG3atcGB5IEckZniyY00jzHC4prcmX/Nsz6MYk41P9pIZry98pWvHLd06AC59HDknLHpK5xOO92ykGZeVdcsi+CLJ2PF42rx8ukSOUcrPXAi9Qd/8AfjoYM2fuiZMS7YfOXQqZx1R3zgM7Y92m7jznXJL/3SLx1jLv1DBxrACuOjOD7y4eV7tu78OFAfV6p4vvQ5LI7v0sgk3utPD6dv9DmZ9SsGrsaSDTeErCGVIQvKG+uNtd/4jd84rsbaPDGneuDQ3xw5T274cNTf4nO/p1uj4KH/DoxRS799W2XZO3Nq3MAUZVQSpQ/99T8vH/3ILcutt9y6fOLuZfnUT1uWz/ncZbnvrftnZudWWvsVbVhKDgto/63N/XXm3nLm3IeGjjS0DiX+omTcW1VZy8SaqLlP1nn7cePR5pxzqecAqm8fL47KW+k7i9MLmGdOjRybCPpy99Tu8ld/defyD/9w03LnJ5bl5ltPL59yy13L533urcunfao5/VyNV1voihqaMR1T7Agy8Ci83fuUuI6eB2F5FJMyeiz03va2t41yFBte6b7m5ZqZgd+pgp9tYCSGS9zvgzl9MDioS57Jwpdrlf/yL//yMbAwYp2YGmjgZhS7EufOfROG8g1U96ajTapocFWW0a09BiuGgQmLm3knHp/mvBlmzh8IVv+Oy1+Bf1L955t/XH1oD2Zuh3qk96zrPZ94+M+nzPnAkqXD3EnoPwl9TWTkjhzGK3E64j0q71BZ9LhyzfCgD4wh8qUOZehUeoVmtEsvj/yZOC0iyb5FGIOz+k7SnsN4cS2l196ZZrxwuovfeGqBjf/4GX/BCxs76HDjRAsMpyGMTwtc/QinBbCFzh/+4R8O3+mnuAULp4+MR8kZ3PoJDcY1hqd3QPWZTTebDBbANsichDJS1d/4FS1zG+ewOue4sDZt3Y3Bgfp6lgEtJ3flxQkyZezxdXcn7T6AYsHuWq13x8moV1TIHF0g09IsvuH32HB5ylOesjz72c8e123VQdbXdalzThNe01i+dHXSL9cff+3Xfm2sO+ivjTObumgBV7saC9WjrHQwnnSGrqeH2mNTG243ROgbg9uawiYQQ0Vb6Sq6lINTnfgmfetOzoF1X88lN8mC/PpK/8Xv+tW468M+3h22xjPm2vSzLoPPY9PDmG0TxM9/kXFzqjnS+A6/hyyA54Tnfhbnwims/8F4zttls/jpEQbMzrJ8+MNnlre//X9dfud//3+Wu+++33LqlluXL/2fPn/5n7/9i5f/8Qv9Xr1C+wVR2VuA6pa6n3VwWuo9wcVXUhmZ58qcN53nVeDwNdQ+mks7/5Ct+u9osmc6Buc+CRzfunrsm75NnWehC7iePN7X9O4tmdl/v/aOjy/LL/3iHy3v+9/+ZvnQ//fR5eZPuWP59E//yPKC/+Vhy//wBfdfdg+u0p7ThxB+EimXPeGyj2jnmHCurZTK17goPUUz6Ddwy9PRlFa+9AZosNJcg/3d3/3dcZUBfmkWVgYAC2twFtpOchixvgYGxsBhMrDr6Lc1pX3Jl3zJ8vznP38ougWjxZryBg9XfpweoMVkYZEXPVoj/eSCea7965D2weVRJ5zqMWmjMSf9sPpOphxh+mQf3uPcUXUclXccXvn3tnz0b8JzGM/WdIVjnV58E+7y+Bc0WcwIThAmD7WH3JAT9TqpNxH2+6pO1kyC8+QGPXjtgIdfm+e2NREzTOipzRo65FSiuk9A6jUPEm/mhuCTxSkjUL5xgiFPd9NVPK6fLE71T/1QH1h42lyyMIXTYxPBgtg4xlfWpprTTzcd7LC72ufp/XNlPPrHyZG+U5+Fkf5DH+PTosgtEht8rjp6vcBYSV5m2ua2bsPXPwc2yfjcarLkId8cOVXGk9wmb/LBmUNd77bRYWHu6qGP9vmQijL0g+ODjwaya6P19ttvH0bgYx7zmKEjA/jgX/WXVpy/yTEibML4qBmDlwFBVxi4a0cfbdKYd9uck4Y+tNIzN6OsVzJUox1ejjFNX22iMzKNy64FCxuPObjwDM2NGSNj++9YDsTvNeDc/2uZUKbxWB/ivXHV6wyMS2tJfeZ2nHQOjIcc2BD03qV1ozHU3GpchddacdYNdevf+lYemOZUuINHk6cyx8vCgYzzDt7FPMuHnb1l99Sy3HTz7vJf/svHlr/48zuXu++6dbnr9OnlM+7/seUjHz99cJzJ5Dk4nTxXePyMybiOO6VZEbYqzFdvr22eBb2hAgfMP1Gbz3ItC36UOndSfNCf4/3XU8tyhnm2O04zJVn6/6e/uGv5jx/cW/7r3953ufV+y/Jpn/H3y8c+4lWofdzJOlk8ZAg8EaUXG+iyG5pzAygupcMcJ4OvetWrhjKbDPzQLaOPknIUk0Iqwy+MoXZJGZBwiXPuyPt8tHLwmzAs2Az4fmxaebhNZN59UpeJ0ALMrr8yFL16lG8BiYYGhQYD8NLP1ym3dnBqh9MNC1gGsTi6muiU66l8bd+EM5iT+hcDx0nruhRwR9F/VN5My0nh5jKXO0zm6nd1J4NOL4UZMORJW4LLl5b8Rndt5pN9vodukX/vAtqcYfR438rpptMxLp1iqKgjXOG+Vn3t0h68MmaIp6PSLSbxQdiCw+62tlvEMPDiv/bPRhx4rj4Tj2fCxi6L0RakYKW7puW3DC2QbXg5ibHQNWb64Iprt3bhbYTpNw9awHL1q7GE0ckQcP2LIeoUSn9mgGqLxRRY5bjag5Zojm750qqjto2CB//kc3OZOf9Shat3E/7LTcsmGq6GtJPyAVx9v6ZbXvlkhQx4zKGudvcOo5P68vn1D1h65hG26PebnfTs6U9/+pijyZc8ZXrE1Wu+pGczHTbF/OSK90bph7GL3ijDGSdtsjh9tBbgMwbpMx1uHAULL3rRx0D1MEgYl8YBG99OwtBN59BjI8jGj5NOhra5/GlPe9rYDISLjrbG4XO1cURO8C/+oe9adbUB/Ue1I9kA01ijjHEOP6WXJ5+Trr8zLoVt0rna7cvffazNuApGn4AxLrr15hUr71+6WUaWpcOJ5uprvRn90pOx0sBIq61gcoXnMuV9sj8dOsh0EMY/i84H5naXW2/+jGV3718vd378Xy033+c+y8c+vrv808f2ljvvXpZbbtobv8941+m7RrFTp+gD3jlN8wONuzpiVL1/2nnqwNg87qTxk6k9vxQtOTcfKjv4Naza/fljP23zmnsTbw+rP54flh+uw/Inhm8EgX8Yk+Od2HvOfXjqy7IMxTEtDlYzMr2IedPYDNAF+oop9PGP3Wf5xEc/dzlz932XZfnn5dM//VOX3VP7P6HmvdzcuTbt16cN59KCunz+ZTc067QUie8x8FrsGLDB+HkGyk0pDfJgDBjyKmuX3+LKThSjjNJ7TBK+Cuv0BayJgP+VX/mVi48DufJnYSbNgtkAY8CxuNIZ6myig49j/CqHFjSYMDNI5+6Sd287VHl0uTpkxxROE6cJUP1cdeTPNGzDNxYHkoFkj987gnFCGpdf+lx2nUY/wkknTK5dCyWfdIKMMkzoC1zpi3Blw3ut+vGoBY02aps4/TQGWUxKd/pBT+MFGHzMzeGuaBg3AAAgAElEQVQL4ZEyjEMPo5BDi/q9d2v89HTS4n0ztyJsqFlg9+EhePShhXA/zSLNohruDE9GqB17/e7E00aDE1CL8E5fW/RFCx8ujzz0aXdpg+hJFqVXdg6vZQqenuBmfob3ML8yh+Vv08+PAzM/5/CMpf7Rb3TBAt4c5rUVcTqTkSUPHnOdvpcP1vxtw/Wtb33rkNdnPetZQ8+Uk9ecqLwyxir1wQUPQ8JmtKuy5n1lwm1Ms3FjE5ovTt7Jdni1wQNnMikOh7TGPPpkHQIX32YPA0b96EcfXWMwW29Yd3ivz0/DMFqUh4uvbj591A5tzXie+Xu9hg+Tp9pb3/L1RfD6fu4X/VM+Hsoz5pGFX//1Xx+3c6zr9In0+hI+N4KsIx2C2HDzepV1n36AB16uuoVLm9PnfOHi+QPJ6t9Refug6rY2dUX29L4xuLezf7rIZyM6qdzZWT7ncz5vud+n3rJ89MP3X/7pH88sf/mX/7h85GN3Lrs3Lctdpx3OnPZLGbY2hkG0d5oRubuc2j341sgew908M2zQA0rPWrMryi9WdH+9Ejb9eNC4koa/P3Wcmz/KnPk3h8u/uP49GLMR9aDwYJ67J8D4VczB33M/bXrTuCu750NLfqLmzB3Lzqlbl0/csbP8xX/6x+Xjd/zLZWf5zOX0mbuXz/3Xn798yn1uXcZvo44NgnseKODbpW//PVu0KXbZDU1E1PAGBMpp19xOp0WbwdzL135Ty8AB3iDdBCIfAw3CjMOXvvSlZ7/OCKadyeANDJwJxLUV12jtZsJpx9Lk4jSzQQLuJkB1odMizb19g5V6XTXz/mYdmb+JySdJUz6nvWh20mrwk2fhZyJU99ZtOXAUB8jPLE9g1/Gjys954eKTQQYHY4rB4gM4Fozev5Kf/syT8IzrWgzHN20rXDuMEU5KjAvyxBl/Fih4IM4/yuHbvXVwGMecOhrLopXx6STFWGdTzk69UxeLbeOZTQIGqL4Eh164ggXHSYfbyaox1KKYMer1BG21w88INYZqPxy1K1qKx8Pic9vnNGH15pQrP1+e9PLm9Mpt/auHA/pHX7ky6/qquPnVXGcuFqcv5ticMBnik0fGJthnPOMZY83AIIMDTPM9WLLDmAP/S7/0S0Peybj6wdowYeQ5obJRZlPa+KacfHSgRzi6KyvOrdPRQv/c/ABrw9sawdd1vW7gRNWczoBk2Bg7tMmm+pOf/OTxDqdyOe1RPydcvWAKB8uPnjntegjPPKk92tr4IGzzQNzTmi3eyZfmVQNy58NPxj2n2t36iHc2GPzs3UMe8pBx3du61DhnvAvmuDE9Gi+9f2BoDmPz7mWH5ej9zJ1lfFGWkUJ87v85918+5T4fXXZO3XfZPX3T8nd/9/fLX/3nu5Z//siy/Iv73jyM1DM7p/fN1r27x1drd8dV3DMH7wo6jzv4OZNhU5HJfaP0IsxeB2w6J/cz3872/Y5xvvezxxuOB1bvOQr0z5Vzm+k/Rw+Gdr/Z/Gjy2vd39pxqHvz8jBPbM36CZv9CrYPN0ztnlk+cWZa/+a/L8td/+8/L7ql/s5ze8bGgf1r+7ef/t8un3u/m5aZT5zZbZj7M4XO0XP7QZTc0NbzGU9gmGoO0dygtgEwUFm+MLIsa8QSuwQOrhE0O7swbaMIrfT0wS1MfY9ZiWdijzDy5wKtseep1FeY973nPWKiBNzHZtZxPFJQDGw3n05W1rTJ4wrliY1KSb0fNbtrc/uC3/pYDOED2kqW1HK7jJ+EYXJ5kjk93LKAYJ3bn3SZgwDj54ugNV9kLqXcguIr+1RbtF9ZGYb7FokUkZyxibDH6uBa8ylxK13hhHIvf6kYjw7BxQ55FeieeDFCLb/3nWl/Gp9cQ9K9TGXg84IzH4BobLb6Mz/reKwfCxkRjrDHS0+knQ5XDi2gsLg2tnLbEL2lgZ5mqjPSeUfAAd+G1P9e5ztvGLw8H9CMDy0f16E06lG/e1fdkYN33ZFu+MUd5RsILX/jCs1dP61/lOCdWb3rTm8YHiMhszgax3/B0DdKcyoiweZuhC0/yFi70SBOPrvChK5qVLQ4eXqdgHl+Btr7xNV2/v8jgsWZx6mnDjsH58Ic/fHnSk540DG91ai9dpV/Vbz3Qxnltjhb+prQ5/1oP1754jt85PKsP9BMY/P2d3/md8d4lQ1OcDLWuwldjU7fg3HozZpnnjGlwcOCE4U8uqvfK+MM0GQYfo29nGCbWjfsnZOPNyzOnl53d3eWBX3D/5TM/+z8vf/7ndyynbv5vljvvvGX5v/+v08uHPnR6+cx/f2rZ27l5GYeYOwxLJbVzWfa0efzKo+PRfSNu30DS4n2+XGrTbvB/fBxnv779Pojj++uTYmt/lpV13pWJn7N9ztW//5Lr6DVNHNdrfXRpj705btDu7Ny6nD6zs/z+7/318o//cNdyx50fW3Zv2lv2dv92+aL/8EXLp33GqWX31L7Rmryew391hC67oVmzMaTBgECIf/M3f/Pylre8ZSiznXeD8cMe9rARz/hLyRtUxA02FncGg4RLfoO+tNLVI105acrkypsHFe9U+DS7wYozaXzTN33TOMUx4Csz46mecB7nK8/lC8Nh19eJAzq1xZVfA+L54j+u/m3+9cWBiy0fa3x2eH0E4b3vfe9YKLkS5n0kJwPpUro1y/S1yuXar20WhtrmEXY91fU3ixdjSh+K0G4wDLQWz5ey/eri0CiMZvQ0zlU3utBjAeUBJ834oj0MS+OudlngMga8Z+ZkyPVbj0WxdinL8ASXk2aMgrvrtwxdfGGAtklhgS8OxhiqnPotzNGPJm2R7hHnz07anL7On2FPGoaPuxi4TlrnjQSHr/qYTwaSN31vozn/jjvuGGypP/jkgdyRafLpdFC6L9IyEpr/pfkCvccHs9RBvp1YPvShDx1Gpg8TufVEF+TBS+7SHfT1wCesXj43y2b9V15x5TzhpBPotBHF6HSrisHpg0SMXN+NYADRN1eD6Yw6m/PhATfTUV3Xq49/uTV/6zPpyUVhNzK8/2uj3jrKuGXjzFgVHvw0l5m3bDo44RYnF2Rx7ZRLFvS/sL64km6cMo5zSDcs941NRuf+b1vuLrs7ZHZ3+YL//tblX/3bu5f/84N/v5y+gxl58/InH/yH5c//339cHvBvPmu59ead5Zabb9r/CQ3j33J6OX3Gxc39Gg7OMw9MSy3et4jmL9ReMj7c453M5GH/ncfxsaLxUyD3nBvQUn8Naic5WtOZPKzTTx6PpqNKfDJ9QQ+ZGvRKIWMeBubOsnfwquadp08tH/7wsvzmb/zpcted913uuOsjy2d+9t5y06d9ZPnvHriz3Oe++7K5b8qco8dwNfOhOq+Ef8UNzcHeg4WGHT+LEYMtZX77298+rrfYKTcwmBQSjAZcvnT5wfDLj9E6VDq8nHBpYKRLKx2MF/vtnv7iL/7iWFS5VuET5f3QtPLcEJaDgajwyDjPf+FDu6/y9VVbk6irHO1knifaLfiWAxfEgXQtuRS3APJzKSZkk7f3W7yH9OAHP3joUIaVRdH1IK9z2zFR3BihnYyuTiYsTmxC+aqkfLwCY1yJj3MnbEqb888njCb4ZpzGEG5ekIkHM7cLLKPPo185bbDwnw1Pi3bv5RoXjdEZn9IYB8ZhxmeGArzR1smn01XGp7HUFWynnp34tNDDNw7vPPBmoEhft3UAH/Ov9h4DNrKj+SSwW5iTc0C/Mbi8k/iIRzxiyAmZIk8ZWWRKmNw5aU9+ySNZ0Dc9dE8+w8z3EqT7aJDfuHZ6JU+ddPKRj3zkeN+OvJEluLj0BJy06isdTPJWveKzm+Ng4En2wZFfTprTSeMnmWdsMoitc5TRdusNJ7CveMUrBq8ywI2lynfyih/qmuueabrWw9qWW7dRHl7gmfGmzSob874a63UOBwTGKHIEThmPq8347xacDQdX/407XZtWJzh19lRWnrSrjfeMyX3nXc19O3B8ZIahubuz3Od+y/LAL/qM5f3/x18ud/7NPy9n9m5e/vIvPrr8we/93fJF//5+y7/7d7cuZ/Z2l1M7N2ngsrf3CceZk2zty/s9pP6gnoOKL6GXHOSf6x8GsL/9nwLZJyFZqQ/nvjuMyMocln98+jnaNsEyHvfdvo+mc85PnpxZXJ9d9m7C9v1W7e6MK7N3+cDP7rL89m9/aPmPf2Kj5HOXm265a/n4Jz60fNWD/+XyL+5/y3jXFs4zY21SXedquBpCV8zQ1PhZGMRNQt6beO1rXzsG1L7exgA1WLcAUY6yc/nCDQIJjjLyxee6xD1NRAYtrgFJ2OLJjqN3POzsmyDsfN12223jI0Vg4AxvdBQfCE/4T5nZOSHxojr6tMF1Du9ANaCu4eey2/CWAzMHLkQe5/LCcHjIuEWaydmpJkPL6YJ3XpxselcPHD3ypIdrfNdaPB7SPzrJANM+Cxs3HYwfxi7v9jipA9941ZhyOXihDvXWV/qr8Q/P6xNw0VNYmcoFa7x1tdATvPa7cmsTbDZCLY7JgGu3Nh+MYWA4/FGGrDAqOHQ5rWF42rzw/ifj0wKcAcrvZ1fUfzGc9h3mat9h+dv0i8MBhpOvweN3emRjomvcZEq869yulJIZDxlzZVYeOWd0+dCOa5CPetSjhj6as53AS7O54f3x7/iO7xgbYWSMLJI9Dg1kAq50pXS+PDrDzWWSFfnJ1Jw2h5Wf1xetOWzo+MgM2fZb369+9avPvo7gnVJte+5znzuMokHAAb1whb/069HfxFftrE/qL2OKMdgc5Fqy6//mpa4Yh8dGhEMCRqaPTBpbjD3G9GDCz8dj6T3iVx3fD74yO04Wh7FpQ+NgjNtbltN37y0+Hnvqpp3ly7/yAcvv/cHfLn//4X9a7vzYZy133nHf5fd+5y+W//BFtyyf/VkPWO57n2XZudnHZ86MdwS983fwRaFhu/7/7L0JtGVXWe/7X2vvfbpqk1QaUulDEkJCCE2AKH1jpJULKL4nKvYtQ1HUoQ6v7+K949ngs33q0GGDXq4NShMCcgVDNBDgSSeBhPQJpKsklaSqTtU5ZzdrvfH75vrvPc/OOacqlapKVWXPqn3mXLOf32z/8/vmnMM2RvTBZUQfJTd0P8AG09x1hJ7qhn65HFTZr+vvQGXFaa8YX2RhlXklAOZKREr5jngDZHYZYFRX3OjL+UwklWv1qoH2dEs9cL90+fuu147tm9Xvrlchbste0Mte/hxtOXYuzuHWsccQlTNsu6ktLKfRimU4BJaHHGh64GWgwIzOQE+HZ+Jhp5NdPhYpDCLs9rHzxKIEReX4R3gaF3F4ALcZnZ8bSWqcabGMndM2jfGLIi8Ay/e+9736y7/8y1g0kTaD1E/91E8Nb5R0np2nXI+IHuUf55NgvNXJog3Fwp6Jkjyw8KOc5DXvVI8yqYn3JwgF3Kas70+bIazD0eZRcAXgYHJhF30W8S/MnC9yn6St4kb7PZKVyw4d+LHQgw4sfFnkwn3BDwtHzm17zLFu+lk/GLQgfecPs/PsunCaHuNy/3ZDdzjisl+7uzzUq8Eh/lCkg7gaYzZn8NARUzOXirGMxT8gAbAAFwKFDlechaHzDxABIJjrCV0BoHAdWJQjesgikW82/8izy+n8R+Rjf5zXMevhJ+5rhR96nBgeEwVcX9CbvkR7Yu5nowZld+Y5ACdtBK6n2xQgk3UB31zoQtthU5jNadoZbY6wtNHv/u7vjvUEYpGkkyvS91xK2yZdt4Hc7HbvvOGH9uYw2GNnRVgUOj/88WPMIFwOOvEH6KGNs7HyW7/1WyHqSbk/+MEPRv5+/dd/PW54hkaEJy2n57Sc9tGmm4YuF+WHjpSfC5Q4hwv3kgsk2dxis4I6JRz1zQYW3Gy4lwBNg0u4l7gTj2nqtExT05i0czfb25/z9njo0eoStkhnKKPtpY0RMFhZpouBaPpnnLleF150jG6++Q51u714U/OO23bpiiuu08knz+pZzzop3t0sOkihtDVoRHDL5irUaNUNZiGZ4CTupdAApjheuYYeDMkmcuPXiHYoNRACstTCENWO6iDuZU3nSMM/N9O2qLDGP7TgjVB01vcIA/NLQI7zp2HblGvF4tDfIsQqnrK+v2L4sCRfKXxUV02Okl0R8w59OhpapFQFN1Na6ra0Z0H6m7/+sq778ryq3tmqe21Nd2pd8pxz9Mynn6h1s610kVAqVZzVTW1zNE6snq9D57J89D0E6TLootxY0N2RcWN3D7l5xGK4gAKxVW6f5cZVBlsUgw1+CcfAMj6J2A13p5OInwaNcbuItBlQSBOg92d/9mcxcQHwyM/b3/724OJ4oiAMgxTxopMmOu6O3/GiO33bUQbbMZkitoYdEylAm3ygmIh4Mw/3nFaOJ9cdX243MT+xKbCvbWI1f9i7PdPGUXAGeMKDDSCkDljsIbL02te+NhZF7gemvNutv91f+Hbcq6XvMI+3Tj75kXfGHHbPr7rqqrADGMHh5e1SyrESzcj/wSpjHq/N+0JX+83zRjjs7eZyO768HuyHdgHogw4cfcAv4yBcGRb+bNwBDgAMmAGXcDwRFUS8DaDAGEg4dLgRhGM8RBE/QISfb/UEiLI4Z9MDLjIAlCdXABjMB15wus2ulG/sxsvlMtne33l4u2G3kjv2tBOU0yfMan7D4z78cbqPNZ59SOqAeHE+87LnZtMGWuHXbphpPwAC2hRAzAo32ghti3GH+RKAhgQQcyZx0S4Qz2WD1m920pZMP+Iibb7R83zi5m+b82/boaPsZh074s3L4nRJi3K5vHzzo+9wPwU6ZfnUpz4V9pSJYzO/9mu/Frfr27/DExfK35QRuzwv4eEA/nG59iXK3C95JP8om3HPaYOb7fBrM+Xix2YVdwNwAR3jLxsLjB0uL32ecYE1JNxigCXnYpG0Yf0EbZwHp0tYhyf93Lwv3/h5vFRAl2X4h48G1WmgsgVXjFtkO9q8saVXvOxMXX/tfdqxfYfKwTGqB5v0xS/s0t/8z5u1uzuli595rDZsKNQq25oqBqoKznmWKrkdNcUcVw2RRvMyZHORanpW5RHAsiEMGAq1kj4I0JrcjS3TsUyux0n1MRj01KbtFLWqQZ9GEm2jzQU4zBGtFMkAyFW0Qgy4qgbqlJXKgtusB6oHcAunpTJOs6pXVAE/sW1HeVIZm5xE2pHnoK9zzsc4xLZbCum/2CYX2vwY0GyuWErlAyjOaIGnjGYKDWppvksxCt18W6ErLv+qPvqRe7Xr4fWqu5Rwh47duFvf/Z3n6YyTpjRd1Ao+aMl8k1KtleZN6GmajnN/nc9DpR9yoJl3ZJute+D8wR/8QV199dUxoTCZ/PVf/7Xe+c53xiDg8xUGmB5Y0bHLBxOI6Lhzc27nAcc6O2RwM9ktxc6cVhbSTABwaRgoUSxy4GKwu45ffsTtgT88rfDHiyCc8O+wfP/VX/1V3GLJYonJ9C1veUvs5NuvB8oVop1YTSiwjAJ5O1/msI8ftMtcuW1jD5cAsTQuAqKdcvHGFVdcEQs8/GHn9N2+/W19PP48rcPNnC98WPBwGQm76JSB/o/IP4tiL/bs34uqg10e09TpjH/b3vpq7uP2fPNzXY27E5/d8ZP7ZwyDC2nRV9xoFwBOgCTcT3NA4XayaET0zU8PwBWFftAUoMoP2pMO4zyLR4Ali0vACDpcDIAGAIOnr9BJf5yz7jE6Lw92ri/iJx2+83KZfrmOOz+Ux+c83tzvE9EMLUwfyj9Om5xm9mc7vnP/tB/qEgAG95tNWYCH65ONDo63cIMr7cD15/7ouBx/Xh92WymP9pf7WcvObtYJx8/lw8xagjJQHr65h4Fy/eqv/mpcZkNYNtpp53A2AaJsfLusxJXH52/iOpiKdPaWBnlE2Z917AhPn87rwGVyGI+jcCm5A4ANTY4qcMM3426+hiIe6hrOJUwBgCUgExF86IVy/OQjz1ueh/B4BP1ZXsuMPwnIG+IIsMkbm81NtOc/ZZMu+5bzdfcdX9Httz2kQX+95nefoE99Zkn3PXytvumFT9Ilz+HIwnpt3lQIcFBURTyVUoKV6sBpisc4irbqBsksXyXsOwEJR+4c3uVxWsQEmOx3W6paDSeygltNkQgFkoKDXWlQ9VSUreBf9gfUN/iT/gZHEz5mEkvtVYW6tdQNbm+L4CoHhVpNJmgfj+g+XNCTUmuuR8rLSF9oHHPrIewjrEvWMJ5dZmiqlpZ6Kc2FJWlxIN15n/TFL92vKz/2dX36mnv0wL0dtappTbd3a3Zml17xirP17Gdu0HEbC7XLnuCKppuHSYvykh+AMybnfCxzh/jzkANNl48K9SBpO3TsEFNF5AGuJhPL+9///hhAXv3qV4dXFjCE92CEZWogowrN49wXs/PDIgdRDAYj4mcyYCJjIQ3oZIDDHsVZE85OspAhTyxOUMS1lsrzitmTBzdY/vmf/3mkTfos5l/zmteEO/4YFA2m95bGWulP3CYU2B8K0DfdZ1nYM7GzY4zoLBtC9FP6Lf0C5UncbZWwmP1NG7ef/cnPoQjj8jrfgCQ2wQCajA1w2RAjhhaMC5QnD0N/PdzLeCDo6DpdKy78MIYCCPnx1AQKusGZ4nweorWAT0Al33A94YD6jB5gFI4nYViE8sOdtsSPhTtxw/k099NnPuF8wvXkhxnOPOM2cbltUlcui3XymJv9TZi8rrH3N3mxIuwToQ24vI9FN/0ch+lu3f2LdQG3ivKECXM27tT393//94e4LHWOWq0+Hf+h1imfxwnS5ps+sbi4GGV48YtfHM+2/MzP/EwAK7i3XAzIOuPHf/zHo31TJtOBdsa6Ax0amE6Hulzj6ZEP1yW6+wN5dd49NvKNmb6IGTF8n39n7cUP7iVjr8tLnGwyIVXD2Xhu8oWTCZ2IB5WnRbzO0+FGq3HaPervYAEy3rDu9I9YahVcJlPUarfqOIP5gudv1fb7ar3vn27U17/R16DerJ075/TFz+/SHV+/X5+5pquTTuxoaronYFu7gLNYx9FNYkzirQmVxfMbuK693F2zOHU9iPhT3EQEBzU9p8IFOZ12qcWFPWq3+5qZK3XCCet01tkn6oyzNuu0raWm2i3NcM6R+mXurQq1KgUHtNeDq8smTqnFxZa2by912x17dPNt23XXtoc1v7ur/lKhuh+PiySABjxbtn6v44Ke5DhWUGM45oExJxc6Ucpf6bmS0RelrVQMmLdaWljqa36p1mJvne74Rle33rJDu3fPqoTDPDfQ7l236lte/ix9+3efpvXHttWrF9WGL0t+IyEywZyUWUWLWCVzeUYOsvlxA5rj5XLlMjhgftvb3hbiEVwGwOKCCYWBhN0qBg1+LDg8gHgAGo93b98efPCHmYUKA7/jYwJgUvNgiR/SxI5deSYC7Bw+n0TytD3oYkd4FHbEQ5nRf/u3fzsGVNImDzzizI48isETP04rLCd/JhQ4BBSgzdFW+dFWreiPb37zm0O0i34Cd5Mz1TxdwC497Zz+kIfJ229udpyHs05ZANVIPACIKBc752984xvjHCH0MXBh4UQfdl8/nMu1L3l7LHUFXfLFHXH5hxuKc5gAP8Y7uwHkEbU15xPgyYYGtPclMQBRvpkLiAudb/wRD3bUExsCcDvZFASEAErQAZ1wpEkX3eCT+iM8YdHJPwozinid99zOfmznb4dBX03lYVbzc7Tbmwam7Xh5PaawufAnf/InsUagX7JZ+z3f8z1xLhMAgqLO6I/E6fY3Ht/B+Ca98fy7XKTnNuV1hvNJGPzBleONUJ5u4fZcOPvcpguYQoKKsjq+fHzJzQejXPsaJ+XIfw7nPKO7rOheM7GZxCYeXEs2+3mahH6OIgx9EqkR5hc2NDl3yY8NK/q3y49fzMTtfkscfFs5L/4+IvUYiigTY5PLNnrzMrX5lmrESFuJ33nik1p67etOUa9f6QOX36Vb7tgpDdaHKO29dxa6785Sg2opeI1liJ4Sd/oF+QCBwTltxRuPFn0lK+Tg0ejEW6qf0gqkVqrgTY+61eil2q1K/V5f0zN9dWa6mlu3XVtOvFdnP3mzLn76Jr3qW07R1hOnND1dqkaiMTIABxMAXIqnQXbtLvT5Lz6sq666Qzd+bafuu6ev+7f1tLibN0RnNFBnSD0MwYGkDbtRBHKj3EHwBnMmc3jBb/bpYOjDOBpL/OV2ZdHXdEdaWlxU2ZqRymktdBdUtFrqdI5XWXLT7MMqpub1wlecou/6oTN09gUdcfVFXfdVFXCtgXGjddnh2LYfV6AJQTzg5JXDQAxX801vepP++I//OAYi3pmC2/dLv/RLMdAy6HgwMWEdl/U8zrXMDo8fbnj9lV/5ldhNJx8eqDyIMSiiCMNChcHfE4ftw8Maf5w/FlJMhJQFESC4JJj5veIVr4g3vwC+Tps0MaPneV4jqYnThAL7TQHaGG0VZTPftEH6AQt3Fj6f+MQn4uwMZ6QQn+VWWsTfUfQf/LvNY4fZ8aAfzopy0x8pLwshnk743Oc+F30esIK4Gzvq+LNfxgPKRRjMT3Rl2qCjPJ6ZLtCKduJxlG/8slkBEAQEpkVTEUDSZz0BoABKNvxYkCJ+Sx0BQgCocDvZnCM9wnCBDJwR5wcxReoQ7iY/AApjOmJ4/ACeiGLSzhmHyRc/FHHk5bC99bxs9m+71XTCmkbjfsbjHXc/Wr7Hy+9yW6eczJvcoYBIJRsLhHnDG96g7/3e7422gl/mVdqMw6GPx30waUZaTjtPB3t+tEuAJmMEZtoX9uQZxQ3373jHO/RzP/dz0b5p5+9617tiox0pEsak8f6Sp/N4mMfLS3mscvpjptzUEZIMAErevUQHZHJ+mw180wJ/9E/GWdZnbO5xZwdvo+KGIq08XqdrN3/jh36b581uR54OGEqioUP4wvDUTKmIuPJrM4fF+IpESalTTmvpda/fqpmNs7r8w7fpa9dvU14Pq7cAACAASURBVHdhWkW9mRsYVBYbgyvWr3pSyRlPfoMQQJU6Us0Ff1OpfXNLbcG4SCUwt6+sk6eKC4oyHaBZBdBET20lOLABNBOwQwy21mzIwi4tLGrH7p26c9sufe2me/WV6+Z12+0P6b982/m64Lw5bZhrqbs0r6kOfamjpW6pu+6X/uUT39BHPnK7vnbjvHY9NJCWpjWj41RW69Uv2xq0isgbbYP8BwnDkAoTbcVIkv4bDSX7m7XzvA05SG6HOfVwTNTeQL2lrlRvVLueU6kptVucSZ7XQPMqOzt17HELeuGLz9a3v/FcXXTxrGbaUqvshmizebHkcZQz9zt0/8ZzcWi/H1egSVHHOzzflqtHDIarqwGZLGK5uhyxPA7Oc26BQYbGwYDE4OGBySQcj9v2a+kskuGaoryQIA0U8Tk9LyadLmnj5oEP/w4XgbM/zhc6EwacIC4BYDGEQvyDywxY4HihyuTKxEScDp9FOTFOKHBQKEB7y9sc7Zw26XZJW+V2R8S+OTvD5S7vfve7YwOGZ4ncT1hYoGjDKOI5nNux+67zCJcMETbEg+EwAFLYVeeWbHbZ8UcY+jNjAOXGbPso9BP4D+Ok2xJkMF0xu41gdluzf+xoO/bP3MCiHIDoOsIvYyeSL4BNQKa5nxa5NScUe7jvhKUeWejSZomfH/WK6C2i4f6RFmaL3AI+AaT4zfNJvROHy+myUIZ9VfsTZl/jPhz8uR73lhfTcdwf9txwzYYP9YfiPUo2trgzwfVBm8GMf362x3yolNOiTnPlsRA7t338MF6gDEBZ57D2+Yu/+Itos5/97GfjvgreDUUCgDE0L9fj2XbyMmL2PAENMOfjPWsZJEMoG5f6YEY8lv5L2aEDdOFMKoCSYwlwLTGj48d0y2kMLaxMC7tjn9vl+XWYI01PPLeARY/MepynLNXt9VW2W2oXtZZ6bMq0NDXV0ZlnT+k160/SCSe39elP3aP//Pz9uvPr27S4Z6eqalbt1rRarVp9LQbYrANQwi2dluqZuFinZA6vuwGd6FYBy9bQAzoCNmP8jxpRXFxDlxyisgQwE2L1pgBAtEqbM+2OOtqi3buWdNutte688x7dfU9fb33L0/S8Z89pNm6Fr+MG3Xvukd77gVv0vg/foZtv7akNh7Bdq1paDBHglrrq17tVFX0NRk2nAZIm6QjAYZO3J/tY3rttmxVpZLXMFMUOqg00PTutpT2LKqpSM9Ntdavt2rypr6c/42Q979IZveRlZ+j00zuaA+f3dqvTAbEP1Co7Krlpt7nQKCXgMQ7d5mVJH/KPxx1orlRiBgEGY0Afu3o//dM/HYMQO9d/8Ad/EAsBbhVDzInBhYHJg8hK8T1aOw9CDI6YDWgx5+lg9oRGGuPuNErscmU/5Jt4ufwCMRl0vlFMmnB0UcTPoLpSAw8Pkz8TChxECtDuaIPo44sa2jIbPiwEuLSKvsmGEOJemOEQcRso4AC/XkiRXS888sXBQSzGPkft/mqdgJwZQqSLjS6ADG5sRgGwWfhQFtOGvupxw4uhfU78CeAxH8ego+mc20OGcXvc7R9a53TGP4tS5gO4HfijDuB2sXgFZAI+mT8wU4fobIzACQV8WvSWuqYNw1Vxm2dcZjMBDgqAE+4K4JOfuZ7mggI+LTZOPoiDvHijcF+q2OHsl+8nmnKZx9sF9cKFedQh7QDA/yM/8iMhQgndPVZBL8YbQInbzuNFw5XSp03RLsgveczLi5kxkzb+wz/8wzGewr3FLwCb8ZaL2CgvyjQinM2HsqzO+3iargvqiXzRB+FcIhHCHAHIZN2DPzMX8AvHls0D3rzEzM379C/c8OsyG5BiDy1RHhfiY5U/q+V3Fe9HiHUzRnCIEtAG4ONtRW6MBXSWhVqAxZL1ZBofTzq+rctetkUXPWWTbnz+8brtlh26+66BHnigpz7Ii4t4NK26RMQU8VAkdZDZ5NdRq67iEp2iHvHoHhWxilqDgoc+yKyhCIiPQ4bUcy/EaqemO+p1a227d1EPP9jVzoekwYLUqjdqcXFK/37NTnW7X9DM9NN1ycUbgvu57R7pn973Vb33H+/QHffMqa9j413R2c5uHXt8TydtbOvkLevUmmtrsbWgqiAXiW7WRyBtBNbCLQo5Eq0d2aXSGzOvNWpHFTUeBoNaU1Mzqnq12mVLmzfOavPGjs44fUpPu5BjHVM66aQ0J06rVo8zt33yOqVSnYaTmafm/Fp/VLVyUDy7dg9K5PsbqQdMdC4AYkD6vd/7vdh95lbYP/zDP4yFBRwTTyQezB2WtHPzo80LAxdxMog5LtvxjZvT9DeD3FqK/KDQiYvFzu/+7u/GDq3T4cwbC1gW8M6/01or7onbhAIHmgK0UbdBt908DdolbZ6FN7c8cikHCyG4S9zSzCKQZ4EQfWRhhX/ipK3zWynOPP5DbXZ+ct0gEy4tiyMUnBM4mWx2uTzYUz4r4oA2jsv2R6u+L+XM6QMdoJ0VbsRBu7AZN+wczrrDecz0N/7tBzfGUDjubHYQD/4AlIjQwqE24MxBaA4+4Zgh1siCljAAUrgvxEXdAm5p+yyCOfuJmTbvc6DYw/2E++R8ubz7qpPWE0mtVV5o+L73vS/ACnWC3+/4ju+I5794CoU6oX4BYHk8mPm5vTwe9CTvzhP5wJy3WwCUAafzShguBOQSICRGaLNsjPC+9yWXXBKbHPghHvTHo3wu02o0RWKAcZN1G7q5mGy8UF/kHZ0NHM5bIrEGwOSSHzbzKBd1ik6d5+XMy4sZN+hos/OU5xE/qNzO/o48nbJ4zvE4gSgrBYT7yN0evCsZBdY0x7SqRanqql3WahdtrZua1sYnt3TOmSdoz/yJemB7FZfkLHV76oH1ODLJUyDBqaQN03ZbIZLLTa0d+lVw5R499QB3gxC7JYMkRD4BUABNQHFfVc3Rh7Z41WTHQ3t099cX9fnPLurzn7lLu/YsqKv1Wui29ZnP3aWT3nerNm06VyedOKsrPnKbPvCBm3T3Xby1fJxU79HM7C5d8NQNuvTZJ+nCszbqSVs2a2qdNGj34tGS4e2wJqVpO07iRM5hgd2msHARho62XGaR/EW1xDxImwU0lpoqS22Ym9IJW6RNG6UO1Ug99pZUIimFyHk5q7o3UFF2mPCSPDL0auohsj/6E/1iLPlD/nnYAU1XGjqDEAvUH/iBH4jd57/9278NO26bY4eZCYUBid0wD7boKAYvx4HOz4ML5rUUYRms8I/ZinB8Y8/P8dod3Wkw4OFOPOTJgx/2DJicL4LrwwKWOLFj8kAshsXJavETz0RNKHCoKOA27jZPum6bNrNAQqwQUXfOwHEVPWCTS3NYjMOhZ9HgvuS+QXj3DceFTpoHUnlscLweI9zH87Tshl9AJpwEHoNHhJ8FD+Lsr3zlK/Xt3/7tMQY5bsdl2oz3U6edp/VEN0OTnC7Qzsr2e7Ozf+YJ/PKD9oSnbvh2OrQ/AAlcR0Agb8GiAJNwMeF+wjEzl5NvznuywOfHxiDnPhcXF2NByyKads7FJU6Decm33hpowgm1+C0g1Oc+yYfLST6cV5vHv+0X+1zZfjwc9vZr87hfwuR2ebyOb9xub/6hu/v6eNi9fRM27zumAfMj9P/Hf/zHAPzYI0rJBpclm8iXN7RwZ1xyv3Se0U2TveXlYLk7D+QtL2ueHuV1/jkHzxvFrH9of7zfy3jEk0rmBFImfqvFl8eNOaeBabOSH/szHfnO/VNf/Nz/vL6hH3FTPz/AJceD6EOOj7Ro/1woxxvEgEx0uJdc7JPnkTKaZrQrzHkbG8/TeDn8nefb8dntyNSZJ1kPsua1DkhjfKhVtLhxlvbOJ3w3ACLr2YGmOZc4YHzsq10Wwb2c3lRq4/pSrfZsnIvkfCRYC+wXI04zLWOOJEiV5B4D8YL7F5FHlo2VAidH2pzhrAv1BwNNdzZqYb7Qsy/s66rTZ/SBD9+khQcqLfanQyz2Y594UCefslunbi11+Ue2adt9x6hVHqO6qrRp3Q695BXH6VsvO1uXPGOjTj6Os6tSqx1Pb6bywQxuzmhiEeWM8XFUwLGhd+SQmVyczGpNY9kOKdhIEEAGcGcjIGhc1SqLWv3uQC3qLg66pht2U+Wkug3AuWoqriHrq3o8aA6HHdCkpPlAwiKAneKf+ImfCNEnnjxhUfDhD384wBk3syJmwaDF4OMBhAGPwdHfuKH2NhDj33kIQ/PH4TxQWs/92y7XWZwyOBKePFEeFi9wZQGZ3tlDROSXf/mXQ1yYOB2v88BAPlETChxKCrjNkybtMW/Xzgf9ikUR5+ae/exnx03JSB8gHoWoIrvvhH3rW98aYqbEQT+gTzg+4sLsb5tJf7wfON390R2/wzodjw354hgQAcjktkcuO6KfAhYAmdxuicikVU4b08z5tm6/R6u+P+UcDzP+Da2wG7c3jU1LvqnL3O/4t/3a3t/oLOgBh/y40RI/tFEuJDHYzLmfBp9wQs0NBXzSjgCe/Fhow8XBzmdKaT/MZXD4AaF8wwEFiLKBgT2bpx7ryYfL6vnM+c5pQhr2iz6uxu38je543Af8PR5H/p2Hy+0x40Zc7t/Om4HIuP+1vp1P/FD+D3zgAwHqmUMBH4wp1Bf0ZQyCVtQlynTDnLcLf4enQ/wnp21uJhuuc+wpq90pF2sbNvE4m0o7g9OOGD/jLW/F2i/xrFU3qxXXdYbuesPsfuVw2FmRRxRpY8/4CNcf6TN+AEwu94ETS31RPtoCdYWEAcCSumNznXKwAUN6lNdqvFymkfNhPfeXj+ErxWM79Dxcbn9kmVmvGmRiZp2LzCwgE1CZgDnSrXAj2+U0nSP8lAXPgSTRckK2WpXquLaVr0KdQqqCwwitElXQfTY0OIB22A+iFXHrLBmj4QbrNJn5JItwPAMIS4vdpeD2debaetYz2jrlxDM1KHp6z4du1u7tM1pY3KB+d6Mu/+huzUwt6o4b12lxYWOAs+n2/br0uZv1XW8+W8+4eLM2ras11RqorPuCBvEuKLfURvtugHn0pVTuURETXfKiBlmMunOHfTTDLeb5mDreBa3T86AVlM2QrjnTxMkNs2TI/K9lWUqVlPI0noHkNm57qL4PW/TiQcCTFuc1f+qnfirEZ6+55poY2D70oQ/FIAbH8yUveUlwTwjHgEU4lONZaVDaXyI7LnTi5+cJ1d/jAzYDM4PxjTfeqD/90z/V3/zN38SkgT/OFf3CL/xC3ODpuPc3b5NwEwocLArQtt3mx9sp7RhuEWeHWFj8xm/8RiwyWHxwmQWLb84bIRZFWPxYxM19lX7rvnSgy5Dnm/RIx8pufJMHwMOVV14ZZ8E4m8niB64Jb9z92I/9WCyMHAf+J+rxocB4G3wsuXAbdLugPcON58di3m2EMZz2AdcTDhs/m+HY4AY4pd2zIepxHzv8casmadD26S+IDMLhBGySDu3MYri4AUY56+yFOmHdT8hTTgPK4HxCC5cF3f6s291+TLvxb9vvi07c/Mif+4fTQ4d2AI21FHR3WPwRF2MF76oilg/4R8HNZM4HcAIu2dA9WhTlp0x5vcH5e9nLXhYXkkHHT33qU8EppN1AU7eJfaEBdUEaqPFwri/HgzsKe35uH/72mgauJZx9NlcAmbR/2qyBI23YF/oALJFEo92be0k8xE395+k4H6vpzo/11fwdjfbMYAn6Y6KeArE1YDPdBhvlDlHXxk+c2QTG9OMWWZ4ASacT4Xh6I8Gxcq4Tc5or42+AseROC8JkH49WT7E2nDtHhI5q9LZaweHrlO3g8AGYO21p6ynSG950lm558GHt/Lf7tfPhOQ3qY3XDTX3V/a6qpfVq19JM62FdeO5GfecbztAlT9uoTevBaJVaAca5zEgBNp1ggOjh2gB2bVb2PGMpl+mv85zb7dVMoPQGKSdh41IkTluSHkmGs9cWDZe6RJyYYElYGaFlVAqS8rlysmu5rRziQNsedkDTg4x1CM9Ew64eV1v/7M/+bAzCcBsYlOBwsohlwn/9618fO8SExc2DDzoDJoOr491fQhKeeBhEMfOzcty4kybf5JvFBmJ4cEa4ufI973nPcJHN8yhwaxHF8yTr+Cb6hAKHKwXcvulXLHS8w815NLh+7LrzBAG3CcLZpM3TT7/v+74vLrOgXF7suIzuN3x7gWO3A6V7THBfRSctdH5woj74wQ+G2C/iXvRbuE0s8gDK7MDn+T5Y+TxQ5T0a46GeDrQiTrcNt22n4W/8AGwQE+dnxfxE2+Z8J5xPOJ4GoABPvwMK2KRfAIpYWNNnEIWE6+NFOeAToAnHHBAB55O0fBMuwBM7OKGAEfJEG+TnPuiy8I2ZeQVle5cztxtvx/i1yv3bbi3d9MKP50nKm8e5VnjciMPl4Zv5PueOMV9CH+Lk500rzI82v3vLy6F29zqAOoF+rt8f+qEfEseGkLagXV1++eUxllq6gnFpvB73lnfo5XGXdE1PwmEmPvvBDtrSftk0uf766+PcJdIrHJfAjr6AH8JRJ4jCwr3kx9jJRiOgE0W61DF+KWc+roaHvfw50ut5L8XbJ+cRMw2AAvDgZ64mUfDNZT6NNaiEi3cCnVRDsVhgZnoOpQE5TffHG2oZVGFsgMGCQ4OBcj/2O66P+ymcXw81BFgWqFBdtePpk1a8FcklcLRLilrpzLPbetObztMtX39Q1167R/2e1F+aUz1oq4PYcPWwZud269WvPleXXrJRx21AJFWq+rXqqlDZnoq2WgdxUsJOnrw2OM4YNKxW+uPsr+SG3bI4h54aW868Dj1QOEBkGq+DwnEJE8/LVKpLONXUbeIFp3STQHRTG8PYDzfDYQc0xwnEAMTgxSCEmfMKDHxMyEw+TOIMckziTO5cCc7OGQsCBjEGTwYkT7qYH+sA5cHcgzLxYYduO3QUEywLEAAxYoR+g4+dPs4k/ORP/mSATIv8ONw4HSbfEwocDhRwGycvNrvNerHAYvg7v/M7gxvEo+q0eQAbF3nw3ARnNuFGIEboMMSFIi76Ov3J/eyxlpu487z62/GSJvnjsgo/YXLHHXeEMwv6V73qVWKRx0YXivDkzQthL+Sxn6iDTwHT2e3OdfJYUnYduv3lcWLnOneazoPnJbiPtBU4bcTF+A74BBAAPGn3/Nh0gfPJfIWZC4bQfcSCdnjbbbfFj7iJi81KOKsATnM+EbMFfLJopx+xGQJAxS9hyJ/bp/PvPI+Xwd8uM9+5ne1Xo6/9opOGf47HuoHxavHY3v3eOvEhKgqHmLUA0k1s/PhZIdyhlfPheI5Unfqj7vgxPqJTPjiBXIDIZgbthI1rwB31T9mhl2kATVZT9oO76Uaa/sbOtLc7eaA9c0ssF2KxCccNsoB/8uL0uICL/LAG4yIjwCXjpqUCqD+U84BOGijKiuLb8YXFXv48Gr97ieoIc2aNmdUz8qYByKAnP9zN2UycsvDdBOEVxwRcKHareScTYJrFGcHSWpb4loWpub7GMpz7QzrSad47cV6bfAOc6gCzbH4w55a85hHPlvDd69dqd2pd8sxNevoFx+j2m7drx9JuFcUGFSVvHu9W2XpIF1y4Uc997qy2HMt50loFADN4mglsxrMtQQdykni6Q9A2pJMpktGlKe6IMiuXH2raz9AHFsOoeJ+UX7KEouZUJgBKnooQJS7ihl5iKZt3RxG7HauvYSKHl+GwBpoMQgx4TFAejLBjkcrEyqTKuQXAJpMzN7givvFt3/Ztev7zn7+Mu2myE57fSoMT9ii7+dthczcPhvab5w87BmZ2q1lkc56Ui1FYdKDgAJE/OCQc6PcgzyBswJmnOTFPKHA4UcBt3v2Db/opbd6LHTibSBiwQOYyHYu70x9YcLNQec1rXhOPcLPz7UUGcflHfF4072/5yWPeVzFjRz5JhzQAlYii8UYmm1f0WxScI8rAWTAABIr8uNzE4bjDcfLnkFKA+jtQynVKfI7XOvWc22N2O7cfu9sv7cRAkEU3YzttHEDp+Yo5C6DAvIBoKAACMyCUb87j0T4BWIiMAlCtmCcAWizquQWZtsrZN+ZFwCeg1+AXcVzy4zy7rOTdZsdrfbxctl/Jv+2s4xczP/cX+rjnSMe1lk5Y8sDPF4yxaUt8iOdT7hy4Ejf0zfO9VvyHsxtloZxsVkAHvr0GesMb3qCPfvSj0R7YWEdUlbOObLxTvx6D16KD4zR9CYeZdPjltIcDj5QHgBLplM985jMh/s3mCGnhF7rTFtkAQCQWMV8AJkCT8R9/zpfL5XUO4Z0f54NvzBO1FgVYqwIUOUiZ08pgs3EPAANSG0c89C+ASjoTGwCy4X4C6gB5DfYZnskcAtcAg0TZnCXc73E4ce8AVPDoEOdN+QEkUyYuvcEN6UHOiza2LQngAq7eMCO94Lln6jNX36+l+V2qFjbHWdSy2KHp6e365hdcoBOftD44oa1WqXqQaNFi7gY2I4sbnELTOpXKYDOJ0lJybAxEh6RpAF/CDY4h1ynJ+CwVVUGZOYYZHEpCJF/c9bOsqqiGQNrJT8pXgpdBH2iUJ3iYmg87oOkBEt2DU5C4kd9n8GXSYuH38z//8yHnz0107BozGcOR4IwAz6K89KUvjYfj2en1RBeV1kyETov4bT9udr3ZPR+QPdExOKNwI38Mzuz8cc7rn//5n8VDy9jjzgIA0ULOlfIeFmVEEb9/eb7CcfJnQoHDnAK0Y9otbZj+gJlFxite8YpY8HLDMiCOvgHQ/KM/+qM4Y/TGN74xdupZnLAbTjwsXFho0Ge8UN3f4nvhRHjy5sUMi3gW9Ih/feQjHwkxNPKFYiOIxRt54/kEzlBTHpfR5UQnfxN15FOAtoHyAtdj8Wolcxt3/Ts8bcLKdsRJm0YhacPZNIASm424AaDoFwAqgCfPBAEi4HZaUoczbwBN2i2glb4Bh4kfIIC0SBvAQdxwPwGg6IBQwKfPewJGAcHkBUVZ8nK7DNbD09gcOW5negGU2ezlSIjP3zluaGCaOPy4Th/DP2ljRgGsEBdFAWiQamJscZnJP/WAf/TxfEfAI/CP6UaZKCPq0ksvjTplI4LyIykFPaC12yTlX4vOuFMX9kc4x0+atC+ksFjD+EkSuJdsjND+TF+3ZcRiEZF9znOeE9xL1jjE4b5BnK5XymAz7uTTdeZ4Xe4jsMoOYZYZrwCJjDeddDWsUw+RVOYl/DQgCMCC14ZDyTBVcgFPcCQBX42/hqM4FCeNW3kaMBN+AIC0xQTYAGAGSU5+LR3fpIRuBZgDwiUwR/wpTuAU7bLkBlbuv+E9lUCcUqusAuS1q0LPvfgEnXqCtO3OefWrvlqdtopWV5uP6ercp5bafBwwNgUdVIwvaa1OKly4mziILn9K23kb5dR5Si58odBT7kffdks2y/8+0o33S9oNhLUYbSpvhGze90y3BVNfzQZApJw2GLIpZ3lih9HXGkATwq9EfNtRikeS7UCVzYOOJxN0D6ToDE4MbrzTx8TNuSq4JXAjGCD/+I//OK4BZ6HLhM7uGhMuXNBxNT4o52nbr+34xuxv5wt7L1y5dQ2QyY+BGUDK4MnkCwDmgWkme4f1hGow7Lid9oHTXafU28GruwOX30lMhzMF3E5px/zyhaT7CAtCxL3oe4iOX3HFFbEQZaHMFf1cIsF7lJdddlkATkSsWKjQXw7EgsN5JC7GDbhDbEqxGcXiiTNPiIKxSYUfFuPsxiP6i8gs3KA02Y3OweW78Y7/cK6noz1vtL3HWg/jbc1xjseLP9xoE+heTENjvq0Tzgtp/PLtBTZ+vLjGjX5DO+MNQZ5ccZq0VYAn8xn6zTffHOATMAdHyaK3zHlwSkkfwHr77bfHj2cwiJ8NHCQMDDwRu8VMP8PeXFB0/JJ+Tg+XKwo39ge/die/bCZx2R3PcXAbPBs2gFr7GQv+iE+XHZ288/vXf/3XAC7YMT7AIfY8bprixphCvh3HIyI/QizcxtApH23Fm27Q8gUveEG0BdxY89AeqE9ovC9lz+uCOKAxadGO2OSgnSFxwvqFsZG25bywRmGM5Lkq1l+I83JJmkVjnb434V0//iZtACqbK7R795EjpGoOo2wy1gCfxllgjEMgKUBJAwgBcYBEEEks/dKNpgVnNcMvxcKdjZ3mNuEYz+jbgEzWu1nRwww/cASysOI76Qkyjr5tn+u4ohpBUcRwhwDZTpzR5L1I1hes+XkGpK9BrP8TJ5dSHn+sdM5ZW3Tdlx+Ia3UKxuZyQWecvlHHHj+j6XWIzEKNQgVgtRwMz0XCvQ3+4JAOTdpN3lKx+Zt+6XvkB3gMJRKnMRFhGa0I6aISLOHziMD2vEuaqOcqcr0lUBkgM+JIwDII3cQV2cI8nrFI4fD5Q0trcmOkTKYpKLsl6BQO+W1++MUOFc0vlS+iaOIZFnhoaPzvu+YBk4HICjt+HoQZHPlmcuQmSJ4H4XD8xz/+8RgoAXgMlgyUcCxYzHImEu4EwNTnWYjDymYPlui2s5/cjQGYnWY4Iez2cZ23RUu8A8vAzA4zCwje/GLxih3xUhbMHoyxc/xOb//0pkw+ZRwtmnqjS/CPht002qhJOgptnTbgwWj/Up6EeuJQgPbqdsxCgj5J+6Vde/GCO4sJxPp4I5bdbyQQ6Cv0GRZQiL+zQGVHnH7KhREsnDiPBifGwC6aaNZHnB5poEgXhb2/yQ+Lb8QVWayzQ//pT386pAy8Q0/+AMSMDWxMwckkD6TrhRB9lG+nQfwueyS2yh/8HJg+vUoCT0Br1/fBLDr17HojvbwesXe7cB6wW80/7ZG5LG87+CVOt2Higwvkb+KFOwmo4ofCP+fh4Gwi7g2gZO5h4wTuJ4ADnR+ggcU8/Ysw/Gj/iLCTD9oy4Ja5ib4J+AQssCGUg0+ADX3Dc7HzneumAdxV+hZzICKdgBCOsQA4EaskXpQBIfmgX5mWlM9mz4n0XW5qZ66FNnD0yDeKiRv8kAAAIABJREFUb9OL/DCXHi0qb2+YKRvtg3oA2HEUB3ozriHaikQIkhioPGxOD9tDK/tjnUS7oD2x+cbGm8Er/qEvdQInmXUTG/ZIkwF2WdMA+Kkrx2nd6ToO9yfreV7xi32eP8xrqfF01vJ79Lox3zXr7Gy5TfWmFR3rPFQDg1ja2V94aj4gdRj5A4fNFkP41MTTaCHymeZag6VIJdJl7mWNSVyMcSNmK7G6VpOobuKnRqwBMpcnQxRtxF1ZtyLiigX+In9ILjQM2UI677wna926Re3ZWarbX1KlJZ1z9qk6ZtOGaFe8lxlnNFO2VGkQq2HORJZwhFHBvW2MgYHSmjkRB0C6/AkWEGShQZyYTHSD3qnMEUvEkVAT9qXjHwebQW54utyCSwaJhtt4G7P15PIY/7oGHE2Thj8Pkj4CmpG+icSCkUPb7G40xAugmZpQai6JnR4PtkZY/jS7JpHZ/S8Ag8j4QMNAhLK9v23HgXMGQHaFAZZwSpiAmaBYXPJDvASuIoCThSRiRUxa2DOhMrEzoHsQIy2nx6TNji0TOOAS0RXEmxB3YmDmxwKAfHlwZuePPCEqCyfTu3553sk/A/mBVeSbtprVAbdXRX2mQaCBllFndOUYMOgIFhIfvsSbxXFgMzmJ7QinAP3EfYWi5Ga3cXT3I/oXt0WyQGFTCO4moqv0JRbCLHIAnHBaAJ1wQukzFvmjn7LoZdHDQpl+5vhJmwUP/Z0FGH2U/grXh8U46cDBRNqAPmxFfGeeeWb0U4vbkw7xOm76J7+8fJj3pd/mYZzmRH9sFDjYNB2Pn+9xO0qwkh32tBsr/OQgLbcfj5c2Pa48/2CPmT5kYPjCF74w0mJuos3DifKmJ6KPBp6AEfoYfQLOPf0E0GKuKJuxjp++ZbFb+h4/bjVlwwc3NnaZK91HXDbyxuYq8yFxkw59mWMjbB5xHps5Gk6Yw5CmgaLT9zd5xB9lQlLICoADRwzakSZ+0D0W2N+RrrsNWaeMjDforClYt3Cml7pnQx26UC/452f6mC7+hi7QFpoCUKkvzqdTV2xcADxJA//Qmc0+NuBYN7FhYNFd/Fjl9Wk7u3vcdJwuj/2RjtVqZrtP9JwCjDHNeJHR0D4SRDSjpqHxkNQYGoZCBv0ibKwZ01nExAFN9Tyq7cbU+IslvxONjwQ0U1zM/Skn5JYgji3xAVmLsvYN12Es4waDZje5skyYBLnXWLu2C205fota7WlVRV9qLamq+9qyZZ02rutECnXNza38KBu/BGCDcYYba9/E6E24Ehg6xEBYdRJ45qmYKASeuQWWW5YJzziUreNjvc0Z2nQGtqjTZUtpnd2UMKohlQ7ajGA9hIqSJY+4keaw/rLwGLFvqqVxeaTfcMDTuEdHMAy5osH9Oe+jK3pcxdItMZwjC8PCOEM0gjIKmhpK8jAiShNzQjYZNRx+GOEqWVjZmgK5cLkPD1jYYebH4AVAZMB7y1veEqKycEkQuWESBXAaJLLjysCKiBC7t0ykTKz8mFAZwInHgzoDNQMzkyhAMp/IiZcdV5QnSHbq4JayGEBkF5AJ+GURwU7uSoNyXr7HbobuTBTE5O2k1HCLEKegYVOnaTBxtxs2VsItqzLiW2bx2LM4ieGoosBK/dQFdL9Axx/9ioULz5xwcyS3SbJJw7kuFj9eBPFGLmCUBS6LHcAgP3bVAaIsuOn39CfGCsKxSAJE0k9ZNLGQ8kKVxW8+XgAw4ZrSN1/+8pdHX2U8IC5zXPI8uzwTfUKBx4sCbr+0US/YMZs7aSBA/mi7zFnMUfQBc0ABJwBPQCbgFD/Mje4fmP1sBfGQDnMlAJP5Ee4qYJH5EmDDfEkfxUzczI/0Rfo5czLxMRez8cvmEbfCs9HEGEDeATOkTTr8yDdhPV9yAQ1gijjxSzj6Porw/NYaf8LjUfYH2nPREyCRsrN5Rl2y7oBW0NF0gZ4o7BgbqSPGRm7qR7SasGxA4A+aU2fUJeMstAbAslFAneOGP+qC+PZFkQ+U9X0JM/GzLxQYW6g9Yon2CIss0uQWXMWEmpr6SWvCkUev4a2PXMIUb3I2dhFlWnsmmxSGvwZJ6IFPU+B9WlXaf1xO1CQVWgBGTJXaHcYoJBq6qovtqrhXts3TJn2xd5dKBdMM0NdJnMm4RIe+gX2e7+ZzCN5ZLyd6WXf6sS4OJ5BgsZyxg6eGJsHTZO3dAFkHSemSB2zCNqJOf5Z/BxBdbpX5zYz4SaTPLNcy2vO+RL5WPGu7tZcP0k1iQeQGg9YcNE4ovsS+NEDJyRPss7GUHnsBPFjmEWPnQY5Bz7/cHvDIZTtwKDgHhjgtC1k4kOzyMvnBQWEC5kwCing8kTOgIhLCNxwSFp65Ii37x8wEyG4vEzEAE04Mi2jEeZk0rfBLnOgHU8UAkvZfkqx+VEUCl6Sbkk8tMgHNJjcxImR8/WUt9uDm+WDSYxL3oaOAxxO3cS96yIEXs4BDxOj40UfohyxGua6fhTE/FsIocyfNdSE+93/Sou+5n6I7fXTy4AUr/ZU+zWKMRRTpAjDpq9g5LHG7z7KgcjkOHQUnKR3tFMjbFOa8za5V9pXCEZY2Sz/I5yTs6F9wHmnrbt9sxgA2OPcJUEFskh+bPJbUQfSWDVTmPX4Go3BJ2aglLuZIJA0segsAxR9A02VijiUf/EiTzSM2eeHEvvnNb458AWDYnDV4oe9RDuLATL/HDQXAIj3svRmEPX6dJvrRrqA/Z1/ZoINzDM29RqFeXNfQAns2FvAD5xOxZuqAMRY3aA092TBgXKQ+2AhgkxzOKZt60B9/KOLmm3T2pp4IdbE3GhzV7kMESSdkkZm4c8MyNxfZ8B3cyKZrBvAaetp/Q6xgSbaSjjmGi8J2qdV+QK3pjurWfTpuS1czXMlSDELEdYTl0rnTUX6JZHzc4Ju1u92a9fPQG/YoLPxrrJZpGTwdhiUI4XuNDtbKHZdFsG8fefDcvG+hD7qvIdAMxBycMOeSk7ewkxMSh96IRyNRycHiwPmmdWSTcMssmszbzvE+ujJ5AnEoBjoGPU9guPPtwRV/2OHOpMStkVwJDtDk9jrE5zypAjrZ5WPAJQwDKDrfTLTE6fis485CmV1Vdv6YbOG4cDCeZ1e4SIQdYNJHOa+E43fwFXUTFzdH0y2p2EYsIBpz2nxJFdkcFqeUKWfZm0uR0Ty/I18HvwyTFI4kCtCuV+orLgNu+PEiiD7hPosd57cQzeK5H86QcZOiRWrhTtJHWcTSL+mjeVpsGvFNf6NfYiZuzPRDFuBwYxgLWEjBVWGhy2YUboRzePdPwpMWingmakKBA0UBt7E8PvefldxW8kf7XG1+cRzuB+jY8aPv0OYBE2yIWrGZimgtnC7mSQAo0gBs9gA+feaTORFgQ5z0D/omIJXzmOTHAND9ifhJ03klD6TDxX0AVs5DsxnMkxjkh/D4R7lf5jfq0n8ZLyh/7sdlNl38HZ6Owj9s2AHsGd8Y/9gs93rFtKfu2BhgEw9aw73krGs+XkJLuNFIinB2nk03xkbO6zoe0xmaYsd4SD3tTeV1kJv3Fm7ifqRQoFkPDpeIfNMv0fkh+pmpoT+vNXHLLDOvj8bICUvubN16snT+U9fpnvvuVW8w0PEnlTr9DN4ghjfGun6Q2KmxBidd/2jLacxZni7uBpq4gIWGsr+NV0qIv8YtQ0CjsuNuZSYOrqTZbRxGTCD73H/deVophlGukmuet5X8Hzi7bBVFJszGhTNQqqhGIDOS5CGbuJnKXDkXCvQCsVaqMBdu/wvlgYqBDoXOpII9Pwa+3A0/nrSwZ0BlV5fFLIM0AzC7e//5n/8ZkyuDMgtZdnuZ6PDDDwVHxIMrkzScSwZnuCCAS857slC2OA8TJHkjPHnI85abI/KD8CfBTIAmh5ShVRGP1GYyC9EvYjDgsLIfgQ1ZeuhLDNxalmTWyeJyfLz/9XgQijuJ8jChgPuos+Nv+p/7Zt5fDeDoK/RPFDpPEnFdP+CSXXiAJwtfFkwsei1hgE4fIzyKfkec9FdvArERhJQBl5IgVsimEP7IRx6OPs+384wf5wk75z8SmvyZUGA/KeD2tVLwtdxy/yv1p7x92ozuNk544s/7HO60c35w+pnbmNM4R4kiLOAFwMmmDyAFM8CSfujNH+ZNOJfeBGKOIyxpkQainPRTp0VfIy9wON/znveEJAOXb3FLLRfNwLXE3flnU9h9EwBE/Cj6OYr4iNthwvIo/wNt2Cij3ig79KeuAJHQiw0AOJdIibAJQH0RBtoxrjE+svGGaCxnLi19RXwoaMnPyt/EwW9fVB5+X/xP/ByJFGCtiIL7xHlFA83GDjxBOwKgNaqg/ZgTasvHoNfM23WpE7YU+v7vf5G2nrZBd997j57/oov0tAtPVqddqRUcTe4hGQHCIcaNvI3yN8xK2Kfbe13KBKAbDmX0A/cFwjdix5l4cPQVoNEwsYY+se5mI5tfrNITDYeJP1qD80E4zC6P9VF8qf+m/B7KPloMBr3IJVzKIFWD+IuqVDHgcphRJgNktrqqYGuC9ot28xaPC9g0rCzIyJgKN/ref5MHPA+AxIQd30xKTHpMdHwnwqYJiW9PVHbDHYAJd5NBGlE9dm35ecJkAAZccoYLURJzQnDn54nOJWLyY4LFnxX+PAnjH0Ue9ke5TCuFrYuBBurF47fcctWqWiqqjsSmgRX9rdUXflOnh4DkiQugG9Y19ZsPEE27SFHsX76d/ER/4lGANut2i+4+k/chFqQsIHGnD2NGR2FHP2VTiH4KZ4Q+xiILf14sIyrIghkuJosq0iEsP/qbfwBVFGHJg+2xw4x/m8PwGPqrw0/0CQUeKwVoqyjPIZjdVq3nbTlPL3fHzA+/KOYsf+d9BrO/8Ud/Q+wSLhrit+hsCAFAOe8H2HEeHbfnXMdPPJ6jnTZivjwphAQS3E3mWvIE+OTIC+oXf/EX9ba3vS02ez2X4oc+7D7rNCPAUfAHmlnlZi5O45w7m+bY/+Zv/maMe0iDIBpLfTDGeR2EeDJrFwAqFyFybIDNN9Y10BC65fVEnPyoe9PU387PRH98KUB9rKVcb6v5STe5Lp/n9hbnI+Nq8tAwoEburCcZW7gEJ+MENiK2aa3pg1tpPTwK+0jTeL4oG1Fx4eXCnkrt6ULdQaFFeF0taXqKebxWu+irrZ7KmrUtC9924JYqGGMI9hGgCcSFPSap8XFBOMbcxmK4JrZ9CpCEhlljm5MLFuLyIf6nMRYd0Fpwg25cNJSAZq2ZJDn6yGIvs1mtPtMln8u8po8mrzzhghrRkPw0eRpiEBd8hXgibLJfLQ8rhxrZFlXVjxTSweAGcXNQtmqPgCY+QOFlT3X8qGGI2hFv8UTi9jOKexXT3hvVKgFXtR6f2JjEGCAZOFmMorybi9kTJwMsYfGHnRUVgj3lyie03M5x4Nc/+ycezNjneSE8aTovQTcn+ih04l1NsWGQgOYgrnNuBWe6AZo0vOj7vDOUdqBSTG54dBfaALTIdn+axEb5tf/VcjGxfyJSgHY5aiOJAuN29AGU/eHO4pVNGfoa/QXAme+u499tHp046H/E4f7l/oud/XoBZb+E40c6Tj/3Q1yExc0/vvO4U6kmfycUOPQUcLt2281z4Hab29nscLmflea+PF785v6Ji76DH/oDfcV9D3vuQvjpn/7pEL3lm7D0M3T3MQAhZvq2RTjth/7P5i4SCJzf5NIgLuuCwwpoQv3O7/yO3vrWt8ZYwSaS4yU/pOl+7nIfDTr0s8rNXJL0pje9aXjWEg4lm3BsxqGgKz823jjaA7jkUh8u94Ez7LpwPXmMy9Nyeh4L7Za3E9tN9ENPAdfPainvrZ4eO9A0d9JttAFkzNex0ARapbUiPlJTbubXhvOWQo7W3quVZbys0SZJfsDbmoEdgz8Iv6TPdUCsA6qB2kWtVlHFWjgtfkkr3QAbWastVsuG9ApnJWHANeA464pNCV1ucu1yokdpGyYOlMCOdAGagFrczdHEbfoxAM10TG5luhE3qVK23Af2jVsAzSa/uZcxM5KRqL21qbFgw8+R6GyObJt0A32XIHlMCfljCmcWYJzVDHZ5ImKwppexzyNrw8QOhMENbqUCY8fkA5DzZMeExITINwMvfhwH3/jl2z9PVrihsMcuH4jt1274c3rYYSZe0iIewjoMAzzmg6l47yd18YbDTEcpq8S1bNpYGghKIQ0dTbFpcM7asDlkGSXfie7Of2p8mZeJ8QlGgfG27O/UTh5JjLwf0U/4cQMsin5K/+Dn/kT/sT/8uM9idl+PwNkgmIclH/hzH3a+yCc/54cwxI273TDbv3WnNdEnFDjQFHDfWStet0P79fdKYcb94DfvG54n3T+IgzD0CcfrOGzHN3HgTj9FtxmpINyJl80i4qVPOV7scANkotPfUcTHZhPxIPYJoOQ2at7gxJ60iQuRT8I5Tuz5OQ6bw+Io/gOd4AADzg0soZvp6eM9nMXlUp/LLrssjg1BP8JCS+rJ46zbRE4//OUK//xQ4265v4n58aaA12YJ2I1VY5O55XW73zlmXdmsCQMXsMwsEkdveQrkyYBrCHFi3ZlA195zQHyjki33X7ZhoCBC22uwY19lK71bHO9kxrMjKQ+ErOtBerMS30WlKt7o9Np2uSRfSom2n5hw0DPlo1AF+ALswp6JcbNBvllO4+hacBQbioCEG8yUnnZJXNnlJdqfLzOIHl1Y+jRAmn95nY1wAOsh4uRP7uPRpTMEmuMVWbFNUBUq2y3Vwfnrqwp0n0BMv64U9RuPqZKPUi1AaWQ5cS1iYIKjli3YRrK4aYJ4dNldeZDLB0hPQtbJA2Z0T5ArDZTL87g8V4RbSeXpYo7yrsA9JSzxO08rpb9S/KvZ5eGd5sgv+xdUK3n27glbPgOpld7JrOqW+sHdZGe6WTS0ecKGMNQhdt6titwPxWhH6aWGZ7b8KP2J6YlEgbwtrlTutdzpM3kfcj91GyMsZnT3HdKwex52Lfs8bJ6ftcy520rlmthNKHCgKfBo2ty43/Fv8raS3XifGe+DeRjM49/ue8QPYAGsAHAQZed2U76xJxx+czNhAJv0R9LlMhuAI2HYELbOxhPhucSGs4f4Zw7GL8plsI4dYY9GldPf5YOulB23XEc0ljOu3BqLaOyLX/ziOEKAf/ulPghj2uVmx7+STviV8rKS34ndoaIAa7BAAcME8/5JfRkw2EOqQ4exbteR7nhc59YzHwGuAGmAywFSDFWtdgvQlTiKeVqx2h/iFNJN639McVxrFPHKpkYYb+TYAMPAHESCBF9PVT3QTLsdj5eIdXDN5hpjIekAMJFi7MWFpq2QylSEwR9c0LTuZS2fMhuIBuyAiG1wP5O4b1nAoGLTJpW13x9oegYGV+KQsi7GvQJDtWAupZyn9TKxcvNtO6GlyF8qj+kM/f1zX3WdEJP9NbEGFUe0WW5K4YbEX+7YbPQFXjAtY/9guf9RHKNNyEdEtIbFEGjiB2SeCFyHZCwotxpUGiA125qOJj3w2zllpX5cOMNhW/YNYFXX6U6gYYKP/+BEheQVRNb8nbvZLugwtg2U+xsW7TA1BJc/CmHgSyv2LbQt1a0pdbuJk8m7t1z8Q3H7iB7VhTotZNgBnMvBdSLJqPHl9DpMSTHJ1hFGAfcz60dY9ifZnVDgqKYAYM9AEfDHD+DCmWkuDPK3wSPgzz+ApMEk5wUR6eTHGUHEPvnxDVDi0i7EZkmPC2sQCWVM4MzhZN5Ji0wAOPSAvhwPAly+7nWvixv2uZ0XGkMz6guaUSfopt9qm+c0YMLxm6ijmwLUMe0hr+vV7FaiBAATvkRVsYpsBVMKzl4AMNocjI1QiWM24oolKclwCqbgiNvZBNhHDfTWIDjxhAkvaCaJ1VSOdEdR8E/iupmET0qkLOJOGta9lD9tfA0G/RDDDdBZdtSGQRXxI71ZiLc8+4N+AMQiJDXS8Tzin56GmcVaOwFX+LqAzHaL85fjfcnnOMk96bPWdjlS0V0n1h9JkJH/FLtpnftMLst5lbk75sRQors7l8OYbTEeZD++R0CT2EO0BkOzY9Ym8231Fgeaf3hBg6pUd1AG3Y45rqPpTkt99YJQBQdpAaRkrslgGqsMWJIIzSiPtl+JQCNfB8q0eoUtT2E1f9h7kCbESv5Wslse+6H5isEjtg0S91nlQIOKW3TZgZEe2tnV4iL057vW+g1tbdqQmkI9oDM2e0wNal0+5+Stj7aS4hlW+qEp4iSVo5wC4/3tKC/upHgTChz2FABI0i8BlxZzN/hEhJNzgIhnAhhPOOGE+MFl43IuvhH35HwgZzTxt9JOPUQgfhTuxG8wBbhaCyAd9gQ8QBlkfudn2mPmaSiecbN4rJMC3OMOTflRhyjsJuqJR4G83unLe1uz2j0PN6Ia3EuOvCBtwHEX1sgIziFSjy8gTurLy1pbAC+v+xMOSICOVWS+viSGZSFHSafoacjNGUpCtuNyoMTJbCeJTKJjaVsgTUFc/DjPjX84jgCtMl5xBIDSPZIAIymntCk74rZlq1CnTX9qazAo1O8lkE6ZOQXQahVqtSl7ulQTPJQuWU2rYyMeFzFih3EXgJ1jBNiMyu91t/ORFz7lzPQahcn9pLhws+/lruNfpBP0j+gO7Lp+BDQpYLCPW8Emjp0JXnrp1br2urt05ZVfUbe3XkU5p7n1hV74orN14YXHqE1jjauNa8EhW1mtRoiVfR9oWzoLjSXXx9Nwh8Le5vHOZfs8rO3G/eZ+DrWZQ9AFojWxv0OHbglONPs9O3dLV119q67/yoOq6ym1Wl1d9LQT9c3ffJqO25x2PRPMXKtxjrvx/fjW8aGm8SS9g0MB+pP7Emb3r4OT2iTWCQUmFNhXCgBs+MEdo18avHBD7Nvf/na94x3vCK4lYIaf/RO/AY7PaQIi3c+Jx/0cM8ASNzh2iNfyhArf5s7ta36PVn/QjrdNAfuAdkD+xo0bh8WF7rhBU+oK/9Df9Maj6T0MlBnWcsu8TYyHOQX2Vt+4u65zvxRrb27hJ/whvs14UAY3MB2fC/wXa8IkKpqAVwI8cEFZK6b1YpxzjKNa6XslULUambkfBlHYEHmN+BCfB8fAsUygN+Uz8fRgoJDXmhc1AHhlS51WEdJ8oMtKvch4lJ2yNaK1rKXT5ZiUAK5mwm5IEtz1jR16cHuljZtm9NQLNjdgm6M+bJTBJgyWbRKdHYkbRpHAuIDUTsOdo+wrlT+vG9eXaRL+48WIkY1pm2zG1+r2t1wnHymrgOrGjfwBUg/A0j4DmilyiMoDqBC0V5XqV6VuuHGb3vO/PqldO+dUa722nrZRGzev05PPPUazU4jX9lQMKrUZ0Di4malAyPFtPO+dDHuyvb/H3W3/2HQqyJ1nvLJWi9lh1nK329782t/B1qk5btly64jLfupSVdGJ38O7an3iqhv1zx+6Tq1iRtNTC3rolefq3HM2a8PsBiCppqboJSvllBboVri8nsdFbVeJYKVIJ3YTCiyjwL72z2WBJh8TCkwocNApwBxqbibgBRCDMufM8yD+cMu/MQMibQcgwmwQSjyYiR+AhPgnXFCeU8Hf1772teEt8ge9oIdxAtANoAko52Il6Iy4MaAcOqFcH9TDo133HMZFn2RtPyngNjAe3O1j3J5v3MZVbgc3cMAFQK12HK9DOq5uuJow6YI7GAiG9Wha58cZSAAuICZbQubxug2vlodRnmpVgE3OKtcdxSWYRAq2I+usg0vOV/aEpF4VF/G0VRadWMY2Qn7qN1J8HSQ0B904CtjiXCXHMskrua+TSGy7Na122VavK33m0zfpt/7vv9QD9+/WC1/0LP3af/8hbTympbrkFtluHCXk7GqLizjjWCJcywZ88gbLCor0clrgZZwe+Td346TjjnlkGWGXhff63XoThjSH6/rxegfBMcYvjzNPbV/My4BmEJUa4mWLaBpFvEnTas+oPzhRS91NKoqNWlqa0a55zvLhr9RUG84YQM5nAVOmRiATf8T4WLO7L0Va3c+yClrd2zIXhxmv/GWeDquPVH/RsRFzpuMz+RQd1QU7oQvasWNOg8FWqZ7SUrVd7dYxWjezTjNTaae6iHdSUxs4rIo2ycyEAhMKTCgwocDjQoEcODoDzIsAHwCiOZOxjmikERwG//aLmXnVABN7whrA4kachOUMJ/6w27lzZ9g77SeqDp1uueWW4XlZxJJzkVmf3YRu0ND0hYb+PVFp90Qut/tlTgPsUNbtRjtZyd7uhAqOYFwEhLRBpQ5ip83Tgpxv7PeTWGsRQKtZ/wP+4p6XuKKWhJN4aZPeWmk67VxPXE1L7yXuYeQ8/vTTe/KtgTDVVUeDfgKiAN1BHy4m6XM5Vgo71ZmO6Ks+TzQlkAXI5PIfylvXjHN1MNRmp1uq+uu0MN/Trod7TflrdePlC6ndYlMtHSlE9JYjbObmAj2JC/KTCxhE43Xgb9eFy419bpf85ZwhCg+9E80Jl/t3PEk3yExg2Agtxcl4sdz3/n4tA5pxuDcIMIgKAOn3eoWmZ4/TcVvO165dLS0tzemhB5d0112LWlhIfKupqVQo6ioRcDkh9jdzByPceCXlaTR9bkXiUlGJ+CnEShU37ieP+9CZYXUPJJ5H5cZftdIRaUQbaume++b1wPZS/d7x6g9KdTo9rZvbrM7UjHq9vjotxAcKxWHnrJXRHPONg0NXnklKEwpMKDChwIQChwMFmAPNicQMkDGYMSAkn/lcyTdhsDO4zMvCvAkHk5+5mYjJEu/Tn/50felLXwqQed111004mg238tZbb413RwHonIOFgwm9oBucYMx5PZjuroeV1i+uk7Xc7GeiHw4UGAGJUW4MMkY2ucn9MtZywVxr1rWs9R6xAM7EKCOSEfBI4RMKAaQN+n3dfNM23XPnPTruuE26+BnnqNevNNUh3vSkB74RWY11aSbaStTkaytTAAAgAElEQVTDfGVrztw+AaDl5eUVDH7l8OWLHFsBILmbZI9akU2kLadUDIpgdN53by/yu3tpXudecKKedPImdfuVOm3WzVx6NlCr5AIznlZCFJ2jgUV6WaOl4Ggu7uEM+ZxmZjoqyw3q9aWZotBUZ0plq1Y9CBibyA/ntTliyFnSKI9vveWoWyM+TN/jBz2spwiW/x3SK9blbCbhnkB0sIqjzKl+gs0XHhJOWxbTUJw3s83rIDdnXh6tcQg0U5ZGxClaXDteIrWs2Y3rtenYY7R047x6S9PatWNJ8w93NdWWpuFCV9IgrjZuqYgdCuDmcjVileOWo+/Gn+WMTZvlwff5qx7eluo8pF0JI3X0VIlutElMGPBvG+8GpKzQMfJM4d8+RiUJH3HpVOMXDY8HW286bxw6HuaT3ZtuvGJbtFtxEzAiDos96Z67l7Rrx4w6rc3qV0uamp7XlhOntW5TJYVEQdrhSE+kUPZRGSL6YRpUSVPWR9TOavaP8DixmFBgQoEJBSYUOEIowOIHEOMFEdk2NxKAA5BB5e58G/iY6+lv5mIDV+wAm/aP/datW+Ob+Hin0zfP8v1EUV50urzQ8Oabbw7QzRlNLlsCSOLP51vtFx17FDQz3XP3iflIpABcMMAL4qEs0+CcIY7JnSlorON4xiOJluKJd+55WYA1eqxiY2lrGdZ0djIt91LcsI1YTwPlOK/IShrpOIePtT5nFvvSDTfcrf/nt/9KX/jil/W8b7pYf/D7v6KZGcIQF+MF2AAQlW6qjXRIHwZngKokSgrvMdppbWiCmG2SzAtJu6IX5zJD1DJyRLtPY4FxclqzklfOJ3P7cl/9PhxH3tqU9uyWPvnJ6/Vnf/Z+3X7n7Xr7z/8f+u7v/Ra1O0BWjgBWmp3phDTgoDmQ2eGZx+byzOHYU06paG3QYndeZXud+qz/y8TFrTknHYwcGDxpk81DFudKqa8B2SbTSG+QsfiGRtAiAc2iGMTzktF/4w+eyAsq7raN8iEiHO9ywiUNciBOHJ6G+wfkP56ojDphnE4izCla4kwisglDRWGaNMga3/yINHtrNNJK6az1N0N8gMwuz6YnmetBGQidTG85cb1Oe/JGqTUf5/eQU7737q5uvnGgpSVoxdMmoBQIVKrq16qigkiahsybnINooNGyeKOT/MaPXtLI6g7t7LaCDn1W+dFg6Rb95t9APVW8mxO2VESqSxpKSsodKbmR29gliYaAPDX5TBWCW+ziYMsNVkEpqJXaCkWMC7bsfV/K8lj8NDSIHaIsb7x9Gj86cd1VeoQmFbzflW6/dYce2AYQnRObntTtpi3rVHcq9Vs91W3eTkUsmghoHk39NHoMGAwa8Wvco4Hm5n1sfWu1zInbhAITCkwoMKHAYUWBlcAKIAeQiQLI8BsuxsZyj98c7OBv3A6AiR2X3PAWJP6x27FjR3A3uYQjV8z7BlOxBmguLbJd7vdIMFNWOLvO/8LCQpQfgIniciQ4mnAvcTv//PPjpl/8O4x119dq9XEk0OOJmkfXJzptoqr68QvOWHDHWH/vCqYC7zzuWYATB5yIhWy0hV61JN6876tUt0qwT70qSbwNBqr7fXW7PfXg2tWFuv10i2zNAca6qxZohfVuxZo3Scfx3CHvRrLa7g94F5f1ZUc750/UwuKZenh+oxYLqVtU6lZ9FVzA02+p103rfCTrwA00Z855dhe7IXnHm4oATZDRIDBBqaJqqVUU6i5Idb8I7mSvtxBcxrrincxpDXoJc5APXufrVuk3UEeDYlZ9dTQzPac2t5XyFEshze+e0vziSVoanKlef6OWelJvwBK+iIsze4OuetVuFeWiWmVPKgDAVbqDBsYh9w2VhXqDaVXlhqBv2YGLChCe12CwFCK2qTIA48DtjmqKF+dYC/VVqcubo9xtU7bU6/e1p0t9ldq5sBQ0wA7sVJZ9Vd3dDY4qVPUT1mIRX1WLKrSg3mBePXW1xDNUVYKLAJ04ixr7CYV6daE+t+wiUt+I7CIWzDG6Xq+tXp86BgS3NVA76LLUreLN1EGfc6fdZneAaqKeknjy3vqotw0C0QWQRsSFt2KKqQhL5Z10cktnnMnh3oWAcUXV1m23PKh/v/IWnXXWuZqbaYsnc2Ax0+DTxEFzTwMfB2KpYGxwWyabCtiySkFCZjtBQhwby0ancldXAEjCgMJInV2cRBBzjgFXYKjYnWkQfABIcNUwNdJIYLRIWy4JcEXgUer450fWvFsR2UzBk0dn92DoowwnMpEi9O0nefKiVWmhv6BePaPuoKOv31Hr7jtpoBu1uLik9tS8znnKCTrl9C2irRFJdHCV8QivgXUqCGV0IWwz0ScUmFBgQoEJBSYUOHAUMEjichueQ1m/fn2ATOyvueYavfSlLw3OHWsJz0m4YfbvwOXm0MfEwpMfQJIyQgfANWAD+8985jMBMPlGZPbSSy+NS5NwA6Cimy6HPveTFA8UBVyHbtujRR5LtbQWm5nlgs5CD2zfrQ1zG7TzoZbmOpWqQaWSy21a69UtS01P86ZqX2qXmgWNIeIGh5On7CppYTEduep0Ck1NdZoXJNLGRtwqW5da2FOp26002ym0cXY6wsHV3L1roD07p7S453TVgxktLqzX/C7yUGu6KNVfGqhdtzQzLXWXpD1dQGqtOW6rVVuzU+t1/7ZaUzO8ETKlbr9Up6wjz6r6mpulDzRrz3pKg/4Gze8pNLuOMKWmp6aDe1dUVUhWttpcYgrnEhaTNDczp6IaqFqqVferyMPDD7U16J+quj+r7Q/MadfOSus21mqXdUhqdriRts0KGGZT/vQI+MU1jHtH4gwqlx+1B+oPljTFUy/FlPp9NssS/ljYWWihL03NTKunUotFqbnNSBhwX1FL/W5f09PrtDjf0/zuntZvmNFSV5qdmlWpvgaL82pNzahaqqR2oe4iEooDdaZrzc3MqNfdo1ZnVvM9qQPY7knzOytNBdIEUpbqk9XZQjMzbBr01eEsPBsLA55uKbW4VAlQObuOzcCWBv1ada/SwvxA7XahzZumVfHWaNEHZatNfNEOjYSGhDGBhnoGNLFLjS1ub0r4KTxuWCeddfo6nbr1WN1/V0uDbkf337ukr157t3buOCcyrumBinZ6zJRdgV5wAiu1Qa+tUkUrIFnsGAxTB7415zqH+JFCZJAv1eoIUSW4Ovpe7s6TObB1QehZKpTfNMA+cGialMJXuCU56WBLB2cWtj/0wHMTKHjSNC6+uZId7F+rBMXyC7EAbniFOZ6AGR2KAeNA6pQluhDZaECzS4uYQatoq+pRqIFaPNSslvYsSf921T366pfntWtnoc50S62pXTr1tON1+mnrhSh9m/uGE0aPouRE9KDndCb6hAITCkwoMKHAhAIHmgIxXzbAEbHQpzzlKdq2bVuArauvvjpuWkVkFEBldbTNT4DItGGfyogZUIn62Mc+pj179gRHYcOGDTrvvPOCowzHE38TdXRRwP3BpUptnXccWf+1NWBjoj2je+4Z6MZrl/Tlz96t//zCDeoOejr+5M26+NJzdPGlx+qsJ7dVtOGAKbiEdTe9GfnFz39dn/z0repVlV74gnP0vOeemsQ9B5WKTkeDuqWv3zGvT159q+6440499byT9arLLta6OenWmx7U3/3tbbrtlmndc/t6zehU3X3Lbv3hu25Xu/MNbVq3qLPOOkbf+ornaGZW2r24pH947xd15zf26KUvfbGeck6pYtDV3//dffrg5Vdqw6ZZnXPeqbr0m8/T81+0QcduaatfL0kVTx6Vgfk++uGb9LUb7tWxx23Qt77qAm3dOqUpwF6NdAQAstC1X5rXlZ/4knbt3qY3vuF5uuj8rWBsXfXJW/Tla5d01b89pPvu5nbY0/WFT6/Xww9+Q+2Z27V502695EVP1jc979x4TYMEW804w/E0/iEMnPAFX11V/d3qd7vqLra1YWaDlnYlwMv6+8tfWtCXvnCTPnfNjdq5rdCuXUs69cxTdNHzztfTnrtFz3hWO7jFhJ0uK/32u/6X5ndN6aKLLtTrv+0CtetSU1Ntla31cfdKOTWl3u5Cn776Tn3xyzdpsbdT3/VdL9Ipp25Wr6cAyTt39fXF/9imr372Ad163YPasX2gE7cerwufs0WXvGSzTj9zWq1WX/2qreliRlMd6cEdC/rYx/9D1157hy559rP0zGc8RV/83J26/P3/nx7Ydreect5J+rbXP1vf9IKzgikFFeBmwskDEYEZ11LLgWYAF5AL7MkkN0xBu/1Cp55yop5x8YI+cMPtKutjNDtzvL76le266qqv67Vv3Ko9vQVtWj+lTjyOQpLsqjXM2ZpDuUlOudOcwUgVlTAfoDjtnRCKTJB5KhEctVxnGwW8F5zKMT1Q1wB2e4NewVqM0yEFiigK70sCIBsZYxIIBUgE4CIuMKWiTgO6XZOeIooo2TmNiAHWidixNREAFd+4J2XTgdZblMHz7CixGHgi/ekkBjxQqd2LhW69tdZnP3WP7r1rUarm1JreoxOf1NbZ50zr2ONioysqAUkJOmRwgJt4j7ZJvKmaiTahwIQCEwpMKHAYUQAuHucMUZzHRCT35S9/eXDx4Opdf/31uuOOO4KDh5vBFXMU5qOFm5eDaOhgkAnH8nOf+1yAbWh00UUXBccTgAl9oMNkvj6MGvQByIo5/NYdZaszrfmFWnXJ0z+79D9+5d264dr7tL69ibcg1G7P6aZbt+kjH7tGm04o9LZ3vEbf+i3n64RNcLJC3i8uiPzCf9ykv/ufn1CPi6WOKfVNzzs1rW/bXCrVCUB7z9079L//9+f0+f/4T73yskv08pderKm+dONN9+nyy/9Fux7eqqWl0zWoSj3w4E797Xs+r/Wb7tXSnlv0zGdt1ate9ZzgMt7/wJI+8uHP6pabe9r54Ga9/rXn6cd/9J1qt7ZoUAOWd+tLX7xN7/2Hf9HzX3iO/ut/e4POfPK0yqmBBr1a6hf6+7//V33203dp8zGzeu5zT9Npp54Ia0sVx/OKlpYWC33tujv14Suu0a23f1UXPuUUPfWsrYLX9fF/vVL/9E9f0e4956hsPUWd6Vl97frbdP0Nt6pu3aTZ2Qe1Ye6VetbF52qqwxlPQAbioctVnCoDVwRDTZqbm41bZ/HFWc+Ht+/W3/39J/Xud39QS3vaGiyu07RO0tJCrXu3Leryj/27jj9to/7rf/tRverFs+JFwbpf64Pvu1oPb5/Vp//9Fr3kxefFhURIi8ZFad2luNAIadoPvv8aXflvX1C/3qmXvewZOvHkzSH6u/2+Su/63b/X1Z/4gur5jgbzcyqrY1V9+QZd8fH7dPI/lPrBH321XvnKi7Vhuh3gtOxI2x+a16c+eZ0+/rFrNeieqOu+vKAPffBT2vnQvLp7duim629Qp9PVhRedpY2bgRmIMXP+dBBitdme33JCNV8Z0ORK8UTOss1Zi0pI6VZFoemyo9O2TulZF0/pyn/uqbcH1u2M7r93Vv/wd1/VuRecrqdeuCF2SpaWak216ritCcADYKmqtrhcBo69MdGy3OS1WHeSJ7AfnlfQI6zDjOuEacBlJBbfcBXZhwDO8oPLB/cuHUyOjAc7eBBglIO8BAsQCfsTf+ymkB3ihmFK+2sKAccwwGl/VEDSO1iKiYRBxwOPJxa+q7rWfLcv3gSq2wPt6Uk7dxe6/ANf0xc/t1PqH6/ZuULze27VM551pi55Lh2KY7RV7BZ594bCOd6DVY5JvBMKTCgwocCEAhMKmAIrceQuu+wy/f7v/36AK96NvOKKK+JcIiKlObAkLJxA5kHPXdYd/5GgO/+ASsAzIJNywcXk5l3OZ/pSpNe97nUBunHPaXEklHOSx71TwGs89GXmhpey2C/14cu/rv/3dz+kO255WMcdc6zOf8pmXXjBVi0u1vrSl+/UQzcggdjWO3/l/eotLup1r36GjttUaG5KqvZIvYVa6s2pLCr1e4V6S1J7qq12p4j3J2PdixfO8PWm4jmQFmvGUtp66kY975vP1a03t3TD17ar6tU67ew5nXXueWpNTWv97EY95zlnanpdpQcf7mp6Bk7seu14cKAvfW63/uWKv9KeBems8wpd9Iwna9u2nfr85x9W0T9D132ppf/xf12pX/uNl+vkUzgG2tVAM9q1p9LMzNnxDvygO9Us6bn5lQt8eGJFWlzg3OacNsydpLl1c7Feb01LFz3zDN11f08337JBd921UwtLO/Wk42d1ymknaWZO2rKl1gUXPFkcOQeM9weFOm3On3MRTiyKI64EENI7wGU9HQ89THUGWuz2NDU1o9tvv0d/+id/o13zhU457Sy95Pkv0flPfqoWFrq66upPa/Er92thodA7/9sf6OJzf16nnMzxy1Kv+pb/U+/7h8/rnjsXddWV2/Rf3nCKBpzpRKq4Mx11s3OHdMNXt2vh/2fvPcD1Oqsz0Xe3v5zej46ko2ZZkmW5IxeMe6PYYEyHEMIkYwYC3MzckHYfJkxuZoZcyJDkTkhIchMCBDBgHDvBlWIwxkUuclOxLKse9dPL33a5z7vW9/3/PmouyLaE9z7Pf3b76vrKXu+31rfWZAHnX3wOOjrbBWRSLfkPf+/f8NCaLSLkO+fMPlxxyYXoaluAtY9vxX33P4YdW/bhL7/4IyTVAt759lUileb+2yThHtZ5KE/tx0/u2Qvf34eRkRl0dxZR6A8QhwE6Omlh18ghwxihqO7rtskGGjp8n54FNF22BHtVzD163Bw7A26KzQWtaG3J46yzB3HF5QnuuO15JFEXKqVmbN0c4f/9y5/jM3/4JixdAjQHDqKag9I0QKRM3zoUkIoFJG4oNqLLtERSQI0tn6o727tDzgI+D3maemBBplF4pSq6GMJzudLHlVJKSFW+yLQUPtIaFa1pqc64FFjEwrJzV3b+xoLeXdDGEVcUvEDNJRNAu0S2DtWDDTDmib55mDfzOMZnpZ1aFyOclXuSwGjwUm+9zHLW8qJrf9M3n8It392CWmlQNhGPjGzFkuU5XH5FLxYMcoM0pZisjxGS6nhKETW7zCiQUSCjQEaBjAKvLAUIlgiuCBCtgaFly5Zh1apVGB4eFgNBBJof+9jHxHeklfTRcJC9ZgktWHtlS/vKpG7VZq0FXtKC9eFe1a9//esYGxuT+/b2dlx44YVoa2sTmjH8r5JU95Wh7omX6sEgkzWgoRsCn+lJ4KZv3ovhYRcDA3PxX/7LW3HhBXMwbz5kjx/3+f3whxX85f++C1u2bcRtt67HyYv7cMmb5iPi/rwa/T0W4XpFREkNSeJTmVH0EqPIQxgn6imPUhUvgJ9rguMGou4ZxMDKVfPw2f/6LjyxdhR/9VdrsW7dPswf7MZ/+9Mr0NxKrxTcRxzC9110dhSwaW+I6ZkcWpoHsGXzODrac/jsH/9nXPrmfnRQsy4AnloLfPK3bsLEaIy1a/Zg71CM7oE8AleNCLluE+KkIHswq5UEYhss4X5mVzQWqTQZ0ahNWMRMycHYeCLlzXvAO99zJS658kp897tD+O73NmH/vgP48EcW493vWw4/p3Apzz2OVW7rc1VKKUIla+mV1DfSL6qNUqoZeyiXaKjJQbHgiPZmLp/HO264Dm+6+AqsWtWF/l4HlWliEOCSq9+J79zyHP73V24BXT3cd/8mvO+9J6NcdfChD1+Gm/7lCeSDHtz8nR/i+hs+hDDJiREkGu0hPLv9zp2YmAyQz7Xh+usvxcBgO6ZmgO/ctB/rN4RioOh3f/+38ZZrlqCnEwhcB5deNQfn/PxU/NM//gRPPbkBTz9Ww7lnAEuWAjTH4zgFhLU2hJUu7NpZQXNrhLdffwk+8hvno68XCBwKDzknK+bmop5HS7wibWOpjn5Y5UujX0rQ4asETwSDFK/T1lQJPmpYstjDtde1YOEi+rwqwXObsW9PAQ/+vIbPffYx/PQnwNi4WmWl1K8aAaWaOYfAOFdPuDJCCbg5E3eKBVfzjMLDkD/n8OdqAtDm3JHO3HA7EwEzAKb4S/ijTaYAFQQoJTmU4gBlWuFyRMNarCwlKCJBM5Ik0MUKgkYvQuLXEPsVxB7PibgAcfJibwczsYvxmo+xqouJGjDJXxWYrFAXHZgqvzJn1pFWsuiuxJ55TVqXq0AlBKZLdGUC/I//tgbf/uchjOzpRK1SANwyOrvKuPa6ZVi9eiF8bqFlVdneAtKJVrnEcfSOk73NKJBRIKNARoGMAseaAgRLaelNoVDAe9/7XnA/IsHk5s2bcffddwvotBJLAlQLLvnM/o512V6N9Fh2SjN5EDxOTU3J3ktKMu+66y6RZrK+VCnu6+uTd1Q5zqSar0brvLp52H7MM4/6fQJMjgLf/faT2LplAqXyON734Ytx8ZV9WLgsRlAYQ744g87uBBdeWsB5F7ajq6eIjeu3Yf0z+zExqoBBDLG6McqVEkqlKcQJVde5h5NAyxEXhwR/iRuiGpZQqVVQ5mZAF8gXxC4NOjsctHVUEDs7kbjb4QQ7MDDfwZwBB709nmypm54kjgCac0B1KoeJ0Qjt7a347U+9G1e/rR8LFztopXGcnIOz3uDgE596J/z8NMbHJ/Gv39+IbVuqiKIAvkMw1wHXryHXVEZbZyKSSMctIYzGEMdqBdehQSy3AN9tQWuLL5K4GYpOnRCdXfQTP42J6b0YntiMxB9GvtlBruigq9tBW5sDz0/UVQl5YvLC9qetoJ1A2kT9azZxz7igKAeBl+C0M+bj//y99+Ds87rR1usiChw0dQP5NmDBEh9XXj1fxrbr+XjqmScF5OYKlBA7WLhoQOayLc/vwdBOWnZVLcpymIhF3dtv/zGmpqfR1lXEwkVqyXdyimrB92Jsah9WnbUIb7igDfMWOsg1RUAQo9Dm4LIr23DS0iLyuXb84r512LBuswiZKiUKzzx4Xit8vwteUMBlV52FX/sP52HxCgct3Q6K7S6KLY6oP0tFLUwggFO0qTQ5wv+GRJOVoYjWSIhpPTnwcuLyJKqWUaBlp5YAp5/RgxveczL+/m+fxPhEjLa2XkxPzeDRh6ewfdudOPcNrbjggqVYtqxfsqTVJXZc/pg2V1HsYcaOvZVzWtI5ay+maWsONxb1SAdVdQmYaEWV0sTI4b5MHTAU+3Z3ATRuJHrPrqPGihwDtBRua/okpJIEkUgzPUSRIzrtBMkEcmMTAMXY5YpKLVk2cTUjF0cq4S//3PRvKYvspbRJGunt8Cjw+Nod+MXP1+O5DZMoTfagKT8HNAvt+vtw/oUDuPjyAfT2OeDqDfEzpZqiMiwWtLiEw4c6udnks3NGgYwCGQUyCmQUeCUpkJZMEnRy9fwd73gHPv/5z4tUk4DqX/7lX0CVWoJQhueP4IxgkyDsRD5Yfv6459LWjfX5xje+Ib5ECSr5/vrrrxe1WYJRW2cLSE7k+mdlPzwF2LZ2AYbMaTEP3PvDR+CiGd2dLs45pxmd3bQYOgXPr8EPaPU0QXcvsPr8xXj88R3Yua2CXTtqmBiroqeTKtmUatLCa7O4EqG1VgovOIRoV4oaiBQMiZFaUIqVR5z4YtWUYYR1DFkWWmstI/Cm0FToQWkGaGnWnWqUmrY26V7PJHJBQ175HNDcUsVbru3AwFxHjFXCY5kDEPhce10ef/W/ptDqt+Kptc+irWmZeEkkAI6qMWrVGjynjPHxWLxd0Fquxy1xiQN6aRSvIEkg7joooaUV1nxTUbbGTZdoOyZBU9EXTc0w5HgDaGuL7l1c7vVGghzVMe1h8ICCgwbwpF9QgluqtZOWUaTb9MqVEC3teVEvJo4hn06VZHLUFWIin8a9elGtTOLA8JgIppqbqZ4MvP8D1+LPPv8VFNCC+39+AO8cHEBM9yixg+FhYN+BKZTDCt549nL0zimI5ujOoSmMjdPdjYezz74A7e094i+UBj5l/2ek2or9fYNoaSph7+59GBmeFhcz1MRkO9Zq3G8Z4pSVC3HVm0/CwqUuIq+KwCVo81ATNWKVpDPGS5lr/EbnVVAh/ykZJkliD4GTR+JFiOOqqFf29uVx1ZvnYHS8gm98Yw2qNTo37USEJuwamsLtI2Xc9eN1ANbJRtmE+z7FUbCjpnBZI0IYATL22gIamsOisR91JDoLaLKhGSymr5qGMSChEJ8zGxrjifPw6OPRqyDCDCLQJUsEz6UuMd2dVDA4vwNnnbUAb33rIFad2ioDliaBaQTHiRQsBjkPsVNANQlRk72cOezcVcXtP9iNhx7Ygs3Pj2BkpAzPb4bj5sUvUJx4MlCShDJaU1Gt4kv8f/S4ah7J1Nk1Tpg5GUSRdHSPKz9xM2rlXlTLc1DItaJSmYAX7ML5F3Xjo//xZJzzhg4xg0zS8bMsn2aONmmKo+f/EiuTBc8okFEgo0BGgYwCL5oCBI0EUPzxaG5uxgc/+EHZqzk6Ooo1a9bg3nvvxbve9S5heGhAiIDU8jNpJojfRd5bMPaiC/EaBiSYZp2sGu3u3bvxve99T9yasJ6rV6/GueeeK1Je1i39s2DESnhfw2pkWR9DCth2ZVsTAhEQBshhZnIUCxZ2o7U1J5ZSxad93CQ6kVT/pFmSU1YMYqC/HzufH8P+vfswMT6GJO4TAOQH1OSj64oafDcnrKtwgPRE4Cv4ob/KXK4NUVyA4/gCQqenAZrNpFDKpXP5MBBvB3SJkSMgLAvrj6Kn+z7JYwcBId4Y/IKPxI9RaHIwPRWjpctF4gSUd8ArAigAhXyC8ZFp7BmawfRkjJ4ew1XHDpwwD79I9VFFSUms9lWIK+jFBU4TkBThOEXZW0rWNopCUa8Vly4EpCxzkkchnxPBE1lfkeR6NPVJXrqKxKGkj0ZZjKtESnlIHBY0dkVt1nVr8HPqUoXGU/NBgLwDAc8UdrF+u4emsW/7NCZGfWzZUsL4RAvcaAClCvdhByIdZqN6OeCG9zbjz79YRXmmgA+SEL4AACAASURBVH+/9Re4/v3vQKmUQ3sR+N531qBW8+B6Ia645kx09jRJD3vuuV2o1VrgxK148GeT2P7c8/DiYXS2BGIctVKm4Z52rN8whZkJ7sdsRRz5ug2QjUgJmVuD60+ivTtCV18ebsBFvpAWaOD5gZljWHFB44Ia6J5GxXQCHI7Y2+sSTQFxdm+exRkkLpgBzzEihxtdIVagPvQbC9HcFuIv//I+hNV+JOiC67eiXG4D9zOmhWECNgkQbbqChm2ZrD1WVjZB7BqrsgaqsfiMZs9MZNa9TUai061HQVY2XI+dZAYJKnDdCC7BpwDoENPjVWzZvA333/ccrrp6Gd7z3qVYtNiXVRuutNA6FZ3bRpEPx/MxOubg7rt34Hs3rcGW52OElW6USv2o1gIkVHB2A8RiLIiuTSgZJFpNFewlX7Ixj3KkLMvx46m0oVNf6h/H8Gohgpi+iJrgJBGq5QNoahvHWee240O/vhhnnNWBfE6d36bwvqE0qVtvqKMUInuVUSCjQEaBjAIZBY4dBSw4IpiyB/dfcr/mBz7wAXz729/GxMSESC8p4SPYonsPAjIbl/Hku2i+k0yL7wg47XOb9vF6tqCYZebxpS99Saztsp783XjjjZgzZ069+BaQWlBNMJIdJz4F2G/TP9aI90g8TI3TYI0CoL6+HnR25FAICAsIjDyElQR+kIC+Eej2jnsJ6fZuYnwClWpJ7HdQdTashSiXI9Rop8Sj5A/yjrwst7+xB3oBrRq7KNPKbeKLNh21FAmoKPWcnvKQ8wtwEaBaqaKlqIIbasyRnXSZFjX/vAR+riS+J4Oci/Z2wM25qMyEyDf7mJkqIxcU0NwCtLQ2Y3q0inJ5RtwIskczDe7FLBZa4CZVEV6pmmwOtWpZADCNWxJM1sJE9puSmyVrHIimAF2g0EpsDvkcjRtVkcQ12YtJH6EUNjUXGIG1jo1rEx2DRhwjOEbSpHlRwQm6kEX3Kyzj9HQIx/UxMTGJ/++r9+InP/kJxg9MAdUiwkobkMwBnLkoT9NIUQGuy7IDtDlEQEwjTKefuQRPPT6Jp58awrMbY6w8DZicBB58YBMmp6sCMJctz4n1Vw71ifEKJseq8Jx2rH9mM557dhpdrQlmxvaKamdrS7dId6dK7A0E/GOIQCu23KNLuELNzxocrwovV4Yb1OC4OTioSnuzy+liFrEdU1AKKOLmvSoOH2nE1YGmRKRo3oJNKY5BqwmtKxHZ0hlwBZEfomeOj/d/eAmWnNyCf/i7x/Hkk5sQFBZislRAnOSQxFwVoBTTk86QuAqE9AOiEsuD50LCq4RrJDTKw3oYyeWss9yYetr61s9mSYCjxcnLBleuNnhE61QNpWXVmCopIaoz05geH8bXd63FU09vwkf+w5m45JJBWSmoxhWRjpYrBTz/PHDbrc/j1lvWY3qiH9NTBbFmxfTjhKq09AfCfB1EiTrKzcmSzJFI/iKev4DFWlERInnocNUQUScfEXAj59fQnOPgGcdMeR9658S47vpVuPadA1hysuqre04Cj36HDIiX5mbnEZEuCZodGQUyCmQUyCiQUeDVpwCBEw/yCxZ0LV26FNdddx2++c1vil9N+tS87bbbBHRx/2Y6LONaBl0ZJJX6vfo1eek5Tk5OiqTS1v/pp58WgK3qeTGuuuoqXHTRRWIciHUjP2BpZAHnS881i3GiUaBAy6hxTaxdUhBE+ygLPReVUhX5wIOfV3VHjiQ19BiL9K6lqVlssRDckN+n9dDE8ZEvNKFcDUSNs6mljDgui39OVAoilfO8PDo6usWLhGzTdBMFSIGDQoEmNj00FVvhuXlMTQFdvbEA2lzOg0/051BLMEYlHEe1SlDbgpGxBP1zY3hGgNTUlEe5ROMzVDGlgR2gqdCCQuDCJ1vKLXFRGdMTNTQ1e2Kck/ZJ8kgQBAXxGc/6Um5KKaN40PBUyOW4qtaaJB48lxLQGbiytzNWY0FFF4irqEUVeE4k7jsUOMhIFGhFWJI+OP5cl34uPVFhpWuTsOZiy+ZJ/MM/3Ycf3PkzTJdGMLe/A29YfRoG5y2H4/RharoLN33nEZG8hrVIDDcVCIYpXSwCH/q16/B/b7gVo5PAPXdtxoKFKzC638OmZ0cxMTmDd1x/JQbmtYhWIlWTa2X19OH5k3jbtefirLM7EVX3oimXoBAUMD0tCB1lo46/aEErzji1GcWiyCdFVZhSXKk3YgMb1c0kXUwKNDBgUxpBiKDUUPOqaaocej0baHLtwmWj6AqIiuXYuhRPc6JmE1aR80I05yvwvBwuvbwfCxdejscfncDtd27Gumf3o1R2US3XEFJlhWDTozVXivroQsW4DpmFZbgaydwISnOgYxXiJ8Gah5w14uHfO0hyBlkzmJg5J5G4mgkdFCiiWGiH59ByVSK+a57dMIqv/vOjqERVXH3FSSgGnoiUh3YD/3rLTtz8na0YHe5CHLUICA4oWnemkbhVhKiiFlcQxRH8wIfvuYiq1PH+JQ5uZj3KwVUobtSmpJmNLCBTAKMD360hqY2gVB1H/6J+XH/xGbjw0l6sOrOA/l6q9lZFOu3SklWi3kAFq4q4l/kahH+U/LNXGQUyCmQUyCiQUeBYU4DfMjJvBI3ci8gzVUh5zeMzn/kM7rjjDjGQQ1cnf/EXf4E3vOENeNOb3iRqtjY+wzId3gvPcQKpzlJN2NaDasK/+7u/i/HxcakPAfWnPvUpdHZ2HkJ6SjNJL9Y7O341KDC7LS3vy36t0i9u0yLYnJiYguuEIjkMCoEIeciEcq8i5S679+3H2Pg4yuUp9PetRE93p0gtRQWUGNCn9I8GcCDgjFJC0WMUoy0EQColLZVm4DhVMa7DPXtFyoXonMGJMDE1JYDGdboUOiQOaH2VUrE4LiFKuEeSxnIoMgxQLasLFeYVQ3lmsaeSA8YPEC3mAacqCyrlisAdsZDq52soFF34vieSSqq7EgQTXJZmKMlkHTyESYgINdmKJxqbZk4gFcNqDXFUhetFcD3lt11u2RPjmK4IYGizJE5iEZZxPJIzFmjFBMwQIy/u+Q6qtYrYn6HEtVKJ8cgje8TXZbG1G9dddyH+08cvRW9nDm5MdVUPzz5bxb98a0TAMGlBtWIOW+4nJbi+4E1N8AO2Zw4/uvtJ3HDDSXjg5x4qlVYkGMflVw2iUAzESi/tzZy8dD5yuWdQi8YxfwGw+oIi+roGxQZLtUQMliDXJAqPgoWaiy5aApY7FGGV1J1tTc1TkoO2egTzGY1TY2FXRpXx8cidrjrVGGIcZcjNBpo0BGOAhgC/uKG+opSlRVYWZAaIy2jOeQhzIVauLGDpkhyuuKIdB4YjTM8ApalE9y2KcSFTWBqrIaCU1jISWC25ZEvpHDtEcrSJklLOI1SI9Q+5TdNRsCyDiPlxwzOtsZaAZ9dPYM1D27H5uf3i6oOrAXt21bB/eByutx3FQg/OP69d1BJuuXkrvvOtzZgY74TrNCNXpOPW/WhrncE55yzAOecsw7wFAdwgERUDqhp4/KDRGa723SOU9AUeH6mCqWgyIZBWhqZsNord2fHbWiK0tcdob/fQ3l5AsdlDkOOq55Q4tvWQb0gyJU1DJCEYM38RBUiVJbvMKJBRIKNARoGMAr8sBSw45JmgiQZxCDStxK63txd/9Ed/JICTKrSU/n3uc5/D3//934sKLcGWleqlQRcZxYOP2Uz8wW9fnft0uWx5WFcLGr/whS/goYceEgu7LNENN9yAs88+W4wA8d6GK5VKYjjI0unVKX2Wy2tGAYfGdIBcPkKxKYetW3dgx84ylq2kMh8FIdxbST8ljrjNeOaZ5zE6Popis4uenjY0txSE2+N2xq6+VnT2FrFz6ADK1YpojdaqAXI5X1x2EHjMTM1g7979CCO6EfIEjNAaLY0EifeD2EehqQnl2j7UoljcYExNOcj5juyjpCBG7J7Q3kncI3sJqzPAgX1AayetzQbifaJaoTTNxYYNwNSMK1LW5aecDI95usDMDNDcDrR0+BgfnxKQSMwwOjaDQrGAXB4YnwL27BtBuVIWOzHcUkZ6CLiIKc5yZN9i4OSED/a9WPhmjiHfjdGcZ72pdRmALkVkPxxRu2GNG2AzQoIyavEMYtBHqPLjE2NTeOyRzQiCNvQPdOM3b7wGc+cX0dYCVKbV323vONDaHmKKfkmcLtkLK9CLTeYDXEe66NLTccstj2DL5mls35Lg+zc/IDZxFi3pQ++cPAoFCu4iUWmeN1hAoWkcrj+KsbF9iMJuNDfnRQ3Ybdd2qsaJGAZyXWoz1kRLNed7iGLFdQImqCUcukjo+iOm5V4uN1A1mAt9RohHArAxCDik0HxwdMzQAJoSjqJSrgsYeRwRoV0KIMSkjndCX5Tq04YqqW5SQeRFaGotoq05jwXzVL2ZKyn0OSmA1Y5GgiF7LasLepPGlQRr/NmsD3cmhpN+c/CZG369BDHVP0UnXfXX6ceS1m5rZaB2WQ5b39aOu+8awt13b8SOoSnkgjb4wVw8vRa454796Ghpx8b1I7j7rlFMTbeLiD9KpuD7B3Deue14//vPwfKTA8wfCODRbyjVcsXCrYLa/OwtqqkaH5tLs22jTgT7CSUdhZbGgpZ8W90EeaoOyDCO4FNqLPJlrgCwPFY/malYRVq+kJfHpsBZKhkFMgpkFMgokFHgBShAsEXppbWkaoEYQSMPvnv729+OH/7wh2Ich1LNRx99VIDm7/zO72D+/PkCUAk2+SPwsgDOppW+t9cvUKxX5LUtD88shz1bcH3TTTeJpVnWke9Zt09/+tOg/0wLRm39aJ2WNLJpvCIFzhJ91SnA9kz/WADecw8mAd7pZ52M57c/LcKdxx7bh5WrujF3LkGI+npnmH37gSef3onRiRG0dzZh7mCA1naXbjHFkE+hmYZfYrFHsmdPE7ZvBZYtc5CEjvjZfPSR/bjpW09h+MCY7G2sVGdUGmr2Zyb0v54L0NrVhnxTM0rVIp57Hlh1Kvl9D3HsIpcLRJJWqlCKRqNF7Rgfj/B//eEt+Mo/vRO5VodVEv/0YQX4+3+4HyOjJQReGZddtQI9/T5xD5wAWLCoD488tB3VaoRHHprEosUd6OxogefSZ6aDe+7ahHt/8gSmp6rwufFR5bsiTRXS0WJvsYAg8JFEOezeGWBkHzBnbkGMAVGVNYmoiss5RxGL0Fz0B9WfpvDcDs2MqqqtSELpFoZzVDXE2Ng0othFqRSjVisK8KZvzqYmqjYnWPdMGbuH9qGrqwduot4+iFOI37w8xGrvh3/jFNx510Mojedw579X8czT2wG3hEsuuwDtnfR9SqwVo1CgD9Uiero9bN1ewQ9uux1vvqYdxeWLUaVHF4cLEmxrakFqF+Z+VEpia9UyRDIpqE9QpoA2hwaXEtq14RbEUKSbVgiZhgZEjC8GKzSApiBTTUqKIqhFenX9IUWpnjgNpd3iIiL2CISgtqpYrPK4i7MmBKB+tMP9maaRmTwbWfbYmqLZSktWprzSEY4ENM0wZxgGtzi6fqaEz6VqrvjqMPtEWQ762HIQUR859qRBTl66EPMHI3z1a09hx84YYbkNw5M53PfDBLWpcYyOVPDs+iqqoYMgfwDFlmFccWUrfufTZ2BwoIDWIi1uJYhqMdzAFf1sgk0Lgk1RX9GTpYHNhPfMvxqW4VKfIA5kMzMbOY6owpCHK+5edM8tQ2tH4fCgM1i1V8100p3Jpp+dMwpkFMgokFEgo8ArSQEryaQBIAJOgiwLHK0VWko1169fD+5f5B7Fr371qxgYGBDLtDSSwzQo7SMw5TUBmTKLWnKmeTwctkw82zKxvI8//jj+5E/+BAcOHJBys/5/9md/hhUrVohLFxpIsrRhXMbhcTC4Ph7qmJXhFaAAhQncy/eR87Fm7VasWz+Ku+9ZK3sUr732ZMzpp5EZ4LktEW6+9WE8vGYXaojx9hvOxQUXLxFV2VKVqqIOTjl1IZav3I1duzbgZz/ZgK6WAt7/3pWiRvvAgztwx11r8czGMUS1AGE0gSDIi2SxtZXAUOUTxfYAbT2toM7f8EgVt926FoXcmWhrDjExOYFlK7pQKit/6hU8JJ6PSrkJG5+p4Td//Q585MZLsfz0IlpagS/8z7uxZs0wiq3t6O33cMZ5eeSaHXHpkSvkcP6F5+BHd44gLHv43rcfwUB/O954fie276jhnh89jh/95Bns3dOCsNYC16uIcSTFCI4AMwKHwfm96Oxsw+bn2vDYAzP40YJhnP/GbjjuFNpaEsydy21y6jqFEkBKvuqgygIWUcf3ZBxSXXd8kvtJCbqbcdLJC/HTn29EteLgezf9GEt+73LUSsBoJcRdt2/FTd96Ar2tZ6JWmUIgRFS1WWoqxvEMqjUPJ52cx/wFbZh51sUP73lMdJo7u4u48OKFaO9U4E5vGsRl7W3A295yNYaG7sHIgRL+nz+5H9ve5eBtbxlES6sHCk6poLph03488IvH0dPRhDeuXoWFg63IFQgqp+E6JXhuWfavUpWWEr8kzsFxaRCWgItGTmlKmP1ZjU4lhNYWgB2lm6eAJmPzRwTPn6RmRItMQXWkwyonfepes3B5eK7uCeBGW6AGz61JVDUFJHaGQWtMLKm0D9uM1wl911hpWjo7I/M02dti1M+HA5j16OwM3BdKZM7y8MeDmxp9AYTcLUpTzN3dPq5+8yIM7Z3ED36wHwf2+ggrndi9w8E9dJDp0DJTH/zcBCLswRlntuADH1qNwcEcWgtl5JIQHvc5Urma+Rud4IQAz9BKXrwC/5gDa0rALSoBugNWniEORYLJDhsmUV1NwInVV1CdLA7bxsJi7vVsHLxmP0vTvPE2uzpxKcBGTbe09tVD6jOr7Q+OY0MfIa68Zr+y+SgDZGNl54wCGQUyChyJApVKRSzMEhgSNFlDN+QZLJiiKu2iRYvw2c9+Fp/85CfFGiulgH/+53+Ovr4+XH311aCKLcNbAMf4TE94j5T00L4/Unlei+ebN28GpbObNm2W+lMaxL2pF198KYIgJ3UgCOeGpDhSh/FxrAaByFM1MDTn4PRcrAvupEF2nBgUmN1W2m58Jl9lB+if24QP//qb8eUv3ybqs/926ygeefA+5ALKqTxMTAOj41VUKjM477xluOzKxeiflxcVSjKPtBi7aHEOK1YU8MD9ZUxNlvCDf/8ZfvrjH4oTTLrSIEjpn7MILe39eOrprQi8CRBkCvgiAHOA7p4mnH12P+78wQzGx0PcdusQHvzFj5HEw1i2vA//4/P/B/wcLdpyL2gJcTyJXKFHttc9/eQufOmLX4PfNIaZyjSmxunWpxf0HPGxj78X/XPzYrDI9+kJIsGZZ/bipKXN2Du0Fbt2efhfX/we/qmde7Ej7N47AsdvxxvOOQ+bNu/A/gPbaJpXpKmgcDNJEOSBpcubMH/QxdNPAs8/tx3/8Ldb8N3vTiCO9+D9778YH/3otXBdT+pGTEFqGrQl4064GxpI9WeQK5SQy1dVk9QBevpyOOOsXjR/N8ToyA78+J4hPPnYz9HT2Y6J4WmUZ9qxc0eC1rYejE5MIXFzsqUwDiHqtxzL7a0FTE8Cl11+NnYObcTw8BSKLT7mL+jDwGBeBEnsBYR7bEN6y3jLm+fjscfm4v77tmDn1r34xlf/FbffWpGycQ/sTCVCqepgamoSF79pNVafvkJcQRI/IqGAcBJ+bgRBbgKBXxPprIBNg91IB9ogNr1PcQ6xncEfRxtR3h//8X/9nAYg6OPURcVKMofGCg/PcskJzJFVDlqw4qZd/pT4HAAEK5b51HT4TFyjEPkT+Uj6VO01k6GgmYOL90tMgpTWidXUCAk3ZjJ9/iQ/Uy8pi06/+aKHvv5O7BwawXObDiCJWxBGRcxUAszMRAjDKfjuASw7OY8PvO8UXHlJF1oLtItLPXJSirBVGWkOtoSOTZmfndtFPGtEucf82uBAmXFsHvpMDQU1LP6yNQTkaxMYuqTbmt1VFWolnG3Gg5smuz+xKCCzoSmyjLV6x9RFCRmv7DOpMXdIHC5pMF76ZwNR3cvErZ/4zqhgyOfQzCUnFuWy0mYUyCjwGlDAqoKmz+liUErJdwSkCxcuFJ6EUk2ql1LKt3btWvT09OCkk05CU1NTXZIpvEsKYDINgkwes5n5dG4v75rp2nLaa5sSn+tcSkMtkUhD0uVYv34jbrzxY3j44YdFNZDA8pqr34zf+8wfYN68AVk0l2ILWLQ8mS7Y6yPWySzWm3nYMdtmGnXNPvC2PU6ks/ZTNQTEPhQmVdkvuWBhC5advAjlmRHs2bUFw3v3YmxkDHt370dlZhLdnT4+9IHL8OsfPhcrTulAEOieu4T77hwH+byLwcEOFPMx9u59Hnv3bMLo6G5E4TQKReCat6zCRz5yMaanh7Bu/Y9w6qo5uPTSN8DzaeRnCoELBL6HzrYm+fRveOYJJGEFoyP7MD61F4OLenDlNReKRdWRkQr+/bbHMD3miGbhn33hbOzasx07dq7FxPhuzEwfQFgbxeLFLfiDP/wArrp6DlrbXERhZFy3uKAhm1WnDqBaPYDdu5/D8MgujIztQqk8gvkLOnHjf7oGF128FBs33ocDw0/h8stPw4oVc426Lw0POSgUHXR0NWPPniHs2b0Z1dp+jIw8jzCcwPnnrcSq05bL/lOCKwJYx6MfSpKLTDTVgYGdO3bjwQd/hqnJnTjppE5cc835oiIb+A46u5oxd24/hnZtxtjoEEZHhrF/716MjI5h3mAvfuc/vwfVcAI7dt+P5auKuPyqc1AUIEy4ksBzA+GeCk1tuPPO9ajVcqjFJXz0P74Rp53ZhraWGL4TIg4J/FxxiUIV2lWr5mBgTgd279qIoZ3rMDExggMHWLcR+c1Mj2Hx4gFcfdWFOOOMhcjlxbcJKtUK1qx5GJs2r8VJJ3Vj9eplGBhoF86Qe3RFoCX4gXMHcQ8FbBQyEuPZUcS5p35jH8rZieNQZ1u9NZOuBrYTIF+ZOTmVqE1HJWt6x2triYhPdCKUK1OadJo2hdlnO0nOfvri7sgM08oUJ3M7INk7uFeT5rF0E7NI+0T2CYxNObj5+5vxta9uwZbN7ajW5iNGqwwgz9mF9va9uPat3fj0p8/B4DwPhSCCS/TPAiVciSD1VWUXTigrIC6VyeuT/Ysr+bEMRae1jeNwDc/3DVWdQzsH4xwuXiPV7OoEoIA2szZlCmgSOupD7af1lrbhWTXbh2SRieOKY4oB5KVqCXBxyQBNO9noahc3jusYVJfOv8yYNllmp4wCGQVeNxSwfMLBZzLbBJWFAlUDXWGevvKVr+Cv//qvxeUJCbRs2TJ8/OMfx/ve9z709/fPAn0WcFpC8p55EADy2kpN7fuXe2aa/FEiSwksD5sXQQKBsucF8o6SVv6eeOJJfOYzv4c1Dz+KqekpCX/N1dfgC1/4vKjMsmxkcDnlcr6Vr3T9U90AsOp+gC/4rJbS8GI5+Mvm45fbrq9FPNuXmHfjOhahT43qnaGHJPSxbcsYhvdPYWQ4xv69E2huLmDuvDyKzYEAsI6uArwcXZlUkMQVATM04xrLXjwXe3ZPY9uWcYyNzGByoiT7MecOtGBgXiuamtuwY2gMo2O70NvfKlZOKfUCSrJQXQt9RGEBB/aWsO7pYUxNRmJgs3cgj5NWdGL5ijkCVnZsm8Rv3/htbNkYoK+nBTfd/C7sHx3F2Og41q3bCj+XYOXKBWhtpcRxAC1NBMK05FpDIe8jpEEUCovgYuOGIYyO1rBzaAa1aoQ5c5rR3tGExYu74Pk5kb6WymWcumo+evtaxIAR9zXSui7HJS3E7tw6ge3bZjA2Og3XraKrp4AVK3oxf7BTxhet0sa0XhvTHQpVhfPiIjGMEkxMzOC554ZQKYXo7GzBqacu1PFJj4cuMD5Rw6ZnD2BsZBq7dg0jH+Qxd247OjqacNLSPmzaNI0DIwfQPSfA6afPk5Ep2qkoiUcPtsvEFPDWN9+MbTsi5JpD/PM334FTT29GU24GeXED6aMWRvB8H+VSLF4vSjM17Ng+jJHhGYwOlzA8PAaPCwGdbejoyov0ube3E23tRXBqov0aAvlt24awZ88I+vu7MbigD8WmvPQ3ESqK1VlihvQIaNwo5qhPRulAcn0YoNmYhNipX+yhYdOcqk6sNj4nWR4vnGYjfxv3pZwJdMkQU7qqpTfqMtxpLO5VBHcidKoil6wlPp7ZUMFXvrwOd94+jHJlAWpRKxx3GoX8Hpy0uILf/OhSvOfdC5HzEhRzNTiJ+tlMEnrvUYlmbH30OLQ4+8vV4aXU93BhZwPNw4XQZ7ZNDg1x5A5zaNjsyXFLATscpTl5Y8cGS8yH7KcpeaYNLyNHlu80nAWddakmx5b2cdFiMG5ydG3C5sO8mEdKO/+4JVRWsIwCGQWOBwqk+YPDXdtnBJk8+A3bt28fvvSlL+HrX/86hoeHBbRxv+ZHP/pR+c2bN08YS7unMV1PptMAgLN5lnS4l3LNMpKRtaCV99wrSsCpYJEAkHmpejBB7t13340vfvGLePDBB8W2BBnHVatW4e/+7is47bRTxcAIpZu0vaA0IF+jZdcFQNpb4NybntfthG7nYlkR1yAvpUJZ2NeUArbP82yv2ea1sCqgyXXzyAUeanQBEtNgFjAzHUr/aGtTSRzVVkU6l0QCLugWIQxjMdjpezmxvUJhO0EHDeHQYi2HWJ4SL3IOVJrj19ynhiCveB+KVI2CG37no4j7BV1xI1ipJKhUQwRNnli6hUd7Jg52b5/C7376X/HEwzMYXNCBW+94L2ivh4BnapoAC2hpK4oRIhqwYVbUoAyrWh52XrrkyPnMj/3axdQ065KguYXSOfq11LJSEim2SqTcVJ2n2m4kYIzWVKW+NYeatSiXFEhSKkhruixPklQFZNJartZYpZlJ7KJSoyRR54so5B5p3R9dKOQEskY93QAAIABJREFUkDJt2qMh7OH7qUnuFXfR2uoL4BZhVwSUqwnyRcD3HFDALGtSSRlJHCCKPTzyaAWf+uR3sG84xBnnLcTnv3ghFgzm4bvT8Ko+fMJTX4V7tZDcmO5pp5cNLkpNTnCu4VwE+EEghoPEV6e4UqFbSWpgumJIif2hVmNddJsdQXlD+5S01vocDjfMxhxCGQlv/x3CBTY6sg0y+5yelNNvbOaMb6/t+4Pv7fNjfybTrAOjPueSIZZeouqj8n3ifJtE4B975eCCPE5eVsR9P6uhVBqXweYHtKw1iQWL2rHytAHp7L5PXe0qLFFJTqbN5IVdF33lQ+t/7Ov5QinqsHihUNn71wEFbCetDwh5YBgSe52ig4BK9h/t1dK/6+qxHFv8qmj/SgwA1fGgjF+D0bH3qbSzy4wCGQUyCrxICli+Ic1T8Bl/BHIEjnzH/Zgf+9jHZG/nP/7jP2L37t3YuXMnKOnkfkfu4zzzzDPruVq1WUoR0yquNu16wJd5wTLxl86HIJPpW8kp95TSUizVfSmN/drXvoYtW7aIpJPxLrr4Qvz3//4/sWLFMpmrgxxdLbDuhJOhMLnUOjGztOFA0tuXOE1zfucvNRfr1K2PX2b9smivHQXYh9i32ID0HUlXGKLOKc1dQ+zEyBU9NBF0ibAlQqVSFYMuPo11RpHsc6RVUc8JxI8j4xOoEfwEOe0z+SYa01KVSQIOHoJJ6BJC/CtCjdgkHmLx3+qKv8paGIr1Wj/noKUjQIwY5VoJBS8vu/u4p5jSfKrael4ixoSKzSr8aXGLUgZ2WYIh9m4CQydmJenFIkIu8JHP+Qo8CYh8B62+B4Isj/7tVRNUPEH43GMZR2CZKB30fFcsvHLciLEb1oNJ+0ChQDcfCqSoJkq/k66T3uNNGhGYc8EoL2BVAGZAP7+6dY35JGL7JEFMQJ8rSLmDgDZtckpPaS8FpbmCi5gWXR0CPQ+VMBSXMomg/RzoH/Puux5EqTQGxwvxtuveIkaASAsPgXgBkTZOQiQuG4s+P2klluZvE+RyDrry3BZHFVfl2jjnUSpMi7NcNJCuRK8cokXtirViYiRdPNByMg5px4P974WPxqxkwx4CNO2Lo50bnf3QUC+uIIfGO1ZPhA6petInp51u5SzjhH5kKJVJECUJikVg8eIOzJnThOH9ZeQDit4p/q5g3twc5s/LyYAmOA2jKvJc8pCWUPAqZbeJpyVEx6pSLzEdMb5kwMDRox6p0xzp+dFTy94ebxQwXEVdIsny2ba151SZ6yBTV690FqLhLhOG8ykHmBlkDmcp7oWWg4E4GemHyEZ5UfOSSSE7ZRTIKPD6psAL8Q+W96Bk0IYleFuwYAF+67d+C83Nzfjbv/1bbN++XVRpb7vtNuzZQwMf78db3/pWMRZExomHlWbynj/eH6uDINjmw3JSoskzASfLy/ITWP7pn/4p7rnnHgHHCiCAd7zjHfj93/8MzjnnbJHOMJ6dR2thBT6lsEaqpGBSAaaEk/k3VQs7EfORTs31L0AqVHZ5nFLA9glpvtQeYzamuMUgSIgIpEJwb6AuRFTMd5m7EV3k8pR0UepFLwT87uvYYX9hOpRWUqxH6RWlWWqTgQslTM8VS61UN/U8Hz4VA2OVlilv7Zk02aclIfE2QXAloC/huKK0sIacn0chH6NSnkRrayeieFJYDK6HxDTSk9N+HkYqgSPnntBdIQ1v+h6cSMEvAaUfGGk+VTo9er7QuKwS2RIpJy/oLiTnolYjTQL4HlVNub0uFtVhDnkCRg6KXKCRSasoJk0JsFhhHUSioSBtwPRd+J6qkpKKlBbn6X7DoZSQgK8mdmkq1RqK+aKMYyZFZor1ccSeC32MKs8k5m5EG5Nh1MjX+Bjw8IMPo1yeQFNLgDPPakZLEwVnVdHYDHy1q8L2c2l5WhJRbQnSh0CZc43sLSXcJI1kimObRwjZ5gJySSTlB1ln6Q+UyArA1D6hfeVIQDM9ydiBZJ9pui8KaNpMbBK209v7xmDQxrbPD3c+XFqzw2nBZj97CXesn0mCJ3bi1CPtMxTHCwAlwdVG7by53Zg3tw0b102o+Bkuutqb5Zla2OLHKYFPJzd0mkNVXJuP2S+RzucllPiYB7UTyJESTrfXkcJkz090ChgQKOPdjime7bXWz8yh0rfFLZBRr23U3gBLSUe3bs5KctaCBseIWf60CRwvg8KWJztnFMgocEJRIM0zWJVUfsP4IyNlASJVZD/84Q+Ln8m/+Zu/EWkmJYdUR92xYwfWrFmDX/u1X8NZZ52FYrEo8S3AVJVWtXIrDOXLpBDLZAGmBbIsf1ptl4Y5vvGNb+CWW24R9ywTE3QZEQgY/cQnPo5PfOITWL58GehWwdatWqPbAV/clTVApilkogwn4YTBDvrCzr1m7p49b7/MCmbRXlMKNMaCMp38mrsCDn3pL9S/JOjht5zgjf3BE8NXLDYBEFUrtb/wCfsE8UkgwI3fb4IYlZgzL6qbElD6PiVo3KvIsD4oQKvjIqqNJponASUBpwOqfjJvBwXR1bSahUCxKcKume1oaqNZTbLTkZoSpSSRaq40hiO8eyxgmlJNAiIa5KGwjwdBMMsexSwvvV1QvZXzAceMGqlh7XS+CJALKFHk/tQEvjG0w3TiSDUUCbAFpJtKERQyPA12SXoytlTySJoo28P8YqUdqKIcISE4E0kr6ZyISrO0h1ks0v2e9A/qIkpC+C4tAHmoVivIFynAogzLk/quX7cT27c9D9fL47LLL0JHF9uY6sqJsRZrgKMMegJL1ogtTxqwDVTKqzwehWo6V4pmRMIFBUo7TRtLHF28kFSkHFRD5u/lLMCZScfwmy8KaDLjox3skA3wcrSQr8K7uvhFGWole6PSNF7CN3aw+a4jeurdnQF6uz3ZURZWiEQTdLV3oL+3U1YjqmWgwAFGXYXDqaS8ClXLssgo8NIoQLDJvi+fI3Nu2Pmxb3TW5DStK3uaB9/SijI3bXClTvdfSBAZTmkAavPh5MVrs7rDhHQYvrRiZ6EzCmQUyChwGAqQ6SGvQQaSfAdBIdVPqYbK593d3Xj3u9+NuXPn4stf/jIeeughTE5OYtMmWtIcxRNPPIHLL78cb3/727Fy5UoxKmQljC+PoZpdSJbJltHyRUyf10NDQ7j//vtx66234Re/eAA7dmyrS2W5p/QP/uD3ceWVV0D8gFJVLQGqtYqAUEpQOK0yHZ1UFQBYXoRcjU71nJx1UVwXxBnJ8MWifSKsPVn1bHKe3XTH3d3ReWqquuqeTIIwqpVSXJXQQAx1QSnBFL/12t66eELhiKsSSUrdPAUZdKfBwAIQHXpUoFSOEj0CVQ++gFOCNPVHy37Jw6qpEkhFEfupp/sf2UWFz2b6DaAbRkAul8fV15yF9QN7sWLlIJpbmRj3QlL6SnVegh9KFAnYVGWWey2rUSIqq1T5tCwFMaGotxrDljIy6IeS5aYsl2WnD12zl1mhKbGKI/tQKd0j/w9Hy8+EfVfV8ZkCaUaQJlJdYkvrHskAXTuwkohj3hO/DdxUypEVW/V+8ZHpIKpx2x3r4CFw6c/ezGG+1ibwqEoMhJWy1J/15ILV+eedBrdQxK9/5EL0dOWQ0FCQkwNzY3k5HdBCLQVm7ANcVCBQpSSbNOTBOhBcChinBFxEltyHSeNial1MpNcsOGnDxTIB3HYboJ0zmJqlviT9Iv5pZzkIaKrOrk5mLyKN4y5IapKtT6QkkhKck6sCTDYCuzNXANVQb0sT0NpEffAy3JhqLjUx/tPaXBALUrLiISsktOxEpttUvn7B+5faCMcdAbMC/UpRgJ3UdFRZHDlS5Uy4el9mP+Yzjht+hHjPdbJA9P3rqTBNeWfzsRNSQ9pfD5tdZBTIKJBR4AUocDjm+mB+hPeUANqwvOZhAV5nZyeuvPJKUML5/e9/HzfffLOoqdJQEMHmtm3bcN999+GCCy6QcGeffTYYx0oifxmJJsthy8szJaoEuffee6/8nnlmHbZt2y5AmWHpD/Oqq67CjTfeiEsuuUhcspCxrlTKKOQLIh3hPRlIK83V9BWIysK5zMPM2PI6RuwjhaGkx/IlfM4f2b6XI6VggtlxvFBAvsq0hkoJGrXsKMOKCDQILvS7L63M73qiKrCUhvOTLZ9tAWiUcvGevSQWqSVVZ0ViKHsxBX0IPyASM6M6qiBHkKy4FPSpxindjGVg/lSdJWhRVoKSP6q8dnTmcM1bzsJFF4ViIdYhsJV4lPBxQUYBW0R1WrGm4wrgI3Dk1jVXgKBy2qwng7jkx2kkqFoVyasn+qFceGls+7Fgy5BF6qeFY/mYr9EeENrQSJehn2xQZTqyhC7h2P5RVJP5gvs1icm06gT6BLoE6gR2gUhgaXiIkl22SRSqlJBAPnCbTBFUPZW+TgM/gJNQegwsXdqHT3zyetB/zJLlfeCeTu635J7YGiXLLi0WMWc+p1q0UYkWbwAsk7aJTg9pbVMLIHXOZH0UhDf6hTyThQtuK+AihPavdN+3fUwWNbTx06/NtdKxDjTt5GhIVp8sbUwm2ghjnzbOR3vXCPVqXFlQyQpK85tMea8660msKx5sfDYYO2tLM9DWWoHrjABOJzx3Ei1NBbQ254TfppNX7bgNFYBGbQ7Oq/HmeLw6ftrqeKTOr1qZjtw3daWdi5xcYNIVRZkMOT64UiZ7LnQ/AM2J86GmRtVxXSmT9cX6JMPxxhBcveMb3qfH4K8abbP6ZBTIKHAsKfBC3ya+T4fhfKWSB+VP7Hu6PyGA7Ovrw2mnnYY77rhDLLvupS+7kRHxU7lhwwb8+Mc/xsknn4zTTz8db3zjGyVsR0eH5MG0Ld/DdHlNMGrztxJQPrdSSz4jw8v9l/Tp+cADD+DJJ58UcMu9oqVSSZjpYrGAlStX4IMf/CCuueYaka4qI+2qpIh7pGSvF1Xy1KKs+i1Xhpc0p+yE/LBHo0C0IhnRZQrpwH1anHcJEuxWBs7L/JE/stfZ3Hws++6xTsv2M/avQw/2zQiOq/yu9kVK8YzGkll8qLewSLX4DWf/0H7AnkSgx8+3PmMuBC2qWqufdfYh25f4nuEVzEo/ktcck6LsKu8oSZevv1GQYh9VQ1ax7BddtLhVFjsU3IViqZYpMwWVoqo0kvUm3yHuNQRoshyaP8PzjiBO+AyOAy9XLzvf86jXnzdW8Yq1pJRfKsjKu7qVzgBUgnKNxzEvuciYVzpZWtn5RiXL9bwYXAC6AX1sO6oEM20BzwkcbrszIJAjm/Rm4aiuKwsBEaWqQG9/Ab0Dc0H7S1wb0pIQiHAhwBDXnNiIrh3rprvoXChkmPWPbdE4WH/e2blO39i4tv7aBe280YgtRNXYBqzatO1ZwwrQtB2aOTau04npNRv+aO811OwMDk3llX6i+ZPsbEKdbA9DIFKOHymujvqqgtDW7qCrq4Tx4SE47hQG5s7H4CD1pmn9ivri6iA1FxRkhWhWe73S1crSzyhwLCjAoWCGKFct9dCPlY4Sndj5EYpkqU5XGl2uJvIDY5gf+TrJBKOAspEsr5geQal+tOoZHovyZ2lkFMgo8LqlwOH4jzRfYt8TEPJHFdprr70WS5cuxbnnnos777xT1Gkp3RwfHxdV2qeeekpUWm+//XYJT0noSSedJD9eUx23ra1NpI8WXLIBaOBnampKXKrQyi33gfK8ceNGMUBEVVk+4x5MlovlpATzlFNOFXB52WWXCBimASO+s4CZ86wIEEwrW8bQ7kOjxKlGCZFbEJU5vqcqnjCfqJpYZGYNL0RWxzLVwoxa8PC67UYnVMVt35ldaPLiKomz7Uy7IZYnted0HF2o4LdZfwSZFihoGvxes9/wMfuO4Q/qfUdeaHzLOsgCtEbRtFiGuvxKABOjU2qqexUj5AsENZSsE2/wheYpYIxZk4UwHIQdz3Jfz9MEEMDIvqwHx8fBh2BH+9AwKXXpnSBPvjQoTuqr9U7na6MrGNe8lXfiNWnYyFfSThG/wWMpqS2EVfoqOhGcyR2Tvm4LENxC+zxioTZW7xgMZACq8GEu99FS7ZWEIl9WJ440W+rOFl/OUjStQuo5H7A/SWL1PsQApIPSQucvrW8qav2SkLneY2ZdSTpxTJNLmqAGO3wRORE2wsnlcfhPyyg1Nvia9BdVANkgbXzbiCEfPg1FbzqkQaDIx4YNY7j7jiE8tXYE7R0u3n7DybjgTQPI5clk03dmDS7NJHPlRAa1VRE0+dqBeRxSJivS640C7JOczHk2k9RBkxGlmKGoiSdwhbPhCjmnQkf2RNQimirnXqhY9i7QaxPfMYRMB7IXQuY5o7ZFGhOi6go883UzNa3XW8fL6ptR4BWnAPkRy5PYzMgQEVwSDPKdlTISwBEUTk9Pi4GgRx99FD/96U8FXO7atWtWHIYl8KMqLQEmpZutra1iPIgGfeyPaXNvKCWU/HEfqAWvY2Nj8ixdPhofomSVarIXXXQRTjllJXp6umVvKctG9V9uz6lWK/JM521bM+VhyJzSmAldRoQx1SV9xKEjkhCXoMGZQoKyzLkOuBien2W0kJY2mZJKUA7P5zVyzK6ONwqk+xMZfpVcm+87eU/7fbfsaJ0ftWIv1siASwEVum9Q60mwRD6BwM0sRJh0GjiTD+yPsZinAXpGStpIQ1MVPoHvHOZFflt5EoUT3IJGPyYq7ZMeKf9sBahlpUcDu9kn5oUtq72tn205bVosOnmTg5+TmzH1ZW715JXHkfDmsQA7BRcNOkpcQ4N62vae9KwnKKRTephCCs2YJTMgz1QGPUYkUUGL4XELX8gdq0qnWFVlBTwL0LSaC2w75pPKq16WOkFspqlwDG/pwX5h00inw2j23oYlKQ1dTR00HYa0YWefHQs0tRR8aRHswQU8Qe5N/Uk/IYsZf66xxKULKZ6qC8Y1AZshiebkEYY57NpVxZ7dk2ht8TF/QTta2rhqRJXaqupyyzbcHCD71dQ56glCmayYrysKsPdzIuKZqq6c9FIEkAWYCGoIgAtNNAHAvcv0PaVzi4wL7ulw+fnQPQ+cQqmqRX0BG1Amap06TJ5khZg3gSb3T9mJN5V/dplRIKNARoGXSQHL6NgzkyHQ5L1dhbdSzXQWfD8zMyPuT9atWydqrVRvpZorJZwEqTaeruRrujZNAlFe2zBMm2nafPmeIJQ/Si+XLFmCCy+8UPx4Llu2TFRk+/v7BbBaIMw0uP+SB9OmVU+drDmpMm2e6SLCETW6UOZuT7ZkVktAIUfpBwHouPAprjDvTbLXS5hEMzfb6b/BtEuW2b8TiALsZ3oQaPKaH2sevNZvsg2h32U2vjmkH9l7qlvzG20BBhdn0mBTOplEZH9pgE2Gt3kZYGqTlOeMYgGbXXBmHP7SwJbhLNA0CdTTMflJ32e8xr3czPpH3oIR+bM1N+Wz5TRnBZm2TCLml72N3N+o8RundEpMV3M4XLpSugZNJC9bHkNPxjYJNoCmSUv2xpL2XCgKdazHOS2OOw1HwDlvC0BEUK6mecU9Spq/q9OA5UmXntcsjz3stT3zuQ1vy23PNk76zPlI20TAsemP9blyVl6Mp4t+hwWafG0jprM4Ia4tzQ4CmnRiQlYasRkc3LHMVRb6+AF9zXgIY18YbW6s5sCiLx3XrSLwY8RRWZjywDcOURPqg9M4immwersd3LAnBNWyQv7KUYD90K54mZU1Ozakr1IdvCpjgJ1dDZQFSKj2EgNT0wlGx7j+qCAxlwPa24DmIqctbuBXE+iyh8Kugsr8xEws0OSnzk62v3IEziqUUSCjwGtEgQbDPbsAlm+x7+2Zoew1zxZQcs/mc889h61btwr45L7NZ599VlRfuZeTUksbj3GYPkEmn9m8mDYBJtVru7q6MDg4KCqx3PtJULl8+XLx80ngyTTSh02HoNOm03jPCXU20OSsW6MF211VOGEARA5yAdDbC+QK00AyDRdFOEmTaF9JWoYXnzX91/mVRm7Z1YlDAbGpYICmAigFjdy3KcBBsB4b3jS+lbzJt1r7lQI/ggb5cAuIUR/sNo7hbg3QbCxQGKDBeGmJnSWf9C2GIagz5TLvZkkP7QK4jSfqm7M7poIaO9ZsD7YReM+y8mzrxHe8t2HttQLMhkST8wEXz6mlZRbDrXSugQuNBLROIcPt27TTedl87NnSnmfyQFqkev51w10Mb95TF0yiU2eW+KTEpX9571A7gRJNapMRnApu0bzqGERzMbSwNwxzuIPPLa15Pvg3O47iSc1PQbG9ZtswbENAmS6P5C4C7aiWNCZMm9mJCjSlWko0o76sghyK4Ak02dh0kEPGm7aRuQpYERWEhBIdSnMovjGEi+l3J6HFN6rhcKM91VR82XuGOtC0DUJq2gHInCQR+zI7ZxR4lSmgE4Fmaj4IqeHBvhqLDyp1E8CFljjhfmQPlTLw03s34M67NqBcbRLnyMuWdeOKK5di+fJWmfwc+q6SyZwb/43rk1SXj81YoCQ0GwuvctNn2WUUeJ1SwIJCVr/B1zSkjnzOMAR8PBM08ppAjxLN7du3ixsS7qukCiyt1BJw8pqgk5JH/mhsiL+mpiZRryXApKot1Wx7e3uxaNEiMUREAGrBJY0E0Q0L760FWVsWlsuWpS60Mm3IezJ3ZFlqiYvnh0r4+tfvw+geB4HL9MZx/Q1nYPW5/SgWK3Biqs3mxAehMIE0HEKDb5yLyVwLcUzi2emEpYD0CZEUKqhrAEflQ8VojwWY9mwXhaXWDGeljGY7jDw3/ILhYTmOdCzxbMlFZsLcWL7CvpLHBEhMW8umMkFddJ4FNqWzz06gMW5VQ4GgsZFvOhMbz5aFZ/vMhtN7LYfCPFGhFTVa+o1kmfgzPimZAqtv/mwqHDXKy0hIfWyzrQNbPlDaa4A02DRRWF+6jKu3G+MoXcS4l9BU28U1asaqFUZnpXarHl3NCFUkUe4LtftONRc2QL2h9JH8Z1788bBnXjOsxSyHi8f5R+Mo8LdSYeIjlTbLXlumdGhDSW6ya5eTnQbg6pkGbjyTcCfIP1JDVVDo90+Jp43GTq8EZaPyoG1k1pW+aegrUIlJBpq0Crl1lfsx3RwIOAkwGaFa5X4K40sz3SZybTsZb9IvTZbZKaPAq0aBdP9LX9sCkNlSK2+yQs/9PtwfwC7sAFu2DOHOOx5HqTQHdAK9+rwBLF8xF0tOapUVdDW1xQmHM56ZtNJzF8fX4bK12WfnjAIZBTIKvAwKHI03sYwOwxA88kxgx+cHv+O9VXXlHNje3i7WZ7mXku8IBrn/kgZ/uL+Teykt0CRg5L5KngkurbEgm4/Mqal9pHxuASfdNtBICJ8xTT5nOXjQlYA1/pMmDaUv8ouBfbs9/PQn2zC0mc7tc4jjrVi9ehnOPsdXsBqr1U/LBCpjWzNGT1JqgukMsusTjgL62eVHtgFoFHDoh1iXFNIAYjaAlD0xHBcCqvjhZzzDw6Y+65o+tfysgU2SSuMpE82oNh9NRgQ2dbCmQE7SSdLudphOJBpSgk+sdFT2IqfTPBwj0XimIFbLNBtApZuUPjGVLjzJNc+sSd0Sb5pt17BMQa+UskpTQXn2hUTSojMk6ZA+GuXkU5uWhuCdoTsX+Qk4JTjHKp8bDCNgmCqz9jnzMAIvzb2esiQgmczOt5EfI2gpGqW0Ye05lVwjkLmyYWwaPNtnhwSuP6gbzVUKmAikGi9fXBr1xOpEk8gHEzwVTC5Nh643jC24LYMtP5/zd3B6h3vOZwSUCrM1JdOQlnZ8ZYsiwWhK2O7tYFh2/ET93nAFIaHDV1WlDSP6FKTBFFWZFRIZUtkkG2eWhYfplPVM+Sz1TgPJ/9lP7V0qQKPkh2kbhrdxmNmsDE0i6fcHPbLZHC6affeC53QZDm6vF4ycBXhFKGD636y0tZ24ymdbjGdapRO/VHRkTAfooG+5OaJiOzXVhKlJ+qqCAE2O9Vj8TxFQMnaq+zEt8+iw3XBWWbKbjAIvgwK2f9mo9XnrcC/4LP38SPOjTexoZ6ZTz+xoAbN3rwAFGsz10RO3gM+G4r31jcf2I2OrwE8BH4GexlFQSkY0CFwBkjQIxKPOoJq+pGXRRXphQE3XoPs0xqcVTLom4Tum7Xv0jxcLf09feAIo5b0Cw3q/SneverfVh8xzZBQol7oQxQXQWTycCXR0tIk/QaoqirVvWxaJRp6GTCoPfpct428eZacTkgJsWrZ14zCLu5bHtcDNyrtSvKrG5f/GlWrkMT0rsVK1bRqRkvEioXVBRL7v8o+CHSZMLUEtST3b+kzJF7p9h7w2D9M91XKq7E0k4GPe5L41jBZN87Pl1LOtsUJkvVMIeHA4UyQdu/UxbPGd2p9QNVVmrfRQSKm4QeMrjbVcNh9TBpsBb018Wzp7tryQBmUeSmP73tJN7xmKefNHTTGCTUMPEaKR3gSlfG4PLbfcpcvDB+l7KR+fmfRssulwqWc2aj11eWeeUijBfmbTkj7Ad5xrmIe2pU3aT2Iyl+pEVLYP2Iy4nZEkURprx+A7mztTsIfEYWgSgUCPEj/bOBrIJmtKQePghoA0rMNDAWJjQ7J5bMTMdT1q5i+JMTzzNCt08px5+uJMlVbY5MMhPgFdxK6nJODKokdNElaQ+rU0DazMsvZzpkdT49SFpnphWdQJo5iidbp+CBAZtVyq1LLOLp2zykAzg6JOD9ZBfQ7W6cZ3sgnbvLOTQJ20SmC1cMUwvLcif7X6WU+LryUvhrH05zXLYQzAMIwcFN/aCYTvGxODDVFPig/kRld+SMdZh10JSoXT/FkGtovtZAfFm5VIdvPKU0CnzHoryAVnB7YTf/Tv5CFm+9JENjGpqGcBQbEJflMnwlK3hJ2cDDExTudunFzYx9RiMyctmYA53mj8h6/YfZg88zPdX59m/zMKvFwK6BxYZ+iZjGWo0klKxzOdUDqg7f38NvG5Mjw6R6XmQBvRAu6PAAAgAElEQVTMnKWL22f16VDHTDq7Wdf1j+6sp79aN5a0L7dWKZq+nCQk+ossg7hLsPkJU6QNaSWLzJ9JWbcIBIfS7gxmJKCp6BKaz5kuw8p3kXOmNQakkLIuLWHiUgZmYn7sv1TBk71rTozAJ8Bt8Aicg63EU/soxOm7pOUCYQTs2jeD6bCIStyMgushl29Fc6un7hBmMWz2U0xJlPoYrBfEfuBfTiNkcV4lChzc0RsahywAe1G1UoUf5JDQiFXioFIKEbhA4LkiLGEz0w9jPSV+6k0nZ1/knkDOrA1OgXwA+7can1JeN4HvR7RkAi6JkMWLYj5jYhwhOkpsHpoe+cCaGLOR3CmxE6mdGQs8cbFHeI/GKGNclkbmeV7XXwnjkeq1ii9oLEeOOiCzGESxgM7jDkIzdbOMcQgc2FvCgX3j6Okron+gWWhF1y7CAzGS7JGkD3HSIy8DSepned9GZRt9Qcpqy6/1tMVnAwipJDSprdJhzVOtyTJPbvGzWEgnI2ZkU7F8NXkt7tZWsKmWfEkxC0pJK0NgXtiyMm+blH0m4Wjn1DwwWbAv2ZwZRF0n6YJVEnMGC5CE9Nahi3acwjxf21x5yybBVnGUwPUd+JwsxeBZzM3kWhB2LrrYS89Zog9uJ05bYFtYWyJhXpkZi0bA1qiX3PBfPSw7BMPRkhIvtcYUY0vnsGnXLWMRvNZTMY3BvIwaq7ziqiVF5EyPPYKIUJnoOHa5b944OKbKCQ39hGLJiQ2kK4G0MMv0OPETCFcBl4ZPArpTRRh7KE0DM9MkXoz2Dq5S6iCVrEIXLn3hyBKG9kjWSsotZTI38p4933YcrRe7qA2szcznDGfDarjZ/0kvBZGMq/FMOjJgpAQmXfW9w7dKe/tOU9TnOsxtHjo49M2s1rQDTpIy+aUHiYDd2enbNLPzq0MB22r13Gy/NH2KLA9bm2NPJr5Epzh+mPLNRTS3t2HfaIC45mJ4eBx7d43CwwDoEckPqAVARt03Ptq4eZ090FWQaTNlIbJuYKnxOj+ne+RL6xTKgJB87K+p7fCzKGrnIc6XB6dv51G+Osrqh8yZWk47E8oYqc+tszI0Nwfndbgw2bNjRoGXSW7xI3hQIdJJKbg8KIC5ZThlfvVTevC1gE6GFYaSC89WEtPoiupTT3P0fDKX5DcMI6jTsHZbfs/JkUTqwoTJMhi1TcgPbt25D1NVB9XYRy7noqm1iFzBlQV0LYCOFmF9ZLhQA4tMqB0fh69j9vR4o0B6vjTqnukism1d5fhqEVCqAE8+tglTY/tx7jmnoq+Pi8Ta6rSBSZ5Yv/hk3vhApfTCK3OBTgCEPqfwqVp1MFOKUQ3LaG5JUCxqn/UcCjxYNvZd7efsa/KzRaakvs7nqkCHq87S+/mPRZAkmJ8dK+y3amhL9ABErdeMO7HOyggcG6ZSPEseZgzJPfmQmvAl5K/J4+hoMvkB2Dk0jh/c8hjWP/M8Lr3yFFxx9ano7GgBcbOwsNzHLBiOdvi1fPoNkJwP+VfHG3UNMcahoaF0UIMHDAG0JWw4BYxABW5dAKcLohK8ngxtaJDyxD2kkM3AgG3Lc9cXW026hlcn0aVN2FASm+2SqKDNJmVSJQ9Yb2JZpGNcbjFkXsoT7tw+hnXPbEdffxdWrpoPpwjBRfSRKuWWPpZIk/m1kBZVaZIbiEoxOP+5Hpub+wi4okASkyBc5eCZB0vFBuWZBFGiaOsY0tQry4LxPTupic5TvRPyITuKEp2XQgxFOCavdMQGAVKp1S/jmBJLuh2p6dKFcUofc+O/GWbS8QTARrJJXtrNDBShb8SiunCoTiO9iC4ffMxMA489ug333fc05gx04KJLl2Hpkh4EnmlJW0yZ4e3WYa2eoXwKNJr6SskZ0f7MFTt7HWSTQqnwQmI7fNjpTBvUhz8DmPBMlrcSx+ZhQL58DOWFyZ9SKqbLCYGDn+9sHF4ZImlidZo3LmxGzDs7jgcKsPXYXLaVG2XSJ2xT9i2ZkDmhmADt7a3o6WvDlm1VJE4TZqY9DO2YwfQE0JSjaX3j60n2XMhMZOYEdj3d/8ykZE6TAdbIObt6vVJAeqOdjA4igu159jHvGV7PNqYuxinjzZD2ucS2TEd97mIIm46aruK9zKVW1UsimjwlPnOw3zad87QU/KwzLiOkI9k8Uo8bxW5kL1HsnG3yO8zJRj3Mq+Pg0WEnkpdYLttiLzHaKxT8sKU57MNU+x6lLNo/Dg2r/Tbdf9ifzDd61h4x9jL2E9qJqCIXuPAookqoLhuhFnnYsHEryuUEQT5AGE1hYF4Xik05YdwVuGp8nXttnsyLFdN3R6lC9uo4pACl5vYQaToBVMhtLHlUuUAcAU89sRPf+da92LdrC+b19aGvp1sxHL0rWH5X+gC1CDkhqZEoNZTJHmqFPA7i0MOG9Xtw/30bMTZxAGevXoArrzxHwSp5au4pZlfiPCrzJvlQfu+VlxABkKBbgh0G5JzKswWdpjYyL/KfXKRAp+5JtvuV6+NKMrETP8cQ0zd9nCSSRURe6NgiEA/DWBZoqjUuADl4bM1W3P5va7F7aB9WrlpI/UUpYS0iQmDVVAVZFp7E5KGhFaWI9W8MQ5oxRdrW8Q7DqpalrZGOO4Zh4RtYx5Zd5wYLHA39REKrdWAzSesT1AuescCcQi2mqFqYVi1ZsYKhr8lSs7btwPhMm22m+IFYh12MZeFilgB9yUvVpqX/iUBLqR3WYmxYtwv/8JU7sGz5Unyo2IzlK9vhORQcMiHtr1xcY5r+yMgEHnn4aTy/eQfmzp2D1eevwuCCLsQJfUxWBZollFogr2ogUnAW2G5M5QZWgkiuEjMcxc/MhMkT0NA8OHWNgwbCr7dACqAJxUg1VpwSOovyTWOm6KZkZx5sNPtCL0T9lYArNvsSHPoGZFkCRNQr1lgNToVPmIXM5RxoZrAZZ/OklxhJiTxMTdSw9tHt+PY3foQVpy7BwgX9WLq41/i+0TEn5JFipcvGTEkz0oMHaWU3/vLeWv7iNZcu+c6WlMTiT3WiJTrJZNITYGjobzsag9dJLBFkBtBBKG/4tk64xkRACa50PHZcEoUHw9kf77UsMsHY23qajMP39icJZP9eYwrYlq7r0+sgkVKxm3EyN4vo8Ezz9vd2YmBOG+DsQ+A3I4mK2DXkYvvWEP29PpKY1g45OKhSbsaM9EnVHGD3YVI6ZelH6DUmQ5b9a0oB7Q1aBNsjbYH47kjPNB5ZCQ3BeZQLoPbDzPf82bnHnk3ajCSrwIxl3xm2pZ6tXWFh2vyxvzKi5sgPtyw8moVKW2rbwxv39Sg2auMsadl0Z8U45EZzPeTxcfJA2+PlF+b4qh05Az30SnrGEaqoj9kPjxDANL/pXSkSmVz4aTeLetJ3uG1HvvP6/a/zTdzHyUVu6a50FcVuRG0pYMfmaWzbuh9xrQt5L0ZYmwD9c7a00tKs8ncyUphunYewjGmqSNnlCU0B9kEFBjpjVWvAXXc8ivvvew497T7imgLBRIRFNST0riA8Oxldy3+y75Mn5bzEPq3zH7evEbg+u24fvvetNTgwukek79dcsVrwJfMV+EBpGBeVTR9mB1TJuRF8iACKSTNCRfNxqI5KDUHtk4pHKFTRudmOnYNHGFOWd3Vhl9HGMhCCfV/iCO8sDLLUSUY3WXG+d4FqGVj31B7s35Ogq3MJ+vrno7mlRd7RgBcP4iuqFHPeVwNIfMp3LDtxBQEey0+sw3s+58Fnilts20iZhD4MwTRszTQ+nxInqVCJ76xGZUPrRmkkw9sI5CzANPWyWElXlvRbZbNJn4U/s2UgNW2ZVC1Z5w9xXmfcrBBkVuHKNgG2D5syEDxETU/G3rurhOEDmzB/SS+WnXoxojgQHlK8R2oUaX9/59Bu/Nu/3437f/4Yzjj9VPT0dWLevB7KQMWCmcMEBWzV4AgXypJrgzAj7VyWkaSLEN34zkmTkyNROwGQ9DUJzyiMyVLoSp2UWBLjNGwBrHY8bRgOGksx03HrDVZPVC+IoCV9ljEBN+azTNRhn55JMDlZRWuTh67WAC7LSO/HTJJW4OzgZSeTvsqORmkm97AyOQe1ShFRtQ3VmRZEtSK1X1CjpTgqAbPvyD5I1W9PjBRXO1ENcLjfkysWealyXX2BcZRnF3PLDuvKAjBR/mPH50KQVkk/QDLAJUNpj0Q2VJt7gmXzObSrmlJHWSWxb7TltPIcxsoEyWAW2qboXW8gHc1U1W3og9twtr20VzQGlOSQ/XuVKWDHpmZr24h3nHXrKFDHL5tVVCi4msc9SEB/XzMG5xfheyUk1KV3mrF7TxXr1g/jjLP6UcgzB/YZSi/N2JGPGvdy8JGuqx1sY+5VJkOW3WtOAfa99O+lFMj229SinXy0ORFa7QuG4dxD9UA7B0m31n8yH/Pjyc+qTKip0kjHNxIknf84OzYOm56e9dOq3z4NY8tnYpgP/SFznwRjuvbXyOHEujqovi+r8Gn6vqwEfqlI+n3TJGxJ6mf9vB3W6itj8CvJttVzIw0+ZRoN6igLx3v2Ft7V85ArtZVAiQkV+3S/lQ3Bb7gym7oHDqjVaHiNfIOH+362HRMjHpLQQ+JOI58v///svWeUXdeVJvbd+FK9epWrUIUCCqmQQWSAIJglUaKoLLVCa1qdNe2Ztmba07Nm7NXzw/ayf9geL7uDJbe6p9XtVrfEIEoMYgZIECRIgEhEDoVCBVSOL7+bvL597q0qgABBignU4AGv7r3vpnP22WefnTdWrWZZFVtYBmmleKHxufzMtkq1+ObfjxsEFD/71lbrzCNCk48LnDkzjiOHLqFUSGDLvVvRwMKq0UeMOMQMKi1IBSlcki9nmQzuEz/JE3Cdl8VbeAS3YsItZQDHg19OwSMLq9NhiQIIE2Oqp5F3ZTsYwSnPUWRV8jUI5RRLGK+gQsVBoFHwtaAEWhXzrBhsPk8xuXwmWeAZ44k0jI0LsVrWAfLFyv5viIEqcgOlXKGsLXyrbugwDV8MTt0XcujuyqNUAnbevgTLOufJIylYer6O6WwFjuMhVQXEk3RdD2MQZ18tUJQeB4xBpfs7+0XBkEKYqZRJIb/O/ovLvAjSbD7jEmd5bcWNU+bhh9ZAMvuhUYmNl/dSsSpcVdgtBWclfHP4FExE7JFdyh8UgHmgeD0VzqdcZdX1hI+0Tq6inOQFrtRR9zwLU1kPxVIRqXSA6ioanlgekv9MMF8N89wsWNiK9Ru2Yc8rr+Ho0QuYmr4DVRkdpmbCkEzf7JPCDJOm5niC6bnrkUrVQUccnqPDitkCeFfqSPIGmp8dZf1g00SzwIYqIIgwFdAkryRxIgiLv/M1lKJkK4hDRKJvKq8TNFRtEUBy4PglgAlYBQgysgxAFbgr/OEV6nwkgIq2UGGny/Th8JXPtWglLBTyGp579iCOHe/Fys6FuH1HJ+a3JOUN4TCpAGiZa9RKSIsF22VB0BhgTQAmYWhpaH6VuA8yboLKDc1Qbsa+X4RucMJwsaClV1lJiVwyOcPBF4iEFlaBoWgjlXsyhVf2HAaTD7GIq0rTHmKdktPpliDCJuGkNC2cmRGc+EwZE8JR4EzCQpfYWcuoTGlZlNhNvlElG2KmK1EOsA2SJIawUARAfpJJHo0PF8boQ0gqaEa/3Nx+VBDgmEVfjolgVNiYaP7yErW4kFwbom1XhLWmWsPiRSnMmxdH34UCHCeO0XEHh48N4d7xZrS1kaiTmBFxwxpPPNJ9+Job5h6jOoLkbi6OfFTwuPnejw4CxD3i3BUtmEsq5p7j7zwOt8IzzByHDNFlDyMWXuUdQqeUF4libNQL+Si1mhD3Scf4JX3jh9eEGnl5Jp8bvTO0PF3WPLXcC8MQWk6J8TPNlSfymNeFa9hl9890M+ruh74NO37VzeVDwZ5d2bfLhuodtP293v9u33f59Qra0V92WYmNMl6CL2yfwpMIILMwiM7N9iG6JtryOfzyc+W++o04xC8FQT6ZdJc4ymeqkBVdN8EM97pBOspkbYbEZ06NAy/t6oFXzkgKCc+YwqLFCXQujyGZ1MguyEeU5CEGqneo31WvL+9bdObm9uMHAeIXdcDkQXe9cAxDgx5sqxabNq9EbX06lD+IV8ojkbjGkDihRSFPLoYhYqLwkhR4KECS7bMlN4kWVCHwXLhOHI4DmDEKdy48vwhDghoV3gaBrQTNUOiZwTKWFxJLGltLvlh5SkIsm1SOJGd4E+VNGCYZZCuFnVeGK/IYSphj45RHC2cY54eivY7U92b9WHpWRnOWVJ0yDAWtiqNj374LuHhxSnjqFatrsGRZRuDEJFsnT/Rj3ytnMDU1iS3bFmPnHavEvKmmFd+r6oXzfaokonKlpfCljEox4bFF8A4dJcUyKoa20AjEpUXaw5apVkqYIp9Bayw/IguI6CB9VUJ9RepvKtrEigDK/VmEy/Ce6F4pZ0TDkzxflXWRPC4y5hSUaPjjmNMiy/EjrD0wvNANfJw5M4SXXjyDkdEx7LhtCe68ezXTTonbsRoHCu/AvLYarN/cgV2v7EP/YAGHjgxg550t8DQmouJax45QmRHAXLiwHfd96m4sXbQUixctxLJl7WIepxROydVxdWgWYx7ZGBe+bNlYmr+JCRQMKdQQbly4wwWfZ0XjQQQLmQxa7bigi2kuXMAFUrxGmY+5p64nIQ4FLwqZoTDODgoAxSozh3mhYMvyDFEWTGkdhTQTXmAgmwvwwvPH8dxzb+DuO27DovntaGmoQkyex54wp1ZZkgHpJhGViKA0DXyfpCwnDkiRZzZREwsv3VloBZIMtESgyO0lLGevkInayCi7LicbYaMst6q/yhwt7xHBVLkjElpKSA+ZIFFOEBazGg/R+kRByKGwKmsMiYfB+ygJe2GsqSIKMhyCdLSkqvZQGKX1ljAXi2qYEEoSKIibAHsSXjuD0bJz888NC4EQb2bGKyT/gnSKyClGJJp1goEy/+IWsHJ5A9ava8Jw/xgqFRfTeeD42TxePzKJexsySMcMwXKGKAv+iNbdhyHCJl/K5wlhuGEhdLNhHwIEQuZD0SVF3mf2o9eTds05RZ5fjgU15Y9gktBEoaARXnEdoVJPuZJFj+PFmihRKETyE4ZicMniofwRgqkOwnWLGciZi0BhbrSWRZisQhrUrbMsvBzP4Hr46OgVsmVj+J9X8snq81Fur3x32KSrbqJrVQ/UUfTbu9++1/vfK+wuf380WlwZo/3Z7Sw4on5e7dzsVeFehLt8ohp6OcFnqDwRCrtm3klFHdddycqpbnA9KqxL8GFBNzLIF4H9+8s4d8YBvGpoQRGmWcCmzWsxvy0B2w5ZL5lrpPvsD/F39qN6OLefs+du7t2YEIismdE2aiX5cXLIFDQpAB4+1IPJCQ8L589Dx5IMrDg5bXJzlGxC4w/5c/J7vi1CDbk5UXeE3kcUUCjUiHefwbhFWgFpcYxD08ijhjSZZhzflGoLkoGZimThEWlcUjMkErZ4D/FQDywROCjQ8CmcAYznpFVW9DvyK2kvhWIVKykhOfRc4TMEr3lexW4q183oSj6RAjSFZPKwFPyUoEay7nnskylWzDOn+zEyPI35C5rQtqBaBGe2kEvFqZMDePihfRgc6Bcx5tbbbplxFRb6LW0IYSmwCKCLHBITZbpUzJBMumywHyriI6W+Ul5KV3ivyEZsI2UWCsumLG0SFikg40UU0ihTMU+GghvHi7yW4uwEuMrjMkQM+UUMSiKVhatN5P3DEacsMrsIisemrJOkHxZ8V8Op0yN4+ME30Nd3SbJi37ZznWQ2loWLuMIEqBoQTwNtiwxU11noH5zArt1HsGnrPKTTKpuxJhU/VIynmU4nce+9W3DXHcr/msmABDdJJHUiiAZP3EtpXWNyHOXmGXiUethgUxLqSOCsSMfqwcp1loIX4UUiGiKgmP8ILJLdWfIthJbmdKUCCMFGpAqFzFDQFK9SGQ0OePQcXs6Ms9ResN0k3LTIulK6hamN2QZDa4Lmd8B32uE5VfBJs8UtWCVAotDIIdQZqxjQXYUTT6U8VhMmzLwk5v8KPGpnxOU1gK/5MGkT0hLyTkEeJmmSkSfs+OULPOhGNCkIS2UNkkRLUhDXl1gMwo8TX92vAnUFWlGXI3hy4tFyzHZ4urjyqjWGmiC2nSuQslpxENTippBYEFl2OYE5QRUrpPNy/i6CbbRaKo3MW4VNdnDuOIZDd3PzkUKAIxKSobcZH7UqCNkPcYMLGrGAC8jihWlsXF+NfXv7MVGuoOKaOHshj2d292LpmgyWtBuIS9ZlnXQ/JJREGkUbxK1ECGMIiqhR73X7kUL2Pb78vfY9uv89NuNDv10ho3rtlfthn0RZKXSNBJsLolpO1ZaUi8vsXCaaN3IdCNeCyzo191our1xkyRDxP1/C86GrFX8UzxhFXPnUuTRNtYu/zjJF6prZq653rO5VdPh6134Y5yOqfbVt1Psrz5GiqBVCrQ8Cy/AirhfXPya8w+vCsfow+hr1R23ZgOjDRS5qj1oZVXvmXhNdyy3Pztww25fop3CrLmFf1fUCM+JdGA+vlB6EpQ9drAvMX8Fr1YJLZpzWTCrxyY14QYCBIQ0/+3k3JidT8HwbllFAddrDrTtaUVtrizVTYBs1PTwQ2h79Jg0L+6M6OrdzN/c/RhCglYhGH+YdOX+ujMGBQOLjtm5fhfqmNHSbwtWsooG0LwhiwpB6ngGWYFDcoMI5Ybt1GzBUYhsl4ASR/CiLu+T/CQDLpGefKbym5D8h+aTARPIZ8R2cWgFgEK9FCKWgpSS6QAiqyutCS6KgKmHPa30Dum6IxUwZt0i3yS/T2KMEGPLslD9EzOTjKQ/QkinPFQI/M01VUlPyyBq6u8bR25NFqQxs3LwcS5e3yWpCTwCPvLqXgVtuQqXownczcMriVAiTzoOcpyJXKOFQubfSjZT9CuMyCe6ZrwdNLyloCNwtlXuFQiJlKsoXIb5RDtFFdlDLmQybGPQUI05Zgq7z/Ei+GN9Ux+EcV/bbkDwJyeF5EWHUjCdcKJspYUJoDZ9GNk1Ig8Y2URYy4DganGIV4C6AV7JQzqUl0axmKgFb8IRtoyutZWLe/AxW37IYz+86heMnhtHdXcLqVXHpG6HCV9OYZTLot793DCND02hoTKO1LQM7xqySKvtSbrKMnu4pybra1l6DdEZHPhvgUl8eI6MjYgpvaKpDy7w61DKbsuXCkDS47KyBStFH94UJFKYqmDe/BY2NBiquju6zUxgYHEHgu0hnqtDcUouORVXScQ6BYfpwWY+EaZsLwLnTF1Eul7FsxUKk0jFY9qwAKlZ/DThzuhfjky7qGxrR1hKDbZko5nUMDpVwrsvDUF8aXmkhxoczOHWsDNMvIG6XUVtfheb2FOwq8spMzUusCxkaSvBiBiai0cxHH/MyNIOlTwRDwvhNIquBctHAxLiL3p4RTI1XUCo6MC0DDU0ZNM9Lo6nNhGXRDGqhXPBw8uQo3LKB+oYatC7UYccYU1qASf970awbgGtheKiM3r5uaKaL5SsWI5VMzAixnhtDNgsM95cwMpRFNptDPGUjVW2irT2DuvoYYjYDt/lMKgKUD/fo6DSGBnPQUY2G+lqYpom+vlEM9PXCMjzMb2vGwkUtqEozFTHv5UQPa4yGkyRE1RDLZ368uXMDQeDteQq1Oijmm40m3lMTCtRUG1izqhpLlqRwcCIHXavH6ISJfQemsPrVEdTUN6EupcHXA9ihi4wIqSKsKg2cEOGQSCqqFq1EcwAUMULvdDvn1o/d7jvt4/Wu+9h0POQ+rtbeK/tI3BNknbPlfaL0YxZ0ngwZJMnKrVZ1pSiJBFCyJPxQiecqqybv81XKdRUiwNj9cJknE0T8JJMTMkfyACkIy2uU25USfGXpnGFi3tIl3h9RQjZi5iDcD5WDvE+18YPeRmJh9J4INtHxtbdXb2NIK8K+SR+iPr3jLdukBv6jggH5LfXuWfjM9leFDrxlbC/7IRSYOY4hDkdbdk2YK2GNiQIhzCUGXr1Vkq+JZlghiEaXOe7yKzoTrtXU+NO6YyGX1/D0U7146aUeuF49fL+CeMLFqlUtWLkyLm6z8k6Pa7titIWpnMtzS58Vw6kY8ss6dPPgBoeAjCtRJBQWBFlCq+aLL3ZhcpwVI0xs2NSMdHVMFBXEMwpygloBhVIDXgWYHnQw1p/H+GQO+VIZyUQSHR11aGyJIZHSYcQ84WXFCBIEKJan4dKCHmOtRBpgPGieLtUqSkUNY6MOevomMTFZEAEqnjBQXWOhrbUWjQ1xxON0yawoF1rNVAYRxKQtQ5d8dHcNoFIpopTPI1Ndhda2BnQsTsNO0DxIYwmNMRbKJWBsFOjrm8bo6KQYepIpDS3zqtE2vwbpqhgoD3GWkXKrFYFlDGkt1HHw9XPovZBHPJbBkqUNaGxOiMVysH8aQ/0Bus8DpXwLAjeBgd4Ujh3Kw7SKSMY9tLSkUd+QFF6fQindcIeHS+jvoWzjoVQqI5G2UdtYhaZ5CTS0sPQQjTNMqOrCcT0YWhLjY3mc7+6DbtlYumKxlIo7c2wUQwPDsGPAgo4mLFrciFiCtMlEuaRhfDRAT88wctMllCtAzE7DjseEj9dNBzGrhMbGJOob04gnldhJKzfhkC8AQ4MljI5OITudh2XaqKlOY15bFWrrbFi2coNl+ceR0bIIiudOBihOtUBzkxgZaMDRAxWYsRxMq4LGxgTa2tIzONU8rxZr163Ac7suYnTcw8FDF9HZuVyNg7hWc60FzGzOxVNPH8crLx/B9u2d+PyXNqO1tUYJMQ4zT43jZw+9icCP4a571mLefOCVvd04dTyPrgvdCIIs2hfOx7p1y3DnJ9uxaHkCGssfUMoPNExO5PHwT96QAb7n3juxcVMGr752BK/vHUFXVx9KpRya59Vj+fIO3HZ7M26/vROxpC5WVOoyAm9y3RsAACAASURBVE/DxYs5/O3fPIXxiTH8wb/8Otbe0oHaGGMXFH9AiLIW6M9/9jKOHh3Fxo3b8cUvrEZbaxJd56bw2OPHcfSYhwvnqclpRdfZIh579DheeXEYpj6BrdtW4r7Pr8e8hQnoRgU+SkKLJW2wmPxVbA01KGDtTQqZRgWGRZGY9a5UDaLBvkkcfL0Lp08WcPjgJYyNeCgVWXNQx8JFTVi8rA7bd9Zg07YOpNM6ClkPf/6fn4cRNGFeazX+9M+2SyZPQ1OBy4Yeh+9ZcIvA00+cxkt7dkGzpvEf/9Mfon1BXGBDLdNAn4Pdu87j2KFx9FycRP+lQdTWJ1FTr2PV6ibctnM51qxtRFU1M9lRyPRRqXg4+MZ5PPPkEcStDtx26zbRED377F4cP/Y6YnYRt9++CV//xn1Y0tkgyEKCpRYptWAS27iQRh+ucbOfyw5mf76596FC4J2MQnSNYopkWVIJMTQdKzqbcc/deXR1ncXQSBm6WY+e/mk8+MhppGuBe25vRH2cygcfOt1ixDWH2tRA0q+TMqv4uSu7rZi8Wey58nx4fN0LrnHfzZ9vIAhcYxDJnYvGm54iZIKj67gNY9vVkiZ0JophkwRvEmOiMFc8T2Yy94lzkbIQiZWSQiQ9NvhMxrmEggRVs6KhDpn8kM8XoIlRnrOBLkeOxK/Qc4duUqKCuZzQXQbny06xefyGwoc6iGbbZbd9AAehlDH3yQLeCMZzT7zT/TnPjLrxK22jm97pe3/V6+a0N3qEjIWCwTVbcS0QXeVx0WMVOz/7RNmLrhfcC7UQkfOaeIYxxp0CpfqI7OnR8KHDA90bbeTywPPPXMI//sNxTE9XQWecmDaNdJWLL3x+I9raksrdUZR5kVA7i3f8ZTbbeLR+R2+8ub3RIRAJmGwnaVh0LCjFigqBhmPHT6FQLMK0fNQ1BpKQRRlHlLDl+j5oxKTB5uBrF3D4lSF0nZzCwMAEpnNFVKdrsW5dK9ZvqsXGbc1oX5QRCx9jP/lOy9Zg2jroGcikO1rgiHfTYN8E9u+7gJPH8zh1Mov+gWnhhxNVAZpbTay7ZR42bWrFbbcvFYUdLZSUC2iQccoe9uy6gEMHcjj0xgVkp0dQKk6huakWCxfV4/NfWI3tO5fCSii3crLer7zUhcMHizh0aBi9fYMItCLS1RUs7azG7XeswN33rERNTVw8LIn3ahozfC7A1Bhw/Og4xkddrFy5HIuX1iOZUhR538tn8MyTI+jtTmBqPAX4GRw64GFi/DAscwTJZA733NOJz31hq1gs+3rH8frrF6TPp45NYmLYRy5XQk1DEs3zk+hclca2HU3YcfsiWW9oeWacKLPanjw1hO//4GFUVzfie//d7+KVPcew94WLOH+uCz7y2LJjCf6HP/uGxL9yOdz38gW88RoTPfVidKSAfF5Hprod6UwtAuRh2hMwzB6sXJXG1775CbR31IswWikD05Mu9rx0FkeO9OPihWEMD04jmahCU2MtOlfWYvuOxVi9tgk1tazMAby+rwuP/fwCuk6nMTFKj08bRw56yGVPwbB7EIuP4667F+Mbv7lTGZ38AMmkjebmDHQ9halJF8ePXYD31eWISaSgWsNpWTenph1c6BrC4UOnUFVlY8dtq9HaWi+SbqUADA/lcOTgEPLTceSnzyJeNY0Xdh2AjipkaqqQLxZxoesYDh8YxeBADt/57jq0dbAUihrEXNbB/td60XtWg+YM4vTJQTzyyBNAEEdraxsqlRKOHOrG2ZN57H3pLLT/mMDOu9vh+T6qMsz4CgwMTOPokQsYHh3G+XMDWLl2vlhLqf2j2ZvXUII/daIP+/f1QUMz7ti5WIhwrjCBU2eO4vwFDblCG9wghanpKfT0j2BivAemPom29iTy+WXw/YRYL+niqthgCstKi82Jza8wElSQU0Mu5u0AruejkHex9+Wj+P6fP4zxUROpqmY0NragpqEKU1NZvP7Ga3jltQBvHJqP79lV2LGzQXzWLw2MYaB3FJ6fx3f+YAMaWw1kqpOoVGhtNeA6QD4LPPazozjfNYH6Zh+lIhGDjQAunJ/ELx/vws8ffRkTYwU0NbeivikD1yvjzTe78caBIzhx7BL+xb+4C5u3zUOqmiofX9JX914o4rWXR2DraWRHhzA00o2TZw7BsvKwzWn09PRhejqHwG8Q07ohPgT0ead1gQRg7idanbmNFtxoO/e6m/sfFgQIfTUq3JszFrMnVFPkmMjNq6M7qDzxUVttYOdtLTh+YhJPPj0G303DKadw9NAwfvSj05K+4o4tjahPaUgYGmzdReCQiafmUqXpV6z/5b2eXTDV+y4/O3tEOSRs0uyPN/c+/hCI0DHcirFyple0VBJluQ3xMWSquNLLL1rkWEtVHz8qAZxkEhfrJJWdUdkttU5IIgzxVPEkeVvk2SFxKwwBkdAF5Z4lD2XGcWmHCiug6Kk8QqLGy4tn/qjMfjOHYbvCqScPYn+ufq+8ZvbW97x3mcAbPk3m0tu8/7ovVYC+7mXXviBi/t7uimufe7dnPhAYhI1QsJzbIjWu8ldJAeFJFbfGcVf4QcuSA0Onp5QmiVx4IdtKCwxJp7jx6bZ4Ke16YQT/9/91AiODcVh2CqXyFFLJaWzd1oht22uQqTbgVsrwHBc2zRNhkhcmYFMKvnAuzW3qzf2PFQQiK2a0ZeMZ30iPt8lJIDtVQcWpoLrGhh1XFRLIv0axibwvlw2wb28P/v5vnsfpI72I6QmkM2lYsRiGR3vx6C+O4bU3DPy+fi+a2raJ5c6OmTAtWs5UQhnq5pizxdIsTE9WsOv5I/gvP3wCY2MBGpsWIZmugRmzkC1MY/+BPhw+dBRHDnagsaEVnctT8Ok+CQ2lko4zx8bxf/7vz4h1srWtDXU11ZjXVovJ8UE8++xTmM6ex8Yt34OdsCS2suvcKH74w2dx/Ng0kqlGtC1oBnQbhfwAXt6zD4ODZ7FuXROqq1vFlilejrLHiaXh8Bvj6O12YegWtm5rw9LOWhg2LbfAxNQ4zp47hfGRFjheC3TdxnR2GqfP9MC2h1CVzGL1mjhMYwsmJrJ4/vlX8cO/eRr5XBz1tR2oqWpGIl2NfKmIffuO4MDBMt481oy6ui9h2fJ6yZViGjoqxQDDAwYOH5hEPBbDcyuG8cO/2YNSfgK1NXGMjg3j5T3D0PWvo1TScPpEL/6fv3wUp46PIZWchwULFkuSsIsXR+B6U3C9EnRrGDW1vdCNBBxnp8hCLOHS053H7l0X8NBDz2BkdBjNzS1obG6DW9bw5rFz2PfaFE6eXI1vf3snNm1tRqIKGBkZxKlTJzA50g7HbReef3JyAmfOjkG3upBITGL5ipjATDc1EYYrtLDG6aXJWus+RoZzin6FejWul4amw2QsFlPDM6WtV0nCd2LSWEq4tFiTAJYLCUyNpbD3xQEka8ZEI7CwowZLO+eJ9ey1V4bQfdbDc0+fQ8eSGnz9t5bBiAufKn7VxVwCxWw1jryRxb7XTmHhkhVYvaYOy1cuRTY3hcNvXMT+vdMY7PPwg796CctWfBN1TYrwKg+nOHQ9A00rwfVs2DH6OIferaFVM8ZsWJ4FQ6+WzLkMMjYsYMHiDO57YB2Wrtawa/cIzp8dwoKFLdi+bTna582DZeTR2dmOhsYELHqIssyJ1PwkXEJhKhQyxRxPP3GPcasByiVmi2PqZB1j2QKGh6Zhx1LYccdKbNi0Ao3z6hFLWpicmMIzv9Swd3cfzp+fwEMP78eGLZ8BTBNf/o1P4n/8s79FpjqDp546g9/5wzVizaU/PfPRsZ89FwMMXzJRytVg2wObEI+nRZCnW8RDP30Tjzz4itT12bhtIbbftg7LOpdgYmIcBw+cxO4XjmDfK6cRt6uRqbkNa9fXwrBY68aCX8lAczuQLzTg9b2DKAcjWLGqA2vWpKBrRSlzU1tXJUSHCyhRhdohjolyY4voNTkQfnlVtP/2TFV0583tBwkBpS6RcbmSSVR8kRIuyZzMETKlRYz9ZSIABOhcmsb997fjQk8OR44NI6hUA3oDTh6dxF//4BhGLi3Hjs31WNwWQ12SOdhMaEy/rynGifPmsg+VUCEhilp42fkrDt7K1F1xwc3DjykEZpBQEXtJ5DBLSdip6AoGBEl8CFWAIe8sa4NkuFMxbl7giesWU1SZdD2klSdCPmbypnJM4lKYiK2skiz4jP9hBKcFaLYoMB1mOQ+YqIKui1wEmfSB34i8XTmZQvBLoLJSSMovInCEojItsOKQfu2huppgdO2rr3MmamvYZLk6srBd59a3PX2NrvOetzk1+0heNDOosz9Hezc6DKSP5DnCsY3aPbudY0GMfpzpr6J2EQhIXx2aiXwdgq4GUGG5NFfHiaNTOHY0i3/4URd6uiwYZjW8IIdUOosVK9L4nd/doFz5NCARt+CWSsLIG8RxMm7isstt5AocjU709qhxN7cfFwhQORvhXWSlptvq9HQJnuegtq4asWRE4xizWYEIBJqFY0cH8Xd/uxfHj46hqb4ZWzbNx/KVzYgnbQz2j+HUyS5c6D6GwZGL0PVtYohwXSrdmPuECK/yrDAzKjO9Tk1OY2ggi4aGJmzc0o5FK+ajpa0JsaSJ0ZEinnv6KPa/chGn3vTw8D+dwJ/86VbYdOvUgOxkGT/++6Po7ppEfUsGX/3Wdtyyrh2W6eL8mbM4eSIj4WMUmjnNaJ378T/uw+lTA9CMNL78jc3YeOtyaEYWE0MjOPxGE3w/h1jMCpP3MGxCJUpi0iLX0bH/tTPovTiKVJWJ5at11DUxSK4k1s/1GxYg8Kpx4FUfr72aQ7E4ic6VGWzYvA66NoqmRh1bNi8S75bxyQn0XepHc2saCztWYMWKpVjQvhAaEujrG8PLe/iuczh9IosHf3IIf/rvPwk9YYjFsFzU4Lu1CJxFyBYyePCfuuGUarB5azMWL6tCKT8fsQQVpxrKReAH338UR4+eQnPTEnzm/vXYsm0rxsayOHigG08+cQGVfADLjOGzD9yJHbfNR3NzvcSVWhrwzJNn8OBDL8PxXazd2IG7792ItWtWY2qsjIP7T2D3C0fx+r6z0IMYEslbsX5rPVatXYivfsPAsUMGDr5extRUDstXZbB953LoVjVSqQrWrOqQMVEl7wJYlgHLjiFdXYNLfeOYHC+L5TzFZMJGIMYGU9dgcpFlxiMmjdF1Clu2DJYE+TInA2ehxkHzkYhr2LpjKb741Vuwem0NqqqBsfGlaGy6iB/+5evI50vYv/8Yvvaby6QxvFU8lDRLnp/LTWPlhlb81u9twx1314ggyBpA931mHf79957DmZN9OH6iHydPTuGu9lq5l8JUxdHgujE4bgyeZ8P1laBJ12siLrUSNPP7QQIaqDmxZpIAzV9Qiy//xg4MDgP9Q7vQdWEQCxevwANfWI0N6ywkbYBCKgvbUohiDA8dpJS71eyiKHCQuCATus4sXHHR9jB5ku8HSCQT2H7rBtE6rN+8Cpk6lZiITErgt2NZZwcudj2GSwPjOHT4NHKFz6CqRseWW5ciU5eU4OYnHt+Db/3WapiaBjvBfvoolXU89XQXyhVah4C7712D6kxcEPfomxPYs+ckcnkPO+9cge/+8R1Y0lkrzJSutWLr9lYYRgxPPX4I+/YdxqatbVjSyThbpUl1HLoo28hOl5Cs0rHz7tX45m93YOOGepXcJaC2Qo2hLE8Se6dJLOfHhTjfbOcMl/NWUMgpWjIVl6hYEHU96QKzKfNkIgZs3tSAzz3QgYmJU+i/xHnXgEo2JQzRcN8xnL19EbasT6GtKY76dBK654lruxfz4OpKt06BUQRMhl5IEi1BVblu5jj6PdqSD5tzX3T/+7GN+j2zJYRCWFy5ndv29+PdfN41+xz1Pdy+X++72nOu7KcgyRUweO99VzFtlz9HWXiYbI6uRWScOM7MYMz8CmqryZZtMmjB9FS8x4y7jAbYcR2JpIa6WhPxGBNJMBZGl7hhxpkTyJLo0GViO5UsjYkYNJPlpugLRqnVhOtTa88FxUDFB3IFIJf3kS9UUC5XJExB91Q4SDSR1JoQzh+Kq6EAfDWRiwwTi1+/nTRG5uj9/FwpC4nr2vv7ivezufKsGx4GZA3edhAVc65st0qynwH5jKDvw9RVAo5KhWylB83y4bgV5IuueIbtfm4Er+2dwNREEhqqxGoZ6MNobjXwm9/eimWdcSQSJFcefNeBzbSzkjCRGjwKl2xBhJCM3RRsnWVo3veRu/nADwoCkffP3OcTa3wXGBvOo1Tg+OpobKpBjOni5RPAILmChuw0sGfXOXR3lWDH6vHpBxgStRpt81nPPQAtYH0Xx7D3lWYs6GhUpfp88twOKuWCxGTSm406DIZqMfSuri6Jrbeuwtp1S7FlxxqYKZXYm3GGxTzQ0T4fAz0vYKQ/i/2vn0Hgb5WlhkbNilPGnpf2IZmswfIVy/G5LyxDJgPxolyzbgM+Xd6AYj4L01YejZxu+/efEJrcsWQB7ntgEWpbLaQzdbDcOtxxx3JUykXU1dCLigpJV/quh1lUB/vL6LkwAddxsHrdfLQtSMOIOdB15kLxsWVrB9atjiMdH8T5c2fQ1z+ClWub8dt/cAviNpCIBYiZLO3oizD3qfvuwJYdDtauX42aOtbaVG7JGyq1WLAog4vdDsbGRnH08EWRgwg32nIdH7BiXFfKMm8nsxPYtqMd//bf3YXmeZCkQ5zGdgLo6y1hz57DsK063PeZe/Cd318vhql4og53faIO/cN5HHi9X8qObL91HbZsaxYDXIXhjqemsO/VMxgZmcadn1iF3/uj27FqbYMsdZ6TwrZbdyKZMvDTH7+OA2+8gc1HMlh1yw5s2rwUa9YtxS8eGcD5sydQLBewftN8/N4fbgTdoZlahrIJ2ULXVWUXDc1AMp5AY30z+num4VRsTIwBtbWqPxw7qtdMJfkzaFhDueLC8RwRaCiFUtnGmpS+VpSYxMUr6vCVb63Cpm010E1GLAbINBpYvyWNmkbgYvcEJiZVVlreK4mKKGjpJQSGhkxjAr/7R3fitrurBZimGcD0PcxPmvjuv74T//2f/h1yOQPPPn0MG2+9DRlKyxQChRGgtTIlAh41LBQymfnIldgEagYp8MWBICn1K1nsmEIgtd+mDcQTpMMFQCvDsj3EEz7iSYDxupw8quoMpyVXg5kVQc1ZHiouXLQ7jJ2wrGoAMQm2Jq+SrrGwbkMbVq5tE0MobZ3JGN1MNQlipsV0w+bt6Hrol8jlmUhIZahqnKdj/ea1OLy/G+fPjaK/J8CSZao+kuMEKBSBXS89g6lCFvMXVWPBUh3pDCRz1uOPn0BfbxGJRA2+/LVtWLS0FlZSKfGpBYqngDvu3Ig3Dw3g+JtjsoBNTVUkWJyLnyk5iRzolo9V61rw5a8vw5oN1ZLEkV449JTlh/yPQe2E78HzychRMREtYjPLqLpYyAl3r/w9PH1z8yFBgPC/+hjN8rNEan6ZRlstSrITzgGxaHL+IEBzg4EvfHYBdE/HT35yChd7h+C51Qj8JvR2F/DPfYN4/OcOWltiaK1vQIz1Zq0AFaMgpXw4r/iOGWEnfLNGC3nY0qtt2Ytw6l1z+yEB9F295nptnnueo/Sr9j16zrtq3Id0cdQ2MjOz4zjDgl82nlys5XrSc/EqUSSEeCP/WNIpTGxB4VHn1/KRrjZQndGwdKmOJUursGhhPeobDElK58OBweLgrONlJmUxIHMmC5xuy+JPyyWtmY5volg0MDhUxIWLU7jQXURfv4uRsZKyGFQMGEFiNsOgSHFsMT/soVr3eBQx9dJnWUrC9YQdmAXEWxBbksSElHMWdrO3qHdd+6/MMUIxalbYspk7QrfKmeN3syPPZOP5vcYn6uY1+6Dw4OMMg7fpvQJKNN4RpOaYaCOLFHM6GAbdXGNSRJ6XBLqLQnECU9NF9HSPw0QTytkWGCwtoRdQcYaweIWB7/6rO/Cp+2phWXRdU4kJmbGSxJV1kJU9RI2Twgc2hIOn3BbVmnDdXlxjgG/+/FFCILJmShuY3MfRMDFaBA0GdAltbGyAzeA44qCmw3UpdPkYusSwsjyGhx2s37gU2+5YiKb2GGBRq+dL4pnlqxrQuerzElal68wRokM36brG7KlhLhIeEpN8H9U1MdxxT6cIUlQQlnjOVnwrUZvJZjo71+BS96uSyXQqByQyPB/A8SDlV4rTDvJ5T/KrkJ2kIMa4STsJpNMJURKSJtKrz2XyIT8OxzUxOalh3hKxBUnRC/LDumZDY+IdzYCh2eI2TJrMRFsHX+vFpd5pOX/L+ma0tteIHMC1gYk/qQDUtZjEuJqxMmBOIzAKwj9XpwEzYP4JTiML1ekYNm9ZIYUPGZnBttEAFOeSUwHaFtRh46bt+Pmjv0S+ZKDsAjG2PwDiVUzZ68BKVuBUJtHQWo3/8J+UkEnlp6npIu9QWOzpHUHMrkc+62HLtlUwLBNV9WoWk4+6/Z6VOHmqGyPDoxgbL8OjEpY0wACefuqU1Aq1Y3F8+jPrsLSzARwTymOifLCALdtXYv/rF3Bwfy/6+8cxNlJAezotMoHJqhhBCb6fh2mWlZwUJwx8wFOKDHpOsL0cz0yagmYTdHRDD1IYGfbQsYgACZm3QFcWTUr+pslEOPQ/Dd2NiFGihdXFTVI3XczvSGLdhkZoVgBH/JZcEfhS1UksWLgQA5emJKMUrYv80JopFk2TJTscpKot3LK5GvE04xRYjJiuTg68II0t2xn4noVtZnDk8Bn4wa0ygvIMn5OGGm1TSnkQKcWSGVTAQrEW0yFTC64zNjQm2bCYHGhGoyv9YIsoLNFKSCA6sGMxsefyOik+Sw23EGR2PnSbJZHmxCXzI++lOV+Z4yvlQFxoOSGpHddMHbZpoFBhcVgfoyNAoaC0+f0XmTmrBrqWgY8KOPFS9UAqY+Jb3/4sDrz6F3DdBJ59+hLmL5wPzWSJCQM9F6elcKqvV3DvfbejpiEuHmFMEnDuzCg8pwFxO4XBS8DZ03n4OicuaxlSQNAwNaGjVOJeNYYGChgfzaO5JSbjoxmE/TQzXWPdxhjWbaqGFQ9gEQVcwPGYyGg2von1OKnZiqKj3irIROwRH39zMRMgf6R/rj8GSjsf/SW/IlyPGj/eHlCL5UtJngUtBr7yufmI6yZ+8eQJnD43jrHpKtjxGvioRt6r4EzvBM509SGhZ4T5ZrY6VTM2FKc04g/xJDwWPLmamBUSIDkf4dUHub3aQIUA+FDacCUMPsi+XtmvD6Pv0TuuxEl1PEurWc83upZoqNy3qZCgVZOJBchwMU6ca4hheDCpbdazWLS4GrfvXIrbdzZgxYoMausNyZQn+EuGidSe5XjEfdaEw7JdGremCJhHj9FDZAivvX4B3T3TKJTpFsQwhZgwc4GXV+6vMjRKoFOjpFzPBbNpqea04TYUnoViitWWSlsu2PpVt1x6KBTTuvuutjKjlJJUhPrw/lnNTjSdRQpSjRPhYw6cr7fLDoVU/dqYyTVLybm8+lrXvT0M2HfWoHu/YHB5oyl8yXS+Xn+vcl65K87C4WodJPyVQCBvEhXEZbAgXuiMnzTgsxZ5QKW5L5Z41s5kZs242QFLS4vXEowCamtz6Jwfw7d/ey3uvjcjjF8yRiGCGeM1mIY9o4RhEpiofxH8VYsj+jJnYK7Sx5s/3XgQiATMaMsWkucnj5adKsFnrfuAuT1qYBkMIyDZNGBbKanwMDhYxuhoRSySG7d2oHVhvQhonIfkexn6RZ5dUMdQ+TvId5PXYwWKIOvDcVSpQir4PIe1OAGLcYc08GgBShUP+QlmRdVRymkY6NHhlGNwXeKjhcks0MgSgLaLZJWF9ZvW4KknTuLY8R489otLWLXGw+KlbWhtVfKH61RgWZZUX7BiGtauXYXRsR4MXMrhF7+4hNFiCsuWVaO5NoF0nN5XFBg9Eb5N3RTemcYzwujIwXPo6x1BIhXDkmVJ1DeYYMJNDUkYgaNKH9LzBTm4/phkWDVsV5S/0VrDkkP0lCFwCTNxcfeAUiVAKeehUnJRyAP9F4FsluUGq6FpMYkvrZJlJgANRyWnAA9FxFIJ3HHvemQaAYpdnlNGPJ4Ql+VSBSiXC4jH0ijmXYyP5WBZCUn8RDLMal5mzEXZnRRX20yNLWWQaDllPpeL3UPITvtIZzowMRrDmRNFwCrJ+hm4ppRqmRqzoft1gF+H0eEypidZVSANxlxSzorZMVDhEGglGCbXOgrC9PgU7AuzDwfwKprEhtdkuE6qjMLZyRK0ICVkSEIzA40GRR+uQ19aagKYDCcmwiFlLsqSZACogXNFcqN2g+TLF+mYwljZdWCZCWTSLXDKJ+EHMRTLgF2ttPRcMN2AQHFQZhIZaj3o7qHlpZQIiaRFa2MBiCerpXbL6Og4TCOQieGWKKySeNN0b8H1lAaEGoCIpoqgTV/uiiedtUh4fTV5eI5Cl3hIia+5CV1EbRJ6tpEIF0rr1LzLAqzq1ygJM9wP62lSK8mFwmAAqLAUmgT2k9IXSi7y+QBnzvfhwvlpTAxbGBnWkJ2kK28GRw5NAqiGruclMxTdgmlVXLM2hpraDEaGi3j4Z0/hK9/8HVgxuugCz/zygPioJ5MGtu1YLC61RDbi/OSYi+xkDAYy+Mn/N4zEz/sQaDnQPiuaIDeA5lsYvsQUy0kUcgHcCoNzeQUXYBemXUYsSVddHzYTdpkq4YUUZZX4JcUw8K9yvVJ+8wInosLMhxjILxe0m58bAgKXjc9bWyRMkfysRD9lbyCbrL5CVDRflDIB4z18Ey31CXzxgTa0LzTxTw8dwdHTOQxNVJDNm6KiiTGTm2ehkHckw5ym01mfc4y4QRya1boLU0xEvqo9L/xdGNyIZXqv27fC4Ff/5b225cO+/1fv6bXvfKd94BNkhbrKozjOXGfU+XAzKx1QvOaiSgAAIABJREFU4IADx8kqjaxgEePQ6Ddoiba8WHSQsOeBGQAvnDmOV/ck8clPL8d9n2nDkiUZBEZRaB1rxPlSJJgxMxZc35Y09WfOFPDE493YtasHPb1llMtJeKhT6wSvcT1UHAcm/ZqinsyR2ShwUHvOUIcIIoLrVLRGKhUyf7Tei8u0cheO3IajLTXEZNpmBFPxAggFSC7ycsy5pCtBlLBgO/j+qD18H90mo+tnISlaXwkPEYBLV97Fn6tbotWsVqPLvpM9iGAQbWdgwLYQJhLzOhcGs8K3qTGbfNTXa20VPZnp85y+R+25Jgw4BhIC8i66Hl46K2jOwWV2kp9oy9GRkAPFO5HGXfZhIj6NQiJdbClwSmZBGXPdrEKiKoGgwtAYD2Yij9YWDyvWaPjt370LW7baKgbZVNmQTdbkptLCoxs4lckqhu9qrpaqgWFb5jT/srbdPLihIRBZxKWRmvI4q5QdpWTwNSTiKXD+kOhwpH3J8MocH6PIF4rwtSwaWkqob5BcfWAsu4QohNWkmKCK+Mgt7eNSTYFzVY5VaICymqnkLZJIZzKLU6d7MDoxiTPnJlEoJDA+HEd+og7d58fEn7bMrKIseSgJsEqob6zCl760Ez0XfLx5chB/8RdPoaGxhK997U6sXGFg8aIlWLw4KZZCWsxot/q9P7gfPb2P4dixKTz005ex53Ud225dgNu31uOW1e1oabFQlWJ9T/L+SstH697F3jL6ewsoFirYvmMNli1rhk1PR9jQWVEiKItQalnkS4rwgnH4wTgMsyghdYQ1DXH0FqBgpBs03ACDI3lc6BtAf18OI30BRkcqyGZ1jI/E0HPegWXUwtQNZHNADb07af2kZyDLMmo+7JiOjsWtEj5Imcq2mSuA64MmfPiiJS1wPcplCamQsXjJVnSsSooBanTYx9HDx+C6yuKYTPmoSiuZgOSkUKTwXIXcZAIP/XgMmaeHUPJGofkmLI01HG0EroahQQ2aV49ijjGhzCasPDzp1s9qH77nsLioWrlDz1EK7lzrdKMsCjVmzY7FDCQSxJ0ApTKtq0wWqhRuBgdBvCcNSvf0T7XEalih0CmFhVX2d7q3UqgQsytxmIup70stSA8+bIOxnUqqldXOZe1MtaDQvTUW5ypgwNfzsGMWYpayqLLQLBlapb2k3zZQU1uNieGSxMQwGDaSWVgPTWr3aBwQWzQKHiqwKC6JQKkL4Aggz3WFSHO+UcLnoiLxmw4zYlpImBbifIZuCGNg2hROmcKes5NLfLhyi5aY8atqqVALg7KkBijJIMdsQwRYxoyaQQzjowX88umD+Nljz+BS3wTSdiNM1EJDHSx7AcamgKLrogoxuS9J11UfUovw9tvX4pdPH8P5i0M4fT6HrXUZ0Qy9+MJJOGUbyxc1Y8H8FGxbJSLioseyKXbMR6mSQ76gie2eFkqy/HHbgufkEXgO2lptyUq1enUtmhoTSklASiSB3nRJoNCulAe0zFKooEBgmowjoRldITGJEONR+bn2WnXtM3LjzT8fPgSiIZnDZ3BXcF1GknNRWVL4qzA/MujUbrlSj9C2DBWnprloaLJw245mLO68B8/uvoQXXjyDodEyprIFTGfHGXEEwzZhG3Rj56Kk8EW9Uy2CbNK7OX7HF3/40H3rG99Nx0Jyc5nAEAkO4fZj1fcIGnNgwL4pDIgQMboo+p3IoAROwQoRVnisRBTWIatKkJmuwA1K4mnBuDVdr4bnJIQmuZ6JZKIOXiWBNw+PYWzsFAYGSvjqtxZh1eoEDIvMuSvMixTA1kyUHA1HDmfx8ENdePmlAQxcYu3mDBKJKmgBM3mOyRxJ2SZScSpHWR5FZscsTkfjx66wZMXMsbpOhCYmFwohoMTId4f7s3Nl7vOvMaei93MrYFazXN4fjkP0vLmjcL396J633yopc7avb20jAfR259/++XzerDB/zee8zzCY2yalhHsbaCkQhBdE8GBLI4LnQ6egKbkglBuah7LUxmQCq5gVR7qhDlUJE63zAjzwwEasXWdj2YowPi6KdxebKJM4+mLFEgaQ4S1UwIvYylbP/ajEQBFWzD1zc/9GhYAaQ6U4IOOu+E+2VlnCQwWTaJpc8ePkNfzSiOGxzqamIV+Ygu8UEbeYk4R1KXmNMjgY5HkpQ/F6xxc3WVrbqSvRKRwGZdiWD9tSSaUo/MgMZtnBCzk89/QBPPyzX2BgZBDVtY0wjVrAa4GlLcLkRBE0kDjOlKrSENC9VZPSF7ftrEMhew8e/vkunDk/gPGJAfzV938EeDH8/u9/E/c/MA8LF9WIABOLBVixQsO/+uN78eMf78a57gn0j/bh0UdO45ePevji5+7Al764GatX1yOVorLOESstXYr3vNyF/n4KZDq2bmvB/PZqqVBBfpfyCQImgGPYIIVvTWrS0kuGsc8koJRP+PV8VxmmHAtd53L4+RMH8czuZ9F/cQi1yRakkg3wvAQCrwmT43G4bkWMbnSMNGwmZvJQcnQRHpmI0zYSKE4XENdt+A4Qt2gFFe0AYraGlpYMajPtyE44OHq4F//woybccW8KsYSBM6dcvPjMG/DKE7jz7lVSNYOyDseGnp/lMulJWcq/uN40pnNT0IwcTC2BiufC1OKSpbq21kNzSz1Wrm5AXSNd9EM+X3NA7wqFKLZYiSlMUu7kkkx9Ky29DKXjeqYbPnyNyfVK8PwYdNNSyk6K57KsM/hRDHaWZGqV4HE9UJoEdloETv7KZAgO9KCCOF06dZrqmV2NghkR1EG5lIdJIkghlAMUWkPpnuQGhriL6oYjDqmBSwHNkgEWwq1D0utO5UaEfNZkVKAhiScFXIkl1D0p6upWHHiOtFQWHUcAZ0GjsCe9YkFZmr198Z+2dE3aw7wQhuvC9CowwvPUbgd6GZ5flOKozMAk7gn0/wkFTdYpotBFi6py16JVtwjTJExcMc0zXmJooIwH/+kk/v4fn4drWlixfB02rpyP+U0tSKVaUPLq8OTzl/Di3iG4zITFhFdFIEZhWNfx5S9twsOP74OeyOCRx49izbrbcPZEgOnJhCwcn/nUXaivSYi/OAmNLeMwDdNy0NDUjG995xYsXVUD3x9jBS7ExIeJyF6CaTD9sIH2hbVooOttQPcIHfDiMLUaBG5RuU4IAXKg6Sx0zkBxjrXKFMZ3kp7JHzILAhcheTO1nRQB5N9ZgqiObv79SCBwJa8x51jtkuwrITOc7qqZQvG4S9canjFFYUPCEzApAIAqE1hcZeJ3vrUAn/90O86dy+HEyXPo6dGRzxXgVOje6EhCIUGbiM+6csuFcS5j+AEdfxDwl/X9Q2j7e33PB9H36JnvpG1kdogDV2dy1RkKgTOf0IOFZZgogBLfmMuYtMfXy3CYgZZ+MV4FU1MBJscCTIy4KGRZmLsatrkAowMOfvrPZ1HWXfzmby3DykUJZOLU7FXgBCx1BRw5nMPf/Zfj2PvSKMqFGnGlijE9np9FbU0OrW0Bqqt82HYFiSoTARcRTcW6ibVf5Iiw/dynEvYt+BC5wrL5VFzSGvc+CJpveQ+hO2eCzwBzdke5Pb39NbNXv/s9gcQM7bjG/e+HoHm1vkd048OAgdKcXKODsz9Hro4RSHhMRS6ZeCpwWS1TWBZOIk1HzNIQT3joWJDGLetWYvVqWmnEkCKKaSvMHsZ1mZYETWOWTUXDDUvxYkzOEX34WAUOzqBo3LmN9qMrb25vTAjMjhNxSOGTslozNpDfeDIucXfksMfHRuGU58ED4xtJY5gfhRa5MmzSrooGJ6+JcZE+baTKJjlyn4KlBvLSrFFsGLoIYxpf4JcQuEyaQ9wlmqpEU319OfzzP+7Hw//0koTObN3cic6V7aitq0M61YZSthZPP3EUhw8fQnMiJlUOnLKORDwpnh10y73/gQzu+dTn8fQLF/DkM8/gfFcJ/d0x/NX3d+PIsXb8b//H/YjFDdi2A7do4e57kti24348/UIXnn5+H06emsRQXwU/+emb6Onx8Cd/cgfWrs9Atzw40CU8bd/rb+LS4DDqGmvQ0hpDSpIWBWJcYv85j2j04rQxLU+seF6FrA9hz3lJBWVZhHYXMQz0FfHIg2/i7/9xj6wJWzdsxopFzWhvW4hYvAZjYxb2vjyOfQeOSHiEZinvQbopaxZDOZhd0wQcHXEKZQ6TIKnknJapgtIo0FWKHmrrFmFogF6QAV584RgeeWgQCWbW1QzU1ddhyeok/ui7n0Vzc40IqbRE04DIBEe0yNY3ZPCVr3di+do0YOSgByYMurQy8Z3rgbGYpDfzF8VQ12RJewkRaZRZguPSk0iZu+n9KeNP8iK10elxyThxG5PTRYyMX0KgFxBP1COZjIuKmDilhFUPprJQKalQ3E2gEuswGYw4QYqvNkmTK9qzchlIWMqMLpZPFkcJO0dNHf29w3I5wlyQkCqf37TUhpGsU+UAqSR9jn3kSnnRcExOMdNfGYYToGNRB2JxXfyFGdtcU5uAH1TU9VlXktQYoCBEK1wMgave6VSYJKeMilOSczLZSNTpompBNDP042ZvKDySuPugPzfdTiwwdbNcTClZon9ltgo6qsWCk5yuxgX5SpF6TflFd50bxmO/2CPZcVfesgz/6c++isXzgBhLPDjAyBTQPdKE3a/SV149lxHFnNg0O69eZWNeWx26+0t48aWT6PvOrXji8UHkiwzcKeDOu+uQSdMKWwGtSyWy/0YZrpuD66SxcYOPRSu5UDWARmSLEJAYS2YPU+4PTM5C+Oi0MgW0eNKV1oNlxESTyj4KSzizMpL8XrEwybkrfrsxqfTNVr0jCBCnwwvDHSGxnAOiheICR1pHJpnYwb/UfOrMEyBzsbVJQ0tDGls3boDnbRDaEqH49XiymXe/o7bevOjjCAHiQIRi12w/ke7KjwhyoTumoxIZgKEXOnMEUHMLTEwC4yPAS8+fxMu7e3DhbA7TE4wtr0HcXoLHfnYWsZiG73yjE0sXxWDHqYYDenryePCnR/Dqy8PITVdJAy2rhEwmwJKlMWzd1oSdO9rRuSQNpmonI0KmQQTJK9r6jnH4ivuu7O51j68LxHCuXuNBStC8xsn36efrwUI85d/Lu24EGLyDNrCLESyu3FLs40esRiErQF6KfBT5LnpzSTK+GeY+jJ9j8kOPtQCp/JVsiOpBMrBzzF3qV7V0yz4R770iX/TQm9sbBQLkZJtaakUINE0DI0PDKJdpVUqIcYYGIa8MNDbWoSrFXCY2Ri4ZGBsJsCBlgTk6WG8drh0qLWzJOEuhgqFTFCSUe6klscN0laXRh6UPTxzrxqMPvw4D87F50xJ87z/chboWoLoaIB9+8ayDkyeacPyEKhPF8AbLZkynA1N3kUgl4bs+rKSBzzywBHd+6l/i5ZfH8P/+5WEcPdSDvXvfRNf5u1GTqRILms2MOnR4jQF337MYt39iMd54o4Dv//kuHD8yiFf2nsH999+CJcurUWXaktz04sU8xsYqkj11661bsXQFa2/yPzOnUkFDS5qaW5yTTsURF9LAjUmZR8YfarYGR3ghWoJtHDp0Bg89eBim3oidO5bh3/y3d2N+izKscYoNDQIjwzYOHD4CV0yAqsQb38dYbCZWpXXRCyYQBFMwjYRYkenpWa6UpZJFqQjs3j2KrvO98AILn//idgwMnUc+m4RlGigXsti5czU+dX8nFi2zARqGdB1OhUmhOAZVsK08iqU8li1zcOuOJPRYUvh9CtExk4Yq1plWigOOt+N5yrtU12HZVDbQWknlr4ieItNR7yu6LsaV00UZPhxPR6FQwNDQoGTA1Y0iamvp+ShetypRAaUsSWIjLkFFGAZNzop5ZIPJajqu0hwTSDQ/UxhljCJpG68pVwI4FGREimaDS6DQzkyvDBR2K6zHR0EmjcJ0Fof3D2PnHU1wK6wZFSBup6U8ya7nJqCD6oYprN+4HIGuIybpu4HahhgYXxNPpHH27ABy2Q7Eq5NSJNR1AALvjQPTGJ8wkUxVI5ZgcKyGikuLJRFKkzpVTlCSBBL9/YMYHWlD4LfA9+nGqtQOBCk1LaAEyP6T+ktMB1FSF6GQgjMLlFKTyKQ7MvmYvth1kctOwbYtLF6cwbxWapuAGONDHUDLeRgbHUXgF2CZKfET52LCgeR7U9UaPv3pW/G3/7AX0+MBjh128eor++H6U1izuhH1TYbK1pWw4HgVsSovWNCCrrOXUMz7GL4UYMlyIpAyOpZKHhJxJRzQ4irZvhwXsRjN98olwDBd6HroEuDTRZKIRGTVxZgQEVSliVWatOi3m9uPPwQijfvVe0LGhFyQmgO8Rs0kdTXvZSySzekS7lOZQ5pMIqO0TJB5pw6it/C5atF4b9voeR+n7X+9fb+ewuFao0j0o/dMQBpKbSqTVWjULeuoSuioqdYxrwlYs3IlPnHPSvz93xzAK3vGMDbqwyunUfEb8PhDPWipSSDztYWob7YwPFrBww+ewK5ne5GfqkbcSkpse6a+gnvu7cRvfmsp1q5VqfWJ3hQAyFyxzjItBFey7CJIUHl7rU5Ev4uJKTr4FbbXAaLIP+9QCPoV3v7ebxEF93ts4McJBqGiJAKc4Ikil4Ir5J/IRwmbMRMnB4m34rU+cywwRk5KpFGsCETJLPQ1fOjV4zGjN97c/tpCQCoBAC0tVTDpmef5GBshf1kRYTCiRTTstM1vVMYabwynT45juL+A+fNT4tlBfs8kL1sBpibzMGOsxhCX2HUpK+gx/IUlomiQUeyAUwYKWQP5bAzpRAaLlyyUuvcJ5mWhgGpTQPNQrOSFbuqGgXQmLvw4k/bQYkqFSbFUQTKdgBXTxVPyzrsaYPqfwH/z3R+IF9+Zk+PYsDYFn+F5THhKHoRCUpxGFA2btybxr//4s/h33/sh8tMl9FzMY3rKQzxuijvqK7uPob9nQsLN1m2sR1Mb6bwSLKXOcmi4JG9MWSURz6AqWY/ABcoFJVynkozPTIqMQxfXQq6IyfFptLR1YNGiRsxrB5iXgiwNkwFN5FyMTeZFXkjGq0XophwRGK40XrdygDUGPeHBSI/D1Zth64x3LEkoHz0J6cl5+I3TKFeKaO+oxWe/Mg+dKzoElclfUVAk7aCsJmkDDENy6ND1lwmQqtIZWOY0slMehgZ8SRCUECVWgHiMnhTk02hFpSIhlBFMxsYbKFChS9deLnqBh3LZR7EIVMdUXG8Ug08WjxU1+GX86+hITuTCWLyCllYlX4pjKCmdxjA/ixSOAZF5+AERg7ayKhGyVEco6ZagMfDccGFa9M0lAaSwqcGiWo6umG4BxeI08gXFaJIYkohKIHEQg1OMoZJ38L/+z4/if/pfvoj29gZkag1U3ABnz0ziR3+7C67jImGXcfcnVolFk0IdlyXW2EmkmNbYxdGjXTh/bi3iVQlJYlMpeTh2eBI/+P5+XOgqwGVbWFLWYjFRTiJFapjoJpFirKKB6WwRo6NFTE/64tPNxFgsyM0sWkxWJO5RImB6Er9IDocuhiT4GrPk0tU0KEMjw2Mri2U256JcysGI12B8eFpk1UpeBQAX8h6OHe3Hgf2HUJWsgkOtE4Vwj2VXCKQAXknDF7+yHH/9d0+hUqjDzx8ZwsDgNDhjvvbNT8JOxCXDLb3cY6z5kqBmZz3277uE4cEidj8/gZqGJFasiQvzFbNNmTC0pmazBZTKOdTUpZCgM7fGGFv6T9PpuqRM4PRZD5klIiIJ1dxF7O2Fkl9bcv5r3TGO79xxjcabv8m+aMpDZOBMnMNREz/E5slgfXLh4matakoRxUgWxGlAmGt1/r0JlnwjqcEHsX27Yf6g3nmjPPft+h6de29tVVHufBaf8y4/sk4ZrAQhI8/Y/ABcr5iuIg5Tt2En1KK5ejXwb/9kM+pqj+PRR85jetpFwqpBpWjgySd6sGJlFbZUtWDXC5ew+4VBeE49YjbjabJobnPxuS8txxe/3ImWFrqlBahiNROudQxVUKtmNBnkN/ZEesQL3lHfOA+uBktSXJ671pYvCInz24CPiqCZhr3NdR/lKWrBL4fBtfoc/T53vl+/fx8ODK6Hx6rNCnNmx1slvFLJTWRE+SccdZLa6ErGjBEfbNHiKXhJoim624pJWLkvzh3HiHbP/e3m/q83BIgK9Q0aUmlL+NSJ8SxKJWZfpWKM/BzjITUsWpREy7yYZGY9eOAAXnvFQHPLWjQ1JWCbliS3GR7M4cWXX0FLexqfvO9WccfVjThMkyUFHRgmS/GoZDF8L2MaNZ0hNToGhiblGXEvQJ6CSTZA1/lhnDxxUXhcGqLogUkB0zSSGJvMYqR/FA0NTTBMGlBYYs9CqQAUizkkknHYRgxNDXVwShp8p4Kh3kGkazKw02nEqnTxpGLpv3Ixi7r6KowO96OqirliGEIHSUh66PXzmBgtYcWa5ehYXAcrxozjVNzI7BPkoHeW5ypYsaRKkjUBvSwGej10ny0hvioOy2bSoFmjWTqdRqVUxsjQhOSWETaaElSpgvNdvTh89KTQa9ZfJhWzmO8ECZR8V9xRA62CipeHx0RETBIkErSOZDwp5VAkky8qUoXj0uAYdu8aRKmcQoIyv6cjxioX1LnqJtra0khnDDhMHmaxpKGJW3cux5uHRzE5NYk9u6cwr72AVbfEUV3DrOvsqy+yQSFbRiFXQDqdRFU6yQgpgR8NU8mkhVQqjumsg77eAjpMWlN98ZJMJBjOwnJeys2aRq1Cnp4WGpJVPmrqlOWbeCL8ZRDApJup405KmQtNK8nDqEWrlD0pzklhir/TPOv6TILD1Lpc2FVKd3H5sIBU2kCqykJ1Ji2aX9ZxlMSsNLOyTllBRzrdhEu9Q/jTf/NjfOtbn0fnigSyBRc/eWgvhi6NwTJL6FxRi7W3AHaVsohSUExWAVu3r8WzTx/H8MgU/voHx/GFryxFTb2O82dzeOifX8Slbhu2WQ+f2ZV0CojMQqu0hcQr7qdSSaRSMQwNDuGXT5yR2ppNTcy9paFzaQ1aW9LiOUv1CQHEUg8qXbhyL5RMq1J7pwIWA2dMKuFBgDY1W2hsqsXgsI/Tx/J49KcjuGUFEcNHX+8k/vNfPI2pUgOyk3nUL0wiTldtWUMYU8qyITaWdgLLljXh1JEYDr/RJXV7EgkbGzZlkEjqItTyFroCs0/3fXoBnnysEfuzWTz52IuYyi7BF76yAG1tzKgVoFyktkHH4UMncezEQXz9m/fg7k+shynByRRw6X+eE2tnhS7H5QDx0C1aMPkq62m0oEXa2V9vUv7r37toPOf2lL/NCJtkCyM8uMwiE2raKVSKmzm1WOpC0gTuSmotMk00RUVc1Pu5ndvoG32fK8N/zX2X8SH1+lU+KhO2eN9QiSiVXbnUkU4z6yIrCRqIJ3TEFgK//burMT4+ieefH0C5YqJQAE6ezOPpZ/MoVDw899wgLl0y4ZXjCLwK6up8fPaBTnzjm8uwYCET31HrG7WVXIASa1WSFbIOV3zEchUN7hXnZg6FNVBH0aWXbUOtqqzOfOGVx7yVN/B79Y+4gvE1N+yHuQ5Cze+77Xt0/Q0BgyvH4B1ObolVJpPI+6NnqCPhM5Q6QU4JXWbd1fA6lUmfifrILN/Qg3zDYt+vU8OIAVxn02mgsSGDi3YO01M5ZKcY2sUcfMyzYUq4WnUGuO325Th9fARnzwzix/+wG9NTJdx51xKpI9/fbeKpXx7BgcPP4ze+fSs2b6F1T2Eevec8ryi0tkxHP1rUYgFa5tlo+P/Zew9oO67rSnBXfOHniI+PDBAAARBgppglUaZEiqYo2WwHSY69LFv22BNWz3K3l6enu0e2xz0eOYzH3R55ydmyJFuyZAVGgVEEg8AEkCAJEDmnH1+qV1Wz9jn3vlc/gR9gEEi8R35U1a0bzj031Nn3nHvuQB4nj4zg5e37sPmBQSxfpc49tz4zhi//7bOols1B9nR+Ra1hzUE1TfDo5j34P377C/iJu38KV1+7DINDHiaqKU6fTvHFv3hRjvrIFXysuSgne5S3fP8w/vff+j1cf8PN+MCt16LYkxdt7GQpwd/9zbPYv+8A+vvbcMWVnSgUPDE93/58GWOnC2JNef21l2PZ8iF4btUoxoy3Z46uhI6OXNnTOTjYiwULehD4p/DK9kP41teexcjJpXCcKnr7i1izZgh9fSE6u3I4fnwU27edxL33HsHqtXXRiD639Qj+6guPY2KkC57Hoz7KCGhqXCNmgmCFuOwjF3TBd3OI6h6imoOCXxBTXTek4KTnkX7kR6/E1mfGsX9vDX/+x5vx3/+EgNhBWzGPejSJtnZg+fIufPi2y3HVNT1Yf0kXuAibz7m49SPDeGpLH44cHcXmzY+jUj2NH7ltGVavDZDLU27j0YslPPfMLux4eQfu/Nh1+NCtV8HLOfBzPlYsX4AFgx3Y+oNJ/ODpPfj7thw+dOtauM4kenpDXHn1UvFqzoU0euAdH3dQK/H4MUg7sM78fFFwpHMyXv1iwUVXl49crop6fFqcx1BLSbe0AmjcFEEuguvTRTHPrQRk0yrPMqPzA24YTmNE0UmMlw6iGtFtfIrOHM01VUVbyPHw1zqCMMTixYM4dPg1/OEffkFsgWNU4HiBeE294opV+Nznfgmu74qHI9qDUyNHJP/Tn/4RsVl+bcdJPPHkQ3hu22ZhIM+0GR5chU//7B3Yvm0vnt/2sng98sNIBgS95nKu9ooOrr12LXa8dBovbT+AF198Ei9s+y7S5CRu+eDl+OVf+jcYHOjQjsjWFtNgDyn3cdI7K81N5UgVLuWU4Lg8X4aOgXRALls+iI//2Afx5X98DKePH8f/84dfRG87R3xNDvzuHVqF5WuGsOWZ7ajVxsXEkPXixtpqaRJuIRR+ffKTt+Lze7ZikiYAOQfX37AJxQ61h6XLeqrM5XxLnyauDn7uF2+F734fW595HU8/+Qgef/wYghwEeB/VAAAgAElEQVTPhKnBd3iuaCidvoeDs8ZlU54BWtK6eBXk8hX4JZ4pWkYbNQPGZJrgmz9ZkeAHUFaB3ktTdasuZ+JAo7117jOaEivgWEFJESVFJXkjexkIMMWLmOicxNbQyuxWtnqrrmeqwPn27q2qs83nfKvfvOiZBaTNla6xusHJRwEl+yT1mDw4m71M5ijxdkETHrp/APKhg0WLHPzML7wPR048iKefOoZ8YTEQLMODmyO8sus0ThxtQ2myirhaRUd7FdfdsAy3fngphrmnngIaavJx5PFddFEvCyY0HGdZsnBix4EhXo7L4DdjWvhsdbPtd7ZXyYv5n6EM8szmO1vZ86FvtnRnE5Ztt1nSCQmWxrO9Sn4/TB6YFbRZ28C2y5mvSj0951p9J4Enj1wjM/iWchXBJLev6D1BKL3kqxXZmbvALCxvBb0HOcCeIuaTPrB02UJsf+4kJksVnD7hCNAMQ+7jddDO7ecx8L7rVmPHtv0oV0Zx6PBhfPUrX8M//1Mkcd20D05axMIlQ1i+YrHuDw64/a2EID8KL38acE+gQ0xj9Zz2lRctxB13XYp/+eoT2HfwIH73d+5HZ08Oo6OTCIMB9HevwvJlPfjBs9sQIxR5OZfPY3yMWrM8urp68Ld/+xX89V+Po2+wCxOVGiZKHuL6EHq6e/BL//ZODC30RduXz/MIjSLu/e738J37NiPX1oHxMjA+yUXBLjmJ4rbbbsCSJV2ijOEi96MPPY8jB0flhIl161z0D1DUVodz9ADLPc60tqSijePKD0KsWNmGSzb14OmnIpw4tR///E8v45++ehJBbhw/9an3Y+PGX8C69ctwx52X4StffhAHD76K3/2dp1FLTsgJF3E9wMKB1Vh70TCe+cE2hGGHyPlFAzKLgStn3pcmJ0T72tXVKT1TPincY1mvweH3xgXWrO7EwoULcOL4YeSKbcjlgXw+D88LcfqUI5rovXsm8Mef/xou2diH//I7d2LV+gExtedZ0Xf/9M04cWIczz17AM89/zSefOoBwOHJH7RinJTtgcV8Bzo7CiiVeGapL8eqcGlr0WIfmy7rxtPP5DExfhLf+daD+Pa3/glhbgIfu+t6bLz0Myaui1I5wcR4LNaWnV0FrFu3XGYy1kGwJs90cV34dLLTP5DD0mVdWLy4Az1dRV0183hIqwM/zGPx0g54Tg39fR7yOa6kRMa0Vr1VUWW9cDiHNWu7sOyiNlRjei4NwPPB6AHJ97kBtoz2jgj/9Q/uxN996WE8/NAT8AMPYb4Nleooblx/EX7///qMeHvK0xyVnpUjIBdwD6iDNWt9/KfP/Sz+z8/9dxw7nqJcKcEPOlBoA376Jz+Am28cxBf/4hmcLk9g4ZIqCm306GY8RslZmnlcfc0SHDhwBHFyDKdO055ZVxdWrRoEgRjPflGtpaJHdkD+xJsgHFktGRhow7LlveImua1NXTVzZam7u4hPf/pK5AtFfP1fvgcejDp+6hgG+nqwfOUA7v7kXVixvoBf+ewWLF3aJ0hfvNly749PI2967wVuurkff/A79DQVIHVO4yc/9Qn0L8jBC6pIUJV9cnQmlCIvLtKvvq4Tl2y4DX/+3+7F009NYmJyUMxkxSOUy8YC+np6cNvt78cVl18iKyxeyIN0qeIOsHBxiPZ2Dx0dPH8I4FluBAf2cymEGcDZAB82sHW9cDhAOUgEQ4M8bQdRTCkLEnR3bX8UjmgRoF5tbWjresFywMrR82XAFFBEyxI9CoILZbJIyq0ZGbmf+0rYP/ltyhVcbLzMx623L8X+Qy/jtZ3HkLhLcWoswJGjp1HMhfCDLrQVJjA85OCmm9pxxWV58eBNT7YBBXvQRTudxJlfo//bcWBf8GpiyfjIhr+F9/PKu0Ht7AXPK4/Zk84/9G2kYV70v43ls53FrHX+3JgRk8eacF+m7OJil6WMoUsZskTHs/poScWElNGMAljn3mZXm5FvK+CC4wD7EcHmddeux+ObX8XEWA4vPR/hyvfFWFiUkx9lZqLQT58h/+43b8G69YP4xjcewZGjRxBFFfEmnwtCLFm8EHd87Hq8/5aL0N6uMnexI8LSlVV0j6ViDkk52PfrqKUJ+gYC/NSnNqC9PcL9D2xGuZbHRGkMi5cUsXzFAtx5x81YuizEb/3WQ1i5ql1k/ygK0dPl4+prluHjd1+NzfdvQWmyDV4QopacwuKeLvT09uEnfvLjuPHGBSh0UB4FNl0xjJ//tz+Gr/3zfTh89BS8MECpXMPFq1cIMPvEj38UH751KRYs0Dof3FfHC8/Sec4ENly6FsOLuuH7XO3WsyqpfOHnhTNFPqQiKUK1TjPWHD561+Wo1iLc893HUKl4SNM8Boc6sGTpAlRqFQwvCfGpn7sYbjiB+x54GOUaz80dEEdHq1Yuw0/9xJ0ohGXs/+1HsHxlHn091AKnoAdfOtPpbg+wYd0S5AsF9HTLgZ6imaZXX4pP1ArGFeBrXz2Al17ahtgt41f+l0/g5g8tlm1+k2MQsP7MloN44Nu7sG2rh507xvDAPSfR1t2BwUUJ8m0hNlwe4Pf/6C78w988gXu+8wTieg/q9XaUSqdRKNJZVITeni7c+qGbcMuHLkc+nyCqJ3A8F+1tHm6/4wqMjdXw3e9sRhwX5ZSJ7p5uLF22SOYkTsVUJB45UsLzzx9GEicYHOzGlVddLLZAgqPSRBY7aIHh1KIknZQDOyEenfJ0wOMT1NQRBtxb6WP0lCwqS2dzQhLDI0HUhEM8mzpFTI4Co2OAV0jQP8R9CHXEUQ67Xx7Fr3/mGziwp4qVF/XgL//hbnT0AKdOpnj11RNyzs76Db0yf/Mg1Y5CiqhGr5aebGqerFQQFrRjTExwAnZw/Ciw78BxLFzYjZ7eAF3d6riHJlK0Uefew55uT44hoRZWDnGtF1GP1R34yZP0DlVCqTSCnu48hoc60UG7b7qAppFAykPq6eUwJ2Yq9I5LrSaPBBkbg3jyIsD1eA6PRzCsm1/pbYueECcngWNHItQmxsWcdmDQQdAGnOCWy5TerRIsHXYQ8vyeUk1WZHjaSM0H9u0H7r7zq5gcS+CFu3DPvf8Tli7Nw3FOw3ditb13C1IXh+efOlwFUvU8V66OHqnj+MlRTE5Ooqe7H8NDRVkcKNIEWzwJc5dMRSaouJ7DyCnVHvPA13w7nbdQdcvDW9VcODt7i0bBCIB6vIl+1LMAtKUBzXLs/L+37WUpzbalhFnhTq5WslewqeMkNqvtNgd7Zd9gH6LIRG2QUQbJ1R75cK5XBRmyEjgl30y4wQOkgqTP90rq5xt3Rry5aJkSfq51tukydZySbyb8LOucrQfrfzb8aqSdixbbb5irdII5GEyuNzKbjQia4Xji9c72MCGU+ds/CuVeDZU4RuyG2PZSit//vcex5ckYE5XlqMa9siHGTcdQCEeQD4/go7cvxWd/ZS3Wb6CpU03Mv/NB2Jj/Gllb2hqFz3IjdZ0l3AYxDxJ7xo4713tTT5vXXFcpY66X72A4eWF5lr0KCXPV8Y3CzyMeZOs0V13nCpf9mGrmQb2mLJiY7yq/5TyiQLbVGD8XjTUX27aCQt/BtmwV9UPnAL/T9lst9/DUYjAFymPAL/38X+P5reNYtWox/v1/vglXXNcn27O43YADsValp1XuM9RtZKdP1bD/wFHk8zn09vaht9eTLWq1SP2w0KFOPXIwdjpGuZyiq9tDewc3K/CMdS4gh0jqrphOnjqV4NQIZc4xLFuxGB2d1L5zW1mKOufipIZC6KOzPacghF5OKym4x/LQgTIOHzmFXCHAwkULxBSYGITyKPc4FnMe6jUXbt0RZzsHDo3jyPFReAH3Jnago9tFXz9Q5Fa0mPshgQe+uwd/+vkHsOu14/jlX7sbd396NXoXVeD6YwgcHuhShEv35bS+cKqo1iekfT2/E5VyXsopl+g9dgJRrYSFizrQP+Aj8OmEM0A9DsUXzWQpxZGjFZQqNSwc7gIVlO08mTEGRk4lCPwIgwtoqUill48KFYlm61u5Bng5+p9J4ca0CaMljSPfuNGTwJ0f/VMcPV7BLbddg//1P12P3gXcD0ulF1DwAQLOHVuB//xb92Dv67vwoVsvwn/4L9dhycoCYmIe5FAt+4oNImBsFDh+tCy4oL2dPGtHd1eIznZ1cie8oDWj4+g+UTniBZgYBw4fqqFajrBgiCdjBAjydTkBxElDPLr5dfyH37wPp08B19+0EJ//k7tkoSLvp0iTSMy3CTRFgdVOBnXoJC5zGU8yFb2nejUaGDATvEfPQzp70myTkEUMQJIU1O5xBSIJCNXqklxEzLqLrrYOHEwmZC8owYxfAIaXORhcNKBaNObLP2FkJHbjSeIiiRwUQu7rKItNMF00p3GAJYsdLF1MXbgsBsIRgBgjDEkNV6FzchyL3lPYdZDSBNgsSC4YAPr7uLO2KIDLEyc/RGuqWqdXXZd2u8YulppH0fG5QHen+X4aSynHJWqn+YuHXN4RswPuJx4YpDlMj3xruZRRd4DeAU1LeSjmiPdC5PKBmi9IILDtuTJGTo6AezI+ese1cL0AUVJG3ovEBttzC3KuoefyeBfamhtX1Dk2rIPFyzwsWdGL1O2VTs1Wknbgk6yA0cQskkmLZ2/19XPAGSGPFx7xQkOezP4Qycj8o5PdVGcEdgLMAtFsmtb9+cuBGcByOqmUgviTicHc6wNcxxPnWtOTZJ/5wRH3F2K0T8mJvfGtuBpJT6QwfjCmPRsas7TMdm9rZK+MY+/tdbZ0M8NmoWE6Ted53bP1zd7PrOssIbZ/zKizaRebROLZ/pS5Wq7P+p7uOSm8aNexWTVWL0isIZgHa3PbRy12sXyFgyuuXIntLx3E6QkunnKe5mIjF+qOobvbxzXXdGDZcl9Wm/N+qHOlYoDGqreUx7ItbSyL92d1tUQyczMGzurK8ozL27Mqdx50Nhg6y81bWtZ5yINZqjwjaAYPzKIJO4HMj/O9mvZj95EFuGaXsv2XIJM/aqEa/W0GQa2AC5EDM77V4sSS/lGANWv7sG9XHQf3HcWpoxOIyr0IwwQ8u168pIjLbEdMHukYs70jxNLlS3QqIjNltSMWEKFbYWIEvo++fq566MTncKHPyYtmkDIvvc4X8w4KC10ML+wBHP7xE89zMChLc28m1fchnDgQC0VqYCno5wo1BHkH7V0FrF6/WJrTGguo2F0HPZhShg/pWtV10OYDqzs7sPLiDgHZzJrHsIi3+5gKHwe1CeDBe57A8aPHUWx3sO4SnlrB8USfMyLZ6oTIMS3WBD5yfl5M2Xk6c5CP0Rl44L7WBQvb4br8I65gfajhVMBOzFToAvoXkh952XdtPxHEMW0LyXVqdujAi3urExTlFAgtvtCeAtx6R58Dno9axL2ixDfAwYPAZGkCvufjsk2XoBB6ckxijdsWA4gDIprSDg1zS+M4im0OenvoX4bWPoHyH7Gc2iGQpuCi2Olg4SLSWZBFAPKYuMfaLrJvcWseARmxGNuGOLybYLibC6+hnJRBw6JEfAK7mBhLcWBvBSOnxrFgcBiXXroS+bwejZKk3CPMvsDTOni8iUBF9o7s0DXQmdS4XEkxHY2dRJrEzrxGvnNiOJ4vhMoKCpOndAEEcS5Tq5RFq8bzIiksSIVYJNXZMTuB7gh06MVIZlweasz9kfwoR0h5aKpZBZb+QXLkxpBNmC/nY5rAVPfT8AwgulIS6hNfQbEBm0KHQirpCJofPwSMzbhSWWEKQ8gnvuMeRr2lzSDLpRdEKzyEIkizY/G8TvHM5NBbkDoA0ByV46HvgqaG5JOfy2OCiyoB8N1//S7yoYdKZRy33X4thoZ4QGssG4cDrx1weH5NYPYL6ceIXsFSnqUjOz3YZhxR5IVqaFmGTFKyKsZDxVkX0kywy7ZSv/2WJ1xZUc4qP2dMcNmu0rp/D3OA7W/GVKOWZgA1ns9ww6gyNt6Oq9JlPZrOfVX6bC2mX89AfePV9DRzP+ubuWnhmHsrePFG5dj3WoW56G1U8Aw3c6WdO9yWnb1yRpFZ+AwlnemV7mBjDCOfmw8/nQBwAtO9k/ygcQG0ntbge7SI8XHppiW4f+FpHDgewYm5ssz5VK1X1qwbxIpV/cjRdbuZ16W/2+lPSLLfRtbH1NpW5WyvZizIQovkrf1h3s9nW95845+J9fPNY77xzjcenKnu9l2jbqYPNJ5NhHk/WzmhKVvYIma92nxnfdkKvLA5kDa8q9IS8K67b8Ljj/wDTpwYwdatu3HpNb0C4uT7S3mY0i8VKg15nzKhOvSkzM549MCqc5GZ52S+o+dJY7onweyUhCcEXsyPpxi4CiqkQSj80zdJRWRy7i1OJb0vcdTjq4JNBxESkdspf6qcLiNDAGFVaEnTup5vbxbZOE+TXp5LSTm2ntJJKYEMiQswMUarvuMol0/hA7dcj8XL+sSST06/ELnefIlsFSl0ywIwQZ8qlORzIu/JM9aWfGEAeaZjl/zSrXnkm0rLklp4zZgUwbUQKoCEPLKGL9gODmX/qsrhjMd6piF4hubgAvqmGUcS9eCef/0+rrjqA4gWBzwiREB1uZygOlnF33zxddkT63mT2HTZUnR3FYQW3wlRi2m1mMhxhzyHQyzLXAJGMpB7VFknAmf6PBB0o+pSty54g/Ul9VQ80YcOFxmIz3iMI3tL4Ic4dmQcLzx/VBzIDgx6+OAHN4pjyIDnr0pvSsCtKL6fM+doCpC0H1Tb2cg+c8/OQlYLcQyzjcU4Zl+jbGt0EEuH8QX3Eet4XNWIaG86CUdQGrN1zLkykTikBEJ4FBi4cVT2RRIIcZ8nQZoeoOYk1LyFZoXE4EF2bBJGNSrBEgVbJtW2bH6/TTzBkNpPBIsxqXZ8LiMaz5iMK71CRo38Yx85EFWzyZQEcdxISq+85Al/CZw0D9doBWVVh/SDoJMpCXzVYy9dPUfilUpXU+jU6MiRGI8/+giSeAUGBopYsZzOKGinnofjcjUCqJRi+KGrglGDVJ7Jwg7E8tlO2i7KAPJPpxetIzs9Jw6CZE40NIWgsw3y1yynMl/Jg/nobyrYbIbb963re40DMrDMAGPd2Oam3W3zM4r9Ze9tGK90ppVZtMm+at1fOBww0+6brrDOtLTKoG2POnUA92cmvsoLnNNo+s/VaR/YdBm980V48eUakqQClyu+iBCGdWzc2I6Vq4qygku3944sWHK+VMsWFRc4t/ryXdHvwlwd/Y2qRg5w3n0zP/M9fjNZ/FDTvpd4cG79wIh0U1shIz+oQDP19dQnTr7k41s1oqbm3np6l3DAiQVk0SElgdzFGzpx2VVDGBs7jce3PIQf/fHFWLJihfQTynsEGDxBwhVgJ1Ksgg/K4qYviS5HBGrK3QSY5AVlfVkxVsaIgM15iHOsAiaCRJnbRPZmIs7HlC8jsWaiIgRuSWV0ypjEAXFOlFOOy3m8DifWudFKoNRkEpWlMeOrbM+cBed5HHvUP5LyGOXqJPzAF83atu0nEdXH0Nef4vY71smxJp5POpk/tY/8Psi/ZjpnrnScRAtEFXHkGyN1N1IPQZZoP5uQgriBcIqKMH5PFFrRVS95bYAl87M6HZLMPOk4jqdikHdxXnhURxm5MEQ1qqFYDMVr7gdvuQpPPTaGbT84jl//+XvR2duGTZeuR3tHDqdOH8Hm7z2EQq5fTHtvvfVS3Pj+LnEwxK2MBOE+8kbtxK1wXKhVepVO9UFDPgjEk3asI5W+QVzD7yuv5Df5Qsdknh5jl0RyEgc9G+/cuRvf//59KLbl5Fu6fr1dsGXba88BncX6xDCCoojKWbiubCi/DTHS4QS9CFVCHEGIdCrtsMJA0eC5CKj14ztGocIyAQYWxDg9Mo72thwCozRkE1EYYPkuO1rKTfKkjh2CGfBIFXZ2VphmU74AVME/Jg+JJ+zQf8hK8o5/jZ90GEOQCeRqgv64GkNCzHszd6sCt9EzTFw2FfeOsm5E++SVLcn0Sj7L/kbNl8BcQSg3IbMortq4CGk/kNbF0xNXbCoVerFtwwsvvgonLaO7u4K7/82H0N/HfUM8003GlZwJmg94sConFwpDCly1SXmgLp0fkTIODPLRdjAFoLr6T9ospxQEs4PJZCDV4VBnXfmz9TIsYIg0gAL6Zmjr7r3NAe29ZrBoVaWvTB9s720utGr3w+cAP4BcoaUZLH/2cy8PLhc6EwSOh3LM84Fd9PX4WLY0j+72CupRDU5ag+eUZQvEyhU0DeM0qQuanFMpNMgCoggWBJna0XXG5AfCdvyz5YX5uJxtsinx34o8pmT4Dj+8FfS/FXm82Wpn50N7P98ry1ZBTKnQfqz9yt7b63Q6Wffzof7T6Wo9v9McoKTr88hB0AdJgkLRxx13vg/79u3DvoN7UIvKpks1JTn2HJVHrTxPqimoGzlPgikLsy+zDxKgUdZTfKBAlEn0HZPqua7M2fR/yYr/6JYsOtqROCLbExPQ34l6DBdtmpU0jREeU3LBj2BM8uQZidaqUl82aOMSdiXi/s8cPCdBX18nbrxhAF3FX8T4WBXrLx1CkX42RdGi8rDAaqPZlXoQ9JJ0wwqasorpLytLTKIw20RQSM6qJIIBmJCysmpDBUBnQSYzJs1yHJGJaywcyQFV/PBEDq1rtTKBoK1Hji75jd/4BP4Mj+Oxh15BrTaGE4fH8eCRw6hFJXhBDYODXRgbOYaf+/k78bFPrMCCYVpGKplyBKVPsKv7egUUc+sJ5w7SQ6oFyGnzE7SrQk+1s4zJO21RR45oTOJItqQELMQBJiYjTE6MIMFJrF23Hh/68OWCjXgcJdcYRIPsQBy+Mh/VOEun0slNVau231hGGu0XSxBTJV6lRxiq+V5XkRUUOvBZUQdYuKiAT376auzceRxLVw3Dk3MaWRarTbTMQ025yZbIm6sYND/lCoZdWbYMEh225KnAUEESG1k5x4aTodQ0pxIAqaarovHke56uarWkcjA9aaG7JzYCyyfYVeAp401zl39l0EkTUOxgi1HTqxM/AZ6o0wnipHOptpCbp7Uz0iMWTQxYBseKB6orE+4p8j0pvq+3Db/wi3eh0N6FO+9aJxuwHTEL0MEg+Jiyj1eSs310lYK9i3/MVwGirAoJi2kCTHDLAslx03n4KFkSwJN/agah4JVdjO1reqSpvwWY5rF1uUA4oD3HjKtsnU33mNpLshHsJMaupnPLtLetxwuIA/KRe9P1tYt77I+6yJaCWwn0e2T7IsGoJ6ZIOaSJj1XLutDXPYrR0xVZgPOdCQwNhujry6sXbvFOXjHzoM6F+i2hcGIsXURmYAm2lLOsTCPZuY4F/c6o7dVZln2+RH8v8YB14eR4LteMvKWZsIFsv7DXbKOZtjeyRvZN6/5C5QAlzxShuCV2MDoxgetuGsTS5b+CiYlJLF/VbrSYHhyabpJN9h/ptwRUKpuqbMy5jnHY/zgH8h0TUGYmQKR8a2VjlTwpr8u2K6bzCErt3Mn5WOdOh1pE230Zr4l1xCpPpU1KxlqayM4Oy1bTWZXFw4Y1IJ3miLwudXJR8NvlHPoUNdTKJVlcvPx9C5HGDuhqhoohGkqqVk/NhXWhh3IvcYsCUKm3S80k/ctwexkVMpSpOf8zA8Y1ml6hlXK1KnTog0LlepG8kcqWOsUnwlPhBRNRoWPxiqtsJmiN6esiRkdHAeWK7qFbsz6H3/mvN6BSugE/+MFxvLZrH04en0AQeli5ehCDC7px0ao+DPTTNwwwMVFBmAsEd8UswppL0+OrNKCaN0uTkr+0GKWmkxtdSZNs79P25jZFOUpJvn3EaD4cj5aYMepRAs9zwCMrP3zrlVi9+iL09nVjwRDPauS+T+ZBk1zyUk2z67WaqL3MjMlojGRBhnYqAjlhpMyq1kGOdlwBYkTGcqONwD4cJy58tyhZdfTkcftdV2P0VBU9g3nUaL/NhgAdL9CMiYZ1fCaQNIc4Sn1JpoJMChNklmBA6czsiMJNAy61ETlpc/+iID2RkNk52GFp4srlGnYqav0osJi6yGqELZ9xOIjIIMsPjjJ5EEaaIWt4ZUAw31CT2WgsBjBPTgZWq0j7aA56UWbCCdiBA8RxHWEYyHEuV79vKdZvWAqeShKEin0jNlKQgxM4YvrupLr3k6v6mrehXZgjU4HUwdxpi0rjC/nyLHeCpZU2IV/4qTSLgbDY3TfrzRWQFthUHl4Y/3IUsH+wT+jMMGe9m91Ex1lmhYavzlUee6fTZev3Tpd9vpRHHrzVtChftR9leXwu9+xPnPc4R+n3QUEmJzZ6QeZ+f1qJ5P2cOASKohRLhvvR03EQqI/JucZwT6GvvwttxYJYjHguhQau4DF322NpZsVVeV3kOxdaW2newxzgIOHvbK+Sxkrb5tstmVDU5rOVyu1Ve7wWxn9teDOkdXchc4DKjhx6u3xRgVCzNZD0iBmlWN+JWajRnYiMSF6x0/LPKIfUHtX0LfYvnVstV2UrlmgFOT1yPqSMrT5BrEAp268IXkSOZP/mvMx9fZkxYqZXBtHqkT+DJISchtjAeDIWOB4kNlKxNNFwSSOb6l1UqzGCIBCtW64Qgl43a+Uq/FyA2Hgp5xY+A++kTP1H81VgTaxjvyNWh0k+EHCZ75bQa+okGlGljLziuc5OEjT8yJA3qZgNExTTLFdLpERl66PAluF8SYDqoFaLUMjTkSmPWymho6uIsODglo8M4Kb6AJI6NYSaFxW91I2Vy9zPCRTbAzhehCiO4bt5xBGBNq1E7feLdWQxpEEtd0QJxSO8pP21bqRF6VXfPMQsstWRWkpPnT9SK53WE3R1FbFxUwG1eoJ8QZ2R0qQ2oNelxneUx78IVCXhBFi20pmrACw7KRoaGSaru1phBWGMwwzoJaoOekQlSE6qbOEYXt5DN8+M8WjUWeV6s6yOEAy5acGU3eyQUgTRtkMgavYOUvo97SIAACAASURBVJCQIWBXCtgR+D4QVM7VFG4OTrnKohheTFy1ixFoqsY0dRRcMR4HTWIOS26sqUinsB1CmGIGl+FL4z0bUFe7NRZBrI2vV67mECRrR1LbbeEdSSfg5L4i5EAPuxOTI+ju7EbCI0Z8HtNSgcPjVajdRR1JXBUPTrJpU8534woCh5zyRzXhbAc1N24MYKGJnCPoZhK2H2knEaZO0tEJ0jkcVX0uzpcEjEqFJWZD3S4ZaerWv+91DnB61D9bU+lG5kGmCBNDJwb2fTMOpJ9w4tbJTiYw6VMa5Xx7liqxcucxjW83z8iDt7oM22/e1JVdKtvxZhG4RfZwXHHh7/khvEQtVHra8minxU8yZg6rPoXOzg7k856cXew7FNLM/O2aBUOaGpn5vVGu7dbnUpFGWjvvnksm7/I0LR40p0ZxymH7ghFm5Tts29i8E3PGqVNq84ts47auFx4HHET1GIFXQK3ii5Ypcevo6OIxfI5Yazb6icFRCqqMLCgM43ed856xBpSPOSPzRIOgscgsSgvzXeR2OGauToBUNFbZsoJUtJAEr8yT83VONIMy7AVi8MMaI6FCJkllC5hK48bm084P3K9J96bipIhzuCqZOHjECpUfaNLhQPY21mN6deXWMTqucZBrD0S3JJ8IirsCFq0FpGohVXYnPdyiR+KIQ7jHUkln3gqa6UiHZ2CSR2o2yneWVSIriNNRlbg1XK0bNSuOY2IA5kftYBWO/FFOZ2gqWzpCLwc3yQmMitLTsl+ynvjI5XKEUKJcpb+WiIdjiFbRRVSrgA5WE1o90tN6rSRgVxRTBIwkwE4tcsMAKgRVUSfa5myd+dp0GrkYQG1xqLxjHNGWKjimIyqHR4pFkwjdDsRxXrSaBLm0oeXRJvQCr+eYMLFwTPihzDYFKoPYHVT6UgLMxGcJk0AylDfqype3Ls8TkcMmYzi5FFF1Us6OkSYxDBBFI7PWgqQBdf8NW1O9IrHxxImqdBhbKCtKJ0CSUkGfCLxaB+EHsRVfC6dYLQJRC5zNOZGyUqPA13QVw4S5LqTLEmv4YEhQWlgZokjbG9kSdpWkwSLJI3FcBEEe5XIZ3TyEh9yLSwKY24sFxHWzqdhVV9Jc0qBJAD38KgC1E4VSLitRBNSinpcZQfJU8oQjhgDLA0s/Y5Cf/FHba/OjgqqlyTSMueAu7AXykZEOb2Z2HakzeCHzQ2b86SDJLmho39KPHecKY73AYDukZVyZrLPd1byXix1rNp1NY8Pt1b432c16sWntNZvGhr1V11kJmEdgtny7umqAeyO11JmTnQJ6CWc6m5YB9v6NrmcT943ysu8bhL4FN+LUQnpP8xvKWYtOwLm6LHtR6IyCjtR0u4XvJsjnasiH40gSblMooS3noD3vixGNLNJxuqb3PQoU5KPhpXw/hGwzr8s9Gc7KmTmWgNT+5Otu188NWJB4+j2z0d7waouYHlG+LaSP35jZrmbR2Ka31+njVuicTwPZ7xgJIQ+YhmG8sP72mTyw75vfnqakY3jRWOCcXjGbH9NmftbszJLK+vDXGAvmec4LE2Z4InzgOLEZMS8TZ8487IsMLxppTJjls702kjBvajYYzwjg9l3javtJI0BvbJ3tlaG8z5A+LUXr8ULhQOog9NsEVIY5PbsxjSMkPG6PyovY1yMDG33FdBzp9zp++W2nDKqyKseIjUyPrpxbzDawGR2O8fRbI8qHxjzA7kmZQXJWq0NzogTnWM6lWoIjR4ZovFkajGWLbE8fJ6oQsuUI0JUhS80TTVwhIIsTeRzVZT4nuKFfE2rzeM85yJrE6hYOlVZkumLxQpTyZAo1jcm/Wd/s++ZQ1FpJPuZWM2U9eFSgplKLQIYRb5Af6qgnzIXiz4ZHl5QmanDzMfJBgFpMcMxFhBRxRA+1AXhaBZ21sAZsd6rK6Hsg4fmgvg/fDcRKh4USoNLMVdhJEuiDh/tfDeYRXpBeQ1+jmU3FiFokjCQLUONFt694oS9npFarEfJ5enEPwCNNeBINySbQZDZpFMENLNBsMJTUNHqDmYAZxlUALV2byMQxHx25CFApirejlGenEKDwhFh6iJLoPMOnoIeXig2wfihlFdrkLaUzCW8aqyLNuVX5YSdrdgxWWgeE0sUOri0t9IoH2zZlkgwcqpIlc+OZlffkYjOVLU2iNf7J8EThquGTGT2apfwrXDJlaN5ko354aYIgr4z6m02RJClyOXYOCicx8mGg4z6JRTWOkGk4qLkpOpSBY4aJqYj5qNs2ZD3tZGLoUr5liJx2q83Icsh55b5QavOcFj/72DKnzXLj3X7PnmJ7C3uq9lcd++xnfKeTJ981YzMu5wj+GGriitkFJ1TO+hS2eBQQ39MSITe9KCOQMQYtBViOTB3yj7qAYeky/WkvZVbmlym1QSFfMVw+ciYeJ3eWwDElc4fEYCSlXlKIVQDnFzM32Fe2sHO4kg4Op7mvyjN5b+i2xerqsfJP6ePqq/KH8VWQZXoDklgXnXablNrMmiE/hDvSOP2n9ZgeOuXZMsUGmmmXnxb7ERfGSlY+HPnIUVgCakmKzl4HQXAUbnoINBlx3RpyPNgr1rLplVAzopM1rsizAThJq8WK5k0gzzmab5mO97SUocmUxpOpVyJTQGBMagUYn67rKfiwIkxrhTRTIQlXx3gaQqscLYl1kNeaoaYVAvndY+D0a+ZbJe+1z0ly86xl8MEGsDR1HDHznYbYf/kp088C5wamJx+Ujxon28aGRxKP323Syn5seMAEtqICxhjf7M2SzChkcp7ggrKhwMYX6YllUQbga60Lx7XSxVB9L4kbwFTbZOqnLcsHU07jwrFk3zcCDdlmUZZHsZGbdnxncK06mJowvhI6hBTGZV/S722WX838m+3abKXs29b9hcWBrJzVBCzcL8d9dgQUNG0M1XMox4bsmczOBezD6giyMZg4J0nfZjw7jyhfZTyZuafR/ZlFYyhYud62A7V2VjZnGMc4B4TOD5JM5GCCV44AusNRTR/jydgheZIdC+Y7I9/LAiJfZOrD/GUvJONwDLnwQhlZMht4IeUTvmMYN1qQNt5rOAvkGY9wjEUlrQQz05id46ROfLCDm7kYHqgElBW3DfVy3qjR0hra9TulYF6tHPnJoRKHtLMh9LnQzuNgusTZHUGjPc+eZ5oynj6bOUMUuw7CkMeasC4q13j8/hF7yc/WmTw27c/vlcxVntaZxMn/Wf7a74HyVAG77SZCLFgOLYe4b5baUR5JySJk2zA5TYWYHJwq9kIkKEOUdALN3FBq3ts4MydGZTwLVxTLdGRIIxcRDFgz/cCKd1npdMzL5Kst2yyycaemnHxkTPmoN97xZjo99pOjKdQ0IJtAy7O10TfZJ95nn7NpNc+pIY1aNoJnhvCV0kleyYqC8QjFN7Ja00itgoVOJiaNDFpSZehqSFc2UYYHRjg+cx2kVJtYrnTJ/MZppiRpPVxQHLB9zF51QSLb19XbtPYj/stFneawZkyOTV5NP56Ff438dN7UGGJCI3OhiLUsuZGLgEIFp5wpbHp+zPS4CtLL8pjKvufV0CAX+zHkl4aTFdOQACM5zkLn2QRZmua+Gp4aUxWSJmTJPzpnCj1SO/0A8JXNj/u1VeAnVQrE5T3/YV424tkQ/ZbHtf3mHDLOVtYmt3XiO7audkfliZUYKG8FKdraHSxdlseixQmOHT2KYtHH8uU5DA0HsgIrh0uLSRFptEiKfDeZShn8xwhPcm22WYOkaTTpQgb7mj0T2sbUa2NsyA3z1zyt4GQFGns1VZ2aydk8kb4ZmTBQCW8Ks4w0LaKkpbBiwiUJ/yHN2bgM4x/5R6BIAjmOjBCajTqFdjP2ZJxaiU/HrERjOinTFqdtpYKkvlIxi7F5p+8bRQgTzZienlUj0tndWHL0aimxc0xTIFUHJs3wZina3s3n7N2Z3ln+ZOO37i88Dph+YCd4KnDMmBPNk3RMO+D0KmCjwSjbgxmQvTfD1gRp9lPfK9piGP84vjlWzXzZyN/eTO3L4nDUDmOZS/mg+TdLYd2m9/Pms50TtQR+szN4QwKbOWkc1t/ygiH0w2IwiV2cyr6WRJk05na6rK71n1mWbLvQgptgkmDOLBCbVzaG8lGOQiSVBJg2z6ZFYTaMCXUuJiogX8yiqJ2fs+1J2i2QpJWojWtKl5nL9qGphDWemmUziCmoKLQZNNtKQGeDBlPwtCWIRqZv9mYqUZobw8iYxoeqwag3W9q7L/1s/MnWosWjLDda9+cHBziZ2JlFKeI0kv208C3D9F8j6FmhX94YVT7vGbH53TBVpDDKdBQITTZy+DM/JNzPnEkgYJBxrYYkSwlJJWDgO/6RcmpGKPjy48IPMq9coaOpuZ41q7UhaGNNMmUZ6t7+y2xlGqDJD5Ts1yZ5xhzHRNcLaWZdyVtTT6kH+cAY2jJnrgPz4N/0n22M6eFn+5wVOGxds2HMz4bPkjfbfMaH2tDb+LhlFzcA33fFXfwv/+ptGBjagp27DuP66y/HDTetRJCLENUc5Gh6Jh920kLzInLLuLlv0MN2sG1BMrkqzPi6Gk9qhRJhs+W3xm8IDrL/w9I7s36NxY+Zr845ZMq3JsOjmRmSLkNbY/Bl2l3qZePo6oUCKB6dZYScRqaMbHgl3oEbL5SHkpcJ470US57xzwBSeW0i8mLTWBIbQFLbgGmbmkxGYjilKyYkfbZNMnk1yLL1agS84Y3IZUKTLYtJeG/mIVu05JQpO5OzlYkyQa3bFgfOmQOUG+14t/f2+ZwzfVcktJPDmyF2fnlYvr6ZkmzarJzfnOD07dRylDYbf642te+Zw9T0M59tHEvLfK9zlW3Dp5dr83VSG0NCzn7CtRnZazY7e59lAMOyz0w3/dnmNdvV5jnbO81r9kl9rvhvfTg1DvzIzf3LNsZc9ZnOk+nPc+fON+yY8xs4Z85n7reW7rOja+78Wm/OBw40x7+2LwVK9iMjtDVItP1Lr43FN7MqZtfupQeKgGc21PO9BMo/eqazmLdrxjIu5FbHj2glCDQdirR58bPMlBTleISFnHnIg2YdF7GTk/esgYirKc056MabXqYpAnKjP/dL88HsfZa5h/nTXI8vmJKx+SMoNiZ7Sq4JP/uLzXHulM35wupFGnET3dQvJMjZXeQlPcMZLvMFHRo03NFTUKdpMutC4Ek+GTPQM84JyqVGuVNupJApIWf3wPo166hpSd9sv7nCTfppQNPyS/hBUyJ2Ma4hyOqx+dbQhDYCqrU6ojgRk56C7CvROos5Er15iyd/6sX5R76Tj+xtpgNYFvGRoFEWMlgH8pztwf+sdpnp6chCexSTymHpDbDcrKedQ1UzneWJBU8aZqjIRpjz3s7PUyMwB1LCn60MSdf7hsWM1Jdx7Z9JImlU+y/7WWV80QEgHd3RBI2marqwI32OIM8Sba/MKnufzZq8ynYTW7zMG3rcAr07Cq/lqAA1myNAVw/Z7PWsC9uPdGg7quktwabSk+1COoosTywx2asuTGVDdL5j+3PuIcEk1PKTXhpNu5Nul3MLjyxgWLdEU7xPPjZ/tg80Q8501+w7Z4rVenfhcGD6eOezDZvet+yzvZ47l2yfP/cc9Jv7ZtJz/GUnjal52e/D1FDzJItQHEtTFWCzxp0WaHnLYDUFnhZhlsdsmuxrm/6MtGYTZO55PAm9xqrn2MwLc8sys+1saciGNeeumeltiE1nn3mdLSz7nve2nOzyoZkwZ/sKTE8+1zMrNfOdLWzmm9lC3mgSPdNHgfnNQsBsxfyQw6bzJPs8nwb8IZPfKv49yoFs36N5hApiWWGLApZO7BS4iPNmjDnrrYy+WOhljpv2OeHRW51o1/QjKMdRmLyaWjqOX+av4iOBknhAFlMXnRJFfqNEmpkKRAMlQ5/uxkkYH4gcjHApEiy93WnDqVMwxtGPpSRttCnDmD8j2zeZwhrxbF4Gj08L56PUe7ZJMRNX62cCTDHNdtAPhVJpXhogZbNlestXpZtpSDsbh1f+TdP4NgTjDCFyqyVNDSUPLB+mvjm7J+Zt8yFN5/CzDWiTqtQvJknCaylBnQCJG3aj6fJDIHF95PjKrSNOS0hSBz7PkhJASbDETLlXknxTPsjHP1HHcUI5/+EQkLgsjP0kau75lz6j6iyJYsAv85Hz1cQZA9+w/sxMTZ0Jgtjj9TtgedOMo9W14bbys18bQGjGa5YntWi+kYpoZZqCTqNyRiNo05A3qvGll0cBd/TSy/+YRKLxhjnV1ZGH9E37Tg/z1nGVrcs0bXGTOr0TQB+pc8AkkLJSHmMjJsmmMURoJI9JDxeX9KgF0qjjRAXKJo22EKVX29uG8ToLrxhspz/JlHlaXjVeqBKVOTT4oQnV+2U2TbO8+cwTzdituxYHzswBziNZmfLMsd/tb8+AGcz34a2uoeVt8zv9ZkpQ+jldzJafLcuWkI3DOWb6exuP1+nvpj9r3DnmukxGOpdlAhrzXjZs5r0tbxrQnBnx7EKEVY0ktpBGwCwVz76bz/1sec4n3TsX5+wG+Gz1mS3snaO/VdKFygFOYHYSU5BpxSgiGwtUKCCqpozCGPuq7jsQqUoF9YYwS9fbVhAjbqMAagRMqhXEBFTf203xzdhGO5U4SFIXiaPu0KWsNIWbpvDE1ahucKeASUGO6SUP0SYZDaaAE+v9jeXzj86LKNzz3gq6nA6twMhwalEYjx8CW7/Zegf5NnNSb/DyDT92mvcU/jfSkGdNzZDmSSGetDf3Zeh+QMYkrawrBWzWwfIjy9kGl6ZWJgM6pr6wmcwInV+A0JEtf2aypjZt5rv5hag3vezKrs6juvhJOBeKoknPENP1B3NgtWk7/dzT0znbQ8FmmtiFDuWj0GnZJ81i+rTVXEq72ZUAQ7kcu0UPg8yXibRd2P/5ASdo05/poyIkygqO9GXdb6jUnYkXtr9Nj2PDLT9Mj2hoMrPxbdxGWLbZBPARaKqXRHlF549yfjQdI9HLI1PyDQG4gk0dY6xzqibK5IPlAfkh4JxjsHnmnJQv/ZF8U17IIGMuZKO0GWPRU7AN0EbgMWf6Y6sTkJrexaIYVX42Dq/23r4xz+bSyM7OAdKMZp6QRQnWzf4xnEzgfMkMeE/HJk3NuPJYF5AMMUqRGfPaTtk3rfsWB87MgVafmZ0/b8SXKYu8s2dxxtCZAGzu6KRl+vw6nT77PD1eNlcbpxnWmNSaQW/7HWW/+Rdiv3DzT3EWMS2zZjLmLDJpRW1xoMWBt5UDdpzy2rgXSY7FUgBsmpoq4KKgSIGKW9WMcCxCmUCihgaBJp4EmgQ8POe2KWhSAOSeS81NgSvPdzICpQifPB/Wl4OQKcSJJ2sRTiOhMeFZYaLd8OR8Xms+qnohmtcRVdi9WSROBVoKxWJOKlf6sKUG1MY1BFHw5VlThmY1ozVS52wtYSTRhkArNVX+zBa9EZa14TOBnCv146fliVMH8a7H1U6emsxS1BzYFc+o6nWw6eSBvNU207PIyAPmZf8apWtYU4rOvjDxM0FzxsvEmdftXHy0Xy22z1n8LO/JbhHwTXrx8qr9iyXGxscPgUfMhQpq3Z0ESRIbT8bsOcyjmUY4Rt5zwYFjo7FAwQUMtoPWRT+4BDmSg4ayf8kfw2oyXBJpL4IeFhLLeWMWPDGPxNDI2nMc2oUCPZduHnyZpY2UJKVTuWr4LHGz4ebtdOmB8Wy0afmT36kcJ8N5gws9Ov41J10MEfN24ZsZ22Iq3wRdkrnkq2MuFZNkWyAZQXrZh41jIW9SGkj3vTLcmpEzjV3w0fi6+GLK4hymhGkDS6Uy5ci76c82QfbKjsY/zg/0LqwmuhqDJfCPbUUaFGTyPHCpRwPlKiXaxg2qsoW07lscaHFgXhyQla15xZw90nzG/Owp32xoExfNrAOnYSuLmQnrzRb3tqWfzzz2tgHNJpPsR7M1oc7W0vNppNnStcJaHHgrOGDHKa/Ze+bNKVgmQwI2yk4yhCkk24mR2g0GWm1hI5WSxgz43vFAT9MJhTKRlzntqOCnWVIrSaGNwjwTUTAj+GNawibVnNqJWcCkCKxMzRmZ9DAdhVn+ySytZVF1JRoPksR6GPoFaDIZ01IoZBolW5Ey87aV5tXW2cSZ9cIMpEazvp0r0NaL720bMEzuHWpzGc63Hty0Dgrj9KirwFZ5yXaQvR5Z8CptQ0Gb9NvKZaiYN6nnVq9MSe/ALWlUOq2ptivu67Vd6e1d35JP1FLTS2EkZ5TRMZTyt5GFaW/2PO7Dq+mh3wasiEdjaWcCeja5gigBXqwpNXvsLwLadIzQCF1BESPQrFP7V7btmZdk1wCoMliyRJ0VH21fmpFIgB1LmuePpEp07TBaN9abOyLz4opfXfYr0LT9kkmkPuL+nosjCVyX45pjyXQ+GeOMRT7bQ4xsvRnHHm3CdDHgRpKP0GD2xrIWKphpP08T8p/jIjNmTXG22Eb5WjFbwXkwhBlZ+mwN7bMtz4azzRnfFm5uG52tJRvNg+GtKC0OvGc40Piuv4trNNt3hWFTvmXT6vc2AE2dbKcvjE4r9z3+aD84b1zNdyufztSp3rjWrRjnCweyE59tU3uluEShkIo0yniUjygjUozjGUpJUkccq3mcS+Fd9mSqRE/gI/GZJk4R1RIEIc+LTREEruztpONOtaw1gr5oCgiMaFKoWtRyJUG+oCaGSeLAE2+flN90Hx7lRAq2IruJPKf7yETr4KqWiLJenTKqPOshzrynWSQBgPxnZEMVCQkSOIb5ZAC4COfaanaitZMrD4ae/lMgIallj6rlqbDUEKvHv5B2naRtHGtuLDwQgK5bTWs1HuPhIxAT4apo45R2Ne+VPWCyh84CIPKJ/GD+0yk892dbf1sXS2c2RxtH3onuT3qTRLHv+NCos5hPag42DZ9k6UE0kAQ1zTwsf3m14aL9ZW9orIWoKTX7k7ZRlgnURJm9lWw/C9Bp5pqkqNfVrJaHZXsBB4CDJOY5dR5811WnQ4QcSSpafemFdMrA/xwP9Zj5MBnbRscGu9PEZB3t7Vx4YQo6J6oj8PQ8OfZJ6XLSWNKrJUDqR/rs4oiyacq/wg+yJ1NFy1vhI/vcnADTAiLVCDLe1P6i/VOBmx7mzvc67nxEovB14IeOaI5rUQIv9cADyGtVIF9Uc+Q4LsPzAtTrLCeB79NU1pU5hAW6ng8PHmoxnVu58NwA9YT7aAOJJzBSzqjzEdU9xJGrx9MIzovhemy3GgI/r3t2Oea5huWSg1YDac495fxi4KWyTJ9kGuB4FO7qv3pr7iWCp+a6XFDweDp5HUnKvaGcp3TsyZE5TijzHWmoRREcL0HoeogTzjpmjptlL50dH9n2m9LYrYcWB84LDnBMZMbIeUHT2RHx5sfY2fNg6tw6N71vnra5834zb86FrrcBaL6ZKrTStjjQ4sD5wQHurwTiOEWlBIydAvJ5oLef4CBFTAHbceTAaNUQNTVnFOsES1FcFMzmgEC0XlMNpQjgdJJCAVG+UxRkKYxazSjzoiCrprlxDJSqwGSZ8R30dAG1WgQvpAMXhRrqHZTTmaRSFYcBHNQ3kY5yCaiL80oHuTyQLxAEmCS8KkY2YZRQ6fBEc2SF7ATLK4VB+6xZMObsP9GsmVdWiGSuzfup+dn8JQnxAYD9B2PUay6GFjhwChSWqwi8AKK9EfNBkc1V20JAYTRFouWUWkhNZxCo3JubdpugSasN0avlgYrtUqupEYR/zfyz+di0TDClzjNyaAY00pvqNJ5NHs2Y5JuJNKXqpMWaO/KefzTbZC9JkSQuoshDedLDqRNlOH4Fgwt9BL6HJPJx+OBplEqjuOiipdp/7H5KapilPxM4OahHPMNTKSDYKk3q+GkrEJglKCdlFIo+fNdHvR6jWo3Rlg8NwBNIZWizxDMvO8Zm8lnAqI2aZYK5t7y2PJH4Np5pHjtm2Xf4frpAlN2LTQrpCKxcc3DsWAVHj0xg1Zp+dHS58D0H1VKKbc9PIqlHuOyKXoT5nCySCOgnFjMHuUsrmXFGc3iO63y+CxENHFzuv6QRgotyaRKFYgFx2q7jNHEQ1xy88lqEcrmGxUty6OkJZTFLzHgTPcxeFpRYG6eOelKDRy0s93zHKTzXBcemmkTreCR/hFeiibQMMk3BR6k4SeCKW4A01nmS0NShg6KEeXJhwZO5k3MkgbjPDcKoQzwLK0pvZM4+bNunEdi6aXGgxYEWB94jHGgBzfdIQ7aq0eLAW8sBB67r4PjJcXzz60/gW19/DKtWLcfP/eId2HjZAlEVUB9IQZkmnRTQRItpwJqAtpSCO9Gqh/IEMDFRQ2dXCALHMKfgL5WDlqn6oVtQUwPJQ6XfIOdgYgL41nefxZe/8m0EoYP/+L99FmtX9oAaEofaIJdmub4kpzAu+ggK3dRgGi1saQL48//2NWx5fDvWrl2LT/z4jdiwaVjo8LgPj38C6ih4GtPHJGckTIP2MsKn3Z9HitV8WDW+M9pAFK9ZBECCtG6UN/mGGjQVblWTQrNYSSH7Aj08++wI/vhPvoSxkTI+/TN34v0fXIGenoJoT+rUKKtnGwFL3NcnudDcWY52Yb0o2bOdKERbCkU0VnTNipOkKRqvRkR9l6175pXmxgD+GYDbuJqyxBmOQTNas7kFa9Es6oKEpCavyAch3DBMatgkQgR1LmjYqs12ZfFSR+4F5moDTWcJ3LiYEMixJHGiDm0O7B/Fl/72MTz/7C58/Mevx8fvvhr1qoPHHt6Ov/jCV3Hx+mH82q/+DPq9ovC4XK6gUAgle2rcPWomAwdRHdi7t4RvfP37ePTRJ7BouAu//R//Bwwt8hCgTfbaxtL/feTz3FesXUPbSPmlwJD7E1Vr3gTWWlsBjIa1mm5uLuiiQ5Y5HGgmH7ny3gJMvVemMQ01utzTmiIIPV1AAvDajt34/P/9TRw/XsaGTYvx9Ys50QAAIABJREFUm7/9aSRxHfd9eyf+6cub0dXRi5/+1C14342D6OryRZPLmqTss8YSgfMMQSvnBe47Pn7YQTUCFgwBga9H07BvsscSjB7aB/zV//cYnnv6ACZGfTnqqNgxgv/x392JG24eBrwKfL8mGtIkZmnUIBfgIoc6m5iQ3dP5jfyNY5o306zX07HEnkTWNJC3tIwZts0xxHHP/BNquTmhGVNdAcwRBHBPViDntI6OOsgXda966FFDq3y3rTG1LBvaurY40OJAiwPvfg60gOa7vw1bNWhx4G3hQD12UCoBx4+Vsfv1E8iFfRgfo7BJMzcKb/QiSZmMIJMk8B/+cXWfpq8UylwcOXgCv/u5P8Ohg6cwvGgIf/TH/14AT52OWGh6JhDBIFSLJcQJSyqajQQeDh0oYfu24wISahXurVMRHC73dhFUKWigOaQiVhJGAKkIJFdgPUbw4gtH4KSDGBuJjLaVsjY1WlVxvpISXBL0UvCm5pL1obZLsFhW89AUFOcSEiXcYq9MC1khU67TBE5GY7jNk3wNg3a88vJpHDl8Ch/9aChaGELRiPbAlndCKcFT3QBfona+55XTvAJLKzuz2GabGaFam860YYZgAajN+lr6szH0nnFUm23jNHgg/cLEmqXOM/OaHqJt0eCLec1n/sk+y4x5c+ZWAUADKCtf1FEMAWaomnShyUNSd7Dl8ZfwnW89g4vXbsLSJRtQrbD/jeHe7+zF/r1lbLqsA/m2PDzB7j7yfkHMMwW00Ow2oqdk7Xpcsjh22MOO7SOoVRIU8o6Yk3KfrRfWxSogJsJyPHiqyNf6NEA/eapjQ+qa4eN0DmlfmBlqQ2SIZtNrgORv26uZh3R488hRkAoQo4aOJudRkiCuBzh+rIQXnjuEKPLR0zeCMAAmKin276ni1ZdPoqujjhPHqshzPYjrHdac1aGZrY4n27PiCHhu61F84Qv/gMnJMu742AfxY3dfAz/voxDkUKnpsUV/9qf34qH79yEud6BWJkCM4JwYwbYXD2LDpl509xFEEjzWxGO15/AMXTUvpyk02cn6UpPMHxcHCDLF9JqvDUGMY8cL49lwYSHzoFLTo1m2muNSc8l37Be+B5QnYzz88AHcd++DSN0It995BT78kSukr3JcNnluW0jH4WzhzRituxYHWhxoceDdxYEW0Hx3tVeL2hYH3jEOUDMT+HTG0YZ6vSh/3BtlZdW62Tun5qsGyshRB7pPicIp90ydPj2C55/bhpMnSjh1ahzca0hsly/Sa6UBSxTwVGmjAp14sOReUAckYXLSRT43jGo0hjr3Z6VALlBaCKFEm8qr7IkDPBYggrSDStUBhdh6TADZibjegWrNl/1kAWV40Srx4PlYTN7UAUkT+OpRIZbtViy2z03wmRVK+dZqkGj+1xQeFYgJPiSAE0BLgKj5UpgVgdYAqDTxMFnykaZ98L0catUiqlUHndTKUANDdMJzHkXjw1LJT1MGc2VmotEkUCPwN3CjAbxsPXi1qHh6HbVttU4Uhpvvp9aLGmyJZcCL5q0ASe+bwrppbA02wFrbUdENaWU5pJf5KtixPOYT3zNvogHSpA5i2O58m/mJrTbzcnQ9QnjNfk0tOjXgWqdaxcHTTx7Ag/ftQWnSx8pVvdhwSQfKk8D37t+PRx5+BWvWbcQHbvkAim0uIjEfT2XRgyafjqvHe3iBnskZ19nnHFSrXLzowuQ49yWyTxPdcKGG2rgUbhAI36zPKi7g0JzT1t6wQI4GYXUtz8kee2+4KxfhSab6lucKpJgveW/5q+2gvGQi2z+U7/Ioza17V2kqSkWwR40k5wcvgIt22WeZC4uilRwfp6lxDxyngHwhj/6BbtHqcdyHLI5Zs1uqrbEMfNaL5qwvbt+Frc9ux9joKJYsX4wP33YVeosEqdp+Bw4ATz61G8dPHcWa1avx2c9cj4ULizh6fBwbNvaiuzdELmR/qCKOI9Fqkp+1akVo4wKDH/jSZhwXBL/iqEz6kGWa5bzyQoemCaNjKLcuYJvbCjxP9+CmqQ9fTNmB6gSw/aVT+Ju/vl8Wtk6eqKC9w8dFq2J84CZPtiCcab+tpaJ1bXGgxYEWB94LHGgBzfdCK7bq0OLA28ABCn9x7KIecS9gAUiLqEcK0ETsSrn3UjWGKgbqvyKeMbGAIR/FYhuuuOJyvPD8Tmy6dJNoKdsLKSqVKnJ5SssUDGnTpkcYGDlUgJE6AKJTkQD1Wk5oIfBksZVqDaE8EGipMavSxfxUSCQgpTMOyrcuBcE0hOe3IZ8PJVwhCYVvgj2CNOP1SKVLlYiN8E0W23znw26SIBzJOPwQwESh1mpz+E72rFkNB1M0AQRrQfCWCNhPRMOs5n9AFPNoDjpLMU5IxAuoHmSPNDA8IbxUJzVKv3CoAShm1kP5NjWcgE4QZAb8KY2WHwQqtm5N8KN1UVSh7dx8pyUwvc1DQxQ8KvDRd/KeQCOjbZK4xiOxpZjxbIlT8mRDMJJU3YJvarA83XInTAaOHo7xyOb92PbCYazfsA5XX7dJFjm2P70b93znWUQ1D4sWDWLtxUMCtnh+o+szU+4H9EVlp1o6hfuVOtuIR6t4yAXd8NxI9us5VSBXNCabHuDTdFTZO4XtienDQqTgaY41aurs4gZ51ewrTGzrzWs2nmJ20qqaYbUHUG5l26S5iMARo2XZ7i95GAdbZAD3nR4+FGNisorBoUFcc921wuNyeQxPP/2sWAL0DwGXXtWGWgz4HN5m/Yb7KB1aI7AUAn7iVs/Bxk1r0dERorN7EDe//3qk8FEqJWhr88RsdsdLEcbGXBQ7Q9z+8atw9c3D6O3zEdd7kc85oHdhlkGQz4FFEBnXdW+mF1KDrQCbcaxVBE1noygWB2e+zz2c5G+2KUzHE2bT6U/VLE6R9oA5oh4ngh2PHKrhsUdewz9+6UHhTVRpR2mkgHxYxMQo508gzRk+NNqxWVa2LZqhrbsWB1ocaHHg3cuBFtB897Zdi/IWB95eDlAY8wO4fhGOU0SY60QQFkTupGdJal3E4YkVyijkkSIRilWipOA6NNyPz/7qz2J0ZBJd3R1oa6MM6CAUb5KxOgZxeGwBBU+iLnr8pFmug2oNIpwFYRvCXBvKNWo0NSwMCiKxUXgkVtA/aiVjNe+l0w8BQPrS82m/56FSraBSi3T/poiJpFr/FI9wT6CiD60aBXoKqE12WwzQRDDNd9k7MS3OCK5MZ8GAjWefCeZE0LQFGS0LBXRa+XluiHwhFN5FBCZJgrx47lSnKTxrVBBQQg0oEQHrK6K15GvLMa3UMAu0Wk4bbulqXq32i7Q3Q+29JTcLllRgVoZpPIrj7BPqQZi5kB7y1eajOWsBFvDwHf9E8yuaVAVZLNPyypEMsoSRXgOSmGlGQ2id/khdmTc132Rl7OKl7fvx7NY9mJysYXhpO9Zu7MOp8RRPbz2FvfuPYOWKFXjfdZchyAO1eizmkbV6HbkgFKDJnHhkCs2X4frwAiDIp6gn7G80zaZmUwEXARCcADE1bwy0TBS+UAVuKq7dUNJJFKv2l3hN/mpy+0y+km+ZDiu1NG1g+7q8N2BV8tPerP/aduBV7+m9lc5sqMnzHQ97d5/Ao4/sQKGYw8XrB3Drh1ehVkvxyqsjeOW1Hejp83D3J29AV78rnntTVOC49DwtnVfMjTne05Q888Vr7bpLevFHf/o/Y2LSxbr1y9HRQc+uKco1IkcfO18bR5r0olQ+giuu7kLY7stxuQFNYkkftczS5rFoK5N6DXHdEW1jpZwgTlzki9ITEdE7rsv2cMQDrgwfdhdhptZZ2MZ/zEILx1VKcOnm4Ts8C1idP0VVB4cPnMRf/9XDePKJHTh8qISe7tW4+rIbce89W1CtpCjk27SZpywCaAlapt43x2mj9NZNiwMtDszKgWnjdNY4bxQ4fZ58o/hv9fs3W4cfNv1vzI8W0HxjHrVitDhwwXGAUx+1gSkFW9dFNU7EQUet5qFaoQDtiwYgqio2FEs6cbBBRxcUJHXyY/IgCHDRmkXi8ZWgiR4lQ2oZfeu4h3vaKMDp8QiyP9LI2Yw/OUnr0CJKtRQRj0ehxSP3eoknx6ZYLHiDIIsOgcQbpJr5kRrKttU41SM1HXUyQmWU2wCBpIWGjNR6EuwqKGLDm5qIIxPBSgaEKr5RbSHLMPK4TSApBTBH3DOmWELBkStHMbjmcHojw0ofo5ApcQRcabcjOTXa/nK2ZlvQnw3rEPjiyITx+V8S5UQ7lNIBCukXNa7yQC0PFVRIeWKnaT5w3E9r9sRqIlbFqp60Oko3q0TCDOBkcrZTQmdMqv1m3tQgp9IXlHuqReI9+WvNnTUPAnHBWbzabsOjTw3fpU+wyLrSY/MSfnJrriwycJ+egmFpE2ZJZ0imQVRrzcUD5sqCyBi7KqLOk5hu/7792LnzFSRphP5B7jl08eqOE3j99b2o18fR3gEMLGhHGGp7cmGA5q/VGjX72lZIeESH8oOVoMYz9fJIXO4FVaBJMrhYwv2Mdd7zCA9aQHOrJskDTbzVORCBOfXtpI/HhajZq/JOokpdtVq2n7I9BMQzgNWU9mXXYQ9nG5j0FuSbjGwVGuNPeEvzdm1zav4IuNjvSpMpdrx8DM8/9xyWLB7Aj37sBixalMPe/SfxyObH4LgTuPq6y3HdjavhBRyskbhd4iKQmqrTZFXHTkztJvtw4KPNd7H2kjWgXybWV/uGAzf1UC45OHUCqJQ7ENe7kc954BimFlPzEr9gwn2OD/6xxWWBKfHx/NaX8dAjT2LxsiV4/weuxoIFnRKHfUysCoT5VpspXLJdSK4KYfWM36TOeNSQCouRzwEjp0/ie9/7HjynHZ/89MexYf1yHDmYx+aHXDh+hFJtgusPSpN0F9NiAmxN/2ldWhxoceAsOGAmr7NIMTVqY9abGvyOPr0X6nBmhrWA5pn503rb4sC7nANWFJptMtMwlXOypnaUq1RLmDgJ6m6EmhOjlnqoRD5GR4DDByex7fnXcfDQCDp7OnDplStx8SVd6O72kPddOKKRJECKUaumePbpPdi/5wiWLV2Ia6+9SAS7Ok0/qWGkoO6qELllywHs3nUYx4+MYN36dVhz8TAWLHIRu92oJIF42RBQQaUPpUhXhfXEVQB7aHeKHS8cxqF9JzA6Po7hlUO48oYl6O7NY7wcib7JDfSgCK9OLWGKxKXw6yFKAsSxj+NHI7z8wjj2vX4SJ0+Mo629gOWr+rB+QxeWrlAnMDyzj8I/TXvp0Xb//nFs/cEudHYXceONa8Sxy/49Fbzw3GvYv+cE8oUcNl26CldeuQCFIpDzgWpSQc5PRcsjZsMCMtkmRG+8UBAH6gSpRaBeqqCWVBDm2nXPmpgxEkBRyAV2vlLBi88fwb49o6LF6entQN9giE2X92H1uiL8kOf9uRg57uKZLftw4thpXH7FIqxd34+8KIcT1OuJHNPAeAQ+e3YfxzNP7kZPVzsuu2I5FiwK9bzEOo+rAUoTCba9MIHXdx7Cvn3HUMh3Ys3Fy7BydSeWrXRlUSCXJ/CN1XlR6uPosRq+971npI6333E9Aj/Fg9/dg2efeQHtHTls3LQKt97OPuLIYsfrOxM89+QB7Nl1GJOlcSxc2I0NG5fgsisH0N7pIci5oMdYOSIncVGrCB4XpEGtoniTdai90v2J4jjI9G8BpLKgApTKx1BP9iJfLCBNyqiXgahUQr16AmF4Gn54Ar43gdBtQ0wwxzw8BzSRPbivhpdfOIxdOw7IMSgXrVmONRsXAKGPujOAiVoOjt8he4WJZ0I527EC33FAHzdj48Ar24BdL5/Aqy+/Ct9NsGr1MFauXYAlq4vo6VUw68R0yqPASPoGFX0pcPI4sP3F49i3+zQOHRxFrpDHoiU92Hj5ABYsyqHYwZ3HmgfBPYHuvj0VbHvhIHI5Hxs3DmFgIIe9r4/gmS0HcWDfCIKcj1VrF2HN+iEMLfLR1s5yXdBg+9DBo3jisSeRz1Vxx+2X4dqrFsmpMUcPnMBTTz6ElatW4ac/+X4sWBDCY4UJwF0fTlyHy74lzncM0CJYM4tMoxPAP3x5CwpBO+68Y73MJbkQeHrLPuzYWce2F2mtMIh6pYz7v5Vix5LXkcufwMVrlmL16n4Ui9TmU+NcRxj4umfblHXiVBVPPbMfD27ejYc2H8BNN78PN928BgsWevBCHndCwFtHFEWyWMAFMjJXxzkhOr3SUiNPkMnli7qYPLuuLxYY3b3d+Mxn78KKFcuwZOlShEEejzx0AjUcRxjmkfg10b6qWlNWgdRMV0Z58zOjM2/zmf0s+5v6lH3Tum9x4ELjAMfRbLLNfPlwPoym84GG+fLr3OK1gOa58a2VqsWBdwEHDGiZYyJuaM+m1US0C0yqVqyiaci1dcILu7B/P/Dqy7vw9PefwIlj4xgbS+Hnc9j86Ku4+voF+MxnPgDkHRT9FAmBpO/i+KFR/N3f3oeDe45jxfIhXHXVReD56QggmguayL62I8Efff6fcWBvFaMjNVQrVTzyyBEMDfXh+g9ci9OjBSRuUc/UK9MJCcBtnbFxOMs9Wfd+5yV892vbcGRvBWOjZcq28IrbcM9D/bj9jhswWe5EnNIMOAePjliocQK9gKqL0Eo9xMOPvIrvfOtZHNgVYfyUg8nJRBya9A16GF6c4Ob3L8cdd16DfBvNCOvwPV/2nz3/wml88YuPYO36FRgeXoatW1/Bgw9sweEDI5gcBQqFPB59ZCfWrR/Ar//G7ejqcxAWAtTSUQRigqfAUptKHdoQaPInFo5+TKNFATjU5lH45R9r8Nxzr+EbX9+Cl16o4eSxPEqlEJMTNTFT9v1xLFwa4+YPrcCHP3oJhod7cPhQhHvv2YWXt7+GPXvW4qcKl2L1ugKclO1Fs0BXvIOePgk8cP8+fOOfH8b6i5ejq6cLPYODoBqpVAae/8FRfPPrz2D3rgkcO3ZKtFxhrgs9PbvR2V3DB39kFX7iU1cCfgo3jeC7BUxOADtfK+Mvv/Ao8sV2bNx0Df7+b/4Vr2ybwOuv7UFvbyiA/bqbVoj56Zf+/nF8/9HdOHEYGDtZQVSfRG9/gO89+ChufP9K/Mwv3oK+QQJv1Y7R4cw/fukBvPjiqyi2hfjkz9yKVWuWijCiWlLGMxpN4a6aUZKnl1+1Gh8+cKk4XbrufRejLQcsHu7HDTesR5ibEFC++qIuAYvUqkepg5FR4MknD+HLX9qMk4crGDlaBmp5dHTtxop1i7DpmutQrvYgyA8iiqvSvDyyg5puem6O4xyOH43x//7ZvXhlW4SRYzHGT43CTavoH9wJv1jFlTevwad+7gYsGQoReA7qSYqoTsdCbCc6MNqPb/7LU9j7+iROHI8wOhIhCEMUO1wMLPLwkTuuxq0fWYXBAe7bVRUcLVGffOp1fO0rWzHEc0TiThw7tg3337cFh/dXMTHqwfVD9A/txPLVg7jl1hW47UcvEm0uLRImSjF6+tpw553X4/bbL8VAv4fJch1RNcZNN16GG2+8Fhs39YMmrVy8yAW+WA8QmYlY5fA4Igdext6at3sPAH/5l/cj53WivTCAj/7IINLIwZf+/tvYtTfArt1LUSoNoBAuwje/9hLa2l5GoXgAV16+Gp/5pTuQW9wPPyQYZP7iFlau1FguWroUff2L8drOl3HgwC7s3FnGww+9iJs/uAE3f1ABJ8Elz8OUcSetpfSyz1BTLJpSqq/pcTuJ9Pgm0eL7GF7cg9t/9Dp0tLfL3MljmZwwRuyMCsB0qNk1noUlgnDCLCqxwDk1m+99QVQY3vqnxYFz4sC7fXy82+l/40ZrAc035lErRosDFywHuI+JGrtauYD9+8bw7X99AhOjuzE+9joWDQ2js6sPr+zaj5Pbx3Ds+BGEboxf++UPCSDyAxd1x0W1muLg3gr2vV5BzpsUUzf6TomoeagCRw7H+IPfuw+PP3JU9sr19nbh4rVL8dprr+GVbVUcPvIskvwAnLSApO6JFkFONKFpXAqMjwEPPLgTX/67rdi57QSich1LVvSh0OnhwNGjeHrLJPbvKWB8NAcvXYZahZ5bdR2Ugrrv5lGOHNx3zzb8/Ze+j9d3nURHoQMb1l+M/oGFOHFyHNtefBGvvnIYxw6PCLr98Z+8HF6OTl9iRLGDsfES9u8bRaV0DH+VPokXt72A8fGTGBpcgL6+duzetQ+v7Chh397TKE+6+E+f+4gAqZycn2hsYcVkkl2NSNIiTO16BIGI80gj2ls6stWQmqG0nuIrX/omHn/sFZRLnVg0fDE2XbEYnp/Dwf3HsGvXCTz7g1M4cuwYFiwcRHcXPXPyOIcqDh0cwWOPvIRLLu3DijVrEYaqqYmTBPX/v703DbLjutLEvtzfq/de7fuOqsK+o0CCm0Rxp0i1WqKobcRp9TIa2ePpDo8jHI7wb/uXIxxjO8Y98ng0zemeGaktqcVWUxRJURQJggQBkNjXAgqFtfZ9ee/ly8XxnZtZ9VAEQGqhmtDkiyjkdvPem+feTJzvnnO+4xsYvDCBd9+5jMuXFrCuDwJSCY4KSxqOvXcd/9f/vhfnz44Lsc3GrW1oa2/D7LSHo++fkbkyMT6LublZfPtfPATbsQSY67qNmSkNk6NZ+F4a/8+/OYQD+69ganwaa9d2YGr6HK5enxAG0tdfu4Qf/+Akxkbm0dvTgYcf7YfnzWHo8ikMDJzCu++P4snP70RtQ1YR+/gAwfG7bw/i7bdPigV3z33b0d3XBstSKVDUf+kKXFKygtWFiAbYuWMtWltqhVG1oaFe3Fmbmirw9Oe2495PdaCysgIVWTsCG8DirId9b17F83/1Ng4fHkDa1tDZ3ITqbBaXhsax/6083j/mwzUakKd1NCgwLFNcJxnnqHkpjI37+F//lxdw+OgYFudK6OxowSOP3oVSYRaHDx/B6dODGJl2MTq6hL/4i0fQ25OC67sSU8gFoZ+/dg4//N4hHDl8AfniInb2b8ZDT27G5PQMDhw4hsOH+V7OoeT6ePLpdaivV/65nB9T05MyByaHHUxcfx+zs0MYn7yC1tZGtLTVYWhoChcGRnDp0iwmJ/KwUw4efKhDXH47u2rxhS89iArHQueanMSjOqGOrVs70ND8DJpbamE7AYrFEhx+BzyV11Lkz5eXbrsk8CK4Ev9p5R5M79zZ2QJKBRfj4yXxOKD1OJuzYVolGHYRpu9iKT8PwzJgp+l276Khvlbil6O3RTHA0vbK+tWKDHr7avDf/IvHcf+n+vHaq2dw4ugVHHingMGBIt7dN4x771+PPfe2S57TlGRECQRchkEAg8RTXNSKquMindRt0PKvXLIrMhbslCnfJwJ6PiY9H4T0iKta4pob+drG+6rD6lqsb8qkjC8k20QCiQQSCdzZEkiA5p09fknvEwl8bBKg3sPYJx0p6Mhgad7DwPQA1q018c+//Syam3JCoXjwvSF8/weHMTY8i/17r+HLnwfWdNBaqaNIJS0wYKBOzJduwRK9krploOmg++zzf/Um9u8bhKlX41Of6cfTT+fQ2JzFxHgPhq9p+D/+zRvIhx7yBReWbolVhYocvQb5Y8zoyy+ewoljY7Ch42vfuBd77u+EkwWm5wt47bUR7H1jEeOjOmyzFoZRiZDuboyL0xlbaOLEyXG8yDqOj2Hnzs14+qkd2LypFpVVGczMFnH4YB1effEMBs8O4JevDmFX/3a09Zqw03RlJPGMD0NzsDgX4q03j6G6JsSf//lX0dCQQTpj4tyZYfyH77yNhTlg35vXcGUI6FwPGGINoaKqGDhF1xSzU6SQ0uAhl+kDStdDXaUOpd7KIqGGTDqNe+7eiu07d6G7px3ZyipYtoWZqXnse7MZP/2Ho7h6eQIH949iw4YOtLVk0LO2Dpm3KjE8PI+LFxewsGCgpo5WWumQxLQODFzD2TOXkU5zPKrQ0FQhY3fp4jx+8neDOH1iCi0tzfjiV3dh9/2VqKzOYmnWw/HDzXjztVG88867+MXL5/HYY/dh63ZH6qY1jEJfnDNhmpU4+PZV5Asa/qf/+Rl0dNWgVOoXt0Smjfj+f34VI1dd1Dd04qv/ZA/uurcNmlHC9HQrRka2olCYR31jtYpBjOLxKKuZ6QV4Lq1aBrySDo1pLDhRJGUOd3hNafXqXyXrTMbBmp5WASZ0LaUVzLGA5pYcGppyYO5LGrNolOJzXBqawssvHcbZ0xOoqWrCk5/dhAcf6ERtpYOrl5bw/uElPP+9E/AMjm0A0/Zh2IDHXIu6jlIhwE9+fAov/cMxZCrr8cyXH8GTT9aiuqoBuu/ikSda8KMfncbLP7+I118dwKOP7ERdfTMqcia8UMfiPPD3P34fR4+MoiLThG/88Ubsvr8HDU21kofyUw+vwfPf/SVOn5rAD/72LXR1pvHpz7QL4Bem1YKH0LcwPe1jfHgYbZ02vv6Nx7Dn3m5YZhoT40t45aUBvPTTCzh1bBxv/GIQ23Z0oL4BqKpLobIyJdjJMFUULF2kG1tyqKzLCcNsEPqwLAI0D4HvRgY7uqOWW5Qji33AGG1gbtaHaWfgFz1kMhm4nga6zv7pt57EuUEP3//hIvYfGAGwgD/6093o6loLy5zH+p5mZLMR2Q6HU2PMNa2RXDwJJA42k9GxbVs7Wlvb0NvTglPHZ/HOvqs4cfwSfvHqOXE7f+P1ejz0aB8eergPtfW6EAWRkZpu5HzhOCfos09vBrrachzFjZaERoIu+byME4/iRWWCyZsq1/kqqxeXqxyymqSOeUcEiFkk+SUSSCSQSOD3RQIJ0Px9GcnkORIJfEACy2r0B66oEze7rpQiaj/Uewg0bUuXFAGlcAG7djXgW9/ajrvv7pB8cCzT1pPD9IKPv/3+GxIreOzwGLrbGqGTdVNSUNDylkIQ2KL6icFOUo5oouTu3XsCrueiva0W3/ijtbjrHhINASW3Wqz9rM1yAAAgAElEQVSVge3jX//fh+EtuMhV5sS1s+BCCDiYLuC1n5/HwLkpFF0Xjz/dj2f/yVZ0rqmE6aj4za41LahIT+GlF69hZmoaXuDCDQOQxyhlAguLwIGDl3D8+AhqalrxqQe34LEne1FZqawSTb6NjvY++MUlnD11FhcvzGL/WwN4tnsjgpJCOLpmCwgJsYSGRg3//f/wFO7a0yvxmCQA6eurx9SYhb/+7l4EpQzeOzSDznVVoIWPsV5UiKmnUp7xqCzjzQAw/CyMQMWOCdiJyE50o4Svf+Ozkoampa0FluMoq4sQHWVRW1ON48dGMTLsipVxdnYBXWsy2Ly9B909Yzh1/AouDCxi8PwMtuSqQdBAN9SxiTwuXBzH7PwMenu7sG1Xr4AkusyePj2GvXtPSoqJ+x7qwh8824Pqhije1XfQ2pZByrbx9ttvY2K0iH/48UH09j0grKDMRmM6GnTLhWYsoYQ8/tX/+Dg++9R6pLNANtMuMiCQu3zlMsKwBY0Nzdi8rRlNrQZ020BrVwfWuq0yJ9MpuoMGCLUSDJMEPgYeemQbMhUVqG+oQ193m8QEkgVKYuuo0JN4RqxGap/vgrCVck7qat4zPSmtURwM5oykQZmxcnIu9BG4Bq5emsP7By8BqMDuPb147k92o7M9g4wNbN0OrN9WhJY18d2/OQ3NzyPQXZCniTxMTGkyM1nC97/3SzTUt6K9pxnP/ekGNDaYcMQt3MLatT3IZOuwb/8g5hYCvPiTg9jV/xhy1RUCdF/+2XmcPbuAmTkfX/+nu/HM1zajtom5MziP0ujorMXlS0sYHz2IwYERnDs1gf4dnaiscQScp6xKwE+jkF/Cho2tePbrfXjo8SbUN2RlAYOEPI6dw8iIhtNnhjA0OIyzZ66gvr4DZJ1mtGbaYZoYxfCrM87Z98Wll269fhjCEpYkugkTWNGaGqXdkc8MAapyHY0gl6QcCXx6LYSQ3KS0IvL9Wd+BhnbgncNDeOvdCYT6IjZtzWHjxhrkMkDgqnb53RBvXN0QayhjLoWaiUzUoQX2sbZWQ/9djVi3vhHb+htx9uwa7HvrPA4dGMBbe+dxeaiIg+8Mo//uJtz3AF3hTQG7YsUUoMlUTAUEcCMSIlq5CWwpej4og6pVTlX1NlNG9JdW8aNRQSFZohhEBlwEkTlZ/qmOvwTl55L9RAKJBBIJ3FkSkIXeO6vLSW8TCSQS+OgSEI2ubBm9/Ji1lB+X76srdBtjjkvL8tHaVolHHt+Ge+7rQCYXwkl7MFMemtsqsOe+FhiGjvyihuvXFuCWFEhjLSWXVkMDYWDBJClGRDBKsHj+fIiRkTn4KODhx7Zh224DqQy7tYiKTBENTSX8wRf6sGdPNyrSdMErCZGJgDJ2Vwfe3T+I8fE8TEvDw4+vQfuaNFIVJPbIw7I9rFufxVe/3oJtO0wY9iI8LEKzS/B0F3m/hLGpPM4OTGFmxsSaNZuwbl0HMkwSz/rZhA5kswZamiuRy9ZjajKPgXOXFfjwleWWVjO3VEC20sQTn70bn3qwF1W1EPBE5be61sJDj3SJVY2pVUZG5uGTGZfur8IEqhoTcLk8DARQkFhSLbBA/lEmn2e/aFnRDRL3eOhd14zetU2wHSagV9ct6roAmhrTqMxVwvdpoZrH9Exe5L9uUw161tYIc+bxY9dw6tQwgoAtGCiWNFw4P4aBgVFJb9PRXYMN29olpjZfKGHw4izGxxdRW1ePrdt7UFXN8QVKHiTvZC6nobOjAq0tbXALGo4dPqfMVpouQNb18jCdIjRzBpu2NeKpP1yPmgbAriD/kQcnrRYIausz8P0Crg+PYGSYbpgKRNAl0U7pyOZSMEnXKssXAdzSAkynhCee3o0/++dP4Zt//DB61tRDyYLuspElTYxHsVavIA7lJi6OmgfDCKCbNGkyBs+F5xdhGKEQPBHF+KUAc9PAlcFQYhlra+vRf/d6dPVm4KQD+FpJxr2ty8GTn+vCug11MG1X5C5ZOmiN94BTpzxcvTyPUsnAE0/ei5oaBUQYw5m26a4OdLZXoa+3hzS+OHmMCyWeyJremm++cUpIgHLZVuzY0YlczpH5anJukHDIAHZuW4+G2gagVIGRK56AW7qfF/OM76wAfIIkF7vvqcVjT61BY6sD3XSFxIngcMPmevTfVQfXncPloWEhtyJeZM5L5qEUQhwBXMrtmgCapEu+z0URgkVXmG4ZGRsoBCgTk2CbfL/yL4FxZOBLpXR4JY6pjaLrSz9sB8i7BfEeWCqMydzxMQs77aOC4ZAmrcUaLFu5RLMZjjVBJePE+f0yTVofPfE8IPmUaQXI1QTY2l+Jp57pxp/9y9349l88igcfvh9T0yn87KUh/Kf/eAg/+v/248rlafieImHiKohiG1Z2We6TpZgeCXwv+a2IHLJlwUQeliAzYC5iMlqrTy4N6mJUl3ddzcFICtH9PJf8EgkkEkgkcOdLILFo3vljmDxBIoGPRQJUhMLAh1cqQdNKqK6xxUripJjsnIo3IxSp9JuorFS56EpFE4vzBHkRKNACWDaJgQKkUzm4bl6slVS0mZD+4sUCikUbqZSBu+5eKwqn5+dh07KGkuQnbKg10dVVg1ylhpmpWUkEL4CMTLMeMDw6CdcNUF1Tg9q6Csm7x/ZNMUuFCM0QfessVNdNI9QnYTlZMOck2TPpejo+kcfUpAXPbcLifCWOHHJx+fwCNJ+5NkngYSJ0LQyeCeEXq5FfXMLCfF5cWmmFUAomNUZaf1NYt7YPjqPyJRJUsxt2GqhrCCXGzHUZuzgJTW+XdC2mrohL2GfWwn+oHDMnI8JU1EBBgI8UiPAS93kP2/UDZUmZmgwxPelifHQO+UUTi3M2JkZyCMNqLC65kg6FbstM3UEQceDtSgyPjOHi4CJmZyGWSS4SXL+ygKHzizCNGnR2NqK+2YGvAbNzC7h6ZR6G1oyluWqcPOphcnwYmkEGYR+hn4ep5XD9oovCvCXuoSR2IklP2iGIIMojBCFayePTD21VYJyZPyhqI0DJLwhr6pNPfQrPXzmA6ak5fPff7cfBQ9XYdU87+u+qRTqjo+SXkHaYy9CARyBA67muob2jSphpCbho8aZyz//oaJHib+VfZbFUMiRIUAq/lIusdARHhsE2SP6iFgYImki4c+2KB13LoLo6hU2bm2CYAYLAg6MbMi6WA1l4aG7L4eSZEkyDruZqAaaYD3Du7DxsowHz8ylcvAD84D9fh215MF0NKcNBYYmu5RZmRqrhLuYwgylYFkGcct0dn5hBfgmocGrw1i80nB+YQSmYhWWSXdZE6IeYndGRn8nBDGowM17A4lwBOtIia7dIEBZKv+sbNNTUxFZAtbihFkgMcSFljCsXjOamPZGp4xBQajIGXIxyLHosKIZWusMzBYpyu7dQLPhwUgS0lK9MWLHi0ZKnksvIsMg40Q0ecCS/pWVWiMsqY4bpVbEk84PXS9B15t4MxdrphQWkbUfierkyQ7Ani0RR+hY+o5zjwozmwWNSWk19r4qhDydjYN3manHDbmnmCpmN/W/PYWjoGt47WMSuXa3o7qqR/tE9VvJoGkxRFLPS8pwhOXslNRJXgdTUUgssTFUTqpQ1fHpZJIsS80RPruammpjRO63kxOvxXnRZ3ZL8m0ggkUAigTtEAgnQvEMGKulmIoHftQQY70YlnpZKz8sjCJaECISKOdOCUFulssljjzkqJc7KwcIiV/j5C8UyRNdRJnsnsZC4kBFIaUDRDXH50gQsqwqBv4SOLhu0XtBKYpmOEN1IRFygwSstSfupCrqkaQJWFSwACkVX2FIbm5qRSjnCBCv2K00XZkhD8qAY8IJ5aDqTxivwwbQE7PvExCJmpkOEQZUQoExNXoceuLBD3lOSvhpaCt5SALeYh2HROrUofeCzsceBF8AiIAl1eG5k3Yg0RFpvqGOTLVQ38+LKOTU9JkQjJv2LRZVULpuSwpO2L40RqGw7pchn9TxCvSg5CJU1iHfxHhslV8ORw5exf/9RDF6YQankYGbSxeKcAy1oxtCQD8+1FPCOXPwIInbsbsO+Ny/g+uh1nD03jVOnJ3F3bR2mp4Dz50qYHPOxaWMXdvWvE+BMC9fcwhJGR6cR+mlMjnl48YXDSFewJwEM04PnLsDUK+AVHExNTsG0XMmhKORNOpDP07LFXKu05LrI5DQhkuGY0PLI5yYjK616f/D5HRi/buDlnx7DuwdO4dyFDA4cOo11mxw8+tgubNvWInkU6aZJt0QCQl33EIApYEyxQml8UFqMBePEM2ZFZZchEgsnQQjxhzgxq62c5/jyWgRKudF0LMxTDrNwXR+ptI/mFsYec+mCLqW2gEFmx0ileK8rVjC3pC/HJ9MV9srVMeQLOnSzCq///Dzs1CR0FGEVHRi0/humpNy5OjINy7Bgmi4Mi8AQ8BaAYr4kQGx+1sXPXhyEbs5CN5bkfeUCERdavJKP6ckFGHQh1Vx5ZwnCuBDCGEMCMOaqZZwx95mCJMLjYp02fWU9ZgoUtxCgkCfTslpE8umCHLH9EoCJJVEsmvT95WKCBlOzBIBxlUJjxRyqSOgKZlLIig+Io8JFEFr+uACk5Ki+L2StXVrSYDs2PI+WSVqg1UILvxdEnPwu8JtFS6uAXvEAYFZT1YZ8kuimLjlj6c7KNtQCzfwicPLUNex9ZwCXr0/A16YAvYCq6nbU1dWVkQrxqQyJP+e3iW0JqJXKoxdeiI5UazwjLN6yVeekO7KoxKvsW7TlvvzKj7mf/BIJJBJIJHDnSiABmnfu2CU9TyTwG0tArDdltawcKwWHZBfinYgSTJO55qgV0l2UAIHIIIotIpASPhsbrhtKInqLbp6i1ClXO89XuQ7ZHJV6phVZmC/C0FPidloRuasSZFKJdqy0EMcUFoGUlRWl2tCsZeWYVkyJmxN3NVqeyKZKS4suzLa0/ITMfadpkkZFB91Pbfge46VYTlk+CoUiCkW65hloaLbR05tFzlGlQ41xdQUhIaKBUUcFqmpasWN3Awxb5QEVj0DmvGTid8mxR8sW3UlDaIbqI+2zJmP+Qlpj6DqpqIyYRzRW7ClxKtrK8sMnE21URoeyY3wjQRRzmxKQ+qGOwpKBN14/h5+8cBBHj57D3Pw8OrrIdFuH+uZqmHoWkzOLmFkk2CEgVmnn2Yc1vRn0rLOw/4CLc+eHcOpMM3bcXYdz58Zx7MiIAL7etZXYvKVOueqKldqH5y/BC4uorkph07Zm1NVVCPLwvAIsg4sPFnzXhGW1wE7Nom8jXZlD+KHK0UnAStkYjOOjiyXT0DB2UQxNlswxrxSgo6sC3/jmdqzflMH+A6PYu/d9nDyZF5fTyxfy+Oxn+/HYYz2oqrWRcnSEWl7Fu2qsiICC7p0lcaMMoRYVFDynSEXQaubLVBczshwrF1s1DppBQMyyrFNZwhhn6Ac+XK8In+Np0mKnAIUZWbMIeIgfaM1mig8CZ4IsviMcY7q+uq4rMmFO1W3b25HKVEPDAqrtLLx8AQhd6LaJrX5W3EZb2jegpqYCnEZ8DTWSbGkenEwJm7dmkKk2YdnKCsjUPxUpW6y0jMFMp4F77mtDS3tWxpLyJkhidznNOCaKDFZ5H7DzBPBynjkjg1DigOmZwGeSuY0QDlOsiJu2AoR8/xjjS6AnYiPY5MSlQHhCwKZAygjAE+SqRRbiRZkHjKcNCBBVmh2TLrriXcGURszRa0oKGlqw+Y7bBgl5+J7RykngqCzKBJKqc7Tu8l3iQlAAU6ebuy4gf2FJw9FjV7Fv/wUcPXoVgxeGpYvr17djz92b8cD9HVjTVykxwESUYUB7tuqzLGBEKU84R+hGq9aMDBljvmOcG14wB6GoNpai60oMXHgy+cCyEMZXiLle2f/4Rzmp73B8JtkmEkgkkEjgTpNAAjTvtBFL+ptI4LckgZh5MwaX8bGqnqCSSmMAPyiK6ywVTCqMEgNGawaVuoDAgm6qPDZF8SPrYqy8EtYQVCorCqn/S8qd0SSZj46a2mq4xSJMw8bkGNDQyBz3TO7OXpBESLF8ekULBrKYWxgXLY06HQEwc9sRANCqMT0ziRL9+5YBG9s1RLknJrb1FLyiAT20xEIkeq8GVFYxbYWGYmkcnWsa8OWvbUFLgwHJ9Gd5CHSCQo3JRxCUfElw39TswLTFMVZyG1LppaKpgTkMad2jMsrbaOFSwVtCKsM4SM9ARbpSwAf17nI7hjoguKGlM/pJASafZ06+oqAM6tCBH+LK1SJe+NEJ7N83jIaWNXjy6U5s2taA6ros0nYlvEIFvvOXhzE87gtAoHsox49/cIB1G5vR1lUjltBLlxZw5bKP82fHcOnSVdTWOejty6KmRmEEYmNaDTM5A6E+jYaWejz79c3o7CR4V26JHGeT4NkLBaiQcqm1w4ZlU+HWYdsckwC+54uVm8/LcaSLq8yvwFTEMdTZTWDthhRau7Zgy+4O9N+bxZnjPn7+0gEcfPsSJobzWNPVgB39dfAJ+mmt4nTgjUR1Gl24aQUmeUtKHliBSAXgxdJFEXOBgGMUgcRY7NxSzWedAViXAq8sn0obqMhwkaCEkqdLPs2Gpsg4FblL+2SXFTIsTYiLfH9RABPdvbmokq4gEPRgOT4eerQLG7cShBZRZdsISi7CoAgrbcCly64ONNSlhciGixjMI2vAgqn5qKwM8LkvNKFvM9OMFFGSPLNc+FBgjalsaLWsbyDgp5XehUcgpyvLH70RPF+T94S5HjWDCxJcBKAHgo6SG0guTNt2kEo7MkUJUtU7qgAWrZNc4OGWUiN4ZEEBsiJITjhOZL6r/LGckq+8O/K+q1hfutzSrZ7fDlZDYzJz7XJrao785d1ZiWzmdYPs1QHdmNXcUZbSGAwSdNKizZUMfjAU0GeO3IMHrmH/gYs4+N4FDF0ZF/Iisjbfe99a9Pc3YfPmJjQ12bBNuoR7Ek9NIKgWhriYpPIE8zjguy+ThU1QrppaDAqK0A3OwSXZRvhb5cPlAhgtwXQ15kvA3Jzy1Am4lMmR/JNIIJHA74UEEqD5ezGMyUMkEvj1JUCAqZSnlToinUlizjQwbx+VQgUQxLNTDxAIWCDhBkEPU0hEip5G90VZ40cQmhLbRfWL7rckbxErhLjsaejurkKhMItcNofjxybQt6FeNHvTtuHTgkgX2yJjwwL4hTT0sAKBS/dUSJoT6mcErCTGmZmZxNy8iyI9BC3VX8arUbufnwHmZwk/6F6pCELkGQOgvq4a9XVpIFyC5y4hk/HR02eL8qcZlqSjILBN0zBDzCKGLWWaIphkPbT4kHCEuf6CIC8KraHRsqusuGKto4YdUFHOoVQwVEximU4ZGTaiNAnKtU+QCQGLkQJjVzXdEiIWGryYT/PksQkMnJ3D4qKJLz24E195bgNaOxxm9xS3wMKcjmyW8bSEuyHYJ9HxqfFCw8bN3ejtvYzzZ/M4f6aAd/bO4dLFEvL5Bazd3oTN25uEPTh2eayqzKGpsR5BcAF+sIQwnEF3b6NYnyzLlnnEdnRxpWQbDgyHcW9KbmJlEvdFunYyjk9ZMglaSu4CLL1CAIsE/xrKrZPu1L3rqtDduwcj9/ioSFv4h797ExeHBnHi+DA2balERZaAwpGFB85n32N8YwmGVYJOwElzWWgJyJEFFbo3CoiMZjqRu4KVKy9BvEdLMEmxCCB1LmmUUJF10NJaDVqkpycDnDszh+41OWiGsmbxeUIXmJ8JsTDHVBgEEpz/Clgbjo7eniaYQjpURKlUkjhiTXdgE6CFtoBfzeZw2SolCt1hdeam9REGBtJOBsyvWsgX0NAYCOC3KuhXq8niB1ljOe/oDsvmY0sjgZBYVwOCPi4E2SgWDRS4hsFFElrimB/SA2anfUyMcXEoQENdCk3NVSImPoehJj4nIkIUQVd0TnypP3JJVbOMgowsmtHVWLRqy9UWgfoyf3TDl2nPuUFAzXe9JDRVOtxCSVzUC8oLV/oQEqAFXABTbqwKIHOhjMCSc0EgK4p5Mv0Chw4OyrfmyJERHD91TsjBNm5vR/89vdi+sw+bNrWisV4hX4JwxovTW4Jon8CZcbghB1dj7DpdjbkCx5UR5RpNBloBnSGtwJS/o4i/AoJ3Zc3kc3M81HeXFmCWM1DySjKHOERln4YbxZUcJRJIJJBI4A6SQLSOeAf1OOlqIoFEAh+bBMoBJ/fpxkkWSS10EXgR7WfUOq+TcIQfEeXwRSWTCpirFDKCDbKqiqsgrUEEXR5StGrRdU8DurosZLN0oy3g1VcOoFQke6UmYJGWHypmx4/M4vy5UfglA46ZkvwQxI+8n0pxR0e9pB9YWlrCubMTWJhnXCB1TOVaR8KUV352EefPLokrne/laZoUi4iph6ivdVBbbSBlBRg8fw1nTw2JtZGuwoznor5K10cqg6K405pEJZExqXSRFBIUpWyrZxcf4khTDIWVkn2l1ZeAXIMjyjPlJgBUlG+lnhMHEtGIpTZQYFRZbQxRmGmZoRJLqw9122uXp8V91jQz6OlrRK7akfyghuQvBObm6aJpgkPnu5oAQAU0lUtnS1MWa7paUVXZiKHzS/j5Ty/jzMlFiUnr7c1h3YYa6CRmIk5CiFwujU6Rt46p8WkcP3IevquskUxnQeshQX/AB9FDZcEU3lGlfIs7Id2pA1p/lfWTz0MXV10jiNBQKjAtDiRfKPfF2MP5YgGt7QbufWALaupSQjI1O7eEYoELIBxwojILI1d9nD25iIlRHaVSCn7AvIZcEaB7pwKU3Kh9jkL8dxPVXsaDIIjAn2k3lKWsptZEZ7ctclmYC/HegYsoFpTLJ8ePiwZLcz7ePzCFa5emBWxwPglJlLhs69i2nTlA88jnZ/DL149gaVFNGUIyy+Yf569ic+X8WeldEaYVYu26VqQzBkolDwNnC8jnA5RKdNdWmFksn1ZkKRY3UtV3JQeeZ7oWpi6ycGD/dbx34DpKLgEmXVY1hJ6Gi+emMXh+FrZNkJnDho0d8u6KFwRJdoQFmQ9MTwL+0frP+c/VGIIvCpBPxH2eK38OBbpijwp+VmRBSysgCPmuFkS+vIfvAN81xpWa8hfIQg3v4feFhFriGs5C7JMw4obi4sxvCGVx7eoMfvjDd/Cdf/sa/va/HMDJE9fR1dWB5775EP7s2w/g68/146FH2gS0a3pJ4tEJMukuTPMk41Hp6k2rs6a70A1X9uW5+MQ+XYz5nnLRTYNfogu/Ay3MwtAqEXppmWnsD+cft6yaaXkoIZIoEXyWDbT6GHxsX/uk4kQCiQQSCXz8Ekgsmh+/jJMWEgl8oiVARY0/AY7xAe2X1BcZBybuYgSahWULFDVAKn9khORW7oeHYmkaps00Hoz/0pRuqSsAKjGGPs0sSu9MpYCeNTq2b+/G0ffGcPzoZfz4B+fwyGPrUFuviUXonV+exisvD2NgYELir3SdVrQANsMsI3e5hx/ehkMHr2J+VsOrPzuBlqZq3PdAJ7I5E+PXS3jr9fP4/vcGMHIlhOY7jNaDQcXbU0p5XZWB/p2dOHZ4HOcvDOPVF0+hrTGH3bvbkK3RBLjRqjo76WLowjCK+Xls2NiG5rZqicViPBrBONk3afUwQSIjwGeMoEWSmJIAYlpH6FpbKi1EMX1KbqKQU+7i8ql0S+rnMiw0QAqYLcI2mc+xhJIbIpcFNAfI5JgTUUfgmzh8aBRMW7JmfUpcXC8OzOGNV65iaGAeJrJIGQbM0BanXAIXar3pFLB1axcOri3i4LsTOH6YoGIJtTWNWN/XifoaR4BFwDyEmodMDti8pRGbN/XgzOlrOLjvEjrbG3DPA0xwrwASrZazUx6uXBnF/NwE+ta2o7W9XsC6y1g/sbilxdWans6EeQQpjhPCLxWgIY1rlxbxyit7sWHTZmza2QY9pcP1Aa4RDJwZxvwMgWoKnV21SNGKJ1YtDX4ReOGHR3Di2LiklPnDL2/Fpu3V0G3q73TtVG6yEawXRKbcZpUt7gYtnwMQzW1x5xSLFBlQLWSymrgENzRlMDq6gEPvDuGVF7N48L5e1GaAqfEi3nzjIv7+hUEMX1kUq6TOFyparCBRUGe3gT33bsRb+67gwP7j+E9/lcJnn9qKvm7AL2pwXQt5N8DYeAmnTp9F35pmbNpcB8Om266Gp7/Qh3cPvIfhqx5++uIJWJk8dt/Tibq6lMr7WAJmJgMMXxvHyPAo1m9oReeaelkV4hgFTN+CIrySg6Pv5fHX//4UZqcC7NrVgmwGuHJxET9/6SLOnByV+dTemcP6jQ0C/rjAJIY8Yfrlt4PWUQoscluWaaxAsrJxKqtlLE/Kn+cJDuU+mf9xzOiixCMzxVGhkEVlSoNp6ZhbIokRXVhnEIQL8h2g1dWw4m+Uemdid13G0XIxwTS50KLj/IXL+MUvf4kLl8axbt0O9N+1Ftt3dWHLjibUNeqSd5eLGnR55kKPpMWJAK64/AoTtCJNYr0MFaAcxame7s1eiMUlTUjPCODHxoC5KbadA7xa5OdTmJ0CyODrOK6QNWUqGE7AeUarJi3RfBuiD7K8Fyv7KwsN0Xcj2SQSSCSQSOAOkEACNO+AQUq6mEjg45JAjCu5jS0LQuTBBsnKqDEWi5aLJRjmImwhwFG9odsgtVauzDO6yHKKcFIaNCMv8V5MOUEgSqdDMrUizMPUHWU/oqskSqirN/DkU/04eewFlNwUvvv/vo2LFydR37iEpYUlnDw0ijNnp7Btx2dw5NRJFF3mdlQKO1VVqrf9uzvxmYe24UeT+zFwZgTf++tDeP/wKWRzwMy4hvf3X0fgd6CluQpjE0PQwyIMxpoK4ASyaeChz3Ti4uAUJsYnceLIdfzlv34N/bvrUNVYRGh6YvWZmwwxdP46Mmkd//SbT6CxJSfutcIEatGdTjGmMlZMdMWA0MYkNYmAdsZHOmkXcOcRYAbMqQZa+RQAABpPSURBVGhpUZoGUbdprSxTJ6nERtYcz5sEQLKdoujqPE/rz/adLaipDTA2No+9bx4H9Bl0rtHheku4PLiAY4fGMTPVAMtKC2MuY//ko0/lVtcEkGzaUoOe3gq8f8BAKc/4wAWsvasNW7esEQuoxsUEnek5ighTAdZtqMJTn9uEa1fGcebUNfzH7y7h9JmLaGik3bAkLpczUy6uXhmF687j6994Ci2t9YqQSdNEZozRtCwDpmGJom1wltAnGb5YQa9czuM//LuXsW37KNrfzKGi1oIbmPDyJvbvHcfcbAE9Pd1Yv6FO3GZ1s4jAtzAxpmHf3vM4tP8yNLOI7bvasXlbi4I1Uj+HRqBlpNDTxLaizKuBi8aAm7JLjPUj0RGtVvQ87uppwKNPbsRfP38Ely/l8fx3p3Du2EU0VgJXLs3i1Ik5jE6bWLd2I85eOCH5NwmsDeZ+RAjTMfDNP/kUrlx7GYND4/ib5/di5OoEuttnZXWBjMJ5F7h6LcTps+fwzBc+hc6OKtQ0ONDMEFt31+Lhp7rxg/9yFIePHcFs/ipOnGpHrop5MEuwYWJmQsPli2OYmRnDt779NNq66JpOMENQx7hZ+sumoWu1OHxwGmMj72LHzgZU5nQMDS7g5IlRzMzMYv2mOjzy+EbUNtAyTVZlZbWTQETWRcIgEZayDpOUh6Ljd0HIrcQ1WclT7dJdXwlXiZkLVmI2h1uaAiOk+T3h2IiruqXmKjALTWeaFzJgB+q9sui+z1rU+8M2g5CANICpKYIwtkSAvn5LOzb392LPvWQt7kJVtbUcu8xpwHBem6RitGRSNgiUJ0JAzwS6FPOrwR9HkC7ZKj8mn3pifAI//vFbmJstSi7aubk0RodJlJVGMQ8cOXwO//Y7F2Gb07BTC9i+bQueePw+sUIzXQwDu9lPhijcMPHU5zb5N5FAIoFEAnekBBKgeUcOW9LpRAK/HQkQsMRgc3WNDEtiSgQ/nIWVnkGqcg5OJg/LoSLE1Aq0GNB90JT8kKE1DCuThWZPwWDaOKpNBEROADO1BCu1IBYU0XMD5ZZq2SYefqwT165vwU9eOIqJiWt4+dXrWMyPwNQK6Ovqwhe+sh2bd2/Huf9tH4JZWtwCMQIKmyUdUVPAl76yCwU3j72vncCpM2dw5OQsdLOAyooU+nrX4zOfWYdzA2PY9/Yo7FQWllmE5lO5JYumjvp6A4892QbNzGPf3hMYHDiBi4NLCIxFaIwxpAuwZ6Kuuhqf/vRONDZXCeAVch3mCcU8DHsOdroShrUoaVp4jSQ5BORUUslAq5vjME2SvDTDtCkhV0hblOwZy0hVU8V7kV1T0004TgAnNYsFfQpOag6OHcAiyA8Aurc+89XN+Mnf78PAuTN46aUBmLqHkjePqqo0du7sh1vI4uyZSzDTBVjOBmWRokIbhWvWNwJdvRqq63xMjS4iXZHH+k316FuXE2s15wgZMum7qIchqmuBR57owMLiTrzx+mmcP38BP/rBcZjMU8j8kyjBdRdQXV2FHVu3orGxVhh3Xb8E27GQrmB6mDHodgbZSpUKJvR1iUPVjDQKiwFaWyqwcWMvThw/hr37ZmFkCTSZ3zEn7rE7+jfhi8/eha6eLHSTbVLOZLYlQynZcDj+HtJZX56XVqMYXpbPeQFIHBuFHqJXQAEgUfblPP/hoovy96Z3Jud1c2sGT31+A6bmF/DGG0dx+cokRi6fgE2GYFNDd08PnvviI0CqCef+z5egG4zjjVxZGVNo69i+uxp//K2deP2Xg3j77bfw4kuD0L1xOIz3NR0sLPkw03Xo6G5BW2el+Jy7TO+hBdAMG5//0v2wUxm89sppXDg/hMvXLwCYRxguweQikaYLsGeamuq6tPQhWmMQ0KzpBsxUCVu2V8JJOTh75iheeOGUuMRTJukKCzvu7sAXn92Dex7ohmm7shhiEMBxycinNZmBiAoiKYtm5KocSzMSZyxiAXQcDYmzZG/4WHweQ4i0nFQJXiEP6ItIZxRza0nitU04KbrTzsA08wJUKU8uhhWLTLui0uYoa6MiJJL0RGSYtixs2tKButZq1DZWobYuK+3TgmmS8Mzn3OXCkA6d3yYhkGIYABc/+CEkYy3TrhBAk007AutR0ADnw+joOF544e8wPDyFpSLBdzUsvQum04aiP4ezF0ZwZmgYjjEOyy5IjPvjj9+nQDrRNxlsWS0rk+9AJMBkk0ggkUAigTtYAgnQvIMHL+l6IoHfpgSooNHKEFvVaKlMORp27mqDr30GHR1NaGhmXjwXOshGEyCkZqQZaGmvwjNf3g0nZeLu/k4BWmRZpaJbW5vCU5/bgbHrC6irVYQZYgvVGMtXQGunhf/2zx9GQ7OOkZElTIwXEPi96Gi30VyfweefeQhzRRvPDG2Fl+9EbW2FgAcqZGR3TTlAT18Kz/3RPejuSOPKxTnMLwSwUz4aGjTs3LlGLH9Hj7lo6VyPhtpKtLVXicJIN1ySiVC327q9Ac1tOfStzeDS+Rbk50sYn1qAZmvCNFuR0sRNdOfOtejuqYWhM0YL4ua3YVM9vvbcw2hsrEZbV0YURlEameKPlQdAJuPg2a/cB69kYtfuPqTSBLmMAVPtK0uGB5DlVmLCHOihgfoG4ItfuhsLs3PYsasmcqElSNaFvfSLX9mGupYCTh69jrERH37JEQKg1vYU7n+wH/MLLk4cTyHthOjqrROQIsZoKrW0uhrA2nVN6O4dx9TkMBrbDPSsTaOymiyfhFuMNbPEVZHuhL5poK0rhT/6093YsKkRhw81YmbGQ37JR+C5Ag4qMh4aGmqxbdMmIVehAAzDk5i0jm4L3/xnD8C2bXR2pcWiJEo8reMlxr2G6OyqwJ/82ZN4772TGJ8qYXqhhKIH1NVWCVC9/4Fd2HNPK9JZAkBPuTH6OhobNTzxufXo6s3BSQNr+upknDlOnIvlvxvBJa/EADNC4eXHtEuTuZQiI+DWfQFhazdU45vf6kd3n4WpkVnkp0pIIURnZwYt3fW4/5HNGLo+j8tjm9HYkJJ4ZLpYaygik7Vh2Dr+8Nn1WL+lFes3eygs+CjMzqKwsIiUw7QmJjI11di0rQP339eLXM6AD1dZvrQQ7Z2VeO6bn0ZPXzNOHB3EwryH+TlfYgnTqRIqqwzU19vYvq0X6zd3gHw9dAsNShoKS1w8oPVuETvvNrDnng04ftzCpQuTYNwp41CbWk1s3d6B/rv7YKc8mIzBVTZx8XggCGPeS2JO9e3gmy08y5GoI5mXiZYXeFZSD/HtiN4/YtXmxhBf++oTCFwXPT2VMCWeO4BXUuBr9+41cEsPwCt6qKrKqPhdidXmQoUmHhQc1xhsEsYqCByisaUSdW05FAIXfuDCMS3FvhzS9Z2sxQSanPCsgACU99I6ykOSM5myz/4rUitD2qMbOr+V9fW1+MMvPobZuUX4IV1iHfheDoFXBY/xx5kOcfl1dE8Wj7Zt2SxtKNDKGE2m/4mXQyLxsSPRE8Rnkm0igUQCiQTuJAloYey/cif1OulrIoFEAr9VCZS7zqpPApU2kvkAJd/DUsGFZWkCPG0jgEHmS3G3teEFJkqhgflFWpY85CqYPkSRvYh7bQDkF8i+6aO2hrn+AN0KUQoKkmpBMx24RRu2pWMpD1y5PIsKJ4PGRq6DMf2DCQYWktjGL3pgTKUj6VQEj8GnGy7j92gQDICFWWBuDqKkVuYgLrQkkimWINYyMllmUlF+UKF6JZEPY9aoOOooCqMrsDRfwsRkXjTOXGUauawhrqa0opiWL7GXyoXOFJKfxcUQjL2TGCybCrSSH2XI0FRaiPNLIfJLJVRWM+UHCXA8BEy7ID8qmhGRioBTKrYOCOsnp0vixlpbw/QsVHzp0keiJe4xxUaIUtHC+HgRnmuhqsaQeEoCC6qqpSLZRDU4lsotScIeog4/NJAvAm++MYXv/OUhHHt/AA8/ugb/3V/cg21ba8XFWCoQIEE3aDKZKCIkEuTQFZSsoIvzwPw82WqXkMvZqK1TAJKyJmusMl+V4JIBVHfA3KgC/kwfmQyfX1mUyBDK56IhiWRQHNPpGQ+TM3lopo1MxkZ1tSZziKlSNObJFOsP3Sd1ib2l9Wtu3oNj60hnuBCiIgLjWGIBIbF5bfktKkdC3Odcjn6CVAho1TgxB6rHnIcWGYk1uJ4inSouBFic9pB1bFTVAPTmNByg6AML+RC2paEqS9xA1tgCLJPyN1H0VMoMdim/CCxOL2J+dh7ZTCWqqtMILU3GkoCGlj8CXY5qSchxSFBDZlU1xzh3J8fJfBxK/G0mZyKb1YWEiIsdDAGkXAsF4N9/5zD+5vnjmF2Ywb/8V3vwJ/9sj+S/nZnypR9VVQaqqhl3G8piCt95ZemjNZ3phuIf87rSdZxusrYiXloWHsvwQ6HKSioTte6ixj8iE6KV0A8MYdcdm1BkUJk0kKlQ7tj8AIS6hsUCsLikqqypEm9TiXuWRQC+v/SyIIrV6dYqPhUCELmAQRAHw0eRzFihDtuwVQonCkZkyqnCp+KcodW4JO7wPNYZdy2kUup5+CYQ0HLRQNeU+zfbVeECfEF1kbOEbfOVoVGUrNW8FACOsGKrmGZ2i1OYYQYEy9IXmbOcEfFEXb2NZZ9sEwkkEkgk8MmWQGLR/GSPT9K7RAK/IwlQE4y1Q7VVsZkq1YFjO6JYUakntCFAodbEuDW6LFphgJocu8oYLipfVBBVbkmercgCmSyVOFU3/6WVjAqZRgIdm4o8YGeAyvVVYh0h4GVaAaqLBCW1JMDJ0mWPMEABWSpiBF42AQ3BEJW4BqCmjgyQSrEWxTMEUqaGdFVsMVBKqOoPFUtlzdD0EEaK9YRwUgZqGlSCe+p78kwsKlYtKoSM01LsnUwbUl2lhmrFKkFZKeuNZH6gHCr4Rxc/XmOHmTOUQIPEKGSSZQMqhyZBJJV39rG2Vj03W6RElOWFfVFutCZj2Ewgnaaiz0ZV/gexTtMybdIqGemtTG4vRDCajKNbAM6evIrLg1eRzfroW1uN7u5aJXeOJesSyxN7zNYV0RPHnyCSgC9dEaK+iWNfuTxP2A2RNrVoIX0xxBrL5yHTsPw4OJxHchDCIOERy9JL1VZ/zRkDTa1ZGl/VLexB/CyRlZEPzeejXLmQUVurLGkiZ5kXIhVl6YosXqxMLapwL6pcNaHGghJQt6mrjBeUOU8mXILtQOJvK4QCGcjVAA3V/C9VuYOSOZc/WsYqCIrj/rN9w1F1kdLIVECMbTmVQG1lBRBWRD2hgU11QoAymV5FnFGmVSGiApgGhYsxjDeuYx/YRlyD3K8WPSgnuouSRZmMqszDSXdovplcQLGdEBU59U5xEYSu5TKGtLDLAgefL47JjNoQNt9YlYjeL5GV6oCaw6o3kTilThkvGQN1TQCXH6CpVn0meEx5B/xGEJ2FuljlrUhewporzNKslYtfyjov73QUE6pqJoBjXzT5JqSMKHUMJcRbpX41X6THMuicNHxP43dRvfgCLvktkK8Qb+ViTzQfKUOyBUcQVxZY1NRX8ygaR/ZJWuOOCETtkJWaJ+SUWFV5HP/kbHRQfj6+nmwTCSQSSCTwyZRA/L/DJ7N3Sa8SCSQS+J1JgKBEKU1qq7QgEgFFCnmsFMXIjcqsTuhBXEMyF6UMKYuRUuKEiTV+gljTFuWSJ0k0ZC4r/5HWpWIIBXgxXYZSZkVPjOuJtqo1paTH8FG6xpoJpkhiFKvbVJLL2mcVK6ob71ZKnqhwVAiFAEmVUPnuYpdidkiVJsgWDTKyhix3L8rRGB/f2OxKq0pcNxIASfqSuM/soQB2uhirmLb4OVk3LTbyE+ZLNU4giYlcpIIe9ZM6sii8HFeOmXoG3k0L4vC1PC6cv46lpTGs39CGjZua4KQiUCWPyJKxchv3gOei9nlJj+UTb1XX4tsI3NWv7D6eiE7HV5dPxM1Fd7GeMihQNpbRPBNlP66lvA1eX11ZXOmttnF5buM61TsQz3EKkvJniVgi0cEHKlW1RaWj6lbuXOnrDfMk7sIqycv4SUMxOFdAUN7dqD9y+QO9UK6l6olojafHQgGGmYdlupJrVDJrCJoMoYk86ZJMl1JOAvrccgRUx+JlmmX0fIOMY5nFW3Ym2o8ecnnuLveTUuT7Sov+cjPRjpq3AuAF+EZpUoSlORZULEc1b1dVsgz+GYfJ+aC+BXH/VG9iGapHZL1cTFM1qT6VH6yc5yMty2PlSaNRUiBUykTfRy4WlX+LlufPSpW32WMf4me+TbHkUiKBRAKJBD4hEkiA5idkIJJuJBL4JEhAlK1IIRJARSUqOua1cgWJ/Y2vxdv4GdTxikK0+r64XHye5eM64nNqW67CxXfdehvfG8c9UVGMexHXH99dfsz9+N74Orc8F/+tPh8D0NX3ltdbfm95ufIyrJfHq89J++yDruwngg9jWBPpmzcoqYIfxU4q+jGfW5HkMKcGrTm0nPJ5IubMQLl8Hjs+gJOnjsEPxiSdyJat7YIfRG40JNH2qn8QGqyWh/S3DC3dTJ7l9/w6+7eqs/x8vF8uz/gct/F+efvxufgeHnM/Pn8j4li5M74eb1eurN67vfxWl77V8Qf7tbKAEl+75b2RhZbu7RxgMvVq+qywROvigsx3RYEpukUL5pSFHs4EXokXoFbajNsqf/5byzAufett/N7GdbBkvK/a+OD4fdhz39CaQoU3nIoP4nbi45tu44/JqosftQ8iyY/5HVnVteQwkUAigUQC/6gSSIDmP6r4k8YTCXwyJLBaUeKx6GSiaCqwIfoRzwuAUap3fMTyN/sRJJX/blVutZJXXu7mNatalzGxHK6UlPvFirnSelxn3BaP432Wiq+X7/NcXO5mZXktkER4qp3yOuJ6Vp9jPXGd6i7G3ikXvPgeblmOkYKMa5Pz8i8te2psYhAdUAj8k7FRI8L7xIrJuDpapcQyqUELIlKbgBYqZRVbWJxAqiKPnbs7sOfeNrS1O+JGSQZZWjzJykvrbQxCom58yGZlLKSft5gfH1LJbS+vluvNCrNMXK58/OKyq8eh/Lj8vnhfbTl+cQ1qq45XnbyxyPKCx6rTH/mQIxvPndU3xf1bfb78WE2RAJbBpEAa2tuz6OmrxvxiGg1NOYlt5GIGf2yLvgrKhsmT0Ycgeoq4vXhb3g7PxbKOr8fH5eVutr8aaK6+T96F6JsS182t7C+D4pvVrM6pt+PGd728dFxn+blb79+4CBbfG8+C1WOl3jbWVr6AoWqP772xrbimG88mR4kEEgkkEriTJJAAzTtptJK+JhL4GCVAZWe1ckRFU4xnVOLKtOvyfVFCb9GvFeVKFbjxvpWb4rZ55oYyysCyUnDVXlmX1JVV5W+oa9W9PIyvx9ubFLnhFMvFZW+1veGGsgOWj+W7eltWbLl+nhPXX3HNU1Km6rnsDhzdRDdHQT4URiQQKtTKBsUtwSYto0o4LE43SAJRxg/efdd6VFXnUFVVhY2b2mCYZOEMmNKSAboqHrG8gx91v3wsPjBQH7USVY7y4i+W+c3uvtk1nrvZ+fL7V1+Pj8vbjM+p+8ofTJ258Xp57Sv7vxpQX7lveU+G+fbg43b90KMYwID0Ugawc3c30ukcXDfApq3NErspbcn8ULKmZVO+AFxokHmmenO7dlgivl4uw+XnuM1OfN+tinAaSZoZthFD90gkq49vVkdc5sPaudm98bmVERB3j/j08vZWda+8Ais1LN8UP8vKCXnCGw6Tg0QCiQQSCdyBEkhYZ+/AQUu6nEjg45TAinLIVj6oVP9qbd9o0fzV7v31S688w82UupvXG9/DqzdTFnn9Vzl/81ZWXAHj6zerM75G6Ss6IBWjyKdZfqJ4aJaBprorwgnRyDEdRVFZI8MUQEsmK1Rp+4Tlk4d+dI5glHFytHrpjMsjIy6fm4Q3t/mVy+5mxW73jDcrv/rc6vo/rL64/IeVW93Ox3kcD9ev28btR+DDaw0ljY6HIJwTgiEdOZSKJCVSpEuawfnNWGvFvqpCeVUM9ErtsWVz5czHuReP43IbXB35DX4KaP6mkvxgB8r7+ZvOubiu37SeD/YyOZNIIJFAIoHfvQQSi+bvXuZJi4kEPtESWFFwPlypo1K0Un7lsZSyRGvSyrnb7cXKVVzmZnXG1z7K9le5f3XbrD8+92H1sNyHlVnd31uVv1VdNxOhlI2H5zZCpmJ9Q9RmfA+NlcwVqEFSWgjvCZlwNTKRkmCGyDNAGNClF2COwxWEu/qJbg7MP1jqNz9zK9ndquZbyfRW529VD8//Ovfcrr7f9TUh5mKGD8OWlDhciSDTLMdVkW7R/4B/Co6plQrOPg5+wEG+6SSgXOLfrzo+8X0fto3rvdFZ9cPu+uD1D5nGH7zhI55h/8rl8BFvS4olEkgkkEjg914CCdD8vR/i5AETCfwmEogVTdZRDnmUcinMqzepPlYMb3Lppqd+1fI3reQWJz8MIHzUtm9W7mbnbtGNX+u0kv6KIi970WF8tnxU4kbicwoyRJ/5OBVIXEhABfNWavBIFhSSBViBTDEckXxX3C3VDbdSpD+KDG5173JXPsLO7dopH+OP0tbt6rpdV8rbKS93q/PlZT7cOyAetRvv+m0d6aaB0Oc4M6ljZLmMiJPZMtlQFZDjyfLXXUycUTduuPCxgatbj+HtZBS/ER9dYqvb+XXnRXmLH0ed5fUn+4kEEgkkEriTJJC4zt5Jo5X0NZFAIoH/6iSwWn2+napN4XywfOT+KKkd4gIED764UMaZOSVDRZQ+Qpc8pXSbLVuL/LCG/6sbmTvogTkp4omhkXXWQxia8sfzpJ3StCi1iDDOxnkjOU+UdVstNDFmM5kId9DIJ11NJJBIIJHAP6oEyrSIf9R+JI0nEkgkkEggkcDHIQFBkFHFyxghRh4xY60CIpJ5NI6Dk/tYbvmmj6N3SZ2/SwnIcHIBIXKQFaKpmLJLjbNYwbkb//0u+5e0lUggkUAigUQCv1cS+P8B2gJ16Qef6pgAAAAASUVORK5CYII=&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;The recurrent connection adds state or memory to the network and allow it learn and harness the ordered nature of observations of the input sequences.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;RNN contains cycles of that feed the network activations from a previous time step of inputs to the network to influence predictions at the current time step. These activation are stored in the internal states of the network which can in principle hold long term temporal contextual information. This mechanism allows RNN to exploit a dynamically changing contextual window over input sequence history.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;The addition of a sequence is a new dimension to the function been approximated. Instead of mapping inputs to outputs alone, network is capable of learning a mapping function for inputs over time to an output. The internal memory can mean outputs are conditional on the recent context in the input sequence , not just what has been processed as input to the network. In a sense this capability unlocks time series for neural network.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM is able to solve many time series unsolvable by feedforward NN using fixed size time windows. RNN can learn and harness the temporal dependence from the data.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM have an internal state they are explicitly aware of the temporal structure in the inputs, are able to model multiple parallel input series separately and can step through varied length into sequences to produce variable length output sequences, one observation at a time.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Like RNN, LSTM have recurrent connections so that the state of previous activations of the neuron from the previous time step is used in context formation of output. But unlike RNN , LSTM have a different formulation that allows it to avoid the problems that prevent the training and scaling of other RNNs.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;strong&gt;Key technical historical challenge&lt;/strong&gt; in RNN is how to train them effectively. Experiments show how this was where the weight update procedure resulted in weight changes that quickly became so small as have no effect (vanishing gradients) or so large as to result in very large changes or even overflow (exploding gradients).&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;LSTM overcomes this by design RNN is limited in terms of accessing the range of contextual information. The problem is that the influences of a given input on the hidden layer and therefore the network output, either decays or blows up, as it cycles around network recurrent.&lt;/font&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;For the complete working of LSTM refer this link &lt;/font&gt;&lt;a href=&quot;http://colah.github.io/posts/2015-08-Understanding-LSTMs/&quot;&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;http://colah.github.io/posts/2015-08-Understanding-LSTMs/&lt;/font&gt;&lt;/a&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;p&gt;&lt;strong&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;3&quot;&gt;Application of LSTM&#39;s&lt;/font&gt;&lt;/strong&gt;&lt;ul&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Automatic Image Caption Generation A sequence classification problem. Automatic Image Captioning is the task given an image the system should generate a caption describing the image. Use CNN to detect the objects in the image then use LSTM to turn the labels into coherent sentences.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Automatic translation of text Given a text in one language translate into another language. Model must learns translation of words the context where the translation is modified and support input and output sequences that may vary in both length both generally with regards to each other. This is a classic sequence to sequence problem&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Automatic Handwriting Generation A sequence generation problem , The task is given a corpus of handwritten examples, new handwriting for a given word or phrase is generated.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;img width=&quot;134&quot; height=&quot;193&quot; alt=&quot;image.png&quot; src=&quot;data:image/png;base64,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&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Starting out with Vanilla LSTM code defined as&lt;/font&gt;&lt;ol&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Input Layer
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Fully connected LSTM hidden layer
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Fully connected hidden layer Properties of Vanilla LSTM
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Sequence classification conditional on multiple distributed input time steps
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Memory of precise input observations over thousands of time steps
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Sequence prediction as a function of prior time steps
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Robust to the insertion of random time steps on the input sequences
&lt;/font&gt;&lt;li&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;Robust to the placement of signal data on input sequence&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;3&quot;&gt;&lt;font style=&quot;font-weight: bold;&quot;&gt;Basic LSTM (Vanilla)&lt;/font&gt;&lt;/font&gt;&lt;/h3&gt;&lt;pre&gt;&lt;p&gt;import keras
from random import randint
from numpy import array
from numpy import argmax


# generate a sequence of random numbers in [0, n_features)
def generate_sequence(length, n_features):
    return [randint(0, n_features-1) for _ in range(length)]
# one hot encode sequence
def one_hot_encode(sequence, n_features):
    encoding = list()
    for value in sequence:
        vector = [0 for _ in range(n_features)]
        vector[value] = 1
        encoding.append(vector)
    return array(encoding)
# decode a one hot encoded string
def one_hot_decode(encoded_seq):
    return [argmax(vector) for vector in encoded_seq]
# generate random sequence
sequence = generate_sequence(25, 100)
print(sequence)
# one hot encode
encoded = one_hot_encode(sequence, 100)
print(encoded)
# one hot decode
decoded = one_hot_decode(encoded)
print(decoded)

def generate_example(length, n_features, out_index):
    #generate sequence
    sequence = generate_sequence(length,n_features)
    # one hot encode
    encoded = one_hot_encode(sequence, n_features)
    # reshape
    X = encoded.reshape(1,length, n_features)
    # select output
    y= encoded[out_index].reshape(1,n_features)
    return X,y
	
	
# Define and Compile the Model
# Lets start to reduce the length of the sequence to 5 integers as 100 can be too much. We will eventually get to a 100
# Lets use a single hidden layer LSTM with 25 memory units , chosen with a little trail and error .
# Output layer is connected to a Dense Layer with 10 neuron for 10 possible integers as an output 
# Softmax activation function is used on the output layer to allow the network to learn and out the distribution over possble output values
# Log loss is used while training , suitable for multiclass classification problem and efficient Adam optimization algorithm
# Accuracy metric reported each training epoch to give an idea of the skill of the model in addition to the loss
length= 5
n_features = 10
sequence = generate_sequence(length, n_features)
encoded = one_hot_encode(sequence, n_features)

# Lets start to build the model
# What we have decided is to reduce the length to 5 and range of features is from 0-10. The sequence generated is of length 5 and 
# and has numbers between 0-10 , The encoded sequence converts that to binary hot encoding i.e  10 array representation of a number 
# between 1-10 
# so the input is 5 and output is 10 which represent the probabilities of output between 0-10
# The hidden layer is an lstm of 25 memory cell (why 25 ) 
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
out_index = 2
model= Sequential()
model.add(LSTM(25,input_shape=(length, n_features)))
model.add(Dense(n_features,activation=&quot;softmax&quot;))
model.compile(loss=&#39;categorical_crossentropy&#39;, optimizer=&#39;adam&#39;, metrics=[&#39;acc&#39;])
print(model.summary())

#Fit the Model

for i in range(10000):
    X,y = generate_example(length, n_features,out_index)
    model.fit(X,y,epochs=1, verbose=2)

correct = 0
for i in range(100):
    X,y = generate_example(length, n_features, out_index)
    yhat = model.predict(X)
    if one_hot_decode(yhat) == one_hot_decode(y):
        correct+=1

X,y = generate_example(length,n_features,out_index)
yhat = model.predict(X)
print( &#39;Sequence: %s&#39; % [one_hot_decode(x) for x in X])
print(&#39;Expected %s&#39; % one_hot_decode(y))
print(&#39;Expected %s&#39; % one_hot_decode(yhat))&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;Above is a simple example of Vanilla LSTM,&amp;nbsp; A point to note the value of y is set to &lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;y= encoded[out_index].reshape(1,n_features). &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#0000ff&quot; face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;out_index is how far ahead or back is the value of y set to.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;
Before dwelling complex scenario, lets take another example with some real data. The below example consists of a dataset of air passenger travel (#) daily , &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;The idea here is to build an LSTM to predict the # of air passenger for the future. &lt;br&gt;
This example uses a single layer or vanilla LSTM&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;import numpy &lt;br&gt;
import math&lt;br&gt;
from keras.models import Sequential&lt;br&gt;
from keras.layers import Dense&lt;br&gt;
from keras.layers import LSTM&lt;br&gt;
from sklearn.preprocessing import MinMaxScaler&lt;br&gt;
from sklearn.metrics import mean_squared_error&lt;/p&gt;
&lt;p&gt;numpy.random.seed(11)&lt;/p&gt;
&lt;p&gt;air_passengers = pandas.read_csv(&#39;a1.csv&#39;,usecols=[1], engine=&#39;python&#39;, skipfooter=3)&lt;br&gt;
air_passengers&amp;nbsp; = air_passengers.values&lt;br&gt;
air_passengers = air_passengers.astype(&#39;float32&#39;)&lt;/p&gt;
&lt;p&gt;scaler = MinMaxScaler(feature_range=(0,1))&lt;br&gt;
scaled_air_passengers = scaler.fit_transform(air_passengers)&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
train_size = int(len(scaled_air_passengers) * 0.67)&lt;br&gt;
test_size = len(scaled_air_passengers) - train_size&lt;br&gt;
train, test = scaled_air_passengers[0:train_size,:], scaled_air_passengers[train_size:len(scaled_air_passengers),:]&lt;br&gt;
print (len(train), len(test))&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;scaled_air_passengers.shape&lt;/p&gt;
&lt;p&gt;# The data feed in LSTM gives a y value dependent on the past sequence the understand on how far back do we look into is conversatoin for&lt;br&gt;
# another day, For this example we go back is taken as previous step&lt;br&gt;
def create_dataset(dataset, look_back=1):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataX, dataY = [], []&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(len(dataset)-look_back-1):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = dataset[i:(i+look_back), 0]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataX.append(a)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataY.append(dataset[i + look_back, 0])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return numpy.array(dataX), numpy.array(dataY)&lt;/p&gt;
&lt;p&gt;look_back= 3&lt;br&gt;
trainX, trainY = create_dataset(train,look_back)&lt;br&gt;
testX, testY = create_dataset(test,look_back)&lt;/p&gt;
&lt;p&gt;# reshape input to be [samples, time_steps,features]&lt;br&gt;
# reshape input to be [samples, time steps, features]&lt;br&gt;
trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))&lt;br&gt;
testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], 1))&lt;/p&gt;
&lt;p&gt;model = Sequential()&lt;br&gt;
model.add(LSTM(4, input_shape=(look_back, 1)))&lt;br&gt;
model.add(Dense(1))&lt;br&gt;
model.compile(loss=&#39;mean_squared_error&#39;, optimizer=&#39;adam&#39;)&lt;br&gt;
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
trainPredict = model.predict(trainX)&lt;br&gt;
testPredict = model.predict(testX)&lt;br&gt;
trainPredict = scaler.inverse_transform(trainPredict)&lt;br&gt;
testY = scaler.inverse_transform([testY])&lt;br&gt;
testPredict = scaler.inverse_transform(testPredict)&lt;/p&gt;
&lt;p&gt;trainPredict = model.predict(trainX)&lt;br&gt;
testPredict = model.predict(testX)&lt;br&gt;
trainPredict = scaler.inverse_transform(trainPredict)&lt;br&gt;
trainY = scaler.inverse_transform([trainY])&lt;br&gt;
testPredict = scaler.inverse_transform(testPredict)&lt;br&gt;
testY = scaler.inverse_transform([testY])&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))&lt;br&gt;
print(&#39;Train Score: %.2f RMSE&#39; % (trainScore))&lt;br&gt;
testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))&lt;br&gt;
print(&#39;Test Score: %.2f RMSE&#39; % (testScore))&lt;/p&gt;
&lt;p&gt;# shift train predictions for plotting&lt;br&gt;
trainPredictPlot = numpy.empty_like(dataset)&lt;br&gt;
trainPredictPlot[:, :] = numpy.nan&lt;br&gt;
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict&lt;br&gt;
# shift test predictions for plotting&lt;br&gt;
testPredictPlot = numpy.empty_like(dataset)&lt;br&gt;
testPredictPlot[:, :] = numpy.nan&lt;br&gt;
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict&lt;br&gt;
# plot baseline and predictions&lt;br&gt;
plt.plot(scaler.inverse_transform(dataset))&lt;br&gt;
plt.plot(trainPredictPlot)&lt;br&gt;
plt.plot(testPredictPlot)&lt;br&gt;
plt.show()&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;font size=&quot;2&quot;&gt;Part II we get into Stacked LSTM, CNN LSTM and deeper LSTM’s&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;Find the complete code at the github location here &lt;a title=&quot;https://github.com/ajayso/LSTM-Digging-Deep&quot; href=&quot;https://github.com/ajayso/LSTM-Digging-Deep&quot;&gt;https://github.com/ajayso/LSTM-Digging-Deep&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Segoe UI Light&quot; size=&quot;2&quot;&gt;&lt;/font&gt;&lt;font face=&quot;Segoe UI Light&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/2172500479148129348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/2172500479148129348?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2172500479148129348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2172500479148129348'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2019/01/lstmdigging-deep-part-1.html' title='LSTM–Digging Deep Part 1'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-9051144828738537656</id><published>2018-07-11T09:06:00.000-07:00</published><updated>2019-01-08T03:03:44.885-08:00</updated><title type='text'>Primer on Markov</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;The world is surrounded by random system example movement of dust particles on the water, one may try hard to arrive at a pattern but at the first go it looks probably impossible. Another example is stock market prices. Systems which generally have a high degree of randomness are defined as stochastic by nature. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Markov Model is stochastic model used to model randomly changing systems. It is assumed that future state depends on current state not on past events. This assumption enables reasoning and computation with the model that would otherwise be in intractable&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Below are the different types of Markov Models&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Markov chain&lt;/b&gt; simplest of all the models. This model the state of a system with a random variable that changes through time. In this context Markov&#39;s suggest the distribution of this variable depends only on the distribution of the previous state.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Ex use of Markov chain is &lt;b&gt;Markov Chain Monte Carlo&lt;/b&gt; which uses Markov property to prove that a particular method for performing a random walk will sample from the joint distribution.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Hidden Markov&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Hidden Markov is a Markov chain in which state is only partially observable. In other words, observations are related to state of a system but they are typically insufficient to determine the state of the system. Many algorithms for Hidden Markov exists&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Viterbi Algo&lt;/b&gt; this will &lt;i&gt;compute the most likely corresponding sequence of states&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Forward Algo&lt;/b&gt; will &lt;i&gt;compute probability of the sequences of the observations&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Baum-Welch Algo&lt;/b&gt; will estimate &lt;i&gt;the starting probabilities, transition function and observable function.&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Markov Decision Process&lt;/b&gt;- state transition depends on the current state and an action vector that is applied to the system. The Markov decision process is used to &lt;b&gt;compute a policy of action and will maximum some utility with respects to expected rewards&lt;/b&gt;. Closely related to &lt;b&gt;Reinforcement learning&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;b&gt;Partially observable Markov Decision Process&lt;/b&gt;-&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;POMDP in which state of the system is only partially observable, also called &lt;b&gt;NP Complete&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Markov Random field&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Markov Random field or Markov Network may be considered as a generalization of  Markov chain in multiple dimensions, in a Markov chain state depends on the previous state where as in Markov random field each state depends on its neighbours in any of the multiple directions.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Hierarchical Markov Model&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Can be applied to categorize human behaviour at various level of abstraction. For example, a series of observations such as a person location in a room can be interpreted to determine more complex information such as what task or activity a person is performing.2 kinds of Hierarchical Markov Model exist Hierarchical hidden Markov and Abstract Hidden Markov. Both of them are used for behaviour recognition.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Tolerant Markov Model&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;TLM is a probabilistic algorithmic Markov chain model. It assigns probabilities according to a conditioning context that considers the last symbol from the sequence to occur as the most probable instead of true occurring symbol. TMM can be of 3 different natures substitution, addition and deletions. Successful applications have been efficiently implemented in DNA sequences compression.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Markov Chain&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;As mentioned earlier Marko chain the state of a system with a random variable that changes through time. In this context Markov&#39;s suggest the distribution of this variable depends only on the distribution of the previous state.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;DTMC (Discrete time Markov Chain)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;DTMC is a sequence of random variables &lt;b&gt;&lt;i&gt;X1,X2, X3… Xn&lt;/i&gt;&lt;/b&gt;&lt;i&gt; &lt;/i&gt;characterized by the Markov property(also known as memoryless property). The Markov property states that the distribution of the forthcoming states state Xn+1 depends on the current state Xn and doesn’t depend on previous ones &lt;b&gt;&lt;i&gt;Xn-1, Xn-2…, X1&lt;/i&gt;&lt;/b&gt;. &lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Pr(Xn+1 | X1= x1, X2=x2…. Xn = xn) = Pr (Xn+1 = xn+1 | Xn = xn)&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;The set of possible states &lt;b&gt;&lt;i&gt;S = { s1,s2,…sn }&lt;/i&gt;&lt;/b&gt;&lt;i&gt; &lt;/i&gt;of Xn can be finite and countable and its named as state space of the chain. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;The chain moves from one state on to another (this change is named either transition or step) and the probability pij to move from one state si to another sj in one step is named transition probability and is given as&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Pij = Pr( X1=sj | X0= si)&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;The probability of moving from state i to j in n steps is denoted as &lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXAK5MnP7YSq7je-7pZaCLtE-4R2RF5sjqUuqlFVXGAvNQ_Jt0sVq5G21F-dDNBPS8aOhl1c58cHmJYyBqzOp9IdAq4DffPjhoRl-1c8nd-DPvhIU02knflLBaxgFKt4T90Vum2KK_ni_L/s1600-h/clip_image001%255B3%255D&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;img alt=&quot;clip_image001&quot; border=&quot;0&quot; height=&quot;32&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHrTYIsYPOVGusfljlq_PZOhslthu1LeWo6CNJfi81apgYnBKy3AS9yVKS7AAohKE5u8GHzkZKJBP29kBsKvoSdPEXQMf0FoExZH0GyAQ9W4-OXEo1E3M5qtHFyGJJYyCdSUff_P9HLQTm/?imgmax=800&quot; style=&quot;background-image: none; display: inline; margin: 0px;&quot; title=&quot;clip_image001&quot; width=&quot;244&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;A DTMC is called time homogeneous if the property shown in below Equation holds, Time homogeneity implies no change in the underlying transition probabilities as time goes on.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;Pr ( Xn+1 = sj | Xn = si) = Pr ( Xn = sj | Xn- 1 = si)&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;If the Markov chain is time homogeneous then pij = Pr(Xk+1 = sj | Xk = sj) and &lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9wFEhuhiHd4l0btfgzA7-erzS-uN7hqkqMLsnNEf213OJC1kEDjQ56XZKbHBE1hPECa1Nq7_NtaOfxRAQKPWoCoszkMwZUWVCP2LY8NgvtuPC_RCboFFMmlYrHz9qweUkOt772S-8fEho/s1600-h/clip_image003%255B3%255D&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;img alt=&quot;clip_image003&quot; border=&quot;0&quot; height=&quot;24&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNy51egfG7jXs4rPkupQLsPVaBDBQqIEXB5Y6qb2aavYTpCj6Xc5PBH4M5-2B4RngYIEW6ea76_k4bzIRCjO3A7NgNgHtFzuQUZ1xEXOZovRAwlT5mplamiVGkrAz8jdHBkxovY_9_Unpk/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;clip_image003&quot; width=&quot;244&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;segoe ui light&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/9051144828738537656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/9051144828738537656?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/9051144828738537656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/9051144828738537656'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2018/07/primer-on-markov.html' title='Primer on Markov'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHrTYIsYPOVGusfljlq_PZOhslthu1LeWo6CNJfi81apgYnBKy3AS9yVKS7AAohKE5u8GHzkZKJBP29kBsKvoSdPEXQMf0FoExZH0GyAQ9W4-OXEo1E3M5qtHFyGJJYyCdSUff_P9HLQTm/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-8850055471348046523</id><published>2017-03-27T12:44:00.000-07:00</published><updated>2017-03-28T22:16:45.625-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning Basics"/><title type='text'>Parallelization of R code using Azure Infrastructure</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Working on large data sets, exploring which machine learning algorithm fits the bill is a daunting task. Moreover these ML algorithm can run into hours and days in certain cases. There is always a need of having compute resources available on the fly. R in principle is single threaded by nature.&amp;nbsp; To support parallel constructs like parallel for , apply functions we have &lt;a href=&quot;https://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel.pdf&quot;&gt;the parallel package&lt;/a&gt; in R, which supports multi core and cluster based parallel execution.&amp;nbsp; The cluster supports both PSOCK and FORK implementation. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;doAzureParallel R package is a lightweight R package built on top of Azure Batch Service (job scheduler service) that allows use of Azure compute resources from the R session. doAzureParallel supports the foreach parallel construct. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Getting started with doAzureParallel&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below video will walk you through on the basics of doAzureParallel.&lt;/font&gt;&lt;/p&gt;&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/AGpl9TdhNO8&quot; frameborder=&quot;0&quot; width=&quot;560&quot; allowfullscreen&gt;&lt;/iframe&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;doAzureParallel does not have parallel constructs for apply function, If one did require to use them they can use the parallel package on the node on the cluster and get the best of parallel apply functions. With parallelism comes a degree of complexity of memory management and caching and understand how can FORK help for same. The below video explains&amp;nbsp; how to use parallel package and take the parallel execution of the code down to a core level.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Running Parallel constructs along with DoAzureParallel&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/eSQGsEVWbpo&quot; frameborder=&quot;0&quot; width=&quot;560&quot; allowfullscreen&gt;&lt;/iframe&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Parallelization to MLR algorithms&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;DoAzureParallel in its current form supports foreach , it needs to graduate to support parallel apply functions. Taking the discussion to the next level it would be lovely if doAzureParallel would support mlr (classification, regression) set of algorithm to run in parallel.&amp;nbsp; The current set of algorithm like &lt;a href=&quot;https://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwjg6K2m7_nSAhVCr48KHSKAALsQFggbMAA&amp;amp;url=https%3A%2F%2Fcran.r-project.org%2Fpackage%3DparallelMap&amp;amp;usg=AFQjCNH7Gin_3DDuc1LTxms1YAJVjvtdOQ&amp;amp;sig2=ef_HeGSaiD14fuxtCK2iKg&quot;&gt;parallelmap&lt;/a&gt;, &lt;a href=&quot;https://github.com/tudo-r/BatchJobs&quot;&gt;batchjobs&lt;/a&gt; and mlr solve the problem of running the Mlr algorithms . It’s pretty easy to see how a larger model, more iterations or a different choice of methods could result in unacceptably long run-times. One could use multi-core or socket level parallelism, but ideally taking advantage of as much computing resource is better choice,.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Apparently the batchjobs package doesnt support azure batch service.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;ParallelMap is now directly integrated into mlr, and this makes scaling to parallel back-ends seamless. Our choice of back-end is parameterized so we can write algorithms once and choose the parallel back-end depending on the resources we have available when we run the model. To illustrate this, we re-run the same model, but instead of running the model on a single node, we run it on a clustered environment running OpenLava, an open-source Platform LSF compatible workload manager now supported by BatchJobs.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below video explains how to use parallemap, mlr in a mult-core scenario along with doAzureParallel.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/UMA2u4kDcbk&quot; frameborder=&quot;0&quot; width=&quot;560&quot; allowfullscreen&gt;&lt;/iframe&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Demo codebase can be found here - &lt;a title=&quot;https://github.com/ajayso/DoAzureParallel&quot; href=&quot;https://github.com/ajayso/DoAzureParallel&quot;&gt;https://github.com/ajayso/DoAzureParallel&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/8850055471348046523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/8850055471348046523?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/8850055471348046523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/8850055471348046523'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2017/03/parallelization-of-r-code-using-azure.html' title='Parallelization of R code using Azure Infrastructure'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/AGpl9TdhNO8/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-4206686002654697460</id><published>2017-03-04T03:27:00.000-08:00</published><updated>2017-03-04T03:37:49.621-08:00</updated><title type='text'>Azure Data Factory–DE glossed</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Having worked on the Apache stack for sometime, I decided to look at Azure Big Data stack.&amp;nbsp; My starting point is data ingest.For most big data projects the journey starts out with data ingest, clean, transform and have it ready for analysis. Azure Data factory is MSFT Azure offering for cloud based data integration service that automates the movement and transformation of data. At a very basic level below is a representation of data lifecycle in big data projects&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRoxnerj8ELMvGFjrelfwGwQfrhTl33_DtiDmD2z0I-F7zRO5uHMwZO4U4WDa80GkranpNcdGG49OmhPsuozQUK_2tfX_b3NQ0vFOOf4ObE-CqR2Vtt34cflqllf6XibVPdOuQIP3Y48pc/s1600-h/image%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBikfHFoT1sYoqifVt_KS5sKXHM3tqQCBMfN4uCLohqpCJfz5wXsn5aHdPLBOebSCG_E3Dp4HlPkffPfZm0FtO_81jpe8T68mLik6Zvd3Fjwiy0Sth3yIj9_AKtRU0TK9snSvu2Mr_n1un/?imgmax=800&quot; width=&quot;1074&quot; height=&quot;272&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Azure Data Factory has the following constructs&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- &lt;strong&gt;Linked Services&lt;/strong&gt; have the define where the data has to be sourced from/to. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- &lt;strong&gt;Pipeline and Activities&lt;/strong&gt; – Pipelines are a logical group of activities that performs the job of moving data from/ to.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- &lt;strong&gt;DataSets&lt;/strong&gt; – Linked services interfaces the Data Factory to the external data sources. Datasets are a representation of the data store.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGr0G9HL80CA5_alMIf2NP_V_vldq92_NkQhqpIOARIqfTsijyzOGep1nOBrGT8HXrPDnDiP0NpKF6JyhPPwAJhOQpQFWkGJ5kR9SN70inkM8jm8bLM_1XXyF5yy1rZee-R6d4r4oEeonK/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxPmwSXvUTG-Tc_1lEk3OdEqXu_pnk7xA-2BYRRANr0Ao-arzcCXO5D1wz_TlWMyvG6vHLPwntiH7_inJVfU1t0tjBhMW-a2uw5qCUTf6d-hi_9KFuu0Ml0q9cDxEqvpWf3gGiNwkmUd2/?imgmax=800&quot; width=&quot;998&quot; height=&quot;315&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Linked Services provides for the interfaces to external sources, currently the support is limited to Azure, Databases, File based, Salesforce, OData a complete list can be found &lt;a href=&quot;https://docs.microsoft.com/en-us/azure/data-factory/data-factory-introduction&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;From a customization stand point of view one can create custom activities. I have the linked service limited.&amp;nbsp; On the contrary Apache NiFi seems to have a better in multiple ways&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- &lt;strong&gt;Intuitive UI - NiFi designer&lt;/strong&gt;.Dataflows can become quite complex. Being able to visualize those flows and express them visually can help greatly to reduce that complexity and to identify areas that need to be simplified. NiFi enables not only the visual establishment of dataflows but it does so in real-time. Rather than being &lt;em&gt;design and deploy&lt;/em&gt; it is much more like molding clay.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;-&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&amp;nbsp; &lt;strong&gt;Better support&lt;/strong&gt; for external sources linked services in Azure Data Factory a compared to processors in NiFi, have seen NiFi comes out better , list can be found &lt;a href=&quot;https://nifi.apache.org/docs.html&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- NiFi is highly fault tolerent&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;- Superior &lt;strong&gt;Exception Handling – &lt;/strong&gt;finer details&lt;strong&gt; &lt;/strong&gt;&lt;a href=&quot;http://docs.hortonworks.com/HDPDocuments/HDF1/HDF-1.2/bk_DeveloperGuide/content/exceptions-within-a-callback-ioexception-runtimeexception.html&quot;&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/4206686002654697460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/4206686002654697460?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4206686002654697460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4206686002654697460'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2017/03/azure-data-factoryde-glossed.html' title='Azure Data Factory–DE glossed'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBikfHFoT1sYoqifVt_KS5sKXHM3tqQCBMfN4uCLohqpCJfz5wXsn5aHdPLBOebSCG_E3Dp4HlPkffPfZm0FtO_81jpe8T68mLik6Zvd3Fjwiy0Sth3yIj9_AKtRU0TK9snSvu2Mr_n1un/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-6828543066829464056</id><published>2017-01-28T03:03:00.000-08:00</published><updated>2017-01-28T03:03:34.536-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Cassandra"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Mesos"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache NiFi"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Storm"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Messaging"/><title type='text'>Real-time Financial Stocks Analysis Architecture</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;In the prior 2 posts, the focus was more on using machine learning techniques like regression to predict gold buy / sell signals. While the models that we built ,give an idea on how to get to a final buy and sell signal for gold with the assumption data is clean and always available. W&lt;/font&gt;&lt;font face=&quot;Calibri&quot;&gt;ithout relevant clean data, the model predictions would be of zero relevance to the business. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;In every big data analysis project which heavily rely on real time data, &lt;/font&gt;&lt;font face=&quot;Calibri&quot;&gt;a lot is dependent on the underlying software architecture which is responsible to deliver the data in an edible form for the models. In this post I have attempted to put together high&amp;nbsp; level architecture of a real time stock analysis platform. This is a high level architecture of XTrade platform is current in production for one of the customers.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;Additionally I have a starters kit available at &lt;/font&gt;&lt;a title=&quot;https://github.com/ajayso/XeusTrade.git&quot; href=&quot;https://github.com/ajayso/XeusTrade.git&quot;&gt;&lt;font size=&quot;3&quot;&gt;https://github.com/ajayso/XeusTrade.git&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot;&gt; which comprises of templates for all the components. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;strong&gt;A Brief on XTrade&lt;/strong&gt; - &lt;/font&gt;&lt;font face=&quot;Calibri&quot;&gt;Day trading can be risky business, human analysis of real time data without intelligent insights can be detrimental. XTrade is real time stock technical analysis platform which ingest real time stock feed , industry data and news and analyse to provide predictions, correlations (&lt;strong&gt;weak and strong)&lt;/strong&gt; called quants. XTrade interfaces with trading systems to execute the actions or provide these actionable insights to an average trader or analysts. &lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0lKa_CIfo0mTrIe1ylTxdAooytiCzUVlxJBbGOjKuNM1sK22KmZosLYw-OTsrHfgGaski8ASIoRS_JSCaxvXnQvcXdTzfue-BieAnQ4Pca4D2YNQgqkgY33RjWHOSKGRyFaO_RTMxP4pQ/s1600-h/image%25255B60%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; margin: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgreWMqtZMKJwI9HX6lb3rvsts-nP4yG_FGtUCSe89qPmST0maDI6E8GYJYxmNmgnsReT01MCehYsygWZyYzVsey79ve76mr6sHzZIHzMzq2xbAIEQudShhHN5U7MHx9EqRRCIb5rpjYIqV/?imgmax=800&quot; width=&quot;1080&quot; height=&quot;395&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;The architectures for most real-time system are in line with the lambda architecture. This post will focus on the speed (real-time processing) area of the lambda architecture&lt;/font&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWSrT9owBnxb7kE6ATkxSGBmWVL-AWcyVoWBOByOwietiydpG-28XM0NSKWqlC4ClgRAoyqmwJWx77mpYWmFsty0ui0NPwbJDBk_w3MPsVPemW4zIE-3I3y3CoofC8ZCahDG20MWMBFA-h/s1600-h/image%25255B21%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6dgTmvs_y88Uc8qy9BrXvTBmAhgXlZN-Wtaxd3fhT2Ve-IDuKGbrvMojNQzMDH9tf2-wyjtfZY5_kOQdesAfOvXogs2FFD73oFI-lQ6Y4CHGblYaAqpSwlvQwwLnluZ-D2Hd73icqb8bX/?imgmax=800&quot; width=&quot;379&quot; height=&quot;205&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Getting the Data In ……&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Data comes in from multiple sources and can be varying formats and segregating relevant data needs a specialized software. XTrade had multiple data sources below are some of the more relevant ones. &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Stock feeds &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Industry feeds&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;News data&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Other relevant data &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The requirement is to pull data feeds from the data sources at a specified frequency( in minutes). Stale data management (dont pull stale data) and transformation to standard format in this case json is something which Apache NiFi provides for absolute ease. &lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Apache NiFi is basic architectural building block for data ingest , transformation. NiFi has many processors with the options of writing your own processors in java.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Apache NiFi&lt;/strong&gt; is an enterprise integration and dataflow automation tool that allows a user to send, receive, route, transform, and sort data, as needed, in an automated and configurable way. Similar tools exist, but NiFi is different because of its user-friendly drag-and-drop graphical user interface and the ease with which it can be customized on the fly for specific needs. Think of creating a simple flow chart of what you want to do with your data; that is how easy it is to create a dataflow in NIFi. It is also highly scalable and can run on something as simple as a laptop or clustered across many high-performance servers.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Below is example of XTrade Nifi data flows, &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV0u2LwKqCnjOJpNcSf976Sch2tldA2OTUfGiTLX-UZ_GCv6Pub85GQ5uaLQ9HMyRWJFsanljxGQ2q4F9tAAWPAo9K9oYG_heFqOyDLZ90KUK4e1d0Tpde5ZrFwWC9cE6Juz1Cu2L9196V/s1600-h/image%25255B31%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLcMoyysiq-1nMRHW9dLOhjT7yMF0K1yoKY7tZvj9JPmVX4SaY_cllFzCa6vNB5vqLl0gV6u_Bys2efgoFzKXV5QtfodAOPHDEBXu2grjKnhIqeZpb-fOF1cZymytvlpsr5rpFCj5mcy8Y/?imgmax=800&quot; width=&quot;535&quot; height=&quot;317&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;In the starter kit the NiFi folder has 2 templates which can be reused, these are data sources for individual stocks and news.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Implementation Details:&lt;/strong&gt; The data flow will pull the feeds and process them, post which these need to put into a messaging systems, In this case we have used Apache Kafka. JSON is the standard data format used within this architecture.One has the option of persisting these data feeds to hdfs or any other persisted data store. Apache NiFI runs on a cluster and highly fault tolerant.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Messaging …..&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The requirement of having low latency&amp;nbsp; reliable messaging system is really important. &lt;strong&gt;Apache Kafka&lt;/strong&gt; -is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Apache Kafka is been used as basic architecture building block for messaging in the architecture. Below is the high level representation of Kafka implementation for XTrade&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjltWHbK1tk9fAibvbbtEUzwvl73cnJWwW1a2dL-_Ivh30SBdsGCiL6xMqknfwZAhNFwV-Ju4nrZ0Z9il9sT76AiCdH8EASU7J-BhVeaIUyDq8JCstX-71mvYblmy_pMQVYhA9xfDIm0-4r/s1600-h/image%25255B42%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwrkXq7Sxtw-sNyaZ01x2dsJgHbKj3x0F20nyCIGGY12cUJ8rvBL9TV3Wpsadyrrdz0-QGhKzisX_95roRVYlmh9ObVwOrkVbrQJ1hh01j_xRIDIsvX0v6cuzzgFMhkZ0pe-E_ZbNPeHC-/?imgmax=800&quot; width=&quot;527&quot; height=&quot;479&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Implementation Details:&amp;nbsp; &lt;/strong&gt;Brokers are segregated based on the following &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Individual Stocks: Since XTrade handles prediction and data insight for individual registered stocks from the customers, the decision to have separate broker for the same was taken to handle future scale out requirements.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Broker(Industry) messaging system for industry stock prices and news.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Broker(misc,) messaging exposure and risk management data coming in from customer systems and other public data sources.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Core Analysis and Data Decision Making…..&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Fast processing of the data streams coming from the messaging layer can really help cut down latency of the overall lifecyle. Stream processing and calling analysis model in R, spark and send back the prediction and data insights in matter on minutes is key here. A platform which has the flexibility of supporting multiple programming languages was the need of the hour. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Apache Storm&lt;/strong&gt; is a free and open source distributed real-time computation system. Storm makes it easy to reliably process unbounded streams of data, doing for real-time processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use!&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Storm has many use cases: real-time analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Storm is fast: a benchmark clocked it at over &lt;strong&gt;a million tuples processed per second per node&lt;/strong&gt;. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Implementation Details:&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Stock and Industry data coming in from the Kafka is fetched by Storm with a Kafka Spout and further processes news and stock analysis calling R , Spark model which will emit the prediction back to Kafka topic (Broker Results), In the next post I will detail out he Spark, R model for stock technical analysis. The prediction are also written to Cassandra.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;A ready skeletal code for Storm (eclipse project) written in java can be found &lt;a href=&quot;https://github.com/ajayso/XeusTrade/tree/master/Storm&quot;&gt;here&lt;/a&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWXFMqLrNbD-VYzVdWB4L5d6QZq4DANxEeWD6y5Wnvyy29tt4-F_5ypzyOwWgS4EFKXqCdaXnG4WlBso98INahFlBHVEcgywrPCAX86nFI06dCrb68eG_Za8mRYzQBrjDVr1SdQ95Zgzan/s1600-h/image%25255B49%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidjqbJkhy4iQJrvX5wJGuhcgioLSAQiNkGjF7aCe36csAcWdo2DZ3rGjdZ8hrml_1tDfx3GQZDLAABK7VyK4zAG9I-O1v_opI4W7jpZWj_-4lmu_qWxB5_6QJ6CbyQcsBS5mmvi7GQmrhk/?imgmax=800&quot; width=&quot;626&quot; height=&quot;361&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Storm architecture for XTrade&lt;/strong&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Putting it all together….&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The entire solution can deployed to aws / azure ,&amp;nbsp; Managing the clusters across this distributed environment is a daunting task.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Apache Mesos looked to be a good option for the same. &lt;/font&gt;&lt;a href=&quot;http://mesos.apache.org/&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Apache Mesos&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; is a centralised fault-tolerant cluster manager. It’s designed for distributed computing environments to provide resource isolation and management across a cluster of slave nodes. &lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It schedules CPU and memory resources across the cluster in much the same way the Linux Kernel schedules local resources. Mesos support for Hadoop, NiFi, Kafka , Storm and Cassandra exists. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/6828543066829464056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/6828543066829464056?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/6828543066829464056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/6828543066829464056'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2017/01/real-time-financial-stocks-analysis.html' title='Real-time Financial Stocks Analysis Architecture'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgreWMqtZMKJwI9HX6lb3rvsts-nP4yG_FGtUCSe89qPmST0maDI6E8GYJYxmNmgnsReT01MCehYsygWZyYzVsey79ve76mr6sHzZIHzMzq2xbAIEQudShhHN5U7MHx9EqRRCIb5rpjYIqV/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-4445411390514230529</id><published>2016-12-28T23:57:00.000-08:00</published><updated>2016-12-31T01:37:21.687-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning Basics"/><category scheme="http://www.blogger.com/atom/ns#" term="Predicting Gold Buy Sell"/><category scheme="http://www.blogger.com/atom/ns#" term="Prediction"/><category scheme="http://www.blogger.com/atom/ns#" term="Regression"/><title type='text'>Machine Learning Basics–Regression…Part II</title><content type='html'>&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Arial&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Financial investments in the capital markets in the form of equity, options or commodities one often looks at ways to maximize the profits. Most start with the rudimentary ways as tips from analyst and eventually start digging deeper below the surface to understand technical indicators. The technical indicators at a level 100 does make a lot of sense. Taking these technical indicator and pushing the boundaries of analysis with multi year data OR real time quant trading data one can find many new opportunities to make money. Of course a full fledged equity market prediction needs multiple data sources both historical and real time. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Historical data with some real-time market data with machine learning can help in coming up with reasonable prediction accuracy. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Code on github can be found here &lt;a title=&quot;https://github.com/ajayso/ML-Regression-Analysis&quot; href=&quot;https://github.com/ajayso/ML-Regression-Analysis&quot;&gt;https://github.com/ajayso/ML-Regression-Analysis&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;h4&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;font style=&quot;font-weight: bold&quot;&gt;Generalized Linear Models&lt;/font&gt;&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;In the earlier post we covered linear regression(LR),&amp;nbsp; In LR &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1. We assumed that y data points have a normal distribution.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2. The mean of the y data points lies on the line.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQGUPx3BSi6B-37399BUuzEnNse8o4My4FhvCOVkBgMuQh7-_ZeIie8wIIBgRx06AmtuNgtqIOnfH6IRiaHlA5tO-geWUtwTkpzhdlPLxlUd6EzXrGiITA8rpvbkm-IVpjvKAmrt4wr2x5/s1600-h/image4.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4Y2d6HGwXbzqbZd-77-8e2ZI5U90U4PMMfLV-RyAQS3NklkOVQ6YKEk8F03NcTt9jCFSfsBRNi60O3W5TNM4IejjvaAJnOnMzwhv354OAr0mzDfCayq4Sn4Fd5zGRJ3eOQYs1q0SBOmA/?imgmax=800&quot; width=&quot;419&quot; height=&quot;245&quot;&gt;&lt;/a&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Linear regression assumes a &lt;strong&gt;normal distribution of the data&lt;/strong&gt; and go with a line where mean of the y data points lies on that line, However in certain situation we may desire to go with different types of data distribution example Binomial, Poisson , Hypergeometric&amp;nbsp; etc.. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;A Briefer on data distribution&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;A brief on data distribution can be found &lt;a href=&quot;http://people.stern.nyu.edu/adamodar/New_Home_Page/StatFile/statdistns.htm&quot;&gt;here&lt;/a&gt;&lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt; &lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;When delving into broader set of data distribution we resort to a support for different types data distribution models. &lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The next is to generalize the above model this can be done generalize the distribution that’s the y , the functions of the explanatory variables – x and finally how to link explanatory variables to the mean of the distribution, this is the basic idea of Generalized Linear Models.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The generalized linear models (GLMs) are a broad class of models that include linear regression, ANOVA, Poisson regression, log-linear models etc. The table below provides a good summary of GLMs&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv5KlZ5LLzdpenUdpAYvZHo6-RhK3S7aNsYXKfAjb2ZBD1pIVUajFXT7Qn9uZ16Fvm7eLcOeLH4IM4rGXkYS6XT2dENylDJZW3BEOyGJYV6dKt44XPAEoX-Zn6DcXuhcbx_-kJQnUq4Cva/s1600-h/image%25255B6%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSuI5c2aT2SE_ZKF9rb3MKGmY8EM6nTANbZi-e7noD7-jgKJA2e6oOqb3AULrcbQZdMWiAUUwrxhpJ_YwfWmoMvDYxCeO77J-59-j21XECi1IPuztwT9BbwwDC8x_69e-o9o5X2t2Mvhtl/?imgmax=800&quot; width=&quot;608&quot; height=&quot;213&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;font style=&quot;font-weight: bold&quot;&gt;Predicting Buy/Sell for Gold&lt;/font&gt;&lt;/font&gt;&lt;/h3&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Code Example for GLM&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Problem Statement&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Given historical price data up to and including a given day, the idea to play around with the gold price (historical) with primary technical indicators can help &lt;b&gt;you fix of gold price the following day will increase or decrease relative to the current day’s price fix. &lt;/b&gt;The predictions are based primarily on technical indicators calculated from historical price data for gold as well as for a variety of financial variables. &lt;/font&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Feature Definition&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The price data alone provides limited insights into the future price movement. The idea here is to identify the right feature set that best captures the movement of the gold prices and provides information not about the past and current movements but should be in a position to predict the future movement with a reasonably good accuracy.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Technical Indicators&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Trendlines&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Trend does provide vital information hence the current trend is vital for the accuracy of the prediction of the future prices. Trends can provide information of the continued price movement and more importantly it can prove useful for trend reversal (uptrend or downtrend). However, the gold prices cannot depend on the trend alone attributing to the fluctuations which are driven by multiple other variables or factors, unearthing these can be differentiator for a good model. Trend can be one of the variable in addition to many others to get a high accuracy for the prediction model.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The simple linear regression with least squares cost function will help to fit the trend line over last n days. The equation of the same is as indicated below.&lt;/font&gt; &lt;/p&gt;&lt;pre&gt;y = -0.0394777790495269 * x + 1881.30223607803&lt;/pre&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;y is the gold price, x is rate of change here. &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The R implementation we have a user defined function written called slope&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Rate of Change&lt;/font&gt;&lt;/b&gt; 
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Momentum measures the difference between the price on day x and price n days before.&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;ROC is calculated as - ROCn(x) = P(x) – P(x-n)/ P(x-n) &lt;/font&gt;&lt;/b&gt;
&lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;ROC can indicate the trend if &amp;gt; 0 it’s an &lt;b&gt;uptrend &lt;/b&gt;&amp;lt; 0 it’s a &lt;b&gt;downtrend&lt;/b&gt;. ROC over a period gives a more definite in &lt;b&gt;witnessing a weak or a trend reversal.&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Calculating ROC in R &lt;/b&gt;we use the TTR package which gives reasonable good functions for ROC&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Ratios&lt;/font&gt;&lt;/b&gt; 
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Ratio between ROC calculated over different time intervals particularly &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;(ROCn/ ROCm where m &amp;lt; n) it lends insight on how the change in price is changing over time.&lt;/font&gt; 
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The R implementation we have a user defined function written called ratios.&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Stochastic Oscillator &lt;/font&gt;&lt;/b&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It is used to determine the overbought or oversold levels of a stock or commodity, Overbought means the means the price is increased significantly over a short period and may be artificially high, this means the underlying asset is overvalued and the market will soon adjust bringing the price back down.&amp;nbsp; For a better understanding on stochastic oscillator refer &lt;/font&gt;&lt;a href=&quot;http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:stochastic_oscillator_fast_slow_and_full&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt; 
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The stochastic oscillator assumes that in uptrends, prices will close near the upper end of the recent price range and downtrend will close near the lower end. Adapting this to use the daily price fix rather than close prices. &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Calculating the oscillator as follows on a day x over an n day period as follows.&lt;/font&gt; 
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;Ln = lowest price over past n days &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;Hn= highest price over past n days &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;P(x) = price on day x &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;%K = (P(x) – Ln)/ (Hn – Ln) x 100% &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;If %K is less than 20% generate a buy signal a&lt;/font&gt;&lt;font color=&quot;#4f81bd&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;Arial&quot;&gt;nd sell if greater than 80%.&lt;/font&gt; &lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The R implementation we have a user defined function written called Stochastic_Oscillator.&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Basic Feature Selection&lt;/font&gt;&lt;/b&gt; 
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The final list of feature we have is &lt;/font&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Slope&lt;/font&gt; 
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;ROC&lt;/font&gt; 
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Ratios of ROC&lt;/font&gt; 
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Oscillator&amp;nbsp; for period of 14 – We use oscillator&amp;nbsp; function to determine the Buy ,Sell and stored in BuySellFlag&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h5&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font style=&quot;font-weight: bold&quot; size=&quot;4&quot;&gt;Gaussian Regression&lt;/font&gt;&lt;/font&gt;&lt;/h5&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Using the set of features selected above, the first algorithm generalized liner model GLM in R can be found here. We pick the data from 2014 onwards,&amp;nbsp; The technical indicators alone may not be enough. But however for the example we are using the same. Considering Gaussian distribution is more or less normal distribution and more over we are predicting the Buy , Sell and Hold on gold based on the daily price and indicators input. We could not use logistic regression as we have more then 2 outcomes here.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00ff00&quot; size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;The Gaussian Regression on GLM gives an accuracy of 15.78% which is not acceptable.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;So further digging we decided to use Multinomial logistics regression, which is a linear &lt;b&gt;regression&lt;/b&gt; analysis to conduct when the dependent variable is nominal with more than two levels. Thus it is an extension of &lt;b&gt;logistic regression.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;The multinomial logistics regression gives an accuracy of 90.131% which is reasonably acceptable.&lt;/font&gt;&amp;nbsp; &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;In conclusion we can predict the gold buy , sell or hold signal daily at 90% accuracy ratio. &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;However this may not be enough in case one decides to take the accuracy up further we need to include more data&lt;/font&gt;&lt;/p&gt;
&lt;h5&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;font style=&quot;font-weight: bold&quot;&gt;Intermarket Variables&lt;/font&gt;&lt;/font&gt;&lt;/h5&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Gold prices, and commodity prices in general, may also be related to other financial variables. For instance, gold prices are commonly thought to be related to stock prices; interest rates; the value of the dollar; and other factors. Therefore, I wanted to explore whether these other variables could be effective inputs to the prediction of gold prices. I collected the following data over the same time period as the gold price fix data, from early 2007 to late 2013:&lt;/font&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;USStockIndices: Dow Jones Industrial Average (DJI); S&amp;amp;P 500 (GSPC); NASDAQ Composite (IXIC)&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;WorldStockIndices: Ibovespa (BVSP); CAC 40 (FCHI); FTSE 100 (FTSE); DAX (GDAXI); S&amp;amp;P/TSX Composite (GSPTSE); Hang Seng Index (HSI); KOSPI Composite (KS11); Euronext 100 (N100); Nikkei 225&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;(N225); Shanghai Composite (SSEC); SMI (SSMI)&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;COMEX Futures: Gold futures; Silver futures; Copper futures; Oil futures&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;FOREX Rates: EUR-USD (Euro); GBP-USD (British Pound); USD-JPY (Japanese yen); USD-CNY (Chinese yuan)&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Bond Rates: US 5-year bond yield; US 10-year bond yield; Eurobund futures&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; Dollar Index: Measures relative value of US dollar&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The variables which are high effective in prediction of Buy Sell of gold are (Correlation Coefficients)&lt;/font&gt;&lt;/p&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;196&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1. Gold Futures&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;44&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;0.72&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;196&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2. Silver Futures&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;44&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;0.50&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;196&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;3. Copper Futures&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;44&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;0.27&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;196&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;4. EUR-USD&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;44&quot;&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;0.24&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;One can add these features to the dataset the accuracy will improve further. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Deploying this code to a fully function Gold Buy/Sell prediction&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;FYI this is full functional code , one can deploy this code on R Server write the integration code / bot which can get the real-time data of gold and call the predicted output from the model to get the buy/ sell/ hold signal. Preferable deploy to azure bot service and use azure ml to host algorithm.&lt;/font&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/4445411390514230529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/4445411390514230529?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4445411390514230529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4445411390514230529'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2016/12/machine-learning-basicsregressionpart-ii.html' title='Machine Learning Basics–Regression…Part II'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4Y2d6HGwXbzqbZd-77-8e2ZI5U90U4PMMfLV-RyAQS3NklkOVQ6YKEk8F03NcTt9jCFSfsBRNi60O3W5TNM4IejjvaAJnOnMzwhv354OAr0mzDfCayq4Sn4Fd5zGRJ3eOQYs1q0SBOmA/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-2756196870445373204</id><published>2016-12-07T06:54:00.000-08:00</published><updated>2016-12-08T02:51:47.598-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning Basics"/><category scheme="http://www.blogger.com/atom/ns#" term="Regression"/><title type='text'>Machine Learning Basics–Regression Analysis–Part 1</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Data is all around us, its happening, At the simplest form data is a set of variables (of course with values). While working on a database on any domain , once we have a relatively&amp;nbsp; okay understanding of the entities and we start to look for relationships within the entity or the variable. We do stumble upon and have a gut feeling which tells a variable y is dependent on a variable x OR a set of variables (x1,,x2…xn).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;To a certain degree we can predict the new value of y based on x. We see there is a clear relationship between y and x.&amp;nbsp; The process of estimating relationships among variables is termed as Regression Analysis.&amp;nbsp; Here the focus is between&amp;nbsp; a dependent variable and one of more independent variables ( called the predictors).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;There are various types of Regression Analysis example Linear, Logistic, Polynomial….&amp;nbsp; each of them are used for a specific purpose.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Regression Analysis requires a prior knowledge on the dataset and in order to estimate the forecasted value of the dependent variable. There is a need of having a dataset with defined outcomes of the dependent variable which will be used to train the algorithm.&amp;nbsp; Regression set of algorithm are a part of supervised learning.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Different Type of Regression&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Linear Regression&lt;/strong&gt; – The relationship between the dependent and independent variables is such that the nature of the regression&amp;nbsp; line is linear. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Linear Regression establishes a relationship between &lt;strong&gt;dependent variable (Y)&lt;/strong&gt; and one or more &lt;strong&gt;independent variables (X)&lt;/strong&gt; using a &lt;strong&gt;best fit straight line&lt;/strong&gt; (also known as regression line).&lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The&amp;nbsp; best fit straight line is generally achieved with Least Square Method. It is most commonly used for fitting a regression line. It calculates the best fit line for the observed data by minimizing the sum of squares&amp;nbsp; of the vertical deviations from each data points to the line. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Example on Linear Regressions.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;As an example for Linear Regression we are taking the &lt;/font&gt;&lt;/p&gt; &lt;h3&gt;Gold and Silver Price Correlation&lt;/h3&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The basic plot of the same can be seen below. The data and code for the same can be found &lt;a href=&quot;https://github.com/ajayso/ML-Regression-Analysis&quot;&gt;here&lt;/a&gt;. The data consists of last 1 year data, If one needs the complete data for last 10 years you can download the same from many of the free data sources or refer to &lt;a title=&quot;http://www.macrotrends.net/2517/gold-prices-vs-silver-prices-historical-chart&quot; href=&quot;http://www.macrotrends.net/2517/gold-prices-vs-silver-prices-historical-chart&quot;&gt;http://www.macrotrends.net/2517/gold-prices-vs-silver-prices-historical-chart&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Dhyg3IouQ3kim6g76u0QVXWfSH0A7rUE0eREubeqZEy8QJZ02dvWAufDpzu8-6AiTz4klCrpEqaWgOEhcKAfznZxU7lRjDACDVGusX-e_fRN18obabUDGa9MoEQat5oo_Dh8VzkWelVw/s1600-h/image%25255B15%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-dZ5uKWNItC4ydvP6cjPCKpeJwQhJaBGIg-nzXoeMVmVSh7OAJtRjSqWTvL19v4jK5j4KwOjR30d3YOxKi12hfwWSs_7CC5vbvi4c4gncfrpEQMmi9HkkbP1MX0gbXkFqeqKtwbGggVu/?imgmax=800&quot; width=&quot;579&quot; height=&quot;416&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;For trying out linear regression the code is pretty straightforward &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; face=&quot;Calibri&quot;&gt;install.packages(&quot;Quandl&quot;)&lt;br&gt;library(Quandl)&lt;br&gt;install.packages(&quot;devtools&quot;)&lt;br&gt;library(devtools)&lt;br&gt;install_github(&quot;quandl/quandl-r&quot;)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot; face=&quot;Calibri&quot;&gt;goldprices =&amp;nbsp; Quandl(&quot;LBMA/GOLD&quot;)&lt;br&gt;silverprices = Quandl(&quot;LBMA/SILVER&quot;)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; face=&quot;Calibri&quot;&gt;goldpricesshortterm = goldprices[1:730,]&lt;br&gt;silverpricesshortterm = silverprices[1:730,]&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; face=&quot;Calibri&quot;&gt;shtsilver = data.frame(silverpricesshortterm,goldpricesshortterm)&lt;br&gt;sfit = lm(shtsilver$USD..AM.~shtsilver$USD)&lt;br&gt;summary(sfit)&lt;/font&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Used Quandl for gold and silver price data.&amp;nbsp; Have applied Linear Regression Model to last 2 years of data.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;Interpreting the results of lm&lt;/font&gt;&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkza-9EHqy3vOJIiLxDAuvuPMo2bEgsLHmRFZ1AnGEksQWLsA4_mkZXmUOxGWeogRg4ERqsh0bvu7wZe8gM-sDaSRM3vBYKOenXZY3MT9GhXYY72Q5sq5gn_xpPUUXZQTodzmj2auEJwO9/s1600-h/image%25255B20%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhjXyDu60-9pjvZRvoGbEKBDkdsq7RdY6KPArqhJzn8BKFK9IAl_ku_dmi9npJm47kVP3j3iCtj818DJN803RgbO64K2fx0EQiqnrV2Fnt1bkqBZJknPX9hGIOW0CUXsZIwO66DMTlaE7Q/?imgmax=800&quot; width=&quot;646&quot; height=&quot;370&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The summary of the lm result what we look for &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1. Residuals are essentially the difference between the actual observed response , We look for a symmetrical distribution across these points on the mean value zero (0). In this case we see a symmetrical distribution &lt;/font&gt;&lt;/p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2. The t-statistic values are relatively far away from zero and are large relative to the standard error, which could indicate a relationship exists. In general, t-values are also used to compute p-values&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;3.In our example, the RSquared we get is 0.8028. Or roughly 80% of the variance found in the response variable (gold prices) can be explained by the predictor variable (silver price)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/2756196870445373204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/2756196870445373204?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2756196870445373204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2756196870445373204'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2016/12/machine-learning-basicsregression.html' title='Machine Learning Basics–Regression Analysis–Part 1'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-dZ5uKWNItC4ydvP6cjPCKpeJwQhJaBGIg-nzXoeMVmVSh7OAJtRjSqWTvL19v4jK5j4KwOjR30d3YOxKi12hfwWSs_7CC5vbvi4c4gncfrpEQMmi9HkkbP1MX0gbXkFqeqKtwbGggVu/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1544551408218718687</id><published>2014-07-18T10:50:00.001-07:00</published><updated>2014-08-09T15:44:16.888-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Big Data Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><title type='text'>Azure Machine Learning–K Means Clustering…</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3-_2CrVkHz7VFt4YsrD1XegRFL_oqvbWGinAwITTSn2PN887Ar6krYD6ty5F8nVK4xavh1Oc3QqrICVLe_YqdVTXQyrIXGHSltSZP09h8nN4T3Sc6QrCleomoAGu8FWgd0ZZEuj-TuF1n/s1600-h/image7%25255B1%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT8LqW8_kGbp53bKjte2qFslUQ1KQAsnfqDAxS6pM_nVVxK2zRQqolhthlcg6Y9tB4ZO_8POxftcpBpBUdtS4_rElY0iI3qrFyn34woNgWdRSt2EOk0PnzQKXEFE8NlFiIjVf8tqIYzcwa/?imgmax=800&quot; width=&quot;203&quot; height=&quot;53&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUZ2Nnt8KlNNb6q8LcMVSt6keh9-8cKsQbqLqLPMjJCWur4REAE4yikSV-M1fD1Ru5HQrOou7vRSh2MA7JymqEGzHupEZBpXjRpcRx3RqAFydzGytMpOwZzLoNAoQI_mn4XEzneuDrewmq/s1600-h/image10%25255B1%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJp62_mR1ikKLpMVklGgSltCNz1W3F1M3TsouwMnRPaahtuFlSeLUKUTBnc29nf9cbgmQjUX_XQ8oMH8m8I0WUVHhYf0O-2Oo3CZQT71hRDMEGyNdtGJ5riGy6INEQz2vx0T0Zsdq47Fz/?imgmax=800&quot; width=&quot;636&quot; height=&quot;60&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Machine Learning (ML) has been around almost over 5 decades now. In the last couple of years with the cloud computing and big data been the dominant colours in the IT Industry, ML has found a unique space in the Big Data problem.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;A Brief on Azure ML&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Azure ML is Machine Learning is simpler Microsoft offering from quick and easy ML advent. Its definitely a good starting point to get to use to the Machine Learning. As one may start using this more often will realize the Azure ML is limiting in terms of choices of Algorithms , data manipulation operations &amp;amp; ability to run as part to run with bigger scheme of things.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Most folks will start with Azure ML and figure out that there are multiple places where the constructs are limiting, so as a good citizen MSFT went and added the ExecuteR where one could program on R Studio for test and development, eventually for larger dataset, code port or intelligent copy to ExecuteR. A good video on how to use ExecuteR in Azure ML can be found here &lt;a title=&quot;http://channel9.msdn.com/Blogs/Windows-Azure/R-in-Azure-ML-Studio&quot; href=&quot;http://channel9.msdn.com/Blogs/Windows-Azure/R-in-Azure-ML-Studio&quot;&gt;http://channel9.msdn.com/Blogs/Windows-Azure/R-in-Azure-ML-Studio&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;K-Means Clustering in Azure ML Video&lt;/strong&gt;-&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The data analysis starts of with initial task of having to classify data.&amp;nbsp; There are various algorithm which one may employ to classify data. The single most simplest and widely used algorithm is the K-Means Clustering. This session talks about K-Means Clustering and how to do the same using Azure ML. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The session take away from Azure ML is great not without R.&lt;/font&gt;&lt;/p&gt; &lt;div id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:1c2b55b2-7261-446e-8875-50834f7e106d&quot; class=&quot;wlWriterEditableSmartContent&quot; style=&quot;float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px&quot;&gt;&lt;div&gt;&lt;object width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/1v4-Clw7EA0?hl=en&amp;amp;hd=1&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/1v4-Clw7EA0?hl=en&amp;amp;hd=1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Microsoft Sans Serif&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Files&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Presentation Shared Here-&lt;/strong&gt;&lt;/font&gt;&lt;a title=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZEcEprM2F0aW9FOVU/edit?usp=sharing&quot; href=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZEcEprM2F0aW9FOVU/edit?usp=sharing&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;https://drive.google.com/file/d/0B5lmX16jC3ZEcEprM2F0aW9FOVU/edit?usp=sharing&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;DataSets &amp;amp; Demo Here&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;RScripts - &lt;/font&gt;&lt;a title=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZES1c5MEdiamFCN0E/edit?usp=sharing&quot; href=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZES1c5MEdiamFCN0E/edit?usp=sharing&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;https://drive.google.com/file/d/0B5lmX16jC3ZES1c5MEdiamFCN0E/edit?usp=sharing&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;DataSets- &lt;/font&gt;&lt;a title=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZEY2R0T3R3WDU3NzQ/edit?usp=sharing&quot; href=&quot;https://drive.google.com/file/d/0B5lmX16jC3ZEY2R0T3R3WDU3NzQ/edit?usp=sharing&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;https://drive.google.com/file/d/0B5lmX16jC3ZEY2R0T3R3WDU3NzQ/edit?usp=sharing&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Microsoft Sans Serif&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1544551408218718687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1544551408218718687?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1544551408218718687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1544551408218718687'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2014/07/azure-machine-learningk-means-clustering.html' title='Azure Machine Learning–K Means Clustering…'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT8LqW8_kGbp53bKjte2qFslUQ1KQAsnfqDAxS6pM_nVVxK2zRQqolhthlcg6Y9tB4ZO_8POxftcpBpBUdtS4_rElY0iI3qrFyn34woNgWdRSt2EOk0PnzQKXEFE8NlFiIjVf8tqIYzcwa/s72-c?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1508964781793021719</id><published>2014-05-13T22:42:00.001-07:00</published><updated>2014-05-14T00:32:37.540-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API Management"/><category scheme="http://www.blogger.com/atom/ns#" term="API Platforms"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Architecture"/><title type='text'>Azure API Management</title><content type='html'>&lt;div style=&quot;text-align: left&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;br&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOjSYnlT9iVZcCwFMFgWWGvnC8iFUPhFDL2FU-1gUCAxoVyApgMRsFymmx9CfFJvlH182xgSzuLUYWAuu5dc8HH-jhsXrVIpZL8Vg1smPPBLm4eTQ2FINa0dpwVd6u00VJnbEBSc93H09R/s1600-h/image%25255B6%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: left; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBRtXrdj-pVA12PxSn60r4ZjQrTdCHBdief24trTrVsfF8Bl3e2PZB14D_gAPVnvuyhSCjAZ3pxpWilE1p9-VfWszjf9OrE47xbn_NJykoH0ehL9I7iIt-TWe2vawF9XkX-TFeBQ2HBm2/?imgmax=800&quot; width=&quot;196&quot; align=&quot;left&quot; height=&quot;74&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;The &lt;a href=&quot;http://techcrunch.com/2013/10/23/microsoft-acquires-apiphany-an-api-management-service-to-integrate-with-windows-azure/&quot;&gt;Apiphany&lt;/a&gt; buy out of Microsoft sometime around Mid Oct 2013 is made it into the Azure Stack as API Management in a very short while. &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;Here is complete&amp;nbsp; You Tube - video on Azure API Management.&lt;/span&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/jNXXRGL3gqM?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;API is no more an after thought for most architectures, its right there in front staring right into architects face. API Facade can make or break any architectures from improving integration, developer productivity to high business returns. There are many platforms in the market for API’s.&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;Azure API Management is direct port of APIPhany into Azure. In this post we will explore the Azure API Management and towards the end a comparison with the leading API platforms. &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;The Azure API has managed to pull through a lot of features into Azure in very short period of time&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;API Management Administrators Portal&lt;/strong&gt;&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;The starting point for any API Management platform is a good enough Administrator Portal.&amp;nbsp; The Administrator Portal is essentially the place where one can manage the API.&amp;nbsp; Below is the snapshot of the same.&lt;/span&gt;&lt;br&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhctFdcDD_eiyA-Xd47FvIOv-IgXr3WdcbNOk6I0ctNU871_C9X0OFoi_pzQXmglwcDqD8v9g7dD_H2Jm8wHXB-7srBhItAahTdkXD9OsafiLLkYXdeOUXi6u1FIQeGJuDrH_7mOilwPyhd/s1600-h/image%25255B9%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieAHaDTPv56me6FNCaQrLtW_Tt_OyAZ9hAJHtGMYy4a1ZbYzQJ5raycKBF03C_hC0a5xSDYCmuzcvpXkpHPXbi1R7pJqugMTveccHkzCyHY25uIgY4otIqd3E_65Xs6oh4-KNmON71wBef/?imgmax=800&quot; width=&quot;244&quot; height=&quot;134&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;The Administrator Portal for API Management covers the following&amp;nbsp; at a high level.&lt;/span&gt;&lt;br&gt; &lt;ul&gt; &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Dashboard&lt;/strong&gt; – Quick Snapshot view of the all the API’s and there health graphs, products, applications &lt;/span&gt; &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;API&lt;/strong&gt; –&amp;nbsp; Managing API’s there associated operations, settings etc..&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Products&lt;/strong&gt;- This essentially is a container of API’s and the access management around the same.&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Policies&lt;/strong&gt; – This is a key feature for API’s.&amp;nbsp; The consumer’s of API are initially developers and in production its going to be the applications. There many generic constructs which are required by the API for example&lt;/span&gt;  &lt;ul&gt; &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Quota Management&lt;/strong&gt;: Number of times a consumer can call the API’s &lt;/span&gt; &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Format Changes:&lt;/strong&gt; One may need to change parameter/output value before invoking/return value from the actual API or probably change the format ex json,xml&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;Allow &lt;strong&gt;cross domain calls&lt;/strong&gt;&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;CORS&lt;/strong&gt;&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Data Changes&lt;/strong&gt; – Replace certain values inbound/outbound.&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Restrict caller IP’s&lt;/strong&gt;&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Store to Cache&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;There are additional constructs which can be applied.&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-size: small; font-family: calibri; color: #4f81bd&quot;&gt;Note: Most good API platforms have ability to add workflow constructs to inbound and outbound flow of the API’s. For every call made to the api , one would want to call other services based on the data. As of current there are no workflow constructs in Azure API , one can expect the same.&lt;/span&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;&amp;nbsp;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Analytics&lt;/strong&gt;:&amp;nbsp; The core objective for any API platform is the health management of the API, Analytics includes the health management information, graphs etc..&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOPLYDXtsaTJSw-78f0vAmYwpjzarQizyjkIIj3qs3-HSfckqsYiD1zhl1sc44P1kU0a_MSRB19oY6SQ2s0aka9QpJqqwwxrUU5cmgDNsg-koZd1bkdVQqYJXY_QY5J31PTzKwvXBq3HIm/s1600-h/image%25255B13%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiZcf8CW8fx3o33j2KRloMJZlj18Mo6lrn-N5_YJlUDb5Kz110m-j5YlMmkaIQwkPULIwG936IknHwzzInBP4wRqMHNDwBCE45xVJwKekW0uzyDg_MdMMf057893Uc1MS-54ThDUvjXaJg/?imgmax=800&quot; width=&quot;430&quot; height=&quot;260&quot;&gt;&lt;/a&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Developers&lt;/strong&gt;: Considering a decent population of the API consumers are going to be developers, the management around the same is important. This is fairly basic as of current.&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;: Support for 3rd party identity for developer sign –up.&lt;/span&gt;  &lt;li&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;&lt;strong&gt;Developer Portal: &lt;/strong&gt;This is content management piece of the API portal which includes the API’s, documentation around the same, the products and issue reporting. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-size: small; font-family: calibri&quot;&gt;In a nut shell the Azure API Management is much awaited piece in the Azure stack and off to a flying start.&lt;/span&gt;&lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1508964781793021719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1508964781793021719?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1508964781793021719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1508964781793021719'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2014/05/azure-api-management.html' title='Azure API Management'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBRtXrdj-pVA12PxSn60r4ZjQrTdCHBdief24trTrVsfF8Bl3e2PZB14D_gAPVnvuyhSCjAZ3pxpWilE1p9-VfWszjf9OrE47xbn_NJykoH0ehL9I7iIt-TWe2vawF9XkX-TFeBQ2HBm2/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-195389306624618145</id><published>2014-04-17T23:14:00.000-07:00</published><updated>2014-04-18T05:22:25.045-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Applications"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Data Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Security"/><category scheme="http://www.blogger.com/atom/ns#" term="NSA"/><category scheme="http://www.blogger.com/atom/ns#" term="RMS"/><title type='text'>Azure RMS (Rights Management Service)</title><content type='html'>&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;With growing need data protection and compliance, &lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Data security is always a key concern for any organization. Documents carry sensitive data. The data availability on multiple devices is critical to the business, and equally important is securing this data. Data at rest and transit both need to secure.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Almost a decade ago MSFT released it Rights Management Service for Windows 2003, later came AD RMS with 2008, 2012. In the past 1 year we have seen Azure take up the brigade of RMS , assuming there is Azure Active Directory.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;With buzz around HIPAA compliance and Azure, still no clear directive on whether Azure is fully compliant &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What most customers want is to implement a robust security solution to protect the organization’s data available in file servers, desktops via rights protecting the data, and make this data available via secure access. The data security and data-access control will help in enabling sharing of sensitive data in a secure and HIPAA compliant manner, and ensure confidentiality, integrity and authorized access to its data. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Microsoft Azure cloud service based Rights Management (RMS is the answer. This solution concept uses Azure Rights Management Service (RMS) as the basic building block for securing data and documents / files. The devices used for data access may or may not be connected to the organization network. (Devices are assumed to be organization locked and HIPAA compliant). &lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipCZsvdHAt1cfJhBlou71A6wp40Eu-qxFhxc3Z3ddcVykPkVgRH0IY87NwqfKRpoDxI6qwDVr9Hbo9R0MNsKWYjvZ9d7HOd4U8-AH3eb1erlp6GYO3qfmfAJTLYPU2xP1ahSu33j304mHC/s1600-h/image%25255B8%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfSR3gSWIAiQRjKMJNoLz3HQueXVq4LVPvFxOwYktstmMUqVoWvGYNpMYE20ChXhhJo4ZLMzMD7OfpGxAXGf4Lsn3TgC9gjDOjqr4j15Iqf5sM8gGNUPtcRdaKZjLFItfFFaJTC2yVYpg/?imgmax=800&quot; width=&quot;599&quot; height=&quot;498&quot;&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Azure RMS will serve as a basic building block for encryption / decryption of documents / files with-in the client’s organization. Windows Server 2012 File Classification Infrastructure (FCI) will assist in automating the process of applying rights to documents. Most of the files to be accessed within the organization will be stored on the Windows File Server which has File Classification Infrastructure Service installed. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Azure RMS protection comes with 3 basic type content protection&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Native RMS Microsoft formats– Office files&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Non MSFT formats- Native PDF, Image files (bmp, jpeg…) txt. These will work only with P-Viewer tool for consumption and FoxIT for PDF.&amp;nbsp; &lt;strong&gt;One can write additional plugins if required.&lt;/strong&gt;&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Container level protections-&amp;nbsp; P-file container which imposed encryption/ decryption at a container level. &lt;strong&gt;The important point to note is once the files is out the container its unencrypted and has no rights management and is not secured. Container can have any files types.&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Windows Server File classification Infrastructure (FCI) feature will identify sensitive files and encrypt them with RMS. FCI crawls file shares for files meeting certain criteria and tag them based on the results. Tags will be stored in the file attributes and persist even after moving files to another NTFS storage. Once files are tagged, they will be automatically applicable for &quot;RMS Encryption&quot; based on certain tags with RMS templates.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The RMS templates will be defined are organization-wide. With FCI one can perform different actions on files you identify as sensitive. One of them is to use the in-box RMS protection capability and there can be custom tasks for supporting other types of files trough two options:&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;· Putting files in encrypted container using Rights Protected Folder Explorer (RPFe)&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;· Triggering specific RMS protectors for certain types of files, such as PDF, CAD or images, supported with partner solutions&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;RPEe as a better option for protecting other file types. File Classification Infrastructure (FCI) provides insight into the data by automating classification processes. Rights Protected Folder Explorer (RPFe) is a Windows based application that allows you to protect files and folders. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;A Rights Protected Folder is similar to a file folder in that it contains files and folders. However, a Rights Protected Folder controls access to the files that it contains, no matter where the Rights Protected Folder is located. By using Rights Protected Folder Explorer, one can securely store or send files to authorized users and control which users will be able to access those files while they are in the Rights Protected Folder.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Have implemented Azure RMS for more than 2 customers. So far so good&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/195389306624618145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/195389306624618145?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/195389306624618145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/195389306624618145'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2014/04/azure-rms-rights-management-service.html' title='Azure RMS (Rights Management Service)'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfSR3gSWIAiQRjKMJNoLz3HQueXVq4LVPvFxOwYktstmMUqVoWvGYNpMYE20ChXhhJo4ZLMzMD7OfpGxAXGf4Lsn3TgC9gjDOjqr4j15Iqf5sM8gGNUPtcRdaKZjLFItfFFaJTC2yVYpg/s72-c?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-3678962805544538708</id><published>2014-04-03T02:06:00.001-07:00</published><updated>2014-04-03T02:09:46.327-07:00</updated><title type='text'>Global Azure boot camp Mumbai 29th March 2014</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkFyugmDXObClL4aRGVO1ob3iatNaFanMuouPH3-eDUfuyWv3jjbZeOeeVTtUiMnMywB56Kmjr8NWmfr3_JQB66ccnKCBuOxnXdDZmGnzf25v-q81w0SK_gRm-ZAhrA7XErX9hFP_pqi1i/s1600-h/GWAB.jpg&quot;&gt;&lt;img title=&quot;GWAB&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;GWAB&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVYM9ynPZDu-uYuX9W23DbIhTlP2KuyPMF-6C4EoV3zelLEhPGx6a4jfkRVoz_T7k68h8IqHBtcEtvgz8vz3AC6rbQ8ymCTYz7hGc7E786sV6Rmb0luftnF8QDMGI-1_bW6XNGd0j2_uUD/?imgmax=800&quot; width=&quot;547&quot; height=&quot;370&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Speaking at Global Azure Boot Camp 29/3 @ Mumbai has been quite a delight. Giving back to community plays a vital role in fuelling growth.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Covered topics around Cloud Computing&amp;nbsp; The Next Paradigm , Big Data &amp;amp; Large-scale Implementation on Azure. Find the presentation on the links below.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Cloud computing, Windows Azure has gained a general acceptance among the Microsoft and non-Microsoft participants. The drive around Open Source is seemingly building up around Azure.&amp;nbsp; The delighter to the sessions were the eagerness to know more about Big Data or HDInsight. Hadoop continues to be a bit of crystal ball gazing for most participant, a promising one. The twinkle in eyes of most to know more around the stack can/will be done in the coming session.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Most business user and software folks get asked the questions around the biggest implementation on Azure Platform. This is more of indicator to endorse there thought process.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Would like to make a special mention of Ajay Khankojhe from Synergetics the event was conducted wonderfully.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Presentations&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1. &lt;a href=&quot;http://1drv.ms/1k27MGn&quot;&gt;Large-scale Implementation on Windows Azure&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2. &lt;a href=&quot;http://1drv.ms/1dPt3kg&quot;&gt;Cloud Computing – The Next Paradigm&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;3. &lt;a href=&quot;http://1drv.ms/1k27pvz&quot;&gt;Big Data Basics&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/3678962805544538708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/3678962805544538708?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3678962805544538708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3678962805544538708'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2014/04/global-azure-boot-camp-mumbai-29th.html' title='Global Azure boot camp Mumbai 29th March 2014'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVYM9ynPZDu-uYuX9W23DbIhTlP2KuyPMF-6C4EoV3zelLEhPGx6a4jfkRVoz_T7k68h8IqHBtcEtvgz8vz3AC6rbQ8ymCTYz7hGc7E786sV6Rmb0luftnF8QDMGI-1_bW6XNGd0j2_uUD/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1316675624124255360</id><published>2013-11-06T03:50:00.000-08:00</published><updated>2013-11-06T04:06:03.012-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Basics"/><category scheme="http://www.blogger.com/atom/ns#" term="Large Azure Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Service Bus"/><title type='text'>Azure SDK 2.2 Features &amp;amp; Migration</title><content type='html'>&lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Brief Synopsis&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;The SDK 2.2 is not major upgrade it has brought more features around &lt;u&gt;remote debugging in cloud&lt;/u&gt; which was a big ask till now &amp;amp; Windows Azure Management Libraries from a Developer per say. The Windows Azure Service Bus partition queue and topics multiple message broker will &lt;b&gt;&lt;u&gt;help in better availability,&lt;/u&gt;&lt;/b&gt; &lt;i&gt;as &lt;/i&gt;&lt;i&gt;each queue or topic is assigned to one message broker&lt;/i&gt; which is &lt;b&gt;&lt;u&gt;single point of failure&lt;/u&gt;&lt;/b&gt;, now with the new feature of multiple message broker assigned to a queue or topic. Please read the Q&amp;amp;A at the end to know the nuances with the same &amp;amp; &lt;b&gt;&lt;u&gt;the approach to move to Azure SDK 2.2 from generic project stand point of view&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;High Level following are the new features&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Visual Studio 2013 Support&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Integrated Windows Azure Sign-In support within Visual Studio&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Remote Debugging Cloud Services with Visual Studio – Very Relevant to&amp;nbsp; Developers&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Firewall Management support within Visual Studio for SQL Databases&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Visual Studio 2013 RTM VM Images for MSDN Subscribers&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Azure Management Libraries for .NET – Very Relevant to&amp;nbsp; Deployment Team&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Updated Windows Azure PowerShell Cmdlets and ScriptCenter&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Topology Blast – Relevant to Deployment Team&lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Windows Azure Service Bus – partition queues and topics across multiple message brokers – Relevant to&amp;nbsp; Developers. &lt;u&gt;All Service Bus based projects have to move ASAP.&lt;/u&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below covered are only the highlighted areas.&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;&lt;u&gt;Remote Debugging Cloud Resources within Visual Studio&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Today’s Windows Azure SDK 2.2 release adds support for remote debugging many types of Windows Azure resources. With live, remote debugging support from within Visual Studio, you are now able to have more visibility than ever before into how your code is operating live in Windows Azure.&amp;nbsp; Let’s walkthrough how to enable remote debugging for a Cloud Service:&lt;/font&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Remote Debugging of Cloud Services&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Note: To debug the web or worker role should be on Azure SDK 2.2&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;To enable remote debugging for your cloud service, select &lt;b&gt;Debug&lt;/b&gt; as the Build Configuration on the &lt;b&gt;Common Settings&lt;/b&gt; tab of your Cloud Service’s publish dialog wizard:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_21B43AFC.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image001&quot; border=&quot;0&quot; alt=&quot;clip_image001&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY2cM1KmIpsG1Dh8E9v3ua-Tfb2njXzzqAN_Pu3scJiFLAWrlwAsdKN_C1AhEyL5LJTnaR5VENc4iPIIIPVFpXnVYgLdOWdfPK1JRTSyEzVk39g-6eZJ9MdmvEJqpXzwvCCHIikp3VWsfS/?imgmax=800&quot; width=&quot;244&quot; height=&quot;167&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Then click the &lt;b&gt;Advanced Settings&lt;/b&gt; tab and check the &lt;b&gt;Enable Remote Debugging for all roles&lt;/b&gt; checkbox:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1A2B5C40.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image002&quot; border=&quot;0&quot; alt=&quot;clip_image002&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5pDWvY293cwA5g3fIeekSlHRyHzuJDZdON_EMAWB4yLQW8_TNekESYRdOCKUscN69PJWcPoeUwMbJG7jJxX8117woyQGTaAejPT8LTDO58D3mB6o9MGnoLOd4KBAYDi11d6oPsY-MD6wy/?imgmax=800&quot; width=&quot;244&quot; height=&quot;167&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Once your cloud service is published and running live in the cloud, simply set a breakpoint in your local source code:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_397093C4.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image003&quot; border=&quot;0&quot; alt=&quot;clip_image003&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFFl2P7HUuLs37DXGTcowElwcGgf5mKGQo2X8yRtX9huM6npasqgOy45TzlY0wUun98JTvotM39LmKpDJ9fOFNbZmQmKfRkGsmihyfp9dA1A805DYgEbpdq8AXWV8KJzHE0O7sMD3L35aA/?imgmax=800&quot; width=&quot;244&quot; height=&quot;93&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Then use Visual Studio’s Server Explorer to select the Cloud Service instance deployed in the cloud, and then use the &lt;b&gt;Attach Debugger&lt;/b&gt; context menu on the role or to a specific VM instance of it:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1238DB40.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image004&quot; border=&quot;0&quot; alt=&quot;clip_image004&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVLIVcDFHXJZXRqfAnpL9I_PyRKwVajBeI-Wkx4yplDnHikfwffy7rv57suAxFHqj8xP33XBX1YBhEZx_ElNhcbsHAVH51ksAVI2Er_MOhjIlV_XdkVgF8LLLJNJ9uQoJ-FGLWCJmCu368/?imgmax=800&quot; width=&quot;244&quot; height=&quot;216&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Once the debugger attaches to the Cloud Service, and a breakpoint is hit, you’ll be able to use the rich debugging capabilities of Visual Studio to debug the cloud instance remotely, in real-time, and see exactly how your app is running in the cloud.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_6F0B708D.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image005&quot; border=&quot;0&quot; alt=&quot;clip_image005&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKSB31jVTU2N6A1XkVQ4miTy64g5wG-yk56D643Tpz_NOIUEnAIhlhLPZRHocuXAH4UKZ3UALoFEhgypImxEIsWp7kY83aKuuZ_9KboPcmcczuUyIcyP3BYVhq_FySWux6u50WW-1DdsTL/?imgmax=800&quot; width=&quot;244&quot; height=&quot;136&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Today’s remote debugging support is super powerful, and makes it much easier to develop and test applications for the cloud.&amp;nbsp; Support for remote debugging Cloud Services is available as of today, and we’ll also enable support for remote debugging Web Sites shortly.&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;&lt;u&gt;Windows Azure Management Libraries for .NET (Preview)- Automating PowerShell&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Azure Management Libraries are in Preview!&lt;/font&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What do Azure Management Libraries provide, the control of creation, deployment and tear down resources which previously has been at a PowerShell level now will be available in the code.&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Having the ability to automate the creation, deployment, and tear down of resources is a key requirement for applications running in the cloud.&amp;nbsp; It also helps immensely when running dev/test scenarios and coded UI tests against pre-production environments.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;These new libraries make it easy to automate tasks using any .NET language (e.g. C#, VB, F#, etc).&amp;nbsp; Previously this automation capability was only available through the Windows Azure PowerShell Cmdlets or to developers who were willing to write their own wrappers for the Windows Azure Service Management REST API.&lt;/font&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Modern .NET Developer Experience&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We’ve worked to design easy-to-understand .NET APIs that still map well to the underlying REST endpoints, making sure to use and expose the modern .NET functionality that developers expect today:&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Portable Class Library (PCL) support targeting applications built for any .NET Platform (no platform restriction)&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Shipped as a set of focused NuGet packages with minimal dependencies to simplify versioning&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Support async/await task based asynchrony (with easy sync overloads)&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Shared infrastructure for common error handling, tracing, configuration, HTTP pipeline manipulation, etc.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Factored for easy testability and mocking&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Built on top of popular libraries like HttpClient and Json.NET&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below is a list of a few of the management client classes that are shipping with today’s initial preview release:&lt;/font&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;.NET Class Name&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Supports Operations for these Assets (and potentially more)&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;ManagementClient&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Locations &lt;br&gt;Credentials &lt;br&gt;Subscriptions &lt;br&gt;Certificates&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;ComputeManagementClient&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Hosted Services&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Deployments&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Virtual Machines&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Virtual Machine Images &amp;amp; Disks&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;StorageManagementClient&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storage Accounts&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;WebSiteManagementClient&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Web Sites&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Web Site Publish Profiles&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Usage Metrics&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Repositories&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;234&quot;&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;VirtualNetworkManagementClient&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Networks&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Gateways&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/u&gt; &lt;p&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Automating Creating a Virtual Machine using .NET&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Let’s walkthrough an example of how we can use the new Windows Azure Management Libraries for .NET to fully automate creating a Virtual Machine. I’m deliberately showing a scenario with a lot of custom options configured – including VHD image gallery enumeration, attaching data drives, network endpoints + firewall rules setup - to show off the full power and richness of what the new library provides.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We’ll begin with some code that demonstrates how to enumerate through the built-in Windows images within the standard Windows Azure VM Gallery.&amp;nbsp; We’ll search for the first VM image that has the word “Windows” in it and use that as our base image to build the VM from.&amp;nbsp; We’ll then create a cloud service container in the West US region to host it within:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_17D1189B.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image006&quot; border=&quot;0&quot; alt=&quot;clip_image006&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXSp3an6dgXb6I2VpbLPkJm0KWX3QstP9WoNaGNAwFujW1_HCkiXK9XW1JGulSCp3VaESc-9uVdq0RXT_Fw9_1-jtQdPlbr98kYpuiYnmvdBopxBdbnbNZ-e9jxS1UDNLbByd3zUX09-iI/?imgmax=800&quot; width=&quot;244&quot; height=&quot;176&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We can then customize some options on it such as setting up a computer name, admin username/password, and hostname.&amp;nbsp; We’ll also open up a remote desktop (RDP) endpoint through its security firewall:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_44E8961A.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image007&quot; border=&quot;0&quot; alt=&quot;clip_image007&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuADUH3l-YNNlO3Xm3uxsHXbsWvWykY4J-HeselSb_aJzKVEHQxfX0E7BOG_YuhKtPF8Xwyzsg_KQVyl25rDj6zfYE5XgfVGB1nshS6-Iu_LRvnz8mmTm_AnjcaF7fgFMr1vndPK70fxFi/?imgmax=800&quot; width=&quot;244&quot; height=&quot;182&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We’ll then specify the VHD host and data drives that we want to mount on the Virtual Machine, and specify the size of the VM we want to run it in:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_4B31FD59.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image008&quot; border=&quot;0&quot; alt=&quot;clip_image008&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgobMZ6IG2WS_Qx8EDcyo7pqISSVfXyzVoTlzT2EA69c33UH8GkCkSL3D3LqTbzKz9-WZXrLqkkfYBWCUtBWQOecV8zVT7rW-JxVLdPdu_hFsUFwVig1LU6h1X0hyphenhyphenwKZCBNFjpuREXKgCKN/?imgmax=800&quot; width=&quot;244&quot; height=&quot;170&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Once everything has been set up the call to create the virtual machine is executed asynchronously&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_1C6ED568.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image009&quot; border=&quot;0&quot; alt=&quot;clip_image009&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQX60ngLWgJ2QCUKRhLeP1ug1jnwnsc1_argQ_JZ-kYLTn243Cy0snanRxUgea0gIO2ujJ92qens8Z51R4S4NXgcuBgC2Y8dqocWJ_j2mRgLHKrinpjSyecoLD_GTi5AuTKbvZIaNiod6d/?imgmax=800&quot; width=&quot;244&quot; height=&quot;126&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In a few minutes we’ll then have a completely deployed VM running on Windows Azure with all of the settings (hard drives, VM size, machine name, username/password, network endpoints + firewall settings) fully configured and ready for us to use:&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://weblogs.asp.net/blogs/scottgu/image_49F285DC.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image010&quot; border=&quot;0&quot; alt=&quot;clip_image010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtX03SNq_ikBgQbfNPasxDEMfpFlfaeJhUFLcyfkUu440gwEKMmzcreXAFnNRphpTaajIoli6w4IVa9obTVjOaNqyi-IIJzJI4UF-0xja_TlTjHanN6onwkQoYqYgAMIwBlQJciK6fX40R/?imgmax=800&quot; width=&quot;244&quot; height=&quot;124&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/u&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;TopologyBlast&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;This new functionality will allow Windows Azure to communicate topology changes to all instances of a service at one time instead of walking upgrade domains. This feature is exposed via the &lt;b&gt;topologyChangeDiscovery&lt;/b&gt; setting in the Service Definition (.csdef) file and the &lt;b&gt;Simultaneous*&lt;/b&gt; events and classes in the Service Runtime library.&lt;/font&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/u&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Azure Service Bus – partition queues and topics across multiple message brokers&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Service Bus employs multiple message brokers to process and store messages. Each queue or topic is assigned to one message broker. This mapping has the following drawbacks:&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;· The message throughput of a queue or topic is limited to the messaging load a single message broker can handle.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;· If a message broker becomes temporarily unavailable or overloaded, all entities that are assigned to that message broker are unavailable or experience low throughput.&lt;/font&gt;  &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/u&gt; &lt;p&gt;&lt;u&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Q. Can I use Azure SDK 2.2 to debug Web Role , Worker Role using earlier SDK.&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A. No, you need to have your roles migrated to SDK 2.2. For older role you can only get the diagnostic information out of Visual Studio if installed 2.2.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3yo1BemHbnTEw1zhwF_iM_ffHyed58dCu6j1zi2cPQfC5bpVRuxwOcGZI_vWNq-5CkeYlaOrI5BERagsBIL-UbVpI8CCze79UzynGJkUO3mXFf5z5ne6bZxV0avzZzIo5hY_qfU8O9k5X/s1600-h/clip_image011%25255B3%25255D.png&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image011&quot; border=&quot;0&quot; alt=&quot;clip_image011&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZmj3dZzdd4BI3p03n3SlcMPUMMvu3_usUYpx3dhOwX9JII3OUjNdA-PHbTar2111TKkJDbcz8kqTOKlCqs1aY07Wg0zKC9olqIJCjfXc5o6_BuxbHc2Eo6sIjnrIt4yEs-UycYZMg7lMa/?imgmax=800&quot; width=&quot;244&quot; height=&quot;117&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Q. What are typical issues while migrating from 1.8 to 2.2?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Worker Roles and Web Role Recycling&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;I have 3 worker roles and a web role in my project and I upgraded it to the new 2.2 SDK (required in VS2013). Ever since the upgrade, all of the worker roles are failing and they instantly recycle as soon as they&#39;re started.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Post can be found here- &lt;/font&gt;&lt;a href=&quot;http://stackoverflow.com/questions/19717215/upgrade-to-azure-2-2-sdk-is-causing-roles-to-fail&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://stackoverflow.com/questions/19717215/upgrade-to-azure-2-2-sdk-is-causing-roles-to-fail&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Not able to update the Role after upgrading&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;I recently worked on an issue where the following error was being thrown while deploying the upgraded role to Windows Azure.&amp;nbsp; You just upgraded the SDK to 2.1 or 2.2 and you start getting the following error while deploying the role.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Link to the post &lt;/font&gt;&lt;a href=&quot;http://blogs.msdn.com/b/cie/archive/2013/10/31/not-able-to-upload-role-after-upgrading-the-sdk.aspx&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://blogs.msdn.com/b/cie/archive/2013/10/31/not-able-to-upload-role-after-upgrading-the-sdk.aspx&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Q. Steps to Migrate to Azure SDK 2.2&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A. Open the Azure project in Visual Studio 2012, &lt;/font&gt; &lt;ol&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;For upgrading your project is via the Properties windows of the Cloud Project. You will see the following screenshot.&lt;/font&gt;  &lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4pBHzsdGXctAaG_OjAue6GF1Z3V1Qt3yA2ghbpYrp3VQEGvv3iLIbTcCFq2UU2tlQQHqJpGAbQp8o3a83S5AlSJ8cykVqOv3fmsWY4D35JJpX9w130yQV114uY5n6-NcB__myF9NPCQAw/s1600-h/clip_image013%25255B3%25255D.jpg&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image013&quot; border=&quot;0&quot; alt=&quot;clip_image013&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT969c_oqulsgi3DokSN9ROYd_Y8xFJhktxfkeX-NmvunZ3Nf4L4uQBF00ILgnVFBE95yxxY_T2zV3PgnudVqavwqc1NlzXtisC81pJhuOJPiSigEL99bIM6ubJ99UOpNvQoBh3oJBGA4d/?imgmax=800&quot; width=&quot;244&quot; height=&quot;71&quot;&gt;&lt;/font&gt;&lt;/a&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Follow through the upgrade process fix the errors, &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Run the Project locally to see if any errors fix the same.&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;u&gt;Check In the code post all fixes&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Test the same in Dev. environment to see if this breaking. There is potential chance of breaking due to dependencies.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Note: The web &amp;amp; worker role tend go into inconsistent state due library dependency mismatch. This will have to fixed&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Generic Migration to Azure SDK 2.2- High Level Approach&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The suggested approach is to start with one component, one web role and one worker role WCF Rest and see the impact in terms of issues and then decide then timelines for others. The POC will be done in 1 Sprint, the candidate are the following&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Component – Reusable Component&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Web Role – Portal Web&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Worker Role – Portal Worker&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;u&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Links&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;· Installation of Azure SDK 2.2 - &lt;/font&gt;&lt;a href=&quot;http://www.windowsazure.com/en-us/downloads/archive-net-downloads/&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://www.windowsazure.com/en-us/downloads/archive-net-downloads/&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1316675624124255360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1316675624124255360?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1316675624124255360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1316675624124255360'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/11/azure-sdk-22-features-migration.html' title='Azure SDK 2.2 Features &amp;amp; Migration'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY2cM1KmIpsG1Dh8E9v3ua-Tfb2njXzzqAN_Pu3scJiFLAWrlwAsdKN_C1AhEyL5LJTnaR5VENc4iPIIIPVFpXnVYgLdOWdfPK1JRTSyEzVk39g-6eZJ9MdmvEJqpXzwvCCHIikp3VWsfS/s72-c?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-6546148717717389106</id><published>2013-10-02T23:44:00.001-07:00</published><updated>2013-10-06T00:32:50.543-07:00</updated><title type='text'>Cloud–Azure Downtime --A Reality and It Hurts….</title><content type='html'>&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Cloud is a technological innovations which has been accepted in the main stream . The cloud platform is constantly evolving, still in its infancy still. The platform will take sometime to get matured. The non functional the ilaties is something which needs a lot more data, understanding and most of them come a very one sided T&amp;amp;C with fine print “Conditions Apply”.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Cloud downtime is a tricky topic and needs a lot more understanding. Its only when we run into a real situation do we start reading the fine print.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Microsoft Azure Compute ran into hot waters 27 Sep 2013 6:34 AM UTC North Central US datacenters. The documentation mentions Partial Performance Degradations &amp;amp; “The repair steps have been successfully executed and validated. Full Compute functionality has been restored in the affected North Central US sub-region. We apologize for any inconvenience this has caused our customers.”. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What does the Cloud Services SLA read as on the Microsoft site&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Cloud Services, Virtual Machines and Virtual Network&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;For Cloud Services,&lt;u&gt; we guarantee that when you deploy two or more role instances in different fault and upgrade domains, your Internet facing roles will have external connectivity at least 99.95% of the time&lt;/u&gt;. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;For all Internet facing Virtual Machines that have two or more instances deployed in the same Availability Set, we guarantee you will have external connectivity at least 99.95% of the time. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;For Virtual Network, we guarantee a 99.9% Virtual Network Gateway availability&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What is the SLA around Fault Domain?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;We all tend to think the Fault Domain will just be God sent, but in all actuality, Fault Domain is a set of computer on some rack and same data center is also liable to go down.&amp;nbsp; If the entire data center goes down there is no fail over.&amp;nbsp; &lt;em&gt;&lt;u&gt;Moreover even if the down time is unplanned and over the documented limits there is no region wise fail over.&lt;/u&gt;&lt;/em&gt;&lt;/font&gt; &lt;p&gt;&amp;lt;Correction&amp;gt; Fault Domain don&#39;t exists across data center as pointed out by Wood&amp;nbsp; - Thanks&amp;lt;/Correction&amp;gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;For more documentation on Fault Domain refer &lt;/font&gt;&lt;a href=&quot;http://blogs.technet.com/b/yungchou/archive/2013/05/14/window-azure-fault-domain-and-update-domain-explained-for-it-pros.aspx&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Can one find which are fault domain instances for their instances?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;No apparently MSFT doesn&#39;t indicate where the fault domain for the instances ,at least on the management portal. However Windows Azure SDK provides some properties you can use to query fault domain and upgrade domain information. &lt;i&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstance.aspx&quot;&gt;&lt;b&gt;RoleInstance&lt;/b&gt;&lt;/a&gt;&lt;/i&gt;&lt;b&gt; class has property called &lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstance.faultdomain.aspx&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;FaultDomain&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt; that you can read to find out in which fault domain your role instance is running&lt;/b&gt;. There is a catch though – querying &lt;i&gt;FaultDomain&lt;/i&gt; property will return either 1 (one) or 2 (two). This is because you are entitled for only 2 fault domains for your application. If your application is deployed across more fault domains you will not be able to determine this using the &lt;i&gt;FaultDomain&lt;/i&gt; property.&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Can one really rely on the Fault Domain?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;My take is given the limited documentation and Fault Domain is more of abstract term which features in the SLA and T&amp;amp;C . The recent increase in compute &amp;amp; sql reporting downtime &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Sept 27 – 2013&lt;/b&gt; – North Central US , 4:36 AM, 5:15 AM, 6:34 AM.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Sept 28-2013&lt;/b&gt; -&lt;b&gt;Compute : Partial Performance Degradation [North Central US] &lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;28 Sep 2013 5:15 PM UTC&lt;/font&gt;&lt;/b&gt;  &lt;li&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;28 Sep 2013 5:00 PM UTC&lt;/font&gt;&lt;/b&gt;  &lt;li&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;28 Sep 2013 4:20 PM UTC&lt;/font&gt;&lt;/b&gt;  &lt;li&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;28 Sep 2013 3:20 PM UTC&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Sept 29 -&lt;/b&gt;Compute, Storage and SQL Reporting : Performance Degradation [Southeast Asia]&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;29 Sep 2013 4:44 PM UTC&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;29 Sep 2013 4:07 PM UTC&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;29 Sep 2013 2:07 PM UTC&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;29 Sep 2013 1:07 PM UTC&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;The string of episodes around Compute - did impact a lot of customers in multiple region and most of them I presume had fault domain (min 2 instances), still this resulted in disruption of service. &lt;b&gt;&lt;u&gt;My take if downtime can result in business loss then don’t depend on fault domains look for alternatives.&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What alternatives does the customer have in case they don’t want to rely on Fault Domains?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;Azure does provide &lt;u&gt;Traffic Manager – which is CTP , this can be used please evaluate a fully working POC before using this as an option.&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Traffic Manager allows you to load balance incoming traffic across multiple hosted Windows Azure services whether they’re running in the same datacenter or across different datacenters around the world. By effectively managing traffic, you can ensure high performance, availability and resiliency of your applications. Traffic Manager provides you a choice of three load balancing methods: performance, failover, or round robin.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Use Traffic Manager to:&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Ensure high availability for your applications&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Traffic Manager enables you to improve the availability of your critical applications by monitoring your hosted services in &lt;u&gt;Windows Azure and providing automatic failover capabilities when a service goes down&lt;/u&gt;.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Run responsive applications&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Windows Azure allows you to run services in datacenters located around the globe. By serving end-users with the hosted service that is closest to them in terms of network latency, Traffic Manager can improve the responsiveness of your applications and content delivery times.&lt;/font&gt;  &lt;p&gt;&lt;i&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Note: The customer pays for the extra set of instances running in a different data centre. The data synchronization methods have to build over and above Azure Sync. The deployment from the customer development environment has to deploy to both production and fail over simultaneously. The customer will entail additional costs.&lt;/font&gt;&lt;/i&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What are dates around Traffic Manager GA?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;No dates are announced in public from MSFT, The assumption is early March 2014.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;What does the SLA for Compute mention?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Find the Compute SLA &lt;/font&gt;&lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=38427&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. The important part of the document SLA Exclusions&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;a. &lt;/b&gt;&lt;b&gt;SLA Exclusions&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;i. This SLA and any applicable Service Levels do not apply to any performance or availability issues:&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1. Due to factors outside Microsoft’s reasonable control (for example, a network or device failure at the Customer site or between the Customer and our data center).&amp;lt;Important&amp;gt; Does a Natural Disaster classify beyond reasonable control &amp;lt;/important&amp;gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2. That resulted from Customer’s or third party hardware or software. This includes VPN devices that have not been tested and found to be compatible by Microsoft. The list of compatible VPN devices is available at &lt;/font&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windowsazure/jj156075.aspx&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;http://msdn.microsoft.com/en-us/library/windowsazure/jj156075.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;3. When Customer uses versions of operating systems in either Virtual Machines or Cloud Services that have not been tested and found to be compatible by Microsoft. The Virtual Machines list of compatible Microsoft software and Windows versions is available at &lt;/font&gt;&lt;a href=&quot;http://support.microsoft.com/kb/2721672&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;http://support.microsoft.com/kb/2721672&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. The Virtual Machines list of compatible Linux software and versions is available at &lt;/font&gt;&lt;a href=&quot;http://support.microsoft.com/kb/2805216&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;http://support.microsoft.com/kb/2805216&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. The Cloud Services list of compatible operating systems is available at &lt;/font&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ee924680.aspx&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;http://msdn.microsoft.com/en-us/library/ee924680.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;4. That resulted from actions or inactions of Customer or third parties;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;5. Caused by Customer’s use of the Service after Microsoft advised Customer to modify its use of the Service, if Customer did not modify its use as advised;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;6. During Previews (e.g., technical previews, betas, as determined by Microsoft);&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Or&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;7. Attributable to the acts or omissions of Customer or Customer’s employees, agents, contractors, or vendors, or anyone gaining access to Microsoft’s Service by means of Customer’s passwords or equipment.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;This is lot of legal jargons but My 2 cents is if your business cannot afford a downtime please read the SLA’s and considering cloud is evolving, we can only get better on the SLA’s. The customer will have to look for options other than MSFT.&lt;/font&gt;  &lt;p&gt;&lt;sub&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/sub&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Additional Notes&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;How to find out the Fault Domain? -&lt;/font&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstance.faultdomain.aspx&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstance.faultdomain.aspx&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Microsoft Azure Real-time Service Status &lt;/font&gt;&lt;a href=&quot;http://www.windowsazure.com/en-us/support/service-dashboard/&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://www.windowsazure.com/en-us/support/service-dashboard/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/6546148717717389106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/6546148717717389106?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/6546148717717389106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/6546148717717389106'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/10/cloudazure-downtime-reality-and-it-hurts.html' title='Cloud–Azure Downtime --A Reality and It Hurts….'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-2978519725277239520</id><published>2013-09-04T23:34:00.001-07:00</published><updated>2013-09-04T23:34:49.120-07:00</updated><title type='text'>Intelligence As A Service–Codename Zephyr</title><content type='html'>&lt;p&gt;Intelligence As A Service&lt;br&gt;How often have you searched for a product on the internet haven&#39;t got a decent comparative analysis and pushed you closer to a purchase. How often have responded to a job advertisement and didn&#39;t know the complete analysis of the &lt;br&gt;company, the role, probable salary and the generic responses from HR folks what does it indicate. More importantly whom should you connect in the industry to better understand the opportunity which you are applying. Big Data comes into the &lt;br&gt;mainstream into everything. The next big thing I am working on an intelligent analyser for anything. Tagged as open source Codename Zephyr. More to follow https://github.com/ajayso/zephyr&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/2978519725277239520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/2978519725277239520?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2978519725277239520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/2978519725277239520'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/09/intelligence-as-servicecodename-zephyr.html' title='Intelligence As A Service–Codename Zephyr'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-3573335180069647853</id><published>2013-07-14T02:10:00.000-07:00</published><updated>2013-07-24T11:41:09.054-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><title type='text'>Big Data–Back to the Basics</title><content type='html'>&lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Big Data Landscape is for ever changing. While studying what’s there in market and how do I really get a handle at understanding Big Data I come to find that every 2 weeks there is a new name in the landscape. Also the flip side is there names which would just vanish in a short time. It would be good to get a basic understanding of Big Data.&amp;nbsp; In this post I don&#39;t necessarily talk about a specific technology I’m just trying to get the understanding right. Big Data if you see is classified around 3 areas&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Batch&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Interactive&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Real-time Tools.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;One really has a challenge in terms of how to understand Big Data, what is base classification of the Big Data space. This is what the landscape looks like as of early Jan 2013 this year, this has changed.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjezjls3FxkyS5_P7Z_8NNTusxnGhZV0MAF_2rT43dK4ubYRlUtl-KdT2OAu1NCVr3n6_TmynOZd2-AozocZQuzukCIr6F65ocleyFZusS4WISQSh-lVfvdm6XqhregQf74y1YSVsA99DmH/s1600-h/image3.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0EkpIGAKmb20kMRUh2IkE1QSP3wARdnO_E6B9_cmZY2ZnoPkrx0MegOZPF0hjSuDrM-xXoaYiBxPqNNbm2bQV0Sum2Pb10x_YzqilnNv_uB1PIgC0GLBk6zMelOHULezYgazvE1tpE26/?imgmax=800&quot; width=&quot;600&quot; height=&quot;324&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Broadly this gives an idea of all the different things that are in the big data landscape. The only way one can tend to understand the Big Data space is the following high level concepts. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Batch Processing&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The data provided needs to processed. Large amounts of data needs to be processed fairly quickly. Typically most seen in the world of Hadoop or HDInsight on Windows Azure. Essentially what does it entail.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;It is has data spread over n number disk on each of the nodes.&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Has distributed cluster to process that data.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Volume of the data is generally TB to PB.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The primary programming model used is MapReduce , essentially what we are doing is Mapping out operations to each of the machine and post that there is aggregation using the reduce function.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The MapReduce function have to be typically written by a developer. &lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The original project was started by Google Map/Reduce.&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Currently 2 open source projects – Hadoop &amp;amp; &lt;a href=&quot;http://spark-project.org/&quot; target=&quot;_blank&quot;&gt;Spark&lt;/a&gt;. Spark provides primitives for in-memory cluster computing: your job can load data into memory and query it repeatedly much more quickly than with disk-based systems like Hadoop MapReduce.&lt;/font&gt;&lt;/p&gt; &lt;h1&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;Interactive Analysis&lt;/font&gt;&lt;/h1&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;The large set of data needs to analysed interactively. &lt;/strong&gt;There are 2 technologies generally been employed her is column based databases which has sequentially indexed data. It has capability of doing table scans pretty quickly. The second is to have as much data in the memory cache. This is pure play interactive platform which are in a position to analyse large sets of data at very low latency. One such good example is&amp;nbsp; Palantir’s Project Horizon majorly building interactive analysis of big data for US government. Below is a cool video which explains it more depth. What seems be important in these kinds of implementation&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Data is never duplicated.&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Compact in memory representation – The in memory data representation needs to real small on the memory footprint unto 16GB. Compression must be lightweight -&amp;nbsp; Dictionary &amp;amp; prefix based compression , localized block based scheme are effective.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Analyse functionality here is not business specific “its more like analyse any kind of data”&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Partitioning of processing:&amp;nbsp; Shared nothing/Sharded architecture .&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Partition Id for Objects would be a good idea, but sending half billion Partition Id from the client to the serve will not be a good idea. Another way is to have has Partition object ID’s in subset using the same hash, use the hash for query.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Other option of interactive analysis is Drill, Shark, Impala &amp;amp; Hbase. Originally started with Google Dremel.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&amp;lt;Video on Palantir’s Interactive Analysis Platform – Project Horizon&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:5dd9feae-503a-4245-a3aa-6bc6c703ba73&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;div&gt;&lt;object width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/jb8YuD1pWtA?hl=en&amp;amp;hd=1&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/jb8YuD1pWtA?hl=en&amp;amp;hd=1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Stream Processing&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Hadoop’s batch-oriented processing is sufficient for many use cases, especially where the frequency of data reporting doesn’t need to be up-to-the-minute. However, batch processing isn’t always adequate, particularly when serving online needs such as mobile and web clients, or markets with real-time changing conditions such as finance and advertising.”&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The real-time use case is an obvious one. If you need to respond or be warned in real-time or near real-time, for example, security breaches or a service impacting event on a VoIP or video call, the high initial latency of batch oriented data stores such as Hadoop is not sufficient.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Moreover the data is not valuable without analysis. In a typical real-time scenario data is fed from multiple sources and analyse this data on fly is seen as a business requirement in multiple industry Segments.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Streaming Big Data analytics needs to address two areas. First, the obvious use case, monitoring across all input data streams for business exceptions in real-time. This is a given. But perhaps more importantly, much of the data held in Big Data repositories is of little or no business value, and will never end up in a management report. Sensor networks, IP telecommunications networks, even data center log file processing – all examples where a vast amount of ‘business as usual’ data is generated. It’s therefore important to understand what’s being stored, and only persist what’s important (which admittedly, in some cases, may be everything). For many applications, streaming data can be filtered and aggregated prior to storing, significantly reducing the Big Data burden, and significantly enhancing the business value of the stored data.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Stream Processing was started by a project called Storm called Twitter the need out there was to able store the data like images, feeds and second was to aggregation very quickly. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storm, Apache &amp;amp; Kafka are some of the Stream Processing Platform.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Quick Comparison Sheet&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvQGUuJHzFL2QTKZVDI_NUcXWmRe71iUxy27jGTGr3Xg0_hTRs7MSJi6jVjc9MJRwpD6r4N4as_Ngzizyjpj-eMwKEXjdfTCUuDVnTo8aHgzgvFZp3B00VeSnAWfnM1ZgdwNVZKOUsioGM/s1600-h/image%25255B9%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_6OkzX8sr-kjLP-2gyOdEEE3PCkAnvJmohEx5HAffYOZOPq7YspJaXrvCWBGi27D_AU-5hRYc3d6j1pclX0CP4WRfXhQa-1c2bXQgvR_iypbsEW7r9B4zFE3VK0meN5yv0qKkVMedSxbm/?imgmax=800&quot; width=&quot;654&quot; height=&quot;315&quot;&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;The No SQL Paradigm&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Relational Database built by Codd came into existence in the 70’s majored by IBM with a multiple query language variants. Post that one we saw.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In 80’s we saw a lot of applications been built , the need for faster speed was important. Ingres.They came up with the idea of have to save some part of the big database in another small area what they termed as Index which improved performance.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Then come along the web which kind change the dynamics on the database which is were the concept of No Sql came from. No Sql means &lt;strong&gt;Not Only SQL.&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The focus on any relational database design is on “how can we store” without duplicating the same. There is very little focus given on &lt;strong&gt;how do we use this&lt;/strong&gt;. Given that in the current times the focus is more “How do I Use this data” obliviously with the best performance and scalability at center of the conversation. NoSQL ideally is focused on “How Do I Use This Data” for example is the data going to use for job queue, shopping cart, cms or multiple other usage scenarios. Below is JSON of a shopping cart item, which consist of id, user id, line items all in one place and that’s how it actually gets used.&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;{&lt;br&gt;id : 3,&lt;br&gt;user_id : 25,&lt;br&gt;line_items: [&lt;br&gt;{ sku : &#39;123&#39;, price: 1000,&lt;br&gt;name : &#39;Nunemaker Autograph&#39;},&lt;br&gt;{ sku : &#39;124&#39;, price: 1000,&lt;br&gt;name : &#39;Banker Autograph&#39;},&lt;br&gt;],&lt;br&gt;shipping_address: {&lt;br&gt;street : &#39;123 Some St.&#39;,&lt;br&gt;city : &#39;South Bend&#39;,&lt;br&gt;state : &#39;IN&#39;,&lt;br&gt;zip : &#39;11216&#39;&lt;br&gt;},&lt;br&gt;subtotal : 2000,&lt;br&gt;tax : 140,&lt;br&gt;total : 2140&lt;br&gt;}&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Its best to keep all the data which kind of related in one place because that’s the way its going to be used. In the relational world the emphasis is around how are we going to store it and separate it VS in the No SQL world its kept altogether and usage becomes far simplified. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;NoSQL is about data OR Pro Data and its about How you Use the Data.&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The debate of SQL Vs. NoSQL is never around Scalability, but when get to a point of Scaling its far more easier to scale in the NoSQL world.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;No SQL is analogous to OLTP&lt;/strong&gt; &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In coming section I will concentrate on some of important Interactive Analysis &amp;amp; Streaming platform.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;HBase&lt;/strong&gt;&lt;/font&gt; –&lt;font color=&quot;#0000ff&quot;&gt;Interactive Platform&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;HBase is used by Facebook. All the messages that one sends to Facebook are actually done through HBase. Its all about high volume super fast INSERTS. Its also good at volatile READS. HBase was designed to a highly transactional system owing to the fact the data is pretty much in the memory.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;HBase is an in memory , column store database. Apparently this has to be understood properly especially the column store is not the same as RDBMS column. A very efficient INSERT or writes engine. Also the definition of database for HBase is different.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGXc6XrmWZ4NX8iyd3veY2SSstpEppuu65AwE26MN9O5sCRNS68J7B3QaD6EnhlAP6UFR3acbk9S_VcbGdUqJUWaidN4goM3FJMyop59FH8N1MW3H6N8IQSJ5fKX0K3n6GINf456-H0R8v/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk0SOIX82LK7al0ZDZN1_HODCMmmeeAPRhiI7Tl-w9Q9fNp2IJ9YfXdkx2qOQQ5U9pArKjeiYeGAFGmnj_zQo-jV0vC1yQzcDHNyv6PCCiZSeCadnx2r0Rbu3UtEpfjXB0-kgLIYqxBJnE/?imgmax=800&quot; width=&quot;506&quot; height=&quot;314&quot;&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;HBase relies on Hadoop for its persistent storage , that kind pretty explain the rest of the figure. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Zookeeper is a distributed coordinating service this keeps tracks all the HRegion Server and make sure whatever is written into the memory os also written in the HDFS. By definition the way HDFS works is that if you lose a node you already 3 replica’s.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Cassandra &lt;font size=&quot;3&quot;&gt;- &lt;font color=&quot;#0000ff&quot;&gt;Interactive Platform&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Cassandra is very similar to HBase in terms of functionality. Its got a SQL like query language they call it the CQL. Both HBase and Cassandra are very good at writes and super fast and both are in memory. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Facebook initially started out of Cassandra that moved on to HBase. The real reason of moving to HBase is not very clear.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Drill &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Apache Incubation Project inspired by Dremel. Designed to scale to 10k servers , query PB’s in minutes. Traditional PetaByte Map Reduce will take hours today , Drill apparently takes minutes and some cases seconds. This is an Open Source reimplementation of Dremel. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;A little background on Dremel&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Some Google Terminologies which are associated with Drill- Big Data &amp;amp; Big Query- Big Data in the industry by definition is about 500 million rows and above.&amp;nbsp; Big Data has a limitation on size of the column at 64kb.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Big Data at Google – What does it mean from a number per say&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;60 hours of YouTube video uploaded per minute&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;100 million gigabytes search Index / Analysis of 2010&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;425 million Gmail users.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Looking at the size of the data a relational database is an obvious no, that leaves us with an option of doing a full table scan, which can be expensive in the relational world, that’s where Dremel was born.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Big Query is the externalization of this technology. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What does a Big Query really look like ex: Finding top installed markets apps?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;SELECT&amp;nbsp; top(appId 20) AS app, count( * ) AS count FROM installing.2012&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;ORDER BY count DESC&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Result in last than 20 seconds.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Where can we use Big Query?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Game and social media analytics&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Infrastructure monitoring&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Advertising campaign optimization&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Sensor data analysis.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Apache Drill is Google Incubation project around Interactive Analysis of Large Datasets. Map Reduce is a batch mode tool and there is a latency associated with the same. There are cases where one would like to real-time data faster some of the scenario are&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Adhoc –analysis with interactive tools&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Real-time dashboards&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Event/trend detection and analysis&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Network intrusion&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Fraud&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Failures&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The key point in Dremel is it uses Nested Data Model. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Apache Drill its system designed to support Nested Data. &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Flat record are the simplest case of nested data that is root only&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Support Schema(Protocol Buffers, Apache Avro) and Schema less (JSON, BSON) formats.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What is Nested Query Languages supported by Drill?&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;DRQL&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;SQL like query language for nested data&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Compatible with Google BigQuery/Dremel&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Designed to support efficient column based processing&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Mongo Query Language&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Other language/ programming models can plug.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj14_22Hq0GMXj3cpAO54ez5CywhhJDhC1ERk5hN7GYzZnh3HfE_DfE-qTMwmLeJehesoXECoM4oKK6NNgKHb0YLC7elVo8TASgj1TNNNeFO04beLwpoNUg3lzDT6x40-tdZgjRtDuh1SaD/s1600-h/image%25255B18%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCGG3-2osJT8GKQ9BsVFeqXzctYlMVWc1QbAS5BV2VR9Jl88cCatFppxBbd6sYQPNS_bxk_uD-kkT0ilAlp2ZI7JzuhwtiM1gbgxWe1T73BZZ227r2196gbZDmzWIxj5ZnTtK8EOmdQh8a/?imgmax=800&quot; width=&quot;590&quot; height=&quot;343&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The data model is a nested Data Model for Document split across Basic Document Data and URL entries. The query is very SQL like. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;How does Data Flow work with Drill?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Data loaded into Hadoop Cluster by one of many mechanism i.e Hive, HDFS command line, Map/Reduce or NFS interface. The data in Hadoop is stored as row fashion. The Drill Load is responsible for converting the row based data into columnar manner.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Alternatively for the first time Row Based query is allowed which in turn helps in creating a columnar copy of the same.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0rNXnbvmtDgmRPZz9D8vpNpv4y7PeJ-svzzFaYqgCx29xOhHvYIyIRMDvO25yawZ4XArFJW3RhL3x1YrVCrdrqzGpsCzF1LYvKZ7ap5Pq6FZxMHEY14ww4ReEP4OGam4IvbX4Qr6cctrJ/s1600-h/image%25255B25%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizBaR4CbNe3BPBMe0jUS6mGtKGzC_xwkq1g5cf3UrIKabKmCUsV26vobRDitss3DNKmYKmvXoSh6EEubUS7WbBfFexwU5vLBjtNHjZPlQUBkIXpF_q3Gy59do78Xo6Sd7O8f6I9Xigs8jP/?imgmax=800&quot; width=&quot;580&quot; height=&quot;317&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What does the Query Execution of Drill look like at high level?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK2J_6R8agJpW-xTNwusY3VyZZ4J9BRTrtagtxWT97AyZw0FHpH9m-5jGqQPjPIYGg1LOms58e_BVWlyl98dCNQ6rhZmrgg1pN23EE3V6KsXVB42Zuc9-XumsTfB36BhHArJmZ5DMMlrPA/s1600-h/image%25255B31%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvG7pONVKAVdL_6bSySpefscuCg4ZJy7FV8V7maZYg-HGlkPIrv_Jnr7r5piQTZPupNRMDt0DZwUqPQmiQ459zv0kLoSgylLs-MmGU5glNvfJFA23GQxgFnc0j93Jj6521-UJ7V7zHwhDw/?imgmax=800&quot; width=&quot;650&quot; height=&quot;117&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;At a very high level the Query Execution involves the following step.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Driver submits the Query(text) for the Parser. The Parser does a parsing builds the abstract syntax tree and hands it over to the Compiler.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Compiler does the optimization and builds the execution plan&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Execution Engine is responsible for scheduling this Storage which can on any server&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Typical Sql Query Components support? What are they&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Query Components&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt; &lt;ul&gt; &lt;li&gt;SELECT&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;FROM&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;WHERE&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;GROUP BY&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;HAVING&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;(JOIN)&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Key logical operators&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Scan&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Filter&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Aggregate&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;(Join)&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What is so unique about the SCAN logical operator?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;One of architecture goal for Drill has been to support multiple formats that is achieved by having a SCAN operator for each format. So for example the query consists of a Where which has JSON data the query would involve&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;SELECT Json(data URI)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Field and predicates are pushed down into the scan operator. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What’s actually involved in the Execution Engine?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Drill Engine Execution has 2 layers&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglm94mhjCtJRuvvdNx5nRcc3nMJtNu9egpUsQkdFBNvDAnYiPPiEifEF65ZahwJaQHYLxq-MlIXsQZbqHKJpoB1PrGfM5lNRGVRfpM4ed268AC92362ITPavyYL1Zb2SDVM7wGfyp7LfQ6/s1600-h/image%25255B37%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIoyzNCa6iSDIgElFmcrCFMT6sJimHIh89pY0VY3_8VZAR1cFFMqk8xCSMkbn3Llq4jNAxWTh3kojvO4s4Kb2hflperW80Y-wgX64aPD2Y5zo4YznGBOYThtIslFyg9-qIuII49Dzebvhf/?imgmax=800&quot; width=&quot;505&quot; height=&quot;215&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Operator Layer&lt;/strong&gt; which is serialization layer- This where individual records are processed, for example doing a count on a table there local table scan done followed by local aggregation and at the global aggregation a sum is done.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Execution Layer&lt;/strong&gt; is not serialization aware, all it does is transfer blobs across nodes and cluster and this layer is responsible for communication between nodes, dependencies(what has to finish before) &amp;amp; fault tolerant. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A Complete Video on Drill can be found here&lt;/font&gt;&lt;/p&gt; &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:11943d02-0b1f-42b9-b774-4fb92081f1c6&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;div&gt;&lt;object width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/I1Z8J5JvKtY?hl=en&amp;amp;hd=1&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/I1Z8J5JvKtY?hl=en&amp;amp;hd=1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;448&quot; height=&quot;252&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style=&quot;width:448px;clear:both;font-size:.8em&quot;&gt;Introduction to Apache Drill&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;font size=&quot;5&quot;&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;font size=&quot;5&quot;&gt;Impala&lt;/font&gt; – &lt;font color=&quot;#0000ff&quot;&gt;Interactive Analysis&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Impala kind of solve the same problem as Drill i.e moving beyond Map/Reduce , batch processing with low latency problems.&amp;nbsp; Very similar Columnar Storage and the complete works as Drill. So for the sake of simplicities will just get to the points of differentiations here.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;However, it would be unfair of me to compare the two in detail in terms of maturity and functionality at the present time. As of October 29th, 2012, the Drill source code repository at [1] has code for a query parser and a plan parser which includes a reference plan evaluator which can perform scans against JSON-formatted data in flat files. Impala&#39;s tree at [2] includes a distributed query execution engine with support for cancellation, failure-detection, data modification via INSERT, integration with HDFS and HBase, JIT-compiled execution fragments via LLVM and a bunch of other stuff.&lt;/font&gt; &lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;Calibri&quot;&gt;Impala is completely dependent on Hadoop. It utilizes Hive QL.&lt;/font&gt;&lt;font color=&quot;#000000&quot; face=&quot;Calibri&quot;&gt;Impala is progressing to becoming an MPP (Massively Parallel Processing) Architecture.&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The query processing is similar to Drill.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP6o5dR50esw3CVgZJK6WCQndYz9AeaUSmYU9J_96P5YHR1L6CytB-n6dROolk61Xqwsu-AAbPs3eH9Td9Gik5ruaavYTh1HBXDMSZF8YxfeJIrxgW0YIdr4P-TxVlWXMNlZHTl4G6EZ12/s1600-h/image%25255B41%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf89gLadlUDstteMgZFuUcJYQetJgQkXncSxmHrWAW4wPTTmk6MM51Lx6twQdMEmDUaGi8CiCuhSiz1VdtEf3FgE_sx_GU2usVkWGIDuck9nxQpGZr_aWaESCKAuI3R637BHN39C5Q9iUT/?imgmax=800&quot; width=&quot;614&quot; height=&quot;324&quot;&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;u&gt;The high drive from MSFT towards Impala is pretty evident as they want a good Interactive tool in this arena without that they would be doomed.&lt;/u&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;5&quot; face=&quot;Calibri&quot;&gt;Storm&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot;&gt;- Stream Analysis&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storm is a &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/free-and-open-source.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;free and open source&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt; distributed real-time computation system. Storm makes it easy to reliably process unbounded streams of data, doing for real-time processing what Hadoop did for batch processing. Storm is &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/simple-api.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;simple&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;, can be used with &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/multi-language.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;any programming language&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;, and is a lot of fun to use!&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storm has many use cases: real-time analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Storm is fast: a benchmark clocked it at over &lt;strong&gt;a million tuples processed per second per node&lt;/strong&gt;. It is &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/scalable.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;scalable&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;, &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/fault-tolerant.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;fault-tolerant&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;, &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/guarantees-data-processing.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;guarantees your data will be processed&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;, and is &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/deployment.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;easy to set up and operate&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;img src=&quot;http://storm-project.net/images/topology.png&quot;&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storm &lt;/font&gt;&lt;a href=&quot;http://storm-project.net/about/integrates.html&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;integrates&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt; with the queuing and database technologies you already use. A Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed. Read more in &lt;/font&gt;&lt;a href=&quot;https://github.com/nathanmarz/storm/wiki/Tutorial&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;the tutorial&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;5&quot; face=&quot;Calibri&quot;&gt;Closing Notes……………&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;There is a lot happening in this space. The need for interactive analysis and stream processing is a must for any big data implementation.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Google has been pretty much the innovator of Map/Reduce way back in 2003, then Dremel&amp;nbsp; They are pretty much leading this space with open source world really quick to capitalize on the same and bringing them to market. On the contrary the Rest of the Google world (Microsoft, Oracle, IBM…) have a long way to sprint to keep up. The easiest way from them to accept an open source implementation and roll it out quickly example HDInsight.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;u&gt;Its very clear that MSFT is pushing Impala in the Interactive space alongside HDInsight.&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;KQFM5PRP7JD8&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/3573335180069647853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/3573335180069647853?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3573335180069647853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3573335180069647853'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/07/big-databack-to-basics.html' title='Big Data–Back to the Basics'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0EkpIGAKmb20kMRUh2IkE1QSP3wARdnO_E6B9_cmZY2ZnoPkrx0MegOZPF0hjSuDrM-xXoaYiBxPqNNbm2bQV0Sum2Pb10x_YzqilnNv_uB1PIgC0GLBk6zMelOHULezYgazvE1tpE26/s72-c?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-3213934584717378129</id><published>2013-06-23T04:17:00.001-07:00</published><updated>2013-06-23T04:17:07.602-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Applications;"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise Cloud Solution"/><category scheme="http://www.blogger.com/atom/ns#" term="IaaS"/><category scheme="http://www.blogger.com/atom/ns#" term="PaaS"/><title type='text'>IaaS Inherent Part of the PaaS Architecture</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We wish for a perfect world, honestly this exist only in utopian terms and so does an Architect realize while architecting a solution for the Cloud PaaS there is not perfect architecture. There is an architecture which fits the bill for the moment based on the shortcomings. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Normally while migrating an on premise application on Cloud PaaS we run into multiple scenarios where we see PaaS is not a perfect fit and one soon starts to ponder what are the alternatives and easiest is “Have that application or component build and deployed on an IaaS” as this would be very similar what we already have on premise. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;So IaaS is something which is a solution in the short term. With Windows Azure correcting there mistake and bringing Persistent IaaS in 2012 and providing better basic features like clustering and support early this year, IaaS does become an attractive choice. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;So what does Persistent VM in Azure really have to offer?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Storage: Persistent Storage – Easily Add new Storage.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Deployment: Build the VHD in the cloud or build on premise and deploy,&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Networking:Internal end points are open as default. Access control with firewall or guest OS. Input endpoints controlled through management portal , services and API.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Primary Use: Application that requires persistent storage easily run on Windows Azure.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What OS images Azure IaaS comes with?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Server 2008 R2&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Server 2008 R2 with Sql Server 2012 Evaluation&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Server 2008 R2 with BizTalk Server 2012.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Server 2012&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Open SUSE 12.1&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;CentOS 6.2&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Ubuntu 12.04&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Suse Linux Enterprise Server SP2.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Which key Server Applications does Azure IaaS support?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Sql Server 2008 , 2008 R2, 2012 ---&amp;gt; Note Sql Azure comes with very strip version of Sql Server so in case one is planning on using anything beyond transactional , one has to look at Sql Server on IaaS ( SSAS, SSRS, SSIS…..)&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;SharePoint 2010 , 2013(assuming) –&amp;gt; Note: Given Sharepoint Online is strip down version of SharePoint one will have to look at SharePoint Server on IaaS for more functionalities.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;BizTalk Server 2010 – The BizTalk PaaS is in its infancy very limited features EDI / EAI integrations. A complete reference can be found &lt;a href=&quot;http://geekswithblogs.net/michaelstephenson/archive/2013/01/08/151766.aspx&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Server 2008 R2, 2012&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;* The biggest work load on the cloud for any enterprise application is Sql Server on IaaS. This list is going to grow over time. There is also customer support for the above list.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What is the difference between Virtual Machines and Cloud Services?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Virtual Machines that one creates are implicitly on Cloud Services. The Cloud Services may appear to be segregated from VM but apparently they are not.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;To explain things better. Lets take an example.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Let assume we have a cloud services with Web Role ( 3 instances) and Worker Role ( 3 Instances). The Cloud Services acts more like a container consisting of Web and Worker Role, &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;its like a management container when one deletes/update the cloud services it deletes all the entities in it. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Its also a security boundary i.e roles in the same cloud service can interact with one another which cannot be done across cloud services unless they explicitly allow it.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Its a network boundary, each of the roles are visible to each other on the network.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisKnf80rb8y0dEMyg2zVBoHci2s2tY1r2q-E_57cf2TL73ifHxqrG1aUzmeBkFrIDCIzIBDRLe0eyNJkjARvhTemS0dIAhr1n4-JpoMiYf2vDFeRYUXbYzceg0uJDoGnouolzxYjuedaNJ/s1600-h/image3.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmwvj46USoVG9sWyhq3TRQ2LarJQ7SavhgjIRSM5k1YOEQZgFHl3aAMVcqJjV66pSWj5gEI2iPW3_WUkgN6yYzbkMfsRqC3uoZJnfvFZUDjH3cLxUG5hG7ZI-mtn260dDeZZm46qZXzVut/?imgmax=800&quot; width=&quot;572&quot; height=&quot;269&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;When creates a Virtual Machine (which are roles with exactly one instance) &lt;strong&gt;they are in an implicit cloud service.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs6eOqjk81Yckc7wECp43EKgDA2me4y5moWFq1HiZ4fFyhhzaEii0Jf-QxuP48nFtywMAjtg8KLzDN2zYzVeeYGh8OgHKuwJJWTiqhK-kBmABKD9AVPjIioG3m6jXTuoM2D2SCUTcmQnvl/s1600-h/image8.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYZgo66uLR164hog7Hr_8X2NPye2oNyoRNMts0C8JRKAPAVS1uCIpip3BgG2FSkYRunXzt1L7KWc9a5HXaW-r8zJoBa3xnWVECLcFYkmB16-QTpb9kqlZFUY50B3g3SJaRmnLgSfe_8BaL/?imgmax=800&quot; width=&quot;575&quot; height=&quot;269&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;When one creates a VM it appears in the VM section of management portal and not under the cloud services. The implicit cloud service is &lt;strong&gt;the dns name which is been assigned to the virtual machine.&lt;/strong&gt; So for example if one has created the first virtual machine with the name mymachinedemo and creates the second virtual machine with the same name mymachinedemo and chooses to create the virtual machine to connect with an existing virtual machine it will give a list of existing virtual machines. So essentially the cloud services act as a container for the virtual machines. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEita4GgWI6-waem89JlCuDQ5QddCRa6PAvAVPiJPyiX8USva4bnjsrkYyqr7uPgI97mDGBggchETsd39fryJWcwh53yIkv5Zw2OFq8W2AQaCLoxjGjcYL06kc8XlCqwz0KznoG3Egl5eskP/s1600-h/image13.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh20vyP30-iHrv_AAF4DtrIkVxoH1vfScWShQnh5RpaJovn-uXKA_ep17XGBBUrg-6eYPIgpcxk-DSoLhNkrJjlsPaeW9ixd9oak1FhlHKJhkCIV2VySpuoPpYzutTa4frAztNeNItckYh2/?imgmax=800&quot; width=&quot;511&quot; height=&quot;308&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;When one creates multiple virtual machine via the option of “&lt;strong&gt;connect to an existing virtual machine&lt;/strong&gt;” what it does it places the new virtual machine under the same cloud service and then the dns name will start showing in the list of cloud services.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIbYK8h365wIKiI55zWXfA-k-6PAXFege1Gl4MICCRv0OvuqIn5oheKzezQi6njfzlAKWJ-ap4ftGPRPgM3VC185wYt4XSI0Bz-hyoH84nCBB1Lymmut2kxfOm6Vepd_439zL8YGntK6yR/s1600-h/image18.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqDef-zIZufr2JKW2b5VUwopUx0TnKbLoaqUG9i-mR5rnBc0UqBTcsj6jywgnN3R15ukonz2CekwV70phI_GksOHq6JRVJiYOSStlAggVsBGX0zG1ypuTMs-9V3_S8of_3FY2spNRPb48l/?imgmax=800&quot; width=&quot;573&quot; height=&quot;303&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The hiding of the cloud service only happens in the portal&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Images and Disks, What are these?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Images are base images provided by the create from gallery functionality where one has a bunch of pre-existing images of Operating System, Post creation of the Images you get is an OS disk which your specific operating system disk and associated with these are data disk. By the way the disk are writable disks for Virtual Machines. The VM sizes supported by MSFT currently and subject to change, Additionally you have 28 &amp;amp; 56 GB RAM sizes as well. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHoCKW902OpDYPMMBd01bhv8RqK0urDT4n39yuAsEhDRZeABBXdYqys2-rjkcku_025F_KtOlxKgUjb1XAHMqjtgNpNEolJpOAGXdmFi1QaqoJmniWbRTB1EpCcgK6h2dyNN67iQzZyCmc/s1600-h/image%25255B7%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1c6HWzb5v1-PhTUoY_MaspuY52t1qarUVzh9IpSki91SoxRFwfZk9XGomqen5utGFeGSHblu6e0bD8DgCVkwG1MuYRkn9gXQAXpMCRWpxcd1NFyNlKzSTAyy6Ra81wWU72DMDA-h-XXj/?imgmax=800&quot; width=&quot;550&quot; height=&quot;229&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;The Data disk can go up to 1TB in size. One can attach multiple data disk with one VM. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Images and Disk are stored as Windows Azure Storage Blobs, Data is triplicated i.e 3 copies. It also supports Disk Caching read and readwrite.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;OS disk size is about 127 GB.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What is availability story around virtual machines?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The service level agreement for 99.95% for multiple role instances(web and worker) which 4.38 hours of downtime/year. Multiple role instance ideally means 2 VM in the same role. So idea is to a minimum of 2 vm in a role. What’s included in the 99.95% is &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;compute hardware failure (disk, cpu, memory), &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Data Center failure -&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt; network and power failure. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Hardware upgrades- Software Maintenance – Host OS Updates&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What is not included? – &lt;strong&gt;VM Container crashes, Guest OS Updates.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What does this SLA means VM ?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;It means if one deploys 2 instances of the same virtual machine in the same cloud service (dns name) which the same availability set then one gets a 99.95% SLA.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYyz25SbkM0JY51POp14L82j1cs_xxZB0D1lbdQNKd3sR8sYAZkCQg0I3zMF3mLX1fZMlyb201-jUcxDsmziDBqsnxnn_H-ZALkAx29ioJhouA_7FMT08xGYh6x-BE-fKf1X3I83TOXGjr/s1600-h/image%25255B12%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoquLeVn2mycTFbTLnqiZBoDqurdQzVovj1J5WbMjjOrUnrsJSsjj3oYuNBEaq0LiNESlA7W9YOapcz9UKBgQtAbfQbrCpJePGUZHiuFDbM7K5p-n6aNipgwq_D3wS4tQw9v2IIwcG2pnu/?imgmax=800&quot; width=&quot;507&quot; height=&quot;287&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What is the concept of availability set?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;By default for every role which has 2 instances Windows Azure create 2 instances in Fault Domain and 2 instances in Update Domain. i.e if you have defined Fault and Update Domain . Fault Domain gets defined on the basis of single point of failure in this case its&amp;nbsp; the top of rack router.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Fault Domain represents groups of resources which are anticipated to fail together i.e same rack or same server. Fabric spreads instances across fault or at least 2 fault domains. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Update Domain represent groups of resources that can be updated together.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The availability set comes with the same concept of a fault and update domain concept. So for example if you had 2 instance of the same vm defined in an avail. set , you are going to get instances of same vm in fault and update domain i.e a bare minimum. So in all there are 6 instances of VM running.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrUdV4lY0hYuvPVSVm5W4aMkd61nXHo22QdUrY4I34G3qiDujOHkasEcPDUBC3M4cZ7mHvqrMDZS0ua150Ui5d363NJFL7oqDir9b4c0xkn201UN8vBdvX_v-BSz6K0bPKo-c_RHQZGE7U/s1600-h/image%25255B16%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE8EjgRDoPWF8eNoAgZJQyOMOd1cB-RQ7QJAXcw8OORd8-1HTJVqGwIRU4dbJ517Wvpht4ZRXbSEEHkEureytb0UmkhVfnkCHp2i6ATkWmF2k4QsPaaNRVqDAsvaNZ1VW2Pn4LK5CC2Lgk/?imgmax=800&quot; width=&quot;452&quot; height=&quot;286&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;The story would be incomplete without proper Networking capability of Azure IaaS.What are the options?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;So what has MSFT done for Azure IaaS networking, some of the features include&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Full control over machine names&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Azure provided DNS- Resolves VM’s by name within the same cloud services. Machine names are modelled and explicitly published in the DNS services&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Use an on premise DNS Server.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Note: In PaaS Web and Worker communication happens via messaging in the VM world its DNS lookup. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Protocols Supported&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;UDP traffic supported – Load balancing incoming traffics and allows outbound traffic&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Support all IP Based Protocols (VM to VM communication)- Instance to instance communication TCP, UDP &amp;amp; ICMP.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Port Forwarding – Direct communication to multiple VM’s in the same cloud service.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Custom Load Balancer Health Probes- Health check with probe timeouts. HTPP based probing, allowing granular control of health checks.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Load Balanced Sets for IaaS&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Similar to Avail. Set is Load Balance Sets which allows a set of VM within the same cloud service to be load balanced.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-rdanxBeSeQ4g8Lh9h5ailFmjEcdzEVmBQ9Mn2BsfGcEuDPn3Jzi2tVpIu6sBn_IkeW1FKbjtfc23Ux8bKHJfAfvQY9dmc-rOTISj5VYCPoD2Xuo4hVDtp78eHQ23Pp1iuzKWu6-Yh-SR/s1600-h/image%25255B20%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAgbk2Jvi0OcOIXXxAOgl1RU5RxjGYoYTPitv3PzqJeAJO9cfnNuAmndLaE3WTIUk6HmSfDNzTfomiXnLekmyOcmevt4I4qwUn_oUjKkEn6Zpk103SKxNvL6emEsaPipW-mEY7qSWKKw9S/?imgmax=800&quot; width=&quot;554&quot; height=&quot;249&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Load Balance with Custom Probes&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In IaaS there are no agents installed on the VM , so there was a requirement to define a point which could be probed example /health.aspx which is the probe path, if we get an HTTP 200 it assumes everything is healthy.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz7ZR2KpvTYx3y2ktkP5coBgSYnObX0R4NVOcnKnnpVmOfVs1xYqXuaTIdxIlsIVnr13EoOnnDgiWEL6tuYmiIpxKBCEk5FAnKhVVsIqfZLv4zd2bGAabOL8D0TT1O1MKC0nKPGeBP66en/s1600-h/image%25255B24%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixowrqMr2KedGftGQixzaUd6aeGeTGnLnAM1KtDUf7reKKvg_d687pfna4GKSu7_Y-h47V3fCFNhHZr_Ab_hL8H8c9HnYGEb_VpWWNL87Tz_gzcovCx2UYMudHdTo8tnyZPXHNBo165hzX/?imgmax=800&quot; width=&quot;588&quot; height=&quot;267&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Cross Premise Connectivity&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Connecting with on Premise Active Directory or connecting on premise network Windows Azure Connect has been around, but not very well accepted. Windows Azure Connect using IP Sec tunnelling concept and agent hosted on both the machines which need to communicate. If one is doing a domain join with Azure VM the problem has been is to have the Agent install on the DC which has not gone very well with the many. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Alternatively Site to Site Connectivity – Windows Azure Network came into play. It provides a virtual network and gateway. The gateway using a standard VPN device.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1szJSxPYdQZcn0mnOVWeYVKLcLdNxi2vGuQMnRhfxj97tEC6nR8YL2eyNaV6FuNKQoJnZN9V350Ppqf8rMYt37rVWKekpYV4aDB6xfEw-8HdU3JQZRQ58HOX_4d89TgWLlrsKL1NAqGI0/s1600-h/image%25255B29%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1b-UCPz_FWJcWjv0Z0-OXEnGM9fK3HgnlCGMbIYu9zQ3EVtje50GAV2mF6yC1307ryutYM37_9VAYag08DXTe4_suy_mSG5wbV0DTCb95WkDrpgAAc9zkKEsnsKdcLHB2-QDx2DeJZorf/?imgmax=800&quot; width=&quot;551&quot; height=&quot;263&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What would one need to take care when migrating application to Azure IaaS?&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Sql Server installed on IaaS needs to be clustered so having 2 instances of the Sql Server in the same cloud service will help. One may need size up the data disks required. &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Built in Load Balancing Support, So if you deploy Web Application on IaaS one can be relieved on LB.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Integrated Management and Monitoring provided by Azure itself for VM;s&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Fault and Upgrade Domain for all VM’s are a must.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Windows Azure Network can be used to connect with an on premise application, domain join&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Hourly Billing Support: In addition to making it easier and faster to get started, these SQL Server and BizTalk Server images also enable an &lt;strong&gt;hourly billing model&lt;/strong&gt; which means you don’t have to pay for an upfront license of these server products – instead you can deploy the images and pay an additional hourly rate above the standard OS rate for the hours you run the software. This provides a very flexible way to get started with no upfront costs (instead you pay only for what you use). You can learn more about the hourly rates .&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Workloads to be shifted on cloud need to be looked from a compute, storage &amp;amp; networking stand point of view.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMYKaYeANYm29W71ak1Ur4Uc7LCbqdzd6Tam4JCApOVR5KWJh2JKYEi3rBZYFW7rTXorpQgD5SCMCdfPnaarkr8AcPrQmiVrHOcOnU1sWY2BUM8tCWRZp35F1YUtZFnicJfxxk7CuPJbK/s1600-h/image%25255B33%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwUrl-GWHjWqP-9NMS-N3CiPNQDoAaEzJxr6B1pLEPStoaC8iU4f4fl1CcHc02JBfqz9KvpcEJGikJrNGw5mdV1pEb7qJgvv5n1V7qrgGL3y_pmfxgXc8NcSUHcRpRvlg1MEM25boMmf0i/?imgmax=800&quot; width=&quot;578&quot; height=&quot;274&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The philosophy for the cloud world is lift and shift workloads.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;As of 2013 we still need to use a lot of application as is include to cloud and IaaS is an inherent part of overall PaaS. May be in years to come it will be a complete PaaS architecture.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/3213934584717378129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/3213934584717378129?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3213934584717378129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3213934584717378129'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/06/iaas-inherent-part-of-paas-architecture.html' title='IaaS Inherent Part of the PaaS Architecture'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmwvj46USoVG9sWyhq3TRQ2LarJQ7SavhgjIRSM5k1YOEQZgFHl3aAMVcqJjV66pSWj5gEI2iPW3_WUkgN6yYzbkMfsRqC3uoZJnfvFZUDjH3cLxUG5hG7ZI-mtn260dDeZZm46qZXzVut/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-4389384289834982057</id><published>2013-05-22T13:28:00.001-07:00</published><updated>2013-05-22T13:43:03.200-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile Architecture"/><title type='text'>Mobile Devices Application Architecture</title><content type='html'>&lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Mobile Platforms are increasing finding there right places in the enterprises. The Mobile Platform vary from an insignificant non UI based devices to a full-fledged tablets and SMART TV. The compute and storage are a fast moving segment for mobile device capabilities, building applications for these platforms can be a daunting task for developers. Most mobile devices have connectivity in some form or the other and the applications build for devices connect with services which are hosted on premise OR cloud. Concentrating on the mobile device Architecture it would be good to have some guidance for developers what constitute a typical mobile architecture. &lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsIkPiCTiAY6SNBNRZHqFpI8365tATZlgt0W2dgZiJlNRTDUzfjOtN6WIhcfZ5N6SDRrENqD0-KbcLVzJKcvWy21jEcR1bjkYRu4xvZcerT4d4PqvDvY73-v6CWPKCdSPeCdXZPKCJhGna/s1600-h/clip_image002%25255B3%25255D.png&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUEjf0elws5gr83at9y2l0PLO60pyG-WaSYfUtfmjM_0NuFcPykpU0HnG5PW1xX5YaSGc730vbKTTBRhL90a6EnLUxeeqasX-1r3xv69araGebiyjh3WlYfVgVo13cG5-EHAmFKEWEGTZj/s1600-h/clip_image002%25255B5%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image002&quot; border=&quot;0&quot; alt=&quot;clip_image002&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU7x0aeHfzJwtKV7eV2uz_xD4ApGvM1Wxrd0jtW8V_KaMmqlIWdraJ4JWPyIxnCgDc5VgblfgkC_iLF5M3_3okE-6k8wZnSnlTmCNrlJRQH_-jhXQd2gUBi4JFy8hoRSmd84-opVx7uu0T/?imgmax=800&quot; width=&quot;508&quot; height=&quot;323&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;High Level Device Architecture&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Since most mobile devices as of current are UI intensive the starting point is more around the UI architecture. &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The High Level Mobile /Device Application Architecture includes the following components. It’s typically a layered architecture.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzq-OjT25_9Z73_Bv8KhAljC-vuh8DbNMGZhPvLQXCAJqs2PRAUm5qWKvBVHcS3UwTqjK9vU39Nxa7L2uCxAchYuMpAy5cXn_AF5s_vdZVfOZoKh4i1LhzkU43o9AM5TB9-1dSqen9oZN/s1600-h/clip_image003%25255B3%25255D.png&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvnax5sQi9hqDtbl2xSo5EJ4VBYKn1wmBLrOA_PCSSniid17C5BXQIpjdKR8foEGvv5WMfnFpsPGuMADbXKSa4mrfmOoLdbpW5-IhN8a7EeHg191PLvqsrG7DkqqgsQraSPu1uDLqEZiUp/s1600-h/clip_image003%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image003&quot; border=&quot;0&quot; alt=&quot;clip_image003&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoFcIECnNKu1eW4fXCVezqwxmmb5vLH05VYpeIZW-oJI7nK7igbsdrj-cZDH0dIZ8t5REKeyV66pWI2wgJgB6u4B3dXa5GJjUEO0q2CX8IYtdd7U2nrBaw7MRsoMOqjRe1deClO8It8E8_/?imgmax=800&quot; width=&quot;390&quot; height=&quot;385&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Presentation Layer&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The UI architecture is heavily driven but certain patterns&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;b&gt;MVC &lt;/b&gt;– The &lt;b&gt;Model View Controller&lt;/b&gt; is an architectural pattern that divides an interactive applications into 3 components. The model contains the core functionality and data. View displays information to the user. Controller handles the user input. View and controller together comprise the user interface. A change propagation mechanism ensures consistency between the user interface and model. This architectural pattern came up first with Smalltalk 80 and post that a large number of UI frameworks have been built around MVC and now become a defacto standard for UI development. For more on MVC refer &lt;/font&gt;&lt;a href=&quot;http://www.laputan.org/pub/papers/POSA-MVC.pdf&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;b&gt;Delegation&lt;/b&gt;- Most User Interface in mobile devices are rich from a functionality standpoint view and have delegate i.e. transfer information, data and processing to another object typically referred to as a background object. Delegation is a design pattern. For more on Delegation refer &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Delegation_pattern&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. The &lt;b&gt;delegation pattern&lt;/b&gt; is a &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Design_pattern&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;design pattern&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; in &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;object-oriented programming&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; where an &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Object_(computer_science)&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;object&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;, instead of performing one of its stated tasks, delegates that task to an associated helper object. There is an &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Inversion_of_Responsibility&quot;&gt;Inversion of Responsibility&lt;/a&gt;&lt;/i&gt; in which a helper object, known as a &lt;b&gt;delegate&lt;/b&gt;, is given the responsibility to execute a task for the &lt;b&gt;delegator&lt;/b&gt;. The delegation pattern is one of the fundamental &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Abstraction_(computer_science)&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;abstraction&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; patterns that underlie other software patterns such as &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Object_composition&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;composition&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; (also referred to as aggregation), &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mixin&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;mixins&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; and &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Aspect_(computer_science)&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;aspects&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;b&gt;Target actions&lt;/b&gt;- The User Interface is divided up into View, Controller which dynamically establish relationships by telling each other which object they should target and what action or message to send to that target when an event occurs. This is especially useful when implementing &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Graphical_user_interface&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;graphical user interfaces&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;, which are by nature &lt;/font&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Event-driven_programming&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;event-driven&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;. Most UI on devices are event driven based on the user input raise the desired event and the event handler associated with the same will executed by the event handler associated.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;b&gt;Block objects &lt;/b&gt;– Most device based application interact with services or other applications for data services or more. The need of having asynchronous call backs will help saving compute. The services have to modelled differently for devices that’s a whole different topic will be covered in a separately.&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Management Layer&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The management is crucial piece in devices ranging from memory management, state management all the way to device management. Below are some of the key components.&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Memory Management&lt;/b&gt;- &lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Device have less usable memory and storage in comparison to a desktop computer, all applications built need to be very aggressive on deleting unneeded objects and be lazy about creating objects.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Foreground and Background Application Management&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Applications on device have to be managed differently when in foreground and background. The operating system limits what your application can do in the background in order to improve the battery life and the user experience with the foreground application. The OS notifies your application when it moves from background to foreground which requires special handling for data loading and UI refresh. So typically from transition between these states what does one really have to take care? &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Moving to Foreground:&lt;/strong&gt; Respond appropriately to the state transitions that occur. Not handling these transitions properly can lead to data loss and a bad user experience.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;b&gt;Moving to Background&lt;/b&gt; make sure your app adjusts its behaviour appropriately. Devices which support multitasking have this option in other cases application is terminated. The elementary steps in taking a snapshot image of the current User Interface, save user data and information and free up as much memory as possible. Background application continue to stay in the memory until a low memory situation occurs and OS decides to kill your application. Practically speaking, your app should remove strong references to objects as soon as they are no longer needed. Removing strong references gives the compiler the ability to release the objects right away so that the corresponding memory can be reclaimed. However, if you want to cache some objects to improve performance, you can wait until the app transitions to the background before removing references to them. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Examples of objects that you should remove strong references to as soon as possible include: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Image objects&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Large media or data files that you can load again from disk&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Any other objects that your app does not need and can recreate easily later&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Handling Interrupts&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The devices are more complicated than one can think classic scenario handling interrupts like an incoming phone call, when an alert-based interruption occurs, such as an incoming phone call, the app moves temporarily to the inactive state so that the system can prompt the user about how to proceed. The app remains in this state until the user dismiss the alert. At this point, the app either returns to the active state or moves to the background stat. In most devices in this state the application don’t receive notification and other types of events. There needs to be some nature of application state management.&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;State Management&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Irrespective what state the application is in foreground, background or suspended, the application’s data has to stored and restored. Even if your app supports background execution, it cannot run forever. At some point, the system might need to terminate your app to free up memory for the current foreground app. However, the user should never have to care if an app is already running or was terminated. From the user’s perspective, quitting an app should just seem like a temporary interruption. When the user returns to an app, that app should always return the user to the last point of use, so that the user can continue with whatever task was in progress. Preserving and restoring the view controllers and view is something which has to be implemented application specific. State preservation needs to considered at the following scenarios&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Application delegate object, which manages the top level state&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;View Controller object which manages the overall state of the app’s user interface.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Custom View, custom data.&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;State preservation and restoration is an opt-in feature and requires help from your app to work. When thinking about state preservation and restoration, it helps to separate the two processes first. State preservation occurs when your app moves to the background. The restoration process uses the preserved data to reconstitute your interface. The creation of actual objects is handled by your state management.&lt;/font&gt;  &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;Core&lt;/b&gt; &lt;b&gt;Data Management&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The Model in the MVC in the Presentation Layer holds references to business data which may be displayed in the views. The Models generally can end up holding a lot of data can become a major performance issue. The Models should ideally load data which is most relevant to the scenario with support for lazy loading. The responsibility of loading Core Business Data in the Business entities is handled by the Core Data Management. Core Data is generally a schema driven object graph management and persistent framework. Fundamentally, Core Data helps save the model objects, retrieve model objects from the business layer. &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Core Data provides an infrastructure for managing all the changes to your model objects. This gives you automatic support for undo and redo, and for maintaining reciprocal relationships between objects. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It allows you to keep just a subset of your model objects in memory at any given time, &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It uses a schema to describe the model objects. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It allows you to maintain disjoint sets of edits of your objects. This is useful if you want to, for example, allow the user to make edits in one view that may be discarded without affecting data displayed in another view. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It has an infrastructure for data store versioning and migration. This lets you easily upgrade an old version of the user’s file to the current version. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;It interacts with Services or Business Level API to perform CRUD on the business entities.&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Core Data Management is runs on a background thread(s).&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Application Resource Management&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Aside from images and media files, most devices have a lot more capability ranging from accelerometer, camera, Bluetooth, gps, gyroscope, location services, telemetry, magneto meter, microphone, telephony, Wi-Fi….. Most of these have platform based API to access the same. In certain cases there may be a requirement to manage this resources for example video telephony module. The nature of the API provided by platform provides direct access mechanism to access these resources. &lt;/font&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Services Helper Layer&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The Services Helper Layer on the device serve the purpose providing caching, api, logging or notification services. The Service Helper Layer function more as an assistance to the device hiding the complexity of the inner working thus simplifying the programming model for the developer and not having to worry about low level functions.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Caching Services&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The application running on the devices does have limited memory and compute. Most UI elements, pages, data may require to be in memory while they may not be displayed. A efficient disk and memory based caching strategy needs to implemented for the application for better performance.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;API Services&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;In the cloud world or on premise world the devices are likely to talk via services. These services are infact well defined API’s of the business. APIfying the services is a core concept on the cloud which will be covered later. A standard API is &lt;/font&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIbQi24aqjU1cnVARCRQhPLYCXOGhCgHY8PDPt22oXguJlyteC-VzqsdWRWLQNvgpdSACEkDEF9z57LBMTGa3DjUokcN0zrJGyHP4MULmeyks0IuskNv1TGXwV3qktGiMBQ5RfvvZ9m18E/s1600-h/clip_image005%25255B3%25255D.png&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD_WBx-NdGkPbkRRBwUOw_IT9tRWp__eOPHqji0y6kXvH-pGoYr1jn_PoOfEJGPUcoLi_E2eCs9pqbFFGFv214r68jbTsG090oANeJx0uiBLPLua_SvbfzVIo0LXbcUhPXL_XXQ5u-8lsD/s1600-h/clip_image005%25255B4%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;clip_image005&quot; border=&quot;0&quot; alt=&quot;clip_image005&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_LYEBy1HL4pcI2yXLzwvPlVya0EsKfgJl7XlGfv_3U3X_IPBMBiv3-bcRZ5CtrlaKFQc4bp7ruepcRW70sogxdVOT0uuUFzTa9VQcGCnv5i3YSvwdk7k9dyAJopTm2LBiFEqXmKLcYsQr/?imgmax=800&quot; width=&quot;230&quot; height=&quot;465&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The API Services will interact with the Services API and manage the lifecycle of the service call asynchronously. It will manage aspects such as format conversion, lazy loading and much more.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Logging Services&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;This is a generic services provides for application level and business level logging. The data collected will be sent back to the Services serves multi-purpose use.&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Notification Services&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;This is asynchronous module which will manage application based notification and events from the services and other application&lt;/font&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/4389384289834982057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/4389384289834982057?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4389384289834982057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/4389384289834982057'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/05/mobile-devices-application-architecture.html' title='Mobile Devices Application Architecture'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU7x0aeHfzJwtKV7eV2uz_xD4ApGvM1Wxrd0jtW8V_KaMmqlIWdraJ4JWPyIxnCgDc5VgblfgkC_iLF5M3_3okE-6k8wZnSnlTmCNrlJRQH_-jhXQd2gUBi4JFy8hoRSmd84-opVx7uu0T/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1875053621709792639</id><published>2013-05-03T01:33:00.001-07:00</published><updated>2013-05-03T01:33:56.579-07:00</updated><title type='text'>Azure SDK 2.0 - Quick Snapshot</title><content type='html'>&lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Azure SDK 2.0 released 2 days ago pretty good features a lot of work done in Diagnostic areas &lt;strong&gt;this was long over due&lt;/strong&gt;, high memory VM and the wondering &lt;strong&gt;Message Pump in Service Bus&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Here is a quick snapshot of the important features - &lt;/font&gt;&lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2013/04/30/announcing-the-release-of-windows-azure-sdk-2-0-for-net.aspx&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Blog to Azure 2.0 Features&lt;/font&gt;&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Stream Diagnostic Logging&lt;/b&gt; is a good feature looks like limited to Web Site - This may change are logging capabilities.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Cloud Service Support for High Memory&lt;/b&gt; VM instances 4 core x 28GB RAM (A6) and 8 core x 56GB RAM (A7) VM sizes.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Faster Deployment Support for Simultaneous Update Options&lt;/b&gt;- this is more of a parallel update if you cloud package consists of multiple web and worker roles this will do parallel update as opposed to earlier sequential&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Cloud Services also has a separate diagnostic tab&lt;/b&gt; - The custom plan is pretty rich and enables fine grain control over error levels, performance counters, infrastructure logs, collection intervals and more.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;View Diagnostic on a Live Service,&lt;/b&gt; the interesting part here is dynamically turn on detailed diagnostic capturing without having to redeploy.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Storage 2.0&lt;/b&gt; looks a little improved with capabilities of create and delete Windows Azure tables from Visual Studio Explorer.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;Service Bus Enhancement&lt;/b&gt; - Message Browse Support enables to view messages available in queue without locking the message or performing an explicit receive operation on it.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;b&gt;New Message Pump Programming Model&lt;/b&gt; - Similar to event driven or push based processing model approach support concurrent message processing &amp;amp; enables processing message at variable rate. This is a pure replacement to the polling based mechanism to a pure event driven approach.&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;b&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;// Example Code for Pump Programming Model&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;var eventDrivenMessagingOptions = new OnMessageOptions();&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;eventDrivenMessagingOptions.AutoComplete = true; – // This indicates post reading the message it’s removed from the queue&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;eventDrivenMessagingOptions.ExceptionReceived += OnExceptionReceived; à Cleaner Exception Management Handler&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;eventDrivenMessagingOptions.MaxConcurrentCalls = 5; // Multiple Readers at the same time&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Calibri&quot;&gt;// Subscribe for messages.&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;var queueClient = QueueClient.Create(&quot;customers&quot;);&lt;/font&gt;  &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;2&quot; face=&quot;Calibri&quot;&gt;queueClient.OnMessage(OnMessageArrived, eventDrivenMessagingOptions);-//On MessageArrived is the Handler which is written when a message arrives.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Find example for the same here &lt;/font&gt;&lt;a href=&quot;http://fabriccontroller.net/blog/posts/introducing-the-event-driven-message-programming-model-for-the-windows-azure-service-bus/&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Message Pump Programming Sample&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;· &lt;b&gt;Power Shell Advancements &lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Additionals&lt;/font&gt;&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;a href=&quot;http://channel9.msdn.com/Shows/Cloud+Cover/Episode-106-Scott-Guthrie-Discusses-Windows-Azure-SDK-20&quot; target=&quot;_blank&quot;&gt;Scott Guthrie on Channel 9 Azure SDK 2.0&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;a href=&quot;http://channel9.msdn.com/Blogs/Subscribe/Whats-new-in-the-Service-Bus-NET-SDK-20&quot; target=&quot;_blank&quot;&gt;Pump Messaging using Azure SDK 2.0&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1875053621709792639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1875053621709792639?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1875053621709792639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1875053621709792639'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/05/azure-sdk-20-quick-snapshot.html' title='Azure SDK 2.0 - Quick Snapshot'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-1383321294144333896</id><published>2013-04-07T10:33:00.000-07:00</published><updated>2013-04-07T21:59:21.891-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Best practices for Large Azure Projects"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Large Azure Deployment"/><title type='text'>Large-scale Implementation on Azure Platform</title><content type='html'>&lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;/font&gt;&lt;font face=&quot;Calibri&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;I have been closely reading the Azure CAT (Customer Advisory Team) which helps a lot of customer deliver large, complex projects. The Azure CAT site can be found &lt;/font&gt;&lt;a href=&quot;http://windowsazurecat.com/&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt; guidance on how to use different architectural artefacts in Azure. After some digging this what I have come to understand are some of the largest implementation on Azure Platform. This is however some amount of reverse engineering and research. Hope this is helpful to the readers.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;So what has Azure handled so far from a number standpoint of view?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;There can various architectures which Azure addresses but in a nutshell its enterprise ready. From a number standpoint of view t&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;his is what Azure is handle for applications where each line item below is an individual applications&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Largest sharded SQL database&lt;/strong&gt; – 20 TB- Sql Azure maximum container size of 150 GB, so there have been multiple containers used to resolve the size issues.Of course the querying strategy around this has to be well defined.&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Largest number of database-&lt;/strong&gt; 11,000&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Most number of worker instances&lt;/strong&gt; – 24,000- This is an on demand application which spins 24k worker role instance to perform some complex calculation and shuts down. This is more like HPC to address complex algorithms.&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Largest Customer Application-&lt;/strong&gt; 50 PB&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;So what are the largest case studies in Azure?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;6&quot;&gt;Florida Presidential Election 2012&lt;/font&gt;:&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;This is not the largest but it was highly mission critical. Find the complete write up &lt;/font&gt;&lt;a href=&quot;http://blogs.msdn.com/b/windowsazure/archive/2013/01/31/voter-enablement.aspx&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here.&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;font size=&quot;4&quot;&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;This was a mission critical for a couple of days with some very high volume numbers to manage.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Florida Election Presidential Election 2012 had the following metrics&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Max peak 40k page hits / second&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;6 million hits peaked in 1 hour&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Caching in front DB was a big architectural success.- The very nature of the application been short lived it made sense to push as much data into the cache and have separate update strategy&lt;/font&gt; &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;3 minute TTL&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Separate Worker Role to refresh cache. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What does the architecture look like?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;/font&gt;&lt;font face=&quot;Calibri&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlIxBFPxlplPwb8Ae6WvG0hGKONC8MFI5opxSQhiznYoOOzEax4nj81sOIJsdBGmRBBI6nujrJvScx5Y4PnM4fC-prGf92tG2oIToRvbRT5tSt9QGvODJhwzRbrtm3vInqdk_xyxpALIJ4/s1600-h/image17.png&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0IOtP2K-VuAYANkeII387mceZg679dzhtDG0lwe2LMgdpXncYTTvri_hhyphenhyphenWusoevUns6rQ94bEvVGMomc-EXZLiwlgcacWcaqoX2VlWnYIOad-WpskWbA2XO9K_KyD_oQ9k11FgS6786V/s1600-h/image64.png&quot;&gt;&lt;img style=&quot;display: inline&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxts8c5eLN-QfUhNwIbacQHrJiGodFEuJkijqIeBSPoQzwbqe0e19HrE_KWz3oqzCRmCtwsIAsKa_zD3P5DtAtu3sfvopKtRL3sthBgKkgv_zweBjzzFGArYATVo2QMDa9xLzXXOR2xthF/?imgmax=800&quot; width=&quot;606&quot; height=&quot;457&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;strong&gt;Enight Florida Presidential Election&lt;/strong&gt; – From an architectural decomposition standpoint of view below it is the layered architectural explanation below.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font color=&quot;#0080ff&quot;&gt;&lt;strong&gt;Presentation Layer&lt;/strong&gt;:&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Main URL - &lt;/font&gt;&lt;a href=&quot;https://enlight.elections.myflorida.com&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;https://enlight.elections.myflorida.com&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt; using Azure Traffic Manager with Availability , performance fail over between the Primary Site US East Coast &amp;amp; US North Central. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Primary site of the application was hosted on US East Coast. &lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Enight Public Site&lt;/strong&gt;: This is a set of web roles hosting voter turnout, election result Florida state wide and other real time election related data. The Application had a lot of real time data which was expected to come in from various data sources. The web role will read the data from the cache if valid if not will get the data from the database.&lt;/font&gt; &lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&lt;strong&gt;Enight SOE&lt;/strong&gt;-&amp;nbsp; At a very high level the Enight SOE acts as data synchronizer between the primary and the secondary. Additionally it reads the data from the blobs and also pushes it to the secondary.&lt;/font&gt; &lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#0080ff&quot; size=&quot;4&quot;&gt;Caching Layer&lt;/font&gt;&lt;/strong&gt; &lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Azure Dedicated Cache Roles Used. &lt;/font&gt;&lt;font size=&quot;4&quot;&gt;Given the frequency of reads and writes been very high in a short period of time, It was advisable to go with in memory database i.e. cache. All the entities would continue to remain in the database until 3 minutes TTL. A separate worker role to refresh the cache. &lt;strong&gt;The Sql Azure Database reads, writes ended up using a CQRS based patterns to manage the reads, writes – this is a guess.&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#0080ff&quot; size=&quot;4&quot;&gt;Database Layer&lt;/font&gt;&lt;/strong&gt; &lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Storage Layer comprises of Sql Azure and Blob Storage( data coming in from various counties.&lt;br&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Identity &amp;amp; Access Management&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The IDM used here is the standard provided by Azure Access Control Service. The out of box features of Azure ACS like integration with Facebook and other social media very typically used.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Azure Auto Scaling Application &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Given that peak traffic could get to 40k pages hit/second. The need of a good auto scaling application must have been required to get the elastic advantage.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;* Monitoring Tools most probably used were Cerebrata.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;6&quot; face=&quot;Calibri&quot;&gt;Bing Games&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;Bing Games- MSFT has finally got to a culture of eating its own dog food, Bing Games is one such example where the Scoring Tracking and Ranking System was entirely on Azure. Find the articles &lt;/font&gt;&lt;a href=&quot;http://arstechnica.com/business/2011/09/microsoft-eats-its-own-tasty-cloud-dog-food/&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;For some reason case study has been removed from the MSFT site.Thanks to Google I managed to get the cached page &lt;/font&gt;&lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache:e52-mWfOAT8J:www.microsoft.com/casestudies/Case_Study_Detail.aspx%3Fcasestudyid%3D4000008310+&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=in&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below are the high level metrics&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;1900 instances- app servers (various roles)&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;398 SQL Azure database- Scale Out&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;30 million unique users/ month&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;200k concurrent users&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;3 months, 7 developers.&lt;/font&gt; &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;99.975% uptime in past 12 months&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Why did they pick up Azure Database?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Given the database access patterns it was better to pick Sql Azure over Table Storage. This is however not a defacto standard it depends on the requirement. The choice of Sql Azure was based on the fact they had an existing application already in Sql. The testability i.e easy to pre-populate with millions of records faster.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Partition Strategy&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Each user the data would remain the same database. So the scale out based on users was easier and faster. The partitioning strategy is static by nature.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Production Statistics&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;1200 Azure database request/second spread across all partitions during peak loads.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;18k connections in Connection Pool and which could grow with traffic&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Database &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;90-10 read vs. writes&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Glassboard.com&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Glassboard.com is similar to facebook is a private social network for groups. This is a mobile only application. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Initial Architecture&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4VZqT-FprX5bb94LbCbMF0zS22Qm8TYrEtlR-zQuM6YFHpRKA1y4CTXWerD6J3vIi3oPUyjrGKEf-GtFxige1pg_q2jXZ-MCiqp6P_9JVKl2SvsOY3I_jO6usKSegiDFk8cfrr6j61jEc/s1600-h/image26.png&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLuvbjNXM2j1Ef9pbYt5uy1BmiNk1wWA6Yhyymqu1RYGtVnQvsuhfTXcefb4QgnTsUq6RjLTBrOXg2ADOvanm-tS4KNc9pW-0qlkpNporynkMXGNf3dtW7UnR1_EHsnTPJrGRjxZTJUstI/s1600-h/image46.png&quot;&gt;&lt;img style=&quot;display: inline&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieZEtzwrYJqpIEYM4yq2DnLm1mavvVcROjFnfpw_xM6_rkoKJVDKLBrVIBEl1D8fYHnsBMIRDCOjD2lbPbxApsxdf5HulfB1fD84daffOFbCQlk0mcxtzXwqu8cn8O_xe63RuQNxhdhyjk/?imgmax=800&quot; width=&quot;696&quot; height=&quot;545&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Initial Architecture pretty straight forward REST based API and table, queue or blob storage. Additional components such as social collaboration and analytics.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font style=&quot;background-color: #ffffff&quot; color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;My personal opinion is this architecture is not quite right, below section I explain why and the glassboard folks have found &amp;amp; corrected the same.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;&lt;u&gt;The Wrong Architecture for Devices – Which otherwise would be correct in all cases……..&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What started up as REST API based programming turned out a total disaster as the underlying storage was table storage. Its not that the table storage was a disaster. Its just that when we start designing the very academic way of doing thing we have an API for every call, soon to be realized the table cost for each read will start hitting your pocket. With a little fiddler exercise one can realize the same&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&amp;lt;excerpt from Glassboard site&amp;gt;&lt;/font&gt;  &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;To demonstrate the problem I have set up my Glassboard API &lt;strong&gt;&lt;font style=&quot;background-color: #ffff00&quot;&gt;instance to do no caching&lt;/font&gt;&lt;/strong&gt; whatsoever. I then ran a unit test which simulates a user getting his Newsfeed, then posting a status. I highlighted each set of repeated calls in a different color.&lt;/font&gt;  &lt;p&gt;&lt;a href=&quot;http://sepialabs.com/blog/wp-content/uploads/2011/08/Fiddler_Repeated_Requests.png&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;img alt=&quot;Repeated Storage Requests&quot; src=&quot;http://sepialabs.com/blog/wp-content/uploads/2011/08/Fiddler_Repeated_Requests-1024x294.png&quot; width=&quot;713&quot; height=&quot;360&quot;&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;font size=&quot;4&quot;&gt;&lt;/font&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&amp;lt;/excerpt from Glassboard site&amp;gt; Find the complete commentary &lt;/font&gt;&lt;a href=&quot;http://sepialabs.com/blog/&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Not to get alarmed the architectural change on going the feeds way i.e one call like a feed which has pretty much all the data at startup and incorporating caching helped. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Especially when getting into device based programming we need to bring in some of the client server concepts in here this helps a ton.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;The solution is &lt;/font&gt;&lt;a href=&quot;http://glassboard.com/blog/2011/09/29/218/&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;6&quot; face=&quot;Calibri&quot;&gt;Samsung – Worldwide TV Management&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Samsung SMART TV started as a concept now a reality, the device has a base software which needed to be updated from time to time. The cloud was the perfect solution assuming these TV’s are connected to the internet. Azure or AWS became the obvious choice not knowing which way the sales would go for Samsung, betting the update and management solutions on the Platform As A A Service was a good decision. Some Key Features&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Frequent updates with new applications and software changes for better support and compatibility.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Due to high sales the need of a scalable and elastic system was required.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Utilized 20 large size web roles with ASP.NET.&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;Have a good Web API layer for the same functionality find the developer documentation &lt;/font&gt;&lt;a href=&quot;http://developer.samsung.com/smarttv&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Calibri&quot;&gt;.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;u&gt;Caching seems the one candidate which all azure application need for rescue.&lt;/u&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Solution Architecture&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEialLUzgOth5exMaJqnHw1fx8FEzP1eEdvY6Df0ZZPgTgae83tsq1AW6gd4g2A-zingKLsI4PBSDI07e__lmCOp8YlavM3AkcFEhAvP59G79eodzkDlC8ETbjvF1AzwwWDRVhNoydAYwnki/s1600-h/image30.png&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfRu-OwxLgXLblRH07x0FzbbfkMc5f2QJCYY26d2aP8Snvmfhu6ApveI-G7vQtZf2B8jNDsPe5cVclBz3KO2RFg-BAw7dGs84Q3gjduoU44Ps4Tn9rQEIkH0vHFX4rGITdhBdSh5QqlytM/s1600-h/image60.png&quot;&gt;&lt;img style=&quot;display: inline&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsqSATswjwZG46Nmxe9GUupEKiDnfki5IrjHW9tEB2rrH9VQ-PHHNebowZL8Fwfp929zOrv_A29Q_ELqqRgwCYamOoARDQwLbv8ZgQuK3WcRi-bCekY1m7LDSm4F-2JuTKDB2aZr2VQGeX/?imgmax=800&quot; width=&quot;703&quot; height=&quot;440&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Architecture is fairly straightforward.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Firmware Download Website&lt;/strong&gt;- Set of web roles which connects with the Smart TV via set of REST based API post authentication will check for the updates and push the updates to the device. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Administration Firmware Upload Website&lt;/strong&gt; – A set of web roles which provide basic administration and reporting functionality. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Worker Role&lt;/strong&gt;&amp;nbsp; which does task automation – firmware encryption and batch updates. Additionally push the logs to the Sql Azure Database. The updates goes to a blob storage and uses the Azure CDN functionality to push to edge servers.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;6&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;MYOB&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;MYOB(Manage Your Business) is a large Australian based ISV developing Accounting software for small business. The new release AccountRight Live, lets users run their account on a PC or a cloud. Or both at once depending on their preferences.&amp;nbsp; The hybrid arrangement was not however a cunning innovation design to catapult the company and its customer into a bold and cloudy future.&amp;nbsp; Based on surveys run with the customer did MYOB decide on rolling out a hybrid strategy. Users count about 150k.&amp;nbsp; Find the link to the site &lt;a href=&quot;http://myob.com.au/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Based on the multi-tenancy requirement each customer required a separate database. Caching is used as standard feature, reserved CPU per database.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;MYOB Solution Architecture&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Each user installs the client software via a box offering&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Choice to use the business and data tier either on Azure or on premise&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The application is developed using C#/.NET using LINQ to SQL and Entity framework.&lt;font color=&quot;#ff0000&quot;&gt; Which is very bad……. LINQ is fairly single threaded process which works very well on an Intel processor with a high clock rate. On a web, worker role AMD processor with very low clock rate, the performance on Azure will be slower. Work around is run LINQ on small CPU with a single core.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Database on premises and Azure are kept in sync via Sync framework&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Each customer has their own Azure SQL Database per business entity.&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#000000&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;DB to be backed up nightly using DAC Import/Export services keeping 2 days rolling backup files in blob storage.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoIx7P7FPJ4-ZtkGpBhet3bHRuf30GiUSuPbXzZRy7ZrwoFTA2q_f4F_VHspyxlMbQoYGSnf1pQNXu-kUEwjCOSOtn0uWbQ_jmbb-TUeX4_8m3V4mNR-pCfgCBCJTi0zWYp2j5sm5Tb7Zk/s1600-h/image%25255B58%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkNoKDhe-THBUBQlie_Yj-3ZokDaXr0W1VMTUvNQ914tSoGDr4mnXwGuFHT4aziXYJWktAG-dMS2-6kVSlqzeXSmOCWdnQ2xZkAElJ5pOO4y6WZadNZj7amX3MEkSR1Kbm-OS-c8o43RLv/?imgmax=800&quot; width=&quot;531&quot; height=&quot;393&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Identity Management&lt;/strong&gt; used is Azure ACS (STS inbuilt) most probably with a Custom Identity Provider with option of windows live. With some guess work I see MYOB Identity Management use ADFS to integrate with corporates Active Directory as well.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A simple layered architecture. &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;User Interfaces&lt;/strong&gt; can be a browser, Client Desktop thick client.&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Services Layer&lt;/strong&gt; – This includes the Collaboration Services, Authentication Service, Customer File Service, Huxley Services (Transactional Services). &lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;All services are exposed as REST API. The Client Desktop connects with the Collab Service post authentication which uses the Azure ACS receives the ACS token. The Collaboration Services validates with the Billing System and post that connects to the correct User Database depicted as User DB1… DBn.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Storage Services:&lt;/strong&gt; This is basically a Sql Azure set of databases.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What I love about this architecture is the simplicity. Keep tenancy at a database perhaps may not be the most economical solution but its simple.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Caching has been used at every layer. Judging from the speeds they seem to have a set of dedicated caching servers how many is guess work again.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;MYOB Implementation had some key lessons to learn – what are they&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Cloud Platforms&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Enable massive scalability&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;HA at lower costs&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Expose rich cloud based API’s &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Identity Foundation&lt;/font&gt;  &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Well integrated with WCF and highly customisable Scaling Database&lt;/font&gt;  &lt;li&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Sharding is the foundation&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Issues on WCF throttling&lt;/strong&gt; had been handled with different architectural solutions. Some of the solutions are here&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font color=&quot;#333333&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;a href=&quot;http://www.devproconnections.com/article/net-framework2/concurrency-and-throttling-configurations-for-wcf-services-122586&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://www.devproconnections.com/article/net-framework2/concurrency-and-throttling-configurations-for-wcf-services-122586&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;  &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/avkashchauhan/archive/2011/08/23/windows-azure-avoiding-wcf-service-throttling-by-increasing-maximum-concurrent-connection-count-in-wcf-service-configuration.aspx&quot;&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;http://blogs.msdn.com/b/avkashchauhan/archive/2011/08/23/windows-azure-avoiding-wcf-service-throttling-by-increasing-maximum-concurrent-connection-count-in-wcf-service-configuration.aspx&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;5&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Couple of Key Areas to watch out for in Azure Application&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;If Mobile is a part of the overall architecture special considerations are required, well have a separate post on the same.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Study Storage choice properly Tables, Sql Azure – there is no straightforward answer it varies.Every Sql Azure database has been allocated a maximum of 180 concurrent threads&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Use Caching wherever possible. This is an architectural decision not a developer.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;Code Right-&amp;nbsp; Profile the code as much as possible.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Sql Azure is a Relational Database as a Service.SQL Server is the core engine and Sql Azure is logical abstraction over the same. SQL Azure is a subset of SQL Server features. It provides tremendous scale out features.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;&lt;font size=&quot;4&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/1383321294144333896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/1383321294144333896?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1383321294144333896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/1383321294144333896'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/04/large-scale-implementation-on-azure.html' title='Large-scale Implementation on Azure Platform'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxts8c5eLN-QfUhNwIbacQHrJiGodFEuJkijqIeBSPoQzwbqe0e19HrE_KWz3oqzCRmCtwsIAsKa_zD3P5DtAtu3sfvopKtRL3sthBgKkgv_zweBjzzFGArYATVo2QMDa9xLzXXOR2xthF/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-7780100567632876682</id><published>2013-03-16T02:21:00.000-07:00</published><updated>2013-03-17T11:35:54.333-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Applications"/><category scheme="http://www.blogger.com/atom/ns#" term="Failsafe Computing"/><title type='text'>Failsafe Computing in Cloud</title><content type='html'>&lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Origins of the Cloud Computing Platform are closely linked to Service Oriented Architecture. In the cloud we think of everything as Service. These services have SLO’s ( Service Level Objective) very similar to SLA’s.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Why Failsafe Computing in Cloud?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;With more and more organization increasing adopting the cloud platform, the perils of the same are many. We have seen amazon go down a couple of times in the 2012,2013 &lt;a title=&quot;http://www.slashgear.com/amazon-com-is-down-its-not-just-you-update-back-in-business-31267671/&quot; href=&quot;http://www.slashgear.com/amazon-com-is-down-its-not-just-you-update-back-in-business-31267671/&quot;&gt;http://www.slashgear.com/amazon-com-is-down-its-not-just-you-update-back-in-business-31267671/&lt;/a&gt; &amp;amp; Azure Outage &lt;a title=&quot;http://www.zdnet.com/microsofts-december-azure-outage-what-went-wrong-7000010021/&quot; href=&quot;http://www.zdnet.com/microsofts-december-azure-outage-what-went-wrong-7000010021/&quot;&gt;http://www.zdnet.com/microsofts-december-azure-outage-what-went-wrong-7000010021/&lt;/a&gt;.&lt;strong&gt; The need for Failsafe Computing in Cloud is Now&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Failsafe Computing in Cloud is not an after thought like any other architecture discipline its one of the non functional requirement which has found its rightful place.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Any application build for cloud is structured around services. These services have workload associated with them. Services can be as generic as Sales Force Automation or Retail as an overarching services which can comprise of many other services to make it happen. The workload is a more broader concept example below.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY-teM3XE93W7h8I9JnhNNXCKmY2zo6DKgvvtPw-c9B1uHGW9Cq-ukXANDugk7EYaKUsIN6C4pTgOu8OGKeb0II0wWSSGKIu5pIRubQL-95Ldek2Awc7iHz1ZreDGlW_pXl8t4-MlZlF_4/s1600-h/image%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI6hYvZ_Wf5c5JhGQOmIufyhksnp7xtRDhZ1RWmxURFiwSfKElfBlecCb4Qr7lOG4NFL-3Z-PVN13BE8CfIO0rcD20BaAOMc5QE7ZqLS7MPeZE8DxnselSPj-KNfm2IG-aNovwGVIqWD4I/?imgmax=800&quot; width=&quot;480&quot; height=&quot;302&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What Failsafe Services really mean?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;We architect the cloud platform on the guidelines of SOA, We define Service as basic unit of deployment of course it starts from conceptual architecture. For example a retail service is an independent functionality in the cloud going about doing its regular business. We’d expect this service to have defined SLO. The high level attributes of FailSafe Services are&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Software into Service&lt;/strong&gt;: In the cloud platform everything is in term of Services. The delivery of cloud projects are in terms of services with defined SLO’s (availability …..)&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Services not Servers&lt;/strong&gt;: In the cloud world we have our services deployed on logical vm and have the option of scale out. We no more think in terms of Servers.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Decomposition by Workload:&lt;/strong&gt;Cloud computing provides a layer of abstraction where the physical infrastructure, and even the appearance of physical infrastructure, has less of an impact on the overall application architecture. So instead of an application being required to run on a server, it can be decomposed into a set of loosely coupled services that have the freedom to run in the most appropriate fashion. This is the foundation of the workload model because what may be considered an appropriate way to run for one part of an application may be wildly different for another, hence the need to separate out the different parts of an application so that they can be dealt with separately. An example for workload is “&lt;font color=&quot;#0000ff&quot;&gt;Consider an example of an e-commerce application and the two distinct features of catalogue search and order placement. Even though these features are used by the same user (consumer) their underlying requirements differ. Ordering requires more data rigour and security, whereas search needs to optimally scale. A search being slightly incorrect is tolerable, whereas an incorrect order is not. In this example, the single use case of searching for and ordering a product can be decomposed into two different workloads, and a third if we count the back-end integration with the order fulfilment process&lt;/font&gt;.”&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Utilize Scale Units&lt;/strong&gt;: Design by Scale Units is around how to define a capacity block for the Service. The model of the capacity of the block addresses unit of scalability, availability for that services. One may argue that adding more vm promotes elastic but on the contrary a scale unit could be a set of vm which can added or removed on the fly. &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Design for Operations&lt;/strong&gt;:&lt;strong&gt; “&lt;/strong&gt;&lt;em&gt;Every services which runs on cloud has to satisfy some operational asks&lt;/em&gt;&lt;strong&gt;”. &lt;/strong&gt;For example all services have to emit a basic level of telemetry like logging on health, issues, exception.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What does a service comprise of?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A service can comprise a number of web or worker role or persistent vm roles and storage (tables, queues, blob or sql azure) and is dependent on other services as well. The services can have inter or intra service dependencies. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirEecwYB93bw7OK8jqXdOtIybZPQlbbxGuOyUCbP3EpQCgKtnOqRi4zijmo9vndk_0bVD7VfZSRuhFwvh-keNbzjrrbhHvWF9hTrOai-nsPEQwadjHKTTFRS63YjccwPUgPb7qY9Ly-DFq/s1600-h/image%25255B7%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMylGqAqGzd2zAhTovSTnVWgVi9O0m8MI0j7dkmG5B3T7wehL1_LfwuyZ1u9DxF_PseaJ-FHy4cz1c9jyYzGr_ZtCKtjumLiU-6QLsARQ4fenQ2dNVbiSsuinB0vYKXw4AKqzAgBYdIPyM/?imgmax=800&quot; width=&quot;456&quot; height=&quot;283&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;What are the SLA’s around services availability?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The 9’s around services are dependent on the cloud platform which 99.9, but there is strong dependence on the code which one writes in those services, for example dependency on external services. Below is what Azure Platform provides as a SLA.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgViuEJ6XR95ibcXRgXOP03g9KG0BdODjP_2N1UlqAl0hVbnvg7wrxJkfaGk4FAUBJl3TKV_p6H4EnkuDvIYsy5SZrOYW9DyaoptKosZq5mk78rf9bMHazKULpHAMOHPyTBjtIXmvGKXVTu/s1600-h/image%25255B11%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5R-8L5GN_gn50wnPL5bh5VqTEb1kHf78Ao46ZzSiaLrCaLyrff5KmxjFc7B9ss0Q0mUh1_E9HR6ua-wMkZXhRB62AqKgo3s4azUYcPPR9mgMG98K8HZTvnlWB9lUINvS8bUqpSPsY1_K_/?imgmax=800&quot; width=&quot;607&quot; height=&quot;273&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What has throttling got to do with Services?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The services hosting in the cloud have to fulfil a certain request and run on the resources provided to it, there are chances when these resources run into been scarce or unavailable. One may end up using queues and also setting the Maximum number of messages beyond which it may not accept new messages. Throttling is a standard pattern noticed on shared resources. Throttling is an area which needs to be dealt at the time of architecture for ex: If Service A throttles after 5k request/sec use multiple accounts in your architecture. Another classical example is &lt;font color=&quot;#0000ff&quot;&gt;Facebook maintains a 99.99% avail but it has lot more constraints in the fine print like if you pound the site with over x request/second we will throttle you&lt;/font&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;More on Decomposition by Workload?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Taking off where the earlier question on workload.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Decomposition is essentially an Architectural Pattern [POSA].&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;When architecting for the cloud, we don&#39;t create all of these decomposed services just because the platform allows it. After all, it does increase the complexity and require more effort to build.&lt;strong&gt; In the context of cloud computing, this architectural pattern has, amongst others, the following benefits:&lt;/strong&gt;&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Availability&lt;/strong&gt; — well-separated services create fault isolation zones, so that a failure of one part of the application will not bring everything down. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Increased scalability&lt;/strong&gt; — where parts of the application that require high scalability are not held back by those that do not.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Continuous release and maintainability&lt;/strong&gt; — different parts of the application can be upgraded without application-wide downtime.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Operational responsiveness&lt;/strong&gt; — operators can monitor, plan and respond better to different events. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The workload model requires that features be decomposed into discrete workloads that are identifiable, well named, and can be referenced. These workloads form the basis of the services that will deliver the required functionality. The workloads are also used in other ALM models to establish the architectural boundaries of services as they apply to specific models.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Decomposing Workloads&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;There are no easy rules for decomposing workloads which is why it should only be tackled by an experienced architect. An architect with little cloud computing experience will probably err on the side of not enough decomposition. The challenge is identifying the workloads for your particular application. Some are obvious, while others less so, and too much decomposition can create unnecessary complexity. Workloads can be decomposed by&lt;strong&gt; use case, features, data models, releases, security&lt;/strong&gt;, and so on.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;As the architect works through the functionality, some key workloads may become clear early on. For example:&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Separating the front-end workloads &lt;/strong&gt;(where an immediate request response is required) can be easily distinguished from back-end workloads (where processing can be offloaded to an asynchronous process). &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Scheduled jobs&lt;/strong&gt;, such as ETL, need to be kicked off at a particular time of day.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Integration &lt;/strong&gt;with legacy systems.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Low load &lt;/strong&gt;internal administrative features, such as account administration.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Indicators of differing workloads&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Determining how to decompose workloads is the responsibility of the architect, and experienced architects should take to it quite easily. The following indicators of differing workloads are only a guide, as the particular application and environment may have differing indicators.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Feature roll-out&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The separation of features into sets that are rolled-out over time are often indicators of separate workloads. For example, an e-commerce application may have the viewing of product browsing history in the first release, with viewing of product recommendations based on browsing history in a subsequent release. This indicates that product recommendations can be in a separate workload to simple browsing history.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Use case&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A single user, in a single session, may access different features that appear seamless to the user but are separate use cases. The separate use cases may indicate separate workloads. For example, the primary use case on Twitter of viewing your timeline and tweeting is separate from the searching use case. Searching is a separate workload, which is implemented on Twitter as a completely separate service.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;User wait times&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Some features require that the service provides a quick response, while others have a longer time that the user is prepared to wait. For example, a user expects that items can be removed from a shopping basket immediately, but are prepared to wait for order confirmations to be e-mailed through. This difference in wait time indicates that there are separate workloads for basket features and order confirmation.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Model differences&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The importance of workload decomposition in the design phase is because all other models that need to be developed in design (such as the data model, security model, operational model, and so on) are influenced by the various workloads. Using our e-commerce example, without identifying search and ordering as separate workloads, we would get stuck when developing the security model as we would either end up with too much security for search (which is essentially public data, and has low security) by lumping it together with the higher security requirements for orders, or the reverse, where we are exposed to hacking because orders are insecure.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In the process of working through the models, a clue that workloads are incorrectly defined is when a model doesn&#39;t seem to fit cleanly with the workload. This may indicate that there are two workloads that need to be separated out. Whilst it is better to clearly define the workloads early on, it is possible that some will emerge later in the design, or indeed as requirements change during development. The problem, of course, is that when new workloads are identified they need to be reviewed against models that have already been developed, as at least one model would have changed.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Below are some examples where a difference in a model indicates the possibility that the feature is composed of two different workloads:&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Availability model&lt;/strong&gt; — When developing the availability model, if one feature has higher availability requirements than another, then it may indicate that there are separate workloads. For example, the Twitter API (as used by all Twitter clients) needs to be far more available than search.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLCiYwVieylEXFrVASOA-n06hUsro2HhDj1VYgl12kdenCuSNLK74NIIPzozl3oFf0xgoULWoyxXJXWyRy76qXTTuiDu12qvvXRn8V6cTKT3vJrSve27-mdb17lLExcxNA1LzPgZFuBGpT/s1600-h/image%25255B23%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisH76LuSYXwPSSHllSD9rAIM_hug-cHzZ_F9Q0NOFINdl8LeWMe4LkS-Nzsp_UQpMeZEPiSClW_NTP4L_WBvXb_BcGP-duSFHMB2KHoN8T6a8fAZRunjY73SbM_OwD26pYwAcgeEBJVppS/?imgmax=800&quot; width=&quot;454&quot; height=&quot;268&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Lifecycle model&lt;/strong&gt; — The lifecycle model may show that a particular feature is subject to spiky traffic or high load. In order to be able to scale that feature, it should be in a separate workload to those that have flatter usage patterns. For example, hotel holiday bookings may be spiky because of promotions, seasons or other influences, but the reviewing of hotels by guests may be a lot flatter. So, hotel reviews may be in a separate workload.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdY_zZeASRjQIdASnf_LV_mNxpviiX3YQZ_V2F13uKyIIbE8pthOKbznbsRD_gEUaOnGgkix0O5xKiWFq_ZmWj4pqzl_wRq5b_Y8_zUWl8C_SSo8w5K5p-1xNdey0wIV0_ynAq1kLVllIg/s1600-h/image%25255B19%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmmdbbGSjq4uMmymJHOEElgNhyphenhyphenigXLKG12TCA316Q4SVCeOcqjlDGQUocpNpV2WDFNcKQcghYz5YSb4rjBOpfRbyPjr8-4nLGJAblNk4kyFGXzdwux4qad94B8lgnIQhOcw5fyBOCyllGA/?imgmax=800&quot; width=&quot;507&quot; height=&quot;316&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Data model&lt;/strong&gt; — The data model separates data into schemas that may be based on workloads, so getting the workload model and the data model aligned is important. Features that use different data stores indicate possible workload separation. For example, the product catalogue may be in a search optimised data store, such as SOLR, whereas the rest of the application stores data in SQL. This may indicate that search is a distinct and separate workload.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Security model&lt;/strong&gt; — Features or data that have different security requirements can indicate separate workloads. For example, in question and answer applications the reading of questions may be public, but asking and answering questions requires a login. This may indicate that viewing and editing are separate workloads.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Integration model&lt;/strong&gt; — Different integration points often require separate workloads. While some integration may require immediate data, such as a stock availability lookup and will be in the same workload as other functionality, the overnight updating of stock on-hand may be a separate workload. &lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Deployment model&lt;/strong&gt; — Some functionality may be subject to frequent changes while others remain static, indicating the possibility of separate workloads. For example, the consumer-facing part of an application may update frequently as features are added and defects fixed, whereas the admin user interface stays unchanged for longer periods. The need to deploy one set of functionality without having to worry about others can be helped by separating the workloads.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Implementing workloads as services&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Workloads are a logical construct, and the decision about what workloads to put into what services remains an implementation decision. Ultimately, many workloads will be grouped into the single services, but this should not impact the logical separation of the workloads. For example, the web application service may contain many front-end workloads because they work better together as a single service. Another example is the common pattern to have a single worker role processing messages from multiple queues, resulting in a number of workloads being handled by a single role.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The decision to group workloads together should happen late in the development cycle, after most of the ALM models have been completed, as the differences across models may be significant enough to warrant separate implemented services.&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Identified workloads&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The primary output of the workload model is a list of workloads, with some of their characteristics, so that they can be used and referenced in other ALM models. For each identified workload:&lt;/font&gt; &lt;ol&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Name the workload.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Provide a contextual description of the workload. Bias the description towards the business requirement so that all stakeholders can understand it.&lt;/font&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Briefly highlight relevant technical aspects of the workload that may influence the model. For example, the workload may have special latency requirements, or need to interface with an external system. These aspects should be quick and easy to read through for all workloads when developing the models.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;How do we look at failure points?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Most applications today by design handle failure points very inefficiently, what does this mean for example “one could go to an internet site referring back to e-commerce example trying to place an order and bang gets error message failed to connect to x order service with some cryptic stack trace.Most of errors written today are not meant for operations folks its for the developer. A failure point is place in the code which has an external dependency example opening a database connection, access a configuration file, so the typical error message the operation team would be expecting “&lt;font color=&quot;#0000ff&quot;&gt;this &amp;lt;action&amp;gt; open of this &amp;lt;artefact&amp;gt; database failed&amp;nbsp; or did not work due this probable &amp;lt;reason&amp;gt; a timeout&lt;/font&gt;”. The other classical case the try and catch block where an exception gets thrown from the lowest most level to the highest level which itself is expensive without proper messaging.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEiGh4itn9l2SUN2Ke3MwQRcy5gidTcFokTsc_gzexL0SwDxwEmqVGeiwAqIUOPtd_KOgKrQYH5LJyDTg_YnP3ApJwCoS-yeg_7-fTM3VKUrkqQpZrGqXx8u85RAZa6qh-yH2m_vyC6NT/s1600-h/image%25255B27%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjT2ui_EJ6ccMkticVKWcoC_3gk_XHDCPF-Ssm8aoTW4EBK5bA3okkjrMGDXNeTGi8SlgebMuPhJANdSNJ6xjaky0BW5M5bXIm61_rRaW9GfUjNjx5Zl6D84XSc7K0oy2JeBxmv5NHPO1Y/?imgmax=800&quot; width=&quot;524&quot; height=&quot;258&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Failure Mode Analysis(FMA)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;A predictable root cause if the outage that occurs at a Failure Point. Failure Mode is the various condition can experienced on a Failure Point.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Failure Point is an external condition most of the time, failure modes identify the root cause of an outage of a failure point. The art which the developer needs to be vary of here “how much of the failure can be fixed by a simple retry or reported out”. The retry go far beyond just database connection it can service opening, connecting to the service bus etc…”.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Failure Mode Example&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvDJw8LxrcTX4WUn48ODQHlUSmiOseYIM6T2GR9xsVV5Mf3HZ-XY11DeVqYSNZtCoSFkFfPNg-5PIMvdsRCMOO89drwga3N-qHfau4USgFEIkjp10ezzuedjQPn40izxUufCPqwZRubxg2/s1600-h/image%25255B31%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9kz5XYA6QFME1K56WswjnRobOIjEHxO0fUhdCq-BkXm_zicULsXXNeQNC0BvwqxHiAgcm3lR4998ks2h0Sb1EzuuXA15Jl-6DTyKuQN9cfyTi_B4Z1sMARpwAoNZdtVau5YMJBGusjb-H/?imgmax=800&quot; width=&quot;510&quot; height=&quot;261&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Failure Mode Modelling is as important as Threat Modelling and should be part of the overall project lifecycle.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;What is a Scale Unit in Cloud World?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Unit of Scale is associated with a service, a workload and is the null unit of deployment in case of a scale up or down.&amp;nbsp; A Unit of Scale has the following&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Workloads&lt;/strong&gt; – Messaging, Collaboration, Productivity.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Resources&lt;/strong&gt;- 4 – Web Roles ( 8 CPU)&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Storage&lt;/strong&gt; : 100 GB Database, 10 GB Blob Storage&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Demands&lt;/strong&gt; it can meet: 10k Active Users, 1K Concurrent Users, &amp;lt; 2 seconds response time.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd5HEoDjJsmvtGYOXASCxgR3N-Fd6lzSgSaUUulI2G6WDtIhXCGIozCqLxPPJ80F5VluMw7HhIyTd6TBS3A1Y8dITsx19mjBPVOtgYIavzO87b7hmOpxER619PqBSLB9icxLlIHVI2_jZy/s1600-h/image%25255B35%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcJ75iYcP2D2H2cHy4RZIVMARBpJqEjt0KNpUk7GQKCsyHr2T4jGa87lPr2fiK9NhNT-NTnGJoCSVd7HmY8YbWUH4_miaNF7KtB7NwaabFxtFdDe6dpsTKZZHInaZ0xts-Fc9EmyKb3eZ/?imgmax=800&quot; width=&quot;380&quot; height=&quot;248&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Fault and Upgrade Domains.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The architecture or design is cloud strongest as its weakest component. A failed component can’t take down service. Make sure there are dual domain or “minimum of 2 instances”. Upgrade Domain is another areas. Both these areas are an inherent part of Windows Azure more information can be found &lt;a href=&quot;http://blogs.technet.com/b/yungchou/archive/2011/05/16/window-azure-fault-domain-and-update-domain-explained-for-it-pros.aspx&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&amp;nbsp;&lt;strong&gt;What are consideration one needs to give in Applications?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Following are the recommendations&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Default to asynchronous&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Handle Transient Faults&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Circuit Breaker Pattern&lt;/strong&gt;:&amp;nbsp; Services in cloud architecture generally have an avail of 99.99% ,&amp;nbsp; with 2 instances the avail can be increased further and adding up geo we can achieve much more.Throttling in case overhauling client calls or other failure condition requires the clients to write the code in such as manner where by retries to the service can happen in a safe manner i.e when the service is up. D&lt;/font&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;eveloping enterprise-level applications, we often need to call external services and resources.&amp;nbsp; One method of attempting to overcome a service failure is to queue requests and retry periodically. This allows us to continue processing requests until the service becomes available again. However, if a service is experiencing problems, hammering it with retry attempts will not help the service to recover, especially if it is under increased load. Such a pounding can cause even more damage and interruption to services. If we know there could potentially be a problem with a service, we can help take some of the strain by &lt;strong&gt;implementing a Circuit Breaker pattern on the client application&lt;/strong&gt;.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Automate All the Things&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Embrace Open Standards – &lt;/strong&gt;This is bit of Prescriptive Guidance which can help&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;OData – &lt;/strong&gt;Use OData as standard data protocol &lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;OAuth&lt;/strong&gt;- Identity standards&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Open Graph&lt;/strong&gt;- &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXBl1bUqvr50aubwM4OlbGViS7LNSFMnC_R2_CJxR0l11A1K4zGLjAPYy7j7FAiHPRbzoPt0e7xhmKAKtfcVMZF7hsC2B_5YDXyjtTMAjtk46O-Q0Q2AYNo_OjBvQt6v5GR3rd81rxSVTF/s1600-h/image%25255B39%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggUIlUiz8mZzXRJrlRJEFihz4-_KePdu2cqS8m63pRmNXxJ7yr1QeFC_fL8O5a_4mqQzsEswzbdQJ26ihix4M__VB_FYMSATXNW8CtdQEeVw8zAbi0XtloLq1YO0eIpuIoYfQHuxiu1B-h/?imgmax=800&quot; width=&quot;463&quot; height=&quot;241&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#0000ff&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;These standards are discussed in a Fail Safe because there is no need to reinvent the wheel around data, identity and social arena as this promotes easy interoperability.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#333333&quot; size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Data Decomposition&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;In the cloud world its key to understood reading and writing from the single storage has its limitation, there is no defined limit on the number of concurrent connection to sql azure but there is high chance too many connection can lead to throttle. Most architect tend to give too much importance on the application and service layer from a scale unit stand point of view but kind of forget database also many need some kind of partitioning i.e horizontal, vertical etc..&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Apply functional composition to database layer too.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Don’t force partitioning for the sake of partitioning this will impact manageability.&lt;/font&gt;&lt;/li&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Partition where when required to reduce dependency, independent management and scale,&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Reduce logic in SQL Database&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;CRUD is acceptable.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;Latency Shifts&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Latency is cuts across 2 areas internal server to server OR device to service.&amp;nbsp; Latency has to be built into design.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;1.&lt;a title=&quot;http://www.windowsazure.com/en-us/develop/net/architecture/&quot; href=&quot;http://www.windowsazure.com/en-us/develop/net/architecture/&quot;&gt;http://www.windowsazure.com/en-us/develop/net/architecture/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/7780100567632876682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/7780100567632876682?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/7780100567632876682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/7780100567632876682'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/03/failsafe-computing-in-cloud.html' title='Failsafe Computing in Cloud'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI6hYvZ_Wf5c5JhGQOmIufyhksnp7xtRDhZ1RWmxURFiwSfKElfBlecCb4Qr7lOG4NFL-3Z-PVN13BE8CfIO0rcD20BaAOMc5QE7ZqLS7MPeZE8DxnselSPj-KNfm2IG-aNovwGVIqWD4I/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3109994058962333981.post-3672293910661618720</id><published>2013-03-11T22:36:00.001-07:00</published><updated>2013-03-11T22:36:26.132-07:00</updated><title type='text'>Enterprise PaaS is Finally There….</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;2,000 applications in .NET and Java built, supported by a team of 430 development teams initially spread over 4 datacenters have been moved to PaaS, sounds very exciting , this is not Azure, AWS, Force.com or Cloud Foundry, its Enterprise Private PaaS and this is currently deployed at JPMC. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;700% improvement in developer productivity and 50 day reduction in time-to-market for new applications. These numbers may sound very pleasing take it with a pinch of salt.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;The Enterprise PaaS in discussion is at JPMC and the stack is Apprenda.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;From the documentation of Apprenda, its apparent Apprenda provides a private PaaS with a lot of similarity from an architecture standpoint of view to a Public PaaS something like an Azure. You can find all the details on Apprenda &lt;a href=&quot;http://apprenda.com/&quot;&gt;here&lt;/a&gt;. Additionally they provide an evaluation edition of the stack which can installed and played with. It does have some learning lessons for the Public PaaS platform for sure. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;Links to &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;1. &lt;a href=&quot;http://leverhawk.com/five-takeaways-from-the-jpmorgan-chase-paas-announcement-20130308211&quot;&gt;JPMC adoption to Private PaaS.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size=&quot;4&quot; face=&quot;Calibri&quot;&gt;2. &lt;a href=&quot;http://apprenda.com&quot; target=&quot;_blank&quot;&gt;Apprenda&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://trinityordestiny.blogspot.com/feeds/3672293910661618720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3109994058962333981/3672293910661618720?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3672293910661618720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3109994058962333981/posts/default/3672293910661618720'/><link rel='alternate' type='text/html' href='http://trinityordestiny.blogspot.com/2013/03/enterprise-paas-is-finally-there.html' title='Enterprise PaaS is Finally There….'/><author><name>Ajay Solanki</name><uri>http://www.blogger.com/profile/14558030976002533512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>