{"id":6083,"date":"2026-07-06T05:34:10","date_gmt":"2026-07-06T05:34:10","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-7-test-2-listening\/"},"modified":"2026-07-12T03:25:14","modified_gmt":"2026-07-12T03:25:14","slug":"celpip-set-7-test-2-listening","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-7-test-2-listening\/","title":{"rendered":"CELPIP Set 7 \u00b7 Practice Test 2 \u2014 Listening"},"content":{"rendered":"<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<div class=\"clp-wrap\" id=\"clpApp\" data-variant=\"A\">\n<p>  <!-- ============ 1. HERO ============ --><\/p>\n<section class=\"clp-hero\" data-screen-label=\"Hero\">\n<div class=\"clp-aurora\"><span><\/span><span><\/span><span><\/span><\/div>\n<div class=\"clp-hero-shimmer\"><\/div>\n<div class=\"clp-hero-badges\">\n      <span class=\"clp-badge-brand\">CELPIP<\/span><br \/>\n      <span class=\"clp-badge-set\">Set 7 &#183; Practice Test 2<\/span>\n    <\/div>\n<h1>CELPIP Listening Practice Test<\/h1>\n<div class=\"clp-hero-chips\">\n      <span class=\"clp-chip\">6 parts<\/span><br \/>\n      <span class=\"clp-chip\">38 questions<\/span><br \/>\n      <span class=\"clp-chip\">~47 minutes<\/span><br \/>\n      <span class=\"clp-chip\">Everything plays once<\/span>\n    <\/div>\n<p>    <button class=\"clp-cta\" id=\"clpStart\">Start test<\/button><br \/>\n  <\/section>\n<p>  <!-- ============ Sticky practice toolbar ============ --><\/p>\n<div class=\"clp-toolbar\" id=\"clpToolbar\" hidden data-screen-label=\"Toolbar\">\n    <span class=\"clp-score-chip\" id=\"clpScoreChip\">Answered 0\/38<\/span><br \/>\n    <span class=\"clp-toolbar-spacer\"><\/span><br \/>\n    <button class=\"clp-tbtn\" id=\"clpTimerToggle\">Timer: on<\/button><br \/>\n    <button class=\"clp-tbtn clp-tbtn-check\" id=\"clpCheck\">Check answers<\/button><br \/>\n    <button class=\"clp-tbtn\" id=\"clpReset\">Reset<\/button>\n  <\/div>\n<p>  <!-- ============ 2. CAT SIMULATOR ============ --><\/p>\n<section class=\"clp-sim\" id=\"clpSim\" data-screen-label=\"CAT Simulator\">\n<div class=\"clp-dots\" id=\"clpDots\"><\/div>\n<div class=\"clp-cat\" id=\"clpCat\"><\/div>\n<\/section>\n<p>  <!-- ============ 3. RESULTS ============ --><\/p>\n<section class=\"clp-results\" id=\"clpResults\" hidden data-screen-label=\"Results\"><\/section>\n<\/div>\n<p><script>eval(atob('dmFyIENMUF9BVURJTz17IjAuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wMXMxLTEubXAzIiwiMC4xIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3AxczItMS5tcDMiLCIwLjIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvcDFzMy0xLm1wMyIsIjEuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wMi0xLm1wMyIsIjIuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wMy0xLm1wMyIsIjMuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wNC0xLm1wMyIsIjQuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wNS0xLm1wNCIsIjUuMCI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9wNi0xLm1wMyJ9O3ZhciBDTFBfQVVESU9fVklERU89eyI0LjAiOjF9OwoKKGZ1bmN0aW9uKCl7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnRleHRDb250ZW50PSJcbi8qID09PT09PT09PT09PSBDRUxQSVAgTGlzdGVuaW5nIFByYWN0aWNlIFx1MjAxNCBzY29wZWQsIFdvcmRQcmVzcy1zYWZlID09PT09PT09PT09PSAqL1xuLmNscC13cmFwe1xuICAvKiBWQVJJQU5UX0NIUk9NRV9TVEFSVCAqL1xuICAtLWJhci1iZzojRThFQkVGO1xuICAtLWJhci1ib3JkZXI6I0QzRDlFMDtcbiAgLS1iYXItdGV4dDojMUYyOTM3O1xuICAtLXBhbmVsLW1lZGlhLWJnOiNGNEY1Rjc7XG4gIC0tcGFuZWwtbWVkaWEtYm9yZGVyOiNFM0U2RUE7XG4gIC0tbWVkaWEtY2FyZC1iZzojRUNFRUYxO1xuICAtLW1lZGlhLWNhcmQtYm9yZGVyOiNEOERERTM7XG4gIC0tcGFuZWwtcS1iZzojRTlGNEY3O1xuICAtLXBhbmVsLXEtYm9yZGVyOiNENkU4RUQ7XG4gIC0tZGQtb3Blbi1iZzojQ0JFQkY0O1xuICAvKiBWQVJJQU5UX0NIUk9NRV9FTkQgKi9cbiAgLS1uYXZ5OiMwNTBFMjA7IC0tZGFyazojMEExNjI4OyAtLWI5MDA6IzBEMjM1MjsgLS1iNzAwOiMxMjQ1QTg7IC0tYjUwMDojMjU2M0VCO1xuICAtLWI0MDA6IzNCODJGNjsgLS1iMjAwOiM5M0M1RkQ7IC0tYjEwMDojREJFQUZFOyAtLWI1MDojRUZGNkZGO1xuICAtLXRlYWw6IzBEOTQ4ODsgLS1jeWFuOiMwNkI2RDQ7IC0tZ3JlZW46IzEwQjk4MTsgLS1ncmVlbjUwOiNFQ0ZERjU7XG4gIC0tcm9zZTojRjQzRjVFOyAtLW9yYW5nZTojRjk3MzE2O1xuICAtLXRleHQ6IzBGMTcyQTsgLS1tdXRlZDojNDc1NTY5OyAtLXN1YnRsZTojOTRBM0I4OyAtLWJvcmRlcjojRTJFOEYwO1xuICAtLWNyaW1zb246I0I0MkIzQzsgLS13aGl0ZTojRkZGRkZGOyAtLXBhZ2U6I0Y4RkFGRjtcbiAgZm9udC1mYW1pbHk6J1BsdXMgSmFrYXJ0YSBTYW5zJyxzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxzYW5zLXNlcmlmO1xuICBjb2xvcjp2YXIoLS10ZXh0KTtcbiAgbWF4LXdpZHRoOjExNDBweDsgbWFyZ2luOjAgYXV0bzsgcGFkZGluZzoxNnB4IDE2cHggNDhweDtcbiAgbGluZS1oZWlnaHQ6MS41OyBmb250LXNpemU6MTZweDtcbn1cbi5jbHAtd3JhcCAqLCAuY2xwLXdyYXAgKjo6YmVmb3JlLCAuY2xwLXdyYXAgKjo6YWZ0ZXJ7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgfVxuLmNscC13cmFwIGJ1dHRvbnsgZm9udC1mYW1pbHk6aW5oZXJpdDsgY3Vyc29yOnBvaW50ZXI7IH1cbi5jbHAtd3JhcCBoMSwuY2xwLXdyYXAgaDIsLmNscC13cmFwIGgzLC5jbHAtd3JhcCBweyBtYXJnaW46MDsgfVxuXG4vKiA9PT09PT09PT09PT0gSEVSTyA9PT09PT09PT09PT0gKi9cbi5jbHAtaGVyb3tcbiAgcG9zaXRpb246cmVsYXRpdmU7IG92ZXJmbG93OmhpZGRlbjsgYm9yZGVyLXJhZGl1czoyMnB4O1xuICBiYWNrZ3JvdW5kOnZhcigtLW5hdnkpOyBjb2xvcjojZmZmO1xuICBwYWRkaW5nOjM2cHggNDBweDtcbiAgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDoxNHB4OyBhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O1xuICBib3gtc2hhZG93OjAgMjBweCA0MHB4IC0yMHB4IHJnYmEoNSwxNCwzMiwuNDUpLCAwIDRweCAxMnB4IC02cHggcmdiYSg1LDE0LDMyLC4zKTtcbn1cbi5jbHAtYXVyb3JheyBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6MDsgcG9pbnRlci1ldmVudHM6bm9uZTsgfVxuLmNscC1hdXJvcmEgc3BhbntcbiAgcG9zaXRpb246YWJzb2x1dGU7IGJvcmRlci1yYWRpdXM6NTAlOyBmaWx0ZXI6Ymx1cig2MHB4KTsgb3BhY2l0eTouNTtcbiAgYW5pbWF0aW9uOmNscEZsb2F0IDE0cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG59XG4uY2xwLWF1cm9yYSBzcGFuOm50aC1jaGlsZCgxKXsgd2lkdGg6NDIwcHg7IGhlaWdodDo0MjBweDsgbGVmdDotMTIwcHg7IHRvcDotMjAwcHg7IGJhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMTI0NUE4IDAlLHRyYW5zcGFyZW50IDcwJSk7IH1cbi5jbHAtYXVyb3JhIHNwYW46bnRoLWNoaWxkKDIpeyB3aWR0aDozODBweDsgaGVpZ2h0OjM4MHB4OyByaWdodDotODBweDsgdG9wOi0xNjBweDsgYmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMwRDk0ODggMCUsdHJhbnNwYXJlbnQgNzAlKTsgYW5pbWF0aW9uLWRlbGF5Oi00czsgfVxuLmNscC1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMyl7IHdpZHRoOjM0MHB4OyBoZWlnaHQ6MzQwcHg7IHJpZ2h0OjIyJTsgYm90dG9tOi0yNDBweDsgYmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMyNTYzRUIgMCUsdHJhbnNwYXJlbnQgNzAlKTsgYW5pbWF0aW9uLWRlbGF5Oi04czsgfVxuQGtleWZyYW1lcyBjbHBGbG9hdHtcbiAgZnJvbXsgdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKTsgfVxuICB0b3sgdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDQwcHgsMjZweCwwKSBzY2FsZSgxLjEyKTsgfVxufVxuLmNscC1oZXJvLXNoaW1tZXJ7XG4gIHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyBwb2ludGVyLWV2ZW50czpub25lO1xuICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMTVkZWcsIHRyYW5zcGFyZW50IDMwJSwgcmdiYSgxNDcsMTk3LDI1MywuMTApIDQ1JSwgcmdiYSg2LDE4MiwyMTIsLjEyKSA1MCUsIHRyYW5zcGFyZW50IDY1JSk7XG4gIGJhY2tncm91bmQtc2l6ZToyNTAlIDEwMCU7XG4gIGFuaW1hdGlvbjpjbHBTaGltbWVyIDdzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuQGtleWZyYW1lcyBjbHBTaGltbWVyeyAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEyMCUgMDt9IDU1JXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MCUgMDt9IDEwMCV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDAlIDA7fSB9XG4uY2xwLWhlcm8tYmFkZ2VzeyBkaXNwbGF5OmZsZXg7IGdhcDoxMHB4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGZsZXgtd3JhcDp3cmFwOyBwb3NpdGlvbjpyZWxhdGl2ZTsgfVxuLmNscC1iYWRnZS1icmFuZHtcbiAgYmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTsgY29sb3I6I2ZmZjsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MTJweDtcbiAgbGV0dGVyLXNwYWNpbmc6LjEyZW07IHBhZGRpbmc6NXB4IDEycHg7IGJvcmRlci1yYWRpdXM6NnB4O1xufVxuLmNscC1iYWRnZS1zZXR7IGNvbG9yOnZhcigtLWIyMDApOyBmb250LXNpemU6MTNweDsgZm9udC13ZWlnaHQ6NjAwOyB9XG4uY2xwLWhlcm8gaDF7IHBvc2l0aW9uOnJlbGF0aXZlOyBmb250LXNpemU6Y2xhbXAoMjZweCw0dncsNDBweCk7IGZvbnQtd2VpZ2h0OjgwMDsgbGV0dGVyLXNwYWNpbmc6LS4wMmVtOyBsaW5lLWhlaWdodDoxLjEyOyB9XG4uY2xwLWhlcm8tY2hpcHN7IGRpc3BsYXk6ZmxleDsgZ2FwOjhweDsgZmxleC13cmFwOndyYXA7IHBvc2l0aW9uOnJlbGF0aXZlOyB9XG4uY2xwLWNoaXB7XG4gIGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDkpOyBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTQ3LDE5NywyNTMsLjI1KTtcbiAgY29sb3I6I0RCRUFGRTsgZm9udC1zaXplOjEzcHg7IGZvbnQtd2VpZ2h0OjYwMDsgcGFkZGluZzo2cHggMTRweDsgYm9yZGVyLXJhZGl1czozMnB4O1xuICBiYWNrZHJvcC1maWx0ZXI6Ymx1cig0cHgpOyB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGVhc2UsIGJhY2tncm91bmQgLjI1cyBlYXNlO1xufVxuLmNscC1jaGlwOmhvdmVyeyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNSk7IH1cbi5jbHAtY3Rhe1xuICBwb3NpdGlvbjpyZWxhdGl2ZTsgYmFja2dyb3VuZDp2YXIoLS1iNTAwKTsgY29sb3I6I2ZmZjsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MTBweDtcbiAgZm9udC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjcwMDsgcGFkZGluZzoxM3B4IDM0cHg7IG1hcmdpbi10b3A6MnB4O1xuICBib3gtc2hhZG93OjAgMTBweCAyMnB4IC04cHggcmdiYSgzNyw5OSwyMzUsLjY1KTtcbiAgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjIycyBlYXNlLCBib3gtc2hhZG93IC4yMnMgZWFzZSwgYmFja2dyb3VuZCAuMjJzIGVhc2U7XG59XG4uY2xwLWN0YTpob3ZlcnsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7IGJhY2tncm91bmQ6dmFyKC0tYjQwMCk7IGJveC1zaGFkb3c6MCAxNHB4IDI2cHggLThweCByZ2JhKDM3LDk5LDIzNSwuNzUpOyB9XG5cbi8qID09PT09PT09PT09PSBTVElDS1kgVE9PTEJBUiA9PT09PT09PT09PT0gKi9cbi5jbHAtdG9vbGJhcltoaWRkZW5deyBkaXNwbGF5Om5vbmU7IH1cbi5jbHAtdG9vbGJhcntcbiAgcG9zaXRpb246c3RpY2t5OyB0b3A6OHB4OyB6LWluZGV4OjYwO1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEwcHg7IGZsZXgtd3JhcDp3cmFwO1xuICBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjkyKTsgYmFja2Ryb3AtZmlsdGVyOmJsdXIoOHB4KTtcbiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOjE2cHg7XG4gIHBhZGRpbmc6OHB4IDEycHg7IG1hcmdpbjoxOHB4IDAgMDtcbiAgYm94LXNoYWRvdzowIDhweCAyNHB4IC0xNHB4IHJnYmEoMTUsMjMsNDIsLjI1KSwgMCAycHggNnB4IC00cHggcmdiYSgxNSwyMyw0MiwuMTIpO1xuICBtaW4taGVpZ2h0OjUycHg7XG59XG4uY2xwLXNjb3JlLWNoaXB7XG4gIGZvbnQtd2VpZ2h0OjgwMDsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigtLWI5MDApO1xuICBiYWNrZ3JvdW5kOnZhcigtLWI1MCk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7IGJvcmRlci1yYWRpdXM6MzJweDsgcGFkZGluZzo3cHggMTZweDtcbn1cbi5jbHAtdGJ0bntcbiAgYm9yZGVyLXJhZGl1czoxMHB4OyBmb250LXNpemU6MTNweDsgZm9udC13ZWlnaHQ6NzAwOyBwYWRkaW5nOjlweCAxNnB4O1xuICBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJhY2tncm91bmQ6I2ZmZjsgY29sb3I6dmFyKC0tbXV0ZWQpO1xuICBtaW4taGVpZ2h0OjQwcHg7IHRyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLCBib3gtc2hhZG93IC4ycyBlYXNlLCBiYWNrZ3JvdW5kIC4ycyBlYXNlO1xufVxuLmNscC10YnRuOmhvdmVyeyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTsgYm94LXNoYWRvdzowIDZweCAxNHB4IC04cHggcmdiYSgxNSwyMyw0MiwuMyk7IH1cbi5jbHAtdGJ0bi1jaGVja3sgYmFja2dyb3VuZDp2YXIoLS1ncmVlbik7IGJvcmRlci1jb2xvcjp2YXIoLS1ncmVlbik7IGNvbG9yOiNmZmY7IH1cbi5jbHAtdGJ0bi1jaGVjazpob3ZlcnsgYmFja2dyb3VuZDojMGNhNjc4OyB9XG4uY2xwLXRidG5bZGlzYWJsZWRdeyBvcGFjaXR5Oi41OyBjdXJzb3I6bm90LWFsbG93ZWQ7IHRyYW5zZm9ybTpub25lOyBib3gtc2hhZG93Om5vbmU7IH1cbi5jbHAtdG9vbGJhci1zcGFjZXJ7IGZsZXg6MTsgfVxuXG4vKiA9PT09PT09PT09PT0gQ0FUIFNJTVVMQVRPUiA9PT09PT09PT09PT0gKi9cbi5jbHAtc2lteyBtYXJnaW4tdG9wOjE4cHg7IH1cbi5jbHAtZG90c3sgZGlzcGxheTpmbGV4OyBnYXA6NnB4OyBtYXJnaW46MCAwIDEwcHggMnB4OyB9XG4uY2xwLWRvdHtcbiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBiYWNrZ3JvdW5kOiNmZmY7IGNvbG9yOnZhcigtLXN1YnRsZSk7XG4gIGZvbnQtc2l6ZToxMXB4OyBmb250LXdlaWdodDo3MDA7IGJvcmRlci1yYWRpdXM6MzJweDsgcGFkZGluZzo0cHggMTBweDtcbiAgdHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXMgZWFzZSwgY29sb3IgLjI1cyBlYXNlO1xufVxuLmNscC1kb3QuY2xwLWRvbmV7IGJhY2tncm91bmQ6dmFyKC0tYjEwMCk7IGJvcmRlci1jb2xvcjp2YXIoLS1iMjAwKTsgY29sb3I6dmFyKC0tYjkwMCk7IH1cbi5jbHAtZG90LmNscC1jdXJ7IGJhY2tncm91bmQ6dmFyKC0tYjUwMCk7IGJvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTsgY29sb3I6I2ZmZjsgfVxuLmNscC1kb3QuY2xwLWNsaWNrYWJsZXsgY3Vyc29yOnBvaW50ZXI7IH1cbi5jbHAtZG90Om5vdCguY2xwLWNsaWNrYWJsZSl7IGN1cnNvcjpkZWZhdWx0OyB9XG5cbi5jbHAtY2F0e1xuICBwb3NpdGlvbjpyZWxhdGl2ZTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1iYXItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBvdmVyZmxvdzp2aXNpYmxlO1xuICBiYWNrZ3JvdW5kOiNmZmY7XG4gIGJveC1zaGFkb3c6MCAxMHB4IDMwcHggLTE4cHggcmdiYSgxNSwyMyw0MiwuMjIpLCAwIDJweCA4cHggLTVweCByZ2JhKDE1LDIzLDQyLC4xKTtcbn1cbi5jbHAtYmFye1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7XG4gIGJhY2tncm91bmQ6dmFyKC0tYmFyLWJnKTsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYmFyLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6MTBweCAxMHB4IDAgMDtcbiAgcGFkZGluZzo5cHggMTJweDsgbWluLWhlaWdodDo0NHB4O1xufVxuLmNscC1iYXItdGl0bGV7IGZvbnQtc2l6ZToxM3B4OyBmb250LXdlaWdodDo2MDA7IGNvbG9yOnZhcigtLWJhci10ZXh0KTsgZmxleDoxOyBtaW4td2lkdGg6MDsgfVxuLmNscC1iYXItdGltZXJ7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1iYXItdGV4dCk7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfVxuLmNscC1iYXItdGltZXIgYnsgZm9udC13ZWlnaHQ6ODAwOyB9XG4uY2xwLW5leHR7XG4gIGJhY2tncm91bmQ6dmFyKC0tYjcwMCk7IGNvbG9yOiNmZmY7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjRweDtcbiAgZm9udC1zaXplOjExcHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjA4ZW07IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtcbiAgcGFkZGluZzo3cHggMTZweDsgbWluLWhlaWdodDozMHB4O1xuICB0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzIGVhc2UsIHRyYW5zZm9ybSAuMnMgZWFzZTtcbn1cbi5jbHAtbmV4dDpob3ZlcnsgYmFja2dyb3VuZDp2YXIoLS1iOTAwKTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7IH1cbi5jbHAtc2NyZWVueyBib3JkZXItcmFkaXVzOjAgMCAxMHB4IDEwcHg7IG92ZXJmbG93OmhpZGRlbjsgfVxuXG4uY2xwLWluc3Rye1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IGdhcDo5cHg7XG4gIHBhZGRpbmc6MTRweCAxNnB4IDEycHg7IGJhY2tncm91bmQ6I2ZmZjtcbn1cbi5jbHAtaW5mb3tcbiAgZmxleDpub25lOyB3aWR0aDoxOHB4OyBoZWlnaHQ6MThweDsgbWFyZ2luLXRvcDoycHg7IGJvcmRlci1yYWRpdXM6NTAlO1xuICBiYWNrZ3JvdW5kOnZhcigtLWI1MDApOyBjb2xvcjojZmZmOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxMXB4OyBmb250LXN0eWxlOml0YWxpYztcbiAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBmb250LWZhbWlseTpHZW9yZ2lhLHNlcmlmO1xufVxuLmNscC1pbnN0ciBweyBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS1iOTAwKTsgfVxuXG4vKiBpbnRybyBzY3JlZW4gKi9cbi5jbHAtaW50cm8tYm9keXsgcGFkZGluZzo2cHggMjBweCAyNnB4IDQ0cHg7IGJhY2tncm91bmQ6I2ZmZjsgfVxuLmNscC1pbnRyby1ib2R5IGgzeyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6ODAwOyBjb2xvcjp2YXIoLS10ZXh0KTsgbWFyZ2luLWJvdHRvbToxMnB4OyB9XG4uY2xwLWJ1bGxldHN7IGxpc3Qtc3R5bGU6bm9uZTsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDoxMHB4OyBtYXgtd2lkdGg6NjQwcHg7IH1cbi5jbHAtYnVsbGV0cyBsaXtcbiAgZGlzcGxheTpmbGV4OyBnYXA6MTBweDsgZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tYjkwMCk7XG4gIHBhZGRpbmctYm90dG9tOjEwcHg7IGJvcmRlci1ib3R0b206MXB4IGRvdHRlZCB2YXIoLS1ib3JkZXIpO1xufVxuLmNscC1idWxsZXRzIGxpOjpiZWZvcmV7IGNvbnRlbnQ6XCJcIjsgZmxleDpub25lOyB3aWR0aDo4cHg7IGhlaWdodDo4cHg7IGJvcmRlci1yYWRpdXM6NTAlOyBiYWNrZ3JvdW5kOnZhcigtLWI0MDApOyBtYXJnaW4tdG9wOjZweDsgfVxuXG4vKiBtZWRpYSBzY3JlZW4gKi9cbi5jbHAtbWVkaWEtcGFuZWx7XG4gIGJhY2tncm91bmQ6dmFyKC0tcGFuZWwtbWVkaWEtYmcpOyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1wYW5lbC1tZWRpYS1ib3JkZXIpO1xuICBwYWRkaW5nOjM0cHggMjBweCAyNnB4OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTRweDtcbn1cbi5jbHAtbWVkaWEtY2FyZHtcbiAgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjUyMHB4O1xuICBiYWNrZ3JvdW5kOnZhcigtLW1lZGlhLWNhcmQtYmcpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1lZGlhLWNhcmQtYm9yZGVyKTsgYm9yZGVyLXJhZGl1czoxMHB4O1xuICBwYWRkaW5nOjIycHggMjZweDtcbn1cbi5jbHAtbWVkaWEtY2FyZC5jbHAtaXMtdmlkZW97IG1heC13aWR0aDo2NjBweDsgcGFkZGluZzoxMnB4OyB9XG4uY2xwLW1lZGlhLXpvbmV7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MThweDsgfVxuLmNscC1pcy12aWRlbyAuY2xwLW1lZGlhLXpvbmV7XG4gIGFzcGVjdC1yYXRpbzoxNi85OyB3aWR0aDoxMDAlOyBib3JkZXItcmFkaXVzOjZweDsgYmFja2dyb3VuZDp2YXIoLS1kYXJrKTtcbiAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTJweDtcbiAgY29sb3I6I2ZmZjtcbn1cbi5jbHAtc3BlYWtlcntcbiAgZmxleDpub25lOyB3aWR0aDo1NnB4OyBoZWlnaHQ6NTZweDsgYm9yZGVyLXJhZGl1czo4cHg7IGJhY2tncm91bmQ6I2ZmZjtcbiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1tZWRpYS1jYXJkLWJvcmRlcik7XG4gIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBjb2xvcjp2YXIoLS1tdXRlZCk7XG59XG4uY2xwLWlzLXZpZGVvIC5jbHAtc3BlYWtlcnsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7IGJvcmRlcjpub25lOyBjb2xvcjojZmZmOyB3aWR0aDo2NHB4OyBoZWlnaHQ6NjRweDsgYm9yZGVyLXJhZGl1czo1MCU7IH1cbi5jbHAtbWVkaWEtbWFpbnsgZmxleDoxOyBtaW4td2lkdGg6MDsgfVxuLmNscC1pcy12aWRlbyAuY2xwLW1lZGlhLW1haW57IHBhZGRpbmc6MCAxMHB4IDRweDsgfVxuLmNscC1tZWRpYS1sYWJlbHsgdGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo2MDA7IGNvbG9yOnZhcigtLXRleHQpOyBtYXJnaW4tYm90dG9tOjEwcHg7IH1cbi5jbHAtcHJvZ3Jlc3N7IGhlaWdodDo4cHg7IGJvcmRlci1yYWRpdXM6NnB4OyBiYWNrZ3JvdW5kOiNmZmY7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tbWVkaWEtY2FyZC1ib3JkZXIpOyBvdmVyZmxvdzpoaWRkZW47IH1cbi5jbHAtaXMtdmlkZW8gLmNscC1wcm9ncmVzc3sgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC42KTsgfVxuLmNscC1wcm9ncmVzcy1maWxseyBoZWlnaHQ6MTAwJTsgd2lkdGg6MCU7IGJhY2tncm91bmQ6dmFyKC0tY3lhbik7IGJvcmRlci1yYWRpdXM6NnB4OyB0cmFuc2l0aW9uOndpZHRoIC4zcyBsaW5lYXI7IH1cbi5jbHAtbWVkaWEtbWV0YXtcbiAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4OyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo2MDA7XG59XG4uY2xwLW1lZGlhLW1ldGEgc3ZneyBkaXNwbGF5OmJsb2NrOyB9XG4uY2xwLW9uY2Utbm90ZXsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLXN1YnRsZSk7IGZvbnQtd2VpZ2h0OjYwMDsgfVxuXG4vKiBxdWVzdGlvbiBzY3JlZW4gKi9cbi5jbHAtcS1wYW5lbHtcbiAgYmFja2dyb3VuZDp2YXIoLS1wYW5lbC1xLWJnKTsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tcGFuZWwtcS1ib3JkZXIpO1xuICBwYWRkaW5nOjIwcHggMjJweCAzMHB4OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjIwcHg7XG59XG4uY2xwLXF7IGZvbnQtc2l6ZToxNS41cHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dCk7IGxpbmUtaGVpZ2h0OjI7IH1cbi5jbHAtcW51bXsgZm9udC13ZWlnaHQ6NzAwOyB9XG4uY2xwLWRke1xuICBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo4cHg7XG4gIGJvcmRlcjpub25lOyBib3JkZXItYm90dG9tOjJweCBkb3R0ZWQgdmFyKC0tc3VidGxlKTsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDtcbiAgY29sb3I6dmFyKC0tYjcwMCk7IGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo2MDA7XG4gIHBhZGRpbmc6NHB4IDhweCAzcHg7IG1hcmdpbjowIDJweDsgbWluLWhlaWdodDozMnB4OyBtYXgtd2lkdGg6MTAwJTtcbiAgYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDsgdmVydGljYWwtYWxpZ246YmFzZWxpbmU7XG4gIHRyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZTtcbn1cbi5jbHAtZGQ6aG92ZXJ7IGJhY2tncm91bmQ6cmdiYSgzNyw5OSwyMzUsLjA4KTsgfVxuLmNscC1kZC5jbHAtb3BlbnsgYmFja2dyb3VuZDp2YXIoLS1kZC1vcGVuLWJnKTsgfVxuLmNscC1kZCAuY2xwLWRkLXRleHR7XG4gIG92ZXJmbG93OmhpZGRlbjsgdGV4dC1vdmVyZmxvdzplbGxpcHNpczsgd2hpdGUtc3BhY2U6bm93cmFwOyBtYXgtd2lkdGg6NDIwcHg7XG59XG4uY2xwLWRkIC5jbHAtZGQtY2FyZXR7IGZvbnQtc2l6ZTo5cHg7IGNvbG9yOnZhcigtLWI3MDApOyBmbGV4Om5vbmU7IH1cbi5jbHAtZGQuY2xwLXVuYW5zd2VyZWQgLmNscC1kZC10ZXh0eyBsZXR0ZXItc3BhY2luZzoycHg7IGNvbG9yOnZhcigtLXN1YnRsZSk7IH1cbi5jbHAtZGQuY2xwLW1hcmstcmlnaHR7IGJhY2tncm91bmQ6dmFyKC0tZ3JlZW41MCk7IGJvcmRlcjoycHggc29saWQgdmFyKC0tZ3JlZW4pOyBib3JkZXItcmFkaXVzOjZweDsgY29sb3I6IzA0Nzg1NzsgfVxuLmNscC1kZC5jbHAtbWFyay13cm9uZ3sgYmFja2dyb3VuZDojRkZGMUYyOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLXJvc2UpOyBib3JkZXItcmFkaXVzOjZweDsgY29sb3I6I0JFMTIzQzsgfVxuLmNscC1kZFtkaXNhYmxlZF17IGN1cnNvcjpkZWZhdWx0OyB9XG4uY2xwLXJldmVhbHtcbiAgZGlzcGxheTpibG9jazsgZm9udC1zaXplOjEzLjVweDsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjojMDQ3ODU3OyBsaW5lLWhlaWdodDoxLjU7XG4gIG1hcmdpbjoycHggMCAwIDI2cHg7XG59XG4uY2xwLXJldmVhbCBieyBmb250LXdlaWdodDo4MDA7IH1cbi5jbHAtdG9kby10YWd7XG4gIGZvbnQtc2l6ZToxMHB4OyBmb250LXdlaWdodDo4MDA7IGxldHRlci1zcGFjaW5nOi4wOGVtOyBjb2xvcjp2YXIoLS1vcmFuZ2UpO1xuICBib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjsgYm9yZGVyLXJhZGl1czo0cHg7IHBhZGRpbmc6MXB4IDZweDsgbWFyZ2luLWxlZnQ6OHB4OyB2ZXJ0aWNhbC1hbGlnbjoycHg7XG59XG5cbi8qIGRyb3Bkb3duIHBvcHVwICovXG4uY2xwLXBvcHtcbiAgcG9zaXRpb246YWJzb2x1dGU7IHotaW5kZXg6ODA7IHdpZHRoOm1pbigzNDBweCwgY2FsYygxMDB2dyAtIDQ4cHgpKTtcbiAgYmFja2dyb3VuZDojZmZmOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTBweDtcbiAgYm94LXNoYWRvdzowIDE4cHggNDBweCAtMTJweCByZ2JhKDE1LDIzLDQyLC4yOCksIDAgNHB4IDEycHggLTZweCByZ2JhKDE1LDIzLDQyLC4xNCk7XG4gIHBhZGRpbmc6NnB4OyBcbn1cbi5jbHAtb3B0e1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjExcHg7IHdpZHRoOjEwMCU7XG4gIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7IGJvcmRlcjpub25lOyB0ZXh0LWFsaWduOmxlZnQ7XG4gIGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo2MDA7IGNvbG9yOnZhcigtLXRleHQpO1xuICBwYWRkaW5nOjEwcHggMTJweDsgbWluLWhlaWdodDo0MnB4OyBib3JkZXItcmFkaXVzOjZweDtcbiAgYm9yZGVyLWJvdHRvbToxcHggZG90dGVkIHZhcigtLWJvcmRlcik7XG4gIHRyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzIGVhc2U7XG59XG4uY2xwLW9wdDpsYXN0LWNoaWxkeyBib3JkZXItYm90dG9tOm5vbmU7IH1cbi5jbHAtb3B0OmhvdmVyeyBiYWNrZ3JvdW5kOnZhcigtLWI1MCk7IH1cbi5jbHAtcmFkaW97XG4gIGZsZXg6bm9uZTsgd2lkdGg6MTdweDsgaGVpZ2h0OjE3cHg7IGJvcmRlci1yYWRpdXM6NTAlO1xuICBib3JkZXI6MnB4IHNvbGlkIHZhcigtLXN1YnRsZSk7IGJhY2tncm91bmQ6I2ZmZjsgcG9zaXRpb246cmVsYXRpdmU7XG59XG4uY2xwLW9wdC5jbHAtc2VsIC5jbHAtcmFkaW97IGJvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTsgfVxuLmNscC1vcHQuY2xwLXNlbCAuY2xwLXJhZGlvOjphZnRlcntcbiAgY29udGVudDpcIlwiOyBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6Mi41cHg7IGJvcmRlci1yYWRpdXM6NTAlOyBiYWNrZ3JvdW5kOnZhcigtLWI1MDApO1xufVxuXG4vKiBwcmUtc3RhcnQgLyBmaW5pc2ggKi9cbi5jbHAtaWRsZXtcbiAgcGFkZGluZzo1NnB4IDI0cHg7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kOiNmZmY7IGJvcmRlci1yYWRpdXM6MCAwIDEwcHggMTBweDtcbn1cbi5jbHAtaWRsZSBweyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo2MDA7IG1heC13aWR0aDo0ODBweDsgbWFyZ2luOjAgYXV0bzsgfVxuLmNscC1maW5pc2h7IHBhZGRpbmc6NDhweCAyNHB4IDU2cHg7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kOiNmZmY7IH1cbi5jbHAtZmluaXNoIGgzeyBmb250LXNpemU6MjJweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW4tYm90dG9tOjEwcHg7IH1cbi5jbHAtZmluaXNoIHB7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjE1cHg7IGZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLWJvdHRvbToyMnB4OyB9XG4uY2xwLWZpbmlzaC1jaGVja3tcbiAgYmFja2dyb3VuZDp2YXIoLS1ncmVlbik7IGNvbG9yOiNmZmY7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjEwcHg7XG4gIGZvbnQtc2l6ZToxNnB4OyBmb250LXdlaWdodDo3MDA7IHBhZGRpbmc6MTNweCAzMnB4OyBtaW4taGVpZ2h0OjQ0cHg7XG4gIGJveC1zaGFkb3c6MCAxMHB4IDIycHggLThweCByZ2JhKDE2LDE4NSwxMjksLjU1KTtcbiAgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UsIGJhY2tncm91bmQgLjJzIGVhc2U7XG59XG4uY2xwLWZpbmlzaC1jaGVjazpob3ZlcnsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7IGJhY2tncm91bmQ6IzBjYTY3ODsgfVxuXG4vKiA9PT09PT09PT09PT0gUkVTVUxUUyA9PT09PT09PT09PT0gKi9cbi5jbHAtcmVzdWx0c3sgbWFyZ2luLXRvcDozMHB4OyB9XG4uY2xwLXJlc3VsdHMgaDJ7IGZvbnQtc2l6ZToyNHB4OyBmb250LXdlaWdodDo4MDA7IGxldHRlci1zcGFjaW5nOi0uMDFlbTsgbWFyZ2luLWJvdHRvbToxNnB4OyB9XG4uY2xwLXJlcy1ncmlkeyBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmcjsgZ2FwOjE2cHg7IGFsaWduLWl0ZW1zOnN0cmV0Y2g7IH1cbi5jbHAtY2FyZHtcbiAgYmFja2dyb3VuZDojZmZmOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTZweDsgcGFkZGluZzoyMnB4O1xuICBib3gtc2hhZG93OjAgMTBweCAzMHB4IC0yMHB4IHJnYmEoMTUsMjMsNDIsLjI1KSwgMCAycHggOHB4IC02cHggcmdiYSgxNSwyMyw0MiwuMDgpO1xuICB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGVhc2UsIGJveC1zaGFkb3cgLjI1cyBlYXNlO1xufVxuLmNscC1jYXJkOmhvdmVyeyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTsgYm94LXNoYWRvdzowIDE2cHggMzZweCAtMjBweCByZ2JhKDE1LDIzLDQyLC4zKTsgfVxuLmNscC1yaW5nLWNhcmR7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uOyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo4cHg7IG1pbi13aWR0aDoyMjBweDsgfVxuLmNscC1yaW5nLXdyYXB7IHBvc2l0aW9uOnJlbGF0aXZlOyB3aWR0aDoxMzJweDsgaGVpZ2h0OjEzMnB4OyB9XG4uY2xwLXJpbmctd3JhcCBzdmd7IHRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTsgZGlzcGxheTpibG9jazsgfVxuLmNscC1yaW5nLW51bXtcbiAgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uO1xuICBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtd2VpZ2h0OjgwMDtcbn1cbi5jbHAtcmluZy1udW0gYnsgZm9udC1zaXplOjI4cHg7IGxpbmUtaGVpZ2h0OjE7IGNvbG9yOnZhcigtLWI5MDApOyB9XG4uY2xwLXJpbmctbnVtIHNwYW57IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1zdWJ0bGUpOyBmb250LXdlaWdodDo3MDA7IH1cbi5jbHAtcmluZy1jYXJkIGgzeyBmb250LXNpemU6MTRweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo3MDA7IH1cbi5jbHAtcGFydC1jaGlwc3sgZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjEwcHg7IG1hcmdpbi10b3A6MTJweDsgfVxuLmNscC1wYXJ0LWNoaXB7XG4gIGJvcmRlci1yYWRpdXM6MzJweDsgcGFkZGluZzo4cHggMTZweDsgZm9udC1zaXplOjEzcHg7IGZvbnQtd2VpZ2h0OjcwMDtcbiAgYmFja2dyb3VuZDp2YXIoLS1iNTApOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApOyBjb2xvcjp2YXIoLS1iOTAwKTtcbn1cbi5jbHAtcGFydC1jaGlwIGJ7IGZvbnQtd2VpZ2h0OjgwMDsgfVxuLmNscC1jbGItcm93e1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjE0cHg7IGZsZXgtd3JhcDp3cmFwOyBtYXJnaW4tdG9wOjE2cHg7XG4gIHBhZGRpbmc6MTRweCAxNnB4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6dmFyKC0tYjUwKTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1iMTAwKTtcbn1cbi5jbHAtY2xiLWJhZGdle1xuICBiYWNrZ3JvdW5kOnZhcigtLWNyaW1zb24pOyBjb2xvcjojZmZmOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxNHB4O1xuICBib3JkZXItcmFkaXVzOjEwcHg7IHBhZGRpbmc6OHB4IDE2cHg7XG59XG4uY2xwLWNsYi1yb3cgcHsgZm9udC1zaXplOjEzcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC13ZWlnaHQ6NjAwOyBmbGV4OjE7IG1pbi13aWR0aDoyMDBweDsgfVxuLmNscC10cmFuc2NyaXB0c3sgbWFyZ2luLXRvcDoxNnB4OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjEwcHg7IH1cbi5jbHAtdHItY2FyZHsgYmFja2dyb3VuZDojZmZmOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTZweDsgb3ZlcmZsb3c6aGlkZGVuOyB9XG4uY2xwLXRyLWhlYWR7XG4gIHdpZHRoOjEwMCU7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEwcHg7XG4gIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7IGJvcmRlcjpub25lOyBwYWRkaW5nOjE1cHggMjBweDsgdGV4dC1hbGlnbjpsZWZ0O1xuICBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS10ZXh0KTsgbWluLWhlaWdodDo0OHB4O1xufVxuLmNscC10ci1oZWFkOmhvdmVyeyBiYWNrZ3JvdW5kOnZhcigtLWI1MCk7IH1cbi5jbHAtdHItaGVhZCAuY2xwLXRyLWNhcmV0eyBjb2xvcjp2YXIoLS1zdWJ0bGUpOyBmb250LXNpemU6MTFweDsgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2U7IH1cbi5jbHAtdHItY2FyZC5jbHAtb3BlbiAuY2xwLXRyLWNhcmV0eyB0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7IH1cbi5jbHAtdHItYm9keXsgZGlzcGxheTpub25lOyBwYWRkaW5nOjAgMjBweCAxOHB4OyBmb250LXNpemU6MTRweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo1MDA7IGxpbmUtaGVpZ2h0OjEuNzsgfVxuLmNscC10ci1jYXJkLmNscC1vcGVuIC5jbHAtdHItYm9keXsgZGlzcGxheTpibG9jazsgfVxuLmNscC10ci10b2RveyBjb2xvcjp2YXIoLS1vcmFuZ2UpOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxMi41cHg7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbi10b3A6OHB4OyB9XG5cbi8qIHNjcm9sbCByZXZlYWwgKi9cbi5jbHAtcmV2eyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDE2cHgpOyB0cmFuc2l0aW9uOm9wYWNpdHkgLjVzIGVhc2UsIHRyYW5zZm9ybSAuNXMgZWFzZTsgfVxuLmNscC1yZXYuY2xwLWlueyBvcGFjaXR5OjE7IHRyYW5zZm9ybTpub25lOyB9XG5cbi8qID09PT09PT09PT09PSBSRVNQT05TSVZFID09PT09PT09PT09PSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6NzAwcHgpe1xuICAuY2xwLXdyYXB7IHBhZGRpbmc6MTBweCAxMHB4IDQwcHg7IH1cbiAgLmNscC1oZXJveyBwYWRkaW5nOjI4cHggMjJweDsgYm9yZGVyLXJhZGl1czoxNnB4OyB9XG4gIC5jbHAtcXsgZm9udC1zaXplOjE1cHg7IH1cbiAgLmNscC1kZHsgbWluLWhlaWdodDo0MHB4OyB9XG4gIC5jbHAtZGQgLmNscC1kZC10ZXh0eyBtYXgtd2lkdGg6MTgwcHg7IH1cbiAgLmNscC1iYXJ7IGZsZXgtd3JhcDp3cmFwOyB9XG4gIC5jbHAtYmFyLXRpdGxleyBmbGV4LWJhc2lzOjEwMCU7IH1cbiAgLmNscC1xLXBhbmVseyBwYWRkaW5nOjE2cHggMTRweCAyNnB4OyB9XG4gIC5jbHAtaW50cm8tYm9keXsgcGFkZGluZy1sZWZ0OjIwcHg7IH1cbiAgLmNscC1yZXMtZ3JpZHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjsgfVxuICAuY2xwLW1lZGlhLWNhcmR7IHBhZGRpbmc6MTZweDsgfVxufVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2Upe1xuICAuY2xwLXdyYXAgKiwgLmNscC13cmFwICo6OmJlZm9yZSwgLmNscC13cmFwICo6OmFmdGVye1xuICAgIGFuaW1hdGlvbjpub25lICFpbXBvcnRhbnQ7IHRyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5jbHAtcmV2eyBvcGFjaXR5OjE7IHRyYW5zZm9ybTpub25lOyB9XG59XG5cbi5jbHAtYXVyb3JhIHNwYW57ZmlsdGVyOmJsdXIoMzZweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9XG4uY2xwLWhlcm8tc2hpbW1lcnt3aWxsLWNoYW5nZTpiYWNrZ3JvdW5kLXBvc2l0aW9ufVxuIjtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO30pKCk7CgondXNlIHN0cmljdCc7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBURVNUX0RBVEEgXHUyMDE0IHN3YXAgaW4gbmV3IHNldHMgaGVyZSB3aXRob3V0IHRvdWNoaW5nIG1hcmt1cC4KICAgU2hhcGU6IHsgcGFydHM6W3sgbmFtZSwgaGVhZGVyVGl0bGUsIGludHJvVGl0bGUsIGludHJvQnVsbGV0c1tdLAogICAgICAgICAgICBxSW5zdHJ1Y3Rpb24sIHRyYW5zY3JpcHQsIHNlY3Rpb25zOlt7IGxhYmVsLCBtZWRpYVR5cGUsCiAgICAgICAgICAgIGR1cmF0aW9uKHNlYyksIHRpbWVNaW51dGVzLCBtZWRpYUluc3RydWN0aW9uLAogICAgICAgICAgICBxdWVzdGlvbnM6W3sgbiwgc3RlbSwgb3B0aW9uc1s0XSwga2V5KDEtNCksIHRvZG8\/IH1dIH1dIH1dIH0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCnZhciBURVNUX0RBVEEgPSB7InRlc3RMYWJlbCI6IlNldCA3IFx1MjAxMyBQcmFjdGljZSBUZXN0IDIiLCJzZXRObyI6NywidGVzdE5vIjoyLCJwYXJ0cyI6W3sibmFtZSI6IlBhcnQgMTogTGlzdGVuaW5nIHRvIFByb2JsZW0gU29sdmluZyIsImhlYWRlclRpdGxlIjoiU2V0IDcgXHUyMDEzIFByYWN0aWNlIFRlc3QgMiBcdTIwMTMgTGlzdGVuaW5nIFBhcnQgMTogTGlzdGVuaW5nIHRvIFByb2JsZW0gU29sdmluZyIsImludHJvVGl0bGUiOiJZb3Ugd2lsbCBoZWFyIGEgY29udmVyc2F0aW9uIGF0IGEgZG9nc2xlZCB0b3VyIGJ1c2luZXNzLiIsImludHJvQnVsbGV0cyI6WyJBIHdvbWFuIGlzIHBheWluZyBmb3IgYW5kIHByZXBhcmluZyBmb3IgYSBkb2dzbGVkIGV4Y3Vyc2lvbi4iLCJZb3Ugd2lsbCBoZWFyIHRoZSBjb252ZXJzYXRpb24gb25seSBvbmNlLiJdLCJxSW5zdHJ1Y3Rpb24iOiJDaG9vc2UgdGhlIGJlc3Qgd2F5IHRvIGFuc3dlciBlYWNoIHF1ZXN0aW9uIGZyb20gdGhlIGRyb3AtZG93biBtZW51LiIsInRyYW5zY3JpcHQiOiJZb3Ugd2lsbCBoZWFyIGEgY29udmVyc2F0aW9uIGJldHdlZW4gdHdvIHBlb3BsZSwgYSBtYW4gYW5kIGEgd29tYW4sIHdobyBhcmUgYXRcbmEgZG9nc2xlZCB0b3VyIGJ1c2luZXNzLlxuU2VjdGlvbiAxOlxuV09NQU46IEhlbGxvLCBpcyB0aGlzIHdoZXJlIEkgY2FuIGJvb2sgYSBkb2dzbGVkIHJpZGU\/XG5NQU46ICAgICAgICBJdCBpcyEgQXJlIHlvdSBsb29raW5nIHRvIHJpZGUgYXMgYSBwYXNzZW5nZXIsIG9yIHdvdWxkIHlvdSBsaWtlIHRvXG5kcml2ZSB5b3VyIG93bj9cbldPTUFOOiBJIGNhbiBkcml2ZSBteSBvd24gZG9nc2xlZD8gQnV0IC4gLiAuIEkgZG9uXHUyMDE5dCBrbm93IGhvdyAuIC4gLlxuTUFOOiAgICAgICAgIE91ciBkb2dzIGFyZSB2ZXJ5IHdlbGwgdHJhaW5lZC4gSVx1MjAxOWxsIHRlbGwgeW91IGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG9cbmtub3cuXG5XT01BTjogT2theSwgc2lnbiBtZSB1cCEgRm9yIHRoZSBkcml2ZSwgbm90IHRoZSByaWRlLCB0aGF0IGlzLlxuTUFOOiAgICAgICAgIEFuZCB3b3VsZCB5b3UgbGlrZSB0aGUgaG91ci1sb25nIHRyaXAgb3IgdGhlIG92ZXJuaWdodCB0cmlwP1xuV09NQU46IFRoZSBob3VyLWxvbmcgdHJpcCBwbGVhc2UuXG5NQU46ICAgICAgICAgVGhhdFx1MjAxOWxsIGJlICQ3NSB0aGVuLiBXaWxsIHlvdSBiZSBwYXlpbmcgYnkgY3JlZGl0IGNhcmQ\/XG5XT01BTjogWWVzLiBKdXN0IGdpdmUgbWUgYSBzZWNvbmQgdG8gZmluZCBpdC4gSXQgYWx3YXlzIGdldHMgbG9zdCBhdCB0aGUgYm90dG9tXG5vZiBteSBwdXJzZS4gQWhoLCBoZXJlIGl0IGlzLlxuTUFOOiAgICAgICAgICBUaGFua3MgLiAuIC4gTm93IHdlIGp1c3QgbmVlZCB5b3UgdG8gcmVhZCBhbmQgc2lnbiB0aGlzIHdhaXZlci4gSG0gLiAuXG4uIElcdTIwMTltIGFmcmFpZCB5b3VyIGNyZWRpdCBjYXJkIGhhcyBiZWVuIGRlY2xpbmVkLlxuV09NQU46IE9oLiBJXHUyMDE5bSBzb3JyeVx1MjAxNEkgZm9yZ290IEkgcHV0IHNldmVyYWwgc291dmVuaXJzIG9uIGl0IGxhc3QgbmlnaHQuIEhlcmUsXG50cnkgdGhpcyBjYXJkIGluc3RlYWQuXG5Ob3cgYW5zd2VyIHF1ZXN0aW9ucyAxLTIuXG5XaGF0IGlzIHRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBpbnRlcmFjdGlvbj9cbldoYXQgaXMgdGhlIHByb2JsZW0gd2l0aCBoZXIgcGF5bWVudD9cblNlY3Rpb24gMjpcbldPTUFOOiBXb3chIFRoZSBkb2dzIGFyZSBiaWchIEFyZSB0aGV5IGZyaWVuZGx5P1xuXGZNQU46ICAgICAgICAgIEFic29sdXRlbHkgLiAuIC4gdGhleVx1MjAxOXJlIHJlYWwgcGVvcGxlLXBsZWFzZXJzISBPaywgbm93LCBzdGVwIG9udG8gdGhlXG5zbGVkLCB5ZXMsIGxpa2UgdGhhdCwgYW5kIGhvbGQgb24gdG8gdGhlIGhhbmRsZXMuIEdvb2QuIE5vdyBiZW5kIHlvdXIga25lZXMgYSBsaXR0bGVcbmJpdCwgYW5kIG1vdmUgZnJvbSBzaWRlIHRvIHNpZGUsIHRoYXRcdTIwMTlzIHJpZ2h0LiBUaGF0XHUyMDE5cyB3aGF0IHRoZSByaWRlIHdpbGwgYmUgbGlrZS5cbldPTUFOOiBIb3cgZG8gSSB0ZWxsIHRoZSBkb2dzIHdoZXJlIHRvIGdvP1xuTUFOOiAgICAgICAgIFlvdSB3b25cdTIwMTl0IG5lZWQgdG8uIFRoZXlcdTIwMTlyZSB0cmFpbmVkIHRvIHJ1biBvbiB0aGUgdHJhY2sgYXJvdW5kIHRoZVxubGFrZS5cbldPTUFOOiBBcm91bmQgdGhlIGxha2U\/IFdoYXQgaWYgdGhleSBydW4gb250byB0aGUgbGFrZT8gSSBkb25cdTIwMTl0IHdhbnQgdG8gZmFsbFxudGhyb3VnaCB0aGUgaWNlIVxuTUFOOiAgICAgICAgIERvblx1MjAxOXQgd29ycnkgLiAuIC4gZXZlbiBpZiB0aGUgZG9ncyBkaWQgcnVuIG9udG8gdGhlIGxha2UsIGl0cyBmcm96ZW5cbnNvbGlkLlxuV09NQU46IEkgZG9uXHUyMDE5dCBrbm93IC4gLiAuIGV2ZW4gaWYgaWNlIGxvb2tzIGZyb3plbiB0aGVyZSBjYW4gc3RpbGwgYmUgdGhpblxucGF0Y2hlcy5cbk1BTjogICAgICAgICAgV2VsbCwgeWVzIC4gLiAuIEJ1dCBvbiB0aGlzIGxha2UsIGhlYXZ5IHRydWNrcyByZWd1bGFybHkgZHJpdmUgb3ZlciBldmVuXG50aGUgdGhpbm5lc3QgYXJlYXMgLiAuIC4gc28gSVx1MjAxOW0gcHJldHR5IHN1cmUgaXQgaXMgc2FmZSBlbm91Z2ggZm9yIHlvdSBhbmQgZmV3IGRvZ3NcbldPTUFOOiBPa2F5IC4gLiAuXG5NQU46ICAgICAgICAgQnV0IGlmIHlvdVx1MjAxOXJlIGV2ZXIgbmVydm91cyBhbmQgd2FudCB0byBzdG9wIG9yIHNsb3cgZG93biwganVzdCBzdGVwXG53aXRoIGJvdGggZmVldCBvbnRvIHRoZSBicmFrZS5cbk5vdyBhbnN3ZXIgcXVlc3Rpb25zIDMtNS5cbldoYXQgaXMgdGhlIHdvbWFuXHUyMDE5cyBtYWluIGNvbmNlcm4\/XG5Ib3cgZG9lcyBzaGUgc3RvcCB0aGUgZG9nc2xlZD9cbldoeSBkb2VzIHRoZSBtYW4gam9rZSBhYm91dCB0aGluIGljZT9cblxuU2VjdGlvbiAzOlxuV09NQU46IFdvdyEgVGhhdCB3YXMgYW1hemluZyEgQnV0IHNvbWVvbmUgb24gYSBzbm93bW9iaWxlIGZvbGxvd2VkIG1lXG5hcm91bmQgdGhlIHdob2xlIHRpbWVcdTIwMTRpdCB3YXMgbG91ZCFcbk1BTjogICAgICAgICBUaGF0IHdhcyBtZSEgV2UgZG8gdGhhdCBmb3IgdGhlIGRyaXZlLXlvdXItb3duIHJpZGVzLiBKdXN0IGluIGNhc2UuXG5XT01BTjogT2ggLiAuIC4gSSBndWVzcyBJIHNob3VsZCBzYXkgdGhhbmsgeW91IHRoZW4sIGJ1dCwgd2VsbCwgdGhlIG5vaXNlLlxuTUFOOiAgICAgICAgWWVzLCB0aGUgbm9pc2UgcmVhbGx5IGRvZXMgY2FycnkuIElmIHlvdSBjb21lIGJhY2sgYWdhaW4sIG1heWJlIHlvdVxud291bGQgcHJlZmVyIHRoZSBkb2dzbGVkIHJpZGUuIFdpdGhvdXQgdGhlIHNub3dtb2JpbGUsIGl0XHUyMDE5cyBhIGxvdCBtb3JlIHBlYWNlZnVsLlxuXGZXT01BTjogWWVzLCBsXHUyMDE5bGwgZGVmaW5pdGVseSBjb25zaWRlciB0aGF0LiBEbyB5b3UgYnkgYW55IGNoYW5jZSBoYXZlIGEgc3BlY2lhbFxucmF0ZSBmb3IgZ3JvdXBzPyBNeSBkYXVnaHRlclx1MjAxOXMgZWlnaHRoIGJpcnRoZGF5IGlzIGNvbWluZyB1cCAuIC4gLiBzaGUgYW5kIGhlclxuZnJpZW5kcyB3b3VsZCBsb3ZlIHRoaXMuXG5NQU46ICAgICAgICAgT2YgY291cnNlISBDb21lIGluc2lkZSBhbmQgd2UgY2FuIGRpc2N1c3MgdGhlIHByaWNlcy5cbk5vdyBhbnN3ZXIgcXVlc3Rpb25zIDYtOC5cbldoeSBkaWQgdGhlIG1hbiBmb2xsb3cgaGVyP1xuV2h5IGRpZCB0aGUgd29tYW4gbWVudGlvbiB0aGUgc25vd21vYmlsZT9cbldoYXQgd291bGQgdGhlIHdvbWFuIGxpa2VseSB0ZWxsIG90aGVycyBhYm91dCBoZXIgZXhwZXJpZW5jZT8iLCJzZWN0aW9ucyI6W3sibGFiZWwiOiJDb252ZXJzYXRpb24gXHUyMDE0IFNlY3Rpb24gMSIsImR1cmF0aW9uIjo4OCwibWVkaWFUeXBlIjoiYXVkaW8iLCJtZWRpYUluc3RydWN0aW9uIjoiTGlzdGVuIHRvIHRoZSBmb2xsb3dpbmcgY29udmVyc2F0aW9uLiBZb3Ugd2lsbCBoZWFyIGl0IG9ubHkgb25jZS4iLCJ0aW1lTWludXRlcyI6MiwicXVlc3Rpb25zIjpbeyJuIjoxLCJzdGVtIjoiV2hhdCBpcyB0aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgaW50ZXJhY3Rpb24\/Iiwib3B0aW9ucyI6WyJ0byBwYXkgZm9yIGEgZG9nc2xlZCBleGN1cnNpb24iLCJ0byBib29rIGEgaG90ZWwgcm9vbSIsInRvIGNvbXBsYWluIGFib3V0IGEgc2VydmljZSIsInRvIHJldHVybiBzb21lIGVxdWlwbWVudCJdLCJrZXkiOjAsInJlY29uIjp0cnVlfSx7Im4iOjIsInN0ZW0iOiJXaGF0IGlzIHRoZSBwcm9ibGVtIHdpdGggaGVyIHBheW1lbnQ\/Iiwib3B0aW9ucyI6WyJTaGUgaGFzIG5vIGNhc2guIiwiSGVyIGNhcmQgaXMgcmVmdXNlZC4iLCJTaGUgd2FzIG92ZXJjaGFyZ2VkLiIsIlRoZSBwcmljZSBoYXMgaW5jcmVhc2VkLiJdLCJrZXkiOjEsInJlY29uIjp0cnVlfV19LHsibGFiZWwiOiJDb252ZXJzYXRpb24gXHUyMDE0IFNlY3Rpb24gMiIsImR1cmF0aW9uIjo3MywibWVkaWFUeXBlIjoiYXVkaW8iLCJtZWRpYUluc3RydWN0aW9uIjoiTGlzdGVuIHRvIHRoZSBuZXh0IHBhcnQgb2YgdGhlIGNvbnZlcnNhdGlvbi4gWW91IHdpbGwgaGVhciBpdCBvbmx5IG9uY2UuIiwidGltZU1pbnV0ZXMiOjIsInF1ZXN0aW9ucyI6W3sibiI6Mywic3RlbSI6IldoYXQgaXMgdGhlIHdvbWFuXHUyMDE5cyBtYWluIGNvbmNlcm4\/Iiwib3B0aW9ucyI6WyJ0aGUgZG9ncyBiZWluZyB1bmZyaWVuZGx5IiwiZmFsbGluZyBpbnRvIHRoZSBsYWtlIiwidGhlIGNvc3Qgb2YgdGhlIHJpZGUiLCJ0aGUgbGVuZ3RoIG9mIHRoZSB0cmlwIl0sImtleSI6MSwicmVjb24iOnRydWV9LHsibiI6NCwic3RlbSI6IkhvdyBkb2VzIHNoZSBzdG9wIHRoZSBkb2dzbGVkPyIsIm9wdGlvbnMiOlsiU2hlIGNhbGxzIHRvIHRoZSBkb2dzLiIsIlNoZSBwdWxscyB0aGUgaGFuZGxlcy4iLCJTaGUgc3RlcHMgb24gdGhlIGJyYWtlLiIsIlNoZSB3YXZlcyB0byB0aGUgZ3VpZGUuIl0sImtleSI6MiwicmVjb24iOnRydWV9LHsibiI6NSwic3RlbSI6IldoeSBkb2VzIHRoZSBtYW4gam9rZSBhYm91dCB0aGluIGljZT8iLCJvcHRpb25zIjpbInRvIHJlYXNzdXJlIHRoZSB3b21hbiIsInRvIHdhcm4gaGVyIG9mIGRhbmdlciIsInRvIGNoYW5nZSB0aGUgc3ViamVjdCIsInRvIGVuZCB0aGUgY29udmVyc2F0aW9uIl0sImtleSI6MCwicmVjb24iOnRydWV9XX0seyJsYWJlbCI6IkNvbnZlcnNhdGlvbiBcdTIwMTQgU2VjdGlvbiAzIiwiZHVyYXRpb24iOjU1LCJtZWRpYVR5cGUiOiJhdWRpbyIsIm1lZGlhSW5zdHJ1Y3Rpb24iOiJMaXN0ZW4gdG8gdGhlIGZpbmFsIHBhcnQgb2YgdGhlIGNvbnZlcnNhdGlvbi4gWW91IHdpbGwgaGVhciBpdCBvbmx5IG9uY2UuIiwidGltZU1pbnV0ZXMiOjIsInF1ZXN0aW9ucyI6W3sibiI6Niwic3RlbSI6IldoeSBkaWQgdGhlIG1hbiBmb2xsb3cgaGVyPyIsIm9wdGlvbnMiOlsiZm9yIHNhZmV0eSByZWFzb25zIiwidG8gdGFrZSBwaG90b2dyYXBocyIsInRvIGd1aWRlIHRoZSBkb2dzIiwidG8gcmVjb3JkIGhlciB0aW1lIl0sImtleSI6MCwicmVjb24iOnRydWV9LHsibiI6Nywic3RlbSI6IldoeSBkaWQgdGhlIHdvbWFuIG1lbnRpb24gdGhlIHNub3dtb2JpbGU\/Iiwib3B0aW9ucyI6WyJJdCB3YXMgdmVyeSBmYXN0LiIsIkl0IHdhcyB2ZXJ5IGFubm95aW5nLiIsIkl0IGJyb2tlIGRvd24uIiwiSXQgd2FzIGhlbHBmdWwuIl0sImtleSI6MSwicmVjb24iOnRydWV9LHsibiI6OCwic3RlbSI6IldoYXQgd291bGQgdGhlIHdvbWFuIGxpa2VseSB0ZWxsIG90aGVycyBhYm91dCBoZXIgZXhwZXJpZW5jZT8iLCJvcHRpb25zIjpbIkF2b2lkIHRoZSBkb2dzbGVkIHJpZGVzLiIsIkNvbnNpZGVyIHJpZGluZyB0aGUgc2xlZCBhcyBhIHBhc3Nlbmdlci4iLCJCcmluZyB3YXJtIGNsb3RoaW5nLiIsIkJvb2sgd2VsbCBpbiBhZHZhbmNlLiJdLCJrZXkiOjEsInJlY29uIjp0cnVlfV19XX0seyJuYW1lIjoiUGFydCAyOiBMaXN0ZW5pbmcgdG8gYSBEYWlseSBMaWZlIENvbnZlcnNhdGlvbiIsImhlYWRlclRpdGxlIjoiU2V0IDcgXHUyMDEzIFByYWN0aWNlIFRlc3QgMiBcdTIwMTMgTGlzdGVuaW5nIFBhcnQgMjogTGlzdGVuaW5nIHRvIGEgRGFpbHkgTGlmZSBDb252ZXJzYXRpb24iLCJpbnRyb1RpdGxlIjoiWW91IHdpbGwgaGVhciBhIGNvbnZlcnNhdGlvbiBiZXR3ZWVuIGEgc2FsZXN3b21hbiBhbmQgYSBtYW4gYWJvdXQgYSBuZXdzcGFwZXIgc3Vic2NyaXB0aW9uLiIsImludHJvQnVsbGV0cyI6WyJZb3Ugd2lsbCBoZWFyIHRoZSBjb252ZXJzYXRpb24gb25seSBvbmNlLiIsIlRoZW4gYW5zd2VyIHRoZSBxdWVzdGlvbnMuIl0sInFJbnN0cnVjdGlvbiI6IkNob29zZSB0aGUgYmVzdCB3YXkgdG8gYW5zd2VyIGVhY2ggcXVlc3Rpb24gZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUuIiwidHJhbnNjcmlwdCI6IllvdSB3aWxsIGhlYXIgYSB0ZWxlcGhvbmUgY29udmVyc2F0aW9uIGJldHdlZW4gYSB3b21hbiBhbmQgYSBjdXN0b21lci5cblxuV09NQU46IEhlbGxvLCBtYXkgSSBwbGVhc2Ugc3BlYWsgdG8gTWFuYXo\/XG5NQU46ICAgICAgICAgTWFuYXogaXNuXHUyMDE5dCBob21lIGF0IHRoZSBtb21lbnQuIENhbiBJIHRha2UgYSBtZXNzYWdlP1xuV09NQU46IElcdTIwMTltIGNhbGxpbmcgZnJvbSBUaGUgR2F6ZXR0ZS4gTWFuYXogd2FzIGEgc3Vic2NyaWJlciBsYXN0IHllYXIsIGFuZFxud2VcdTIwMTlyZSBub3cgb2ZmZXJpbmcgYSBzcGVjaWFsIHByb21vdGlvbiBmb3Igb3VyIGZvcm1lciBjdXN0b21lcnMuXG5NQU46ICAgICAgICAgT2gsIEkgc2VlLiBXZWxsLCBNYW5heiB3aWxsIGJlIGhvbWUgbGF0ZXIgdGhpcyBhZnRlcm5vb24gLiAuIC5cbldPTUFOOiBJdCBpcyBhIHZlcnkgZ29vZCBkZWFsIHdlIGFyZSBvZmZlcmluZy4gUGVyaGFwcyB5b3Ugd291bGQgYWxzbyBiZVxuaW50ZXJlc3RlZC4gQ2FuIEkgdGVsbCB5b3UgYSBsaXR0bGUgYml0IG1vcmUgYWJvdXQgaXQ\/XG5NQU46ICAgICAgICAgV2VsbCwgSVx1MjAxOW0gYSBsaXR0bGUgYml0LCB1bSAuIC4gLiBidXN5IC4gLiAuIGJ1dCAtXG5XT01BTjogSXQgd2lsbCBvbmx5IHRha2UgYSBmZXcgbWludXRlcyFcbk1BTjogICAgICAgICBTdXJlLiBJIGd1ZXNzIHNvLlxuV09NQU46IFdvbmRlcmZ1bCEgV2hhdCB3ZVx1MjAxOXJlIG9mZmVyaW5nIGlzIGRhaWx5IGRlbGl2ZXJ5IG9mIFRoZSBHYXpldHRlIGZvclxudGhlIHByaWNlIG9mIHRoZSB3ZWVrZW5kIHBhcGVycyBvbmx5LiBXaGF0IHRoYXQgbWVhbnMgaXMgeW91XHUyMDE5bGwgZ2V0IHNldmVuIGRheXMgb2ZcbmRlbGl2ZXJ5LCBmb3IgdGhlIHByaWNlIG9mIGp1c3QgdHdvIGRheXMhIFNvIHRvZGF5LCBmb3IgYSBsaW1pdGVkIHRpbWUgb25seSwgaXQncyBhXG53ZWVrbHkgY29zdCBvZiBvbmx5ICQzLjc1LiBUaGF0XHUyMDE5cyBhIDUwJSBkaXNjb3VudCBvZmYgb3VyIG5vcm1hbCBwcmljZSBvZiAkNy41MC5cblxmTUFOOiAgICAgICAgIFRoYXQgZG9lcyBzb3VuZCBsaWtlIGEgZ29vZCBkZWFsIC4gLiAuIGFuZCBJIGRvIGVuam95IHJlYWRpbmcgdGhlIGZyZWVcbkdhemV0dGUgYXJ0aWNsZXMgYXZhaWxhYmxlIG9ubGluZS4gSXQgbWlnaHQgYmUgbmljZSB0byBoYXZlIGFjY2VzcyB0byB0aGUgd2hvbGVcbm5ld3NwYXBlciB0aG91Z2ggLiAuIC4gaW5zdGVhZCBvZiBqdXN0IG9uZSBhcnRpY2xlIGZyb20gZWFjaCBzZWN0aW9uLiBCdXQsIElcdTIwMTltIGFsd2F5c1xud2FyeSBvZiBwcm9tb3Rpb25zIHRoYXQgYXJlIGZvciBhIGxpbWl0ZWQgdGltZSBvbmx5LiBXaGVuIHdpbGwgdGhlIHByaWNlIGdvIHVwP1xuQW5kIGNhbiBJIGNhbmNlbCB3aGVuIGl0IGRvZXM\/XG5XT01BTjogSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybnMuIFRoZSBwcmljZSB3aWxsIGdvIHVwIGFmdGVyIHRocmVlIG1vbnRocyxcbmJ1dCB5b3UgY2FuIGNhbmNlbCBhdCBhbnkgdGltZS4gWW91XHUyMDE5dmUgcmVhbGx5IGdvdCBub3RoaW5nIHRvIGxvc2UgYnkgdHJ5aW5nIGl0IG91dC5cbk1BTjogICAgICAgICBIbW0gLiAuIC4gWW91XHUyMDE5dmUgYWxtb3N0IGNvbnZpbmNlZCBtZSwgYnV0IElcdTIwMTlkIGxpa2UgdG8gdGFsayB0byBNYW5helxuZmlyc3QgYW5kIHdlXHUyMDE5bGwgZGVjaWRlIHRvZ2V0aGVyLiBDYW4geW91IGNhbGwgdXMgYmFjayBsYXRlciB0aGlzIHdlZWs\/XG5XT01BTjogQWJzb2x1dGVseS4gSSB3aWxsIGNhbGwgbGF0ZXIgdGhpcyB3ZWVrLiBBbmQgd2hvIHNob3VsZCBJIGFzayBmb3Igd2hlblxuSSBjYWxsP1xuTUFOOiAgICAgICAgIFlvdSBjYW4gYXNrIGZvciBlaXRoZXIgbWUgb3IgTWFuYXouXG5XT01BTjogSSBkb25cdTIwMTl0IGtub3cgeW91ciBuYW1lLlxuTUFOOiAgICAgICAgIE9oLCBvZiBjb3Vyc2UsIHllYWguIE15IG5hbWUgaXMgQW1pci5cbldPTUFOOiBUaGFuayB5b3UsIEFtaXIuIEkgd2lsbCBiZSBpbiB0b3VjaCBsYXRlciB0aGlzIHdlZWsuXG5Ob3cgYW5zd2VyIHF1ZXN0aW9ucyAxLTUuXG5cbldoYXQgZG9lcyB0aGUgd29tYW4gd2FudCB0byBzZWxsP1xuV2h5IGlzIHRoZSB3b21hbiBvZmZlcmluZyBBbWlyIHRoaXMgcHJvbW90aW9uP1xuSG93IGRvZXMgQW1pciBmZWVsIGFib3V0IGxpbWl0ZWQtdGltZSBwcm9tb3Rpb25zP1xuV2h5IGRvZXMgdGhlIHdvbWFuIHNheSwgXHUyMDFjSSBkb25cdTIwMTl0IGtub3cgeW91ciBuYW1lXHUyMDFkP1xuV2hhdCBjb250ZW50IGRvZXMgVGhlIEdhemV0dGUgcHVibGlzaCBvbmxpbmU\/Iiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiQ29udmVyc2F0aW9uIiwiZHVyYXRpb24iOjE2MSwibWVkaWFUeXBlIjoiYXVkaW8iLCJtZWRpYUluc3RydWN0aW9uIjoiTGlzdGVuIHRvIHRoZSBmb2xsb3dpbmcgY29udmVyc2F0aW9uLiBZb3Ugd2lsbCBoZWFyIGl0IG9ubHkgb25jZS4iLCJ0aW1lTWludXRlcyI6MiwicXVlc3Rpb25zIjpbeyJuIjoxLCJzdGVtIjoiV2hhdCBkb2VzIHRoZSB3b21hbiB3YW50IHRvIHNlbGw\/Iiwib3B0aW9ucyI6WyJhIG5ld3NwYXBlciBzdWJzY3JpcHRpb24iLCJhbiBhZHZlcnRpc2luZyBwYWNrYWdlIiwiYSBtYWdhemluZSBhcnRpY2xlIiwiYW4gb25saW5lIG1lbWJlcnNoaXAiXSwia2V5IjowLCJyZWNvbiI6dHJ1ZX0seyJuIjoyLCJzdGVtIjoiV2h5IGlzIHRoZSB3b21hbiBvZmZlcmluZyBBbWlyIHRoaXMgcHJvbW90aW9uPyIsIm9wdGlvbnMiOlsiQW1pciBpcyBhIG5ldyByZXNpZGVudC4iLCJNYW5heiB3YXMgYSBjdXN0b21lciBpbiB0aGUgcGFzdC4iLCJBbWlyIHdvbiBhIGNvbnRlc3QuIiwiSGUgcmVxdWVzdGVkIG1vcmUgaW5mb3JtYXRpb24uIl0sImtleSI6MSwicmVjb24iOnRydWV9LHsibiI6Mywic3RlbSI6IkhvdyBkb2VzIEFtaXIgZmVlbCBhYm91dCBsaW1pdGVkLXRpbWUgcHJvbW90aW9ucz8iLCJvcHRpb25zIjpbImV4Y2l0ZWQiLCJzdXNwaWNpb3VzIiwiY29uZnVzZWQiLCJ1bmludGVyZXN0ZWQiXSwia2V5IjoxLCJyZWNvbiI6dHJ1ZX0seyJuIjo0LCJzdGVtIjoiV2h5IGRvZXMgdGhlIHdvbWFuIHNheSwgXHUyMDFjSSBkb25cdTIwMTl0IGtub3cgeW91ciBuYW1lXHUyMDFkPyIsIm9wdGlvbnMiOlsiU2hlIGZvcmdvdCB3aG8gaGUgd2FzLiIsIlNoZSB3b3VsZCBsaWtlIHRvIGNhbGwgaGltIGJ5IGhpcyBuYW1lLiIsIlNoZSBuZWVkcyBpdCBmb3IgdGhlIGNvbnRyYWN0LiIsIlNoZSBpcyBjaGVja2luZyBoaXMgaWRlbnRpdHkuIl0sImtleSI6MSwicmVjb24iOnRydWV9LHsibiI6NSwic3RlbSI6IldoYXQgY29udGVudCBkb2VzIFRoZSBHYXpldHRlIHB1Ymxpc2ggb25saW5lPyIsIm9wdGlvbnMiOlsiYWxsIG9mIGl0cyBhcnRpY2xlcyIsImEgc2VsZWN0aW9uIG9mIGFydGljbGVzIiwib25seSBsb2NhbCBuZXdzIiwic3Vic2NyaWJlciBjb21tZW50cyJdLCJrZXkiOjEsInJlY29uIjp0cnVlfV19XX0seyJuYW1lIjoiUGFydCAzOiBMaXN0ZW5pbmcgZm9yIEluZm9ybWF0aW9uIiwiaGVhZGVyVGl0bGUiOiJTZXQgNyBcdTIwMTMgUHJhY3RpY2UgVGVzdCAyIFx1MjAxMyBMaXN0ZW5pbmcgUGFydCAzOiBMaXN0ZW5pbmcgZm9yIEluZm9ybWF0aW9uIiwiaW50cm9UaXRsZSI6IllvdSB3aWxsIGhlYXIgYSBjb252ZXJzYXRpb24gYmV0d2VlbiB0d28gY28td29ya2VycyBhYm91dCBib29raW5nIGEgcm9vbS4iLCJpbnRyb0J1bGxldHMiOlsiWW91IHdpbGwgaGVhciB0aGUgY29udmVyc2F0aW9uIG9ubHkgb25jZS4iLCJUaGVuIGFuc3dlciB0aGUgcXVlc3Rpb25zLiJdLCJxSW5zdHJ1Y3Rpb24iOiJDaG9vc2UgdGhlIGJlc3Qgd2F5IHRvIGFuc3dlciBlYWNoIHF1ZXN0aW9uIGZyb20gdGhlIGRyb3AtZG93biBtZW51LiIsInRyYW5zY3JpcHQiOiJZb3Ugd2lsbCBoZWFyIGEgY29udmVyc2F0aW9uIGJldHdlZW4gYSBtYW4gYW5kIGEgd29tYW4gd2hvIHdvcmsgYXQgYVxudW5pdmVyc2l0eS4gVGhlIG1hbiwgd2hvIGlzIHRoZSB3b21hblx1MjAxOXMgc3VwZXJ2aXNvciwgaGFzIHN0b3BwZWQgdG8gc3BlYWsgdG9cbnRoZSB3b21hbi5cblxmTUFOOiAgICAgICAgIENoZXJ5bCwgZG8geW91IGhhdmUgYSBtaW51dGU\/IFlvdSBtaWdodCBub3QgaGF2ZSBoZWFyZCwgYnV0IHRoZVxudW5pdmVyc2l0eSBoYXMgZGVjaWRlZCB0byByZW50IG91dCBpdHMgY2xhc3Nyb29tcyB0byB0aGUgcHVibGljIHdoZW4gbm90IGluIHVzZSBieSBhXG5jb3Vyc2UuIFdlXHUyMDE5cmUgaG9waW5nIHRvIHJhaXNlIGZ1bmRzIGZvciBzb21lIG11Y2gtbmVlZGVkIHJlbm92YXRpb25zLiBEaWFuZSB3aWxsXG5jb250aW51ZSB0byBib29rIHRoZSByb29tcyBmb3Igb3VyIGNvdXJzZXMsIGJ1dCBJXHUyMDE5ZCBsaWtlIHlvdSB0byBoYW5kbGUgcXVlcmllcyBmcm9tXG50aGUgY29tbXVuaXR5LlxuV09NQU46IFN1cmUuIFdoYXRcdTIwMTlzIGludm9sdmVkPyBJXHUyMDE5bSBub3QgdG9vIGZhbWlsaWFyIHdpdGggdGhlIGJvb2tpbmdcbnNvZnR3YXJlLiBJXHUyMDE5dmUgb25seSB1c2VkIGl0IG9uY2UuXG5NQU46ICAgICAgICBObyB3b3JyaWVzLiBGaXJzdCwgb3BlbiB0aGUgYm9va2luZyBmb3JtLCBzZWU\/IEp1c3QgYXNrIGZvciB0aGVpclxuaW5mb3JtYXRpb24gYW5kIGZpbGwgaXQgaW4uIFRoZSBwZXJzb25cdTIwMTlzIG5hbWUsIGFkZHJlc3MsIHBob25lIG51bWJlciwgZXRjLlxuV09NQU46IFRoYXRcdTIwMTlzIGVhc3kgZW5vdWdoLiBXaWxsIHRoZXkgYWxyZWFkeSBrbm93IHdoaWNoIHJvb20gdGhleSB3YW50IHRvXG5ib29rP1xuTUFOOiAgICAgICAgICAgIE5vLCB5b3VcdTIwMTlsbCBoYXZlIHRvIGhlbHAgdGhlbSBmaWd1cmUgdGhhdCBvdXQuIEp1c3Qgb3BlbiB1cCB0aGUgcm9vbXNcbmxpc3QsIGhlcmUuIEl0IGxpc3RzIGFsbCB0aGUgcm9vbXMsIGluZGljYXRpbmcgc2l6ZSwgbG9jYXRpb24sIGFuZCBzbyBvbi5cbldPTUFOOiBJIHRoaW5rIElcdTIwMTlsbCBwcmludCB0aGF0IGxpc3QgYW5kIGdvIGNoZWNrIG91dCB0aGUgcm9vbXMgYXJvdW5kIGNhbXB1cy5cbkl0XHUyMDE5bGwgZ2l2ZSBtZSBhIGJldHRlciBpZGVhIG9mIHdoYXQgdG8gcmVjb21tZW5kLlxuTUFOOiAgICAgICAgIEdvb2QgaWRlYS4gRm9yIGV4YW1wbGUsIGlmIHRoZXlcdTIwMTlyZSBnb2luZyB0byBnaXZlIGEgbGVjdHVyZSwgdGhleVx1MjAxOWxsXG53YW50IG9uZSBvZiB0aGUgYXVkaXRvcml1bXMuIElmIHRoZXlcdTIwMTlyZSBob2xkaW5nIGEgd29ya3Nob3AsIG9uZSBvZiB0aGUgY2xhc3Nyb29tcy5cbkFuZCwgb2YgY291cnNlLCBzb21lIGNsYXNzcm9vbXMgaGF2ZSB0YWJsZXMgYW5kIGNoYWlycyB0aGF0IGNhbiBiZSBtb3ZlZCwgb3RoZXJzXG5oYXZlIGRlc2tzIGJvbHRlZCBpbnRvIHRoZSBmbG9vciAuIC4gLlxuV09NQU46IFNvLCBsZXRcdTIwMTlzIHNheSBzb21lb25lIGlzIGhvbGRpbmcgYSBGaXJzdCBBaWQgQ2VydGlmaWNhdGlvbiBjb3Vyc2UsXG50aGV5XHUyMDE5ZCBwcm9iYWJseSB3YW50IGEgbWVkaXVtIHNpemVkIGNsYXNzcm9vbSBhbmQgdG8gYmUgYWJsZSB0byBtb3ZlIHRoZSB0YWJsZXNcbmFuZCBjaGFpcnMuIEkgdGhpbmsgSSBnb3QgaXQuIFdoZW4gSSB3YWxrIGFyb3VuZCBsYXRlciwgSVx1MjAxOWxsIGFsc28gbWFrZSBub3RlIG9mIHdoaWNoXG5yb29tcyBhcmUgbmVhciB3YXNocm9vbXMsIHdoaWNoIG9uZXMgbmVhciBhIG1haW4gZW50cmFuY2UuIFlvdSBuZXZlciBrbm93XG53aGF0IHBlb3BsZSB3aWxsIHdhbnQuXG5NQU46ICAgICAgICAgRXhjZWxsZW50LiBOb3cgdGhlIHByaWNlIGxpc3QgaXMgaGVyZS5cbldPTUFOOiBEbyB0aGV5IHNlbmQgdGhlIHBheW1lbnQgdG8gdXM\/XG5NQU46ICAgICAgICBObywgb25jZSB0aGUgYm9va2luZyBmb3JtIGlzIGNvbXBsZXRlLCBzZW5kIGEgY29weSB0byB0aGVtLCBhbmQgYVxuY29weSB0byBNaWNoYWVsLCBpbiBGaW5hbmNlLiBIZVx1MjAxOWxsIHNlbmQgdGhlbSBhbiBpbnZvaWNlIC4gLiAuIGFuZCBmb2xsb3ctdXAgaWYgdGhleVxuZG9uXHUyMDE5dCBwYXkgb24gdGltZS5cbldPTUFOOiBPa2F5LCBhbnl0aGluZyBlbHNlPyBJZiB3aGF0IHRoZXkgd2FudCBpc25cdTIwMTl0IGF2YWlsYWJsZSwgc2hhbGwgSSBzdWdnZXN0XG50aGV5IGNvbnRhY3QgdGhlIENvbW11bml0eSBDZW50ZXI\/XG5cZk1BTjogICAgICAgICAgTm8uIFRlbGwgdGhlbSB5b3VcdTIwMTlsbCBnZXQgYmFjayB0byB0aGVtLCB0aGVuIGNhbGwgRGlhbmUuIFNoZSBtYXkgYmVcbmFibGUgdG8gcmVzY2hlZHVsZSB0aGUgY2xhc3MgdXNpbmcgdGhlIHJlcXVlc3RlZCByb29tLiBXZSByZWFsbHkgbmVlZCB0aGUgcmV2ZW51ZSxcbnNvIElcdTIwMTlkIGxpa2UgdG8gcHVyc3VlIHRoYXQgb3B0aW9uIGZpcnN0LlxuV09NQU46IE9rYXksIG5vIHByb2JsZW0hXG5Ob3cgYW5zd2VyIHF1ZXN0aW9ucyAxLTYuXG5cbldoeSBkb2VzIHRoZSBtYW4gY29tZSBzcGVhayB0byB0aGUgd29tYW4\/XG5XaGF0IGlzIGxpa2VseSB0cnVlIGFib3V0IHRoZSB1bml2ZXJzaXR5P1xuV2hhdCBkb2VzIHRoZSB3b21hbiB0aGluayBtaWdodCBvY2N1cj9cbldoeSB3b3VsZCBzaGUgc2VuZCBhIGNvcHkgb2YgdGhlIGJvb2tpbmcgZm9ybSB0byBNaWNoYWVsP1xuSWYgdGhlIHJvb20gaXMgYWxyZWFkeSBib29rZWQsIHdoYXQgd2lsbCB0aGUgd29tYW4gZG8\/XG5Ib3cgZG9lcyB0aGUgd29tYW4gZmVlbCBhYm91dCB0aGUgbWFuXHUyMDE5cyByZXF1ZXN0PyIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkNvbnZlcnNhdGlvbiIsImR1cmF0aW9uIjoxNTYsIm1lZGlhVHlwZSI6ImF1ZGlvIiwibWVkaWFJbnN0cnVjdGlvbiI6Ikxpc3RlbiB0byB0aGUgZm9sbG93aW5nIGNvbnZlcnNhdGlvbi4gWW91IHdpbGwgaGVhciBpdCBvbmx5IG9uY2UuIiwidGltZU1pbnV0ZXMiOjIsInF1ZXN0aW9ucyI6W3sibiI6MSwic3RlbSI6IldoeSBkb2VzIHRoZSBtYW4gY29tZSBzcGVhayB0byB0aGUgd29tYW4\/Iiwib3B0aW9ucyI6WyJIZSB3YW50cyBoZXIgdG8gYWRkIGEgbmV3IHRhc2sgdG8gaGVyIGR1dGllcy4iLCJIZSB3YW50cyB0byBib29rIGEgaG9saWRheS4iLCJIZSBuZWVkcyB0byBmaWxlIGEgY29tcGxhaW50LiIsIkhlIGlzIHJldHVybmluZyBzb21lIGVxdWlwbWVudC4iXSwia2V5IjowLCJyZWNvbiI6dHJ1ZX0seyJuIjoyLCJzdGVtIjoiV2hhdCBpcyBsaWtlbHkgdHJ1ZSBhYm91dCB0aGUgdW5pdmVyc2l0eT8iLCJvcHRpb25zIjpbIkl0IGlzIGV4cGFuZGluZyBpdHMgY2FtcHVzLiIsIkl0IGlzIGN1cnJlbnRseSBoYXZpbmcgZmluYW5jaWFsIGRpZmZpY3VsdGllcy4iLCJJdCBpcyBoaXJpbmcgbmV3IHN0YWZmLiIsIkl0IGlzIGNsb3NpbmcgYSBkZXBhcnRtZW50LiJdLCJrZXkiOjEsInJlY29uIjp0cnVlfSx7Im4iOjMsInN0ZW0iOiJXaGF0IGRvZXMgdGhlIHdvbWFuIHRoaW5rIG1pZ2h0IG9jY3VyPyIsIm9wdGlvbnMiOlsiYSBkb3VibGUgYm9va2luZyIsImEgcmVxdWVzdCBmb3IgYSByb29tIG5lYXIgYSB3YXNocm9vbSIsImEgY2FuY2VsbGF0aW9uIGZlZSIsImEgY2hhbmdlIG9mIGRhdGUiXSwia2V5IjoxLCJyZWNvbiI6dHJ1ZX0seyJuIjo0LCJzdGVtIjoiV2h5IHdvdWxkIHNoZSBzZW5kIGEgY29weSBvZiB0aGUgYm9va2luZyBmb3JtIHRvIE1pY2hhZWw\/Iiwib3B0aW9ucyI6WyJzbyBoZSBjYW4gYXBwcm92ZSB0aGUgcm9vbSIsInNvIGhlIGNhbiBzZW5kIGFuIGludm9pY2UiLCJzbyBoZSBjYW4gdXBkYXRlIHRoZSBzY2hlZHVsZSIsInNvIGhlIGNhbiBjb250YWN0IHRoZSBndWVzdHMiXSwia2V5IjoxLCJyZWNvbiI6dHJ1ZX0seyJuIjo1LCJzdGVtIjoiSWYgdGhlIHJvb20gaXMgYWxyZWFkeSBib29rZWQsIHdoYXQgd2lsbCB0aGUgd29tYW4gZG8\/Iiwib3B0aW9ucyI6WyJjYW5jZWwgdGhlIGV2ZW50IiwiY29udGFjdCBoZXIgY28td29ya2VyIiwib2ZmZXIgYSBkaWZmZXJlbnQgZGF0ZSIsInJlZnVuZCB0aGUgcGF5bWVudCJdLCJrZXkiOjEsInJlY29uIjp0cnVlfSx7Im4iOjYsInN0ZW0iOiJIb3cgZG9lcyB0aGUgd29tYW4gZmVlbCBhYm91dCB0aGUgbWFuXHUyMDE5cyByZXF1ZXN0PyIsIm9wdGlvbnMiOlsiYW5ub3llZCIsImNvbmZpZGVudCIsIndvcnJpZWQiLCJjb25mdXNlZCJdLCJrZXkiOjEsInJlY29uIjp0cnVlfV19XX0seyJuYW1lIjoiUGFydCA0OiBMaXN0ZW5pbmcgdG8gYSBOZXdzIEl0ZW0iLCJoZWFkZXJUaXRsZSI6IlNldCA3IFx1MjAxMyBQcmFjdGljZSBUZXN0IDIgXHUyMDEzIExpc3RlbmluZyBQYXJ0IDQ6IExpc3RlbmluZyB0byBhIE5ld3MgSXRlbSIsImludHJvVGl0bGUiOiJZb3Ugd2lsbCBoZWFyIGEgbmV3cyBzdG9yeSBhYm91dCBhIG1hZ2ljaWFuLiIsImludHJvQnVsbGV0cyI6WyJZb3Ugd2lsbCBoZWFyIHRoZSBuZXdzIGl0ZW0gb25seSBvbmNlLiIsIkl0IGlzIGFib3V0IDEuNSBtaW51dGVzIGxvbmcuIl0sInFJbnN0cnVjdGlvbiI6IkNob29zZSB0aGUgYmVzdCB3YXkgdG8gY29tcGxldGUgZWFjaCBzdGF0ZW1lbnQgZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUuIiwidHJhbnNjcmlwdCI6IllvdSB3aWxsIGhlYXIgYSBuZXdzIHN0b3J5IGFib3V0IGEgbWFnaWNpYW4uXG5cblN0cmVldCBtYWdpY2lhbiBDYXJzb24gV2l0dCBoYXMgYmVlbiBhcnJlc3RlZCBhbmQgY2hhcmdlZCB3aXRoIHN0ZWFsaW5nIGZyb20gaGlzXG5hdWRpZW5jZXMuIFRoZSAyNi15ZWFyLW9sZCBwZXJmb3JtZXIgaGFzIGJlZW4gdHJhdmVsaW5nIGFyb3VuZCBDYW5hZGEgZm9yIHRoZVxubGFzdCBmb3VyIG1vbnRocywgYW1hemluZyBwZW9wbGUgd2l0aCBoaXMgc2xlaWdodCBvZiBoYW5kLiBPbmUgb2YgaGlzIGJlc3Qta25vd25cbnRyaWNrcyBpcyB0byBhc2sgYW4gYXVkaWVuY2UgbWVtYmVyIGZvciBhIHR3ZW50eS1kb2xsYXIgYmlsbCwgcmlwIGl0IGludG8gc2hyZWRzLCB0aGVuXG5wdWxsIHRoZSBzYW1lIGJpbGwgdW5oYXJtZWQgb3V0IG9mIGFuIG9yYW5nZS4gV2l0dCB3YXMgcGVyZm9ybWluZyBhdCB0aGUgV2lubmlwZWdcbkZvbGsgRmVzdGl2YWwgd2hlbiBoZSBnb3QgY2F1Z2h0LiBUd2VsdmUteWVhci1vbGQgUGF0cmljaWEgV3UgaGFkIHRoZSBpbnNpZ2h0IHRvXG50YWtlIGEgcGljdHVyZSBvZiB0aGUgc2VyaWFsIG51bWJlciBvZiBoZXIgdHdlbnR5LWRvbGxhciBiaWxsIHdpdGggaGVyIGRhZFx1MjAxOXMgY2VsbFxucGhvbmUgYmVmb3JlIHNoZSBoYW5kZWQgaXQgb3ZlciB0byBXaXR0LiBXaGVuIGhlIHJldHVybmVkIGl0IHRvIFBhdHJpY2lhLCBzaGVcbmFubm91bmNlZCBpdCB3YXNuXHUyMDE5dCB0aGUgc2FtZSB0cmFja2luZyBudW1iZXIuIFNoZVx1MjAxOWQgYmVlbiBkb2luZyBhIHNjaG9vbCBwcm9qZWN0XG5vbiBjb3VudGVyZmVpdCBiaWxscyBhbmQgbm90ZWQgdGhhdCB0aGUgbmV3ICQyMCBiaWxsIGRpZG5cdTIwMTl0IGhhdmUgcmFpc2VkIGluayBvbiB0aGVcbmxhcmdlIG51bWJlciBvZiB0aGUgYmlsbCBsaWtlIGl0IHNob3VsZCBoYXZlLiBTaGUgdG9sZCBoZXIgZmF0aGVyLCB3aG8gYWxlcnRlZFxuc2VjdXJpdHkuIFdpdHQgd2FzIGZvdW5kIHdpdGggYSBzdGFjayBvZiBmYWtlIHR3ZW50aWVzIGluIGhpcyBwb3NzZXNzaW9uLiBBbHRob3VnaFxuXGZ0aGlzIGRvZXMgbm90IGhhcHBlbiByZWd1bGFybHksIHBvbGljZSB3YXJuIGZlc3RpdmFsIGdvZXJzIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVpclxubW9uZXkuIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiTmV3cyBJdGVtIiwiZHVyYXRpb24iOjY3LCJtZWRpYVR5cGUiOiJhdWRpbyIsIm1lZGlhSW5zdHJ1Y3Rpb24iOiJMaXN0ZW4gdG8gdGhlIGZvbGxvd2luZyBuZXdzIGl0ZW0uIFlvdSB3aWxsIGhlYXIgaXQgb25seSBvbmNlLiIsInRpbWVNaW51dGVzIjoyLCJxdWVzdGlvbnMiOlt7Im4iOjEsInN0ZW0iOiJPbmUgb2YgdGhlIG1hZ2ljaWFuXHUyMDE5cyB0cmlja3MgaW52b2x2ZWQiLCJvcHRpb25zIjpbImdpdmluZyBhd2F5IGEgJDIwIGJpbGwuIiwiY29weWluZyBhICQyMCBiaWxsLiIsIm1ha2luZyBhICQyMCBiaWxsIGRpc2FwcGVhci4iLCJ0ZWFyaW5nIHVwIGEgJDIwIGJpbGwuIl0sImtleSI6M30seyJuIjoyLCJzdGVtIjoiQmVmb3JlIGdpdmluZyB0aGUgbWFnaWNpYW4gbW9uZXksIFBhdHJpY2lhIiwib3B0aW9ucyI6WyJhc2tlZCBoZXIgZmF0aGVyIGZvciBhbm90aGVyICQyMCBiaWxsLiIsInRvb2sgYSBwaWN0dXJlIG9mIGhlciAkMjAgYmlsbC4iLCJ0b29rIGEgcGljdHVyZSBvZiB0aGUgbWFnaWNpYW4uIiwid3JvdGUgZG93biB0aGUgc2VyaWFsIG51bWJlci4iXSwia2V5IjoxfSx7Im4iOjMsInN0ZW0iOiJQYXRyaWNpYSBub3RpY2VkIHRoYXQgdGhlIG5ldyBiaWxsIiwib3B0aW9ucyI6WyJoYWQgZGlmZmVyZW50IG51bWJlcnMuIiwiaGFkIGJpZ2dlciBudW1iZXJzLiIsImhhZCBhIHNlcmlhbCBudW1iZXIuIiwiaGFkIHRoZSBzYW1lIG51bWJlci4iXSwia2V5IjowfSx7Im4iOjQsInN0ZW0iOiJQYXRyaWNpYSBrbmV3IGFib3V0IGNvdW50ZXJmZWl0IGZyb20iLCJvcHRpb25zIjpbImEgY291cnNlIG9uIGN1cnJlbmN5LiIsImEgbXVzZXVtIHRvdXIuIiwiYSBzY2hvb2wgcHJvamVjdC4iLCJ0cmFpbmluZyBpbiBmYWtlIG1vbmV5LiJdLCJrZXkiOjJ9LHsibiI6NSwic3RlbSI6IlRoZSBtYWdpY2lhbiB3YXMgaW4gdHJvdWJsZSBiZWNhdXNlIGhlIiwib3B0aW9ucyI6WyJzdG9sZSBtb25leSBmcm9tIHRoZSBiYW5rLiIsInN0b2xlIG1vbmV5IGZyb20gaGlzIGF1ZGllbmNlLiIsInRvcmUgYSAkMjAgYmlsbCBpbnRvIHBpZWNlcy4iLCJ1c2VkIFBhdHJpY2lhXHUyMDE5cyAkMjAgYmlsbCBpbiBoaXMgc2hvdy4iXSwia2V5IjoxfV19XX0seyJuYW1lIjoiUGFydCA1OiBMaXN0ZW5pbmcgdG8gYSBEaXNjdXNzaW9uIiwiaGVhZGVyVGl0bGUiOiJTZXQgNyBcdTIwMTMgUHJhY3RpY2UgVGVzdCAyIFx1MjAxMyBMaXN0ZW5pbmcgUGFydCA1OiBMaXN0ZW5pbmcgdG8gYSBEaXNjdXNzaW9uIiwiaW50cm9UaXRsZSI6IllvdSB3aWxsIHdhdGNoIGEgZGlzY3Vzc2lvbiBhbW9uZyB0aHJlZSBjb2xsZWFndWVzLiBUaGVyZSBhcmUgdHdvIHdvbWVuIGFuZCBvbmUgbWFuLiBUaGV5IGFyZSBpbiBhIG1lZXRpbmcgcm9vbSBhdCB0aGVpciB3b3JrcGxhY2UuIiwiaW50cm9CdWxsZXRzIjpbIllvdSB3aWxsIHdhdGNoIHRoZSBkaXNjdXNzaW9uIG9ubHkgb25jZS4iLCJJdCBpcyBhYm91dCAxLjUgdG8gMiBtaW51dGVzIGxvbmcuIl0sInFJbnN0cnVjdGlvbiI6IkNob29zZSB0aGUgYmVzdCBhbnN3ZXIgdG8gZWFjaCBxdWVzdGlvbiBmcm9tIHRoZSBkcm9wLWRvd24gbWVudS4iLCJ0cmFuc2NyaXB0IjoiWW91IHdpbGwgd2F0Y2ggYSBkaXNjdXNzaW9uIGFtb25nIHRocmVlIGNvbGxlYWd1ZXMuIFRoZXJlIGFyZSB0d28gd29tZW4gYW5kXG5vbmUgbWFuLiBUaGV5IGFyZSBpbiBhIG1lZXRpbmcgcm9vbSBhdCB0aGVpciB3b3JrcGxhY2UuXG5cbkVyaWM6IEhleSBJc2FiZWxsYSwgTWFyaWUuIFNvcnJ5IElcdTIwMTltIGxhdGUuIEhleSwgSSBoZWFyIG91ciBjb21wYW55IGlzIHRoaW5raW5nXG5hYm91dCBoYXZpbmcgYSBmdW5kcmFpc2VyIGZvciB0aGUgY2hpbGRyZW4ncyBob3NwaXRhbC4gSSBob3BlIHNvLCBhcyBpdCdzIGEgZ3JlYXQgY2F1c2UuXG5JXHUyMDE5bSByZWFkeSB0byBnZXQgY3JhY2tpbmchXG5Jc2FiZWxsYTogICAgSVx1MjAxOW0gZ2xhZCB0byBoZWFyIHlvdXIgZW50aHVzaWFzbSEgWWVzLCBpdFx1MjAxOXMgb3VyIHRlYW1cdTIwMTlzIHR1cm4gdG8gb3JnYW5pemVcbnRoZSBmdW5kcmFpc2VyLiBPdXIgbWFuYWdlciB0aGlua3MgYSB3b3J0aHkgcmVjaXBpZW50IGlzIHRoZSBjaGlsZHJlbidzIGhvc3BpdGFsXG5iZWNhdXNlIHNvbWUgb2YgdGhlIHdhcmRzIG5lZWQgcmVmdXJiaXNoaW5nLlxuRXJpYzogSG1tLCB0aGF0XHUyMDE5cyBpbnRlcmVzdGluZy4gTXkgd2lmZVx1MjAxOXMgYSBudXJzZSB0aGVyZSBhbmQgc2hlIG1lbnRpb25lZCB1cC10by1cbmRhdGUgZXF1aXBtZW50IGlzIGEgcHJpb3JpdHkuIEJ1dCBJXHUyMDE5bSBub3Qgc3VyZSB3aGF0IGVxdWlwbWVudCB0aGF0IGlzOyBJIGNvdWxkIGNoZWNrXG5hbmQgZmluZCBvdXQuXG5Jc2FiZWxsYTogICAgICBPSywgd2h5IGRvblx1MjAxOXQgd2Ugc2VlIGFib3V0IGNoYW5naW5nIHRoZSBwdXJwb3NlIGFuZCBhaW0gYXQgcmFpc2luZ1xubW9uZXkgZm9yIHRoZSBjaGlsZHJlbidzIGhvc3BpdGFsLCBidXQgdGhleSBjYW4gdXNlIGl0IGFjY29yZGluZyB0byB0aGVpciBwcmlvcml0aWVzXG5saXN0LiBJcyB0aGF0IGJldHRlcj9cbk1hcmllOiAgICAgIFllcywgbXVjaCBiZXR0ZXIsIElzYWJlbGxhLCBhcyB0aGF0IGdpdmVzIHVzIG1vcmUgZmxleGliaWxpdHkuIEFyZSB3ZVxuZ29pbmcgdG8gaGF2ZSBhIHNpbGVudCBhdWN0aW9uP1xuRXJpYzogV2hhdFx1MjAxOXMgYSBzaWxlbnQgYXVjdGlvbj9cbk1hcmllOiAgICAgICAgV2VsbCwgaXRcdTIwMTlzIGEgbG90IGxlc3MgY29uZnJvbnRhdGlvbmFsIHRoYW4gYSByZWd1bGFyIGF1Y3Rpb24uIEVhY2ggaXRlbSBpc1xubnVtYmVyZWQgYW5kIGRpc3BsYXllZC4gQW5kIHRoZXJlJ3MgYSBzdGFydGluZyBwcmljZSBmb3IgZWFjaCBiaWQuIElmIHlvdSdyZVxuaW50ZXJlc3RlZCBpbiB0aGUgaXRlbSwgeW91IHB1dCBhbiBhbW91bnQgZG93biBvbiBhIHBpZWNlIG9mIHBhcGVyXHUyMDE0cGx1cyB5b3VyXG5uYW1lIGFuZCBwaG9uZSBudW1iZXJcdTIwMTRhbmQgdGhlbiBmb2xkIHRoZSBwaWVjZSBvZiBwYXBlciBpbiBoYWxmLCBhbmQgcHV0IGl0IGludG9cbnRoZSBiaWRkaW5nIGphci4gVGhlIGhpZ2hlc3QgYmlkIGF0IHRoZSBlbmQgd2lucy5cbklzYWJlbGxhOiAgICBCdXQgSSB3YXMgdGhpbmtpbmcgbWF5YmUgd2UgY291bGQgY2hhbmdlIHRoZSBiaWRkaW5nIHN5c3RlbS4gV2VcbmNvdWxkIGFzc2lnbiBiaWRkZXJzIGEgcGVyc29uYWwgY29kZSBudW1iZXIuIFRoZXkgd3JpdGUgdGhlaXIgbnVtYmVyLCBhbmQgdGhlaXJcbmJpZCwgb24gYSBjaGFydCBuZXh0IHRvIHRoZSBpdGVtIHRoYXQgdGhleSB3YW50LiBFdmVyeW9uZSB3b3VsZCBzZWUgdGhlIGNoYXJ0IGFuZFxuXGZ0aGUgYmlkZGluZyBhbW91bnRzLCBidXQgbm8gbmFtZXMuIFRoZSB0cmFkaXRpb25hbCBzaWxlbnQgYXVjdGlvbiBkcml2ZXMgbWUgY3JhenlcbmJlY2F1c2UgSSBuZXZlciBrbm93IGhvdyBtdWNoIHRvIGJpZC5cbk1hcmllOiAgICAgICAgQWx0aG91Z2gsIEkgd29uZGVyIGlmIHBlb3BsZSB3aWxsIGJlIGluY2xpbmVkIHRvIGJpZCBsZXNzIGJlY2F1c2UgdGhleVxuY2FuIHNlZSB3aGF0IGV2ZXJ5Ym9keSBlbHNlIGlzIGJpZGRpbmcuIFdoYXQgSSByZWFsbHkgbGlrZSBhYm91dCBhIHRyYWRpdGlvbmFsXG5hdWN0aW9uIGlzIHRoYXQgaWYgeW91XHUyMDE5cmUgcmVhbGx5IGludGVyZXN0ZWQgaW4gYW4gaXRlbSwgeW91IGp1c3QgYmlkIHJlYWxseSBoaWdoIHRvXG5lbnN1cmUgdGhhdCB5b3UgZ2V0IGl0LlxuRXJpYzogT24gdGhlIG90aGVyIGhhbmQsIGlmIHR3byBvciB0aHJlZSBwZW9wbGUgd2FudCBpdCwgdGhleSBjYW4ga2VlcCBiaWRkaW5nXG5oaWdoZXIgYW5kIGhpZ2hlciBpZiB0aGV5IGtub3cgdGhlIGFtb3VudCBhbHJlYWR5IGJpZC5cbklzYWJlbGxhOiAgICAgRXhhY3RseS4gQW5kIHRoZSByZXZpc2VkIHN5c3RlbSB3b3VsZCBzYXZlIGV2ZXJ5b25lIGEgbG90IG9mIHRpbWUsXG50b28uIFdlIHdvdWxkblx1MjAxOXQgaGF2ZSB0byBzb3J0IHRocm91Z2ggYWxsIHRoZSBiaWQgcGFwZXJzLiBUaGUgaGlnaGVzdCBiaWQgd291bGQgYmVcbmNyeXN0YWwgY2xlYXIgYmVjYXVzZSB3ZSBpZGVudGlmeSB0aGUgd2lubmluZyBiaWRkZXIgYnkgY2hlY2tpbmcgb3VyIHBlcnNvbmFsXG5jb2RlcyBsaXN0LiBUaGVuIGJ1eWVycyBwYXkgZm9yIHRoZSBpdGVtIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW5pbmcsIGFuZCB0aGV5IHRha2UgaXRcbndpdGggdGhlbS5cbk1hcmllOiAgICAgIFdlbGwsIGRvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGRlY2lzaW9uIG91cnNlbHZlcywgb3IgY291bGQgd2UgY29uc3VsdFxudGhlIG1hbmFnZXI\/IEkgdGhpbmsgd2UgbmVlZCBhIGJ1eS1pbiBmcm9tIGV2ZXJ5b25lIGluIG9yZGVyIHRvIG1ha2Ugc3VjaCBhIGJpZ1xuY2hhbmdlLlxuSXNhYmVsbGE6ICAgSSdsbCB0YWxrIHRvIHRoZSBtYW5hZ2VyIHRoaXMgYWZ0ZXJub29uLiBMZXQncyBtZWV0IGF0IHRoZSBzYW1lIHRpbWVcbnRvbW9ycm93IHRvIHN0YXJ0IHBsYW5uaW5nIHRoZSBkZXRhaWxzLlxuTWFyaWUgYW5kIEVyaWM6ICAgIE9LLiIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkRpc2N1c3Npb24gKHZpZGVvKSIsImR1cmF0aW9uIjoxNjAsIm1lZGlhVHlwZSI6InZpZGVvIiwibWVkaWFJbnN0cnVjdGlvbiI6IldhdGNoIHRoZSBkaXNjdXNzaW9uLiBZb3Ugd2lsbCB3YXRjaCBpdCBvbmx5IG9uY2UuIiwidGltZU1pbnV0ZXMiOjIsInF1ZXN0aW9ucyI6W3sibiI6MSwic3RlbSI6IldoYXQgYXNwZWN0IG9mIHRoZSBmdW5kcmFpc2VyIGFyZSB0aGUgdGhyZWUgY29sbGVhZ3VlcyBkZWJhdGluZz8iLCJvcHRpb25zIjpbInRoZSByZWNpcGllbnQgb2YgdGhlIGZ1bmRzIiwidGhlIGZvcm1hdCBvZiB0aGUgZXZlbnQiLCJ0aGUgc2NoZWR1bGUgb2YgdGhlIGF1Y3Rpb24iLCJ0aGUgcHVycG9zZSBvZiB0aGUgZnVuZHJhaXNlciJdLCJrZXkiOjF9LHsibiI6Miwic3RlbSI6IldoeSBhcmUgdGhlIHRocmVlIGNvbGxlYWd1ZXMgcGxhbm5pbmcgYSBmdW5kcmFpc2VyPyIsIm9wdGlvbnMiOlsiRXJpY1x1MjAxOXMgd2lmZSBhc2tlZCB0aGUgY29tcGFueSBmb3IgaGVscC4iLCJUaGUgaG9zcGl0YWwgd2FyZHMgYXJlIGluIGJhZCBjb25kaXRpb24uIiwiVGhlaXIgY29tcGFueSByZWd1bGFybHkgb3JnYW5pemVzIGZ1bmRyYWlzZXJzLiIsIlRoZSBlbXBsb3llZXMgZW5qb3kgcGFydGljaXBhdGluZyBpbiBzaWxlbnQgYXVjdGlvbnMuIl0sImtleSI6Mn0seyJuIjozLCJzdGVtIjoiV2hhdCBzdGFnZSBhcmUgdGhlIHRocmVlIGNvbGxlYWd1ZXMgYXQgaW4gdGhlaXIgcGxhbm5pbmc\/Iiwib3B0aW9ucyI6WyJnZW5lcmF0aW5nIGlkZWFzIiwiZmluYWxpemluZyBkZXRhaWxzIiwiZGlzdHJpYnV0aW5nIHRhc2tzIiwiYXdhaXRpbmcgYXBwcm92YWwiXSwia2V5IjowfSx7Im4iOjQsInN0ZW0iOiJXaGF0IGlzIEVyaWMgcGxlYXNlZCBhYm91dD8iLCJvcHRpb25zIjpbInRoZSBuZXcgZnVuZHJhaXNpbmcgc3RyYXRlZ3kiLCJ0aGUgY2hvc2VuIHJlY2lwaWVudCBvZiB0aGUgZnVuZHMiLCJ0aGUgcG9zdHBvbmVkIG1lZXRpbmcgdGltZSIsInRoZSB0cmFkaXRpb25hbCBhdWN0aW9uIHN5c3RlbSJdLCJrZXkiOjF9LHsibiI6NSwic3RlbSI6IldoaWNoIHN0YXRlbWVudCBpcyB0cnVlIGFib3V0IGEgdHJhZGl0aW9uYWwgc2lsZW50IGF1Y3Rpb24\/Iiwib3B0aW9ucyI6WyJCaWRkZXJzIGtub3cgaG93IG11Y2ggZWFjaCBwZXJzb24gYmlkcy4iLCJUaGUgaGlnaGVzdCBiaWRkZXJzIGFyZSBub3RpZmllZCBpbW1lZGlhdGVseS4iLCJJdCByZXF1aXJlcyBjaG9vc2luZyBhbiBpZGVudGlmaWNhdGlvbiBudW1iZXIuIiwiQmlkZGVycyBjYW4gbWFrZSBoaWdoIGJpZHMgZm9yIGl0ZW1zIHRoZXkgd2FudC4iXSwia2V5IjozfSx7Im4iOjYsInN0ZW0iOiJXaHkgZG9lcyBNYXJpZSBkaXNsaWtlIHRoZSBjaGFuZ2UgdGhhdCBJc2FiZWxsYSBzdWdnZXN0ZWQ\/Iiwib3B0aW9ucyI6WyJJdCB3aWxsIG1ha2UgdGhlIGF1Y3Rpb24gbG9uZ2VyLiIsIkl0IHdpbGwgY29uZnVzZSBleHBlcmllbmNlZCBiaWRkZXJzLiIsIkl0IHdpbGwgZW5jb3VyYWdlIGJpZGRlcnMgdG8gYmlkIGxvdy4iLCJJdCB3aWxsIG1ha2UgdGhlIGF1Y3Rpb24gbGVzcyBlZmZpY2llbnQuIl0sImtleSI6Mn0seyJuIjo3LCJzdGVtIjoiV2h5IGRvZXMgSXNhYmVsbGEgZGlzbGlrZSB0cmFkaXRpb25hbCBzaWxlbnQgYXVjdGlvbnM\/Iiwib3B0aW9ucyI6WyJUaGUgc3lzdGVtIGlzIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLiIsIlRoZSBiaWRkaW5nIGlzIHRvbyBjb21wZXRpdGl2ZS4iLCJCaWRkZXJzXHUyMDE5IG5hbWVzIGFyZSBtYWRlIHB1YmxpYy4iLCJJdCB0YWtlcyB0b28gbG9uZyB0byBwcm9jZXNzIHRoZSByZXN1bHRzLiJdLCJrZXkiOjN9LHsibiI6OCwic3RlbSI6IkhvdyB3aWxsIHRoZSBncm91cFx1MjAxOXMgaW5kZWNpc2lvbiBiZSByZXNvbHZlZD8iLCJvcHRpb25zIjpbIlRoZXkgd2lsbCBkbyBmdXJ0aGVyIHJlc2VhcmNoLiIsIlRoZXkgd2lsbCB2b3RlIG9uIHRoZSBtYXR0ZXIuIiwiVGhleSB3aWxsIHJlcXVlc3Qgb3V0c2lkZSBpbnB1dC4iLCJUaGV5IHdpbGwgY29udGludWUgdGhlIGRlYmF0ZSBsYXRlci4iXSwia2V5IjoyfV19XX0seyJuYW1lIjoiUGFydCA2OiBMaXN0ZW5pbmcgZm9yIFZpZXdwb2ludHMiLCJoZWFkZXJUaXRsZSI6IlNldCA3IFx1MjAxMyBQcmFjdGljZSBUZXN0IDIgXHUyMDEzIExpc3RlbmluZyBQYXJ0IDY6IExpc3RlbmluZyBmb3IgVmlld3BvaW50cyIsImludHJvVGl0bGUiOiJZb3Ugd2lsbCBoZWFyIGEgcHJlc2VudGF0aW9uIGFib3V0IGNvbW11bml0eSBkZXZlbG9wbWVudC4iLCJpbnRyb0J1bGxldHMiOlsiWW91IHdpbGwgaGVhciB0aGUgcmVwb3J0IG9ubHkgb25jZS4iLCJJdCBpcyBhYm91dCAzIG1pbnV0ZXMgbG9uZy4iXSwicUluc3RydWN0aW9uIjoiQ2hvb3NlIHRoZSBiZXN0IHdheSB0byBjb21wbGV0ZSBlYWNoIHN0YXRlbWVudCBmcm9tIHRoZSBkcm9wLWRvd24gbWVudS4iLCJ0cmFuc2NyaXB0IjoiWW91IHdpbGwgaGVhciBhIHByZXNlbnRhdGlvbiBhYm91dCBjb21tdW5pdHkgZGV2ZWxvcG1lbnQuXG5cbkdvb2QgbW9ybmluZywgYW5kIHdlbGNvbWUgdG8gTW9uZGF5XHUyMDE5cyBlZGl0aW9uIG9mIHRoZSBEYWlseSBCdXp6LiBUaGlzIGlzIE5hZGlhXG5Db29wZXIgcmVwb3J0aW5nLiBDYWxnYXJ5IGNpdHkgY291bmNpbCBpcyBjdXJyZW50bHkgbmVnb3RpYXRpbmcgYSBjb250cm92ZXJzaWFsXG5wcm9wb3NhbCBpbiByZWxhdGlvbiB0byB0aGUgZGVtb2xpdGlvbiBvZiBIZW5sZXkgQ2FyIEZhY3RvcnksIGFuIGFiYW5kb25lZCBmYWN0b3J5XG5sb2NhdGVkIGF0IHRoZSBlYXN0IGVkZ2Ugb2YgdG93bi4gRGV2ZWxvcGVyIEdlb3JnZSBOZWxzb24sIG9mIE5lbHNvblxuRGV2ZWxvcG1lbnQgQ29tcGFueSwgZmVlbHMgdGhhdCB0aGUgYXJlYSBoYXMgc2lnbmlmaWNhbnQgZWNvbm9taWMgcG90ZW50aWFsIGFuZFxuaGFzIHB1dCBmb3J3YXJkIGEgcHJvcG9zYWwgdG8gZGV2ZWxvcCBzZXZlcmFsIGFwYXJ0bWVudCBidWlsZGluZ3MgYW5kIHJldGFpbCBzaG9wc1xuXGZvbiB0aGUgbmV3bHkgY2xlYXJlZCBsYW5kLiBBY2NvcmRpbmdseSwgaGUgaGFzIHJlcXVlc3RlZCB0aGF0IHRoZSBhcmVhIGJlIHJlem9uZWRcbmZvciByZXNpZGVudGlhbCBhbmQgcmV0YWlsIHNwYWNlLlxuXG5Ib3dldmVyLCBub3QgYWxsIG1lbWJlcnMgb2YgdGhlIGNvbW11bml0eSBhcmUgaGFwcHkgd2l0aCB0aGlzIHJlcXVlc3QuIEVsZWFub3JcbldlbnR3b3J0aCwgYSBoaWdoIHNjaG9vbCB0ZWFjaGVyIGFuZCBtb3RoZXIgb2YgdHdvLCBoYXMgc3BlYXJoZWFkZWQgYSBjYW1wYWlnblxuYWdhaW5zdCBmdXJ0aGVyIGRldmVsb3BtZW50IGluIHRoZSBhcmVhLCBzdGF0aW5nIHRoYXQgY29tbXVuaXR5LCByYXRoZXIgdGhhblxuZWNvbm9taWMgaW50ZXJlc3RzIHNob3VsZCB0YWtlIHByZWNlZGVuY2UuIFNoZSBhcmd1ZXMgdGhhdCB0aGUgYXJlYSBpcyBwcmltYXJpbHlcbmNvbXBvc2VkIG9mIGZhbWlsaWVzIHdpdGggY2hpbGRyZW4gd2hvIG5lZWQgYSBzYWZlIHBsYWNlIHRvIHBsYXkgYW5kIHRoYXQsIGFzIGl0IGlzLFxudGhlcmUgaXMgYWxyZWFkeSBpbnN1ZmZpY2llbnQgZ3JlZW4gc3BhY2UuIEZ1cnRoZXJtb3JlLCBzaGUgZW1waGFzaXplcyB0aGF0IHRoZXlcbmxpdmUgaW4gYSB0aWdodC1rbml0IGNvbW11bml0eSBhbmQgZmVhcnMgdGhhdCBhIG1vcmUgZGVuc2VseSBwb3B1bGF0ZWRcbm5laWdoYm91cmhvb2QgY291bGQgcHV0IHRoaXMgYXQgcmlzaywgc2luY2UgbGl2aW5nIGluIGEgaGlnaGx5IHBvcHVsYXRlZCBhcmVhIG9mdGVuXG5tYWtlcyBpdCBsZXNzIGxpa2VseSB0aGF0IG9uZSB3aWxsIGtub3cgdGhlaXIgbmVpZ2hib3Vycy4gQXMgc3VjaCwgV2VudHdvcnRoIGFuZFxuaGVyIHN1cHBvcnRlcnMgd291bGQsIGluc3RlYWQsIGxpa2UgdG8gc2VlIHRoZSBvbGQgY2FyIGZhY3RvcnkgcmVwbGFjZWQgYnkgYSBsYXJnZVxucGFyay5cblxuTmVsc29uIGhhcyBjb3VudGVyZWQgc3VjaCBjcml0aWNpc21zIGJ5IHN0YXRpbmcgdGhhdCBoaXMgcHJvcG9zYWwgZG9lcywgaW4gZmFjdCxcbmxlYXZlIGFkZXF1YXRlIHJvb20gZm9yIGdyZWVuIHNwYWNlLiBJbmNsdWRlZCBpbiB0aGUgcHJvcG9zYWwsIGlzIHRoZSBjbGVhbmluZyB1cFxub2YgU3RhbmxleSBjcmVlaywgYSBuZWFyYnkgY3JlZWsgd2hpY2ggaGFzIGxvbmcgYmVlbiBjbG9nZ2VkIHdpdGggZ2FyYmFnZS4gVGhlXG5yZWhhYmlsaXRhdGVkIGNyZWVrIHdvdWxkIHRoZW4gYmUgdHVybmVkIGludG8gYSBuYXR1cmUgd2Fsa3dheSBmb3IgcmVzaWRlbnRzLlxuQWRkaXRpb25hbGx5LCBOZWxzb24gcG9pbnRzIG91dCB0aGF0IHRoZSBkZXZlbG9wbWVudCBvZiBoaWdoLWRlbnNpdHkgYXBhcnRtZW50XG5idWlsZGluZ3MgYWN0dWFsbHkgaGVscHMgcHJlc2VydmUgZ3JlZW4gc3BhY2UgYnkgcHJldmVudGluZyB1cmJhbiBzcHJhd2wuXG5GdXJ0aGVybW9yZSwgd2l0aCByZWdhcmRzIHRvIHJldGFpbCBvcGVyYXRpb25zLCBoZSBwbGFucyBmb3Igbm8gbW9yZSB0aGFuIGZvdXIgb3JcbmZpdmUgc21hbGwsIGZhbWlseS1vd25lZCBzaG9wcy4gVGhpcywgaGUgaW5zaXN0cywgd291bGQgYWN0dWFsbHkgaGVscCB0byBidWlsZFxuY29tbXVuaXR5IGJ5IG1haW50YWluaW5nIGEgbG9jYWxpemVkIGVjb25vbXkuXG5cbkNpdHkgQ291bmNpbCBtZW1iZXIgRW1tYSBPcnIgd29uZGVycyBpZiB0aGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBjb21wcm9taXNlXG53aXRoaW4gdGhlIG9wcG9zaW5nIGNhbXBzLiBTaGUgYmVsaWV2ZXMgdGhlIGZhY3RvcnkgYXJlYSBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZFxuYm90aCBhIG1lZGl1bS1zaXplZCBwYXJrIGFzIHdlbGwgYXMgc2V2ZXJhbCBhcGFydG1lbnQgYnVpbGRpbmdzIG9yIHNob3BzLiBTaW5jZVxudGhlIGNyZWVrIHJ1bnMgaW4gYSBmYWlybHkgc3RyYWlnaHQgbGluZSBhbG9uZyB0aGUgbm9ydGggc2lkZSBvZiB0aGUgZmFjdG9yeSwgc2hlXG5zdWdnZXN0cyB0aGF0IHRoZSBwYXJrIGJlIGJ1aWx0IGFsb25nc2lkZSB0aGUgY3JlZWsuIFRoaXMgd291bGQgbWFpbnRhaW4gYWRlcXVhdGVcbmdyZWVuIHNwYWNlIGZvciBib3RoIGEgd2Fsa2luZyB0cmFpbCBhcyB3ZWxsIGFzIGEgcGxheSBhcmVhIGZvciBjaGlsZHJlbiBhbmQgeW91dGguXG5UaGUgcmVzdCBvZiB0aGUgbGFuZCBjb3VsZCB0aGVuIGJlIHJlem9uZWQgZm9yIHJlc2lkZW50aWFsIGFuZCByZXRhaWwgcHVycG9zZXMuIFNoZSBpc1xuY3VycmVudGx5IGRpc2N1c3NpbmcgaGVyIHByb3Bvc2FsIHdpdGggYm90aCBwYXJ0aWVzLiIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IlJlcG9ydCIsImR1cmF0aW9uIjoxNzEsIm1lZGlhVHlwZSI6ImF1ZGlvIiwibWVkaWFJbnN0cnVjdGlvbiI6Ikxpc3RlbiB0byB0aGUgZm9sbG93aW5nIHJlcG9ydC4gWW91IHdpbGwgaGVhciBpdCBvbmx5IG9uY2UuIiwidGltZU1pbnV0ZXMiOjIsInF1ZXN0aW9ucyI6W3sibiI6MSwic3RlbSI6Ik5lbHNvbiBoYXMgcmVxdWVzdGVkIHRoYXQgY2l0eSBjb3VuY2lsIiwib3B0aW9ucyI6WyJhcHByb3ZlIGEgcGxhbiB0byByZWRldmVsb3AgdGhlIHZhY2FudCBsYW5kLiIsIm1haW50YWluIHRoZSB6b25pbmcgYnlsYXcgZm9yIGFuIGFyZWEgb2YgbGFuZC4iLCJ3b3JrIHRvIHJlZHVjZSB1cmJhbiBzcHJhd2wuIiwiY2xlYW4gdXAgYSBwb2xsdXRlZCBsb2NhbCBjcmVlay4iXSwia2V5IjowfSx7Im4iOjIsInN0ZW0iOiJBY2NvcmRpbmcgdG8gdGhlIG1vdGhlciBvZiB0d28sIGhpZ2gtZGVuc2l0eSBhcGFydG1lbnQgYnVpbGRpbmdzIiwib3B0aW9ucyI6WyJhcmUgYSBnb29kIG9wdGlvbiBmb3IgZmFtaWxpZXMgd2l0aCBjaGlsZHJlbi4iLCJjYW4gaGVscCB0byBwcmVzZXJ2ZSBncmVlbiBzcGFjZS4iLCJjb3VsZCBiZSBidWlsdCBpbiBhZGRpdGlvbiB0byBhIHBhcmsuIiwiY291bGQgcHV0IGhlciBjb21tdW5pdHkgYXQgcmlzay4iXSwia2V5IjozfSx7Im4iOjMsInN0ZW0iOiJTdGFubGV5IENyZWVrIiwib3B0aW9ucyI6WyJoYXMgYmVlbiByZWhhYmlsaXRhdGVkIGJ5IHRoZSBzdXJyb3VuZGluZyBjb21tdW5pdHkuIiwiaXMgYW4gb2JzdGFjbGUgdG8gZGV2ZWxvcG1lbnQgaW4gdGhlIGFyZWEuIiwiaXMgZW5kYW5nZXJlZCBieSB0aGUgZGV2ZWxvcG1lbnQgcHJvcG9zYWwuIiwibWF5IGJlIGRldmVsb3BlZCBpbnRvIGEgbmF0dXJlIHdhbGt3YXkuIl0sImtleSI6M30seyJuIjo0LCJzdGVtIjoiTmVsc29uIERldmVsb3BtZW50IENvbXBhbnkgZW52aXNpb25zIGEiLCJvcHRpb25zIjpbImJ1c2luZXNzIGNvbW11bml0eSB3aXRoIHNldmVyYWwgbGFyZ2UgcmV0YWlsIGNoYWluIHN0b3Jlcy4iLCJjb21wYWN0IGNvbW11bml0eSB3aXRoIGEgdmlicmFudCBsb2NhbCBlY29ub215LiIsIm1peGVkIGNvbW11bml0eSBjb21iaW5pbmcgaGlnaC1yaXNlIG9mZmljZXMgYW5kIGFwYXJ0bWVudHMuIiwic3ByYXdsaW5nIHJlc2lkZW50aWFsIGNvbW11bml0eSBmb3IgZmFtaWxpZXMgd2l0aCBjaGlsZHJlbi4iXSwia2V5IjoxfSx7Im4iOjUsInN0ZW0iOiJUaGUgY2l0eSBjb3VuY2lsbG9yIGJlbGlldmVzIHRoYXQiLCJvcHRpb25zIjpbImJvdGggZWNvbm9taWMgYW5kIGNvbW11bml0eSBpbnRlcmVzdHMgY2FuIGJlIHNhdGlzZmllZC4iLCJkZXZlbG9wbWVudCBvZiB0aGUgYXJlYSBtYXkgbGVhZCB0byBncmVlbmxhbmQgZXhwYW5zaW9uLiIsIm1vcmUgcmV6b25pbmcgc2hvdWxkIGJlIGRvbmUgYWxvbmcgdGhlIG5vcnRoIGJhbmsgb2YgdGhlIHJpdmVyLiIsIlN0YW5sZXkgQ3JlZWsgaXMgYSBwcm9ibGVtYXRpYyBsb2NhdGlvbiBmb3IgYSBwYXJrLiJdLCJrZXkiOjB9LHsibiI6Niwic3RlbSI6IklmIGNpdHkgY291bmNpbCBhcHByb3ZlcyBOZWxzb25cdTIwMTlzIGN1cnJlbnQgcHJvcG9zYWwsIiwib3B0aW9ucyI6WyJNb3RoZXIgb2YgdHdvLCBFbGVhbm9yIFdlbnR3b3J0aCwgd2lsbCBiZSBkaXNhcHBvaW50ZWQuIiwiQ2l0eSBDb3VuY2lsbG9yLCBFbW1hIE9yciwgd2lsbCBmZWVsIHRoZSBuZWVkIGZvciBtb3JlIG5lZ290aWF0aW9ucy4iLCJEZXZlbG9wZXIgTmVsc29uIHdpbGwgd29ycnkgYWJvdXQgdGhlIGJ1aWxkaW5nIGNvc3RzLiIsIlRoZSBjaGlsZHJlbiB3aWxsIGJlIGhhcHB5IHdpdGggdGhlaXIgbmV3IHBsYXkgYXJlYS4iXSwia2V5IjowfV19XX1dfTsKCnZhciBDRUxQSVBfWVQgPSB7IHZpZGVvSWQ6ICcnIH07ICAvKiBlLmcuICdkUXc0dzlXZ1hjUScgXHUyMDE0IFNldCA3IFRlc3QgMiBmdWxsIGxpc3RlbmluZyB2aWRlbyAqLwp2YXIgQ0xQX0NIQVBURVJTID0geyAnMC4wJzpbMCw1MjBdLCAnMC4xJzpbMCw1MjBdLCAnMC4yJzpbMCw1MjBdLCAnMS4wJzpbNTIwLDg1M10sICcyLjAnOls4NTMsMTI3Ml0sICczLjAnOlsxMjcyLDEzNjRdLCAnNC4wJzpbMTM2NCwxNTAzXSwgJzUuMCc6WzE1MDMsMTc1N10gfTsKCi8qIFRPRE86IHBsYWNlaG9sZGVyIG1hcHBpbmcgXHUyMDE0IHZlcmlmeSBhZ2FpbnN0IHRoZSBvZmZpY2lhbCBDRUxQSVAgc2NvcmUgY2hhcnQuICovCmZ1bmN0aW9uIGNsYkVzdGltYXRlKHJhdyl7CiAgaWYgKHJhdyA+PSAzNSkgcmV0dXJuIHsgbGV2ZWw6ICdDRUxQSVAgMTBcdTIwMTMxMicsIG5vdGU6ICdBZHZhbmNlZCBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDMwKSByZXR1cm4geyBsZXZlbDogJ0NFTFBJUCA5JywgICAgICAgIG5vdGU6ICdFZmZlY3RpdmUgcHJvZmljaWVuY3knIH07CiAgaWYgKHJhdyA+PSAyNykgcmV0dXJuIHsgbGV2ZWw6ICdDRUxQSVAgOCcsICAgICAgICBub3RlOiAnR29vZCBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDIyKSByZXR1cm4geyBsZXZlbDogJ0NFTFBJUCA3JywgICAgICAgIG5vdGU6ICdBZGVxdWF0ZSBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDE3KSByZXR1cm4geyBsZXZlbDogJ0NFTFBJUCA2JywgICAgICAgIG5vdGU6ICdEZXZlbG9waW5nIHByb2ZpY2llbmN5JyB9OwogIGlmIChyYXcgPj0gMTEpIHJldHVybiB7IGxldmVsOiAnQ0VMUElQIDUnLCAgICAgICAgbm90ZTogJ0FjcXVpcmluZyBwcm9maWNpZW5jeScgfTsKICByZXR1cm4gICAgICAgICAgICB7IGxldmVsOiAnQ0VMUElQIDQgb3IgYmVsb3cnLCAgIG5vdGU6ICdLZWVwIHByYWN0aWNpbmchJyB9Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT0gZW5naW5lID09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24oKXsKICB2YXIgcmVkdWNlZE1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhICYmIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CiAgdmFyIGNhdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBDYXQnKTsKICB2YXIgZG90c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscERvdHMnKTsKICB2YXIgdG9vbGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBUb29sYmFyJyk7CiAgdmFyIHJlc3VsdHNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBSZXN1bHRzJyk7CiAgdmFyIHNjb3JlQ2hpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBTY29yZUNoaXAnKTsKCiAgdmFyIFRPVEFMX1EgPSAwOwogIFRFU1RfREFUQS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHApeyBwLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24ocyl7IFRPVEFMX1EgKz0gcy5xdWVzdGlvbnMubGVuZ3RoOyB9KTsgfSk7CgogIHZhciBzY3JlZW5zID0gW107CiAgVEVTVF9EQVRBLnBhcnRzLmZvckVhY2goZnVuY3Rpb24ocGFydCwgcGkpewogICAgc2NyZWVucy5wdXNoKHsgdHlwZTogJ2ludHJvJywgcGk6IHBpIH0pOwogICAgcGFydC5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNlYywgc2kpewogICAgICBzY3JlZW5zLnB1c2goeyB0eXBlOiAnbWVkaWEnLCBwaTogcGksIHNpOiBzaSB9KTsKICAgICAgc2NyZWVucy5wdXNoKHsgdHlwZTogJ3EnLCBwaTogcGksIHNpOiBzaSB9KTsKICAgIH0pOwogIH0pOwogIHNjcmVlbnMucHVzaCh7IHR5cGU6ICdmaW5pc2gnIH0pOwoKICB2YXIgc3RhdGUgPSB7CiAgICBzdGFydGVkOiBmYWxzZSwKICAgIGlkeDogMCwKICAgIGFuc3dlcnM6IHt9LCAgICAgIC8qICJwaS5zaS5xaSIgLT4gb3B0aW9uIGluZGV4ICgwLTMpICovCiAgICBjaGVja2VkOiBmYWxzZSwKICAgIHRpbWVyT246IHRydWUKICB9OwogIHZhciBtZWRpYVRpbWVyID0gbnVsbCwgcVRpbWVyID0gbnVsbCwgcVJlbWFpbmluZyA9IDA7CiAgdmFyIHBvcHVwID0gbnVsbCwgb3BlblRyaWdnZXIgPSBudWxsOwoKICBmdW5jdGlvbiBxS2V5KHBpLCBzaSwgcWkpeyByZXR1cm4gcGkgKyAnLicgKyBzaSArICcuJyArIHFpOyB9CiAgZnVuY3Rpb24gZm10KHNlYyl7IHZhciBtID0gTWF0aC5mbG9vcihzZWMvNjApLCBzID0gc2VjICUgNjA7IHJldHVybiBtICsgJzonICsgKHMgPCAxMCA\/ICcwJyA6ICcnKSArIHM7IH0KICBmdW5jdGlvbiBlbCh0YWcsIGNscywgdGV4dCl7CiAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKICAgIGlmIChjbHMpIGUuY2xhc3NOYW1lID0gY2xzOwogICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkgZS50ZXh0Q29udGVudCA9IHRleHQ7CiAgICByZXR1cm4gZTsKICB9CiAgZnVuY3Rpb24gc2Nyb2xsVG9FbCh0YXJnZXQsIG9mZnNldCl7CiAgICB2YXIgeSA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSAob2Zmc2V0IHx8IDcwKTsKICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogeSwgYmVoYXZpb3I6IHJlZHVjZWRNb3Rpb24gPyAnYXV0bycgOiAnc21vb3RoJyB9KTsKICB9CiAgZnVuY3Rpb24gY2xlYXJUaW1lcnMoKXsKICAgIGlmIChtZWRpYVRpbWVyKXsgY2xlYXJJbnRlcnZhbChtZWRpYVRpbWVyKTsgbWVkaWFUaW1lciA9IG51bGw7IH0KICAgIGlmIChxVGltZXIpeyBjbGVhckludGVydmFsKHFUaW1lcik7IHFUaW1lciA9IG51bGw7IH0KICB9CiAgZnVuY3Rpb24gYW5zd2VyZWRDb3VudCgpeyByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUuYW5zd2VycykubGVuZ3RoOyB9CiAgZnVuY3Rpb24gdXBkYXRlU2NvcmVDaGlwKCl7CiAgICBpZiAoc3RhdGUuY2hlY2tlZCl7CiAgICAgIHNjb3JlQ2hpcC50ZXh0Q29udGVudCA9ICdTY29yZSAnICsgY29tcHV0ZVNjb3JlKCkudG90YWwgKyAnLycgKyBUT1RBTF9ROwogICAgfSBlbHNlIHsKICAgICAgc2NvcmVDaGlwLnRleHRDb250ZW50ID0gJ0Fuc3dlcmVkICcgKyBhbnN3ZXJlZENvdW50KCkgKyAnLycgKyBUT1RBTF9ROwogICAgfQogIH0KICBmdW5jdGlvbiBjb21wdXRlU2NvcmUoKXsKICAgIHZhciB0b3RhbCA9IDAsIHBlclBhcnQgPSBbXTsKICAgIFRFU1RfREFUQS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQsIHBpKXsKICAgICAgdmFyIGMgPSAwLCBuID0gMDsKICAgICAgcGFydC5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNlYywgc2kpewogICAgICAgIHNlYy5xdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbihxLCBxaSl7CiAgICAgICAgICBuKys7CiAgICAgICAgICBpZiAoc3RhdGUuYW5zd2Vyc1txS2V5KHBpLCBzaSwgcWkpXSA9PT0gcS5rZXkgLSAxKXsgYysrOyB0b3RhbCsrOyB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICBwZXJQYXJ0LnB1c2goeyBjb3JyZWN0OiBjLCB0b3RhbDogbiB9KTsKICAgIH0pOwogICAgcmV0dXJuIHsgdG90YWw6IHRvdGFsLCBwZXJQYXJ0OiBwZXJQYXJ0IH07CiAgfQoKICAvKiAtLS0tLS0tLS0tIGRyb3Bkb3duIHBvcHVwIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBjbG9zZVBvcHVwKCl7CiAgICBpZiAocG9wdXApeyBwb3B1cC5yZW1vdmUoKTsgcG9wdXAgPSBudWxsOyB9CiAgICBpZiAob3BlblRyaWdnZXIpeyBvcGVuVHJpZ2dlci5jbGFzc0xpc3QucmVtb3ZlKCdjbHAtb3BlbicpOyBvcGVuVHJpZ2dlciA9IG51bGw7IH0KICB9CiAgZnVuY3Rpb24gb3BlblBvcHVwKHRyaWdnZXIsIHBpLCBzaSwgcWkpewogICAgaWYgKG9wZW5UcmlnZ2VyID09PSB0cmlnZ2VyKXsgY2xvc2VQb3B1cCgpOyByZXR1cm47IH0KICAgIGNsb3NlUG9wdXAoKTsKICAgIHZhciBxID0gVEVTVF9EQVRBLnBhcnRzW3BpXS5zZWN0aW9uc1tzaV0ucXVlc3Rpb25zW3FpXTsKICAgIHZhciBrZXkgPSBxS2V5KHBpLCBzaSwgcWkpOwogICAgcG9wdXAgPSBlbCgnZGl2JywgJ2NscC1wb3AnKTsKICAgIHEub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG9wdCwgb2kpewogICAgICB2YXIgYiA9IGVsKCdidXR0b24nLCAnY2xwLW9wdCcgKyAoc3RhdGUuYW5zd2Vyc1trZXldID09PSBvaSA\/ICcgY2xwLXNlbCcgOiAnJykpOwogICAgICBiLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgYi5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtcmFkaW8nKSk7CiAgICAgIGIuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnJywgb3B0KSk7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgc3RhdGUuYW5zd2Vyc1trZXldID0gb2k7CiAgICAgICAgdXBkYXRlU2NvcmVDaGlwKCk7CiAgICAgICAgY2xvc2VQb3B1cCgpOwogICAgICAgIHNldFRyaWdnZXJMYWJlbCh0cmlnZ2VyLCBvcHQsIGZhbHNlKTsKICAgICAgfSk7CiAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGIpOwogICAgfSk7CiAgICBjYXQuYXBwZW5kQ2hpbGQocG9wdXApOwogICAgLyogcG9zaXRpb246IGJlbG93IHRyaWdnZXIsIGZsaXAgYWJvdmUgd2hlbiBuZWFyIHZpZXdwb3J0IGJvdHRvbSAqLwogICAgcG9wdXAuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgdmFyIGNhdFJlY3QgPSBjYXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB2YXIgdFJlY3QgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgdmFyIHBvcFcgPSBwb3B1cC5vZmZzZXRXaWR0aCwgcG9wSCA9IHBvcHVwLm9mZnNldEhlaWdodDsKICAgIHZhciBsZWZ0ID0gdFJlY3QubGVmdCAtIGNhdFJlY3QubGVmdDsKICAgIGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbihsZWZ0LCBjYXQuY2xpZW50V2lkdGggLSBwb3BXIC0gOCkpOwogICAgdmFyIHRvcDsKICAgIGlmICh0UmVjdC5ib3R0b20gKyBwb3BIICsgMjQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgdFJlY3QudG9wIC0gcG9wSCAtIDggPiAwKXsKICAgICAgdG9wID0gdFJlY3QudG9wIC0gY2F0UmVjdC50b3AgLSBwb3BIIC0gNjsgICAvKiBmbGlwIGFib3ZlICovCiAgICB9IGVsc2UgewogICAgICB0b3AgPSB0UmVjdC5ib3R0b20gLSBjYXRSZWN0LnRvcCArIDY7CiAgICB9CiAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7CiAgICBwb3B1cC5zdHlsZS50b3AgPSB0b3AgKyAncHgnOwogICAgcG9wdXAuc3R5bGUudmlzaWJpbGl0eSA9ICcnOwogICAgdHJpZ2dlci5jbGFzc0xpc3QuYWRkKCdjbHAtb3BlbicpOwogICAgb3BlblRyaWdnZXIgPSB0cmlnZ2VyOwogIH0KICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgIGlmIChwb3B1cCAmJiAhcG9wdXAuY29udGFpbnMoZXYudGFyZ2V0KSAmJiBldi50YXJnZXQgIT09IG9wZW5UcmlnZ2VyICYmICghb3BlblRyaWdnZXIgfHwgIW9wZW5UcmlnZ2VyLmNvbnRhaW5zKGV2LnRhcmdldCkpKXsKICAgICAgY2xvc2VQb3B1cCgpOwogICAgfQogIH0pOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjbG9zZVBvcHVwKTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24oKXsgLyoga2VlcCBwb3B1cCBhbmNob3JlZDogY2xvc2Ugb24gc2Nyb2xsICovIGlmIChwb3B1cCkgY2xvc2VQb3B1cCgpOyB9LCB7IHBhc3NpdmU6IHRydWUgfSk7CgogIGZ1bmN0aW9uIHNldFRyaWdnZXJMYWJlbCh0cmlnZ2VyLCB0ZXh0LCB1bmFuc3dlcmVkKXsKICAgIHRyaWdnZXIuY2xhc3NMaXN0LnRvZ2dsZSgnY2xwLXVuYW5zd2VyZWQnLCAhIXVuYW5zd2VyZWQpOwogICAgdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCcuY2xwLWRkLXRleHQnKS50ZXh0Q29udGVudCA9IHVuYW5zd2VyZWQgPyAnXHUyMDI2XHUyMDI2XHUyMDI2XHUyMDI2JyA6IHRleHQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGRvdHMgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIHJlbmRlckRvdHMoKXsKICAgIGRvdHNFbC5pbm5lckhUTUwgPSAnJzsKICAgIHZhciBjdXJQaSA9IC0xOwogICAgdmFyIHMgPSBzY3JlZW5zW3N0YXRlLmlkeF07CiAgICBpZiAocyAmJiBzLnBpICE9PSB1bmRlZmluZWQpIGN1clBpID0gcy5waTsKICAgIGlmIChzICYmIHMudHlwZSA9PT0gJ2ZpbmlzaCcpIGN1clBpID0gVEVTVF9EQVRBLnBhcnRzLmxlbmd0aDsgLyogYWxsIGRvbmUgKi8KICAgIFRFU1RfREFUQS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQsIHBpKXsKICAgICAgdmFyIGQgPSBlbCgnYnV0dG9uJywgJ2NscC1kb3QnLCAnUCcgKyAocGkgKyAxKSk7CiAgICAgIGQudHlwZSA9ICdidXR0b24nOwogICAgICBpZiAocGkgPT09IGN1clBpKSBkLmNsYXNzTGlzdC5hZGQoJ2NscC1jdXInKTsKICAgICAgZWxzZSBpZiAocGkgPCBjdXJQaSB8fCBzdGF0ZS5jaGVja2VkKSBkLmNsYXNzTGlzdC5hZGQoJ2NscC1kb25lJyk7CiAgICAgIGlmIChzdGF0ZS5jaGVja2VkKXsKICAgICAgICBkLmNsYXNzTGlzdC5hZGQoJ2NscC1jbGlja2FibGUnKTsKICAgICAgICBkLnRpdGxlID0gJ1JldmlldyAnICsgcGFydC5uYW1lOwogICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JlZW5zLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYgKHNjcmVlbnNbaV0udHlwZSA9PT0gJ3EnICYmIHNjcmVlbnNbaV0ucGkgPT09IHBpKXsgc3RhdGUuaWR4ID0gaTsgYnJlYWs7IH0KICAgICAgICAgIH0KICAgICAgICAgIHJlbmRlcigpOyBzY3JvbGxUb0VsKGNhdCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZC50aXRsZSA9IHBhcnQubmFtZTsKICAgICAgfQogICAgICBkb3RzRWwuYXBwZW5kQ2hpbGQoZCk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gY2hyb21lIHBpZWNlcyAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gbWFrZUJhcih0aXRsZSwgd2l0aFRpbWVyKXsKICAgIHZhciBiYXIgPSBlbCgnZGl2JywgJ2NscC1iYXInKTsKICAgIGJhci5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtYmFyLXRpdGxlJywgdGl0bGUpKTsKICAgIGlmICh3aXRoVGltZXIgJiYgc3RhdGUudGltZXJPbil7CiAgICAgIHZhciB0ID0gZWwoJ3NwYW4nLCAnY2xwLWJhci10aW1lcicpOwogICAgICB0LmlkID0gJ2NscFFUaW1lcic7CiAgICAgIHQuaW5uZXJIVE1MID0gJ1RpbWUgcmVtYWluaW5nOiA8Yj4nICsgZm10KHFSZW1haW5pbmcpICsgJzwvYj4nOwogICAgICBiYXIuYXBwZW5kQ2hpbGQodCk7CiAgICB9CiAgICB2YXIgbmV4dCA9IGVsKCdidXR0b24nLCAnY2xwLW5leHQnLCAnTmV4dCcpOwogICAgbmV4dC50eXBlID0gJ2J1dHRvbic7CiAgICBuZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgY2xvc2VQb3B1cCgpOwogICAgICBpZiAoc3RhdGUuaWR4IDwgc2NyZWVucy5sZW5ndGggLSAxKXsgc3RhdGUuaWR4Kys7IHJlbmRlcigpOyBzY3JvbGxUb0VsKGNhdCk7IH0KICAgIH0pOwogICAgaWYgKHNjcmVlbnNbc3RhdGUuaWR4XS50eXBlID09PSAnZmluaXNoJykgbmV4dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgYmFyLmFwcGVuZENoaWxkKG5leHQpOwogICAgcmV0dXJuIGJhcjsKICB9CiAgZnVuY3Rpb24gbWFrZUluc3RyKHRleHQpewogICAgdmFyIHJvdyA9IGVsKCdkaXYnLCAnY2xwLWluc3RyJyk7CiAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnY2xwLWluZm8nLCAnaScpKTsKICAgIHJvdy5hcHBlbmRDaGlsZChlbCgncCcsICcnLCB0ZXh0KSk7CiAgICByZXR1cm4gcm93OwogIH0KICB2YXIgU1BFQUtFUl9TVkcgPSAnPHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNiAyNiIgZmlsbD0ibm9uZSIgYXJpYS1oaWRkZW49InRydWUiPicgKwogICAgJzxyZWN0IHg9IjMiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjgiIHJ4PSIxIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4nICsKICAgICc8cGF0aCBkPSJNOSA5IEwxNSA0IEwxNSAyMiBMOSAxNyBaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4nICsKICAgICc8cGF0aCBkPSJNMTggOSBhNS41IDUuNSAwIDAgMSAwIDgiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPicgKwogICAgJzxwYXRoIGQ9Ik0yMC41IDYuNSBhOSA5IDAgMCAxIDAgMTMiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPic7CiAgdmFyIFBMQVlfU1ZHID0gJzxzdmcgd2lkdGg9IjI2IiBoZWlnaHQ9IjI2IiB2aWV3Qm94PSIwIDAgMjYgMjYiIGZpbGw9Im5vbmUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4nICsKICAgICc8cGF0aCBkPSJNOCA1IEwyMSAxMyBMOCAyMSBaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz48L3N2Zz4nOwoKICAvKiAtLS0tLS0tLS0tIHNjcmVlbnMgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIHJlbmRlckludHJvKHNjciwgcm9vdCl7CiAgICB2YXIgcGFydCA9IFRFU1RfREFUQS5wYXJ0c1tzY3IucGldOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2NyZWVuLWxhYmVsJywgcGFydC5uYW1lICsgJyBcdTIwMTQgSW5zdHJ1Y3Rpb25zJyk7CiAgICByb290LmFwcGVuZENoaWxkKG1ha2VJbnN0cignSW5zdHJ1Y3Rpb25zOicpKTsKICAgIHZhciBib2R5ID0gZWwoJ2RpdicsICdjbHAtaW50cm8tYm9keScpOwogICAgYm9keS5hcHBlbmRDaGlsZChlbCgnaDMnLCAnJywgcGFydC5pbnRyb1RpdGxlKSk7CiAgICB2YXIgdWwgPSBlbCgndWwnLCAnY2xwLWJ1bGxldHMnKTsKICAgIHBhcnQuaW50cm9CdWxsZXRzLmZvckVhY2goZnVuY3Rpb24oYil7IHVsLmFwcGVuZENoaWxkKGVsKCdsaScsICcnLCBiKSk7IH0pOwogICAgYm9keS5hcHBlbmRDaGlsZCh1bCk7CiAgICByb290LmFwcGVuZENoaWxkKGJvZHkpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyTWVkaWEoc2NyLCByb290KXsKICAgIHZhciBwYXJ0ID0gVEVTVF9EQVRBLnBhcnRzW3Njci5waV07CiAgICB2YXIgc2VjID0gcGFydC5zZWN0aW9uc1tzY3Iuc2ldOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2NyZWVuLWxhYmVsJywgcGFydC5uYW1lICsgJyBcdTIwMTQgTWVkaWEnKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQobWFrZUluc3RyKHNlYy5tZWRpYUluc3RydWN0aW9uKSk7CnZhciBfYWs9c2NyLnBpKyIuIitzY3Iuc2ksX2F1PSh0eXBlb2YgQ0xQX0FVRElPIT09InVuZGVmaW5lZCIpJiZDTFBfQVVESU9bX2FrXTtpZihfYXUpe3ZhciBfaXNWPSh0eXBlb2YgQ0xQX0FVRElPX1ZJREVPIT09InVuZGVmaW5lZCIpJiZDTFBfQVVESU9fVklERU9bX2FrXTt2YXIgX3A9ZWwoImRpdiIsImNscC1tZWRpYS1wYW5lbCIpO3ZhciBfYz1lbCgiZGl2IiwiY2xwLW1lZGlhLWNhcmQiKyhfaXNWPyIgY2xwLWlzLXZpZGVvIjoiIikpO3ZhciBfbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KF9pc1Y\/InZpZGVvIjoiYXVkaW8iKTtfbS5zcmM9X2F1O19tLmNvbnRyb2xzPXRydWU7X20ucHJlbG9hZD0ibm9uZSI7X20uY2xhc3NOYW1lPSJjbHAtcmVhbG1lZGlhIjtfbS5zZXRBdHRyaWJ1dGUoImNvbnRyb2xzTGlzdCIsIm5vZG93bmxvYWQiKTtfbS5zdHlsZS5jc3NUZXh0PV9pc1Y\/IndpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojMDAwO2Rpc3BsYXk6YmxvY2siOiJ3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2siO19jLmFwcGVuZENoaWxkKF9tKTtfcC5hcHBlbmRDaGlsZChfYyk7X3AuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1vbmNlLW5vdGUiLCJJbiB0aGUgcmVhbCB0ZXN0IHRoaXMgcmVjb3JkaW5nIHBsYXlzIG9uY2UuIEZvciBwcmFjdGljZSB5b3UgY2FuIHJlcGxheSBpdCBcdTIwMTQgYnV0IHRyeSB0byBsaXN0ZW4gb25seSBvbmNlIGZpcnN0LiIpKTtyb290LmFwcGVuZENoaWxkKF9wKTtyZXR1cm47fQoKICAgIGlmIChDRUxQSVBfWVQudmlkZW9JZCl7CiAgICAgIHZhciBjaCA9IENMUF9DSEFQVEVSU1tzY3IucGkgKyAnLicgKyBzY3Iuc2ldIHx8IFswLCAwXTsKICAgICAgdmFyIHZwYW5lbCA9IGVsKCdkaXYnLCAnY2xwLW1lZGlhLXBhbmVsJyk7CiAgICAgIHZhciB2Y2FyZCA9IGVsKCdkaXYnLCAnY2xwLW1lZGlhLWNhcmQgY2xwLWlzLXZpZGVvJyk7CiAgICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIHdyYXAuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2FzcGVjdC1yYXRpbzoxNi85O2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiMwMDA7JzsKICAgICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogICAgICBpZnIuc3JjID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tL2VtYmVkLycgKyBDRUxQSVBfWVQudmlkZW9JZCArICc\/c3RhcnQ9JyArIGNoWzBdICsgKGNoWzFdID8gJyZlbmQ9JyArIGNoWzFdIDogJycpICsgJyZyZWw9MCZtb2Rlc3RicmFuZGluZz0xJzsKICAgICAgaWZyLmFsbG93ID0gJ2F1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IHBpY3R1cmUtaW4tcGljdHVyZSc7CiAgICAgIGlmci5hbGxvd0Z1bGxzY3JlZW4gPSB0cnVlOwogICAgICBpZnIudGl0bGUgPSAnQ0VMUElQIExpc3RlbmluZyBtZWRpYSc7CiAgICAgIGlmci5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MDsnOwogICAgICB3cmFwLmFwcGVuZENoaWxkKGlmcik7CiAgICAgIHZjYXJkLmFwcGVuZENoaWxkKHdyYXApOwogICAgICB2cGFuZWwuYXBwZW5kQ2hpbGQodmNhcmQpOwogICAgICB2cGFuZWwuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICdjbHAtb25jZS1ub3RlJywgJ0luIHRoZSByZWFsIHRlc3QgdGhpcyBwbGF5cyBvbmx5IG9uY2UgXHUyMDE0IHByZXNzIE5FWFQgd2hlbiBpdCBlbmRzLicpKTsKICAgICAgcm9vdC5hcHBlbmRDaGlsZCh2cGFuZWwpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIHBhbmVsID0gZWwoJ2RpdicsICdjbHAtbWVkaWEtcGFuZWwnKTsKICAgIHZhciBjYXJkID0gZWwoJ2RpdicsICdjbHAtbWVkaWEtY2FyZCcgKyAoc2VjLm1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyA\/ICcgY2xwLWlzLXZpZGVvJyA6ICcnKSk7CiAgICAvKiAuY2xwLW1lZGlhLXpvbmUgaXMgdGhlIGZ1dHVyZSBZb3VUdWJlLWVtYmVkIHRhcmdldCAoZGF0YS1tZWRpYS1zbG90KSAqLwogICAgdmFyIHpvbmUgPSBlbCgnZGl2JywgJ2NscC1tZWRpYS16b25lJyk7CiAgICB6b25lLnNldEF0dHJpYnV0ZSgnZGF0YS1tZWRpYS1zbG90Jywgc2NyLnBpICsgJy4nICsgc2NyLnNpKTsKICAgIHZhciBpY29uID0gZWwoJ2RpdicsICdjbHAtc3BlYWtlcicpOwogICAgaWNvbi5pbm5lckhUTUwgPSBzZWMubWVkaWFUeXBlID09PSAndmlkZW8nID8gUExBWV9TVkcgOiBTUEVBS0VSX1NWRzsKICAgIHZhciBtYWluID0gZWwoJ2RpdicsICdjbHAtbWVkaWEtbWFpbicpOwogICAgdmFyIGxhYmVsID0gZWwoJ2RpdicsICdjbHAtbWVkaWEtbGFiZWwnLCAnUGxheWluZ1x1MjAyNicpOwogICAgdmFyIHByb2cgPSBlbCgnZGl2JywgJ2NscC1wcm9ncmVzcycpOwogICAgdmFyIGZpbGwgPSBlbCgnZGl2JywgJ2NscC1wcm9ncmVzcy1maWxsJyk7CiAgICBwcm9nLmFwcGVuZENoaWxkKGZpbGwpOwoKICAgIGlmIChzZWMubWVkaWFUeXBlID09PSAndmlkZW8nKXsKICAgICAgem9uZS5hcHBlbmRDaGlsZChpY29uKTsKICAgICAgY2FyZC5hcHBlbmRDaGlsZCh6b25lKTsKICAgICAgbWFpbi5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgIG1haW4uYXBwZW5kQ2hpbGQocHJvZyk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQobWFpbik7CiAgICB9IGVsc2UgewogICAgICBtYWluLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgbWFpbi5hcHBlbmRDaGlsZChwcm9nKTsKICAgICAgem9uZS5hcHBlbmRDaGlsZChpY29uKTsKICAgICAgem9uZS5hcHBlbmRDaGlsZChtYWluKTsKICAgICAgY2FyZC5hcHBlbmRDaGlsZCh6b25lKTsKICAgIH0KICAgIHBhbmVsLmFwcGVuZENoaWxkKGNhcmQpOwoKICAgIHZhciBtZXRhID0gZWwoJ2RpdicsICdjbHAtbWVkaWEtbWV0YScpOwogICAgdmFyIHRpbWVTcGFuID0gZWwoJ3NwYW4nLCAnJywgJzA6MDAgLyAnICsgZm10KHNlYy5kdXJhdGlvbikpOwogICAgbWV0YS5hcHBlbmRDaGlsZCh0aW1lU3Bhbik7CiAgICB2YXIgdm9sID0gZWwoJ3NwYW4nLCAnJyk7CiAgICB2b2wuaW5uZXJIVE1MID0gJzxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMjYgMjYiIGZpbGw9Im5vbmUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4nICsKICAgICAgJzxyZWN0IHg9IjMiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjgiIHJ4PSIxIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4nICsKICAgICAgJzxwYXRoIGQ9Ik05IDkgTDE1IDQgTDE1IDIyIEw5IDE3IFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPicgKwogICAgICAnPHBhdGggZD0iTTE4IDkgYTUuNSA1LjUgMCAwIDEgMCA4IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48L3N2Zz4nOwogICAgbWV0YS5hcHBlbmRDaGlsZCh2b2wpOwogICAgcGFuZWwuYXBwZW5kQ2hpbGQobWV0YSk7CiAgICBwYW5lbC5hcHBlbmRDaGlsZChlbCgnZGl2JywgJ2NscC1vbmNlLW5vdGUnLCAoc2VjLm1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyA\/ICdUaGlzIHZpZGVvIHBsYXlzJyA6ICdUaGlzIHJlY29yZGluZyBwbGF5cycpICsgJyBvbmx5IG9uY2UgXHUyMDE0IGp1c3QgbGlrZSB0aGUgcmVhbCB0ZXN0LicpKTsKICAgIGlmICghQ0VMUElQX1lULnZpZGVvSWQpeyBwYW5lbC5hcHBlbmRDaGlsZChlbCgnZGl2JywgJ2NscC1vbmNlLW5vdGUnLCAnT2ZmaWNpYWwgYXVkaW8vdmlkZW8gaXMgYmVpbmcgcHJlcGFyZWQgXHUyMDE0IHRoZSBiYXIgYWJvdmUgaXMgYSBzaW11bGF0aW9uLiBQcmVzcyBORVhUIHRvIGNvbnRpbnVlLicpKTsgfQogICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lbCk7CgogICAgLyogc2ltdWxhdGVkIHBsYXliYWNrICovCiAgICB2YXIgZWxhcHNlZCA9IDA7CiAgICBtZWRpYVRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICAgZWxhcHNlZCsrOwogICAgICBpZiAoZWxhcHNlZCA+PSBzZWMuZHVyYXRpb24pewogICAgICAgIGVsYXBzZWQgPSBzZWMuZHVyYXRpb247CiAgICAgICAgY2xlYXJJbnRlcnZhbChtZWRpYVRpbWVyKTsgbWVkaWFUaW1lciA9IG51bGw7CiAgICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSAnRmluaXNoZWQnOwogICAgICB9CiAgICAgIGZpbGwuc3R5bGUud2lkdGggPSBNYXRoLnJvdW5kKGVsYXBzZWQgLyBzZWMuZHVyYXRpb24gKiAxMDApICsgJyUnOwogICAgICB0aW1lU3Bhbi50ZXh0Q29udGVudCA9IGZtdChlbGFwc2VkKSArICcgLyAnICsgZm10KHNlYy5kdXJhdGlvbik7CiAgICB9LCAxMDAwKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclF1ZXN0aW9ucyhzY3IsIHJvb3QpewogICAgdmFyIHBhcnQgPSBURVNUX0RBVEEucGFydHNbc2NyLnBpXTsKICAgIHZhciBzZWMgPSBwYXJ0LnNlY3Rpb25zW3Njci5zaV07CiAgICByb290LnNldEF0dHJpYnV0ZSgnZGF0YS1zY3JlZW4tbGFiZWwnLCBwYXJ0Lm5hbWUgKyAnIFx1MjAxNCBRdWVzdGlvbnMnKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQobWFrZUluc3RyKHBhcnQucUluc3RydWN0aW9uKSk7CgogICAgdmFyIHBhbmVsID0gZWwoJ2RpdicsICdjbHAtcS1wYW5lbCcpOwogICAgc2VjLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHEsIHFpKXsKICAgICAgdmFyIGtleSA9IHFLZXkoc2NyLnBpLCBzY3Iuc2ksIHFpKTsKICAgICAgdmFyIHJvdyA9IGVsKCdkaXYnLCAnY2xwLXEnKTsKICAgICAgdmFyIG51bSA9IGVsKCdzcGFuJywgJ2NscC1xbnVtJywgcS5uICsgJy4gJyk7CiAgICAgIHJvdy5hcHBlbmRDaGlsZChudW0pOwogICAgICByb3cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocS5zdGVtICsgJyAnKSk7CgogICAgICB2YXIgZGQgPSBlbCgnYnV0dG9uJywgJ2NscC1kZCcpOwogICAgICBkZC50eXBlID0gJ2J1dHRvbic7CiAgICAgIGRkLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ2NscC1kZC10ZXh0JykpOwogICAgICBkZC5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtZGQtY2FyZXQnLCAnXHUyNUJDJykpOwogICAgICB2YXIgYW5zID0gc3RhdGUuYW5zd2Vyc1trZXldOwogICAgICBzZXRUcmlnZ2VyTGFiZWwoZGQsIGFucyAhPT0gdW5kZWZpbmVkID8gcS5vcHRpb25zW2Fuc10gOiAnJywgYW5zID09PSB1bmRlZmluZWQpOwogICAgICByb3cuYXBwZW5kQ2hpbGQoZGQpOwoKICAgICAgaWYgKHEudG9kbyl7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ2NscC10b2RvLXRhZycsICdUT0RPJykpOwogICAgICB9CgogICAgICBpZiAoc3RhdGUuY2hlY2tlZCl7CiAgICAgICAgZGQuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIHZhciBjb3JyZWN0ID0gYW5zID09PSBxLmtleSAtIDE7CiAgICAgICAgZGQuY2xhc3NMaXN0LmFkZChjb3JyZWN0ID8gJ2NscC1tYXJrLXJpZ2h0JyA6ICdjbHAtbWFyay13cm9uZycpOwogICAgICAgIGlmICghY29ycmVjdCl7CiAgICAgICAgICB2YXIgcmV2ID0gZWwoJ3NwYW4nLCAnY2xwLXJldmVhbCcpOwogICAgICAgICAgcmV2LmlubmVySFRNTCA9ICdDb3JyZWN0IGFuc3dlcjogPGI+PC9iPic7CiAgICAgICAgICByZXYucXVlcnlTZWxlY3RvcignYicpLnRleHRDb250ZW50ID0gcS5vcHRpb25zW3Eua2V5IC0gMV07CiAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQocmV2KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIG9wZW5Qb3B1cChkZCwgc2NyLnBpLCBzY3Iuc2ksIHFpKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBwYW5lbC5hcHBlbmRDaGlsZChyb3cpOwogICAgfSk7CiAgICByb290LmFwcGVuZENoaWxkKHBhbmVsKTsKCiAgICAvKiBjb3VudGRvd24gKi8KICAgIHFSZW1haW5pbmcgPSBzZWMudGltZU1pbnV0ZXMgKiA2MDsKICAgIHN0YXJ0UVRpbWVyKCk7CiAgfQogIGZ1bmN0aW9uIHN0YXJ0UVRpbWVyKCl7CiAgICBpZiAocVRpbWVyKSBjbGVhckludGVydmFsKHFUaW1lcik7CiAgICBpZiAoIXN0YXRlLnRpbWVyT24pIHJldHVybjsKICAgIHFUaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgIGlmIChxUmVtYWluaW5nID4gMCkgcVJlbWFpbmluZy0tOwogICAgICB2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBRVGltZXInKTsKICAgICAgaWYgKHQpIHQuaW5uZXJIVE1MID0gJ1RpbWUgcmVtYWluaW5nOiA8Yj4nICsgZm10KHFSZW1haW5pbmcpICsgJzwvYj4nOwogICAgICBpZiAocVJlbWFpbmluZyA8PSAwKXsgY2xlYXJJbnRlcnZhbChxVGltZXIpOyBxVGltZXIgPSBudWxsOyB9CiAgICB9LCAxMDAwKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckZpbmlzaChyb290KXsKICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXNjcmVlbi1sYWJlbCcsICdFbmQgb2YgVGVzdCcpOwogICAgdmFyIGJveCA9IGVsKCdkaXYnLCAnY2xwLWZpbmlzaCcpOwogICAgYm94LmFwcGVuZENoaWxkKGVsKCdoMycsICcnLCAnRW5kIG9mIHRoZSBMaXN0ZW5pbmcgVGVzdCcpKTsKICAgIGJveC5hcHBlbmRDaGlsZChlbCgncCcsICcnLCAnWW91IGhhdmUgYW5zd2VyZWQgJyArIGFuc3dlcmVkQ291bnQoKSArICcgb2YgJyArIFRPVEFMX1EgKyAnIHF1ZXN0aW9ucy4gQ2hlY2sgeW91ciBhbnN3ZXJzIHRvIHNlZSB5b3VyIHNjb3JlLCBwYXJ0LWJ5LXBhcnQgcmVzdWx0cywgYW5kIHRyYW5zY3JpcHRzLicpKTsKICAgIHZhciBidG4gPSBlbCgnYnV0dG9uJywgJ2NscC1maW5pc2gtY2hlY2snLCAnQ2hlY2sgYW5zd2VycycpOwogICAgYnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNoZWNrQW5zd2Vycyk7CiAgICBib3guYXBwZW5kQ2hpbGQoYnRuKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQoYm94KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlcigpewogICAgY2xlYXJUaW1lcnMoKTsKICAgIGNsb3NlUG9wdXAoKTsKICAgIGNhdC5pbm5lckhUTUwgPSAnJzsKICAgIHZhciBzY3IgPSBzY3JlZW5zW3N0YXRlLmlkeF07CgogICAgaWYgKCFzdGF0ZS5zdGFydGVkKXsKICAgICAgdmFyIGJhcjAgPSBlbCgnZGl2JywgJ2NscC1iYXInKTsKICAgICAgYmFyMC5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtYmFyLXRpdGxlJywgVEVTVF9EQVRBLnRlc3RMYWJlbCArICcgXHUyMDEzIExpc3RlbmluZyBUZXN0JykpOwogICAgICBjYXQuYXBwZW5kQ2hpbGQoYmFyMCk7CiAgICAgIHZhciBpZGxlID0gZWwoJ2RpdicsICdjbHAtaWRsZScpOwogICAgICB2YXIgcCA9IGVsKCdwJywgJycsICdQcmVzcyBcdTIwMUNTdGFydCB0ZXN0XHUyMDFEIGFib3ZlIHRvIGJlZ2luLiBUaGUgdGVzdCBoYXMgNiBwYXJ0cyBhbmQgMzggcXVlc3Rpb25zLCBhbmQgZXZlcnkgcmVjb3JkaW5nIGFuZCB2aWRlbyBwbGF5cyBvbmx5IG9uY2UgXHUyMDE0IGp1c3QgbGlrZSB0aGUgcmVhbCBjb21wdXRlci1kZWxpdmVyZWQgdGVzdC4nKTsKICAgICAgaWRsZS5hcHBlbmRDaGlsZChwKTsKICAgICAgY2F0LmFwcGVuZENoaWxkKGlkbGUpOwogICAgICByZW5kZXJEb3RzKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgaXNRID0gc2NyLnR5cGUgPT09ICdxJzsKICAgIGlmIChpc1EpewogICAgICB2YXIgc2VjID0gVEVTVF9EQVRBLnBhcnRzW3Njci5waV0uc2VjdGlvbnNbc2NyLnNpXTsKICAgICAgcVJlbWFpbmluZyA9IHNlYy50aW1lTWludXRlcyAqIDYwOwogICAgfQogICAgdmFyIHRpdGxlID0gc2NyLnR5cGUgPT09ICdmaW5pc2gnCiAgICAgID8gVEVTVF9EQVRBLnRlc3RMYWJlbCArICcgXHUyMDEzIExpc3RlbmluZyBUZXN0JwogICAgICA6IFRFU1RfREFUQS5wYXJ0c1tzY3IucGldLmhlYWRlclRpdGxlOwogICAgY2F0LmFwcGVuZENoaWxkKG1ha2VCYXIodGl0bGUsIGlzUSkpOwoKICAgIHZhciBzY3JlZW4gPSBlbCgnZGl2JywgJ2NscC1zY3JlZW4nKTsKICAgIGlmIChzY3IudHlwZSA9PT0gJ2ludHJvJykgcmVuZGVySW50cm8oc2NyLCBzY3JlZW4pOwogICAgZWxzZSBpZiAoc2NyLnR5cGUgPT09ICdtZWRpYScpIHJlbmRlck1lZGlhKHNjciwgc2NyZWVuKTsKICAgIGVsc2UgaWYgKHNjci50eXBlID09PSAncScpIHJlbmRlclF1ZXN0aW9ucyhzY3IsIHNjcmVlbik7CiAgICBlbHNlIHJlbmRlckZpbmlzaChzY3JlZW4pOwogICAgY2F0LmFwcGVuZENoaWxkKHNjcmVlbik7CiAgICByZW5kZXJEb3RzKCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIHJlc3VsdHMgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIGNoZWNrQW5zd2VycygpewogICAgaWYgKHN0YXRlLmNoZWNrZWQpIHJldHVybjsKICAgIHN0YXRlLmNoZWNrZWQgPSB0cnVlOwogICAgdmFyIHNjb3JlID0gY29tcHV0ZVNjb3JlKCk7CiAgICB1cGRhdGVTY29yZUNoaXAoKTsKICAgIHJlbmRlcigpOwogICAgcmVuZGVyUmVzdWx0cyhzY29yZSk7CiAgICByZXN1bHRzRWwuaGlkZGVuID0gZmFsc2U7CiAgICBzY3JvbGxUb0VsKHJlc3VsdHNFbCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJSZXN1bHRzKHNjb3JlKXsKICAgIHJlc3VsdHNFbC5pbm5lckhUTUwgPSAnJzsKICAgIHJlc3VsdHNFbC5hcHBlbmRDaGlsZChlbCgnaDInLCAnJywgJ1lvdXIgcmVzdWx0cycpKTsKICAgIHZhciBncmlkID0gZWwoJ2RpdicsICdjbHAtcmVzLWdyaWQnKTsKCiAgICAvKiByaW5nIGNhcmQgKi8KICAgIHZhciByaW5nQ2FyZCA9IGVsKCdkaXYnLCAnY2xwLWNhcmQgY2xwLXJpbmctY2FyZCBjbHAtcmV2Jyk7CiAgICB2YXIgd3JhcCA9IGVsKCdkaXYnLCAnY2xwLXJpbmctd3JhcCcpOwogICAgdmFyIFIgPSA1NiwgQyA9IDIgKiBNYXRoLlBJICogUjsKICAgIHdyYXAuaW5uZXJIVE1MID0KICAgICAgJzxzdmcgd2lkdGg9IjEzMiIgaGVpZ2h0PSIxMzIiIHZpZXdCb3g9IjAgMCAxMzIgMTMyIj4nICsKICAgICAgJzxjaXJjbGUgY3g9IjY2IiBjeT0iNjYiIHI9IicgKyBSICsgJyIgc3Ryb2tlPSIjRTJFOEYwIiBzdHJva2Utd2lkdGg9IjExIiBmaWxsPSJub25lIi8+JyArCiAgICAgICc8Y2lyY2xlIGlkPSJjbHBSaW5nIiBjeD0iNjYiIGN5PSI2NiIgcj0iJyArIFIgKyAnIiBzdHJva2U9IiMxMEI5ODEiIHN0cm9rZS13aWR0aD0iMTEiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgJyArCiAgICAgICdzdHJva2UtZGFzaGFycmF5PSInICsgQyArICciIHN0cm9rZS1kYXNob2Zmc2V0PSInICsgQyArICciLz48L3N2Zz4nOwogICAgdmFyIG51bSA9IGVsKCdkaXYnLCAnY2xwLXJpbmctbnVtJyk7CiAgICB2YXIgYmlnID0gZWwoJ2InLCAnJywgJzAnKTsKICAgIG51bS5hcHBlbmRDaGlsZChiaWcpOwogICAgbnVtLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJycsICdvdXQgb2YgJyArIFRPVEFMX1EpKTsKICAgIHdyYXAuYXBwZW5kQ2hpbGQobnVtKTsKICAgIHJpbmdDYXJkLmFwcGVuZENoaWxkKHdyYXApOwogICAgcmluZ0NhcmQuYXBwZW5kQ2hpbGQoZWwoJ2gzJywgJycsICdUb3RhbCBzY29yZScpKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQocmluZ0NhcmQpOwoKICAgIC8qIGJyZWFrZG93biBjYXJkICovCiAgICB2YXIgYmQgPSBlbCgnZGl2JywgJ2NscC1jYXJkIGNscC1yZXYnKTsKICAgIGJkLmFwcGVuZENoaWxkKGVsKCdoMycsICcnLCAnUGFydC1ieS1wYXJ0IGJyZWFrZG93bicpKTsKICAgIHZhciBjaGlwcyA9IGVsKCdkaXYnLCAnY2xwLXBhcnQtY2hpcHMnKTsKICAgIHNjb3JlLnBlclBhcnQuZm9yRWFjaChmdW5jdGlvbihwcCwgcGkpewogICAgICB2YXIgYyA9IGVsKCdzcGFuJywgJ2NscC1wYXJ0LWNoaXAnKTsKICAgICAgYy5pbm5lckhUTUwgPSAnUCcgKyAocGkgKyAxKSArICcgPGI+JyArIHBwLmNvcnJlY3QgKyAnLycgKyBwcC50b3RhbCArICc8L2I+JzsKICAgICAgY2hpcHMuYXBwZW5kQ2hpbGQoYyk7CiAgICB9KTsKICAgIGJkLmFwcGVuZENoaWxkKGNoaXBzKTsKCiAgICB2YXIgZXN0ID0gY2xiRXN0aW1hdGUoc2NvcmUudG90YWwpOwogICAgdmFyIGNsYiA9IGVsKCdkaXYnLCAnY2xwLWNsYi1yb3cnKTsKICAgIGNsYi5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtY2xiLWJhZGdlJywgZXN0LmxldmVsKSk7CiAgICBjbGIuYXBwZW5kQ2hpbGQoZWwoJ3AnLCAnJywgZXN0Lm5vdGUgKyAnIFx1MjAxNCBlc3RpbWF0ZWQgZnJvbSBhIHJhdyBzY29yZSBvZiAnICsgc2NvcmUudG90YWwgKyAnLycgKyBUT1RBTF9RICsgJy4gVE9ETzogcGxhY2Vob2xkZXIgbWFwcGluZyBcdTIwMTQgdmVyaWZ5IGFnYWluc3QgdGhlIG9mZmljaWFsIENFTFBJUCBzY29yZSBjaGFydC4nKSk7CiAgICBiZC5hcHBlbmRDaGlsZChjbGIpOwogICAgZ3JpZC5hcHBlbmRDaGlsZChiZCk7CiAgICByZXN1bHRzRWwuYXBwZW5kQ2hpbGQoZ3JpZCk7CgogICAgLyogdHJhbnNjcmlwdHMgKi8KICAgIHZhciB0cldyYXAgPSBlbCgnZGl2JywgJ2NscC10cmFuc2NyaXB0cycpOwogICAgVEVTVF9EQVRBLnBhcnRzLmZvckVhY2goZnVuY3Rpb24ocGFydCwgcGkpewogICAgICB2YXIgY2FyZCA9IGVsKCdkaXYnLCAnY2xwLXRyLWNhcmQgY2xwLXJldicpOwogICAgICB2YXIgaGVhZCA9IGVsKCdidXR0b24nLCAnY2xwLXRyLWhlYWQnKTsKICAgICAgaGVhZC50eXBlID0gJ2J1dHRvbic7CiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnJywgJ1RyYW5zY3JpcHQgXHUyMDE0ICcgKyBwYXJ0Lm5hbWUpKTsKICAgICAgaGVhZC5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdjbHAtdHItY2FyZXQnLCAnXHUyNUJDJykpOwogICAgICBoZWFkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgY2FyZC5jbGFzc0xpc3QudG9nZ2xlKCdjbHAtb3BlbicpOyB9KTsKICAgICAgdmFyIGJvZHkgPSBlbCgnZGl2JywgJ2NscC10ci1ib2R5Jyk7CiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydC50cmFuc2NyaXB0KSk7CiAgICAgIGlmIChwYXJ0LnRyYW5zY3JpcHRUb2RvKXsKICAgICAgICBib2R5LmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ2NscC10ci10b2RvJywgJ1RPRE86IHJlcGxhY2UgdGhpcyBzdW1tYXJ5IHdpdGggdGhlIGZ1bGwgb2ZmaWNpYWwgdHJhbnNjcmlwdC4nKSk7CiAgICAgIH0KICAgICAgY2FyZC5hcHBlbmRDaGlsZChoZWFkKTsKICAgICAgY2FyZC5hcHBlbmRDaGlsZChib2R5KTsKICAgICAgdHJXcmFwLmFwcGVuZENoaWxkKGNhcmQpOwogICAgfSk7CiAgICByZXN1bHRzRWwuYXBwZW5kQ2hpbGQodHJXcmFwKTsKCiAgICAvKiByZXZlYWwgKyBjb3VudC11cCAqLwogICAgdmFyIHJldkVscyA9IHJlc3VsdHNFbC5xdWVyeVNlbGVjdG9yQWxsKCcuY2xwLXJldicpOwogICAgaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmICFyZWR1Y2VkTW90aW9uKXsKICAgICAgdmFyIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGVudHJpZXMpewogICAgICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlbil7CiAgICAgICAgICBpZiAoZW4uaXNJbnRlcnNlY3RpbmcpeyBlbi50YXJnZXQuY2xhc3NMaXN0LmFkZCgnY2xwLWluJyk7IGlvLnVub2JzZXJ2ZShlbi50YXJnZXQpOyB9CiAgICAgICAgfSk7CiAgICAgIH0sIHsgdGhyZXNob2xkOiAwLjE1IH0pOwogICAgICByZXZFbHMuZm9yRWFjaChmdW5jdGlvbihlKXsgaW8ub2JzZXJ2ZShlKTsgfSk7CiAgICB9IGVsc2UgewogICAgICByZXZFbHMuZm9yRWFjaChmdW5jdGlvbihlKXsgZS5jbGFzc0xpc3QuYWRkKCdjbHAtaW4nKTsgfSk7CiAgICB9CgogICAgdmFyIHJpbmcgPSByZXN1bHRzRWwucXVlcnlTZWxlY3RvcignI2NscFJpbmcnKTsKICAgIHZhciB0YXJnZXQgPSBzY29yZS50b3RhbDsKICAgIGlmIChyZWR1Y2VkTW90aW9uKXsKICAgICAgYmlnLnRleHRDb250ZW50ID0gdGFyZ2V0OwogICAgICByaW5nLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBDICogKDEgLSB0YXJnZXQgLyBUT1RBTF9RKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciB0MCA9IG51bGwsIERVUiA9IDExMDA7CiAgICAgIGZ1bmN0aW9uIHN0ZXAodHMpewogICAgICAgIGlmICghdDApIHQwID0gdHM7CiAgICAgICAgdmFyIHAgPSBNYXRoLm1pbigxLCAodHMgLSB0MCkgLyBEVVIpOwogICAgICAgIHZhciBlYXNlID0gMSAtIE1hdGgucG93KDEgLSBwLCAzKTsKICAgICAgICBiaWcudGV4dENvbnRlbnQgPSBNYXRoLnJvdW5kKGVhc2UgKiB0YXJnZXQpOwogICAgICAgIHJpbmcuc3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IEMgKiAoMSAtIChlYXNlICogdGFyZ2V0KSAvIFRPVEFMX1EpOwogICAgICAgIGlmIChwIDwgMSkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOwogICAgICB9CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTsKICAgIH0KICB9CgogIC8qIC0tLS0tLS0tLS0gdG9vbGJhciAvIGNvbnRyb2xzIC0tLS0tLS0tLS0gKi8KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwU3RhcnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBzdGF0ZS5zdGFydGVkID0gdHJ1ZTsKICAgIHN0YXRlLmlkeCA9IDA7CiAgICB0b29sYmFyLmhpZGRlbiA9IGZhbHNlOwogICAgcmVuZGVyKCk7CiAgICB1cGRhdGVTY29yZUNoaXAoKTsKICAgIHNjcm9sbFRvRWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscFNpbScpKTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwQ2hlY2snKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBpZiAoIXN0YXRlLnN0YXJ0ZWQpIHJldHVybjsKICAgIGNoZWNrQW5zd2VycygpOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBSZXNldCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHN0YXRlLnN0YXJ0ZWQgPSBmYWxzZTsKICAgIHN0YXRlLmlkeCA9IDA7CiAgICBzdGF0ZS5hbnN3ZXJzID0ge307CiAgICBzdGF0ZS5jaGVja2VkID0gZmFsc2U7CiAgICByZXN1bHRzRWwuaGlkZGVuID0gdHJ1ZTsKICAgIHJlc3VsdHNFbC5pbm5lckhUTUwgPSAnJzsKICAgIHRvb2xiYXIuaGlkZGVuID0gdHJ1ZTsKICAgIHVwZGF0ZVNjb3JlQ2hpcCgpOwogICAgcmVuZGVyKCk7CiAgICBzY3JvbGxUb0VsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBBcHAnKSwgMjApOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBUaW1lclRvZ2dsZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHN0YXRlLnRpbWVyT24gPSAhc3RhdGUudGltZXJPbjsKICAgIHRoaXMudGV4dENvbnRlbnQgPSAnVGltZXI6ICcgKyAoc3RhdGUudGltZXJPbiA\/ICdvbicgOiAnb2ZmJyk7CiAgICB2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHBRVGltZXInKTsKICAgIGlmICghc3RhdGUudGltZXJPbil7CiAgICAgIGlmIChxVGltZXIpeyBjbGVhckludGVydmFsKHFUaW1lcik7IHFUaW1lciA9IG51bGw7IH0KICAgICAgaWYgKHQpIHQucmVtb3ZlKCk7CiAgICB9IGVsc2UgaWYgKHNjcmVlbnNbc3RhdGUuaWR4XSAmJiBzY3JlZW5zW3N0YXRlLmlkeF0udHlwZSA9PT0gJ3EnKXsKICAgICAgcmVuZGVyKCk7CiAgICB9CiAgfSk7CgogIHVwZGF0ZVNjb3JlQ2hpcCgpOwogIHJlbmRlcigpOwp9KSgpOwo='));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Listening Set 7 Practice Test 2: 6-part computer-delivered listening test in the real exam format, with audio, instant scoring and answer key. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6083","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6083"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6083\/revisions"}],"predecessor-version":[{"id":6603,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6083\/revisions\/6603"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}