{"id":122125,"date":"2026-03-18T09:06:37","date_gmt":"2026-03-18T09:06:37","guid":{"rendered":"https:\/\/make.wordpress.org\/core\/?p=122125"},"modified":"2026-03-31T09:26:52","modified_gmt":"2026-03-31T09:26:52","slug":"introducing-the-connectors-api-in-wordpress-7-0","status":"publish","type":"post","link":"https:\/\/make.wordpress.org\/core\/2026\/03\/18\/introducing-the-connectors-api-in-wordpress-7-0\/","title":{"rendered":"Introducing the Connectors API in WordPress 7.0"},"content":{"rendered":"<p class=\"wp-block-paragraph\">WordPress 7.0 introduces the <strong>Connectors <span tabindex='0' class='glossary-item-container'>API<span class='glossary-item-hidden-content'><span class='glossary-item-header'>API<\/span> <span class='glossary-item-description'>An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.<\/span><\/span><\/span><\/strong> \u2014 a new framework for registering and managing connections to external services. The initial focus is on AI providers, giving WordPress a standardized way to handle API key management, provider discovery, and <span tabindex='0' class='glossary-item-container'>admin<span class='glossary-item-hidden-content'><span class='glossary-item-header'>admin<\/span> <span class='glossary-item-description'>(and super admin)<\/span><\/span><\/span> <span tabindex='0' class='glossary-item-container'>UI<span class='glossary-item-hidden-content'><span class='glossary-item-header'>UI<\/span> <span class='glossary-item-description'>User interface<\/span><\/span><\/span> for configuring AI services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This post walks through what the Connectors API does, how it works under the hood, and what <span tabindex='0' class='glossary-item-container'>plugin<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Plugin<\/span> <span class='glossary-item-description'>A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory <a href=\"https:\/\/wordpress.org\/plugins\/\">https:\/\/wordpress.org\/plugins\/<\/a> or can be cost-based plugin from a third-party.<\/span><\/span><\/span> developers need to know.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Table of Contents<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#what-is-a-connector\">What is a connector?<\/a><\/li>\n\n\n\n<li><a href=\"#how-ai-providers-are-auto-discovered\">How AI providers are auto-discovered<\/a><\/li>\n\n\n\n<li><a href=\"#the-settings--connectors-admin-screen\">The Settings &gt; Connectors admin screen<\/a><\/li>\n\n\n\n<li><a href=\"#authentication-and-api-key-management\">Authentication and API key management<\/a><\/li>\n\n\n\n<li><a href=\"#public-api-functions\">Public API functions<\/a><\/li>\n\n\n\n<li><a href=\"#overriding-connector-metadata\">Overriding connector metadata<\/a><\/li>\n\n\n\n<li><a href=\"#the-initialization-lifecycle\">The initialization lifecycle<\/a><\/li>\n\n\n\n<li><a href=\"#looking-ahead\">Looking ahead<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What is a connector?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A connector represents a connection to an external service. Each connector carries standardized metadata \u2014 a display name, description, logo, authentication configuration, and an optional association with a <span tabindex='0' class='glossary-item-container'>WordPress.org<span class='glossary-item-hidden-content'><span class='glossary-item-header'>WordPress.org<\/span> <span class='glossary-item-description'>The community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization.  <a href=\"https:\/\/wordpress.org\/\">https:\/\/wordpress.org\/<\/a><\/span><\/span><\/span> plugin. The system currently focuses on providers that authenticate with an API key, but the architecture is designed to support additional connector types in future releases.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.0 comes with three featured connectors\u2014Anthropic, Google, and OpenAI\u2014accessible from the new\u00a0<strong>Settings \u2192 Connectors<\/strong>\u00a0screen, making installation seamless.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each connector is stored as an associative array with the following shape:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\narray(\n    'name'           =&gt; 'Anthropic',\n    'description'    =&gt; 'Text generation with Claude.',\n    'logo_url'       =&gt; 'https:\/\/example.com\/anthropic-logo.svg',\n    'type'           =&gt; 'ai_provider',\n    'authentication' =&gt; array(\n        'method'          =&gt; 'api_key',\n        'credentials_url' =&gt; 'https:\/\/platform.claude.com\/settings\/keys',\n        'setting_name'    =&gt; 'connectors_ai_anthropic_api_key',\n    ),\n    'plugin'         =&gt; array(\n        'slug' =&gt; 'ai-provider-for-anthropic',\n    ),\n)\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">How AI providers are auto-discovered<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re building an AI provider plugin that integrates with the WP AI Client, you don\u2019t need to register a connector manually. The Connectors API automatically discovers providers from the WP AI Client\u2019s default registry and creates connectors with the correct metadata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s what happens during initialization:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Built-in connectors (Anthropic, Google, OpenAI) are registered with hardcoded defaults.<\/li>\n\n\n\n<li>The system queries the <code>AiClient::defaultRegistry()<\/code> for all registered providers.<\/li>\n\n\n\n<li>For each provider, metadata (name, description, logo, authentication method) is merged on top of the defaults, with provider registry values taking precedence.<\/li>\n\n\n\n<li>The <code>wp_connectors_init<\/code> action fires so plugins can override metadata or register additional connectors.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>In short:<\/strong> if your AI provider plugin registers with the WP AI Client, the connector is created for you. No additional code is needed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Settings &gt; Connectors admin screen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Registered connectors appear on a new <strong>Settings &gt; Connectors<\/strong> admin screen. The screen renders each connector as a card, and the registry data drives what\u2019s displayed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>name<\/code><\/strong>, <strong><code>description<\/code><\/strong>, and <strong><code>logo_url<\/code><\/strong> are shown on the card.<\/li>\n\n\n\n<li><strong><code>plugin.slug<\/code><\/strong> enables install\/activate controls \u2014 the screen checks whether the associated plugin is installed and active, and shows the appropriate action button.<\/li>\n\n\n\n<li><strong><code>authentication.credentials_url<\/code><\/strong> is rendered as a link directing users to the provider\u2019s site to obtain API credentials.<\/li>\n\n\n\n<li>For <strong><code>api_key<\/code><\/strong> connectors, the screen shows the current key source (environment variable, <span tabindex='0' class='glossary-item-container'>PHP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>PHP<\/span> <span class='glossary-item-description'>The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher<\/span><\/span><\/span> constant, or database) and connection status.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Connectors with other authentication methods are stored in the PHP registry and exposed via the script module data, but currently require a client-side <span tabindex='0' class='glossary-item-container'>JavaScript<span class='glossary-item-hidden-content'><span class='glossary-item-header'>JavaScript<\/span> <span class='glossary-item-description'>JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user\u2019s browser.\r<a href=\"https:\/\/www.javascript.com\/\">https:\/\/www.javascript.com<\/a><\/span><\/span><\/span> registration for custom frontend UI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Authentication and API key management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Connectors support two authentication methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>api_key<\/code><\/strong> \u2014 Requires an API key, which can be provided via environment variable, PHP constant, or the database (checked in that order).<\/li>\n\n\n\n<li><strong><code>none<\/code><\/strong> \u2014 No authentication required.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The authentication method (<code>api_key<\/code> or <code>none<\/code>) is determined by the authentication metadata registered with the connector. For providers using <code>api_key<\/code>, a database setting name is automatically generated using the pattern <code>connectors_{$provider_type}_{$provider_id}_api_key<\/code>.  It\u2019s also possible to set a custom name using <code>setting_name<\/code> property. API keys stored in the database are not encrypted but are masked in the user interface. Encryption is being explored in a follow-up <span tabindex='0' class='glossary-item-container'>ticket<span class='glossary-item-hidden-content'><span class='glossary-item-header'>ticket<\/span> <span class='glossary-item-description'>Created for both bug reports and feature development on the bug tracker.<\/span><\/span><\/span>:\u00a0<a href=\"https:\/\/core.trac.wordpress.org\/ticket\/64789\">#64789<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For AI providers, there is a specific naming convention in place for environment variables and PHP constants: <code>{PROVIDER_ID}_API_KEY<\/code> (e.g., the <code>anthropic<\/code> provider maps to <code>ANTHROPIC_API_KEY<\/code>). For other types of providers, an environment variable (<code>env_var_name<\/code>) and a PHP constant (<code>constant_name<\/code>) can be optionally set to any value.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">API key source priority<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For <code>api_key<\/code> connectors, the system looks for a setting value in this order:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Environment variable<\/strong> \u2014 e.g., <code>ANTHROPIC_API_KEY<\/code><\/li>\n\n\n\n<li><strong>PHP constant<\/strong> \u2014 e.g., <code>define( 'ANTHROPIC_API_KEY', 'sk-...' );<\/code><\/li>\n\n\n\n<li><strong>Database<\/strong> \u2014 stored through the admin screen, e.g. <code>connectors_ai_anthropic_api_key<\/code> setting<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Public API functions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Connectors API provides three public functions for querying the registry. These are available after <code>init<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>wp_is_connector_registered()<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Checks if a connector is registered:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nif ( wp_is_connector_registered( 'anthropic' ) ) {\n    \/\/ The Anthropic connector is available.\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><code>wp_get_connector()<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Retrieves a single connector\u2019s data:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$connector = wp_get_connector( 'anthropic' );\nif ( $connector ) {\n    echo $connector['name']; \/\/ 'Anthropic'\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Returns an associative array with keys: <code>name<\/code>, <code>description<\/code>, <code>type<\/code>, <code>authentication<\/code>, and optionally <code>logo_url<\/code> and <code>plugin<\/code>. Returns <code>null<\/code> if the connector is not registered.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>wp_get_connectors()<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Retrieves all registered connectors, keyed by connector ID:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$connectors = wp_get_connectors();\nforeach ( $connectors as $id =&gt; $connector ) {\n    printf( '%s: %s', $connector['name'], $connector['description'] );\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Overriding connector metadata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>wp_connectors_init<\/code> action fires after all built-in and auto-discovered connectors have been registered. Plugins can use this hook to override metadata on existing connectors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since the registry rejects duplicate IDs, overriding requires an unregister, modify, register sequence:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nadd_action( 'wp_connectors_init', function ( WP_Connector_Registry $registry ) {\n    if ( $registry-&gt;is_registered( 'anthropic' ) ) {\n        $connector = $registry-&gt;unregister( 'anthropic' );\n        $connector['description'] = __( 'Custom description for Anthropic.', 'my-plugin' );\n        $registry-&gt;register( 'anthropic', $connector );\n    }\n} );\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Key points about the override pattern:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Always check <code>is_registered()<\/code> before calling <code>unregister()<\/code> \u2014 calling <code>unregister()<\/code> on a non-existent connector triggers a <code>_doing_it_wrong()<\/code> notice.<\/li>\n\n\n\n<li><code>unregister()<\/code> returns the connector data, which you can modify and pass back to <code>register()<\/code>.<\/li>\n\n\n\n<li>Connector IDs must match the pattern <code>\/^[a-z0-9_-]+$\/<\/code> (lowercase alphanumeric, underscores, and hyphens only).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Registry methods<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Within the <code>wp_connectors_init<\/code> callback, the <code>WP_Connector_Registry<\/code> instance provides these methods:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Method<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>register( $id, $args )<\/code><\/td><td>Register a new connector. Returns the connector data or <code>null<\/code> on failure.<\/td><\/tr><tr><td><code>unregister( $id )<\/code><\/td><td>Remove a connector and return its data. Returns <code>null<\/code> if not found.<\/td><\/tr><tr><td><code>is_registered( $id )<\/code><\/td><td>Check if a connector exists.<\/td><\/tr><tr><td><code>get_registered( $id )<\/code><\/td><td>Retrieve a single connector\u2019s data.<\/td><\/tr><tr><td><code>get_all_registered()<\/code><\/td><td>Retrieve all registered connectors.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Outside of the <code>wp_connectors_init<\/code> callback, use the public API functions (<code>wp_get_connector()<\/code>, <code>wp_get_connectors()<\/code>, <code>wp_is_connector_registered()<\/code>) instead of accessing the registry directly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The initialization lifecycle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Understanding the initialization sequence helps when deciding where to hook in:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During the <code>init<\/code> action, <code>_wp_connectors_init()<\/code> runs and:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creates the <code>WP_Connector_Registry<\/code> singleton.<\/li>\n\n\n\n<li>Registers built-in connectors (Anthropic, Google, OpenAI) with hardcoded defaults.<\/li>\n\n\n\n<li>Auto-discovers providers from the WP AI Client registry and merges their metadata on top of defaults.<\/li>\n\n\n\n<li>Fires the <strong><code>wp_connectors_init<\/code><\/strong> action \u2014 this is where plugins override metadata or register additional connectors.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>wp_connectors_init<\/code> action is the only supported entry point for modifying the registry. Attempting to set the registry instance outside of <code>init<\/code> triggers a <code>_doing_it_wrong()<\/code> notice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Looking ahead<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Connectors API in WordPress 7.0 was optimized for AI providers, but the underlying architecture is designed to grow. Currently, only connectors with <code>api_key<\/code> authentication receive the full admin UI treatment. The PHP registry already accepts any connector type \u2014 what\u2019s missing is the frontend integration for connectors with different authentication mechanisms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Future releases are expected to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Expand support for additional authentication methods beyond <code>api_key<\/code> and <code>none<\/code>.<\/li>\n\n\n\n<li>Offer more built-in UI integrations beyond <code>api_key<\/code>.<\/li>\n\n\n\n<li>Provide a client-side JavaScript registration API for custom connector UI.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">When those <span tabindex='0' class='glossary-item-container'>capabilities<span class='glossary-item-hidden-content'><span class='glossary-item-header'>capability<\/span> <span class='glossary-item-description'>A\u00a0<strong>capability<\/strong>\u00a0is permission to perform one or more types of task. Checking if a user has a capability is performed by the <code>current_user_can<\/code> function. Each user of a WordPress site might have some permissions but not others, depending on their\u00a0role. For example, users who have the Author role usually have permission to edit their own posts (the \u201cedit_posts\u201d capability), but not permission to edit other users\u2019 posts (the \u201cedit_others_posts\u201d capability).<\/span><\/span><\/span> land, the <code>wp_connectors_init<\/code> action will be the primary hook for registering new connector types.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p class=\"wp-block-paragraph\">Props to <a href=\"https:\/\/profiles.wordpress.org\/jorgefilipecosta\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>jorgefilipecosta<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/shaunandrews\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>shaunandrews<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/flixos90\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>flixos90<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/westonruter\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>westonruter<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/justlevine\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>justlevine<\/a>, and others for contributing to the Connectors screen and this <span tabindex='0' class='glossary-item-container'>dev note<span class='glossary-item-hidden-content'><span class='glossary-item-header'>dev note<\/span> <span class='glossary-item-description'>Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make\/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin\/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase.<\/span><\/span><\/span>.<\/p>\n<p class=\"o2-appended-tags\"><a href=\"https:\/\/make.wordpress.org\/core\/tag\/7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>7-0<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes-7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes-7-0<\/a><\/p><nav class='o2-post-footer-actions'><ul class='o2-post-footer-action-row'><li class='o2-post-footer-action'><a href=\"https:\/\/login.wordpress.org\/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F18%2Fintroducing-the-connectors-api-in-wordpress-7-0%2F%23respond&#038;locale=en_US\" title=\"Login to Reply\"  class=\"genericon  genericon-reply\"  data-action=\"login-to-reply\"  data-actionstate=\"default\" >Login to Reply<\/a><\/li><\/ul><div class='o2-post-footer-action-likes'><\/div><ul class='o2-post-footer-action-row'><\/ul><\/nav>","protected":false},"excerpt":{"rendered":"<p>WordPress 7.0 introduces the Connectors APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. \u2014 a new framework for registering and managing connections to external services. The initial focus is on AI providers, giving WordPress a standardized [&hellip;]<\/p>\n","protected":false},"author":14780544,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"{\"document\":\"AACAHefv1swe+QKYl8SWFafv1swevc7WmRGn79bMHr3O1pkRp+\/WzB69ztaZEafv1swevc7WmRGn79bMHr3O1pkRp+\/WzB69ztaZEafv1swevc7WmRGn79bMHr3O1pkRp+\/WzB79ztaZEQG+7PmsA\/3O1pkRAr7s+awDvc7WmRG+7PmsA\/3O1pkRAL7s+awD\/c7WmREGvuz5rAP9ztaZEQC+7PmsA\/3O1pkRBb7s+awD\/c7WmREd\/uz5rAMBmJfElhW+7PmsA6Kc7IkMvuz5rAOYl8SWFb7s+awDmJfElhW+7PmsA5iXxJYVvuz5rAOYl8SWFb7s+awDmJfElhWinOyJDL7s+awDp+\/WzB6Yl8SWFafv1sweopzsiQyn79bMHpiXxJYVp+\/WzB6Yl8SWFafv1swemJfElhWn79bMHpiXxJYVp+\/WzB6Yl8SWFafv1swemJfElhWn79bMHpiXxJYVp+\/WzB69ztaZEafv1swemJfElhW9ztaZEafv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDP7s+awDAaKc7IkM\/uz5rAMEopzsiQy+7PmsA6Kc7IkM\/uz5rAMB4pzsiQwFvuz5rAPinOyJDAD+7PmsAwDinOyJDAG+7PmsA+Kc7IkMAv7s+awDAOKc7IkMAL7s+awD4pzsiQwT\/uz5rAMA4pzsiQwJvuz5rAPinOyJDAL+7PmsAwG9ztaZEb7s+awDvc7WmRG+7PmsA73O1pkRvuz5rAO9ztaZEb7s+awDvc7WmRG+7PmsA73O1pkR\/uz5rAMAvc7WmRG+7PmsA6fv1swevc7WmRGn79bMHr3O1pkRp+\/WzB69ztaZEafv1swevc7WmRGn79bMHr3O1pkRp+\/WzB69ztaZEafv1swevc7WmRGn79bMHr3O1pkR5+\/WzB4Bvc7WmRGinOyJDOfv1sweC\/7s+awDSaKc7IkMvuz5rAOinOyJDL7s+awDopzsiQz+7PmsAwHinOyJDArn79bMHgOinOyJDKfv1sweopzsiQzn79bMHgL+7PmsAwCn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQzn79bMHgGinOyJDL7s+awDp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkM\/uz5rAMCopzsiQy+7PmsA6Kc7IkMvuz5rAOinOyJDP7s+awDA6Kc7IkMvuz5rAOinOyJDL7s+awDopzsiQy+7PmsA6Kc7IkMvuz5rAOinOyJDL7s+awDopzsiQy+7PmsA+Kc7IkMAv7s+awDAaKc7IkM\/uz5rAMA4pzsiQwA\/uz5rAMEopzsiQz+7PmsAwSinOyJDP7s+awDAKKc7IkMvuz5rAOinOyJDL7s+awDopzsiQy+7PmsA6Kc7IkMvuz5rAPinOyJDAG+7PmsA+Kc7IkMAb7s+awD4pzsiQwBvuz5rAPinOyJDAm+7PmsA+Kc7IkMAb7s+awD4pzsiQwBvuz5rAPinOyJDAm+7PmsA+Kc7IkMAb7s+awD4pzsiQwBvuz5rAPinOyJDAz+7PmsAwGinOyJDL7s+awDopzsiQy+7PmsA6Kc7IkMvuz5rAOinOyJDP7s+awDAaKc7IkMvuz5rAOinOyJDP7s+awDBKKc7IkM\/uz5rAMA4pzsiQwR\/uz5rAMA4pzsiQxl\/uz5rAMAopzsiQz+7PmsAwGinOyJDL7s+awDopzsiQy+7PmsA+Kc7IkMAP7s+awDAKKc7IkMvuz5rAOinOyJDP7s+awDAuKc7IkMBf7s+awDAqKc7IkMvuz5rAOinOyJDP7s+awDAeKc7IkMAb7s+awD4pzsiQwRvuz5rAPinOyJDAL+7PmsAwDinOyJDAH+7PmsAx2inOyJDP7s+awDAuKc7IkMGafv1sweopzsiQzn79bMHgGinOyJDKfv1sweopzsiQyn79bMHqKc7IkMp+\/WzB6inOyJDKfv1sweopzsiQzn79bMHgC+7PmsA6Kc7IkM\/uz5rAMAp+\/WzB6inOyJDKfv1sweopzsiQyn79bMHqKc7IkM5+\/WzB4DopzsiQy+7PmsA+fv1sweOr7s+awDp+\/WzB6+7PmsA+fv1sweDL7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awD5+\/WzB4Ovuz5rAPn79bMHg++7PmsA+fv1sweAb7s+awDp+\/WzB6+7PmsA+fv1sweCb7s+awD5+\/WzB4qvuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAPn79bMHgK+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swe\/uz5rAMA5+\/WzB4Dvuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awD5+\/WzB4A\/uz5rAMF5+\/WzB4Cvuz5rAOn79bMHv7s+awD3gen79bMHv7s+awDAefv1sweAL7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swe\/uz5rAMAp+\/WzB7+7PmsAwOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA+fv1sweAL7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swe\/uz5rAMAp+\/WzB7+7PmsAwKn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB7+7PmsAwCn79bMHv7s+awDAKfv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHv7s+awDAKfv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHv7s+awDAKfv1swe\/uz5rAMCp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swe\/uz5rAMAp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swevuz5rAOn79bMHr7s+awDp+\/WzB6+7PmsA6fv1swe\/uz5rAMAp+\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\/EEiEAwQihAcEAoQGoAKEAqADBAqEHwQChAKgAwQChAagAoQOoAMEAoQCoAKEUqAGhB6gGKACoAcEFxAHBCSEAwQWoAKEAqAChHKgAoQOoAKEEqAGhCagEwQXEAMEBxALBAMQEwQnEAMEAqAAoAMEIqAHEAcEAxALBAMQAwQDEBcEAxAHBAcQBwQLEAMEAxADBCMQCwQbEAcEFxADBBMQAwQBEAMQAwQDEAMEAxAHBAMQBgQDBAcQAwQGBAEEBgQDEA8EAxAHBAMQAwQDEAYQAgQCEAIEAhAGBAIQAgQPBAoEAwQGBAMQAwQDEAMEAgQDEAMEDgQHBAoEAwQWBAMEAgQDEA8EAxADBAMQAgQDEAIQAgQCEAIEAwQbEAMEKxALBAcQAwQDEAMECxADBAsQBRADEC8EAxADBAccAIQAoAScCAQCEAYEAhACBAMQAgQCEAIEAhACBAYQAgQDEAYQAwQDEAMEExALBAsQBwQAhAMEPAADBH8QHwQrEAMEFxBXBA8QAoQDBDqgAoQHBDaEAAADBBcQAoQCnAAcAKAMnAQQAKAAnAIcAKAMnAQQAKAAnAIcAKAMnAQQAKAAnAIcAIQAoAicAKAEnAAcAKAMnAQQAJwCHACgDJwEEACcAhwAhACgCJwEEAIEAhAAnAIcAKAMnAQQAJwCHACgDJwEEACcAhwAoAycBBAAnAIcAKAMnAQQAJwCHACgDJwEEACcAhwAhACgCJwEEACgAJwCHACEAKAAhACgAJwEEAIEAhAEoACcAhwAhACgAIQAoACcBBACBAIQCgQCEAIEAhACBAIQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgAIQAoACcAKAYnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoAicAKAEnAAcAKAMnAQQAJwCHACgDJwEEACcAhwAoAycBBAAnAIcAKAMnAQQAJwCHACEAKAInAQQAKAAnAIcAIQAoAicBBACBAIQAKAAnAIcAIQAoACEAKAAnAQQAgQCEAIEAhACBAIQAKAAnAIcAIQAoAicAKAEnAAcAKAMnAQQAJwCHACgDJwEEACcAhwAoAycBBAAnAIcAKAMnAQQAJwCHACEAKAAhACgAJwEEAIEAhACBAIQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInACgBJwAHACgDJwEEACcAhwAoAycBBAAnAIcAIQAoACEAKAAnAQQAgQCEAIEBhACBAYQAgQCEACgAJwCHACEAKAAhACgAJwEBAIQAgQCEAIEAhACBAIQAgQCEAIEAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInACgBJwAHACgDJwEEACcAhwAoAycBBAAnAIcAKAMnAQQAgQCEACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInACgGJwCHACEAKAInAQQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwAoBicAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgAIQAoACcAKAYnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoACEAKAAnACgGJwCHACEAKAInAQQAKAAnAIcAIQAoAicAKAEnAAcAKAMnAQQAJwCHACgDJwEEACcAhwAhACgAIQAoACcBBACBAIQAgQGEACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoAicAKAAnACEBKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwAoAScABwAoAycBBAAnAIcAIQAoACEAKAAnAQQAhAEnAIcAKAMnAQQAJwCHACgDJwEEACcAhwAhACgCJwEEACgAJwCHACEAKAInAQQAKAAnAIcAIQAoACEAKAAnAQQAgQKEAIEAhACBAIQAKAAnAIcAIQAoAicBBAAoACcAhwAhACgCJwAoAScABwAoAycBBACBAIQBJwCHACEAKAAhACgAJwEBAIQAgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhAEnAIEAAACHACEAKAInAQQAKAAnAIcAIQAoACEAKAAnACgBJwCHACEAKAAhACgAJwEEAIEAhAGBAIQBKAAnAMQAwQDEAsEAxAGhAMEOoQHEAIEAAADBDcQAoQDBDqEBwQAAAMENgQChAMEOoQHBDaEAwQ6hAcEOoQDBDqEBqADBt4sC64ECc3RhdGV2ZXJzaW9uZG9jdW1lbnRkYXRlZG9jdW1lbnRzdGF0dXNkb2N1bWVudHRpdGxlZG9jdW1lbnRjb250ZW50ZG9jdW1lbnRleGNlcnB0ZG9jdW1lbnRhdXRob3Jkb2N1bWVudGZlYXR1cmVkX21lZGlhZG9jdW1lbnRjb21tZW50X3N0YXR1c2RvY3VtZW50cGluZ19zdGF0dXNkb2N1bWVudHN0aWNreWRvY3VtZW50dGVtcGxhdGVkb2N1bWVudGZvcm1hdGRvY3VtZW50bWV0YWFkdmFuY2VkX3Nlb19kZXNjcmlwdGlvbmpldHBhY2tfc2VvX2h0bWxfdGl0bGVqZXRwYWNrX3Nlb19ub2luZGV4amV0cGFja19wb3N0X3dhc19ldmVyX3B1Ymxpc2hlZF9qZXRwYWNrX25ld3NsZXR0ZXJfYWNjZXNzX2pldHBhY2tfZG9udF9lbWFpbF9wb3N0X3RvX3N1YnNfamV0cGFja19uZXdzbGV0dGVyX3RpZXJfaWRfamV0cGFja19tZW1iZXJzaGlwc19jb250YWluc19wYXl3YWxsZWRfY29udGVudF9qZXRwYWNrX21lbWJlcnNoaXBzX2NvbnRhaW5zX3BhaWRfY29udGVudGZvb3Rub3Rlc2pldHBhY2tfcHVibGljaXplX21lc3NhZ2VqZXRwYWNrX3B1YmxpY2l6ZV9mZWF0dXJlX2VuYWJsZWRqZXRwYWNrX3NvY2lhbF9wb3N0X2FscmVhZHlfc2hhcmVkamV0cGFja19zb2NpYWxfb3B0aW9uc2RvY3VtZW50Y2F0ZWdvcmllc2RvY3VtZW50dGFnc2RvY3VtZW50YmxvY2tzSW50cm9kdWNpbmcgdGhlIENvbm5lY3RvcnMgQVBJIGluIFdvcmRQcmVzcyA3LjA8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+V29yZFByZXNzIDcuMCBpbnRyb2R1Y2VzIHRoZSA8c3Ryb25nPkNvbm5lY3RvcnMgQVBJPC9zdHJvbmc+IOKAlCBhIG5ldyBmcmFtZXdvcmsgZm9yIHJlZ2lzdGVyaW5nIGFuZCBtYW5hZ2luZyBjb25uZWN0aW9ucyB0byBleHRlcm5hbCBzZXJ2aWNlcy4gVGhlIGluaXRpYWwgZm9jdXMgaXMgb24gQUkgcHJvdmlkZXJzLCBnaXZpbmcgV29yZFByZXNzIGEgc3RhbmRhcmRpemVkIHdheSB0byBoYW5kbGUgQVBJIGtleSBtYW5hZ2VtZW50LCBwcm92aWRlciBkaXNjb3ZlcnksIGFuZCBhZG1pbiBVSSBmb3IgY29uZmlndXJpbmcgQUkgc2VydmljZXMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhpcyBwb3N0IHdhbGtzIHRocm91Z2ggd2hhdCB0aGUgQ29ubmVjdG9ycyBBUEkgZG9lcywgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLCBhbmQgd2hhdCBwbHVnaW4gZGV2ZWxvcGVycyBuZWVkIHRvIGtub3cuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+VGFibGUgb2YgQ29udGVudHM8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpsaXN0IC0tPgo8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iI3doYXQtaXMtYS1jb25uZWN0b3IiPldoYXQgaXMgYSBjb25uZWN0b3I\/PC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iI2hvdy1haS1wcm92aWRlcnMtYXJlLWF1dG8tZGlzY292ZXJlZCI+SG93IEFJIHByb3ZpZGVycyBhcmUgYXV0by1kaXNjb3ZlcmVkPC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxhIGhyZWY9IiNhdXRoZW50aWNhdGlvbi1hbmQtYXBpLWtleS1tYW5hZ2VtZW50Ij5BdXRoZW50aWNhdGlvbiBhbmQgQVBJIGtleSBtYW5hZ2VtZW50PC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iI3B1YmxpYy1hcGktZnVuY3Rpb25zIj5QdWJsaWMgQVBJIGZ1bmN0aW9uczwvYT48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxhIGhyZWY9IiNvdmVycmlkaW5nLWNvbm5lY3Rvci1tZXRhZGF0YSI+T3ZlcnJpZGluZyBjb25uZWN0b3IgbWV0YWRhdGE8L2E+PC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48YSBocmVmPSIjdGhlLWluaXRpYWxpemF0aW9uLWxpZmVjeWNsZSI+VGhlIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZTwvYT48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxhIGhyZWY9IiNsb29raW5nLWFoZWFkIj5Mb29raW5nIGFoZWFkPC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPldoYXQgaXMgYSBjb25uZWN0b3I\/PC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkVhY2ggY29ubmVjdG9yIGlzIHN0b3JlZCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgc2hhcGU6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnN5bnRheGhpZ2hsaWdodGVyL2NvZGUgLS0+CjxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPmFycmF5KAogICAgKSwKICAgICksCik8L3ByZT4KPCEtLSAvd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Ib3cgQUkgcHJvdmlkZXJzIGFyZSBhdXRvLWRpc2NvdmVyZWQ8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPklmIHlvdSdyZSBidWlsZGluZyBhbiBBSSBwcm92aWRlciBwbHVnaW4gdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIFdQIEFJIENsaWVudCwgeW91IGRvbid0IG5lZWQgdG8gcmVnaXN0ZXIgYSBjb25uZWN0b3IgbWFudWFsbHkuIFRoZSBDb25uZWN0b3JzIEFQSSBhdXRvbWF0aWNhbGx5IGRpc2NvdmVycyBwcm92aWRlcnMgZnJvbSB0aGUgV1AgQUkgQ2xpZW50J3MgZGVyZWdpc3RyeSBhbmQgY3JlYXRlcyBjb25uZWN0b3JzIHdpdGggdGhlIGNvcnJlY3QgbWV0YWRhdGEuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+SGVyZSdzIHdoYXQgaGFwcGVucyBkdXJpbmcgaW5pdGlhbGl6YXRpb246PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmxpc3QgeyJvcmRlcmVkIjp0cnVlfSAtLT4KPG9sIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPkJ1aWx0LWluIGNvbm5lY3RvcnMgKEFudGhyb3BpYywgR29vZ2xlLCBPcGVuQUkpIGFyZSByZWdpc3RlcmVkIHdpdGggaGFyZGNvZGVkIGRlZmF1bHRzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+VGhlIHN5c3RlbSBxdWVyaWVzIHRoZSBBQ2xpZW50ZWdpc3RyeSBmb3IgYWxsIHJlZ2lzdGVyZWQgcHJvdmlkZXJzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+Rm9yIGVhY2ggcHJvdmlkZXIsIG1ldGFkYXRhIChuYW1lLCBkZXNjcmlwdGlvbiwgbG9nbywgYXV0aGVudGljYXRpb24gbWV0aG9kKSBpcyBtZXJnZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0cywgd2l0aCBwcm92aWRlciByZWdpc3RyeSB2YWx1ZXMgdGFraW5nIHByZWNlZGVuY2UuPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5UaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gZmlyZXMgc28gcGx1Z2lucyBjYW4gb3ZlcnJpZGUgbWV0YWRhdGEgb3IgcmVnaXN0ZXIgYWRkaXRpb25hbCBjb25uZWN0b3JzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L29sPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPjxzdHJvbmc+SW4gc2hvcnQ6PC9zdHJvbmc+IGlmIHlvdXIgQUkgcHJvdmlkZXIgcGx1Z2luIHJlZ2lzdGVycyB3aXRoIHRoZSBXUCBBSSBDbGllbnQsIHRoZSBjb25uZWN0b3IgaXMgY3JlYXRlZCBmb3IgeW91LiBObyBhZGRpdGlvbmFsIGNvZGUgaXMgbmVlZGVkLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxzdHJvbmc+PGNvZGU+bmFtZTwvY29kZT48L3N0cm9uZz4sIDxzdHJvbmc+PGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+PC9zdHJvbmc+LCBhbmQgPHN0cm9uZz48Y29kZT5sb2dvX3VybDwvY29kZT48L3N0cm9uZz4gYXJlIHNob3duIG9uIHRoZSBjYXJkLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PHN0cm9uZz48Y29kZT5wbHVnaW4uc2x1ZzwvY29kZT48L3N0cm9uZz4gZW5hYmxlcyBpbnN0YWxsL2FjdGl2YXRlIGNvbnRyb2xzIOKAlCB0aGUgc2NyZWVuIGNoZWNrcyB3aGV0aGVyIHRoZSBhc3NvY2lhdGVkIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGFjdGl2ZSwgYW5kIHNob3dzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gYnV0dG9uLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PHN0cm9uZz48Y29kZT5hdXRoZW50aWNhdGlvbi5jcmVkZW50aWFsc191cmw8L2NvZGU+PC9zdHJvbmc+IGlzIHJlbmRlcmVkIGFzIGEgbGluayBkaXJlY3RpbmcgdXNlcnMgdG8gdGhlIHByb3ZpZGVyJ3Mgc2l0ZSB0byBvYnRhaW4gQVBJIGNyZWRlbnRpYWxzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+Rm9yIDxzdHJvbmc+PGNvZGU+YXBpX2tleTwvY29kZT48L3N0cm9uZz4gY29ubmVjdG9ycywgdGhlIHNjcmVlbiBzaG93cyB0aGUgY3VycmVudCBrZXkgc291cmNlIChlbnZpcm9ubWVudCB2YXJpYWJsZSwgUEhQIGNvbnN0YW50LCBvciBkYXRhYmFzZSkgYW5kIGNvbm5lY3Rpb24gc3RhdHVzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BdXRoZW50aWNhdGlvbiBhbmQgQVBJIGtleSBtYW5hZ2VtZW50PC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5Db25uZWN0b3JzIHN1cHBvcnQgdHdvIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHM6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48c3Ryb25nPjxjb2RlPmFwaV9rZXk8L2NvZGU+PC9zdHJvbmc+IOKAlCBSZXF1aXJlcyBhbiBBUEkga2V5LCB3aGljaCBjYW4gYmUgcHJvdmlkZWQgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlLCBQSFAgY29uc3RhbnQsIG9yIHRoZSBkYXRhYmFzZSAoY2hlY2tlZCBpbiB0aGF0IG9yZGVyKS48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxzdHJvbmc+PGNvZGU+bm9uZTwvY29kZT48L3N0cm9uZz4g4oCUIE5vIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpoIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BUEkga2V5IHNvdXJjZSBwcmlvcml0eTwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Rm9yIDxjb2RlPmFwaV9rZXk8L2NvZGU+IGNvbm5lY3RvcnMsIHRoZSBzeXN0ZW0gbG9va3MgZm9yIGEgZSBpbiB0aGlzIG9yZGVyOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpsaXN0IHsib3JkZXJlZCI6dHJ1ZX0gLS0+CjxvbCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48c3Ryb25nPkVudmlyb25tZW50IHZhcmlhYmxlPC9zdHJvbmc+IOKAlCBlLmcuLCA8Y29kZT5BTlRIUk9QSUNfQVBJX0tFWTwvY29kZT48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxzdHJvbmc+UEhQIGNvbnN0YW50PC9zdHJvbmc+IOKAlCBlLmcuLCA8Y29kZT5kZWZpbmUoICdBTlRIUk9QSUNfQVBJX0tFWScsICdzay0uLi4nICk7PC9jb2RlPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PHN0cm9uZz5EYXRhYmFzZTwvc3Ryb25nPiDigJQgc3RvcmVkIHRocm91Z2ggdGhlIGFkbWluIHNjcmVlbiBlZyA8Y29kZT5jb25lY29yYWlhbnRocm9waWM8L2NvZGU+IHN0PD48L2U+PC8+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5QdWJsaWMgQVBJIGZ1bmN0aW9uczwvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhlIENvbm5lY3RvcnMgQVBJIHByb3ZpZGVzIHRocmVlIHB1YmxpYyBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSByZWdpc3RyeS4gVGhlc2UgYXJlIGF2YWlsYWJsZSBhZnRlciA8Y29kZT5pbml0PC9jb2RlPi48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj48Y29kZT53cF9pc19jb25uZWN0b3JfcmVnaXN0ZXJlZCgpPC9jb2RlPjwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Q2hlY2tzIGlmIGEgY29ubmVjdG9yIGlzIHJlZ2lzdGVyZWQ6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnN5bnRheGhpZ2hsaWdodGVyL2NvZGUgLS0+CjxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPmlmICggd3BfaXNfY29ubmVjdG9yX3JlZ2lzdGVyZWQoICdhbnRocm9waWMnICkgKSB7CiAgICAvLyBUaGUgQW50aHJvcGljIGNvbm5lY3RvciBpcyBhdmFpbGFibGUuCn08L3ByZT4KPCEtLSAvd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj48Y29kZT53cF9nZXRfY29ubmVjdG9yKCk8L2NvZGU+PC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5SZXRyaWV2ZXMgYSBzaW5nbGUgY29ubmVjdG9yJ3MgZGF0YTo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSAtLT4KPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+JGNvbm5lY3RvciA9IHdwX2dldF9jb25uZWN0b3IoICdhbnRocm9waWMnICk7CmlmICggJGNvbm5lY3RvciApIHsKICAgIGVjaG8gJGNvbm5lY3RvclsnbmFtZSddOyAvLyAnQW50aHJvcGljJwp9PC9wcmU+CjwhLS0gL3dwOnN5bnRheGhpZ2hsaWdodGVyL2NvZGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGtleXM6IDxjb2RlPm5hbWU8L2NvZGU+LCA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4sIDxjb2RlPnR5cGU8L2NvZGU+LCA8Y29kZT5hdXRoZW50aWNhdGlvbjwvY29kZT4sIGFuZCBvcHRpb25hbGx5IDxjb2RlPmxvZ29fdXJsPC9jb2RlPiBhbmQgPGNvZGU+cGx1Z2luPC9jb2RlPi4gUmV0dXJucyA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgY29ubmVjdG9yIGlzIG5vdCByZWdpc3RlcmVkLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjN9IC0tPgo8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPjxjb2RlPndwX2dldF9jb25uZWN0b3JzKCk8L2NvZGU+PC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5SZXRyaWV2ZXMgYWxsIHJlZ2lzdGVyZWQgY29ubmVjdG9ycywga2V5ZWQgYnkgY29ubmVjdG9yIElEOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpzeW50YXhoaWdobGlnaHRlci9jb2RlIC0tPgo8cHJlIGNsYXNzPSJ3cC1ibG9jay1zeW50YXhoaWdobGlnaHRlci1jb2RlIj4kY29ubmVjdG9ycyA9IHdwX2dldF9jb25uZWN0b3JzKCk7CiAgICBwcmludGYoICclczogJXMnLCAkY29ubmVjdG9yWyduYW1lJ10sICRjb25uZWN0b3JbJ2Rlc2NyaXB0aW9uJ10gKTsKfTwvcHJlPgo8IS0tIC93cDpzeW50YXhoaWdobGlnaHRlci9jb2RlIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk92ZXJyaWRpbmcgY29ubmVjdG9yIG1ldGFkYXRhPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gZmlyZXMgYWZ0ZXIgYWxsIGJ1aWx0LWluIGFuZCBhdXRvLWRpc2NvdmVyZWQgY29ubmVjdG9ycyBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gUGx1Z2lucyBjYW4gdXNlIHRoaXMgaG9vayB0byBvdmVycmlkZSBtZXRhZGF0YSBvbiBleGlzdGluZyBjb25uZWN0b3JzLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlNpbmNlIHRoZSByZWdpc3RyeSByZWplY3RzIGR1cGxpY2F0ZSBJRHMsIG92ZXJyaWRpbmcgcmVxdWlyZXMgYW4gdW5yZWdpc3RlciwgbW9kaWZ5LCByZWdpc3RlciBzZXF1ZW5jZTo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSAtLT4KPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+YWRkX2FjdGlvbiggJ3dwX2Nvbm5lY3RvcnNfaW5pdCcsIGZ1bmN0aW9uICggV1BfQ29ubmVjdG9yX1JlZ2lzdHJ5ICRyZWdpc3RyeSApIHsKICAgICAgICAkY29ubmVjdG9yWydkZXNjcmlwdGlvbiddID0gX18oICdDdXN0b20gZGVzY3JpcHRpb24gZm9yIEFudGhyb3BpYy4nLCAnbXktcGx1Z2luJyApOwogICAgfQp9ICk7PC9wcmU+CjwhLS0gL3dwOnN5bnRheGhpZ2hsaWdodGVyL2NvZGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+S2V5IHBvaW50cyBhYm91dCB0aGUgb3ZlcnJpZGUgcGF0dGVybjo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPkFsd2F5cyBjaGVjayA8Y29kZT5pc19yZWdpc3RlcmVkKCk8L2NvZGU+IGJlZm9yZSBjYWxsaW5nIDxjb2RlPnVucmVnaXN0ZXIoKTwvY29kZT4g4oCUIGNhbGxpbmcgPGNvZGU+dW5yZWdpc3RlcigpPC9jb2RlPiBvbiBhIG5vbi1leGlzdGVudCBjb25uZWN0b3IgdHJpZ2dlcnMgYSA8Y29kZT5fZG9pbmdfaXRfd3JvbmcoKTwvY29kZT4gbm90aWNlLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGNvZGU+dW5yZWdpc3RlcigpPC9jb2RlPiByZXR1cm5zIHRoZSBjb25uZWN0b3IgZGF0YSwgd2hpY2ggeW91IGNhbiBtb2RpZnkgYW5kIHBhc3MgYmFjayB0byA8Y29kZT5yZWdpc3RlcigpPC9jb2RlPi48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvdWw+CjwhLS0gL3dwOmxpc3QgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UmVnaXN0cnkgbWV0aG9kczwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+V2l0aGluIHRoZSA8Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+IGNhbGxiYWNrLCB0aGUgPGNvZGU+V1BfQ29ubmVjdG9yX1JlZ2lzdHJ5PC9jb2RlPiBpbnN0YW5jZSBwcm92aWRlcyB0aGVzZSBtZXRob2RzOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDp0YWJsZSAtLT4KPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2stdGFibGUiPjx0YWJsZSBjbGFzcz0iaGFzLWZpeGVkLWxheW91dCI+PHRoZWFkPjx0cj48dGg+TWV0aG9kPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZT5yZWdpc3RlciggJGlkLCAkYXJncyApPC9jb2RlPjwvdGQ+PHRkPlJlZ2lzdGVyIGEgbmV3IGNvbm5lY3Rvci4gUmV0dXJucyB0aGUgY29ubmVjdG9yIGRhdGEgb3IgPGNvZGU+bnVsbDwvY29kZT4gb24gZmFpbHVyZS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT51bnJlZ2lzdGVyKCAkaWQgKTwvY29kZT48L3RkPjx0ZD5SZW1vdmUgYSBjb25uZWN0b3IgYW5kIHJldHVybiBpdHMgZGF0YS4gUmV0dXJucyA8Y29kZT5udWxsPC9jb2RlPiBpZiBub3QgZm91bmQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+aXNfcmVnaXN0ZXJlZCggJGlkICk8L2NvZGU+PC90ZD48dGQ+Q2hlY2sgaWYgYSBjb25uZWN0b3IgZXhpc3RzLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPmdldF9yZWdpc3RlcmVkKCAkaWQgKTwvY29kZT48L3RkPjx0ZD5SZXRyaWV2ZSBhIHNpbmdsZSBjb25uZWN0b3IncyBkYXRhLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPmdldF9hbGxfcmVnaXN0ZXJlZCgpPC9jb2RlPjwvdGQ+PHRkPlJldHJpZXZlIGFsbCByZWdpc3RlcmVkIGNvbm5lY3RvcnMuPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2ZpZ3VyZT4KPCEtLSAvd3A6dGFibGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+T3V0c2lkZSBvZiB0aGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBjYWxsYmFjaywgdXNlIHRoZSBwdWJsaWMgQVBJIGZ1bmN0aW9ucyAoPGNvZGU+d3BfZ2V0X2Nvbm5lY3RvcigpPC9jb2RlPiwgPGNvZGU+d3BfZ2V0X2Nvbm5lY3RvcnMoKTwvY29kZT4sIDxjb2RlPndwX2lzX2Nvbm5lY3Rvcl9yZWdpc3RlcmVkKCk8L2NvZGU+KSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgcmVnaXN0cnkgZGlyZWN0bHkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+VGhlIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZTwvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaGVscHMgd2hlbiBkZWNpZGluZyB3aGVyZSB0byBob29rIGluOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkR1cmluZyB0aGUgPGNvZGU+aW5pdDwvY29kZT4gYWN0aW9uLCA8Y29kZT5fd3BfY29ubmVjdG9yc19pbml0KCk8L2NvZGU+IHJ1bnMgYW5kOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpsaXN0IC0tPgo8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+Q3JlYXRlcyB0aGUgPGNvZGU+V1BfQ29ubmVjdG9yX1JlZ2lzdHJ5PC9jb2RlPiBzaW5nbGV0b24uPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+QXV0by1kaXNjb3ZlcnMgcHJvdmlkZXJzIGZyb20gdGhlIFdQIEFJIENsaWVudCByZWdpc3RyeSBhbmQgbWVyZ2VzIHRoZWlyIG1ldGFkYXRhIG9uIHRvcCBvZiBkZWZhdWx0cy48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPkZpcmVzIHRoZSA8c3Ryb25nPjxjb2RlPndwX2Nvbm5lY3RvcnNfaW5pdDwvY29kZT48L3N0cm9uZz4gYWN0aW9uIOKAlCB0aGlzIGlzIHdoZXJlIHBsdWdpbnMgb3ZlcnJpZGUgbWV0YWRhdGEgb3IgcmVnaXN0ZXIgYWRkaXRpb25hbCBjb25uZWN0b3JzLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoZSA8Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+IGFjdGlvbiBpcyB0aGUgb25seSBzdXBwb3J0ZWQgZW50cnkgcG9pbnQgZm9yIG1vZGlmeWluZyB0aGUgcmVnaXN0cnkuIEF0dGVtcHRpbmcgdG8gc2V0IHRoZSByZWdpc3RyeSBpbnN0YW5jZSBvdXRzaWRlIG9mIDxjb2RlPmluaXQ8L2NvZGU+IHRyaWdnZXJzIGEgPGNvZGU+X2RvaW5nX2l0X3dyb25nKCk8L2NvZGU+IG5vdGljZS48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Mb29raW5nIGFoZWFkPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+RnV0dXJlIHJlbGVhc2VzIGFyZSBleHBlY3RlZCB0bzo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPkV4cGFuZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYmV5b25kIDxjb2RlPmFwaV9rZXk8L2NvZGU+IGFuZCA8Y29kZT5ub25lPC9jb2RlPi48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5Qcm92aWRlIGEgY2xpZW50LXNpZGUgSmF2YVNjcmlwdCByZWdpc3RyYXRpb24gQVBJIGZvciBjdXN0b20gY29ubmVjdG9yIFVJLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPldoZW4gdGhvc2UgY2FwYWJpbGl0aWVzIGxhbmQsIHRoZSA8Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+IGFjdGlvbiB3aWxsIGJlIHRoZSBwcmltYXJ5IGhvb2sgZm9yIHJlZ2lzdGVyaW5nIG5ldyBjb25uZWN0b3IgdHlwZXMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnNlcGFyYXRvciAtLT4KPCEtLSAvd3A6c2VwYXJhdG9yIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlByb3BzIHRvIEBqb3JnZWZpbGlwZWNvc3RhLCBAc2hhdW5hbmRyZXdzLCBAZmxpeCwgQGphbmQgb3RoZXJzIGZvciBjb250cmlidXRpbmcgdG8gdGhlIENvbm5lY3RvcnMgcmVlbjxwPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+c3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5b3M5MHNjLnN0YXRldmVyc2lvbiZndDsmbmJzcDsmbmJwO3MmZ3Q7Jmd0OyZuYnNwOz50wqDCoD4+wqBocmVlPGxpPjxhIGhyZWY9IiN0aGUtc2V0dGluZ3MtLWNvbm5lY3RvcnMtYWRtaW4tc2NyZWVuIj5UaGUgU2V0dGluZ3MgPiBDb25uZWN0b3JzIGFkbWluIHNjcmVlbjwvYT48L2xpPgo8cD5Xb3JkUHJlc3MgNy4wIGNvbWVzIHdpdGggdGhyZWUgZmVhdHVyZWQgY29ubmVjdG9yc+KAlEFudGhyb3BpYywgR29vZ2xlLCBhbmQgT3BlbkFJ4oCUYWNjZXNzaWJsZSBmcm9tIHRoZSBuZXfCoDxzdHJvbmc+U2V0dGluZ3Mg4oaSIENvbm5lY3RvcnM8L3N0cm9uZz7CoHNjcmVlbiwgbWFraW5nIGluc3RhbGxhdGlvbiBzZWFtbGVzcy48L3A+CiAgICAnbmFtZScgICAgICAgICAgID0+ICdBbnRocm9waWMnLAogICAgJ2Rlc2NyaXB0aW9uJyAgICA9PiAnVGV4dCBnZW5lcmF0aW9uIHdpdGggQ2xhdWRlLicsCiAgICAnbG9nb191cmwnICAgICAgID0+ICdodHRwczovL2V4YW1wbGUuY29tL2FudGhyb3BpYy1sb2dvLnN2ZycsCiAgICAndHlwZScgICAgICAgICAgID0+ICdhaV9wcm92aWRlcicsCiAgICAnYXV0aGVudGljYXRpb24nID0+IGFycmF5KAogICAgICAgICdtZXRob2QnICAgICAgICAgID0+ICdhcGlfa2V5JywKICAgICAgICAnY3JlZGVudGlhbHNfdXJsJyA9PiAnaHR0cHM6Ly9wbGF0Zm9ybS5jbGF1ZGUuY29tL3NldHRpbmdzL2tleXMnLAogICAgICAgICdzZXR0aW5nX25hbWUnICAgID0+ICdjb25uZWN0b3JzX2FpX2FudGhyb3BpY19hcGlfa2V5JywKICAgICdwbHVnaW4nICAgICAgICAgPT4gYXJyYXkoCiAgICAgICAgJ3NsdWcnID0+ICdhaS1wcm92aWRlci1mb3ItYW50aHJvcGljJywKPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5UaGUgU2V0dGluZ3MgPiBDb25uZWN0b3JzIGFkbWluIHNjcmVlbjwvaDI+CjxwPlJlZ2lzdGVyZWQgY29ubmVjdG9ycyBhcHBlYXIgb24gYSBuZXcgPHN0cm9uZz5TZXR0aW5ncyA+IENvbm5lY3RvcnM8L3N0cm9uZz4gYWRtaW4gc2NyZWVuLiBUaGUgc2NyZWVuIHJlbmRlcnMgZWFjaCBjb25uZWN0b3IgYXMgYSBjYXJkLCBhbmQgdGhlIHJlZ2lzdHJ5IGRhdGEgZHJpdmVzIHdoYXQncyBkaXNwbGF5ZWQ6PC9wPgpmb3JlYWNoICggJGNvbm5lY3RvcnMgYXMgJGlkID0+ICRjb25uZWN0b3IgKSB7CiAgICBpZiAoICRyZWdpc3RyeS0+aXNfcmVnaXN0ZXJlZCggJ2FudGhyb3BpYycgKSApIHsKICAgICAgICAkY29ubmVjdG9yID0gJHJlZ2lzdHJ5LT51bnJlZ2lzdGVyKCAnYW50aHJvcGljJyApOwogICAgICAgICRyZWdpc3RyeS0+cmVnaXN0ZXIoICdhbnRocm9waWMnLCAkY29ubmVjdG9yICk7CjxsaT5SZWdpc3RlcnMgYnVpbHQtaW4gY29ubmVjdG9ycyAoQW50aHJvcGljLCBHb29nbGUsIE9wZW5BSSkgd2l0aCBoYXJkY29kZWQgZGVmYXVsdHMuPC9saT4KPGhyIGNsYXNzPSJ3cC1ibG9jay1zZXBhcmF0b3IgaGFzLWFscGhhLWNoYW5uZWwtb3BhY2l0eSIvPgpzdGF0ZXZlcnNpb25vcmlnaW5hbENvbnRlbnRBa2lzbWV0LCBzdGF0ZXZlcnNpb24tejAtOV8tIG9ubHkpIGFscGhhbnVtZXJpYyBhbmQgaHlwaGVucywgdW5kZXJzY29yZXMsPGxpPkNvbm5lY3RvciBJRHMgbXVzdCBtYXRjaCB0aGUgcGF0dGVybiA8Y29kZT4vXlthLXowLTlfLV0rJC88L2NvZGU+IChsb3dlcmNhc2UgYWxwaGFudW1lcmljLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgb25seSkuPC9saT4KZG9jdW1lbnRzbHVnQWtpc21ldCwgZm91ciB0aGF0IGF1dGhlbnRjYXRlIHdpdGggQVBJIGtleWlhbiAgdGVybWluZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uZXRhZGF0YSByZWdpc3RlcmVkIHdpdGggdGhlIGNvbm5lY3RvciA8Y29kZT5jb25uZWN0b3JzX3t0eXBlfV97JGlkfV9hcGlfa2V5PC9jb2RlPi4gSXQncyBhbHNvICAuRm9yIEFJIHByb3ZpZGVycywgdGhlcmUgaXMgYSBzcGVjaWZpY24gcGxhY2Vmb3IgdG8gPGNvZGU+QU5USFJPUElDX0FQSV9LRVk8L2NvZGU+KS4gcHJvdmlkZXJfYWkkcHJvdmlkZXJfcG9zc2libGUgdG8gc2V0IGEgY3VzdG9tIG5hbWUgdXNpbmcgPGNvZGU+c2V0dGluZ19uYW1lPC9jb2RlPiBwcm9wZXJ0eSBGb3IgICwgZW52aXJvbm1lbnQgdmFyaWFibGUgKDxjb2RlPmVudl92YXJfbmFtZTwvY290aGVyIHR5cGVzb2YgcHJvdmlkZXJzYW4gb2RlPikgYW5kIGEgUEhQIGNvbnN0YW50ICg8Y29kZT5jb25zdGFudF9uYW1lPC9jb2RlPikgY2FuIGJlIG9wdGlvbmFsbHkgc2V0IHRvIGFueSAgdmFsdWUub3B0aW1pemVkIGZvciBBSSBwcm92aWRlcnN3YXNubmVjdG9ycyB3aXRoIDxjb2RlPmFwaV9rZXk8L2NvZGU+IGF1dGhlbnRpY2F0aW9uIHJlY2VpdmUgdGhlIGZ1bGwgYWRtaW4gVUkgdHJlYXRtZW50LiBUaGUgUEhQIHJlZ2lzdHJ5IGFscmVhZHkgYWNjZXB0cyBhbnkgY29ubmVjdG9yIHR5cGUg4oCUIHdoYXQncyBtaXNzaW5nIGlzIHRoZSBmcm9udGVuZCBpbnRlZ3JhdGlvbiBmb3IgY29ubmVjdG8gcnMgd2l0aCBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtc1Byb3ZkZWEgY2xpZW4tc2lkSmF2YVNjaXB0IHJnaWFBUEkgY3Vzb29uZWN0b3IgVUlhY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NPZmZlciBtb3JlIFVJIGludGVncmF0aW8gYnVpbHQtaW5ucyBiZXlvbmQgYXBpX2tleTxjb2RlPjwvY29kZT4uPHA+QSBjb25uZWN0b3IgcmVwcmVzZW50cyBhIGNvbm5lY3Rpb24gdG8gYW4gZXh0ZXJuYWwgc2VydmljZS4gRWFjaCBjb25uZWN0b3IgY2FycmllcyBzdGFuZGFyZGl6ZWQgbWV0YWRhdGEg4oCUIGEgZGlzcGxheSBuYW1lLCBkZXNjcmlwdGlvbiwgbG9nbywgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbiwgYW5kIGFuIG9wdGlvbmFsIGFzc29jaWF0aW9uIHdpdGggYSBXb3JkUHJlc3Mub3JnIHBsdWdpbi4gVGhlIHN5c3RlbSBjdXJyZW50bHkgZm9jdXNlcyBvbiBwcm92aWRlcnMgdGhhdCBhdXRoZW50aWNhdGUgd2l0aCBhbiBBUEkga2V5LCBidXQgdGhlIGFyY2hpdGVjdHVyZSBpcyBkZXNpZ25lZCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgY29ubmVjdG9yIHR5cGVzIGluIGZ1dHVyZSByZWxlYXNlcy48L3A+CjxwPkNvbm5lY3RvcnMgd2l0aCBvdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSBzdG9yZWQgaW4gdGhlIFBIUCByZWdpc3RyeSBhbmQgZXhwb3NlZCB2aWEgdGhlIHNjcmlwdCBtb2R1bGUgZGF0YSwgYnV0IGN1cnJlbnRseSByZXF1aXJlIGEgY2xpZW50LXNpZGUgSmF2YVNjcmlwdCByZWdpc3RyYXRpb24gZm9yIGN1c3RvbSBmcm9udGVuZCBVSS48L3A+CjxwPlRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgKDxjb2RlPmFwaV9rZXk8L2NvZGU+IG9yIDxjb2RlPm5vbmU8L2NvZGU+KSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtZXRhZGF0YSByZWdpc3RlcmVkIHdpdGggdGhlIGNvbm5lY3Rvci4gRm9yIHByb3ZpZGVycyB1c2luZyA8Y29kZT5hcGlfa2V5PC9jb2RlPiwgYSBkYXRhYmFzZSBzZXR0aW5nIG5hbWUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBhdHRlcm4gPGNvZGU+Y29ubmVjdG9yc197JHByb3ZpZGVyX3R5cGV9X3skcHJvdmlkZXJfaWR9X2FwaV9rZXk8L2NvZGU+LiAgSXQncyBhbHNvIHBvc3NpYmxlIHRvIHNldCBhIGN1c3RvbSBuYW1lIHVzaW5nIDxjb2RlPnNldHRpbmdfbmFtZTwvY29kZT4gcHJvcGVydHkuIEFQSSBrZXlzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgYXJlIG5vdCBlbmNyeXB0ZWQgYnV0IGFyZSBtYXNrZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiBFbmNyeXB0aW9uIGlzIGJlaW5nIGV4cGxvcmVkIGluIGEgZm9sbG93LXVwIHRpY2tldDrCoDxhIGhyZWY9Imh0dHBzOi8vY29yZS50cmFjLndvcmRwcmVzcy5vcmcvdGlja2V0LzY0Nzg5Ij4jNjQ3ODk8L2E+LjwvcD4KPHA+Rm9yIEFJIHByb3ZpZGVycywgdGhlcmUgaXMgYSBzcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbiBpbiBwbGFjZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBQSFAgY29uc3RhbnRzOiA8Y29kZT57UFJPVklERVJfSUR9X0FQSV9LRVk8L2NvZGU+IChlLmcuLCB0aGUgPGNvZGU+YW50aHJvcGljPC9jb2RlPiBwcm92aWRlciBtYXBzIHRvIDxjb2RlPkFOVEhST1BJQ19BUElfS0VZPC9jb2RlPikuIEZvciBvdGhlciB0eXBlcyBvZiBwcm92aWRlcnMsIGFuIGVudmlyb25tZW50IHZhcmlhYmxlICg8Y29kZT5lbnZfdmFyX25hbWU8L2NvZGU+KSBhbmQgYSBQSFAgY29uc3RhbnQgKDxjb2RlPmNvbnN0YW50X25hbWU8L2NvZGU+KSBjYW4gYmUgb3B0aW9uYWxseSBzZXQgdG8gYW55IHZhbHVlLjwvcD4KPHA+VGhlIENvbm5lY3RvcnMgQVBJIGluIFdvcmRQcmVzcyA3LjAgd2FzIG9wdGltaXplZCBmb3IgQUkgcHJvdmlkZXJzLCBidXQgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGRlc2lnbmVkIHRvIGdyb3cuIEN1cnJlbnRseSwgb25seSBjb25uZWN0b3JzIHdpdGggPGNvZGU+YXBpX2tleTwvY29kZT4gYXV0aGVudGljYXRpb24gcmVjZWl2ZSB0aGUgZnVsbCBhZG1pbiBVSSB0cmVhdG1lbnQuIFRoZSBQSFAgcmVnaXN0cnkgYWxyZWFkeSBhY2NlcHRzIGFueSBjb25uZWN0b3IgdHlwZSDigJQgd2hhdCdzIG1pc3NpbmcgaXMgdGhlIGZyb250ZW5kIGludGVncmF0aW9uIGZvciBjb25uZWN0b3JzIHdpdGggZGlmZmVyZW50IGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuPC9wPgo8bGk+T2ZmZXIgbW9yZSBidWlsdC1pbiBVSSBpbnRlZ3JhdGlvbnMgYmV5b25kIDxjb2RlPmFwaV9rZXk8L2NvZGU+LjwvbGk+CnN0YXRldmVyc2lvbmZhdWx0IDxjb2RlPmk6OmRmYXVsdFJlKCk8L2NvZGU+cGFyYWdyYXAgLS0+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcge2xldmVsInN0dGluZ3ZhbHVlICwuLm50c19fX2FwaV9rZXlldGluZy9saQohLS0gd3A6bGlzdC1pdG0gLS1vbGxpc3QgL2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFdvcmRQcmVzcyA3LjAgaW50cm9kdWNlcyB0aGUgPHN0cm9uZz5Db25uZWN0b3JzIEFQSTwvc3Ryb25nPiDigJQgYSBuZXcgZnJhbWV3b3JrIGZvciByZWdpc3RlcmluZyBhbmQgbWFuYWdpbmcgY29ubmVjdGlvbnMgdG8gZXh0ZXJuYWwgc2VydmljZXMuIFRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIEFJIHByb3ZpZGVycywgZ2l2aW5nIFdvcmRQcmVzcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gaGFuZGxlIEFQSSBrZXkgbWFuYWdlbWVudCwgcHJvdmlkZXIgZGlzY292ZXJ5LCBhbmQgYWRtaW4gVUkgZm9yIGNvbmZpZ3VyaW5nIEFJIHNlcnZpY2VzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRoaXMgcG9zdCB3YWxrcyB0aHJvdWdoIHdoYXQgdGhlIENvbm5lY3RvcnMgQVBJIGRvZXMsIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZCwgYW5kIHdoYXQgcGx1Z2luIGRldmVsb3BlcnMgbmVlZCB0byBrbm93LmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRhYmxlIG9mIENvbnRlbnRzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PGEgaHJlZj0iI3doYXQtaXMtYS1jb25uZWN0b3IiPldoYXQgaXMgYSBjb25uZWN0b3I\/PC9hPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PGEgaHJlZj0iI2hvdy1haS1wcm92aWRlcnMtYXJlLWF1dG8tZGlzY292ZXJlZCI+SG93IEFJIHByb3ZpZGVycyBhcmUgYXV0by1kaXNjb3ZlcmVkPC9hPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PGEgaHJlZj0iI3RoZS1zZXR0aW5ncy0tY29ubmVjdG9ycy1hZG1pbi1zY3JlZW4iPlRoZSBTZXR0aW5ncyAgQ29ubmVjdG9ycyBhZG1pbiBzY3JlZW48L2E+aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8YSBocmVmPSIjYXV0aGVudGljYXRpb24tYW5kLWFwaS1rZXktbWFuYWdlbWVudCI+QXV0aGVudGljYXRpb24gYW5kIEFQSSBrZXkgbWFuYWdlbWVudDwvYT5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxhIGhyZWY9IiNwdWJsaWMtYXBpLWZ1bmN0aW9ucyI+UHVibGljIEFQSSBmdW5jdGlvbnM8L2E+aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8YSBocmVmPSIjb3ZlcnJpZGluZy1jb25uZWN0b3ItbWV0YWRhdGEiPk92ZXJyaWRpbmcgY29ubmVjdG9yIG1ldGFkYXRhPC9hPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PGEgaHJlZj0iI3RoZS1pbml0aWFsaXphdGlvbi1saWZlY3ljbGUiPlRoZSBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGU8L2E+aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8YSBocmVmPSIjbG9va2luZy1haGVhZCI+TG9va2luZyBhaGVhZDwvYT5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFdoYXQgaXMgYSBjb25uZWN0b3I\/bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEEgY29ubmVjdG9yIHJlcHJlc2VudHMgYSBjb25uZWN0aW9uIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UuIEVhY2ggY29ubmVjdG9yIGNhcnJpZXMgc3RhbmRhcmRpemVkIG1ldGFkYXRhIOKAlCBhIGRpc3BsYXkgbmFtZSwgZGVzY3JpcHRpb24sIGxvZ28sIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIGFuZCBhbiBvcHRpb25hbCBhc3NvY2lhdGlvbiB3aXRoIGEgV29yZFByZXNzLm9yZyBwbHVnaW4uIFRoZSBzeXN0ZW0gY3VycmVudGx5IGZvY3VzZXMgb24gcHJvdmlkZXJzLCBidXQgdGhlIGFyY2hpdGVjdHVyZSBpcyBkZXNpZ25lZCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgY29ubmVjdG9yIHR5cGVzIGluIGZ1dHVyZSByZWxlYXNlcy5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRXb3JkUHJlc3MgNy4wIGNvbWVzIHdpdGggIGZlYXR1cmVkIGNvbm5lY3RvcnPigJRBbnRocm9waWMsIEdvb2dsZSwgYW5kIE9wZW5BSeKAlGFjY2Vzc2libGUgZnJvbSB0aGUgbmV3PHN0cm9uZz5TZXR0aW5ncyDihpIgQ29ubmVjdG9yczwvc3Ryb25nPnNjcmVlbiwgbWFraW5nIGluc3RhbGxhdGlvbiBzZWFtbGVzcy5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRFYWNoIGNvbm5lY3RvciBpcyBzdG9yZWQgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNoYXBlOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdlbGluZU51bWJlcnNmaXJzdExpbmVOdW1iZXJ3cmFwTGluZXNtYWtlVVJMc0NsaWNrYWJsZXF1aWNrQ29kZWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50SG93IEFJIHByb3ZpZGVycyBhcmUgYXV0by1kaXNjb3ZlcmVkbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudElmIHlvdSdyZSBidWlsZGluZyBhbiBBSSBwcm92aWRlciBwbHVnaW4gdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIFdQIEFJIENsaWVudCwgeW91IGRvbid0IG5lZWQgdG8gcmVnaXN0ZXIgYSBjb25uZWN0b3IgbWFudWFsbHkuIFRoZSBDb25uZWN0b3JzIEFQSSBhdXRvbWF0aWNhbGx5IGRpc2NvdmVycyBwcm92aWRlcnMgZnJvbSB0aGUgV1AgQUkgQ2xpZW50J3MgZGVmYXVsdCByZWdpc3RyeSBhbmQgY3JlYXRlcyBjb25uZWN0b3JzIHdpdGggdGhlIGNvcnJlY3QgbWV0YWRhdGEuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50SGVyZSdzIHdoYXQgaGFwcGVucyBkdXJpbmcgaW5pdGlhbGl6YXRpb246ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRCdWlsdC1pbiBjb25uZWN0b3JzIChBbnRocm9waWMsIEdvb2dsZSwgT3BlbkFJKSBhcmUgcmVnaXN0ZXJlZCB3aXRoIGhhcmRjb2RlZCBkZWZhdWx0cy5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBzeXN0ZW0gcXVlcmllcyB0aGUgPGNvZGU+QWlDbGllbnQ6OmRlZmF1bHRSZWdpc3RyeSgpPC9jb2RlPiBmb3IgYWxsIHJlZ2lzdGVyZWQgcHJvdmlkZXJzLmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50Rm9yIGVhY2ggcHJvdmlkZXIsIG1ldGFkYXRhIChuYW1lLCBkZXNjcmlwdGlvbiwgbG9nbywgYXV0aGVudGljYXRpb24gbWV0aG9kKSBpcyBtZXJnZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0cywgd2l0aCBwcm92aWRlciByZWdpc3RyeSB2YWx1ZXMgdGFraW5nIHByZWNlZGVuY2UuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gZmlyZXMgc28gcGx1Z2lucyBjYW4gb3ZlcnJpZGUgbWV0YWRhdGEgb3IgcmVnaXN0ZXIgYWRkaXRpb25hbCBjb25uZWN0b3JzLmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PHN0cm9uZz5JbiBzaG9ydDo8L3N0cm9uZz4gaWYgeW91ciBBSSBwcm92aWRlciBwbHVnaW4gcmVnaXN0ZXJzIHdpdGggdGhlIFdQIEFJIENsaWVudCwgdGhlIGNvbm5lY3RvciBpcyBjcmVhdGVkIGZvciB5b3UuIE5vIGFkZGl0aW9uYWwgY29kZSBpcyBuZWVkZWQuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIFNldHRpbmdzICBDb25uZWN0b3JzIGFkbWluIHNjcmVlbmxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRSZWdpc3RlcmVkIGNvbm5lY3RvcnMgYXBwZWFyIG9uIGEgbmV3IDxzdHJvbmc+U2V0dGluZ3MgIENvbm5lY3RvcnM8L3N0cm9uZz4gYWRtaW4gc2NyZWVuLiBUaGUgc2NyZWVuIHJlbmRlcnMgZWFjaCBjb25uZWN0b3IgYXMgYSBjYXJkLCBhbmQgdGhlIHJlZ2lzdHJ5IGRhdGEgZHJpdmVzIHdoYXQncyBkaXNwbGF5ZWQ6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8c3Ryb25nPjxjb2RlPm5hbWU8L2NvZGU+PC9zdHJvbmc+LCA8c3Ryb25nPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvc3Ryb25nPiwgYW5kIDxzdHJvbmc+PGNvZGU+bG9nb191cmw8L2NvZGU+PC9zdHJvbmc+IGFyZSBzaG93biBvbiB0aGUgY2FyZC5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+PGNvZGU+cGx1Z2luLnNsdWc8L2NvZGU+PC9zdHJvbmc+IGVuYWJsZXMgaW5zdGFsbC9hY3RpdmF0ZSBjb250cm9scyDigJQgdGhlIHNjcmVlbiBjaGVja3Mgd2hldGhlciB0aGUgYXNzb2NpYXRlZCBwbHVnaW4gaXMgaW5zdGFsbGVkIGFuZCBhY3RpdmUsIGFuZCBzaG93cyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGJ1dHRvbi5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+PGNvZGU+YXV0aGVudGljYXRpb24uY3JlZGVudGlhbHNfdXJsPC9jb2RlPjwvc3Ryb25nPiBpcyByZW5kZXJlZCBhcyBhIGxpbmsgZGlyZWN0aW5nIHVzZXJzIHRvIHRoZSBwcm92aWRlcidzIHNpdGUgdG8gb2J0YWluIEFQSSBjcmVkZW50aWFscy5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEZvciA8c3Ryb25nPjxjb2RlPmFwaV9rZXk8L2NvZGU+PC9zdHJvbmc+IGNvbm5lY3RvcnMsIHRoZSBzY3JlZW4gc2hvd3MgdGhlIGN1cnJlbnQga2V5IHNvdXJjZSAoZW52aXJvbm1lbnQgdmFyaWFibGUsIFBIUCBjb25zdGFudCwgb3IgZGF0YWJhc2UpIGFuZCBjb25uZWN0aW9uIHN0YXR1cy5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudENvbm5lY3RvcnMgd2l0aCBvdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSBzdG9yZWQgaW4gdGhlIFBIUCByZWdpc3RyeSBhbmQgZXhwb3NlZCB2aWEgdGhlIHNjcmlwdCBtb2R1bGUgZGF0YSwgYnV0IGN1cnJlbnRseSByZXF1aXJlIGEgY2xpZW50LXNpZGUgSmF2YVNjcmlwdCByZWdpc3RyYXRpb24gZm9yIGN1c3RvbSBmcm9udGVuZCBVSS5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRBdXRoZW50aWNhdGlvbiBhbmQgQVBJIGtleSBtYW5hZ2VtZW50bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudENvbm5lY3RvcnMgc3VwcG9ydCB0d28gYXV0aGVudGljYXRpb24gbWV0aG9kczpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+PGNvZGU+YXBpX2tleTwvY29kZT48L3N0cm9uZz4g4oCUIFJlcXVpcmVzIGFuIEFQSSBrZXksIHdoaWNoIGNhbiBiZSBwcm92aWRlZCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGUsIFBIUCBjb25zdGFudCwgb3IgdGhlIGRhdGFiYXNlIChjaGVja2VkIGluIHRoYXQgb3JkZXIpLmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PHN0cm9uZz48Y29kZT5ub25lPC9jb2RlPjwvc3Ryb25nPiDigJQgTm8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgYXV0aGVudGljYXRpb24gbWV0aG9kICg8Y29kZT5hcGlfa2V5PC9jb2RlPiBvciA8Y29kZT5ub25lPC9jb2RlPikgaXMgZGVtLiBGb3IgcHJvdmlkZXJzIHVzaW5nIDxjb2RlPmFwaV9rZXk8L2NvZGU+LCBhIGRhdGFiYXNlIHNldHRpbmcgbmFtZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB1c2luZyB0aGUgcGF0dGVybkFQSSBrZXlzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgYXJlIG5vdCBlbmNyeXB0ZWQgYnV0IGFyZSBtYXNrZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiBFbmNyeXB0aW9uIGlzIGJlaW5nIGV4cGxvcmVkIGluIGEgZm9sbG93LXVwIHRpY2tldDo8YSBocmVmPSJodHRwczovL2NvcmUudHJhYy53b3JkcHJlc3Mub3JnL3RpY2tldC82NDc4OSI+IzY0Nzg5PC9hPi5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQgbmFtaW5nIGNvbnZlbnRpb24gaSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIFBIUCBjb25zdGFudHM6IDxjb2RlPntQUk9WSURFUl9JRH1fQVBJX0tFWTwvY29kZT4gKGUuZy4sIHRoZSA8Y29kZT5hbnRocm9waWM8L2NvZGU+IHByb3ZpZGVyIG1hcHMgZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50QVBJIGtleSBzb3VyY2UgcHJpb3JpdHlsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50Rm9yIDxjb2RlPmFwaV9rZXk8L2NvZGU+IGNvbm5lY3RvcnMsIHRoZSBzeXN0ZW0gbG9va3MgZm9yIGEgc2V0dGluZyB2YWx1ZSBpbiB0aGlzIG9yZGVyOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PHN0cm9uZz5FbnZpcm9ubWVudCB2YXJpYWJsZTwvc3Ryb25nPiDigJQgZS5nLiwgPGNvZGU+QU5USFJPUElDX0FQSV9LRVk8L2NvZGU+aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8c3Ryb25nPlBIUCBjb25zdGFudDwvc3Ryb25nPiDigJQgZS5nLiwgPGNvZGU+ZGVmaW5lKCAnQU5USFJPUElDX0FQSV9LRVknLCAnc2stLi4uJyApOzwvY29kZT5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+RGF0YWJhc2U8L3N0cm9uZz4g4oCUIHN0b3JlZCB0aHJvdWdoIHRoZSBhZG1pbiBzY3JlZW4sIGUuZy4gPGNvZGU+Y29ubmVjdG9yc19fYW50aHJvcGljX2FwaV9rZXk8L2NvZGU+IHNldHRpbmdpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFB1YmxpYyBBUEkgZnVuY3Rpb25zbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBDb25uZWN0b3JzIEFQSSBwcm92aWRlcyB0aHJlZSBwdWJsaWMgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgcmVnaXN0cnkuIFRoZXNlIGFyZSBhdmFpbGFibGUgYWZ0ZXIgPGNvZGU+aW5pdDwvY29kZT4uZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PGNvZGU+d3BfaXNfY29ubmVjdG9yX3JlZ2lzdGVyZWQoKTwvY29kZT5sZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50Q2hlY2tzIGlmIGEgY29ubmVjdG9yIGlzIHJlZ2lzdGVyZWQ6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50bGFuZ3VhZ2VsaW5lTnVtYmVyc2ZpcnN0TGluZU51bWJlcndyYXBMaW5lc21ha2VVUkxzQ2xpY2thYmxlcXVpY2tDb2RlaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8Y29kZT53cF9nZXRfY29ubmVjdG9yKCk8L2NvZGU+bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFJldHJpZXZlcyBhIHNpbmdsZSBjb25uZWN0b3IncyBkYXRhOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdlbGluZU51bWJlcnNmaXJzdExpbmVOdW1iZXJ3cmFwTGluZXNtYWtlVVJMc0NsaWNrYWJsZXF1aWNrQ29kZWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50UmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGtleXM6IDxjb2RlPm5hbWU8L2NvZGU+LCA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4sIDxjb2RlPnR5cGU8L2NvZGU+LCA8Y29kZT5hdXRoZW50aWNhdGlvbjwvY29kZT4sIGFuZCBvcHRpb25hbGx5IDxjb2RlPmxvZ29fdXJsPC9jb2RlPiBhbmQgPGNvZGU+cGx1Z2luPC9jb2RlPi4gUmV0dXJucyA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgY29ubmVjdG9yIGlzIG5vdCByZWdpc3RlcmVkLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxjb2RlPndwX2dldF9jb25uZWN0b3JzKCk8L2NvZGU+bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFJldHJpZXZlcyBhbGwgcmVnaXN0ZXJlZCBjb25uZWN0b3JzLCBrZXllZCBieSBjb25uZWN0b3IgSUQ6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50bGFuZ3VhZ2VsaW5lTnVtYmVyc2ZpcnN0TGluZU51bWJlcndyYXBMaW5lc21ha2VVUkxzQ2xpY2thYmxlcXVpY2tDb2RlaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRPdmVycmlkaW5nIGNvbm5lY3RvciBtZXRhZGF0YWxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gZmlyZXMgYWZ0ZXIgYWxsIGJ1aWx0LWluIGFuZCBhdXRvLWRpc2NvdmVyZWQgY29ubmVjdG9ycyBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gUGx1Z2lucyBjYW4gdXNlIHRoaXMgaG9vayB0byBvdmVycmlkZSBtZXRhZGF0YSBvbiBleGlzdGluZyBjb25uZWN0b3JzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFNpbmNlIHRoZSByZWdpc3RyeSByZWplY3RzIGR1cGxpY2F0ZSBJRHMsIG92ZXJyaWRpbmcgcmVxdWlyZXMgYW4gdW5yZWdpc3RlciwgbW9kaWZ5LCByZWdpc3RlciBzZXF1ZW5jZTpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRsYW5ndWFnZWxpbmVOdW1iZXJzZmlyc3RMaW5lTnVtYmVyd3JhcExpbmVzbWFrZVVSTHNDbGlja2FibGVxdWlja0NvZGVpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEtleSBwb2ludHMgYWJvdXQgdGhlIG92ZXJyaWRlIHBhdHRlcm46ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRBbHdheXMgY2hlY2sgPGNvZGU+aXNfcmVnaXN0ZXJlZCgpPC9jb2RlPiBiZWZvcmUgY2FsbGluZyA8Y29kZT51bnJlZ2lzdGVyKCk8L2NvZGU+IOKAlCBjYWxsaW5nIDxjb2RlPnVucmVnaXN0ZXIoKTwvY29kZT4gb24gYSBub24tZXhpc3RlbnQgY29ubmVjdG9yIHRyaWdnZXJzIGEgPGNvZGU+X2RvaW5nX2l0X3dyb25nKCk8L2NvZGU+IG5vdGljZS5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudDxjb2RlPnVucmVnaXN0ZXIoKTwvY29kZT4gcmV0dXJucyB0aGUgY29ubmVjdG9yIGRhdGEsIHdoaWNoIHlvdSBjYW4gbW9kaWZ5IGFuZCBwYXNzIGJhY2sgdG8gPGNvZGU+cmVnaXN0ZXIoKTwvY29kZT4uaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRDb25uZWN0b3IgSURzIG11c3QgbWF0Y2ggdGhlIHBhdHRlcm4gPGNvZGU+L15bYV0rJC88L2NvZGU+IChsb3dlcmNhc2UuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRSZWdpc3RyeSBtZXRob2RzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFdpdGhpbiB0aGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBjYWxsYmFjaywgdGhlIDxjb2RlPldQX0Nvbm5lY3Rvcl9SZWdpc3RyeTwvY29kZT4gaW5zdGFuY2UgcHJvdmlkZXMgdGhlc2UgbWV0aG9kczpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2hhc0ZpeGVkTGF5b3V0Y2FwdGlvbmhlYWRib2R5Zm9vdGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50T3V0c2lkZSBvZiB0aGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBjYWxsYmFjaywgdXNlIHRoZSBwdWJsaWMgQVBJIGZ1bmN0aW9ucyAoPGNvZGU+d3BfZ2V0X2Nvbm5lY3RvcigpPC9jb2RlPiwgPGNvZGU+d3BfZ2V0X2Nvbm5lY3RvcnMoKTwvY29kZT4sIDxjb2RlPndwX2lzX2Nvbm5lY3Rvcl9yZWdpc3RlcmVkKCk8L2NvZGU+KSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgcmVnaXN0cnkgZGlyZWN0bHkuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZWxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoZWxwcyB3aGVuIGRlY2lkaW5nIHdoZXJlIHRvIGhvb2sgaW46ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RHVyaW5nIHRoZSA8Y29kZT5pbml0PC9jb2RlPiBhY3Rpb24sIDxjb2RlPl93cF9jb25uZWN0b3JzX2luaXQoKTwvY29kZT4gcnVucyBhbmQ6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRDcmVhdGVzIHRoZSA8Y29kZT5XUF9Db25uZWN0b3JfUmVnaXN0cnk8L2NvZGU+IHNpbmdsZXRvbi5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFJlZ2lzdGVycyBidWlsdC1pbiBjb25uZWN0b3JzIChBbnRocm9waWMsIEdvb2dsZSwgT3BlbkFJKSB3aXRoIGhhcmRjb2RlZCBkZWZhdWx0cy5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEF1dG8tZGlzY292ZXJzIHByb3ZpZGVycyBmcm9tIHRoZSBXUCBBSSBDbGllbnQgcmVnaXN0cnkgYW5kIG1lcmdlcyB0aGVpciBtZXRhZGF0YSBvbiB0b3Agb2YgZGVmYXVsdHMuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRGaXJlcyB0aGUgPHN0cm9uZz48Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+PC9zdHJvbmc+IGFjdGlvbiDigJQgdGhpcyBpcyB3aGVyZSBwbHVnaW5zIG92ZXJyaWRlIG1ldGFkYXRhIG9yIHJlZ2lzdGVyIGFkZGl0aW9uYWwgY29ubmVjdG9ycy5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSA8Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+IGFjdGlvbiBpcyB0aGUgb25seSBzdXBwb3J0ZWQgZW50cnkgcG9pbnQgZm9yIG1vZGlmeWluZyB0aGUgcmVnaXN0cnkuIEF0dGVtcHRpbmcgdG8gc2V0IHRoZSByZWdpc3RyeSBpbnN0YW5jZSBvdXRzaWRlIG9mIDxjb2RlPmluaXQ8L2NvZGU+IHRyaWdnZXJzIGEgPGNvZGU+X2RvaW5nX2l0X3dyb25nKCk8L2NvZGU+IG5vdGljZS5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRMb29raW5nIGFoZWFkbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBDb25uZWN0b3JzIEFQSSBpbiBXb3JkUHJlc3MgNy4wICwgYnV0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBpcyBkZXNpZ25lZCB0byBncm93LiBDdXJyZW50bHksIG9ubHljby5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRGdXR1cmUgcmVsZWFzZXMgYXJlIGV4cGVjdGVkIHRvOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RXhwYW5kIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gbWV0aG9kcyBiZXlvbmQgPGNvZGU+YXBpX2tleTwvY29kZT4gbmQgPGNvZGU+bm9uZTwvY29kZT4uaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRpIHRlIHJlc3RydGlvbiBmb3IgdG0gY24uaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRXaGVuIHRob3NlIGNhcGFiaWxpdGllcyBsYW5kLCB0aGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gd2lsbCBiZSB0aGUgcHJpbWFyeSBob29rIGZvciByZWdpc3RlcmluZyBuZXcgY29ubmVjdG9yIHR5cGVzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3BhY2l0eXRhZ05hbWVpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFByb3BzIHRvIEBqb3JnZWZpbGlwZWNvc3RhLCBAc2hhdW5hbmRyZXdzLCBAZmxpeG9zOTAsICBhbmQgb3RoZXJzIGZvciBjb250cmlidXRpbmcgdG8gdGhlIENvbm5lY3RvcnMgc2NyZWVuLmRyb3BDYXBpbm5lckJsb2Nrc0AgYW5kIHRoaXMgZGV2IG5vdGVqdXN0bGV2aW5lLHVzdGxldmluZSwgYW5kIHRoaXMgZGV2IG5vdGUgQHdlc3RvbnJ1dGVyLHdlc3RvbnJ1dGVyLCBABQcIBAgGCAUIBwgHCAYIDggOCAsIBkgBBggEGBYTHxogGy8qCRkhIhYICggECAYvCEEDAqkOjAwurwMHjAYCQQAGqwYBBgEGrwdBCrsCLJkPiwpBAK0CQQCTB0EDAgMCQQUJCEEGAgugHJEMnAG7CYoelwyOBYMGMS1DAAEuQQMZBQcFBwQCAQUHBAZDAEQABkEFBKUBvQKXBo4BiQG+Ai+wATicATsFBw8BCAVHAAEFDQEDAQcOhAIIBAEDBQQIBAEKBwEDARsDGwoSAQgBAxAKQQEJCxADRAAjAQQBBAIDB4IBBAUBAgcCAQMeAQQBBQwDggEKBwEGGgO8AggBDh0EAgcEBgUCAQQDQQAJAQgHBAoHCwoBDQkHAwcGBwGUBo8DqwmSBoMGigEFB0YAAQMHCQgFLikGAQUGQQMCAQgBBAMBBAoEAgRBAAgHDwQKB7MEBwsIBw8ECge7AQcLCAcPBAoHEQULCAcPBAoHBgsIBw8ECgc3CwgHDwQKB5gBCwgHDwQKBz4cCwgHDwQKB5oBCwgHDwQKBzgLCAcPBAoHigELCAcPBAoHiAELCAcPBAoHKgsIBw8ECgcUBQsIBw8ECgeFBAmcAQcLCAcPBAoHGRUBNCYBJAcLCAcPBAoHigEHCwgHDwQKBwgLDwkRCQsIBw8ECgckBQsIBw8ECgeQBAcLCAcPBAoHKgcLCAcPBAoHBgsIBw8ECgeXAQsIBw8ECgedAQsIBw8ECgefAgsIBw8ECge0AQsIBw8ECgeWAgcLCAcPBAoHDRgFCwgHDwQKBwsCKr4BBwsIBw8ECgcGCwgHDwQKB5ACCwgHDwQKB78CCwgHDwQKB5QCCwgHDwQKB6YCCwgHDwQKBywBmgIHCwgHDwQKByUFCwgHDwQKBy4HCwgHDwQKBwYLCAcPBAoHowILCAcPBAoHgAELCAcPBAoHiwEBsAGLAoIBBwsIBw8ECgcBEkEAvAEHCwgHDwQKBxcFCwgHDwQKB5gBBwsIBw8ECgcGCwgHDwQKB4wBCwgHDwQKB5sBCwgHDwQKB5MBIQsIBw8ECgcUBQsIBw8ECge6AQcLCAcPBAoHKQULCAcPBAoHJAcLCAcPBAoHCAsPCREJCwgHDwQKBx8FCwgHDwQKByQHCwgHDwQKBwgLDwkRCQsIBw8ECgeABAcLCAcPBAoHIAULCAcPBAoHOwcLCAcPBAoHCAsPCREJCwgHDwQKBx0FCwgHDwQKB78CBwsIBw8ECgenAQcLCAcPBAoHCAsPCREJCwgHDwQKByYHCwgHDwQKBwYLCAcPBAoHhAMLCAcPBAoHtAELCAcPBAoHLxYBCwgHDwQKBxAFCwgHDwQKB7wBBwsIBw8ECg4HRAELCAcPBAoHsAMHCwgHDwQKBxwFCwgHDwQKB48BBwsIBw8ECgeRAQcLCAcPBAoHBgsIBw8ECgc5CwgHDwQKBx8BMgsIBw8ECgelAQsIBw8ECgeOAgsIBw8ECgefAwcLCAcPBAoHDQULCAcPBAoHJIYBAgEHCwgHDwQKByAHCwgHDwQKBwYLCAcPBAoHkQEUAQsIBw8ECgdBAQJBAAMFBEEECwgHDwQKB4YCBwsIBw8ECkcACwgHDwQKBzVBADQBBwsBEgoBChJOABMBDQANAQIAAQEDAAABAQAGAQAA4QJCAUEBAkAAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAABBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAABBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAABBAAIAQQACAEEAAgBBAABBAAIAQQACAEEAAgBBAABBAAIAQQAAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQAAQQACANAEQRmckwEkCaoBPAMQA4IBI7UFUQAFDokBEggOQwAUFwoPBAJBAAMBBxYlOIIBJyQoigElFhkfAwIEAwcDQgAbKwMBDxKFAQulAxYKPwqMAZoDmANBDgoLKkQADSAXRQAQBwNKAAMBAgQRA0EACR4RE4EBHBImuQGcAboFkgE4AwQBBQ0HARkmCgIEBkEARA1BAgNBDkQNQQEDC0EPqAGvBpQBjAGBAzK2ATs8QTOoAa8GlAGMAYEDMrYBOzxBAARBAwZDAEEGBEEABEEGBkEvpQGXBo4BiQG+Ai+wATilATsBrwaUATK2ATs8QUANDAGlAb0ClwaOAYkBlwO8By+wATg7QQCoAa8GlAGMAZoDMrYBOzxBAQIBCgFIAAEEASEBBAEIAQIBAilBAQZBABsCAQIBCQENAQYHCwJBAAQnAQMCFgEkHEIABQoEAw4CDAEEAgcQNTMBNDICCgEDCQJBAAUHQQADAQhBAQNBAAIIAQYDHAEDRwACCgkCFQcDAgQDEQOhAw8HQQAFQQAJCgUDQQEFBgEJQQKlAYUDlwaOAYkBvgIvsAE4OwFEDQGQLgQDBEEAAkEDCQEJAgYCAQILAwJBCAUBEwoVNQeYAqACCT4hAQcFCZECQQNEDEEQCoyUAQZDAAYEAwlBHwRBGwNBAwUGQwBBPQRBBBgEQRkDBkEbGVMAFBcGQQMDBQQCAyNBGwJBfQYBIkFIDQMJAqoDQRQCAR4CBQIBAwGRAUENDwkBBwIBRAxBAgdBDUQMQQIHQQw2AUQMQRBEDEERRAxBEAXOAgB9AX2AoowOfQB3BG9wZW53AHl3AHcIc3RhbmRhcmR3AHcAeXl3AHl9AHl5dwB3AHh2AhhpbWFnZV9nZW5lcmF0b3Jfc2V0dGluZ3N2BAh0ZW1wbGF0ZXcHaGlnaHdheRBkZWZhdWx0X2ltYWdlX2lkfQAEZm9udHcAB2VuYWJsZWR5B3ZlcnNpb259AnUBfZcSWAB3JGVhOTZlYzFmLTE2ZDItNDdmZC1iZjE2LWE0YjFhZGQwOGYzNnckNWQxODhkMzktOGY4YS00MzI5LTg5ZjktYzE2MjBkNzY4MDg2dyQ4N2VlZDYyYi1hNDQwLTQ0NGMtODJjMi02ZTdlYjQxYmI0ZGZ3JDhhM2IxODg2LTExYTQtNGU3Ni04MmQyLWVlYjE2NTMzNDA5YXckMDk1Njk5YmQtMmFmZi00ZWI3LThiYjktMWQ4M2ZiZDVjODFldyRjZmYwODQ5MC0wY2JkLTQzYTMtODc2Yy02NTFiNjE1OWVjYWF3JDY1NTQ0OWQzLWVkMjMtNGQ2MS05YTJjLTUxMGVhN2FiOTJjOHckYzUxZTJmMDItOTIxOS00MzhmLTk2NDAtOTM1ODgwODA3YjQzdyQ1ZjY1ZjI5Mi01YjM3LTQyNzEtYWM5My02ZTllYmY1OGIxMWN3JDViMWQ1NTJlLWQ0YTItNDUxMi04OTQwLWFiMWQzMTJmODlhMHckNzg4MjM1OWItNDgzMS00YTgzLTlmZWUtYWFjM2RmYmFiMTVkdyRmZGQxMDlhOS04YWY0LTQ0OTAtYmRkMS1lYTg3MDc2ZjkxOTR3JDI5NjNkMzM5LTc5MjktNDMxMi1hMzQ4LWM5MzExN2YyNTNlZXckMTdhNTU4YjEtNDg0ZS00MzUwLTkyMTQtYzUxNzRkYjgzZWY2dyQ5ZDIwODNjOS0xMWQ4LTQ4NTItYjg0Yy00YTBhN2IxYTNkNmJ3JGVjOTA1NzUzLWYyMTMtNGFiZS04Y2U2LTNiODg3MWE0NjkyZXckMGU1YzQ5YzUtZmNlMy00MGRkLWJlOGItNjYyMTMzZGE0MTJldyRlNmE3NzZiMS00Y2RlLTQ0NjYtYjY3Mi1hMzc2YmY5N2IyOGN3JGMwMjE5ZWQ3LWMwNzItNDM1OS04NWIyLWQxMWEzNzVhYjk2NXckYTY2ZDY0MTEtNDg1YS00OTQ3LWIxYTEtYTM2ZTE0NTczNjA1dyRjNmU1MjRjZC1mYTM5LTRlZWYtOWI0OC1kZTk1ZjVlYzAwNWJ3JGZiYzg1NjhkLTkzOWUtNDJiYS1hMDdhLWQ1ZmRjMDAyMGU4NHckMmFlNDc3NmEtNDAyZC00NzE2LTkzYWEtNjVjMDIxMmJiMzY4dyQzNDI3YjdlMi02MTI5LTRjMTQtOWQ3NC0xOTk3MzkyNDNhNmJ3JDEyMWJlZjM5LTBlNGItNGFlOC04NWYyLTM4MDNhMTNmNGY3ZnckMzIwNzY5YmQtZjRiMC00N2M4LWI0ZjQtMTQwYTU0MjI1OWYwdyQxYTRiMzNlMS0yNjA2LTRlMGItYjlkYy03NGFiNGM5MzFiNDZ3JGI5OWZmOTJhLTAzNjYtNGI3MS1hYTI1LWVlZjU5Njc2YWU3Y3ckZTU4Zjc0ZDktYjBkYS00YzY4LWJmNTQtNzdjNzdjYjlmMjY2dyQwZjU0OWQ1NC1hM2M0LTQ5MGYtOWVhNC0zZDUxMzA3YTNkZWN3JDdhYTBkYmExLWNjZjgtNGVmMS05N2E3LWQ4YmY2YjM4NzQ3M3ckZTFlMDRlM2YtODVhZC00MGRjLWJhOWEtMDRmYTg2OGVhZWY1dyRjMjQ2MGQ3MS04NDE3LTRmMDktOWM5YS00YTAyNmI5ODUwZjR3JDFlNWE0NmViLWZlYjEtNGI2MS1iMDFlLTQ2NGM0YmEyODdhNHckMWRkZDBlNjctNmVkYS00NjdhLWE1ZjItM2VlNzY4MGEwZWY3dyRjZGRiY2ExZi0zMGM3LTQwMzUtOTAxNS02Y2EzZDE1NmVmNzl3JGI2MDM0MWFiLWEzZTAtNDc1NS04N2NmLWI4OTQ5MGExMDA1MHckMGNlOWE4ZGMtYTYzMC00N2E2LWE4OWYtYWYzOTBmYzhiZTYwdyQ3ZTRhNGY1Mi04YTI0LTQwNDgtODE0YS1lMmViZmNkY2E1NGN3JDdiOWNkZDZlLWM4ZmYtNDMyNy04YmRjLThlYmIzNmQ3YWMyZXckMWQ5MzY1ZjItODllOS00OTU1LWFlMzYtN2JhOWYzOTM4NjBmdyQyYzAwNmJmNi00NzMwLTQ0ZjktOTQ3YS1jZmJlOTdkYWNlMjh3JDhjZWQyZTg2LWU5ZjQtNDE0Mi1hOTJkLTlkM2E1OWY2ZWUwN3ckZjlhMzhiNzctZTA2YS00YmE2LTg3NDctZWZhY2JjYmQ2MjdkdyQ3ODQyM2U2ZS0wNjdhLTRlMzktYjA1YS00ZTRlYzk5ZTkxNDl3JGFmMmRjOGI0LWFhODAtNDdkZC05ZWU2LWRiNGQyNTFjODAxMHckNGVhYzc1MjAtY2UwMy00MjdjLTg0YzgtZmFkNzM3YWI3MWZidyQ4NzdlYzhiYy0xOGIyLTQ4MmYtODk4Zi03Njg3NjVmN2NjNWZ3JDdkNzEyOTg0LWYxNTMtNGQyMi1iNjQzLWMwNDMxNGI4NmIyMnckZWNkZTEzZTYtMWM1ZS00ZDQ4LTliNDUtNGIzMjQ5NGVmZTdhdyRiY2JiNjc4Ny1iNmQ4LTQ1NWYtYWQ4Yi04OTEzNzVjNjRjNDl3ZDxsaT5SZWdpc3RlcnMgYnVpbHQtaW4gY29ubmVjdG9ycyAoQWtpc21ldCwgQW50aHJvcGljLCBHb29nbGUsIE9wZW5BSSkgd2l0aCBoYXJkY29kZWQgZGVmYXVsdHMuPC9saT5nAHeVAzxwPkEgY29ubmVjdG9yIHJlcHJlc2VudHMgYSBjb25uZWN0aW9uIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UuIEVhY2ggY29ubmVjdG9yIGNhcnJpZXMgc3RhbmRhcmRpemVkIG1ldGFkYXRhIOKAlCBhIGRpc3BsYXkgbmFtZSwgZGVzY3JpcHRpb24sIGxvZ28sIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIGFuZCBhbiBvcHRpb25hbCBhc3NvY2lhdGlvbiB3aXRoIGEgV29yZFByZXNzLm9yZyBwbHVnaW4uIFRoZSBzeXN0ZW0gY3VycmVudGx5IGZvY3VzZXMgb24gcHJvdmlkZXJzIHRoYXQgYXV0aGVudGljYXRlIHdpdGggYW4gQVBJIGtleSwgYnV0IHRoZSBhcmNoaXRlY3R1cmUgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGNvbm5lY3RvciB0eXBlcyBpbiBmdXR1cmUgcmVsZWFzZXMuPC9wPnfMATxwPldvcmRQcmVzcyA3LjAgY29tZXMgd2l0aCBmb3VyIGZlYXR1cmVkIGNvbm5lY3RvcnPigJRBa2lzbWV0LCBBbnRocm9waWMsIEdvb2dsZSwgYW5kIE9wZW5BSeKAlGFjY2Vzc2libGUgZnJvbSB0aGUgbmV3wqA8c3Ryb25nPlNldHRpbmdzIOKGkiBDb25uZWN0b3JzPC9zdHJvbmc+wqBzY3JlZW4sIG1ha2luZyBpbnN0YWxsYXRpb24gc2VhbWxlc3MuPC9wPnfAATxwPlJlZ2lzdGVyZWQgY29ubmVjdG9ycyBhcHBlYXIgb24gYSBuZXcgPHN0cm9uZz5TZXR0aW5ncyAmZ3Q7IENvbm5lY3RvcnM8L3N0cm9uZz4gYWRtaW4gc2NyZWVuLiBUaGUgc2NyZWVuIHJlbmRlcnMgZWFjaCBjb25uZWN0b3IgYXMgYSBjYXJkLCBhbmQgdGhlIHJlZ2lzdHJ5IGRhdGEgZHJpdmVzIHdoYXQncyBkaXNwbGF5ZWQ6PC9wPnfOATxwPkNvbm5lY3RvcnMgd2l0aCBvdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSBzdG9yZWQgaW4gdGhlIFBIUCByZWdpc3RyeSBhbmQgZXhwb3NlZCB2aWEgdGhlIHNjcmlwdCBtb2R1bGUgZGF0YSwgYnV0IGN1cnJlbnRseSByZXF1aXJlIGEgY2xpZW50LXNpZGUgSmF2YVNjcmlwdCByZWdpc3RyYXRpb24gZm9yIGN1c3RvbSBmcm9udGVuZCBVSS48L3A+d+sEPHA+VGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoPGNvZGU+YXBpX2tleTwvY29kZT4gb3IgPGNvZGU+bm9uZTwvY29kZT4pIGlzIGRldGVybWluZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGFkYXRhIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY29ubmVjdG9yLiBGb3IgcHJvdmlkZXJzIHVzaW5nIDxjb2RlPmFwaV9rZXk8L2NvZGU+LCBhIGRhdGFiYXNlIHNldHRpbmcgbmFtZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB1c2luZyB0aGUgcGF0dGVybiA8Y29kZT5jb25uZWN0b3JzX3skcHJvdmlkZXJfdHlwZX1feyRwcm92aWRlcl9pZH1fYXBpX2tleTwvY29kZT4uICBJdCdzIGFsc28gcG9zc2libGUgdG8gc2V0IGEgY3VzdG9tIG5hbWUgdXNpbmcgPGNvZGU+c2V0dGluZ19uYW1lPC9jb2RlPiBwcm9wZXJ0eS4gQVBJIGtleXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBhcmUgbm90IGVuY3J5cHRlZCBidXQgYXJlIG1hc2tlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIEVuY3J5cHRpb24gaXMgYmVpbmcgZXhwbG9yZWQgaW4gYSBmb2xsb3ctdXAgdGlja2V0OsKgPGEgaHJlZj0iaHR0cHM6Ly9jb3JlLnRyYWMud29yZHByZXNzLm9yZy90aWNrZXQvNjQ3ODkiPiM2NDc4OTwvYT4uPC9wPneRAzxwPkZvciBBSSBwcm92aWRlcnMsIHRoZXJlIGlzIGEgc3BlY2lmaWMgbmFtaW5nIGNvbnZlbnRpb24gaW4gcGxhY2UgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgUEhQIGNvbnN0YW50czogPGNvZGU+e1BST1ZJREVSX0lEfV9BUElfS0VZPC9jb2RlPiAoZS5nLiwgdGhlIDxjb2RlPmFudGhyb3BpYzwvY29kZT4gcHJvdmlkZXIgbWFwcyB0byA8Y29kZT5BTlRIUk9QSUNfQVBJX0tFWTwvY29kZT4pLiBGb3Igb3RoZXIgdHlwZXMgb2YgcHJvdmlkZXJzLCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoPGNvZGU+ZW52X3Zhcl9uYW1lPC9jb2RlPikgYW5kIGEgUEhQIGNvbnN0YW50ICg8Y29kZT5jb25zdGFudF9uYW1lPC9jb2RlPikgY2FuIGJlIG9wdGlvbmFsbHkgc2V0IHRvIGFueSB2YWx1ZS48L3A+dyQ1ZDgyMjM3Zi0xN2EzLTRkOWUtYjNhZC1hZmQzOWM2OTk4YmZ3gwE8bGk+Q29ubmVjdG9yIElEcyBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuIDxjb2RlPi9eW2EtejAtOV8tXSskLzwvY29kZT4gKGxvd2VyY2FzZSBhbHBoYW51bWVyaWMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBvbmx5KS48L2xpPnckMDI4YTM4N2EtNTNiNi00ODIxLWExODYtYmI1ODUwNGYwZDczdyRmOWQ0NjExZS0zYWZlLTQ5NGMtYmQ5Ni0zODZiYTE2MzQ5YzR3JDQyZGQ3MDJhLTI4ZjAtNGI0ZC04NTExLTIxYTE0MDAzMzVhNXeEAzxwPlRoZSBDb25uZWN0b3JzIEFQSSBpbiBXb3JkUHJlc3MgNy4wIHdhcyBvcHRpbWl6ZWQgZm9yIEFJIHByb3ZpZGVycywgYnV0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBpcyBkZXNpZ25lZCB0byBncm93LiBDdXJyZW50bHksIG9ubHkgY29ubmVjdG9ycyB3aXRoIDxjb2RlPmFwaV9rZXk8L2NvZGU+IGF1dGhlbnRpY2F0aW9uIHJlY2VpdmUgdGhlIGZ1bGwgYWRtaW4gVUkgdHJlYXRtZW50LiBUaGUgUEhQIHJlZ2lzdHJ5IGFscmVhZHkgYWNjZXB0cyBhbnkgY29ubmVjdG9yIHR5cGUg4oCUIHdoYXQncyBtaXNzaW5nIGlzIHRoZSBmcm9udGVuZCBpbnRlZ3JhdGlvbiBmb3IgY29ubmVjdG9ycyB3aXRoIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLjwvcD53JDFmYzNkZDg1LWZmYTgtNGM1OC1hNzUyLTVjODFmMmQ4MTI0NXckMjBkYzY4YjktNTkyYS00OGQzLThjZjAtNGJhN2JlMGJkNTk4dyRhYTI3NGQ1Yi0xNGZhLTQ0ZDItYjA4OC0xNDU4MDllMTRkZDR3STxsaT5PZmZlciBtb3JlIGJ1aWx0LWluIFVJIGludGVncmF0aW9ucyBiZXlvbmQgPGNvZGU+YXBpX2tleTwvY29kZT4uPC9saT53JDYwN2I1MTE4LThhMTItNDViOS05MDA2LWI1ZDUzY2QyZDM4MHdTPGxpPlByb3ZpZGUgYSBjbGllbnQtc2lkZSBKYXZhU2NyaXB0IHJlZ2lzdHJhdGlvbiBBUEkgZm9yIGN1c3RvbSBjb25uZWN0b3IgVUkuPC9saT7lAgB4d8wEPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+YXJyYXkoCiAgICAnbmFtZScgICAgICAgICAgID0mZ3Q7ICdBbnRocm9waWMnLAogICAgJ2Rlc2NyaXB0aW9uJyAgICA9Jmd0OyAnVGV4dCBnZW5lcmF0aW9uIHdpdGggQ2xhdWRlLicsCiAgICAnbG9nb191cmwnICAgICAgID0mZ3Q7ICdodHRwczovL2V4YW1wbGUuY29tL2FudGhyb3BpYy1sb2dvLnN2ZycsCiAgICAndHlwZScgICAgICAgICAgID0mZ3Q7ICdhaV9wcm92aWRlcicsCiAgICAnYXV0aGVudGljYXRpb24nID0mZ3Q7IGFycmF5KAogICAgICAgICdtZXRob2QnICAgICAgICAgID0mZ3Q7ICdhcGlfa2V5JywKICAgICAgICAnY3JlZGVudGlhbHNfdXJsJyA9Jmd0OyAnaHR0cHM6Ly9wbGF0Zm9ybS5jbGF1ZGUuY29tL3NldHRpbmdzL2tleXMnLAogICAgICAgICdzZXR0aW5nX25hbWUnICAgID0mZ3Q7ICdjb25uZWN0b3JzX2FpX2FudGhyb3BpY19hcGlfa2V5JywKICAgICksCiAgICAncGx1Z2luJyAgICAgICAgID0mZ3Q7IGFycmF5KAogICAgICAgICdzbHVnJyA9Jmd0OyAnYWktcHJvdmlkZXItZm9yLWFudGhyb3BpYycsCiAgICApLAopPC9wcmU+d9ABPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+JGNvbm5lY3RvcnMgPSB3cF9nZXRfY29ubmVjdG9ycygpOwpmb3JlYWNoICggJGNvbm5lY3RvcnMgYXMgJGlkID0mZ3Q7ICRjb25uZWN0b3IgKSB7CiAgICBwcmludGYoICclczogJXMnLCAkY29ubmVjdG9yWyduYW1lJ10sICRjb25uZWN0b3JbJ2Rlc2NyaXB0aW9uJ10gKTsKfTwvcHJlPnebAzxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPmFkZF9hY3Rpb24oICd3cF9jb25uZWN0b3JzX2luaXQnLCBmdW5jdGlvbiAoIFdQX0Nvbm5lY3Rvcl9SZWdpc3RyeSAkcmVnaXN0cnkgKSB7CiAgICBpZiAoICRyZWdpc3RyeS0mZ3Q7aXNfcmVnaXN0ZXJlZCggJ2FudGhyb3BpYycgKSApIHsKICAgICAgICAkY29ubmVjdG9yID0gJHJlZ2lzdHJ5LSZndDt1bnJlZ2lzdGVyKCAnYW50aHJvcGljJyApOwogICAgICAgICRjb25uZWN0b3JbJ2Rlc2NyaXB0aW9uJ10gPSBfXyggJ0N1c3RvbSBkZXNjcmlwdGlvbiBmb3IgQW50aHJvcGljLicsICdteS1wbHVnaW4nICk7CiAgICAgICAgJHJlZ2lzdHJ5LSZndDtyZWdpc3RlciggJ2FudGhyb3BpYycsICRjb25uZWN0b3IgKTsKICAgIH0KfSApOzwvcHJlPnUBdgEFY2VsbHN1AnYGB2NvbnRlbnR3Bk1ldGhvZAN0YWd3AnRoBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92Bgdjb250ZW50dwtEZXNjcmlwdGlvbgN0YWd3AnRoBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn91BXYBBWNlbGxzdQJ2Bgdjb250ZW50dyM8Y29kZT5yZWdpc3RlciggJGlkLCAkYXJncyApPC9jb2RlPgN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92Bgdjb250ZW50d1VSZWdpc3RlciBhIG5ldyBjb25uZWN0b3IuIFJldHVybnMgdGhlIGNvbm5lY3RvciBkYXRhIG9yIDxjb2RlPm51bGw8L2NvZGU+IG9uIGZhaWx1cmUuA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dx48Y29kZT51bnJlZ2lzdGVyKCAkaWQgKTwvY29kZT4DdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHdPUmVtb3ZlIGEgY29ubmVjdG9yIGFuZCByZXR1cm4gaXRzIGRhdGEuIFJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IGZvdW5kLgN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHchPGNvZGU+aXNfcmVnaXN0ZXJlZCggJGlkICk8L2NvZGU+A3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR3HENoZWNrIGlmIGEgY29ubmVjdG9yIGV4aXN0cy4DdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgEFY2VsbHN1AnYGB2NvbnRlbnR3Ijxjb2RlPmdldF9yZWdpc3RlcmVkKCAkaWQgKTwvY29kZT4DdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHcjUmV0cmlldmUgYSBzaW5nbGUgY29ubmVjdG9yJ3MgZGF0YS4DdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgEFY2VsbHN1AnYGB2NvbnRlbnR3ITxjb2RlPmdldF9hbGxfcmVnaXN0ZXJlZCgpPC9jb2RlPgN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92Bgdjb250ZW50dyNSZXRyaWV2ZSBhbGwgcmVnaXN0ZXJlZCBjb25uZWN0b3JzLgN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn93JDE5NWEzNjc0LTBkYjItNDJmMi1hZjE1LWEyNDlhNDQ1ZGFjZXckMjg5ZDdkZTQtNzA2My00ZTMwLWJhMjctMjI5NGU0YmZjNTE3dzs8aHIgY2xhc3M9IndwLWJsb2NrLXNlcGFyYXRvciBoYXMtYWxwaGEtY2hhbm5lbC1vcGFjaXR5IiAvPnckNGJjYmI4N2UtZjczYS00ZmFmLWI0YWEtODIwOTMxNDA4YzEwd58BPHA+UHJvcHMgdG8gQGpvcmdlZmlsaXBlY29zdGEsIEBzaGF1bmFuZHJld3MsIEBmbGl4b3M5MCwgQHdlc3RvbnJ1dGVyLCBAanVzdGxldmluZSwgYW5kIG90aGVycyBmb3IgY29udHJpYnV0aW5nIHRvIHRoZSBDb25uZWN0b3JzIHNjcmVlbiBhbmQgdGhpcyBkZXYgbm90ZS48L3A+dxMyMDI2LTAzLTE4VDA5OjA2OjM3dy9pbnRyb2R1Y2luZy10aGUtY29ubmVjdG9ycy1hcGktaW4td29yZHByZXNzLTctMHtCedQvQmWgAH2inOyJDHh3DmNvcmUvbGlzdC1pdGVtmQoAdQN9rFh9oxZ9ilt3JGE0N2I3NzU5LWE0NjItNDJlYS1iYjBkLTBiZDc4ODhlZjdhNXh3vAI8cD5Xb3JkUHJlc3MgNy4wIGludHJvZHVjZXMgdGhlIDxzdHJvbmc+Q29ubmVjdG9ycyBBUEk8L3N0cm9uZz4g4oCUIGEgbmV3IGZyYW1ld29yayBmb3IgcmVnaXN0ZXJpbmcgYW5kIG1hbmFnaW5nIGNvbm5lY3Rpb25zIHRvIGV4dGVybmFsIHNlcnZpY2VzLiBUaGUgaW5pdGlhbCBmb2N1cyBpcyBvbiBBSSBwcm92aWRlcnMsIGdpdmluZyBXb3JkUHJlc3MgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGhhbmRsZSBBUEkga2V5IG1hbmFnZW1lbnQsIHByb3ZpZGVyIGRpc2NvdmVyeSwgYW5kIGFkbWluIFVJIGZvciBjb25maWd1cmluZyBBSSBzZXJ2aWNlcy48L3A+dw5jb3JlL3BhcmFncmFwaHl3JGIyYzdhY2RmLWYxNzQtNGJjMC1hYjg0LTZmMmZhYzlkOThlYnh3ggE8cD5UaGlzIHBvc3Qgd2Fsa3MgdGhyb3VnaCB3aGF0IHRoZSBDb25uZWN0b3JzIEFQSSBkb2VzLCBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QsIGFuZCB3aGF0IHBsdWdpbiBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdy48L3A+dw5jb3JlL3BhcmFncmFwaHl3JGQyODIxNmQyLTlhMzUtNGE5Ny04NTZmLTk1Yjg4MDI2ZmUwMnh3MzxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+VGFibGUgb2YgQ29udGVudHM8L2gyPncMY29yZS9oZWFkaW5nfQJ4dy08dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgoKCgoKCgoKCgoKPC91bD53CWNvcmUvbGlzdHl3AHckMTdlZTU2YTgtOTJkYi00NWU5LWEzZGItM2M1ZGI1NWE5Njg4eHdAPGxpPjxhIGhyZWY9IiN3aGF0LWlzLWEtY29ubmVjdG9yIj5XaGF0IGlzIGEgY29ubmVjdG9yPzwvYT48L2xpPncOY29yZS9saXN0LWl0ZW13JDBkNmM3NGQ0LTRjMDgtNDMzZC1iYjcyLWFkMTRhZTE2MmMxNXh3YTxsaT48YSBocmVmPSIjaG93LWFpLXByb3ZpZGVycy1hcmUtYXV0by1kaXNjb3ZlcmVkIj5Ib3cgQUkgcHJvdmlkZXJzIGFyZSBhdXRvLWRpc2NvdmVyZWQ8L2E+PC9saT53DmNvcmUvbGlzdC1pdGVteHdnPGxpPjxhIGhyZWY9IiN0aGUtc2V0dGluZ3MtLWNvbm5lY3RvcnMtYWRtaW4tc2NyZWVuIj5UaGUgU2V0dGluZ3MgJmd0OyBDb25uZWN0b3JzIGFkbWluIHNjcmVlbjwvYT48L2xpPncOY29yZS9saXN0LWl0ZW13JDEyZjgyZTU5LTI0MDYtNGNhYy05NjNmLWY3NDNkNDFkNzdhMnh3YzxsaT48YSBocmVmPSIjYXV0aGVudGljYXRpb24tYW5kLWFwaS1rZXktbWFuYWdlbWVudCI+QXV0aGVudGljYXRpb24gYW5kIEFQSSBrZXkgbWFuYWdlbWVudDwvYT48L2xpPncOY29yZS9saXN0LWl0ZW13JDg2ZTc5YzdhLTYxMzctNGYwMi05ZDQ2LWEzMDhiYzI3NDJhMXh3QTxsaT48YSBocmVmPSIjcHVibGljLWFwaS1mdW5jdGlvbnMiPlB1YmxpYyBBUEkgZnVuY3Rpb25zPC9hPjwvbGk+dw5jb3JlL2xpc3QtaXRlbXckYzgxZDM1NGMtNmM4MS00NzI3LWIyZWEtYjYzNWVmZDUwOGQ5eHdTPGxpPjxhIGhyZWY9IiNvdmVycmlkaW5nLWNvbm5lY3Rvci1tZXRhZGF0YSI+T3ZlcnJpZGluZyBjb25uZWN0b3IgbWV0YWRhdGE8L2E+PC9saT53DmNvcmUvbGlzdC1pdGVtdyRkY2RhY2I4MC1kNzg0LTQ3MWYtYTZkNS01NjNkY2ViYmJlNTB4d1E8bGk+PGEgaHJlZj0iI3RoZS1pbml0aWFsaXphdGlvbi1saWZlY3ljbGUiPlRoZSBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGU8L2E+PC9saT53DmNvcmUvbGlzdC1pdGVtdyQxZjRlYzRjNC1hNzMwLTQ4MGQtOTIwMi1kMDBmZmRhYTY4MjN4dzM8bGk+PGEgaHJlZj0iI2xvb2tpbmctYWhlYWQiPkxvb2tpbmcgYWhlYWQ8L2E+PC9saT53DmNvcmUvbGlzdC1pdGVteHc2PGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5XaGF0IGlzIGEgY29ubmVjdG9yPzwvaDI+dwxjb3JlL2hlYWRpbmd9Anh3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3UTxwPkVhY2ggY29ubmVjdG9yIGlzIHN0b3JlZCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgc2hhcGU6PC9wPncOY29yZS9wYXJhZ3JhcGh5eHcWc3ludGF4aGlnaGxpZ2h0ZXIvY29kZXf7A2FycmF5KAogICAgJ25hbWUnICAgICAgICAgICA9PiAnQW50aHJvcGljJywKICAgICdkZXNjcmlwdGlvbicgICAgPT4gJ1RleHQgZ2VuZXJhdGlvbiB3aXRoIENsYXVkZS4nLAogICAgJ2xvZ29fdXJsJyAgICAgICA9PiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9hbnRocm9waWMtbG9nby5zdmcnLAogICAgJ3R5cGUnICAgICAgICAgICA9PiAnYWlfcHJvdmlkZXInLAogICAgJ2F1dGhlbnRpY2F0aW9uJyA9PiBhcnJheSgKICAgICAgICAnbWV0aG9kJyAgICAgICAgICA9PiAnYXBpX2tleScsCiAgICAgICAgJ2NyZWRlbnRpYWxzX3VybCcgPT4gJ2h0dHBzOi8vcGxhdGZvcm0uY2xhdWRlLmNvbS9zZXR0aW5ncy9rZXlzJywKICAgICAgICAnc2V0dGluZ19uYW1lJyAgICA9PiAnY29ubmVjdG9yc19haV9hbnRocm9waWNfYXBpX2tleScsCiAgICApLAogICAgJ3BsdWdpbicgICAgICAgICA9PiBhcnJheSgKICAgICAgICAnc2x1ZycgPT4gJ2FpLXByb3ZpZGVyLWZvci1hbnRocm9waWMnLAogICAgKSwKKXcFcGxhaW54dwExeHl4eHdGPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Ib3cgQUkgcHJvdmlkZXJzIGFyZSBhdXRvLWRpc2NvdmVyZWQ8L2gyPncMY29yZS9oZWFkaW5nfQJ4d5cCPHA+SWYgeW91J3JlIGJ1aWxkaW5nIGFuIEFJIHByb3ZpZGVyIHBsdWdpbiB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgV1AgQUkgQ2xpZW50LCB5b3UgZG9uJ3QgbmVlZCB0byByZWdpc3RlciBhIGNvbm5lY3RvciBtYW51YWxseS4gVGhlIENvbm5lY3RvcnMgQVBJIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJzIHByb3ZpZGVycyBmcm9tIHRoZSBXUCBBSSBDbGllbnQncyBkZWZhdWx0IHJlZ2lzdHJ5IGFuZCBjcmVhdGVzIGNvbm5lY3RvcnMgd2l0aCB0aGUgY29ycmVjdCBtZXRhZGF0YS48L3A+dw5jb3JlL3BhcmFncmFwaHl4dzE8cD5IZXJlJ3Mgd2hhdCBoYXBwZW5zIGR1cmluZyBpbml0aWFsaXphdGlvbjo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dyU8b2wgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgoKCjwvb2w+dwljb3JlL2xpc3R4dwB3JGM1OWJiZjE4LTY5NDAtNDhkYS1hYTQ0LTU5OGM3OTkwMzViZHh3YDxsaT5CdWlsdC1pbiBjb25uZWN0b3JzIChBbnRocm9waWMsIEdvb2dsZSwgT3BlbkFJKSBhcmUgcmVnaXN0ZXJlZCB3aXRoIGhhcmRjb2RlZCBkZWZhdWx0cy48L2xpPncOY29yZS9saXN0LWl0ZW13JGQwNTkyY2JjLTNmNzUtNDViZC04NTZjLWU1NjVlMzdjYTRjMXh3ZjxsaT5UaGUgc3lzdGVtIHF1ZXJpZXMgdGhlIDxjb2RlPkFpQ2xpZW50OjpkZWZhdWx0UmVnaXN0cnkoKTwvY29kZT4gZm9yIGFsbCByZWdpc3RlcmVkIHByb3ZpZGVycy48L2xpPncOY29yZS9saXN0LWl0ZW13JDdjZTYyYzA3LWQyM2QtNGYxYi1iNmQ3LTAwOTg3NWJhM2YxZHh3qAE8bGk+Rm9yIGVhY2ggcHJvdmlkZXIsIG1ldGFkYXRhIChuYW1lLCBkZXNjcmlwdGlvbiwgbG9nbywgYXV0aGVudGljYXRpb24gbWV0aG9kKSBpcyBtZXJnZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0cywgd2l0aCBwcm92aWRlciByZWdpc3RyeSB2YWx1ZXMgdGFraW5nIHByZWNlZGVuY2UuPC9saT53DmNvcmUvbGlzdC1pdGVtdyQxMGZmOTI5ZS03YWQ2LTRiY2ItYjM5Ny02NGE2MTU5YWE1NTV4d308bGk+VGhlIDxjb2RlPndwX2Nvbm5lY3RvcnNfaW5pdDwvY29kZT4gYWN0aW9uIGZpcmVzIHNvIHBsdWdpbnMgY2FuIG92ZXJyaWRlIG1ldGFkYXRhIG9yIHJlZ2lzdGVyIGFkZGl0aW9uYWwgY29ubmVjdG9ycy48L2xpPncOY29yZS9saXN0LWl0ZW14d50BPHA+PHN0cm9uZz5JbiBzaG9ydDo8L3N0cm9uZz4gaWYgeW91ciBBSSBwcm92aWRlciBwbHVnaW4gcmVnaXN0ZXJzIHdpdGggdGhlIFdQIEFJIENsaWVudCwgdGhlIGNvbm5lY3RvciBpcyBjcmVhdGVkIGZvciB5b3UuIE5vIGFkZGl0aW9uYWwgY29kZSBpcyBuZWVkZWQuPC9wPncOY29yZS9wYXJhZ3JhcGh5eHdLPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5UaGUgU2V0dGluZ3MgJmd0OyBDb25uZWN0b3JzIGFkbWluIHNjcmVlbjwvaDI+dwxjb3JlL2hlYWRpbmd9Anh3DmNvcmUvcGFyYWdyYXBoeXh3JTx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCgoKPC91bD53CWNvcmUvbGlzdHl3AHckZDkwMDIxNWItMzQxZC00NmQxLWJmYzItZTZkYTQyZTc5ZGI2eHeZATxsaT48c3Ryb25nPjxjb2RlPm5hbWU8L2NvZGU+PC9zdHJvbmc+LCA8c3Ryb25nPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvc3Ryb25nPiwgYW5kIDxzdHJvbmc+PGNvZGU+bG9nb191cmw8L2NvZGU+PC9zdHJvbmc+IGFyZSBzaG93biBvbiB0aGUgY2FyZC48L2xpPncOY29yZS9saXN0LWl0ZW13JDk3MGFkNWZmLWU3M2QtNDc5My1iMjIyLTJmY2I3ZjIwYmY5NXh3ygE8bGk+PHN0cm9uZz48Y29kZT5wbHVnaW4uc2x1ZzwvY29kZT48L3N0cm9uZz4gZW5hYmxlcyBpbnN0YWxsL2FjdGl2YXRlIGNvbnRyb2xzIOKAlCB0aGUgc2NyZWVuIGNoZWNrcyB3aGV0aGVyIHRoZSBhc3NvY2lhdGVkIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGFjdGl2ZSwgYW5kIHNob3dzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gYnV0dG9uLjwvbGk+dw5jb3JlL2xpc3QtaXRlbXckMDdkNmE4NDgtMzc0MC00NTBmLThiNjEtM2U5NzVjZjY1MDFleHedATxsaT48c3Ryb25nPjxjb2RlPmF1dGhlbnRpY2F0aW9uLmNyZWRlbnRpYWxzX3VybDwvY29kZT48L3N0cm9uZz4gaXMgcmVuZGVyZWQgYXMgYSBsaW5rIGRpcmVjdGluZyB1c2VycyB0byB0aGUgcHJvdmlkZXIncyBzaXRlIHRvIG9idGFpbiBBUEkgY3JlZGVudGlhbHMuPC9saT53DmNvcmUvbGlzdC1pdGVtdyRhYjk4YWExYy1jMmYwLTQyMjItOWYwMC02ZGI3OGU2NmE3NGF4d68BPGxpPkZvciA8c3Ryb25nPjxjb2RlPmFwaV9rZXk8L2NvZGU+PC9zdHJvbmc+IGNvbm5lY3RvcnMsIHRoZSBzY3JlZW4gc2hvd3MgdGhlIGN1cnJlbnQga2V5IHNvdXJjZSAoZW52aXJvbm1lbnQgdmFyaWFibGUsIFBIUCBjb25zdGFudCwgb3IgZGF0YWJhc2UpIGFuZCBjb25uZWN0aW9uIHN0YXR1cy48L2xpPncOY29yZS9saXN0LWl0ZW14dw5jb3JlL3BhcmFncmFwaHl4d0c8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkF1dGhlbnRpY2F0aW9uIGFuZCBBUEkga2V5IG1hbmFnZW1lbnQ8L2gyPncMY29yZS9oZWFkaW5nfQJ4dzU8cD5Db25uZWN0b3JzIHN1cHBvcnQgdHdvIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHM6PC9wPncOY29yZS9wYXJhZ3JhcGh5eHchPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij4KCjwvdWw+dwljb3JlL2xpc3R5dwB3JDUzYzE1NGY4LTgxNjgtNGNmNy1iMjNhLTY3ZTYzYWRkMWJmMHh3rgE8bGk+PHN0cm9uZz48Y29kZT5hcGlfa2V5PC9jb2RlPjwvc3Ryb25nPiDigJQgUmVxdWlyZXMgYW4gQVBJIGtleSwgd2hpY2ggY2FuIGJlIHByb3ZpZGVkIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgUEhQIGNvbnN0YW50LCBvciB0aGUgZGF0YWJhc2UgKGNoZWNrZWQgaW4gdGhhdCBvcmRlcikuPC9saT53DmNvcmUvbGlzdC1pdGVtdyQ1MjUyMWI0Yi1jZTdlLTQ2ZjYtODRkZS00N2Y4ZDliNTA0ODV4d0s8bGk+PHN0cm9uZz48Y29kZT5ub25lPC9jb2RlPjwvc3Ryb25nPiDigJQgTm8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQuPC9saT53DmNvcmUvbGlzdC1pdGVteHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHc5PGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BUEkga2V5IHNvdXJjZSBwcmlvcml0eTwvaDM+dwxjb3JlL2hlYWRpbmd9A3h3XzxwPkZvciA8Y29kZT5hcGlfa2V5PC9jb2RlPiBjb25uZWN0b3JzLCB0aGUgc3lzdGVtIGxvb2tzIGZvciBhIHNldHRpbmcgdmFsdWUgaW4gdGhpcyBvcmRlcjo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dyM8b2wgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgo8L29sPncJY29yZS9saXN0eHcAdyRmNmFlOWJiYy0zZjNiLTRlYjgtOTE4Zi1jOGJkNjE2ZDE3NmJ4d1c8bGk+PHN0cm9uZz5FbnZpcm9ubWVudCB2YXJpYWJsZTwvc3Ryb25nPiDigJQgZS5nLiwgPGNvZGU+QU5USFJPUElDX0FQSV9LRVk8L2NvZGU+PC9saT53DmNvcmUvbGlzdC1pdGVtdyQ0NDRmNjA1Yi1hYWU1LTQ2ZTMtODcxZi00MGY0YzNhMTNlZGJ4d2Y8bGk+PHN0cm9uZz5QSFAgY29uc3RhbnQ8L3N0cm9uZz4g4oCUIGUuZy4sIDxjb2RlPmRlZmluZSggJ0FOVEhST1BJQ19BUElfS0VZJywgJ3NrLS4uLicgKTs8L2NvZGU+PC9saT53DmNvcmUvbGlzdC1pdGVtdyQ3MjUyYTJjYS0xY2EwLTRiNTAtODE2NC02M2FjMzA0NTQ1MTJ4d4EBPGxpPjxzdHJvbmc+RGF0YWJhc2U8L3N0cm9uZz4g4oCUIHN0b3JlZCB0aHJvdWdoIHRoZSBhZG1pbiBzY3JlZW4sIGUuZy4gPGNvZGU+Y29ubmVjdG9yc19haV9hbnRocm9waWNfYXBpX2tleTwvY29kZT4gc2V0dGluZzwvbGk+dw5jb3JlL2xpc3QtaXRlbXh3NjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UHVibGljIEFQSSBmdW5jdGlvbnM8L2gyPncMY29yZS9oZWFkaW5nfQJ4d4EBPHA+VGhlIENvbm5lY3RvcnMgQVBJIHByb3ZpZGVzIHRocmVlIHB1YmxpYyBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSByZWdpc3RyeS4gVGhlc2UgYXJlIGF2YWlsYWJsZSBhZnRlciA8Y29kZT5pbml0PC9jb2RlPi48L3A+dw5jb3JlL3BhcmFncmFwaHl4d0s8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPjxjb2RlPndwX2lzX2Nvbm5lY3Rvcl9yZWdpc3RlcmVkKCk8L2NvZGU+PC9oMz53DGNvcmUvaGVhZGluZ30DeHcrPHA+Q2hlY2tzIGlmIGEgY29ubmVjdG9yIGlzIHJlZ2lzdGVyZWQ6PC9wPncOY29yZS9wYXJhZ3JhcGh5eHeUATxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPmlmICggd3BfaXNfY29ubmVjdG9yX3JlZ2lzdGVyZWQoICdhbnRocm9waWMnICkgKSB7CiAgICAvLyBUaGUgQW50aHJvcGljIGNvbm5lY3RvciBpcyBhdmFpbGFibGUuCn08L3ByZT53FnN5bnRheGhpZ2hsaWdodGVyL2NvZGV3YWlmICggd3BfaXNfY29ubmVjdG9yX3JlZ2lzdGVyZWQoICdhbnRocm9waWMnICkgKSB7CiAgICAvLyBUaGUgQW50aHJvcGljIGNvbm5lY3RvciBpcyBhdmFpbGFibGUuCn13BXBsYWlueHcBMXh5eHh3QTxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PGNvZGU+d3BfZ2V0X2Nvbm5lY3RvcigpPC9jb2RlPjwvaDM+dwxjb3JlL2hlYWRpbmd9A3h3KzxwPlJldHJpZXZlcyBhIHNpbmdsZSBjb25uZWN0b3IncyBkYXRhOjwvcD53DmNvcmUvcGFyYWdyYXBoeXh3ogE8cHJlIGNsYXNzPSJ3cC1ibG9jay1zeW50YXhoaWdobGlnaHRlci1jb2RlIj4kY29ubmVjdG9yID0gd3BfZ2V0X2Nvbm5lY3RvciggJ2FudGhyb3BpYycgKTsKaWYgKCAkY29ubmVjdG9yICkgewogICAgZWNobyAkY29ubmVjdG9yWyduYW1lJ107IC8vICdBbnRocm9waWMnCn08L3ByZT53FnN5bnRheGhpZ2hsaWdodGVyL2NvZGV3byRjb25uZWN0b3IgPSB3cF9nZXRfY29ubmVjdG9yKCAnYW50aHJvcGljJyApOwppZiAoICRjb25uZWN0b3IgKSB7CiAgICBlY2hvICRjb25uZWN0b3JbJ25hbWUnXTsgLy8gJ0FudGhyb3BpYycKfXcFcGxhaW54dwExeHl4eHeHAjxwPlJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBrZXlzOiA8Y29kZT5uYW1lPC9jb2RlPiwgPGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+LCA8Y29kZT50eXBlPC9jb2RlPiwgPGNvZGU+YXV0aGVudGljYXRpb248L2NvZGU+LCBhbmQgb3B0aW9uYWxseSA8Y29kZT5sb2dvX3VybDwvY29kZT4gYW5kIDxjb2RlPnBsdWdpbjwvY29kZT4uIFJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlIGNvbm5lY3RvciBpcyBub3QgcmVnaXN0ZXJlZC48L3A+dw5jb3JlL3BhcmFncmFwaHl4d0I8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPjxjb2RlPndwX2dldF9jb25uZWN0b3JzKCk8L2NvZGU+PC9oMz53DGNvcmUvaGVhZGluZ30DeHdCPHA+UmV0cmlldmVzIGFsbCByZWdpc3RlcmVkIGNvbm5lY3RvcnMsIGtleWVkIGJ5IGNvbm5lY3RvciBJRDo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dxZzeW50YXhoaWdobGlnaHRlci9jb2Rld5oBJGNvbm5lY3RvcnMgPSB3cF9nZXRfY29ubmVjdG9ycygpOwpmb3JlYWNoICggJGNvbm5lY3RvcnMgYXMgJGlkID0+ICRjb25uZWN0b3IgKSB7CiAgICBwcmludGYoICclczogJXMnLCAkY29ubmVjdG9yWyduYW1lJ10sICRjb25uZWN0b3JbJ2Rlc2NyaXB0aW9uJ10gKTsKfXcFcGxhaW54dwExeHl4eHc\/PGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5PdmVycmlkaW5nIGNvbm5lY3RvciBtZXRhZGF0YTwvaDI+dwxjb3JlL2hlYWRpbmd9Anh3xgE8cD5UaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gZmlyZXMgYWZ0ZXIgYWxsIGJ1aWx0LWluIGFuZCBhdXRvLWRpc2NvdmVyZWQgY29ubmVjdG9ycyBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gUGx1Z2lucyBjYW4gdXNlIHRoaXMgaG9vayB0byBvdmVycmlkZSBtZXRhZGF0YSBvbiBleGlzdGluZyBjb25uZWN0b3JzLjwvcD53DmNvcmUvcGFyYWdyYXBoeXh3bjxwPlNpbmNlIHRoZSByZWdpc3RyeSByZWplY3RzIGR1cGxpY2F0ZSBJRHMsIG92ZXJyaWRpbmcgcmVxdWlyZXMgYW4gdW5yZWdpc3RlciwgbW9kaWZ5LCByZWdpc3RlciBzZXF1ZW5jZTo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dxZzeW50YXhoaWdobGlnaHRlci9jb2Rld98CYWRkX2FjdGlvbiggJ3dwX2Nvbm5lY3RvcnNfaW5pdCcsIGZ1bmN0aW9uICggV1BfQ29ubmVjdG9yX1JlZ2lzdHJ5ICRyZWdpc3RyeSApIHsKICAgIGlmICggJHJlZ2lzdHJ5LT5pc19yZWdpc3RlcmVkKCAnYW50aHJvcGljJyApICkgewogICAgICAgICRjb25uZWN0b3IgPSAkcmVnaXN0cnktPnVucmVnaXN0ZXIoICdhbnRocm9waWMnICk7CiAgICAgICAgJGNvbm5lY3RvclsnZGVzY3JpcHRpb24nXSA9IF9fKCAnQ3VzdG9tIGRlc2NyaXB0aW9uIGZvciBBbnRocm9waWMuJywgJ215LXBsdWdpbicgKTsKICAgICAgICAkcmVnaXN0cnktPnJlZ2lzdGVyKCAnYW50aHJvcGljJywgJGNvbm5lY3RvciApOwogICAgfQp9ICk7dwVwbGFpbnh3ATF4eXh4dy08cD5LZXkgcG9pbnRzIGFib3V0IHRoZSBvdmVycmlkZSBwYXR0ZXJuOjwvcD53DmNvcmUvcGFyYWdyYXBoeXh3Izx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvdWw+dwljb3JlL2xpc3R5dwB3JGYwYzVlZTRjLTg4YmYtNDY4MS1iYjc1LTBmYWQ0MzQyM2QwN3h3zwE8bGk+QWx3YXlzIGNoZWNrIDxjb2RlPmlzX3JlZ2lzdGVyZWQoKTwvY29kZT4gYmVmb3JlIGNhbGxpbmcgPGNvZGU+dW5yZWdpc3RlcigpPC9jb2RlPiDigJQgY2FsbGluZyA8Y29kZT51bnJlZ2lzdGVyKCk8L2NvZGU+IG9uIGEgbm9uLWV4aXN0ZW50IGNvbm5lY3RvciB0cmlnZ2VycyBhIDxjb2RlPl9kb2luZ19pdF93cm9uZygpPC9jb2RlPiBub3RpY2UuPC9saT53DmNvcmUvbGlzdC1pdGVtdyQxMTA1N2M2MS1hYjg4LTQyNjgtOThmMC1jNWE4ODMyMGUxNjF4d308bGk+PGNvZGU+dW5yZWdpc3RlcigpPC9jb2RlPiByZXR1cm5zIHRoZSBjb25uZWN0b3IgZGF0YSwgd2hpY2ggeW91IGNhbiBtb2RpZnkgYW5kIHBhc3MgYmFjayB0byA8Y29kZT5yZWdpc3RlcigpPC9jb2RlPi48L2xpPncOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3MjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UmVnaXN0cnkgbWV0aG9kczwvaDM+dwxjb3JlL2hlYWRpbmd9A3h3gwE8cD5XaXRoaW4gdGhlIDxjb2RlPndwX2Nvbm5lY3RvcnNfaW5pdDwvY29kZT4gY2FsbGJhY2ssIHRoZSA8Y29kZT5XUF9Db25uZWN0b3JfUmVnaXN0cnk8L2NvZGU+IGluc3RhbmNlIHByb3ZpZGVzIHRoZXNlIG1ldGhvZHM6PC9wPncOY29yZS9wYXJhZ3JhcGh5eHfMBTxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLXRhYmxlIj48dGFibGUgY2xhc3M9Imhhcy1maXhlZC1sYXlvdXQiPjx0aGVhZD48dHI+PHRoPk1ldGhvZDwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+PGNvZGU+cmVnaXN0ZXIoICRpZCwgJGFyZ3MgKTwvY29kZT48L3RkPjx0ZD5SZWdpc3RlciBhIG5ldyBjb25uZWN0b3IuIFJldHVybnMgdGhlIGNvbm5lY3RvciBkYXRhIG9yIDxjb2RlPm51bGw8L2NvZGU+IG9uIGZhaWx1cmUuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+dW5yZWdpc3RlciggJGlkICk8L2NvZGU+PC90ZD48dGQ+UmVtb3ZlIGEgY29ubmVjdG9yIGFuZCByZXR1cm4gaXRzIGRhdGEuIFJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IGZvdW5kLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPmlzX3JlZ2lzdGVyZWQoICRpZCApPC9jb2RlPjwvdGQ+PHRkPkNoZWNrIGlmIGEgY29ubmVjdG9yIGV4aXN0cy48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT5nZXRfcmVnaXN0ZXJlZCggJGlkICk8L2NvZGU+PC90ZD48dGQ+UmV0cmlldmUgYSBzaW5nbGUgY29ubmVjdG9yJ3MgZGF0YS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT5nZXRfYWxsX3JlZ2lzdGVyZWQoKTwvY29kZT48L3RkPjx0ZD5SZXRyaWV2ZSBhbGwgcmVnaXN0ZXJlZCBjb25uZWN0b3JzLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9maWd1cmU+dwpjb3JlL3RhYmxleHUAeHf3ATxwPk91dHNpZGUgb2YgdGhlIDxjb2RlPndwX2Nvbm5lY3RvcnNfaW5pdDwvY29kZT4gY2FsbGJhY2ssIHVzZSB0aGUgcHVibGljIEFQSSBmdW5jdGlvbnMgKDxjb2RlPndwX2dldF9jb25uZWN0b3IoKTwvY29kZT4sIDxjb2RlPndwX2dldF9jb25uZWN0b3JzKCk8L2NvZGU+LCA8Y29kZT53cF9pc19jb25uZWN0b3JfcmVnaXN0ZXJlZCgpPC9jb2RlPikgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgdGhlIHJlZ2lzdHJ5IGRpcmVjdGx5LjwvcD53DmNvcmUvcGFyYWdyYXBoeXh3PjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+VGhlIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZTwvaDI+dwxjb3JlL2hlYWRpbmd9Anh3VjxwPlVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGhlbHBzIHdoZW4gZGVjaWRpbmcgd2hlcmUgdG8gaG9vayBpbjo8L3A+dw5jb3JlL3BhcmFncmFwaHl4d1g8cD5EdXJpbmcgdGhlIDxjb2RlPmluaXQ8L2NvZGU+IGFjdGlvbiwgPGNvZGU+X3dwX2Nvbm5lY3RvcnNfaW5pdCgpPC9jb2RlPiBydW5zIGFuZDo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dyU8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgoKCjwvdWw+dwljb3JlL2xpc3R5dwB3JGFjZmVmZDEyLWZkNzctNGFlZC1iMmRjLWE1NWM2MWEzNGZkYXh3QjxsaT5DcmVhdGVzIHRoZSA8Y29kZT5XUF9Db25uZWN0b3JfUmVnaXN0cnk8L2NvZGU+IHNpbmdsZXRvbi48L2xpPncOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXckZjYxYTE0YzktMTc5NS00YWMwLTg3ODgtYWNmN2NjNjU4OWI0eHduPGxpPkF1dG8tZGlzY292ZXJzIHByb3ZpZGVycyBmcm9tIHRoZSBXUCBBSSBDbGllbnQgcmVnaXN0cnkgYW5kIG1lcmdlcyB0aGVpciBtZXRhZGF0YSBvbiB0b3Agb2YgZGVmYXVsdHMuPC9saT53DmNvcmUvbGlzdC1pdGVtdyQ3MDFmMmU5Yy00YmIyLTQ4ODEtYjYyYy04ODQ2ODJkMWNiYjN4d5kBPGxpPkZpcmVzIHRoZSA8c3Ryb25nPjxjb2RlPndwX2Nvbm5lY3RvcnNfaW5pdDwvY29kZT48L3N0cm9uZz4gYWN0aW9uIOKAlCB0aGlzIGlzIHdoZXJlIHBsdWdpbnMgb3ZlcnJpZGUgbWV0YWRhdGEgb3IgcmVnaXN0ZXIgYWRkaXRpb25hbCBjb25uZWN0b3JzLjwvbGk+dw5jb3JlL2xpc3QtaXRlbXh35gE8cD5UaGUgPGNvZGU+d3BfY29ubmVjdG9yc19pbml0PC9jb2RlPiBhY3Rpb24gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGVudHJ5IHBvaW50IGZvciBtb2RpZnlpbmcgdGhlIHJlZ2lzdHJ5LiBBdHRlbXB0aW5nIHRvIHNldCB0aGUgcmVnaXN0cnkgaW5zdGFuY2Ugb3V0c2lkZSBvZiA8Y29kZT5pbml0PC9jb2RlPiB0cmlnZ2VycyBhIDxjb2RlPl9kb2luZ19pdF93cm9uZygpPC9jb2RlPiBub3RpY2UuPC9wPncOY29yZS9wYXJhZ3JhcGh5eHcvPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Mb29raW5nIGFoZWFkPC9oMj53DGNvcmUvaGVhZGluZ30CeHcOY29yZS9wYXJhZ3JhcGh5eHcnPHA+RnV0dXJlIHJlbGVhc2VzIGFyZSBleHBlY3RlZCB0bzo8L3A+dw5jb3JlL3BhcmFncmFwaHl4dyM8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgo8L3VsPncJY29yZS9saXN0eXcAdyQzNGY1YjE4OC1kYzVmLTRhN2YtOWJkYy1kYzYxYjRkMDM0Zjh4d3A8bGk+RXhwYW5kIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gbWV0aG9kcyBiZXlvbmQgPGNvZGU+YXBpX2tleTwvY29kZT4gYW5kIDxjb2RlPm5vbmU8L2NvZGU+LjwvbGk+dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHeNATxwPldoZW4gdGhvc2UgY2FwYWJpbGl0aWVzIGxhbmQsIHRoZSA8Y29kZT53cF9jb25uZWN0b3JzX2luaXQ8L2NvZGU+IGFjdGlvbiB3aWxsIGJlIHRoZSBwcmltYXJ5IGhvb2sgZm9yIHJlZ2lzdGVyaW5nIG5ldyBjb25uZWN0b3IgdHlwZXMuPC9wPncOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9zZXBhcmF0b3J3DWFscGhhLWNoYW5uZWx3AmhyeHcOY29yZS9wYXJhZ3JhcGh5dwdwdWJsaXNoBee3q6YPWAEBFwABAi\/bSQgjAQgBaQE7AQIBDwICqQdkjAb0Ai6CAu8BlgMHTYwDAgIBAQMBAgYGqwMCAQEGAfYDGgEqAQIBAAEOAREBRAEKAeQBARUBCQE+AQm7AUss2QHZB9cBjAUNrgEAAQDUAwkBCgEpAQMBAwEMAh8DFgIEAQQBDwIGAQIBCQEJEQIBAAEBAQMBEAICAgACAAsIoA4ukQZvXDf7BHiKD1uXBvkCzgJRgwM6MQMtAAMEBBQuGAElAQkBAQEDAQUZPgFwBADYi6LLCgYAlwkCAwMLCAMBAwYFvafrzAgKAJ8JAQABGAEFAQMBBgEUAgcKBQHPCaKO9oQGPwCiBgEAARwBAwEEAgkFBQcYEwAa+Q2EAToCrwkDDAgBBAAXCR4IJQwSAAE0DDMaKQEbAQoKAQsAEwAIKyNbCgEFAQcESwkBAwkCAqIBATMDMx47CwAMAQMHTAAHOAFQI+8BvAEGCAYBClwJAQcBAAUECwUNAAkIBwADAQcADmSUA7AHzAnWAc0DOr72vNYBhQEAmxgt8gMuxwFsAwE5Ab5KAQjcAwCnAQBDA5QDABwAAQCIAgJoAAEAHAQVADQFJgIBAicAUgABAAsALACYAgAyAO8DAJ4BABIDGwABAA4AAhcqA4EBALEFAAEALwIBBZ0BAC0ANgD7AQABAE4YASVwKosBBUUAAQADAgEEEgMBAQECfCIDAB8AYACYAgEjABwAggEAMQAsAA0AJwAsAA0AiAIAKABDAAEACwAlAMcBAG8AAQALAC4A0AIAAQAyBRYiAwAYAIQBAAYBAwD4AQAkAFcAWQBJAAEAIgC3AgDnAQAVAAEAJxhGAQLpAQQAKABfABcAAQADAAEBAgACHQUBCgQBAQEAAQIDUQEAjgEAAQAGAAEAOA4CCDgGHQEcOw4VDtgCAQ0=\",\"updateId\":490033588}","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1175],"tags":[5676,1443,5834],"class_list":["post-122125","post","type-post","status-publish","format-standard","hentry","category-general","tag-7-0","tag-dev-notes","tag-dev-notes-7-0","mentions-flixos90","mentions-gziolo","mentions-jorgefilipecosta","mentions-justlevine","mentions-matt","mentions-shaunandrews","mentions-westonruter","author-gziolo"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2AvED-vLL","_links":{"self":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/users\/14780544"}],"replies":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/comments?post=122125"}],"version-history":[{"count":13,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122125\/revisions"}],"predecessor-version":[{"id":122462,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122125\/revisions\/122462"}],"wp:attachment":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/media?parent=122125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/categories?post=122125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/tags?post=122125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}