{"id":121600,"date":"2026-02-23T21:43:54","date_gmt":"2026-02-23T21:43:54","guid":{"rendered":"https:\/\/make.wordpress.org\/core\/?p=121600"},"modified":"2026-03-11T17:22:22","modified_gmt":"2026-03-11T17:22:22","slug":"changes-to-the-interactivity-api-in-wordpress-7-0","status":"publish","type":"post","link":"https:\/\/make.wordpress.org\/core\/2026\/02\/23\/changes-to-the-interactivity-api-in-wordpress-7-0\/","title":{"rendered":"Changes to the Interactivity API in WordPress 7.0"},"content":{"rendered":"<h3 class=\"wp-block-heading\">New <code>watch()<\/code> function<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.0 adds a <code>watch()<\/code> function to the <code>@wordpress\/interactivity<\/code> package. This brand-new function subscribes to changes in any reactive value accessed inside a callback\u2014and reruns it anytime those values change.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, you can tie the Interactivity <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>\u2019s <code>data-wp-watch<\/code> to a DOM element\u2019s lifecycle and use that for reacting to state changes. But how would a process observe those changes programmatically, independently of the DOM? How could you set something up to run side effects at the store level, set up logging, or synchronize state between stores? The <code>watch()<\/code> function fills this gap.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nimport { store, watch } from '@wordpress\/interactivity';\n\nconst { state } = store( 'myPlugin', {\n    state: {\n        counter: 0,\n    },\n} );\n\n\/\/ Runs immediately and re-runs whenever `state.counter` changes.\nwatch( () =&gt; {\n    console.log( 'Counter is ' + state.counter );\n} );\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The function returns an <code>unwatch<\/code> callback that stops the watcher:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst unwatch = watch( () =&gt; {\n    console.log( 'Counter is ' + state.counter );\n} );\n\n\/\/ Later, to stop watching:\nunwatch();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The callback can also return a cleanup function that runs before each re-execution and when <code>unwatch()<\/code> disposes of the watcher:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst unwatch = watch( () =&gt; {\n    const handler = () =&gt; { \/* ... *\/ };\n    document.addEventListener( 'click', handler );\n\n    return () =&gt; {\n        document.removeEventListener( 'click', handler );\n    };\n} );\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">See <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/75563\">#75563<\/a> for more details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Props to <a href=\"https:\/\/profiles.wordpress.org\/luisherranz\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>luisherranz<\/a> for the implementation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deprecated <code>state.navigation<\/code> properties in <code>core\/router<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>state.navigation.hasStarted<\/code> and <code>state.navigation.hasFinished<\/code> properties in the <code>core\/router<\/code> store were always intended as internal implementation details. Used for the loading bar animation, they were never intended to be part of the public API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Starting in WordPress 7.0, accessing <code>state.navigation<\/code> from the <code>core\/router<\/code> store is <strong><em>deprecated<\/em><\/strong> and will trigger a console warning in development mode (<code>SCRIPT_DEBUG<\/code>). Plus, in a future version of WordPress, direct access will not work at all. WordPress 7.1 will add an official mechanism for tracking navigation states.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/70882\">#70882<\/a> for more details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Props to <a href=\"https:\/\/profiles.wordpress.org\/yashjawale\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>yashjawale<\/a> for the implementation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>state.url<\/code> from <code>core\/router<\/code> is now populated on the server<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Previously, you initialized <code>state.url<\/code> in the <code>core\/router<\/code> store on the client by setting it to <code>window.location.href<\/code>. That meant the value was <code>undefined<\/code> until the <code>@wordpress\/interactivity-router<\/code> module finished loading asynchronously, and you had to guard against that initial <code>undefined<\/code> state and <span tabindex='0' class='glossary-item-container'>filter<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Filter<\/span> <span class='glossary-item-description'>Filters are one of the two types of Hooks <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\">https:\/\/codex.wordpress.org\/Plugin_API\/Hooks<\/a>. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.<\/span><\/span><\/span> out the subsequent initialization. Or else things would <span tabindex='0' class='glossary-item-container'>react<span class='glossary-item-hidden-content'><span class='glossary-item-header'>React<\/span> <span class='glossary-item-description'>React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.\r<a href=\"https:\/\/reactjs.org\/\">https:\/\/reactjs.org<\/a><\/span><\/span><\/span> to it as an actual navigation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Starting in WordPress 7.0, this value is populated on the server during directive processing. So its value doesn\u2019t change until the first client-side navigation occurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that means you can combine <code>watch()<\/code> and <code>state.url<\/code> to reliably track client-side navigations, for example, to send analytics on every virtual page view:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nimport { store, watch } from '@wordpress\/interactivity';\n\nconst { state } = store( 'core\/router' );\n\nwatch( () =&gt; {\n    \/\/ This runs on every client-side navigation.\n    sendAnalyticsPageView( state.url );\n} );\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">See <a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/pull\/10944\">#10944<\/a> for more details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Props to <a href=\"https:\/\/profiles.wordpress.org\/luisherranz\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>luisherranz<\/a> for the implementation.<\/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>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/interactivity-api\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>interactivity-api<\/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%2F02%2F23%2Fchanges-to-the-interactivity-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>New watch() function WordPress 7.0 adds a watch() function to the @wordpress\/interactivity package. This brand-new function subscribes to changes in any reactive value accessed inside a callback\u2014and reruns it anytime those values change. Now, you can tie the Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact [&hellip;]<\/p>\n","protected":false},"author":14623809,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"{\"document\":\"AACKCqvPpcoVxczc5RCfGYqbkoUKxczc5RAHipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCsXM3OUQA4qbkoUKxczc5RAjypuShQoLxczc5RALipuShQrFzNzlEAGKm5KFCoXM3OUQipuShQrFzNzlEACKm5KFCsXM3OUQAMqbkoUKAsXM3OUQCYqbkoUKxczc5RADypuShQoAhczc5RDKm5KFCgGFzNzlEMqbkoUKAYXM3OUQypuShQoBxczc5RABipuShQqFzNzlEMqbkoUKAcXM3OUQAcqbkoUKAIXM3OUQypuShQoEhczc5RCKm5KFCsXM3OUQAsqbkoUKAYXM3OUQypuShQoChczc5RDKm5KFCgGFzNzlEMqbkoUKAMXM3OUQAIqbkoUKhczc5RDKm5KFCgGFzNzlEMqbkoUKAMXM3OUQAYqbkoUKhczc5RDKm5KFCgbFzNzlEAGKm5KFCoXM3OUQipuShQqFzNzlEMqbkoUKDsXM3OUQAMqbkoUKBMXM3OUQBYqbkoUKxczc5RAAipuShQqFzNzlEIqbkoUKhczc5RDKm5KFCgbFzNzlEAfKm5KFCgHFzNzlEAKKm5KFCoXM3OUQipuShQqFzNzlEMqbkoUKA8XM3OUQAcqbkoUKAsXM3OUQA8qbkoUKAIXM3OUQypuShQoExczc5RAEipuShQrFzNzlEAHKm5KFCgTFzNzlEAHKm5KFCgCFzNzlEMqbkoUKAYXM3OUQypuShQoBhczc5RDKm5KFCgrFzNzlEAiKm5KFCoXM3OUQypuShQoAxczc5RAGipuShQrFzNzlEACKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQrFzNzlEACKm5KFCoXM3OUQypuShQoLxczc5RAJipuShQrFzNzlEAKKm5KFCsXM3OUQAYqbkoUKhczc5RCKm5KFCoXM3OUQypuShQpExczc5RAFipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQypuShQoAxczc5RAEipuShQrFzNzlECyKm5KFCsXM3OUQSsqbkoUKEsXM3OUQDsqbkoUKAMXM3OUQA4qbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQrFzNzlEAHKm5KFCgCFzNzlEMqbkoUKAMXM3OUQA4qbkoUKxczc5RAAipuShQqFzNzlEMqbkoUKAMXM3OUQAoqbkoUKhczc5RCKm5KFCoXM3OUQypuShQoAhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQrFzNzlEAeKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQipuShQqFzNzlEIqbkoUKhczc5RCKm5KFCoXM3OUQypuShQoBhczc5RCKm5KFCvwYCJwBCLoBFAMBCgIEAwEEIAcAqgEMAgQDAgUAAwQFAQMBBgQGBAMDBAMBBAMFBgIGBAMCBAIIAwEGAgYEAgQGBAMABAMABAIEAwAEAgQDAAgCBAIEAwYFAAIFAAoCBAIOFAMBBAIEAwAFAQ4EAwEKAgQGDgMIGAMABQADAQgDAQQIAggKAwAEAwIKBAMGBgMDBQACCAQDAAQDAAQGBQAMBQAGAgQDAQUAAgQCBQAGAgYDAAQDBQYDBASMAQMHDgYCBgQDAQYCBAMABAIEAwMECAQDAAQDBwQDBQUAAwAMAgQDAAQDAQQDAgQDAwYCBAMGBAMCBQACCAMCBgMAkgIGqAEEAgoCCAUAAgYIHgMBDgMABAMCBAIEAwMEAgYDAAoWAiICBAgKAhiSAggCBgIEAggCBgMAEAMBCgQDAgYDAQQDAQgCCgIEAgYDAAgDBgQCBAMABAIIAwEgAwEKAgwCBAIMAwEMAgYKCAIMAhICBAMEBAIMAwEMAgYEBgMCCgIGAgQDAAQeBBYCBAIMAggCIJICBqgBBAIEAwEEDA4CBgISAgQDAQ4CDAMABAIIAwcIBAImAgQCBAIGAgQCDAMDCAMFCggMAg4CBgIWvgMEAwAIBAMAhAMqhAQCBAIIBAMABBAEAwEEAwK6AQIEAggEAwIQAhACCAQCDAIIAgQCDAIJAAMBBgMCBAMCDAQDAAQCBgMABQACBAMBBQADBCAIAggCFgIGAgwCCAMADgIiAwIMAwQKAhgECgIEAwEGAggDAgYCBAIMAgoECAIIAgQDAQQCCAIKAwIGAgUAAgawAQUAAhQDAQQGAwYEAwAGFQADEQQDAwQDBKIDBgS4AQcACQCiAgMAFgIMAhACFgIEAhCkAwgMAwAKAgYQBg4GAgQCBBAEAwEFAQKqAQgGDgIGAwEEAiwCCgIGBAwDAAoCCgIEAwAEEhADAgwGAg4CDA4DAAQGBAoCBAMABBICBAIKAgUAAggCBAIeBAYDARADAQQCFggCBAMAHgMBGAImAoIBCgYDAAQIEAIIAggOBgMBBBQCGgIeAgQCHAMADAIEAgUAAwEEAwAFAAMABgIMAwAIAwAEAgQCBgMAGAMBBgMABgoCBAIEAhACBgIIAwAEEAIKAgoMBAIKAgQCFAIGAhACCgMBCgIaAgYCDAMBFgIQAiQMCAMBBgIEAwEQAp4BAiICBAIMAgwCCAMBBgISAgwCDgIQAg4CCKwBAwAEAwEIAgQDAQwCBAIKAgYCCgMBBAIIBQIOBAMBEAYFAAIEAwAGAwYGBAIMAgQCBgMEBAIFAAMBDAQDBAQCEgMBBAqKAQMHDgYCCAQMAgQDBgUACAMHBAIGAiQDABIIAhACFAIYFgoECgIGAwAOAgQDAgYCHAUAAggCGAMABgQMAhQDAA4CBAIGAgQDARACCAYIAiQCCAIKAggCBAIEBwACBgIGBAYDAQQCCgIIAhQCEAIGAwAEIAIGAgwCCgIGAgwCGgIEAgwEBhYDAAQCBgKSAgYCBAIEDAMBBQADAgS6BAELIgKyAaIMmgQcsAkcigOWArIBtgqMA4wFvgKaAqgIiAKGCY4DrgWADsRovmzwAbQBAQEIAEj4iwIGtIsCBQBCSJ4BAQEIAhoCFgI+BKgBBgKiASQGAhQCzAZIAK4HAQEIAhQ+AjYUAhQqDgYCIhQSFAIGAiQSFgIcFAgEGrACAvIKSACkDAEBCAEESAAaAQEIAkJIAKoCAQEIAQRIABoBAQgCngEDAAgCEI4BAwEQ4gNIAIYFAQEIAQRIABoBAQgCQkgAiAMBAQgCQkgAqgEBAQgCQkgArgIBAQgCrAM2AwCOASoCGgL+BkgAoggBAQgCnAMUpgIDAjYDAQYmFAQCpAGEAQLMC0gAngsBAQgCgALCAkgAiAMBAQgCQkgAqAEBAQgCQkgAtgIBAQgCFrwBIIQC+ARIAKAKAQEIAggCKpICogLqBUgAugUBAQgBBEgAGgEBCAKQAiL0AkgAugMBAQgCQkjmQIQDoAW6M9DcAhYEDAYDACqwAQ4EAqrfAuTfAqrfAgIG7t8CBgMABAaO4AIEyuACAwGi4QIDANDhAgMBBgQKBAIEBojiAgIGAgbK4gKO4gLM4gKQ4gIC0OICEgwKBgsAAgcAAgaI4wICxOMCAojjAgIGyOMCrOMC5uMCAgYDAwSY5AIC1uQCBhoOGgcBCBIcFAUBrOIC6uICGgIIBgqQ4gLO4gIGHrjhAgT24QICBBACBQEIBgIKquECAgQDA+rhAgIGAg4QCQECBQACBhAIBgQCruEC7OECBAoEAwGQAQQDAQQCEAgHAAQIBgIGBAMCBggGAgYCBAMDCgMCCAQOBwCc5gIC2uYCAgUBBgIEAggGAwIEAgQDAggCCgIECJQCrgESDBQgquUC5uUCEAIGAggCBgMCBgiIAQy2AgoIBhIUFgwKGgYLAAQGCgUAECouEhAsCAIEMgig3QIC4N0CAhYGgAEGDgqE3ALS2QKuAQcAAwCS2AIC0NgCgtkCAszYAgYEHggKBQIILgcAsNcC6NcCFAQDAAoFASAQnAQGCga0BwYCDAQUBgIKAwC6AQYCDAQDABAUDBAKFAgOCAQCCAISAwAGCAcBBAoGAqbIAsTIAiweBDQGDgUADITGAsLGAhwMBgwOAggUMhYGCQACtgEEBhQEBggDBAgCLgQDAwQCmMQC1sQCApzEAtjEAgKwxAIEAwAKBgIGAtDFApbFAgYC2sUCpsUCAgbsxQK8xQIDAfzFAgMCBobHAsTHAgMCogOIArgCKhIemAQWFAgGFAYDAAQIugGCAhIGIggMCBAeBAoMBwAUBgwLADAgmgMIAgwcFoiuAsCuAgIdACAGHgIUCgQGDAIWAggYAhoECQANABIGAhAeHBI8BDC2AQwGBLgCCi4QEhC+AZCfAsyfAgoYBgwYBgwIBA4GFAoHAAIIBAMDBwAUCAMABwAKAwAMsJ0C6p0CBCACBpKdAgLAnAIEAwEEAiQOBgIECQAKAwAEAgY0tAEaCBIGAwE4GgIKDhgkAwASGCYgBgoaCBYyCCgWDDgQBhYEDpICCAYQBAIIAgQC+poBov0C3t8ChusCNP7VApZcjO0B3t8ChusCNP7VApZciJwC\/C7e3wKG6wI0\/tUClly6nAICyo8BCIyQAQT6dM4Bhnf4dagVrGABAQgCuAIDAAgCCNADSPxSlFkEEioIAiLoAbABdAgCAOptkCigC97fAobrAjT+1QKiF7DTAqYE1J0CgrQCAtKqAoqdAv4v3t8ChusCNP7VApZcvJ0CAnTerQMCvvEC4KYCsNMCwJ8DBJYEDgIEAggCCAKOAwMCBAMADgawmgPUnQLoepaUAZ5tVqABQrAHQqYMQhxCrAJCHEKIBUIcQooDQqwBQrACQqQIQqALQooDQqoBQrgCQpoK4MwCBpYEJgMAOpQCAgQCMiaAmQNCylZCvAVCHEK8A0LeVMT4AZz4Adj4ARyk9wFC\/vcBHLr4AQSoAQYCAIwCAgD2+wEACAAKAAyQ+wH++gFSDp77Ad77AZ77Acz6AQ5cApr6AQDk+QGk+QHk+QFQAC4AvPsB1vsBABDMA7D8AdYC5PYBTAw0OgQ2ArT2Aej2AQhICCwGJAYABr71AfT2AQZyuPkBBgIAVuD3AVAAEDYAtvcBEhR6OvD3AYb5AVba+AFMDCRKmPgBzvgBdKz3AQYAzPYBAOwBtAGYiAME7JABxPcBpPcB5PcBNgCI9wEA+vYBAAgACABCHhgAWL74AZ4IAwHCgAIAqIECzAOQEgIAsHTshAMCggECBqCDAwDshAOEAQIGzgEAgpoCAqgC8gQGAL4BVPqVAo6hAuKfAgLCHgIAlB4A1CO8BJYexBsCBNoCrB6sAQD8HQCIHgAGAAwATNwdAJ4bkANQEACYBwEA2Ae4\/QIC\/ljQmgIKAky8mgKuXfIByvYCjqYCCDqiAQSiARDK4gIUkOQCxOMCjOMCAir44QKYAQYoAho0Ao7iAgYFAALq4QICouMClgne3wKiBxSIAwcAApreAtzdAhyeAYLdAjT+1QKUFg6uxwLCxgIcgMsC1sQCApzEAhoGKiQDAMyyAsZnmgQWCwCOAwMABAaubQKuCwQLABwk7HesrgPSqgKM7QHe3wKG6wI0\/tUCllyMqwIC+njYlQIAgosCAgB49OoBzgGU9AEU9vIBRASUsALe3wKG6wI0\/tUCvBSqyALQvwIUgMUC1IcCjO0B3t8ChusCNP7VApZc4kUCoFX+T6YKpgGCAhYEDAYDACqwAQ4EAgAGAQEEBgMABAYBAAgDAQEBFgMBBgQKBAIEBgEDDgACAQACEgwKBgsAAgcAAgYBAAYCAQEIAAYCBgMDBAEABAYaDhoHAQgSHBQFAQACGgIIBgoAAgYeAQAGAgQQAgUBCAYCCgEGEAIGAg4QCQECBQACBhAIBgQCAAIECgQDAZABBAMBBAIQCAcABAgGAgYEAwIGCAYCBgIEAwMKAwIIBA4HAAEABAIFAQYCBAIIBgMCBAIEAwIIAgoCBAiUAq4BEgwUIAAEEAIGAggCBgMCBgiIAQy2AgoIBhIUFgwKGgYLAAQGCgUAECouEhAsCAIEMggBAAMAFgaAAQYOCgCyAq4BBwADAAEABAEAOAYEHggKBQIILgcAAAgUBAMACgUBIBCcBAYKBrQHBgIMBBQGAgoDALoBBgIMBAMAEBQMEAoUCA4IBAIIAhIDAAYIBwEECgYCACIsHgQ0Bg4FAAwAAhwMBgwOAggUMhYGCQACtgEEBhQEBggDBAgCLgQDAwQCAAMAAAQCAQcCAQEEAQECAQIGAwIGAAMDogOIArgCKhIemAQWFAgGFAYDAAQIugGCAhIGIggMCBAeBAoMBwAUBgwLADAgmgMIAgwcFgAIAh0AIAYeAhQKBAYMAhYCCBgCGgQJAA0AEgYCEB4cEjwEMLYBDAYEuAIKLhASEL4BAAQKGAYMGAYMCAQOBhQKBwACCAQDAwcAFAgDAAcACgMADAAGBCACBgEAlAEEAwEEAiQOBgIECQAKAwAEAgY0tAEaCBIGAwE4GgIKDhgkAwASGCYgBgoaCBYyCCgWDDgQBhYEDpICCAYQBAIIAgQCqOIBigaeBTSwAdj7AYicAgkDDAMD1I8BCAEAlhvOAQCKdvZUkgMBBZhZADwIAjTebpAonjsJAt7iArDTAvaZAoCfAgEArAmYCgMChALqSOCmArDTAgET9pkCgJ8CANqVARwAGFgAxvgBhPgB9vcBFLr4AQSoAQYC1voBovwBAvj7Abj7AfD7AbD7Aeb7Aab7Adr7AZr7AUgAxPsBjPsBFNz6AQJCAob6ARQC9vkBAAIQpPkByPkBiPkB9vgBrPsBANb7AZb7AdL+AZr6AQDk9gGK+QEUAQDo9gEIAQKcAdwBoPcB9PYBBlSa+QEGAsj4AbL3AQAW5vcBUAA2tvcBEhR61vcBAKb5AVYAFvD4AQCw+AECzvgB2gGS+AEGzvYBjvYByvYB7gGuAZ6IAwTskAEAIOT3AQA2iPcB\/PYBvPYB9PYBtPYB7PYBrPYB2PYBXAEAPli++AGeCAMBAMKAApz+AZASAsKQArKEAwED7oQDkAHOAYQBAgbSAaYBoJgCAqgC8gQG4JUCnpcCVBSACwEA4r0CApIe0h6aHtojvAQCkAMCBNoCAQCYIPwdhh7GHowezB6YHtgeoB5G6B2WHvgCALgCGJwCALwEJsQDvvgCAsZZCAEB0JoCvJoCpF3oAagB5FEIOqIBBKIBEAL44QKQ5ALE4wKM4wICKq4BHg7M4gKY4gL84QKs4gL24QLwD4TyAgUAAgQCtAGkRgjQNAom0N4CBpTeAggGChC2MgkA\/PACDq7HAgMAlgUDAAQaBiokAwDMsgLGZ5oEFgsAjgMDAAQGvJcDAuCeAgSanwIC7J4CJOx3rK4DMMz2AgIuAwCABPIcopUC+PcBnO0BAsTtAYzsAQDM7AGe9AEUAFTi8gHMAwkC5gGqyALQvwIU3gyeBIQDAwKoAZwXKAAhAycABACBACcABACBAIQAgQCEAIEAhACBAIQDgQCEAIEAhACBAIQDgQCEAYEAhAKBAIQAgQCEAIEAhASBAIQAgQCEA4EAhACBAIQAgQCEAIEAhACBAIQBgQCEAYEAhACBAIQDgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAGBAIQAgQCEBYEAhAWBAIQBgQCEAoEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAYEAhACBAIQBgQCEAYEAhACBAIQBgQCEAIEAhAGBAIQBgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQCgQCEAYEAhAKBAIQCgQCEAIEAhACBAIQAgQCEAYEAhASBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQBgQCEAIEAhAOBAIQAgQCEA4EAhAGBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQFgQCEAYEAhAGBAIQBgQCEBYEAhACBAIQEgQCEAIEAhACBAIQAgQCEAIEAhACBAIQCgQCEAIEAhACBAIQBgQCEAYEAhACBAIQEgQCEBoEAhAGBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAoEAhAGBAIQEgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQFgQCEAIEAhACBAIQAgQCEAIEAhACBAIQDgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEBIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQAgQCEA4EAhAGBAIQAgQCEBIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAKBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQCgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhAGBAIQBgQCEAYEAhACBAIQAgQCEB4EAhASBAIQFgQCEA4EAhAKBAIQBgQCEBIEAhAaBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEA4EAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEBIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAoEAhACBAIQAgQCEAoEAhAGBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAWBAYQAgQCEAIEAhACBAIQDgQCEAIEAhAGBAIQCgQGEAIEAhAGBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhAOBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAoEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEA4EAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAYQAgQCEAIEAhACBAIQAgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAoEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAYEAhAAnACgGJwAoCyEAKAEhACcAAQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAKEAqACHACEAKAAhACcBIQAnAMQAhAChAKgABAAoAIcAIQAoAScBBACEDigAJwCHACEAKAEnAQQAhBaBAIQEKAAnAIcAIQAoAScAKAAhACgEJwCHACEAKAEnAQQAKAAnAIcAIQAoAScAKAAhACgEJwCHACEAKAEnAQQAhAooACcAhwAhACgBJwAoACEAKAQnAIcAIQAoAScBBAAoACcAhwAhACgBJwEEACgAJwCHACEAKAEnAQQAKAAnAIcAIQAoAScBBACEAoEAhACBAIQCKAAnAIcAIQAoAScBBACEEigAJwCHACEAKAEnAQQAhAAoACcAhwAhACgBJwEEACgAJwCHACEAKAEnAQQAKAAnAIcAIQAoAScBBACEAoEAKAAnAIcAIQAoAScBBACEAoEAhAAoACcAhwAhACgBJwAoACEAKAQnAIcAIQAoAScBBACBAIQAKAAnAIcAIQAoAScBBAAoACcAqAPEfcEAxEvBAMQhwQDEPsEAxAHBAMQNwQDERMEAxMMBwQDECcEBxAXBAMRAwQDEAqEAwQUhAcEFoQDBBaEBwQHEBccAIQAoAScBBACEBSgAJwDEAMEAxAHBAMQBwQHEBMEAxADBBMQFwQCoAMQFoQEhAKEAqAHEGqgBKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAhA2oACgAqAAoAKgAKACoACgAqAAoAEQAxDGEAMQBhADEAIQERADETIQAxEJEAMRgoQHEHqjXcYRkc3RhdGV2ZXJzaW9uc3RhdGV2ZXJzaW9uZG9jdW1lbnRkYXRlZG9jdW1lbnRzbHVnZG9jdW1lbnRzdGF0dXNkb2N1bWVudHRpdGxlQ2hhbmdlcyB0byB0aGUgSW50ZXJhY3Rpdml0eSBBUEkgaW4gV29yZFByZXNzIGRvY3VtZW50Y29udGVudDwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5lIG9ldCB1bmN0aTwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+b2VzIG50IGFvdyB1dGllIGF0dHJpYmVzIHRoIHRlIGFlIGFlIG4gYSBpbmcgZWxlbmUgdGUgbHVzIGFuZSAgYSByZWN0aXZlcyBvdGhlIHNhZSB0ZSB0byBhIGVsZW1lbnRzIGkgb3JyZWludG8gc3RhZSBhIG8gZSBzIG8gcmF0aSBBUEkgdHZlcyBhbmcgbmVlZW50IG8gaGUgbXBsZSByZWN0cyAgdGhlIHNlIGUsIHMgbG9uZyAgY2hyaWUgYXMgIGRlZW50IC48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6YXJhZ2FwIC0tPgo8cCBhc3NuYWllICB0byBhIGRyZWN0aXYgYWVuIGEgdHJpZWRhc2ggY29lY2UpIG9sbG9lICB0ZSAgIHNob3cgaW4gdGhlIGxsbyBlYWU8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSB7Imxhbmd1YWdlIjoiIn0gLS0+CjxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPnQgYXR3YXRjaD1jcy5yc3RhdGMKICAgIHRwd2F0Y2hpbmF0Y2g7PC9wcmU+CjwhLS0gL3dwOnN5bnRheGhpZ2hsaWdodGVyL2NvZGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhlIGxhIGFuYWwgcmV0YSBudSBmdWkuIGggZWFwIGJlbyBlY2ggeGVjdWlvIGFuZCBlbiBlIHRoZSBpcyBkaXNzbyBpYSBldW53YXRob2U8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6c3ludGF4aGlnaGxpZ2h0ZXIvY29kZSB7Imxhbmd1YWdlIjoiIn0gLS0+CjxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPnR1dHRvbgogICAgZG9jdW5hbnRpc2VjaW4KICAgIHR1bj11bnRvbnNlY2luOwogICAKOzwvcHJlPgo8IS0tIC93cDpzeW50YXhoaWdobGlnaHRlci9jb2RlIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlNlZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL2d1dGVuYmVyZy9wdWxsLzc2Ij4jNzY8L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UHJvcHMgdG8gQGx1aXNoZXJyYW56IGZvciB0aGUgaW1wbGVtZW50YXRpb24uPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RGVwcmVjYXRlZCA8Y29kZT5hdGFpZ288L2NvZGU+IHJldGllPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgPGNvZGU+YXRhaWdvcmU8L2NvZGU+IGQgZGVzdGVuYXRpb25hc2lpYyBwcnQgaW50ZWNlcmVvIG93ZXIgaXQgaW1wbGVtZW50YXRpb24gZXRhIHVzZWQgbyBsaW4gYWlhdGlvbiBoZWV3cmVuZXJpdGVkZWQgdG8gZSBhciBlIGMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+U2luIFdvcmRQcmVzcyAuLCBzIGRpcmVjdGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBlIHJlbW9lZCBpIHN1c2VlbnQgdnNpb25zLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlNlZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL2d1dGVuYmVyZy9wdWxsLzcwIj4jNzA8L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UHJvcHMgdG8gYXNoYWFsIGZvciB0aGUgaW1wbGVtZW50YXRpb24uPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PGNvZGU+c3Q8L2NvZGU+ICA8Y29kZT5lZTwvY29kZT4gcGUgaGVlcjwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UHJlaW91c2x5LCA8Y29kZT5zdHRldXI8L2NvZGU+IG4gPGNvZGU+ZXQ8L2NvZGU+IHRvZSBhaWl0ZSAgaGUgbGVudCB5IHNlaW5nIGl0IHRvIDxjb2RlPm5jdGlvbnJlPC9jb2RlPnRybmcgIHJycyAgdHMgdmxlcyBwbHRlIHRoZSBlcnZlIHJuIGN0aWVyb3NpbmcgZWFuIGkgdmFsdWUgZXN0IGNobmUgdXRpbCB0aGUgZmlydCBsZS1zaWRlIGFnYXRpbm9yPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhpcyBlIHQgcHNpbGUgdCBlIGF0IGEgPGNvZGU+ZWw8L2NvZGU+IHJlaSBybGVzIHRvIG8gZXBlIG8gZSBhbmMgIHIgcGFnIGllPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmFyYWdhcCAtLT4KPHByZSBhb25hZGVtcCBzZSB0aCAgZnJ3b3JkcHJlc3MvaW50ZXJhY3Rpdml0eWNvbnRzdGVzY3Ivcm91dCBhY2ggICAgICBocnNldmVyY2llbi1pZGVuYXZpYWlvbnNlbmF0aWNnZWUgc3RhZS48L3A+CjwhLS0gL3dwOmFnaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5TZWUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9lZS9wdWxsLzA0Ij4jMDQ8L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UHJvcHMgdG8gQGx1aXNoZXJyYW56IGZvciB0aGUgaW1wbGVtZW50YXRpb24uPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+ZG9jdW1lbnRleGNlcnB0ZG9jdW1lbnRhdXRob3Jkb2N1bWVudGZlYXR1cmVkX21lZGlhZG9jdW1lbnRjb21tZW50X3N0YXR1c2RvY3VtZW50cGluZ19zdGF0dXNkb2N1bWVudHN0aWNreWRvY3VtZW50dGVtcGxhdGVkb2N1bWVudGZvcm1hdGRvY3VtZW50bWV0YWFkdmFuY2VkX3Nlb19kZXNjcmlwdGlvbmpldHBhY2tfc2VvX2h0bWxfdGl0bGVqZXRwYWNrX3Nlb19ub2luZGV4amV0cGFja19wb3N0X3dhc19ldmVyX3B1Ymxpc2hlZF9qZXRwYWNrX25ld3NsZXR0ZXJfYWNjZXNzX2pldHBhY2tfZG9udF9lbWFpbF9wb3N0X3RvX3N1YnNfamV0cGFja19uZXdzbGV0dGVyX3RpZXJfaWRfamV0cGFja19tZW1iZXJzaGlwc19jb250YWluc19wYXl3YWxsZWRfY29udGVudF9qZXRwYWNrX21lbWJlcnNoaXBzX2NvbnRhaW5zX3BhaWRfY29udGVudGZvb3Rub3Rlc2pldHBhY2tfcHVibGljaXplX21lc3NhZ2VqZXRwYWNrX3B1YmxpY2l6ZV9mZWF0dXJlX2VuYWJsZWRqZXRwYWNrX3NvY2lhbF9wb3N0X2FscmVhZHlfc2hhcmVkamV0cGFja19zb2NpYWxfb3B0aW9uc2RvY3VtZW50Y2F0ZWdvcmllc2RvY3VtZW50dGFnc2RvY3VtZW50YmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzNy4wTmV3IDxjb2RlPndhdGNoKCk8L2NvZGU+IGZ1bmN0aW9ubGV2ZWxjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRXb3JkUHJlc3MgNy4wIGludHJvZHVjZXMgYSA8Y29kZT53YXRjaCgpPC9jb2RlPiBmdW5jdGlvbiBpbiB0aGUgPGNvZGU+QHdvcmRwcmVzcy9pbnRlcmFjdGl2aXR5PC9jb2RlPiBwYWNrYWdlLiBJdCBzdWJzY3JpYmVzIHRvIGNoYW5nZXMgaW4gYW55IHJlYWN0aXZlIHZhbHVlIGFjY2Vzc2VkIGluc2lkZSBhIGNhbGxiYWNrLCByZS1ydW5uaW5nIHRoZSBjYWxsYmFjayB3aGVuZXZlciB0aG9zZSB2YWx1ZXMgY2hhbmdlLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEN1cnJlbnRseSwgdGhlIEludGVyYWN0aXZpdHkgQVBJIHByb3ZpZGVzIDxjb2RlPmRhdGEtd3Atd2F0Y2g8L2NvZGU+IGFzIGEgZGlyZWN0aXZlIHRpZWQgdG8gYSBET00gZWxlbWVudCdzIGxpZmVjeWNsZSBmb3IgcmVhY3RpbmcgdG8gc3RhdGUgY2hhbmdlcy4gSG93ZXZlciwgdGhlcmUgaXMgbm8gcHJvZ3JhbW1hdGljIEFQSSB0byBvYnNlcnZlIHRob3NlIGNoYW5nZXMgaW5kZXBlbmRlbnRseSBvZiB0aGUgRE9Nb3IgZXhhbXBsZSwgdG8gcnVuIHNpZGUgZWZmZWN0cyBhdCB0aGUgc3RvcmUgbGV2ZWwsIHNldCB1cCBsb2dnaW5nLCBvciBzeW5jaHJvbml6ZSBzdGF0ZSBiZXR3ZWVuIHN0b3Jlcy4gVGhlIDxjb2RlPndhdGNoKCk8L2NvZGU+IGZ1bmN0aW9uIGZpbGxzIHRoaXMgZ2FwLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdlbGluZU51bWJlcnNmaXJzdExpbmVOdW1iZXJ3cmFwTGluZXNtYWtlVVJMc0NsaWNrYWJsZXF1aWNrQ29kZWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gPGNvZGU+dW53YXRjaDwvY29kZT4gY2FsbGJhY2sgdGhhdCBzdG9wcyB0aGUgd2F0Y2hlcjpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRsYW5ndWFnZWxpbmVOdW1iZXJzZmlyc3RMaW5lTnVtYmVyd3JhcExpbmVzbWFrZVVSTHNDbGlja2FibGVxdWlja0NvZGVpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBjYWxsYmFjayBjYW4gYWxzbyByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLiBUaGlzIGNsZWFudXAgcnVucyBiZWZvcmUgZWFjaCByZS1leGVjdXRpb24gYW5kIHdoZW4gdGhlIHdhdGNoZXIgaXMgZGlzcG9zZWQgb2YgdmlhIDxjb2RlPnVud2F0Y2goKTwvY29kZT46ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50bGFuZ3VhZ2VsaW5lTnVtYmVyc2ZpcnN0TGluZU51bWJlcndyYXBMaW5lc21ha2VVUkxzQ2xpY2thYmxlcXVpY2tDb2RlaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRTZWUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9ndXRlbmJlcmcvcHVsbC83NTU2MyI+Izc1NTYzPC9hPiBmb3IgbW9yZSBkZXRhaWxzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFByb3BzIHRvIEBsdWlzaGVycmFueiBmb3IgdGhlIGltcGxlbWVudGF0aW9uLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudERlcHJlY2F0ZWQgPGNvZGU+c3RhdGUubmF2aWdhdGlvbjwvY29kZT4gcHJvcGVydGllcyBpbiA8Y29kZT5jb3JlL3JvdXRlcjwvY29kZT5sZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIDxjb2RlPnN0YXRlLm5hdmlnYXRpb24uaGFzU3RhcnRlZDwvY29kZT4gYW5kIDxjb2RlPnN0YXRlLm5hdmlnYXRpb24uaGFzRmluaXNoZWQ8L2NvZGU+IHByb3BlcnRpZXMgaW4gdGhlIDxjb2RlPmNvcmUvcm91dGVyPC9jb2RlPiBzdG9yZSB3ZXJlIGlubG9hZGluZyBiYXIgYW5pbWF0aW9uLiBUaGVzZSB3ZXJlIG5ldmVyIGludGVuZGVkIHRvIGJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50U3RhcnRpbmcgaW4gV29yZFByZXNzIDcuMCwgYWNjZXNzaW5nIDxjb2RlPnN0YXRlLm5hdmlnYXRpb248L2NvZGU+IGZyb20gdGhlIDxjb2RlPmNvcmUvcm91dGVyPC9jb2RlPiBzdG9yZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHRyaWdnZXIgYSBjb25zb2xlIHdhcm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZSAoPGNvZGU+U0NSSVBUX0RFQlVHPC9jb2RlPikuIERpcmVjdCBhY2Nlc3Mgd2lsbCBzdG9wIHdvcmtpbmcgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBXb3JkUHJlc3MuIEFuIG9mZmljaWFsIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgbmF2aWdhdGlvbiBzdGF0ZSB3aWxsIGJlIGludHJvZHVjZWQgaW4gV29yZFByZXNzIDcuMS5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRTZWUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9ndXRlbmJlcmcvcHVsbC83MDg4MiI+IzcwODgyPC9hPiBmb3IgbW9yZSBkZXRhaWxzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFByb3BzIHRvIEB5YXNoamF3YWxlIGZvciB0aGUgaW1wbGVtZW50YXRpb24uZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50PGNvZGU+c3RhdGUudXJsPC9jb2RlPiBmcm9tIDxjb2RlPmNvcmUvcm91dGVyPC9jb2RlPiBpcyBub3cgcG9wdWxhdGVkIG9uIHRoZSBzZXJ2ZXJsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50UHJldmlvdXNseSwgPGNvZGU+c3RhdGUudXJsPC9jb2RlPiBpbiB0aGUgPGNvZGU+Y29yZS9yb3V0ZXI8L2NvZGU+IHN0b3JlIHdhcyBpbml0aWFsaXplZCBvbiB0aGUgY2xpZW50IGJ5IHNldHRpbmcgaXQgdG8gPGNvZGU+d2luZG93LmxvY2F0aW9uLmhyZWY8L2NvZGU+LiBkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgPGNvZGU+d2F0Y2goKTwvY29kZT4gYW5kIDxjb2RlPnN0YXRlLnVybDwvY29kZT4gdG8gcmVsaWFibHkgdHJhY2s6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50bGFuZ3VhZ2VsaW5lTnVtYmVyc2ZpcnN0TGluZU51bWJlcndyYXBMaW5lc21ha2VVUkxzQ2xpY2thYmxlcXVpY2tDb2RlaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRTZWUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy93b3JkcHJlc3MtZGV2ZWxvcC9wdWxsLzEwOTQ0Ij4jMTA5NDQ8L2E+IGZvciBtb3JlIGRldGFpbHMuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50UHJvcHMgdG8gQGx1aXNoZXJyYW56IGZvciB0aGUgaW1wbGVtZW50YXRpb24uZHJvcENhcGlubmVyQmxvY2tzTnc8Y2Q+d2FjaCgpPC9jb2RlPmZvbldyZFByczcuMCBpcm9kdWNlcyA8Y2RlPmF0Y2goKTwvY29kZT5mbmNvbiBpbiB0aDxjb2RlPkB3b3JkcHJlc3MvaW50ZXJjaXZpeTwvY29kZT4gcGFja2FnZS4gSXQgc3Vic2NvIGNhbmdlc2luIGFueSByZWFjaXZ2bHVjY3NzZWRpc2lkZWNhbGxiYWNrLCByZS1ydW5udGggY2FsYmFjayB3aHZlcmhvc3ZhZWNoZy48L3A+CjwhLS0vd3A6cGFyYWdyYXBoLS0+Cgo8IS0tIHdwOnByYWdyYXBoLS0+CjxwPkN1cm50bHksIHRoZSBJbnRlcmFpdHkgQVBJIHByb3ZpZDxjZGU+ZGFhLXdwLXdhdGM8L2NvZD5hICBkaXJjdGl2ZWlkRE9NICdsZmVjeWNsZWYgYWN0ZyB0Y2huZ2VzLkh3ZXZlcix0aHJlaW5wb2dybW1hY28gb2JzZXIgdGhvZWNoZXNpZHBuZGx5ZnRET00gZm9yIGV4YSx0byB1biBzaWQgZWZmZWF0dG9ybHZlbGV0dXAgZ2dpLG9yc3lub256c3R0ZSBiZXR3ZWVuIHRvcmVzLlRoZTxjbz53YXRjaCgpPC9jb2Q+IGZ1Y2lvbmZpbGxzIHRoaXMgZ2Fwc3ludHhoaWdobGlnaHRlL2NvZGUgeyJsbnVnZSI6ImpzY3JpdCJ9cmVjbD0id3AtYmxvY2stc3l0eGhnaGxpZ2h0ci1jb2RlIj5pbXBvcnR7c3JlLHd0Y2h9IGZyb20gJ0B3b3Jwc3MvaW50ZXJhaXR5JzsKCmNvbnN0eyBzdHQgfSA9IHN0b3JlKCAnbXlQbHVnaScsewogICAgc3R0ZTp7CiAgICAgICAgY291bmU6IDAsCiAgICB9LAp9ICk7CgovLyBSdW5zIG1taXRlbHkgYW5kIHJlLXJ1biB3ZW5ldmVyYHN0YXRlLnVudHJgIGhhbmdzLgp3YXRjaCggKD0gewogICAgY25zb2UuZyggJ0NvdW50cmlzJyArIHNhdC5jb3VudGVyKTsKfSk7PC9wcmU+CjwhLS0vd3A6eW50YXhpZ2hsaWdodGVyL2NkZSAtLT4KCjwhLS0gcDpwYXJhZ3JhcGgtLT4KPHA+VGhlIGZ1bmN0b3JldXJucyBhbiA8Y29kZT51bndhdGM8L2NvZD5jYWJhY2sgdGhhdCBzdHBzdGggd3RjaHI6anNjcmlwdGNvbnN1bndjaCA9ICggKCkgIHsKICAgIG9ub2xlbG9nKCAnQ291bnRlIGkgJyArIHNlLm91bnRlciApO30pOwoKLy9MYXRlcix0b3NvIGc6CnVudygpY2FsYmNrYyBzb3VybiBjbGVhcG5jdG9uVGlzY2xudXJ1bnMgZnJlYXJlLWV0bndodGh3YWNycG9lZCBmdjxjb2Q+YygpPC9jZD46anNjcmlwdGNvbnMgbndhY2ggPSB3YWNoKCAoKSA9IHsKICAgIGNzdCBoYW5kbGVyID0gKCkgPSB7IC8qIC4uLiAqLyB9O21ldC5kZEV2ZUx0bmVyKCAnbGNrJywgaGFkbGVyICk7CnJlciAoKSAgewogICAgICAgIGRvY21lLnJlbXZlRXZldExpdG5lciggJ2xjaycsIGhhZGxlciApIH07fSApNTUzNTUzc3RlLm52YXRpbnBvcHJzIGluIGNvZGU+Y29yZXJvdXRlcjwvY29kZT48L3N0ZS5udmF0aW4uaGFzU3RhdGRhbjxjbz5hdC52aWdhLmhGbnNoZWQ8L29kZT5vcGVyaWVzIGggPG9kPmNvL3J1dGVyPC9jb2RlPnN0cmUgZW5lcm5hbGRpbHNmcm9hZGdiciBhbm0uVHMgZSB2ZSBubmJwdG9mIHRocHVibGkgQVBJdGFydGdpbiA3MGFjY2VzaW5nPGNvZT5zdGF0ZS5uYXZnYXRpb248L2NvZGU+IGZvbSB0aCA8b2RlPmNvcmUvcm91cjwvY29kZT5zdG9yZSB0cmlnZ3JhIGNvbnNvbGUgd2FuaW5nIGluIGR2ZWxvcGVudCBtZCAoPGNvZT5TQ1JJUFRfREVCVUc8L2NvZGU+KS5EcmVjdGFjY2VzIHdpbGwgc3RvcCB3b3JraW5nIGluIGEgZnR1cmUgdmVyaW9uIG9mIFdvcmRQcnNzLiBBbiBvZmZpY2lhbCBtY2hhaXNtIGZvciByYWNraW5nbmFpZ2F0aW9uIHRhdGUgd2xsIGJlIGludHJkdWNlZCBpIFdvcmRQcmVzIDcxLjg4Mjg4MkB5andlYXRlLnVybGZyb21jb3Ivcm91dHJpcyBub3cgb3B1bGF0ZG9uIHQgc3ZlcnZhLmxpdGhlIGNvci9yb3VlcnNyd3MgbmlhbGl6ZG9udGNpYnR0d2lkb3cubG9hLmhmLiBTYXRpaW5Xb2RQZXM3LjAsaGlhdSBpb3B1YWRvbiBzcmR1aWdkaXJldiBwY2VzLG1pbmd0c2RvbidhZ25zY2ludG52aW8gY2N1cy5tYWtzaW9zYm9jb21iaW48Y29kZT53Y2goKTwvY29kZT5uZHN0YXQudXJ0byBsYWJseXRhY2sgY2ludC1pZGVuYXZpZ2FpbnNmcnhhbWwsdHNuZGFseXRpc2h2aXR1YWxldnc6c3ludHhoaWdobGlnaHRlL2NvZGUgeyJsbnVnZSI6ImpzY3JpdCJ9Y2xzcz0id3AtYmxjay1zeXR4aGlnaGxpZ2h0ZXItY28iPmlvcnR7IHRvcix3YWN9b20gJ0AnOwoKcyB7IGF0IH0gPSB0b3JlKCAnb2VlcicpOwoKd3QoKCkgPXsKLy8gVGlzIHVuIG9uIHkgbHRzIGd0LgogICAgZEFubHlzUGFWaXcodHVybCApOwp9ICk7cmVzeW50eGhpbGlnaHRlci9jb2Rld29yZHByc3MtZHZlbG9wMTk0MTk0ZG9jdW1lbnRNZXRhc2F2ZWRBdGRvY3VtZW50TWV0YXNhdmVkQnksIGYgdGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdXNlZCBmb3IgdGhlY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50U3RhcnRpbmcgaW4gV29yZFByZXNzIDcuMCwgdGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgb24gdGhlIHNlcnZlciBkdXJpbmcgZGlyZWN0aXZlIHByb2Nlc3NpbmcsIG1lYW5pbmcgaXRzIHZhbHVlIGRvZXNuJ3QgY2hhbmdlIHVudGlsIHRoZSBmaXJzdCBjbGllbnQtc2lkZSBuYXZpZ2F0aW9uIG9jY3Vycy5kcm9wQ2FwaW5uZXJCbG9ja3MgY2xpZW50LXNpZGUgbmF2aWdhdGlvbnNvciBleGFtcGxlLCB0byBzZW5kIGFuYWx5dGljcyAgdmlydHVhbCBwYWdlIHZpZXcsIGZvbiBlYWNoLHRoZSA8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD4sb24gZWFjJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7c3RhdGV2ZXJzaW9uLHRoZSBUaGlzIG1lYW50IHRoZSB2YWx1ZSB3YXMgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiB1bnRpbCB0aGUgPGNvZGU+QHdvcmRwcmVzcy9pbnRlcmFjdGl2aXR5LXJvdXRlcjwvY29kZT4gbW9kdWxlIGZpbmlzaGVkIGxvYWRpbmcgYXN5bmNocm9ub3VzbHksIHJlcXVpcmluZyBkZXZlbG9wZXJzIHRvIGd1YXJkIGFnYWluc3QgdGhhdCBpbml0aWFsIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gc3RhdGUgYW5kIGZpbHRlciBvdXQgdGhlIHN1YnNlcXVlbnQgaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmVhY3RpbmcgdG8gaXQgYXMgYW4gYWN0dWFsIG5hdmlnYXRpb24uPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+LG9uIGVhY29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudFRoaXMgbWVhbnQgdGhlIHZhbHVlIHdhcyA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHVudGlsIHRoZSA8Y29kZT5Ad29yZHByZXNzL2ludGVyYWN0aXZpdHktcm91dGVyPC9jb2RlPiBtb2R1bGUgZmluaXNoZWQgbG9hZGluZyBhc3luY2hyb25vdXNseSwgcmVxdWlyaW5nIGRldmVsb3BlcnMgdG8gZ3VhcmQgYWdhaW5zdCB0aGF0IGluaXRpYWwgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBzdGF0ZSBhbmQgZmlsdGVyIG91dCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiB0byBhdm9pZCByZWFjdGluZyB0byBpdCBhcyBhbiBhY3R1YWwgbmF2aWdhdGlvbi5vcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRJbiAsLCAgbmV3aW50cm9kdWNlcyAsIGFkZHN0b1RoaXMgYnJhbmQtbmV3IGZ1bmN0aW9uIC4gQW55IHRpbWUgdGhvc2UgdmFsdWVzIGNrLiBBbnkgdGltZSB0aG9zZSB2YWx1ZXMgY2hhbmdlLGBgPGNvZGU+PC9jb2RlPmBgdGhlIGB3YXRjaCgpYDxjb2RlPjwvY29kZT4gZnVuY3Rpb24gcmVydW5zZmZlcnN1cHBsaWVzZ2l2ZXMgeW914oCUYW5kIHJlZCBpbnNpZGUgYSBjYWxsYmFja+KAlGFuZCByZXJ1bnMgaWRlIGEgY2FsbGJhY2vigJRhbmQgcmVydW5zIGl0IG55YW55dGltZSB0aG9zZSB2YWx1ZXMgY2hhbmdlLy5Ob3csIGl0J3MgdHJ1ZSB0aGF0IHlvdVlvdSBjYW4gdXNlIHRoZSBJbnRlcmFjdGl2aXR5J3MgQVBJICdzIHRpZXlhbmQgdXNlY3ljbGUgYW5kIHVzZSB0aGF0IGFuZCB1c2UgdGhhdCAgZm9yQnV0IGNoYW5nZXMuIEJ1dCBob3cgcHJvc2UgY2hhbmdlc3Byb2dyYW1tYW5nZXNwcm9ncmFtbWF0aWNhbGx5LCAgd291bGQgYSBwcm93IHdvdWxkIGEgcHJvY2Vzcz9Ib2YgdGhlIERPTT8gSG93IHRoZSBET00\/IEhvdyAgY291bGQgeW91IHNldCBzb21ldGhpbmcgdXAgc29tZXRoaW5nIHVwICB0b21ldGhpbmcgdXAgdG8\/PGNvZGU+dW53YWMoKTwvY29kPnRoZSBkaXNwb3NlcyBvZiA6dGhhdGFuZCB1c2VkIGZvciB0aGUgbG9hZGluZyBiYXIgYW5pbWF0aW9uIGFuZCDigJQuIFUsdGhleSB3ZXJlV29yZFByZXNzIDcuMSB3aWxsIGFkZCBhcywgYW5kLCB5b3Ugd291ZGlyZWN0IGFjY2VzcyB3aWxsIG5vdCB3b3JrIFdvcmRQcmVzcywgZGlyZWN0IGFjY2VzcyB3aWxsIG5vdCB3b3JrIGF0IGFsbCB5b3UgaW5paXRpYWxpemVkbyB5b3UgaGFkaGF0YW5kLk9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gc3RhdGUgYW5kIGZpbHRlciBvdXQgdGhlIHN1YnNlcXVlbnQgaW5pdGlhbGl6YXRpb24uIE9yICBlbHNlIGl0IHdvdWxkIGFjdCBsaWtldGhpbmdzIHdvdWxkIHJlYWN0IHRhdGUgYW5kIGZpbHRlciBvdXQgdGhlIHN1YnNlcXVlbnQgaW5pdGlhbGl6YXRpb24uIE9yIGVsc2UgdGhpbmdzIHdvdWxkIHJlYWN0IHRvIGl0IGxzIGZpbHRlciBvdXQgdGhlIHN1YnNlcXVlbnQgaW5pdGlhbGl6YXRpb24uIE9yIGVsc2UgdGhpbmdzIHdvdWxkIHJlYWN0IHRvIGl0IGxzICBmaWx0ZXIgb3V0IHRoZSBzdWJzZXF1ZW50IGluaXRpYWxpemF0aW9uLiBPciBlbHNlIHRoaW5ncyB3b3VsZCByZWFjdCB0byBpdCBsc2FuIGFjdHVhbCBuYXZpZ2F0aW9uYXMgZmlsdGVyIG91dCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbi4gT3IgZWxzZSB0aGluZ3Mgd291bGQgcmVhY3QgdG8gaXQgYXMgLiBTb0FOZCB0aGFudCBtZWFuc255b3UgY2FuIHZlLCB0byBzZW5kIGFuYWx5dGljcyBvbiBldmVyeWFkdG9UaGlzIGJyYW5kLW5ldyBmdW5jaW9u4oCUYW5kc2l5dGltTm93LCB5byBjYSBpZSdhbmQgdXNlIHRoYXQgQnV0IGh3dWxkYSBlc3Nwcm9ncmFtbWF0Y2FsbHksIGk\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BAQMEBgJBAQIEQQACAxIBBAgKDEUAAwcCAw4CBAwDBgoBBwIDAghEABIEBQRCAEMCAQIFBAoIAwEQAwYFAwYNAgYBAkMAQgABAgECQRY4AZAGAYwCAQ0BtwQBDQGkAQGKAQE4AZoFAaUBAaUCAZ4BAYwBAZMEAYMBAaIEAaYBAbYCAb8GAaQBATUDQQ0EQTQnQROtAkECkQFBDBFBBwJBCBEBRARBB0QEQQEDQQICBAEDAkE8AgEDAQB9AegTAH2BkfkNfQB3BG9wZW53AHl3AHcIc3RhbmRhcmR3AHcAeXl3AHl9AHl5dwB3AHh2AhhpbWFnZV9nZW5lcmF0b3Jfc2V0dGluZ3N2BAh0ZW1wbGF0ZXcHaGlnaHdheRBkZWZhdWx0X2ltYWdlX2lkfQAEZm9udHcAB2VuYWJsZWR5B3ZlcnNpb259AnUBfZcSdQR9rFh9oxZ9ilt9tUp4dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3FnN5bnRheGhpZ2hsaWdodGVyL2NvZGV3lgJpbXBvcnQgeyBzdG9yZSwgd2F0Y2ggfSBmcm9tICdAd29yZHByZXNzL2ludGVyYWN0aXZpdHknOwoKY29uc3QgeyBzdGF0ZSB9ID0gc3RvcmUoICdteVBsdWdpbicsIHsKICAgIHN0YXRlOiB7CiAgICAgICAgY291bnRlcjogMCwKICAgIH0sCn0gKTsKCi8vIFJ1bnMgaW1tZWRpYXRlbHkgYW5kIHJlLXJ1bnMgd2hlbmV2ZXIgYHN0YXRlLmNvdW50ZXJgIGNoYW5nZXMuCndhdGNoKCAoKSA9PiB7CiAgICBjb25zb2xlLmxvZyggJ0NvdW50ZXIgaXMgJyArIHN0YXRlLmNvdW50ZXIgKTsKfSApO3h3ATF4eXh4dw5jb3JlL3BhcmFncmFwaHl4dxZzeW50YXhoaWdobGlnaHRlci9jb2Rld31jb25zdCB1bndhdGNoID0gd2F0Y2goICgpID0+IHsKICAgIGNvbnNvbGUubG9nKCAnQ291bnRlciBpcyAnICsgc3RhdGUuY291bnRlciApOwp9ICk7CgovLyBMYXRlciwgdG8gc3RvcCB3YXRjaGluZzoKdW53YXRjaCgpO3h3ATF4eXh4dw5jb3JlL3BhcmFncmFwaHl4dxZzeW50YXhoaWdobGlnaHRlci9jb2Rld9QBY29uc3QgdW53YXRjaCA9IHdhdGNoKCAoKSA9PiB7CiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4geyAvKiAuLi4gKi8gfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGhhbmRsZXIgKTsKCiAgICByZXR1cm4gKCkgPT4gewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjbGljaycsIGhhbmRsZXIgKTsKICAgIH07Cn0gKTt4dwExeHl4eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3FnN5bnRheGhpZ2hsaWdodGVyL2NvZGV30gFpbXBvcnQgeyBzdG9yZSwgd2F0Y2ggfSBmcm9tICdAd29yZHByZXNzL2ludGVyYWN0aXZpdHknOwoKY29uc3QgeyBzdGF0ZSB9ID0gc3RvcmUoICdjb3JlL3JvdXRlcicgKTsKCndhdGNoKCAoKSA9PiB7CiAgICAvLyBUaGlzIHJ1bnMgb24gZXZlcnkgY2xpZW50LXNpZGUgbmF2aWdhdGlvbi4KICAgIHNlbmRBbmFseXRpY3NQYWdlVmlldyggc3RhdGUudXJsICk7Cn0gKTt4dwExeHl4eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5dwdqc2NyaXB0dwdqc2NyaXB0dwdqc2NyaXB0dwdqc2NyaXB0eHcOY29yZS9wYXJhZ3JhcGh5dxMyMDI2LTAyLTIzVDIxOjQzOjU0sAMAdzFjaGFuZ2VzLXRvLXRoZS1pbnRlcmFjdGl2aXR5LWFwaS1pbi13b3JkcHJlc3MtNy0wdwdwdWJsaXNoeHckNGRjMzU0ZmMtYzcxMy00NzNkLTkwOTEtOWFlOTE5MGJlZGYwd0M8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk5ldyA8Y29kZT53YXRjaCgpPC9jb2RlPiBmdW5jdGlvbjwvaDM+dyQ5NmViMzZjNy1lNWFiLTRkNmEtODA3NC1lMTcyMTVjYTcxYmJ39gE8cD5Xb3JkUHJlc3MgNy4wIGludHJvZHVjZXMgYSA8Y29kZT53YXRjaCgpPC9jb2RlPiBmdW5jdGlvbiBpbiB0aGUgPGNvZGU+QHdvcmRwcmVzcy9pbnRlcmFjdGl2aXR5PC9jb2RlPiBwYWNrYWdlLiBJdCBzdWJzY3JpYmVzIHRvIGNoYW5nZXMgaW4gYW55IHJlYWN0aXZlIHZhbHVlIGFjY2Vzc2VkIGluc2lkZSBhIGNhbGxiYWNrLCByZS1ydW5uaW5nIHRoZSBjYWxsYmFjayB3aGVuZXZlciB0aG9zZSB2YWx1ZXMgY2hhbmdlLjwvcD53JDY3NzliNjZiLTdkOGMtNDc3OC1hOTFhLTFjODI1MzIyNmM1YneQAzxwPkN1cnJlbnRseSwgdGhlIEludGVyYWN0aXZpdHkgQVBJIHByb3ZpZGVzIDxjb2RlPmRhdGEtd3Atd2F0Y2g8L2NvZGU+IGFzIGEgZGlyZWN0aXZlIHRpZWQgdG8gYSBET00gZWxlbWVudCdzIGxpZmVjeWNsZSBmb3IgcmVhY3RpbmcgdG8gc3RhdGUgY2hhbmdlcy4gSG93ZXZlciwgdGhlcmUgaXMgbm8gcHJvZ3JhbW1hdGljIEFQSSB0byBvYnNlcnZlIHRob3NlIGNoYW5nZXMgaW5kZXBlbmRlbnRseSBvZiB0aGUgRE9NLCBmb3IgZXhhbXBsZSwgdG8gcnVuIHNpZGUgZWZmZWN0cyBhdCB0aGUgc3RvcmUgbGV2ZWwsIHNldCB1cCBsb2dnaW5nLCBvciBzeW5jaHJvbml6ZSBzdGF0ZSBiZXR3ZWVuIHN0b3Jlcy4gVGhlIDxjb2RlPndhdGNoKCk8L2NvZGU+IGZ1bmN0aW9uIGZpbGxzIHRoaXMgZ2FwLjwvcD53JDcyOTgxOWYwLTg3NWMtNDdhYS1hNjlhLTJmYzc5OWY1MTgzZXfMAjxwcmUgY2xhc3M9IndwLWJsb2NrLXN5bnRheGhpZ2hsaWdodGVyLWNvZGUiPmltcG9ydCB7IHN0b3JlLCB3YXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvaW50ZXJhY3Rpdml0eSc7Cgpjb25zdCB7IHN0YXRlIH0gPSBzdG9yZSggJ215UGx1Z2luJywgewogICAgc3RhdGU6IHsKICAgICAgICBjb3VudGVyOiAwLAogICAgfSwKfSApOwoKLy8gUnVucyBpbW1lZGlhdGVseSBhbmQgcmUtcnVucyB3aGVuZXZlciBgc3RhdGUuY291bnRlcmAgY2hhbmdlcy4Kd2F0Y2goICgpID0mZ3Q7IHsKICAgIGNvbnNvbGUubG9nKCAnQ291bnRlciBpcyAnICsgc3RhdGUuY291bnRlciApOwp9ICk7PC9wcmU+dyRkYzAyNWQ1My1jNjk3LTQwNzktYjQ2MS02MjU3Y2FlNzBhZmV3VDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIDxjb2RlPnVud2F0Y2g8L2NvZGU+IGNhbGxiYWNrIHRoYXQgc3RvcHMgdGhlIHdhdGNoZXI6PC9wPnckZjU2NDY3MWEtYjVkZS00NjIxLWI1NzUtYTUyN2VlZTI2ZDY2d7MBPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+Y29uc3QgdW53YXRjaCA9IHdhdGNoKCAoKSA9Jmd0OyB7CiAgICBjb25zb2xlLmxvZyggJ0NvdW50ZXIgaXMgJyArIHN0YXRlLmNvdW50ZXIgKTsKfSApOwoKLy8gTGF0ZXIsIHRvIHN0b3Agd2F0Y2hpbmc6CnVud2F0Y2goKTs8L3ByZT53JGM3MGU1OWM3LWE5ZTMtNGI1NS1iMzFhLTJlY2JmNTRkZDdiYXeiATxwPlRoZSBjYWxsYmFjayBjYW4gYWxzbyByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLiBUaGlzIGNsZWFudXAgcnVucyBiZWZvcmUgZWFjaCByZS1leGVjdXRpb24gYW5kIHdoZW4gdGhlIHdhdGNoZXIgaXMgZGlzcG9zZWQgb2YgdmlhIDxjb2RlPnVud2F0Y2goKTwvY29kZT46PC9wPnckY2M0NzhjNWItYTExYy00MTc4LTg5NzAtOWNiYTllMzlkZGY1d5ACPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+Y29uc3QgdW53YXRjaCA9IHdhdGNoKCAoKSA9Jmd0OyB7CiAgICBjb25zdCBoYW5kbGVyID0gKCkgPSZndDsgeyAvKiAuLi4gKi8gfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGhhbmRsZXIgKTsKCiAgICByZXR1cm4gKCkgPSZndDsgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjbGljaycsIGhhbmRsZXIgKTsKICAgIH07Cn0gKTs8L3ByZT53JDhmYzFkOTRkLTlhZGYtNDBlYy04NDJmLTcwYjdiOGViYjc1MHdjPHA+U2VlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3MvZ3V0ZW5iZXJnL3B1bGwvNzU1NjMiPiM3NTU2MzwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+dyQ1ZWE0MDA5ZS1mYTUzLTQwNjYtODg4MC1iOTJmYWYzZWJmNjV3NDxwPlByb3BzIHRvIEBsdWlzaGVycmFueiBmb3IgdGhlIGltcGxlbWVudGF0aW9uLjwvcD53JDg3N2ViZDc0LTcyMWMtNDAxMi05OTczLThkNWY5YTY0NWFjNHdxPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5EZXByZWNhdGVkIDxjb2RlPnN0YXRlLm5hdmlnYXRpb248L2NvZGU+IHByb3BlcnRpZXMgaW4gPGNvZGU+Y29yZS9yb3V0ZXI8L2NvZGU+PC9oMz53JGVhOTkyNzM5LTgyYjAtNGU2ZC05NzM3LTNiYzdjNzRlZTg1MHeTAjxwPlRoZSA8Y29kZT5zdGF0ZS5uYXZpZ2F0aW9uLmhhc1N0YXJ0ZWQ8L2NvZGU+IGFuZCA8Y29kZT5zdGF0ZS5uYXZpZ2F0aW9uLmhhc0ZpbmlzaGVkPC9jb2RlPiBwcm9wZXJ0aWVzIGluIHRoZSA8Y29kZT5jb3JlL3JvdXRlcjwvY29kZT4gc3RvcmUgd2VyZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHVzZWQgZm9yIHRoZSBsb2FkaW5nIGJhciBhbmltYXRpb24uIFRoZXNlIHdlcmUgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSS48L3A+dyQ2MmY0ZmU3ZC02NzBhLTQ1MTUtYWEzZi00NWNiYmQ3MTNhNjl37gI8cD5TdGFydGluZyBpbiBXb3JkUHJlc3MgNy4wLCBhY2Nlc3NpbmcgPGNvZGU+c3RhdGUubmF2aWdhdGlvbjwvY29kZT4gZnJvbSB0aGUgPGNvZGU+Y29yZS9yb3V0ZXI8L2NvZGU+IHN0b3JlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgdHJpZ2dlciBhIGNvbnNvbGUgd2FybmluZyBpbiBkZXZlbG9wbWVudCBtb2RlICg8Y29kZT5TQ1JJUFRfREVCVUc8L2NvZGU+KS4gRGlyZWN0IGFjY2VzcyB3aWxsIHN0b3Agd29ya2luZyBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFdvcmRQcmVzcy4gQW4gb2ZmaWNpYWwgbWVjaGFuaXNtIGZvciB0cmFja2luZyBuYXZpZ2F0aW9uIHN0YXRlIHdpbGwgYmUgaW50cm9kdWNlZCBpbiBXb3JkUHJlc3MgNy4xLjwvcD53JGM5YjFiMTMzLTQ0ZTUtNDE1MS1hZWI2LWE0MzAwMmQ1NjY5ZXdjPHA+U2VlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3MvZ3V0ZW5iZXJnL3B1bGwvNzA4ODIiPiM3MDg4MjwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+dyRhNzlkODM4Ny0wYjU0LTRhNzgtOWE3Yy0xMzViZDg3M2Y2MGF3MzxwPlByb3BzIHRvIEB5YXNoamF3YWxlIGZvciB0aGUgaW1wbGVtZW50YXRpb24uPC9wPnckOWQ2ZGIxYjktY2U0ZC00Y2RmLTkyYjYtYWJmOWU1NGM5NDY1d3U8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPjxjb2RlPnN0YXRlLnVybDwvY29kZT4gZnJvbSA8Y29kZT5jb3JlL3JvdXRlcjwvY29kZT4gaXMgbm93IHBvcHVsYXRlZCBvbiB0aGUgc2VydmVyPC9oMz53JDNiMGU0MDUyLTc4YWEtNDU3Yi05NzkyLTVkOGU5OWE0NzgzMXfeAzxwPlByZXZpb3VzbHksIDxjb2RlPnN0YXRlLnVybDwvY29kZT4gaW4gdGhlIDxjb2RlPmNvcmUvcm91dGVyPC9jb2RlPiBzdG9yZSB3YXMgaW5pdGlhbGl6ZWQgb24gdGhlIGNsaWVudCBieSBzZXR0aW5nIGl0IHRvIDxjb2RlPndpbmRvdy5sb2NhdGlvbi5ocmVmPC9jb2RlPi4gVGhpcyBtZWFudCB0aGUgdmFsdWUgd2FzIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gdW50aWwgdGhlIDxjb2RlPkB3b3JkcHJlc3MvaW50ZXJhY3Rpdml0eS1yb3V0ZXI8L2NvZGU+IG1vZHVsZSBmaW5pc2hlZCBsb2FkaW5nIGFzeW5jaHJvbm91c2x5LCByZXF1aXJpbmcgZGV2ZWxvcGVycyB0byBndWFyZCBhZ2FpbnN0IHRoYXQgaW5pdGlhbCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHN0YXRlIGFuZCBmaWx0ZXIgb3V0IHRoZSBzdWJzZXF1ZW50IGluaXRpYWxpemF0aW9uIHRvIGF2b2lkIHJlYWN0aW5nIHRvIGl0IGFzIGFuIGFjdHVhbCBuYXZpZ2F0aW9uLjwvcD53JGY5NzdkYTcyLTU3YWQtNGJjYS1hMzU1LTYyMGExM2VmNzQ1Nne0ATxwPlN0YXJ0aW5nIGluIFdvcmRQcmVzcyA3LjAsIHRoaXMgdmFsdWUgaXMgcG9wdWxhdGVkIG9uIHRoZSBzZXJ2ZXIgZHVyaW5nIGRpcmVjdGl2ZSBwcm9jZXNzaW5nLCBtZWFuaW5nIGl0cyB2YWx1ZSBkb2Vzbid0IGNoYW5nZSB1bnRpbCB0aGUgZmlyc3QgY2xpZW50LXNpZGUgbmF2aWdhdGlvbiBvY2N1cnMuPC9wPnckMGQ3YWZlNzYtNzc3NS00NWI1LWI1ZGUtYmI4YmRjMTNmZDkyd70BPHA+VGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIDxjb2RlPndhdGNoKCk8L2NvZGU+IGFuZCA8Y29kZT5zdGF0ZS51cmw8L2NvZGU+IHRvIHJlbGlhYmx5IHRyYWNrIGNsaWVudC1zaWRlIG5hdmlnYXRpb25zLCBmb3IgZXhhbXBsZSwgdG8gc2VuZCBhbmFseXRpY3Mgb24gZWFjaCB2aXJ0dWFsIHBhZ2Ugdmlldzo8L3A+dyRmZGY3Y2M0Mi1jOTd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\",\"updateId\":656112142}","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":[4424,5860],"tags":[5676,1443,5834,4789],"class_list":["post-121600","post","type-post","status-publish","format-standard","hentry","category-core","category-field-guide-7-0","tag-7-0","tag-dev-notes","tag-dev-notes-7-0","tag-interactivity-api","mentions-luisherranz","mentions-yashjawale","author-luisherranz"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2AvED-vDi","_links":{"self":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121600","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\/14623809"}],"replies":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/comments?post=121600"}],"version-history":[{"count":6,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121600\/revisions"}],"predecessor-version":[{"id":122065,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121600\/revisions\/122065"}],"wp:attachment":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/media?parent=121600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/categories?post=121600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/tags?post=121600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}