From 2e88aa5bf003125603079c1df26ce4ab351e340d Mon Sep 17 00:00:00 2001 From: Graham Hukill Date: Wed, 10 Dec 2025 15:49:12 -0500 Subject: [PATCH 1/3] Default exclusion_list_path to None --- transmogrifier/sources/transformer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmogrifier/sources/transformer.py b/transmogrifier/sources/transformer.py index 9a76cf5..9a7f281 100644 --- a/transmogrifier/sources/transformer.py +++ b/transmogrifier/sources/transformer.py @@ -190,7 +190,7 @@ def load( cls, source: str, source_file: str, - exclusion_list_path: str = "", + exclusion_list_path: str | None = None, run_id: str | None = None, run_timestamp: str | None = None, ) -> Transformer: @@ -200,6 +200,7 @@ def load( Args: source: Source repository label. Must match a source key from config.SOURCES. source_file: A file containing source records to be transformed. + exclusion_list_path: CSV filepath to use for explicitly skipping records. run_id: A unique identifier associated with this ETL run. run_timestamp: A timestamp associated with this ETL run. """ From fb64fa620784f94b4ce41f3e17825c91a6c2ceba Mon Sep 17 00:00:00 2001 From: Graham Hukill Date: Wed, 10 Dec 2025 15:53:31 -0500 Subject: [PATCH 2/3] Parse full HTML from mitlibwebsite source records Why these changes are being introduced: Now that browsertrix-harvester is including full HTML + response headers in the source record available to Transmogrifier, we can do two things: 1. Parse metadata for mitlibwebsite TIMDEX records from the original, full HTML in a more opinionated fashion than we could in browsertrix-harvester. 2. Extract good, meaningful full-text from the full HTML to use for the new `fulltext` field. How this addresses that need: Expects a new `html_base64` field in the browsertrix-harvester source records. Uses this to extract metadata and full-text for the record. Side effects of this change: * Full-text is now available in the TIMDEX record for the mitlibwebsite source. * If needed, this HTML parsing could be utilized to extract more granular, source specific metadata in the future. Relevant ticket(s): * https://mitlibraries.atlassian.net/browse/USE-259 --- pyproject.toml | 4 ++ .../mitlibwebsite/mitlibwebsite_records.jsonl | 6 +-- tests/fixtures/mitlibwebsite/website.html | 18 ++++++++ .../website_missing_og_description.html | 16 +++++++ tests/sources/json/test_mitlibwebsite.py | 19 ++++++-- transmogrifier/sources/json/mitlibwebsite.py | 46 +++++++++++++++++-- 6 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 tests/fixtures/mitlibwebsite/website.html create mode 100644 tests/fixtures/mitlibwebsite/website_missing_og_description.html diff --git a/pyproject.toml b/pyproject.toml index f5aab2a..5081712 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,6 +6,10 @@ disallow_untyped_calls = true disallow_untyped_defs = true exclude = ["tests/", "output/"] +[[tool.mypy.overrides]] +module = ["bs4", "bs4.*"] +ignore_missing_imports = true + [tool.pytest.ini_options] log_level = "INFO" diff --git a/tests/fixtures/mitlibwebsite/mitlibwebsite_records.jsonl b/tests/fixtures/mitlibwebsite/mitlibwebsite_records.jsonl index da23a20..ea8f0c8 100644 --- a/tests/fixtures/mitlibwebsite/mitlibwebsite_records.jsonl +++ b/tests/fixtures/mitlibwebsite/mitlibwebsite_records.jsonl @@ -1,3 +1,3 @@ -{"url": "https://libraries.mit.edu/search/", "cdx_warc_filename": "rec-ae2a62f6dc33-gh-test-2025-08-19-lib-website-full-no-depth-20250819202645354-7.warc.gz", "cdx_title": "Search | MIT Libraries", "cdx_offset": "303", "cdx_length": "40258", "og_title": "Search | MIT Libraries", "og_type": "website", "og_image": "https://libraries.mit.edu/app/themes/mitlib-parent/images/mit-libraries-logo-black-yellow-1200-1200.png", "og_url": "https://libraries.mit.edu/search/", "og_image_type": "image/png", "og_image_width": "1200", "og_image_height": "1200", "og_image_alt": "MIT Libraries logo", "og_description": "Use this page to learn about different ways you can search the MIT Libraries’ offerings. Use the Default Quick Search Our Quick Search is the default search on the Libraries’ homepage. This collects results from different library search tools and sorts the results into 4 categories: Books and media Articles and book chapters Archives and manuscript collections Our library website and guides The tool will search the 4 categories and present the top results from each category. It is useful to see the full breadth of what MIT Libraries has on a particular topic or author. Go straight to our […]", "fulltext": null, "fulltext_keywords": "Search,Web of Science,Search Start,Account Search Account,Borrow Direct Request,locations Locations Hours,Citation search Books,Search Hours,Books,articles,Search tools,Search Account Contact,Account Contact Search,Research,Search Search,Collections,Borrow,request,Site search Hours,Locations Hours", "og_site_name": null, "fulltext_50_words": NaN} -{"url": "https://libraries.mit.edu/about7/", "cdx_warc_filename": "rec-ae2a62f6dc33-gh-test-2025-08-19-lib-website-full-no-depth-20250819202645342-4.warc.gz", "cdx_title": "About | MIT Libraries", "cdx_offset": "303", "cdx_length": "38310", "og_title": "About | MIT Libraries", "og_type": "website", "og_image": "https://libraries.mit.edu/app/themes/mitlib-parent/images/mit-libraries-logo-black-yellow-1200-1200.png", "og_url": "https://libraries.mit.edu/about7/", "og_image_type": "image/png", "og_image_width": "1200", "og_image_height": "1200", "og_image_alt": "MIT Libraries logo", "og_description": "Saving the world, bit by bit. Our vision? A world where more people have access to knowledge and more voices are heard. Where tools and solutions can be networked, shared, and “hacked.” Where knowledge not only provides answers, but empowers and inspires. We think libraries can help build this world. Let’s get started. Discover our mission, vision, and values Read the Future of Libraries Task Force Report Envisioning Hayden Library The Libraries are pursuing a renovation of Hayden that reflects our vision for the future of libraries. Learn more Furthering MIT’s mission The final recommendations from the Open Access Task […]", "fulltext": null, "fulltext_keywords": "Web of Science,Collections Books,locations Hours Map,locations Locations Hours,Search Start,Account Search Account,Borrow Direct Request,Search Hours,Search,Site search Hours,Search Account Contact,Distinctive Collections Lewis,Collections Lewis Music,Locations Hours,Research,reserves Borrow Direct,WorldCat Books,Borrow,Books,Databases A-Z JSTOR", "og_site_name": null, "fulltext_50_words": NaN} -{"url": "https://libraries.mit.edu/research-support/", "cdx_warc_filename": "rec-ae2a62f6dc33-gh-test-2025-08-19-lib-website-full-no-depth-20250819202645511-6.warc.gz", "cdx_title": "Research support | MIT Libraries", "cdx_offset": "303", "cdx_length": "37208", "og_title": "Research support | MIT Libraries", "og_type": "website", "og_image": "https://libraries.mit.edu/app/themes/mitlib-parent/images/mit-libraries-logo-black-yellow-1200-1200.png", "og_url": "https://libraries.mit.edu/research-support/", "og_image_type": "image/png", "og_image_width": "1200", "og_image_height": "1200", "og_image_alt": "MIT Libraries logo", "og_description": "Find out where and how to get help for your research or coursework. Expert help Make an appointment for a consult with an expert librarian Research guides: specialized guides for every research interest Not sure where to begin or who to contact? Complete our Ask us email form. Quick help Connect from on & off-campus E-resource troubleshooting Guides for specific classes & programs Writing & publishing help Citing sources & avoiding plagiarism Dissertations/theses: prepare & submit your MIT thesis, or borrow others’  MIT thesis specifications DSpace@MIT: deposit your work to MIT’s repository Scholarly Communication Author identifiers: connect your name with […]", "fulltext": null, "fulltext_keywords": "Web of Science,Collections Books,Search Start,Research,Databases A-Z JSTOR,Distinctive Collections Lewis,Collections Lewis Music,locations Hours Map,Research support,Search,Borrow,Books,Search Hours,Site search Hours,WorldCat Books,locations Locations Hours,Account Search Account,Search Account Contact,request,Borrow Direct Request", "og_site_name": null, "fulltext_50_words": NaN} \ No newline at end of file +{"url": "https://libraries.mit.edu/search/", "status": "active", "cdx_warc_filename": "rec-595f2ddb3156-mitlibwebsite-20251209142416123-6.warc.gz", "cdx_title": "Search | MIT Libraries", "cdx_offset": "3524959", "cdx_length": "40691", "html_base64": "PCFET0NUWVBFIGh0bWw+CjwhLS1baWYgbHRlIElFIDldPjxodG1sIGNsYXNzPSJuby1qcyBsdGUtaWU5IiBsYW5nPSJlbiI+PCFbZW5kaWZdLS0+CjwhLS1baWYgIShJRSA4KSB8ICEoSUUgOSkgXT48IS0tPgo8aHRtbCBsYW5nPSJlbi1VUyIgY2xhc3M9Im5vLWpzIj4KPCEtLTwhW2VuZGlmXS0tPgo8aGVhZD4KCTxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4od2luZG93Lk5SRVVNfHwoTlJFVU09e30pKS5pbml0PXtwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6dHJ1ZX0sYWpheDp7ZGVueV9saXN0OlsiYmFtLm5yLWRhdGEubmV0Il19LGZlYXR1cmVfZmxhZ3M6WyJzb2Z0X25hdiJdLGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dHJ1ZX19Oyh3aW5kb3cuTlJFVU18fChOUkVVTT17fSkpLmxvYWRlcl9jb25maWc9e2FnZW50SUQ6IjU5NDM5ODc4OCIsYWNjb3VudElEOiIzODQ0ODAwIix0cnVzdEtleToiNjY2ODYiLHhwaWQ6IlZ3NERWVjVUQ0JBRlUxbFJBd0lFVjEwPSIsbGljZW5zZUtleToiTlJKUy0wMzY4MmNjNjljMWM1YTM5NTgzIixhcHBsaWNhdGlvbklEOiI1NzgzNDMzMTkiLGJyb3dzZXJJRDoiNTk0Mzk4Nzg4In07Oy8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIG5yLWxvYWRlci1zcGEtMS4zMDMuMC5taW4uanMuTElDRU5TRS50eHQgKi8KKCgpPT57dmFyIGUsdCxyPXszODQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7TlQ6KCk9PnMsVVM6KCk9PmQsWm06KCk9PmEsYlE6KCk9PnUsZFY6KCk9PmMscFY6KCk9Pmx9KTt2YXIgbj1yKDYxNTQpLGk9cigxODYzKSxvPXIoMTkxMCk7Y29uc3Qgcz17YmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGVycm9yQmVhY29uOiJiYW0ubnItZGF0YS5uZXQifTtmdW5jdGlvbiBhKCl7cmV0dXJuIG4uZ20uTlJFVU18fChuLmdtLk5SRVVNPXt9KSx2b2lkIDA9PT1uLmdtLm5ld3JlbGljJiYobi5nbS5uZXdyZWxpYz1uLmdtLk5SRVVNKSxuLmdtLk5SRVVNfWZ1bmN0aW9uIGMoKXtsZXQgZT1hKCk7cmV0dXJuIGUub3x8KGUubz17U1Q6bi5nbS5zZXRUaW1lb3V0LFNJOm4uZ20uc2V0SW1tZWRpYXRlfHxuLmdtLnNldEludGVydmFsLENUOm4uZ20uY2xlYXJUaW1lb3V0LFhIUjpuLmdtLlhNTEh0dHBSZXF1ZXN0LFJFUTpuLmdtLlJlcXVlc3QsRVY6bi5nbS5FdmVudCxQUjpuLmdtLlByb21pc2UsTU86bi5nbS5NdXRhdGlvbk9ic2VydmVyLEZFVENIOm4uZ20uZmV0Y2gsV1M6bi5nbS5XZWJTb2NrZXR9LCgwLG8uaSkoLi4uT2JqZWN0LnZhbHVlcyhlLm8pKSksZX1mdW5jdGlvbiB1KGUsdCl7bGV0IHI9YSgpO3IuaW5pdGlhbGl6ZWRBZ2VudHM/Pz17fSx0LmluaXRpYWxpemVkQXQ9e21zOigwLGkudCkoKSxkYXRlOm5ldyBEYXRlfSxyLmluaXRpYWxpemVkQWdlbnRzW2VdPXR9ZnVuY3Rpb24gZChlLHQpe2EoKVtlXT10fWZ1bmN0aW9uIGwoKXtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluZm98fHt9O2UuaW5mbz17YmVhY29uOnMuYmVhY29uLGVycm9yQmVhY29uOnMuZXJyb3JCZWFjb24sLi4udH19KCksZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluaXR8fHt9O2UuaW5pdD17Li4udH19KCksYygpLGZ1bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5sb2FkZXJfY29uZmlnfHx7fTtlLmxvYWRlcl9jb25maWc9ey4uLnR9fSgpLGEoKX19LDc4MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtUOigpPT5ufSk7Y29uc3Qgbj1yKDg2MCkuSzcucGFnZVZpZXdUaW1pbmd9LDg2MDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHskSjooKT0+ZCxLNzooKT0+YyxQMzooKT0+dSxYWDooKT0+aSxZeTooKT0+YSxkZjooKT0+byxxWTooKT0+bix2NDooKT0+c30pO2NvbnN0IG49ImV2ZW50cyIsaT0ianNlcnJvcnMiLG89ImJyb3dzZXIvYmxvYnMiLHM9InJ1bSIsYT0iYnJvd3Nlci9sb2dzIixjPXthamF4OiJhamF4IixnZW5lcmljRXZlbnRzOiJnZW5lcmljX2V2ZW50cyIsanNlcnJvcnM6aSxsb2dnaW5nOiJsb2dnaW5nIixtZXRyaWNzOiJtZXRyaWNzIixwYWdlQWN0aW9uOiJwYWdlX2FjdGlvbiIscGFnZVZpZXdFdmVudDoicGFnZV92aWV3X2V2ZW50IixwYWdlVmlld1RpbWluZzoicGFnZV92aWV3X3RpbWluZyIsc2Vzc2lvblJlcGxheToic2Vzc2lvbl9yZXBsYXkiLHNlc3Npb25UcmFjZToic2Vzc2lvbl90cmFjZSIsc29mdE5hdjoic29mdF9uYXZpZ2F0aW9ucyIsc3BhOiJzcGEifSx1PXtbYy5wYWdlVmlld0V2ZW50XToxLFtjLnBhZ2VWaWV3VGltaW5nXToyLFtjLm1ldHJpY3NdOjMsW2MuanNlcnJvcnNdOjQsW2Muc3BhXTo1LFtjLmFqYXhdOjYsW2Muc2Vzc2lvblRyYWNlXTo3LFtjLnNvZnROYXZdOjgsW2Muc2Vzc2lvblJlcGxheV06OSxbYy5sb2dnaW5nXToxMCxbYy5nZW5lcmljRXZlbnRzXToxMX0sZD17W2MucGFnZVZpZXdFdmVudF06cyxbYy5wYWdlVmlld1RpbWluZ106bixbYy5hamF4XTpuLFtjLnNwYV06bixbYy5zb2Z0TmF2XTpuLFtjLm1ldHJpY3NdOmksW2MuanNlcnJvcnNdOmksW2Muc2Vzc2lvblRyYWNlXTpvLFtjLnNlc3Npb25SZXBsYXldOm8sW2MubG9nZ2luZ106YSxbYy5nZW5lcmljRXZlbnRzXToiaW5zIn19LDk0NDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5pfSk7dmFyIG49cigzMjQxKTtmdW5jdGlvbiBpKGUsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZGVidWcmJihjb25zb2xlLmRlYnVnKCJOZXcgUmVsaWMgV2FybmluZzogaHR0cHM6Ly9naXRodWIuY29tL25ld3JlbGljL25ld3JlbGljLWJyb3dzZXItYWdlbnQvYmxvYi9tYWluL2RvY3Mvd2FybmluZy1jb2Rlcy5tZCMiLmNvbmNhdChlKSx0KSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6bnVsbCxkcmFpbmVkOm51bGwsdHlwZToiZGF0YSIsbmFtZToid2FybiIsZmVhdHVyZToid2FybiIsZGF0YTp7Y29kZTplLHNlY29uZGFyeTp0fX0pKX19LDk5MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBJDooKT0+byxFVDooKT0+cyxUWjooKT0+YSxwXzooKT0+aX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPXtFUlJPUjoiRVJST1IiLFdBUk46IldBUk4iLElORk86IklORk8iLERFQlVHOiJERUJVRyIsVFJBQ0U6IlRSQUNFIn0sbz17T0ZGOjAsRVJST1I6MSxXQVJOOjIsSU5GTzozLERFQlVHOjQsVFJBQ0U6NX0scz0ibG9nIixhPW4uSzcubG9nZ2luZ30sMTY4NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBazooKT0+dSxaZTooKT0+Zix4MzooKT0+ZH0pO3ZhciBuPXIoMzI0MSksaT1yKDc4MzYpLG89cigzNjA2KSxzPXIoODYwKSxhPXIoMjY0Nik7Y29uc3QgYz17fTtmdW5jdGlvbiB1KGUsdCl7Y29uc3Qgcj17c3RhZ2VkOiExLHByaW9yaXR5OnMuUDNbdF18fDB9O2woZSksY1tlXS5nZXQodCl8fGNbZV0uc2V0KHQscil9ZnVuY3Rpb24gZChlLHQpe2UmJmNbZV0mJihjW2VdLmdldCh0KSYmY1tlXS5kZWxldGUodCkscChlLHQsITEpLGNbZV0uc2l6ZSYmaChlKSl9ZnVuY3Rpb24gbChlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoImFnZW50SWRlbnRpZmllciByZXF1aXJlZCIpO2NbZV18fChjW2VdPW5ldyBNYXApfWZ1bmN0aW9uIGYoZT0iIix0PSJmZWF0dXJlIixyPSExKXtpZihsKGUpLCFlfHwhY1tlXS5nZXQodCl8fHIpcmV0dXJuIHAoZSx0KTtjW2VdLmdldCh0KS5zdGFnZWQ9ITAsaChlKX1mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9QXJyYXkuZnJvbShjW2VdKTt0LmV2ZXJ5KChbZSx0XSk9PnQuc3RhZ2VkKSYmKHQuc29ydCgoZSx0KT0+ZVsxXS5wcmlvcml0eS10WzFdLnByaW9yaXR5KSx0LmZvckVhY2goKFt0XSk9PntjW2VdLmRlbGV0ZSh0KSxwKGUsdCl9KSl9ZnVuY3Rpb24gcChlLHQscj0hMCl7Y29uc3Qgcz1lP2kuZWUuZ2V0KGUpOmkuZWUsYz1vLmkuaGFuZGxlcnM7aWYoIXMuYWJvcnRlZCYmcy5iYWNrbG9nJiZjKXtpZigoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImRyYWluIixmZWF0dXJlOnR9KSxyKXtjb25zdCBlPXMuYmFja2xvZ1t0XSxyPWNbdF07aWYocil7Zm9yKGxldCB0PTA7ZSYmdDxlLmxlbmd0aDsrK3QpZyhlW3RdLHIpO09iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLHRdKT0+e09iamVjdC52YWx1ZXModHx8e30pLmZvckVhY2godD0+e3RbMF0/Lm9uJiZ0WzBdPy5jb250ZXh0KClpbnN0YW5jZW9mIGEueSYmdFswXS5vbihlLHRbMV0pfSl9KX19cy5pc29sYXRlZEJhY2tsb2d8fGRlbGV0ZSBjW3RdLHMuYmFja2xvZ1t0XT1udWxsLHMuZW1pdCgiZHJhaW4tIit0LFtdKX19ZnVuY3Rpb24gZyhlLHQpe3ZhciByPWVbMV07T2JqZWN0LnZhbHVlcyh0W3JdfHx7fSkuZm9yRWFjaCh0PT57dmFyIHI9ZVswXTtpZih0WzBdPT09cil7dmFyIG49dFsxXSxpPWVbM10sbz1lWzJdO24uYXBwbHkoaSxvKX19KX19LDE3NDE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7VzooKT0+b30pO3ZhciBuPXIoOTQ0KSxpPXIoNDI2MSk7Y2xhc3Mgb3sjZShlLC4uLnQpe2lmKHRoaXNbZV0hPT1vLnByb3RvdHlwZVtlXSlyZXR1cm4gdGhpc1tlXSguLi50KTsoMCxuLlIpKDM1LGUpfWFkZFBhZ2VBY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy4jZShpLmhHLGUsdCl9cmVnaXN0ZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5lWSxlKX1yZWNvcmRDdXN0b21FdmVudChlLHQpe3JldHVybiB0aGlzLiNlKGkuZkYsZSx0KX1zZXRQYWdlVmlld05hbWUoZSx0KXtyZXR1cm4gdGhpcy4jZShpLkZ3LGUsdCl9c2V0Q3VzdG9tQXR0cmlidXRlKGUsdCxyKXtyZXR1cm4gdGhpcy4jZShpLmNELGUsdCxyKX1ub3RpY2VFcnJvcihlLHQpe3JldHVybiB0aGlzLiNlKGkubzUsZSx0KX1zZXRVc2VySWQoZSl7cmV0dXJuIHRoaXMuI2UoaS5EbCxlKX1zZXRBcHBsaWNhdGlvblZlcnNpb24oZSl7cmV0dXJuIHRoaXMuI2UoaS5uYixlKX1zZXRFcnJvckhhbmRsZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5idCxlKX1hZGRSZWxlYXNlKGUsdCl7cmV0dXJuIHRoaXMuI2UoaS5rNixlLHQpfWxvZyhlLHQpe3JldHVybiB0aGlzLiNlKGkuJDksZSx0KX1zdGFydCgpe3JldHVybiB0aGlzLiNlKGkuZDMpfWZpbmlzaGVkKGUpe3JldHVybiB0aGlzLiNlKGkuQkwsZSl9cmVjb3JkUmVwbGF5KCl7cmV0dXJuIHRoaXMuI2UoaS5DSCl9cGF1c2VSZXBsYXkoKXtyZXR1cm4gdGhpcy4jZShpLlRiKX1hZGRUb1RyYWNlKGUpe3JldHVybiB0aGlzLiNlKGkuVTIsZSl9c2V0Q3VycmVudFJvdXRlTmFtZShlKXtyZXR1cm4gdGhpcy4jZShpLlBBLGUpfWludGVyYWN0aW9uKGUpe3JldHVybiB0aGlzLiNlKGkuZFQsZSl9d3JhcExvZ2dlcihlLHQscil7cmV0dXJuIHRoaXMuI2UoaS5XYixlLHQscil9bWVhc3VyZShlLHQpe3JldHVybiB0aGlzLiNlKGkuVjEsZSx0KX1jb25zZW50KGUpe3JldHVybiB0aGlzLiNlKGkuUHYsZSl9fX0sMTg2MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm4gTWF0aC5mbG9vcihwZXJmb3JtYW5jZS5ub3coKSl9ci5kKHQse3Q6KCk9Pm59KX0sMTkxMDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtpOigpPT5vfSk7dmFyIG49cig5NDQpO2NvbnN0IGk9bmV3IE1hcDtmdW5jdGlvbiBvKC4uLmUpe3JldHVybiBlLmV2ZXJ5KGU9PntpZihpLmhhcyhlKSlyZXR1cm4gaS5nZXQoZSk7Y29uc3QgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS50b1N0cmluZygpLmluY2x1ZGVzKCJbbmF0aXZlIGNvZGVdIik7cmV0dXJuIHR8fCgwLG4uUikoNjQsZT8ubmFtZXx8ZT8udG9TdHJpbmcoKSksaS5zZXQoZSx0KSx0fSl9fSwyNTU1OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0Q6KCk9PmEsZjooKT0+c30pO3ZhciBuPXIoMzg0KSxpPXIoODEyMik7Y29uc3Qgbz17YmVhY29uOm4uTlQuYmVhY29uLGVycm9yQmVhY29uOm4uTlQuZXJyb3JCZWFjb24sbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAsc2E6dm9pZCAwLHF1ZXVlVGltZTp2b2lkIDAsYXBwbGljYXRpb25UaW1lOnZvaWQgMCx0dEd1aWQ6dm9pZCAwLHVzZXI6dm9pZCAwLGFjY291bnQ6dm9pZCAwLHByb2R1Y3Q6dm9pZCAwLGV4dHJhOnZvaWQgMCxqc0F0dHJpYnV0ZXM6e30sdXNlckF0dHJpYnV0ZXM6dm9pZCAwLGF0dHM6dm9pZCAwLHRyYW5zYWN0aW9uTmFtZTp2b2lkIDAsdE5hbWVQbGFpbjp2b2lkIDB9O2Z1bmN0aW9uIHMoZSl7dHJ5e3JldHVybiEhZS5saWNlbnNlS2V5JiYhIWUuZXJyb3JCZWFjb24mJiEhZS5hcHBsaWNhdGlvbklEfWNhdGNoKGUpe3JldHVybiExfX1jb25zdCBhPWU9PigwLGkuYSkoZSxvKX0sMjYxNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtCQjooKT0+cyxIMzooKT0+bixnOigpPT51LGlMOigpPT5jLHRTOigpPT5hLHVoOigpPT5pLHdrOigpPT5vfSk7Y29uc3Qgbj0iTlJCQSIsaT0iU0VTU0lPTiIsbz0xNDRlNSxzPTE4ZTUsYT17U1RBUlRFRDoic2Vzc2lvbi1zdGFydGVkIixQQVVTRToic2Vzc2lvbi1wYXVzZSIsUkVTRVQ6InNlc3Npb24tcmVzZXQiLFJFU1VNRToic2Vzc2lvbi1yZXN1bWUiLFVQREFURToic2Vzc2lvbi11cGRhdGUifSxjPXtTQU1FX1RBQjoic2FtZS10YWIiLENST1NTX1RBQjoiY3Jvc3MtdGFiIn0sdT17T0ZGOjAsRlVMTDoxLEVSUk9SOjJ9fSwyNjQ2OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse3k6KCk9Pm59KTtjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29udGV4dElkPWV9fX0sMjg0MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5pfSk7dmFyIG49cigzODc4KTtmdW5jdGlvbiBpKGUsdD0hMSxyLGkpeygwLG4uREQpKCJ2aXNpYmlsaXR5Y2hhbmdlIixmdW5jdGlvbigpe2lmKHQpcmV0dXJuIHZvaWQoImhpZGRlbiI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKSk7ZShkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpfSxyLGkpfX0sMzI0MTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPSJuZXdyZWxpYyI7ZnVuY3Rpb24gbyhlPXt9KXt0cnl7bi5nbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChpLHtkZXRhaWw6ZX0pKX1jYXRjaChlKXt9fX0sMzMwNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBOigpPT5vfSk7dmFyIG49cig3ODM2KTtjb25zdCBpPSgpPT57Y29uc3QgZT1uZXcgV2Vha1NldDtyZXR1cm4odCxyKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXIpe2lmKGUuaGFzKHIpKXJldHVybjtlLmFkZChyKX1yZXR1cm4gcn19O2Z1bmN0aW9uIG8oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlLGkoKSk/PyIifWNhdGNoKGUpe3RyeXtuLmVlLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe31yZXR1cm4iIn19fSwzMzMzOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyR2OigpPT5kLFRaOigpPT5uLFhoOigpPT5jLFpwOigpPT5pLGtkOigpPT51LG1xOigpPT5hLG5mOigpPT5zLHFOOigpPT5vfSk7Y29uc3Qgbj1yKDg2MCkuSzcuZ2VuZXJpY0V2ZW50cyxpPVsiYXV4Y2xpY2siLCJjbGljayIsImNvcHkiLCJrZXlkb3duIiwicGFzdGUiLCJzY3JvbGxlbmQiXSxvPVsiZm9jdXMiLCJibHVyIl0scz00LGE9MWUzLGM9MmUzLHU9WyJQYWdlQWN0aW9uIiwiVXNlckFjdGlvbiIsIkJyb3dzZXJQZXJmb3JtYW5jZSJdLGQ9e1JFU09VUkNFUzoiZXhwZXJpbWVudGFsLnJlc291cmNlcyIsUkVHSVNURVI6InJlZ2lzdGVyIn19LDM0MzQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7SnQ6KCk9Pm8sWU06KCk9PnV9KTt2YXIgbj1yKDc4MzYpLGk9cig1NjA3KTtjb25zdCBvPSJuckBvcmlnaW5hbDoiLmNvbmNhdChpLlcpLHM9NTA7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjPSExO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZXx8KGU9bi5lZSksci5pblBsYWNlPWZ1bmN0aW9uKGUsdCxuLGksbyl7bnx8KG49IiIpO2NvbnN0IHM9Ii0iPT09bi5jaGFyQXQoMCk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0IGM9dFthXSx1PWVbY107bCh1KXx8KGVbY109cih1LHM/YytuOm4saSxjLG8pKX19LHIuZmxhZz1vLHI7ZnVuY3Rpb24gcih0LHIsbixjLHUpe3JldHVybiBsKHQpP3Q6KHJ8fChyPSIiKSxucldyYXBwZXJbb109dCxmdW5jdGlvbihlLHQscil7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3Qua2V5cyl0cnl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZVtyXT10LHR9fSl9KSx0fWNhdGNoKGUpe2QoW2VdLHIpfWZvcih2YXIgbiBpbiBlKWEuY2FsbChlLG4pJiYodFtuXT1lW25dKX0odCxucldyYXBwZXIsZSksbnJXcmFwcGVyKTtmdW5jdGlvbiBucldyYXBwZXIoKXt2YXIgbyxhLGwsZjtsZXQgaDt0cnl7YT10aGlzLG89Wy4uLmFyZ3VtZW50c10sbD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKG8sYSk6bnx8e319Y2F0Y2godCl7ZChbdCwiIixbbyxhLGNdLGxdLGUpfWkocisic3RhcnQiLFtvLGEsY10sbCx1KTtjb25zdCBwPXBlcmZvcm1hbmNlLm5vdygpO2xldCBnO3RyeXtyZXR1cm4gZj10LmFwcGx5KGEsbyksZz1wZXJmb3JtYW5jZS5ub3coKSxmfWNhdGNoKGUpe3Rocm93IGc9cGVyZm9ybWFuY2Uubm93KCksaShyKyJlcnIiLFtvLGEsZV0sbCx1KSxoPWUsaH1maW5hbGx5e2NvbnN0IGU9Zy1wLHQ9e3N0YXJ0OnAsZW5kOmcsZHVyYXRpb246ZSxpc0xvbmdUYXNrOmU+PXMsbWV0aG9kTmFtZTpjLHRocm93bkVycm9yOmh9O3QuaXNMb25nVGFzayYmaSgibG9uZy10YXNrIixbdCxhXSxsLHUpLGkocisiZW5kIixbbyxhLGZdLGwsdSl9fX1mdW5jdGlvbiBpKHIsbixpLG8pe2lmKCFjfHx0KXt2YXIgcz1jO2M9ITA7dHJ5e2UuZW1pdChyLG4saSx0LG8pfWNhdGNoKHQpe2QoW3QscixuLGldLGUpfWM9c319fWZ1bmN0aW9uIGQoZSx0KXt0fHwodD1uLmVlKTt0cnl7dC5lbWl0KCJpbnRlcm5hbC1lcnJvciIsZSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBsKGUpe3JldHVybiEoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkmJiFlW29dKX19LDM2MDY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7aTooKT0+b30pO3ZhciBuPXIoOTkwOCk7by5vbj1zO3ZhciBpPW8uaGFuZGxlcnM9e307ZnVuY3Rpb24gbyhlLHQscixvKXtzKG98fG4uZCxpLGUsdCxyKX1mdW5jdGlvbiBzKGUsdCxyLGksbyl7b3x8KG89ImZlYXR1cmUiKSxlfHwoZT1uLmQpO3ZhciBzPXRbb109dFtvXXx8e307KHNbcl09c1tyXXx8W10pLnB1c2goW2UsaV0pfX0sMzczODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtIZTooKT0+aSxLcDooKT0+YSxMYzooKT0+dSxSejooKT0+ZCxUWjooKT0+bixiRDooKT0+byxkMzooKT0+cyxqeDooKT0+bCxzbDooKT0+Zix1UDooKT0+Y30pO2NvbnN0IG49cig4NjApLks3LnNlc3Npb25UcmFjZSxpPSJic3RSZXNvdXJjZSIsbz0icmVzb3VyY2UiLHM9Ii1zdGFydCIsYT0iLWVuZCIsYz0iZm4iK3MsdT0iZm4iK2EsZD0icHVzaFN0YXRlIixsPTFlMyxmPTNlNH0sMzc4NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5jLGI6KCk9PnV9KTt2YXIgbj1yKDk5MDgpLGk9cigxODYzKSxvPXIoODYwKSxzPXIoODE1NCksYT1yKDk5Myk7ZnVuY3Rpb24gYyhlLHQscj17fSxjPWEucF8uSU5GTyx1LGQ9KDAsaS50KSgpKXsoMCxuLnApKHMueFYsWyJBUEkvbG9nZ2luZy8iLmNvbmNhdChjLnRvTG93ZXJDYXNlKCksIi9jYWxsZWQiKV0sdm9pZCAwLG8uSzcubWV0cmljcyxlKSwoMCxuLnApKGEuRVQsW2QsdCxyLGMsdV0sdm9pZCAwLG8uSzcubG9nZ2luZyxlKX1mdW5jdGlvbiB1KGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmT2JqZWN0LnZhbHVlcyhhLnBfKS5zb21lKHQ9PnQ9PT1lLnRvVXBwZXJDYXNlKCkudHJpbSgpKX19LDM4Nzg6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJue2NhcHR1cmU6ZSxwYXNzaXZlOiExLHNpZ25hbDp0fX1mdW5jdGlvbiBpKGUsdCxyPSExLGkpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGUsdCxuKHIsaSkpfWZ1bmN0aW9uIG8oZSx0LHI9ITEsaSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQsbihyLGkpKX1yLmQodCx7REQ6KCk9Pm8salQ6KCk9Pm4sc3A6KCk9Pml9KX0sMzk2MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBTTooKT0+cyxPMjooKT0+bCxPVjooKT0+byxRdTooKT0+ZixUWjooKT0+YyxpaDooKT0+aCxwUDooKT0+YSx0MTooKT0+ZCx0QzooKT0+aSx3RDooKT0+dX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPVsiY2xpY2siLCJrZXlkb3duIiwic3VibWl0Il0sbz0icG9wc3RhdGUiLHM9ImFwaSIsYT0iaW5pdGlhbFBhZ2VMb2FkIixjPW4uSzcuc29mdE5hdix1PTVlMyxkPTUwMCxsPXtJTklUSUFMX1BBR0VfTE9BRDoiIixST1VURV9DSEFOR0U6MSxVTlNQRUNJRklFRDoyfSxmPXtJTlRFUkFDVElPTjoxLEFKQVg6MixDVVNUT01fRU5EOjMsQ1VTVE9NX1RSQUNFUjo0fSxoPXtJUDoiaW4gcHJvZ3Jlc3MiLFBGOiJwZW5kaW5nIGZpbmlzaCIsRklOOiJmaW5pc2hlZCIsQ0FOOiJjYW5jZWxsZWQifX0sNDIzNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig3ODM2KSxpPXIoMTY4Nyk7Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYWdlbnRJZGVudGlmaWVyPWUsdGhpcy5lZT1uLmVlLmdldChlKSx0aGlzLmZlYXR1cmVOYW1lPXQsdGhpcy5ibG9ja2VkPSExfWRlcmVnaXN0ZXJEcmFpbigpeygwLGkueDMpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUpfX19LDQyNjE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7JDk6KCk9PmQsQkw6KCk9PmMsQ0g6KCk9PnAsRGw6KCk9PlIsRnc6KCk9PncsUEE6KCk9PnYsUGw6KCk9Pm4sUHY6KCk9PkEsVGI6KCk9PmYsVTI6KCk9PnMsVjE6KCk9PkUsV2I6KCk9PlQsYnQ6KCk9PnksY0Q6KCk9PmIsZDM6KCk9PngsZFQ6KCk9PnUsZVk6KCk9PmcsZkY6KCk9PmgsaEc6KCk9Pm8saHc6KCk9PmksazY6KCk9PmEsbmI6KCk9Pm0sbzU6KCk9Pmx9KTtjb25zdCBuPSJhcGktIixpPW4rIml4bi0iLG89ImFkZFBhZ2VBY3Rpb24iLHM9ImFkZFRvVHJhY2UiLGE9ImFkZFJlbGVhc2UiLGM9ImZpbmlzaGVkIix1PSJpbnRlcmFjdGlvbiIsZD0ibG9nIixsPSJub3RpY2VFcnJvciIsZj0icGF1c2VSZXBsYXkiLGg9InJlY29yZEN1c3RvbUV2ZW50IixwPSJyZWNvcmRSZXBsYXkiLGc9InJlZ2lzdGVyIixtPSJzZXRBcHBsaWNhdGlvblZlcnNpb24iLHY9InNldEN1cnJlbnRSb3V0ZU5hbWUiLGI9InNldEN1c3RvbUF0dHJpYnV0ZSIseT0ic2V0RXJyb3JIYW5kbGVyIix3PSJzZXRQYWdlVmlld05hbWUiLFI9InNldFVzZXJJZCIseD0ic3RhcnQiLFQ9IndyYXBMb2dnZXIiLEU9Im1lYXN1cmUiLEE9ImNvbnNlbnQifSw0Mzg3OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlPXt9KXtyZXR1cm4hKCFlLmlkfHwhZS5uYW1lKX1mdW5jdGlvbiBpKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS50cmltKCkubGVuZ3RoPDUwMXx8Im51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSx0KXtpZigyIT09dD8uaGFydmVzdEVuZHBvaW50VmVyc2lvbilyZXR1cm57fTtjb25zdCByPXQuYWdlbnRSZWYucnVudGltZS5hcHBNZXRhZGF0YS5hZ2VudHNbMF0uZW50aXR5R3VpZDtyZXR1cm4gbihlKT97Im1mZS5pZCI6ZS5pZCwibWZlLm5hbWUiOmUubmFtZSxldmVudFNvdXJjZTplLmV2ZW50U291cmNlLCJwYXJlbnQuaWQiOmUucGFyZW50Py5pZHx8cn06eyJlbnRpdHkuZ3VpZCI6cixhcHBJZDp0LmFnZW50UmVmLmluZm8uYXBwbGljYXRpb25JRH19ci5kKHQse1V4OigpPT5vLGM3OigpPT5uLHlvOigpPT5pfSl9LDUyMDU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7ajooKT0+X30pO3ZhciBuPXIoMzg0KSxpPXIoMTc0MSk7dmFyIG89cigyNTU1KSxzPXIoMzMzMyk7Y29uc3QgYT1lPT57aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt0cnl7ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnF1ZXJ5U2VsZWN0b3IoZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9O3ZhciBjPXIoMjYxNCksdT1yKDk0NCksZD1yKDgxMjIpO2NvbnN0IGw9IltkYXRhLW5yLW1hc2tdIixmPWU9PigwLGQuYSkoZSwoKCk9Pntjb25zdCBlPXtmZWF0dXJlX2ZsYWdzOltdLGV4cGVyaW1lbnRhbDp7YWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbjohMSxyZXNvdXJjZXM6ITF9LG1hc2tfc2VsZWN0b3I6IioiLGJsb2NrX3NlbGVjdG9yOiJbZGF0YS1uci1ibG9ja10iLG1hc2tfaW5wdXRfb3B0aW9uczp7Y29sb3I6ITEsZGF0ZTohMSwiZGF0ZXRpbWUtbG9jYWwiOiExLGVtYWlsOiExLG1vbnRoOiExLG51bWJlcjohMSxyYW5nZTohMSxzZWFyY2g6ITEsdGVsOiExLHRleHQ6ITEsdGltZTohMSx1cmw6ITEsd2VlazohMSx0ZXh0YXJlYTohMSxzZWxlY3Q6ITEscGFzc3dvcmQ6ITB9fTtyZXR1cm57YWpheDp7ZGVueV9saXN0OnZvaWQgMCxibG9ja19pbnRlcm5hbDohMCxlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sYXBpOntnZXQgYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbigpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRUdJU1RFUil8fGUuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW59LHNldCBhbGxvd19yZWdpc3RlcmVkX2NoaWxkcmVuKHQpe2UuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW49dH0sZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YTohMX0sYnJvd3Nlcl9jb25zZW50X21vZGU6e2VuYWJsZWQ6ITF9LGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dm9pZCAwLGV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyOnZvaWQgMCxjb3JzX3VzZV9uZXdyZWxpY19oZWFkZXI6dm9pZCAwLGNvcnNfdXNlX3RyYWNlY29udGV4dF9oZWFkZXJzOnZvaWQgMCxhbGxvd2VkX29yaWdpbnM6dm9pZCAwfSxnZXQgZmVhdHVyZV9mbGFncygpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3N9LHNldCBmZWF0dXJlX2ZsYWdzKHQpe2UuZmVhdHVyZV9mbGFncz10fSxnZW5lcmljX2V2ZW50czp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGhhcnZlc3Q6e2ludGVydmFsOjMwfSxqc2Vycm9yczp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGxvZ2dpbmc6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxtZXRyaWNzOntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sb2JmdXNjYXRlOnZvaWQgMCxwYWdlX2FjdGlvbjp7ZW5hYmxlZDohMH0scGFnZV92aWV3X2V2ZW50OntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0scGFnZV92aWV3X3RpbWluZzp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHBlcmZvcm1hbmNlOntjYXB0dXJlX21hcmtzOiExLGNhcHR1cmVfbWVhc3VyZXM6ITEsY2FwdHVyZV9kZXRhaWw6ITAscmVzb3VyY2VzOntnZXQgZW5hYmxlZCgpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRVNPVVJDRVMpfHxlLmV4cGVyaW1lbnRhbC5yZXNvdXJjZXN9LHNldCBlbmFibGVkKHQpe2UuZXhwZXJpbWVudGFsLnJlc291cmNlcz10fSxhc3NldF90eXBlczpbXSxmaXJzdF9wYXJ0eV9kb21haW5zOltdLGlnbm9yZV9uZXdyZWxpYzohMH19LHByaXZhY3k6e2Nvb2tpZXNfZW5hYmxlZDohMH0scHJveHk6e2Fzc2V0czp2b2lkIDAsYmVhY29uOnZvaWQgMH0sc2Vzc2lvbjp7ZXhwaXJlc01zOmMud2ssaW5hY3RpdmVNczpjLkJCfSxzZXNzaW9uX3JlcGxheTp7YXV0b1N0YXJ0OiEwLGVuYWJsZWQ6ITEscHJlbG9hZDohMSxzYW1wbGluZ19yYXRlOjEwLGVycm9yX3NhbXBsaW5nX3JhdGU6MTAwLGNvbGxlY3RfZm9udHM6ITEsaW5saW5lX2ltYWdlczohMSxmaXhfc3R5bGVzaGVldHM6ITAsbWFza19hbGxfaW5wdXRzOiEwLGdldCBtYXNrX3RleHRfc2VsZWN0b3IoKXtyZXR1cm4gZS5tYXNrX3NlbGVjdG9yfSxzZXQgbWFza190ZXh0X3NlbGVjdG9yKHQpe2EodCk/ZS5tYXNrX3NlbGVjdG9yPSIiLmNvbmNhdCh0LCIsIikuY29uY2F0KGwpOiIiPT09dHx8bnVsbD09PXQ/ZS5tYXNrX3NlbGVjdG9yPWw6KDAsdS5SKSg1LHQpfSxnZXQgYmxvY2tfY2xhc3MoKXtyZXR1cm4ibnItYmxvY2sifSxnZXQgaWdub3JlX2NsYXNzKCl7cmV0dXJuIm5yLWlnbm9yZSJ9LGdldCBtYXNrX3RleHRfY2xhc3MoKXtyZXR1cm4ibnItbWFzayJ9LGdldCBibG9ja19zZWxlY3Rvcigpe3JldHVybiBlLmJsb2NrX3NlbGVjdG9yfSxzZXQgYmxvY2tfc2VsZWN0b3IodCl7YSh0KT9lLmJsb2NrX3NlbGVjdG9yKz0iLCIuY29uY2F0KHQpOiIiIT09dCYmKDAsdS5SKSg2LHQpfSxnZXQgbWFza19pbnB1dF9vcHRpb25zKCl7cmV0dXJuIGUubWFza19pbnB1dF9vcHRpb25zfSxzZXQgbWFza19pbnB1dF9vcHRpb25zKHQpe3QmJiJvYmplY3QiPT10eXBlb2YgdD9lLm1hc2tfaW5wdXRfb3B0aW9ucz17Li4udCxwYXNzd29yZDohMH06KDAsdS5SKSg3LHQpfX0sc2Vzc2lvbl90cmFjZTp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHNvZnRfbmF2aWdhdGlvbnM6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzcGE6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzc2w6dm9pZCAwLHVzZXJfYWN0aW9uczp7ZW5hYmxlZDohMCxlbGVtZW50QXR0cmlidXRlczpbImlkIiwiY2xhc3NOYW1lIiwidGFnTmFtZSIsInR5cGUiXX19fSkoKSk7dmFyIGg9cig2MTU0KSxwPXIoOTMyNCk7bGV0IGc9MDtjb25zdCBtPXtidWlsZEVudjpwLkYzLGRpc3RNZXRob2Q6cC5Ycyx2ZXJzaW9uOnAueHYsb3JpZ2luVGltZTpoLldOfSx2PXtjb25zZW50ZWQ6ITF9LGI9e2FwcE1ldGFkYXRhOnt9LGdldCBjb25zZW50ZWQoKXtyZXR1cm4gdGhpcy5zZXNzaW9uPy5zdGF0ZT8uY29uc2VudHx8di5jb25zZW50ZWR9LHNldCBjb25zZW50ZWQoZSl7di5jb25zZW50ZWQ9ZX0sY3VzdG9tVHJhbnNhY3Rpb246dm9pZCAwLGRlbnlMaXN0OnZvaWQgMCxkaXNhYmxlZDohMSxoYXJ2ZXN0ZXI6dm9pZCAwLGlzb2xhdGVkQmFja2xvZzohMSxpc1JlY29yZGluZzohMSxsb2FkZXJUeXBlOnZvaWQgMCxtYXhCeXRlczozZTQsb2JmdXNjYXRvcjp2b2lkIDAsb25lcnJvcjp2b2lkIDAscHRpZDp2b2lkIDAscmVsZWFzZUlkczp7fSxzZXNzaW9uOnZvaWQgMCx0aW1lS2VlcGVyOnZvaWQgMCxyZWdpc3RlcmVkRW50aXRpZXM6W10sanNBdHRyaWJ1dGVzTWV0YWRhdGE6e2J5dGVzOjB9LGdldCBoYXJ2ZXN0Q291bnQoKXtyZXR1cm4rK2d9fSx5PWU9Pntjb25zdCB0PSgwLGQuYSkoZSxiKSxyPU9iamVjdC5rZXlzKG0pLnJlZHVjZSgoZSx0KT0+KGVbdF09e3ZhbHVlOm1bdF0sd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9LGUpLHt9KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxyKX07dmFyIHc9cig1NzAxKTtjb25zdCBSPWU9Pntjb25zdCB0PWUuc3RhcnRzV2l0aCgiaHR0cCIpO2UrPSIvIixyLnA9dD9lOiJodHRwczovLyIrZX07dmFyIHg9cig3ODM2KSxUPXIoMzI0MSk7Y29uc3QgRT17YWNjb3VudElEOnZvaWQgMCx0cnVzdEtleTp2b2lkIDAsYWdlbnRJRDp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAseHBpZDp2b2lkIDB9LEE9ZT0+KDAsZC5hKShlLEUpLFM9bmV3IFNldDtmdW5jdGlvbiBfKGUsdD17fSxyLHMpe2xldHtpbml0OmEsaW5mbzpjLGxvYWRlcl9jb25maWc6dSxydW50aW1lOmQ9e30sZXhwb3NlZDpsPSEwfT10O2lmKCFjKXtjb25zdCBlPSgwLG4ucFYpKCk7YT1lLmluaXQsYz1lLmluZm8sdT1lLmxvYWRlcl9jb25maWd9ZS5pbml0PWYoYXx8e30pLGUubG9hZGVyX2NvbmZpZz1BKHV8fHt9KSxjLmpzQXR0cmlidXRlcz8/PXt9LGguYnYmJihjLmpzQXR0cmlidXRlcy5pc1dvcmtlcj0hMCksZS5pbmZvPSgwLG8uRCkoYyk7Y29uc3QgcD1lLmluaXQsZz1bYy5iZWFjb24sYy5lcnJvckJlYWNvbl07Uy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwocC5wcm94eS5hc3NldHMmJihSKHAucHJveHkuYXNzZXRzKSxnLnB1c2gocC5wcm94eS5hc3NldHMpKSxwLnByb3h5LmJlYWNvbiYmZy5wdXNoKHAucHJveHkuYmVhY29uKSxlLmJlYWNvbnM9Wy4uLmddLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsbi5wVikoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpLlcucHJvdG90eXBlKS5mb3JFYWNoKHI9Pntjb25zdCBuPWkuVy5wcm90b3R5cGVbcl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fCJjb25zdHJ1Y3RvciI9PT1uKXJldHVybjtsZXQgbz10W3JdO2Vbcl0mJiExIT09ZS5leHBvc2VkJiYibWljcm8tYWdlbnQiIT09ZS5ydW50aW1lPy5sb2FkZXJUeXBlJiYodFtyXT0oLi4udCk9Pntjb25zdCBuPWVbcl0oLi4udCk7cmV0dXJuIG8/byguLi50KTpufSl9KX0oZSksKDAsbi5VUykoImFjdGl2YXRlZEZlYXR1cmVzIix3LkIpLGUucnVuU29mdE5hdk92ZXJTcGEmJj0hMD09PXAuc29mdF9uYXZpZ2F0aW9ucy5lbmFibGVkJiZwLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMoInNvZnRfbmF2IikpLGQuZGVueUxpc3Q9Wy4uLnAuYWpheC5kZW55X2xpc3R8fFtdLC4uLnAuYWpheC5ibG9ja19pbnRlcm5hbD9nOltdXSxkLnB0aWQ9ZS5hZ2VudElkZW50aWZpZXIsZC5sb2FkZXJUeXBlPXIsZS5ydW50aW1lPXkoZCksUy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwoZS5lZT14LmVlLmdldChlLmFnZW50SWRlbnRpZmllciksZS5leHBvc2VkPWwsKDAsVC5XKSh7YWdlbnRJZGVudGlmaWVyOmUuYWdlbnRJZGVudGlmaWVyLGRyYWluZWQ6ISF3LkI/LltlLmFnZW50SWRlbnRpZmllcl0sdHlwZToibGlmZWN5Y2xlIixuYW1lOiJpbml0aWFsaXplIixmZWF0dXJlOnZvaWQgMCxkYXRhOmUuY29uZmlnfSkpLFMuYWRkKGUuYWdlbnRJZGVudGlmaWVyKX19LDUyNzA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7QXc6KCk9PnMsU1I6KCk9Pm8sckY6KCk9PmF9KTt2YXIgbj1yKDM4NCksaT1yKDc3NjcpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuISEoMCxuLmRWKSgpLm8uTU8mJigwLGkuVikoZSkmJiEwPT09ZT8uc2Vzc2lvbl90cmFjZS5lbmFibGVkfWZ1bmN0aW9uIHMoZSl7cmV0dXJuITA9PT1lPy5zZXNzaW9uX3JlcGxheS5wcmVsb2FkJiZvKGUpfWZ1bmN0aW9uIGEoZSx0KXt0cnl7aWYoInN0cmluZyI9PXR5cGVvZiB0Py50eXBlKXtpZigicGFzc3dvcmQiPT09dC50eXBlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIioiLnJlcGVhdChlPy5sZW5ndGh8fDApO2lmKHZvaWQgMCE9PXQ/LmRhdGFzZXQ/Lm5yVW5tYXNrfHx0Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCJuci11bm1hc2siKSlyZXR1cm4gZX19Y2F0Y2goZSl7fXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnJlcGxhY2UoL1tcU10vZywiKiIpOiIqIi5yZXBlYXQoZT8ubGVuZ3RofHwwKX19LDUyODk6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7R0c6KCk9Pm8sUXI6KCk9PmEsc0I6KCk9PnN9KTt2YXIgbj1yKDM4NzgpO2Z1bmN0aW9uIGkoKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50fHwiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZX1mdW5jdGlvbiBvKGUsdCl7aWYoaSgpKXJldHVybiBlKCk7KDAsbi5zcCkoImxvYWQiLGUsdCl9ZnVuY3Rpb24gcyhlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLkREKSgiRE9NQ29udGVudExvYWRlZCIsZSl9ZnVuY3Rpb24gYShlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLnNwKSgicG9wc3RhdGUiLGUpfX0sNTYwNzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5ufSk7Y29uc3Qgbj0oMCxyKDk1NjYpLmJ6KSgpfSw1NzAxOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0I6KCk9Pm8sdDooKT0+c30pO3ZhciBuPXIoMzI0MSk7Y29uc3QgaT1uZXcgU2V0LG89e307ZnVuY3Rpb24gcyhlLHQpe2NvbnN0IHI9dC5hZ2VudElkZW50aWZpZXI7b1tyXT8/PXt9LGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGkuaGFzKHIpfHwodC5lZS5lbWl0KCJydW1yZXNwIixbZV0pLG9bcl09ZSxpLmFkZChyKSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6cixsb2FkZWQ6ITAsZHJhaW5lZDohMCx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImxvYWQiLGZlYXR1cmU6dm9pZCAwLGRhdGE6ZX0pKSl9fSw2MTU0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0E0OigpPT5hLE9GOigpPT5kLFJJOigpPT5pLFdOOigpPT5oLGJ2OigpPT5vLGdtOigpPT5zLGxSOigpPT5mLG06KCk9PnUsbXc6KCk9PmMsc2I6KCk9Pmx9KTt2YXIgbj1yKDE4NjMpO2NvbnN0IGk9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93LmRvY3VtZW50LG89InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLm5hdmlnYXRvciBpbnN0YW5jZW9mIFdvcmtlck5hdmlnYXRvcnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMubmF2aWdhdG9yIGluc3RhbmNlb2YgV29ya2VyTmF2aWdhdG9yKSxzPWk/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMpLGE9ImNvbXBsZXRlIj09PXM/LmRvY3VtZW50Py5yZWFkeVN0YXRlLGM9Qm9vbGVhbigiaGlkZGVuIj09PXM/LmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUpLHU9IiIrcz8ubG9jYXRpb24sZD0vaVBhZHxpUGhvbmV8aVBvZC8udGVzdChzLm5hdmlnYXRvcj8udXNlckFnZW50KSxsPWQmJiJ1bmRlZmluZWQiPT10eXBlb2YgU2hhcmVkV29ya2VyLGY9KCgpPT57Y29uc3QgZT1zLm5hdmlnYXRvcj8udXNlckFnZW50Py5tYXRjaCgvRmlyZWZveFsvXHNdKFxkK1wuXGQrKS8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD49Mj8rZVsxXTowfSkoKSxoPURhdGUubm93KCktKDAsbi50KSgpfSw2MzQ0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0JCOigpPT5kLFFiOigpPT5sLFRaOigpPT5pLFVnOigpPT5zLFZoOigpPT5vLF9zOigpPT5hLGJjOigpPT51LHlQOigpPT5jfSk7dmFyIG49cigyNjE0KTtjb25zdCBpPXIoODYwKS5LNy5zZXNzaW9uUmVwbGF5LG89ImVycm9yRHVyaW5nUmVwbGF5IixzPS4xMixhPXtEb21Db250ZW50TG9hZGVkOjAsTG9hZDoxLEZ1bGxTbmFwc2hvdDoyLEluY3JlbWVudGFsU25hcHNob3Q6MyxNZXRhOjQsQ3VzdG9tOjV9LGM9e1tuLmcuRVJST1JdOjE1ZTMsW24uZy5GVUxMXTozZTUsW24uZy5PRkZdOjB9LHU9e1JFU0VUOnttZXNzYWdlOiJTZXNzaW9uIHdhcyByZXNldCIsc206IlJlc2V0In0sSU1QT1JUOnttZXNzYWdlOiJSZWNvcmRlciBmYWlsZWQgdG8gaW1wb3J0IixzbToiSW1wb3J0In0sVE9PX01BTlk6e21lc3NhZ2U6IjQyOTogVG9vIE1hbnkgUmVxdWVzdHMiLHNtOiJUb28tTWFueSJ9LFRPT19CSUc6e21lc3NhZ2U6IlBheWxvYWQgd2FzIHRvbyBsYXJnZSIsc206IlRvby1CaWcifSxDUk9TU19UQUI6e21lc3NhZ2U6IlNlc3Npb24gRW50aXR5IHdhcyBzZXQgdG8gT0ZGIG9uIGFub3RoZXIgdGFiIixzbToiQ3Jvc3MtVGFiIn0sRU5USVRMRU1FTlRTOnttZXNzYWdlOiJTZXNzaW9uIFJlcGxheSBpcyBub3QgYWxsb3dlZCBhbmQgd2lsbCBub3QgYmUgc3RhcnRlZCIsc206IkVudGl0bGVtZW50In19LGQ9NWUzLGw9e0FQSToiYXBpIixSRVNVTUU6InJlc3VtZSIsU1dJVENIX1RPX0ZVTEw6InN3aXRjaFRvRnVsbCIsSU5JVElBTElaRToiaW5pdGlhbGl6ZSIsUFJFTE9BRDoicHJlbG9hZCJ9fSw2Mzg5OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQ9NTAwLHI9e30pe2NvbnN0IG49cj8ubGVhZGluZ3x8ITE7bGV0IGk7cmV0dXJuKC4uLnIpPT57biYmdm9pZCAwPT09aSYmKGUuYXBwbHkodGhpcyxyKSxpPXNldFRpbWVvdXQoKCk9PntpPWNsZWFyVGltZW91dChpKX0sdCkpLG58fChjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ZS5hcHBseSh0aGlzLHIpfSx0KSl9fWZ1bmN0aW9uIGkoZSl7bGV0IHQ9ITE7cmV0dXJuKC4uLnIpPT57dHx8KHQ9ITAsZS5hcHBseSh0aGlzLHIpKX19ci5kKHQse0o6KCk9PmksczooKT0+bn0pfSw2NjMwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5wYWdlVmlld0V2ZW50fSw2Nzc0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5qc2Vycm9yc30sNzI5NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtYdjooKT0+cyxnWDooKT0+aSxpVzooKT0+b30pO3ZhciBuPVtdO2Z1bmN0aW9uIGkoZSl7aWYoIWV8fG8oZSkpcmV0dXJuITE7aWYoMD09PW4ubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKCIqIj09PXIuaG9zdG5hbWUpcmV0dXJuITE7aWYoYShyLmhvc3RuYW1lLGUuaG9zdG5hbWUpJiZjKHIucGF0aG5hbWUsZS5wYXRobmFtZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwPT09ZS5ob3N0bmFtZX1mdW5jdGlvbiBzKGUpe2lmKG49W10sZSYmZS5sZW5ndGgpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoIXIpY29udGludWU7MD09PXIuaW5kZXhPZigiaHR0cDovLyIpP3I9ci5zdWJzdHJpbmcoNyk6MD09PXIuaW5kZXhPZigiaHR0cHM6Ly8iKSYmKHI9ci5zdWJzdHJpbmcoOCkpO2NvbnN0IGk9ci5pbmRleE9mKCIvIik7bGV0IG8scztpPjA/KG89ci5zdWJzdHJpbmcoMCxpKSxzPXIuc3Vic3RyaW5nKGkpKToobz1yLHM9IiIpO2xldFthXT1vLnNwbGl0KCI6Iik7bi5wdXNoKHtob3N0bmFtZTphLHBhdGhuYW1lOnN9KX19ZnVuY3Rpb24gYShlLHQpe3JldHVybiEoZS5sZW5ndGg+dC5sZW5ndGgpJiZ0LmluZGV4T2YoZSk9PT10Lmxlbmd0aC1lLmxlbmd0aH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIi8iKSYmKGU9ZS5zdWJzdHJpbmcoMSkpLDA9PT10LmluZGV4T2YoIi8iKSYmKHQ9dC5zdWJzdHJpbmcoMSkpLCIiPT09ZXx8ZT09PXR9fSw3Mzc4OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyRwOigpPT54LEJSOigpPT5iLEtwOigpPT5SLEwzOigpPT55LExjOigpPT5jLE5DOigpPT5vLFNHOigpPT5kLFRaOigpPT5pLFU2OigpPT5wLFVUOigpPT5tLGQzOigpPT53LGRUOigpPT5mLGU1OigpPT5FLGd4OigpPT52LGw5OigpPT5sLG9XOigpPT5oLG9wOigpPT5nLHJ3OigpPT51LHRIOigpPT5BLHVQOigpPT5hLHdXOigpPT5ULHhxOigpPT5zfSk7dmFyIG49cigzODQpO2NvbnN0IGk9cig4NjApLks3LnNwYSxvPVsiY2xpY2siLCJzdWJtaXQiLCJrZXlwcmVzcyIsImtleWRvd24iLCJrZXl1cCIsImNoYW5nZSJdLHM9OTk5LGE9ImZuLXN0YXJ0IixjPSJmbi1lbmQiLHU9ImNiLXN0YXJ0IixkPSJhcGktaXhuLSIsbD0icmVtYWluaW5nIixmPSJpbnRlcmFjdGlvbiIsaD0ic3BhTm9kZSIscD0ianNvbnBOb2RlIixnPSJmZXRjaC1zdGFydCIsbT0iZmV0Y2gtZG9uZSIsdj0iZmV0Y2gtYm9keS0iLGI9Impzb25wLWVuZCIseT0oMCxuLmRWKSgpLm8uU1Qsdz0iLXN0YXJ0IixSPSItZW5kIix4PSItYm9keSIsVD0iY2IiK1IsRT0ianNUaW1lIixBPSJmZXRjaCJ9LDc0ODU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7RDooKT0+aX0pO3ZhciBuPXIoNjE1NCk7ZnVuY3Rpb24gaShlKXtpZigwPT09KGV8fCIiKS5pbmRleE9mKCJkYXRhOiIpKXJldHVybntwcm90b2NvbDoiZGF0YSJ9O3RyeXtjb25zdCB0PW5ldyBVUkwoZSxsb2NhdGlvbi5ocmVmKSxyPXtwb3J0OnQucG9ydCxob3N0bmFtZTp0Lmhvc3RuYW1lLHBhdGhuYW1lOnQucGF0aG5hbWUsc2VhcmNoOnQuc2VhcmNoLHByb3RvY29sOnQucHJvdG9jb2wuc2xpY2UoMCx0LnByb3RvY29sLmluZGV4T2YoIjoiKSksc2FtZU9yaWdpbjp0LnByb3RvY29sPT09bi5nbT8ubG9jYXRpb24/LnByb3RvY29sJiZ0Lmhvc3Q9PT1uLmdtPy5sb2NhdGlvbj8uaG9zdH07cmV0dXJuIHIucG9ydCYmIiIhPT1yLnBvcnR8fCgiaHR0cDoiPT09dC5wcm90b2NvbCYmKHIucG9ydD0iODAiKSwiaHR0cHM6Ij09PXQucHJvdG9jb2wmJihyLnBvcnQ9IjQ0MyIpKSxyLnBhdGhuYW1lJiYiIiE9PXIucGF0aG5hbWU/ci5wYXRobmFtZS5zdGFydHNXaXRoKCIvIil8fChyLnBhdGhuYW1lPSIvIi5jb25jYXQoci5wYXRobmFtZSkpOnIucGF0aG5hbWU9Ii8iLHJ9Y2F0Y2goZSl7cmV0dXJue319fX0sNzY5OTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtJdDooKT0+byxLQzooKT0+YSxObzooKT0+aSxxaDooKT0+c30pO3ZhciBuPXIoODYwKTtjb25zdCBpPTE2ZTMsbz0xZTYscz0iU0VTU0lPTl9FUlJPUiIsYT17W24uSzcubG9nZ2luZ106ITAsW24uSzcuZ2VuZXJpY0V2ZW50c106ITEsW24uSzcuanNlcnJvcnNdOiExLFtuLks3LmFqYXhdOiExfX0sNzc2NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtWOigpPT5pfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPWU9Pm4uUkkmJiEwPT09ZT8ucHJpdmFjeS5jb29raWVzX2VuYWJsZWR9LDc4MzY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7UDooKT0+YSxlZTooKT0+Y30pO3ZhciBuPXIoMzg0KSxpPXIoODk5MCksbz1yKDI2NDYpLHM9cig1NjA3KTtjb25zdCBhPSJuckBjb250ZXh0OiIuY29uY2F0KHMuVyksYz1mdW5jdGlvbiBlKHQscil7dmFyIG49e30scz17fSxkPXt9LGw9ITE7dHJ5e2w9MTY9PT1yLmxlbmd0aCYmdS5pbml0aWFsaXplZEFnZW50cz8uW3JdPy5ydW50aW1lLmlzb2xhdGVkQmFja2xvZ31jYXRjaChlKXt9dmFyIGY9e29uOnAsYWRkRXZlbnRMaXN0ZW5lcjpwLHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uW2VdO2lmKCFyKXJldHVybjtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldPT09dCYmci5zcGxpY2UoaSwxKX0sZW1pdDpmdW5jdGlvbihlLHIsbixpLG8peyExIT09byYmKG89ITApO2lmKGMuYWJvcnRlZCYmIWkpcmV0dXJuO3QmJm8mJnQuZW1pdChlLHIsbik7dmFyIGE9aChuKTtnKGUpLmZvckVhY2goZT0+e2UuYXBwbHkoYSxyKX0pO3ZhciB1PXYoKVtzW2VdXTt1JiZ1LnB1c2goW2YsZSxyLGFdKTtyZXR1cm4gYX0sZ2V0Om0sbGlzdGVuZXJzOmcsY29udGV4dDpoLGJ1ZmZlcjpmdW5jdGlvbihlLHQpe2NvbnN0IHI9digpO2lmKHQ9dHx8ImZlYXR1cmUiLGYuYWJvcnRlZClyZXR1cm47T2JqZWN0LmVudHJpZXMoZXx8e30pLmZvckVhY2goKFtlLG5dKT0+e3Nbbl09dCx0IGluIHJ8fChyW3RdPVtdKX0pfSxhYm9ydDpmdW5jdGlvbigpe2YuX2Fib3J0ZWQ9ITAsT2JqZWN0LmtleXMoZi5iYWNrbG9nKS5mb3JFYWNoKGU9PntkZWxldGUgZi5iYWNrbG9nW2VdfSl9LGlzQnVmZmVyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiEhdigpW3NbZV1dfSxkZWJ1Z0lkOnIsYmFja2xvZzpsP3t9OnQmJiJvYmplY3QiPT10eXBlb2YgdC5iYWNrbG9nP3QuYmFja2xvZzp7fSxpc29sYXRlZEJhY2tsb2c6bH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJhYm9ydGVkIix7Z2V0OigpPT57bGV0IGU9Zi5fYWJvcnRlZHx8ITE7cmV0dXJuIGV8fCh0JiYoZT10LmFib3J0ZWQpLGUpfX0pLGY7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIG8ueT9lOmU/KDAsaS5JKShlLGEsKCk9Pm5ldyBvLnkoYSkpOm5ldyBvLnkoYSl9ZnVuY3Rpb24gcChlLHQpe25bZV09ZyhlKS5jb25jYXQodCl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbltlXXx8W119ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZFt0XT1kW3RdfHxlKGYsdCl9ZnVuY3Rpb24gdigpe3JldHVybiBmLmJhY2tsb2d9fSh2b2lkIDAsImdsb2JhbEVFIiksdT0oMCxuLlptKSgpO3UuZWV8fCh1LmVlPWMpfSw4MTIyOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse2E6KCk9Pml9KTt2YXIgbj1yKDk0NCk7ZnVuY3Rpb24gaShlLHQpe3RyeXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybigwLG4uUikoMyk7aWYoIXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4oMCxuLlIpKDQpO2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodCksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpLG89MD09PU9iamVjdC5rZXlzKHIpLmxlbmd0aD9lOnI7Zm9yKGxldCBzIGluIG8paWYodm9pZCAwIT09ZVtzXSl0cnl7aWYobnVsbD09PWVbc10pe3Jbc109bnVsbDtjb250aW51ZX1BcnJheS5pc0FycmF5KGVbc10pJiZBcnJheS5pc0FycmF5KHRbc10pP3Jbc109QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5lW3NdLC4uLnRbc11dKSk6Im9iamVjdCI9PXR5cGVvZiBlW3NdJiYib2JqZWN0Ij09dHlwZW9mIHRbc10/cltzXT1pKGVbc10sdFtzXSk6cltzXT1lW3NdfWNhdGNoKGUpe3Jbc118fCgwLG4uUikoMSxlKX1yZXR1cm4gcn1jYXRjaChlKXsoMCxuLlIpKDIsZSl9fX0sODEzOTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5mfSk7dmFyIG49cig3ODM2KSxpPXIoMzQzNCksbz1yKDg5OTApLHM9cig2MTU0KTtjb25zdCBhPXt9LGM9cy5nbS5YTUxIdHRwUmVxdWVzdCx1PSJhZGRFdmVudExpc3RlbmVyIixkPSJyZW1vdmVFdmVudExpc3RlbmVyIixsPSJuckB3cmFwcGVkOiIuY29uY2F0KG4uUCk7ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8bi5lZSkuZ2V0KCJldmVudHMiKX0oZSk7aWYoYVt0LmRlYnVnSWRdKyspcmV0dXJuIHQ7YVt0LmRlYnVnSWRdPTE7dmFyIHI9KDAsaS5ZTSkodCwhMCk7ZnVuY3Rpb24gZihlKXtyLmluUGxhY2UoZSxbdSxkXSwiLSIscCl9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlWzFdfXJldHVybiJnZXRQcm90b3R5cGVPZiJpbiBPYmplY3QmJihzLlJJJiZoKGRvY3VtZW50LGYpLGMmJmgoYy5wcm90b3R5cGUsZiksaChzLmdtLGYpKSx0Lm9uKHUrIi1zdGFydCIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdO2lmKG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJiJuZXdyZWxpYyIhPT1lWzBdKXt2YXIgaT0oMCxvLkkpKG4sbCxmdW5jdGlvbigpe3ZhciBlPXtvYmplY3Q6ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5oYW5kbGVFdmVudClyZXR1cm47cmV0dXJuIG4uaGFuZGxlRXZlbnQuYXBwbHkobixhcmd1bWVudHMpfSxmdW5jdGlvbjpufVt0eXBlb2Ygbl07cmV0dXJuIGU/cihlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIik6bn0pO3RoaXMud3JhcHBlZD1lWzFdPWl9fSksdC5vbihkKyItc3RhcnQiLGZ1bmN0aW9uKGUpe2VbMV09dGhpcy53cmFwcGVkfHxlWzFdfSksdH1mdW5jdGlvbiBoKGUsdCwuLi5yKXtsZXQgbj1lO2Zvcig7Im9iamVjdCI9PXR5cGVvZiBuJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdSk7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO24mJnQobiwuLi5yKX19LDgxNTQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7el86KCk9Pm8sWEc6KCk9PmEsVFo6KCk9Pm4scnM6KCk9PmkseFY6KCk9PnN9KTtyKDYxNTQpLHIoOTU2NikscigzODQpO2NvbnN0IG49cig4NjApLks3Lm1ldHJpY3MsaT0ic20iLG89ImNtIixzPSJzdG9yZVN1cHBvcnRhYmlsaXR5TWV0cmljcyIsYT0ic3RvcmVFdmVudE1ldHJpY3MifSw4Mzc0OihlLHQscik9PntyLm5jPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQ/LmN1cnJlbnRTY3JpcHQ/Lm5vbmNlfWNhdGNoKGUpe31yZXR1cm4iIn0pKCl9LDg5OTA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7STooKT0+aX0pO3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaShlLHQscil7aWYobi5jYWxsKGUsdCkpcmV0dXJuIGVbdF07dmFyIGk9cigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTppLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxpfWNhdGNoKGUpe31yZXR1cm4gZVt0XT1pLGl9fSw5MzAwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5hamF4fSw5MzI0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0FKOigpPT5zLEYzOigpPT5pLFhzOigpPT5vLFlxOigpPT5hLHh2OigpPT5ufSk7Y29uc3Qgbj0iMS4zMDMuMCIsaT0iUFJPRCIsbz0iQ0ROIixzPSJAbmV3cmVsaWMvcnJ3ZWIiLGE9IjEuMC4xIn0sOTU2NjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtMQTooKT0+YSxaRjooKT0+YyxiejooKT0+cyxlbDooKT0+dX0pO3ZhciBuPXIoNjE1NCk7Y29uc3QgaT0ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4IjtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU/MTUmZVt0XToxNipNYXRoLnJhbmRvbSgpfDB9ZnVuY3Rpb24gcygpe2NvbnN0IGU9bi5nbT8uY3J5cHRvfHxuLmdtPy5tc0NyeXB0bztsZXQgdCxyPTA7cmV0dXJuIGUmJmUuZ2V0UmFuZG9tVmFsdWVzJiYodD1lLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMCkpKSxpLnNwbGl0KCIiKS5tYXAoZT0+IngiPT09ZT9vKHQscisrKS50b1N0cmluZygxNik6InkiPT09ZT8oMyZvKCl8OCkudG9TdHJpbmcoMTYpOmUpLmpvaW4oIiIpfWZ1bmN0aW9uIGEoZSl7Y29uc3QgdD1uLmdtPy5jcnlwdG98fG4uZ20/Lm1zQ3J5cHRvO2xldCByLGk9MDt0JiZ0LmdldFJhbmRvbVZhbHVlcyYmKHI9dC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoZSkpKTtjb25zdCBzPVtdO2Zvcih2YXIgYT0wO2E8ZTthKyspcy5wdXNoKG8ocixpKyspLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHMuam9pbigiIil9ZnVuY3Rpb24gYygpe3JldHVybiBhKDE2KX1mdW5jdGlvbiB1KCl7cmV0dXJuIGEoMzIpfX0sOTkwODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtkOigpPT5uLHA6KCk9Pml9KTt2YXIgbj1yKDc4MzYpLmVlLmdldCgiaGFuZGxlIik7ZnVuY3Rpb24gaShlLHQscixpLG8pe28/KG8uYnVmZmVyKFtlXSxpKSxvLmVtaXQoZSx0LHIpKToobi5idWZmZXIoW2VdLGkpLG4uZW1pdChlLHQscikpfX19LG49e307ZnVuY3Rpb24gaShlKXt2YXIgdD1uW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbz1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gcltlXShvLG8uZXhwb3J0cyxpKSxvLmV4cG9ydHN9aS5tPXIsaS5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpaS5vKHQscikmJiFpLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxpLmY9e30saS5lPWU9PlByb21pc2UuYWxsKE9iamVjdC5rZXlzKGkuZikucmVkdWNlKCh0LHIpPT4oaS5mW3JdKGUsdCksdCksW10pKSxpLnU9ZT0+KHsyMTI6Im5yLXNwYS1jb21wcmVzc29yIiwyNDk6Im5yLXNwYS1yZWNvcmRlciIsNDc4OiJuci1zcGEifVtlXSsiLTEuMzAzLjAubWluLmpzIiksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxlPXt9LHQ9Ik5SQkEtMS4zMDMuMC5QUk9EOiIsaS5sPShyLG4sbyxzKT0+e2lmKGVbcl0pZVtyXS5wdXNoKG4pO2Vsc2V7dmFyIGEsYztpZih2b2lkIDAhPT1vKWZvcih2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgbD11W2RdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09cnx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT10K28pe2E9bDticmVha319aWYoIWEpe2M9ITA7dmFyIGY9ezQ3ODoic2hhNTEyLVExcExxY29pTm1MSHYwcnRxM3dGa0pCQTNrb2ZCZFJKbDBFeERsMG1UdUFvQ0JkMHFlLzFKMFhXckRsUUt1TmxVcnlMNmFaZlZrQU1QTG1vaWtXSW9RPT0iLDI0OToic2hhNTEyLTY5NVp6dWRzeGxNdEhLbnBETnZrTWxKZDN0ZE10WTAzSVFLVkN3OVNYMTJ0alVDK2Y3TnJ4NXRuV083MlZnOVJGZjZEU1k2d1ZtTTNjRWtSTTEya2tRPT0iLDIxMjoic2hhNTEyLTE4R3gxd0lCc3BwY24wQW5LRmh3Z3c0SWNpTmdGeGl3M0o3NFczOTNBcGUrd3RnNGhsZzd0NlNCS3NJRS9Eay90ZmwyeWx0Z2NnQkZ2WVJzMjgzQUZnPT0ifTsoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSkuY2hhcnNldD0idXRmLTgiLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsdCtvKSxhLnNyYz1yLDAhPT1hLnNyYy5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rIi8iKSYmKGEuY3Jvc3NPcmlnaW49ImFub255bW91cyIpLGZbc10mJihhLmludGVncml0eT1mW3NdKX1lW3JdPVtuXTt2YXIgaD0odCxuKT0+e2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChwKTt2YXIgaT1lW3JdO2lmKGRlbGV0ZSBlW3JdLGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGkmJmkuZm9yRWFjaChlPT5lKG4pKSx0KXJldHVybiB0KG4pfSxwPXNldFRpbWVvdXQoaC5iaW5kKG51bGwsdm9pZCAwLHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6YX0pLDEyZTQpO2Eub25lcnJvcj1oLmJpbmQobnVsbCxhLm9uZXJyb3IpLGEub25sb2FkPWguYmluZChudWxsLGEub25sb2FkKSxjJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX0saS5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLnA9Imh0dHBzOi8vanMtYWdlbnQubmV3cmVsaWMuY29tLyIsKCgpPT57dmFyIGU9ezM4OjAsNzg4OjB9O2kuZi5qPSh0LHIpPT57dmFyIG49aS5vKGUsdCk/ZVt0XTp2b2lkIDA7aWYoMCE9PW4paWYobilyLnB1c2goblsyXSk7ZWxzZXt2YXIgbz1uZXcgUHJvbWlzZSgocixpKT0+bj1lW3RdPVtyLGldKTtyLnB1c2goblsyXT1vKTt2YXIgcz1pLnAraS51KHQpLGE9bmV3IEVycm9yO2kubChzLHI9PntpZihpLm8oZSx0KSYmKDAhPT0obj1lW3RdKSYmKGVbdF09dm9pZCAwKSxuKSl7dmFyIG89ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSxzPXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmM7YS5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrdCsiIGZhaWxlZC5cbigiK28rIjogIitzKyIpIixhLm5hbWU9IkNodW5rTG9hZEVycm9yIixhLnR5cGU9byxhLnJlcXVlc3Q9cyxuWzFdKGEpfX0sImNodW5rLSIrdCx0KX19O3ZhciB0PSh0LHIpPT57dmFyIG4sbyxbcyxhLGNdPXIsdT0wO2lmKHMuc29tZSh0PT4wIT09ZVt0XSkpe2ZvcihuIGluIGEpaS5vKGEsbikmJihpLm1bbl09YVtuXSk7aWYoYyljKGkpfWZvcih0JiZ0KHIpO3U8cy5sZW5ndGg7dSsrKW89c1t1XSxpLm8oZSxvKSYmZVtvXSYmZVtvXVswXSgpLGVbb109MH0scj1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXT1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXXx8W107ci5mb3JFYWNoKHQuYmluZChudWxsLDApKSxyLnB1c2g9dC5iaW5kKG51bGwsci5wdXNoLmJpbmQocikpfSkoKSwoKCk9PnsidXNlIHN0cmljdCI7aSg4Mzc0KTt2YXIgZT1pKDk1NjYpLHQ9aSgxNzQxKTtjbGFzcyByIGV4dGVuZHMgdC5Xe2FnZW50SWRlbnRpZmllcj0oMCxlLkxBKSgxNil9dmFyIG49aSg4NjApO2NvbnN0IG89T2JqZWN0LnZhbHVlcyhuLks3KTt2YXIgcz1pKDUyMDUpO3ZhciBhPWkoOTkwOCksYz1pKDE4NjMpLHU9aSg0MjYxKSxkPWkoMzI0MSksbD1pKDk0NCksZj1pKDU3MDEpLGg9aSg4MTU0KTtmdW5jdGlvbiBwKGUsdCxpLG8pe2NvbnN0IHM9b3x8aTshc3x8c1tlXSYmc1tlXSE9PXIucHJvdG90eXBlW2VdfHwoc1tlXT1mdW5jdGlvbigpeygwLGEucCkoaC54VixbIkFQSS8iK2UrIi9jYWxsZWQiXSx2b2lkIDAsbi5LNy5tZXRyaWNzLGkuZWUpLCgwLGQuVykoe2FnZW50SWRlbnRpZmllcjppLmFnZW50SWRlbnRpZmllcixkcmFpbmVkOiEhZi5CPy5baS5hZ2VudElkZW50aWZpZXJdLHR5cGU6ImRhdGEiLG5hbWU6ImFwaSIsZmVhdHVyZTp1LlBsK2UsZGF0YTp7fX0pO3RyeXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7KDAsbC5SKSgyMyxlKX19KX1mdW5jdGlvbiBnKGUsdCxyLG4saSl7Y29uc3Qgbz1lLmluZm87bnVsbD09PXI/ZGVsZXRlIG8uanNBdHRyaWJ1dGVzW3RdOm8uanNBdHRyaWJ1dGVzW3RdPXIsKGl8fG51bGw9PT1yKSYmKDAsYS5wKSh1LlBsK24sWygwLGMudCkoKSx0LHJdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSl9dmFyIG09aSgxNjg3KSx2PWkoNDIzNCksYj1pKDUyODkpLHk9aSg2MTU0KSx3PWkoNTI3MCksUj1pKDc3NjcpLHg9aSg2Mzg5KSxUPWkoNzY5OSk7Y2xhc3MgRSBleHRlbmRzIHYuV3tjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUuYWdlbnRJZGVudGlmaWVyLHQpLHRoaXMuYWdlbnRSZWY9ZSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDAsdGhpcy5mZWF0QWdncmVnYXRlPXZvaWQgMCx0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT12b2lkIDAsdGhpcy5vbkFnZ3JlZ2F0ZUltcG9ydGVkPW5ldyBQcm9taXNlKGU9Pnt0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT1lfSksdGhpcy5kZWZlcnJlZD1Qcm9taXNlLnJlc29sdmUoKSwhMT09PWUuaW5pdFt0aGlzLmZlYXR1cmVOYW1lXS5hdXRvU3RhcnQ/dGhpcy5kZWZlcnJlZD1uZXcgUHJvbWlzZSgodCxyKT0+e3RoaXMuZWUub24oIm1hbnVhbC1zdGFydC1hbGwiLCgwLHguSikoKCk9PnsoMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0aGlzLmZlYXR1cmVOYW1lKSx0KCl9KSl9KTooMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0KX1pbXBvcnRBZ2dyZWdhdG9yKGUsdCxyPXt9KXtpZih0aGlzLmZlYXRBZ2dyZWdhdGUpcmV0dXJuO2NvbnN0IG49YXN5bmMoKT0+e2xldCBuO2F3YWl0IHRoaXMuZGVmZXJyZWQ7dHJ5e2lmKCgwLFIuVikoZS5pbml0KSl7Y29uc3R7c2V0dXBBZ2VudFNlc3Npb246dH09YXdhaXQgaS5lKDQ3OCkudGhlbihpLmJpbmQoaSw4NzY2KSk7bj10KGUpfX1jYXRjaChlKXsoMCxsLlIpKDIwLGUpLHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksKDAsYS5wKShULnFoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX10cnl7aWYoIXRoaXMuI3QodGhpcy5mZWF0dXJlTmFtZSxuLGUuaW5pdCkpcmV0dXJuKDAsbS5aZSkodGhpcy5hZ2VudElkZW50aWZpZXIsdGhpcy5mZWF0dXJlTmFtZSksdm9pZCB0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseSghMSk7Y29uc3R7QWdncmVnYXRlOml9PWF3YWl0IHQoKTt0aGlzLmZlYXRBZ2dyZWdhdGU9bmV3IGkoZSxyKSxlLnJ1bnRpbWUuaGFydmVzdGVyLmluaXRpYWxpemVkQWdncmVnYXRlcy5wdXNoKHRoaXMuZmVhdEFnZ3JlZ2F0ZSksdGhpcy5sb2FkZWRTdWNjZXNzZnVsbHkoITApfWNhdGNoKGUpeygwLGwuUikoMzQsZSksdGhpcy5hYm9ydEhhbmRsZXI/LigpLCgwLG0uWmUpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUsITApLHRoaXMubG9hZGVkU3VjY2Vzc2Z1bGx5KCExKSx0aGlzLmVlJiZ0aGlzLmVlLmFib3J0KCl9fTt5LlJJPygwLGIuR0cpKCgpPT5uKCksITApOm4oKX0jdChlLHQscil7aWYodGhpcy5ibG9ja2VkKXJldHVybiExO3N3aXRjaChlKXtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm4oMCx3LlNSKShyKSYmISF0O2Nhc2Ugbi5LNy5zZXNzaW9uVHJhY2U6cmV0dXJuISF0O2RlZmF1bHQ6cmV0dXJuITB9fX12YXIgQT1pKDY2MzApLFM9aSgyNjE0KTtjbGFzcyBfIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9QS5UO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQS5UKSx0aGlzLnNldHVwSW5zcGVjdGlvbkV2ZW50cyhlLmFnZW50SWRlbnRpZmllciksdD1lLHAodS5GdyxmdW5jdGlvbihlLHIpeyJzdHJpbmciPT10eXBlb2YgZSYmKCIvIiE9PWUuY2hhckF0KDApJiYoZT0iLyIrZSksdC5ydW50aW1lLmN1c3RvbVRyYW5zYWN0aW9uPShyfHwiaHR0cDovL2N1c3RvbS50cmFuc2FjdGlvbiIpK2UsKDAsYS5wKSh1LlBsK3UuRncsWygwLGMudCkoKV0sdm9pZCAwLHZvaWQgMCx0LmVlKSl9LHQpLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDE5ODMpKSl9c2V0dXBJbnNwZWN0aW9uRXZlbnRzKGUpe2NvbnN0IHQ9KHQscik9Pnt0JiYoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0aW1lU3RhbXA6dC50aW1lU3RhbXAsbG9hZGVkOiJjb21wbGV0ZSI9PT10LnRhcmdldC5yZWFkeVN0YXRlLHR5cGU6IndpbmRvdyIsbmFtZTpyLGRhdGE6dC50YXJnZXQubG9jYXRpb24rIiJ9KX07KDAsYi5zQikoZT0+e3QoZSwiRE9NQ29udGVudExvYWRlZCIpfSksKDAsYi5HRykoZT0+e3QoZSwibG9hZCIpfSksKDAsYi5RcikoZT0+e3QoZSwibmF2aWdhdGUiKX0pLHRoaXMuZWUub24oUy50Uy5VUERBVEUsKHQscik9PnsoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6InNlc3Npb24iLGRhdGE6cn0pfSl9fXZhciBPPWkoMzg0KTt2YXIgTj1pKDI4NDMpLEk9aSgzODc4KSxQPWkoNzgyKTtjbGFzcyBqIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9UC5UO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsUC5UKSx5LlJJJiYoKDAsTi51KSgoKT0+KDAsYS5wKSgiZG9jSGlkZGVuIixbKDAsYy50KSgpXSx2b2lkIDAsUC5ULHRoaXMuZWUpLCEwKSwoMCxJLnNwKSgicGFnZWhpZGUiLCgpPT4oMCxhLnApKCJ3aW5QYWdlaGlkZSIsWygwLGMudCkoKV0sdm9pZCAwLFAuVCx0aGlzLmVlKSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksOTkxNykpKSl9fWNsYXNzIGsgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1oLlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsaC5UWikseS5SSSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLGU9PnsoMCxhLnApKGgueFYsWyJHZW5lcmljL0NTUFZpb2xhdGlvbi9EZXRlY3RlZCJdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjU1NSkpKX19dmFyIEM9aSg2Nzc0KSxMPWkoMzMwNCk7Y2xhc3MgSHtjb25zdHJ1Y3RvcihlLHQscixuLGkpe3RoaXMubmFtZT0iVW5jYXVnaHRFcnJvciIsdGhpcy5tZXNzYWdlPSJzdHJpbmciPT10eXBlb2YgZT9lOigwLEwuQSkoZSksdGhpcy5zb3VyY2VVUkw9dCx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1uLHRoaXMuX19uZXdyZWxpYz1pfX1mdW5jdGlvbiBNKGUpe3JldHVybiBVKGUpP2U6bmV3IEgodm9pZCAwIT09ZT8ubWVzc2FnZT9lLm1lc3NhZ2U6ZSxlPy5maWxlbmFtZXx8ZT8uc291cmNlVVJMLGU/LmxpbmVub3x8ZT8ubGluZSxlPy5jb2xub3x8ZT8uY29sLGU/Ll9fbmV3cmVsaWMsZT8uY2F1c2UpfWZ1bmN0aW9uIEsoZSl7Y29uc3QgdD0iVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiAiO2lmKCFlPy5yZWFzb24pcmV0dXJuO2lmKFUoZS5yZWFzb24pKXt0cnl7ZS5yZWFzb24ubWVzc2FnZS5zdGFydHNXaXRoKHQpfHwoZS5yZWFzb24ubWVzc2FnZT10K2UucmVhc29uLm1lc3NhZ2UpfWNhdGNoKGUpe31yZXR1cm4gTShlLnJlYXNvbil9Y29uc3Qgcj1NKGUucmVhc29uKTtyZXR1cm4oci5tZXNzYWdlfHwiIikuc3RhcnRzV2l0aCh0KXx8KHIubWVzc2FnZT10K3IubWVzc2FnZSkscn1mdW5jdGlvbiBEKGUpe2lmKGUuZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvciYmIS86XGQrJC8udGVzdChlLmVycm9yLnN0YWNrPy50cmltKCkpKXtjb25zdCB0PW5ldyBIKGUubWVzc2FnZSxlLmZpbGVuYW1lLGUubGluZW5vLGUuY29sbm8sZS5lcnJvci5fX25ld3JlbGljLGUuY2F1c2UpO3JldHVybiB0Lm5hbWU9U3ludGF4RXJyb3IubmFtZSx0fXJldHVybiBVKGUuZXJyb3IpP2UuZXJyb3I6TShlKX1mdW5jdGlvbiBVKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3ImJiEhZS5zdGFja31mdW5jdGlvbiBGKGUsdCxyLGksbz0oMCxjLnQpKCkpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9bmV3IEVycm9yKGUpKSwoMCxhLnApKCJlcnIiLFtlLG8sITEsdCxyLnJ1bnRpbWUuaXNSZWNvcmRpbmcsdm9pZCAwLGldLHZvaWQgMCxuLks3LmpzZXJyb3JzLHIuZWUpLCgwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHIuZWUpfXZhciBXPWkoNDM4NyksQj1pKDk5MyksVj1pKDM3ODUpO2Z1bmN0aW9uIEcoZSx7Y3VzdG9tQXR0cmlidXRlczp0PXt9LGxldmVsOnI9Qi5wXy5JTkZPfT17fSxuLGksbz0oMCxjLnQpKCkpeygwLFYuUikobi5lZSxlLHQscixpLG8pfWZ1bmN0aW9uIHooZSx0LHIsaSxvPSgwLGMudCkoKSl7KDAsYS5wKSh1LlBsK3UuaEcsW28sZSx0LGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSl9ZnVuY3Rpb24gWihlLHQscixpLG89KDAsYy50KSgpKXtjb25zdHtzdGFydDpzLGVuZDpkLGN1c3RvbUF0dHJpYnV0ZXM6Zn09dHx8e30saD17Y3VzdG9tQXR0cmlidXRlczpmfHx7fX07aWYoIm9iamVjdCIhPXR5cGVvZiBoLmN1c3RvbUF0dHJpYnV0ZXN8fCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiB2b2lkKDAsbC5SKSg1Nyk7Y29uc3QgcD0oZSx0KT0+bnVsbD09ZT90OiJudW1iZXIiPT10eXBlb2YgZT9lOmUgaW5zdGFuY2VvZiBQZXJmb3JtYW5jZU1hcms/ZS5zdGFydFRpbWU6TnVtYmVyLk5hTjtpZihoLnN0YXJ0PXAocywwKSxoLmVuZD1wKGQsbyksTnVtYmVyLmlzTmFOKGguc3RhcnQpfHxOdW1iZXIuaXNOYU4oaC5lbmQpKSgwLGwuUikoNTcpO2Vsc2V7aWYoaC5kdXJhdGlvbj1oLmVuZC1oLnN0YXJ0LCEoaC5kdXJhdGlvbjwwKSlyZXR1cm4oMCxhLnApKHUuUGwrdS5WMSxbaCxlLGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSksaDsoMCxsLlIpKDU4KX19ZnVuY3Rpb24gcShlLHQ9e30scixpLG89KDAsYy50KSgpKXsoMCxhLnApKHUuUGwrdS5mRixbbyxlLHQsaV0sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyxyLmVlKX1mdW5jdGlvbiBYKGUpe3AodS5lWSxmdW5jdGlvbih0KXtyZXR1cm4gWShlLHQpfSxlKX1mdW5jdGlvbiBZKGUsdCxyKXtjb25zdCBpPXt9OygwLGwuUikoNTQsIm5ld3JlbGljLnJlZ2lzdGVyIiksdHx8PXt9LHQuZXZlbnRTb3VyY2U9Ik1pY3JvRnJvbnRlbmRCcm93c2VyQWdlbnQiLHQubGljZW5zZUtleXx8PWUuaW5mby5saWNlbnNlS2V5LHQuYmxvY2tlZD0hMSx0LnBhcmVudD1yfHx7fTtsZXQgbz0oKT0+e307Y29uc3Qgcz1lLnJ1bnRpbWUucmVnaXN0ZXJlZEVudGl0aWVzLHU9cy5maW5kKCh7bWV0YWRhdGE6e3RhcmdldDp7aWQ6ZSxuYW1lOnJ9fX0pPT5lPT09dC5pZCk7aWYodSlyZXR1cm4gdS5tZXRhZGF0YS50YXJnZXQubmFtZSE9PXQubmFtZSYmKHUubWV0YWRhdGEudGFyZ2V0Lm5hbWU9dC5uYW1lKSx1O2NvbnN0IGQ9ZT0+e3QuYmxvY2tlZD0hMCxvPWV9O2UuaW5pdC5hcGkuYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbnx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDU1KSkpLCgwLFcuYzcpKHQpfHxkKCgwLHguSikoKCk9PigwLGwuUikoNDgsdCkpKSwoMCxXLnlvKSh0LmlkKSYmKDAsVy55bykodC5uYW1lKXx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDQ4LHQpKSk7Y29uc3QgZj17YWRkUGFnZUFjdGlvbjoocixuPXt9KT0+bSh6LFtyLHsuLi5pLC4uLm59LGVdLHQpLGxvZzoocixuPXt9KT0+bShHLFtyLHsuLi5uLGN1c3RvbUF0dHJpYnV0ZXM6ey4uLmksLi4ubi5jdXN0b21BdHRyaWJ1dGVzfHx7fX19LGVdLHQpLG1lYXN1cmU6KHIsbj17fSk9Pm0oWixbcix7Li4ubixjdXN0b21BdHRyaWJ1dGVzOnsuLi5pLC4uLm4uY3VzdG9tQXR0cmlidXRlc3x8e319fSxlXSx0KSxub3RpY2VFcnJvcjoocixuPXt9KT0+bShGLFtyLHsuLi5pLC4uLm59LGVdLHQpLHJlZ2lzdGVyOih0PXt9KT0+bShZLFtlLHRdLGYubWV0YWRhdGEudGFyZ2V0KSxyZWNvcmRDdXN0b21FdmVudDoocixuPXt9KT0+bShxLFtyLHsuLi5pLC4uLm59LGVdLHQpLHNldEFwcGxpY2F0aW9uVmVyc2lvbjplPT5nKCJhcHBsaWNhdGlvbi52ZXJzaW9uIixlKSxzZXRDdXN0b21BdHRyaWJ1dGU6KGUsdCk9PmcoZSx0KSxzZXRVc2VySWQ6ZT0+ZygiZW5kdXNlci5pZCIsZSksbWV0YWRhdGE6e2N1c3RvbUF0dHJpYnV0ZXM6aSx0YXJnZXQ6dH19LHA9KCk9Pih0LmJsb2NrZWQmJm8oKSx0LmJsb2NrZWQpO3AoKXx8cy5wdXNoKGYpO2NvbnN0IGc9KGUsdCk9PntwKCl8fChpW2VdPXQpfSxtPSh0LHIsaSk9PntpZihwKCkpcmV0dXJuO2NvbnN0IG89KDAsYy50KSgpOygwLGEucCkoaC54VixbIkFQSS9yZWdpc3Rlci8iLmNvbmNhdCh0Lm5hbWUsIi9jYWxsZWQiKV0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKTt0cnl7cmV0dXJuIGUuaW5pdC5hcGkuZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YSYmInJlZ2lzdGVyIiE9PXQubmFtZSYmdCguLi5yLHZvaWQgMCxvKSx0KC4uLnIsaSxvKX1jYXRjaChlKXsoMCxsLlIpKDUwLGUpfX07cmV0dXJuIGZ9Y2xhc3MgSiBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPUMuVDtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEMuVCksdD1lLHAodS5vNSwoZSxyKT0+RihlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LmJ0LGZ1bmN0aW9uKHQpe2UucnVudGltZS5vbmVycm9yPXR9LGUpfShlKSxmdW5jdGlvbihlKXtsZXQgdD0wO3AodS5rNixmdW5jdGlvbihlLHIpeysrdD4xMHx8KHRoaXMucnVudGltZS5yZWxlYXNlSWRzW2Uuc2xpY2UoLTIwMCldPSgiIityKS5zbGljZSgtMjAwKSl9LGUpfShlKSxYKGUpO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9dGhpcy5lZS5vbigiaW50ZXJuYWwtZXJyb3IiLCh0LHIpPT57dGhpcy5hYm9ydEhhbmRsZXImJigwLGEucCkoImllcnIiLFtNKHQpLCgwLGMudCkoKSwhMCx7fSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmcscl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9KSx5LmdtLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsdD0+e3RoaXMuYWJvcnRIYW5kbGVyJiYoMCxhLnApKCJlcnIiLFtLKHQpLCgwLGMudCkoKSwhMSx7dW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbjoxfSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmddLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHkuZ20uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHQ9Pnt0aGlzLmFib3J0SGFuZGxlciYmKDAsYS5wKSgiZXJyIixbRCh0KSwoMCxjLnQpKCksITEse30sZS5ydW50aW1lLmlzUmVjb3JkaW5nXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0sKDAsSS5qVCkoITEsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDIxNzYpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgUT1pKDg5OTApO2xldCBlZT0xO2Z1bmN0aW9uIHRlKGUpe2NvbnN0IHQ9dHlwZW9mIGU7cmV0dXJuIWV8fCJvYmplY3QiIT09dCYmImZ1bmN0aW9uIiE9PXQ/LTE6ZT09PXkuZ20/MDooMCxRLkkpKGUsIm5yQGlkIixmdW5jdGlvbigpe3JldHVybiBlZSsrfSl9ZnVuY3Rpb24gcmUoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aClyZXR1cm4gZS5sZW5ndGg7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJmUuYnl0ZUxlbmd0aClyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmZSBpbnN0YW5jZW9mIEJsb2ImJmUuc2l6ZSlyZXR1cm4gZS5zaXplO2lmKCEoInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSl0cnl7cmV0dXJuKDAsTC5BKShlKS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJufX19dmFyIG5lPWkoODEzOSksaWU9aSg3ODM2KSxvZT1pKDM0MzQpO2NvbnN0IHNlPXt9LGFlPVsib3BlbiIsInNlbmQiXTtmdW5jdGlvbiBjZShlKXt2YXIgdD1lfHxpZS5lZTtjb25zdCByPWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJ4aHIiKX0odCk7aWYodm9pZCAwPT09eS5nbS5YTUxIdHRwUmVxdWVzdClyZXR1cm4gcjtpZihzZVtyLmRlYnVnSWRdKyspcmV0dXJuIHI7c2Vbci5kZWJ1Z0lkXT0xLCgwLG5lLnUpKHQpO3ZhciBuPSgwLG9lLllNKShyKSxpPXkuZ20uWE1MSHR0cFJlcXVlc3Qsbz15LmdtLk11dGF0aW9uT2JzZXJ2ZXIscz15LmdtLlByb21pc2UsYT15LmdtLnNldEludGVydmFsLGM9InJlYWR5c3RhdGVjaGFuZ2UiLHU9WyJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9ubG9hZHN0YXJ0Iiwib25sb2FkZW5kIiwib25wcm9ncmVzcyIsIm9udGltZW91dCJdLGQ9W10sZj15LmdtLlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IGkoZSksbz1yLmNvbnRleHQodCk7dHJ5e3IuZW1pdCgibmV3LXhociIsW3RdLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcihjLChzPW8sZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UucmVhZHlTdGF0ZT4zJiYhcy5yZXNvbHZlZCYmKHMucmVzb2x2ZWQ9ITAsci5lbWl0KCJ4aHItcmVzb2x2ZWQiLFtdLGUpKSxuLmluUGxhY2UoZSx1LCJmbi0iLGIpfSksKDAsSS5qVCkoITEpKX1jYXRjaChlKXsoMCxsLlIpKDE1LGUpO3RyeXtyLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe319dmFyIHM7cmV0dXJuIHR9O2Z1bmN0aW9uIGgoZSx0KXtuLmluUGxhY2UodCxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iLGIpfWlmKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfShpLGYpLGYucHJvdG90eXBlPWkucHJvdG90eXBlLG4uaW5QbGFjZShmLnByb3RvdHlwZSxhZSwiLXhoci0iLGIpLHIub24oInNlbmQteGhyLXN0YXJ0IixmdW5jdGlvbihlLHQpe2goZSx0KSxmdW5jdGlvbihlKXtkLnB1c2goZSksbyYmKHA/cC50aGVuKHYpOmE/YSh2KTooZz0tZyxtLmRhdGE9ZykpfSh0KX0pLHIub24oIm9wZW4teGhyLXN0YXJ0IixoKSxvKXt2YXIgcD1zJiZzLnJlc29sdmUoKTtpZighYSYmIXMpe3ZhciBnPTEsbT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnKTtuZXcgbyh2KS5vYnNlcnZlKG0se2NoYXJhY3RlckRhdGE6ITB9KX19ZWxzZSB0Lm9uKCJmbi1lbmQiLGZ1bmN0aW9uKGUpe2VbMF0mJmVbMF0udHlwZT09PWN8fHYoKX0pO2Z1bmN0aW9uIHYoKXtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyloKDAsZFtlXSk7ZC5sZW5ndGgmJihkPVtdKX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIHR9cmV0dXJuIHJ9dmFyIHVlPSJmZXRjaC0iLGRlPXVlKyJib2R5LSIsbGU9WyJhcnJheUJ1ZmZlciIsImJsb2IiLCJqc29uIiwidGV4dCIsImZvcm1EYXRhIl0sZmU9eS5nbS5SZXF1ZXN0LGhlPXkuZ20uUmVzcG9uc2UscGU9InByb3RvdHlwZSI7Y29uc3QgZ2U9e307ZnVuY3Rpb24gbWUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgiZmV0Y2giKX0oZSk7aWYoIShmZSYmaGUmJnkuZ20uZmV0Y2gpKXJldHVybiB0O2lmKGdlW3QuZGVidWdJZF0rKylyZXR1cm4gdDtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lW3JdOyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoZVtyXT1mdW5jdGlvbigpe3ZhciBlLHI9Wy4uLmFyZ3VtZW50c10sbz17fTt0LmVtaXQobisiYmVmb3JlLXN0YXJ0Iixbcl0sbyksb1tpZS5QXSYmb1tpZS5QXS5kdCYmKGU9b1tpZS5QXS5kdCk7dmFyIHM9aS5hcHBseSh0aGlzLHIpO3JldHVybiB0LmVtaXQobisic3RhcnQiLFtyLGVdLHMpLHMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5lbWl0KG4rImVuZCIsW251bGwsZV0scyksZX0sZnVuY3Rpb24oZSl7dGhyb3cgdC5lbWl0KG4rImVuZCIsW2VdLHMpLGV9KX0pfXJldHVybiBnZVt0LmRlYnVnSWRdPTEsbGUuZm9yRWFjaChlPT57cihmZVtwZV0sZSxkZSkscihoZVtwZV0sZSxkZSl9KSxyKHkuZ20sImZldGNoIix1ZSksdC5vbih1ZSsiZW5kIixmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYocil7dmFyIGk9ci5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKTtudWxsIT09aSYmKG4ucnhTaXplPWkpLHQuZW1pdCh1ZSsiZG9uZSIsW251bGwscl0sbil9ZWxzZSB0LmVtaXQodWUrImRvbmUiLFtlXSxuKX0pLHR9dmFyIHZlPWkoNzQ4NSk7Y2xhc3MgYmV7Y29uc3RydWN0b3IoZSl7dGhpcy5hZ2VudFJlZj1lfWdlbmVyYXRlVHJhY2VQYXlsb2FkKHQpe2NvbnN0IHI9dGhpcy5hZ2VudFJlZi5sb2FkZXJfY29uZmlnO2lmKCF0aGlzLnNob3VsZEdlbmVyYXRlVHJhY2UodCl8fCFyKXJldHVybiBudWxsO3ZhciBuPShyLmFjY291bnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwsaT0oci5hZ2VudElEfHwiIikudG9TdHJpbmcoKXx8bnVsbCxvPShyLnRydXN0S2V5fHwiIikudG9TdHJpbmcoKXx8bnVsbDtpZighbnx8IWkpcmV0dXJuIG51bGw7dmFyIHM9KDAsZS5aRikoKSxhPSgwLGUuZWwpKCksYz1EYXRlLm5vdygpLHU9e3NwYW5JZDpzLHRyYWNlSWQ6YSx0aW1lc3RhbXA6Y307cmV0dXJuKHQuc2FtZU9yaWdpbnx8dGhpcy5pc0FsbG93ZWRPcmlnaW4odCkmJnRoaXMudXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKSkmJih1LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0UGFyZW50SGVhZGVyKHMsYSksdS50cmFjZUNvbnRleHRTdGF0ZUhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0U3RhdGVIZWFkZXIocyxjLG4saSxvKSksKHQuc2FtZU9yaWdpbiYmIXRoaXMuZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl8fCF0LnNhbWVPcmlnaW4mJnRoaXMuaXNBbGxvd2VkT3JpZ2luKHQpJiZ0aGlzLnVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpKSYmKHUubmV3cmVsaWNIZWFkZXI9dGhpcy5nZW5lcmF0ZVRyYWNlSGVhZGVyKHMsYSxjLG4saSxvKSksdX1nZW5lcmF0ZVRyYWNlQ29udGV4dFBhcmVudEhlYWRlcihlLHQpe3JldHVybiIwMC0iK3QrIi0iK2UrIi0wMSJ9Z2VuZXJhdGVUcmFjZUNvbnRleHRTdGF0ZUhlYWRlcihlLHQscixuLGkpe3JldHVybiBpKyJAbnI9MC0xLSIrcisiLSIrbisiLSIrZSsiLS0tLSIrdH1nZW5lcmF0ZVRyYWNlSGVhZGVyKGUsdCxyLG4saSxvKXtpZighKCJmdW5jdGlvbiI9PXR5cGVvZiB5LmdtPy5idG9hKSlyZXR1cm4gbnVsbDt2YXIgcz17djpbMCwxXSxkOnt0eToiQnJvd3NlciIsYWM6bixhcDppLGlkOmUsdHI6dCx0aTpyfX07cmV0dXJuIG8mJm4hPT1vJiYocy5kLnRrPW8pLGJ0b2EoKDAsTC5BKShzKSl9c2hvdWxkR2VuZXJhdGVUcmFjZShlKXtyZXR1cm4gdGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nPy5lbmFibGVkJiZ0aGlzLmlzQWxsb3dlZE9yaWdpbihlKX1pc0FsbG93ZWRPcmlnaW4oZSl7dmFyIHQ9ITE7Y29uc3Qgcj10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7aWYoZS5zYW1lT3JpZ2luKXQ9ITA7ZWxzZSBpZihyPy5hbGxvd2VkX29yaWdpbnMgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG49MDtuPHIuYWxsb3dlZF9vcmlnaW5zLmxlbmd0aDtuKyspe3ZhciBpPSgwLHZlLkQpKHIuYWxsb3dlZF9vcmlnaW5zW25dKTtpZihlLmhvc3RuYW1lPT09aS5ob3N0bmFtZSYmZS5wcm90b2NvbD09PWkucHJvdG9jb2wmJmUucG9ydD09PWkucG9ydCl7dD0hMDticmVha319cmV0dXJuIHR9ZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl7dmFyIGU9dGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nO3JldHVybiEhZSYmISFlLmV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyfXVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpe3ZhciBlPXRoaXMuYWdlbnRSZWYuaW5pdD8uZGlzdHJpYnV0ZWRfdHJhY2luZztyZXR1cm4hIWUmJiExIT09ZS5jb3JzX3VzZV9uZXdyZWxpY19oZWFkZXJ9dXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKXt2YXIgZT10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7cmV0dXJuISFlJiYhIWUuY29yc191c2VfdHJhY2Vjb250ZXh0X2hlYWRlcnN9fXZhciB5ZT1pKDkzMDApLHdlPWkoNzI5NSk7ZnVuY3Rpb24gUmUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSBpbnN0YW5jZW9mKDAsTy5kVikoKS5vLlJFUT9lLnVybDp5LmdtPy5VUkwmJmUgaW5zdGFuY2VvZiBVUkw/ZS5ocmVmOnZvaWQgMH12YXIgeGU9WyJsb2FkIiwiZXJyb3IiLCJhYm9ydCIsInRpbWVvdXQiXSxUZT14ZS5sZW5ndGgsRWU9KDAsTy5kVikoKS5vLlJFUSxBZT0oMCxPLmRWKSgpLm8uWEhSO2NvbnN0IFNlPSJYLU5ld1JlbGljLUFwcC1EYXRhIjtjbGFzcyBfZSBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXllLlQ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSx5ZS5UKSx0aGlzLmR0PW5ldyBiZShlKSx0aGlzLmhhbmRsZXI9KGUsdCxyLG4pPT4oMCxhLnApKGUsdCxyLG4sdGhpcy5lZSk7dHJ5e2NvbnN0IGU9e3htbGh0dHByZXF1ZXN0OiJ4aHIiLGZldGNoOiJmZXRjaCIsYmVhY29uOiJiZWFjb24ifTt5LmdtPy5wZXJmb3JtYW5jZT8uZ2V0RW50cmllc0J5VHlwZSgicmVzb3VyY2UiKS5mb3JFYWNoKHQ9PntpZih0LmluaXRpYXRvclR5cGUgaW4gZSYmMCE9PXQucmVzcG9uc2VTdGF0dXMpe2NvbnN0IHI9e3N0YXR1czp0LnJlc3BvbnNlU3RhdHVzfSxpPXtyeFNpemU6dC50cmFuc2ZlclNpemUsZHVyYXRpb246TWF0aC5mbG9vcih0LmR1cmF0aW9uKSxjYlRpbWU6MH07T2Uocix0Lm5hbWUpLHRoaXMuaGFuZGxlcigieGhyIixbcixpLHQuc3RhcnRUaW1lLHQucmVzcG9uc2VFbmQsZVt0LmluaXRpYXRvclR5cGVdXSx2b2lkIDAsbi5LNy5hamF4KX19KX1jYXRjaChlKXt9bWUodGhpcy5lZSksY2UodGhpcy5lZSksZnVuY3Rpb24oZSx0LHIsaSl7ZnVuY3Rpb24gbyhlKXt2YXIgdD10aGlzO3QudG90YWxDYnM9MCx0LmNhbGxlZD0wLHQuY2JUaW1lPTAsdC5lbmQ9RSx0LmVuZGVkPSExLHQueGhyR3VpZHM9e30sdC5sYXN0U2l6ZT1udWxsLHQubG9hZENhcHR1cmVDYWxsZWQ9ITEsdC5wYXJhbXM9dGhpcy5wYXJhbXN8fHt9LHQubWV0cmljcz10aGlzLm1ldHJpY3N8fHt9LHQubGF0ZXN0TG9uZ3Rhc2tFbmQ9MCxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKHIpe0EodCxlKX0sKDAsSS5qVCkoITEpKSx5LmxSfHxlLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihlKXt0Lmxhc3RTaXplPWUubG9hZGVkfSwoMCxJLmpUKSghMSkpfWZ1bmN0aW9uIHMoZSl7dGhpcy5wYXJhbXM9e21ldGhvZDplWzBdfSxPZSh0aGlzLGVbMV0pLHRoaXMubWV0cmljcz17fX1mdW5jdGlvbiB1KHQscil7ZS5sb2FkZXJfY29uZmlnLnhwaWQmJnRoaXMuc2FtZU9yaWdpbiYmci5zZXRSZXF1ZXN0SGVhZGVyKCJYLU5ld1JlbGljLUlEIixlLmxvYWRlcl9jb25maWcueHBpZCk7dmFyIG49aS5nZW5lcmF0ZVRyYWNlUGF5bG9hZCh0aGlzLnBhcnNlZE9yaWdpbik7aWYobil7dmFyIG89ITE7bi5uZXdyZWxpY0hlYWRlciYmKHIuc2V0UmVxdWVzdEhlYWRlcigibmV3cmVsaWMiLG4ubmV3cmVsaWNIZWFkZXIpLG89ITApLG4udHJhY2VDb250ZXh0UGFyZW50SGVhZGVyJiYoci5zZXRSZXF1ZXN0SGVhZGVyKCJ0cmFjZXBhcmVudCIsbi50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLG4udHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJnIuc2V0UmVxdWVzdEhlYWRlcigidHJhY2VzdGF0ZSIsbi50cmFjZUNvbnRleHRTdGF0ZUhlYWRlciksbz0hMCksbyYmKHRoaXMuZHQ9bil9fWZ1bmN0aW9uIGQoZSxyKXt2YXIgbj10aGlzLm1ldHJpY3MsaT1lWzBdLG89dGhpcztpZihuJiZpKXt2YXIgcz1yZShpKTtzJiYobi50eFNpemU9cyl9dGhpcy5zdGFydFRpbWU9KDAsYy50KSgpLHRoaXMuYm9keT1pLHRoaXMubGlzdGVuZXI9ZnVuY3Rpb24oZSl7dHJ5eyJhYm9ydCIhPT1lLnR5cGV8fG8ubG9hZENhcHR1cmVDYWxsZWR8fChvLnBhcmFtcy5hYm9ydGVkPSEwKSwoImxvYWQiIT09ZS50eXBlfHxvLmNhbGxlZD09PW8udG90YWxDYnMmJihvLm9ubG9hZENhbGxlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIub25sb2FkKSYmImZ1bmN0aW9uIj09dHlwZW9mIG8uZW5kKSYmby5lbmQocil9Y2F0Y2goZSl7dHJ5e3QuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2goZSl7fX19O2Zvcih2YXIgYT0wO2E8VGU7YSsrKXIuYWRkRXZlbnRMaXN0ZW5lcih4ZVthXSx0aGlzLmxpc3RlbmVyLCgwLEkualQpKCExKSl9ZnVuY3Rpb24gbChlLHQscil7dGhpcy5jYlRpbWUrPWUsdD90aGlzLm9ubG9hZENhbGxlZD0hMDp0aGlzLmNhbGxlZCs9MSx0aGlzLmNhbGxlZCE9PXRoaXMudG90YWxDYnN8fCF0aGlzLm9ubG9hZENhbGxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHIub25sb2FkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5lbmR8fHRoaXMuZW5kKHIpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmIXRoaXMueGhyR3VpZHNbcl0mJih0aGlzLnhockd1aWRzW3JdPSEwLHRoaXMudG90YWxDYnMrPTEpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmdGhpcy54aHJHdWlkc1tyXSYmKGRlbGV0ZSB0aGlzLnhockd1aWRzW3JdLHRoaXMudG90YWxDYnMtPTEpfWZ1bmN0aW9uIGcoKXt0aGlzLmVuZFRpbWU9KDAsYy50KSgpfWZ1bmN0aW9uIG0oZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtYWRkZWQiLFtlWzFdLGVbMl1dLHIpfWZ1bmN0aW9uIHYoZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW2VbMV0sZVsyXV0scil9ZnVuY3Rpb24gYihlLHQscil7dCBpbnN0YW5jZW9mIEFlJiYoIm9ubG9hZCI9PT1yJiYodGhpcy5vbmxvYWQ9ITApLCgibG9hZCI9PT0oZVswXSYmZVswXS50eXBlKXx8dGhpcy5vbmxvYWQpJiYodGhpcy54aHJDYlN0YXJ0PSgwLGMudCkoKSkpfWZ1bmN0aW9uIHcoZSxyKXt0aGlzLnhockNiU3RhcnQmJnQuZW1pdCgieGhyLWNiLXRpbWUiLFsoMCxjLnQpKCktdGhpcy54aHJDYlN0YXJ0LHRoaXMub25sb2FkLHJdLHIpfWZ1bmN0aW9uIFIoZSl7dmFyIHQscj1lWzFdfHx7fTtpZigic3RyaW5nIj09dHlwZW9mIGVbMF0/MD09PSh0PWVbMF0pLmxlbmd0aCYmeS5SSSYmKHQ9IiIreS5nbS5sb2NhdGlvbi5ocmVmKTplWzBdJiZlWzBdLnVybD90PWVbMF0udXJsOnkuZ20/LlVSTCYmZVswXSYmZVswXWluc3RhbmNlb2YgVVJMP3Q9ZVswXS5ocmVmOiJmdW5jdGlvbiI9PXR5cGVvZiBlWzBdLnRvU3RyaW5nJiYodD1lWzBdLnRvU3RyaW5nKCkpLCJzdHJpbmciPT10eXBlb2YgdCYmMCE9PXQubGVuZ3RoKXt0JiYodGhpcy5wYXJzZWRPcmlnaW49KDAsdmUuRCkodCksdGhpcy5zYW1lT3JpZ2luPXRoaXMucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW4pO3ZhciBuPWkuZ2VuZXJhdGVUcmFjZVBheWxvYWQodGhpcy5wYXJzZWRPcmlnaW4pO2lmKG4mJihuLm5ld3JlbGljSGVhZGVyfHxuLnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcikpaWYoZVswXSYmZVswXS5oZWFkZXJzKWEoZVswXS5oZWFkZXJzLG4pJiYodGhpcy5kdD1uKTtlbHNle3ZhciBvPXt9O2Zvcih2YXIgcyBpbiByKW9bc109cltzXTtvLmhlYWRlcnM9bmV3IEhlYWRlcnMoci5oZWFkZXJzfHx7fSksYShvLmhlYWRlcnMsbikmJih0aGlzLmR0PW4pLGUubGVuZ3RoPjE/ZVsxXT1vOmUucHVzaChvKX19ZnVuY3Rpb24gYShlLHQpe3ZhciByPSExO3JldHVybiB0Lm5ld3JlbGljSGVhZGVyJiYoZS5zZXQoIm5ld3JlbGljIix0Lm5ld3JlbGljSGVhZGVyKSxyPSEwKSx0LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlciYmKGUuc2V0KCJ0cmFjZXBhcmVudCIsdC50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLHQudHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJmUuc2V0KCJ0cmFjZXN0YXRlIix0LnRyYWNlQ29udGV4dFN0YXRlSGVhZGVyKSxyPSEwKSxyfX1mdW5jdGlvbiB4KGUsdCl7dGhpcy5wYXJhbXM9e30sdGhpcy5tZXRyaWNzPXt9LHRoaXMuc3RhcnRUaW1lPSgwLGMudCkoKSx0aGlzLmR0PXQsZS5sZW5ndGg+PTEmJih0aGlzLnRhcmdldD1lWzBdKSxlLmxlbmd0aD49MiYmKHRoaXMub3B0cz1lWzFdKTt2YXIgcj10aGlzLm9wdHN8fHt9LG49dGhpcy50YXJnZXQ7T2UodGhpcyxSZShuKSk7dmFyIGk9KCIiKyhuJiZuIGluc3RhbmNlb2YgRWUmJm4ubWV0aG9kfHxyLm1ldGhvZHx8IkdFVCIpKS50b1VwcGVyQ2FzZSgpO3RoaXMucGFyYW1zLm1ldGhvZD1pLHRoaXMuYm9keT1yLmJvZHksdGhpcy50eFNpemU9cmUoci5ib2R5KXx8MH1mdW5jdGlvbiBUKGUsdCl7aWYodGhpcy5lbmRUaW1lPSgwLGMudCkoKSx0aGlzLnBhcmFtc3x8KHRoaXMucGFyYW1zPXt9KSwoMCx3ZS5pVykodGhpcy5wYXJhbXMpKXJldHVybjtsZXQgaTt0aGlzLnBhcmFtcy5zdGF0dXM9dD90LnN0YXR1czowLCJzdHJpbmciPT10eXBlb2YgdGhpcy5yeFNpemUmJnRoaXMucnhTaXplLmxlbmd0aD4wJiYoaT0rdGhpcy5yeFNpemUpO2NvbnN0IG89e3R4U2l6ZTp0aGlzLnR4U2l6ZSxyeFNpemU6aSxkdXJhdGlvbjooMCxjLnQpKCktdGhpcy5zdGFydFRpbWV9O3IoInhociIsW3RoaXMucGFyYW1zLG8sdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJmZXRjaCJdLHRoaXMsbi5LNy5hamF4KX1mdW5jdGlvbiBFKGUpe2NvbnN0IHQ9dGhpcy5wYXJhbXMsaT10aGlzLm1ldHJpY3M7aWYoIXRoaXMuZW5kZWQpe3RoaXMuZW5kZWQ9ITA7Zm9yKGxldCB0PTA7dDxUZTt0KyspZS5yZW1vdmVFdmVudExpc3RlbmVyKHhlW3RdLHRoaXMubGlzdGVuZXIsITEpO3QuYWJvcnRlZHx8KDAsd2UuaVcpKHQpfHwoaS5kdXJhdGlvbj0oMCxjLnQpKCktdGhpcy5zdGFydFRpbWUsdGhpcy5sb2FkQ2FwdHVyZUNhbGxlZHx8NCE9PWUucmVhZHlTdGF0ZT9udWxsPT10LnN0YXR1cyYmKHQuc3RhdHVzPTApOkEodGhpcyxlKSxpLmNiVGltZT10aGlzLmNiVGltZSxyKCJ4aHIiLFt0LGksdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJ4aHIiXSx0aGlzLG4uSzcuYWpheCkpfX1mdW5jdGlvbiBBKGUscil7ZS5wYXJhbXMuc3RhdHVzPXIuc3RhdHVzO3ZhciBpPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5yZXNwb25zZVR5cGU7cmV0dXJuImpzb24iPT09ciYmbnVsbCE9PXQ/dDoiYXJyYXlidWZmZXIiPT09cnx8ImJsb2IiPT09cnx8Impzb24iPT09cj9yZShlLnJlc3BvbnNlKToidGV4dCI9PT1yfHwiIj09PXJ8fHZvaWQgMD09PXI/cmUoZS5yZXNwb25zZVRleHQpOnZvaWQgMH0ocixlLmxhc3RTaXplKTtpZihpJiYoZS5tZXRyaWNzLnJ4U2l6ZT1pKSxlLnNhbWVPcmlnaW4mJnIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuaW5kZXhPZihTZSk+PTApe3ZhciBvPXIuZ2V0UmVzcG9uc2VIZWFkZXIoU2UpO28mJigoMCxhLnApKGgucnMsWyJBamF4L0Nyb3NzQXBwbGljYXRpb25UcmFjaW5nL0hlYWRlci9TZWVuIl0sdm9pZCAwLG4uSzcubWV0cmljcyx0KSxlLnBhcmFtcy5jYXQ9by5zcGxpdCgiLCAiKS5wb3AoKSl9ZS5sb2FkQ2FwdHVyZUNhbGxlZD0hMH10Lm9uKCJuZXcteGhyIixvKSx0Lm9uKCJvcGVuLXhoci1zdGFydCIscyksdC5vbigib3Blbi14aHItZW5kIix1KSx0Lm9uKCJzZW5kLXhoci1zdGFydCIsZCksdC5vbigieGhyLWNiLXRpbWUiLGwpLHQub24oInhoci1sb2FkLWFkZGVkIixmKSx0Lm9uKCJ4aHItbG9hZC1yZW1vdmVkIixwKSx0Lm9uKCJ4aHItcmVzb2x2ZWQiLGcpLHQub24oImFkZEV2ZW50TGlzdGVuZXItZW5kIixtKSx0Lm9uKCJyZW1vdmVFdmVudExpc3RlbmVyLWVuZCIsdiksdC5vbigiZm4tZW5kIix3KSx0Lm9uKCJmZXRjaC1iZWZvcmUtc3RhcnQiLFIpLHQub24oImZldGNoLXN0YXJ0Iix4KSx0Lm9uKCJmbi1zdGFydCIsYiksdC5vbigiZmV0Y2gtZG9uZSIsVCl9KGUsdGhpcy5lZSx0aGlzLmhhbmRsZXIsdGhpcy5kdCksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksMzg0NSkpKX19ZnVuY3Rpb24gT2UoZSx0KXt2YXIgcj0oMCx2ZS5EKSh0KSxuPWUucGFyYW1zfHxlO24uaG9zdG5hbWU9ci5ob3N0bmFtZSxuLnBvcnQ9ci5wb3J0LG4ucHJvdG9jb2w9ci5wcm90b2NvbCxuLmhvc3Q9ci5ob3N0bmFtZSsiOiIrci5wb3J0LG4ucGF0aG5hbWU9ci5wYXRobmFtZSxlLnBhcnNlZE9yaWdpbj1yLGUuc2FtZU9yaWdpbj1yLnNhbWVPcmlnaW59Y29uc3QgTmU9e30sSWU9WyJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiXTtmdW5jdGlvbiBQZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJoaXN0b3J5Iil9KGUpO3JldHVybiF5LlJJfHxOZVt0LmRlYnVnSWRdKyt8fChOZVt0LmRlYnVnSWRdPTEsKDAsb2UuWU0pKHQpLmluUGxhY2Uod2luZG93Lmhpc3RvcnksSWUsIi0iKSksdH12YXIgamU9aSgzNzM4KTtmdW5jdGlvbiBrZShlKXtwKHUuQkwsZnVuY3Rpb24odD1EYXRlLm5vdygpKXtjb25zdCByPXQteS5XTjtyPDAmJigwLGwuUikoNjIsdCksKDAsYS5wKShoLlhHLFt1LkJMLHt0aW1lOnJ9XSx2b2lkIDAsbi5LNy5tZXRyaWNzLGUuZWUpLGUuYWRkVG9UcmFjZSh7bmFtZTp1LkJMLHN0YXJ0OnQsb3JpZ2luOiJuciJ9KSwoMCxhLnApKHUuUGwrdS5oRyxbcix1LkJMXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLGUuZWUpfSxlKX1jb25zdHtIZTpDZSxiRDpMZSxkMzpIZSxLcDpNZSxUWjpLZSxMYzpEZSx1UDpVZSxSejpGZX09amU7Y2xhc3MgV2UgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1LZTtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEtlKSx0PWUscCh1LlUyLGZ1bmN0aW9uKGUpe2lmKCEoZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLm5hbWUmJmUuc3RhcnQpKXJldHVybjtjb25zdCByPXtuOmUubmFtZSxzOmUuc3RhcnQteS5XTixlOihlLmVuZHx8ZS5zdGFydCkteS5XTixvOmUub3JpZ2lufHwiIix0OiJhcGkifTtyLnM8MHx8ci5lPDB8fHIuZTxyLnM/KDAsbC5SKSg2MSx7c3RhcnQ6ci5zLGVuZDpyLmV9KTooMCxhLnApKCJic3RBcGkiLFtyXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2UsdC5lZSl9LHQpLGtlKGUpO2lmKCEoMCxSLlYpKGUuaW5pdCkpcmV0dXJuIHZvaWQgdGhpcy5kZXJlZ2lzdGVyRHJhaW4oKTtjb25zdCByPXRoaXMuZWU7bGV0IG87UGUociksdGhpcy5ldmVudHNFRT0oMCxuZS51KShyKSx0aGlzLmV2ZW50c0VFLm9uKFVlLGZ1bmN0aW9uKGUsdCl7dGhpcy5ic3RTdGFydD0oMCxjLnQpKCl9KSx0aGlzLmV2ZW50c0VFLm9uKERlLGZ1bmN0aW9uKGUsdCl7KDAsYS5wKSgiYnN0IixbZVswXSx0LHRoaXMuYnN0U3RhcnQsKDAsYy50KSgpXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxyLm9uKEZlK0hlLGZ1bmN0aW9uKGUpe3RoaXMudGltZT0oMCxjLnQpKCksdGhpcy5zdGFydFBhdGg9bG9jYXRpb24ucGF0aG5hbWUrbG9jYXRpb24uaGFzaH0pLHIub24oRmUrTWUsZnVuY3Rpb24oZSl7KDAsYS5wKSgiYnN0SGlzdCIsW2xvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2gsdGhpcy5zdGFydFBhdGgsdGhpcy50aW1lXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KTt0cnl7bz1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihlPT57Y29uc3QgdD1lLmdldEVudHJpZXMoKTsoMCxhLnApKENlLFt0XSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxvLm9ic2VydmUoe3R5cGU6TGUsYnVmZmVyZWQ6ITB9KX1jYXRjaChlKXt9dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjk3NCkpLHtyZXNvdXJjZU9ic2VydmVyOm99KX19dmFyIEJlPWkoNjM0NCk7Y2xhc3MgVmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CZS5UWjsjbjtyZWNvcmRlcjtjb25zdHJ1Y3RvcihlKXt2YXIgdDtsZXQgcjtzdXBlcihlLEJlLlRaKSx0PWUscCh1LkNILGZ1bmN0aW9uKCl7KDAsYS5wKSh1LkNILFtdLHZvaWQgMCxuLks3LnNlc3Npb25SZXBsYXksdC5lZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5UYixmdW5jdGlvbigpeygwLGEucCkodS5UYixbXSx2b2lkIDAsbi5LNy5zZXNzaW9uUmVwbGF5LGUuZWUpfSxlKX0oZSk7dHJ5e3I9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiIi5jb25jYXQoUy5IMywiXyIpLmNvbmNhdChTLnVoKSkpfWNhdGNoKGUpe30oMCx3LlNSKShlLmluaXQpJiZ0aGlzLmVlLm9uKHUuQ0gsKCk9PnRoaXMuI2koKSksdGhpcy4jbyhyKSYmdGhpcy5pbXBvcnRSZWNvcmRlcigpLnRoZW4oZT0+e2Uuc3RhcnRSZWNvcmRpbmcoQmUuUWIuUFJFTE9BRCxyPy5zZXNzaW9uUmVwbGF5TW9kZSl9KSx0aGlzLmltcG9ydEFnZ3JlZ2F0b3IodGhpcy5hZ2VudFJlZiwoKT0+aS5lKDQ3OCkudGhlbihpLmJpbmQoaSw2MTY3KSksdGhpcyksdGhpcy5lZS5vbigiZXJyIixlPT57dGhpcy5ibG9ja2VkfHx0aGlzLmFnZW50UmVmLnJ1bnRpbWUuaXNSZWNvcmRpbmcmJih0aGlzLmVycm9yTm90aWNlZD0hMCwoMCxhLnApKEJlLlZoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSl9KX0jbyhlKXtyZXR1cm4gZSYmKGUuc2Vzc2lvblJlcGxheU1vZGU9PT1TLmcuRlVMTHx8ZS5zZXNzaW9uUmVwbGF5TW9kZT09PVMuZy5FUlJPUil8fCgwLHcuQXcpKHRoaXMuYWdlbnRSZWYuaW5pdCl9aW1wb3J0UmVjb3JkZXIoKXtyZXR1cm4gdGhpcy5yZWNvcmRlcj9Qcm9taXNlLnJlc29sdmUodGhpcy5yZWNvcmRlcik6KHRoaXMuI24/Pz1Qcm9taXNlLmFsbChbaS5lKDQ3OCksaS5lKDI0OSldKS50aGVuKGkuYmluZChpLDQ4NjYpKS50aGVuKCh7UmVjb3JkZXI6ZX0pPT4odGhpcy5yZWNvcmRlcj1uZXcgZSh0aGlzKSx0aGlzLnJlY29yZGVyKSkuY2F0Y2goZT0+e3Rocm93IHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksdGhpcy5ibG9ja2VkPSEwLGV9KSx0aGlzLiNuKX0jaSgpe3RoaXMuYmxvY2tlZHx8KHRoaXMuZmVhdEFnZ3JlZ2F0ZT90aGlzLmZlYXRBZ2dyZWdhdGUubW9kZSE9PVMuZy5GVUxMJiZ0aGlzLmZlYXRBZ2dyZWdhdGUuaW5pdGlhbGl6ZVJlY29yZGluZyhTLmcuRlVMTCwhMCxCZS5RYi5BUEkpOnRoaXMuaW1wb3J0UmVjb3JkZXIoKS50aGVuKCgpPT57dGhpcy5yZWNvcmRlci5zdGFydFJlY29yZGluZyhCZS5RYi5BUEksUy5nLkZVTEwpfSkpfX12YXIgR2U9aSgzOTYyKTtmdW5jdGlvbiB6ZShlKXtjb25zdCB0PWUuZWUuZ2V0KCJ0cmFjZXIiKTtmdW5jdGlvbiByKCl7fXAodS5kVCxmdW5jdGlvbihlKXtyZXR1cm4obmV3IHIpLmdldCgib2JqZWN0Ij09dHlwZW9mIGU/ZTp7fSl9LGUpO2NvbnN0IGk9ci5wcm90b3R5cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbihyLGkpe3ZhciBvPXt9LHM9dGhpcyxkPSJmdW5jdGlvbiI9PXR5cGVvZiBpO3JldHVybigwLGEucCkoaC54VixbIkFQSS9jcmVhdGVUcmFjZXIvY2FsbGVkIl0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKSxlLnJ1blNvZnROYXZPdmVyU3BhfHwoMCxhLnApKHUuaHcrInRyYWNlciIsWygwLGMudCkoKSxyLG9dLHMsbi5LNy5zcGEsZS5lZSksZnVuY3Rpb24oKXtpZih0LmVtaXQoKGQ/IiI6Im5vLSIpKyJmbi1zdGFydCIsWygwLGMudCkoKSxzLGRdLG8pLGQpdHJ5e3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChlKXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgZT9uZXcgRXJyb3IoZSk6ZTt0aHJvdyB0LmVtaXQoImZuLWVyciIsW2FyZ3VtZW50cyx0aGlzLHJdLG8pLHJ9ZmluYWxseXt0LmVtaXQoImZuLWVuZCIsWygwLGMudCkoKV0sbyl9fX19O1siYWN0aW9uVGV4dCIsInNldE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJzYXZlIiwiaWdub3JlIiwib25FbmQiLCJnZXRDb250ZXh0IiwiZW5kIiwiZ2V0Il0uZm9yRWFjaCh0PT57cC5hcHBseSh0aGlzLFt0LGZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5wKSh1Lmh3K3QsWygwLGMudCkoKSwuLi5hcmd1bWVudHNdLHRoaXMsZS5ydW5Tb2Z0TmF2T3ZlclNwYT9uLks3LnNvZnROYXY6bi5LNy5zcGEsZS5lZSksdGhpc30sZSxpXSl9KSxwKHUuUEEsZnVuY3Rpb24oKXtlLnJ1blNvZnROYXZPdmVyU3BhPygwLGEucCkodS5odysicm91dGVOYW1lIixbcGVyZm9ybWFuY2Uubm93KCksLi4uYXJndW1lbnRzXSx2b2lkIDAsbi5LNy5zb2Z0TmF2LGUuZWUpOigwLGEucCkodS5QbCsicm91dGVOYW1lIixbKDAsYy50KSgpLC4uLmFyZ3VtZW50c10sdGhpcyxuLks3LnNwYSxlLmVlKX0sZSl9Y2xhc3MgWmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1HZS5UWjtjb25zdHJ1Y3RvcihlKXtpZihzdXBlcihlLEdlLlRaKSx6ZShlKSwheS5SSXx8ISgwLE8uZFYpKCkuby5NTylyZXR1cm47Y29uc3QgdD1QZSh0aGlzLmVlKTt0cnl7dGhpcy5yZW1vdmVPbkFib3J0PW5ldyBBYm9ydENvbnRyb2xsZXJ9Y2F0Y2goZSl7fUdlLnRDLmZvckVhY2goZT0+eygwLEkuc3ApKGUsZT0+e3MoZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKX0pO2NvbnN0IHI9KCk9PigwLGEucCkoIm5ld1VSTCIsWygwLGMudCkoKSwiIit3aW5kb3cubG9jYXRpb25dLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpO3Qub24oInB1c2hTdGF0ZS1lbmQiLHIpLHQub24oInJlcGxhY2VTdGF0ZS1lbmQiLHIpLCgwLEkuc3ApKEdlLk9WLGU9PntzKGUpLCgwLGEucCkoIm5ld1VSTCIsW2UudGltZVN0YW1wLCIiK3dpbmRvdy5sb2NhdGlvbl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKTtsZXQgbj0hMTtjb25zdCBvPW5ldygoMCxPLmRWKSgpLm8uTU8pKChlLHQpPT57bnx8KG49ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57KDAsYS5wKSgibmV3RG9tIixbKDAsYy50KSgpXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSxuPSExfSkpfSkscz0oMCx4LnMpKGU9PnsoMCxhLnApKCJuZXdVSUV2ZW50IixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksby5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsY2hhcmFjdGVyRGF0YTohMH0pfSwxMDAse2xlYWRpbmc6ITB9KTt0aGlzLmFib3J0SGFuZGxlcj1mdW5jdGlvbigpe3RoaXMucmVtb3ZlT25BYm9ydD8uYWJvcnQoKSxvLmRpc2Nvbm5lY3QoKSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDB9LHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDQzOTMpKSx7ZG9tT2JzZXJ2ZXI6b30pfX12YXIgcWU9aSg3Mzc4KTtjb25zdCBYZT17fSxZZT1bImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVwbGFjZUNoaWxkIl07ZnVuY3Rpb24gSmUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgianNvbnAiKX0oZSk7aWYoIXkuUkl8fFhlW3QuZGVidWdJZF0pcmV0dXJuIHQ7WGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj0oMCxvZS5ZTSkodCksbj0vWz8mXSg/OmNhbGxiYWNrfGNiKT0oW14mI10rKS8saT0vKC4qKVwuKFteLl0rKS8sbz0vXihcdyspKFwufCQpKC4qKSQvO2Z1bmN0aW9uIHMoZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPWUubWF0Y2gobyksbj1yWzFdO3JldHVybiBzKHJbM10sdFtuXSl9cmV0dXJuIHIuaW5QbGFjZShOb2RlLnByb3RvdHlwZSxZZSwiZG9tLSIpLHQub24oImRvbS1zdGFydCIsZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUubm9kZU5hbWV8fCJzY3JpcHQiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXJldHVybjt2YXIgbz0oYT1lLnNyYyxjPWEubWF0Y2gobiksYz9jWzFdOm51bGwpO3ZhciBhLGM7aWYoIW8pcmV0dXJuO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goaSk7aWYodCYmdC5sZW5ndGg+PTMpcmV0dXJue2tleTp0WzJdLHBhcmVudDpzKHRbMV0sd2luZG93KX07cmV0dXJue2tleTplLHBhcmVudDp3aW5kb3d9fShvKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdS5wYXJlbnRbdS5rZXldKXJldHVybjt2YXIgZD17fTtmdW5jdGlvbiBsKCl7dC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1mdW5jdGlvbiBmKCl7dC5lbWl0KCJqc29ucC1lcnJvciIsW10sZCksdC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1yLmluUGxhY2UodS5wYXJlbnQsW3Uua2V5XSwiY2ItIixkKSxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsKDAsSS5qVCkoITEpKSxlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmLCgwLEkualQpKCExKSksdC5lbWl0KCJuZXctanNvbnAiLFtlLnNyY10sZCl9KGVbMF0pfSksdH1jb25zdCAkZT17fTtmdW5jdGlvbiBRZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJwcm9taXNlIil9KGUpO2lmKCRlW3QuZGVidWdJZF0pcmV0dXJuIHQ7JGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj10LmNvbnRleHQsbj0oMCxvZS5ZTSkodCksaT15LmdtLlByb21pc2U7cmV0dXJuIGkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShyKXt2YXIgbz10LmNvbnRleHQoKSxzPW4ociwiZXhlY3V0b3ItIixvLG51bGwsITEpO2NvbnN0IGE9UmVmbGVjdC5jb25zdHJ1Y3QoaSxbc10sZSk7cmV0dXJuIHQuY29udGV4dChhKS5nZXRDdHg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sYX15LmdtLlByb21pc2U9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOiJQcm9taXNlIn0pLGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS50b1N0cmluZygpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxpKSxbImFsbCIsInJhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2xldCBpPSExO1suLi5lfHxbXV0uZm9yRWFjaChlPT57dGhpcy5yZXNvbHZlKGUpLnRoZW4ocygiYWxsIj09PXIpLHMoITEpKX0pO2NvbnN0IG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG87ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt0LmVtaXQoInByb3BhZ2F0ZSIsW251bGwsIWldLG8sITEsITEpLGk9aXx8IWV9fX19KSxbInJlc29sdmUiLCJyZWplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2NvbnN0IHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGUhPT1yJiZ0LmVtaXQoInByb3BhZ2F0ZSIsW2UsITBdLHIsITEsITEpLHJ9fSksZS5wcm90b3R5cGU9aS5wcm90b3R5cGU7Y29uc3Qgbz1pLnByb3RvdHlwZS50aGVuO2kucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oLi4uZSl7dmFyIGk9dGhpcyxzPXIoaSk7cy5wcm9taXNlPWksZVswXT1uKGVbMF0sImNiLSIscyxudWxsLCExKSxlWzFdPW4oZVsxXSwiY2ItIixzLG51bGwsITEpO2NvbnN0IGE9by5hcHBseSh0aGlzLGUpO3JldHVybiBzLm5leHRQcm9taXNlPWEsdC5lbWl0KCJwcm9wYWdhdGUiLFtpLCEwXSxhLCExLCExKSxhfSxpLnByb3RvdHlwZS50aGVuW29lLkp0XT1vLHQub24oImV4ZWN1dG9yLXN0YXJ0IixmdW5jdGlvbihlKXtlWzBdPW4oZVswXSwicmVzb2x2ZS0iLHRoaXMsbnVsbCwhMSksZVsxXT1uKGVbMV0sInJlc29sdmUtIix0aGlzLG51bGwsITEpfSksdC5vbigiZXhlY3V0b3ItZXJyIixmdW5jdGlvbihlLHQscil7ZVsxXShyKX0pLHQub24oImNiLWVuZCIsZnVuY3Rpb24oZSxyLG4pe3QuZW1pdCgicHJvcGFnYXRlIixbbiwhMF0sdGhpcy5uZXh0UHJvbWlzZSwhMSwhMSl9KSx0Lm9uKCJwcm9wYWdhdGUiLGZ1bmN0aW9uKGUscixuKXtpZighdGhpcy5nZXRDdHh8fHIpe2NvbnN0IHI9dGhpcyxuPWUgaW5zdGFuY2VvZiBQcm9taXNlP3QuY29udGV4dChlKTpudWxsO2xldCBpO3RoaXMuZ2V0Q3R4PWZ1bmN0aW9uKCl7cmV0dXJuIGl8fChpPW4mJm4hPT1yPyJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEN0eD9uLmdldEN0eCgpOm46cixpKX19fSl9KCksdH1jb25zdCBldD17fSx0dD0ic2V0VGltZW91dCIscnQ9InNldEludGVydmFsIixudD0iY2xlYXJUaW1lb3V0IixpdD0iLXN0YXJ0IixvdD1bdHQsInNldEltbWVkaWF0ZSIscnQsbnQsImNsZWFySW1tZWRpYXRlIl07ZnVuY3Rpb24gc3QoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgidGltZXIiKX0oZSk7aWYoZXRbdC5kZWJ1Z0lkXSsrKXJldHVybiB0O2V0W3QuZGVidWdJZF09MTt2YXIgcj0oMCxvZS5ZTSkodCk7cmV0dXJuIHIuaW5QbGFjZSh5LmdtLG90LnNsaWNlKDAsMiksdHQrIi0iKSxyLmluUGxhY2UoeS5nbSxvdC5zbGljZSgyLDMpLHJ0KyItIiksci5pblBsYWNlKHkuZ20sb3Quc2xpY2UoMyksbnQrIi0iKSx0Lm9uKHJ0K2l0LGZ1bmN0aW9uKGUsdCxuKXtlWzBdPXIoZVswXSwiZm4tIixudWxsLG4pfSksdC5vbih0dCtpdCxmdW5jdGlvbihlLHQsbil7dGhpcy5tZXRob2Q9bix0aGlzLnRpbWVyRHVyYXRpb249aXNOYU4oZVsxXSk/MDorZVsxXSxlWzBdPXIoZVswXSwiZm4tIix0aGlzLG4pfSksdH1jb25zdCBhdD17fTtmdW5jdGlvbiBjdChlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJtdXRhdGlvbiIpfShlKTtpZigheS5SSXx8YXRbdC5kZWJ1Z0lkXSlyZXR1cm4gdDthdFt0LmRlYnVnSWRdPSEwO3ZhciByPSgwLG9lLllNKSh0KSxuPXkuZ20uTXV0YXRpb25PYnNlcnZlcjtyZXR1cm4gbiYmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj9uZXcgbihyKGUsImZuLSIpKTpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGU9bi5wcm90b3R5cGUpLHR9Y29uc3R7VFo6dXQsZDM6ZHQsS3A6bHQsJHA6ZnQsd1c6aHQsZTU6cHQsdEg6Z3QsdVA6bXQscnc6dnQsTGM6YnR9PXFlO2NsYXNzIHl0IGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9dXQ7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSx1dCksemUoZSksIXkuUkkpcmV0dXJuO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9bGV0IHQscj0wO2NvbnN0IG49dGhpcy5lZS5nZXQoInRyYWNlciIpLG89SmUodGhpcy5lZSkscz1RZSh0aGlzLmVlKSx1PXN0KHRoaXMuZWUpLGQ9Y2UodGhpcy5lZSksbD10aGlzLmVlLmdldCgiZXZlbnRzIiksZj1tZSh0aGlzLmVlKSxoPVBlKHRoaXMuZWUpLHA9Y3QodGhpcy5lZSk7ZnVuY3Rpb24gZyhlLHQpe2guZW1pdCgibmV3VVJMIixbIiIrd2luZG93LmxvY2F0aW9uLHRdKX1mdW5jdGlvbiBtKCl7cisrLHQ9d2luZG93LmxvY2F0aW9uLmhhc2gsdGhpc1ttdF09KDAsYy50KSgpfWZ1bmN0aW9uIHYoKXtyLS0sd2luZG93LmxvY2F0aW9uLmhhc2ghPT10JiZnKDAsITApO3ZhciBlPSgwLGMudCkoKTt0aGlzW3B0XT1+fnRoaXNbcHRdK2UtdGhpc1ttdF0sdGhpc1tidF09ZX1mdW5jdGlvbiBiKGUsdCl7ZS5vbih0LGZ1bmN0aW9uKCl7dGhpc1t0XT0oMCxjLnQpKCl9KX10aGlzLmVlLm9uKG10LG0pLHMub24odnQsbSksby5vbih2dCxtKSx0aGlzLmVlLm9uKGJ0LHYpLHMub24oaHQsdiksby5vbihodCx2KSx0aGlzLmVlLm9uKCJmbi1lcnIiLCguLi50KT0+e3RbMl0/Ll9fbmV3cmVsaWM/LltlLmFnZW50SWRlbnRpZmllcl18fCgwLGEucCkoImZ1bmN0aW9uLWVyciIsWy4uLnRdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5lZS5idWZmZXIoW210LGJ0LCJ4aHItcmVzb2x2ZWQiXSx0aGlzLmZlYXR1cmVOYW1lKSxsLmJ1ZmZlcihbbXRdLHRoaXMuZmVhdHVyZU5hbWUpLHUuYnVmZmVyKFsic2V0VGltZW91dCIrbHQsImNsZWFyVGltZW91dCIrZHQsbXRdLHRoaXMuZmVhdHVyZU5hbWUpLGQuYnVmZmVyKFttdCwibmV3LXhociIsInNlbmQteGhyIitkdF0sdGhpcy5mZWF0dXJlTmFtZSksZi5idWZmZXIoW2d0K2R0LGd0KyItZG9uZSIsZ3QrZnQrZHQsZ3QrZnQrbHRdLHRoaXMuZmVhdHVyZU5hbWUpLGguYnVmZmVyKFsibmV3VVJMIl0sdGhpcy5mZWF0dXJlTmFtZSkscC5idWZmZXIoW210XSx0aGlzLmZlYXR1cmVOYW1lKSxzLmJ1ZmZlcihbInByb3BhZ2F0ZSIsdnQsaHQsImV4ZWN1dG9yLWVyciIsInJlc29sdmUiK2R0XSx0aGlzLmZlYXR1cmVOYW1lKSxuLmJ1ZmZlcihbbXQsIm5vLSIrbXRdLHRoaXMuZmVhdHVyZU5hbWUpLG8uYnVmZmVyKFsibmV3LWpzb25wIiwiY2Itc3RhcnQiLCJqc29ucC1lcnJvciIsImpzb25wLWVuZCJdLHRoaXMuZmVhdHVyZU5hbWUpLGIoZixndCtkdCksYihmLGd0KyItZG9uZSIpLGIobywibmV3LWpzb25wIiksYihvLCJqc29ucC1lbmQiKSxiKG8sImNiLXN0YXJ0IiksaC5vbigicHVzaFN0YXRlLWVuZCIsZyksaC5vbigicmVwbGFjZVN0YXRlLWVuZCIsZyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGcsKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZywoMCxJLmpUKSghMCx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtnKDAscj4xKX0sKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDU1OTIpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgd3Q9aSgzMzMzKTtjbGFzcyBSdCBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXd0LlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsd3QuVFopO2NvbnN0IHQ9W2UuaW5pdC5wYWdlX2FjdGlvbi5lbmFibGVkLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21hcmtzLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21lYXN1cmVzLGUuaW5pdC51c2VyX2FjdGlvbnMuZW5hYmxlZCxlLmluaXQucGVyZm9ybWFuY2UucmVzb3VyY2VzLmVuYWJsZWRdO3ZhciByO3I9ZSxwKHUuaEcsKGUsdCk9PnooZSx0LHIpLHIpLGZ1bmN0aW9uKGUpe3AodS5mRiwodCxyKT0+cSh0LHIsZSksZSl9KGUpLGtlKGUpLFgoZSksZnVuY3Rpb24oZSl7cCh1LlYxLCh0LHIpPT5aKHQscixlKSxlKX0oZSk7Y29uc3Qgbz1lLmluaXQuZmVhdHVyZV9mbGFncy5pbmNsdWRlcygidXNlcl9mcnVzdHJhdGlvbnMiKTtsZXQgcztpZih5LlJJJiZvJiYobWUodGhpcy5lZSksY2UodGhpcy5lZSkscz1QZSh0aGlzLmVlKSkseS5SSSl7aWYoZS5pbml0LnVzZXJfYWN0aW9ucy5lbmFibGVkJiYod3QuWnAuZm9yRWFjaChlPT4oMCxJLnNwKShlLGU9PigwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksITApKSx3dC5xTi5mb3JFYWNoKGU9Pntjb25zdCB0PSgwLHgucykoZT0+eygwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LDUwMCx7bGVhZGluZzohMH0pOygwLEkuc3ApKGUsdCl9KSxvKSl7ZnVuY3Rpb24gYyh0KXtjb25zdCByPSgwLHZlLkQpKHQpO3JldHVybiBlLmJlYWNvbnMuaW5jbHVkZXMoci5ob3N0bmFtZSsiOiIrci5wb3J0KX1mdW5jdGlvbiBkKCl7cy5lbWl0KCJuYXZDaGFuZ2UiKX15LmdtLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+eygwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHRoaXMuZWUub24oIm9wZW4teGhyLXN0YXJ0IiwoZSx0KT0+e2MoZVsxXSl8fHQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9PnsyPT09dC5yZWFkeVN0YXRlJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pfSksdGhpcy5lZS5vbigiZmV0Y2gtc3RhcnQiLGU9PntlLmxlbmd0aD49MSYmIWMoUmUoZVswXSkpJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pLHMub24oInB1c2hTdGF0ZS1lbmQiLGQpLHMub24oInJlcGxhY2VTdGF0ZS1lbmQiLGQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSl9aWYoZS5pbml0LnBlcmZvcm1hbmNlLnJlc291cmNlcy5lbmFibGVkJiZ5LmdtLlBlcmZvcm1hbmNlT2JzZXJ2ZXI/LnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMoInJlc291cmNlIikpe25ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGU9PntlLmdldEVudHJpZXMoKS5mb3JFYWNoKGU9PnsoMCxhLnApKCJicm93c2VyUGVyZm9ybWFuY2UucmVzb3VyY2UiLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0pfSkub2JzZXJ2ZSh7dHlwZToicmVzb3VyY2UiLGJ1ZmZlcmVkOiEwfSl9fXRyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChsKXt9dGhpcy5hYm9ydEhhbmRsZXI9KCk9Pnt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfSx0LnNvbWUoZT0+ZSk/dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksODAxOSkpKTp0aGlzLmRlcmVnaXN0ZXJEcmFpbigpfX12YXIgeHQ9aSgyNjQ2KTtjb25zdCBUdD1uZXcgTWFwO2Z1bmN0aW9uIEV0KGUsdCxyLG4pe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8IXR8fCJzdHJpbmciIT10eXBlb2Ygcnx8IXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W3JdKXJldHVybigwLGwuUikoMjkpO2NvbnN0IGk9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGllLmVlKS5nZXQoImxvZ2dlciIpfShlKSxvPSgwLG9lLllNKShpKSxzPW5ldyB4dC55KGllLlApO3MubGV2ZWw9bi5sZXZlbCxzLmN1c3RvbUF0dHJpYnV0ZXM9bi5jdXN0b21BdHRyaWJ1dGVzO2NvbnN0IGE9dFtyXT8uW29lLkp0XXx8dFtyXTtyZXR1cm4gVHQuc2V0KGEscyksby5pblBsYWNlKHQsW3JdLCJ3cmFwLWxvZ2dlci0iLCgpPT5UdC5nZXQoYSkpLGl9dmFyIEF0PWkoMTkxMCk7Y2xhc3MgU3QgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CLlRaO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQi5UWiksdD1lLHAodS4kOSwoZSxyKT0+RyhlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LldiLCh0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bj17fSxsZXZlbDppPUIucF8uSU5GT309e30pPT57RXQoZS5lZSx0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bixsZXZlbDppfSl9LGUpfShlKSxYKGUpO2NvbnN0IHI9dGhpcy5lZTtbImxvZyIsImVycm9yIiwid2FybiIsImluZm8iLCJkZWJ1ZyIsInRyYWNlIl0uZm9yRWFjaChlPT57KDAsQXQuaSkoeS5nbS5jb25zb2xlW2VdKSxFdChyLHkuZ20uY29uc29sZSxlLHtsZXZlbDoibG9nIj09PWU/ImluZm8iOmV9KX0pLHRoaXMuZWUub24oIndyYXAtbG9nZ2VyLWVuZCIsZnVuY3Rpb24oW2VdKXtjb25zdHtsZXZlbDp0LGN1c3RvbUF0dHJpYnV0ZXM6bn09dGhpczsoMCxWLlIpKHIsZSxuLHQpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNTI4OCkpKX19bmV3IGNsYXNzIGV4dGVuZHMgcntjb25zdHJ1Y3RvcihlKXt2YXIgdDsoc3VwZXIoKSx5LmdtKT8odGhpcy5mZWF0dXJlcz17fSwoMCxPLmJRKSh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzKSx0aGlzLmRlc2lyZWRGZWF0dXJlcz1uZXcgU2V0KGUuZmVhdHVyZXN8fFtdKSx0aGlzLmRlc2lyZWRGZWF0dXJlcy5hZGQoXyksdGhpcy5ydW5Tb2Z0TmF2T3ZlclNwYT1bLi4udGhpcy5kZXNpcmVkRmVhdHVyZXNdLnNvbWUoZT0+ZS5mZWF0dXJlTmFtZT09PW4uSzcuc29mdE5hdiksKDAscy5qKSh0aGlzLGUsZS5sb2FkZXJUeXBlfHwiYWdlbnQiKSx0PXRoaXMscCh1LmNELGZ1bmN0aW9uKGUscixuPSExKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKFsic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiJdLmluY2x1ZGVzKHR5cGVvZiByKXx8bnVsbD09PXIpcmV0dXJuIGcodCxlLHIsdS5jRCxuKTsoMCxsLlIpKDQwLHR5cGVvZiByKX1lbHNlKDAsbC5SKSgzOSx0eXBlb2YgZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5EbCxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiBnKGUsImVuZHVzZXIuaWQiLHQsdS5EbCwhMCk7KDAsbC5SKSg0MSx0eXBlb2YgdCl9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUubmIsZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4gZyhlLCJhcHBsaWNhdGlvbi52ZXJzaW9uIix0LHUubmIsITEpOygwLGwuUikoNDIsdHlwZW9mIHQpfSxlKX0odGhpcyksZnVuY3Rpb24oZSl7cCh1LmQzLGZ1bmN0aW9uKCl7ZS5lZS5lbWl0KCJtYW51YWwtc3RhcnQtYWxsIil9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUuUHYsZnVuY3Rpb24odD0hMCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdCl7aWYoKDAsYS5wKSh1LlBsK3UuUHYsW3RdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSksZS5ydW50aW1lLmNvbnNlbnRlZD10LHQpe2NvbnN0IHQ9ZS5mZWF0dXJlcy5wYWdlX3ZpZXdfZXZlbnQ7dC5vbkFnZ3JlZ2F0ZUltcG9ydGVkLnRoZW4oZT0+e2NvbnN0IHI9dC5mZWF0QWdncmVnYXRlO2UmJiFyLnNlbnRSdW0mJnIuc2VuZFJ1bSgpfSl9fWVsc2UoMCxsLlIpKDY1LHR5cGVvZiB0KX0sZSl9KHRoaXMpLHRoaXMucnVuKCkpOigwLGwuUikoMjEpfWdldCBjb25maWcoKXtyZXR1cm57aW5mbzp0aGlzLmluZm8saW5pdDp0aGlzLmluaXQsbG9hZGVyX2NvbmZpZzp0aGlzLmxvYWRlcl9jb25maWcscnVudGltZTp0aGlzLnJ1bnRpbWV9fWdldCBhcGkoKXtyZXR1cm4gdGhpc31ydW4oKXt0cnl7Y29uc3QgZT1mdW5jdGlvbihlKXtjb25zdCB0PXt9O3JldHVybiBvLmZvckVhY2gocj0+e3Rbcl09ISFlW3JdPy5lbmFibGVkfSksdH0odGhpcy5pbml0KSx0PVsuLi50aGlzLmRlc2lyZWRGZWF0dXJlc107dC5zb3J0KChlLHQpPT5uLlAzW2UuZmVhdHVyZU5hbWVdLW4uUDNbdC5mZWF0dXJlTmFtZV0pLHQuZm9yRWFjaCh0PT57aWYoIWVbdC5mZWF0dXJlTmFtZV0mJnQuZmVhdHVyZU5hbWUhPT1uLks3LnBhZ2VWaWV3RXZlbnQpcmV0dXJuO2lmKHRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNwYSlyZXR1cm47aWYoIXRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNvZnROYXYpcmV0dXJuO2NvbnN0IHI9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugbi5LNy5hamF4OnJldHVybltuLks3LmpzZXJyb3JzXTtjYXNlIG4uSzcuc2Vzc2lvblRyYWNlOnJldHVybltuLks3LmFqYXgsbi5LNy5wYWdlVmlld0V2ZW50XTtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm5bbi5LNy5zZXNzaW9uVHJhY2VdO2Nhc2Ugbi5LNy5wYWdlVmlld1RpbWluZzpyZXR1cm5bbi5LNy5wYWdlVmlld0V2ZW50XTtkZWZhdWx0OnJldHVybltdfX0odC5mZWF0dXJlTmFtZSkuZmlsdGVyKGU9PiEoZSBpbiB0aGlzLmZlYXR1cmVzKSk7ci5sZW5ndGg+MCYmKDAsbC5SKSgzNix7dGFyZ2V0RmVhdHVyZTp0LmZlYXR1cmVOYW1lLG1pc3NpbmdEZXBlbmRlbmNpZXM6cn0pLHRoaXMuZmVhdHVyZXNbdC5mZWF0dXJlTmFtZV09bmV3IHQodGhpcyl9KX1jYXRjaChlKXsoMCxsLlIpKDIyLGUpO2Zvcihjb25zdCBlIGluIHRoaXMuZmVhdHVyZXMpdGhpcy5mZWF0dXJlc1tlXS5hYm9ydEhhbmRsZXI/LigpO2NvbnN0IHQ9KDAsTy5abSkoKTtkZWxldGUgdC5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/LmZlYXR1cmVzLGRlbGV0ZSB0aGlzLnNoYXJlZEFnZ3JlZ2F0b3I7cmV0dXJuIHQuZWUuZ2V0KHRoaXMuYWdlbnRJZGVudGlmaWVyKS5hYm9ydCgpLCExfX19KHtmZWF0dXJlczpbX2UsXyxqLFdlLFZlLGssSixSdCxTdCxaZSx5dF0sbG9hZGVyVHlwZToic3BhIn0pfSkoKX0pKCk7PC9zY3JpcHQ+Cgk8IS0tIDxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyI+IC0tPgoJPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiIC8+LS0+Cgk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+Cgk8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGxpYnJhcmllcyBvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAtIFNlYXJjaCwgVmlzaXQsIFJlc2VhcmNoLCBFeHBsb3JlIiAvPgoJPHRpdGxlPlNlYXJjaCB8IE1JVCBMaWJyYXJpZXM8L3RpdGxlPgoJPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJTZWFyY2ggfCBNSVQgTGlicmFyaWVzIi8+CjxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2ltYWdlcy9taXQtbGlicmFyaWVzLWxvZ28tYmxhY2steWVsbG93LTEyMDAtMTIwMC5wbmciLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOnR5cGUiIGNvbnRlbnQ9ImltYWdlL3BuZyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOndpZHRoIiBjb250ZW50PSIxMjAwIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6aGVpZ2h0IiBjb250ZW50PSIxMjAwIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6YWx0IiBjb250ZW50PSJNSVQgTGlicmFyaWVzIGxvZ28iIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iVXNlIHRoaXMgcGFnZSB0byBsZWFybiBhYm91dCBkaWZmZXJlbnQgd2F5cyB5b3UgY2FuIHNlYXJjaCB0aGUgTUlUIExpYnJhcmllc+KAmSBvZmZlcmluZ3MuIFVzZSB0aGUgRGVmYXVsdCBRdWljayBTZWFyY2ggT3VyIFF1aWNrIFNlYXJjaCBpcyB0aGUgZGVmYXVsdCBzZWFyY2ggb24gdGhlIExpYnJhcmllc+KAmSBob21lcGFnZS4gVGhpcyBjb2xsZWN0cyByZXN1bHRzIGZyb20gZGlmZmVyZW50IGxpYnJhcnkgc2VhcmNoIHRvb2xzIGFuZCBzb3J0cyB0aGUgcmVzdWx0cyBpbnRvIDQgY2F0ZWdvcmllczogQm9va3MgYW5kIG1lZGlhIEFydGljbGVzIGFuZCBib29rIGNoYXB0ZXJzIEFyY2hpdmVzIGFuZCBtYW51c2NyaXB0IGNvbGxlY3Rpb25zIE91ciBsaWJyYXJ5IHdlYnNpdGUgYW5kIGd1aWRlcyBUaGUgdG9vbCB3aWxsIHNlYXJjaCB0aGUgNCBjYXRlZ29yaWVzIGFuZCBwcmVzZW50IHRoZSB0b3AgcmVzdWx0cyBmcm9tIGVhY2ggY2F0ZWdvcnkuIEl0IGlzIHVzZWZ1bCB0byBzZWUgdGhlIGZ1bGwgYnJlYWR0aCBvZiB3aGF0IE1JVCBMaWJyYXJpZXMgaGFzIG9uIGEgcGFydGljdWxhciB0b3BpYyBvciBhdXRob3IuIEdvIHN0cmFpZ2h0IHRvIG91ciBbJmhlbGxpcDtdIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC8iPgoJPGxpbmsgcmVsPSJwcm9maWxlIiBocmVmPSJodHRwczovL2dtcGcub3JnL3hmbi8xMSIgLz4KCTxsaW5rIHJlbD0icGluZ2JhY2siIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AveG1scnBjLnBocCIgLz4KCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5pY28iIHNpemVzPSIzMngzMiI+Cgk8bGluayByZWw9Imljb24iIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL2Zhdmljb24uc3ZnIiB0eXBlPSJpbWFnZS9zdmcreG1sIj4KCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvYXBwbGUtdG91Y2gtaWNvbi5wbmciPjwhLS0gMTgww5cxODAgLS0+Cgk8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9tYW5pZmVzdC5qc29uIj4KCTxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UnIC8+Cgk8c3R5bGU+aW1nOmlzKFtzaXplcz0iYXV0byIgaV0sIFtzaXplc149ImF1dG8sIiBpXSkgeyBjb250YWluLWludHJpbnNpYy1zaXplOiAzMDAwcHggMTUwMHB4IH08L3N0eWxlPgoJPGxpbmsgcmVsPSdkbnMtcHJlZmV0Y2gnIGhyZWY9Jy8vbGlicmFyaWVzLm1pdC5lZHUnIC8+CjxsaW5rIHJlbD0nZG5zLXByZWZldGNoJyBocmVmPScvL21heGNkbi5ib290c3RyYXBjZG4uY29tJyAvPgo8bGluayByZWw9J2Rucy1wcmVmZXRjaCcgaHJlZj0nLy91c2UudHlwZWtpdC5uZXQnIC8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLyogPCFbQ0RBVEFbICovCndpbmRvdy5fd3BlbW9qaVNldHRpbmdzID0geyJiYXNlVXJsIjoiaHR0cHM6XC9cL3Mudy5vcmdcL2ltYWdlc1wvY29yZVwvZW1vamlcLzE2LjAuMVwvNzJ4NzJcLyIsImV4dCI6Ii5wbmciLCJzdmdVcmwiOiJodHRwczpcL1wvcy53Lm9yZ1wvaW1hZ2VzXC9jb3JlXC9lbW9qaVwvMTYuMC4xXC9zdmdcLyIsInN2Z0V4dCI6Ii5zdmciLCJzb3VyY2UiOnsiY29uY2F0ZW1vamkiOiJodHRwczpcL1wvbGlicmFyaWVzLm1pdC5lZHVcL3dwXC93cC1pbmNsdWRlc1wvanNcL3dwLWVtb2ppLXJlbGVhc2UubWluLmpzP3Zlcj02LjguMiJ9fTsKLyohIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCAqLwohZnVuY3Rpb24ocyxuKXt2YXIgbyxpLGU7ZnVuY3Rpb24gYyhlKXt0cnl7dmFyIHQ9e3N1cHBvcnRUZXN0czplLHRpbWVzdGFtcDoobmV3IERhdGUpLnZhbHVlT2YoKX07c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShvLEpTT04uc3RyaW5naWZ5KHQpKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSx0LG4pe2UuY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUuZmlsbFRleHQodCwwLDApO3ZhciB0PW5ldyBVaW50MzJBcnJheShlLmdldEltYWdlRGF0YSgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KS5kYXRhKSxhPShlLmNsZWFyUmVjdCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxlLmZpbGxUZXh0KG4sMCwwKSxuZXcgVWludDMyQXJyYXkoZS5nZXRJbWFnZURhdGEoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCkuZGF0YSkpO3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1hW3RdfSl9ZnVuY3Rpb24gdShlLHQpe2UuY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUuZmlsbFRleHQodCwwLDApO2Zvcih2YXIgbj1lLmdldEltYWdlRGF0YSgxNiwxNiwxLDEpLGE9MDthPG4uZGF0YS5sZW5ndGg7YSsrKWlmKDAhPT1uLmRhdGFbYV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZihlLHQsbixhKXtzd2l0Y2godCl7Y2FzZSJmbGFnIjpyZXR1cm4gbihlLCJcdWQ4M2NcdWRmZjNcdWZlMGZcdTIwMGRcdTI2YTdcdWZlMGYiLCJcdWQ4M2NcdWRmZjNcdWZlMGZcdTIwMGJcdTI2YTdcdWZlMGYiKT8hMTohbihlLCJcdWQ4M2NcdWRkZThcdWQ4M2NcdWRkZjYiLCJcdWQ4M2NcdWRkZThcdTIwMGJcdWQ4M2NcdWRkZjYiKSYmIW4oZSwiXHVkODNjXHVkZmY0XHVkYjQwXHVkYzY3XHVkYjQwXHVkYzYyXHVkYjQwXHVkYzY1XHVkYjQwXHVkYzZlXHVkYjQwXHVkYzY3XHVkYjQwXHVkYzdmIiwiXHVkODNjXHVkZmY0XHUyMDBiXHVkYjQwXHVkYzY3XHUyMDBiXHVkYjQwXHVkYzYyXHUyMDBiXHVkYjQwXHVkYzY1XHUyMDBiXHVkYjQwXHVkYzZlXHUyMDBiXHVkYjQwXHVkYzY3XHUyMDBiXHVkYjQwXHVkYzdmIik7Y2FzZSJlbW9qaSI6cmV0dXJuIWEoZSwiXHVkODNlXHVkZWRmIil9cmV0dXJuITF9ZnVuY3Rpb24gZyhlLHQsbixhKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU/bmV3IE9mZnNjcmVlbkNhbnZhcygzMDAsMTUwKTpzLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG89ci5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pLGk9KG8udGV4dEJhc2VsaW5lPSJ0b3AiLG8uZm9udD0iNjAwIDMycHggQXJpYWwiLHt9KTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lbZV09dChvLGUsbixhKX0pLGl9ZnVuY3Rpb24gdChlKXt2YXIgdD1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Quc3JjPWUsdC5kZWZlcj0hMCxzLmhlYWQuYXBwZW5kQ2hpbGQodCl9InVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiYobz0id3BFbW9qaVNldHRpbmdzU3VwcG9ydHMiLGk9WyJmbGFnIiwiZW1vamkiXSxuLnN1cHBvcnRzPXtldmVyeXRoaW5nOiEwLGV2ZXJ5dGhpbmdFeGNlcHRGbGFnOiEwfSxlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZSx7b25jZTohMH0pfSksbmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oKXt0cnl7dmFyIGU9SlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKG8pKTtpZigib2JqZWN0Ij09dHlwZW9mIGUmJiJudW1iZXIiPT10eXBlb2YgZS50aW1lc3RhbXAmJihuZXcgRGF0ZSkudmFsdWVPZigpPGUudGltZXN0YW1wKzYwNDgwMCYmIm9iamVjdCI9PXR5cGVvZiBlLnN1cHBvcnRUZXN0cylyZXR1cm4gZS5zdXBwb3J0VGVzdHN9Y2F0Y2goZSl7fXJldHVybiBudWxsfSgpO2lmKCFuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMmJiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMJiZVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2IpdHJ5e3ZhciBlPSJwb3N0TWVzc2FnZSgiK2cudG9TdHJpbmcoKSsiKCIrW0pTT04uc3RyaW5naWZ5KGkpLGYudG9TdHJpbmcoKSxwLnRvU3RyaW5nKCksdS50b1N0cmluZygpXS5qb2luKCIsIikrIikpOyIsYT1uZXcgQmxvYihbZV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxyPW5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChhKSx7bmFtZToid3BUZXN0RW1vamlTdXBwb3J0cyJ9KTtyZXR1cm4gdm9pZChyLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtjKG49ZS5kYXRhKSxyLnRlcm1pbmF0ZSgpLHQobil9KX1jYXRjaChlKXt9YyhuPWcoaSxmLHAsdSkpfXQobil9KS50aGVuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKW4uc3VwcG9ydHNbdF09ZVt0XSxuLnN1cHBvcnRzLmV2ZXJ5dGhpbmc9bi5zdXBwb3J0cy5ldmVyeXRoaW5nJiZuLnN1cHBvcnRzW3RdLCJmbGFnIiE9PXQmJihuLnN1cHBvcnRzLmV2ZXJ5dGhpbmdFeGNlcHRGbGFnPW4uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWcmJm4uc3VwcG9ydHNbdF0pO24uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWc9bi5zdXBwb3J0cy5ldmVyeXRoaW5nRXhjZXB0RmxhZyYmIW4uc3VwcG9ydHMuZmxhZyxuLkRPTVJlYWR5PSExLG4ucmVhZHlDYWxsYmFjaz1mdW5jdGlvbigpe24uRE9NUmVhZHk9ITB9fSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSkudGhlbihmdW5jdGlvbigpe3ZhciBlO24uc3VwcG9ydHMuZXZlcnl0aGluZ3x8KG4ucmVhZHlDYWxsYmFjaygpLChlPW4uc291cmNlfHx7fSkuY29uY2F0ZW1vamk/dChlLmNvbmNhdGVtb2ppKTplLndwZW1vamkmJmUudHdlbW9qaSYmKHQoZS50d2Vtb2ppKSx0KGUud3BlbW9qaSkpKX0pKX0oKHdpbmRvdyxkb2N1bWVudCksd2luZG93Ll93cGVtb2ppU2V0dGluZ3MpOwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzdHlsZSBpZD0nd3AtZW1vamktc3R5bGVzLWlubGluZS1jc3MnIHR5cGU9J3RleHQvY3NzJz4KCglpbWcud3Atc21pbGV5LCBpbWcuZW1vamkgewoJCWRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwoJCWJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwoJCWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKCQloZWlnaHQ6IDFlbSAhaW1wb3J0YW50OwoJCXdpZHRoOiAxZW0gIWltcG9ydGFudDsKCQltYXJnaW46IDAgMC4wN2VtICFpbXBvcnRhbnQ7CgkJdmVydGljYWwtYWxpZ246IC0wLjFlbSAhaW1wb3J0YW50OwoJCWJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKCQlwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Cgl9Cjwvc3R5bGU+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3dwLWJsb2NrLWxpYnJhcnktY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwL3dwLWluY2x1ZGVzL2Nzcy9kaXN0L2Jsb2NrLWxpYnJhcnkvc3R5bGUubWluLmNzcz92ZXI9Ni44LjInIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8c3R5bGUgaWQ9J2NsYXNzaWMtdGhlbWUtc3R5bGVzLWlubGluZS1jc3MnIHR5cGU9J3RleHQvY3NzJz4KLyohIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCAqLwoud3AtYmxvY2stYnV0dG9uX19saW5re2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzIzNzNjO2JvcmRlci1yYWRpdXM6OTk5OXB4O2JveC1zaGFkb3c6bm9uZTt0ZXh0LWRlY29yYXRpb246bm9uZTtwYWRkaW5nOmNhbGMoLjY2N2VtICsgMnB4KSBjYWxjKDEuMzMzZW0gKyAycHgpO2ZvbnQtc2l6ZToxLjEyNWVtfS53cC1ibG9jay1maWxlX19idXR0b257YmFja2dyb3VuZDojMzIzNzNjO2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Cjwvc3R5bGU+CjxzdHlsZSBpZD0nZ2xvYmFsLXN0eWxlcy1pbmxpbmUtY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+Cjpyb290ey0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS1zcXVhcmU6IDE7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTQtMzogNC8zOy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS0zLTQ6IDMvNDstLXdwLS1wcmVzZXQtLWFzcGVjdC1yYXRpby0tMy0yOiAzLzI7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTItMzogMi8zOy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS0xNi05OiAxNi85Oy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS05LTE2OiA5LzE2Oy0td3AtLXByZXNldC0tY29sb3ItLWJsYWNrOiAjMDAwMDAwOy0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXk6ICNhYmI4YzM7LS13cC0tcHJlc2V0LS1jb2xvci0td2hpdGU6ICNmZmZmZmY7LS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1waW5rOiAjZjc4ZGE3Oy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXJlZDogI2NmMmUyZTstLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1vcmFuZ2U6ICNmZjY5MDA7LS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtYW1iZXI6ICNmY2I5MDA7LS13cC0tcHJlc2V0LS1jb2xvci0tbGlnaHQtZ3JlZW4tY3lhbjogIzdiZGNiNTstLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1ncmVlbi1jeWFuOiAjMDBkMDg0Oy0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtY3lhbi1ibHVlOiAjOGVkMWZjOy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWN5YW4tYmx1ZTogIzA2OTNlMzstLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1wdXJwbGU6ICM5YjUxZTA7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdml2aWQtY3lhbi1ibHVlLXRvLXZpdmlkLXB1cnBsZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDYsMTQ3LDIyNywxKSAwJSxyZ2IoMTU1LDgxLDIyNCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbGlnaHQtZ3JlZW4tY3lhbi10by12aXZpZC1ncmVlbi1jeWFuOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigxMjIsMjIwLDE4MCkgMCUscmdiKDAsMjA4LDEzMCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbHVtaW5vdXMtdml2aWQtYW1iZXItdG8tbHVtaW5vdXMtdml2aWQtb3JhbmdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYmEoMjUyLDE4NSwwLDEpIDAlLHJnYmEoMjU1LDEwNSwwLDEpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLXZpdmlkLW9yYW5nZS10by12aXZpZC1yZWQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgyNTUsMTA1LDAsMSkgMCUscmdiKDIwNyw0Niw0NikgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdmVyeS1saWdodC1ncmF5LXRvLWN5YW4tYmx1aXNoLWdyYXk6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDIzOCwyMzgsMjM4KSAwJSxyZ2IoMTY5LDE4NCwxOTUpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWNvb2wtdG8td2FybS1zcGVjdHJ1bTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoNzQsMjM0LDIyMCkgMCUscmdiKDE1MSwxMjAsMjA5KSAyMCUscmdiKDIwNyw0MiwxODYpIDQwJSxyZ2IoMjM4LDQ0LDEzMCkgNjAlLHJnYigyNTEsMTA1LDk4KSA4MCUscmdiKDI1NCwyNDgsNzYpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWJsdXNoLWxpZ2h0LXB1cnBsZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjU1LDIwNiwyMzYpIDAlLHJnYigxNTIsMTUwLDI0MCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tYmx1c2gtYm9yZGVhdXg6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDI1NCwyMDUsMTY1KSAwJSxyZ2IoMjU0LDQ1LDQ1KSA1MCUscmdiKDEwNywwLDYyKSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy1kdXNrOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTUsMjAzLDExMikgMCUscmdiKDE5OSw4MSwxOTIpIDUwJSxyZ2IoNjUsODgsMjA4KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1wYWxlLW9jZWFuOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTUsMjQ1LDIwMykgMCUscmdiKDE4MiwyMjcsMjEyKSA1MCUscmdiKDUxLDE2NywxODEpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWVsZWN0cmljLWdyYXNzOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyMDIsMjQ4LDEyOCkgMCUscmdiKDExMywyMDYsMTI2KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1taWRuaWdodDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMiwzLDEyOSkgMCUscmdiKDQwLDExNiwyNTIpIDEwMCUpOy0td3AtLXByZXNldC0tZm9udC1zaXplLS1zbWFsbDogMTNweDstLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbWVkaXVtOiAyMHB4Oy0td3AtLXByZXNldC0tZm9udC1zaXplLS1sYXJnZTogMzZweDstLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0teC1sYXJnZTogNDJweDstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTIwOiAwLjQ0cmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tMzA6IDAuNjdyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS00MDogMXJlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTUwOiAxLjVyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS02MDogMi4yNXJlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTcwOiAzLjM4cmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tODA6IDUuMDZyZW07LS13cC0tcHJlc2V0LS1zaGFkb3ctLW5hdHVyYWw6IDZweCA2cHggOXB4IHJnYmEoMCwgMCwgMCwgMC4yKTstLXdwLS1wcmVzZXQtLXNoYWRvdy0tZGVlcDogMTJweCAxMnB4IDUwcHggcmdiYSgwLCAwLCAwLCAwLjQpOy0td3AtLXByZXNldC0tc2hhZG93LS1zaGFycDogNnB4IDZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpOy0td3AtLXByZXNldC0tc2hhZG93LS1vdXRsaW5lZDogNnB4IDZweCAwcHggLTNweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpLCA2cHggNnB4IHJnYmEoMCwgMCwgMCwgMSk7LS13cC0tcHJlc2V0LS1zaGFkb3ctLWNyaXNwOiA2cHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDEpO306d2hlcmUoLmlzLWxheW91dC1mbGV4KXtnYXA6IDAuNWVtO306d2hlcmUoLmlzLWxheW91dC1ncmlkKXtnYXA6IDAuNWVtO31ib2R5IC5pcy1sYXlvdXQtZmxleHtkaXNwbGF5OiBmbGV4O30uaXMtbGF5b3V0LWZsZXh7ZmxleC13cmFwOiB3cmFwO2FsaWduLWl0ZW1zOiBjZW50ZXI7fS5pcy1sYXlvdXQtZmxleCA+IDppcygqLCBkaXYpe21hcmdpbjogMDt9Ym9keSAuaXMtbGF5b3V0LWdyaWR7ZGlzcGxheTogZ3JpZDt9LmlzLWxheW91dC1ncmlkID4gOmlzKCosIGRpdil7bWFyZ2luOiAwO306d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWZsZXgpe2dhcDogMmVtO306d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWdyaWQpe2dhcDogMmVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWZsZXgpe2dhcDogMS4yNWVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWdyaWQpe2dhcDogMS4yNWVtO30uaGFzLWJsYWNrLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tYmxhY2spICFpbXBvcnRhbnQ7fS5oYXMtY3lhbi1ibHVpc2gtZ3JheS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS13aGl0ZSkgIWltcG9ydGFudDt9Lmhhcy1wYWxlLXBpbmstY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLXBpbmspICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcmVkLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLW9yYW5nZSkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy12aXZpZC1hbWJlci1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLWFtYmVyKSAhaW1wb3J0YW50O30uaGFzLWxpZ2h0LWdyZWVuLWN5YW4tY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtY3lhbi1ibHVlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtY3lhbi1ibHVlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1ibGFjay1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1ibGFjaykgIWltcG9ydGFudDt9Lmhhcy1jeWFuLWJsdWlzaC1ncmF5LWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0td2hpdGUpICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1waW5rLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtcGluaykgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1yZWQtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1vcmFuZ2UpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtYW1iZXItYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtYW1iZXIpICFpbXBvcnRhbnQ7fS5oYXMtbGlnaHQtZ3JlZW4tY3lhbi1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtZ3JlZW4tY3lhbikgIWltcG9ydGFudDt9Lmhhcy1wYWxlLWN5YW4tYmx1ZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLWN5YW4tYmx1ZSkgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1jeWFuLWJsdWUtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1wdXJwbGUpICFpbXBvcnRhbnQ7fS5oYXMtYmxhY2stYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWJsYWNrKSAhaW1wb3J0YW50O30uaGFzLWN5YW4tYmx1aXNoLWdyYXktYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXdoaXRlKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtcGluay1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1waW5rKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXJlZC1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtb3JhbmdlKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLWFtYmVyLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1hbWJlcikgIWltcG9ydGFudDt9Lmhhcy1saWdodC1ncmVlbi1jeWFuLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1jeWFuLWJsdWUtYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWN5YW4tYmx1ZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcHVycGxlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWN5YW4tYmx1ZS10by12aXZpZC1wdXJwbGUtZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdml2aWQtY3lhbi1ibHVlLXRvLXZpdmlkLXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1saWdodC1ncmVlbi1jeWFuLXRvLXZpdmlkLWdyZWVuLWN5YW4tZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbGlnaHQtZ3JlZW4tY3lhbi10by12aXZpZC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLWFtYmVyLXRvLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy12aXZpZC1hbWJlci10by1sdW1pbm91cy12aXZpZC1vcmFuZ2UpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtb3JhbmdlLXRvLXZpdmlkLXJlZC1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy12aXZpZC1vcmFuZ2UtdG8tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLXZlcnktbGlnaHQtZ3JheS10by1jeWFuLWJsdWlzaC1ncmF5LWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLXZlcnktbGlnaHQtZ3JheS10by1jeWFuLWJsdWlzaC1ncmF5KSAhaW1wb3J0YW50O30uaGFzLWNvb2wtdG8td2FybS1zcGVjdHJ1bS1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1jb29sLXRvLXdhcm0tc3BlY3RydW0pICFpbXBvcnRhbnQ7fS5oYXMtYmx1c2gtbGlnaHQtcHVycGxlLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWJsdXNoLWxpZ2h0LXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1ibHVzaC1ib3JkZWF1eC1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1ibHVzaC1ib3JkZWF1eCkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy1kdXNrLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLWR1c2spICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1vY2Vhbi1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1wYWxlLW9jZWFuKSAhaW1wb3J0YW50O30uaGFzLWVsZWN0cmljLWdyYXNzLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWVsZWN0cmljLWdyYXNzKSAhaW1wb3J0YW50O30uaGFzLW1pZG5pZ2h0LWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLW1pZG5pZ2h0KSAhaW1wb3J0YW50O30uaGFzLXNtYWxsLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tc21hbGwpICFpbXBvcnRhbnQ7fS5oYXMtbWVkaXVtLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbWVkaXVtKSAhaW1wb3J0YW50O30uaGFzLWxhcmdlLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbGFyZ2UpICFpbXBvcnRhbnQ7fS5oYXMteC1sYXJnZS1mb250LXNpemV7Zm9udC1zaXplOiB2YXIoLS13cC0tcHJlc2V0LS1mb250LXNpemUtLXgtbGFyZ2UpICFpbXBvcnRhbnQ7fQo6d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWZsZXgpe2dhcDogMS4yNWVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWdyaWQpe2dhcDogMS4yNWVtO30KOndoZXJlKC53cC1ibG9jay1jb2x1bW5zLmlzLWxheW91dC1mbGV4KXtnYXA6IDJlbTt9OndoZXJlKC53cC1ibG9jay1jb2x1bW5zLmlzLWxheW91dC1ncmlkKXtnYXA6IDJlbTt9Cjpyb290IDp3aGVyZSgud3AtYmxvY2stcHVsbHF1b3RlKXtmb250LXNpemU6IDEuNWVtO2xpbmUtaGVpZ2h0OiAxLjY7fQo8L3N0eWxlPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdjb250YWN0LWZvcm0tNy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5jbHVkZXMvY3NzL3N0eWxlcy5jc3M/dmVyPTYuMScgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxzdHlsZSBpZD0nY29udGFjdC1mb3JtLTctaW5saW5lLWNzcycgdHlwZT0ndGV4dC9jc3MnPgoud3BjZjcgLndwY2Y3LXJlY2FwdGNoYSBpZnJhbWUge21hcmdpbi1ib3R0b206IDA7fS53cGNmNyAud3BjZjctcmVjYXB0Y2hhW2RhdGEtYWxpZ249ImNlbnRlciJdID4gZGl2IHttYXJnaW46IDAgYXV0bzt9LndwY2Y3IC53cGNmNy1yZWNhcHRjaGFbZGF0YS1hbGlnbj0icmlnaHQiXSA+IGRpdiB7bWFyZ2luOiAwIDAgMCBhdXRvO30KPC9zdHlsZT4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nc24tZm9udEF3ZXNvbWUtY3NzLWNzcycgaHJlZj0nLy9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC4yLjAvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzP3Zlcj0xLjEnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdzbi1hbmltYXRlLWNzcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvZHluYW1pYy1tZW51LW1hbmFnZXIvZHVvZ2Vlay9pbmMvYW5pbWF0ZS5jc3M/dmVyPTEuMScgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2RnLWdyaWQtY3NzLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9keW5hbWljLW1lbnUtbWFuYWdlci9kdW9nZWVrL2luYy9kZy1ncmlkLmNzcz92ZXI9MS4xJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncGFyZW50LXN0eWxlcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L3N0eWxlLmNzcz92ZXI9MC44JyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncGFyZW50LWdsb2JhbC1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2Nzcy9idWlsZC9nbG9iYWwuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8IS0tW2lmIGx0IElFIDldPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtaWUtY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9jc3MvaWUuY3NzP3Zlcj0yMDEyMTAxMCcgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjwhW2VuZGlmXS0tPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdhZG9iZS1mb250cy1jc3MnIGhyZWY9Jy8vdXNlLnR5cGVraXQubmV0L2l4ZDJ2Z3EuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtZm9ybXMtY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9jc3MvYnVpbGQvZm9ybXMuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdjZjdjZi1zdHlsZS1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY2Y3LWNvbmRpdGlvbmFsLWZpZWxkcy9zdHlsZS5jc3M/dmVyPTIuMi4zJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvbGlicy9tb2Rlcm5penIubWluLmpzP3Zlcj0yLjguMyIgaWQ9Im1vZGVybml6ci1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2pxdWVyeS5taW4uanM/dmVyPTEuMTEuMS1sb2NhbCIgaWQ9ImpxdWVyeS1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL3NlYXJjaC1pZS5qcz92ZXI9MC44IiBpZD0ic2VhcmNoLWllLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvc2VhcmNoLmpzP3Zlcj0wLjgiIGlkPSJwYXJlbnQtc2VhcmNoLWpzIj48L3NjcmlwdD4KPGxpbmsgcmVsPSJodHRwczovL2FwaS53Lm9yZy8iIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AtanNvbi8iIC8+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKU09OIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwLWpzb24vd3AvdjIvcGFnZXMvMTQ5IiAvPjxsaW5rIHJlbD0iRWRpdFVSSSIgdHlwZT0iYXBwbGljYXRpb24vcnNkK3htbCIgdGl0bGU9IlJTRCIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC94bWxycGMucGhwP3JzZCIgLz4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJXb3JkUHJlc3MgNi44LjIiIC8+CjxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC8iIC8+CjxsaW5rIHJlbD0nc2hvcnRsaW5rJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1Lz9wPTE0OScgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJvRW1iZWQgKEpTT04pIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uK29lbWJlZCIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC1qc29uL29lbWJlZC8xLjAvZW1iZWQ/dXJsPWh0dHBzJTNBJTJGJTJGbGlicmFyaWVzLm1pdC5lZHUlMkZzZWFyY2glMkYiIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0ib0VtYmVkIChYTUwpIiB0eXBlPSJ0ZXh0L3htbCtvZW1iZWQiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AtanNvbi9vZW1iZWQvMS4wL2VtYmVkP3VybD1odHRwcyUzQSUyRiUyRmxpYnJhcmllcy5taXQuZWR1JTJGc2VhcmNoJTJGJiMwMzg7Zm9ybWF0PXhtbCIgLz4KCgk8IS0tIE1hdG9tbyBUYWcgTWFuYWdlciAtLT4KPHNjcmlwdD4KICB2YXIgX210bSA9IHdpbmRvdy5fbXRtID0gd2luZG93Ll9tdG0gfHwgW107CiAgX210bS5wdXNoKHsnbXRtLnN0YXJ0VGltZSc6IChuZXcgRGF0ZSgpLmdldFRpbWUoKSksICdldmVudCc6ICdtdG0uU3RhcnQnfSk7CiAgKGZ1bmN0aW9uKCkgewogICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9J2h0dHBzOi8vbWF0b21vLmxpYnJhcmllcy5taXQuZWR1L2pzL2NvbnRhaW5lcl9vRldNU2IzZy5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsKICB9KSgpOwo8L3NjcmlwdD4KPCEtLSBFbmQgTWF0b21vIFRhZyBNYW5hZ2VyIC0tPgkJPHN0eWxlIHR5cGU9InRleHQvY3NzIiBpZD0id3AtY3VzdG9tLWNzcyI+CgkJCS8qIHNwZWNpYWwgdGVtcG9yYXJ5IHN0eWxpbmcgZm9yIGJyYW5kZWQgYWJvdXQgcGFnZSAqLwpib2R5LnBhZ2UtaWQtMTQwIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjMDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jb250ZW50IHsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6ICdOSGFhc0dyb3Rlc2tUeHQnLCAnSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50OwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmJyZWFkY3J1bWJzLS1iZXR0ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICM1NTU7IAogIGNvbG9yOiAjZWVlOwp9CmJvZHkucGFnZS1pZC0xNDAgLmJyZWFkY3J1bWJzLS1iZXR0ZXIgYSB7CiAgICBjb2xvcjogI2VlZTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubWFpbi1jb250ZW50IHsgCiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoJy9pbWFnZXMvbmV0d29yay1ncmFwaGljL2xvZ28xMC5wbmcnKSBuby1yZXBlYXQgcmlnaHQgdG9wOwogIGNvbG9yOiAjMDAwOwogIHBhZGRpbmctbGVmdDogMDsgCiAgcGFkZGluZy1yaWdodDogMDsKICBtYXJnaW4tYm90dG9tOiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5sYXlvdXQtYmFuZCB7CiAgcGFkZGluZzogMiUgMTVweCAxJSAxNXB4Owp9Cgpib2R5LnBhZ2UtaWQtMTQwIC50dGwgewogIGZvbnQtZmFtaWx5OiAnTkhhYXNHcm90ZXNrRGlzcCcsICdIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7IAoJZm9udC13ZWlnaHQ6IDYwMDsKfQpib2R5LnBhZ2UtaWQtMTQwIC5tYWluLWNvbnRlbnQgcCB7CiAgbGluZS1oZWlnaHQ6IDEuMTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubWFpbi1jb250ZW50IC5saXN0LXVuYnVsbGV0ZWQgbGkgewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCAuY3RhLWxpbmsgewogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgZWFzZS1pbi1vdXQgLjNzOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwYWRkaW5nOiAxMHB4OyAgCiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCAuY3RhLWxpbms6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNkMzAwY2M7CiAgY29sb3I6ICNmZmY7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtaW50cm8gewogIHBhZGRpbmc6IDQlIDE1cHg7CiAgY29sb3I6ICMwMDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtaW50cm8gLnR0bCB7CiAgZm9udC1zaXplOiAzNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKICBtYXJnaW4tYm90dG9tOiAuM2VtOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWludHJvIC5wdWxsIHsKICBmb250LXNpemU6IDIwcHg7CiAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC13ZS1hcmUgewogIG1hcmdpbi10b3A6IDFyZW07Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgeyAKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGVhc2UtaW4tb3V0IC4zczsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjMDAwOwogIG1hcmdpbjogMTVweDsKICBwYWRkaW5nLXRvcDogNXB4OwogIGxpbmUtaGVpZ2h0OiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMEZGOwogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgY29sb3I6ICNmZmY7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQ6aG92ZXIgYSB7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY2FyZCAuYy1pbWFnZSB7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY2FyZCAuYy1jb250ZW50IHsKICBwYWRkaW5nOiAxMHB4IDMlOwogIGZvbnQtc2l6ZTogMTRweDsKfSAKCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtdHRsMSB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKICBtYXJnaW46IDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtdHRsMiB7CiAgbWFyZ2luLXRvcDogLjJlbTsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuMjsKICBmb250LXdlaWdodDogNDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWZvbCB7CiAgcGFkZGluZzogMiUgMTVweCAzJSAxNXB4OwogIGNvbG9yOiAjMDAwOwogIGZvbnQtc2l6ZTogMTRweDsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1mb2wgLnR0bCB7CiAgZm9udC1zaXplOiAzNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1mb2wgLnZpc2lvbi1pdGVtIHN0cm9uZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAxZW0gMCAuMmVtIDA7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAuOTI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtZm9sIC5jdGEtbGluayB7CiAgbWFyZ2luLXRvcDogLjVlbTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGlzdC1zb2NpYWwgewogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5saXN0LXNvY2lhbCBhIHsKICBmbGV4OiAxIDEgYXV0bzsKICBwYWRkaW5nOiAyMHB4OyAgCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDI4cHg7CiAgY29sb3I6ICMyMzQ7ICAKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3Qtc29jaWFsIGE6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMwMEM4MDA7CiAgY29sb3I6ICMwMDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSBsaSB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsgIAogIG1hcmdpbjogMDsgIAogIHBhZGRpbmctcmlnaHQ6IDEwcHg7Cn0KYm9keS5wYWdlLWlkLTE0MCAubGlzdC1waXBlIGxpOmFmdGVyICB7CiAgY29udGVudDogInwiOwogIHBhZGRpbmctbGVmdDogMTBweDsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGlzdC1waXBlIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgIHsKY29udGVudDogIiI7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKCn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgwcHgpIHsKCiAgYm9keS5wYWdlLWlkLTE0MCAud3JhcC1jYXNlLXN0dWRpZXMsIAogIGJvZHkucGFnZS1pZC0xNDAgLndyYXAtbGlua2Jsb2NrcyB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0gCiAgICAKICBib2R5LnBhZ2UtaWQtMTQwIC5jYXJkIHsKICAgIGZsZXg6IDEgMSBhdXRvOyAKICAgIHdpZHRoOiAzMCU7IAogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBtYXJnaW46IDE1cHggMCAxNXB4IDE1cHg7ICAgIAogIH0KCiAgYm9keS5wYWdlLWlkLTE0MCAuY2FyZDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMTVweDsKICB9Cn0KCgovKiBDUkVPUyBwYWdlIHN0eWxlcyAqLwpib2R5LnBhZ2UtaWQtMjc5NDUgLnRpdGxlLXBhZ2UsIApib2R5LnBhZ2UtaWQtMjc5NDUgaDIuc3VidGl0bGUgewoJICBmb250LWZhbWlseTogJ05IYWFzR3JvdGVza1R4dCcsICdIZWx2ZXRpY2EgTmV1ZScsICdLaHVsYScsICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7Cgp9CmJvZHkucGFnZS1pZC0yNzk0NSAudGl0bGUtcGFnZSBoMSB7Cglmb250LXNpemU6IDExMHB4OwoJZm9udC13ZWlnaHQ6IDYwMDsKCWxpbmUtaGVpZ2h0OiAuODsKCW1hcmdpbi10b3A6IC4yZW07Cn0KCmJvZHkucGFnZS1pZC0yNzk0NSBoMi5zdWJ0aXRsZSB7Cglmb250LXNpemU6IDI0cHg7Cglmb250LXdlaWdodDogNjAwOwoJbWFyZ2luLWJvdHRvbTogLjhlbTsKfQovKiB3aWRnZXQgdXRpbGl0eSBjbGFzc2VzICovCi5zaWRlYmFyIC5uby10b3AtYm9yZGVyIHsKCWJvcmRlci10b3A6IG5vbmU7Cn0KCi5zaWRlYmFyIC5oaWRlLXRpdGxlIC53aWRnZXQtdGl0bGUgeyAKCWRpc3BsYXk6IG5vbmU7Cn0KCi5zaWRlYmFyIC5jYWxsb3V0LndpZGdldCB7CgliYWNrZ3JvdW5kOiAjZTRlNGU0IDsKCWJvcmRlci10b3A6IDJweCBzb2xpZCAjYzYzIDsKCXBhZGRpbmctbGVmdDogMjBweCA7CglwYWRkaW5nLXJpZ2h0OiAyMHB4IDsKCQlwYWRkaW5nLXRvcDogMTVweCA7CgkJcGFkZGluZy1ib3R0b206IDE1cHggOwoJCW1hcmdpbi1ib3R0b206IDIwcHg7Cn0JCTwvc3R5bGU+CgkJCTxzY3JpcHQ+CgkJdG9kYXlEYXRlPSIiOwoJPC9zY3JpcHQ+CjwvaGVhZD4KCjxib2R5IGNsYXNzPSJ3cC1zaW5ndWxhciBwYWdlLXRlbXBsYXRlIHBhZ2UtdGVtcGxhdGUtdGVtcGxhdGVzIHBhZ2UtdGVtcGxhdGUtcGFnZSBwYWdlLXRlbXBsYXRlLXRlbXBsYXRlc3BhZ2UtcGhwIHBhZ2UgcGFnZS1pZC0xNDkgd3AtdGhlbWUtbWl0bGliLXBhcmVudCBwYWdlLXNlYXJjaCBzaW5nbGUtYXV0aG9yIj4KCTxkaXYgaWQ9InNraXAiPjxhIGhyZWY9IiNjb250ZW50Ij5Ta2lwIHRvIE1haW4gQ29udGVudDwvYT48L2Rpdj4KCTxkaXYgY2xhc3M9IndyYXAtcGFnZSI+CgkJPGhlYWRlciBjbGFzcz0iaGVhZGVyLW1haW4gZmxleC1jb250YWluZXIgZmxleC1lbmQiPgoJCQkJCQkJPG5hdj4KCTxidXR0b24gY2xhc3M9Im1lbnUtLXRvZ2dsZSI+PCEtLSBNb2JpbGUgSGFtYnVyZ2VyIGljb24gLS0+CgkJPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguOTA5cHgiIGhlaWdodD0iMTMuMDkxcHgiIHZpZXdCb3g9IjIuMTgyIDYuNTQ1IDE4LjkwOSAxMy4wOTEiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMi4xODIgNi41NDUgMTguOTA5IDEzLjA5MSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTIuOTA5LDYuNTQ1aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2YzAuMTQ1LDAuMTQ0LDAuMjE2LDAuMzE0LDAuMjE2LDAuNTExcy0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMQoJCWMtMC4xNDUsMC4xNDQtMC4zMTQsMC4yMTYtMC41MTIsMC4yMTZIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTZDMi4yNTQsNy42MzksMi4xODIsNy40NjksMi4xODIsNy4yNzIKCQlzMC4wNzItMC4zNjcsMC4yMTYtMC41MTFDMi41NDIsNi42MTcsMi43MTIsNi41NDUsMi45MDksNi41NDV6IE0yMC4zNjMsMTMuODE4SDIuOTA5Yy0wLjE5NywwLTAuMzY3LTAuMDcyLTAuNTExLTAuMjE2CgkJcy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMWMwLTAuMTk2LDAuMDcyLTAuMzY3LDAuMjE2LTAuNTExczAuMzE0LTAuMjE2LDAuNTExLTAuMjE2aDE3LjQ1NGMwLjE5NywwLDAuMzY3LDAuMDcyLDAuNTEyLDAuMjE2CgkJczAuMjE2LDAuMzE0LDAuMjE2LDAuNTExYzAsMC4xOTctMC4wNzEsMC4zNjctMC4yMTYsMC41MTFTMjAuNTYxLDEzLjgxOCwyMC4zNjMsMTMuODE4eiBNMjAuMzYzLDE5LjYzNkgyLjkwOQoJCWMtMC4xOTcsMC0wLjM2Ny0wLjA3MS0wLjUxMS0wLjIxNnMtMC4yMTYtMC4zMTQtMC4yMTYtMC41MTFzMC4wNzItMC4zNjcsMC4yMTYtMC41MTFjMC4xNDQtMC4xNDUsMC4zMTQtMC4yMTcsMC41MTEtMC4yMTdoMTcuNDU0CgkJYzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTdjMC4xNDUsMC4xNDQsMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFzLTAuMDcxLDAuMzY2LTAuMjE2LDAuNTExUzIwLjU2MSwxOS42MzYsMjAuMzYzLDE5LjYzNnoiLz4KCQk8L3N2Zz4KCTwvYnV0dG9uPjwhLS0gZW5kIGhhbWJ1cmdlciBpY29uIC0tPgo8L25hdj4KCjwhLS0gTWVudSBzaG93biBvbiBtb2JpbGUgc2NyZWVucywgd2hlbiB0aGUgaGFtYnVyZ2VyIGljb24gaXMgdGFwcGVkLiAtLT4KPG5hdiBpZD0ibmF2LW1vYmlsZSIgY2xhc3M9Im5hdi1tYWluIGhpZGRlbi1ub24tbW9iaWxlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9Ii9zZWFyY2giIGNsYXNzPSJuby11bmRlcmxpbmUgbW9iaWxlLW5hdi1saW5rIGhpZGUtbW9iaWxlLW5hdi1saW5rIj5TZWFyY2g8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iL2hvdXJzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1vYmlsZS1uYXYtbGluayBoaWRlLW1vYmlsZS1uYXYtbGluayI+SG91cnMgJiBsb2NhdGlvbnM8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iL2JvcnJvdyIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPkJvcnJvdyAmIHJlcXVlc3Q8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQiIGNsYXNzPSJuby11bmRlcmxpbmUgbW9iaWxlLW5hdi1saW5rIGhpZGUtbW9iaWxlLW5hdi1saW5rIj5SZXNlYXJjaCBzdXBwb3J0PC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9Ii9hYm91dCIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPkFib3V0PC9hPjwvbGk+Cgk8L3VsPgo8L25hdj4KCQkJCQkJCjxoMSBjbGFzcz0ibmFtZS1zaXRlIGdyb3VwIG5hdi1sb2dvIj4KCTxhIGhyZWY9Ii8iIGNsYXNzPSJsb2dvLW1pdC1saWIiPgoJCTxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSI1IC0zIDIxMCA5NSI+PHRpdGxlPk1JVCBMaWJyYXJpZXMgbG9nbzwvdGl0bGU+PHBhdGggZD0iTTguMTIsOUgyMGw0LjM1LDE1LjY1Yy4xNy41Ny4zNiwxLjMxLjU4LDIuMjJzLjQ0LDEuODEuNjcsMi42OC41MywyLjEyLjgsMy4yNWguMWMuMjMtMS4xMy40OC0yLjIyLjc1LTMuMjUuMi0uODcuNDItMS43Ni42NS0yLjY3cy40My0xLjY1LjYtMi4yMkwzMi45Miw5aDEyVjQ0Ljc1aC04LjFWMjIuNjZjMC0uOTMsMC0xLjk1LjEtMy4wNWgtLjFjLS4yNywxLS41LDItLjcsMi44NXMtLjM4LDEuNjEtLjUzLDIuMjJsLS40MiwxLjU4LTUuMSwxOC40OWgtNy4zTDE3LjY3LDI2LjNjLS4xLS4zMy0uMjUtLjg3LS40NS0xLjZzLS4zOC0xLjQ4LS41NS0yLjI1LS40Mi0xLjgyLS42Ny0yLjg1aC0uMXYzYzAsLjgsMCwxLjYuMDgsMi40YTguNTMsOC41MywwLDAsMSwwLDEuNzV2MThIOFY5Wm00MCwwSDU3VjQ0Ljc1SDQ4LjEyWm0yMi4xLDcuNDVINTkuODJWOUg4OS41N3Y3LjQ1SDc5LjA3djI4LjNINzAuMjJaTTguMTIsNTBIMTdWNzguMjVIMzMuNjR2Ny41SDguMTJabTI4LjcsMEg0NXY2LjZIMzYuODJabTAsMTAuMTVINDV2MjUuNkgzNi44MlptMjcsMjYuNGE5LjgyLDkuODIsMCwwLDEtNC41NS0xLDcuOSw3LjksMCwwLDEtMy4yLTNINTZ2My4ySDQ4LjJWNTBoOC4xNVY2M2guMTVhOS40NSw5LjQ1LDAsMCwxLDIuOS0yLjU1LDguNjIsOC42MiwwLDAsMSw0LjM3LTEsOS44Niw5Ljg2LDAsMCwxLDQuNTMsMSwxMCwxMCwwLDAsMSwzLjQ1LDIuODVBMTMuNTEsMTMuNTEsMCwwLDEsNzQsNjcuNmExNy44OSwxNy44OSwwLDAsMSwuNyw1LjQsMTkuNDUsMTkuNDUsMCwwLDEtLjc4LDUuNzJBMTIuNTMsMTIuNTMsMCwwLDEsNzEuNzIsODNhOS40OCw5LjQ4LDAsMCwxLTMuNDUsMi42N0ExMC42MywxMC42MywwLDAsMSw2My44Miw4Ni41NVptLTIuMy02LjQ1YTQuMTQsNC4xNCwwLDAsMCwzLjY3LTEuOTIsOS40NSw5LjQ1LDAsMCwwLDEuMjgtNS4yNyw5Ljc0LDkuNzQsMCwwLDAtMS4yOC01LjMsNC4yLDQuMiwwLDAsMC0zLjc3LTIsNC40Myw0LjQzLDAsMCwwLTQsMi4xQTkuNyw5LjcsMCwwLDAsNTYuMTIsNzNhOC40OSw4LjQ5LDAsMCwwLDEuNDUsNS4xNyw0LjY5LDQuNjksMCwwLDAsNCwyWm0xNS4xMS0yMGg3Ljh2NGguMTVhOS41Niw5LjU2LDAsMCwxLDMtMy4zNSw3LjI5LDcuMjksMCwwLDEsNC0xLDQuNTcsNC41NywwLDAsMSwxLjYuMnY3SDkzYTcuMzQsNy4zNCwwLDAsMC02LDEuMjdxLTIuMTYsMS43OC0yLjE2LDZ2MTEuNUg3Ni42M1ptMjYsMjYuM2ExMi4xLDEyLjEsMCwwLDEtMy41My0uNSw3LjU1LDcuNTUsMCwwLDEtMi43Ny0xLjVBNyw3LDAsMCwxLDk0LjQ4LDgyYTguMDksOC4wOSwwLDAsMS0uNjYtMy40LDcuMjksNy4yOSwwLDAsMSwuNzgtMy41Miw2Ljc0LDYuNzQsMCwwLDEsMi4xMi0yLjM1LDEwLjc5LDEwLjc5LDAsMCwxLDMuMS0xLjQzLDI3LDI3LDAsMCwxLDMuNzctLjc1LDI0LjM1LDI0LjM1LDAsMCwwLDUtMUExLjkzLDEuOTMsMCwwLDAsMTEwLDY3LjdhMi41NiwyLjU2LDAsMCwwLS44My0yLDMuOTEsMy45MSwwLDAsMC0yLjY3LS43LDQuNDEsNC40MSwwLDAsMC0zLC44NSwzLjY2LDMuNjYsMCwwLDAtMS4yLDIuNDVIOTQuOGE4LjUyLDguNTIsMCwwLDEsLjgtMy40LDguMTQsOC4xNCwwLDAsMSwyLjE3LTIuOCwxMC42NSwxMC42NSwwLDAsMSwzLjU4LTEuOSwxNi4yOSwxNi4yOSwwLDAsMSw1LS43LDE5LjcyLDE5LjcyLDAsMCwxLDQuOS41Miw5LjcsOS43LDAsMCwxLDMuNCwxLjU4LDcuMzEsNy4zMSwwLDAsMSwyLjQ1LDMsMTAuNSwxMC41LDAsMCwxLC44LDQuMjV2MTIuOWExMy4wOCwxMy4wOCwwLDAsMCwuMTcsMi40MiwxLjgsMS44LDAsMCwwLC43MywxLjIzdi4zNWgtNy45YTMuNTMsMy41MywwLDAsMS0uNS0xLjEyLDE0LjU2LDE0LjU2LDAsMCwxLS4zNS0xLjcyaDBhOC40LDguNCwwLDAsMS0yLjczLDIuNTQsMTAsMTAsMCwwLDEtNC42OCwxWm0yLjYtNS4yYTUuNDYsNS40NiwwLDAsMCwzLjY4LTEuMiw0LjI3LDQuMjcsMCwwLDAsMS40Mi0zLjM1di0zYTExLjUsMTEuNSwwLDAsMS0xLjg3LjczYy0uNzIuMjItMS41LjQzLTIuMzQuNjJhMTAuMzYsMTAuMzYsMCwwLDAtMy40LDEuMjcsMi40OCwyLjQ4LDAsMCwwLTEsMi4xNywyLjQzLDIuNDMsMCwwLDAsMSwyLjIsNC41Myw0LjUzLDAsMCwwLDIuNS41NWgwWm0xNS44Ny0yMWg3Ljc3djRIMTI5YTkuNTYsOS41NiwwLDAsMSwzLTMuMzUsNy4yOSw3LjI5LDAsMCwxLDQtMSw0LjU3LDQuNTcsMCwwLDEsMS42LjJ2N2gtLjJhNy4zNCw3LjM0LDAsMCwwLTYsMS4yN2MtMS40OSwxLjIyLTIuMjQsMy4yMi0yLjIzLDZWODUuNzVIMTIxVjYwLjE1Wk0xNDAsNTAuMWg4LjEzdjYuNkgxNDBabTAsMTAuMTVoOC4xM3YyNS41SDE0MFpNMTY0LDg2LjZhMTUsMTUsMCwwLDEtNS43LTEsMTIuMDcsMTIuMDcsMCwwLDEtNC4zLTIuODUsMTIuODQsMTIuODQsMCwwLDEtMi43LTQuMzMsMTUuMDcsMTUuMDcsMCwwLDEtMS01LjQsMTQuNzQsMTQuNzQsMCwwLDEsMS01LjMzLDEyLjcyLDEyLjcyLDAsMCwxLDIuNy00LjMsMTIuNTgsMTIuNTgsMCwwLDEsNC4xMy0yLjk0LDE0LjYyLDE0LjYyLDAsMCwxLDEwLjI4LS4xNywxMi4yOSwxMi4yOSwwLDAsMSwzLjgzLDIuMzVBMTIuNywxMi43LDAsMCwxLDE3NS42NSw2OGEyMC44MywyMC44MywwLDAsMSwxLjA4LDcuMTNIMTU4LjMyYTcuNTMsNy41MywwLDAsMCwxLjgsNC4xLDUuMTQsNS4xNCwwLDAsMCw0LDEuNSw0Ljg0LDQuODQsMCwwLDAsMi42NS0uNjgsNC4yOCw0LjI4LDAsMCwwLDEuNi0xLjg3aDhhOS40Nyw5LjQ3LDAsMCwxLTEuNSwzLjMzLDEwLjg1LDEwLjg1LDAsMCwxLTIuOCwyLjczQTEyLjA2LDEyLjA2LDAsMCwxLDE2OC40OSw4NmExNS4zMSwxNS4zMSwwLDAsMS00LjUyLjVabTQuNS0xNi4zYTYsNiwwLDAsMC0xLjUtMy42NSw0LjM3LDQuMzcsMCwwLDAtMy4zLTEuMzUsNC42NCw0LjY0LDAsMCwwLTMuNiwxLjM1LDcsNywwLDAsMC0xLjY1LDMuNjVabTIxLjksMTYuMzVxLTUuNjYsMC05LTIuNDJhOC4zNCw4LjM0LDAsMCwxLTMuNTItNi43OGg3LjdBNC4xNSw0LjE1LDAsMCwwLDE4Nyw4MC4zYTUuMDYsNS4wNiwwLDAsMCwzLjI1LDEsNS42MSw1LjYxLDAsMCwwLDIuOTItLjY1LDIuMDgsMi4wOCwwLDAsMCwxLjA4LTEuOSwxLjgyLDEuODIsMCwwLDAtLjU1LTEuMzcsNC4wOCw0LjA4LDAsMCwwLTEuNDUtLjg1LDExLjQ2LDExLjQ2LDAsMCwwLTIuMDgtLjVjLS43OC0uMTEtMS41OS0uMjUtMi40Mi0uNDJxLTEuNjUtLjMtMy4zLS43MmExMCwxMCwwLDAsMS0zLTEuMjgsNi40MSw2LjQxLDAsMCwxLTIuMTItMi4yNyw3LjQ3LDcuNDcsMCwwLDEtLjgtMy42OCw3LjIxLDcuMjEsMCwwLDEsLjg3LTMuNTUsNy42MSw3LjYxLDAsMCwxLDIuMzUtMi42NiwxMS4xNSwxMS4xNSwwLDAsMSwzLjUzLTEuNTUsMTcuMTgsMTcuMTgsMCwwLDEsNC4yOC0uNTJjMy42MywwLDYuNDIuNzMsOC4zNSwyLjJhOCw4LDAsMCwxLDMuMiw2aC03LjVhMywzLDAsMCwwLTEuMzMtMi4zNyw1LjQ4LDUuNDgsMCwwLDAtMi43OC0uNjIsNSw1LDAsMCwwLTIuNTIuNThBMS45LDEuOSwwLDAsMCwxODYsNjdhMS4zNCwxLjM0LDAsMCwwLC41LDEuMSw0LjI3LDQuMjcsMCwwLDAsMS4zNS42NywxMy41NSwxMy41NSwwLDAsMCwyLC40OGwyLjMzLjRjMS4xMy4yLDIuMjcuNDQsMy40Mi43M2ExMC41LDEwLjUsMCwwLDEsMy4xNywxLjMyLDcsNywwLDAsMSwyLjMsMi40Miw3Ljg0LDcuODQsMCwwLDEsLjksNCw3LjM1LDcuMzUsMCwwLDEtMy4zMiw2LjM4LDExLjg0LDExLjg0LDAsMCwxLTMuNywxLjYsMTguNzUsMTguNzUsMCwwLDEtNC42Ni41WiIgc3R5bGU9ImZpbGw6I2ZmZjsiIC8+PC9zdmc+CgkJPHNwYW4gY2xhc3M9InNyIj5NSVQgTGlicmFyaWVzPC9zcGFuPgoJPC9hPjwhLS0gRW5kIE1JVCBMaWJyYXJpZXMgTG9nbyAtLT4KPC9oMT48IS0tIEVuZCBIMS5uYW1lLXNpdGUgLS0+CgkJCQkJCQkKPCEtLSBNZW51IHNob3duIG9uIG5vbi1tb2JpbGUgc2NyZWVucyAtLT4KPG5hdiBjbGFzcz0ibmF2LW1haW4gaGlkZGVuLW1vYmlsZSIgYXJpYS1sYWJlbD0iUHJpbWFyeSI+Cgk8dWwgY2xhc3M9Im5hdi1tYWluLWxpc3QgZmxleC1jb250YWluZXIiPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGhyZWY9IiMiIGNsYXNzPSJuby11bmRlcmxpbmUgc2VhcmNoLWxpbmsgbWFpbi1uYXYtbGluayBtZW51LWNvbnRyb2wiPlNlYXJjaDwvYT4KCQkJPC9oMj4KCQkJPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXNlYXJjaG1lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1zZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+U3RhcnQgaGVyZTwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NlYXJjaCI+U2VhcmNoIHRvb2xzIGhvbWU8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9zZWFyY2gtY29sbGVjdGlvbnMiPlNlYXJjaCBPdXIgQ29sbGVjdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5Cb29rcywgYXJ0aWNsZXMsIGFuZCBtb3JlPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3dvcmxkY2F0Ij5Xb3JsZENhdDxzcGFuIGNsYXNzPSJhYm91dCI+Qm9va3MgJmFtcDsgbW9yZSB3b3JsZHdpZGU8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2F6LnBocCI+RGF0YWJhc2VzIEEtWjxzcGFuIGNsYXNzPSJhYm91dCI+SlNUT1IsIFB1Yk1lZCwgV2ViIG9mIFNjaWVuY2UsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2VhcmNoLXJlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPkFsc28gdHJ5PC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvZ29vZ2xlLXNjaG9sYXItdGlwcyI+R29vZ2xlIFNjaG9sYXIgZm9yIE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPkNoYW5nZSBzZXR0aW5ncyB0byBnZXQgYmV0dGVyIGFjY2Vzczwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kc3BhY2UiPkRTcGFjZUBNSVQgPHNwYW4gY2xhc3M9ImFib3V0Ij5NSVQgcmVzZWFyY2g8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZG9tZSI+RG9tZSA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVC1kaWdpdGl6ZWQgaW1hZ2VzLCBtYXBzLCBldGMuPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NpdGUtc2VhcmNoIj5TaXRlIHNlYXJjaDwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KCQk8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LWhvdXJzbWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+SG91cnMgJmFtcDsgbG9jYXRpb25zPC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtaG91cnNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIGdyb3VwIj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TG9jYXRpb25zPC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvaG91cnMiPkhvdXJzIGFuZCBsb2NhdGlvbnMgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2JhcmtlciI+QmFya2VyIExpYnJhcnk8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kZXdleSI+RGV3ZXkgTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2hheWRlbiI+SGF5ZGVuIExpYnJhcnk8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9yb3RjaCI+Um90Y2ggTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2Rpc3RpbmN0aXZlLWNvbGxlY3Rpb25zIj5EaXN0aW5jdGl2ZSBDb2xsZWN0aW9uczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL211c2ljIj5MZXdpcyBNdXNpYyBMaWJyYXJ5PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvbHNhIj5MaWJyYXJ5IFN0b3JhZ2UgQW5uZXg8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlVzaW5nIHRoZSBMaWJyYXJpZXM8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9sb2NhdGlvbnMiPk1hcCBvZiBsb2NhdGlvbnM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9zdHVkeSI+U3R1ZHkgc3BhY2VzPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZGlzYWJpbGl0aWVzIj5QZXJzb25zIHdpdGggZGlzYWJpbGl0aWVzPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvY29weWluZyI+U2NhbiAmYW1wOyBwcmludDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2V4aGliaXRzIj5FeGhpYml0cyAmYW1wOyBnYWxsZXJpZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii92aXNpdG9ycyI+VmlzaXRvcnM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii91c2UtcG9saWNpZXMiPkxpYnJhcnkgdXNlIHBvbGljeTwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KCQk8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUtdGl0bGUiIGhyZWY9IiMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBtZW51LWNvbnRyb2wiPkJvcnJvdyAmYW1wOyByZXF1ZXN0PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LWJvcnJvd21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5SZW5ldywgcmVxdWVzdCwgc3VnZ2VzdDwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2JvcnJvdyI+Qm9ycm93ICZhbXA7IHJlcXVlc3QgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2FjY291bnRzIj5BY2NvdW50cyBvdmVydmlldyA8c3BhbiBjbGFzcz0iYWJvdXQiPllvdXIgQWNjb3VudCwgSUxMaWFkLCBBZW9uLCBldGMuPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NlYXJjaC1jb2xsZWN0aW9ucyI+U2VhcmNoIE91ciBDb2xsZWN0aW9ucyA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgb3duZWQgYnkgTUlUPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3dvcmxkY2F0Ij5Xb3JsZENhdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgbm90IG93bmVkIGJ5IE1JVDwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9pbGxpYWQiPklMTGlhZCA8c3BhbiBjbGFzcz0iYWJvdXQiPlRyYWNrIHlvdXIgSW50ZXJsaWJyYXJ5IEJvcnJvd2luZyByZXF1ZXN0czwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9zdWdnZXN0LXB1cmNoYXNlIj5TdWdnZXN0IGEgcHVyY2hhc2U8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPk1vcmUgaW5mb3JtYXRpb248L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9yZXNlcnZlcyI+Q291cnNlIHJlc2VydmVzPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvYm9ycm93LWRpcmVjdCI+Qm9ycm93IERpcmVjdCA8c3BhbiBjbGFzcz0iYWJvdXQiPlJlcXVlc3QgaXRlbXMgZnJvbSBIYXJ2YXJkLCBZYWxlLCBldGMuPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL290aGVybGlicmFyaWVzIj5WaXNpdCBub24tTUlUIGxpYnJhcmllcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkhhcnZhcmQsIEJvcnJvdyBEaXJlY3QsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2xpPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+UmVzZWFyY2ggc3VwcG9ydDwvYT4KCQkJPC9oMj4KCQkJPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LXJlc2VhcmNobWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LXJlc2VhcmNobWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBwdXNoIGdyb3VwIj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+SGVscCAmYW1wOyB1c2VmdWwgdG9vbHM8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9yZXNlYXJjaC1zdXBwb3J0Ij5SZXNlYXJjaCBzdXBwb3J0IGhvbWU8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9hc2siPkFzayB1cyA8c3BhbiBjbGFzcz0iYWJvdXQiPkVtYWlsLCBjaGF0LCBjYWxsLCBkcm9wIGJ5PC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2V4cGVydHMiPlJlc2VhcmNoIGd1aWRlcyAmYW1wOyBleHBlcnQgbGlicmFyaWFucyA8c3BhbiBjbGFzcz0iYWJvdXQiPkZvciBldmVyeSByZXNlYXJjaCBpbnRlcmVzdDwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9hdXRoZW50aWNhdGUiPkF1dGhlbnRpY2F0ZSB0byBvbmxpbmUgcmVzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+VGlwcyAmYW1wOyB0cmlja3M8L3NwYW4+PC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQkJPGRpdiBjbGFzcz0iY29sLTIgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5QdWJsaXNoaW5nICZhbXA7IGNvbnRlbnQgbWFuYWdlbWVudDwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3JlZmVyZW5jZXMiPkNpdGF0aW9uICZhbXA7IHdyaXRpbmcgdG9vbHMgPHNwYW4gY2xhc3M9ImFib3V0Ij5NZW5kZWxleSwgWm90ZXJvLCAmYW1wOyBPdmVybGVhZjwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9jaXRpbmciPkNpdGluZyBzb3VyY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+QXZvaWQgcGxhZ2lhcmlzbSwgZm9ybWF0IHJlZmVyZW5jZXMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZGF0YS1zZXJ2aWNlcyI+RGF0YSBzZXJ2aWNlcyA8c3BhbiBjbGFzcz0iYWJvdXQiPkdJUywgZGF0YSBtYW5hZ2VtZW50LCBzdGF0aXN0aWNhbCBzdXBwb3J0PC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NjaG9sYXJseSI+U2Nob2xhcmx5IGNvbW11bmljYXRpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+T3BlbiBhY2Nlc3MsIGNvcHlyaWdodCwgJmFtcDsgcHVibGlzaGluZzwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9hcGlzIj5BUElzIGZvciBzY2hvbGFybHkgcmVzb3VyY2VzPC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBocmVmPSIjIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgbWVudS1jb250cm9sIj5BYm91dDwvYT4KCQkJPC9oMj4KCQkJPGRpdiBhcmlhLWxhYmVsbGVkYnk9Im1haW4tbmF2LWFib3V0bWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LWFib3V0bWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBwdXNoIGdyb3VwIj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0xIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+QWJvdXQgdGhlIExpYnJhcmllczwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2Fib3V0LyI+QWJvdXQgdXMgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2NvbnRhY3QiPkNvbnRhY3QgdXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9qb2JzIj5Kb2JzPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZ2l2aW5nIj5HaXZpbmcgdG8gdGhlIE1JVCBMaWJyYXJpZXM8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPk5ld3MsIGV2ZW50cywgJmFtcDsgZXhoaWJpdHM8L2gzPgoJCQkJCTxhIGhyZWY9Ii9ldmVudHMiPkNsYXNzZXMgJmFtcDsgZXZlbnRzPC9hPgoJCQkJCTxhIGhyZWY9Ii9uZXdzIj5OZXdzPC9hPgoJCQkJCTxhIGhyZWY9Ii9leGhpYml0cyI+RXhoaWJpdHMgJmFtcDsgZ2FsbGVyaWVzPC9hPgoJCQkJCTxhIGhyZWY9Ii9uZXdzL2luLXRoZS1tZWRpYSI+SW4gdGhlIG1lZGlhPC9hPgoJCQkJCTxhIGhyZWY9Ii9taXQtcmVhZHMvIj5NSVQgUmVhZHM8L2E+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLXN1YiAtLT4KCQk8L2xpPjwhLS0gZW5kIGRpdi5saW5rcy1wcmltYXJ5IC0tPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIHNtYWxsIGNoYXQgcHVzaCI+CgkJCTxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KCQkJCTxhIGlkPSJtYWluLW5hdi1hc2t1c21lbnUtdGl0bGUiIGhyZWY9IiMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBtZW51LWNvbnRyb2wiPjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTYuNTkzcHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDE2LjU5MyAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTYuNTkzIDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMTYuNTkzIDYuMjc4YzAgMS4wNzQtMC4wNzQgMi4xNDgtMC4yNDEgMy4xODUgLTAuMjA0IDEuMzUzLTEuNzIyIDIuNTc0LTMuMDU1IDIuNzIyIC0xLjM1MyAwLjEzMS0yLjY4NiAwLjIwNC00LjAyIDAuMjIzTDUuNzQgMTUuODMzQzUuNjMgMTUuOTQ0IDUuNDgxIDE2IDUuMzM0IDE2Yy0wLjA5NCAwLTAuMTY3LTAuMDE5LTAuMjQxLTAuMDM3QzQuODcxIDE1Ljg3IDQuNzQgMTUuNjQ3IDQuNzQgMTUuNDA3VjEyLjM3Yy0wLjQ4MS0wLjAzNi0wLjk2My0wLjA1NS0xLjQ0My0wLjExMSAtMS4zMzQtMC4xNDgtMi44NTMtMS40NDMtMy4wNzQtMi43OTZDMC4wNzQgOC40MjYgMCA3LjM1MiAwIDYuMjk2YzAtMS4wOTIgMC4wNzQtMi4xODUgMC4yMjMtMy4yNCAwLjIyMi0xLjM1MiAxLjc0LTIuNjQ4IDMuMDc0LTIuNzk3QzQuOTYzIDAuMDkzIDYuNjMgMCA4LjI5NyAwczMuMzMzIDAuMDkzIDUgMC4yNTljMS4zMzMgMC4xNDkgMi44NTEgMS40NDUgMy4wNTUgMi43OTdDMTYuNTE5IDQuMTExIDE2LjU5MyA1LjIwNCAxNi41OTMgNi4yNzgiLz48L3N2Zz48c3Bhbj5Bc2sgVXM8L3NwYW4+PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYXNrdXNtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYXNrdXNtZW51IiBjbGFzcz0ibGlua3Mtc3ViIHB1c2giPgoJCQkJPGRpdiBjbGFzcz0id3JhcC1idXR0b24tY2hhdCI+CgkJCQkJPGRpdiBpZD0nbGliY2hhdF9iZTJjNjU0YjYzZGQ0M2YzMWM1NjI5NWVlNWQ3OGQ4OCc+PC9kaXY+CgkJCQk8L2Rpdj4KCQkJCTxhIGNsYXNzPSJtb3JlIiBocmVmPSIvYXNrIj5Nb3JlIHdheXMgdG8gYXNrIHVzPC9hPgoJCQk8L2Rpdj4KCQk8L2xpPgoJCTxsaSBjbGFzcz0ibGluay1wcmltYXJ5IGZsZXgtZW5kIHNtYWxsIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaHJlZj0iL2FjY291bnRzIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgYWNjb3VudC1saW5rIj4KCQkJCQk8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUuNCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE1LjQgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1LjQ0NSAxNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEzLjQgMTUuN0MxMi4yIDE1LjkgMTAuNCAxNiA3LjcgMTZjLTUuNCAwLTcuMy0wLjYtNy4zLTAuNiAtMC4zLTAuMS0wLjQtMC40LTAuNC0wLjcgMC4zLTEuNiAxLjItMi41IDIuNS0zLjMgMC4zLTAuMiAwLjgtMC40IDEuMi0wLjYgMC44LTAuMyAxLjgtMC43IDItMS4zQzUuOCA5LjIgNS43IDguNiA1LjIgNy45Yy0xLjQtMi4zLTEuNy00LjMtMC44LTUuOUM1LjEgMC43IDYuNCAwIDcuNyAwYzEuNCAwIDIuNiAwLjcgMy4zIDIgMC45IDEuNiAwLjcgMy42LTAuOCA1LjlDOS44IDguNiA5LjYgOS4yIDkuOCA5LjZjMC4yIDAuNiAxLjIgMSAyIDEuMyAwLjQgMC4yIDAuOSAwLjQgMS4yIDAuNiAxLjIgMC44IDIuMSAxLjYgMi41IDMuMyAwLjEgMC4zLTAuMSAwLjYtMC40IDAuN0MxNSAxNS40IDE0LjUgMTUuNiAxMy40IDE1LjciLz48L3N2Zz48c3Bhbj5BY2NvdW50PC9zcGFuPgoJCQkJPC9hPgoJCQk8L2gyPgoJCTwvbGk+Cgk8L3VsPgo8L25hdj4KCQkJCQkJPGEgY2xhc3M9ImxpbmstbG9nby1taXQiIGhyZWY9Imh0dHA6Ly93d3cubWl0LmVkdSI+PGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdF9sb2dvX3N0ZF9yZ2Jfd2hpdGUuc3ZnIiBoZWlnaHQ9IjMyIiBhbHQ9Ik1JVCBsb2dvIiA+CgkJCTwvYT48IS0tIEVuZCBNSVQgTG9nbyAtLT4KCQkJCQkJCQo8YSBocmVmPSIvc2VhcmNoIiBjbGFzcz0ibGluay1zaXRlLXNlYXJjaCBoaWRkZW4tbm9uLW1vYmlsZSI+Cgk8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTIgMTIiIGNsYXNzPSJpY29uLXNlYXJjaCI+PHBhdGggZD0iTTcuMjczIDAuNzI3cTEuMTg3IDAgMi4xOSAwLjU4NXQxLjU4OCAxLjU4OCAwLjU4NSAyLjE5LTAuNTg1IDIuMTktMS41ODggMS41ODgtMi4xOSAwLjU4NXEtMS4yNzggMC0yLjMzLTAuNjc2bC0zLjI4NCAzLjMwMXEtMC4yOTUgMC4yODQtMC42ODggMC4yODQtMC40MDMgMC0wLjY4OC0wLjI4NHQtMC4yODQtMC42ODggMC4yODQtMC42ODhsMy4zMDEtMy4yODRxLTAuNjc2LTEuMDUxLTAuNjc2LTIuMzMgMC0xLjE4OCAwLjU4NS0yLjE5dDEuNTg4LTEuNTg4IDIuMTktMC41ODV6TTcuMjczIDhxMC41OTEgMCAxLjEyOC0wLjIzdDAuOTI5LTAuNjIyIDAuNjIyLTAuOTI5IDAuMjMtMS4xMjgtMC4yMy0xLjEyOC0wLjYyMi0wLjkyOS0wLjkyOS0wLjYyMi0xLjEyOC0wLjIzLTEuMTI4IDAuMjMtMC45MjkgMC42MjItMC42MjIgMC45MjktMC4yMyAxLjEyOCAwLjIzIDEuMTI4IDAuNjIyIDAuOTI5IDAuOTI5IDAuNjIyIDEuMTI4IDAuMjN6Ij48L3BhdGg+PC9zdmc+Cgk8c3BhbiBjbGFzcz0iYm90dG9tIj5TZWFyY2g8L3NwYW4+CjwvYT48IS0tIEVuZCAvc2VhcmNoIC0tPgoKPGEgaHJlZj0iL2FjY291bnRzIiBjbGFzcz0ibGluay1hY2NvdW50IGhpZGRlbi1ub24tbW9iaWxlIj4KCTxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0iaWNvbi1hY2NvdW50Ij48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPgoJPHNwYW4gY2xhc3M9ImJvdHRvbSI+QWNjb3VudDwvc3Bhbj4KPC9hPjwhLS0gRW5kIC9iYXJ0b24tYWNjb3VudCAtLT4KCjxhIGhyZWY9Ii9jb250YWN0IiBjbGFzcz0ibGluay1jb250YWN0IGhpZGRlbi1ub24tbW9iaWxlIj4KCTxpIGNsYXNzPSJmYSBmYS1ib29rIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPgoJPHNwYW4gY2xhc3M9ImJvdHRvbSI+Q29udGFjdDwvc3Bhbj4KPC9hPjwhLS0gRW5kIC9jb250YWN0IC0tPgoJCQkJCTwvaGVhZGVyPgoKCTxkaXYgaWQ9InNpZGViYXItc2VhcmNoIiBjbGFzcz0id2lkZ2V0LWFyZWEiIHJvbGU9ImNvbXBsZW1lbnRhcnkiPgoJCTxub3NjcmlwdD48cD5JdCBhcHBlYXJzIHRoYXQgeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgamF2YXNjcmlwdC48L3A+PHA+U2VhcmNoIGJvb2tzIGFuZCBvdGhlciBtZWRpYSB3b3JsZHdpZGUuPC9wPgo8Zm9ybSBhY3Rpb249Imh0dHBzOi8vbWl0LndvcmxkY2F0Lm9yZy9zZWFyY2giIG1ldGhvZD0iZ2V0IiBpZD0iYm9va3NlYXJjaCI+Cgk8ZGl2IGNsYXNzPSJoaWRkZW4iPgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InF0IiB2YWx1ZT0id2Nfb3JnX21pdCI+CgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icXQiIHZhbHVlPSJhZmZpbGlhdGUiPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJyb3ciPgoJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0icmVxdWVzdCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCBib29rcywgZmlsbXMsIG11c2ljIHNjb3JlcywgbWFwcy4uLiI+CgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+Cgk8L2Rpdj4KPC9mb3JtPgo8L25vc2NyaXB0PjxkaXYgaWQ9Im11bHRpc2VhcmNoIiBjbGFzcz0id3JhcC1zZWFyY2ggbm9qcyI+PGgyIGlkPSJzZWFyY2h0YWJzaGVhZGVyIiBjbGFzcz0ic3IiPlNlYXJjaCB0aGUgTUlUIGxpYnJhcmllczwvaDI+CgkJCTx1bCBpZD0ic2VhcmNoX3RhYnNfbmF2IiBhcmlhLWxhYmVsbGVkYnk9InNlYXJjaHRhYnNoZWFkZXIiPgoJCQkJPGxpPjxhIGlkPSJ0YWItYWxsIiBocmVmPSIjc2VhcmNoLWFsbCI+PHNwYW4+QWxsPC9zcGFuPjwvYT48L2xpPgoJCQkJPGxpPjxhIGlkPSJ0YWItYm9va3MiIGhyZWY9IiNzZWFyY2gtYm9va3MiPjxzcGFuPkJvb2tzICsgbWVkaWE8L3NwYW4+PC9hPjwvbGk+CgkJCQk8bGk+PGEgaWQ9InRhYi1hcnRpY2xlcyIgaHJlZj0iI3NlYXJjaC1hcnRpY2xlcyI+PHNwYW4+QXJ0aWNsZXMgKyBjaGFwdGVyczwvc3Bhbj48L2E+PC9saT4KCQkJCTxsaT48YSBpZD0idGFiLW1vcmUiIGhyZWY9IiNzZWFyY2gtbW9yZSI+PHNwYW4+TW9yZS4uLjwvc3Bhbj48L2E+PC9saT4KCQkJPC91bD48ZGl2IGlkPSJzZWFyY2gtYWxsIiBhcmlhLWxhYmVsbGVkYnk9InRhYi1hbGwiPjxoMyBjbGFzcz0ic3IiPkFsbCBwYW5lbDwvaDM+Cjxmb3JtCgljbGFzcz0iZm9ybSBzZWFyY2gtYmVudG8iCglhY3Rpb249Imh0dHBzOi8vbGliLm1pdC5lZHUvc2VhcmNoL2JlbnRvIgoJbWV0aG9kPSJnZXQiCglkYXRhLXRhcmdldD0iYmVudG8iPgoJPGxhYmVsIGZvcj0ic2VhcmNoaW5wdXQtYmVudG8iPlNlYXJjaCB0aGUgbGlicmFyaWVzPC9sYWJlbD4KCTxkaXYgY2xhc3M9IndyYXAtZmxleCI+CgkJPGRpdiBjbGFzcz0iZmxleC1sZWZ0Ij4KCQkJPGlucHV0CgkJCQljbGFzcz0iZmllbGQgZmllbGQtdGV4dCIKCQkJCXR5cGU9InRleHQiCgkJCQlpZD0ic2VhcmNoaW5wdXQtYmVudG8iCgkJCQluYW1lPSJxIgoJCQkJcGxhY2Vob2xkZXI9ImV4LiBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgam91cm5hbCBvZiBoZWF0IHRyYW5zZmVyLCBqc3RvciwgZHJlc3NlbGhhdXMiPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtcmlnaHQiPgoJCQk8aW5wdXQgY2xhc3M9ImJ1dHRvbiBidXR0b24tc2VhcmNoIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPgoJCTwvZGl2PgoJPC9kaXY+CjwvZm9ybT4KPHAgY2xhc3M9ImFsc28gc2VhcmNoLWFsbCI+Cgk8YSBocmVmPSIvc2VhcmNoLWFkdmFuY2VkLyI+QWR2YW5jZWQgc2VhcmNoPC9hPiB8IDxhIGhyZWY9Ii9jaXRhdGlvbi1zZWFyY2gvIj5DaXRhdGlvbiBzZWFyY2g8L2E+CjwvcD4KPC9kaXY+PGRpdiBpZD0ic2VhcmNoLWJvb2tzIiBhcmlhLWxhYmVsbGVkYnk9InRhYi1ib29rcyI+PGgzIGNsYXNzPSJzciI+Qm9va3MgYW5kIG1lZGlhIHBhbmVsPC9oMz4KPGZvcm0KCWFjdGlvbj0iIgoJaWQ9ImJvb2tzZWFyY2giCgltZXRob2Q9ImdldCIKCWNsYXNzPSJmb3JtIHNlYXJjaC1ib29rc2xvY2FsIj4KCTxkaXYgY2xhc3M9ImhpZGRlbiI+PC9kaXY+Cgk8bGFiZWwgZm9yPSJzZWFyY2hpbnB1dC1ib29rc2xvY2FsIj5TZWFyY2ggZm9yIGJvb2tzLCBlYm9va3MsIGpvdXJuYWxzLCBkYXRhYmFzZXMsIG11c2ljLCBhbmQgdmlkZW9zPC9sYWJlbD4KCTxkaXYgY2xhc3M9IndyYXAtZmxleCI+CgkJPGRpdiBjbGFzcz0iZmxleC1sZWZ0Ij4KCQkJPGRpdiBjbGFzcz0iZmxleC1sZWZ0LWlubmVyIj4KCQkJCTxpbnB1dAoJCQkJCWNsYXNzPSJmaWVsZCBmaWVsZC10ZXh0IgoJCQkJCWlkPSJzZWFyY2hpbnB1dC1ib29rc2xvY2FsIgoJCQkJCW5hbWU9InNlYXJjaCIKCQkJCQlwbGFjZWhvbGRlcj0iZXguIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBqb3VybmFsIG9mIGhlYXQgdHJhbnNmZXIsIGpzdG9yLCBkcmVzc2VsaGF1cyIKCQkJCQl0eXBlPSJ0ZXh0Ij4KCQkJCTxkaXYgY2xhc3M9ImZpZWxkLXdyYXAtc2VsZWN0Ij4KCQkJCQk8bGFiZWwgY2xhc3M9InNyIiBmb3I9InNlYXJjaGxpbWl0LWJvb2tzbG9jYWwiPmxpbWl0IHRvPC9sYWJlbD4KCQkJCQk8c2VsZWN0IGNsYXNzPSJmaWVsZCBmaWVsZC1zZWxlY3QiIGlkPSJzZWFyY2hsaW1pdC1ib29rc2xvY2FsIiBuYW1lPSJsaW1pdCI+CgkJCQkJCTxvcHRpb24gdmFsdWU9IiI+S2V5d29yZDwvb3B0aW9uPgoJCQkJCQk8b3B0aW9uIHZhbHVlPSJUSSI+VGl0bGU8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iQVUiPkF1dGhvcjwvb3B0aW9uPgoJCQkJCTwvc2VsZWN0PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQk8dWwgaWQ9ImJvb2tzLXRhcmdldCIgY2xhc3M9InNlbGVjdC1ib29rcy10YXJnZXQiPgoJCQkJPGxpPgoJCQkJCTxsYWJlbD4KCQkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJib29rcy10YXJnZXQiIHZhbHVlPSJsb2NhbGJvb2tzIiBjaGVja2VkPSJjaGVja2VkIj5hdCBNSVQKCQkJCQk8L2xhYmVsPgoJCQkJPC9saT4KCQkJCTxsaT4KCQkJCQk8bGFiZWw+CgkJCQkJCTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYm9va3MtdGFyZ2V0IiB2YWx1ZT0id29ybGRjYXQiPmxpYnJhcmllcyB3b3JsZHdpZGUgKFdvcmxkQ2F0KQoJCQkJCTwvbGFiZWw+CgkJCQk8L2xpPgoJCQk8L3VsPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtcmlnaHQiPgoJCQk8aW5wdXQgY2xhc3M9ImJ1dHRvbiBidXR0b24tc2VhcmNoIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPgoJCTwvZGl2PgoJPC9kaXY+CjwvZm9ybT4KPHAgY2xhc3M9ImFsc28iPkFsc28gc2VhcmNoIGZvcjoKCTxhIGhyZWY9Ii9zZWFyY2gtbWl0LXRoZXNlcy8iPk1JVCB0aGVzZXM8L2E+IG9yCgk8YSBocmVmPSIvc2VhcmNoLXJlc2VydmVzLyI+Q291cnNlIHJlc2VydmVzPC9hPgo8L3A+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gc2V0UHJpbW9TZWFyY2goZm9ybSkgewoJLy8gU2V0IGFjdGlvbgoJZm9ybS5hY3Rpb24gPSAnaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vZGlzY292ZXJ5L3NlYXJjaCc7CgoJLy8gTG9hZCBoaWRkZW4gZmllbGRzCglqUXVlcnkoZm9ybSkuZmluZCgiLmhpZGRlbiIpCgkJLmVtcHR5KCkKCQkuYXBwZW5kKCc8aW5wdXQgbmFtZT0idmlkIiB2YWx1ZT0iMDFNSVRfSU5TVDpNSVQiIHR5cGU9ImhpZGRlbiI+JykKCQkuYXBwZW5kKCc8aW5wdXQgbmFtZT0idGFiIiB2YWx1ZT0iYWxsIiB0eXBlPSJoaWRkZW4iPicpCgkJLmFwcGVuZCgnPGlucHV0IG5hbWU9InNlYXJjaF9zY29wZSIgdmFsdWU9ImNhdGFsb2ciIHR5cGU9ImhpZGRlbiI+JykKCQkuYXBwZW5kKCc8aW5wdXQgbmFtZT0ibGFuZyIgdmFsdWU9ImVuIiB0eXBlPSJoaWRkZW4iPicpCgkJLmFwcGVuZCgnPGlucHV0IG5hbWU9InF1ZXJ5IiB0eXBlPSJoaWRkZW4iPicpOwoKCS8vIEJ1aWxkIHNlYXJjaCBmaWVsZAoJdmFyIHNlYXJjaHR5cGUgPSAnYW55JzsKCWlmICggZm9ybS5saW1pdC52YWx1ZSA9PSAnVEknICkgewoJCXNlYXJjaHR5cGUgPSAndGl0bGUnOwoJfSBlbHNlIGlmICggZm9ybS5saW1pdC52YWx1ZSA9PSAnQVUnICkgewoJCXNlYXJjaHR5cGUgPSAnY3JlYXRvcic7Cgl9Cglmb3JtLnF1ZXJ5LnZhbHVlID0gc2VhcmNodHlwZSArICIsY29udGFpbnMsIiArIGZvcm0uc2VhcmNoLnZhbHVlLnJlcGxhY2UoL1ssXS9nLCAiICIpOwp9CgpmdW5jdGlvbiBzZXRXb3JsZGNhdFNlYXJjaChmb3JtKSB7CgkvLyBTZXQgYWN0aW9uCglmb3JtLmFjdGlvbiA9ICdodHRwczovL21pdC5vbi53b3JsZGNhdC5vcmcvc2VhcmNoJzsKCgkvLyBMb2FkIGhpZGRlbiBmaWVsZHMKCWpRdWVyeShmb3JtKS5maW5kKCIuaGlkZGVuIikKCQkuZW1wdHkoKQoJCS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InF1ZXJ5U3RyaW5nIj4nKTsKCgkvLyBUcmFuc2ZlciBzZWFyY2ggc3RyaW5nIHRvIGFjdHVhbCBmaWVsZAoJZm9ybS5xdWVyeVN0cmluZy52YWx1ZSA9IGZvcm0uc2VhcmNoLnZhbHVlLnRyaW0oKTsKCgkvLyBCdWlsZCBzZWFyY2ggZmllbGQgd2l0aCB0aXRsZS9hdXRob3Igc3ludGF4CglpZiAoIGZvcm0ubGltaXQudmFsdWUgIT09ICcnICkgewoJCWZvcm0ucXVlcnlTdHJpbmcudmFsdWUgPSBmb3JtLmxpbWl0LnZhbHVlLnRvTG93ZXJDYXNlKCkgKyAnOignICsgZm9ybS5xdWVyeVN0cmluZy52YWx1ZSArICcpJzsKCX0KfQoKalF1ZXJ5KCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsKCS8vIFdhdGNoIGZvciBmb3JtIHN1Ym1pc3Npb25zCglqUXVlcnkoICdmb3JtI2Jvb2tzZWFyY2gnICkub24oICdzdWJtaXQnLCBmdW5jdGlvbihldmVudCkgewoJCS8vIFJlYWQgc3RhdGUgb2YgdGFyZ2V0CgkJdmFyIHRhcmdldCA9IGpRdWVyeSgiI2Jvb2tzLXRhcmdldCBpbnB1dFtuYW1lPWJvb2tzLXRhcmdldF06Y2hlY2tlZCIpLnZhbCgpOwoKCQlpZiAoICd3b3JsZGNhdCcgPT09IHRhcmdldCApIHsKCQkJc2V0V29ybGRjYXRTZWFyY2godGhpcyk7CgkJfSBlbHNlIHsKCQkJc2V0UHJpbW9TZWFyY2godGhpcyk7CgkJfQoJfSk7Cn0pOwo8L3NjcmlwdD4KPC9kaXY+PGRpdiBpZD0ic2VhcmNoLWFydGljbGVzIiBhcmlhLWxhYmVsbGVkYnk9InRhYi1hcnRpY2xlcyI+PGgzIGNsYXNzPSJzciI+QXJ0aWNsZXMgYW5kIGNoYXB0ZXJzIHBhbmVsPC9oMz4KPGZvcm0KCWNsYXNzPSJmb3JtIHNlYXJjaC1hcnRpY2xlcyIKCWFjdGlvbj0iaHR0cHM6Ly9taXQucHJpbW8uZXhsaWJyaXNncm91cC5jb20vZGlzY292ZXJ5L3NlYXJjaCIKCWVuY3R5cGU9ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOCIKCWlkPSJwcmltb3NlYXJjaCIKCW1ldGhvZD0iZ2V0IgoJZGF0YS10YXJnZXQ9ImVkcyI+Cgk8ZGl2IGNsYXNzPSJoaWRkZW4iPgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZpZCIgdmFsdWU9IjAxTUlUX0lOU1Q6TUlUIj4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0YWIiIHZhbHVlPSJhbGwiPgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlYXJjaF9zY29wZSIgdmFsdWU9ImNkaSI+CgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibGFuZyIgdmFsdWU9ImVuIj4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJxdWVyeSIgaWQ9InByaW1vUXVlcnkiPgoJPC9kaXY+Cgk8bGFiZWwgZm9yPSJzZWFyY2hpbnB1dC1hcnRpY2xlIj4KCQlTZWFyY2ggYXJ0aWNsZXMsIGJvb2sgY2hhcHRlcnMsIGFuZCBtb3JlIGZyb20gc2Nob2xhcmx5IGpvdXJuYWxzLCBuZXdzcGFwZXJzLCBhbmQgb25saW5lIGNvbGxlY3Rpb25zCgk8L2xhYmVsPgoJPGRpdiBjbGFzcz0id3JhcC1mbGV4Ij4KCQk8ZGl2IGNsYXNzPSJmbGV4LWxlZnQiPgoJCQk8ZGl2IGNsYXNzPSJmbGV4LWxlZnQtaW5uZXIiPgoJCQkJPGlucHV0IAoJCQkJCWNsYXNzPSJmaWVsZCBmaWVsZC10ZXh0IiAKCQkJCQl0eXBlPSJ0ZXh0IiAKCQkJCQlpZD0ic2VhcmNoaW5wdXQtYXJ0aWNsZSIgCgkJCQkJbmFtZT0ic2VhcmNoIiAKCQkJCQlwbGFjZWhvbGRlcj0iZXguIGdhbWUgdGhlb3J5IGZvciBjb250cm9sIG9mIG9wdGljYWwgbmV0d29ya3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBkcmVzc2VsaGF1cyI+CgkJCQk8ZGl2IGNsYXNzPSJmaWVsZC13cmFwLXNlbGVjdCI+CgkJCQkJPGxhYmVsIGNsYXNzPSJzciIgZm9yPSJzZWFyY2hsaW1pdC1hcnRpY2xlcyI+bGltaXQgdG88L2xhYmVsPgoJCQkJCTxzZWxlY3QgY2xhc3M9ImZpZWxkIGZpZWxkLXNlbGVjdCIgbmFtZT0ibGltaXQiIGlkPSJzZWFyY2hsaW1pdC1hcnRpY2xlcyI+CgkJCQkJCTxvcHRpb24gdmFsdWU9IiI+S2V5d29yZDwvb3B0aW9uPgoJCQkJCQk8b3B0aW9uIHZhbHVlPSJUSSAiPlRpdGxlPC9vcHRpb24+CgkJCQkJCTxvcHRpb24gdmFsdWU9IkFVICI+QXV0aG9yPC9vcHRpb24+CgkJCQkJPC9zZWxlY3Q+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0iZmxleC1yaWdodCI+CgkJCTxpbnB1dCBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zZWFyY2giIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+CgkJPC9kaXY+Cgk8L2Rpdj4KPC9mb3JtPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CglqUXVlcnkoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCWpRdWVyeSggJ2Zvcm0jcHJpbW9zZWFyY2gnICkub24oICdzdWJtaXQnLCBmdW5jdGlvbigpIHsKCQkJLy8gUHJpbW8gdXNlcyBjb21tYS1zZXBhcmF0ZWQtdmFsdWVzIHRvIGluZmx1ZW5jZSBzZWFyY2ggYmVoYXZpb3IgZm9yCgkJCS8vIGtleXdvcmQsIHRpdGxlLCBhbmQgYXV0aG9yIHNlYXJjaGluZy4gU28gd2UgYXNzZW1ibGUgdGhlIHNlYXJjaCAKCQkJLy8gc3RyaW5nIG9uIHN1Ym1pdC4KCQkJdmFyIHNlYXJjaHR5cGUgPSAnYW55JzsKCQkJaWYgKCB0aGlzLmxpbWl0LnZhbHVlLnRyaW0oKSA9PSAnVEknICkgewoJCQkJc2VhcmNodHlwZSA9ICd0aXRsZSc7CgkJCX0gZWxzZSBpZiAoIHRoaXMubGltaXQudmFsdWUudHJpbSgpID09ICdBVScgKSB7CgkJCQlzZWFyY2h0eXBlID0gJ2NyZWF0b3InOwoJCQl9CgkJCXRoaXMucXVlcnkudmFsdWUgPSBzZWFyY2h0eXBlICsgIixjb250YWlucywiICsgdGhpcy5zZWFyY2gudmFsdWUucmVwbGFjZSgvWyxdL2csICIgIik7CgoJCQlyZXR1cm4gdHJ1ZTsKCQl9KTsKCX0pOwo8L3NjcmlwdD4KPHAgY2xhc3M9ImFsc28iPkFsc28gc2VhcmNoIGZvcjoKCTxhIGhyZWY9Ii9zZWFyY2gtam91cm5hbHMvIj5Kb3VybmFsczwvYT4gb3IKCTxhIGhyZWY9Ii9zZWFyY2gtZGF0YWJhc2VzLyI+RGF0YWJhc2VzPC9hPiBvciB1c2UKCTxhIGhyZWY9Ii9jaXRhdGlvbi1zZWFyY2gvIj5DaXRhdGlvbiBzZWFyY2g8L2E+CjwvcD4KPC9kaXY+PGRpdiBpZD0ic2VhcmNoLW1vcmUiIGFyaWEtbGFiZWxsZWRieT0idGFiLW1vcmUiPjxoMyBjbGFzcz0ic3IiPk1vcmUgcGFuZWw8L2gzPgo8ZGl2IGNsYXNzPSJ3cmFwLTNjb2xzIj4KCTxkaXYgY2xhc3M9ImNvbCBjb2wtMSI+CgkJPGgzIGNsYXNzPSJoZWFkZXItY29sIj5Mb29raW5nIGZvciBzb21ldGhpbmcgZWxzZT88L2gzPgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9Ii9yZXNlcnZlcyI+Q291cnNlIHJlc2VydmVzPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSIvdGhlc2VzIj5NSVQgdGhlc2VzPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJodHRwczovL2RzcGFjZS5taXQuZWR1Ij5EU3BhY2VATUlUPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJodHRwczovL2FyY2hpdmVzc3BhY2UubWl0LmVkdS8iPkFyY2hpdmVzU3BhY2U8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vZGF0YXZlcnNlLmhhcnZhcmQuZWR1L2RhdGF2ZXJzZS9taXQtbGlicmFyaWVzIj5NSVQgTGlicmFyaWVzIERhdGF2ZXJzZTwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iL2V4cGVydHMvIj5TZWFyY2ggdG9vbHMgYnkgc3ViamVjdDwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iL3NlYXJjaCI+TW9yZSBzZWFyY2ggb3B0aW9uczogaW1hZ2VzLCBkYXRhLCBldGMuPC9hPjwvbGk+CgkJPC91bD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iY29sIGNvbC0yIj4KCQk8aDMgY2xhc3M9ImhlYWRlci1jb2wiPk90aGVyIHVzZWZ1bCB0b29sczwvaDM+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93b3JsZGNhdCI+V29ybGRDYXQ8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvZ29vZ2xlL2dvb2dsZXNjaG9sYXIiPkdvb2dsZSBTY2hvbGFyIGZvciBNSVQ8L2E+PC9saT4KCQk8L3VsPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJjb2wgY29sLTMiPgoJCTxoMyBjbGFzcz0ic3IiPkdldCBoZWxwIGZyb20gYSBsaWJyYXJpYW48L2gzPgoJCTxwIGNsYXNzPSJ3cmFwLWFza3VzIj4KCQkJPGEgY2xhc3M9ImFza3VzLWxpbmsiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXNrIj4KCQkJCTxzcGFuIGNsYXNzPSJhc2t1cy1uYW1lIj5Bc2sgVXM8L3NwYW4+IAoJCQkJPHNwYW4gY2xhc3M9ImFza3VzLWRlc2MiPmNoYXQgYW5kIGVtYWlsPC9zcGFuPgoJCQk8L2E+CgkJPC9wPgoJPC9kaXY+CjwvZGl2Pgo8Zm9ybSBjbGFzcz0iZm9ybSBzZWFyY2gtc2l0ZSIgYWN0aW9uPSJodHRwczovL3d3dy5nb29nbGUuY29tL2NzZSIgbWV0aG9kPSJnZXQiIGRhdGEtdGFyZ2V0PSJnb29nbGUiPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY3giIHZhbHVlPSIwMTYyNDA1Mjg3MDM5NDE1ODk1NTc6aTd3cmJ1OWNkeHUiPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaWUiIHZhbHVlPSJVVEYtOCI+Cgk8aDM+PGxhYmVsIGZvcj0ic2VhcmNoaW5wdXQtc2l0ZSI+U2VhcmNoIHRoZSBsaWJyYXJ5IHdlYnNpdGU8L2xhYmVsPjwvaDM+Cgk8ZGl2IGNsYXNzPSJ3cmFwLWZsZXgiPgoJCTxkaXYgY2xhc3M9ImZsZXgtbGVmdCI+CgkJCTxpbnB1dCBpZD0ic2VhcmNoaW5wdXQtc2l0ZSIgY2xhc3M9ImZpZWxkIGZpZWxkLXRleHQiIHR5cGU9InRleHQiIG5hbWU9InEiIHBsYWNlaG9sZGVyPSJleC4gaG91cnMiPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtcmlnaHQiPgoJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zZWFyY2giIG5hbWU9InNhIiB2YWx1ZT0iU2VhcmNoIj4KCQk8L2Rpdj4KCTwvZGl2Pgo8L2Zvcm0+CjwvZGl2PjwvZGl2Pgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJicmVhZGNydW1icy0tYmV0dGVyIGhpZGRlbi1waG9uZSBncm91cCIgcm9sZT0ibmF2aWdhdGlvbiIgYXJpYS1sYWJlbD0iYnJlYWRjcnVtYnMiPgoJPHNwYW4+PGEgaHJlZj0iLyI+TGlicmFyaWVzIGhvbWU8L2E+PC9zcGFuPgoJU2VhcmNoPHNwYW4+PC9zcGFuPjwvZGl2PgoKCgk8ZGl2IGlkPSJzdGFnZSIgY2xhc3M9ImlubmVyIiByb2xlPSJtYWluIj4KCgkJCQkJCjxkaXYgY2xhc3M9InRpdGxlLXBhZ2UiPgoJCQk8aDE+U2VhcmNoPC9oMT4KCTwvZGl2PgoJCQoJCTxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJjb250ZW50IGhhcy1zaWRlYmFyIj4KCgkJCQkJCQkKCjxkaXYgY2xhc3M9Im1haW4tY29udGVudCBjb250ZW50LW1haW4iPgoJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJPGRpdiBjbGFzcz0iZW50cnktcGFnZS10aXRsZSI+CgkJCQk8L2Rpdj4KCQk8cD5Vc2UgdGhpcyBwYWdlIHRvIGxlYXJuIGFib3V0IGRpZmZlcmVudCB3YXlzIHlvdSBjYW4gc2VhcmNoIHRoZSBNSVQgTGlicmFyaWVz4oCZIG9mZmVyaW5ncy48L3A+CjxoMj5Vc2UgdGhlIERlZmF1bHQgUXVpY2sgU2VhcmNoPC9oMj4KPHA+T3VyIFF1aWNrIFNlYXJjaCBpcyB0aGUgZGVmYXVsdCBzZWFyY2ggb24gdGhlIExpYnJhcmllc+KAmSBob21lcGFnZS4gVGhpcyBjb2xsZWN0cyByZXN1bHRzIGZyb20gZGlmZmVyZW50IGxpYnJhcnkgc2VhcmNoIHRvb2xzIGFuZCBzb3J0cyB0aGUgcmVzdWx0cyBpbnRvIDQgY2F0ZWdvcmllczo8L3A+Cjx1bD4KPGxpPkJvb2tzIGFuZCBtZWRpYTwvbGk+CjxsaT5BcnRpY2xlcyBhbmQgYm9vayBjaGFwdGVyczwvbGk+CjxsaT5BcmNoaXZlcyBhbmQgbWFudXNjcmlwdCBjb2xsZWN0aW9uczwvbGk+CjxsaT5PdXIgbGlicmFyeSB3ZWJzaXRlIGFuZCBndWlkZXM8L2xpPgo8L3VsPgo8cD5UaGUgdG9vbCB3aWxsIHNlYXJjaCB0aGUgNCBjYXRlZ29yaWVzIGFuZCBwcmVzZW50IHRoZSB0b3AgcmVzdWx0cyBmcm9tIGVhY2ggY2F0ZWdvcnkuIEl0IGlzIHVzZWZ1bCB0byBzZWUgdGhlIGZ1bGwgYnJlYWR0aCBvZiB3aGF0IE1JVCBMaWJyYXJpZXMgaGFzIG9uIGEgcGFydGljdWxhciB0b3BpYyBvciBhdXRob3IuPC9wPgo8aDI+R28gc3RyYWlnaHQgdG8gb3VyIGNhdGFsb2c8L2gyPgo8cD5PdXIgY2F0YWxvZyBhbGxvd3MgeW91IHRvIHNlYXJjaCB0aHJvdWdoIG91ciBib29rcywgYXJjaGl2YWwgY29sbGVjdGlvbnMsIGFuZCBwaHlzaWNhbCBtZWRpYS4gSXQgYWxzbyBzZWFyY2hlcyBvbmxpbmUgbWF0ZXJpYWxzLCBpbmNsdWRpbmcgam91cm5hbCBhcnRpY2xlcywgZWJvb2tzLCB2aWRlb3MsIGFuZCBtb3JlLiBJdCBkb2VzIG5vdCBzZWFyY2ggdGhlIGxpYnJhcnkgd2Vic2l0ZS48L3A+Cjx1bD4KPGxpPlNob3J0Y3V0IFVSTDogPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9zZWFyY2gtY29sbGVjdGlvbnMvIj5odHRwczovL2xpYnJhcmllcy5taXQuZWR1L3NlYXJjaC1jb2xsZWN0aW9ucy88L2E+PC9saT4KPGxpPk1haW4gbmF2aWdhdGlvbiB1bmRlciDigJxTZWFyY2jigJ0g4oCTIHNlZSDigJxTZWFyY2ggT3VyIENvbGxlY3Rpb25z4oCdPC9saT4KPC91bD4KPGgzPlVzZSBzZWFyY2ggdG9vbHMgZm9yIGEgdGFyZ2V0ZWQgc2VhcmNoPC9oMz4KPHVsPgo8bGk+Q2xpY2sgb24g4oCcQWR2YW5jZWQgc2VhcmNo4oCdIHVuZGVyIHRoZSBzZWFyY2ggYm94PC9saT4KPGxpPk9yIHN3aXRjaCB0byB0aGUg4oCcQm9va3MgYW5kIG1lZGlh4oCdIG9yIOKAnEFydGljbGVzIGFuZCBjaGFwdGVyc+KAnSB0YWJzLjwvbGk+CjwvdWw+CjxwPkxlYXJuIG1vcmUgYWJvdXQgdGhlIGRpZmZlcmVudCBjYXRlZ29yaWVzIGJlbG93LjwvcD4KPGgzPkJvb2tzIGFuZCBtZWRpYTwvaDM+CjxwPlRoZSDigJxCb29rcyBhbmQgbWVkaWHigJ0gdGFiIHNlYXJjaGVzIG91ciBjYXRhbG9nIGZvciBib29rcywgZWJvb2tzLCBkYXRhYmFzZXMsIG11c2ljLCBhbmQgdmlkZW9zLiBZb3UgY2FuIGZpbmQgbWF0ZXJpYWxzIG5vdCBhdCBNSVQgYnkgc2VsZWN0aW5nIHRoZSDigJxsaWJyYXJpZXMgd29ybGR3aWRl4oCdIG9wdGlvbiBhbmQgZ29pbmcgdG8gdGhlIGl0ZW0gcGFnZSB0byByZXF1ZXN0IGl0LjwvcD4KPGgzPkFydGljbGVzIGFuZCBjaGFwdGVyczwvaDM+CjxwPlRoZSDigJxBcnRpY2xlcyBhbmQgY2hhcHRlcnPigJ0gdGFiIHNlYXJjaGVzIGFydGljbGVzLCBib29rIGNoYXB0ZXJzLCBhbmQgbW9yZSBmcm9tIHNjaG9sYXJseSBqb3VybmFscywgbmV3c3BhcGVycywgZXRjLjwvcD4KPGgzPjxhIGlkPSJvdGhlcnRvb2xzIj48L2E+TW9yZSYjODIzMDs8L2gzPgo8cD5UaGlzIHRhYiBhbHNvIGhhcyBsaW5rcyB0byBvdGhlciBjb21tb25seSB1c2VkIHNlYXJjaCB0b29scy4gVGhlIOKAnE1vcmXigJ0gdGFiIGFsc28gcHJvdmlkZXMgYSBzZWFyY2ggYm94IGZvciB0aGUgTGlicmFyaWVz4oCZIHdlYnNpdGUuwqAgU2VhcmNoIGhlcmUgZm9yIGxpYnJhcnkgc3RhZmYsIHNlcnZpY2VzLCByZXNlYXJjaCBndWlkZXMsIGV0Yy48L3A+CjxoMj5TZWFyY2ggZm9yIHNwZWNpZmljIG1hdGVyaWFsczwvaDI+Cjx1bD4KPGxpPjxzdHJvbmc+PGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9hei5waHAiPkEtWiBEYXRhYmFzZXM8L2E+PC9zdHJvbmc+OiBBIGZpbHRlcmFibGUgYW5kIHNlYXJjaGFibGUgbGlzdCBvZiBvbmxpbmUgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZGF0YWJhc2VzLCBqb3VybmFscywgYW5kIGVib29rIHBsYXRmb3Jtcy48L2xpPgo8bGk+PHN0cm9uZz48YSBocmVmPSJodHRwOi8vYXJjaG5ldC5vcmcvIj5BcmNobmV0PC9hPjwvc3Ryb25nPjogUmVzb3VyY2VzIG9uIGFyY2hpdGVjdHVyZSwgdXJiYW5pc20sIGVudmlyb25tZW50YWwgJmFtcDsgbGFuZHNjYXBlIGRlc2lnbiwgdmlzdWFsIGN1bHR1cmUsIGFuZCBjb25zZXJ2YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIE11c2xpbSB3b3JsZC48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL2FyY2hpdmVzc3BhY2UubWl0LmVkdS8iPjxzdHJvbmc+QXJjaGl2ZXNTcGFjZTwvc3Ryb25nPjwvYT46IEFyY2hpdmVzIGFuZCBtYW51c2NyaXB0IGNvbGxlY3Rpb25zIGluIDxhIGhyZWY9Ii9kaXN0aW5jdGl2ZS1jb2xsZWN0aW9ucyI+RGlzdGluY3RpdmUgQ29sbGVjdGlvbnM8L2E+LjwvbGk+CjxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2RvbWUiPjxzdHJvbmc+RG9tZTwvc3Ryb25nPjwvYT46IFNlYXJjaCBmb3IgaW1hZ2VzLCBtYXBzLCBhbmQgb3RoZXIgZG9jdW1lbnRzIGZyb20gdGhlIE1JVCBMaWJyYXJpZXPigJkgZGlnaXRpemVkIGNvbGxlY3Rpb25zLjwvbGk+CjxsaT48c3Ryb25nPjxhIGhyZWY9Ii9kc3BhY2UiPkRTcGFjZUBNSVQ8L2E+PC9zdHJvbmc+OsKgTUlUIHRoZXNlcywgcGFwZXJzLCBhcnRpY2xlcywgdGVjaG5pY2FsIHJlcG9ydHMsIGFuZCBvdGhlciByZXNlYXJjaCBtYXRlcmlhbHMgaW4gTUlU4oCZcyBpbnN0aXR1dGlvbmFsIHJlcG9zaXRvcnkuPC9saT4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2VvZGF0YS5saWJyYXJpZXMubWl0LmVkdS8iPjxzdHJvbmc+R2VvRGF0YTwvc3Ryb25nPjwvYT46IEZpbmQgR0lTL3NwYXRpYWwgZGF0YSBhdmFpbGFibGUgYXQgTUlULjwvbGk+CjxsaT48YSBocmVmPSJodHRwczovL2RhdGF2ZXJzZS5oYXJ2YXJkLmVkdS9kYXRhdmVyc2UvbWl0LWxpYnJhcmllcyI+PHN0cm9uZz5NSVQgTGlicmFyaWVzIERhdGF2ZXJzZTwvc3Ryb25nPjwvYT46IEEgcmVwb3NpdG9yeSBvZiBkYXRhc2V0cyBmb3IgdXNlIGluIGFjYWRlbWljIHJlc2VhcmNoIGJ5IHRoZSBNSVQgY29tbXVuaXR5LiBGb3IgYWNjZXNzIGRldGFpbHMsIHNlZSB0ZXJtcyBvZiB1c2UgZm9yIGVhY2ggZGF0YXNldC48L2xpPgo8bGk+PGEgaHJlZj0iL2V4cGVydHMiPjxzdHJvbmc+U3ViamVjdCBndWlkZXMgKyBleHBlcnRzPC9zdHJvbmc+PC9hPjogU3ViamVjdCBndWlkZXMgY2FuIGhlbHAgeW91IGZpZ3VyZSBvdXQgd2hpY2ggZGF0YWJhc2VzIHRvIHVzZSB0byBmaW5kIHNwZWNpYWxpemVkIGluZm9ybWF0aW9uIGZvciB5b3VyIHN1YmplY3QuIE9yIGFzayBvbmUgb2Ygb3VyIGxpYnJhcmlhbnMgd2l0aCBzdWJqZWN0IGV4cGVydGlzZSBmb3IgaGVscC48L2xpPgo8L3VsPgoJPC9kaXY+CjwvZGl2PgoJCQkKCQkJCQkJCQkKCTxkaXYgaWQ9InNpZGViYXJDb250ZW50IiBjbGFzcz0ic2lkZWJhciBzcGFuMyI+CgkJPGRpdiBjbGFzcz0ic2lkZWJhcldpZGdldHMiPgoJCQk8YXNpZGUgaWQ9ImJsYWNrLXN0dWRpby10aW55bWNlLTE0IiBjbGFzcz0id2lkZ2V0LW9kZCB3aWRnZXQtbGFzdCB3aWRnZXQtZmlyc3Qgd2lkZ2V0LTEgd2lkZ2V0IHdpZGdldF9ibGFja19zdHVkaW9fdGlueW1jZSIgcm9sZT0iY29tcGxlbWVudGFyeSI+PGgyIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPkFzayB1czwvaDI+PGRpdiBjbGFzcz0idGV4dHdpZGdldCI+PHA+PHN0cm9uZz48YSBocmVmPSIvYXNrIj5Bc2sgdXM8YnIgLz48L2E+PC9zdHJvbmc+VmlhIGNoYXQsIGVtYWlsLCBwaG9uZTwvcD4NCjxwPjxzdHJvbmc+PGEgaHJlZj0iL2NvbnN1bHRhdGlvbnMiPlJlc2VhcmNoIGNvbnN1bHRhdGlvbjxiciAvPjwvYT48L3N0cm9uZz5NZWV0IHdpdGggYW4gZXhwZXJ0PC9wPjwvZGl2PjwvYXNpZGU+CQk8L2Rpdj4KCTwvZGl2PiAgICAgIAoJCQkKCQk8L2Rpdj48IS0tIGVuZCBkaXYjY29udGVudCAtLT4KCgk8L2Rpdj48IS0tIGVuZCBkaXYjc3RhZ2UgLS0+CgoKCTxmb290ZXI+CgoJCTxkaXYgY2xhc3M9ImZvb3Rlci1tYWluIGZsZXgtY29udGFpbmVyIj4KCTxkaXYgY2xhc3M9ImxpbmtzLWFsbCBmbGV4LWNvbnRhaW5lciI+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9zZWFyY2giPlNlYXJjaDwvYT48L2g0PgoJCQk8YSBocmVmPSIvc2VhcmNoLWNvbGxlY3Rpb25zIiBjbGFzcz0ibGluay1zdWIiPlNlYXJjaCBPdXIgQ29sbGVjdGlvbnM8L2E+CgkJCTxhIGhyZWY9Ii93b3JsZGNhdCIgY2xhc3M9Imxpbmstc3ViIj5Xb3JsZENhdDwvYT4KCQkJPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9hei5waHAiIGNsYXNzPSJsaW5rLXN1YiI+RGF0YWJhc2VzIEEtWjwvYT4KCQkJPGEgaHJlZj0iL3NlYXJjaC1yZXNlcnZlcyIgY2xhc3M9Imxpbmstc3ViIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+CgkJCTxhIGhyZWY9Ii9zaXRlLXNlYXJjaCIgY2xhc3M9Imxpbmstc3ViIj5TaXRlIHNlYXJjaDwvYT4KCQkJPGEgaHJlZj0iL3NlYXJjaCIgY2xhc3M9Imxpbmstc3ViIj5Nb3JlIHNlYXJjaCBvcHRpb25zPC9hPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtaXRlbSI+CgkJCTxoND48YSBocmVmPSIvaG91cnMiPkhvdXJzICZhbXA7IGxvY2F0aW9uczwvYT48L2g0PgoJCQk8YSBocmVmPSIvaG91cnMiIGNsYXNzPSJsaW5rLXN1YiI+SG91cnM8L2E+CgkJCTxhIGhyZWY9Ii9sb2NhdGlvbnMiIGNsYXNzPSJsaW5rLXN1YiI+TWFwIG9mIGxvY2F0aW9uczwvYT4KCQkJPGEgaHJlZj0iL3N0dWR5IiBjbGFzcz0ibGluay1zdWIiPlN0dWR5IHNwYWNlczwvYT4KCQkJPGEgaHJlZj0iL2V4aGliaXRzIiBjbGFzcz0ibGluay1zdWIiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJmbGV4LWl0ZW0iPgoJCQk8aDQ+PGEgaHJlZj0iL2JvcnJvdyI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+PC9oND4KCQkJPGEgaHJlZj0iL2FjY291bnRzIiBjbGFzcz0ibGluay1zdWIiPkFjY291bnRzIG92ZXJ2aWV3PC9hPgoJCQk8YSBocmVmPSIvcmVzZXJ2ZXMiIGNsYXNzPSJsaW5rLXN1YiI+Q291cnNlIHJlc2VydmVzPC9hPgoJCQk8YSBocmVmPSIvb3RoZXJsaWJyYXJpZXMiIGNsYXNzPSJsaW5rLXN1YiI+VmlzaXQgbm9uLU1JVCBsaWJyYXJpZXM8L2E+CgkJCTxhIGhyZWY9Ii9ib3Jyb3ciIGNsYXNzPSJsaW5rLXN1YiI+TW9yZSBib3Jyb3cgJmFtcDsgcmVxdWVzdCBvcHRpb25zPC9hPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtaXRlbSI+CgkJCTxoND48YSBocmVmPSIvcmVzZWFyY2gtc3VwcG9ydCI+UmVzZWFyY2ggc3VwcG9ydDwvYT48L2g0PgoJCQk8YSBocmVmPSIvYXNrIiBjbGFzcz0ibGluay1zdWIiPkFzayB1czwvYT4KCQkJPGEgaHJlZj0iL2V4cGVydHMiIGNsYXNzPSJsaW5rLXN1YiI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zPC9hPgoJCQk8YSBocmVmPSIvc2Nob2xhcmx5IiBjbGFzcz0ibGluay1zdWIiPlNjaG9sYXJseSBjb21tdW5pY2F0aW9uczwvYT4KCQkJPGEgaHJlZj0iL3JlZmVyZW5jZXMiIGNsYXNzPSJsaW5rLXN1YiI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyBzb2Z0d2FyZTwvYT4KCQkJPGEgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQiIGNsYXNzPSJsaW5rLXN1YiI+TW9yZSByZXNlYXJjaCBzdXBwb3J0IG9wdGlvbnM8L2E+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9hYm91dCI+QWJvdXQgdXM8L2E+PC9oND4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvY29udGFjdCI+Q29udGFjdCB1czwvYT4gfCA8YSBocmVmPSIvZm9sbG93Ij5Gb2xsb3cgdXM8L2E+PC9zcGFuPgoJCQk8c3BhbiBjbGFzcz0ibGluay1zdWIiPjxhIGhyZWY9Ii9uZXdzIj5OZXdzPC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvZXZlbnRzIj5DbGFzc2VzICZhbXA7IGV2ZW50czwvYT48L3NwYW4+CgkJCTxzcGFuIGNsYXNzPSJsaW5rLXN1YiI+PGEgaHJlZj0iL3VzZS1wb2xpY2llcyI+VXNlIHBvbGljeTwvYT48L3NwYW4+CgkJCTxzcGFuIGNsYXNzPSJsaW5rLXN1YiI+PGEgaHJlZj0iL2dpdmluZyI+R2l2aW5nPC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvYWJvdXQiPk1vcmUgYWJvdXQgdXM8L2E+PC9zcGFuPgoJCTwvZGl2PgoJPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLWFsbCAtLT4KCgk8ZGl2IGNsYXNzPSJpZGVudGl0eSBmbGV4LWNvbnRhaW5lciI+CgkJPGEgaHJlZj0iLyIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+PGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdGxpYi13b3JkbWFyay5zdmciIGFsdD0iTUlUIExpYnJhcmllcyBsb2dvIj48L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgoKCQk8ZGl2IGNsYXNzPSJsaW5rcy1wcmltYXJ5IGZsZXgtY29udGFpbmVyIj4KCQkJPHNwYW4+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wcml2YWN5IiBjbGFzcz0ibGluay1zdWIiPlByaXZhY3k8L2E+PC9zcGFuPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Blcm1pc3Npb25zIiBjbGFzcz0ibGluay1zdWIiPlBlcm1pc3Npb25zPC9hPjwvc3Bhbj4KCQkJPHNwYW4+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2Nlc3NpYmlsaXR5IiBjbGFzcz0ibGluay1zdWIiPkFjY2Vzc2liaWxpdHk8L2E+PC9zcGFuPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiIGNsYXNzPSJsaW5rLXN1YiI+Q29udGFjdCB1czwvYT48L3NwYW4+CgkJPC9kaXY+PCEtLSBFbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgoJPC9kaXY+PCEtLSBFbmQgZGl2LmlkZW50aXR5IC0tPgo8L2Rpdj4KCgkJPGRpdiBjbGFzcz0iZm9vdGVyLWluZm8taW5zdGl0dXRlIj4KCQkJPGEgY2xhc3M9ImxpbmstbG9nby1taXQiIGhyZWY9Imh0dHBzOi8vd3d3Lm1pdC5lZHUiPgoJCQkJPGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdF9sb2NrdXBfc3RkLXRocmVlLWxpbmVfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQiIHdpZHRoPSIxNTIiPgoJCQk8L2E+CgoJCQk8ZGl2IGNsYXNzPSJsaWNlbnNlIj5Db250ZW50IGNyZWF0ZWQgYnkgdGhlIE1JVCBMaWJyYXJpZXMsIDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy80LjAvIj5DQyBCWS1OQzwvYT4gdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0L25vdGljZXMvY29weXJpZ2h0LW5vdGlmeS8iPk5vdGlmeSB1cyBhYm91dCBjb3B5cmlnaHQgY29uY2VybnM8L2E+LjwvZGl2PgoJCTwvZGl2PjwhLS0gRW5kIGRpdi5mb290ZXItaW5mby1pbnN0aXR1cmUgLS0+Cgk8L2Zvb3Rlcj4KCjwvZGl2PjwhLS0gRW5kIGRpdi53cmFwLXBhZ2UgLS0+Cgo8c2NyaXB0IHR5cGU9InNwZWN1bGF0aW9ucnVsZXMiPgp7InByZWZldGNoIjpbeyJzb3VyY2UiOiJkb2N1bWVudCIsIndoZXJlIjp7ImFuZCI6W3siaHJlZl9tYXRjaGVzIjoiXC8qIn0seyJub3QiOnsiaHJlZl9tYXRjaGVzIjpbIlwvd3BcL3dwLSoucGhwIiwiXC93cFwvd3AtYWRtaW5cLyoiLCJcL2FwcFwvdXBsb2Fkc1wvKiIsIlwvYXBwXC8qIiwiXC9hcHBcL3BsdWdpbnNcLyoiLCJcL2FwcFwvdGhlbWVzXC9taXRsaWItcGFyZW50XC8qIiwiXC8qXFw/KC4rKSJdfX0seyJub3QiOnsic2VsZWN0b3JfbWF0Y2hlcyI6ImFbcmVsfj1cIm5vZm9sbG93XCJdIn19LHsibm90Ijp7InNlbGVjdG9yX21hdGNoZXMiOiIubm8tcHJlZmV0Y2gsIC5uby1wcmVmZXRjaCBhIn19XX0sImVhZ2VybmVzcyI6ImNvbnNlcnZhdGl2ZSJ9XX0KPC9zY3JpcHQ+CiAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbigkKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXF1YWxIZWlnaHQoZ3JvdXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFsbGVzdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzSGVpZ2h0ID0gJCh0aGlzKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXNIZWlnaHQgPiB0YWxsZXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFsbGVzdCA9IHRoaXNIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBncm91cC5oZWlnaHQodGFsbGVzdCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlcXVhbEhlaWdodCgkKCIuZGctZ3JpZC1zaG9ydGNvZGUgLmRnX2dyaWQtc2hvcnRjb2RlLWNvbCIpKTsKCiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxIZWlnaHQoJCgiLmRnLWdyaWQtc2hvcnRjb2RlIC5kZ19ncmlkLXNob3J0Y29kZS1jb2wiKSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgIDxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3Jlc3BvbnNpdmV0YWJzLWNzcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvbWl0bGliLW11bHRpc2VhcmNoLXdpZGdldC9saWJzL3Jlc3BvbnNpdmUtdGFicy5jc3M/dmVyPTEuNi4xJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nbXVsdGlzZWFyY2gtdGFicy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvbWl0bGliLW11bHRpc2VhcmNoLXdpZGdldC9taXRsaWItbXVsdGlzZWFyY2gtd2lkZ2V0LmNzcz92ZXI9MS4zLjAnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwL3dwLWluY2x1ZGVzL2pzL2Rpc3QvaG9va3MubWluLmpzP3Zlcj00ZDYzYTNkNDkxZDExZmZkOGFjNiIgaWQ9IndwLWhvb2tzLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC93cC1pbmNsdWRlcy9qcy9kaXN0L2kxOG4ubWluLmpzP3Zlcj01ZTU4MGViNDZhOTBjMmI5OTdlNiIgaWQ9IndwLWkxOG4tanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9IndwLWkxOG4tanMtYWZ0ZXIiPgovKiA8IVtDREFUQVsgKi8Kd3AuaTE4bi5zZXRMb2NhbGVEYXRhKCB7ICd0ZXh0IGRpcmVjdGlvblx1MDAwNGx0cic6IFsgJ2x0cicgXSB9ICk7Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9zd3YvanMvaW5kZXguanM/dmVyPTYuMSIgaWQ9InN3di1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0iY29udGFjdC1mb3JtLTctanMtYmVmb3JlIj4KLyogPCFbQ0RBVEFbICovCnZhciB3cGNmNyA9IHsKICAgICJhcGkiOiB7CiAgICAgICAgInJvb3QiOiAiaHR0cHM6XC9cL2xpYnJhcmllcy5taXQuZWR1XC93cC1qc29uXC8iLAogICAgICAgICJuYW1lc3BhY2UiOiAiY29udGFjdC1mb3JtLTdcL3YxIgogICAgfQp9OwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5jbHVkZXMvanMvaW5kZXguanM/dmVyPTYuMSIgaWQ9ImNvbnRhY3QtZm9ybS03LWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvZGV2LmpzP3Zlcj0wLjgiIGlkPSJkZXYtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9saWJjaGF0LmpzP3Zlcj0wLjgiIGlkPSJsaWJjaGF0LWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvbWVudS50b2dnbGUuanM/dmVyPTAuOCIgaWQ9Im1lbnUtdG9nZ2xlLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJwYXJlbnQtcHJvZHVjdGlvbi1qcy1iZWZvcmUiPgovKiA8IVtDREFUQVsgKi8KY29uc3QgVEhFTUVfUk9PVCA9ICJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudCI7Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvYWxlcnRzLmpzP3Zlcj0wLjgiIGlkPSJwYXJlbnQtcHJvZHVjdGlvbi1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2NvcmUuanM/dmVyPTAuOCIgaWQ9InBhcmVudC1pbnRlcmlvci1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvcGFnZS1saW5rcy10by9kaXN0L25ldy10YWIuanM/dmVyPTMuMy43IiBpZD0icGFnZS1saW5rcy10by1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0id3BjZjdjZi1zY3JpcHRzLWpzLWV4dHJhIj4KLyogPCFbQ0RBVEFbICovCnZhciB3cGNmN2NmX2dsb2JhbF9zZXR0aW5ncyA9IHsiYWpheHVybCI6Imh0dHBzOlwvXC9saWJyYXJpZXMubWl0LmVkdVwvd3BcL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCJ9OwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY2Y3LWNvbmRpdGlvbmFsLWZpZWxkcy9qcy9zY3JpcHRzLmpzP3Zlcj0yLjIuMyIgaWQ9IndwY2Y3Y2Ytc2NyaXB0cy1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvbWl0bGliLW11bHRpc2VhcmNoLXdpZGdldC9saWJzL2pxdWVyeS5yZXNwb25zaXZlVGFicy5taW4uanM/dmVyPTEuNi4xIiBpZD0icmVzcG9uc2l2ZXRhYnMtanMtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL21pdGxpYi1tdWx0aXNlYXJjaC13aWRnZXQvbWl0bGliLW11bHRpc2VhcmNoLXdpZGdldC5qcz92ZXI9MS40LjEiIGlkPSJtdWx0aXNlYXJjaC1qcy1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij53aW5kb3cuTlJFVU18fChOUkVVTT17fSk7TlJFVU0uaW5mbz17ImJlYWNvbiI6ImJhbS5uci1kYXRhLm5ldCIsImxpY2Vuc2VLZXkiOiJOUkpTLTAzNjgyY2M2OWMxYzVhMzk1ODMiLCJhcHBsaWNhdGlvbklEIjoiNTc4MzQzMzE5IiwidHJhbnNhY3Rpb25OYW1lIjoiTlFkVk1rb0NXVUJZVVJFTldBeE5kZ1ZNQ2xoZEZrSUVBMUk9IiwicXVldWVUaW1lIjowLCJhcHBsaWNhdGlvblRpbWUiOjE5MCwiYXR0cyI6IkdVQldSQUlZU2s0PSIsImVycm9yQmVhY29uIjoiYmFtLm5yLWRhdGEubmV0IiwiYWdlbnQiOiIifTwvc2NyaXB0PjwvYm9keT4KPC9odG1sPgo=", "response_headers": {"accept-ranges": ["bytes"], "age": ["427428"], "cache-control": ["public, max-age=604800"], "content-length": ["129095"], "content-type": ["text/html; charset=UTF-8"], "date": ["Tue, 09 Dec 2025 14:33:41 GMT"], "link": ["; rel=\"https://api.w.org/\", ; rel=\"alternate\"; title=\"JSON\"; type=\"application/json\", ; rel=shortlink"], "permissions-policy": ["geolocation=(), microphone=(), camera=()"], "referrer-policy": ["no-referrer-when-downgrade"], "server": ["nginx"], "strict-transport-security": ["max-age=300"], "vary": ["Accept-Encoding, Cookie"], "via": ["1.1 varnish"], "x-cache": ["HIT"], "x-cache-hits": ["1"], "x-content-type-options": ["nosniff"], "x-frame-options": ["SAMEORIGIN"], "x-pantheon-styx-hostname": ["styx-fe3-b-5df8569779-zckhf"], "x-served-by": ["cache-chi-kigq8000105-CHI"], "x-styx-req-id": ["dfbd42aa-d128-11f0-85c8-4ea4934838e2"], "x-timer": ["S1765290822.680357,VS0,VE3"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libraries.mit.edu/about7/", "status": "active", "cdx_warc_filename": "rec-595f2ddb3156-mitlibwebsite-20251209142416123-6.warc.gz", "cdx_title": "About | MIT Libraries", "cdx_offset": "249278", "cdx_length": "38741", "html_base64": "PCFET0NUWVBFIGh0bWw+CjwhLS1baWYgbHRlIElFIDldPjxodG1sIGNsYXNzPSJuby1qcyBsdGUtaWU5IiBsYW5nPSJlbiI+PCFbZW5kaWZdLS0+CjwhLS1baWYgIShJRSA4KSB8ICEoSUUgOSkgXT48IS0tPgo8aHRtbCBsYW5nPSJlbi1VUyIgY2xhc3M9Im5vLWpzIj4KPCEtLTwhW2VuZGlmXS0tPgo8aGVhZD4KCTxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4od2luZG93Lk5SRVVNfHwoTlJFVU09e30pKS5pbml0PXtwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6dHJ1ZX0sYWpheDp7ZGVueV9saXN0OlsiYmFtLm5yLWRhdGEubmV0Il19LGZlYXR1cmVfZmxhZ3M6WyJzb2Z0X25hdiJdLGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dHJ1ZX19Oyh3aW5kb3cuTlJFVU18fChOUkVVTT17fSkpLmxvYWRlcl9jb25maWc9e2FnZW50SUQ6IjU5NDM5ODc4OCIsYWNjb3VudElEOiIzODQ0ODAwIix0cnVzdEtleToiNjY2ODYiLHhwaWQ6IlZ3NERWVjVUQ0JBRlUxbFJBd0lFVjEwPSIsbGljZW5zZUtleToiTlJKUy0wMzY4MmNjNjljMWM1YTM5NTgzIixhcHBsaWNhdGlvbklEOiI1NzgzNDMzMTkiLGJyb3dzZXJJRDoiNTk0Mzk4Nzg4In07Oy8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIG5yLWxvYWRlci1zcGEtMS4zMDMuMC5taW4uanMuTElDRU5TRS50eHQgKi8KKCgpPT57dmFyIGUsdCxyPXszODQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7TlQ6KCk9PnMsVVM6KCk9PmQsWm06KCk9PmEsYlE6KCk9PnUsZFY6KCk9PmMscFY6KCk9Pmx9KTt2YXIgbj1yKDYxNTQpLGk9cigxODYzKSxvPXIoMTkxMCk7Y29uc3Qgcz17YmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGVycm9yQmVhY29uOiJiYW0ubnItZGF0YS5uZXQifTtmdW5jdGlvbiBhKCl7cmV0dXJuIG4uZ20uTlJFVU18fChuLmdtLk5SRVVNPXt9KSx2b2lkIDA9PT1uLmdtLm5ld3JlbGljJiYobi5nbS5uZXdyZWxpYz1uLmdtLk5SRVVNKSxuLmdtLk5SRVVNfWZ1bmN0aW9uIGMoKXtsZXQgZT1hKCk7cmV0dXJuIGUub3x8KGUubz17U1Q6bi5nbS5zZXRUaW1lb3V0LFNJOm4uZ20uc2V0SW1tZWRpYXRlfHxuLmdtLnNldEludGVydmFsLENUOm4uZ20uY2xlYXJUaW1lb3V0LFhIUjpuLmdtLlhNTEh0dHBSZXF1ZXN0LFJFUTpuLmdtLlJlcXVlc3QsRVY6bi5nbS5FdmVudCxQUjpuLmdtLlByb21pc2UsTU86bi5nbS5NdXRhdGlvbk9ic2VydmVyLEZFVENIOm4uZ20uZmV0Y2gsV1M6bi5nbS5XZWJTb2NrZXR9LCgwLG8uaSkoLi4uT2JqZWN0LnZhbHVlcyhlLm8pKSksZX1mdW5jdGlvbiB1KGUsdCl7bGV0IHI9YSgpO3IuaW5pdGlhbGl6ZWRBZ2VudHM/Pz17fSx0LmluaXRpYWxpemVkQXQ9e21zOigwLGkudCkoKSxkYXRlOm5ldyBEYXRlfSxyLmluaXRpYWxpemVkQWdlbnRzW2VdPXR9ZnVuY3Rpb24gZChlLHQpe2EoKVtlXT10fWZ1bmN0aW9uIGwoKXtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluZm98fHt9O2UuaW5mbz17YmVhY29uOnMuYmVhY29uLGVycm9yQmVhY29uOnMuZXJyb3JCZWFjb24sLi4udH19KCksZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluaXR8fHt9O2UuaW5pdD17Li4udH19KCksYygpLGZ1bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5sb2FkZXJfY29uZmlnfHx7fTtlLmxvYWRlcl9jb25maWc9ey4uLnR9fSgpLGEoKX19LDc4MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtUOigpPT5ufSk7Y29uc3Qgbj1yKDg2MCkuSzcucGFnZVZpZXdUaW1pbmd9LDg2MDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHskSjooKT0+ZCxLNzooKT0+YyxQMzooKT0+dSxYWDooKT0+aSxZeTooKT0+YSxkZjooKT0+byxxWTooKT0+bix2NDooKT0+c30pO2NvbnN0IG49ImV2ZW50cyIsaT0ianNlcnJvcnMiLG89ImJyb3dzZXIvYmxvYnMiLHM9InJ1bSIsYT0iYnJvd3Nlci9sb2dzIixjPXthamF4OiJhamF4IixnZW5lcmljRXZlbnRzOiJnZW5lcmljX2V2ZW50cyIsanNlcnJvcnM6aSxsb2dnaW5nOiJsb2dnaW5nIixtZXRyaWNzOiJtZXRyaWNzIixwYWdlQWN0aW9uOiJwYWdlX2FjdGlvbiIscGFnZVZpZXdFdmVudDoicGFnZV92aWV3X2V2ZW50IixwYWdlVmlld1RpbWluZzoicGFnZV92aWV3X3RpbWluZyIsc2Vzc2lvblJlcGxheToic2Vzc2lvbl9yZXBsYXkiLHNlc3Npb25UcmFjZToic2Vzc2lvbl90cmFjZSIsc29mdE5hdjoic29mdF9uYXZpZ2F0aW9ucyIsc3BhOiJzcGEifSx1PXtbYy5wYWdlVmlld0V2ZW50XToxLFtjLnBhZ2VWaWV3VGltaW5nXToyLFtjLm1ldHJpY3NdOjMsW2MuanNlcnJvcnNdOjQsW2Muc3BhXTo1LFtjLmFqYXhdOjYsW2Muc2Vzc2lvblRyYWNlXTo3LFtjLnNvZnROYXZdOjgsW2Muc2Vzc2lvblJlcGxheV06OSxbYy5sb2dnaW5nXToxMCxbYy5nZW5lcmljRXZlbnRzXToxMX0sZD17W2MucGFnZVZpZXdFdmVudF06cyxbYy5wYWdlVmlld1RpbWluZ106bixbYy5hamF4XTpuLFtjLnNwYV06bixbYy5zb2Z0TmF2XTpuLFtjLm1ldHJpY3NdOmksW2MuanNlcnJvcnNdOmksW2Muc2Vzc2lvblRyYWNlXTpvLFtjLnNlc3Npb25SZXBsYXldOm8sW2MubG9nZ2luZ106YSxbYy5nZW5lcmljRXZlbnRzXToiaW5zIn19LDk0NDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5pfSk7dmFyIG49cigzMjQxKTtmdW5jdGlvbiBpKGUsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZGVidWcmJihjb25zb2xlLmRlYnVnKCJOZXcgUmVsaWMgV2FybmluZzogaHR0cHM6Ly9naXRodWIuY29tL25ld3JlbGljL25ld3JlbGljLWJyb3dzZXItYWdlbnQvYmxvYi9tYWluL2RvY3Mvd2FybmluZy1jb2Rlcy5tZCMiLmNvbmNhdChlKSx0KSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6bnVsbCxkcmFpbmVkOm51bGwsdHlwZToiZGF0YSIsbmFtZToid2FybiIsZmVhdHVyZToid2FybiIsZGF0YTp7Y29kZTplLHNlY29uZGFyeTp0fX0pKX19LDk5MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBJDooKT0+byxFVDooKT0+cyxUWjooKT0+YSxwXzooKT0+aX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPXtFUlJPUjoiRVJST1IiLFdBUk46IldBUk4iLElORk86IklORk8iLERFQlVHOiJERUJVRyIsVFJBQ0U6IlRSQUNFIn0sbz17T0ZGOjAsRVJST1I6MSxXQVJOOjIsSU5GTzozLERFQlVHOjQsVFJBQ0U6NX0scz0ibG9nIixhPW4uSzcubG9nZ2luZ30sMTY4NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBazooKT0+dSxaZTooKT0+Zix4MzooKT0+ZH0pO3ZhciBuPXIoMzI0MSksaT1yKDc4MzYpLG89cigzNjA2KSxzPXIoODYwKSxhPXIoMjY0Nik7Y29uc3QgYz17fTtmdW5jdGlvbiB1KGUsdCl7Y29uc3Qgcj17c3RhZ2VkOiExLHByaW9yaXR5OnMuUDNbdF18fDB9O2woZSksY1tlXS5nZXQodCl8fGNbZV0uc2V0KHQscil9ZnVuY3Rpb24gZChlLHQpe2UmJmNbZV0mJihjW2VdLmdldCh0KSYmY1tlXS5kZWxldGUodCkscChlLHQsITEpLGNbZV0uc2l6ZSYmaChlKSl9ZnVuY3Rpb24gbChlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoImFnZW50SWRlbnRpZmllciByZXF1aXJlZCIpO2NbZV18fChjW2VdPW5ldyBNYXApfWZ1bmN0aW9uIGYoZT0iIix0PSJmZWF0dXJlIixyPSExKXtpZihsKGUpLCFlfHwhY1tlXS5nZXQodCl8fHIpcmV0dXJuIHAoZSx0KTtjW2VdLmdldCh0KS5zdGFnZWQ9ITAsaChlKX1mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9QXJyYXkuZnJvbShjW2VdKTt0LmV2ZXJ5KChbZSx0XSk9PnQuc3RhZ2VkKSYmKHQuc29ydCgoZSx0KT0+ZVsxXS5wcmlvcml0eS10WzFdLnByaW9yaXR5KSx0LmZvckVhY2goKFt0XSk9PntjW2VdLmRlbGV0ZSh0KSxwKGUsdCl9KSl9ZnVuY3Rpb24gcChlLHQscj0hMCl7Y29uc3Qgcz1lP2kuZWUuZ2V0KGUpOmkuZWUsYz1vLmkuaGFuZGxlcnM7aWYoIXMuYWJvcnRlZCYmcy5iYWNrbG9nJiZjKXtpZigoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImRyYWluIixmZWF0dXJlOnR9KSxyKXtjb25zdCBlPXMuYmFja2xvZ1t0XSxyPWNbdF07aWYocil7Zm9yKGxldCB0PTA7ZSYmdDxlLmxlbmd0aDsrK3QpZyhlW3RdLHIpO09iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLHRdKT0+e09iamVjdC52YWx1ZXModHx8e30pLmZvckVhY2godD0+e3RbMF0/Lm9uJiZ0WzBdPy5jb250ZXh0KClpbnN0YW5jZW9mIGEueSYmdFswXS5vbihlLHRbMV0pfSl9KX19cy5pc29sYXRlZEJhY2tsb2d8fGRlbGV0ZSBjW3RdLHMuYmFja2xvZ1t0XT1udWxsLHMuZW1pdCgiZHJhaW4tIit0LFtdKX19ZnVuY3Rpb24gZyhlLHQpe3ZhciByPWVbMV07T2JqZWN0LnZhbHVlcyh0W3JdfHx7fSkuZm9yRWFjaCh0PT57dmFyIHI9ZVswXTtpZih0WzBdPT09cil7dmFyIG49dFsxXSxpPWVbM10sbz1lWzJdO24uYXBwbHkoaSxvKX19KX19LDE3NDE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7VzooKT0+b30pO3ZhciBuPXIoOTQ0KSxpPXIoNDI2MSk7Y2xhc3Mgb3sjZShlLC4uLnQpe2lmKHRoaXNbZV0hPT1vLnByb3RvdHlwZVtlXSlyZXR1cm4gdGhpc1tlXSguLi50KTsoMCxuLlIpKDM1LGUpfWFkZFBhZ2VBY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy4jZShpLmhHLGUsdCl9cmVnaXN0ZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5lWSxlKX1yZWNvcmRDdXN0b21FdmVudChlLHQpe3JldHVybiB0aGlzLiNlKGkuZkYsZSx0KX1zZXRQYWdlVmlld05hbWUoZSx0KXtyZXR1cm4gdGhpcy4jZShpLkZ3LGUsdCl9c2V0Q3VzdG9tQXR0cmlidXRlKGUsdCxyKXtyZXR1cm4gdGhpcy4jZShpLmNELGUsdCxyKX1ub3RpY2VFcnJvcihlLHQpe3JldHVybiB0aGlzLiNlKGkubzUsZSx0KX1zZXRVc2VySWQoZSl7cmV0dXJuIHRoaXMuI2UoaS5EbCxlKX1zZXRBcHBsaWNhdGlvblZlcnNpb24oZSl7cmV0dXJuIHRoaXMuI2UoaS5uYixlKX1zZXRFcnJvckhhbmRsZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5idCxlKX1hZGRSZWxlYXNlKGUsdCl7cmV0dXJuIHRoaXMuI2UoaS5rNixlLHQpfWxvZyhlLHQpe3JldHVybiB0aGlzLiNlKGkuJDksZSx0KX1zdGFydCgpe3JldHVybiB0aGlzLiNlKGkuZDMpfWZpbmlzaGVkKGUpe3JldHVybiB0aGlzLiNlKGkuQkwsZSl9cmVjb3JkUmVwbGF5KCl7cmV0dXJuIHRoaXMuI2UoaS5DSCl9cGF1c2VSZXBsYXkoKXtyZXR1cm4gdGhpcy4jZShpLlRiKX1hZGRUb1RyYWNlKGUpe3JldHVybiB0aGlzLiNlKGkuVTIsZSl9c2V0Q3VycmVudFJvdXRlTmFtZShlKXtyZXR1cm4gdGhpcy4jZShpLlBBLGUpfWludGVyYWN0aW9uKGUpe3JldHVybiB0aGlzLiNlKGkuZFQsZSl9d3JhcExvZ2dlcihlLHQscil7cmV0dXJuIHRoaXMuI2UoaS5XYixlLHQscil9bWVhc3VyZShlLHQpe3JldHVybiB0aGlzLiNlKGkuVjEsZSx0KX1jb25zZW50KGUpe3JldHVybiB0aGlzLiNlKGkuUHYsZSl9fX0sMTg2MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm4gTWF0aC5mbG9vcihwZXJmb3JtYW5jZS5ub3coKSl9ci5kKHQse3Q6KCk9Pm59KX0sMTkxMDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtpOigpPT5vfSk7dmFyIG49cig5NDQpO2NvbnN0IGk9bmV3IE1hcDtmdW5jdGlvbiBvKC4uLmUpe3JldHVybiBlLmV2ZXJ5KGU9PntpZihpLmhhcyhlKSlyZXR1cm4gaS5nZXQoZSk7Y29uc3QgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS50b1N0cmluZygpLmluY2x1ZGVzKCJbbmF0aXZlIGNvZGVdIik7cmV0dXJuIHR8fCgwLG4uUikoNjQsZT8ubmFtZXx8ZT8udG9TdHJpbmcoKSksaS5zZXQoZSx0KSx0fSl9fSwyNTU1OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0Q6KCk9PmEsZjooKT0+c30pO3ZhciBuPXIoMzg0KSxpPXIoODEyMik7Y29uc3Qgbz17YmVhY29uOm4uTlQuYmVhY29uLGVycm9yQmVhY29uOm4uTlQuZXJyb3JCZWFjb24sbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAsc2E6dm9pZCAwLHF1ZXVlVGltZTp2b2lkIDAsYXBwbGljYXRpb25UaW1lOnZvaWQgMCx0dEd1aWQ6dm9pZCAwLHVzZXI6dm9pZCAwLGFjY291bnQ6dm9pZCAwLHByb2R1Y3Q6dm9pZCAwLGV4dHJhOnZvaWQgMCxqc0F0dHJpYnV0ZXM6e30sdXNlckF0dHJpYnV0ZXM6dm9pZCAwLGF0dHM6dm9pZCAwLHRyYW5zYWN0aW9uTmFtZTp2b2lkIDAsdE5hbWVQbGFpbjp2b2lkIDB9O2Z1bmN0aW9uIHMoZSl7dHJ5e3JldHVybiEhZS5saWNlbnNlS2V5JiYhIWUuZXJyb3JCZWFjb24mJiEhZS5hcHBsaWNhdGlvbklEfWNhdGNoKGUpe3JldHVybiExfX1jb25zdCBhPWU9PigwLGkuYSkoZSxvKX0sMjYxNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtCQjooKT0+cyxIMzooKT0+bixnOigpPT51LGlMOigpPT5jLHRTOigpPT5hLHVoOigpPT5pLHdrOigpPT5vfSk7Y29uc3Qgbj0iTlJCQSIsaT0iU0VTU0lPTiIsbz0xNDRlNSxzPTE4ZTUsYT17U1RBUlRFRDoic2Vzc2lvbi1zdGFydGVkIixQQVVTRToic2Vzc2lvbi1wYXVzZSIsUkVTRVQ6InNlc3Npb24tcmVzZXQiLFJFU1VNRToic2Vzc2lvbi1yZXN1bWUiLFVQREFURToic2Vzc2lvbi11cGRhdGUifSxjPXtTQU1FX1RBQjoic2FtZS10YWIiLENST1NTX1RBQjoiY3Jvc3MtdGFiIn0sdT17T0ZGOjAsRlVMTDoxLEVSUk9SOjJ9fSwyNjQ2OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse3k6KCk9Pm59KTtjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29udGV4dElkPWV9fX0sMjg0MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5pfSk7dmFyIG49cigzODc4KTtmdW5jdGlvbiBpKGUsdD0hMSxyLGkpeygwLG4uREQpKCJ2aXNpYmlsaXR5Y2hhbmdlIixmdW5jdGlvbigpe2lmKHQpcmV0dXJuIHZvaWQoImhpZGRlbiI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKSk7ZShkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpfSxyLGkpfX0sMzI0MTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPSJuZXdyZWxpYyI7ZnVuY3Rpb24gbyhlPXt9KXt0cnl7bi5nbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChpLHtkZXRhaWw6ZX0pKX1jYXRjaChlKXt9fX0sMzMwNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBOigpPT5vfSk7dmFyIG49cig3ODM2KTtjb25zdCBpPSgpPT57Y29uc3QgZT1uZXcgV2Vha1NldDtyZXR1cm4odCxyKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXIpe2lmKGUuaGFzKHIpKXJldHVybjtlLmFkZChyKX1yZXR1cm4gcn19O2Z1bmN0aW9uIG8oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlLGkoKSk/PyIifWNhdGNoKGUpe3RyeXtuLmVlLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe31yZXR1cm4iIn19fSwzMzMzOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyR2OigpPT5kLFRaOigpPT5uLFhoOigpPT5jLFpwOigpPT5pLGtkOigpPT51LG1xOigpPT5hLG5mOigpPT5zLHFOOigpPT5vfSk7Y29uc3Qgbj1yKDg2MCkuSzcuZ2VuZXJpY0V2ZW50cyxpPVsiYXV4Y2xpY2siLCJjbGljayIsImNvcHkiLCJrZXlkb3duIiwicGFzdGUiLCJzY3JvbGxlbmQiXSxvPVsiZm9jdXMiLCJibHVyIl0scz00LGE9MWUzLGM9MmUzLHU9WyJQYWdlQWN0aW9uIiwiVXNlckFjdGlvbiIsIkJyb3dzZXJQZXJmb3JtYW5jZSJdLGQ9e1JFU09VUkNFUzoiZXhwZXJpbWVudGFsLnJlc291cmNlcyIsUkVHSVNURVI6InJlZ2lzdGVyIn19LDM0MzQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7SnQ6KCk9Pm8sWU06KCk9PnV9KTt2YXIgbj1yKDc4MzYpLGk9cig1NjA3KTtjb25zdCBvPSJuckBvcmlnaW5hbDoiLmNvbmNhdChpLlcpLHM9NTA7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjPSExO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZXx8KGU9bi5lZSksci5pblBsYWNlPWZ1bmN0aW9uKGUsdCxuLGksbyl7bnx8KG49IiIpO2NvbnN0IHM9Ii0iPT09bi5jaGFyQXQoMCk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0IGM9dFthXSx1PWVbY107bCh1KXx8KGVbY109cih1LHM/YytuOm4saSxjLG8pKX19LHIuZmxhZz1vLHI7ZnVuY3Rpb24gcih0LHIsbixjLHUpe3JldHVybiBsKHQpP3Q6KHJ8fChyPSIiKSxucldyYXBwZXJbb109dCxmdW5jdGlvbihlLHQscil7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3Qua2V5cyl0cnl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZVtyXT10LHR9fSl9KSx0fWNhdGNoKGUpe2QoW2VdLHIpfWZvcih2YXIgbiBpbiBlKWEuY2FsbChlLG4pJiYodFtuXT1lW25dKX0odCxucldyYXBwZXIsZSksbnJXcmFwcGVyKTtmdW5jdGlvbiBucldyYXBwZXIoKXt2YXIgbyxhLGwsZjtsZXQgaDt0cnl7YT10aGlzLG89Wy4uLmFyZ3VtZW50c10sbD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKG8sYSk6bnx8e319Y2F0Y2godCl7ZChbdCwiIixbbyxhLGNdLGxdLGUpfWkocisic3RhcnQiLFtvLGEsY10sbCx1KTtjb25zdCBwPXBlcmZvcm1hbmNlLm5vdygpO2xldCBnO3RyeXtyZXR1cm4gZj10LmFwcGx5KGEsbyksZz1wZXJmb3JtYW5jZS5ub3coKSxmfWNhdGNoKGUpe3Rocm93IGc9cGVyZm9ybWFuY2Uubm93KCksaShyKyJlcnIiLFtvLGEsZV0sbCx1KSxoPWUsaH1maW5hbGx5e2NvbnN0IGU9Zy1wLHQ9e3N0YXJ0OnAsZW5kOmcsZHVyYXRpb246ZSxpc0xvbmdUYXNrOmU+PXMsbWV0aG9kTmFtZTpjLHRocm93bkVycm9yOmh9O3QuaXNMb25nVGFzayYmaSgibG9uZy10YXNrIixbdCxhXSxsLHUpLGkocisiZW5kIixbbyxhLGZdLGwsdSl9fX1mdW5jdGlvbiBpKHIsbixpLG8pe2lmKCFjfHx0KXt2YXIgcz1jO2M9ITA7dHJ5e2UuZW1pdChyLG4saSx0LG8pfWNhdGNoKHQpe2QoW3QscixuLGldLGUpfWM9c319fWZ1bmN0aW9uIGQoZSx0KXt0fHwodD1uLmVlKTt0cnl7dC5lbWl0KCJpbnRlcm5hbC1lcnJvciIsZSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBsKGUpe3JldHVybiEoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkmJiFlW29dKX19LDM2MDY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7aTooKT0+b30pO3ZhciBuPXIoOTkwOCk7by5vbj1zO3ZhciBpPW8uaGFuZGxlcnM9e307ZnVuY3Rpb24gbyhlLHQscixvKXtzKG98fG4uZCxpLGUsdCxyKX1mdW5jdGlvbiBzKGUsdCxyLGksbyl7b3x8KG89ImZlYXR1cmUiKSxlfHwoZT1uLmQpO3ZhciBzPXRbb109dFtvXXx8e307KHNbcl09c1tyXXx8W10pLnB1c2goW2UsaV0pfX0sMzczODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtIZTooKT0+aSxLcDooKT0+YSxMYzooKT0+dSxSejooKT0+ZCxUWjooKT0+bixiRDooKT0+byxkMzooKT0+cyxqeDooKT0+bCxzbDooKT0+Zix1UDooKT0+Y30pO2NvbnN0IG49cig4NjApLks3LnNlc3Npb25UcmFjZSxpPSJic3RSZXNvdXJjZSIsbz0icmVzb3VyY2UiLHM9Ii1zdGFydCIsYT0iLWVuZCIsYz0iZm4iK3MsdT0iZm4iK2EsZD0icHVzaFN0YXRlIixsPTFlMyxmPTNlNH0sMzc4NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5jLGI6KCk9PnV9KTt2YXIgbj1yKDk5MDgpLGk9cigxODYzKSxvPXIoODYwKSxzPXIoODE1NCksYT1yKDk5Myk7ZnVuY3Rpb24gYyhlLHQscj17fSxjPWEucF8uSU5GTyx1LGQ9KDAsaS50KSgpKXsoMCxuLnApKHMueFYsWyJBUEkvbG9nZ2luZy8iLmNvbmNhdChjLnRvTG93ZXJDYXNlKCksIi9jYWxsZWQiKV0sdm9pZCAwLG8uSzcubWV0cmljcyxlKSwoMCxuLnApKGEuRVQsW2QsdCxyLGMsdV0sdm9pZCAwLG8uSzcubG9nZ2luZyxlKX1mdW5jdGlvbiB1KGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmT2JqZWN0LnZhbHVlcyhhLnBfKS5zb21lKHQ9PnQ9PT1lLnRvVXBwZXJDYXNlKCkudHJpbSgpKX19LDM4Nzg6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJue2NhcHR1cmU6ZSxwYXNzaXZlOiExLHNpZ25hbDp0fX1mdW5jdGlvbiBpKGUsdCxyPSExLGkpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGUsdCxuKHIsaSkpfWZ1bmN0aW9uIG8oZSx0LHI9ITEsaSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQsbihyLGkpKX1yLmQodCx7REQ6KCk9Pm8salQ6KCk9Pm4sc3A6KCk9Pml9KX0sMzk2MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBTTooKT0+cyxPMjooKT0+bCxPVjooKT0+byxRdTooKT0+ZixUWjooKT0+YyxpaDooKT0+aCxwUDooKT0+YSx0MTooKT0+ZCx0QzooKT0+aSx3RDooKT0+dX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPVsiY2xpY2siLCJrZXlkb3duIiwic3VibWl0Il0sbz0icG9wc3RhdGUiLHM9ImFwaSIsYT0iaW5pdGlhbFBhZ2VMb2FkIixjPW4uSzcuc29mdE5hdix1PTVlMyxkPTUwMCxsPXtJTklUSUFMX1BBR0VfTE9BRDoiIixST1VURV9DSEFOR0U6MSxVTlNQRUNJRklFRDoyfSxmPXtJTlRFUkFDVElPTjoxLEFKQVg6MixDVVNUT01fRU5EOjMsQ1VTVE9NX1RSQUNFUjo0fSxoPXtJUDoiaW4gcHJvZ3Jlc3MiLFBGOiJwZW5kaW5nIGZpbmlzaCIsRklOOiJmaW5pc2hlZCIsQ0FOOiJjYW5jZWxsZWQifX0sNDIzNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig3ODM2KSxpPXIoMTY4Nyk7Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYWdlbnRJZGVudGlmaWVyPWUsdGhpcy5lZT1uLmVlLmdldChlKSx0aGlzLmZlYXR1cmVOYW1lPXQsdGhpcy5ibG9ja2VkPSExfWRlcmVnaXN0ZXJEcmFpbigpeygwLGkueDMpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUpfX19LDQyNjE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7JDk6KCk9PmQsQkw6KCk9PmMsQ0g6KCk9PnAsRGw6KCk9PlIsRnc6KCk9PncsUEE6KCk9PnYsUGw6KCk9Pm4sUHY6KCk9PkEsVGI6KCk9PmYsVTI6KCk9PnMsVjE6KCk9PkUsV2I6KCk9PlQsYnQ6KCk9PnksY0Q6KCk9PmIsZDM6KCk9PngsZFQ6KCk9PnUsZVk6KCk9PmcsZkY6KCk9PmgsaEc6KCk9Pm8saHc6KCk9PmksazY6KCk9PmEsbmI6KCk9Pm0sbzU6KCk9Pmx9KTtjb25zdCBuPSJhcGktIixpPW4rIml4bi0iLG89ImFkZFBhZ2VBY3Rpb24iLHM9ImFkZFRvVHJhY2UiLGE9ImFkZFJlbGVhc2UiLGM9ImZpbmlzaGVkIix1PSJpbnRlcmFjdGlvbiIsZD0ibG9nIixsPSJub3RpY2VFcnJvciIsZj0icGF1c2VSZXBsYXkiLGg9InJlY29yZEN1c3RvbUV2ZW50IixwPSJyZWNvcmRSZXBsYXkiLGc9InJlZ2lzdGVyIixtPSJzZXRBcHBsaWNhdGlvblZlcnNpb24iLHY9InNldEN1cnJlbnRSb3V0ZU5hbWUiLGI9InNldEN1c3RvbUF0dHJpYnV0ZSIseT0ic2V0RXJyb3JIYW5kbGVyIix3PSJzZXRQYWdlVmlld05hbWUiLFI9InNldFVzZXJJZCIseD0ic3RhcnQiLFQ9IndyYXBMb2dnZXIiLEU9Im1lYXN1cmUiLEE9ImNvbnNlbnQifSw0Mzg3OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlPXt9KXtyZXR1cm4hKCFlLmlkfHwhZS5uYW1lKX1mdW5jdGlvbiBpKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS50cmltKCkubGVuZ3RoPDUwMXx8Im51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSx0KXtpZigyIT09dD8uaGFydmVzdEVuZHBvaW50VmVyc2lvbilyZXR1cm57fTtjb25zdCByPXQuYWdlbnRSZWYucnVudGltZS5hcHBNZXRhZGF0YS5hZ2VudHNbMF0uZW50aXR5R3VpZDtyZXR1cm4gbihlKT97Im1mZS5pZCI6ZS5pZCwibWZlLm5hbWUiOmUubmFtZSxldmVudFNvdXJjZTplLmV2ZW50U291cmNlLCJwYXJlbnQuaWQiOmUucGFyZW50Py5pZHx8cn06eyJlbnRpdHkuZ3VpZCI6cixhcHBJZDp0LmFnZW50UmVmLmluZm8uYXBwbGljYXRpb25JRH19ci5kKHQse1V4OigpPT5vLGM3OigpPT5uLHlvOigpPT5pfSl9LDUyMDU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7ajooKT0+X30pO3ZhciBuPXIoMzg0KSxpPXIoMTc0MSk7dmFyIG89cigyNTU1KSxzPXIoMzMzMyk7Y29uc3QgYT1lPT57aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt0cnl7ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnF1ZXJ5U2VsZWN0b3IoZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9O3ZhciBjPXIoMjYxNCksdT1yKDk0NCksZD1yKDgxMjIpO2NvbnN0IGw9IltkYXRhLW5yLW1hc2tdIixmPWU9PigwLGQuYSkoZSwoKCk9Pntjb25zdCBlPXtmZWF0dXJlX2ZsYWdzOltdLGV4cGVyaW1lbnRhbDp7YWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbjohMSxyZXNvdXJjZXM6ITF9LG1hc2tfc2VsZWN0b3I6IioiLGJsb2NrX3NlbGVjdG9yOiJbZGF0YS1uci1ibG9ja10iLG1hc2tfaW5wdXRfb3B0aW9uczp7Y29sb3I6ITEsZGF0ZTohMSwiZGF0ZXRpbWUtbG9jYWwiOiExLGVtYWlsOiExLG1vbnRoOiExLG51bWJlcjohMSxyYW5nZTohMSxzZWFyY2g6ITEsdGVsOiExLHRleHQ6ITEsdGltZTohMSx1cmw6ITEsd2VlazohMSx0ZXh0YXJlYTohMSxzZWxlY3Q6ITEscGFzc3dvcmQ6ITB9fTtyZXR1cm57YWpheDp7ZGVueV9saXN0OnZvaWQgMCxibG9ja19pbnRlcm5hbDohMCxlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sYXBpOntnZXQgYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbigpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRUdJU1RFUil8fGUuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW59LHNldCBhbGxvd19yZWdpc3RlcmVkX2NoaWxkcmVuKHQpe2UuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW49dH0sZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YTohMX0sYnJvd3Nlcl9jb25zZW50X21vZGU6e2VuYWJsZWQ6ITF9LGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dm9pZCAwLGV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyOnZvaWQgMCxjb3JzX3VzZV9uZXdyZWxpY19oZWFkZXI6dm9pZCAwLGNvcnNfdXNlX3RyYWNlY29udGV4dF9oZWFkZXJzOnZvaWQgMCxhbGxvd2VkX29yaWdpbnM6dm9pZCAwfSxnZXQgZmVhdHVyZV9mbGFncygpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3N9LHNldCBmZWF0dXJlX2ZsYWdzKHQpe2UuZmVhdHVyZV9mbGFncz10fSxnZW5lcmljX2V2ZW50czp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGhhcnZlc3Q6e2ludGVydmFsOjMwfSxqc2Vycm9yczp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGxvZ2dpbmc6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxtZXRyaWNzOntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sb2JmdXNjYXRlOnZvaWQgMCxwYWdlX2FjdGlvbjp7ZW5hYmxlZDohMH0scGFnZV92aWV3X2V2ZW50OntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0scGFnZV92aWV3X3RpbWluZzp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHBlcmZvcm1hbmNlOntjYXB0dXJlX21hcmtzOiExLGNhcHR1cmVfbWVhc3VyZXM6ITEsY2FwdHVyZV9kZXRhaWw6ITAscmVzb3VyY2VzOntnZXQgZW5hYmxlZCgpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRVNPVVJDRVMpfHxlLmV4cGVyaW1lbnRhbC5yZXNvdXJjZXN9LHNldCBlbmFibGVkKHQpe2UuZXhwZXJpbWVudGFsLnJlc291cmNlcz10fSxhc3NldF90eXBlczpbXSxmaXJzdF9wYXJ0eV9kb21haW5zOltdLGlnbm9yZV9uZXdyZWxpYzohMH19LHByaXZhY3k6e2Nvb2tpZXNfZW5hYmxlZDohMH0scHJveHk6e2Fzc2V0czp2b2lkIDAsYmVhY29uOnZvaWQgMH0sc2Vzc2lvbjp7ZXhwaXJlc01zOmMud2ssaW5hY3RpdmVNczpjLkJCfSxzZXNzaW9uX3JlcGxheTp7YXV0b1N0YXJ0OiEwLGVuYWJsZWQ6ITEscHJlbG9hZDohMSxzYW1wbGluZ19yYXRlOjEwLGVycm9yX3NhbXBsaW5nX3JhdGU6MTAwLGNvbGxlY3RfZm9udHM6ITEsaW5saW5lX2ltYWdlczohMSxmaXhfc3R5bGVzaGVldHM6ITAsbWFza19hbGxfaW5wdXRzOiEwLGdldCBtYXNrX3RleHRfc2VsZWN0b3IoKXtyZXR1cm4gZS5tYXNrX3NlbGVjdG9yfSxzZXQgbWFza190ZXh0X3NlbGVjdG9yKHQpe2EodCk/ZS5tYXNrX3NlbGVjdG9yPSIiLmNvbmNhdCh0LCIsIikuY29uY2F0KGwpOiIiPT09dHx8bnVsbD09PXQ/ZS5tYXNrX3NlbGVjdG9yPWw6KDAsdS5SKSg1LHQpfSxnZXQgYmxvY2tfY2xhc3MoKXtyZXR1cm4ibnItYmxvY2sifSxnZXQgaWdub3JlX2NsYXNzKCl7cmV0dXJuIm5yLWlnbm9yZSJ9LGdldCBtYXNrX3RleHRfY2xhc3MoKXtyZXR1cm4ibnItbWFzayJ9LGdldCBibG9ja19zZWxlY3Rvcigpe3JldHVybiBlLmJsb2NrX3NlbGVjdG9yfSxzZXQgYmxvY2tfc2VsZWN0b3IodCl7YSh0KT9lLmJsb2NrX3NlbGVjdG9yKz0iLCIuY29uY2F0KHQpOiIiIT09dCYmKDAsdS5SKSg2LHQpfSxnZXQgbWFza19pbnB1dF9vcHRpb25zKCl7cmV0dXJuIGUubWFza19pbnB1dF9vcHRpb25zfSxzZXQgbWFza19pbnB1dF9vcHRpb25zKHQpe3QmJiJvYmplY3QiPT10eXBlb2YgdD9lLm1hc2tfaW5wdXRfb3B0aW9ucz17Li4udCxwYXNzd29yZDohMH06KDAsdS5SKSg3LHQpfX0sc2Vzc2lvbl90cmFjZTp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHNvZnRfbmF2aWdhdGlvbnM6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzcGE6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzc2w6dm9pZCAwLHVzZXJfYWN0aW9uczp7ZW5hYmxlZDohMCxlbGVtZW50QXR0cmlidXRlczpbImlkIiwiY2xhc3NOYW1lIiwidGFnTmFtZSIsInR5cGUiXX19fSkoKSk7dmFyIGg9cig2MTU0KSxwPXIoOTMyNCk7bGV0IGc9MDtjb25zdCBtPXtidWlsZEVudjpwLkYzLGRpc3RNZXRob2Q6cC5Ycyx2ZXJzaW9uOnAueHYsb3JpZ2luVGltZTpoLldOfSx2PXtjb25zZW50ZWQ6ITF9LGI9e2FwcE1ldGFkYXRhOnt9LGdldCBjb25zZW50ZWQoKXtyZXR1cm4gdGhpcy5zZXNzaW9uPy5zdGF0ZT8uY29uc2VudHx8di5jb25zZW50ZWR9LHNldCBjb25zZW50ZWQoZSl7di5jb25zZW50ZWQ9ZX0sY3VzdG9tVHJhbnNhY3Rpb246dm9pZCAwLGRlbnlMaXN0OnZvaWQgMCxkaXNhYmxlZDohMSxoYXJ2ZXN0ZXI6dm9pZCAwLGlzb2xhdGVkQmFja2xvZzohMSxpc1JlY29yZGluZzohMSxsb2FkZXJUeXBlOnZvaWQgMCxtYXhCeXRlczozZTQsb2JmdXNjYXRvcjp2b2lkIDAsb25lcnJvcjp2b2lkIDAscHRpZDp2b2lkIDAscmVsZWFzZUlkczp7fSxzZXNzaW9uOnZvaWQgMCx0aW1lS2VlcGVyOnZvaWQgMCxyZWdpc3RlcmVkRW50aXRpZXM6W10sanNBdHRyaWJ1dGVzTWV0YWRhdGE6e2J5dGVzOjB9LGdldCBoYXJ2ZXN0Q291bnQoKXtyZXR1cm4rK2d9fSx5PWU9Pntjb25zdCB0PSgwLGQuYSkoZSxiKSxyPU9iamVjdC5rZXlzKG0pLnJlZHVjZSgoZSx0KT0+KGVbdF09e3ZhbHVlOm1bdF0sd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9LGUpLHt9KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxyKX07dmFyIHc9cig1NzAxKTtjb25zdCBSPWU9Pntjb25zdCB0PWUuc3RhcnRzV2l0aCgiaHR0cCIpO2UrPSIvIixyLnA9dD9lOiJodHRwczovLyIrZX07dmFyIHg9cig3ODM2KSxUPXIoMzI0MSk7Y29uc3QgRT17YWNjb3VudElEOnZvaWQgMCx0cnVzdEtleTp2b2lkIDAsYWdlbnRJRDp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAseHBpZDp2b2lkIDB9LEE9ZT0+KDAsZC5hKShlLEUpLFM9bmV3IFNldDtmdW5jdGlvbiBfKGUsdD17fSxyLHMpe2xldHtpbml0OmEsaW5mbzpjLGxvYWRlcl9jb25maWc6dSxydW50aW1lOmQ9e30sZXhwb3NlZDpsPSEwfT10O2lmKCFjKXtjb25zdCBlPSgwLG4ucFYpKCk7YT1lLmluaXQsYz1lLmluZm8sdT1lLmxvYWRlcl9jb25maWd9ZS5pbml0PWYoYXx8e30pLGUubG9hZGVyX2NvbmZpZz1BKHV8fHt9KSxjLmpzQXR0cmlidXRlcz8/PXt9LGguYnYmJihjLmpzQXR0cmlidXRlcy5pc1dvcmtlcj0hMCksZS5pbmZvPSgwLG8uRCkoYyk7Y29uc3QgcD1lLmluaXQsZz1bYy5iZWFjb24sYy5lcnJvckJlYWNvbl07Uy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwocC5wcm94eS5hc3NldHMmJihSKHAucHJveHkuYXNzZXRzKSxnLnB1c2gocC5wcm94eS5hc3NldHMpKSxwLnByb3h5LmJlYWNvbiYmZy5wdXNoKHAucHJveHkuYmVhY29uKSxlLmJlYWNvbnM9Wy4uLmddLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsbi5wVikoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpLlcucHJvdG90eXBlKS5mb3JFYWNoKHI9Pntjb25zdCBuPWkuVy5wcm90b3R5cGVbcl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fCJjb25zdHJ1Y3RvciI9PT1uKXJldHVybjtsZXQgbz10W3JdO2Vbcl0mJiExIT09ZS5leHBvc2VkJiYibWljcm8tYWdlbnQiIT09ZS5ydW50aW1lPy5sb2FkZXJUeXBlJiYodFtyXT0oLi4udCk9Pntjb25zdCBuPWVbcl0oLi4udCk7cmV0dXJuIG8/byguLi50KTpufSl9KX0oZSksKDAsbi5VUykoImFjdGl2YXRlZEZlYXR1cmVzIix3LkIpLGUucnVuU29mdE5hdk92ZXJTcGEmJj0hMD09PXAuc29mdF9uYXZpZ2F0aW9ucy5lbmFibGVkJiZwLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMoInNvZnRfbmF2IikpLGQuZGVueUxpc3Q9Wy4uLnAuYWpheC5kZW55X2xpc3R8fFtdLC4uLnAuYWpheC5ibG9ja19pbnRlcm5hbD9nOltdXSxkLnB0aWQ9ZS5hZ2VudElkZW50aWZpZXIsZC5sb2FkZXJUeXBlPXIsZS5ydW50aW1lPXkoZCksUy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwoZS5lZT14LmVlLmdldChlLmFnZW50SWRlbnRpZmllciksZS5leHBvc2VkPWwsKDAsVC5XKSh7YWdlbnRJZGVudGlmaWVyOmUuYWdlbnRJZGVudGlmaWVyLGRyYWluZWQ6ISF3LkI/LltlLmFnZW50SWRlbnRpZmllcl0sdHlwZToibGlmZWN5Y2xlIixuYW1lOiJpbml0aWFsaXplIixmZWF0dXJlOnZvaWQgMCxkYXRhOmUuY29uZmlnfSkpLFMuYWRkKGUuYWdlbnRJZGVudGlmaWVyKX19LDUyNzA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7QXc6KCk9PnMsU1I6KCk9Pm8sckY6KCk9PmF9KTt2YXIgbj1yKDM4NCksaT1yKDc3NjcpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuISEoMCxuLmRWKSgpLm8uTU8mJigwLGkuVikoZSkmJiEwPT09ZT8uc2Vzc2lvbl90cmFjZS5lbmFibGVkfWZ1bmN0aW9uIHMoZSl7cmV0dXJuITA9PT1lPy5zZXNzaW9uX3JlcGxheS5wcmVsb2FkJiZvKGUpfWZ1bmN0aW9uIGEoZSx0KXt0cnl7aWYoInN0cmluZyI9PXR5cGVvZiB0Py50eXBlKXtpZigicGFzc3dvcmQiPT09dC50eXBlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIioiLnJlcGVhdChlPy5sZW5ndGh8fDApO2lmKHZvaWQgMCE9PXQ/LmRhdGFzZXQ/Lm5yVW5tYXNrfHx0Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCJuci11bm1hc2siKSlyZXR1cm4gZX19Y2F0Y2goZSl7fXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnJlcGxhY2UoL1tcU10vZywiKiIpOiIqIi5yZXBlYXQoZT8ubGVuZ3RofHwwKX19LDUyODk6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7R0c6KCk9Pm8sUXI6KCk9PmEsc0I6KCk9PnN9KTt2YXIgbj1yKDM4NzgpO2Z1bmN0aW9uIGkoKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50fHwiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZX1mdW5jdGlvbiBvKGUsdCl7aWYoaSgpKXJldHVybiBlKCk7KDAsbi5zcCkoImxvYWQiLGUsdCl9ZnVuY3Rpb24gcyhlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLkREKSgiRE9NQ29udGVudExvYWRlZCIsZSl9ZnVuY3Rpb24gYShlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLnNwKSgicG9wc3RhdGUiLGUpfX0sNTYwNzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5ufSk7Y29uc3Qgbj0oMCxyKDk1NjYpLmJ6KSgpfSw1NzAxOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0I6KCk9Pm8sdDooKT0+c30pO3ZhciBuPXIoMzI0MSk7Y29uc3QgaT1uZXcgU2V0LG89e307ZnVuY3Rpb24gcyhlLHQpe2NvbnN0IHI9dC5hZ2VudElkZW50aWZpZXI7b1tyXT8/PXt9LGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGkuaGFzKHIpfHwodC5lZS5lbWl0KCJydW1yZXNwIixbZV0pLG9bcl09ZSxpLmFkZChyKSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6cixsb2FkZWQ6ITAsZHJhaW5lZDohMCx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImxvYWQiLGZlYXR1cmU6dm9pZCAwLGRhdGE6ZX0pKSl9fSw2MTU0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0E0OigpPT5hLE9GOigpPT5kLFJJOigpPT5pLFdOOigpPT5oLGJ2OigpPT5vLGdtOigpPT5zLGxSOigpPT5mLG06KCk9PnUsbXc6KCk9PmMsc2I6KCk9Pmx9KTt2YXIgbj1yKDE4NjMpO2NvbnN0IGk9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93LmRvY3VtZW50LG89InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLm5hdmlnYXRvciBpbnN0YW5jZW9mIFdvcmtlck5hdmlnYXRvcnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMubmF2aWdhdG9yIGluc3RhbmNlb2YgV29ya2VyTmF2aWdhdG9yKSxzPWk/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMpLGE9ImNvbXBsZXRlIj09PXM/LmRvY3VtZW50Py5yZWFkeVN0YXRlLGM9Qm9vbGVhbigiaGlkZGVuIj09PXM/LmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUpLHU9IiIrcz8ubG9jYXRpb24sZD0vaVBhZHxpUGhvbmV8aVBvZC8udGVzdChzLm5hdmlnYXRvcj8udXNlckFnZW50KSxsPWQmJiJ1bmRlZmluZWQiPT10eXBlb2YgU2hhcmVkV29ya2VyLGY9KCgpPT57Y29uc3QgZT1zLm5hdmlnYXRvcj8udXNlckFnZW50Py5tYXRjaCgvRmlyZWZveFsvXHNdKFxkK1wuXGQrKS8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD49Mj8rZVsxXTowfSkoKSxoPURhdGUubm93KCktKDAsbi50KSgpfSw2MzQ0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0JCOigpPT5kLFFiOigpPT5sLFRaOigpPT5pLFVnOigpPT5zLFZoOigpPT5vLF9zOigpPT5hLGJjOigpPT51LHlQOigpPT5jfSk7dmFyIG49cigyNjE0KTtjb25zdCBpPXIoODYwKS5LNy5zZXNzaW9uUmVwbGF5LG89ImVycm9yRHVyaW5nUmVwbGF5IixzPS4xMixhPXtEb21Db250ZW50TG9hZGVkOjAsTG9hZDoxLEZ1bGxTbmFwc2hvdDoyLEluY3JlbWVudGFsU25hcHNob3Q6MyxNZXRhOjQsQ3VzdG9tOjV9LGM9e1tuLmcuRVJST1JdOjE1ZTMsW24uZy5GVUxMXTozZTUsW24uZy5PRkZdOjB9LHU9e1JFU0VUOnttZXNzYWdlOiJTZXNzaW9uIHdhcyByZXNldCIsc206IlJlc2V0In0sSU1QT1JUOnttZXNzYWdlOiJSZWNvcmRlciBmYWlsZWQgdG8gaW1wb3J0IixzbToiSW1wb3J0In0sVE9PX01BTlk6e21lc3NhZ2U6IjQyOTogVG9vIE1hbnkgUmVxdWVzdHMiLHNtOiJUb28tTWFueSJ9LFRPT19CSUc6e21lc3NhZ2U6IlBheWxvYWQgd2FzIHRvbyBsYXJnZSIsc206IlRvby1CaWcifSxDUk9TU19UQUI6e21lc3NhZ2U6IlNlc3Npb24gRW50aXR5IHdhcyBzZXQgdG8gT0ZGIG9uIGFub3RoZXIgdGFiIixzbToiQ3Jvc3MtVGFiIn0sRU5USVRMRU1FTlRTOnttZXNzYWdlOiJTZXNzaW9uIFJlcGxheSBpcyBub3QgYWxsb3dlZCBhbmQgd2lsbCBub3QgYmUgc3RhcnRlZCIsc206IkVudGl0bGVtZW50In19LGQ9NWUzLGw9e0FQSToiYXBpIixSRVNVTUU6InJlc3VtZSIsU1dJVENIX1RPX0ZVTEw6InN3aXRjaFRvRnVsbCIsSU5JVElBTElaRToiaW5pdGlhbGl6ZSIsUFJFTE9BRDoicHJlbG9hZCJ9fSw2Mzg5OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQ9NTAwLHI9e30pe2NvbnN0IG49cj8ubGVhZGluZ3x8ITE7bGV0IGk7cmV0dXJuKC4uLnIpPT57biYmdm9pZCAwPT09aSYmKGUuYXBwbHkodGhpcyxyKSxpPXNldFRpbWVvdXQoKCk9PntpPWNsZWFyVGltZW91dChpKX0sdCkpLG58fChjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ZS5hcHBseSh0aGlzLHIpfSx0KSl9fWZ1bmN0aW9uIGkoZSl7bGV0IHQ9ITE7cmV0dXJuKC4uLnIpPT57dHx8KHQ9ITAsZS5hcHBseSh0aGlzLHIpKX19ci5kKHQse0o6KCk9PmksczooKT0+bn0pfSw2NjMwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5wYWdlVmlld0V2ZW50fSw2Nzc0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5qc2Vycm9yc30sNzI5NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtYdjooKT0+cyxnWDooKT0+aSxpVzooKT0+b30pO3ZhciBuPVtdO2Z1bmN0aW9uIGkoZSl7aWYoIWV8fG8oZSkpcmV0dXJuITE7aWYoMD09PW4ubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKCIqIj09PXIuaG9zdG5hbWUpcmV0dXJuITE7aWYoYShyLmhvc3RuYW1lLGUuaG9zdG5hbWUpJiZjKHIucGF0aG5hbWUsZS5wYXRobmFtZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwPT09ZS5ob3N0bmFtZX1mdW5jdGlvbiBzKGUpe2lmKG49W10sZSYmZS5sZW5ndGgpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoIXIpY29udGludWU7MD09PXIuaW5kZXhPZigiaHR0cDovLyIpP3I9ci5zdWJzdHJpbmcoNyk6MD09PXIuaW5kZXhPZigiaHR0cHM6Ly8iKSYmKHI9ci5zdWJzdHJpbmcoOCkpO2NvbnN0IGk9ci5pbmRleE9mKCIvIik7bGV0IG8scztpPjA/KG89ci5zdWJzdHJpbmcoMCxpKSxzPXIuc3Vic3RyaW5nKGkpKToobz1yLHM9IiIpO2xldFthXT1vLnNwbGl0KCI6Iik7bi5wdXNoKHtob3N0bmFtZTphLHBhdGhuYW1lOnN9KX19ZnVuY3Rpb24gYShlLHQpe3JldHVybiEoZS5sZW5ndGg+dC5sZW5ndGgpJiZ0LmluZGV4T2YoZSk9PT10Lmxlbmd0aC1lLmxlbmd0aH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIi8iKSYmKGU9ZS5zdWJzdHJpbmcoMSkpLDA9PT10LmluZGV4T2YoIi8iKSYmKHQ9dC5zdWJzdHJpbmcoMSkpLCIiPT09ZXx8ZT09PXR9fSw3Mzc4OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyRwOigpPT54LEJSOigpPT5iLEtwOigpPT5SLEwzOigpPT55LExjOigpPT5jLE5DOigpPT5vLFNHOigpPT5kLFRaOigpPT5pLFU2OigpPT5wLFVUOigpPT5tLGQzOigpPT53LGRUOigpPT5mLGU1OigpPT5FLGd4OigpPT52LGw5OigpPT5sLG9XOigpPT5oLG9wOigpPT5nLHJ3OigpPT51LHRIOigpPT5BLHVQOigpPT5hLHdXOigpPT5ULHhxOigpPT5zfSk7dmFyIG49cigzODQpO2NvbnN0IGk9cig4NjApLks3LnNwYSxvPVsiY2xpY2siLCJzdWJtaXQiLCJrZXlwcmVzcyIsImtleWRvd24iLCJrZXl1cCIsImNoYW5nZSJdLHM9OTk5LGE9ImZuLXN0YXJ0IixjPSJmbi1lbmQiLHU9ImNiLXN0YXJ0IixkPSJhcGktaXhuLSIsbD0icmVtYWluaW5nIixmPSJpbnRlcmFjdGlvbiIsaD0ic3BhTm9kZSIscD0ianNvbnBOb2RlIixnPSJmZXRjaC1zdGFydCIsbT0iZmV0Y2gtZG9uZSIsdj0iZmV0Y2gtYm9keS0iLGI9Impzb25wLWVuZCIseT0oMCxuLmRWKSgpLm8uU1Qsdz0iLXN0YXJ0IixSPSItZW5kIix4PSItYm9keSIsVD0iY2IiK1IsRT0ianNUaW1lIixBPSJmZXRjaCJ9LDc0ODU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7RDooKT0+aX0pO3ZhciBuPXIoNjE1NCk7ZnVuY3Rpb24gaShlKXtpZigwPT09KGV8fCIiKS5pbmRleE9mKCJkYXRhOiIpKXJldHVybntwcm90b2NvbDoiZGF0YSJ9O3RyeXtjb25zdCB0PW5ldyBVUkwoZSxsb2NhdGlvbi5ocmVmKSxyPXtwb3J0OnQucG9ydCxob3N0bmFtZTp0Lmhvc3RuYW1lLHBhdGhuYW1lOnQucGF0aG5hbWUsc2VhcmNoOnQuc2VhcmNoLHByb3RvY29sOnQucHJvdG9jb2wuc2xpY2UoMCx0LnByb3RvY29sLmluZGV4T2YoIjoiKSksc2FtZU9yaWdpbjp0LnByb3RvY29sPT09bi5nbT8ubG9jYXRpb24/LnByb3RvY29sJiZ0Lmhvc3Q9PT1uLmdtPy5sb2NhdGlvbj8uaG9zdH07cmV0dXJuIHIucG9ydCYmIiIhPT1yLnBvcnR8fCgiaHR0cDoiPT09dC5wcm90b2NvbCYmKHIucG9ydD0iODAiKSwiaHR0cHM6Ij09PXQucHJvdG9jb2wmJihyLnBvcnQ9IjQ0MyIpKSxyLnBhdGhuYW1lJiYiIiE9PXIucGF0aG5hbWU/ci5wYXRobmFtZS5zdGFydHNXaXRoKCIvIil8fChyLnBhdGhuYW1lPSIvIi5jb25jYXQoci5wYXRobmFtZSkpOnIucGF0aG5hbWU9Ii8iLHJ9Y2F0Y2goZSl7cmV0dXJue319fX0sNzY5OTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtJdDooKT0+byxLQzooKT0+YSxObzooKT0+aSxxaDooKT0+c30pO3ZhciBuPXIoODYwKTtjb25zdCBpPTE2ZTMsbz0xZTYscz0iU0VTU0lPTl9FUlJPUiIsYT17W24uSzcubG9nZ2luZ106ITAsW24uSzcuZ2VuZXJpY0V2ZW50c106ITEsW24uSzcuanNlcnJvcnNdOiExLFtuLks3LmFqYXhdOiExfX0sNzc2NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtWOigpPT5pfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPWU9Pm4uUkkmJiEwPT09ZT8ucHJpdmFjeS5jb29raWVzX2VuYWJsZWR9LDc4MzY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7UDooKT0+YSxlZTooKT0+Y30pO3ZhciBuPXIoMzg0KSxpPXIoODk5MCksbz1yKDI2NDYpLHM9cig1NjA3KTtjb25zdCBhPSJuckBjb250ZXh0OiIuY29uY2F0KHMuVyksYz1mdW5jdGlvbiBlKHQscil7dmFyIG49e30scz17fSxkPXt9LGw9ITE7dHJ5e2w9MTY9PT1yLmxlbmd0aCYmdS5pbml0aWFsaXplZEFnZW50cz8uW3JdPy5ydW50aW1lLmlzb2xhdGVkQmFja2xvZ31jYXRjaChlKXt9dmFyIGY9e29uOnAsYWRkRXZlbnRMaXN0ZW5lcjpwLHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uW2VdO2lmKCFyKXJldHVybjtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldPT09dCYmci5zcGxpY2UoaSwxKX0sZW1pdDpmdW5jdGlvbihlLHIsbixpLG8peyExIT09byYmKG89ITApO2lmKGMuYWJvcnRlZCYmIWkpcmV0dXJuO3QmJm8mJnQuZW1pdChlLHIsbik7dmFyIGE9aChuKTtnKGUpLmZvckVhY2goZT0+e2UuYXBwbHkoYSxyKX0pO3ZhciB1PXYoKVtzW2VdXTt1JiZ1LnB1c2goW2YsZSxyLGFdKTtyZXR1cm4gYX0sZ2V0Om0sbGlzdGVuZXJzOmcsY29udGV4dDpoLGJ1ZmZlcjpmdW5jdGlvbihlLHQpe2NvbnN0IHI9digpO2lmKHQ9dHx8ImZlYXR1cmUiLGYuYWJvcnRlZClyZXR1cm47T2JqZWN0LmVudHJpZXMoZXx8e30pLmZvckVhY2goKFtlLG5dKT0+e3Nbbl09dCx0IGluIHJ8fChyW3RdPVtdKX0pfSxhYm9ydDpmdW5jdGlvbigpe2YuX2Fib3J0ZWQ9ITAsT2JqZWN0LmtleXMoZi5iYWNrbG9nKS5mb3JFYWNoKGU9PntkZWxldGUgZi5iYWNrbG9nW2VdfSl9LGlzQnVmZmVyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiEhdigpW3NbZV1dfSxkZWJ1Z0lkOnIsYmFja2xvZzpsP3t9OnQmJiJvYmplY3QiPT10eXBlb2YgdC5iYWNrbG9nP3QuYmFja2xvZzp7fSxpc29sYXRlZEJhY2tsb2c6bH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJhYm9ydGVkIix7Z2V0OigpPT57bGV0IGU9Zi5fYWJvcnRlZHx8ITE7cmV0dXJuIGV8fCh0JiYoZT10LmFib3J0ZWQpLGUpfX0pLGY7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIG8ueT9lOmU/KDAsaS5JKShlLGEsKCk9Pm5ldyBvLnkoYSkpOm5ldyBvLnkoYSl9ZnVuY3Rpb24gcChlLHQpe25bZV09ZyhlKS5jb25jYXQodCl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbltlXXx8W119ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZFt0XT1kW3RdfHxlKGYsdCl9ZnVuY3Rpb24gdigpe3JldHVybiBmLmJhY2tsb2d9fSh2b2lkIDAsImdsb2JhbEVFIiksdT0oMCxuLlptKSgpO3UuZWV8fCh1LmVlPWMpfSw4MTIyOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse2E6KCk9Pml9KTt2YXIgbj1yKDk0NCk7ZnVuY3Rpb24gaShlLHQpe3RyeXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybigwLG4uUikoMyk7aWYoIXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4oMCxuLlIpKDQpO2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodCksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpLG89MD09PU9iamVjdC5rZXlzKHIpLmxlbmd0aD9lOnI7Zm9yKGxldCBzIGluIG8paWYodm9pZCAwIT09ZVtzXSl0cnl7aWYobnVsbD09PWVbc10pe3Jbc109bnVsbDtjb250aW51ZX1BcnJheS5pc0FycmF5KGVbc10pJiZBcnJheS5pc0FycmF5KHRbc10pP3Jbc109QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5lW3NdLC4uLnRbc11dKSk6Im9iamVjdCI9PXR5cGVvZiBlW3NdJiYib2JqZWN0Ij09dHlwZW9mIHRbc10/cltzXT1pKGVbc10sdFtzXSk6cltzXT1lW3NdfWNhdGNoKGUpe3Jbc118fCgwLG4uUikoMSxlKX1yZXR1cm4gcn1jYXRjaChlKXsoMCxuLlIpKDIsZSl9fX0sODEzOTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5mfSk7dmFyIG49cig3ODM2KSxpPXIoMzQzNCksbz1yKDg5OTApLHM9cig2MTU0KTtjb25zdCBhPXt9LGM9cy5nbS5YTUxIdHRwUmVxdWVzdCx1PSJhZGRFdmVudExpc3RlbmVyIixkPSJyZW1vdmVFdmVudExpc3RlbmVyIixsPSJuckB3cmFwcGVkOiIuY29uY2F0KG4uUCk7ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8bi5lZSkuZ2V0KCJldmVudHMiKX0oZSk7aWYoYVt0LmRlYnVnSWRdKyspcmV0dXJuIHQ7YVt0LmRlYnVnSWRdPTE7dmFyIHI9KDAsaS5ZTSkodCwhMCk7ZnVuY3Rpb24gZihlKXtyLmluUGxhY2UoZSxbdSxkXSwiLSIscCl9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlWzFdfXJldHVybiJnZXRQcm90b3R5cGVPZiJpbiBPYmplY3QmJihzLlJJJiZoKGRvY3VtZW50LGYpLGMmJmgoYy5wcm90b3R5cGUsZiksaChzLmdtLGYpKSx0Lm9uKHUrIi1zdGFydCIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdO2lmKG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJiJuZXdyZWxpYyIhPT1lWzBdKXt2YXIgaT0oMCxvLkkpKG4sbCxmdW5jdGlvbigpe3ZhciBlPXtvYmplY3Q6ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5oYW5kbGVFdmVudClyZXR1cm47cmV0dXJuIG4uaGFuZGxlRXZlbnQuYXBwbHkobixhcmd1bWVudHMpfSxmdW5jdGlvbjpufVt0eXBlb2Ygbl07cmV0dXJuIGU/cihlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIik6bn0pO3RoaXMud3JhcHBlZD1lWzFdPWl9fSksdC5vbihkKyItc3RhcnQiLGZ1bmN0aW9uKGUpe2VbMV09dGhpcy53cmFwcGVkfHxlWzFdfSksdH1mdW5jdGlvbiBoKGUsdCwuLi5yKXtsZXQgbj1lO2Zvcig7Im9iamVjdCI9PXR5cGVvZiBuJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdSk7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO24mJnQobiwuLi5yKX19LDgxNTQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7el86KCk9Pm8sWEc6KCk9PmEsVFo6KCk9Pm4scnM6KCk9PmkseFY6KCk9PnN9KTtyKDYxNTQpLHIoOTU2NikscigzODQpO2NvbnN0IG49cig4NjApLks3Lm1ldHJpY3MsaT0ic20iLG89ImNtIixzPSJzdG9yZVN1cHBvcnRhYmlsaXR5TWV0cmljcyIsYT0ic3RvcmVFdmVudE1ldHJpY3MifSw4Mzc0OihlLHQscik9PntyLm5jPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQ/LmN1cnJlbnRTY3JpcHQ/Lm5vbmNlfWNhdGNoKGUpe31yZXR1cm4iIn0pKCl9LDg5OTA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7STooKT0+aX0pO3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaShlLHQscil7aWYobi5jYWxsKGUsdCkpcmV0dXJuIGVbdF07dmFyIGk9cigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTppLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxpfWNhdGNoKGUpe31yZXR1cm4gZVt0XT1pLGl9fSw5MzAwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5hamF4fSw5MzI0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0FKOigpPT5zLEYzOigpPT5pLFhzOigpPT5vLFlxOigpPT5hLHh2OigpPT5ufSk7Y29uc3Qgbj0iMS4zMDMuMCIsaT0iUFJPRCIsbz0iQ0ROIixzPSJAbmV3cmVsaWMvcnJ3ZWIiLGE9IjEuMC4xIn0sOTU2NjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtMQTooKT0+YSxaRjooKT0+YyxiejooKT0+cyxlbDooKT0+dX0pO3ZhciBuPXIoNjE1NCk7Y29uc3QgaT0ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4IjtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU/MTUmZVt0XToxNipNYXRoLnJhbmRvbSgpfDB9ZnVuY3Rpb24gcygpe2NvbnN0IGU9bi5nbT8uY3J5cHRvfHxuLmdtPy5tc0NyeXB0bztsZXQgdCxyPTA7cmV0dXJuIGUmJmUuZ2V0UmFuZG9tVmFsdWVzJiYodD1lLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMCkpKSxpLnNwbGl0KCIiKS5tYXAoZT0+IngiPT09ZT9vKHQscisrKS50b1N0cmluZygxNik6InkiPT09ZT8oMyZvKCl8OCkudG9TdHJpbmcoMTYpOmUpLmpvaW4oIiIpfWZ1bmN0aW9uIGEoZSl7Y29uc3QgdD1uLmdtPy5jcnlwdG98fG4uZ20/Lm1zQ3J5cHRvO2xldCByLGk9MDt0JiZ0LmdldFJhbmRvbVZhbHVlcyYmKHI9dC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoZSkpKTtjb25zdCBzPVtdO2Zvcih2YXIgYT0wO2E8ZTthKyspcy5wdXNoKG8ocixpKyspLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHMuam9pbigiIil9ZnVuY3Rpb24gYygpe3JldHVybiBhKDE2KX1mdW5jdGlvbiB1KCl7cmV0dXJuIGEoMzIpfX0sOTkwODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtkOigpPT5uLHA6KCk9Pml9KTt2YXIgbj1yKDc4MzYpLmVlLmdldCgiaGFuZGxlIik7ZnVuY3Rpb24gaShlLHQscixpLG8pe28/KG8uYnVmZmVyKFtlXSxpKSxvLmVtaXQoZSx0LHIpKToobi5idWZmZXIoW2VdLGkpLG4uZW1pdChlLHQscikpfX19LG49e307ZnVuY3Rpb24gaShlKXt2YXIgdD1uW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbz1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gcltlXShvLG8uZXhwb3J0cyxpKSxvLmV4cG9ydHN9aS5tPXIsaS5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpaS5vKHQscikmJiFpLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxpLmY9e30saS5lPWU9PlByb21pc2UuYWxsKE9iamVjdC5rZXlzKGkuZikucmVkdWNlKCh0LHIpPT4oaS5mW3JdKGUsdCksdCksW10pKSxpLnU9ZT0+KHsyMTI6Im5yLXNwYS1jb21wcmVzc29yIiwyNDk6Im5yLXNwYS1yZWNvcmRlciIsNDc4OiJuci1zcGEifVtlXSsiLTEuMzAzLjAubWluLmpzIiksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxlPXt9LHQ9Ik5SQkEtMS4zMDMuMC5QUk9EOiIsaS5sPShyLG4sbyxzKT0+e2lmKGVbcl0pZVtyXS5wdXNoKG4pO2Vsc2V7dmFyIGEsYztpZih2b2lkIDAhPT1vKWZvcih2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgbD11W2RdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09cnx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT10K28pe2E9bDticmVha319aWYoIWEpe2M9ITA7dmFyIGY9ezQ3ODoic2hhNTEyLVExcExxY29pTm1MSHYwcnRxM3dGa0pCQTNrb2ZCZFJKbDBFeERsMG1UdUFvQ0JkMHFlLzFKMFhXckRsUUt1TmxVcnlMNmFaZlZrQU1QTG1vaWtXSW9RPT0iLDI0OToic2hhNTEyLTY5NVp6dWRzeGxNdEhLbnBETnZrTWxKZDN0ZE10WTAzSVFLVkN3OVNYMTJ0alVDK2Y3TnJ4NXRuV083MlZnOVJGZjZEU1k2d1ZtTTNjRWtSTTEya2tRPT0iLDIxMjoic2hhNTEyLTE4R3gxd0lCc3BwY24wQW5LRmh3Z3c0SWNpTmdGeGl3M0o3NFczOTNBcGUrd3RnNGhsZzd0NlNCS3NJRS9Eay90ZmwyeWx0Z2NnQkZ2WVJzMjgzQUZnPT0ifTsoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSkuY2hhcnNldD0idXRmLTgiLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsdCtvKSxhLnNyYz1yLDAhPT1hLnNyYy5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rIi8iKSYmKGEuY3Jvc3NPcmlnaW49ImFub255bW91cyIpLGZbc10mJihhLmludGVncml0eT1mW3NdKX1lW3JdPVtuXTt2YXIgaD0odCxuKT0+e2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChwKTt2YXIgaT1lW3JdO2lmKGRlbGV0ZSBlW3JdLGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGkmJmkuZm9yRWFjaChlPT5lKG4pKSx0KXJldHVybiB0KG4pfSxwPXNldFRpbWVvdXQoaC5iaW5kKG51bGwsdm9pZCAwLHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6YX0pLDEyZTQpO2Eub25lcnJvcj1oLmJpbmQobnVsbCxhLm9uZXJyb3IpLGEub25sb2FkPWguYmluZChudWxsLGEub25sb2FkKSxjJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX0saS5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLnA9Imh0dHBzOi8vanMtYWdlbnQubmV3cmVsaWMuY29tLyIsKCgpPT57dmFyIGU9ezM4OjAsNzg4OjB9O2kuZi5qPSh0LHIpPT57dmFyIG49aS5vKGUsdCk/ZVt0XTp2b2lkIDA7aWYoMCE9PW4paWYobilyLnB1c2goblsyXSk7ZWxzZXt2YXIgbz1uZXcgUHJvbWlzZSgocixpKT0+bj1lW3RdPVtyLGldKTtyLnB1c2goblsyXT1vKTt2YXIgcz1pLnAraS51KHQpLGE9bmV3IEVycm9yO2kubChzLHI9PntpZihpLm8oZSx0KSYmKDAhPT0obj1lW3RdKSYmKGVbdF09dm9pZCAwKSxuKSl7dmFyIG89ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSxzPXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmM7YS5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrdCsiIGZhaWxlZC5cbigiK28rIjogIitzKyIpIixhLm5hbWU9IkNodW5rTG9hZEVycm9yIixhLnR5cGU9byxhLnJlcXVlc3Q9cyxuWzFdKGEpfX0sImNodW5rLSIrdCx0KX19O3ZhciB0PSh0LHIpPT57dmFyIG4sbyxbcyxhLGNdPXIsdT0wO2lmKHMuc29tZSh0PT4wIT09ZVt0XSkpe2ZvcihuIGluIGEpaS5vKGEsbikmJihpLm1bbl09YVtuXSk7aWYoYyljKGkpfWZvcih0JiZ0KHIpO3U8cy5sZW5ndGg7dSsrKW89c1t1XSxpLm8oZSxvKSYmZVtvXSYmZVtvXVswXSgpLGVbb109MH0scj1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXT1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXXx8W107ci5mb3JFYWNoKHQuYmluZChudWxsLDApKSxyLnB1c2g9dC5iaW5kKG51bGwsci5wdXNoLmJpbmQocikpfSkoKSwoKCk9PnsidXNlIHN0cmljdCI7aSg4Mzc0KTt2YXIgZT1pKDk1NjYpLHQ9aSgxNzQxKTtjbGFzcyByIGV4dGVuZHMgdC5Xe2FnZW50SWRlbnRpZmllcj0oMCxlLkxBKSgxNil9dmFyIG49aSg4NjApO2NvbnN0IG89T2JqZWN0LnZhbHVlcyhuLks3KTt2YXIgcz1pKDUyMDUpO3ZhciBhPWkoOTkwOCksYz1pKDE4NjMpLHU9aSg0MjYxKSxkPWkoMzI0MSksbD1pKDk0NCksZj1pKDU3MDEpLGg9aSg4MTU0KTtmdW5jdGlvbiBwKGUsdCxpLG8pe2NvbnN0IHM9b3x8aTshc3x8c1tlXSYmc1tlXSE9PXIucHJvdG90eXBlW2VdfHwoc1tlXT1mdW5jdGlvbigpeygwLGEucCkoaC54VixbIkFQSS8iK2UrIi9jYWxsZWQiXSx2b2lkIDAsbi5LNy5tZXRyaWNzLGkuZWUpLCgwLGQuVykoe2FnZW50SWRlbnRpZmllcjppLmFnZW50SWRlbnRpZmllcixkcmFpbmVkOiEhZi5CPy5baS5hZ2VudElkZW50aWZpZXJdLHR5cGU6ImRhdGEiLG5hbWU6ImFwaSIsZmVhdHVyZTp1LlBsK2UsZGF0YTp7fX0pO3RyeXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7KDAsbC5SKSgyMyxlKX19KX1mdW5jdGlvbiBnKGUsdCxyLG4saSl7Y29uc3Qgbz1lLmluZm87bnVsbD09PXI/ZGVsZXRlIG8uanNBdHRyaWJ1dGVzW3RdOm8uanNBdHRyaWJ1dGVzW3RdPXIsKGl8fG51bGw9PT1yKSYmKDAsYS5wKSh1LlBsK24sWygwLGMudCkoKSx0LHJdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSl9dmFyIG09aSgxNjg3KSx2PWkoNDIzNCksYj1pKDUyODkpLHk9aSg2MTU0KSx3PWkoNTI3MCksUj1pKDc3NjcpLHg9aSg2Mzg5KSxUPWkoNzY5OSk7Y2xhc3MgRSBleHRlbmRzIHYuV3tjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUuYWdlbnRJZGVudGlmaWVyLHQpLHRoaXMuYWdlbnRSZWY9ZSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDAsdGhpcy5mZWF0QWdncmVnYXRlPXZvaWQgMCx0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT12b2lkIDAsdGhpcy5vbkFnZ3JlZ2F0ZUltcG9ydGVkPW5ldyBQcm9taXNlKGU9Pnt0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT1lfSksdGhpcy5kZWZlcnJlZD1Qcm9taXNlLnJlc29sdmUoKSwhMT09PWUuaW5pdFt0aGlzLmZlYXR1cmVOYW1lXS5hdXRvU3RhcnQ/dGhpcy5kZWZlcnJlZD1uZXcgUHJvbWlzZSgodCxyKT0+e3RoaXMuZWUub24oIm1hbnVhbC1zdGFydC1hbGwiLCgwLHguSikoKCk9PnsoMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0aGlzLmZlYXR1cmVOYW1lKSx0KCl9KSl9KTooMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0KX1pbXBvcnRBZ2dyZWdhdG9yKGUsdCxyPXt9KXtpZih0aGlzLmZlYXRBZ2dyZWdhdGUpcmV0dXJuO2NvbnN0IG49YXN5bmMoKT0+e2xldCBuO2F3YWl0IHRoaXMuZGVmZXJyZWQ7dHJ5e2lmKCgwLFIuVikoZS5pbml0KSl7Y29uc3R7c2V0dXBBZ2VudFNlc3Npb246dH09YXdhaXQgaS5lKDQ3OCkudGhlbihpLmJpbmQoaSw4NzY2KSk7bj10KGUpfX1jYXRjaChlKXsoMCxsLlIpKDIwLGUpLHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksKDAsYS5wKShULnFoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX10cnl7aWYoIXRoaXMuI3QodGhpcy5mZWF0dXJlTmFtZSxuLGUuaW5pdCkpcmV0dXJuKDAsbS5aZSkodGhpcy5hZ2VudElkZW50aWZpZXIsdGhpcy5mZWF0dXJlTmFtZSksdm9pZCB0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseSghMSk7Y29uc3R7QWdncmVnYXRlOml9PWF3YWl0IHQoKTt0aGlzLmZlYXRBZ2dyZWdhdGU9bmV3IGkoZSxyKSxlLnJ1bnRpbWUuaGFydmVzdGVyLmluaXRpYWxpemVkQWdncmVnYXRlcy5wdXNoKHRoaXMuZmVhdEFnZ3JlZ2F0ZSksdGhpcy5sb2FkZWRTdWNjZXNzZnVsbHkoITApfWNhdGNoKGUpeygwLGwuUikoMzQsZSksdGhpcy5hYm9ydEhhbmRsZXI/LigpLCgwLG0uWmUpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUsITApLHRoaXMubG9hZGVkU3VjY2Vzc2Z1bGx5KCExKSx0aGlzLmVlJiZ0aGlzLmVlLmFib3J0KCl9fTt5LlJJPygwLGIuR0cpKCgpPT5uKCksITApOm4oKX0jdChlLHQscil7aWYodGhpcy5ibG9ja2VkKXJldHVybiExO3N3aXRjaChlKXtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm4oMCx3LlNSKShyKSYmISF0O2Nhc2Ugbi5LNy5zZXNzaW9uVHJhY2U6cmV0dXJuISF0O2RlZmF1bHQ6cmV0dXJuITB9fX12YXIgQT1pKDY2MzApLFM9aSgyNjE0KTtjbGFzcyBfIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9QS5UO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQS5UKSx0aGlzLnNldHVwSW5zcGVjdGlvbkV2ZW50cyhlLmFnZW50SWRlbnRpZmllciksdD1lLHAodS5GdyxmdW5jdGlvbihlLHIpeyJzdHJpbmciPT10eXBlb2YgZSYmKCIvIiE9PWUuY2hhckF0KDApJiYoZT0iLyIrZSksdC5ydW50aW1lLmN1c3RvbVRyYW5zYWN0aW9uPShyfHwiaHR0cDovL2N1c3RvbS50cmFuc2FjdGlvbiIpK2UsKDAsYS5wKSh1LlBsK3UuRncsWygwLGMudCkoKV0sdm9pZCAwLHZvaWQgMCx0LmVlKSl9LHQpLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDE5ODMpKSl9c2V0dXBJbnNwZWN0aW9uRXZlbnRzKGUpe2NvbnN0IHQ9KHQscik9Pnt0JiYoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0aW1lU3RhbXA6dC50aW1lU3RhbXAsbG9hZGVkOiJjb21wbGV0ZSI9PT10LnRhcmdldC5yZWFkeVN0YXRlLHR5cGU6IndpbmRvdyIsbmFtZTpyLGRhdGE6dC50YXJnZXQubG9jYXRpb24rIiJ9KX07KDAsYi5zQikoZT0+e3QoZSwiRE9NQ29udGVudExvYWRlZCIpfSksKDAsYi5HRykoZT0+e3QoZSwibG9hZCIpfSksKDAsYi5RcikoZT0+e3QoZSwibmF2aWdhdGUiKX0pLHRoaXMuZWUub24oUy50Uy5VUERBVEUsKHQscik9PnsoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6InNlc3Npb24iLGRhdGE6cn0pfSl9fXZhciBPPWkoMzg0KTt2YXIgTj1pKDI4NDMpLEk9aSgzODc4KSxQPWkoNzgyKTtjbGFzcyBqIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9UC5UO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsUC5UKSx5LlJJJiYoKDAsTi51KSgoKT0+KDAsYS5wKSgiZG9jSGlkZGVuIixbKDAsYy50KSgpXSx2b2lkIDAsUC5ULHRoaXMuZWUpLCEwKSwoMCxJLnNwKSgicGFnZWhpZGUiLCgpPT4oMCxhLnApKCJ3aW5QYWdlaGlkZSIsWygwLGMudCkoKV0sdm9pZCAwLFAuVCx0aGlzLmVlKSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksOTkxNykpKSl9fWNsYXNzIGsgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1oLlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsaC5UWikseS5SSSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLGU9PnsoMCxhLnApKGgueFYsWyJHZW5lcmljL0NTUFZpb2xhdGlvbi9EZXRlY3RlZCJdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjU1NSkpKX19dmFyIEM9aSg2Nzc0KSxMPWkoMzMwNCk7Y2xhc3MgSHtjb25zdHJ1Y3RvcihlLHQscixuLGkpe3RoaXMubmFtZT0iVW5jYXVnaHRFcnJvciIsdGhpcy5tZXNzYWdlPSJzdHJpbmciPT10eXBlb2YgZT9lOigwLEwuQSkoZSksdGhpcy5zb3VyY2VVUkw9dCx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1uLHRoaXMuX19uZXdyZWxpYz1pfX1mdW5jdGlvbiBNKGUpe3JldHVybiBVKGUpP2U6bmV3IEgodm9pZCAwIT09ZT8ubWVzc2FnZT9lLm1lc3NhZ2U6ZSxlPy5maWxlbmFtZXx8ZT8uc291cmNlVVJMLGU/LmxpbmVub3x8ZT8ubGluZSxlPy5jb2xub3x8ZT8uY29sLGU/Ll9fbmV3cmVsaWMsZT8uY2F1c2UpfWZ1bmN0aW9uIEsoZSl7Y29uc3QgdD0iVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiAiO2lmKCFlPy5yZWFzb24pcmV0dXJuO2lmKFUoZS5yZWFzb24pKXt0cnl7ZS5yZWFzb24ubWVzc2FnZS5zdGFydHNXaXRoKHQpfHwoZS5yZWFzb24ubWVzc2FnZT10K2UucmVhc29uLm1lc3NhZ2UpfWNhdGNoKGUpe31yZXR1cm4gTShlLnJlYXNvbil9Y29uc3Qgcj1NKGUucmVhc29uKTtyZXR1cm4oci5tZXNzYWdlfHwiIikuc3RhcnRzV2l0aCh0KXx8KHIubWVzc2FnZT10K3IubWVzc2FnZSkscn1mdW5jdGlvbiBEKGUpe2lmKGUuZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvciYmIS86XGQrJC8udGVzdChlLmVycm9yLnN0YWNrPy50cmltKCkpKXtjb25zdCB0PW5ldyBIKGUubWVzc2FnZSxlLmZpbGVuYW1lLGUubGluZW5vLGUuY29sbm8sZS5lcnJvci5fX25ld3JlbGljLGUuY2F1c2UpO3JldHVybiB0Lm5hbWU9U3ludGF4RXJyb3IubmFtZSx0fXJldHVybiBVKGUuZXJyb3IpP2UuZXJyb3I6TShlKX1mdW5jdGlvbiBVKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3ImJiEhZS5zdGFja31mdW5jdGlvbiBGKGUsdCxyLGksbz0oMCxjLnQpKCkpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9bmV3IEVycm9yKGUpKSwoMCxhLnApKCJlcnIiLFtlLG8sITEsdCxyLnJ1bnRpbWUuaXNSZWNvcmRpbmcsdm9pZCAwLGldLHZvaWQgMCxuLks3LmpzZXJyb3JzLHIuZWUpLCgwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHIuZWUpfXZhciBXPWkoNDM4NyksQj1pKDk5MyksVj1pKDM3ODUpO2Z1bmN0aW9uIEcoZSx7Y3VzdG9tQXR0cmlidXRlczp0PXt9LGxldmVsOnI9Qi5wXy5JTkZPfT17fSxuLGksbz0oMCxjLnQpKCkpeygwLFYuUikobi5lZSxlLHQscixpLG8pfWZ1bmN0aW9uIHooZSx0LHIsaSxvPSgwLGMudCkoKSl7KDAsYS5wKSh1LlBsK3UuaEcsW28sZSx0LGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSl9ZnVuY3Rpb24gWihlLHQscixpLG89KDAsYy50KSgpKXtjb25zdHtzdGFydDpzLGVuZDpkLGN1c3RvbUF0dHJpYnV0ZXM6Zn09dHx8e30saD17Y3VzdG9tQXR0cmlidXRlczpmfHx7fX07aWYoIm9iamVjdCIhPXR5cGVvZiBoLmN1c3RvbUF0dHJpYnV0ZXN8fCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiB2b2lkKDAsbC5SKSg1Nyk7Y29uc3QgcD0oZSx0KT0+bnVsbD09ZT90OiJudW1iZXIiPT10eXBlb2YgZT9lOmUgaW5zdGFuY2VvZiBQZXJmb3JtYW5jZU1hcms/ZS5zdGFydFRpbWU6TnVtYmVyLk5hTjtpZihoLnN0YXJ0PXAocywwKSxoLmVuZD1wKGQsbyksTnVtYmVyLmlzTmFOKGguc3RhcnQpfHxOdW1iZXIuaXNOYU4oaC5lbmQpKSgwLGwuUikoNTcpO2Vsc2V7aWYoaC5kdXJhdGlvbj1oLmVuZC1oLnN0YXJ0LCEoaC5kdXJhdGlvbjwwKSlyZXR1cm4oMCxhLnApKHUuUGwrdS5WMSxbaCxlLGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSksaDsoMCxsLlIpKDU4KX19ZnVuY3Rpb24gcShlLHQ9e30scixpLG89KDAsYy50KSgpKXsoMCxhLnApKHUuUGwrdS5mRixbbyxlLHQsaV0sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyxyLmVlKX1mdW5jdGlvbiBYKGUpe3AodS5lWSxmdW5jdGlvbih0KXtyZXR1cm4gWShlLHQpfSxlKX1mdW5jdGlvbiBZKGUsdCxyKXtjb25zdCBpPXt9OygwLGwuUikoNTQsIm5ld3JlbGljLnJlZ2lzdGVyIiksdHx8PXt9LHQuZXZlbnRTb3VyY2U9Ik1pY3JvRnJvbnRlbmRCcm93c2VyQWdlbnQiLHQubGljZW5zZUtleXx8PWUuaW5mby5saWNlbnNlS2V5LHQuYmxvY2tlZD0hMSx0LnBhcmVudD1yfHx7fTtsZXQgbz0oKT0+e307Y29uc3Qgcz1lLnJ1bnRpbWUucmVnaXN0ZXJlZEVudGl0aWVzLHU9cy5maW5kKCh7bWV0YWRhdGE6e3RhcmdldDp7aWQ6ZSxuYW1lOnJ9fX0pPT5lPT09dC5pZCk7aWYodSlyZXR1cm4gdS5tZXRhZGF0YS50YXJnZXQubmFtZSE9PXQubmFtZSYmKHUubWV0YWRhdGEudGFyZ2V0Lm5hbWU9dC5uYW1lKSx1O2NvbnN0IGQ9ZT0+e3QuYmxvY2tlZD0hMCxvPWV9O2UuaW5pdC5hcGkuYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbnx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDU1KSkpLCgwLFcuYzcpKHQpfHxkKCgwLHguSikoKCk9PigwLGwuUikoNDgsdCkpKSwoMCxXLnlvKSh0LmlkKSYmKDAsVy55bykodC5uYW1lKXx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDQ4LHQpKSk7Y29uc3QgZj17YWRkUGFnZUFjdGlvbjoocixuPXt9KT0+bSh6LFtyLHsuLi5pLC4uLm59LGVdLHQpLGxvZzoocixuPXt9KT0+bShHLFtyLHsuLi5uLGN1c3RvbUF0dHJpYnV0ZXM6ey4uLmksLi4ubi5jdXN0b21BdHRyaWJ1dGVzfHx7fX19LGVdLHQpLG1lYXN1cmU6KHIsbj17fSk9Pm0oWixbcix7Li4ubixjdXN0b21BdHRyaWJ1dGVzOnsuLi5pLC4uLm4uY3VzdG9tQXR0cmlidXRlc3x8e319fSxlXSx0KSxub3RpY2VFcnJvcjoocixuPXt9KT0+bShGLFtyLHsuLi5pLC4uLm59LGVdLHQpLHJlZ2lzdGVyOih0PXt9KT0+bShZLFtlLHRdLGYubWV0YWRhdGEudGFyZ2V0KSxyZWNvcmRDdXN0b21FdmVudDoocixuPXt9KT0+bShxLFtyLHsuLi5pLC4uLm59LGVdLHQpLHNldEFwcGxpY2F0aW9uVmVyc2lvbjplPT5nKCJhcHBsaWNhdGlvbi52ZXJzaW9uIixlKSxzZXRDdXN0b21BdHRyaWJ1dGU6KGUsdCk9PmcoZSx0KSxzZXRVc2VySWQ6ZT0+ZygiZW5kdXNlci5pZCIsZSksbWV0YWRhdGE6e2N1c3RvbUF0dHJpYnV0ZXM6aSx0YXJnZXQ6dH19LHA9KCk9Pih0LmJsb2NrZWQmJm8oKSx0LmJsb2NrZWQpO3AoKXx8cy5wdXNoKGYpO2NvbnN0IGc9KGUsdCk9PntwKCl8fChpW2VdPXQpfSxtPSh0LHIsaSk9PntpZihwKCkpcmV0dXJuO2NvbnN0IG89KDAsYy50KSgpOygwLGEucCkoaC54VixbIkFQSS9yZWdpc3Rlci8iLmNvbmNhdCh0Lm5hbWUsIi9jYWxsZWQiKV0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKTt0cnl7cmV0dXJuIGUuaW5pdC5hcGkuZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YSYmInJlZ2lzdGVyIiE9PXQubmFtZSYmdCguLi5yLHZvaWQgMCxvKSx0KC4uLnIsaSxvKX1jYXRjaChlKXsoMCxsLlIpKDUwLGUpfX07cmV0dXJuIGZ9Y2xhc3MgSiBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPUMuVDtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEMuVCksdD1lLHAodS5vNSwoZSxyKT0+RihlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LmJ0LGZ1bmN0aW9uKHQpe2UucnVudGltZS5vbmVycm9yPXR9LGUpfShlKSxmdW5jdGlvbihlKXtsZXQgdD0wO3AodS5rNixmdW5jdGlvbihlLHIpeysrdD4xMHx8KHRoaXMucnVudGltZS5yZWxlYXNlSWRzW2Uuc2xpY2UoLTIwMCldPSgiIityKS5zbGljZSgtMjAwKSl9LGUpfShlKSxYKGUpO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9dGhpcy5lZS5vbigiaW50ZXJuYWwtZXJyb3IiLCh0LHIpPT57dGhpcy5hYm9ydEhhbmRsZXImJigwLGEucCkoImllcnIiLFtNKHQpLCgwLGMudCkoKSwhMCx7fSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmcscl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9KSx5LmdtLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsdD0+e3RoaXMuYWJvcnRIYW5kbGVyJiYoMCxhLnApKCJlcnIiLFtLKHQpLCgwLGMudCkoKSwhMSx7dW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbjoxfSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmddLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHkuZ20uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHQ9Pnt0aGlzLmFib3J0SGFuZGxlciYmKDAsYS5wKSgiZXJyIixbRCh0KSwoMCxjLnQpKCksITEse30sZS5ydW50aW1lLmlzUmVjb3JkaW5nXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0sKDAsSS5qVCkoITEsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDIxNzYpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgUT1pKDg5OTApO2xldCBlZT0xO2Z1bmN0aW9uIHRlKGUpe2NvbnN0IHQ9dHlwZW9mIGU7cmV0dXJuIWV8fCJvYmplY3QiIT09dCYmImZ1bmN0aW9uIiE9PXQ/LTE6ZT09PXkuZ20/MDooMCxRLkkpKGUsIm5yQGlkIixmdW5jdGlvbigpe3JldHVybiBlZSsrfSl9ZnVuY3Rpb24gcmUoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aClyZXR1cm4gZS5sZW5ndGg7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJmUuYnl0ZUxlbmd0aClyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmZSBpbnN0YW5jZW9mIEJsb2ImJmUuc2l6ZSlyZXR1cm4gZS5zaXplO2lmKCEoInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSl0cnl7cmV0dXJuKDAsTC5BKShlKS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJufX19dmFyIG5lPWkoODEzOSksaWU9aSg3ODM2KSxvZT1pKDM0MzQpO2NvbnN0IHNlPXt9LGFlPVsib3BlbiIsInNlbmQiXTtmdW5jdGlvbiBjZShlKXt2YXIgdD1lfHxpZS5lZTtjb25zdCByPWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJ4aHIiKX0odCk7aWYodm9pZCAwPT09eS5nbS5YTUxIdHRwUmVxdWVzdClyZXR1cm4gcjtpZihzZVtyLmRlYnVnSWRdKyspcmV0dXJuIHI7c2Vbci5kZWJ1Z0lkXT0xLCgwLG5lLnUpKHQpO3ZhciBuPSgwLG9lLllNKShyKSxpPXkuZ20uWE1MSHR0cFJlcXVlc3Qsbz15LmdtLk11dGF0aW9uT2JzZXJ2ZXIscz15LmdtLlByb21pc2UsYT15LmdtLnNldEludGVydmFsLGM9InJlYWR5c3RhdGVjaGFuZ2UiLHU9WyJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9ubG9hZHN0YXJ0Iiwib25sb2FkZW5kIiwib25wcm9ncmVzcyIsIm9udGltZW91dCJdLGQ9W10sZj15LmdtLlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IGkoZSksbz1yLmNvbnRleHQodCk7dHJ5e3IuZW1pdCgibmV3LXhociIsW3RdLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcihjLChzPW8sZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UucmVhZHlTdGF0ZT4zJiYhcy5yZXNvbHZlZCYmKHMucmVzb2x2ZWQ9ITAsci5lbWl0KCJ4aHItcmVzb2x2ZWQiLFtdLGUpKSxuLmluUGxhY2UoZSx1LCJmbi0iLGIpfSksKDAsSS5qVCkoITEpKX1jYXRjaChlKXsoMCxsLlIpKDE1LGUpO3RyeXtyLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe319dmFyIHM7cmV0dXJuIHR9O2Z1bmN0aW9uIGgoZSx0KXtuLmluUGxhY2UodCxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iLGIpfWlmKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfShpLGYpLGYucHJvdG90eXBlPWkucHJvdG90eXBlLG4uaW5QbGFjZShmLnByb3RvdHlwZSxhZSwiLXhoci0iLGIpLHIub24oInNlbmQteGhyLXN0YXJ0IixmdW5jdGlvbihlLHQpe2goZSx0KSxmdW5jdGlvbihlKXtkLnB1c2goZSksbyYmKHA/cC50aGVuKHYpOmE/YSh2KTooZz0tZyxtLmRhdGE9ZykpfSh0KX0pLHIub24oIm9wZW4teGhyLXN0YXJ0IixoKSxvKXt2YXIgcD1zJiZzLnJlc29sdmUoKTtpZighYSYmIXMpe3ZhciBnPTEsbT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnKTtuZXcgbyh2KS5vYnNlcnZlKG0se2NoYXJhY3RlckRhdGE6ITB9KX19ZWxzZSB0Lm9uKCJmbi1lbmQiLGZ1bmN0aW9uKGUpe2VbMF0mJmVbMF0udHlwZT09PWN8fHYoKX0pO2Z1bmN0aW9uIHYoKXtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyloKDAsZFtlXSk7ZC5sZW5ndGgmJihkPVtdKX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIHR9cmV0dXJuIHJ9dmFyIHVlPSJmZXRjaC0iLGRlPXVlKyJib2R5LSIsbGU9WyJhcnJheUJ1ZmZlciIsImJsb2IiLCJqc29uIiwidGV4dCIsImZvcm1EYXRhIl0sZmU9eS5nbS5SZXF1ZXN0LGhlPXkuZ20uUmVzcG9uc2UscGU9InByb3RvdHlwZSI7Y29uc3QgZ2U9e307ZnVuY3Rpb24gbWUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgiZmV0Y2giKX0oZSk7aWYoIShmZSYmaGUmJnkuZ20uZmV0Y2gpKXJldHVybiB0O2lmKGdlW3QuZGVidWdJZF0rKylyZXR1cm4gdDtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lW3JdOyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoZVtyXT1mdW5jdGlvbigpe3ZhciBlLHI9Wy4uLmFyZ3VtZW50c10sbz17fTt0LmVtaXQobisiYmVmb3JlLXN0YXJ0Iixbcl0sbyksb1tpZS5QXSYmb1tpZS5QXS5kdCYmKGU9b1tpZS5QXS5kdCk7dmFyIHM9aS5hcHBseSh0aGlzLHIpO3JldHVybiB0LmVtaXQobisic3RhcnQiLFtyLGVdLHMpLHMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5lbWl0KG4rImVuZCIsW251bGwsZV0scyksZX0sZnVuY3Rpb24oZSl7dGhyb3cgdC5lbWl0KG4rImVuZCIsW2VdLHMpLGV9KX0pfXJldHVybiBnZVt0LmRlYnVnSWRdPTEsbGUuZm9yRWFjaChlPT57cihmZVtwZV0sZSxkZSkscihoZVtwZV0sZSxkZSl9KSxyKHkuZ20sImZldGNoIix1ZSksdC5vbih1ZSsiZW5kIixmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYocil7dmFyIGk9ci5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKTtudWxsIT09aSYmKG4ucnhTaXplPWkpLHQuZW1pdCh1ZSsiZG9uZSIsW251bGwscl0sbil9ZWxzZSB0LmVtaXQodWUrImRvbmUiLFtlXSxuKX0pLHR9dmFyIHZlPWkoNzQ4NSk7Y2xhc3MgYmV7Y29uc3RydWN0b3IoZSl7dGhpcy5hZ2VudFJlZj1lfWdlbmVyYXRlVHJhY2VQYXlsb2FkKHQpe2NvbnN0IHI9dGhpcy5hZ2VudFJlZi5sb2FkZXJfY29uZmlnO2lmKCF0aGlzLnNob3VsZEdlbmVyYXRlVHJhY2UodCl8fCFyKXJldHVybiBudWxsO3ZhciBuPShyLmFjY291bnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwsaT0oci5hZ2VudElEfHwiIikudG9TdHJpbmcoKXx8bnVsbCxvPShyLnRydXN0S2V5fHwiIikudG9TdHJpbmcoKXx8bnVsbDtpZighbnx8IWkpcmV0dXJuIG51bGw7dmFyIHM9KDAsZS5aRikoKSxhPSgwLGUuZWwpKCksYz1EYXRlLm5vdygpLHU9e3NwYW5JZDpzLHRyYWNlSWQ6YSx0aW1lc3RhbXA6Y307cmV0dXJuKHQuc2FtZU9yaWdpbnx8dGhpcy5pc0FsbG93ZWRPcmlnaW4odCkmJnRoaXMudXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKSkmJih1LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0UGFyZW50SGVhZGVyKHMsYSksdS50cmFjZUNvbnRleHRTdGF0ZUhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0U3RhdGVIZWFkZXIocyxjLG4saSxvKSksKHQuc2FtZU9yaWdpbiYmIXRoaXMuZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl8fCF0LnNhbWVPcmlnaW4mJnRoaXMuaXNBbGxvd2VkT3JpZ2luKHQpJiZ0aGlzLnVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpKSYmKHUubmV3cmVsaWNIZWFkZXI9dGhpcy5nZW5lcmF0ZVRyYWNlSGVhZGVyKHMsYSxjLG4saSxvKSksdX1nZW5lcmF0ZVRyYWNlQ29udGV4dFBhcmVudEhlYWRlcihlLHQpe3JldHVybiIwMC0iK3QrIi0iK2UrIi0wMSJ9Z2VuZXJhdGVUcmFjZUNvbnRleHRTdGF0ZUhlYWRlcihlLHQscixuLGkpe3JldHVybiBpKyJAbnI9MC0xLSIrcisiLSIrbisiLSIrZSsiLS0tLSIrdH1nZW5lcmF0ZVRyYWNlSGVhZGVyKGUsdCxyLG4saSxvKXtpZighKCJmdW5jdGlvbiI9PXR5cGVvZiB5LmdtPy5idG9hKSlyZXR1cm4gbnVsbDt2YXIgcz17djpbMCwxXSxkOnt0eToiQnJvd3NlciIsYWM6bixhcDppLGlkOmUsdHI6dCx0aTpyfX07cmV0dXJuIG8mJm4hPT1vJiYocy5kLnRrPW8pLGJ0b2EoKDAsTC5BKShzKSl9c2hvdWxkR2VuZXJhdGVUcmFjZShlKXtyZXR1cm4gdGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nPy5lbmFibGVkJiZ0aGlzLmlzQWxsb3dlZE9yaWdpbihlKX1pc0FsbG93ZWRPcmlnaW4oZSl7dmFyIHQ9ITE7Y29uc3Qgcj10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7aWYoZS5zYW1lT3JpZ2luKXQ9ITA7ZWxzZSBpZihyPy5hbGxvd2VkX29yaWdpbnMgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG49MDtuPHIuYWxsb3dlZF9vcmlnaW5zLmxlbmd0aDtuKyspe3ZhciBpPSgwLHZlLkQpKHIuYWxsb3dlZF9vcmlnaW5zW25dKTtpZihlLmhvc3RuYW1lPT09aS5ob3N0bmFtZSYmZS5wcm90b2NvbD09PWkucHJvdG9jb2wmJmUucG9ydD09PWkucG9ydCl7dD0hMDticmVha319cmV0dXJuIHR9ZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl7dmFyIGU9dGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nO3JldHVybiEhZSYmISFlLmV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyfXVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpe3ZhciBlPXRoaXMuYWdlbnRSZWYuaW5pdD8uZGlzdHJpYnV0ZWRfdHJhY2luZztyZXR1cm4hIWUmJiExIT09ZS5jb3JzX3VzZV9uZXdyZWxpY19oZWFkZXJ9dXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKXt2YXIgZT10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7cmV0dXJuISFlJiYhIWUuY29yc191c2VfdHJhY2Vjb250ZXh0X2hlYWRlcnN9fXZhciB5ZT1pKDkzMDApLHdlPWkoNzI5NSk7ZnVuY3Rpb24gUmUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSBpbnN0YW5jZW9mKDAsTy5kVikoKS5vLlJFUT9lLnVybDp5LmdtPy5VUkwmJmUgaW5zdGFuY2VvZiBVUkw/ZS5ocmVmOnZvaWQgMH12YXIgeGU9WyJsb2FkIiwiZXJyb3IiLCJhYm9ydCIsInRpbWVvdXQiXSxUZT14ZS5sZW5ndGgsRWU9KDAsTy5kVikoKS5vLlJFUSxBZT0oMCxPLmRWKSgpLm8uWEhSO2NvbnN0IFNlPSJYLU5ld1JlbGljLUFwcC1EYXRhIjtjbGFzcyBfZSBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXllLlQ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSx5ZS5UKSx0aGlzLmR0PW5ldyBiZShlKSx0aGlzLmhhbmRsZXI9KGUsdCxyLG4pPT4oMCxhLnApKGUsdCxyLG4sdGhpcy5lZSk7dHJ5e2NvbnN0IGU9e3htbGh0dHByZXF1ZXN0OiJ4aHIiLGZldGNoOiJmZXRjaCIsYmVhY29uOiJiZWFjb24ifTt5LmdtPy5wZXJmb3JtYW5jZT8uZ2V0RW50cmllc0J5VHlwZSgicmVzb3VyY2UiKS5mb3JFYWNoKHQ9PntpZih0LmluaXRpYXRvclR5cGUgaW4gZSYmMCE9PXQucmVzcG9uc2VTdGF0dXMpe2NvbnN0IHI9e3N0YXR1czp0LnJlc3BvbnNlU3RhdHVzfSxpPXtyeFNpemU6dC50cmFuc2ZlclNpemUsZHVyYXRpb246TWF0aC5mbG9vcih0LmR1cmF0aW9uKSxjYlRpbWU6MH07T2Uocix0Lm5hbWUpLHRoaXMuaGFuZGxlcigieGhyIixbcixpLHQuc3RhcnRUaW1lLHQucmVzcG9uc2VFbmQsZVt0LmluaXRpYXRvclR5cGVdXSx2b2lkIDAsbi5LNy5hamF4KX19KX1jYXRjaChlKXt9bWUodGhpcy5lZSksY2UodGhpcy5lZSksZnVuY3Rpb24oZSx0LHIsaSl7ZnVuY3Rpb24gbyhlKXt2YXIgdD10aGlzO3QudG90YWxDYnM9MCx0LmNhbGxlZD0wLHQuY2JUaW1lPTAsdC5lbmQ9RSx0LmVuZGVkPSExLHQueGhyR3VpZHM9e30sdC5sYXN0U2l6ZT1udWxsLHQubG9hZENhcHR1cmVDYWxsZWQ9ITEsdC5wYXJhbXM9dGhpcy5wYXJhbXN8fHt9LHQubWV0cmljcz10aGlzLm1ldHJpY3N8fHt9LHQubGF0ZXN0TG9uZ3Rhc2tFbmQ9MCxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKHIpe0EodCxlKX0sKDAsSS5qVCkoITEpKSx5LmxSfHxlLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihlKXt0Lmxhc3RTaXplPWUubG9hZGVkfSwoMCxJLmpUKSghMSkpfWZ1bmN0aW9uIHMoZSl7dGhpcy5wYXJhbXM9e21ldGhvZDplWzBdfSxPZSh0aGlzLGVbMV0pLHRoaXMubWV0cmljcz17fX1mdW5jdGlvbiB1KHQscil7ZS5sb2FkZXJfY29uZmlnLnhwaWQmJnRoaXMuc2FtZU9yaWdpbiYmci5zZXRSZXF1ZXN0SGVhZGVyKCJYLU5ld1JlbGljLUlEIixlLmxvYWRlcl9jb25maWcueHBpZCk7dmFyIG49aS5nZW5lcmF0ZVRyYWNlUGF5bG9hZCh0aGlzLnBhcnNlZE9yaWdpbik7aWYobil7dmFyIG89ITE7bi5uZXdyZWxpY0hlYWRlciYmKHIuc2V0UmVxdWVzdEhlYWRlcigibmV3cmVsaWMiLG4ubmV3cmVsaWNIZWFkZXIpLG89ITApLG4udHJhY2VDb250ZXh0UGFyZW50SGVhZGVyJiYoci5zZXRSZXF1ZXN0SGVhZGVyKCJ0cmFjZXBhcmVudCIsbi50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLG4udHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJnIuc2V0UmVxdWVzdEhlYWRlcigidHJhY2VzdGF0ZSIsbi50cmFjZUNvbnRleHRTdGF0ZUhlYWRlciksbz0hMCksbyYmKHRoaXMuZHQ9bil9fWZ1bmN0aW9uIGQoZSxyKXt2YXIgbj10aGlzLm1ldHJpY3MsaT1lWzBdLG89dGhpcztpZihuJiZpKXt2YXIgcz1yZShpKTtzJiYobi50eFNpemU9cyl9dGhpcy5zdGFydFRpbWU9KDAsYy50KSgpLHRoaXMuYm9keT1pLHRoaXMubGlzdGVuZXI9ZnVuY3Rpb24oZSl7dHJ5eyJhYm9ydCIhPT1lLnR5cGV8fG8ubG9hZENhcHR1cmVDYWxsZWR8fChvLnBhcmFtcy5hYm9ydGVkPSEwKSwoImxvYWQiIT09ZS50eXBlfHxvLmNhbGxlZD09PW8udG90YWxDYnMmJihvLm9ubG9hZENhbGxlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIub25sb2FkKSYmImZ1bmN0aW9uIj09dHlwZW9mIG8uZW5kKSYmby5lbmQocil9Y2F0Y2goZSl7dHJ5e3QuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2goZSl7fX19O2Zvcih2YXIgYT0wO2E8VGU7YSsrKXIuYWRkRXZlbnRMaXN0ZW5lcih4ZVthXSx0aGlzLmxpc3RlbmVyLCgwLEkualQpKCExKSl9ZnVuY3Rpb24gbChlLHQscil7dGhpcy5jYlRpbWUrPWUsdD90aGlzLm9ubG9hZENhbGxlZD0hMDp0aGlzLmNhbGxlZCs9MSx0aGlzLmNhbGxlZCE9PXRoaXMudG90YWxDYnN8fCF0aGlzLm9ubG9hZENhbGxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHIub25sb2FkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5lbmR8fHRoaXMuZW5kKHIpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmIXRoaXMueGhyR3VpZHNbcl0mJih0aGlzLnhockd1aWRzW3JdPSEwLHRoaXMudG90YWxDYnMrPTEpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmdGhpcy54aHJHdWlkc1tyXSYmKGRlbGV0ZSB0aGlzLnhockd1aWRzW3JdLHRoaXMudG90YWxDYnMtPTEpfWZ1bmN0aW9uIGcoKXt0aGlzLmVuZFRpbWU9KDAsYy50KSgpfWZ1bmN0aW9uIG0oZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtYWRkZWQiLFtlWzFdLGVbMl1dLHIpfWZ1bmN0aW9uIHYoZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW2VbMV0sZVsyXV0scil9ZnVuY3Rpb24gYihlLHQscil7dCBpbnN0YW5jZW9mIEFlJiYoIm9ubG9hZCI9PT1yJiYodGhpcy5vbmxvYWQ9ITApLCgibG9hZCI9PT0oZVswXSYmZVswXS50eXBlKXx8dGhpcy5vbmxvYWQpJiYodGhpcy54aHJDYlN0YXJ0PSgwLGMudCkoKSkpfWZ1bmN0aW9uIHcoZSxyKXt0aGlzLnhockNiU3RhcnQmJnQuZW1pdCgieGhyLWNiLXRpbWUiLFsoMCxjLnQpKCktdGhpcy54aHJDYlN0YXJ0LHRoaXMub25sb2FkLHJdLHIpfWZ1bmN0aW9uIFIoZSl7dmFyIHQscj1lWzFdfHx7fTtpZigic3RyaW5nIj09dHlwZW9mIGVbMF0/MD09PSh0PWVbMF0pLmxlbmd0aCYmeS5SSSYmKHQ9IiIreS5nbS5sb2NhdGlvbi5ocmVmKTplWzBdJiZlWzBdLnVybD90PWVbMF0udXJsOnkuZ20/LlVSTCYmZVswXSYmZVswXWluc3RhbmNlb2YgVVJMP3Q9ZVswXS5ocmVmOiJmdW5jdGlvbiI9PXR5cGVvZiBlWzBdLnRvU3RyaW5nJiYodD1lWzBdLnRvU3RyaW5nKCkpLCJzdHJpbmciPT10eXBlb2YgdCYmMCE9PXQubGVuZ3RoKXt0JiYodGhpcy5wYXJzZWRPcmlnaW49KDAsdmUuRCkodCksdGhpcy5zYW1lT3JpZ2luPXRoaXMucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW4pO3ZhciBuPWkuZ2VuZXJhdGVUcmFjZVBheWxvYWQodGhpcy5wYXJzZWRPcmlnaW4pO2lmKG4mJihuLm5ld3JlbGljSGVhZGVyfHxuLnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcikpaWYoZVswXSYmZVswXS5oZWFkZXJzKWEoZVswXS5oZWFkZXJzLG4pJiYodGhpcy5kdD1uKTtlbHNle3ZhciBvPXt9O2Zvcih2YXIgcyBpbiByKW9bc109cltzXTtvLmhlYWRlcnM9bmV3IEhlYWRlcnMoci5oZWFkZXJzfHx7fSksYShvLmhlYWRlcnMsbikmJih0aGlzLmR0PW4pLGUubGVuZ3RoPjE/ZVsxXT1vOmUucHVzaChvKX19ZnVuY3Rpb24gYShlLHQpe3ZhciByPSExO3JldHVybiB0Lm5ld3JlbGljSGVhZGVyJiYoZS5zZXQoIm5ld3JlbGljIix0Lm5ld3JlbGljSGVhZGVyKSxyPSEwKSx0LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlciYmKGUuc2V0KCJ0cmFjZXBhcmVudCIsdC50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLHQudHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJmUuc2V0KCJ0cmFjZXN0YXRlIix0LnRyYWNlQ29udGV4dFN0YXRlSGVhZGVyKSxyPSEwKSxyfX1mdW5jdGlvbiB4KGUsdCl7dGhpcy5wYXJhbXM9e30sdGhpcy5tZXRyaWNzPXt9LHRoaXMuc3RhcnRUaW1lPSgwLGMudCkoKSx0aGlzLmR0PXQsZS5sZW5ndGg+PTEmJih0aGlzLnRhcmdldD1lWzBdKSxlLmxlbmd0aD49MiYmKHRoaXMub3B0cz1lWzFdKTt2YXIgcj10aGlzLm9wdHN8fHt9LG49dGhpcy50YXJnZXQ7T2UodGhpcyxSZShuKSk7dmFyIGk9KCIiKyhuJiZuIGluc3RhbmNlb2YgRWUmJm4ubWV0aG9kfHxyLm1ldGhvZHx8IkdFVCIpKS50b1VwcGVyQ2FzZSgpO3RoaXMucGFyYW1zLm1ldGhvZD1pLHRoaXMuYm9keT1yLmJvZHksdGhpcy50eFNpemU9cmUoci5ib2R5KXx8MH1mdW5jdGlvbiBUKGUsdCl7aWYodGhpcy5lbmRUaW1lPSgwLGMudCkoKSx0aGlzLnBhcmFtc3x8KHRoaXMucGFyYW1zPXt9KSwoMCx3ZS5pVykodGhpcy5wYXJhbXMpKXJldHVybjtsZXQgaTt0aGlzLnBhcmFtcy5zdGF0dXM9dD90LnN0YXR1czowLCJzdHJpbmciPT10eXBlb2YgdGhpcy5yeFNpemUmJnRoaXMucnhTaXplLmxlbmd0aD4wJiYoaT0rdGhpcy5yeFNpemUpO2NvbnN0IG89e3R4U2l6ZTp0aGlzLnR4U2l6ZSxyeFNpemU6aSxkdXJhdGlvbjooMCxjLnQpKCktdGhpcy5zdGFydFRpbWV9O3IoInhociIsW3RoaXMucGFyYW1zLG8sdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJmZXRjaCJdLHRoaXMsbi5LNy5hamF4KX1mdW5jdGlvbiBFKGUpe2NvbnN0IHQ9dGhpcy5wYXJhbXMsaT10aGlzLm1ldHJpY3M7aWYoIXRoaXMuZW5kZWQpe3RoaXMuZW5kZWQ9ITA7Zm9yKGxldCB0PTA7dDxUZTt0KyspZS5yZW1vdmVFdmVudExpc3RlbmVyKHhlW3RdLHRoaXMubGlzdGVuZXIsITEpO3QuYWJvcnRlZHx8KDAsd2UuaVcpKHQpfHwoaS5kdXJhdGlvbj0oMCxjLnQpKCktdGhpcy5zdGFydFRpbWUsdGhpcy5sb2FkQ2FwdHVyZUNhbGxlZHx8NCE9PWUucmVhZHlTdGF0ZT9udWxsPT10LnN0YXR1cyYmKHQuc3RhdHVzPTApOkEodGhpcyxlKSxpLmNiVGltZT10aGlzLmNiVGltZSxyKCJ4aHIiLFt0LGksdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJ4aHIiXSx0aGlzLG4uSzcuYWpheCkpfX1mdW5jdGlvbiBBKGUscil7ZS5wYXJhbXMuc3RhdHVzPXIuc3RhdHVzO3ZhciBpPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5yZXNwb25zZVR5cGU7cmV0dXJuImpzb24iPT09ciYmbnVsbCE9PXQ/dDoiYXJyYXlidWZmZXIiPT09cnx8ImJsb2IiPT09cnx8Impzb24iPT09cj9yZShlLnJlc3BvbnNlKToidGV4dCI9PT1yfHwiIj09PXJ8fHZvaWQgMD09PXI/cmUoZS5yZXNwb25zZVRleHQpOnZvaWQgMH0ocixlLmxhc3RTaXplKTtpZihpJiYoZS5tZXRyaWNzLnJ4U2l6ZT1pKSxlLnNhbWVPcmlnaW4mJnIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuaW5kZXhPZihTZSk+PTApe3ZhciBvPXIuZ2V0UmVzcG9uc2VIZWFkZXIoU2UpO28mJigoMCxhLnApKGgucnMsWyJBamF4L0Nyb3NzQXBwbGljYXRpb25UcmFjaW5nL0hlYWRlci9TZWVuIl0sdm9pZCAwLG4uSzcubWV0cmljcyx0KSxlLnBhcmFtcy5jYXQ9by5zcGxpdCgiLCAiKS5wb3AoKSl9ZS5sb2FkQ2FwdHVyZUNhbGxlZD0hMH10Lm9uKCJuZXcteGhyIixvKSx0Lm9uKCJvcGVuLXhoci1zdGFydCIscyksdC5vbigib3Blbi14aHItZW5kIix1KSx0Lm9uKCJzZW5kLXhoci1zdGFydCIsZCksdC5vbigieGhyLWNiLXRpbWUiLGwpLHQub24oInhoci1sb2FkLWFkZGVkIixmKSx0Lm9uKCJ4aHItbG9hZC1yZW1vdmVkIixwKSx0Lm9uKCJ4aHItcmVzb2x2ZWQiLGcpLHQub24oImFkZEV2ZW50TGlzdGVuZXItZW5kIixtKSx0Lm9uKCJyZW1vdmVFdmVudExpc3RlbmVyLWVuZCIsdiksdC5vbigiZm4tZW5kIix3KSx0Lm9uKCJmZXRjaC1iZWZvcmUtc3RhcnQiLFIpLHQub24oImZldGNoLXN0YXJ0Iix4KSx0Lm9uKCJmbi1zdGFydCIsYiksdC5vbigiZmV0Y2gtZG9uZSIsVCl9KGUsdGhpcy5lZSx0aGlzLmhhbmRsZXIsdGhpcy5kdCksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksMzg0NSkpKX19ZnVuY3Rpb24gT2UoZSx0KXt2YXIgcj0oMCx2ZS5EKSh0KSxuPWUucGFyYW1zfHxlO24uaG9zdG5hbWU9ci5ob3N0bmFtZSxuLnBvcnQ9ci5wb3J0LG4ucHJvdG9jb2w9ci5wcm90b2NvbCxuLmhvc3Q9ci5ob3N0bmFtZSsiOiIrci5wb3J0LG4ucGF0aG5hbWU9ci5wYXRobmFtZSxlLnBhcnNlZE9yaWdpbj1yLGUuc2FtZU9yaWdpbj1yLnNhbWVPcmlnaW59Y29uc3QgTmU9e30sSWU9WyJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiXTtmdW5jdGlvbiBQZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJoaXN0b3J5Iil9KGUpO3JldHVybiF5LlJJfHxOZVt0LmRlYnVnSWRdKyt8fChOZVt0LmRlYnVnSWRdPTEsKDAsb2UuWU0pKHQpLmluUGxhY2Uod2luZG93Lmhpc3RvcnksSWUsIi0iKSksdH12YXIgamU9aSgzNzM4KTtmdW5jdGlvbiBrZShlKXtwKHUuQkwsZnVuY3Rpb24odD1EYXRlLm5vdygpKXtjb25zdCByPXQteS5XTjtyPDAmJigwLGwuUikoNjIsdCksKDAsYS5wKShoLlhHLFt1LkJMLHt0aW1lOnJ9XSx2b2lkIDAsbi5LNy5tZXRyaWNzLGUuZWUpLGUuYWRkVG9UcmFjZSh7bmFtZTp1LkJMLHN0YXJ0OnQsb3JpZ2luOiJuciJ9KSwoMCxhLnApKHUuUGwrdS5oRyxbcix1LkJMXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLGUuZWUpfSxlKX1jb25zdHtIZTpDZSxiRDpMZSxkMzpIZSxLcDpNZSxUWjpLZSxMYzpEZSx1UDpVZSxSejpGZX09amU7Y2xhc3MgV2UgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1LZTtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEtlKSx0PWUscCh1LlUyLGZ1bmN0aW9uKGUpe2lmKCEoZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLm5hbWUmJmUuc3RhcnQpKXJldHVybjtjb25zdCByPXtuOmUubmFtZSxzOmUuc3RhcnQteS5XTixlOihlLmVuZHx8ZS5zdGFydCkteS5XTixvOmUub3JpZ2lufHwiIix0OiJhcGkifTtyLnM8MHx8ci5lPDB8fHIuZTxyLnM/KDAsbC5SKSg2MSx7c3RhcnQ6ci5zLGVuZDpyLmV9KTooMCxhLnApKCJic3RBcGkiLFtyXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2UsdC5lZSl9LHQpLGtlKGUpO2lmKCEoMCxSLlYpKGUuaW5pdCkpcmV0dXJuIHZvaWQgdGhpcy5kZXJlZ2lzdGVyRHJhaW4oKTtjb25zdCByPXRoaXMuZWU7bGV0IG87UGUociksdGhpcy5ldmVudHNFRT0oMCxuZS51KShyKSx0aGlzLmV2ZW50c0VFLm9uKFVlLGZ1bmN0aW9uKGUsdCl7dGhpcy5ic3RTdGFydD0oMCxjLnQpKCl9KSx0aGlzLmV2ZW50c0VFLm9uKERlLGZ1bmN0aW9uKGUsdCl7KDAsYS5wKSgiYnN0IixbZVswXSx0LHRoaXMuYnN0U3RhcnQsKDAsYy50KSgpXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxyLm9uKEZlK0hlLGZ1bmN0aW9uKGUpe3RoaXMudGltZT0oMCxjLnQpKCksdGhpcy5zdGFydFBhdGg9bG9jYXRpb24ucGF0aG5hbWUrbG9jYXRpb24uaGFzaH0pLHIub24oRmUrTWUsZnVuY3Rpb24oZSl7KDAsYS5wKSgiYnN0SGlzdCIsW2xvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2gsdGhpcy5zdGFydFBhdGgsdGhpcy50aW1lXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KTt0cnl7bz1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihlPT57Y29uc3QgdD1lLmdldEVudHJpZXMoKTsoMCxhLnApKENlLFt0XSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxvLm9ic2VydmUoe3R5cGU6TGUsYnVmZmVyZWQ6ITB9KX1jYXRjaChlKXt9dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjk3NCkpLHtyZXNvdXJjZU9ic2VydmVyOm99KX19dmFyIEJlPWkoNjM0NCk7Y2xhc3MgVmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CZS5UWjsjbjtyZWNvcmRlcjtjb25zdHJ1Y3RvcihlKXt2YXIgdDtsZXQgcjtzdXBlcihlLEJlLlRaKSx0PWUscCh1LkNILGZ1bmN0aW9uKCl7KDAsYS5wKSh1LkNILFtdLHZvaWQgMCxuLks3LnNlc3Npb25SZXBsYXksdC5lZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5UYixmdW5jdGlvbigpeygwLGEucCkodS5UYixbXSx2b2lkIDAsbi5LNy5zZXNzaW9uUmVwbGF5LGUuZWUpfSxlKX0oZSk7dHJ5e3I9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiIi5jb25jYXQoUy5IMywiXyIpLmNvbmNhdChTLnVoKSkpfWNhdGNoKGUpe30oMCx3LlNSKShlLmluaXQpJiZ0aGlzLmVlLm9uKHUuQ0gsKCk9PnRoaXMuI2koKSksdGhpcy4jbyhyKSYmdGhpcy5pbXBvcnRSZWNvcmRlcigpLnRoZW4oZT0+e2Uuc3RhcnRSZWNvcmRpbmcoQmUuUWIuUFJFTE9BRCxyPy5zZXNzaW9uUmVwbGF5TW9kZSl9KSx0aGlzLmltcG9ydEFnZ3JlZ2F0b3IodGhpcy5hZ2VudFJlZiwoKT0+aS5lKDQ3OCkudGhlbihpLmJpbmQoaSw2MTY3KSksdGhpcyksdGhpcy5lZS5vbigiZXJyIixlPT57dGhpcy5ibG9ja2VkfHx0aGlzLmFnZW50UmVmLnJ1bnRpbWUuaXNSZWNvcmRpbmcmJih0aGlzLmVycm9yTm90aWNlZD0hMCwoMCxhLnApKEJlLlZoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSl9KX0jbyhlKXtyZXR1cm4gZSYmKGUuc2Vzc2lvblJlcGxheU1vZGU9PT1TLmcuRlVMTHx8ZS5zZXNzaW9uUmVwbGF5TW9kZT09PVMuZy5FUlJPUil8fCgwLHcuQXcpKHRoaXMuYWdlbnRSZWYuaW5pdCl9aW1wb3J0UmVjb3JkZXIoKXtyZXR1cm4gdGhpcy5yZWNvcmRlcj9Qcm9taXNlLnJlc29sdmUodGhpcy5yZWNvcmRlcik6KHRoaXMuI24/Pz1Qcm9taXNlLmFsbChbaS5lKDQ3OCksaS5lKDI0OSldKS50aGVuKGkuYmluZChpLDQ4NjYpKS50aGVuKCh7UmVjb3JkZXI6ZX0pPT4odGhpcy5yZWNvcmRlcj1uZXcgZSh0aGlzKSx0aGlzLnJlY29yZGVyKSkuY2F0Y2goZT0+e3Rocm93IHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksdGhpcy5ibG9ja2VkPSEwLGV9KSx0aGlzLiNuKX0jaSgpe3RoaXMuYmxvY2tlZHx8KHRoaXMuZmVhdEFnZ3JlZ2F0ZT90aGlzLmZlYXRBZ2dyZWdhdGUubW9kZSE9PVMuZy5GVUxMJiZ0aGlzLmZlYXRBZ2dyZWdhdGUuaW5pdGlhbGl6ZVJlY29yZGluZyhTLmcuRlVMTCwhMCxCZS5RYi5BUEkpOnRoaXMuaW1wb3J0UmVjb3JkZXIoKS50aGVuKCgpPT57dGhpcy5yZWNvcmRlci5zdGFydFJlY29yZGluZyhCZS5RYi5BUEksUy5nLkZVTEwpfSkpfX12YXIgR2U9aSgzOTYyKTtmdW5jdGlvbiB6ZShlKXtjb25zdCB0PWUuZWUuZ2V0KCJ0cmFjZXIiKTtmdW5jdGlvbiByKCl7fXAodS5kVCxmdW5jdGlvbihlKXtyZXR1cm4obmV3IHIpLmdldCgib2JqZWN0Ij09dHlwZW9mIGU/ZTp7fSl9LGUpO2NvbnN0IGk9ci5wcm90b3R5cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbihyLGkpe3ZhciBvPXt9LHM9dGhpcyxkPSJmdW5jdGlvbiI9PXR5cGVvZiBpO3JldHVybigwLGEucCkoaC54VixbIkFQSS9jcmVhdGVUcmFjZXIvY2FsbGVkIl0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKSxlLnJ1blNvZnROYXZPdmVyU3BhfHwoMCxhLnApKHUuaHcrInRyYWNlciIsWygwLGMudCkoKSxyLG9dLHMsbi5LNy5zcGEsZS5lZSksZnVuY3Rpb24oKXtpZih0LmVtaXQoKGQ/IiI6Im5vLSIpKyJmbi1zdGFydCIsWygwLGMudCkoKSxzLGRdLG8pLGQpdHJ5e3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChlKXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgZT9uZXcgRXJyb3IoZSk6ZTt0aHJvdyB0LmVtaXQoImZuLWVyciIsW2FyZ3VtZW50cyx0aGlzLHJdLG8pLHJ9ZmluYWxseXt0LmVtaXQoImZuLWVuZCIsWygwLGMudCkoKV0sbyl9fX19O1siYWN0aW9uVGV4dCIsInNldE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJzYXZlIiwiaWdub3JlIiwib25FbmQiLCJnZXRDb250ZXh0IiwiZW5kIiwiZ2V0Il0uZm9yRWFjaCh0PT57cC5hcHBseSh0aGlzLFt0LGZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5wKSh1Lmh3K3QsWygwLGMudCkoKSwuLi5hcmd1bWVudHNdLHRoaXMsZS5ydW5Tb2Z0TmF2T3ZlclNwYT9uLks3LnNvZnROYXY6bi5LNy5zcGEsZS5lZSksdGhpc30sZSxpXSl9KSxwKHUuUEEsZnVuY3Rpb24oKXtlLnJ1blNvZnROYXZPdmVyU3BhPygwLGEucCkodS5odysicm91dGVOYW1lIixbcGVyZm9ybWFuY2Uubm93KCksLi4uYXJndW1lbnRzXSx2b2lkIDAsbi5LNy5zb2Z0TmF2LGUuZWUpOigwLGEucCkodS5QbCsicm91dGVOYW1lIixbKDAsYy50KSgpLC4uLmFyZ3VtZW50c10sdGhpcyxuLks3LnNwYSxlLmVlKX0sZSl9Y2xhc3MgWmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1HZS5UWjtjb25zdHJ1Y3RvcihlKXtpZihzdXBlcihlLEdlLlRaKSx6ZShlKSwheS5SSXx8ISgwLE8uZFYpKCkuby5NTylyZXR1cm47Y29uc3QgdD1QZSh0aGlzLmVlKTt0cnl7dGhpcy5yZW1vdmVPbkFib3J0PW5ldyBBYm9ydENvbnRyb2xsZXJ9Y2F0Y2goZSl7fUdlLnRDLmZvckVhY2goZT0+eygwLEkuc3ApKGUsZT0+e3MoZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKX0pO2NvbnN0IHI9KCk9PigwLGEucCkoIm5ld1VSTCIsWygwLGMudCkoKSwiIit3aW5kb3cubG9jYXRpb25dLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpO3Qub24oInB1c2hTdGF0ZS1lbmQiLHIpLHQub24oInJlcGxhY2VTdGF0ZS1lbmQiLHIpLCgwLEkuc3ApKEdlLk9WLGU9PntzKGUpLCgwLGEucCkoIm5ld1VSTCIsW2UudGltZVN0YW1wLCIiK3dpbmRvdy5sb2NhdGlvbl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKTtsZXQgbj0hMTtjb25zdCBvPW5ldygoMCxPLmRWKSgpLm8uTU8pKChlLHQpPT57bnx8KG49ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57KDAsYS5wKSgibmV3RG9tIixbKDAsYy50KSgpXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSxuPSExfSkpfSkscz0oMCx4LnMpKGU9PnsoMCxhLnApKCJuZXdVSUV2ZW50IixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksby5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsY2hhcmFjdGVyRGF0YTohMH0pfSwxMDAse2xlYWRpbmc6ITB9KTt0aGlzLmFib3J0SGFuZGxlcj1mdW5jdGlvbigpe3RoaXMucmVtb3ZlT25BYm9ydD8uYWJvcnQoKSxvLmRpc2Nvbm5lY3QoKSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDB9LHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDQzOTMpKSx7ZG9tT2JzZXJ2ZXI6b30pfX12YXIgcWU9aSg3Mzc4KTtjb25zdCBYZT17fSxZZT1bImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVwbGFjZUNoaWxkIl07ZnVuY3Rpb24gSmUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgianNvbnAiKX0oZSk7aWYoIXkuUkl8fFhlW3QuZGVidWdJZF0pcmV0dXJuIHQ7WGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj0oMCxvZS5ZTSkodCksbj0vWz8mXSg/OmNhbGxiYWNrfGNiKT0oW14mI10rKS8saT0vKC4qKVwuKFteLl0rKS8sbz0vXihcdyspKFwufCQpKC4qKSQvO2Z1bmN0aW9uIHMoZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPWUubWF0Y2gobyksbj1yWzFdO3JldHVybiBzKHJbM10sdFtuXSl9cmV0dXJuIHIuaW5QbGFjZShOb2RlLnByb3RvdHlwZSxZZSwiZG9tLSIpLHQub24oImRvbS1zdGFydCIsZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUubm9kZU5hbWV8fCJzY3JpcHQiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXJldHVybjt2YXIgbz0oYT1lLnNyYyxjPWEubWF0Y2gobiksYz9jWzFdOm51bGwpO3ZhciBhLGM7aWYoIW8pcmV0dXJuO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goaSk7aWYodCYmdC5sZW5ndGg+PTMpcmV0dXJue2tleTp0WzJdLHBhcmVudDpzKHRbMV0sd2luZG93KX07cmV0dXJue2tleTplLHBhcmVudDp3aW5kb3d9fShvKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdS5wYXJlbnRbdS5rZXldKXJldHVybjt2YXIgZD17fTtmdW5jdGlvbiBsKCl7dC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1mdW5jdGlvbiBmKCl7dC5lbWl0KCJqc29ucC1lcnJvciIsW10sZCksdC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1yLmluUGxhY2UodS5wYXJlbnQsW3Uua2V5XSwiY2ItIixkKSxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsKDAsSS5qVCkoITEpKSxlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmLCgwLEkualQpKCExKSksdC5lbWl0KCJuZXctanNvbnAiLFtlLnNyY10sZCl9KGVbMF0pfSksdH1jb25zdCAkZT17fTtmdW5jdGlvbiBRZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJwcm9taXNlIil9KGUpO2lmKCRlW3QuZGVidWdJZF0pcmV0dXJuIHQ7JGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj10LmNvbnRleHQsbj0oMCxvZS5ZTSkodCksaT15LmdtLlByb21pc2U7cmV0dXJuIGkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShyKXt2YXIgbz10LmNvbnRleHQoKSxzPW4ociwiZXhlY3V0b3ItIixvLG51bGwsITEpO2NvbnN0IGE9UmVmbGVjdC5jb25zdHJ1Y3QoaSxbc10sZSk7cmV0dXJuIHQuY29udGV4dChhKS5nZXRDdHg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sYX15LmdtLlByb21pc2U9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOiJQcm9taXNlIn0pLGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS50b1N0cmluZygpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxpKSxbImFsbCIsInJhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2xldCBpPSExO1suLi5lfHxbXV0uZm9yRWFjaChlPT57dGhpcy5yZXNvbHZlKGUpLnRoZW4ocygiYWxsIj09PXIpLHMoITEpKX0pO2NvbnN0IG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG87ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt0LmVtaXQoInByb3BhZ2F0ZSIsW251bGwsIWldLG8sITEsITEpLGk9aXx8IWV9fX19KSxbInJlc29sdmUiLCJyZWplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2NvbnN0IHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGUhPT1yJiZ0LmVtaXQoInByb3BhZ2F0ZSIsW2UsITBdLHIsITEsITEpLHJ9fSksZS5wcm90b3R5cGU9aS5wcm90b3R5cGU7Y29uc3Qgbz1pLnByb3RvdHlwZS50aGVuO2kucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oLi4uZSl7dmFyIGk9dGhpcyxzPXIoaSk7cy5wcm9taXNlPWksZVswXT1uKGVbMF0sImNiLSIscyxudWxsLCExKSxlWzFdPW4oZVsxXSwiY2ItIixzLG51bGwsITEpO2NvbnN0IGE9by5hcHBseSh0aGlzLGUpO3JldHVybiBzLm5leHRQcm9taXNlPWEsdC5lbWl0KCJwcm9wYWdhdGUiLFtpLCEwXSxhLCExLCExKSxhfSxpLnByb3RvdHlwZS50aGVuW29lLkp0XT1vLHQub24oImV4ZWN1dG9yLXN0YXJ0IixmdW5jdGlvbihlKXtlWzBdPW4oZVswXSwicmVzb2x2ZS0iLHRoaXMsbnVsbCwhMSksZVsxXT1uKGVbMV0sInJlc29sdmUtIix0aGlzLG51bGwsITEpfSksdC5vbigiZXhlY3V0b3ItZXJyIixmdW5jdGlvbihlLHQscil7ZVsxXShyKX0pLHQub24oImNiLWVuZCIsZnVuY3Rpb24oZSxyLG4pe3QuZW1pdCgicHJvcGFnYXRlIixbbiwhMF0sdGhpcy5uZXh0UHJvbWlzZSwhMSwhMSl9KSx0Lm9uKCJwcm9wYWdhdGUiLGZ1bmN0aW9uKGUscixuKXtpZighdGhpcy5nZXRDdHh8fHIpe2NvbnN0IHI9dGhpcyxuPWUgaW5zdGFuY2VvZiBQcm9taXNlP3QuY29udGV4dChlKTpudWxsO2xldCBpO3RoaXMuZ2V0Q3R4PWZ1bmN0aW9uKCl7cmV0dXJuIGl8fChpPW4mJm4hPT1yPyJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEN0eD9uLmdldEN0eCgpOm46cixpKX19fSl9KCksdH1jb25zdCBldD17fSx0dD0ic2V0VGltZW91dCIscnQ9InNldEludGVydmFsIixudD0iY2xlYXJUaW1lb3V0IixpdD0iLXN0YXJ0IixvdD1bdHQsInNldEltbWVkaWF0ZSIscnQsbnQsImNsZWFySW1tZWRpYXRlIl07ZnVuY3Rpb24gc3QoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgidGltZXIiKX0oZSk7aWYoZXRbdC5kZWJ1Z0lkXSsrKXJldHVybiB0O2V0W3QuZGVidWdJZF09MTt2YXIgcj0oMCxvZS5ZTSkodCk7cmV0dXJuIHIuaW5QbGFjZSh5LmdtLG90LnNsaWNlKDAsMiksdHQrIi0iKSxyLmluUGxhY2UoeS5nbSxvdC5zbGljZSgyLDMpLHJ0KyItIiksci5pblBsYWNlKHkuZ20sb3Quc2xpY2UoMyksbnQrIi0iKSx0Lm9uKHJ0K2l0LGZ1bmN0aW9uKGUsdCxuKXtlWzBdPXIoZVswXSwiZm4tIixudWxsLG4pfSksdC5vbih0dCtpdCxmdW5jdGlvbihlLHQsbil7dGhpcy5tZXRob2Q9bix0aGlzLnRpbWVyRHVyYXRpb249aXNOYU4oZVsxXSk/MDorZVsxXSxlWzBdPXIoZVswXSwiZm4tIix0aGlzLG4pfSksdH1jb25zdCBhdD17fTtmdW5jdGlvbiBjdChlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJtdXRhdGlvbiIpfShlKTtpZigheS5SSXx8YXRbdC5kZWJ1Z0lkXSlyZXR1cm4gdDthdFt0LmRlYnVnSWRdPSEwO3ZhciByPSgwLG9lLllNKSh0KSxuPXkuZ20uTXV0YXRpb25PYnNlcnZlcjtyZXR1cm4gbiYmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj9uZXcgbihyKGUsImZuLSIpKTpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGU9bi5wcm90b3R5cGUpLHR9Y29uc3R7VFo6dXQsZDM6ZHQsS3A6bHQsJHA6ZnQsd1c6aHQsZTU6cHQsdEg6Z3QsdVA6bXQscnc6dnQsTGM6YnR9PXFlO2NsYXNzIHl0IGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9dXQ7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSx1dCksemUoZSksIXkuUkkpcmV0dXJuO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9bGV0IHQscj0wO2NvbnN0IG49dGhpcy5lZS5nZXQoInRyYWNlciIpLG89SmUodGhpcy5lZSkscz1RZSh0aGlzLmVlKSx1PXN0KHRoaXMuZWUpLGQ9Y2UodGhpcy5lZSksbD10aGlzLmVlLmdldCgiZXZlbnRzIiksZj1tZSh0aGlzLmVlKSxoPVBlKHRoaXMuZWUpLHA9Y3QodGhpcy5lZSk7ZnVuY3Rpb24gZyhlLHQpe2guZW1pdCgibmV3VVJMIixbIiIrd2luZG93LmxvY2F0aW9uLHRdKX1mdW5jdGlvbiBtKCl7cisrLHQ9d2luZG93LmxvY2F0aW9uLmhhc2gsdGhpc1ttdF09KDAsYy50KSgpfWZ1bmN0aW9uIHYoKXtyLS0sd2luZG93LmxvY2F0aW9uLmhhc2ghPT10JiZnKDAsITApO3ZhciBlPSgwLGMudCkoKTt0aGlzW3B0XT1+fnRoaXNbcHRdK2UtdGhpc1ttdF0sdGhpc1tidF09ZX1mdW5jdGlvbiBiKGUsdCl7ZS5vbih0LGZ1bmN0aW9uKCl7dGhpc1t0XT0oMCxjLnQpKCl9KX10aGlzLmVlLm9uKG10LG0pLHMub24odnQsbSksby5vbih2dCxtKSx0aGlzLmVlLm9uKGJ0LHYpLHMub24oaHQsdiksby5vbihodCx2KSx0aGlzLmVlLm9uKCJmbi1lcnIiLCguLi50KT0+e3RbMl0/Ll9fbmV3cmVsaWM/LltlLmFnZW50SWRlbnRpZmllcl18fCgwLGEucCkoImZ1bmN0aW9uLWVyciIsWy4uLnRdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5lZS5idWZmZXIoW210LGJ0LCJ4aHItcmVzb2x2ZWQiXSx0aGlzLmZlYXR1cmVOYW1lKSxsLmJ1ZmZlcihbbXRdLHRoaXMuZmVhdHVyZU5hbWUpLHUuYnVmZmVyKFsic2V0VGltZW91dCIrbHQsImNsZWFyVGltZW91dCIrZHQsbXRdLHRoaXMuZmVhdHVyZU5hbWUpLGQuYnVmZmVyKFttdCwibmV3LXhociIsInNlbmQteGhyIitkdF0sdGhpcy5mZWF0dXJlTmFtZSksZi5idWZmZXIoW2d0K2R0LGd0KyItZG9uZSIsZ3QrZnQrZHQsZ3QrZnQrbHRdLHRoaXMuZmVhdHVyZU5hbWUpLGguYnVmZmVyKFsibmV3VVJMIl0sdGhpcy5mZWF0dXJlTmFtZSkscC5idWZmZXIoW210XSx0aGlzLmZlYXR1cmVOYW1lKSxzLmJ1ZmZlcihbInByb3BhZ2F0ZSIsdnQsaHQsImV4ZWN1dG9yLWVyciIsInJlc29sdmUiK2R0XSx0aGlzLmZlYXR1cmVOYW1lKSxuLmJ1ZmZlcihbbXQsIm5vLSIrbXRdLHRoaXMuZmVhdHVyZU5hbWUpLG8uYnVmZmVyKFsibmV3LWpzb25wIiwiY2Itc3RhcnQiLCJqc29ucC1lcnJvciIsImpzb25wLWVuZCJdLHRoaXMuZmVhdHVyZU5hbWUpLGIoZixndCtkdCksYihmLGd0KyItZG9uZSIpLGIobywibmV3LWpzb25wIiksYihvLCJqc29ucC1lbmQiKSxiKG8sImNiLXN0YXJ0IiksaC5vbigicHVzaFN0YXRlLWVuZCIsZyksaC5vbigicmVwbGFjZVN0YXRlLWVuZCIsZyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGcsKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZywoMCxJLmpUKSghMCx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtnKDAscj4xKX0sKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDU1OTIpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgd3Q9aSgzMzMzKTtjbGFzcyBSdCBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXd0LlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsd3QuVFopO2NvbnN0IHQ9W2UuaW5pdC5wYWdlX2FjdGlvbi5lbmFibGVkLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21hcmtzLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21lYXN1cmVzLGUuaW5pdC51c2VyX2FjdGlvbnMuZW5hYmxlZCxlLmluaXQucGVyZm9ybWFuY2UucmVzb3VyY2VzLmVuYWJsZWRdO3ZhciByO3I9ZSxwKHUuaEcsKGUsdCk9PnooZSx0LHIpLHIpLGZ1bmN0aW9uKGUpe3AodS5mRiwodCxyKT0+cSh0LHIsZSksZSl9KGUpLGtlKGUpLFgoZSksZnVuY3Rpb24oZSl7cCh1LlYxLCh0LHIpPT5aKHQscixlKSxlKX0oZSk7Y29uc3Qgbz1lLmluaXQuZmVhdHVyZV9mbGFncy5pbmNsdWRlcygidXNlcl9mcnVzdHJhdGlvbnMiKTtsZXQgcztpZih5LlJJJiZvJiYobWUodGhpcy5lZSksY2UodGhpcy5lZSkscz1QZSh0aGlzLmVlKSkseS5SSSl7aWYoZS5pbml0LnVzZXJfYWN0aW9ucy5lbmFibGVkJiYod3QuWnAuZm9yRWFjaChlPT4oMCxJLnNwKShlLGU9PigwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksITApKSx3dC5xTi5mb3JFYWNoKGU9Pntjb25zdCB0PSgwLHgucykoZT0+eygwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LDUwMCx7bGVhZGluZzohMH0pOygwLEkuc3ApKGUsdCl9KSxvKSl7ZnVuY3Rpb24gYyh0KXtjb25zdCByPSgwLHZlLkQpKHQpO3JldHVybiBlLmJlYWNvbnMuaW5jbHVkZXMoci5ob3N0bmFtZSsiOiIrci5wb3J0KX1mdW5jdGlvbiBkKCl7cy5lbWl0KCJuYXZDaGFuZ2UiKX15LmdtLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+eygwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHRoaXMuZWUub24oIm9wZW4teGhyLXN0YXJ0IiwoZSx0KT0+e2MoZVsxXSl8fHQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9PnsyPT09dC5yZWFkeVN0YXRlJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pfSksdGhpcy5lZS5vbigiZmV0Y2gtc3RhcnQiLGU9PntlLmxlbmd0aD49MSYmIWMoUmUoZVswXSkpJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pLHMub24oInB1c2hTdGF0ZS1lbmQiLGQpLHMub24oInJlcGxhY2VTdGF0ZS1lbmQiLGQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSl9aWYoZS5pbml0LnBlcmZvcm1hbmNlLnJlc291cmNlcy5lbmFibGVkJiZ5LmdtLlBlcmZvcm1hbmNlT2JzZXJ2ZXI/LnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMoInJlc291cmNlIikpe25ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGU9PntlLmdldEVudHJpZXMoKS5mb3JFYWNoKGU9PnsoMCxhLnApKCJicm93c2VyUGVyZm9ybWFuY2UucmVzb3VyY2UiLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0pfSkub2JzZXJ2ZSh7dHlwZToicmVzb3VyY2UiLGJ1ZmZlcmVkOiEwfSl9fXRyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChsKXt9dGhpcy5hYm9ydEhhbmRsZXI9KCk9Pnt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfSx0LnNvbWUoZT0+ZSk/dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksODAxOSkpKTp0aGlzLmRlcmVnaXN0ZXJEcmFpbigpfX12YXIgeHQ9aSgyNjQ2KTtjb25zdCBUdD1uZXcgTWFwO2Z1bmN0aW9uIEV0KGUsdCxyLG4pe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8IXR8fCJzdHJpbmciIT10eXBlb2Ygcnx8IXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W3JdKXJldHVybigwLGwuUikoMjkpO2NvbnN0IGk9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGllLmVlKS5nZXQoImxvZ2dlciIpfShlKSxvPSgwLG9lLllNKShpKSxzPW5ldyB4dC55KGllLlApO3MubGV2ZWw9bi5sZXZlbCxzLmN1c3RvbUF0dHJpYnV0ZXM9bi5jdXN0b21BdHRyaWJ1dGVzO2NvbnN0IGE9dFtyXT8uW29lLkp0XXx8dFtyXTtyZXR1cm4gVHQuc2V0KGEscyksby5pblBsYWNlKHQsW3JdLCJ3cmFwLWxvZ2dlci0iLCgpPT5UdC5nZXQoYSkpLGl9dmFyIEF0PWkoMTkxMCk7Y2xhc3MgU3QgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CLlRaO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQi5UWiksdD1lLHAodS4kOSwoZSxyKT0+RyhlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LldiLCh0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bj17fSxsZXZlbDppPUIucF8uSU5GT309e30pPT57RXQoZS5lZSx0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bixsZXZlbDppfSl9LGUpfShlKSxYKGUpO2NvbnN0IHI9dGhpcy5lZTtbImxvZyIsImVycm9yIiwid2FybiIsImluZm8iLCJkZWJ1ZyIsInRyYWNlIl0uZm9yRWFjaChlPT57KDAsQXQuaSkoeS5nbS5jb25zb2xlW2VdKSxFdChyLHkuZ20uY29uc29sZSxlLHtsZXZlbDoibG9nIj09PWU/ImluZm8iOmV9KX0pLHRoaXMuZWUub24oIndyYXAtbG9nZ2VyLWVuZCIsZnVuY3Rpb24oW2VdKXtjb25zdHtsZXZlbDp0LGN1c3RvbUF0dHJpYnV0ZXM6bn09dGhpczsoMCxWLlIpKHIsZSxuLHQpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNTI4OCkpKX19bmV3IGNsYXNzIGV4dGVuZHMgcntjb25zdHJ1Y3RvcihlKXt2YXIgdDsoc3VwZXIoKSx5LmdtKT8odGhpcy5mZWF0dXJlcz17fSwoMCxPLmJRKSh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzKSx0aGlzLmRlc2lyZWRGZWF0dXJlcz1uZXcgU2V0KGUuZmVhdHVyZXN8fFtdKSx0aGlzLmRlc2lyZWRGZWF0dXJlcy5hZGQoXyksdGhpcy5ydW5Tb2Z0TmF2T3ZlclNwYT1bLi4udGhpcy5kZXNpcmVkRmVhdHVyZXNdLnNvbWUoZT0+ZS5mZWF0dXJlTmFtZT09PW4uSzcuc29mdE5hdiksKDAscy5qKSh0aGlzLGUsZS5sb2FkZXJUeXBlfHwiYWdlbnQiKSx0PXRoaXMscCh1LmNELGZ1bmN0aW9uKGUscixuPSExKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKFsic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiJdLmluY2x1ZGVzKHR5cGVvZiByKXx8bnVsbD09PXIpcmV0dXJuIGcodCxlLHIsdS5jRCxuKTsoMCxsLlIpKDQwLHR5cGVvZiByKX1lbHNlKDAsbC5SKSgzOSx0eXBlb2YgZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5EbCxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiBnKGUsImVuZHVzZXIuaWQiLHQsdS5EbCwhMCk7KDAsbC5SKSg0MSx0eXBlb2YgdCl9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUubmIsZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4gZyhlLCJhcHBsaWNhdGlvbi52ZXJzaW9uIix0LHUubmIsITEpOygwLGwuUikoNDIsdHlwZW9mIHQpfSxlKX0odGhpcyksZnVuY3Rpb24oZSl7cCh1LmQzLGZ1bmN0aW9uKCl7ZS5lZS5lbWl0KCJtYW51YWwtc3RhcnQtYWxsIil9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUuUHYsZnVuY3Rpb24odD0hMCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdCl7aWYoKDAsYS5wKSh1LlBsK3UuUHYsW3RdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSksZS5ydW50aW1lLmNvbnNlbnRlZD10LHQpe2NvbnN0IHQ9ZS5mZWF0dXJlcy5wYWdlX3ZpZXdfZXZlbnQ7dC5vbkFnZ3JlZ2F0ZUltcG9ydGVkLnRoZW4oZT0+e2NvbnN0IHI9dC5mZWF0QWdncmVnYXRlO2UmJiFyLnNlbnRSdW0mJnIuc2VuZFJ1bSgpfSl9fWVsc2UoMCxsLlIpKDY1LHR5cGVvZiB0KX0sZSl9KHRoaXMpLHRoaXMucnVuKCkpOigwLGwuUikoMjEpfWdldCBjb25maWcoKXtyZXR1cm57aW5mbzp0aGlzLmluZm8saW5pdDp0aGlzLmluaXQsbG9hZGVyX2NvbmZpZzp0aGlzLmxvYWRlcl9jb25maWcscnVudGltZTp0aGlzLnJ1bnRpbWV9fWdldCBhcGkoKXtyZXR1cm4gdGhpc31ydW4oKXt0cnl7Y29uc3QgZT1mdW5jdGlvbihlKXtjb25zdCB0PXt9O3JldHVybiBvLmZvckVhY2gocj0+e3Rbcl09ISFlW3JdPy5lbmFibGVkfSksdH0odGhpcy5pbml0KSx0PVsuLi50aGlzLmRlc2lyZWRGZWF0dXJlc107dC5zb3J0KChlLHQpPT5uLlAzW2UuZmVhdHVyZU5hbWVdLW4uUDNbdC5mZWF0dXJlTmFtZV0pLHQuZm9yRWFjaCh0PT57aWYoIWVbdC5mZWF0dXJlTmFtZV0mJnQuZmVhdHVyZU5hbWUhPT1uLks3LnBhZ2VWaWV3RXZlbnQpcmV0dXJuO2lmKHRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNwYSlyZXR1cm47aWYoIXRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNvZnROYXYpcmV0dXJuO2NvbnN0IHI9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugbi5LNy5hamF4OnJldHVybltuLks3LmpzZXJyb3JzXTtjYXNlIG4uSzcuc2Vzc2lvblRyYWNlOnJldHVybltuLks3LmFqYXgsbi5LNy5wYWdlVmlld0V2ZW50XTtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm5bbi5LNy5zZXNzaW9uVHJhY2VdO2Nhc2Ugbi5LNy5wYWdlVmlld1RpbWluZzpyZXR1cm5bbi5LNy5wYWdlVmlld0V2ZW50XTtkZWZhdWx0OnJldHVybltdfX0odC5mZWF0dXJlTmFtZSkuZmlsdGVyKGU9PiEoZSBpbiB0aGlzLmZlYXR1cmVzKSk7ci5sZW5ndGg+MCYmKDAsbC5SKSgzNix7dGFyZ2V0RmVhdHVyZTp0LmZlYXR1cmVOYW1lLG1pc3NpbmdEZXBlbmRlbmNpZXM6cn0pLHRoaXMuZmVhdHVyZXNbdC5mZWF0dXJlTmFtZV09bmV3IHQodGhpcyl9KX1jYXRjaChlKXsoMCxsLlIpKDIyLGUpO2Zvcihjb25zdCBlIGluIHRoaXMuZmVhdHVyZXMpdGhpcy5mZWF0dXJlc1tlXS5hYm9ydEhhbmRsZXI/LigpO2NvbnN0IHQ9KDAsTy5abSkoKTtkZWxldGUgdC5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/LmZlYXR1cmVzLGRlbGV0ZSB0aGlzLnNoYXJlZEFnZ3JlZ2F0b3I7cmV0dXJuIHQuZWUuZ2V0KHRoaXMuYWdlbnRJZGVudGlmaWVyKS5hYm9ydCgpLCExfX19KHtmZWF0dXJlczpbX2UsXyxqLFdlLFZlLGssSixSdCxTdCxaZSx5dF0sbG9hZGVyVHlwZToic3BhIn0pfSkoKX0pKCk7PC9zY3JpcHQ+Cgk8IS0tIDxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyI+IC0tPgoJPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiIC8+LS0+Cgk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+Cgk8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGxpYnJhcmllcyBvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAtIFNlYXJjaCwgVmlzaXQsIFJlc2VhcmNoLCBFeHBsb3JlIiAvPgoJPHRpdGxlPkFib3V0IHwgTUlUIExpYnJhcmllczwvdGl0bGU+Cgk8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkFib3V0IHwgTUlUIExpYnJhcmllcyIvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9pbWFnZXMvbWl0LWxpYnJhcmllcy1sb2dvLWJsYWNrLXllbGxvdy0xMjAwLTEyMDAucG5nIi8+CjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp0eXBlIiBjb250ZW50PSJpbWFnZS9wbmciIC8+CjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp3aWR0aCIgY29udGVudD0iMTIwMCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOmhlaWdodCIgY29udGVudD0iMTIwMCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOmFsdCIgY29udGVudD0iTUlUIExpYnJhcmllcyBsb2dvIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlNhdmluZyB0aGUgd29ybGQsIGJpdCBieSBiaXQuIE91ciB2aXNpb24/IEEgd29ybGQgd2hlcmUgbW9yZSBwZW9wbGUgaGF2ZSBhY2Nlc3MgdG8ga25vd2xlZGdlIGFuZCBtb3JlIHZvaWNlcyBhcmUgaGVhcmQuIFdoZXJlIHRvb2xzIGFuZCBzb2x1dGlvbnMgY2FuIGJlIG5ldHdvcmtlZCwgc2hhcmVkLCBhbmQgJiM4MjIwO2hhY2tlZC4mIzgyMjE7IFdoZXJlIGtub3dsZWRnZSBub3Qgb25seSBwcm92aWRlcyBhbnN3ZXJzLCBidXQgZW1wb3dlcnMgYW5kIGluc3BpcmVzLiBXZSB0aGluayBsaWJyYXJpZXMgY2FuIGhlbHAgYnVpbGQgdGhpcyB3b3JsZC4gTGV0JiM4MjE3O3MgZ2V0IHN0YXJ0ZWQuIERpc2NvdmVyIG91ciBtaXNzaW9uLCB2aXNpb24sIGFuZCB2YWx1ZXMgUmVhZCB0aGUgRnV0dXJlIG9mIExpYnJhcmllcyBUYXNrIEZvcmNlIFJlcG9ydCBFbnZpc2lvbmluZyBIYXlkZW4gTGlicmFyeSBUaGUgTGlicmFyaWVzIGFyZSBwdXJzdWluZyBhIHJlbm92YXRpb24gb2YgSGF5ZGVuIHRoYXQgcmVmbGVjdHMgb3VyIHZpc2lvbiBmb3IgdGhlIGZ1dHVyZSBvZiBsaWJyYXJpZXMuIExlYXJuIG1vcmUgRnVydGhlcmluZyBNSVTigJlzIG1pc3Npb24gVGhlIGZpbmFsIHJlY29tbWVuZGF0aW9ucyBmcm9tIHRoZSBPcGVuIEFjY2VzcyBUYXNrIFsmaGVsbGlwO10iIC8+CjxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYWJvdXQ3LyI+Cgk8bGluayByZWw9InByb2ZpbGUiIGhyZWY9Imh0dHBzOi8vZ21wZy5vcmcveGZuLzExIiAvPgoJPGxpbmsgcmVsPSJwaW5nYmFjayIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC94bWxycGMucGhwIiAvPgoJPGxpbmsgcmVsPSJpY29uIiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9mYXZpY29uLmljbyIgc2l6ZXM9IjMyeDMyIj4KCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5zdmciIHR5cGU9ImltYWdlL3N2Zyt4bWwiPgoJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9hcHBsZS10b3VjaC1pY29uLnBuZyI+PCEtLSAxODDDlzE4MCAtLT4KCTxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL21hbmlmZXN0Lmpzb24iPgoJPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdtYXgtaW1hZ2UtcHJldmlldzpsYXJnZScgLz4KCTxzdHlsZT5pbWc6aXMoW3NpemVzPSJhdXRvIiBpXSwgW3NpemVzXj0iYXV0bywiIGldKSB7IGNvbnRhaW4taW50cmluc2ljLXNpemU6IDMwMDBweCAxNTAwcHggfTwvc3R5bGU+Cgk8bGluayByZWw9J2Rucy1wcmVmZXRjaCcgaHJlZj0nLy9saWJyYXJpZXMubWl0LmVkdScgLz4KPGxpbmsgcmVsPSdkbnMtcHJlZmV0Y2gnIGhyZWY9Jy8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20nIC8+CjxsaW5rIHJlbD0nZG5zLXByZWZldGNoJyBocmVmPScvL3VzZS50eXBla2l0Lm5ldCcgLz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovKiA8IVtDREFUQVsgKi8Kd2luZG93Ll93cGVtb2ppU2V0dGluZ3MgPSB7ImJhc2VVcmwiOiJodHRwczpcL1wvcy53Lm9yZ1wvaW1hZ2VzXC9jb3JlXC9lbW9qaVwvMTYuMC4xXC83Mng3MlwvIiwiZXh0IjoiLnBuZyIsInN2Z1VybCI6Imh0dHBzOlwvXC9zLncub3JnXC9pbWFnZXNcL2NvcmVcL2Vtb2ppXC8xNi4wLjFcL3N2Z1wvIiwic3ZnRXh0IjoiLnN2ZyIsInNvdXJjZSI6eyJjb25jYXRlbW9qaSI6Imh0dHBzOlwvXC9saWJyYXJpZXMubWl0LmVkdVwvd3BcL3dwLWluY2x1ZGVzXC9qc1wvd3AtZW1vamktcmVsZWFzZS5taW4uanM/dmVyPTYuOC4yIn19OwovKiEgVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkICovCiFmdW5jdGlvbihzLG4pe3ZhciBvLGksZTtmdW5jdGlvbiBjKGUpe3RyeXt2YXIgdD17c3VwcG9ydFRlc3RzOmUsdGltZXN0YW1wOihuZXcgRGF0ZSkudmFsdWVPZigpfTtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKG8sSlNPTi5zdHJpbmdpZnkodCkpfWNhdGNoKGUpe319ZnVuY3Rpb24gcChlLHQsbil7ZS5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS5maWxsVGV4dCh0LDAsMCk7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KGUuZ2V0SW1hZ2VEYXRhKDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLmRhdGEpLGE9KGUuY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUuZmlsbFRleHQobiwwLDApLG5ldyBVaW50MzJBcnJheShlLmdldEltYWdlRGF0YSgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KS5kYXRhKSk7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PWFbdF19KX1mdW5jdGlvbiB1KGUsdCl7ZS5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS5maWxsVGV4dCh0LDAsMCk7Zm9yKHZhciBuPWUuZ2V0SW1hZ2VEYXRhKDE2LDE2LDEsMSksYT0wO2E8bi5kYXRhLmxlbmd0aDthKyspaWYoMCE9PW4uZGF0YVthXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmKGUsdCxuLGEpe3N3aXRjaCh0KXtjYXNlImZsYWciOnJldHVybiBuKGUsIlx1ZDgzY1x1ZGZmM1x1ZmUwZlx1MjAwZFx1MjZhN1x1ZmUwZiIsIlx1ZDgzY1x1ZGZmM1x1ZmUwZlx1MjAwYlx1MjZhN1x1ZmUwZiIpPyExOiFuKGUsIlx1ZDgzY1x1ZGRlOFx1ZDgzY1x1ZGRmNiIsIlx1ZDgzY1x1ZGRlOFx1MjAwYlx1ZDgzY1x1ZGRmNiIpJiYhbihlLCJcdWQ4M2NcdWRmZjRcdWRiNDBcdWRjNjdcdWRiNDBcdWRjNjJcdWRiNDBcdWRjNjVcdWRiNDBcdWRjNmVcdWRiNDBcdWRjNjdcdWRiNDBcdWRjN2YiLCJcdWQ4M2NcdWRmZjRcdTIwMGJcdWRiNDBcdWRjNjdcdTIwMGJcdWRiNDBcdWRjNjJcdTIwMGJcdWRiNDBcdWRjNjVcdTIwMGJcdWRiNDBcdWRjNmVcdTIwMGJcdWRiNDBcdWRjNjdcdTIwMGJcdWRiNDBcdWRjN2YiKTtjYXNlImVtb2ppIjpyZXR1cm4hYShlLCJcdWQ4M2VcdWRlZGYiKX1yZXR1cm4hMX1mdW5jdGlvbiBnKGUsdCxuLGEpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZT9uZXcgT2Zmc2NyZWVuQ2FudmFzKDMwMCwxNTApOnMuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz1yLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSksaT0oby50ZXh0QmFzZWxpbmU9InRvcCIsby5mb250PSI2MDAgMzJweCBBcmlhbCIse30pO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7aVtlXT10KG8sZSxuLGEpfSksaX1mdW5jdGlvbiB0KGUpe3ZhciB0PXMuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dC5zcmM9ZSx0LmRlZmVyPSEwLHMuaGVhZC5hcHBlbmRDaGlsZCh0KX0idW5kZWZpbmVkIiE9dHlwZW9mIFByb21pc2UmJihvPSJ3cEVtb2ppU2V0dGluZ3NTdXBwb3J0cyIsaT1bImZsYWciLCJlbW9qaSJdLG4uc3VwcG9ydHM9e2V2ZXJ5dGhpbmc6ITAsZXZlcnl0aGluZ0V4Y2VwdEZsYWc6ITB9LGU9bmV3IFByb21pc2UoZnVuY3Rpb24oZSl7cy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixlLHtvbmNlOiEwfSl9KSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1mdW5jdGlvbigpe3RyeXt2YXIgZT1KU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obykpO2lmKCJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5cGVvZiBlLnRpbWVzdGFtcCYmKG5ldyBEYXRlKS52YWx1ZU9mKCk8ZS50aW1lc3RhbXArNjA0ODAwJiYib2JqZWN0Ij09dHlwZW9mIGUuc3VwcG9ydFRlc3RzKXJldHVybiBlLnN1cHBvcnRUZXN0c31jYXRjaChlKXt9cmV0dXJuIG51bGx9KCk7aWYoIW4pe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyJiYidW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBVUkwmJlVSTC5jcmVhdGVPYmplY3RVUkwmJiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYil0cnl7dmFyIGU9InBvc3RNZXNzYWdlKCIrZy50b1N0cmluZygpKyIoIitbSlNPTi5zdHJpbmdpZnkoaSksZi50b1N0cmluZygpLHAudG9TdHJpbmcoKSx1LnRvU3RyaW5nKCldLmpvaW4oIiwiKSsiKSk7IixhPW5ldyBCbG9iKFtlXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLHI9bmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKGEpLHtuYW1lOiJ3cFRlc3RFbW9qaVN1cHBvcnRzIn0pO3JldHVybiB2b2lkKHIub25tZXNzYWdlPWZ1bmN0aW9uKGUpe2Mobj1lLmRhdGEpLHIudGVybWluYXRlKCksdChuKX0pfWNhdGNoKGUpe31jKG49ZyhpLGYscCx1KSl9dChuKX0pLnRoZW4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpbi5zdXBwb3J0c1t0XT1lW3RdLG4uc3VwcG9ydHMuZXZlcnl0aGluZz1uLnN1cHBvcnRzLmV2ZXJ5dGhpbmcmJm4uc3VwcG9ydHNbdF0sImZsYWciIT09dCYmKG4uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWc9bi5zdXBwb3J0cy5ldmVyeXRoaW5nRXhjZXB0RmxhZyYmbi5zdXBwb3J0c1t0XSk7bi5zdXBwb3J0cy5ldmVyeXRoaW5nRXhjZXB0RmxhZz1uLnN1cHBvcnRzLmV2ZXJ5dGhpbmdFeGNlcHRGbGFnJiYhbi5zdXBwb3J0cy5mbGFnLG4uRE9NUmVhZHk9ITEsbi5yZWFkeUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5ET01SZWFkeT0hMH19KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU7bi5zdXBwb3J0cy5ldmVyeXRoaW5nfHwobi5yZWFkeUNhbGxiYWNrKCksKGU9bi5zb3VyY2V8fHt9KS5jb25jYXRlbW9qaT90KGUuY29uY2F0ZW1vamkpOmUud3BlbW9qaSYmZS50d2Vtb2ppJiYodChlLnR3ZW1vamkpLHQoZS53cGVtb2ppKSkpfSkpfSgod2luZG93LGRvY3VtZW50KSx3aW5kb3cuX3dwZW1vamlTZXR0aW5ncyk7Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHN0eWxlIGlkPSd3cC1lbW9qaS1zdHlsZXMtaW5saW5lLWNzcycgdHlwZT0ndGV4dC9jc3MnPgoKCWltZy53cC1zbWlsZXksIGltZy5lbW9qaSB7CgkJZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CgkJYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CgkJYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwoJCWhlaWdodDogMWVtICFpbXBvcnRhbnQ7CgkJd2lkdGg6IDFlbSAhaW1wb3J0YW50OwoJCW1hcmdpbjogMCAwLjA3ZW0gIWltcG9ydGFudDsKCQl2ZXJ0aWNhbC1hbGlnbjogLTAuMWVtICFpbXBvcnRhbnQ7CgkJYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OwoJCXBhZGRpbmc6IDAgIWltcG9ydGFudDsKCX0KPC9zdHlsZT4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nd3AtYmxvY2stbGlicmFyeS1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3Avd3AtaW5jbHVkZXMvY3NzL2Rpc3QvYmxvY2stbGlicmFyeS9zdHlsZS5taW4uY3NzP3Zlcj02LjguMicgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxzdHlsZSBpZD0nY2xhc3NpYy10aGVtZS1zdHlsZXMtaW5saW5lLWNzcycgdHlwZT0ndGV4dC9jc3MnPgovKiEgVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkICovCi53cC1ibG9jay1idXR0b25fX2xpbmt7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMjM3M2M7Ym9yZGVyLXJhZGl1czo5OTk5cHg7Ym94LXNoYWRvdzpub25lO3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6Y2FsYyguNjY3ZW0gKyAycHgpIGNhbGMoMS4zMzNlbSArIDJweCk7Zm9udC1zaXplOjEuMTI1ZW19LndwLWJsb2NrLWZpbGVfX2J1dHRvbntiYWNrZ3JvdW5kOiMzMjM3M2M7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0KPC9zdHlsZT4KPHN0eWxlIGlkPSdnbG9iYWwtc3R5bGVzLWlubGluZS1jc3MnIHR5cGU9J3RleHQvY3NzJz4KOnJvb3R7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLXNxdWFyZTogMTstLXdwLS1wcmVzZXQtLWFzcGVjdC1yYXRpby0tNC0zOiA0LzM7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTMtNDogMy80Oy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS0zLTI6IDMvMjstLXdwLS1wcmVzZXQtLWFzcGVjdC1yYXRpby0tMi0zOiAyLzM7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTE2LTk6IDE2Lzk7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTktMTY6IDkvMTY7LS13cC0tcHJlc2V0LS1jb2xvci0tYmxhY2s6ICMwMDAwMDA7LS13cC0tcHJlc2V0LS1jb2xvci0tY3lhbi1ibHVpc2gtZ3JheTogI2FiYjhjMzstLXdwLS1wcmVzZXQtLWNvbG9yLS13aGl0ZTogI2ZmZmZmZjstLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLXBpbms6ICNmNzhkYTc7LS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkOiAjY2YyZTJlOy0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLW9yYW5nZTogI2ZmNjkwMDstLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1hbWJlcjogI2ZjYjkwMDstLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuOiAjN2JkY2I1Oy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWdyZWVuLWN5YW46ICMwMGQwODQ7LS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1jeWFuLWJsdWU6ICM4ZWQxZmM7LS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlOiAjMDY5M2UzOy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXB1cnBsZTogIzliNTFlMDstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS12aXZpZC1jeWFuLWJsdWUtdG8tdml2aWQtcHVycGxlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYmEoNiwxNDcsMjI3LDEpIDAlLHJnYigxNTUsODEsMjI0KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1saWdodC1ncmVlbi1jeWFuLXRvLXZpdmlkLWdyZWVuLWN5YW46IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDEyMiwyMjAsMTgwKSAwJSxyZ2IoMCwyMDgsMTMwKSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy12aXZpZC1hbWJlci10by1sdW1pbm91cy12aXZpZC1vcmFuZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgyNTIsMTg1LDAsMSkgMCUscmdiYSgyNTUsMTA1LDAsMSkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbHVtaW5vdXMtdml2aWQtb3JhbmdlLXRvLXZpdmlkLXJlZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDI1NSwxMDUsMCwxKSAwJSxyZ2IoMjA3LDQ2LDQ2KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS12ZXJ5LWxpZ2h0LWdyYXktdG8tY3lhbi1ibHVpc2gtZ3JheTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjM4LDIzOCwyMzgpIDAlLHJnYigxNjksMTg0LDE5NSkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tY29vbC10by13YXJtLXNwZWN0cnVtOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYig3NCwyMzQsMjIwKSAwJSxyZ2IoMTUxLDEyMCwyMDkpIDIwJSxyZ2IoMjA3LDQyLDE4NikgNDAlLHJnYigyMzgsNDQsMTMwKSA2MCUscmdiKDI1MSwxMDUsOTgpIDgwJSxyZ2IoMjU0LDI0OCw3NikgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tYmx1c2gtbGlnaHQtcHVycGxlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTUsMjA2LDIzNikgMCUscmdiKDE1MiwxNTAsMjQwKSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1ibHVzaC1ib3JkZWF1eDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjU0LDIwNSwxNjUpIDAlLHJnYigyNTQsNDUsNDUpIDUwJSxyZ2IoMTA3LDAsNjIpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLWR1c2s6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDI1NSwyMDMsMTEyKSAwJSxyZ2IoMTk5LDgxLDE5MikgNTAlLHJnYig2NSw4OCwyMDgpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLXBhbGUtb2NlYW46IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDI1NSwyNDUsMjAzKSAwJSxyZ2IoMTgyLDIyNywyMTIpIDUwJSxyZ2IoNTEsMTY3LDE4MSkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tZWxlY3RyaWMtZ3Jhc3M6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDIwMiwyNDgsMTI4KSAwJSxyZ2IoMTEzLDIwNiwxMjYpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLW1pZG5pZ2h0OiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyLDMsMTI5KSAwJSxyZ2IoNDAsMTE2LDI1MikgMTAwJSk7LS13cC0tcHJlc2V0LS1mb250LXNpemUtLXNtYWxsOiAxM3B4Oy0td3AtLXByZXNldC0tZm9udC1zaXplLS1tZWRpdW06IDIwcHg7LS13cC0tcHJlc2V0LS1mb250LXNpemUtLWxhcmdlOiAzNnB4Oy0td3AtLXByZXNldC0tZm9udC1zaXplLS14LWxhcmdlOiA0MnB4Oy0td3AtLXByZXNldC0tc3BhY2luZy0tMjA6IDAuNDRyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS0zMDogMC42N3JlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTQwOiAxcmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tNTA6IDEuNXJlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTYwOiAyLjI1cmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tNzA6IDMuMzhyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS04MDogNS4wNnJlbTstLXdwLS1wcmVzZXQtLXNoYWRvdy0tbmF0dXJhbDogNnB4IDZweCA5cHggcmdiYSgwLCAwLCAwLCAwLjIpOy0td3AtLXByZXNldC0tc2hhZG93LS1kZWVwOiAxMnB4IDEycHggNTBweCByZ2JhKDAsIDAsIDAsIDAuNCk7LS13cC0tcHJlc2V0LS1zaGFkb3ctLXNoYXJwOiA2cHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMik7LS13cC0tcHJlc2V0LS1zaGFkb3ctLW91dGxpbmVkOiA2cHggNnB4IDBweCAtM3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSksIDZweCA2cHggcmdiYSgwLCAwLCAwLCAxKTstLXdwLS1wcmVzZXQtLXNoYWRvdy0tY3Jpc3A6IDZweCA2cHggMHB4IHJnYmEoMCwgMCwgMCwgMSk7fTp3aGVyZSguaXMtbGF5b3V0LWZsZXgpe2dhcDogMC41ZW07fTp3aGVyZSguaXMtbGF5b3V0LWdyaWQpe2dhcDogMC41ZW07fWJvZHkgLmlzLWxheW91dC1mbGV4e2Rpc3BsYXk6IGZsZXg7fS5pcy1sYXlvdXQtZmxleHtmbGV4LXdyYXA6IHdyYXA7YWxpZ24taXRlbXM6IGNlbnRlcjt9LmlzLWxheW91dC1mbGV4ID4gOmlzKCosIGRpdil7bWFyZ2luOiAwO31ib2R5IC5pcy1sYXlvdXQtZ3JpZHtkaXNwbGF5OiBncmlkO30uaXMtbGF5b3V0LWdyaWQgPiA6aXMoKiwgZGl2KXttYXJnaW46IDA7fTp3aGVyZSgud3AtYmxvY2stY29sdW1ucy5pcy1sYXlvdXQtZmxleCl7Z2FwOiAyZW07fTp3aGVyZSgud3AtYmxvY2stY29sdW1ucy5pcy1sYXlvdXQtZ3JpZCl7Z2FwOiAyZW07fTp3aGVyZSgud3AtYmxvY2stcG9zdC10ZW1wbGF0ZS5pcy1sYXlvdXQtZmxleCl7Z2FwOiAxLjI1ZW07fTp3aGVyZSgud3AtYmxvY2stcG9zdC10ZW1wbGF0ZS5pcy1sYXlvdXQtZ3JpZCl7Z2FwOiAxLjI1ZW07fS5oYXMtYmxhY2stY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1ibGFjaykgIWltcG9ydGFudDt9Lmhhcy1jeWFuLWJsdWlzaC1ncmF5LWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tY3lhbi1ibHVpc2gtZ3JheSkgIWltcG9ydGFudDt9Lmhhcy13aGl0ZS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXdoaXRlKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtcGluay1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtcGluaykgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1yZWQtY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1yZWQpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtb3JhbmdlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtb3JhbmdlKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLWFtYmVyLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtYW1iZXIpICFpbXBvcnRhbnQ7fS5oYXMtbGlnaHQtZ3JlZW4tY3lhbi1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWxpZ2h0LWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtZ3JlZW4tY3lhbi1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1jeWFuLWJsdWUtY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLWN5YW4tYmx1ZSkgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1jeWFuLWJsdWUtY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcHVycGxlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcHVycGxlKSAhaW1wb3J0YW50O30uaGFzLWJsYWNrLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWJsYWNrKSAhaW1wb3J0YW50O30uaGFzLWN5YW4tYmx1aXNoLWdyYXktYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tY3lhbi1ibHVpc2gtZ3JheSkgIWltcG9ydGFudDt9Lmhhcy13aGl0ZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS13aGl0ZSkgIWltcG9ydGFudDt9Lmhhcy1wYWxlLXBpbmstYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1waW5rKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXJlZC1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1yZWQpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtb3JhbmdlLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLW9yYW5nZSkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy12aXZpZC1hbWJlci1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1hbWJlcikgIWltcG9ydGFudDt9Lmhhcy1saWdodC1ncmVlbi1jeWFuLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWxpZ2h0LWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtZ3JlZW4tY3lhbi1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtY3lhbi1ibHVlLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWN5YW4tYmx1ZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcHVycGxlLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1ibGFjay1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tYmxhY2spICFpbXBvcnRhbnQ7fS5oYXMtY3lhbi1ibHVpc2gtZ3JheS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tY3lhbi1ibHVpc2gtZ3JheSkgIWltcG9ydGFudDt9Lmhhcy13aGl0ZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0td2hpdGUpICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1waW5rLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLXBpbmspICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcmVkLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1yZWQpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtb3JhbmdlLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1vcmFuZ2UpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtYW1iZXItYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLWFtYmVyKSAhaW1wb3J0YW50O30uaGFzLWxpZ2h0LWdyZWVuLWN5YW4tYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWxpZ2h0LWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtZ3JlZW4tY3lhbi1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtZ3JlZW4tY3lhbikgIWltcG9ydGFudDt9Lmhhcy1wYWxlLWN5YW4tYmx1ZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtY3lhbi1ibHVlLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcHVycGxlLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1wdXJwbGUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtY3lhbi1ibHVlLXRvLXZpdmlkLXB1cnBsZS1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS12aXZpZC1jeWFuLWJsdWUtdG8tdml2aWQtcHVycGxlKSAhaW1wb3J0YW50O30uaGFzLWxpZ2h0LWdyZWVuLWN5YW4tdG8tdml2aWQtZ3JlZW4tY3lhbi1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1saWdodC1ncmVlbi1jeWFuLXRvLXZpdmlkLWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtYW1iZXItdG8tbHVtaW5vdXMtdml2aWQtb3JhbmdlLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLXZpdmlkLWFtYmVyLXRvLWx1bWlub3VzLXZpdmlkLW9yYW5nZSkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy12aXZpZC1vcmFuZ2UtdG8tdml2aWQtcmVkLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLXZpdmlkLW9yYW5nZS10by12aXZpZC1yZWQpICFpbXBvcnRhbnQ7fS5oYXMtdmVyeS1saWdodC1ncmF5LXRvLWN5YW4tYmx1aXNoLWdyYXktZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdmVyeS1saWdodC1ncmF5LXRvLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtY29vbC10by13YXJtLXNwZWN0cnVtLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWNvb2wtdG8td2FybS1zcGVjdHJ1bSkgIWltcG9ydGFudDt9Lmhhcy1ibHVzaC1saWdodC1wdXJwbGUtZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tYmx1c2gtbGlnaHQtcHVycGxlKSAhaW1wb3J0YW50O30uaGFzLWJsdXNoLWJvcmRlYXV4LWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWJsdXNoLWJvcmRlYXV4KSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLWR1c2stZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbHVtaW5vdXMtZHVzaykgIWltcG9ydGFudDt9Lmhhcy1wYWxlLW9jZWFuLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLXBhbGUtb2NlYW4pICFpbXBvcnRhbnQ7fS5oYXMtZWxlY3RyaWMtZ3Jhc3MtZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tZWxlY3RyaWMtZ3Jhc3MpICFpbXBvcnRhbnQ7fS5oYXMtbWlkbmlnaHQtZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbWlkbmlnaHQpICFpbXBvcnRhbnQ7fS5oYXMtc21hbGwtZm9udC1zaXple2ZvbnQtc2l6ZTogdmFyKC0td3AtLXByZXNldC0tZm9udC1zaXplLS1zbWFsbCkgIWltcG9ydGFudDt9Lmhhcy1tZWRpdW0tZm9udC1zaXple2ZvbnQtc2l6ZTogdmFyKC0td3AtLXByZXNldC0tZm9udC1zaXplLS1tZWRpdW0pICFpbXBvcnRhbnQ7fS5oYXMtbGFyZ2UtZm9udC1zaXple2ZvbnQtc2l6ZTogdmFyKC0td3AtLXByZXNldC0tZm9udC1zaXplLS1sYXJnZSkgIWltcG9ydGFudDt9Lmhhcy14LWxhcmdlLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0teC1sYXJnZSkgIWltcG9ydGFudDt9Cjp3aGVyZSgud3AtYmxvY2stcG9zdC10ZW1wbGF0ZS5pcy1sYXlvdXQtZmxleCl7Z2FwOiAxLjI1ZW07fTp3aGVyZSgud3AtYmxvY2stcG9zdC10ZW1wbGF0ZS5pcy1sYXlvdXQtZ3JpZCl7Z2FwOiAxLjI1ZW07fQo6d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWZsZXgpe2dhcDogMmVtO306d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWdyaWQpe2dhcDogMmVtO30KOnJvb3QgOndoZXJlKC53cC1ibG9jay1wdWxscXVvdGUpe2ZvbnQtc2l6ZTogMS41ZW07bGluZS1oZWlnaHQ6IDEuNjt9Cjwvc3R5bGU+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2NvbnRhY3QtZm9ybS03LWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9jc3Mvc3R5bGVzLmNzcz92ZXI9Ni4xJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPHN0eWxlIGlkPSdjb250YWN0LWZvcm0tNy1pbmxpbmUtY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+Ci53cGNmNyAud3BjZjctcmVjYXB0Y2hhIGlmcmFtZSB7bWFyZ2luLWJvdHRvbTogMDt9LndwY2Y3IC53cGNmNy1yZWNhcHRjaGFbZGF0YS1hbGlnbj0iY2VudGVyIl0gPiBkaXYge21hcmdpbjogMCBhdXRvO30ud3BjZjcgLndwY2Y3LXJlY2FwdGNoYVtkYXRhLWFsaWduPSJyaWdodCJdID4gZGl2IHttYXJnaW46IDAgMCAwIGF1dG87fQo8L3N0eWxlPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdzbi1mb250QXdlc29tZS1jc3MtY3NzJyBocmVmPScvL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjIuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3M/dmVyPTEuMScgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3NuLWFuaW1hdGUtY3NzLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9keW5hbWljLW1lbnUtbWFuYWdlci9kdW9nZWVrL2luYy9hbmltYXRlLmNzcz92ZXI9MS4xJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nZGctZ3JpZC1jc3MtY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL2R5bmFtaWMtbWVudS1tYW5hZ2VyL2R1b2dlZWsvaW5jL2RnLWdyaWQuY3NzP3Zlcj0xLjEnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtc3R5bGVzLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvc3R5bGUuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtZ2xvYmFsLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvY3NzL2J1aWxkL2dsb2JhbC5jc3M/dmVyPTAuOCcgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjwhLS1baWYgbHQgSUUgOV0+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BhcmVudC1pZS1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2Nzcy9pZS5jc3M/dmVyPTIwMTIxMDEwJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPCFbZW5kaWZdLS0+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2Fkb2JlLWZvbnRzLWNzcycgaHJlZj0nLy91c2UudHlwZWtpdC5uZXQvaXhkMnZncS5jc3M/dmVyPTAuOCcgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BhcmVudC1mb3Jtcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2Nzcy9idWlsZC9mb3Jtcy5jc3M/dmVyPTAuOCcgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2NmN2NmLXN0eWxlLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9jZjctY29uZGl0aW9uYWwtZmllbGRzL3N0eWxlLmNzcz92ZXI9Mi4yLjMnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9saWJzL21vZGVybml6ci5taW4uanM/dmVyPTIuOC4zIiBpZD0ibW9kZXJuaXpyLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvanF1ZXJ5Lm1pbi5qcz92ZXI9MS4xMS4xLWxvY2FsIiBpZD0ianF1ZXJ5LWpzIj48L3NjcmlwdD4KPGxpbmsgcmVsPSJodHRwczovL2FwaS53Lm9yZy8iIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AtanNvbi8iIC8+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKU09OIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwLWpzb24vd3AvdjIvcGFnZXMvMTQwIiAvPjxsaW5rIHJlbD0iRWRpdFVSSSIgdHlwZT0iYXBwbGljYXRpb24vcnNkK3htbCIgdGl0bGU9IlJTRCIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC94bWxycGMucGhwP3JzZCIgLz4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJXb3JkUHJlc3MgNi44LjIiIC8+CjxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2Fib3V0Ny8iIC8+CjxsaW5rIHJlbD0nc2hvcnRsaW5rJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1Lz9wPTE0MCcgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJvRW1iZWQgKEpTT04pIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uK29lbWJlZCIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC1qc29uL29lbWJlZC8xLjAvZW1iZWQ/dXJsPWh0dHBzJTNBJTJGJTJGbGlicmFyaWVzLm1pdC5lZHUlMkZhYm91dDclMkYiIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0ib0VtYmVkIChYTUwpIiB0eXBlPSJ0ZXh0L3htbCtvZW1iZWQiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AtanNvbi9vZW1iZWQvMS4wL2VtYmVkP3VybD1odHRwcyUzQSUyRiUyRmxpYnJhcmllcy5taXQuZWR1JTJGYWJvdXQ3JTJGJiMwMzg7Zm9ybWF0PXhtbCIgLz4KCgk8IS0tIE1hdG9tbyBUYWcgTWFuYWdlciAtLT4KPHNjcmlwdD4KICB2YXIgX210bSA9IHdpbmRvdy5fbXRtID0gd2luZG93Ll9tdG0gfHwgW107CiAgX210bS5wdXNoKHsnbXRtLnN0YXJ0VGltZSc6IChuZXcgRGF0ZSgpLmdldFRpbWUoKSksICdldmVudCc6ICdtdG0uU3RhcnQnfSk7CiAgKGZ1bmN0aW9uKCkgewogICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9J2h0dHBzOi8vbWF0b21vLmxpYnJhcmllcy5taXQuZWR1L2pzL2NvbnRhaW5lcl9vRldNU2IzZy5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsKICB9KSgpOwo8L3NjcmlwdD4KPCEtLSBFbmQgTWF0b21vIFRhZyBNYW5hZ2VyIC0tPgkJPHN0eWxlIHR5cGU9InRleHQvY3NzIiBpZD0id3AtY3VzdG9tLWNzcyI+CgkJCS8qIHNwZWNpYWwgdGVtcG9yYXJ5IHN0eWxpbmcgZm9yIGJyYW5kZWQgYWJvdXQgcGFnZSAqLwpib2R5LnBhZ2UtaWQtMTQwIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjMDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jb250ZW50IHsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6ICdOSGFhc0dyb3Rlc2tUeHQnLCAnSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50OwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmJyZWFkY3J1bWJzLS1iZXR0ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICM1NTU7IAogIGNvbG9yOiAjZWVlOwp9CmJvZHkucGFnZS1pZC0xNDAgLmJyZWFkY3J1bWJzLS1iZXR0ZXIgYSB7CiAgICBjb2xvcjogI2VlZTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubWFpbi1jb250ZW50IHsgCiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoJy9pbWFnZXMvbmV0d29yay1ncmFwaGljL2xvZ28xMC5wbmcnKSBuby1yZXBlYXQgcmlnaHQgdG9wOwogIGNvbG9yOiAjMDAwOwogIHBhZGRpbmctbGVmdDogMDsgCiAgcGFkZGluZy1yaWdodDogMDsKICBtYXJnaW4tYm90dG9tOiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5sYXlvdXQtYmFuZCB7CiAgcGFkZGluZzogMiUgMTVweCAxJSAxNXB4Owp9Cgpib2R5LnBhZ2UtaWQtMTQwIC50dGwgewogIGZvbnQtZmFtaWx5OiAnTkhhYXNHcm90ZXNrRGlzcCcsICdIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7IAoJZm9udC13ZWlnaHQ6IDYwMDsKfQpib2R5LnBhZ2UtaWQtMTQwIC5tYWluLWNvbnRlbnQgcCB7CiAgbGluZS1oZWlnaHQ6IDEuMTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubWFpbi1jb250ZW50IC5saXN0LXVuYnVsbGV0ZWQgbGkgewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCAuY3RhLWxpbmsgewogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgZWFzZS1pbi1vdXQgLjNzOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwYWRkaW5nOiAxMHB4OyAgCiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCAuY3RhLWxpbms6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNkMzAwY2M7CiAgY29sb3I6ICNmZmY7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtaW50cm8gewogIHBhZGRpbmc6IDQlIDE1cHg7CiAgY29sb3I6ICMwMDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtaW50cm8gLnR0bCB7CiAgZm9udC1zaXplOiAzNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKICBtYXJnaW4tYm90dG9tOiAuM2VtOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWludHJvIC5wdWxsIHsKICBmb250LXNpemU6IDIwcHg7CiAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC13ZS1hcmUgewogIG1hcmdpbi10b3A6IDFyZW07Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgeyAKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGVhc2UtaW4tb3V0IC4zczsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjMDAwOwogIG1hcmdpbjogMTVweDsKICBwYWRkaW5nLXRvcDogNXB4OwogIGxpbmUtaGVpZ2h0OiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMEZGOwogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgY29sb3I6ICNmZmY7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQ6aG92ZXIgYSB7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY2FyZCAuYy1pbWFnZSB7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY2FyZCAuYy1jb250ZW50IHsKICBwYWRkaW5nOiAxMHB4IDMlOwogIGZvbnQtc2l6ZTogMTRweDsKfSAKCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtdHRsMSB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKICBtYXJnaW46IDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtdHRsMiB7CiAgbWFyZ2luLXRvcDogLjJlbTsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuMjsKICBmb250LXdlaWdodDogNDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWZvbCB7CiAgcGFkZGluZzogMiUgMTVweCAzJSAxNXB4OwogIGNvbG9yOiAjMDAwOwogIGZvbnQtc2l6ZTogMTRweDsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1mb2wgLnR0bCB7CiAgZm9udC1zaXplOiAzNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IC45MjsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1mb2wgLnZpc2lvbi1pdGVtIHN0cm9uZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAxZW0gMCAuMmVtIDA7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAuOTI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtZm9sIC5jdGEtbGluayB7CiAgbWFyZ2luLXRvcDogLjVlbTsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGlzdC1zb2NpYWwgewogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5saXN0LXNvY2lhbCBhIHsKICBmbGV4OiAxIDEgYXV0bzsKICBwYWRkaW5nOiAyMHB4OyAgCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDI4cHg7CiAgY29sb3I6ICMyMzQ7ICAKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3Qtc29jaWFsIGE6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMwMEM4MDA7CiAgY29sb3I6ICMwMDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSBsaSB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsgIAogIG1hcmdpbjogMDsgIAogIHBhZGRpbmctcmlnaHQ6IDEwcHg7Cn0KYm9keS5wYWdlLWlkLTE0MCAubGlzdC1waXBlIGxpOmFmdGVyICB7CiAgY29udGVudDogInwiOwogIHBhZGRpbmctbGVmdDogMTBweDsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGlzdC1waXBlIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgIHsKY29udGVudDogIiI7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKCn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgwcHgpIHsKCiAgYm9keS5wYWdlLWlkLTE0MCAud3JhcC1jYXNlLXN0dWRpZXMsIAogIGJvZHkucGFnZS1pZC0xNDAgLndyYXAtbGlua2Jsb2NrcyB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0gCiAgICAKICBib2R5LnBhZ2UtaWQtMTQwIC5jYXJkIHsKICAgIGZsZXg6IDEgMSBhdXRvOyAKICAgIHdpZHRoOiAzMCU7IAogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBtYXJnaW46IDE1cHggMCAxNXB4IDE1cHg7ICAgIAogIH0KCiAgYm9keS5wYWdlLWlkLTE0MCAuY2FyZDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMTVweDsKICB9Cn0KCgovKiBDUkVPUyBwYWdlIHN0eWxlcyAqLwpib2R5LnBhZ2UtaWQtMjc5NDUgLnRpdGxlLXBhZ2UsIApib2R5LnBhZ2UtaWQtMjc5NDUgaDIuc3VidGl0bGUgewoJICBmb250LWZhbWlseTogJ05IYWFzR3JvdGVza1R4dCcsICdIZWx2ZXRpY2EgTmV1ZScsICdLaHVsYScsICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7Cgp9CmJvZHkucGFnZS1pZC0yNzk0NSAudGl0bGUtcGFnZSBoMSB7Cglmb250LXNpemU6IDExMHB4OwoJZm9udC13ZWlnaHQ6IDYwMDsKCWxpbmUtaGVpZ2h0OiAuODsKCW1hcmdpbi10b3A6IC4yZW07Cn0KCmJvZHkucGFnZS1pZC0yNzk0NSBoMi5zdWJ0aXRsZSB7Cglmb250LXNpemU6IDI0cHg7Cglmb250LXdlaWdodDogNjAwOwoJbWFyZ2luLWJvdHRvbTogLjhlbTsKfQovKiB3aWRnZXQgdXRpbGl0eSBjbGFzc2VzICovCi5zaWRlYmFyIC5uby10b3AtYm9yZGVyIHsKCWJvcmRlci10b3A6IG5vbmU7Cn0KCi5zaWRlYmFyIC5oaWRlLXRpdGxlIC53aWRnZXQtdGl0bGUgeyAKCWRpc3BsYXk6IG5vbmU7Cn0KCi5zaWRlYmFyIC5jYWxsb3V0LndpZGdldCB7CgliYWNrZ3JvdW5kOiAjZTRlNGU0IDsKCWJvcmRlci10b3A6IDJweCBzb2xpZCAjYzYzIDsKCXBhZGRpbmctbGVmdDogMjBweCA7CglwYWRkaW5nLXJpZ2h0OiAyMHB4IDsKCQlwYWRkaW5nLXRvcDogMTVweCA7CgkJcGFkZGluZy1ib3R0b206IDE1cHggOwoJCW1hcmdpbi1ib3R0b206IDIwcHg7Cn0JCTwvc3R5bGU+CgkJCTxzY3JpcHQ+CgkJdG9kYXlEYXRlPSIiOwoJPC9zY3JpcHQ+CjwvaGVhZD4KCjxib2R5IGNsYXNzPSJ3cC1zaW5ndWxhciBwYWdlLXRlbXBsYXRlIHBhZ2UtdGVtcGxhdGUtdGVtcGxhdGVzIHBhZ2UtdGVtcGxhdGUtcGFnZSBwYWdlLXRlbXBsYXRlLXRlbXBsYXRlc3BhZ2UtcGhwIHBhZ2UgcGFnZS1pZC0xNDAgcGFnZS1wYXJlbnQgd3AtdGhlbWUtbWl0bGliLXBhcmVudCBwYWdlLWFib3V0NyBmdWxsLXdpZHRoIHNpbmdsZS1hdXRob3IiPgoJPGRpdiBpZD0ic2tpcCI+PGEgaHJlZj0iI2NvbnRlbnQiPlNraXAgdG8gTWFpbiBDb250ZW50PC9hPjwvZGl2PgoJPGRpdiBjbGFzcz0id3JhcC1wYWdlIj4KCQk8aGVhZGVyIGNsYXNzPSJoZWFkZXItbWFpbiBmbGV4LWNvbnRhaW5lciBmbGV4LWVuZCI+CgkJCQkJCQk8bmF2PgoJPGJ1dHRvbiBjbGFzcz0ibWVudS0tdG9nZ2xlIj48IS0tIE1vYmlsZSBIYW1idXJnZXIgaWNvbiAtLT4KCQk8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxOC45MDlweCIgaGVpZ2h0PSIxMy4wOTFweCIgdmlld0JveD0iMi4xODIgNi41NDUgMTguOTA5IDEzLjA5MSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAyLjE4MiA2LjU0NSAxOC45MDkgMTMuMDkxIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMi45MDksNi41NDVoMTcuNDU0YzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTZjMC4xNDUsMC4xNDQsMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFzLTAuMDcxLDAuMzY3LTAuMjE2LDAuNTExCgkJYy0wLjE0NSwwLjE0NC0wLjMxNCwwLjIxNi0wLjUxMiwwLjIxNkgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNkMyLjI1NCw3LjYzOSwyLjE4Miw3LjQ2OSwyLjE4Miw3LjI3MgoJCXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMUMyLjU0Miw2LjYxNywyLjcxMiw2LjU0NSwyLjkwOSw2LjU0NXogTTIwLjM2MywxMy44MThIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTYKCQlzLTAuMjE2LTAuMzE0LTAuMjE2LTAuNTExYzAtMC4xOTYsMC4wNzItMC4zNjcsMC4yMTYtMC41MTFzMC4zMTQtMC4yMTYsMC41MTEtMC4yMTZoMTcuNDU0YzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTYKCQlzMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFjMCwwLjE5Ny0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMVMyMC41NjEsMTMuODE4LDIwLjM2MywxMy44MTh6IE0yMC4zNjMsMTkuNjM2SDIuOTA5CgkJYy0wLjE5NywwLTAuMzY3LTAuMDcxLTAuNTExLTAuMjE2cy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMWMwLjE0NC0wLjE0NSwwLjMxNC0wLjIxNywwLjUxMS0wLjIxN2gxNy40NTQKCQljMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxN2MwLjE0NSwwLjE0NCwwLjIxNiwwLjMxNCwwLjIxNiwwLjUxMXMtMC4wNzEsMC4zNjYtMC4yMTYsMC41MTFTMjAuNTYxLDE5LjYzNiwyMC4zNjMsMTkuNjM2eiIvPgoJCTwvc3ZnPgoJPC9idXR0b24+PCEtLSBlbmQgaGFtYnVyZ2VyIGljb24gLS0+CjwvbmF2PgoKPCEtLSBNZW51IHNob3duIG9uIG1vYmlsZSBzY3JlZW5zLCB3aGVuIHRoZSBoYW1idXJnZXIgaWNvbiBpcyB0YXBwZWQuIC0tPgo8bmF2IGlkPSJuYXYtbW9iaWxlIiBjbGFzcz0ibmF2LW1haW4gaGlkZGVuLW5vbi1tb2JpbGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iL3NlYXJjaCIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPlNlYXJjaDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvaG91cnMiIGNsYXNzPSJuby11bmRlcmxpbmUgbW9iaWxlLW5hdi1saW5rIGhpZGUtbW9iaWxlLW5hdi1saW5rIj5Ib3VycyAmIGxvY2F0aW9uczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvYm9ycm93IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1vYmlsZS1uYXYtbGluayBoaWRlLW1vYmlsZS1uYXYtbGluayI+Qm9ycm93ICYgcmVxdWVzdDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvcmVzZWFyY2gtc3VwcG9ydCIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPlJlc2VhcmNoIHN1cHBvcnQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iL2Fib3V0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1vYmlsZS1uYXYtbGluayBoaWRlLW1vYmlsZS1uYXYtbGluayI+QWJvdXQ8L2E+PC9saT4KCTwvdWw+CjwvbmF2PgoJCQkJCQkKPGgxIGNsYXNzPSJuYW1lLXNpdGUgZ3JvdXAgbmF2LWxvZ28iPgoJPGEgaHJlZj0iLyIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+CgkJPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjUgLTMgMjEwIDk1Ij48dGl0bGU+TUlUIExpYnJhcmllcyBsb2dvPC90aXRsZT48cGF0aCBkPSJNOC4xMiw5SDIwbDQuMzUsMTUuNjVjLjE3LjU3LjM2LDEuMzEuNTgsMi4yMnMuNDQsMS44MS42NywyLjY4LjUzLDIuMTIuOCwzLjI1aC4xYy4yMy0xLjEzLjQ4LTIuMjIuNzUtMy4yNS4yLS44Ny40Mi0xLjc2LjY1LTIuNjdzLjQzLTEuNjUuNi0yLjIyTDMyLjkyLDloMTJWNDQuNzVoLTguMVYyMi42NmMwLS45MywwLTEuOTUuMS0zLjA1aC0uMWMtLjI3LDEtLjUsMi0uNywyLjg1cy0uMzgsMS42MS0uNTMsMi4yMmwtLjQyLDEuNTgtNS4xLDE4LjQ5aC03LjNMMTcuNjcsMjYuM2MtLjEtLjMzLS4yNS0uODctLjQ1LTEuNnMtLjM4LTEuNDgtLjU1LTIuMjUtLjQyLTEuODItLjY3LTIuODVoLS4xdjNjMCwuOCwwLDEuNi4wOCwyLjRhOC41Myw4LjUzLDAsMCwxLDAsMS43NXYxOEg4VjlabTQwLDBINTdWNDQuNzVINDguMTJabTIyLjEsNy40NUg1OS44MlY5SDg5LjU3djcuNDVINzkuMDd2MjguM0g3MC4yMlpNOC4xMiw1MEgxN1Y3OC4yNUgzMy42NHY3LjVIOC4xMlptMjguNywwSDQ1djYuNkgzNi44MlptMCwxMC4xNUg0NXYyNS42SDM2LjgyWm0yNywyNi40YTkuODIsOS44MiwwLDAsMS00LjU1LTEsNy45LDcuOSwwLDAsMS0zLjItM0g1NnYzLjJINDguMlY1MGg4LjE1VjYzaC4xNWE5LjQ1LDkuNDUsMCwwLDEsMi45LTIuNTUsOC42Miw4LjYyLDAsMCwxLDQuMzctMSw5Ljg2LDkuODYsMCwwLDEsNC41MywxLDEwLDEwLDAsMCwxLDMuNDUsMi44NUExMy41MSwxMy41MSwwLDAsMSw3NCw2Ny42YTE3Ljg5LDE3Ljg5LDAsMCwxLC43LDUuNCwxOS40NSwxOS40NSwwLDAsMS0uNzgsNS43MkExMi41MywxMi41MywwLDAsMSw3MS43Miw4M2E5LjQ4LDkuNDgsMCwwLDEtMy40NSwyLjY3QTEwLjYzLDEwLjYzLDAsMCwxLDYzLjgyLDg2LjU1Wm0tMi4zLTYuNDVhNC4xNCw0LjE0LDAsMCwwLDMuNjctMS45Miw5LjQ1LDkuNDUsMCwwLDAsMS4yOC01LjI3LDkuNzQsOS43NCwwLDAsMC0xLjI4LTUuMyw0LjIsNC4yLDAsMCwwLTMuNzctMiw0LjQzLDQuNDMsMCwwLDAtNCwyLjFBOS43LDkuNywwLDAsMCw1Ni4xMiw3M2E4LjQ5LDguNDksMCwwLDAsMS40NSw1LjE3LDQuNjksNC42OSwwLDAsMCw0LDJabTE1LjExLTIwaDcuOHY0aC4xNWE5LjU2LDkuNTYsMCwwLDEsMy0zLjM1LDcuMjksNy4yOSwwLDAsMSw0LTEsNC41Nyw0LjU3LDAsMCwxLDEuNi4ydjdIOTNhNy4zNCw3LjM0LDAsMCwwLTYsMS4yN3EtMi4xNiwxLjc4LTIuMTYsNnYxMS41SDc2LjYzWm0yNiwyNi4zYTEyLjEsMTIuMSwwLDAsMS0zLjUzLS41LDcuNTUsNy41NSwwLDAsMS0yLjc3LTEuNUE3LDcsMCwwLDEsOTQuNDgsODJhOC4wOSw4LjA5LDAsMCwxLS42Ni0zLjQsNy4yOSw3LjI5LDAsMCwxLC43OC0zLjUyLDYuNzQsNi43NCwwLDAsMSwyLjEyLTIuMzUsMTAuNzksMTAuNzksMCwwLDEsMy4xLTEuNDMsMjcsMjcsMCwwLDEsMy43Ny0uNzUsMjQuMzUsMjQuMzUsMCwwLDAsNS0xQTEuOTMsMS45MywwLDAsMCwxMTAsNjcuN2EyLjU2LDIuNTYsMCwwLDAtLjgzLTIsMy45MSwzLjkxLDAsMCwwLTIuNjctLjcsNC40MSw0LjQxLDAsMCwwLTMsLjg1LDMuNjYsMy42NiwwLDAsMC0xLjIsMi40NUg5NC44YTguNTIsOC41MiwwLDAsMSwuOC0zLjQsOC4xNCw4LjE0LDAsMCwxLDIuMTctMi44LDEwLjY1LDEwLjY1LDAsMCwxLDMuNTgtMS45LDE2LjI5LDE2LjI5LDAsMCwxLDUtLjcsMTkuNzIsMTkuNzIsMCwwLDEsNC45LjUyLDkuNyw5LjcsMCwwLDEsMy40LDEuNTgsNy4zMSw3LjMxLDAsMCwxLDIuNDUsMywxMC41LDEwLjUsMCwwLDEsLjgsNC4yNXYxMi45YTEzLjA4LDEzLjA4LDAsMCwwLC4xNywyLjQyLDEuOCwxLjgsMCwwLDAsLjczLDEuMjN2LjM1aC03LjlhMy41MywzLjUzLDAsMCwxLS41LTEuMTIsMTQuNTYsMTQuNTYsMCwwLDEtLjM1LTEuNzJoMGE4LjQsOC40LDAsMCwxLTIuNzMsMi41NCwxMCwxMCwwLDAsMS00LjY4LDFabTIuNi01LjJhNS40Niw1LjQ2LDAsMCwwLDMuNjgtMS4yLDQuMjcsNC4yNywwLDAsMCwxLjQyLTMuMzV2LTNhMTEuNSwxMS41LDAsMCwxLTEuODcuNzNjLS43Mi4yMi0xLjUuNDMtMi4zNC42MmExMC4zNiwxMC4zNiwwLDAsMC0zLjQsMS4yNywyLjQ4LDIuNDgsMCwwLDAtMSwyLjE3LDIuNDMsMi40MywwLDAsMCwxLDIuMiw0LjUzLDQuNTMsMCwwLDAsMi41LjU1aDBabTE1Ljg3LTIxaDcuNzd2NEgxMjlhOS41Niw5LjU2LDAsMCwxLDMtMy4zNSw3LjI5LDcuMjksMCwwLDEsNC0xLDQuNTcsNC41NywwLDAsMSwxLjYuMnY3aC0uMmE3LjM0LDcuMzQsMCwwLDAtNiwxLjI3Yy0xLjQ5LDEuMjItMi4yNCwzLjIyLTIuMjMsNlY4NS43NUgxMjFWNjAuMTVaTTE0MCw1MC4xaDguMTN2Ni42SDE0MFptMCwxMC4xNWg4LjEzdjI1LjVIMTQwWk0xNjQsODYuNmExNSwxNSwwLDAsMS01LjctMSwxMi4wNywxMi4wNywwLDAsMS00LjMtMi44NSwxMi44NCwxMi44NCwwLDAsMS0yLjctNC4zMywxNS4wNywxNS4wNywwLDAsMS0xLTUuNCwxNC43NCwxNC43NCwwLDAsMSwxLTUuMzMsMTIuNzIsMTIuNzIsMCwwLDEsMi43LTQuMywxMi41OCwxMi41OCwwLDAsMSw0LjEzLTIuOTQsMTQuNjIsMTQuNjIsMCwwLDEsMTAuMjgtLjE3LDEyLjI5LDEyLjI5LDAsMCwxLDMuODMsMi4zNUExMi43LDEyLjcsMCwwLDEsMTc1LjY1LDY4YTIwLjgzLDIwLjgzLDAsMCwxLDEuMDgsNy4xM0gxNTguMzJhNy41Myw3LjUzLDAsMCwwLDEuOCw0LjEsNS4xNCw1LjE0LDAsMCwwLDQsMS41LDQuODQsNC44NCwwLDAsMCwyLjY1LS42OCw0LjI4LDQuMjgsMCwwLDAsMS42LTEuODdoOGE5LjQ3LDkuNDcsMCwwLDEtMS41LDMuMzMsMTAuODUsMTAuODUsMCwwLDEtMi44LDIuNzNBMTIuMDYsMTIuMDYsMCwwLDEsMTY4LjQ5LDg2YTE1LjMxLDE1LjMxLDAsMCwxLTQuNTIuNVptNC41LTE2LjNhNiw2LDAsMCwwLTEuNS0zLjY1LDQuMzcsNC4zNywwLDAsMC0zLjMtMS4zNSw0LjY0LDQuNjQsMCwwLDAtMy42LDEuMzUsNyw3LDAsMCwwLTEuNjUsMy42NVptMjEuOSwxNi4zNXEtNS42NiwwLTktMi40MmE4LjM0LDguMzQsMCwwLDEtMy41Mi02Ljc4aDcuN0E0LjE1LDQuMTUsMCwwLDAsMTg3LDgwLjNhNS4wNiw1LjA2LDAsMCwwLDMuMjUsMSw1LjYxLDUuNjEsMCwwLDAsMi45Mi0uNjUsMi4wOCwyLjA4LDAsMCwwLDEuMDgtMS45LDEuODIsMS44MiwwLDAsMC0uNTUtMS4zNyw0LjA4LDQuMDgsMCwwLDAtMS40NS0uODUsMTEuNDYsMTEuNDYsMCwwLDAtMi4wOC0uNWMtLjc4LS4xMS0xLjU5LS4yNS0yLjQyLS40MnEtMS42NS0uMy0zLjMtLjcyYTEwLDEwLDAsMCwxLTMtMS4yOCw2LjQxLDYuNDEsMCwwLDEtMi4xMi0yLjI3LDcuNDcsNy40NywwLDAsMS0uOC0zLjY4LDcuMjEsNy4yMSwwLDAsMSwuODctMy41NSw3LjYxLDcuNjEsMCwwLDEsMi4zNS0yLjY2LDExLjE1LDExLjE1LDAsMCwxLDMuNTMtMS41NSwxNy4xOCwxNy4xOCwwLDAsMSw0LjI4LS41MmMzLjYzLDAsNi40Mi43Myw4LjM1LDIuMmE4LDgsMCwwLDEsMy4yLDZoLTcuNWEzLDMsMCwwLDAtMS4zMy0yLjM3LDUuNDgsNS40OCwwLDAsMC0yLjc4LS42Miw1LDUsMCwwLDAtMi41Mi41OEExLjksMS45LDAsMCwwLDE4Niw2N2ExLjM0LDEuMzQsMCwwLDAsLjUsMS4xLDQuMjcsNC4yNywwLDAsMCwxLjM1LjY3LDEzLjU1LDEzLjU1LDAsMCwwLDIsLjQ4bDIuMzMuNGMxLjEzLjIsMi4yNy40NCwzLjQyLjczYTEwLjUsMTAuNSwwLDAsMSwzLjE3LDEuMzIsNyw3LDAsMCwxLDIuMywyLjQyLDcuODQsNy44NCwwLDAsMSwuOSw0LDcuMzUsNy4zNSwwLDAsMS0zLjMyLDYuMzgsMTEuODQsMTEuODQsMCwwLDEtMy43LDEuNiwxOC43NSwxOC43NSwwLDAsMS00LjY2LjVaIiBzdHlsZT0iZmlsbDojZmZmOyIgLz48L3N2Zz4KCQk8c3BhbiBjbGFzcz0ic3IiPk1JVCBMaWJyYXJpZXM8L3NwYW4+Cgk8L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgo8L2gxPjwhLS0gRW5kIEgxLm5hbWUtc2l0ZSAtLT4KCQkJCQkJCQo8IS0tIE1lbnUgc2hvd24gb24gbm9uLW1vYmlsZSBzY3JlZW5zIC0tPgo8bmF2IGNsYXNzPSJuYXYtbWFpbiBoaWRkZW4tbW9iaWxlIiBhcmlhLWxhYmVsPSJQcmltYXJ5Ij4KCTx1bCBjbGFzcz0ibmF2LW1haW4tbGlzdCBmbGV4LWNvbnRhaW5lciI+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBzZWFyY2gtbGluayBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+U2VhcmNoPC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LXNlYXJjaG1lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5TdGFydCBoZXJlPC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvc2VhcmNoIj5TZWFyY2ggdG9vbHMgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NlYXJjaC1jb2xsZWN0aW9ucyI+U2VhcmNoIE91ciBDb2xsZWN0aW9ucyA8c3BhbiBjbGFzcz0iYWJvdXQiPkJvb2tzLCBhcnRpY2xlcywgYW5kIG1vcmU8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvd29ybGRjYXQiPldvcmxkQ2F0PHNwYW4gY2xhc3M9ImFib3V0Ij5Cb29rcyAmYW1wOyBtb3JlIHdvcmxkd2lkZTwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYXoucGhwIj5EYXRhYmFzZXMgQS1aPHNwYW4gY2xhc3M9ImFib3V0Ij5KU1RPUiwgUHViTWVkLCBXZWIgb2YgU2NpZW5jZSwgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9zZWFyY2gtcmVzZXJ2ZXMiPkNvdXJzZSByZXNlcnZlczwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+QWxzbyB0cnk8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9nb29nbGUtc2Nob2xhci10aXBzIj5Hb29nbGUgU2Nob2xhciBmb3IgTUlUIDxzcGFuIGNsYXNzPSJhYm91dCI+Q2hhbmdlIHNldHRpbmdzIHRvIGdldCBiZXR0ZXIgYWNjZXNzPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2RzcGFjZSI+RFNwYWNlQE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVCByZXNlYXJjaDwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kb21lIj5Eb21lIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlULWRpZ2l0aXplZCBpbWFnZXMsIG1hcHMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2l0ZS1zZWFyY2giPlNpdGUgc2VhcmNoPC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBocmVmPSIjIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgbWVudS1jb250cm9sIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnM8L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ob3Vyc21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1ob3Vyc21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Mb2NhdGlvbnM8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9ob3VycyI+SG91cnMgYW5kIGxvY2F0aW9ucyBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvYmFya2VyIj5CYXJrZXIgTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2Rld2V5Ij5EZXdleSBMaWJyYXJ5PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvaGF5ZGVuIj5IYXlkZW4gTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3JvdGNoIj5Sb3RjaCBMaWJyYXJ5PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZGlzdGluY3RpdmUtY29sbGVjdGlvbnMiPkRpc3RpbmN0aXZlIENvbGxlY3Rpb25zPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvbXVzaWMiPkxld2lzIE11c2ljIExpYnJhcnk8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9sc2EiPkxpYnJhcnkgU3RvcmFnZSBBbm5leDwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+VXNpbmcgdGhlIExpYnJhcmllczwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2xvY2F0aW9ucyI+TWFwIG9mIGxvY2F0aW9uczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3N0dWR5Ij5TdHVkeSBzcGFjZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kaXNhYmlsaXRpZXMiPlBlcnNvbnMgd2l0aCBkaXNhYmlsaXRpZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9jb3B5aW5nIj5TY2FuICZhbXA7IHByaW50PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Zpc2l0b3JzIj5WaXNpdG9yczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3VzZS1wb2xpY2llcyI+TGlicmFyeSB1c2UgcG9saWN5PC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ib3Jyb3dtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYm9ycm93bWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlJlbmV3LCByZXF1ZXN0LCBzdWdnZXN0PC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvYm9ycm93Ij5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvYWNjb3VudHMiPkFjY291bnRzIG92ZXJ2aWV3IDxzcGFuIGNsYXNzPSJhYm91dCI+WW91ciBBY2NvdW50LCBJTExpYWQsIEFlb24sIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBvd25lZCBieSBNSVQ8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvd29ybGRjYXQiPldvcmxkQ2F0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBub3Qgb3duZWQgYnkgTUlUPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2lsbGlhZCI+SUxMaWFkIDxzcGFuIGNsYXNzPSJhYm91dCI+VHJhY2sgeW91ciBJbnRlcmxpYnJhcnkgQm9ycm93aW5nIHJlcXVlc3RzPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3N1Z2dlc3QtcHVyY2hhc2UiPlN1Z2dlc3QgYSBwdXJjaGFzZTwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TW9yZSBpbmZvcm1hdGlvbjwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Jlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9ib3Jyb3ctZGlyZWN0Ij5Cb3Jyb3cgRGlyZWN0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBmcm9tIEhhcnZhcmQsIFlhbGUsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvb3RoZXJsaWJyYXJpZXMiPlZpc2l0IG5vbi1NSVQgbGlicmFyaWVzIDxzcGFuIGNsYXNzPSJhYm91dCI+SGFydmFyZCwgQm9ycm93IERpcmVjdCwgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvbGk+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBocmVmPSIjIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgbWVudS1jb250cm9sIj5SZXNlYXJjaCBzdXBwb3J0PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5IZWxwICZhbXA7IHVzZWZ1bCB0b29sczwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQiPlJlc2VhcmNoIHN1cHBvcnQgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2FzayI+QXNrIHVzIDxzcGFuIGNsYXNzPSJhYm91dCI+RW1haWwsIGNoYXQsIGNhbGwsIGRyb3AgYnk8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZXhwZXJ0cyI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zIDxzcGFuIGNsYXNzPSJhYm91dCI+Rm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0PC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2F1dGhlbnRpY2F0ZSI+QXV0aGVudGljYXRlIHRvIG9ubGluZSByZXNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5UaXBzICZhbXA7IHRyaWNrczwvc3Bhbj48L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlB1Ymxpc2hpbmcgJmFtcDsgY29udGVudCBtYW5hZ2VtZW50PC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvcmVmZXJlbmNlcyI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyB0b29scyA8c3BhbiBjbGFzcz0iYWJvdXQiPk1lbmRlbGV5LCBab3Rlcm8sICZhbXA7IE92ZXJsZWFmPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2NpdGluZyI+Q2l0aW5nIHNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5Bdm9pZCBwbGFnaWFyaXNtLCBmb3JtYXQgcmVmZXJlbmNlcywgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kYXRhLXNlcnZpY2VzIj5EYXRhIHNlcnZpY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+R0lTLCBkYXRhIG1hbmFnZW1lbnQsIHN0YXRpc3RpY2FsIHN1cHBvcnQ8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2Nob2xhcmx5Ij5TY2hvbGFybHkgY29tbXVuaWNhdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5PcGVuIGFjY2VzcywgY29weXJpZ2h0LCAmYW1wOyBwdWJsaXNoaW5nPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2FwaXMiPkFQSXMgZm9yIHNjaG9sYXJseSByZXNvdXJjZXM8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCTwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CgkJPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KCQk8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CgkJCTxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KCQkJCTxhIGlkPSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGhyZWY9IiMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBtZW51LWNvbnRyb2wiPkFib3V0PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYWJvdXRtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BYm91dCB0aGUgTGlicmFyaWVzPC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvYWJvdXQvIj5BYm91dCB1cyBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvY29udGFjdCI+Q29udGFjdCB1czwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2pvYnMiPkpvYnM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9naXZpbmciPkdpdmluZyB0byB0aGUgTUlUIExpYnJhcmllczwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TmV3cywgZXZlbnRzLCAmYW1wOyBleGhpYml0czwvaDM+CgkJCQkJPGEgaHJlZj0iL2V2ZW50cyI+Q2xhc3NlcyAmYW1wOyBldmVudHM8L2E+CgkJCQkJPGEgaHJlZj0iL25ld3MiPk5ld3M8L2E+CgkJCQkJPGEgaHJlZj0iL2V4aGliaXRzIj5FeGhpYml0cyAmYW1wOyBnYWxsZXJpZXM8L2E+CgkJCQkJPGEgaHJlZj0iL25ld3MvaW4tdGhlLW1lZGlhIj5JbiB0aGUgbWVkaWE8L2E+CgkJCQkJPGEgaHJlZj0iL21pdC1yZWFkcy8iPk1JVCBSZWFkczwvYT4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwgY2hhdCBwdXNoIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LWFza3VzbWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNi41OTNweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYuNTkzIDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNi41OTMgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xNi41OTMgNi4yNzhjMCAxLjA3NC0wLjA3NCAyLjE0OC0wLjI0MSAzLjE4NSAtMC4yMDQgMS4zNTMtMS43MjIgMi41NzQtMy4wNTUgMi43MjIgLTEuMzUzIDAuMTMxLTIuNjg2IDAuMjA0LTQuMDIgMC4yMjNMNS43NCAxNS44MzNDNS42MyAxNS45NDQgNS40ODEgMTYgNS4zMzQgMTZjLTAuMDk0IDAtMC4xNjctMC4wMTktMC4yNDEtMC4wMzdDNC44NzEgMTUuODcgNC43NCAxNS42NDcgNC43NCAxNS40MDdWMTIuMzdjLTAuNDgxLTAuMDM2LTAuOTYzLTAuMDU1LTEuNDQzLTAuMTExIC0xLjMzNC0wLjE0OC0yLjg1My0xLjQ0My0zLjA3NC0yLjc5NkMwLjA3NCA4LjQyNiAwIDcuMzUyIDAgNi4yOTZjMC0xLjA5MiAwLjA3NC0yLjE4NSAwLjIyMy0zLjI0IDAuMjIyLTEuMzUyIDEuNzQtMi42NDggMy4wNzQtMi43OTdDNC45NjMgMC4wOTMgNi42MyAwIDguMjk3IDBzMy4zMzMgMC4wOTMgNSAwLjI1OWMxLjMzMyAwLjE0OSAyLjg1MSAxLjQ0NSAzLjA1NSAyLjc5N0MxNi41MTkgNC4xMTEgMTYuNTkzIDUuMjA0IDE2LjU5MyA2LjI3OCIvPjwvc3ZnPjxzcGFuPkFzayBVczwvc3Bhbj48L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hc2t1c21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hc2t1c21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgcHVzaCI+CgkJCQk8ZGl2IGNsYXNzPSJ3cmFwLWJ1dHRvbi1jaGF0Ij4KCQkJCQk8ZGl2IGlkPSdsaWJjaGF0X2JlMmM2NTRiNjNkZDQzZjMxYzU2Mjk1ZWU1ZDc4ZDg4Jz48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGEgY2xhc3M9Im1vcmUiIGhyZWY9Ii9hc2siPk1vcmUgd2F5cyB0byBhc2sgdXM8L2E+CgkJCTwvZGl2PgoJCTwvbGk+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBocmVmPSIvYWNjb3VudHMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBhY2NvdW50LWxpbmsiPgoJCQkJCTxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPjxzcGFuPkFjY291bnQ8L3NwYW4+CgkJCQk8L2E+CgkJCTwvaDI+CgkJPC9saT4KCTwvdWw+CjwvbmF2PgoJCQkJCQk8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cDovL3d3dy5taXQuZWR1Ij48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0X2xvZ29fc3RkX3JnYl93aGl0ZS5zdmciIGhlaWdodD0iMzIiIGFsdD0iTUlUIGxvZ28iID4KCQkJPC9hPjwhLS0gRW5kIE1JVCBMb2dvIC0tPgoJCQkJCQkJCjxhIGhyZWY9Ii9zZWFyY2giIGNsYXNzPSJsaW5rLXNpdGUtc2VhcmNoIGhpZGRlbi1ub24tbW9iaWxlIj4KCTxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTIiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxMiAxMiIgY2xhc3M9Imljb24tc2VhcmNoIj48cGF0aCBkPSJNNy4yNzMgMC43MjdxMS4xODcgMCAyLjE5IDAuNTg1dDEuNTg4IDEuNTg4IDAuNTg1IDIuMTktMC41ODUgMi4xOS0xLjU4OCAxLjU4OC0yLjE5IDAuNTg1cS0xLjI3OCAwLTIuMzMtMC42NzZsLTMuMjg0IDMuMzAxcS0wLjI5NSAwLjI4NC0wLjY4OCAwLjI4NC0wLjQwMyAwLTAuNjg4LTAuMjg0dC0wLjI4NC0wLjY4OCAwLjI4NC0wLjY4OGwzLjMwMS0zLjI4NHEtMC42NzYtMS4wNTEtMC42NzYtMi4zMyAwLTEuMTg4IDAuNTg1LTIuMTl0MS41ODgtMS41ODggMi4xOS0wLjU4NXpNNy4yNzMgOHEwLjU5MSAwIDEuMTI4LTAuMjN0MC45MjktMC42MjIgMC42MjItMC45MjkgMC4yMy0xLjEyOC0wLjIzLTEuMTI4LTAuNjIyLTAuOTI5LTAuOTI5LTAuNjIyLTEuMTI4LTAuMjMtMS4xMjggMC4yMy0wLjkyOSAwLjYyMi0wLjYyMiAwLjkyOS0wLjIzIDEuMTI4IDAuMjMgMS4xMjggMC42MjIgMC45MjkgMC45MjkgMC42MjIgMS4xMjggMC4yM3oiPjwvcGF0aD48L3N2Zz4KCTxzcGFuIGNsYXNzPSJib3R0b20iPlNlYXJjaDwvc3Bhbj4KPC9hPjwhLS0gRW5kIC9zZWFyY2ggLS0+Cgo8YSBocmVmPSIvYWNjb3VudHMiIGNsYXNzPSJsaW5rLWFjY291bnQgaGlkZGVuLW5vbi1tb2JpbGUiPgoJPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1LjQiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNS40IDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS40NDUgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJpY29uLWFjY291bnQiPjxwYXRoIGQ9Ik0xMy40IDE1LjdDMTIuMiAxNS45IDEwLjQgMTYgNy43IDE2Yy01LjQgMC03LjMtMC42LTcuMy0wLjYgLTAuMy0wLjEtMC40LTAuNC0wLjQtMC43IDAuMy0xLjYgMS4yLTIuNSAyLjUtMy4zIDAuMy0wLjIgMC44LTAuNCAxLjItMC42IDAuOC0wLjMgMS44LTAuNyAyLTEuM0M1LjggOS4yIDUuNyA4LjYgNS4yIDcuOWMtMS40LTIuMy0xLjctNC4zLTAuOC01LjlDNS4xIDAuNyA2LjQgMCA3LjcgMGMxLjQgMCAyLjYgMC43IDMuMyAyIDAuOSAxLjYgMC43IDMuNi0wLjggNS45QzkuOCA4LjYgOS42IDkuMiA5LjggOS42YzAuMiAwLjYgMS4yIDEgMiAxLjMgMC40IDAuMiAwLjkgMC40IDEuMiAwLjYgMS4yIDAuOCAyLjEgMS42IDIuNSAzLjMgMC4xIDAuMy0wLjEgMC42LTAuNCAwLjdDMTUgMTUuNCAxNC41IDE1LjYgMTMuNCAxNS43Ii8+PC9zdmc+Cgk8c3BhbiBjbGFzcz0iYm90dG9tIj5BY2NvdW50PC9zcGFuPgo8L2E+PCEtLSBFbmQgL2JhcnRvbi1hY2NvdW50IC0tPgoKPGEgaHJlZj0iL2NvbnRhY3QiIGNsYXNzPSJsaW5rLWNvbnRhY3QgaGlkZGVuLW5vbi1tb2JpbGUiPgoJPGkgY2xhc3M9ImZhIGZhLWJvb2siIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+Cgk8c3BhbiBjbGFzcz0iYm90dG9tIj5Db250YWN0PC9zcGFuPgo8L2E+PCEtLSBFbmQgL2NvbnRhY3QgLS0+CgkJCQkJPC9oZWFkZXI+CgoKCTxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzLS1iZXR0ZXIgaGlkZGVuLXBob25lIGdyb3VwIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJicmVhZGNydW1icyI+Cgk8c3Bhbj48YSBocmVmPSIvIj5MaWJyYXJpZXMgaG9tZTwvYT48L3NwYW4+CglBYm91dDxzcGFuPjwvc3Bhbj48L2Rpdj4KCgoJPGRpdiBpZD0ic3RhZ2UiIGNsYXNzPSJpbm5lciIgcm9sZT0ibWFpbiI+CgoJCQoJCTxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJjb250ZW50Ij4KCgkJCQkJCQkKCjxkaXYgY2xhc3M9Im1haW4tY29udGVudCBjb250ZW50LW1haW4iPgoJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJPGRpdiBjbGFzcz0iZW50cnktcGFnZS10aXRsZSI+CgkJCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJ3cmFwLWludHJvIGxheW91dC1iYW5kIj4KPGgyIGNsYXNzPSJ0dGwiPlNhdmluZyB0aGUgd29ybGQsIGJpdCBieSBiaXQuPC9oMj4KPHAgY2xhc3M9InB1bGwiPk91ciB2aXNpb24/IEEgd29ybGQgd2hlcmUgbW9yZSBwZW9wbGUgaGF2ZSBhY2Nlc3MgdG8ga25vd2xlZGdlIGFuZCBtb3JlIHZvaWNlcyBhcmUgaGVhcmQuIFdoZXJlIHRvb2xzIGFuZCBzb2x1dGlvbnMgY2FuIGJlIG5ldHdvcmtlZCwgc2hhcmVkLCBhbmQgJiM4MjIwO2hhY2tlZC4mIzgyMjE7IFdoZXJlIGtub3dsZWRnZSBub3Qgb25seSBwcm92aWRlcyBhbnN3ZXJzLCBidXQgZW1wb3dlcnMgYW5kIGluc3BpcmVzLiBXZSB0aGluayBsaWJyYXJpZXMgY2FuIGhlbHAgYnVpbGQgdGhpcyB3b3JsZC4gTGV0JiM4MjE3O3MgZ2V0IHN0YXJ0ZWQuPC9wPgo8ZGl2IGNsYXNzPSJ3cmFwLXdlLWFyZSI+Cjx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KPGxpPjxhIGNsYXNzPSJjdGEtbGluayIgaHJlZj0iL2Fib3V0L29yZ2FuaXphdGlvbi8iPkRpc2NvdmVyIG91ciBtaXNzaW9uLCB2aXNpb24sIGFuZCB2YWx1ZXM8L2E+PC9saT4KPGxpPjxhIGNsYXNzPSJjdGEtbGluayIgaHJlZj0iaHR0cHM6Ly93d3cucHVicHViLm9yZy9wdWIvZnV0dXJlLW9mLWxpYnJhcmllcyI+UmVhZCB0aGUgRnV0dXJlIG9mIExpYnJhcmllcyBUYXNrIEZvcmNlIFJlcG9ydDwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9IndyYXAtY2FzZS1zdHVkaWVzIj4KPGRpdiBjbGFzcz0iY2FyZCBjYXJkMSI+CjxkaXYgY2xhc3M9ImMtaW1hZ2UiPjxhIGhyZWY9Ii9mdXR1cmUtc3BhY2VzLyI+PGltZyBkZWNvZGluZz0iYXN5bmMiIHNyYz0iaHR0cDovL2xpYnJhcmllcy5taXQuZWR1L2FwcC91cGxvYWRzLzIwMTgvMTIvaGF5ZGVuLW5pZ2h0LWFib3V0LmpwZyIgYWx0PSJIYXlkZW4gTGlicmFyeSBleHRlcmlvciBhdCBuaWdodCIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImMtY29udGVudCI+CjxoMyBjbGFzcz0iYy10dGwxIHR0bCI+RW52aXNpb25pbmcgSGF5ZGVuIExpYnJhcnk8L2gzPgo8cCBjbGFzcz0iYy10dGwyIj5UaGUgTGlicmFyaWVzIGFyZSBwdXJzdWluZyBhIHJlbm92YXRpb24gb2YgSGF5ZGVuIHRoYXQgcmVmbGVjdHMgb3VyIHZpc2lvbiBmb3IgdGhlIGZ1dHVyZSBvZiBsaWJyYXJpZXMuPC9wPgo8cD48YSBjbGFzcz0iYy1jdGEiIGhyZWY9Ii9mdXR1cmUtc3BhY2VzLyI+TGVhcm4gbW9yZTwvYT48L3A+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iY2FyZCBjYXJkMiI+CjxkaXYgY2xhc3M9ImMtaW1hZ2UiPjxhIGhyZWY9Imh0dHA6Ly9uZXdzLm1pdC5lZHUvMjAxOS9vcGVuLWFjY2Vzcy10YXNrLWZvcmNlLXJlbGVhc2VzLWRyYWZ0LXJlY29tbWVuZGF0aW9ucy0wMzE4Ij48aW1nIGRlY29kaW5nPSJhc3luYyIgc3JjPSJodHRwOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3VwbG9hZHMvMjAxOS8wMy9sb2JieS03LWNyb3AuanBnIiBhbHQ9Ik1JVCdzIExvYmJ5IDcgLSBhIGNlbnRyYWwgbG9jYXRpb24gb24gY2FtcHVzIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iYy1jb250ZW50Ij4KPGgzIGNsYXNzPSJjLXR0bDEgdHRsIj5GdXJ0aGVyaW5nIE1JVOKAmXMgbWlzc2lvbjwvaDM+CjxwIGNsYXNzPSJjLXR0bDIiPlRoZSBmaW5hbCByZWNvbW1lbmRhdGlvbnMgZnJvbSB0aGUgT3BlbiBBY2Nlc3MgVGFzayBGb3JjZSB1cmdlIHRoZSBvcGVuIHNoYXJpbmcgb2YgTUlUIHB1YmxpY2F0aW9ucywgZGF0YSwgc29mdHdhcmUsIGFuZCBtb3JlLjwvcD4KPHA+PGEgY2xhc3M9ImMtY3RhIiBocmVmPSJodHRwOi8vbmV3cy5taXQuZWR1LzIwMTkvb3Blbi1hY2Nlc3MtdGFzay1mb3JjZS1yZWxlYXNlcy1maW5hbC1yZWNvbW1lbmRhdGlvbnMtMTAxNyI+TGVhcm4gbW9yZTwvYT4KPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXJkIGNhcmQzIj4KPGRpdiBjbGFzcz0iYy1pbWFnZSI+PGEgaHJlZj0iL2NyZW9zLyI+PGltZyBkZWNvZGluZz0iYXN5bmMiIHNyYz0iaHR0cDovL2xpYnJhcmllcy5taXQuZWR1L2FwcC91cGxvYWRzLzIwMTkvMDYvQ1JFT1MtYWJvdXQuanBnIiBhbHQ9IkdyYW5kIENoYWxsZW5nZXMgU3VtbWl0IiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iYy1jb250ZW50Ij4KPGgzIGNsYXNzPSJjLXR0bDEgdHRsIj5HZXQgdG8ga25vdyBDUkVPUzwvaDM+CjxwIGNsYXNzPSJjLXR0bDIiPlRoZSBDZW50ZXIgZm9yIFJlc2VhcmNoIG9uIEVxdWl0YWJsZSBhbmQgT3BlbiBTY2hvbGFyc2hpcCAoQ1JFT1MpIGludmVzdGlnYXRlcyBob3cgZGlzcGFyYXRlIGNvbW11bml0aWVzIGNhbiBwYXJ0aWNpcGF0ZSBpbiBzY2hvbGFyc2hpcCB3aXRoIG1pbmltYWwgYmlhcyBvciBiYXJyaWVycy48L3A+CjxwPjxhIGNsYXNzPSJjLWN0YSIgaHJlZj0iL2NyZW9zLyI+TGVhcm4gbW9yZTwvYT48L3A+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9IndyYXAtZm9sIGxheW91dC1iYW5kIj4KPGgyIGNsYXNzPSJ0dGwiPk91ciB2aXNpb248L2gyPgo8cD5IZXJlJiM4MjE3O3MgaG93IHdlIHBsYW4gdG8gY29udHJpYnV0ZSB0byBhIHdvcmxkIHdpdGggZW5kdXJpbmcsIGFidW5kYW50LCBlcXVpdGFibGUsIGFuZCBtZWFuaW5nZnVsIGFjY2VzcyB0byBpbmZvcm1hdGlvbjo8L3A+CjxwIGNsYXNzPSJ2aXNpb24taXRlbSB2aXNpb24taXRlbTEiPjxzdHJvbmc+SGVscCB5b3UgZ2V0IHlvdXIgaGFuZHMgZGlydHkgd2l0aCBpbmZvcm1hdGlvbjwvc3Ryb25nPiBXZSB0aGluayBhIGxpYnJhcnkgY2FuIGJlIG1vcmUgdGhhbiBhIGNvbnZleW9yIG9mIGluZm9ybWF0aW9uOyBpdCYjODIxNztzIGFuIGFsbC1kaXNjaXBsaW5lIG1ha2VyIHNwYWNlIHdoZXJlIHlvdSBjYW4gY3JlYXRlIG5ldyBrbm93bGVkZ2UuPC9wPgo8cCBjbGFzcz0idmlzaW9uLWl0ZW0gdmlzaW9uLWl0ZW0yIj48c3Ryb25nPkVuYWJsZSBuZXcgZm9ybXMgb2Ygc2Nob2xhcnNoaXAsIHRlYWNoaW5nLCBhbmQgbGVhcm5pbmc8L3N0cm9uZz4gUGVvcGxlIHdhbnQgdG8gaW50ZXJhY3Qgd2l0aCBjb250ZW50IGluIG1vcmUgYWN0aXZlLCBpbm5vdmF0aXZlLCBhbmQgY29ubmVjdGVkIHdheXMuIFdlJiM4MjE3O2xsIGJ1aWxkIGEgZ2xvYmFsIHBsYXRmb3JtIG9wZW4gdG8gYW55b25lIHdobyB3YW50cyB0byBidWlsZCB0b29scyBvciB1c2UgY29sbGVjdGlvbnMgaW4gbm92ZWwgd2F5cyAmIzgyMTE7IHdoZXRoZXIgYnkgaHVtYW5zLCBhbGdvcml0aG1zLCBvciBtYWNoaW5lcy48L3A+CjxwIGNsYXNzPSJ2aXNpb24taXRlbSB2aXNpb24taXRlbTMiPjxzdHJvbmc+U2hhcmUgdGhlIHJlc2VhcmNoIG9mIE1JVDwvc3Ryb25nPiBUbyBmdXJ0aGVyIGl0cyBtaXNzaW9uIG9mIGJ1aWxkaW5nIGEgYmV0dGVyIHdvcmxkLCB3ZSB3aWxsIG1ha2UgdGhlIEluc3RpdHV0ZSYjODIxNztzIGRpc3RpbmN0IGJvZHkgb2Yga25vd2xlZGdlIG1vcmUgb3BlbiwgZXF1aXRhYmxlLCBhY2Nlc3NpYmxlLCBhbmQgZHVyYWJsZS48L3A+CjxwIGNsYXNzPSJ2aXNpb24taXRlbSB2aXNpb24taXRlbTQiPjxzdHJvbmc+RW5nYWdlIGluIHJlc2VhcmNoIHRvIHRhY2tsZSB0aGUgYmlnIHF1ZXN0aW9uczwvc3Ryb25nPiBNSVQgaXMgd2hlcmUgcmVzZWFyY2ggaXMgYXBwbGllZCB0byB0aGUgdG91Z2hlc3QgcHJvYmxlbXMuIFRoZSB3b3JsZCBuZWVkcyBuZXcsIGJldHRlciBtb2RlbHMgYW5kIHN5c3RlbXMgZm9yIGluZm9ybWF0aW9uIGV4Y2hhbmdlLiBJdCYjODIxNztzIHVwIHRvIHVzLCBhbmQgb3VyIHBhcnRuZXJzIGFyb3VuZCB0aGUgd29ybGQsIHRvIGludmVudCB0aGVtLjwvcD4KPHA+PGEgY2xhc3M9ImN0YS1saW5rIiBocmVmPSJodHRwczovL3d3dy5wdWJwdWIub3JnL3B1Yi9mdXR1cmUtb2YtbGlicmFyaWVzIj5XYW50IHRvIGtub3cgbW9yZT8gUmVhZCB0aGUgRnV0dXJlIG9mIExpYnJhcmllcyBUYXNrIEZvcmNlIFJlcG9ydDwvYT48YnIgLz4KPGEgY2xhc3M9ImN0YS1saW5rIiBocmVmPSIvYWJvdXQvb3JnYW5pemF0aW9uLyNzdHJhdGVnaWMtcHJpb3JpdGllcyI+V2FudCB0byBrbm93IGhvdyB3ZSBwbGFuIHRvIG1ha2UgaXQgaGFwcGVuPyBSZWFkIG91ciBTdHJhdGVnaWMgcHJpb3JpdGllczwvYT48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ3cmFwLWxpbmtibG9ja3MiPgo8ZGl2IGNsYXNzPSJjYXJkIGNhcmQxIj4KPGRpdiBjbGFzcz0iYy1pbWFnZSI+PGEgaHJlZj0iL2pvYnMiPjxpbWcgZGVjb2Rpbmc9ImFzeW5jIiBzcmM9Imh0dHA6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdXBsb2Fkcy8yMDE4LzAxL2Rlc2stc3F1YXJlLmpwZyIgYWx0PSJQZXJzb24gdmlzaXRpbmcgdGhlIEluc3RpdHV0ZSBBcmNoaXZlcyIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImMtY29udGVudCI+CjxoMyBjbGFzcz0iYy10dGwxIHR0bCI+SGVscCBidWlsZCB0aGUgZnV0dXJlPC9oMz4KPHAgY2xhc3M9ImMtdHRsMiI+PGEgaHJlZj0iL2pvYnMiPlZpZXcgb3VyIGN1cnJlbnQgam9iIG9wZW5pbmdzPC9hPjwvcD4KPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXJkIGNhcmQyIj4KPGRpdiBjbGFzcz0iYy1pbWFnZSI+PGEgaHJlZj0iL2dpdmluZyI+PGltZyBkZWNvZGluZz0iYXN5bmMiIHNyYz0iaHR0cDovL2xpYnJhcmllcy5taXQuZWR1L2FwcC91cGxvYWRzLzIwMTgvMDEvaGF5ZGVuLXNxdWFyZS5qcGciIGFsdD0iSGF5ZGVuIExpYnJhcnkgYXQgZHVzayIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImMtY29udGVudCI+CjxoMyBjbGFzcz0iYy10dGwxIHR0bCI+U3VwcG9ydCBvdXIgbWlzc2lvbjwvaDM+CjxwIGNsYXNzPSJjLXR0bDIiPjxhIGhyZWY9Ii9naXZpbmciPkdpdmUgdG8gdGhlIExpYnJhcmllczwvYT48L3A+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iY2FyZCBjYXJkMyI+CjxkaXYgY2xhc3M9ImMtaW1hZ2UiPjxhIGhyZWY9Ii9uZXdzL2luLXRoZS1tZWRpYS8iPjxpbWcgZGVjb2Rpbmc9ImFzeW5jIiBzcmM9Imh0dHA6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdXBsb2Fkcy8yMDE4LzAxL2NvbHVtbnMtc3F1YXJlLmpwZyIgYWx0PSJCYXJrZXIgTGlicmFyeSBjb2x1bW5zIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iYy1jb250ZW50Ij4KPGgzIGNsYXNzPSJjLXR0bDEgdHRsIj5JbiB0aGUgbWVkaWE8L2gzPgo8cCBjbGFzcz0iYy10dGwyIj48YSBocmVmPSIvbmV3cy9pbi10aGUtbWVkaWEvIj5SZWFkIHRoZSBzdG9yaWVzIGNhcHR1cmluZyBhdHRlbnRpb248L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ3cmFwLXNvY2lhbCI+CjxkaXYgY2xhc3M9Imxpc3Qtc29jaWFsIGxpc3QtdW5idWxsZXRlZCI+PGEgdGl0bGU9Ik1JVCBMaWJyYXJpZXMgb24gVHdpdHRlciIgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9taXRsaWJyYXJpZXMiPjxpIGNsYXNzPSJmYSBmYS10d2l0dGVyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjxzcGFuIGNsYXNzPSJzciI+TUlUIExpYnJhcmllcyBvbiBUd2l0dGVyPC9zcGFuPjwvYT4gPGEgdGl0bGU9Ik1JVCBMaWJyYXJpZXMgb24gRmFjZWJvb2siIGhyZWY9Ii9mYWNlYm9vayI+PGkgY2xhc3M9ImZhIGZhLWZhY2Vib29rIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjxzcGFuIGNsYXNzPSJzciI+TUlUIExpYnJhcmllcyBvbiBGYWNlYm9vazwvc3Bhbj48L2E+IDxhIHRpdGxlPSJNSVQgTGlicmFyaWVzIG9uIEluc3RhZ3JhbSIgaHJlZj0iaHR0cHM6Ly9pbnN0YWdyYW0uY29tL21pdGxpYnJhcmllcy8iPjxpIGNsYXNzPSJmYSBmYS1pbnN0YWdyYW0iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PHNwYW4gY2xhc3M9InNyIj5NSVQgTGlicmFyaWVzIG9uIEluc3RhZ3JhbTwvc3Bhbj48L2E+IDxhIHRpdGxlPSJNSVQgTGlicmFyaWVzIG9uIFlvdVR1YmUiIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3VzZXIvTUlUTGlicmFyaWVzIj48aSBjbGFzcz0iZmEgZmEteW91dHViZSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48c3BhbiBjbGFzcz0ic3IiPk1JVCBMaWJyYXJpZXMgb24gWW91VHViZTwvc3Bhbj48L2E+IDxhIHRpdGxlPSJNSVQgTGlicmFyaWVzIEVtYWlsIE5ld3NsZXR0ZXIiIGhyZWY9Ii9uZXdzL3N1YnNjcmliZS8iPjxpIGNsYXNzPSJmYSBmYS1lbnZlbG9wZS1vIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjxzcGFuIGNsYXNzPSJzciI+TUlUIExpYnJhcmllcyBFbWFpbCBOZXdzbGV0dGVyPC9zcGFuPjwvYT48L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImxheW91dC1iYW5kIj4KPHVsIGNsYXNzPSJsaXN0LXBpcGUiPgo8bGk+PGEgaHJlZj0ibWFpbHRvOmJyaWdoYW1mQG1pdC5lZHUiPk1lZGlhIGlucXVpcmllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2Fib3V0L29yZ2FuaXphdGlvbi8iPkFib3V0IG91ciBvcmdhbml6YXRpb248L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9qb2JzIj5Kb2JzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L25ld3MvbGlicmFyaWVzLXVudmVpbC8yNjc3Ny8iPkFib3V0IG91ciBuZXcgaWRlbnRpdHk8L2E+PC9saT4KPC91bD4KPC9kaXY+Cgk8L2Rpdj4KPC9kaXY+CgkJCQoJCQkKCQk8L2Rpdj48IS0tIGVuZCBkaXYjY29udGVudCAtLT4KCgk8L2Rpdj48IS0tIGVuZCBkaXYjc3RhZ2UgLS0+CgoKCTxmb290ZXI+CgoJCTxkaXYgY2xhc3M9ImZvb3Rlci1tYWluIGZsZXgtY29udGFpbmVyIj4KCTxkaXYgY2xhc3M9ImxpbmtzLWFsbCBmbGV4LWNvbnRhaW5lciI+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9zZWFyY2giPlNlYXJjaDwvYT48L2g0PgoJCQk8YSBocmVmPSIvc2VhcmNoLWNvbGxlY3Rpb25zIiBjbGFzcz0ibGluay1zdWIiPlNlYXJjaCBPdXIgQ29sbGVjdGlvbnM8L2E+CgkJCTxhIGhyZWY9Ii93b3JsZGNhdCIgY2xhc3M9Imxpbmstc3ViIj5Xb3JsZENhdDwvYT4KCQkJPGEgaHJlZj0iaHR0cHM6Ly9saWJndWlkZXMubWl0LmVkdS9hei5waHAiIGNsYXNzPSJsaW5rLXN1YiI+RGF0YWJhc2VzIEEtWjwvYT4KCQkJPGEgaHJlZj0iL3NlYXJjaC1yZXNlcnZlcyIgY2xhc3M9Imxpbmstc3ViIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+CgkJCTxhIGhyZWY9Ii9zaXRlLXNlYXJjaCIgY2xhc3M9Imxpbmstc3ViIj5TaXRlIHNlYXJjaDwvYT4KCQkJPGEgaHJlZj0iL3NlYXJjaCIgY2xhc3M9Imxpbmstc3ViIj5Nb3JlIHNlYXJjaCBvcHRpb25zPC9hPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtaXRlbSI+CgkJCTxoND48YSBocmVmPSIvaG91cnMiPkhvdXJzICZhbXA7IGxvY2F0aW9uczwvYT48L2g0PgoJCQk8YSBocmVmPSIvaG91cnMiIGNsYXNzPSJsaW5rLXN1YiI+SG91cnM8L2E+CgkJCTxhIGhyZWY9Ii9sb2NhdGlvbnMiIGNsYXNzPSJsaW5rLXN1YiI+TWFwIG9mIGxvY2F0aW9uczwvYT4KCQkJPGEgaHJlZj0iL3N0dWR5IiBjbGFzcz0ibGluay1zdWIiPlN0dWR5IHNwYWNlczwvYT4KCQkJPGEgaHJlZj0iL2V4aGliaXRzIiBjbGFzcz0ibGluay1zdWIiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJmbGV4LWl0ZW0iPgoJCQk8aDQ+PGEgaHJlZj0iL2JvcnJvdyI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+PC9oND4KCQkJPGEgaHJlZj0iL2FjY291bnRzIiBjbGFzcz0ibGluay1zdWIiPkFjY291bnRzIG92ZXJ2aWV3PC9hPgoJCQk8YSBocmVmPSIvcmVzZXJ2ZXMiIGNsYXNzPSJsaW5rLXN1YiI+Q291cnNlIHJlc2VydmVzPC9hPgoJCQk8YSBocmVmPSIvb3RoZXJsaWJyYXJpZXMiIGNsYXNzPSJsaW5rLXN1YiI+VmlzaXQgbm9uLU1JVCBsaWJyYXJpZXM8L2E+CgkJCTxhIGhyZWY9Ii9ib3Jyb3ciIGNsYXNzPSJsaW5rLXN1YiI+TW9yZSBib3Jyb3cgJmFtcDsgcmVxdWVzdCBvcHRpb25zPC9hPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtaXRlbSI+CgkJCTxoND48YSBocmVmPSIvcmVzZWFyY2gtc3VwcG9ydCI+UmVzZWFyY2ggc3VwcG9ydDwvYT48L2g0PgoJCQk8YSBocmVmPSIvYXNrIiBjbGFzcz0ibGluay1zdWIiPkFzayB1czwvYT4KCQkJPGEgaHJlZj0iL2V4cGVydHMiIGNsYXNzPSJsaW5rLXN1YiI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zPC9hPgoJCQk8YSBocmVmPSIvc2Nob2xhcmx5IiBjbGFzcz0ibGluay1zdWIiPlNjaG9sYXJseSBjb21tdW5pY2F0aW9uczwvYT4KCQkJPGEgaHJlZj0iL3JlZmVyZW5jZXMiIGNsYXNzPSJsaW5rLXN1YiI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyBzb2Z0d2FyZTwvYT4KCQkJPGEgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQiIGNsYXNzPSJsaW5rLXN1YiI+TW9yZSByZXNlYXJjaCBzdXBwb3J0IG9wdGlvbnM8L2E+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9hYm91dCI+QWJvdXQgdXM8L2E+PC9oND4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvY29udGFjdCI+Q29udGFjdCB1czwvYT4gfCA8YSBocmVmPSIvZm9sbG93Ij5Gb2xsb3cgdXM8L2E+PC9zcGFuPgoJCQk8c3BhbiBjbGFzcz0ibGluay1zdWIiPjxhIGhyZWY9Ii9uZXdzIj5OZXdzPC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvZXZlbnRzIj5DbGFzc2VzICZhbXA7IGV2ZW50czwvYT48L3NwYW4+CgkJCTxzcGFuIGNsYXNzPSJsaW5rLXN1YiI+PGEgaHJlZj0iL3VzZS1wb2xpY2llcyI+VXNlIHBvbGljeTwvYT48L3NwYW4+CgkJCTxzcGFuIGNsYXNzPSJsaW5rLXN1YiI+PGEgaHJlZj0iL2dpdmluZyI+R2l2aW5nPC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvYWJvdXQiPk1vcmUgYWJvdXQgdXM8L2E+PC9zcGFuPgoJCTwvZGl2PgoJPC9kaXY+PCEtLSBlbmQgZGl2LmxpbmtzLWFsbCAtLT4KCgk8ZGl2IGNsYXNzPSJpZGVudGl0eSBmbGV4LWNvbnRhaW5lciI+CgkJPGEgaHJlZj0iLyIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+PGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdGxpYi13b3JkbWFyay5zdmciIGFsdD0iTUlUIExpYnJhcmllcyBsb2dvIj48L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgoKCQk8ZGl2IGNsYXNzPSJsaW5rcy1wcmltYXJ5IGZsZXgtY29udGFpbmVyIj4KCQkJPHNwYW4+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9wcml2YWN5IiBjbGFzcz0ibGluay1zdWIiPlByaXZhY3k8L2E+PC9zcGFuPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Blcm1pc3Npb25zIiBjbGFzcz0ibGluay1zdWIiPlBlcm1pc3Npb25zPC9hPjwvc3Bhbj4KCQkJPHNwYW4+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hY2Nlc3NpYmlsaXR5IiBjbGFzcz0ibGluay1zdWIiPkFjY2Vzc2liaWxpdHk8L2E+PC9zcGFuPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2NvbnRhY3QiIGNsYXNzPSJsaW5rLXN1YiI+Q29udGFjdCB1czwvYT48L3NwYW4+CgkJPC9kaXY+PCEtLSBFbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgoJPC9kaXY+PCEtLSBFbmQgZGl2LmlkZW50aXR5IC0tPgo8L2Rpdj4KCgkJPGRpdiBjbGFzcz0iZm9vdGVyLWluZm8taW5zdGl0dXRlIj4KCQkJPGEgY2xhc3M9ImxpbmstbG9nby1taXQiIGhyZWY9Imh0dHBzOi8vd3d3Lm1pdC5lZHUiPgoJCQkJPGltZyBzcmM9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2xvY2FsL21pdF9sb2NrdXBfc3RkLXRocmVlLWxpbmVfcmdiX3doaXRlLnN2ZyIgYWx0PSJNSVQiIHdpZHRoPSIxNTIiPgoJCQk8L2E+CgoJCQk8ZGl2IGNsYXNzPSJsaWNlbnNlIj5Db250ZW50IGNyZWF0ZWQgYnkgdGhlIE1JVCBMaWJyYXJpZXMsIDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy80LjAvIj5DQyBCWS1OQzwvYT4gdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gPGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0L25vdGljZXMvY29weXJpZ2h0LW5vdGlmeS8iPk5vdGlmeSB1cyBhYm91dCBjb3B5cmlnaHQgY29uY2VybnM8L2E+LjwvZGl2PgoJCTwvZGl2PjwhLS0gRW5kIGRpdi5mb290ZXItaW5mby1pbnN0aXR1cmUgLS0+Cgk8L2Zvb3Rlcj4KCjwvZGl2PjwhLS0gRW5kIGRpdi53cmFwLXBhZ2UgLS0+Cgo8c2NyaXB0IHR5cGU9InNwZWN1bGF0aW9ucnVsZXMiPgp7InByZWZldGNoIjpbeyJzb3VyY2UiOiJkb2N1bWVudCIsIndoZXJlIjp7ImFuZCI6W3siaHJlZl9tYXRjaGVzIjoiXC8qIn0seyJub3QiOnsiaHJlZl9tYXRjaGVzIjpbIlwvd3BcL3dwLSoucGhwIiwiXC93cFwvd3AtYWRtaW5cLyoiLCJcL2FwcFwvdXBsb2Fkc1wvKiIsIlwvYXBwXC8qIiwiXC9hcHBcL3BsdWdpbnNcLyoiLCJcL2FwcFwvdGhlbWVzXC9taXRsaWItcGFyZW50XC8qIiwiXC8qXFw/KC4rKSJdfX0seyJub3QiOnsic2VsZWN0b3JfbWF0Y2hlcyI6ImFbcmVsfj1cIm5vZm9sbG93XCJdIn19LHsibm90Ijp7InNlbGVjdG9yX21hdGNoZXMiOiIubm8tcHJlZmV0Y2gsIC5uby1wcmVmZXRjaCBhIn19XX0sImVhZ2VybmVzcyI6ImNvbnNlcnZhdGl2ZSJ9XX0KPC9zY3JpcHQ+CiAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbigkKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXF1YWxIZWlnaHQoZ3JvdXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFsbGVzdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzSGVpZ2h0ID0gJCh0aGlzKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXNIZWlnaHQgPiB0YWxsZXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFsbGVzdCA9IHRoaXNIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBncm91cC5oZWlnaHQodGFsbGVzdCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlcXVhbEhlaWdodCgkKCIuZGctZ3JpZC1zaG9ydGNvZGUgLmRnX2dyaWQtc2hvcnRjb2RlLWNvbCIpKTsKCiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxIZWlnaHQoJCgiLmRnLWdyaWQtc2hvcnRjb2RlIC5kZ19ncmlkLXNob3J0Y29kZS1jb2wiKSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3Avd3AtaW5jbHVkZXMvanMvZGlzdC9ob29rcy5taW4uanM/dmVyPTRkNjNhM2Q0OTFkMTFmZmQ4YWM2IiBpZD0id3AtaG9va3MtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwL3dwLWluY2x1ZGVzL2pzL2Rpc3QvaTE4bi5taW4uanM/dmVyPTVlNTgwZWI0NmE5MGMyYjk5N2U2IiBpZD0id3AtaTE4bi1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0id3AtaTE4bi1qcy1hZnRlciI+Ci8qIDwhW0NEQVRBWyAqLwp3cC5pMThuLnNldExvY2FsZURhdGEoIHsgJ3RleHQgZGlyZWN0aW9uXHUwMDA0bHRyJzogWyAnbHRyJyBdIH0gKTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL2NvbnRhY3QtZm9ybS03L2luY2x1ZGVzL3N3di9qcy9pbmRleC5qcz92ZXI9Ni4xIiBpZD0ic3d2LWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJjb250YWN0LWZvcm0tNy1qcy1iZWZvcmUiPgovKiA8IVtDREFUQVsgKi8KdmFyIHdwY2Y3ID0gewogICAgImFwaSI6IHsKICAgICAgICAicm9vdCI6ICJodHRwczpcL1wvbGlicmFyaWVzLm1pdC5lZHVcL3dwLWpzb25cLyIsCiAgICAgICAgIm5hbWVzcGFjZSI6ICJjb250YWN0LWZvcm0tN1wvdjEiCiAgICB9Cn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9qcy9pbmRleC5qcz92ZXI9Ni4xIiBpZD0iY29udGFjdC1mb3JtLTctanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9kZXYuanM/dmVyPTAuOCIgaWQ9ImRldi1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2xpYmNoYXQuanM/dmVyPTAuOCIgaWQ9ImxpYmNoYXQtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9tZW51LnRvZ2dsZS5qcz92ZXI9MC44IiBpZD0ibWVudS10b2dnbGUtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InBhcmVudC1wcm9kdWN0aW9uLWpzLWJlZm9yZSI+Ci8qIDwhW0NEQVRBWyAqLwpjb25zdCBUSEVNRV9ST09UID0gImh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50IjsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9hbGVydHMuanM/dmVyPTAuOCIgaWQ9InBhcmVudC1wcm9kdWN0aW9uLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvY29yZS5qcz92ZXI9MC44IiBpZD0icGFyZW50LWludGVyaW9yLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9wYWdlLWxpbmtzLXRvL2Rpc3QvbmV3LXRhYi5qcz92ZXI9My4zLjciIGlkPSJwYWdlLWxpbmtzLXRvLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ3cGNmN2NmLXNjcmlwdHMtanMtZXh0cmEiPgovKiA8IVtDREFUQVsgKi8KdmFyIHdwY2Y3Y2ZfZ2xvYmFsX3NldHRpbmdzID0geyJhamF4dXJsIjoiaHR0cHM6XC9cL2xpYnJhcmllcy5taXQuZWR1XC93cFwvd3AtYWRtaW5cL2FkbWluLWFqYXgucGhwIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9jZjctY29uZGl0aW9uYWwtZmllbGRzL2pzL3NjcmlwdHMuanM/dmVyPTIuMi4zIiBpZD0id3BjZjdjZi1zY3JpcHRzLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPndpbmRvdy5OUkVVTXx8KE5SRVVNPXt9KTtOUkVVTS5pbmZvPXsiYmVhY29uIjoiYmFtLm5yLWRhdGEubmV0IiwibGljZW5zZUtleSI6Ik5SSlMtMDM2ODJjYzY5YzFjNWEzOTU4MyIsImFwcGxpY2F0aW9uSUQiOiI1NzgzNDMzMTkiLCJ0cmFuc2FjdGlvbk5hbWUiOiJOUWRWTWtvQ1dVQllVUkVOV0F4TmRnVk1DbGhkRmtJRUExST0iLCJxdWV1ZVRpbWUiOjAsImFwcGxpY2F0aW9uVGltZSI6Mjg4LCJhdHRzIjoiR1VCV1JBSVlTazQ9IiwiZXJyb3JCZWFjb24iOiJiYW0ubnItZGF0YS5uZXQiLCJhZ2VudCI6IiJ9PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==", "response_headers": {"accept-ranges": ["bytes"], "age": ["406550"], "cache-control": ["public, max-age=604800"], "content-length": ["121192"], "content-type": ["text/html; charset=UTF-8"], "date": ["Tue, 09 Dec 2025 14:24:53 GMT"], "link": ["; rel=\"https://api.w.org/\", ; rel=\"alternate\"; title=\"JSON\"; type=\"application/json\", ; rel=shortlink"], "permissions-policy": ["geolocation=(), microphone=(), camera=()"], "referrer-policy": ["no-referrer-when-downgrade"], "server": ["nginx"], "strict-transport-security": ["max-age=300"], "vary": ["Accept-Encoding, Cookie"], "via": ["1.1 varnish"], "x-cache": ["HIT"], "x-cache-hits": ["1"], "x-content-type-options": ["nosniff"], "x-frame-options": ["SAMEORIGIN"], "x-pantheon-styx-hostname": ["styx-fe3-b-5df8569779-lfsfb"], "x-served-by": ["cache-chi-kigq8000172-CHI"], "x-styx-req-id": ["416c60bc-d158-11f0-bd91-c6a1c2f971b5"], "x-timer": ["S1765290293.170547,VS0,VE4"], "x-orig-content-encoding": ["gzip"]}} +{"url": "https://libraries.mit.edu/research-support/", "status": "active", "cdx_warc_filename": "rec-595f2ddb3156-mitlibwebsite-20251209142415718-4.warc.gz", "cdx_title": "Research support | MIT Libraries", "cdx_offset": "1972108", "cdx_length": "37641", "html_base64": "PCFET0NUWVBFIGh0bWw+CjwhLS1baWYgbHRlIElFIDldPjxodG1sIGNsYXNzPSJuby1qcyBsdGUtaWU5IiBsYW5nPSJlbiI+PCFbZW5kaWZdLS0+CjwhLS1baWYgIShJRSA4KSB8ICEoSUUgOSkgXT48IS0tPgo8aHRtbCBsYW5nPSJlbi1VUyIgY2xhc3M9Im5vLWpzIj4KPCEtLTwhW2VuZGlmXS0tPgo8aGVhZD4KCTxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4od2luZG93Lk5SRVVNfHwoTlJFVU09e30pKS5pbml0PXtwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6dHJ1ZX0sYWpheDp7ZGVueV9saXN0OlsiYmFtLm5yLWRhdGEubmV0Il19LGZlYXR1cmVfZmxhZ3M6WyJzb2Z0X25hdiJdLGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dHJ1ZX19Oyh3aW5kb3cuTlJFVU18fChOUkVVTT17fSkpLmxvYWRlcl9jb25maWc9e2FnZW50SUQ6IjU5NDM5ODc4OCIsYWNjb3VudElEOiIzODQ0ODAwIix0cnVzdEtleToiNjY2ODYiLHhwaWQ6IlZ3NERWVjVUQ0JBRlUxbFJBd0lFVjEwPSIsbGljZW5zZUtleToiTlJKUy0wMzY4MmNjNjljMWM1YTM5NTgzIixhcHBsaWNhdGlvbklEOiI1NzgzNDMzMTkiLGJyb3dzZXJJRDoiNTk0Mzk4Nzg4In07Oy8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIG5yLWxvYWRlci1zcGEtMS4zMDMuMC5taW4uanMuTElDRU5TRS50eHQgKi8KKCgpPT57dmFyIGUsdCxyPXszODQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7TlQ6KCk9PnMsVVM6KCk9PmQsWm06KCk9PmEsYlE6KCk9PnUsZFY6KCk9PmMscFY6KCk9Pmx9KTt2YXIgbj1yKDYxNTQpLGk9cigxODYzKSxvPXIoMTkxMCk7Y29uc3Qgcz17YmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGVycm9yQmVhY29uOiJiYW0ubnItZGF0YS5uZXQifTtmdW5jdGlvbiBhKCl7cmV0dXJuIG4uZ20uTlJFVU18fChuLmdtLk5SRVVNPXt9KSx2b2lkIDA9PT1uLmdtLm5ld3JlbGljJiYobi5nbS5uZXdyZWxpYz1uLmdtLk5SRVVNKSxuLmdtLk5SRVVNfWZ1bmN0aW9uIGMoKXtsZXQgZT1hKCk7cmV0dXJuIGUub3x8KGUubz17U1Q6bi5nbS5zZXRUaW1lb3V0LFNJOm4uZ20uc2V0SW1tZWRpYXRlfHxuLmdtLnNldEludGVydmFsLENUOm4uZ20uY2xlYXJUaW1lb3V0LFhIUjpuLmdtLlhNTEh0dHBSZXF1ZXN0LFJFUTpuLmdtLlJlcXVlc3QsRVY6bi5nbS5FdmVudCxQUjpuLmdtLlByb21pc2UsTU86bi5nbS5NdXRhdGlvbk9ic2VydmVyLEZFVENIOm4uZ20uZmV0Y2gsV1M6bi5nbS5XZWJTb2NrZXR9LCgwLG8uaSkoLi4uT2JqZWN0LnZhbHVlcyhlLm8pKSksZX1mdW5jdGlvbiB1KGUsdCl7bGV0IHI9YSgpO3IuaW5pdGlhbGl6ZWRBZ2VudHM/Pz17fSx0LmluaXRpYWxpemVkQXQ9e21zOigwLGkudCkoKSxkYXRlOm5ldyBEYXRlfSxyLmluaXRpYWxpemVkQWdlbnRzW2VdPXR9ZnVuY3Rpb24gZChlLHQpe2EoKVtlXT10fWZ1bmN0aW9uIGwoKXtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluZm98fHt9O2UuaW5mbz17YmVhY29uOnMuYmVhY29uLGVycm9yQmVhY29uOnMuZXJyb3JCZWFjb24sLi4udH19KCksZnVuY3Rpb24oKXtsZXQgZT1hKCk7Y29uc3QgdD1lLmluaXR8fHt9O2UuaW5pdD17Li4udH19KCksYygpLGZ1bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5sb2FkZXJfY29uZmlnfHx7fTtlLmxvYWRlcl9jb25maWc9ey4uLnR9fSgpLGEoKX19LDc4MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtUOigpPT5ufSk7Y29uc3Qgbj1yKDg2MCkuSzcucGFnZVZpZXdUaW1pbmd9LDg2MDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHskSjooKT0+ZCxLNzooKT0+YyxQMzooKT0+dSxYWDooKT0+aSxZeTooKT0+YSxkZjooKT0+byxxWTooKT0+bix2NDooKT0+c30pO2NvbnN0IG49ImV2ZW50cyIsaT0ianNlcnJvcnMiLG89ImJyb3dzZXIvYmxvYnMiLHM9InJ1bSIsYT0iYnJvd3Nlci9sb2dzIixjPXthamF4OiJhamF4IixnZW5lcmljRXZlbnRzOiJnZW5lcmljX2V2ZW50cyIsanNlcnJvcnM6aSxsb2dnaW5nOiJsb2dnaW5nIixtZXRyaWNzOiJtZXRyaWNzIixwYWdlQWN0aW9uOiJwYWdlX2FjdGlvbiIscGFnZVZpZXdFdmVudDoicGFnZV92aWV3X2V2ZW50IixwYWdlVmlld1RpbWluZzoicGFnZV92aWV3X3RpbWluZyIsc2Vzc2lvblJlcGxheToic2Vzc2lvbl9yZXBsYXkiLHNlc3Npb25UcmFjZToic2Vzc2lvbl90cmFjZSIsc29mdE5hdjoic29mdF9uYXZpZ2F0aW9ucyIsc3BhOiJzcGEifSx1PXtbYy5wYWdlVmlld0V2ZW50XToxLFtjLnBhZ2VWaWV3VGltaW5nXToyLFtjLm1ldHJpY3NdOjMsW2MuanNlcnJvcnNdOjQsW2Muc3BhXTo1LFtjLmFqYXhdOjYsW2Muc2Vzc2lvblRyYWNlXTo3LFtjLnNvZnROYXZdOjgsW2Muc2Vzc2lvblJlcGxheV06OSxbYy5sb2dnaW5nXToxMCxbYy5nZW5lcmljRXZlbnRzXToxMX0sZD17W2MucGFnZVZpZXdFdmVudF06cyxbYy5wYWdlVmlld1RpbWluZ106bixbYy5hamF4XTpuLFtjLnNwYV06bixbYy5zb2Z0TmF2XTpuLFtjLm1ldHJpY3NdOmksW2MuanNlcnJvcnNdOmksW2Muc2Vzc2lvblRyYWNlXTpvLFtjLnNlc3Npb25SZXBsYXldOm8sW2MubG9nZ2luZ106YSxbYy5nZW5lcmljRXZlbnRzXToiaW5zIn19LDk0NDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5pfSk7dmFyIG49cigzMjQxKTtmdW5jdGlvbiBpKGUsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZGVidWcmJihjb25zb2xlLmRlYnVnKCJOZXcgUmVsaWMgV2FybmluZzogaHR0cHM6Ly9naXRodWIuY29tL25ld3JlbGljL25ld3JlbGljLWJyb3dzZXItYWdlbnQvYmxvYi9tYWluL2RvY3Mvd2FybmluZy1jb2Rlcy5tZCMiLmNvbmNhdChlKSx0KSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6bnVsbCxkcmFpbmVkOm51bGwsdHlwZToiZGF0YSIsbmFtZToid2FybiIsZmVhdHVyZToid2FybiIsZGF0YTp7Y29kZTplLHNlY29uZGFyeTp0fX0pKX19LDk5MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBJDooKT0+byxFVDooKT0+cyxUWjooKT0+YSxwXzooKT0+aX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPXtFUlJPUjoiRVJST1IiLFdBUk46IldBUk4iLElORk86IklORk8iLERFQlVHOiJERUJVRyIsVFJBQ0U6IlRSQUNFIn0sbz17T0ZGOjAsRVJST1I6MSxXQVJOOjIsSU5GTzozLERFQlVHOjQsVFJBQ0U6NX0scz0ibG9nIixhPW4uSzcubG9nZ2luZ30sMTY4NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBazooKT0+dSxaZTooKT0+Zix4MzooKT0+ZH0pO3ZhciBuPXIoMzI0MSksaT1yKDc4MzYpLG89cigzNjA2KSxzPXIoODYwKSxhPXIoMjY0Nik7Y29uc3QgYz17fTtmdW5jdGlvbiB1KGUsdCl7Y29uc3Qgcj17c3RhZ2VkOiExLHByaW9yaXR5OnMuUDNbdF18fDB9O2woZSksY1tlXS5nZXQodCl8fGNbZV0uc2V0KHQscil9ZnVuY3Rpb24gZChlLHQpe2UmJmNbZV0mJihjW2VdLmdldCh0KSYmY1tlXS5kZWxldGUodCkscChlLHQsITEpLGNbZV0uc2l6ZSYmaChlKSl9ZnVuY3Rpb24gbChlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoImFnZW50SWRlbnRpZmllciByZXF1aXJlZCIpO2NbZV18fChjW2VdPW5ldyBNYXApfWZ1bmN0aW9uIGYoZT0iIix0PSJmZWF0dXJlIixyPSExKXtpZihsKGUpLCFlfHwhY1tlXS5nZXQodCl8fHIpcmV0dXJuIHAoZSx0KTtjW2VdLmdldCh0KS5zdGFnZWQ9ITAsaChlKX1mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9QXJyYXkuZnJvbShjW2VdKTt0LmV2ZXJ5KChbZSx0XSk9PnQuc3RhZ2VkKSYmKHQuc29ydCgoZSx0KT0+ZVsxXS5wcmlvcml0eS10WzFdLnByaW9yaXR5KSx0LmZvckVhY2goKFt0XSk9PntjW2VdLmRlbGV0ZSh0KSxwKGUsdCl9KSl9ZnVuY3Rpb24gcChlLHQscj0hMCl7Y29uc3Qgcz1lP2kuZWUuZ2V0KGUpOmkuZWUsYz1vLmkuaGFuZGxlcnM7aWYoIXMuYWJvcnRlZCYmcy5iYWNrbG9nJiZjKXtpZigoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImRyYWluIixmZWF0dXJlOnR9KSxyKXtjb25zdCBlPXMuYmFja2xvZ1t0XSxyPWNbdF07aWYocil7Zm9yKGxldCB0PTA7ZSYmdDxlLmxlbmd0aDsrK3QpZyhlW3RdLHIpO09iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLHRdKT0+e09iamVjdC52YWx1ZXModHx8e30pLmZvckVhY2godD0+e3RbMF0/Lm9uJiZ0WzBdPy5jb250ZXh0KClpbnN0YW5jZW9mIGEueSYmdFswXS5vbihlLHRbMV0pfSl9KX19cy5pc29sYXRlZEJhY2tsb2d8fGRlbGV0ZSBjW3RdLHMuYmFja2xvZ1t0XT1udWxsLHMuZW1pdCgiZHJhaW4tIit0LFtdKX19ZnVuY3Rpb24gZyhlLHQpe3ZhciByPWVbMV07T2JqZWN0LnZhbHVlcyh0W3JdfHx7fSkuZm9yRWFjaCh0PT57dmFyIHI9ZVswXTtpZih0WzBdPT09cil7dmFyIG49dFsxXSxpPWVbM10sbz1lWzJdO24uYXBwbHkoaSxvKX19KX19LDE3NDE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7VzooKT0+b30pO3ZhciBuPXIoOTQ0KSxpPXIoNDI2MSk7Y2xhc3Mgb3sjZShlLC4uLnQpe2lmKHRoaXNbZV0hPT1vLnByb3RvdHlwZVtlXSlyZXR1cm4gdGhpc1tlXSguLi50KTsoMCxuLlIpKDM1LGUpfWFkZFBhZ2VBY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy4jZShpLmhHLGUsdCl9cmVnaXN0ZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5lWSxlKX1yZWNvcmRDdXN0b21FdmVudChlLHQpe3JldHVybiB0aGlzLiNlKGkuZkYsZSx0KX1zZXRQYWdlVmlld05hbWUoZSx0KXtyZXR1cm4gdGhpcy4jZShpLkZ3LGUsdCl9c2V0Q3VzdG9tQXR0cmlidXRlKGUsdCxyKXtyZXR1cm4gdGhpcy4jZShpLmNELGUsdCxyKX1ub3RpY2VFcnJvcihlLHQpe3JldHVybiB0aGlzLiNlKGkubzUsZSx0KX1zZXRVc2VySWQoZSl7cmV0dXJuIHRoaXMuI2UoaS5EbCxlKX1zZXRBcHBsaWNhdGlvblZlcnNpb24oZSl7cmV0dXJuIHRoaXMuI2UoaS5uYixlKX1zZXRFcnJvckhhbmRsZXIoZSl7cmV0dXJuIHRoaXMuI2UoaS5idCxlKX1hZGRSZWxlYXNlKGUsdCl7cmV0dXJuIHRoaXMuI2UoaS5rNixlLHQpfWxvZyhlLHQpe3JldHVybiB0aGlzLiNlKGkuJDksZSx0KX1zdGFydCgpe3JldHVybiB0aGlzLiNlKGkuZDMpfWZpbmlzaGVkKGUpe3JldHVybiB0aGlzLiNlKGkuQkwsZSl9cmVjb3JkUmVwbGF5KCl7cmV0dXJuIHRoaXMuI2UoaS5DSCl9cGF1c2VSZXBsYXkoKXtyZXR1cm4gdGhpcy4jZShpLlRiKX1hZGRUb1RyYWNlKGUpe3JldHVybiB0aGlzLiNlKGkuVTIsZSl9c2V0Q3VycmVudFJvdXRlTmFtZShlKXtyZXR1cm4gdGhpcy4jZShpLlBBLGUpfWludGVyYWN0aW9uKGUpe3JldHVybiB0aGlzLiNlKGkuZFQsZSl9d3JhcExvZ2dlcihlLHQscil7cmV0dXJuIHRoaXMuI2UoaS5XYixlLHQscil9bWVhc3VyZShlLHQpe3JldHVybiB0aGlzLiNlKGkuVjEsZSx0KX1jb25zZW50KGUpe3JldHVybiB0aGlzLiNlKGkuUHYsZSl9fX0sMTg2MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm4gTWF0aC5mbG9vcihwZXJmb3JtYW5jZS5ub3coKSl9ci5kKHQse3Q6KCk9Pm59KX0sMTkxMDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtpOigpPT5vfSk7dmFyIG49cig5NDQpO2NvbnN0IGk9bmV3IE1hcDtmdW5jdGlvbiBvKC4uLmUpe3JldHVybiBlLmV2ZXJ5KGU9PntpZihpLmhhcyhlKSlyZXR1cm4gaS5nZXQoZSk7Y29uc3QgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS50b1N0cmluZygpLmluY2x1ZGVzKCJbbmF0aXZlIGNvZGVdIik7cmV0dXJuIHR8fCgwLG4uUikoNjQsZT8ubmFtZXx8ZT8udG9TdHJpbmcoKSksaS5zZXQoZSx0KSx0fSl9fSwyNTU1OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0Q6KCk9PmEsZjooKT0+c30pO3ZhciBuPXIoMzg0KSxpPXIoODEyMik7Y29uc3Qgbz17YmVhY29uOm4uTlQuYmVhY29uLGVycm9yQmVhY29uOm4uTlQuZXJyb3JCZWFjb24sbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAsc2E6dm9pZCAwLHF1ZXVlVGltZTp2b2lkIDAsYXBwbGljYXRpb25UaW1lOnZvaWQgMCx0dEd1aWQ6dm9pZCAwLHVzZXI6dm9pZCAwLGFjY291bnQ6dm9pZCAwLHByb2R1Y3Q6dm9pZCAwLGV4dHJhOnZvaWQgMCxqc0F0dHJpYnV0ZXM6e30sdXNlckF0dHJpYnV0ZXM6dm9pZCAwLGF0dHM6dm9pZCAwLHRyYW5zYWN0aW9uTmFtZTp2b2lkIDAsdE5hbWVQbGFpbjp2b2lkIDB9O2Z1bmN0aW9uIHMoZSl7dHJ5e3JldHVybiEhZS5saWNlbnNlS2V5JiYhIWUuZXJyb3JCZWFjb24mJiEhZS5hcHBsaWNhdGlvbklEfWNhdGNoKGUpe3JldHVybiExfX1jb25zdCBhPWU9PigwLGkuYSkoZSxvKX0sMjYxNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtCQjooKT0+cyxIMzooKT0+bixnOigpPT51LGlMOigpPT5jLHRTOigpPT5hLHVoOigpPT5pLHdrOigpPT5vfSk7Y29uc3Qgbj0iTlJCQSIsaT0iU0VTU0lPTiIsbz0xNDRlNSxzPTE4ZTUsYT17U1RBUlRFRDoic2Vzc2lvbi1zdGFydGVkIixQQVVTRToic2Vzc2lvbi1wYXVzZSIsUkVTRVQ6InNlc3Npb24tcmVzZXQiLFJFU1VNRToic2Vzc2lvbi1yZXN1bWUiLFVQREFURToic2Vzc2lvbi11cGRhdGUifSxjPXtTQU1FX1RBQjoic2FtZS10YWIiLENST1NTX1RBQjoiY3Jvc3MtdGFiIn0sdT17T0ZGOjAsRlVMTDoxLEVSUk9SOjJ9fSwyNjQ2OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse3k6KCk9Pm59KTtjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29udGV4dElkPWV9fX0sMjg0MzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5pfSk7dmFyIG49cigzODc4KTtmdW5jdGlvbiBpKGUsdD0hMSxyLGkpeygwLG4uREQpKCJ2aXNpYmlsaXR5Y2hhbmdlIixmdW5jdGlvbigpe2lmKHQpcmV0dXJuIHZvaWQoImhpZGRlbiI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKSk7ZShkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpfSxyLGkpfX0sMzI0MTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPSJuZXdyZWxpYyI7ZnVuY3Rpb24gbyhlPXt9KXt0cnl7bi5nbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChpLHtkZXRhaWw6ZX0pKX1jYXRjaChlKXt9fX0sMzMwNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBOigpPT5vfSk7dmFyIG49cig3ODM2KTtjb25zdCBpPSgpPT57Y29uc3QgZT1uZXcgV2Vha1NldDtyZXR1cm4odCxyKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXIpe2lmKGUuaGFzKHIpKXJldHVybjtlLmFkZChyKX1yZXR1cm4gcn19O2Z1bmN0aW9uIG8oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlLGkoKSk/PyIifWNhdGNoKGUpe3RyeXtuLmVlLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe31yZXR1cm4iIn19fSwzMzMzOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyR2OigpPT5kLFRaOigpPT5uLFhoOigpPT5jLFpwOigpPT5pLGtkOigpPT51LG1xOigpPT5hLG5mOigpPT5zLHFOOigpPT5vfSk7Y29uc3Qgbj1yKDg2MCkuSzcuZ2VuZXJpY0V2ZW50cyxpPVsiYXV4Y2xpY2siLCJjbGljayIsImNvcHkiLCJrZXlkb3duIiwicGFzdGUiLCJzY3JvbGxlbmQiXSxvPVsiZm9jdXMiLCJibHVyIl0scz00LGE9MWUzLGM9MmUzLHU9WyJQYWdlQWN0aW9uIiwiVXNlckFjdGlvbiIsIkJyb3dzZXJQZXJmb3JtYW5jZSJdLGQ9e1JFU09VUkNFUzoiZXhwZXJpbWVudGFsLnJlc291cmNlcyIsUkVHSVNURVI6InJlZ2lzdGVyIn19LDM0MzQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7SnQ6KCk9Pm8sWU06KCk9PnV9KTt2YXIgbj1yKDc4MzYpLGk9cig1NjA3KTtjb25zdCBvPSJuckBvcmlnaW5hbDoiLmNvbmNhdChpLlcpLHM9NTA7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjPSExO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZXx8KGU9bi5lZSksci5pblBsYWNlPWZ1bmN0aW9uKGUsdCxuLGksbyl7bnx8KG49IiIpO2NvbnN0IHM9Ii0iPT09bi5jaGFyQXQoMCk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0IGM9dFthXSx1PWVbY107bCh1KXx8KGVbY109cih1LHM/YytuOm4saSxjLG8pKX19LHIuZmxhZz1vLHI7ZnVuY3Rpb24gcih0LHIsbixjLHUpe3JldHVybiBsKHQpP3Q6KHJ8fChyPSIiKSxucldyYXBwZXJbb109dCxmdW5jdGlvbihlLHQscil7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3Qua2V5cyl0cnl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZVtyXT10LHR9fSl9KSx0fWNhdGNoKGUpe2QoW2VdLHIpfWZvcih2YXIgbiBpbiBlKWEuY2FsbChlLG4pJiYodFtuXT1lW25dKX0odCxucldyYXBwZXIsZSksbnJXcmFwcGVyKTtmdW5jdGlvbiBucldyYXBwZXIoKXt2YXIgbyxhLGwsZjtsZXQgaDt0cnl7YT10aGlzLG89Wy4uLmFyZ3VtZW50c10sbD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKG8sYSk6bnx8e319Y2F0Y2godCl7ZChbdCwiIixbbyxhLGNdLGxdLGUpfWkocisic3RhcnQiLFtvLGEsY10sbCx1KTtjb25zdCBwPXBlcmZvcm1hbmNlLm5vdygpO2xldCBnO3RyeXtyZXR1cm4gZj10LmFwcGx5KGEsbyksZz1wZXJmb3JtYW5jZS5ub3coKSxmfWNhdGNoKGUpe3Rocm93IGc9cGVyZm9ybWFuY2Uubm93KCksaShyKyJlcnIiLFtvLGEsZV0sbCx1KSxoPWUsaH1maW5hbGx5e2NvbnN0IGU9Zy1wLHQ9e3N0YXJ0OnAsZW5kOmcsZHVyYXRpb246ZSxpc0xvbmdUYXNrOmU+PXMsbWV0aG9kTmFtZTpjLHRocm93bkVycm9yOmh9O3QuaXNMb25nVGFzayYmaSgibG9uZy10YXNrIixbdCxhXSxsLHUpLGkocisiZW5kIixbbyxhLGZdLGwsdSl9fX1mdW5jdGlvbiBpKHIsbixpLG8pe2lmKCFjfHx0KXt2YXIgcz1jO2M9ITA7dHJ5e2UuZW1pdChyLG4saSx0LG8pfWNhdGNoKHQpe2QoW3QscixuLGldLGUpfWM9c319fWZ1bmN0aW9uIGQoZSx0KXt0fHwodD1uLmVlKTt0cnl7dC5lbWl0KCJpbnRlcm5hbC1lcnJvciIsZSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBsKGUpe3JldHVybiEoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkmJiFlW29dKX19LDM2MDY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7aTooKT0+b30pO3ZhciBuPXIoOTkwOCk7by5vbj1zO3ZhciBpPW8uaGFuZGxlcnM9e307ZnVuY3Rpb24gbyhlLHQscixvKXtzKG98fG4uZCxpLGUsdCxyKX1mdW5jdGlvbiBzKGUsdCxyLGksbyl7b3x8KG89ImZlYXR1cmUiKSxlfHwoZT1uLmQpO3ZhciBzPXRbb109dFtvXXx8e307KHNbcl09c1tyXXx8W10pLnB1c2goW2UsaV0pfX0sMzczODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtIZTooKT0+aSxLcDooKT0+YSxMYzooKT0+dSxSejooKT0+ZCxUWjooKT0+bixiRDooKT0+byxkMzooKT0+cyxqeDooKT0+bCxzbDooKT0+Zix1UDooKT0+Y30pO2NvbnN0IG49cig4NjApLks3LnNlc3Npb25UcmFjZSxpPSJic3RSZXNvdXJjZSIsbz0icmVzb3VyY2UiLHM9Ii1zdGFydCIsYT0iLWVuZCIsYz0iZm4iK3MsdT0iZm4iK2EsZD0icHVzaFN0YXRlIixsPTFlMyxmPTNlNH0sMzc4NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtSOigpPT5jLGI6KCk9PnV9KTt2YXIgbj1yKDk5MDgpLGk9cigxODYzKSxvPXIoODYwKSxzPXIoODE1NCksYT1yKDk5Myk7ZnVuY3Rpb24gYyhlLHQscj17fSxjPWEucF8uSU5GTyx1LGQ9KDAsaS50KSgpKXsoMCxuLnApKHMueFYsWyJBUEkvbG9nZ2luZy8iLmNvbmNhdChjLnRvTG93ZXJDYXNlKCksIi9jYWxsZWQiKV0sdm9pZCAwLG8uSzcubWV0cmljcyxlKSwoMCxuLnApKGEuRVQsW2QsdCxyLGMsdV0sdm9pZCAwLG8uSzcubG9nZ2luZyxlKX1mdW5jdGlvbiB1KGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmT2JqZWN0LnZhbHVlcyhhLnBfKS5zb21lKHQ9PnQ9PT1lLnRvVXBwZXJDYXNlKCkudHJpbSgpKX19LDM4Nzg6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJue2NhcHR1cmU6ZSxwYXNzaXZlOiExLHNpZ25hbDp0fX1mdW5jdGlvbiBpKGUsdCxyPSExLGkpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGUsdCxuKHIsaSkpfWZ1bmN0aW9uIG8oZSx0LHI9ITEsaSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQsbihyLGkpKX1yLmQodCx7REQ6KCk9Pm8salQ6KCk9Pm4sc3A6KCk9Pml9KX0sMzk2MjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtBTTooKT0+cyxPMjooKT0+bCxPVjooKT0+byxRdTooKT0+ZixUWjooKT0+YyxpaDooKT0+aCxwUDooKT0+YSx0MTooKT0+ZCx0QzooKT0+aSx3RDooKT0+dX0pO3ZhciBuPXIoODYwKTtjb25zdCBpPVsiY2xpY2siLCJrZXlkb3duIiwic3VibWl0Il0sbz0icG9wc3RhdGUiLHM9ImFwaSIsYT0iaW5pdGlhbFBhZ2VMb2FkIixjPW4uSzcuc29mdE5hdix1PTVlMyxkPTUwMCxsPXtJTklUSUFMX1BBR0VfTE9BRDoiIixST1VURV9DSEFOR0U6MSxVTlNQRUNJRklFRDoyfSxmPXtJTlRFUkFDVElPTjoxLEFKQVg6MixDVVNUT01fRU5EOjMsQ1VTVE9NX1RSQUNFUjo0fSxoPXtJUDoiaW4gcHJvZ3Jlc3MiLFBGOiJwZW5kaW5nIGZpbmlzaCIsRklOOiJmaW5pc2hlZCIsQ0FOOiJjYW5jZWxsZWQifX0sNDIzNDooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5vfSk7dmFyIG49cig3ODM2KSxpPXIoMTY4Nyk7Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYWdlbnRJZGVudGlmaWVyPWUsdGhpcy5lZT1uLmVlLmdldChlKSx0aGlzLmZlYXR1cmVOYW1lPXQsdGhpcy5ibG9ja2VkPSExfWRlcmVnaXN0ZXJEcmFpbigpeygwLGkueDMpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUpfX19LDQyNjE6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7JDk6KCk9PmQsQkw6KCk9PmMsQ0g6KCk9PnAsRGw6KCk9PlIsRnc6KCk9PncsUEE6KCk9PnYsUGw6KCk9Pm4sUHY6KCk9PkEsVGI6KCk9PmYsVTI6KCk9PnMsVjE6KCk9PkUsV2I6KCk9PlQsYnQ6KCk9PnksY0Q6KCk9PmIsZDM6KCk9PngsZFQ6KCk9PnUsZVk6KCk9PmcsZkY6KCk9PmgsaEc6KCk9Pm8saHc6KCk9PmksazY6KCk9PmEsbmI6KCk9Pm0sbzU6KCk9Pmx9KTtjb25zdCBuPSJhcGktIixpPW4rIml4bi0iLG89ImFkZFBhZ2VBY3Rpb24iLHM9ImFkZFRvVHJhY2UiLGE9ImFkZFJlbGVhc2UiLGM9ImZpbmlzaGVkIix1PSJpbnRlcmFjdGlvbiIsZD0ibG9nIixsPSJub3RpY2VFcnJvciIsZj0icGF1c2VSZXBsYXkiLGg9InJlY29yZEN1c3RvbUV2ZW50IixwPSJyZWNvcmRSZXBsYXkiLGc9InJlZ2lzdGVyIixtPSJzZXRBcHBsaWNhdGlvblZlcnNpb24iLHY9InNldEN1cnJlbnRSb3V0ZU5hbWUiLGI9InNldEN1c3RvbUF0dHJpYnV0ZSIseT0ic2V0RXJyb3JIYW5kbGVyIix3PSJzZXRQYWdlVmlld05hbWUiLFI9InNldFVzZXJJZCIseD0ic3RhcnQiLFQ9IndyYXBMb2dnZXIiLEU9Im1lYXN1cmUiLEE9ImNvbnNlbnQifSw0Mzg3OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlPXt9KXtyZXR1cm4hKCFlLmlkfHwhZS5uYW1lKX1mdW5jdGlvbiBpKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS50cmltKCkubGVuZ3RoPDUwMXx8Im51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSx0KXtpZigyIT09dD8uaGFydmVzdEVuZHBvaW50VmVyc2lvbilyZXR1cm57fTtjb25zdCByPXQuYWdlbnRSZWYucnVudGltZS5hcHBNZXRhZGF0YS5hZ2VudHNbMF0uZW50aXR5R3VpZDtyZXR1cm4gbihlKT97Im1mZS5pZCI6ZS5pZCwibWZlLm5hbWUiOmUubmFtZSxldmVudFNvdXJjZTplLmV2ZW50U291cmNlLCJwYXJlbnQuaWQiOmUucGFyZW50Py5pZHx8cn06eyJlbnRpdHkuZ3VpZCI6cixhcHBJZDp0LmFnZW50UmVmLmluZm8uYXBwbGljYXRpb25JRH19ci5kKHQse1V4OigpPT5vLGM3OigpPT5uLHlvOigpPT5pfSl9LDUyMDU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7ajooKT0+X30pO3ZhciBuPXIoMzg0KSxpPXIoMTc0MSk7dmFyIG89cigyNTU1KSxzPXIoMzMzMyk7Y29uc3QgYT1lPT57aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt0cnl7ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnF1ZXJ5U2VsZWN0b3IoZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9O3ZhciBjPXIoMjYxNCksdT1yKDk0NCksZD1yKDgxMjIpO2NvbnN0IGw9IltkYXRhLW5yLW1hc2tdIixmPWU9PigwLGQuYSkoZSwoKCk9Pntjb25zdCBlPXtmZWF0dXJlX2ZsYWdzOltdLGV4cGVyaW1lbnRhbDp7YWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbjohMSxyZXNvdXJjZXM6ITF9LG1hc2tfc2VsZWN0b3I6IioiLGJsb2NrX3NlbGVjdG9yOiJbZGF0YS1uci1ibG9ja10iLG1hc2tfaW5wdXRfb3B0aW9uczp7Y29sb3I6ITEsZGF0ZTohMSwiZGF0ZXRpbWUtbG9jYWwiOiExLGVtYWlsOiExLG1vbnRoOiExLG51bWJlcjohMSxyYW5nZTohMSxzZWFyY2g6ITEsdGVsOiExLHRleHQ6ITEsdGltZTohMSx1cmw6ITEsd2VlazohMSx0ZXh0YXJlYTohMSxzZWxlY3Q6ITEscGFzc3dvcmQ6ITB9fTtyZXR1cm57YWpheDp7ZGVueV9saXN0OnZvaWQgMCxibG9ja19pbnRlcm5hbDohMCxlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sYXBpOntnZXQgYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbigpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRUdJU1RFUil8fGUuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW59LHNldCBhbGxvd19yZWdpc3RlcmVkX2NoaWxkcmVuKHQpe2UuZXhwZXJpbWVudGFsLmFsbG93X3JlZ2lzdGVyZWRfY2hpbGRyZW49dH0sZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YTohMX0sYnJvd3Nlcl9jb25zZW50X21vZGU6e2VuYWJsZWQ6ITF9LGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dm9pZCAwLGV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyOnZvaWQgMCxjb3JzX3VzZV9uZXdyZWxpY19oZWFkZXI6dm9pZCAwLGNvcnNfdXNlX3RyYWNlY29udGV4dF9oZWFkZXJzOnZvaWQgMCxhbGxvd2VkX29yaWdpbnM6dm9pZCAwfSxnZXQgZmVhdHVyZV9mbGFncygpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3N9LHNldCBmZWF0dXJlX2ZsYWdzKHQpe2UuZmVhdHVyZV9mbGFncz10fSxnZW5lcmljX2V2ZW50czp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGhhcnZlc3Q6e2ludGVydmFsOjMwfSxqc2Vycm9yczp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LGxvZ2dpbmc6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxtZXRyaWNzOntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0sb2JmdXNjYXRlOnZvaWQgMCxwYWdlX2FjdGlvbjp7ZW5hYmxlZDohMH0scGFnZV92aWV3X2V2ZW50OntlbmFibGVkOiEwLGF1dG9TdGFydDohMH0scGFnZV92aWV3X3RpbWluZzp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHBlcmZvcm1hbmNlOntjYXB0dXJlX21hcmtzOiExLGNhcHR1cmVfbWVhc3VyZXM6ITEsY2FwdHVyZV9kZXRhaWw6ITAscmVzb3VyY2VzOntnZXQgZW5hYmxlZCgpe3JldHVybiBlLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMocy4kdi5SRVNPVVJDRVMpfHxlLmV4cGVyaW1lbnRhbC5yZXNvdXJjZXN9LHNldCBlbmFibGVkKHQpe2UuZXhwZXJpbWVudGFsLnJlc291cmNlcz10fSxhc3NldF90eXBlczpbXSxmaXJzdF9wYXJ0eV9kb21haW5zOltdLGlnbm9yZV9uZXdyZWxpYzohMH19LHByaXZhY3k6e2Nvb2tpZXNfZW5hYmxlZDohMH0scHJveHk6e2Fzc2V0czp2b2lkIDAsYmVhY29uOnZvaWQgMH0sc2Vzc2lvbjp7ZXhwaXJlc01zOmMud2ssaW5hY3RpdmVNczpjLkJCfSxzZXNzaW9uX3JlcGxheTp7YXV0b1N0YXJ0OiEwLGVuYWJsZWQ6ITEscHJlbG9hZDohMSxzYW1wbGluZ19yYXRlOjEwLGVycm9yX3NhbXBsaW5nX3JhdGU6MTAwLGNvbGxlY3RfZm9udHM6ITEsaW5saW5lX2ltYWdlczohMSxmaXhfc3R5bGVzaGVldHM6ITAsbWFza19hbGxfaW5wdXRzOiEwLGdldCBtYXNrX3RleHRfc2VsZWN0b3IoKXtyZXR1cm4gZS5tYXNrX3NlbGVjdG9yfSxzZXQgbWFza190ZXh0X3NlbGVjdG9yKHQpe2EodCk/ZS5tYXNrX3NlbGVjdG9yPSIiLmNvbmNhdCh0LCIsIikuY29uY2F0KGwpOiIiPT09dHx8bnVsbD09PXQ/ZS5tYXNrX3NlbGVjdG9yPWw6KDAsdS5SKSg1LHQpfSxnZXQgYmxvY2tfY2xhc3MoKXtyZXR1cm4ibnItYmxvY2sifSxnZXQgaWdub3JlX2NsYXNzKCl7cmV0dXJuIm5yLWlnbm9yZSJ9LGdldCBtYXNrX3RleHRfY2xhc3MoKXtyZXR1cm4ibnItbWFzayJ9LGdldCBibG9ja19zZWxlY3Rvcigpe3JldHVybiBlLmJsb2NrX3NlbGVjdG9yfSxzZXQgYmxvY2tfc2VsZWN0b3IodCl7YSh0KT9lLmJsb2NrX3NlbGVjdG9yKz0iLCIuY29uY2F0KHQpOiIiIT09dCYmKDAsdS5SKSg2LHQpfSxnZXQgbWFza19pbnB1dF9vcHRpb25zKCl7cmV0dXJuIGUubWFza19pbnB1dF9vcHRpb25zfSxzZXQgbWFza19pbnB1dF9vcHRpb25zKHQpe3QmJiJvYmplY3QiPT10eXBlb2YgdD9lLm1hc2tfaW5wdXRfb3B0aW9ucz17Li4udCxwYXNzd29yZDohMH06KDAsdS5SKSg3LHQpfX0sc2Vzc2lvbl90cmFjZTp7ZW5hYmxlZDohMCxhdXRvU3RhcnQ6ITB9LHNvZnRfbmF2aWdhdGlvbnM6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzcGE6e2VuYWJsZWQ6ITAsYXV0b1N0YXJ0OiEwfSxzc2w6dm9pZCAwLHVzZXJfYWN0aW9uczp7ZW5hYmxlZDohMCxlbGVtZW50QXR0cmlidXRlczpbImlkIiwiY2xhc3NOYW1lIiwidGFnTmFtZSIsInR5cGUiXX19fSkoKSk7dmFyIGg9cig2MTU0KSxwPXIoOTMyNCk7bGV0IGc9MDtjb25zdCBtPXtidWlsZEVudjpwLkYzLGRpc3RNZXRob2Q6cC5Ycyx2ZXJzaW9uOnAueHYsb3JpZ2luVGltZTpoLldOfSx2PXtjb25zZW50ZWQ6ITF9LGI9e2FwcE1ldGFkYXRhOnt9LGdldCBjb25zZW50ZWQoKXtyZXR1cm4gdGhpcy5zZXNzaW9uPy5zdGF0ZT8uY29uc2VudHx8di5jb25zZW50ZWR9LHNldCBjb25zZW50ZWQoZSl7di5jb25zZW50ZWQ9ZX0sY3VzdG9tVHJhbnNhY3Rpb246dm9pZCAwLGRlbnlMaXN0OnZvaWQgMCxkaXNhYmxlZDohMSxoYXJ2ZXN0ZXI6dm9pZCAwLGlzb2xhdGVkQmFja2xvZzohMSxpc1JlY29yZGluZzohMSxsb2FkZXJUeXBlOnZvaWQgMCxtYXhCeXRlczozZTQsb2JmdXNjYXRvcjp2b2lkIDAsb25lcnJvcjp2b2lkIDAscHRpZDp2b2lkIDAscmVsZWFzZUlkczp7fSxzZXNzaW9uOnZvaWQgMCx0aW1lS2VlcGVyOnZvaWQgMCxyZWdpc3RlcmVkRW50aXRpZXM6W10sanNBdHRyaWJ1dGVzTWV0YWRhdGE6e2J5dGVzOjB9LGdldCBoYXJ2ZXN0Q291bnQoKXtyZXR1cm4rK2d9fSx5PWU9Pntjb25zdCB0PSgwLGQuYSkoZSxiKSxyPU9iamVjdC5rZXlzKG0pLnJlZHVjZSgoZSx0KT0+KGVbdF09e3ZhbHVlOm1bdF0sd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9LGUpLHt9KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxyKX07dmFyIHc9cig1NzAxKTtjb25zdCBSPWU9Pntjb25zdCB0PWUuc3RhcnRzV2l0aCgiaHR0cCIpO2UrPSIvIixyLnA9dD9lOiJodHRwczovLyIrZX07dmFyIHg9cig3ODM2KSxUPXIoMzI0MSk7Y29uc3QgRT17YWNjb3VudElEOnZvaWQgMCx0cnVzdEtleTp2b2lkIDAsYWdlbnRJRDp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRpb25JRDp2b2lkIDAseHBpZDp2b2lkIDB9LEE9ZT0+KDAsZC5hKShlLEUpLFM9bmV3IFNldDtmdW5jdGlvbiBfKGUsdD17fSxyLHMpe2xldHtpbml0OmEsaW5mbzpjLGxvYWRlcl9jb25maWc6dSxydW50aW1lOmQ9e30sZXhwb3NlZDpsPSEwfT10O2lmKCFjKXtjb25zdCBlPSgwLG4ucFYpKCk7YT1lLmluaXQsYz1lLmluZm8sdT1lLmxvYWRlcl9jb25maWd9ZS5pbml0PWYoYXx8e30pLGUubG9hZGVyX2NvbmZpZz1BKHV8fHt9KSxjLmpzQXR0cmlidXRlcz8/PXt9LGguYnYmJihjLmpzQXR0cmlidXRlcy5pc1dvcmtlcj0hMCksZS5pbmZvPSgwLG8uRCkoYyk7Y29uc3QgcD1lLmluaXQsZz1bYy5iZWFjb24sYy5lcnJvckJlYWNvbl07Uy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwocC5wcm94eS5hc3NldHMmJihSKHAucHJveHkuYXNzZXRzKSxnLnB1c2gocC5wcm94eS5hc3NldHMpKSxwLnByb3h5LmJlYWNvbiYmZy5wdXNoKHAucHJveHkuYmVhY29uKSxlLmJlYWNvbnM9Wy4uLmddLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsbi5wVikoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpLlcucHJvdG90eXBlKS5mb3JFYWNoKHI9Pntjb25zdCBuPWkuVy5wcm90b3R5cGVbcl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fCJjb25zdHJ1Y3RvciI9PT1uKXJldHVybjtsZXQgbz10W3JdO2Vbcl0mJiExIT09ZS5leHBvc2VkJiYibWljcm8tYWdlbnQiIT09ZS5ydW50aW1lPy5sb2FkZXJUeXBlJiYodFtyXT0oLi4udCk9Pntjb25zdCBuPWVbcl0oLi4udCk7cmV0dXJuIG8/byguLi50KTpufSl9KX0oZSksKDAsbi5VUykoImFjdGl2YXRlZEZlYXR1cmVzIix3LkIpLGUucnVuU29mdE5hdk92ZXJTcGEmJj0hMD09PXAuc29mdF9uYXZpZ2F0aW9ucy5lbmFibGVkJiZwLmZlYXR1cmVfZmxhZ3MuaW5jbHVkZXMoInNvZnRfbmF2IikpLGQuZGVueUxpc3Q9Wy4uLnAuYWpheC5kZW55X2xpc3R8fFtdLC4uLnAuYWpheC5ibG9ja19pbnRlcm5hbD9nOltdXSxkLnB0aWQ9ZS5hZ2VudElkZW50aWZpZXIsZC5sb2FkZXJUeXBlPXIsZS5ydW50aW1lPXkoZCksUy5oYXMoZS5hZ2VudElkZW50aWZpZXIpfHwoZS5lZT14LmVlLmdldChlLmFnZW50SWRlbnRpZmllciksZS5leHBvc2VkPWwsKDAsVC5XKSh7YWdlbnRJZGVudGlmaWVyOmUuYWdlbnRJZGVudGlmaWVyLGRyYWluZWQ6ISF3LkI/LltlLmFnZW50SWRlbnRpZmllcl0sdHlwZToibGlmZWN5Y2xlIixuYW1lOiJpbml0aWFsaXplIixmZWF0dXJlOnZvaWQgMCxkYXRhOmUuY29uZmlnfSkpLFMuYWRkKGUuYWdlbnRJZGVudGlmaWVyKX19LDUyNzA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7QXc6KCk9PnMsU1I6KCk9Pm8sckY6KCk9PmF9KTt2YXIgbj1yKDM4NCksaT1yKDc3NjcpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuISEoMCxuLmRWKSgpLm8uTU8mJigwLGkuVikoZSkmJiEwPT09ZT8uc2Vzc2lvbl90cmFjZS5lbmFibGVkfWZ1bmN0aW9uIHMoZSl7cmV0dXJuITA9PT1lPy5zZXNzaW9uX3JlcGxheS5wcmVsb2FkJiZvKGUpfWZ1bmN0aW9uIGEoZSx0KXt0cnl7aWYoInN0cmluZyI9PXR5cGVvZiB0Py50eXBlKXtpZigicGFzc3dvcmQiPT09dC50eXBlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIioiLnJlcGVhdChlPy5sZW5ndGh8fDApO2lmKHZvaWQgMCE9PXQ/LmRhdGFzZXQ/Lm5yVW5tYXNrfHx0Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCJuci11bm1hc2siKSlyZXR1cm4gZX19Y2F0Y2goZSl7fXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnJlcGxhY2UoL1tcU10vZywiKiIpOiIqIi5yZXBlYXQoZT8ubGVuZ3RofHwwKX19LDUyODk6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7R0c6KCk9Pm8sUXI6KCk9PmEsc0I6KCk9PnN9KTt2YXIgbj1yKDM4NzgpO2Z1bmN0aW9uIGkoKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50fHwiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZX1mdW5jdGlvbiBvKGUsdCl7aWYoaSgpKXJldHVybiBlKCk7KDAsbi5zcCkoImxvYWQiLGUsdCl9ZnVuY3Rpb24gcyhlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLkREKSgiRE9NQ29udGVudExvYWRlZCIsZSl9ZnVuY3Rpb24gYShlKXtpZihpKCkpcmV0dXJuIGUoKTsoMCxuLnNwKSgicG9wc3RhdGUiLGUpfX0sNTYwNzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtXOigpPT5ufSk7Y29uc3Qgbj0oMCxyKDk1NjYpLmJ6KSgpfSw1NzAxOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0I6KCk9Pm8sdDooKT0+c30pO3ZhciBuPXIoMzI0MSk7Y29uc3QgaT1uZXcgU2V0LG89e307ZnVuY3Rpb24gcyhlLHQpe2NvbnN0IHI9dC5hZ2VudElkZW50aWZpZXI7b1tyXT8/PXt9LGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGkuaGFzKHIpfHwodC5lZS5lbWl0KCJydW1yZXNwIixbZV0pLG9bcl09ZSxpLmFkZChyKSwoMCxuLlcpKHthZ2VudElkZW50aWZpZXI6cixsb2FkZWQ6ITAsZHJhaW5lZDohMCx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6ImxvYWQiLGZlYXR1cmU6dm9pZCAwLGRhdGE6ZX0pKSl9fSw2MTU0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0E0OigpPT5hLE9GOigpPT5kLFJJOigpPT5pLFdOOigpPT5oLGJ2OigpPT5vLGdtOigpPT5zLGxSOigpPT5mLG06KCk9PnUsbXc6KCk9PmMsc2I6KCk9Pmx9KTt2YXIgbj1yKDE4NjMpO2NvbnN0IGk9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93LmRvY3VtZW50LG89InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLm5hdmlnYXRvciBpbnN0YW5jZW9mIFdvcmtlck5hdmlnYXRvcnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMubmF2aWdhdG9yIGluc3RhbmNlb2YgV29ya2VyTmF2aWdhdG9yKSxzPWk/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJmdsb2JhbFRoaXMpLGE9ImNvbXBsZXRlIj09PXM/LmRvY3VtZW50Py5yZWFkeVN0YXRlLGM9Qm9vbGVhbigiaGlkZGVuIj09PXM/LmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUpLHU9IiIrcz8ubG9jYXRpb24sZD0vaVBhZHxpUGhvbmV8aVBvZC8udGVzdChzLm5hdmlnYXRvcj8udXNlckFnZW50KSxsPWQmJiJ1bmRlZmluZWQiPT10eXBlb2YgU2hhcmVkV29ya2VyLGY9KCgpPT57Y29uc3QgZT1zLm5hdmlnYXRvcj8udXNlckFnZW50Py5tYXRjaCgvRmlyZWZveFsvXHNdKFxkK1wuXGQrKS8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD49Mj8rZVsxXTowfSkoKSxoPURhdGUubm93KCktKDAsbi50KSgpfSw2MzQ0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0JCOigpPT5kLFFiOigpPT5sLFRaOigpPT5pLFVnOigpPT5zLFZoOigpPT5vLF9zOigpPT5hLGJjOigpPT51LHlQOigpPT5jfSk7dmFyIG49cigyNjE0KTtjb25zdCBpPXIoODYwKS5LNy5zZXNzaW9uUmVwbGF5LG89ImVycm9yRHVyaW5nUmVwbGF5IixzPS4xMixhPXtEb21Db250ZW50TG9hZGVkOjAsTG9hZDoxLEZ1bGxTbmFwc2hvdDoyLEluY3JlbWVudGFsU25hcHNob3Q6MyxNZXRhOjQsQ3VzdG9tOjV9LGM9e1tuLmcuRVJST1JdOjE1ZTMsW24uZy5GVUxMXTozZTUsW24uZy5PRkZdOjB9LHU9e1JFU0VUOnttZXNzYWdlOiJTZXNzaW9uIHdhcyByZXNldCIsc206IlJlc2V0In0sSU1QT1JUOnttZXNzYWdlOiJSZWNvcmRlciBmYWlsZWQgdG8gaW1wb3J0IixzbToiSW1wb3J0In0sVE9PX01BTlk6e21lc3NhZ2U6IjQyOTogVG9vIE1hbnkgUmVxdWVzdHMiLHNtOiJUb28tTWFueSJ9LFRPT19CSUc6e21lc3NhZ2U6IlBheWxvYWQgd2FzIHRvbyBsYXJnZSIsc206IlRvby1CaWcifSxDUk9TU19UQUI6e21lc3NhZ2U6IlNlc3Npb24gRW50aXR5IHdhcyBzZXQgdG8gT0ZGIG9uIGFub3RoZXIgdGFiIixzbToiQ3Jvc3MtVGFiIn0sRU5USVRMRU1FTlRTOnttZXNzYWdlOiJTZXNzaW9uIFJlcGxheSBpcyBub3QgYWxsb3dlZCBhbmQgd2lsbCBub3QgYmUgc3RhcnRlZCIsc206IkVudGl0bGVtZW50In19LGQ9NWUzLGw9e0FQSToiYXBpIixSRVNVTUU6InJlc3VtZSIsU1dJVENIX1RPX0ZVTEw6InN3aXRjaFRvRnVsbCIsSU5JVElBTElaRToiaW5pdGlhbGl6ZSIsUFJFTE9BRDoicHJlbG9hZCJ9fSw2Mzg5OihlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQ9NTAwLHI9e30pe2NvbnN0IG49cj8ubGVhZGluZ3x8ITE7bGV0IGk7cmV0dXJuKC4uLnIpPT57biYmdm9pZCAwPT09aSYmKGUuYXBwbHkodGhpcyxyKSxpPXNldFRpbWVvdXQoKCk9PntpPWNsZWFyVGltZW91dChpKX0sdCkpLG58fChjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ZS5hcHBseSh0aGlzLHIpfSx0KSl9fWZ1bmN0aW9uIGkoZSl7bGV0IHQ9ITE7cmV0dXJuKC4uLnIpPT57dHx8KHQ9ITAsZS5hcHBseSh0aGlzLHIpKX19ci5kKHQse0o6KCk9PmksczooKT0+bn0pfSw2NjMwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5wYWdlVmlld0V2ZW50fSw2Nzc0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5qc2Vycm9yc30sNzI5NTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtYdjooKT0+cyxnWDooKT0+aSxpVzooKT0+b30pO3ZhciBuPVtdO2Z1bmN0aW9uIGkoZSl7aWYoIWV8fG8oZSkpcmV0dXJuITE7aWYoMD09PW4ubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKCIqIj09PXIuaG9zdG5hbWUpcmV0dXJuITE7aWYoYShyLmhvc3RuYW1lLGUuaG9zdG5hbWUpJiZjKHIucGF0aG5hbWUsZS5wYXRobmFtZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwPT09ZS5ob3N0bmFtZX1mdW5jdGlvbiBzKGUpe2lmKG49W10sZSYmZS5sZW5ndGgpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoIXIpY29udGludWU7MD09PXIuaW5kZXhPZigiaHR0cDovLyIpP3I9ci5zdWJzdHJpbmcoNyk6MD09PXIuaW5kZXhPZigiaHR0cHM6Ly8iKSYmKHI9ci5zdWJzdHJpbmcoOCkpO2NvbnN0IGk9ci5pbmRleE9mKCIvIik7bGV0IG8scztpPjA/KG89ci5zdWJzdHJpbmcoMCxpKSxzPXIuc3Vic3RyaW5nKGkpKToobz1yLHM9IiIpO2xldFthXT1vLnNwbGl0KCI6Iik7bi5wdXNoKHtob3N0bmFtZTphLHBhdGhuYW1lOnN9KX19ZnVuY3Rpb24gYShlLHQpe3JldHVybiEoZS5sZW5ndGg+dC5sZW5ndGgpJiZ0LmluZGV4T2YoZSk9PT10Lmxlbmd0aC1lLmxlbmd0aH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIi8iKSYmKGU9ZS5zdWJzdHJpbmcoMSkpLDA9PT10LmluZGV4T2YoIi8iKSYmKHQ9dC5zdWJzdHJpbmcoMSkpLCIiPT09ZXx8ZT09PXR9fSw3Mzc4OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQseyRwOigpPT54LEJSOigpPT5iLEtwOigpPT5SLEwzOigpPT55LExjOigpPT5jLE5DOigpPT5vLFNHOigpPT5kLFRaOigpPT5pLFU2OigpPT5wLFVUOigpPT5tLGQzOigpPT53LGRUOigpPT5mLGU1OigpPT5FLGd4OigpPT52LGw5OigpPT5sLG9XOigpPT5oLG9wOigpPT5nLHJ3OigpPT51LHRIOigpPT5BLHVQOigpPT5hLHdXOigpPT5ULHhxOigpPT5zfSk7dmFyIG49cigzODQpO2NvbnN0IGk9cig4NjApLks3LnNwYSxvPVsiY2xpY2siLCJzdWJtaXQiLCJrZXlwcmVzcyIsImtleWRvd24iLCJrZXl1cCIsImNoYW5nZSJdLHM9OTk5LGE9ImZuLXN0YXJ0IixjPSJmbi1lbmQiLHU9ImNiLXN0YXJ0IixkPSJhcGktaXhuLSIsbD0icmVtYWluaW5nIixmPSJpbnRlcmFjdGlvbiIsaD0ic3BhTm9kZSIscD0ianNvbnBOb2RlIixnPSJmZXRjaC1zdGFydCIsbT0iZmV0Y2gtZG9uZSIsdj0iZmV0Y2gtYm9keS0iLGI9Impzb25wLWVuZCIseT0oMCxuLmRWKSgpLm8uU1Qsdz0iLXN0YXJ0IixSPSItZW5kIix4PSItYm9keSIsVD0iY2IiK1IsRT0ianNUaW1lIixBPSJmZXRjaCJ9LDc0ODU6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7RDooKT0+aX0pO3ZhciBuPXIoNjE1NCk7ZnVuY3Rpb24gaShlKXtpZigwPT09KGV8fCIiKS5pbmRleE9mKCJkYXRhOiIpKXJldHVybntwcm90b2NvbDoiZGF0YSJ9O3RyeXtjb25zdCB0PW5ldyBVUkwoZSxsb2NhdGlvbi5ocmVmKSxyPXtwb3J0OnQucG9ydCxob3N0bmFtZTp0Lmhvc3RuYW1lLHBhdGhuYW1lOnQucGF0aG5hbWUsc2VhcmNoOnQuc2VhcmNoLHByb3RvY29sOnQucHJvdG9jb2wuc2xpY2UoMCx0LnByb3RvY29sLmluZGV4T2YoIjoiKSksc2FtZU9yaWdpbjp0LnByb3RvY29sPT09bi5nbT8ubG9jYXRpb24/LnByb3RvY29sJiZ0Lmhvc3Q9PT1uLmdtPy5sb2NhdGlvbj8uaG9zdH07cmV0dXJuIHIucG9ydCYmIiIhPT1yLnBvcnR8fCgiaHR0cDoiPT09dC5wcm90b2NvbCYmKHIucG9ydD0iODAiKSwiaHR0cHM6Ij09PXQucHJvdG9jb2wmJihyLnBvcnQ9IjQ0MyIpKSxyLnBhdGhuYW1lJiYiIiE9PXIucGF0aG5hbWU/ci5wYXRobmFtZS5zdGFydHNXaXRoKCIvIil8fChyLnBhdGhuYW1lPSIvIi5jb25jYXQoci5wYXRobmFtZSkpOnIucGF0aG5hbWU9Ii8iLHJ9Y2F0Y2goZSl7cmV0dXJue319fX0sNzY5OTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtJdDooKT0+byxLQzooKT0+YSxObzooKT0+aSxxaDooKT0+c30pO3ZhciBuPXIoODYwKTtjb25zdCBpPTE2ZTMsbz0xZTYscz0iU0VTU0lPTl9FUlJPUiIsYT17W24uSzcubG9nZ2luZ106ITAsW24uSzcuZ2VuZXJpY0V2ZW50c106ITEsW24uSzcuanNlcnJvcnNdOiExLFtuLks3LmFqYXhdOiExfX0sNzc2NzooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtWOigpPT5pfSk7dmFyIG49cig2MTU0KTtjb25zdCBpPWU9Pm4uUkkmJiEwPT09ZT8ucHJpdmFjeS5jb29raWVzX2VuYWJsZWR9LDc4MzY6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7UDooKT0+YSxlZTooKT0+Y30pO3ZhciBuPXIoMzg0KSxpPXIoODk5MCksbz1yKDI2NDYpLHM9cig1NjA3KTtjb25zdCBhPSJuckBjb250ZXh0OiIuY29uY2F0KHMuVyksYz1mdW5jdGlvbiBlKHQscil7dmFyIG49e30scz17fSxkPXt9LGw9ITE7dHJ5e2w9MTY9PT1yLmxlbmd0aCYmdS5pbml0aWFsaXplZEFnZW50cz8uW3JdPy5ydW50aW1lLmlzb2xhdGVkQmFja2xvZ31jYXRjaChlKXt9dmFyIGY9e29uOnAsYWRkRXZlbnRMaXN0ZW5lcjpwLHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uW2VdO2lmKCFyKXJldHVybjtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldPT09dCYmci5zcGxpY2UoaSwxKX0sZW1pdDpmdW5jdGlvbihlLHIsbixpLG8peyExIT09byYmKG89ITApO2lmKGMuYWJvcnRlZCYmIWkpcmV0dXJuO3QmJm8mJnQuZW1pdChlLHIsbik7dmFyIGE9aChuKTtnKGUpLmZvckVhY2goZT0+e2UuYXBwbHkoYSxyKX0pO3ZhciB1PXYoKVtzW2VdXTt1JiZ1LnB1c2goW2YsZSxyLGFdKTtyZXR1cm4gYX0sZ2V0Om0sbGlzdGVuZXJzOmcsY29udGV4dDpoLGJ1ZmZlcjpmdW5jdGlvbihlLHQpe2NvbnN0IHI9digpO2lmKHQ9dHx8ImZlYXR1cmUiLGYuYWJvcnRlZClyZXR1cm47T2JqZWN0LmVudHJpZXMoZXx8e30pLmZvckVhY2goKFtlLG5dKT0+e3Nbbl09dCx0IGluIHJ8fChyW3RdPVtdKX0pfSxhYm9ydDpmdW5jdGlvbigpe2YuX2Fib3J0ZWQ9ITAsT2JqZWN0LmtleXMoZi5iYWNrbG9nKS5mb3JFYWNoKGU9PntkZWxldGUgZi5iYWNrbG9nW2VdfSl9LGlzQnVmZmVyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiEhdigpW3NbZV1dfSxkZWJ1Z0lkOnIsYmFja2xvZzpsP3t9OnQmJiJvYmplY3QiPT10eXBlb2YgdC5iYWNrbG9nP3QuYmFja2xvZzp7fSxpc29sYXRlZEJhY2tsb2c6bH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJhYm9ydGVkIix7Z2V0OigpPT57bGV0IGU9Zi5fYWJvcnRlZHx8ITE7cmV0dXJuIGV8fCh0JiYoZT10LmFib3J0ZWQpLGUpfX0pLGY7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIG8ueT9lOmU/KDAsaS5JKShlLGEsKCk9Pm5ldyBvLnkoYSkpOm5ldyBvLnkoYSl9ZnVuY3Rpb24gcChlLHQpe25bZV09ZyhlKS5jb25jYXQodCl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbltlXXx8W119ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZFt0XT1kW3RdfHxlKGYsdCl9ZnVuY3Rpb24gdigpe3JldHVybiBmLmJhY2tsb2d9fSh2b2lkIDAsImdsb2JhbEVFIiksdT0oMCxuLlptKSgpO3UuZWV8fCh1LmVlPWMpfSw4MTIyOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse2E6KCk9Pml9KTt2YXIgbj1yKDk0NCk7ZnVuY3Rpb24gaShlLHQpe3RyeXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybigwLG4uUikoMyk7aWYoIXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4oMCxuLlIpKDQpO2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodCksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpLG89MD09PU9iamVjdC5rZXlzKHIpLmxlbmd0aD9lOnI7Zm9yKGxldCBzIGluIG8paWYodm9pZCAwIT09ZVtzXSl0cnl7aWYobnVsbD09PWVbc10pe3Jbc109bnVsbDtjb250aW51ZX1BcnJheS5pc0FycmF5KGVbc10pJiZBcnJheS5pc0FycmF5KHRbc10pP3Jbc109QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5lW3NdLC4uLnRbc11dKSk6Im9iamVjdCI9PXR5cGVvZiBlW3NdJiYib2JqZWN0Ij09dHlwZW9mIHRbc10/cltzXT1pKGVbc10sdFtzXSk6cltzXT1lW3NdfWNhdGNoKGUpe3Jbc118fCgwLG4uUikoMSxlKX1yZXR1cm4gcn1jYXRjaChlKXsoMCxuLlIpKDIsZSl9fX0sODEzOTooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHt1OigpPT5mfSk7dmFyIG49cig3ODM2KSxpPXIoMzQzNCksbz1yKDg5OTApLHM9cig2MTU0KTtjb25zdCBhPXt9LGM9cy5nbS5YTUxIdHRwUmVxdWVzdCx1PSJhZGRFdmVudExpc3RlbmVyIixkPSJyZW1vdmVFdmVudExpc3RlbmVyIixsPSJuckB3cmFwcGVkOiIuY29uY2F0KG4uUCk7ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8bi5lZSkuZ2V0KCJldmVudHMiKX0oZSk7aWYoYVt0LmRlYnVnSWRdKyspcmV0dXJuIHQ7YVt0LmRlYnVnSWRdPTE7dmFyIHI9KDAsaS5ZTSkodCwhMCk7ZnVuY3Rpb24gZihlKXtyLmluUGxhY2UoZSxbdSxkXSwiLSIscCl9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlWzFdfXJldHVybiJnZXRQcm90b3R5cGVPZiJpbiBPYmplY3QmJihzLlJJJiZoKGRvY3VtZW50LGYpLGMmJmgoYy5wcm90b3R5cGUsZiksaChzLmdtLGYpKSx0Lm9uKHUrIi1zdGFydCIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdO2lmKG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJiJuZXdyZWxpYyIhPT1lWzBdKXt2YXIgaT0oMCxvLkkpKG4sbCxmdW5jdGlvbigpe3ZhciBlPXtvYmplY3Q6ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5oYW5kbGVFdmVudClyZXR1cm47cmV0dXJuIG4uaGFuZGxlRXZlbnQuYXBwbHkobixhcmd1bWVudHMpfSxmdW5jdGlvbjpufVt0eXBlb2Ygbl07cmV0dXJuIGU/cihlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIik6bn0pO3RoaXMud3JhcHBlZD1lWzFdPWl9fSksdC5vbihkKyItc3RhcnQiLGZ1bmN0aW9uKGUpe2VbMV09dGhpcy53cmFwcGVkfHxlWzFdfSksdH1mdW5jdGlvbiBoKGUsdCwuLi5yKXtsZXQgbj1lO2Zvcig7Im9iamVjdCI9PXR5cGVvZiBuJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdSk7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO24mJnQobiwuLi5yKX19LDgxNTQ6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7el86KCk9Pm8sWEc6KCk9PmEsVFo6KCk9Pm4scnM6KCk9PmkseFY6KCk9PnN9KTtyKDYxNTQpLHIoOTU2NikscigzODQpO2NvbnN0IG49cig4NjApLks3Lm1ldHJpY3MsaT0ic20iLG89ImNtIixzPSJzdG9yZVN1cHBvcnRhYmlsaXR5TWV0cmljcyIsYT0ic3RvcmVFdmVudE1ldHJpY3MifSw4Mzc0OihlLHQscik9PntyLm5jPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQ/LmN1cnJlbnRTY3JpcHQ/Lm5vbmNlfWNhdGNoKGUpe31yZXR1cm4iIn0pKCl9LDg5OTA6KGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtyLmQodCx7STooKT0+aX0pO3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaShlLHQscil7aWYobi5jYWxsKGUsdCkpcmV0dXJuIGVbdF07dmFyIGk9cigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTppLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxpfWNhdGNoKGUpe31yZXR1cm4gZVt0XT1pLGl9fSw5MzAwOihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse1Q6KCk9Pm59KTtjb25zdCBuPXIoODYwKS5LNy5hamF4fSw5MzI0OihlLHQscik9PnsidXNlIHN0cmljdCI7ci5kKHQse0FKOigpPT5zLEYzOigpPT5pLFhzOigpPT5vLFlxOigpPT5hLHh2OigpPT5ufSk7Y29uc3Qgbj0iMS4zMDMuMCIsaT0iUFJPRCIsbz0iQ0ROIixzPSJAbmV3cmVsaWMvcnJ3ZWIiLGE9IjEuMC4xIn0sOTU2NjooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtMQTooKT0+YSxaRjooKT0+YyxiejooKT0+cyxlbDooKT0+dX0pO3ZhciBuPXIoNjE1NCk7Y29uc3QgaT0ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4IjtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU/MTUmZVt0XToxNipNYXRoLnJhbmRvbSgpfDB9ZnVuY3Rpb24gcygpe2NvbnN0IGU9bi5nbT8uY3J5cHRvfHxuLmdtPy5tc0NyeXB0bztsZXQgdCxyPTA7cmV0dXJuIGUmJmUuZ2V0UmFuZG9tVmFsdWVzJiYodD1lLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMCkpKSxpLnNwbGl0KCIiKS5tYXAoZT0+IngiPT09ZT9vKHQscisrKS50b1N0cmluZygxNik6InkiPT09ZT8oMyZvKCl8OCkudG9TdHJpbmcoMTYpOmUpLmpvaW4oIiIpfWZ1bmN0aW9uIGEoZSl7Y29uc3QgdD1uLmdtPy5jcnlwdG98fG4uZ20/Lm1zQ3J5cHRvO2xldCByLGk9MDt0JiZ0LmdldFJhbmRvbVZhbHVlcyYmKHI9dC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoZSkpKTtjb25zdCBzPVtdO2Zvcih2YXIgYT0wO2E8ZTthKyspcy5wdXNoKG8ocixpKyspLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHMuam9pbigiIil9ZnVuY3Rpb24gYygpe3JldHVybiBhKDE2KX1mdW5jdGlvbiB1KCl7cmV0dXJuIGEoMzIpfX0sOTkwODooZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuZCh0LHtkOigpPT5uLHA6KCk9Pml9KTt2YXIgbj1yKDc4MzYpLmVlLmdldCgiaGFuZGxlIik7ZnVuY3Rpb24gaShlLHQscixpLG8pe28/KG8uYnVmZmVyKFtlXSxpKSxvLmVtaXQoZSx0LHIpKToobi5idWZmZXIoW2VdLGkpLG4uZW1pdChlLHQscikpfX19LG49e307ZnVuY3Rpb24gaShlKXt2YXIgdD1uW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbz1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gcltlXShvLG8uZXhwb3J0cyxpKSxvLmV4cG9ydHN9aS5tPXIsaS5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpaS5vKHQscikmJiFpLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxpLmY9e30saS5lPWU9PlByb21pc2UuYWxsKE9iamVjdC5rZXlzKGkuZikucmVkdWNlKCh0LHIpPT4oaS5mW3JdKGUsdCksdCksW10pKSxpLnU9ZT0+KHsyMTI6Im5yLXNwYS1jb21wcmVzc29yIiwyNDk6Im5yLXNwYS1yZWNvcmRlciIsNDc4OiJuci1zcGEifVtlXSsiLTEuMzAzLjAubWluLmpzIiksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxlPXt9LHQ9Ik5SQkEtMS4zMDMuMC5QUk9EOiIsaS5sPShyLG4sbyxzKT0+e2lmKGVbcl0pZVtyXS5wdXNoKG4pO2Vsc2V7dmFyIGEsYztpZih2b2lkIDAhPT1vKWZvcih2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgbD11W2RdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09cnx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT10K28pe2E9bDticmVha319aWYoIWEpe2M9ITA7dmFyIGY9ezQ3ODoic2hhNTEyLVExcExxY29pTm1MSHYwcnRxM3dGa0pCQTNrb2ZCZFJKbDBFeERsMG1UdUFvQ0JkMHFlLzFKMFhXckRsUUt1TmxVcnlMNmFaZlZrQU1QTG1vaWtXSW9RPT0iLDI0OToic2hhNTEyLTY5NVp6dWRzeGxNdEhLbnBETnZrTWxKZDN0ZE10WTAzSVFLVkN3OVNYMTJ0alVDK2Y3TnJ4NXRuV083MlZnOVJGZjZEU1k2d1ZtTTNjRWtSTTEya2tRPT0iLDIxMjoic2hhNTEyLTE4R3gxd0lCc3BwY24wQW5LRmh3Z3c0SWNpTmdGeGl3M0o3NFczOTNBcGUrd3RnNGhsZzd0NlNCS3NJRS9Eay90ZmwyeWx0Z2NnQkZ2WVJzMjgzQUZnPT0ifTsoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSkuY2hhcnNldD0idXRmLTgiLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsdCtvKSxhLnNyYz1yLDAhPT1hLnNyYy5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rIi8iKSYmKGEuY3Jvc3NPcmlnaW49ImFub255bW91cyIpLGZbc10mJihhLmludGVncml0eT1mW3NdKX1lW3JdPVtuXTt2YXIgaD0odCxuKT0+e2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChwKTt2YXIgaT1lW3JdO2lmKGRlbGV0ZSBlW3JdLGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGkmJmkuZm9yRWFjaChlPT5lKG4pKSx0KXJldHVybiB0KG4pfSxwPXNldFRpbWVvdXQoaC5iaW5kKG51bGwsdm9pZCAwLHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6YX0pLDEyZTQpO2Eub25lcnJvcj1oLmJpbmQobnVsbCxhLm9uZXJyb3IpLGEub25sb2FkPWguYmluZChudWxsLGEub25sb2FkKSxjJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX0saS5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLnA9Imh0dHBzOi8vanMtYWdlbnQubmV3cmVsaWMuY29tLyIsKCgpPT57dmFyIGU9ezM4OjAsNzg4OjB9O2kuZi5qPSh0LHIpPT57dmFyIG49aS5vKGUsdCk/ZVt0XTp2b2lkIDA7aWYoMCE9PW4paWYobilyLnB1c2goblsyXSk7ZWxzZXt2YXIgbz1uZXcgUHJvbWlzZSgocixpKT0+bj1lW3RdPVtyLGldKTtyLnB1c2goblsyXT1vKTt2YXIgcz1pLnAraS51KHQpLGE9bmV3IEVycm9yO2kubChzLHI9PntpZihpLm8oZSx0KSYmKDAhPT0obj1lW3RdKSYmKGVbdF09dm9pZCAwKSxuKSl7dmFyIG89ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSxzPXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmM7YS5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrdCsiIGZhaWxlZC5cbigiK28rIjogIitzKyIpIixhLm5hbWU9IkNodW5rTG9hZEVycm9yIixhLnR5cGU9byxhLnJlcXVlc3Q9cyxuWzFdKGEpfX0sImNodW5rLSIrdCx0KX19O3ZhciB0PSh0LHIpPT57dmFyIG4sbyxbcyxhLGNdPXIsdT0wO2lmKHMuc29tZSh0PT4wIT09ZVt0XSkpe2ZvcihuIGluIGEpaS5vKGEsbikmJihpLm1bbl09YVtuXSk7aWYoYyljKGkpfWZvcih0JiZ0KHIpO3U8cy5sZW5ndGg7dSsrKW89c1t1XSxpLm8oZSxvKSYmZVtvXSYmZVtvXVswXSgpLGVbb109MH0scj1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXT1zZWxmWyJ3ZWJwYWNrQ2h1bms6TlJCQS0xLjMwMy4wLlBST0QiXXx8W107ci5mb3JFYWNoKHQuYmluZChudWxsLDApKSxyLnB1c2g9dC5iaW5kKG51bGwsci5wdXNoLmJpbmQocikpfSkoKSwoKCk9PnsidXNlIHN0cmljdCI7aSg4Mzc0KTt2YXIgZT1pKDk1NjYpLHQ9aSgxNzQxKTtjbGFzcyByIGV4dGVuZHMgdC5Xe2FnZW50SWRlbnRpZmllcj0oMCxlLkxBKSgxNil9dmFyIG49aSg4NjApO2NvbnN0IG89T2JqZWN0LnZhbHVlcyhuLks3KTt2YXIgcz1pKDUyMDUpO3ZhciBhPWkoOTkwOCksYz1pKDE4NjMpLHU9aSg0MjYxKSxkPWkoMzI0MSksbD1pKDk0NCksZj1pKDU3MDEpLGg9aSg4MTU0KTtmdW5jdGlvbiBwKGUsdCxpLG8pe2NvbnN0IHM9b3x8aTshc3x8c1tlXSYmc1tlXSE9PXIucHJvdG90eXBlW2VdfHwoc1tlXT1mdW5jdGlvbigpeygwLGEucCkoaC54VixbIkFQSS8iK2UrIi9jYWxsZWQiXSx2b2lkIDAsbi5LNy5tZXRyaWNzLGkuZWUpLCgwLGQuVykoe2FnZW50SWRlbnRpZmllcjppLmFnZW50SWRlbnRpZmllcixkcmFpbmVkOiEhZi5CPy5baS5hZ2VudElkZW50aWZpZXJdLHR5cGU6ImRhdGEiLG5hbWU6ImFwaSIsZmVhdHVyZTp1LlBsK2UsZGF0YTp7fX0pO3RyeXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7KDAsbC5SKSgyMyxlKX19KX1mdW5jdGlvbiBnKGUsdCxyLG4saSl7Y29uc3Qgbz1lLmluZm87bnVsbD09PXI/ZGVsZXRlIG8uanNBdHRyaWJ1dGVzW3RdOm8uanNBdHRyaWJ1dGVzW3RdPXIsKGl8fG51bGw9PT1yKSYmKDAsYS5wKSh1LlBsK24sWygwLGMudCkoKSx0LHJdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSl9dmFyIG09aSgxNjg3KSx2PWkoNDIzNCksYj1pKDUyODkpLHk9aSg2MTU0KSx3PWkoNTI3MCksUj1pKDc3NjcpLHg9aSg2Mzg5KSxUPWkoNzY5OSk7Y2xhc3MgRSBleHRlbmRzIHYuV3tjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUuYWdlbnRJZGVudGlmaWVyLHQpLHRoaXMuYWdlbnRSZWY9ZSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDAsdGhpcy5mZWF0QWdncmVnYXRlPXZvaWQgMCx0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT12b2lkIDAsdGhpcy5vbkFnZ3JlZ2F0ZUltcG9ydGVkPW5ldyBQcm9taXNlKGU9Pnt0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseT1lfSksdGhpcy5kZWZlcnJlZD1Qcm9taXNlLnJlc29sdmUoKSwhMT09PWUuaW5pdFt0aGlzLmZlYXR1cmVOYW1lXS5hdXRvU3RhcnQ/dGhpcy5kZWZlcnJlZD1uZXcgUHJvbWlzZSgodCxyKT0+e3RoaXMuZWUub24oIm1hbnVhbC1zdGFydC1hbGwiLCgwLHguSikoKCk9PnsoMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0aGlzLmZlYXR1cmVOYW1lKSx0KCl9KSl9KTooMCxtLkFrKShlLmFnZW50SWRlbnRpZmllcix0KX1pbXBvcnRBZ2dyZWdhdG9yKGUsdCxyPXt9KXtpZih0aGlzLmZlYXRBZ2dyZWdhdGUpcmV0dXJuO2NvbnN0IG49YXN5bmMoKT0+e2xldCBuO2F3YWl0IHRoaXMuZGVmZXJyZWQ7dHJ5e2lmKCgwLFIuVikoZS5pbml0KSl7Y29uc3R7c2V0dXBBZ2VudFNlc3Npb246dH09YXdhaXQgaS5lKDQ3OCkudGhlbihpLmJpbmQoaSw4NzY2KSk7bj10KGUpfX1jYXRjaChlKXsoMCxsLlIpKDIwLGUpLHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksKDAsYS5wKShULnFoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX10cnl7aWYoIXRoaXMuI3QodGhpcy5mZWF0dXJlTmFtZSxuLGUuaW5pdCkpcmV0dXJuKDAsbS5aZSkodGhpcy5hZ2VudElkZW50aWZpZXIsdGhpcy5mZWF0dXJlTmFtZSksdm9pZCB0aGlzLmxvYWRlZFN1Y2Nlc3NmdWxseSghMSk7Y29uc3R7QWdncmVnYXRlOml9PWF3YWl0IHQoKTt0aGlzLmZlYXRBZ2dyZWdhdGU9bmV3IGkoZSxyKSxlLnJ1bnRpbWUuaGFydmVzdGVyLmluaXRpYWxpemVkQWdncmVnYXRlcy5wdXNoKHRoaXMuZmVhdEFnZ3JlZ2F0ZSksdGhpcy5sb2FkZWRTdWNjZXNzZnVsbHkoITApfWNhdGNoKGUpeygwLGwuUikoMzQsZSksdGhpcy5hYm9ydEhhbmRsZXI/LigpLCgwLG0uWmUpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRoaXMuZmVhdHVyZU5hbWUsITApLHRoaXMubG9hZGVkU3VjY2Vzc2Z1bGx5KCExKSx0aGlzLmVlJiZ0aGlzLmVlLmFib3J0KCl9fTt5LlJJPygwLGIuR0cpKCgpPT5uKCksITApOm4oKX0jdChlLHQscil7aWYodGhpcy5ibG9ja2VkKXJldHVybiExO3N3aXRjaChlKXtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm4oMCx3LlNSKShyKSYmISF0O2Nhc2Ugbi5LNy5zZXNzaW9uVHJhY2U6cmV0dXJuISF0O2RlZmF1bHQ6cmV0dXJuITB9fX12YXIgQT1pKDY2MzApLFM9aSgyNjE0KTtjbGFzcyBfIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9QS5UO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQS5UKSx0aGlzLnNldHVwSW5zcGVjdGlvbkV2ZW50cyhlLmFnZW50SWRlbnRpZmllciksdD1lLHAodS5GdyxmdW5jdGlvbihlLHIpeyJzdHJpbmciPT10eXBlb2YgZSYmKCIvIiE9PWUuY2hhckF0KDApJiYoZT0iLyIrZSksdC5ydW50aW1lLmN1c3RvbVRyYW5zYWN0aW9uPShyfHwiaHR0cDovL2N1c3RvbS50cmFuc2FjdGlvbiIpK2UsKDAsYS5wKSh1LlBsK3UuRncsWygwLGMudCkoKV0sdm9pZCAwLHZvaWQgMCx0LmVlKSl9LHQpLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDE5ODMpKSl9c2V0dXBJbnNwZWN0aW9uRXZlbnRzKGUpe2NvbnN0IHQ9KHQscik9Pnt0JiYoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0aW1lU3RhbXA6dC50aW1lU3RhbXAsbG9hZGVkOiJjb21wbGV0ZSI9PT10LnRhcmdldC5yZWFkeVN0YXRlLHR5cGU6IndpbmRvdyIsbmFtZTpyLGRhdGE6dC50YXJnZXQubG9jYXRpb24rIiJ9KX07KDAsYi5zQikoZT0+e3QoZSwiRE9NQ29udGVudExvYWRlZCIpfSksKDAsYi5HRykoZT0+e3QoZSwibG9hZCIpfSksKDAsYi5RcikoZT0+e3QoZSwibmF2aWdhdGUiKX0pLHRoaXMuZWUub24oUy50Uy5VUERBVEUsKHQscik9PnsoMCxkLlcpKHthZ2VudElkZW50aWZpZXI6ZSx0eXBlOiJsaWZlY3ljbGUiLG5hbWU6InNlc3Npb24iLGRhdGE6cn0pfSl9fXZhciBPPWkoMzg0KTt2YXIgTj1pKDI4NDMpLEk9aSgzODc4KSxQPWkoNzgyKTtjbGFzcyBqIGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9UC5UO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsUC5UKSx5LlJJJiYoKDAsTi51KSgoKT0+KDAsYS5wKSgiZG9jSGlkZGVuIixbKDAsYy50KSgpXSx2b2lkIDAsUC5ULHRoaXMuZWUpLCEwKSwoMCxJLnNwKSgicGFnZWhpZGUiLCgpPT4oMCxhLnApKCJ3aW5QYWdlaGlkZSIsWygwLGMudCkoKV0sdm9pZCAwLFAuVCx0aGlzLmVlKSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksOTkxNykpKSl9fWNsYXNzIGsgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1oLlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsaC5UWikseS5SSSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLGU9PnsoMCxhLnApKGgueFYsWyJHZW5lcmljL0NTUFZpb2xhdGlvbi9EZXRlY3RlZCJdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjU1NSkpKX19dmFyIEM9aSg2Nzc0KSxMPWkoMzMwNCk7Y2xhc3MgSHtjb25zdHJ1Y3RvcihlLHQscixuLGkpe3RoaXMubmFtZT0iVW5jYXVnaHRFcnJvciIsdGhpcy5tZXNzYWdlPSJzdHJpbmciPT10eXBlb2YgZT9lOigwLEwuQSkoZSksdGhpcy5zb3VyY2VVUkw9dCx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1uLHRoaXMuX19uZXdyZWxpYz1pfX1mdW5jdGlvbiBNKGUpe3JldHVybiBVKGUpP2U6bmV3IEgodm9pZCAwIT09ZT8ubWVzc2FnZT9lLm1lc3NhZ2U6ZSxlPy5maWxlbmFtZXx8ZT8uc291cmNlVVJMLGU/LmxpbmVub3x8ZT8ubGluZSxlPy5jb2xub3x8ZT8uY29sLGU/Ll9fbmV3cmVsaWMsZT8uY2F1c2UpfWZ1bmN0aW9uIEsoZSl7Y29uc3QgdD0iVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiAiO2lmKCFlPy5yZWFzb24pcmV0dXJuO2lmKFUoZS5yZWFzb24pKXt0cnl7ZS5yZWFzb24ubWVzc2FnZS5zdGFydHNXaXRoKHQpfHwoZS5yZWFzb24ubWVzc2FnZT10K2UucmVhc29uLm1lc3NhZ2UpfWNhdGNoKGUpe31yZXR1cm4gTShlLnJlYXNvbil9Y29uc3Qgcj1NKGUucmVhc29uKTtyZXR1cm4oci5tZXNzYWdlfHwiIikuc3RhcnRzV2l0aCh0KXx8KHIubWVzc2FnZT10K3IubWVzc2FnZSkscn1mdW5jdGlvbiBEKGUpe2lmKGUuZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvciYmIS86XGQrJC8udGVzdChlLmVycm9yLnN0YWNrPy50cmltKCkpKXtjb25zdCB0PW5ldyBIKGUubWVzc2FnZSxlLmZpbGVuYW1lLGUubGluZW5vLGUuY29sbm8sZS5lcnJvci5fX25ld3JlbGljLGUuY2F1c2UpO3JldHVybiB0Lm5hbWU9U3ludGF4RXJyb3IubmFtZSx0fXJldHVybiBVKGUuZXJyb3IpP2UuZXJyb3I6TShlKX1mdW5jdGlvbiBVKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3ImJiEhZS5zdGFja31mdW5jdGlvbiBGKGUsdCxyLGksbz0oMCxjLnQpKCkpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9bmV3IEVycm9yKGUpKSwoMCxhLnApKCJlcnIiLFtlLG8sITEsdCxyLnJ1bnRpbWUuaXNSZWNvcmRpbmcsdm9pZCAwLGldLHZvaWQgMCxuLks3LmpzZXJyb3JzLHIuZWUpLCgwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHIuZWUpfXZhciBXPWkoNDM4NyksQj1pKDk5MyksVj1pKDM3ODUpO2Z1bmN0aW9uIEcoZSx7Y3VzdG9tQXR0cmlidXRlczp0PXt9LGxldmVsOnI9Qi5wXy5JTkZPfT17fSxuLGksbz0oMCxjLnQpKCkpeygwLFYuUikobi5lZSxlLHQscixpLG8pfWZ1bmN0aW9uIHooZSx0LHIsaSxvPSgwLGMudCkoKSl7KDAsYS5wKSh1LlBsK3UuaEcsW28sZSx0LGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSl9ZnVuY3Rpb24gWihlLHQscixpLG89KDAsYy50KSgpKXtjb25zdHtzdGFydDpzLGVuZDpkLGN1c3RvbUF0dHJpYnV0ZXM6Zn09dHx8e30saD17Y3VzdG9tQXR0cmlidXRlczpmfHx7fX07aWYoIm9iamVjdCIhPXR5cGVvZiBoLmN1c3RvbUF0dHJpYnV0ZXN8fCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiB2b2lkKDAsbC5SKSg1Nyk7Y29uc3QgcD0oZSx0KT0+bnVsbD09ZT90OiJudW1iZXIiPT10eXBlb2YgZT9lOmUgaW5zdGFuY2VvZiBQZXJmb3JtYW5jZU1hcms/ZS5zdGFydFRpbWU6TnVtYmVyLk5hTjtpZihoLnN0YXJ0PXAocywwKSxoLmVuZD1wKGQsbyksTnVtYmVyLmlzTmFOKGguc3RhcnQpfHxOdW1iZXIuaXNOYU4oaC5lbmQpKSgwLGwuUikoNTcpO2Vsc2V7aWYoaC5kdXJhdGlvbj1oLmVuZC1oLnN0YXJ0LCEoaC5kdXJhdGlvbjwwKSlyZXR1cm4oMCxhLnApKHUuUGwrdS5WMSxbaCxlLGldLHZvaWQgMCxuLks3LmdlbmVyaWNFdmVudHMsci5lZSksaDsoMCxsLlIpKDU4KX19ZnVuY3Rpb24gcShlLHQ9e30scixpLG89KDAsYy50KSgpKXsoMCxhLnApKHUuUGwrdS5mRixbbyxlLHQsaV0sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyxyLmVlKX1mdW5jdGlvbiBYKGUpe3AodS5lWSxmdW5jdGlvbih0KXtyZXR1cm4gWShlLHQpfSxlKX1mdW5jdGlvbiBZKGUsdCxyKXtjb25zdCBpPXt9OygwLGwuUikoNTQsIm5ld3JlbGljLnJlZ2lzdGVyIiksdHx8PXt9LHQuZXZlbnRTb3VyY2U9Ik1pY3JvRnJvbnRlbmRCcm93c2VyQWdlbnQiLHQubGljZW5zZUtleXx8PWUuaW5mby5saWNlbnNlS2V5LHQuYmxvY2tlZD0hMSx0LnBhcmVudD1yfHx7fTtsZXQgbz0oKT0+e307Y29uc3Qgcz1lLnJ1bnRpbWUucmVnaXN0ZXJlZEVudGl0aWVzLHU9cy5maW5kKCh7bWV0YWRhdGE6e3RhcmdldDp7aWQ6ZSxuYW1lOnJ9fX0pPT5lPT09dC5pZCk7aWYodSlyZXR1cm4gdS5tZXRhZGF0YS50YXJnZXQubmFtZSE9PXQubmFtZSYmKHUubWV0YWRhdGEudGFyZ2V0Lm5hbWU9dC5uYW1lKSx1O2NvbnN0IGQ9ZT0+e3QuYmxvY2tlZD0hMCxvPWV9O2UuaW5pdC5hcGkuYWxsb3dfcmVnaXN0ZXJlZF9jaGlsZHJlbnx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDU1KSkpLCgwLFcuYzcpKHQpfHxkKCgwLHguSikoKCk9PigwLGwuUikoNDgsdCkpKSwoMCxXLnlvKSh0LmlkKSYmKDAsVy55bykodC5uYW1lKXx8ZCgoMCx4LkopKCgpPT4oMCxsLlIpKDQ4LHQpKSk7Y29uc3QgZj17YWRkUGFnZUFjdGlvbjoocixuPXt9KT0+bSh6LFtyLHsuLi5pLC4uLm59LGVdLHQpLGxvZzoocixuPXt9KT0+bShHLFtyLHsuLi5uLGN1c3RvbUF0dHJpYnV0ZXM6ey4uLmksLi4ubi5jdXN0b21BdHRyaWJ1dGVzfHx7fX19LGVdLHQpLG1lYXN1cmU6KHIsbj17fSk9Pm0oWixbcix7Li4ubixjdXN0b21BdHRyaWJ1dGVzOnsuLi5pLC4uLm4uY3VzdG9tQXR0cmlidXRlc3x8e319fSxlXSx0KSxub3RpY2VFcnJvcjoocixuPXt9KT0+bShGLFtyLHsuLi5pLC4uLm59LGVdLHQpLHJlZ2lzdGVyOih0PXt9KT0+bShZLFtlLHRdLGYubWV0YWRhdGEudGFyZ2V0KSxyZWNvcmRDdXN0b21FdmVudDoocixuPXt9KT0+bShxLFtyLHsuLi5pLC4uLm59LGVdLHQpLHNldEFwcGxpY2F0aW9uVmVyc2lvbjplPT5nKCJhcHBsaWNhdGlvbi52ZXJzaW9uIixlKSxzZXRDdXN0b21BdHRyaWJ1dGU6KGUsdCk9PmcoZSx0KSxzZXRVc2VySWQ6ZT0+ZygiZW5kdXNlci5pZCIsZSksbWV0YWRhdGE6e2N1c3RvbUF0dHJpYnV0ZXM6aSx0YXJnZXQ6dH19LHA9KCk9Pih0LmJsb2NrZWQmJm8oKSx0LmJsb2NrZWQpO3AoKXx8cy5wdXNoKGYpO2NvbnN0IGc9KGUsdCk9PntwKCl8fChpW2VdPXQpfSxtPSh0LHIsaSk9PntpZihwKCkpcmV0dXJuO2NvbnN0IG89KDAsYy50KSgpOygwLGEucCkoaC54VixbIkFQSS9yZWdpc3Rlci8iLmNvbmNhdCh0Lm5hbWUsIi9jYWxsZWQiKV0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKTt0cnl7cmV0dXJuIGUuaW5pdC5hcGkuZHVwbGljYXRlX3JlZ2lzdGVyZWRfZGF0YSYmInJlZ2lzdGVyIiE9PXQubmFtZSYmdCguLi5yLHZvaWQgMCxvKSx0KC4uLnIsaSxvKX1jYXRjaChlKXsoMCxsLlIpKDUwLGUpfX07cmV0dXJuIGZ9Y2xhc3MgSiBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPUMuVDtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEMuVCksdD1lLHAodS5vNSwoZSxyKT0+RihlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LmJ0LGZ1bmN0aW9uKHQpe2UucnVudGltZS5vbmVycm9yPXR9LGUpfShlKSxmdW5jdGlvbihlKXtsZXQgdD0wO3AodS5rNixmdW5jdGlvbihlLHIpeysrdD4xMHx8KHRoaXMucnVudGltZS5yZWxlYXNlSWRzW2Uuc2xpY2UoLTIwMCldPSgiIityKS5zbGljZSgtMjAwKSl9LGUpfShlKSxYKGUpO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9dGhpcy5lZS5vbigiaW50ZXJuYWwtZXJyb3IiLCh0LHIpPT57dGhpcy5hYm9ydEhhbmRsZXImJigwLGEucCkoImllcnIiLFtNKHQpLCgwLGMudCkoKSwhMCx7fSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmcscl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9KSx5LmdtLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsdD0+e3RoaXMuYWJvcnRIYW5kbGVyJiYoMCxhLnApKCJlcnIiLFtLKHQpLCgwLGMudCkoKSwhMSx7dW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbjoxfSxlLnJ1bnRpbWUuaXNSZWNvcmRpbmddLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHkuZ20uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHQ9Pnt0aGlzLmFib3J0SGFuZGxlciYmKDAsYS5wKSgiZXJyIixbRCh0KSwoMCxjLnQpKCksITEse30sZS5ydW50aW1lLmlzUmVjb3JkaW5nXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0sKDAsSS5qVCkoITEsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDIxNzYpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgUT1pKDg5OTApO2xldCBlZT0xO2Z1bmN0aW9uIHRlKGUpe2NvbnN0IHQ9dHlwZW9mIGU7cmV0dXJuIWV8fCJvYmplY3QiIT09dCYmImZ1bmN0aW9uIiE9PXQ/LTE6ZT09PXkuZ20/MDooMCxRLkkpKGUsIm5yQGlkIixmdW5jdGlvbigpe3JldHVybiBlZSsrfSl9ZnVuY3Rpb24gcmUoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aClyZXR1cm4gZS5sZW5ndGg7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJmUuYnl0ZUxlbmd0aClyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmZSBpbnN0YW5jZW9mIEJsb2ImJmUuc2l6ZSlyZXR1cm4gZS5zaXplO2lmKCEoInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSl0cnl7cmV0dXJuKDAsTC5BKShlKS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJufX19dmFyIG5lPWkoODEzOSksaWU9aSg3ODM2KSxvZT1pKDM0MzQpO2NvbnN0IHNlPXt9LGFlPVsib3BlbiIsInNlbmQiXTtmdW5jdGlvbiBjZShlKXt2YXIgdD1lfHxpZS5lZTtjb25zdCByPWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJ4aHIiKX0odCk7aWYodm9pZCAwPT09eS5nbS5YTUxIdHRwUmVxdWVzdClyZXR1cm4gcjtpZihzZVtyLmRlYnVnSWRdKyspcmV0dXJuIHI7c2Vbci5kZWJ1Z0lkXT0xLCgwLG5lLnUpKHQpO3ZhciBuPSgwLG9lLllNKShyKSxpPXkuZ20uWE1MSHR0cFJlcXVlc3Qsbz15LmdtLk11dGF0aW9uT2JzZXJ2ZXIscz15LmdtLlByb21pc2UsYT15LmdtLnNldEludGVydmFsLGM9InJlYWR5c3RhdGVjaGFuZ2UiLHU9WyJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9ubG9hZHN0YXJ0Iiwib25sb2FkZW5kIiwib25wcm9ncmVzcyIsIm9udGltZW91dCJdLGQ9W10sZj15LmdtLlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IGkoZSksbz1yLmNvbnRleHQodCk7dHJ5e3IuZW1pdCgibmV3LXhociIsW3RdLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcihjLChzPW8sZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UucmVhZHlTdGF0ZT4zJiYhcy5yZXNvbHZlZCYmKHMucmVzb2x2ZWQ9ITAsci5lbWl0KCJ4aHItcmVzb2x2ZWQiLFtdLGUpKSxuLmluUGxhY2UoZSx1LCJmbi0iLGIpfSksKDAsSS5qVCkoITEpKX1jYXRjaChlKXsoMCxsLlIpKDE1LGUpO3RyeXtyLmVtaXQoImludGVybmFsLWVycm9yIixbZV0pfWNhdGNoKGUpe319dmFyIHM7cmV0dXJuIHR9O2Z1bmN0aW9uIGgoZSx0KXtuLmluUGxhY2UodCxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iLGIpfWlmKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfShpLGYpLGYucHJvdG90eXBlPWkucHJvdG90eXBlLG4uaW5QbGFjZShmLnByb3RvdHlwZSxhZSwiLXhoci0iLGIpLHIub24oInNlbmQteGhyLXN0YXJ0IixmdW5jdGlvbihlLHQpe2goZSx0KSxmdW5jdGlvbihlKXtkLnB1c2goZSksbyYmKHA/cC50aGVuKHYpOmE/YSh2KTooZz0tZyxtLmRhdGE9ZykpfSh0KX0pLHIub24oIm9wZW4teGhyLXN0YXJ0IixoKSxvKXt2YXIgcD1zJiZzLnJlc29sdmUoKTtpZighYSYmIXMpe3ZhciBnPTEsbT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnKTtuZXcgbyh2KS5vYnNlcnZlKG0se2NoYXJhY3RlckRhdGE6ITB9KX19ZWxzZSB0Lm9uKCJmbi1lbmQiLGZ1bmN0aW9uKGUpe2VbMF0mJmVbMF0udHlwZT09PWN8fHYoKX0pO2Z1bmN0aW9uIHYoKXtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyloKDAsZFtlXSk7ZC5sZW5ndGgmJihkPVtdKX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIHR9cmV0dXJuIHJ9dmFyIHVlPSJmZXRjaC0iLGRlPXVlKyJib2R5LSIsbGU9WyJhcnJheUJ1ZmZlciIsImJsb2IiLCJqc29uIiwidGV4dCIsImZvcm1EYXRhIl0sZmU9eS5nbS5SZXF1ZXN0LGhlPXkuZ20uUmVzcG9uc2UscGU9InByb3RvdHlwZSI7Y29uc3QgZ2U9e307ZnVuY3Rpb24gbWUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgiZmV0Y2giKX0oZSk7aWYoIShmZSYmaGUmJnkuZ20uZmV0Y2gpKXJldHVybiB0O2lmKGdlW3QuZGVidWdJZF0rKylyZXR1cm4gdDtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lW3JdOyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoZVtyXT1mdW5jdGlvbigpe3ZhciBlLHI9Wy4uLmFyZ3VtZW50c10sbz17fTt0LmVtaXQobisiYmVmb3JlLXN0YXJ0Iixbcl0sbyksb1tpZS5QXSYmb1tpZS5QXS5kdCYmKGU9b1tpZS5QXS5kdCk7dmFyIHM9aS5hcHBseSh0aGlzLHIpO3JldHVybiB0LmVtaXQobisic3RhcnQiLFtyLGVdLHMpLHMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5lbWl0KG4rImVuZCIsW251bGwsZV0scyksZX0sZnVuY3Rpb24oZSl7dGhyb3cgdC5lbWl0KG4rImVuZCIsW2VdLHMpLGV9KX0pfXJldHVybiBnZVt0LmRlYnVnSWRdPTEsbGUuZm9yRWFjaChlPT57cihmZVtwZV0sZSxkZSkscihoZVtwZV0sZSxkZSl9KSxyKHkuZ20sImZldGNoIix1ZSksdC5vbih1ZSsiZW5kIixmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYocil7dmFyIGk9ci5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKTtudWxsIT09aSYmKG4ucnhTaXplPWkpLHQuZW1pdCh1ZSsiZG9uZSIsW251bGwscl0sbil9ZWxzZSB0LmVtaXQodWUrImRvbmUiLFtlXSxuKX0pLHR9dmFyIHZlPWkoNzQ4NSk7Y2xhc3MgYmV7Y29uc3RydWN0b3IoZSl7dGhpcy5hZ2VudFJlZj1lfWdlbmVyYXRlVHJhY2VQYXlsb2FkKHQpe2NvbnN0IHI9dGhpcy5hZ2VudFJlZi5sb2FkZXJfY29uZmlnO2lmKCF0aGlzLnNob3VsZEdlbmVyYXRlVHJhY2UodCl8fCFyKXJldHVybiBudWxsO3ZhciBuPShyLmFjY291bnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwsaT0oci5hZ2VudElEfHwiIikudG9TdHJpbmcoKXx8bnVsbCxvPShyLnRydXN0S2V5fHwiIikudG9TdHJpbmcoKXx8bnVsbDtpZighbnx8IWkpcmV0dXJuIG51bGw7dmFyIHM9KDAsZS5aRikoKSxhPSgwLGUuZWwpKCksYz1EYXRlLm5vdygpLHU9e3NwYW5JZDpzLHRyYWNlSWQ6YSx0aW1lc3RhbXA6Y307cmV0dXJuKHQuc2FtZU9yaWdpbnx8dGhpcy5pc0FsbG93ZWRPcmlnaW4odCkmJnRoaXMudXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKSkmJih1LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0UGFyZW50SGVhZGVyKHMsYSksdS50cmFjZUNvbnRleHRTdGF0ZUhlYWRlcj10aGlzLmdlbmVyYXRlVHJhY2VDb250ZXh0U3RhdGVIZWFkZXIocyxjLG4saSxvKSksKHQuc2FtZU9yaWdpbiYmIXRoaXMuZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl8fCF0LnNhbWVPcmlnaW4mJnRoaXMuaXNBbGxvd2VkT3JpZ2luKHQpJiZ0aGlzLnVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpKSYmKHUubmV3cmVsaWNIZWFkZXI9dGhpcy5nZW5lcmF0ZVRyYWNlSGVhZGVyKHMsYSxjLG4saSxvKSksdX1nZW5lcmF0ZVRyYWNlQ29udGV4dFBhcmVudEhlYWRlcihlLHQpe3JldHVybiIwMC0iK3QrIi0iK2UrIi0wMSJ9Z2VuZXJhdGVUcmFjZUNvbnRleHRTdGF0ZUhlYWRlcihlLHQscixuLGkpe3JldHVybiBpKyJAbnI9MC0xLSIrcisiLSIrbisiLSIrZSsiLS0tLSIrdH1nZW5lcmF0ZVRyYWNlSGVhZGVyKGUsdCxyLG4saSxvKXtpZighKCJmdW5jdGlvbiI9PXR5cGVvZiB5LmdtPy5idG9hKSlyZXR1cm4gbnVsbDt2YXIgcz17djpbMCwxXSxkOnt0eToiQnJvd3NlciIsYWM6bixhcDppLGlkOmUsdHI6dCx0aTpyfX07cmV0dXJuIG8mJm4hPT1vJiYocy5kLnRrPW8pLGJ0b2EoKDAsTC5BKShzKSl9c2hvdWxkR2VuZXJhdGVUcmFjZShlKXtyZXR1cm4gdGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nPy5lbmFibGVkJiZ0aGlzLmlzQWxsb3dlZE9yaWdpbihlKX1pc0FsbG93ZWRPcmlnaW4oZSl7dmFyIHQ9ITE7Y29uc3Qgcj10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7aWYoZS5zYW1lT3JpZ2luKXQ9ITA7ZWxzZSBpZihyPy5hbGxvd2VkX29yaWdpbnMgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG49MDtuPHIuYWxsb3dlZF9vcmlnaW5zLmxlbmd0aDtuKyspe3ZhciBpPSgwLHZlLkQpKHIuYWxsb3dlZF9vcmlnaW5zW25dKTtpZihlLmhvc3RuYW1lPT09aS5ob3N0bmFtZSYmZS5wcm90b2NvbD09PWkucHJvdG9jb2wmJmUucG9ydD09PWkucG9ydCl7dD0hMDticmVha319cmV0dXJuIHR9ZXhjbHVkZU5ld3JlbGljSGVhZGVyKCl7dmFyIGU9dGhpcy5hZ2VudFJlZi5pbml0Py5kaXN0cmlidXRlZF90cmFjaW5nO3JldHVybiEhZSYmISFlLmV4Y2x1ZGVfbmV3cmVsaWNfaGVhZGVyfXVzZU5ld3JlbGljSGVhZGVyRm9yQ29ycygpe3ZhciBlPXRoaXMuYWdlbnRSZWYuaW5pdD8uZGlzdHJpYnV0ZWRfdHJhY2luZztyZXR1cm4hIWUmJiExIT09ZS5jb3JzX3VzZV9uZXdyZWxpY19oZWFkZXJ9dXNlVHJhY2VDb250ZXh0SGVhZGVyc0ZvckNvcnMoKXt2YXIgZT10aGlzLmFnZW50UmVmLmluaXQ/LmRpc3RyaWJ1dGVkX3RyYWNpbmc7cmV0dXJuISFlJiYhIWUuY29yc191c2VfdHJhY2Vjb250ZXh0X2hlYWRlcnN9fXZhciB5ZT1pKDkzMDApLHdlPWkoNzI5NSk7ZnVuY3Rpb24gUmUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSBpbnN0YW5jZW9mKDAsTy5kVikoKS5vLlJFUT9lLnVybDp5LmdtPy5VUkwmJmUgaW5zdGFuY2VvZiBVUkw/ZS5ocmVmOnZvaWQgMH12YXIgeGU9WyJsb2FkIiwiZXJyb3IiLCJhYm9ydCIsInRpbWVvdXQiXSxUZT14ZS5sZW5ndGgsRWU9KDAsTy5kVikoKS5vLlJFUSxBZT0oMCxPLmRWKSgpLm8uWEhSO2NvbnN0IFNlPSJYLU5ld1JlbGljLUFwcC1EYXRhIjtjbGFzcyBfZSBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXllLlQ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSx5ZS5UKSx0aGlzLmR0PW5ldyBiZShlKSx0aGlzLmhhbmRsZXI9KGUsdCxyLG4pPT4oMCxhLnApKGUsdCxyLG4sdGhpcy5lZSk7dHJ5e2NvbnN0IGU9e3htbGh0dHByZXF1ZXN0OiJ4aHIiLGZldGNoOiJmZXRjaCIsYmVhY29uOiJiZWFjb24ifTt5LmdtPy5wZXJmb3JtYW5jZT8uZ2V0RW50cmllc0J5VHlwZSgicmVzb3VyY2UiKS5mb3JFYWNoKHQ9PntpZih0LmluaXRpYXRvclR5cGUgaW4gZSYmMCE9PXQucmVzcG9uc2VTdGF0dXMpe2NvbnN0IHI9e3N0YXR1czp0LnJlc3BvbnNlU3RhdHVzfSxpPXtyeFNpemU6dC50cmFuc2ZlclNpemUsZHVyYXRpb246TWF0aC5mbG9vcih0LmR1cmF0aW9uKSxjYlRpbWU6MH07T2Uocix0Lm5hbWUpLHRoaXMuaGFuZGxlcigieGhyIixbcixpLHQuc3RhcnRUaW1lLHQucmVzcG9uc2VFbmQsZVt0LmluaXRpYXRvclR5cGVdXSx2b2lkIDAsbi5LNy5hamF4KX19KX1jYXRjaChlKXt9bWUodGhpcy5lZSksY2UodGhpcy5lZSksZnVuY3Rpb24oZSx0LHIsaSl7ZnVuY3Rpb24gbyhlKXt2YXIgdD10aGlzO3QudG90YWxDYnM9MCx0LmNhbGxlZD0wLHQuY2JUaW1lPTAsdC5lbmQ9RSx0LmVuZGVkPSExLHQueGhyR3VpZHM9e30sdC5sYXN0U2l6ZT1udWxsLHQubG9hZENhcHR1cmVDYWxsZWQ9ITEsdC5wYXJhbXM9dGhpcy5wYXJhbXN8fHt9LHQubWV0cmljcz10aGlzLm1ldHJpY3N8fHt9LHQubGF0ZXN0TG9uZ3Rhc2tFbmQ9MCxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKHIpe0EodCxlKX0sKDAsSS5qVCkoITEpKSx5LmxSfHxlLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihlKXt0Lmxhc3RTaXplPWUubG9hZGVkfSwoMCxJLmpUKSghMSkpfWZ1bmN0aW9uIHMoZSl7dGhpcy5wYXJhbXM9e21ldGhvZDplWzBdfSxPZSh0aGlzLGVbMV0pLHRoaXMubWV0cmljcz17fX1mdW5jdGlvbiB1KHQscil7ZS5sb2FkZXJfY29uZmlnLnhwaWQmJnRoaXMuc2FtZU9yaWdpbiYmci5zZXRSZXF1ZXN0SGVhZGVyKCJYLU5ld1JlbGljLUlEIixlLmxvYWRlcl9jb25maWcueHBpZCk7dmFyIG49aS5nZW5lcmF0ZVRyYWNlUGF5bG9hZCh0aGlzLnBhcnNlZE9yaWdpbik7aWYobil7dmFyIG89ITE7bi5uZXdyZWxpY0hlYWRlciYmKHIuc2V0UmVxdWVzdEhlYWRlcigibmV3cmVsaWMiLG4ubmV3cmVsaWNIZWFkZXIpLG89ITApLG4udHJhY2VDb250ZXh0UGFyZW50SGVhZGVyJiYoci5zZXRSZXF1ZXN0SGVhZGVyKCJ0cmFjZXBhcmVudCIsbi50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLG4udHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJnIuc2V0UmVxdWVzdEhlYWRlcigidHJhY2VzdGF0ZSIsbi50cmFjZUNvbnRleHRTdGF0ZUhlYWRlciksbz0hMCksbyYmKHRoaXMuZHQ9bil9fWZ1bmN0aW9uIGQoZSxyKXt2YXIgbj10aGlzLm1ldHJpY3MsaT1lWzBdLG89dGhpcztpZihuJiZpKXt2YXIgcz1yZShpKTtzJiYobi50eFNpemU9cyl9dGhpcy5zdGFydFRpbWU9KDAsYy50KSgpLHRoaXMuYm9keT1pLHRoaXMubGlzdGVuZXI9ZnVuY3Rpb24oZSl7dHJ5eyJhYm9ydCIhPT1lLnR5cGV8fG8ubG9hZENhcHR1cmVDYWxsZWR8fChvLnBhcmFtcy5hYm9ydGVkPSEwKSwoImxvYWQiIT09ZS50eXBlfHxvLmNhbGxlZD09PW8udG90YWxDYnMmJihvLm9ubG9hZENhbGxlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIub25sb2FkKSYmImZ1bmN0aW9uIj09dHlwZW9mIG8uZW5kKSYmby5lbmQocil9Y2F0Y2goZSl7dHJ5e3QuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2goZSl7fX19O2Zvcih2YXIgYT0wO2E8VGU7YSsrKXIuYWRkRXZlbnRMaXN0ZW5lcih4ZVthXSx0aGlzLmxpc3RlbmVyLCgwLEkualQpKCExKSl9ZnVuY3Rpb24gbChlLHQscil7dGhpcy5jYlRpbWUrPWUsdD90aGlzLm9ubG9hZENhbGxlZD0hMDp0aGlzLmNhbGxlZCs9MSx0aGlzLmNhbGxlZCE9PXRoaXMudG90YWxDYnN8fCF0aGlzLm9ubG9hZENhbGxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHIub25sb2FkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5lbmR8fHRoaXMuZW5kKHIpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmIXRoaXMueGhyR3VpZHNbcl0mJih0aGlzLnhockd1aWRzW3JdPSEwLHRoaXMudG90YWxDYnMrPTEpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj0iIit0ZShlKSshIXQ7dGhpcy54aHJHdWlkcyYmdGhpcy54aHJHdWlkc1tyXSYmKGRlbGV0ZSB0aGlzLnhockd1aWRzW3JdLHRoaXMudG90YWxDYnMtPTEpfWZ1bmN0aW9uIGcoKXt0aGlzLmVuZFRpbWU9KDAsYy50KSgpfWZ1bmN0aW9uIG0oZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtYWRkZWQiLFtlWzFdLGVbMl1dLHIpfWZ1bmN0aW9uIHYoZSxyKXtyIGluc3RhbmNlb2YgQWUmJiJsb2FkIj09PWVbMF0mJnQuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW2VbMV0sZVsyXV0scil9ZnVuY3Rpb24gYihlLHQscil7dCBpbnN0YW5jZW9mIEFlJiYoIm9ubG9hZCI9PT1yJiYodGhpcy5vbmxvYWQ9ITApLCgibG9hZCI9PT0oZVswXSYmZVswXS50eXBlKXx8dGhpcy5vbmxvYWQpJiYodGhpcy54aHJDYlN0YXJ0PSgwLGMudCkoKSkpfWZ1bmN0aW9uIHcoZSxyKXt0aGlzLnhockNiU3RhcnQmJnQuZW1pdCgieGhyLWNiLXRpbWUiLFsoMCxjLnQpKCktdGhpcy54aHJDYlN0YXJ0LHRoaXMub25sb2FkLHJdLHIpfWZ1bmN0aW9uIFIoZSl7dmFyIHQscj1lWzFdfHx7fTtpZigic3RyaW5nIj09dHlwZW9mIGVbMF0/MD09PSh0PWVbMF0pLmxlbmd0aCYmeS5SSSYmKHQ9IiIreS5nbS5sb2NhdGlvbi5ocmVmKTplWzBdJiZlWzBdLnVybD90PWVbMF0udXJsOnkuZ20/LlVSTCYmZVswXSYmZVswXWluc3RhbmNlb2YgVVJMP3Q9ZVswXS5ocmVmOiJmdW5jdGlvbiI9PXR5cGVvZiBlWzBdLnRvU3RyaW5nJiYodD1lWzBdLnRvU3RyaW5nKCkpLCJzdHJpbmciPT10eXBlb2YgdCYmMCE9PXQubGVuZ3RoKXt0JiYodGhpcy5wYXJzZWRPcmlnaW49KDAsdmUuRCkodCksdGhpcy5zYW1lT3JpZ2luPXRoaXMucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW4pO3ZhciBuPWkuZ2VuZXJhdGVUcmFjZVBheWxvYWQodGhpcy5wYXJzZWRPcmlnaW4pO2lmKG4mJihuLm5ld3JlbGljSGVhZGVyfHxuLnRyYWNlQ29udGV4dFBhcmVudEhlYWRlcikpaWYoZVswXSYmZVswXS5oZWFkZXJzKWEoZVswXS5oZWFkZXJzLG4pJiYodGhpcy5kdD1uKTtlbHNle3ZhciBvPXt9O2Zvcih2YXIgcyBpbiByKW9bc109cltzXTtvLmhlYWRlcnM9bmV3IEhlYWRlcnMoci5oZWFkZXJzfHx7fSksYShvLmhlYWRlcnMsbikmJih0aGlzLmR0PW4pLGUubGVuZ3RoPjE/ZVsxXT1vOmUucHVzaChvKX19ZnVuY3Rpb24gYShlLHQpe3ZhciByPSExO3JldHVybiB0Lm5ld3JlbGljSGVhZGVyJiYoZS5zZXQoIm5ld3JlbGljIix0Lm5ld3JlbGljSGVhZGVyKSxyPSEwKSx0LnRyYWNlQ29udGV4dFBhcmVudEhlYWRlciYmKGUuc2V0KCJ0cmFjZXBhcmVudCIsdC50cmFjZUNvbnRleHRQYXJlbnRIZWFkZXIpLHQudHJhY2VDb250ZXh0U3RhdGVIZWFkZXImJmUuc2V0KCJ0cmFjZXN0YXRlIix0LnRyYWNlQ29udGV4dFN0YXRlSGVhZGVyKSxyPSEwKSxyfX1mdW5jdGlvbiB4KGUsdCl7dGhpcy5wYXJhbXM9e30sdGhpcy5tZXRyaWNzPXt9LHRoaXMuc3RhcnRUaW1lPSgwLGMudCkoKSx0aGlzLmR0PXQsZS5sZW5ndGg+PTEmJih0aGlzLnRhcmdldD1lWzBdKSxlLmxlbmd0aD49MiYmKHRoaXMub3B0cz1lWzFdKTt2YXIgcj10aGlzLm9wdHN8fHt9LG49dGhpcy50YXJnZXQ7T2UodGhpcyxSZShuKSk7dmFyIGk9KCIiKyhuJiZuIGluc3RhbmNlb2YgRWUmJm4ubWV0aG9kfHxyLm1ldGhvZHx8IkdFVCIpKS50b1VwcGVyQ2FzZSgpO3RoaXMucGFyYW1zLm1ldGhvZD1pLHRoaXMuYm9keT1yLmJvZHksdGhpcy50eFNpemU9cmUoci5ib2R5KXx8MH1mdW5jdGlvbiBUKGUsdCl7aWYodGhpcy5lbmRUaW1lPSgwLGMudCkoKSx0aGlzLnBhcmFtc3x8KHRoaXMucGFyYW1zPXt9KSwoMCx3ZS5pVykodGhpcy5wYXJhbXMpKXJldHVybjtsZXQgaTt0aGlzLnBhcmFtcy5zdGF0dXM9dD90LnN0YXR1czowLCJzdHJpbmciPT10eXBlb2YgdGhpcy5yeFNpemUmJnRoaXMucnhTaXplLmxlbmd0aD4wJiYoaT0rdGhpcy5yeFNpemUpO2NvbnN0IG89e3R4U2l6ZTp0aGlzLnR4U2l6ZSxyeFNpemU6aSxkdXJhdGlvbjooMCxjLnQpKCktdGhpcy5zdGFydFRpbWV9O3IoInhociIsW3RoaXMucGFyYW1zLG8sdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJmZXRjaCJdLHRoaXMsbi5LNy5hamF4KX1mdW5jdGlvbiBFKGUpe2NvbnN0IHQ9dGhpcy5wYXJhbXMsaT10aGlzLm1ldHJpY3M7aWYoIXRoaXMuZW5kZWQpe3RoaXMuZW5kZWQ9ITA7Zm9yKGxldCB0PTA7dDxUZTt0KyspZS5yZW1vdmVFdmVudExpc3RlbmVyKHhlW3RdLHRoaXMubGlzdGVuZXIsITEpO3QuYWJvcnRlZHx8KDAsd2UuaVcpKHQpfHwoaS5kdXJhdGlvbj0oMCxjLnQpKCktdGhpcy5zdGFydFRpbWUsdGhpcy5sb2FkQ2FwdHVyZUNhbGxlZHx8NCE9PWUucmVhZHlTdGF0ZT9udWxsPT10LnN0YXR1cyYmKHQuc3RhdHVzPTApOkEodGhpcyxlKSxpLmNiVGltZT10aGlzLmNiVGltZSxyKCJ4aHIiLFt0LGksdGhpcy5zdGFydFRpbWUsdGhpcy5lbmRUaW1lLCJ4aHIiXSx0aGlzLG4uSzcuYWpheCkpfX1mdW5jdGlvbiBBKGUscil7ZS5wYXJhbXMuc3RhdHVzPXIuc3RhdHVzO3ZhciBpPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5yZXNwb25zZVR5cGU7cmV0dXJuImpzb24iPT09ciYmbnVsbCE9PXQ/dDoiYXJyYXlidWZmZXIiPT09cnx8ImJsb2IiPT09cnx8Impzb24iPT09cj9yZShlLnJlc3BvbnNlKToidGV4dCI9PT1yfHwiIj09PXJ8fHZvaWQgMD09PXI/cmUoZS5yZXNwb25zZVRleHQpOnZvaWQgMH0ocixlLmxhc3RTaXplKTtpZihpJiYoZS5tZXRyaWNzLnJ4U2l6ZT1pKSxlLnNhbWVPcmlnaW4mJnIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuaW5kZXhPZihTZSk+PTApe3ZhciBvPXIuZ2V0UmVzcG9uc2VIZWFkZXIoU2UpO28mJigoMCxhLnApKGgucnMsWyJBamF4L0Nyb3NzQXBwbGljYXRpb25UcmFjaW5nL0hlYWRlci9TZWVuIl0sdm9pZCAwLG4uSzcubWV0cmljcyx0KSxlLnBhcmFtcy5jYXQ9by5zcGxpdCgiLCAiKS5wb3AoKSl9ZS5sb2FkQ2FwdHVyZUNhbGxlZD0hMH10Lm9uKCJuZXcteGhyIixvKSx0Lm9uKCJvcGVuLXhoci1zdGFydCIscyksdC5vbigib3Blbi14aHItZW5kIix1KSx0Lm9uKCJzZW5kLXhoci1zdGFydCIsZCksdC5vbigieGhyLWNiLXRpbWUiLGwpLHQub24oInhoci1sb2FkLWFkZGVkIixmKSx0Lm9uKCJ4aHItbG9hZC1yZW1vdmVkIixwKSx0Lm9uKCJ4aHItcmVzb2x2ZWQiLGcpLHQub24oImFkZEV2ZW50TGlzdGVuZXItZW5kIixtKSx0Lm9uKCJyZW1vdmVFdmVudExpc3RlbmVyLWVuZCIsdiksdC5vbigiZm4tZW5kIix3KSx0Lm9uKCJmZXRjaC1iZWZvcmUtc3RhcnQiLFIpLHQub24oImZldGNoLXN0YXJ0Iix4KSx0Lm9uKCJmbi1zdGFydCIsYiksdC5vbigiZmV0Y2gtZG9uZSIsVCl9KGUsdGhpcy5lZSx0aGlzLmhhbmRsZXIsdGhpcy5kdCksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksMzg0NSkpKX19ZnVuY3Rpb24gT2UoZSx0KXt2YXIgcj0oMCx2ZS5EKSh0KSxuPWUucGFyYW1zfHxlO24uaG9zdG5hbWU9ci5ob3N0bmFtZSxuLnBvcnQ9ci5wb3J0LG4ucHJvdG9jb2w9ci5wcm90b2NvbCxuLmhvc3Q9ci5ob3N0bmFtZSsiOiIrci5wb3J0LG4ucGF0aG5hbWU9ci5wYXRobmFtZSxlLnBhcnNlZE9yaWdpbj1yLGUuc2FtZU9yaWdpbj1yLnNhbWVPcmlnaW59Y29uc3QgTmU9e30sSWU9WyJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiXTtmdW5jdGlvbiBQZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJoaXN0b3J5Iil9KGUpO3JldHVybiF5LlJJfHxOZVt0LmRlYnVnSWRdKyt8fChOZVt0LmRlYnVnSWRdPTEsKDAsb2UuWU0pKHQpLmluUGxhY2Uod2luZG93Lmhpc3RvcnksSWUsIi0iKSksdH12YXIgamU9aSgzNzM4KTtmdW5jdGlvbiBrZShlKXtwKHUuQkwsZnVuY3Rpb24odD1EYXRlLm5vdygpKXtjb25zdCByPXQteS5XTjtyPDAmJigwLGwuUikoNjIsdCksKDAsYS5wKShoLlhHLFt1LkJMLHt0aW1lOnJ9XSx2b2lkIDAsbi5LNy5tZXRyaWNzLGUuZWUpLGUuYWRkVG9UcmFjZSh7bmFtZTp1LkJMLHN0YXJ0OnQsb3JpZ2luOiJuciJ9KSwoMCxhLnApKHUuUGwrdS5oRyxbcix1LkJMXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLGUuZWUpfSxlKX1jb25zdHtIZTpDZSxiRDpMZSxkMzpIZSxLcDpNZSxUWjpLZSxMYzpEZSx1UDpVZSxSejpGZX09amU7Y2xhc3MgV2UgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1LZTtjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlLEtlKSx0PWUscCh1LlUyLGZ1bmN0aW9uKGUpe2lmKCEoZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLm5hbWUmJmUuc3RhcnQpKXJldHVybjtjb25zdCByPXtuOmUubmFtZSxzOmUuc3RhcnQteS5XTixlOihlLmVuZHx8ZS5zdGFydCkteS5XTixvOmUub3JpZ2lufHwiIix0OiJhcGkifTtyLnM8MHx8ci5lPDB8fHIuZTxyLnM/KDAsbC5SKSg2MSx7c3RhcnQ6ci5zLGVuZDpyLmV9KTooMCxhLnApKCJic3RBcGkiLFtyXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2UsdC5lZSl9LHQpLGtlKGUpO2lmKCEoMCxSLlYpKGUuaW5pdCkpcmV0dXJuIHZvaWQgdGhpcy5kZXJlZ2lzdGVyRHJhaW4oKTtjb25zdCByPXRoaXMuZWU7bGV0IG87UGUociksdGhpcy5ldmVudHNFRT0oMCxuZS51KShyKSx0aGlzLmV2ZW50c0VFLm9uKFVlLGZ1bmN0aW9uKGUsdCl7dGhpcy5ic3RTdGFydD0oMCxjLnQpKCl9KSx0aGlzLmV2ZW50c0VFLm9uKERlLGZ1bmN0aW9uKGUsdCl7KDAsYS5wKSgiYnN0IixbZVswXSx0LHRoaXMuYnN0U3RhcnQsKDAsYy50KSgpXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxyLm9uKEZlK0hlLGZ1bmN0aW9uKGUpe3RoaXMudGltZT0oMCxjLnQpKCksdGhpcy5zdGFydFBhdGg9bG9jYXRpb24ucGF0aG5hbWUrbG9jYXRpb24uaGFzaH0pLHIub24oRmUrTWUsZnVuY3Rpb24oZSl7KDAsYS5wKSgiYnN0SGlzdCIsW2xvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2gsdGhpcy5zdGFydFBhdGgsdGhpcy50aW1lXSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KTt0cnl7bz1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihlPT57Y29uc3QgdD1lLmdldEVudHJpZXMoKTsoMCxhLnApKENlLFt0XSx2b2lkIDAsbi5LNy5zZXNzaW9uVHJhY2Uscil9KSxvLm9ic2VydmUoe3R5cGU6TGUsYnVmZmVyZWQ6ITB9KX1jYXRjaChlKXt9dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNjk3NCkpLHtyZXNvdXJjZU9ic2VydmVyOm99KX19dmFyIEJlPWkoNjM0NCk7Y2xhc3MgVmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CZS5UWjsjbjtyZWNvcmRlcjtjb25zdHJ1Y3RvcihlKXt2YXIgdDtsZXQgcjtzdXBlcihlLEJlLlRaKSx0PWUscCh1LkNILGZ1bmN0aW9uKCl7KDAsYS5wKSh1LkNILFtdLHZvaWQgMCxuLks3LnNlc3Npb25SZXBsYXksdC5lZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5UYixmdW5jdGlvbigpeygwLGEucCkodS5UYixbXSx2b2lkIDAsbi5LNy5zZXNzaW9uUmVwbGF5LGUuZWUpfSxlKX0oZSk7dHJ5e3I9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiIi5jb25jYXQoUy5IMywiXyIpLmNvbmNhdChTLnVoKSkpfWNhdGNoKGUpe30oMCx3LlNSKShlLmluaXQpJiZ0aGlzLmVlLm9uKHUuQ0gsKCk9PnRoaXMuI2koKSksdGhpcy4jbyhyKSYmdGhpcy5pbXBvcnRSZWNvcmRlcigpLnRoZW4oZT0+e2Uuc3RhcnRSZWNvcmRpbmcoQmUuUWIuUFJFTE9BRCxyPy5zZXNzaW9uUmVwbGF5TW9kZSl9KSx0aGlzLmltcG9ydEFnZ3JlZ2F0b3IodGhpcy5hZ2VudFJlZiwoKT0+aS5lKDQ3OCkudGhlbihpLmJpbmQoaSw2MTY3KSksdGhpcyksdGhpcy5lZS5vbigiZXJyIixlPT57dGhpcy5ibG9ja2VkfHx0aGlzLmFnZW50UmVmLnJ1bnRpbWUuaXNSZWNvcmRpbmcmJih0aGlzLmVycm9yTm90aWNlZD0hMCwoMCxhLnApKEJlLlZoLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSl9KX0jbyhlKXtyZXR1cm4gZSYmKGUuc2Vzc2lvblJlcGxheU1vZGU9PT1TLmcuRlVMTHx8ZS5zZXNzaW9uUmVwbGF5TW9kZT09PVMuZy5FUlJPUil8fCgwLHcuQXcpKHRoaXMuYWdlbnRSZWYuaW5pdCl9aW1wb3J0UmVjb3JkZXIoKXtyZXR1cm4gdGhpcy5yZWNvcmRlcj9Qcm9taXNlLnJlc29sdmUodGhpcy5yZWNvcmRlcik6KHRoaXMuI24/Pz1Qcm9taXNlLmFsbChbaS5lKDQ3OCksaS5lKDI0OSldKS50aGVuKGkuYmluZChpLDQ4NjYpKS50aGVuKCh7UmVjb3JkZXI6ZX0pPT4odGhpcy5yZWNvcmRlcj1uZXcgZSh0aGlzKSx0aGlzLnJlY29yZGVyKSkuY2F0Y2goZT0+e3Rocm93IHRoaXMuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSksdGhpcy5ibG9ja2VkPSEwLGV9KSx0aGlzLiNuKX0jaSgpe3RoaXMuYmxvY2tlZHx8KHRoaXMuZmVhdEFnZ3JlZ2F0ZT90aGlzLmZlYXRBZ2dyZWdhdGUubW9kZSE9PVMuZy5GVUxMJiZ0aGlzLmZlYXRBZ2dyZWdhdGUuaW5pdGlhbGl6ZVJlY29yZGluZyhTLmcuRlVMTCwhMCxCZS5RYi5BUEkpOnRoaXMuaW1wb3J0UmVjb3JkZXIoKS50aGVuKCgpPT57dGhpcy5yZWNvcmRlci5zdGFydFJlY29yZGluZyhCZS5RYi5BUEksUy5nLkZVTEwpfSkpfX12YXIgR2U9aSgzOTYyKTtmdW5jdGlvbiB6ZShlKXtjb25zdCB0PWUuZWUuZ2V0KCJ0cmFjZXIiKTtmdW5jdGlvbiByKCl7fXAodS5kVCxmdW5jdGlvbihlKXtyZXR1cm4obmV3IHIpLmdldCgib2JqZWN0Ij09dHlwZW9mIGU/ZTp7fSl9LGUpO2NvbnN0IGk9ci5wcm90b3R5cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbihyLGkpe3ZhciBvPXt9LHM9dGhpcyxkPSJmdW5jdGlvbiI9PXR5cGVvZiBpO3JldHVybigwLGEucCkoaC54VixbIkFQSS9jcmVhdGVUcmFjZXIvY2FsbGVkIl0sdm9pZCAwLG4uSzcubWV0cmljcyxlLmVlKSxlLnJ1blNvZnROYXZPdmVyU3BhfHwoMCxhLnApKHUuaHcrInRyYWNlciIsWygwLGMudCkoKSxyLG9dLHMsbi5LNy5zcGEsZS5lZSksZnVuY3Rpb24oKXtpZih0LmVtaXQoKGQ/IiI6Im5vLSIpKyJmbi1zdGFydCIsWygwLGMudCkoKSxzLGRdLG8pLGQpdHJ5e3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChlKXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgZT9uZXcgRXJyb3IoZSk6ZTt0aHJvdyB0LmVtaXQoImZuLWVyciIsW2FyZ3VtZW50cyx0aGlzLHJdLG8pLHJ9ZmluYWxseXt0LmVtaXQoImZuLWVuZCIsWygwLGMudCkoKV0sbyl9fX19O1siYWN0aW9uVGV4dCIsInNldE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJzYXZlIiwiaWdub3JlIiwib25FbmQiLCJnZXRDb250ZXh0IiwiZW5kIiwiZ2V0Il0uZm9yRWFjaCh0PT57cC5hcHBseSh0aGlzLFt0LGZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5wKSh1Lmh3K3QsWygwLGMudCkoKSwuLi5hcmd1bWVudHNdLHRoaXMsZS5ydW5Tb2Z0TmF2T3ZlclNwYT9uLks3LnNvZnROYXY6bi5LNy5zcGEsZS5lZSksdGhpc30sZSxpXSl9KSxwKHUuUEEsZnVuY3Rpb24oKXtlLnJ1blNvZnROYXZPdmVyU3BhPygwLGEucCkodS5odysicm91dGVOYW1lIixbcGVyZm9ybWFuY2Uubm93KCksLi4uYXJndW1lbnRzXSx2b2lkIDAsbi5LNy5zb2Z0TmF2LGUuZWUpOigwLGEucCkodS5QbCsicm91dGVOYW1lIixbKDAsYy50KSgpLC4uLmFyZ3VtZW50c10sdGhpcyxuLks3LnNwYSxlLmVlKX0sZSl9Y2xhc3MgWmUgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1HZS5UWjtjb25zdHJ1Y3RvcihlKXtpZihzdXBlcihlLEdlLlRaKSx6ZShlKSwheS5SSXx8ISgwLE8uZFYpKCkuby5NTylyZXR1cm47Y29uc3QgdD1QZSh0aGlzLmVlKTt0cnl7dGhpcy5yZW1vdmVPbkFib3J0PW5ldyBBYm9ydENvbnRyb2xsZXJ9Y2F0Y2goZSl7fUdlLnRDLmZvckVhY2goZT0+eygwLEkuc3ApKGUsZT0+e3MoZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKX0pO2NvbnN0IHI9KCk9PigwLGEucCkoIm5ld1VSTCIsWygwLGMudCkoKSwiIit3aW5kb3cubG9jYXRpb25dLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpO3Qub24oInB1c2hTdGF0ZS1lbmQiLHIpLHQub24oInJlcGxhY2VTdGF0ZS1lbmQiLHIpLCgwLEkuc3ApKEdlLk9WLGU9PntzKGUpLCgwLGEucCkoIm5ld1VSTCIsW2UudGltZVN0YW1wLCIiK3dpbmRvdy5sb2NhdGlvbl0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKTtsZXQgbj0hMTtjb25zdCBvPW5ldygoMCxPLmRWKSgpLm8uTU8pKChlLHQpPT57bnx8KG49ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57KDAsYS5wKSgibmV3RG9tIixbKDAsYy50KSgpXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKSxuPSExfSkpfSkscz0oMCx4LnMpKGU9PnsoMCxhLnApKCJuZXdVSUV2ZW50IixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksby5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsY2hhcmFjdGVyRGF0YTohMH0pfSwxMDAse2xlYWRpbmc6ITB9KTt0aGlzLmFib3J0SGFuZGxlcj1mdW5jdGlvbigpe3RoaXMucmVtb3ZlT25BYm9ydD8uYWJvcnQoKSxvLmRpc2Nvbm5lY3QoKSx0aGlzLmFib3J0SGFuZGxlcj12b2lkIDB9LHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDQzOTMpKSx7ZG9tT2JzZXJ2ZXI6b30pfX12YXIgcWU9aSg3Mzc4KTtjb25zdCBYZT17fSxZZT1bImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVwbGFjZUNoaWxkIl07ZnVuY3Rpb24gSmUoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgianNvbnAiKX0oZSk7aWYoIXkuUkl8fFhlW3QuZGVidWdJZF0pcmV0dXJuIHQ7WGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj0oMCxvZS5ZTSkodCksbj0vWz8mXSg/OmNhbGxiYWNrfGNiKT0oW14mI10rKS8saT0vKC4qKVwuKFteLl0rKS8sbz0vXihcdyspKFwufCQpKC4qKSQvO2Z1bmN0aW9uIHMoZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPWUubWF0Y2gobyksbj1yWzFdO3JldHVybiBzKHJbM10sdFtuXSl9cmV0dXJuIHIuaW5QbGFjZShOb2RlLnByb3RvdHlwZSxZZSwiZG9tLSIpLHQub24oImRvbS1zdGFydCIsZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUubm9kZU5hbWV8fCJzY3JpcHQiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXJldHVybjt2YXIgbz0oYT1lLnNyYyxjPWEubWF0Y2gobiksYz9jWzFdOm51bGwpO3ZhciBhLGM7aWYoIW8pcmV0dXJuO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goaSk7aWYodCYmdC5sZW5ndGg+PTMpcmV0dXJue2tleTp0WzJdLHBhcmVudDpzKHRbMV0sd2luZG93KX07cmV0dXJue2tleTplLHBhcmVudDp3aW5kb3d9fShvKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdS5wYXJlbnRbdS5rZXldKXJldHVybjt2YXIgZD17fTtmdW5jdGlvbiBsKCl7dC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1mdW5jdGlvbiBmKCl7dC5lbWl0KCJqc29ucC1lcnJvciIsW10sZCksdC5lbWl0KCJqc29ucC1lbmQiLFtdLGQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwoMCxJLmpUKSghMSkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGYsKDAsSS5qVCkoITEpKX1yLmluUGxhY2UodS5wYXJlbnQsW3Uua2V5XSwiY2ItIixkKSxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsKDAsSS5qVCkoITEpKSxlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmLCgwLEkualQpKCExKSksdC5lbWl0KCJuZXctanNvbnAiLFtlLnNyY10sZCl9KGVbMF0pfSksdH1jb25zdCAkZT17fTtmdW5jdGlvbiBRZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJwcm9taXNlIil9KGUpO2lmKCRlW3QuZGVidWdJZF0pcmV0dXJuIHQ7JGVbdC5kZWJ1Z0lkXT0hMDt2YXIgcj10LmNvbnRleHQsbj0oMCxvZS5ZTSkodCksaT15LmdtLlByb21pc2U7cmV0dXJuIGkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShyKXt2YXIgbz10LmNvbnRleHQoKSxzPW4ociwiZXhlY3V0b3ItIixvLG51bGwsITEpO2NvbnN0IGE9UmVmbGVjdC5jb25zdHJ1Y3QoaSxbc10sZSk7cmV0dXJuIHQuY29udGV4dChhKS5nZXRDdHg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sYX15LmdtLlByb21pc2U9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOiJQcm9taXNlIn0pLGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS50b1N0cmluZygpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxpKSxbImFsbCIsInJhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2xldCBpPSExO1suLi5lfHxbXV0uZm9yRWFjaChlPT57dGhpcy5yZXNvbHZlKGUpLnRoZW4ocygiYWxsIj09PXIpLHMoITEpKX0pO2NvbnN0IG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG87ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt0LmVtaXQoInByb3BhZ2F0ZSIsW251bGwsIWldLG8sITEsITEpLGk9aXx8IWV9fX19KSxbInJlc29sdmUiLCJyZWplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2NvbnN0IG49aVtyXTtlW3JdPWZ1bmN0aW9uKGUpe2NvbnN0IHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGUhPT1yJiZ0LmVtaXQoInByb3BhZ2F0ZSIsW2UsITBdLHIsITEsITEpLHJ9fSksZS5wcm90b3R5cGU9aS5wcm90b3R5cGU7Y29uc3Qgbz1pLnByb3RvdHlwZS50aGVuO2kucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oLi4uZSl7dmFyIGk9dGhpcyxzPXIoaSk7cy5wcm9taXNlPWksZVswXT1uKGVbMF0sImNiLSIscyxudWxsLCExKSxlWzFdPW4oZVsxXSwiY2ItIixzLG51bGwsITEpO2NvbnN0IGE9by5hcHBseSh0aGlzLGUpO3JldHVybiBzLm5leHRQcm9taXNlPWEsdC5lbWl0KCJwcm9wYWdhdGUiLFtpLCEwXSxhLCExLCExKSxhfSxpLnByb3RvdHlwZS50aGVuW29lLkp0XT1vLHQub24oImV4ZWN1dG9yLXN0YXJ0IixmdW5jdGlvbihlKXtlWzBdPW4oZVswXSwicmVzb2x2ZS0iLHRoaXMsbnVsbCwhMSksZVsxXT1uKGVbMV0sInJlc29sdmUtIix0aGlzLG51bGwsITEpfSksdC5vbigiZXhlY3V0b3ItZXJyIixmdW5jdGlvbihlLHQscil7ZVsxXShyKX0pLHQub24oImNiLWVuZCIsZnVuY3Rpb24oZSxyLG4pe3QuZW1pdCgicHJvcGFnYXRlIixbbiwhMF0sdGhpcy5uZXh0UHJvbWlzZSwhMSwhMSl9KSx0Lm9uKCJwcm9wYWdhdGUiLGZ1bmN0aW9uKGUscixuKXtpZighdGhpcy5nZXRDdHh8fHIpe2NvbnN0IHI9dGhpcyxuPWUgaW5zdGFuY2VvZiBQcm9taXNlP3QuY29udGV4dChlKTpudWxsO2xldCBpO3RoaXMuZ2V0Q3R4PWZ1bmN0aW9uKCl7cmV0dXJuIGl8fChpPW4mJm4hPT1yPyJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEN0eD9uLmdldEN0eCgpOm46cixpKX19fSl9KCksdH1jb25zdCBldD17fSx0dD0ic2V0VGltZW91dCIscnQ9InNldEludGVydmFsIixudD0iY2xlYXJUaW1lb3V0IixpdD0iLXN0YXJ0IixvdD1bdHQsInNldEltbWVkaWF0ZSIscnQsbnQsImNsZWFySW1tZWRpYXRlIl07ZnVuY3Rpb24gc3QoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8aWUuZWUpLmdldCgidGltZXIiKX0oZSk7aWYoZXRbdC5kZWJ1Z0lkXSsrKXJldHVybiB0O2V0W3QuZGVidWdJZF09MTt2YXIgcj0oMCxvZS5ZTSkodCk7cmV0dXJuIHIuaW5QbGFjZSh5LmdtLG90LnNsaWNlKDAsMiksdHQrIi0iKSxyLmluUGxhY2UoeS5nbSxvdC5zbGljZSgyLDMpLHJ0KyItIiksci5pblBsYWNlKHkuZ20sb3Quc2xpY2UoMyksbnQrIi0iKSx0Lm9uKHJ0K2l0LGZ1bmN0aW9uKGUsdCxuKXtlWzBdPXIoZVswXSwiZm4tIixudWxsLG4pfSksdC5vbih0dCtpdCxmdW5jdGlvbihlLHQsbil7dGhpcy5tZXRob2Q9bix0aGlzLnRpbWVyRHVyYXRpb249aXNOYU4oZVsxXSk/MDorZVsxXSxlWzBdPXIoZVswXSwiZm4tIix0aGlzLG4pfSksdH1jb25zdCBhdD17fTtmdW5jdGlvbiBjdChlKXtjb25zdCB0PWZ1bmN0aW9uKGUpe3JldHVybihlfHxpZS5lZSkuZ2V0KCJtdXRhdGlvbiIpfShlKTtpZigheS5SSXx8YXRbdC5kZWJ1Z0lkXSlyZXR1cm4gdDthdFt0LmRlYnVnSWRdPSEwO3ZhciByPSgwLG9lLllNKSh0KSxuPXkuZ20uTXV0YXRpb25PYnNlcnZlcjtyZXR1cm4gbiYmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj9uZXcgbihyKGUsImZuLSIpKTpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGU9bi5wcm90b3R5cGUpLHR9Y29uc3R7VFo6dXQsZDM6ZHQsS3A6bHQsJHA6ZnQsd1c6aHQsZTU6cHQsdEg6Z3QsdVA6bXQscnc6dnQsTGM6YnR9PXFlO2NsYXNzIHl0IGV4dGVuZHMgRXtzdGF0aWMgZmVhdHVyZU5hbWU9dXQ7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSx1dCksemUoZSksIXkuUkkpcmV0dXJuO3RyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChlKXt9bGV0IHQscj0wO2NvbnN0IG49dGhpcy5lZS5nZXQoInRyYWNlciIpLG89SmUodGhpcy5lZSkscz1RZSh0aGlzLmVlKSx1PXN0KHRoaXMuZWUpLGQ9Y2UodGhpcy5lZSksbD10aGlzLmVlLmdldCgiZXZlbnRzIiksZj1tZSh0aGlzLmVlKSxoPVBlKHRoaXMuZWUpLHA9Y3QodGhpcy5lZSk7ZnVuY3Rpb24gZyhlLHQpe2guZW1pdCgibmV3VVJMIixbIiIrd2luZG93LmxvY2F0aW9uLHRdKX1mdW5jdGlvbiBtKCl7cisrLHQ9d2luZG93LmxvY2F0aW9uLmhhc2gsdGhpc1ttdF09KDAsYy50KSgpfWZ1bmN0aW9uIHYoKXtyLS0sd2luZG93LmxvY2F0aW9uLmhhc2ghPT10JiZnKDAsITApO3ZhciBlPSgwLGMudCkoKTt0aGlzW3B0XT1+fnRoaXNbcHRdK2UtdGhpc1ttdF0sdGhpc1tidF09ZX1mdW5jdGlvbiBiKGUsdCl7ZS5vbih0LGZ1bmN0aW9uKCl7dGhpc1t0XT0oMCxjLnQpKCl9KX10aGlzLmVlLm9uKG10LG0pLHMub24odnQsbSksby5vbih2dCxtKSx0aGlzLmVlLm9uKGJ0LHYpLHMub24oaHQsdiksby5vbihodCx2KSx0aGlzLmVlLm9uKCJmbi1lcnIiLCguLi50KT0+e3RbMl0/Ll9fbmV3cmVsaWM/LltlLmFnZW50SWRlbnRpZmllcl18fCgwLGEucCkoImZ1bmN0aW9uLWVyciIsWy4uLnRdLHZvaWQgMCx0aGlzLmZlYXR1cmVOYW1lLHRoaXMuZWUpfSksdGhpcy5lZS5idWZmZXIoW210LGJ0LCJ4aHItcmVzb2x2ZWQiXSx0aGlzLmZlYXR1cmVOYW1lKSxsLmJ1ZmZlcihbbXRdLHRoaXMuZmVhdHVyZU5hbWUpLHUuYnVmZmVyKFsic2V0VGltZW91dCIrbHQsImNsZWFyVGltZW91dCIrZHQsbXRdLHRoaXMuZmVhdHVyZU5hbWUpLGQuYnVmZmVyKFttdCwibmV3LXhociIsInNlbmQteGhyIitkdF0sdGhpcy5mZWF0dXJlTmFtZSksZi5idWZmZXIoW2d0K2R0LGd0KyItZG9uZSIsZ3QrZnQrZHQsZ3QrZnQrbHRdLHRoaXMuZmVhdHVyZU5hbWUpLGguYnVmZmVyKFsibmV3VVJMIl0sdGhpcy5mZWF0dXJlTmFtZSkscC5idWZmZXIoW210XSx0aGlzLmZlYXR1cmVOYW1lKSxzLmJ1ZmZlcihbInByb3BhZ2F0ZSIsdnQsaHQsImV4ZWN1dG9yLWVyciIsInJlc29sdmUiK2R0XSx0aGlzLmZlYXR1cmVOYW1lKSxuLmJ1ZmZlcihbbXQsIm5vLSIrbXRdLHRoaXMuZmVhdHVyZU5hbWUpLG8uYnVmZmVyKFsibmV3LWpzb25wIiwiY2Itc3RhcnQiLCJqc29ucC1lcnJvciIsImpzb25wLWVuZCJdLHRoaXMuZmVhdHVyZU5hbWUpLGIoZixndCtkdCksYihmLGd0KyItZG9uZSIpLGIobywibmV3LWpzb25wIiksYihvLCJqc29ucC1lbmQiKSxiKG8sImNiLXN0YXJ0IiksaC5vbigicHVzaFN0YXRlLWVuZCIsZyksaC5vbigicmVwbGFjZVN0YXRlLWVuZCIsZyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGcsKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZywoMCxJLmpUKSghMCx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtnKDAscj4xKX0sKDAsSS5qVCkoITAsdGhpcy5yZW1vdmVPbkFib3J0Py5zaWduYWwpKSx0aGlzLmFib3J0SGFuZGxlcj10aGlzLiNyLHRoaXMuaW1wb3J0QWdncmVnYXRvcihlLCgpPT5pLmUoNDc4KS50aGVuKGkuYmluZChpLDU1OTIpKSl9I3IoKXt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfX12YXIgd3Q9aSgzMzMzKTtjbGFzcyBSdCBleHRlbmRzIEV7c3RhdGljIGZlYXR1cmVOYW1lPXd0LlRaO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsd3QuVFopO2NvbnN0IHQ9W2UuaW5pdC5wYWdlX2FjdGlvbi5lbmFibGVkLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21hcmtzLGUuaW5pdC5wZXJmb3JtYW5jZS5jYXB0dXJlX21lYXN1cmVzLGUuaW5pdC51c2VyX2FjdGlvbnMuZW5hYmxlZCxlLmluaXQucGVyZm9ybWFuY2UucmVzb3VyY2VzLmVuYWJsZWRdO3ZhciByO3I9ZSxwKHUuaEcsKGUsdCk9PnooZSx0LHIpLHIpLGZ1bmN0aW9uKGUpe3AodS5mRiwodCxyKT0+cSh0LHIsZSksZSl9KGUpLGtlKGUpLFgoZSksZnVuY3Rpb24oZSl7cCh1LlYxLCh0LHIpPT5aKHQscixlKSxlKX0oZSk7Y29uc3Qgbz1lLmluaXQuZmVhdHVyZV9mbGFncy5pbmNsdWRlcygidXNlcl9mcnVzdHJhdGlvbnMiKTtsZXQgcztpZih5LlJJJiZvJiYobWUodGhpcy5lZSksY2UodGhpcy5lZSkscz1QZSh0aGlzLmVlKSkseS5SSSl7aWYoZS5pbml0LnVzZXJfYWN0aW9ucy5lbmFibGVkJiYod3QuWnAuZm9yRWFjaChlPT4oMCxJLnNwKShlLGU9PigwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSksITApKSx3dC5xTi5mb3JFYWNoKGU9Pntjb25zdCB0PSgwLHgucykoZT0+eygwLGEucCkoInVhIixbZV0sdm9pZCAwLHRoaXMuZmVhdHVyZU5hbWUsdGhpcy5lZSl9LDUwMCx7bGVhZGluZzohMH0pOygwLEkuc3ApKGUsdCl9KSxvKSl7ZnVuY3Rpb24gYyh0KXtjb25zdCByPSgwLHZlLkQpKHQpO3JldHVybiBlLmJlYWNvbnMuaW5jbHVkZXMoci5ob3N0bmFtZSsiOiIrci5wb3J0KX1mdW5jdGlvbiBkKCl7cy5lbWl0KCJuYXZDaGFuZ2UiKX15LmdtLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+eygwLGEucCkoInVhRXJyIixbXSx2b2lkIDAsbi5LNy5nZW5lcmljRXZlbnRzLHRoaXMuZWUpfSwoMCxJLmpUKSghMSx0aGlzLnJlbW92ZU9uQWJvcnQ/LnNpZ25hbCkpLHRoaXMuZWUub24oIm9wZW4teGhyLXN0YXJ0IiwoZSx0KT0+e2MoZVsxXSl8fHQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9PnsyPT09dC5yZWFkeVN0YXRlJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pfSksdGhpcy5lZS5vbigiZmV0Y2gtc3RhcnQiLGU9PntlLmxlbmd0aD49MSYmIWMoUmUoZVswXSkpJiYoMCxhLnApKCJ1YVhociIsW10sdm9pZCAwLG4uSzcuZ2VuZXJpY0V2ZW50cyx0aGlzLmVlKX0pLHMub24oInB1c2hTdGF0ZS1lbmQiLGQpLHMub24oInJlcGxhY2VTdGF0ZS1lbmQiLGQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixkLCgwLEkualQpKCEwLHRoaXMucmVtb3ZlT25BYm9ydD8uc2lnbmFsKSl9aWYoZS5pbml0LnBlcmZvcm1hbmNlLnJlc291cmNlcy5lbmFibGVkJiZ5LmdtLlBlcmZvcm1hbmNlT2JzZXJ2ZXI/LnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMoInJlc291cmNlIikpe25ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGU9PntlLmdldEVudHJpZXMoKS5mb3JFYWNoKGU9PnsoMCxhLnApKCJicm93c2VyUGVyZm9ybWFuY2UucmVzb3VyY2UiLFtlXSx2b2lkIDAsdGhpcy5mZWF0dXJlTmFtZSx0aGlzLmVlKX0pfSkub2JzZXJ2ZSh7dHlwZToicmVzb3VyY2UiLGJ1ZmZlcmVkOiEwfSl9fXRyeXt0aGlzLnJlbW92ZU9uQWJvcnQ9bmV3IEFib3J0Q29udHJvbGxlcn1jYXRjaChsKXt9dGhpcy5hYm9ydEhhbmRsZXI9KCk9Pnt0aGlzLnJlbW92ZU9uQWJvcnQ/LmFib3J0KCksdGhpcy5hYm9ydEhhbmRsZXI9dm9pZCAwfSx0LnNvbWUoZT0+ZSk/dGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksODAxOSkpKTp0aGlzLmRlcmVnaXN0ZXJEcmFpbigpfX12YXIgeHQ9aSgyNjQ2KTtjb25zdCBUdD1uZXcgTWFwO2Z1bmN0aW9uIEV0KGUsdCxyLG4pe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8IXR8fCJzdHJpbmciIT10eXBlb2Ygcnx8IXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W3JdKXJldHVybigwLGwuUikoMjkpO2NvbnN0IGk9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGllLmVlKS5nZXQoImxvZ2dlciIpfShlKSxvPSgwLG9lLllNKShpKSxzPW5ldyB4dC55KGllLlApO3MubGV2ZWw9bi5sZXZlbCxzLmN1c3RvbUF0dHJpYnV0ZXM9bi5jdXN0b21BdHRyaWJ1dGVzO2NvbnN0IGE9dFtyXT8uW29lLkp0XXx8dFtyXTtyZXR1cm4gVHQuc2V0KGEscyksby5pblBsYWNlKHQsW3JdLCJ3cmFwLWxvZ2dlci0iLCgpPT5UdC5nZXQoYSkpLGl9dmFyIEF0PWkoMTkxMCk7Y2xhc3MgU3QgZXh0ZW5kcyBFe3N0YXRpYyBmZWF0dXJlTmFtZT1CLlRaO2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUsQi5UWiksdD1lLHAodS4kOSwoZSxyKT0+RyhlLHIsdCksdCksZnVuY3Rpb24oZSl7cCh1LldiLCh0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bj17fSxsZXZlbDppPUIucF8uSU5GT309e30pPT57RXQoZS5lZSx0LHIse2N1c3RvbUF0dHJpYnV0ZXM6bixsZXZlbDppfSl9LGUpfShlKSxYKGUpO2NvbnN0IHI9dGhpcy5lZTtbImxvZyIsImVycm9yIiwid2FybiIsImluZm8iLCJkZWJ1ZyIsInRyYWNlIl0uZm9yRWFjaChlPT57KDAsQXQuaSkoeS5nbS5jb25zb2xlW2VdKSxFdChyLHkuZ20uY29uc29sZSxlLHtsZXZlbDoibG9nIj09PWU/ImluZm8iOmV9KX0pLHRoaXMuZWUub24oIndyYXAtbG9nZ2VyLWVuZCIsZnVuY3Rpb24oW2VdKXtjb25zdHtsZXZlbDp0LGN1c3RvbUF0dHJpYnV0ZXM6bn09dGhpczsoMCxWLlIpKHIsZSxuLHQpfSksdGhpcy5pbXBvcnRBZ2dyZWdhdG9yKGUsKCk9PmkuZSg0NzgpLnRoZW4oaS5iaW5kKGksNTI4OCkpKX19bmV3IGNsYXNzIGV4dGVuZHMgcntjb25zdHJ1Y3RvcihlKXt2YXIgdDsoc3VwZXIoKSx5LmdtKT8odGhpcy5mZWF0dXJlcz17fSwoMCxPLmJRKSh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzKSx0aGlzLmRlc2lyZWRGZWF0dXJlcz1uZXcgU2V0KGUuZmVhdHVyZXN8fFtdKSx0aGlzLmRlc2lyZWRGZWF0dXJlcy5hZGQoXyksdGhpcy5ydW5Tb2Z0TmF2T3ZlclNwYT1bLi4udGhpcy5kZXNpcmVkRmVhdHVyZXNdLnNvbWUoZT0+ZS5mZWF0dXJlTmFtZT09PW4uSzcuc29mdE5hdiksKDAscy5qKSh0aGlzLGUsZS5sb2FkZXJUeXBlfHwiYWdlbnQiKSx0PXRoaXMscCh1LmNELGZ1bmN0aW9uKGUscixuPSExKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKFsic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiJdLmluY2x1ZGVzKHR5cGVvZiByKXx8bnVsbD09PXIpcmV0dXJuIGcodCxlLHIsdS5jRCxuKTsoMCxsLlIpKDQwLHR5cGVvZiByKX1lbHNlKDAsbC5SKSgzOSx0eXBlb2YgZSl9LHQpLGZ1bmN0aW9uKGUpe3AodS5EbCxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiBnKGUsImVuZHVzZXIuaWQiLHQsdS5EbCwhMCk7KDAsbC5SKSg0MSx0eXBlb2YgdCl9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUubmIsZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4gZyhlLCJhcHBsaWNhdGlvbi52ZXJzaW9uIix0LHUubmIsITEpOygwLGwuUikoNDIsdHlwZW9mIHQpfSxlKX0odGhpcyksZnVuY3Rpb24oZSl7cCh1LmQzLGZ1bmN0aW9uKCl7ZS5lZS5lbWl0KCJtYW51YWwtc3RhcnQtYWxsIil9LGUpfSh0aGlzKSxmdW5jdGlvbihlKXtwKHUuUHYsZnVuY3Rpb24odD0hMCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdCl7aWYoKDAsYS5wKSh1LlBsK3UuUHYsW3RdLHZvaWQgMCwic2Vzc2lvbiIsZS5lZSksZS5ydW50aW1lLmNvbnNlbnRlZD10LHQpe2NvbnN0IHQ9ZS5mZWF0dXJlcy5wYWdlX3ZpZXdfZXZlbnQ7dC5vbkFnZ3JlZ2F0ZUltcG9ydGVkLnRoZW4oZT0+e2NvbnN0IHI9dC5mZWF0QWdncmVnYXRlO2UmJiFyLnNlbnRSdW0mJnIuc2VuZFJ1bSgpfSl9fWVsc2UoMCxsLlIpKDY1LHR5cGVvZiB0KX0sZSl9KHRoaXMpLHRoaXMucnVuKCkpOigwLGwuUikoMjEpfWdldCBjb25maWcoKXtyZXR1cm57aW5mbzp0aGlzLmluZm8saW5pdDp0aGlzLmluaXQsbG9hZGVyX2NvbmZpZzp0aGlzLmxvYWRlcl9jb25maWcscnVudGltZTp0aGlzLnJ1bnRpbWV9fWdldCBhcGkoKXtyZXR1cm4gdGhpc31ydW4oKXt0cnl7Y29uc3QgZT1mdW5jdGlvbihlKXtjb25zdCB0PXt9O3JldHVybiBvLmZvckVhY2gocj0+e3Rbcl09ISFlW3JdPy5lbmFibGVkfSksdH0odGhpcy5pbml0KSx0PVsuLi50aGlzLmRlc2lyZWRGZWF0dXJlc107dC5zb3J0KChlLHQpPT5uLlAzW2UuZmVhdHVyZU5hbWVdLW4uUDNbdC5mZWF0dXJlTmFtZV0pLHQuZm9yRWFjaCh0PT57aWYoIWVbdC5mZWF0dXJlTmFtZV0mJnQuZmVhdHVyZU5hbWUhPT1uLks3LnBhZ2VWaWV3RXZlbnQpcmV0dXJuO2lmKHRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNwYSlyZXR1cm47aWYoIXRoaXMucnVuU29mdE5hdk92ZXJTcGEmJnQuZmVhdHVyZU5hbWU9PT1uLks3LnNvZnROYXYpcmV0dXJuO2NvbnN0IHI9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugbi5LNy5hamF4OnJldHVybltuLks3LmpzZXJyb3JzXTtjYXNlIG4uSzcuc2Vzc2lvblRyYWNlOnJldHVybltuLks3LmFqYXgsbi5LNy5wYWdlVmlld0V2ZW50XTtjYXNlIG4uSzcuc2Vzc2lvblJlcGxheTpyZXR1cm5bbi5LNy5zZXNzaW9uVHJhY2VdO2Nhc2Ugbi5LNy5wYWdlVmlld1RpbWluZzpyZXR1cm5bbi5LNy5wYWdlVmlld0V2ZW50XTtkZWZhdWx0OnJldHVybltdfX0odC5mZWF0dXJlTmFtZSkuZmlsdGVyKGU9PiEoZSBpbiB0aGlzLmZlYXR1cmVzKSk7ci5sZW5ndGg+MCYmKDAsbC5SKSgzNix7dGFyZ2V0RmVhdHVyZTp0LmZlYXR1cmVOYW1lLG1pc3NpbmdEZXBlbmRlbmNpZXM6cn0pLHRoaXMuZmVhdHVyZXNbdC5mZWF0dXJlTmFtZV09bmV3IHQodGhpcyl9KX1jYXRjaChlKXsoMCxsLlIpKDIyLGUpO2Zvcihjb25zdCBlIGluIHRoaXMuZmVhdHVyZXMpdGhpcy5mZWF0dXJlc1tlXS5hYm9ydEhhbmRsZXI/LigpO2NvbnN0IHQ9KDAsTy5abSkoKTtkZWxldGUgdC5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/LmZlYXR1cmVzLGRlbGV0ZSB0aGlzLnNoYXJlZEFnZ3JlZ2F0b3I7cmV0dXJuIHQuZWUuZ2V0KHRoaXMuYWdlbnRJZGVudGlmaWVyKS5hYm9ydCgpLCExfX19KHtmZWF0dXJlczpbX2UsXyxqLFdlLFZlLGssSixSdCxTdCxaZSx5dF0sbG9hZGVyVHlwZToic3BhIn0pfSkoKX0pKCk7PC9zY3JpcHQ+Cgk8IS0tIDxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyI+IC0tPgoJPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiIC8+LS0+Cgk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+Cgk8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGxpYnJhcmllcyBvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAtIFNlYXJjaCwgVmlzaXQsIFJlc2VhcmNoLCBFeHBsb3JlIiAvPgoJPHRpdGxlPlJlc2VhcmNoIHN1cHBvcnQgfCBNSVQgTGlicmFyaWVzPC90aXRsZT4KCTxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iUmVzZWFyY2ggc3VwcG9ydCB8IE1JVCBMaWJyYXJpZXMiLz4KPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiIC8+CjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvaW1hZ2VzL21pdC1saWJyYXJpZXMtbG9nby1ibGFjay15ZWxsb3ctMTIwMC0xMjAwLnBuZyIvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6dHlwZSIgY29udGVudD0iaW1hZ2UvcG5nIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6d2lkdGgiIGNvbnRlbnQ9IjEyMDAiIC8+CjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTpoZWlnaHQiIGNvbnRlbnQ9IjEyMDAiIC8+CjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTphbHQiIGNvbnRlbnQ9Ik1JVCBMaWJyYXJpZXMgbG9nbyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJGaW5kIG91dCB3aGVyZSBhbmQgaG93IHRvIGdldCBoZWxwIGZvciB5b3VyIHJlc2VhcmNoIG9yIGNvdXJzZXdvcmsuIEV4cGVydCBoZWxwIE1ha2UgYW4gYXBwb2ludG1lbnQgZm9yIGEgY29uc3VsdCB3aXRoIGFuIGV4cGVydCBsaWJyYXJpYW4gUmVzZWFyY2ggZ3VpZGVzOiBzcGVjaWFsaXplZCBndWlkZXMgZm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0IE5vdCBzdXJlIHdoZXJlIHRvIGJlZ2luIG9yIHdobyB0byBjb250YWN0PyBDb21wbGV0ZSBvdXIgQXNrIHVzIGVtYWlsIGZvcm0uIFF1aWNrIGhlbHAgQ29ubmVjdCBmcm9tIG9uICZhbXA7IG9mZi1jYW1wdXMgRS1yZXNvdXJjZSB0cm91Ymxlc2hvb3RpbmcgR3VpZGVzIGZvciBzcGVjaWZpYyBjbGFzc2VzICZhbXA7IHByb2dyYW1zIFdyaXRpbmcgJmFtcDsgcHVibGlzaGluZyBoZWxwIENpdGluZyBzb3VyY2VzICZhbXA7IGF2b2lkaW5nIHBsYWdpYXJpc20gRGlzc2VydGF0aW9ucy90aGVzZXM6IHByZXBhcmUgJmFtcDsgc3VibWl0IHlvdXIgTUlUIHRoZXNpcywgb3IgYm9ycm93IG90aGVycyYjODIxNzvCoCBNSVQgdGhlc2lzIHNwZWNpZmljYXRpb25zIERTcGFjZUBNSVQ6IGRlcG9zaXQgeW91ciB3b3JrIHRvIE1JVCYjODIxNztzIHJlcG9zaXRvcnkgU2Nob2xhcmx5IENvbW11bmljYXRpb24gQXV0aG9yIGlkZW50aWZpZXJzOiBjb25uZWN0IHlvdXIgbmFtZSB3aXRoIFsmaGVsbGlwO10iIC8+CjxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcmVzZWFyY2gtc3VwcG9ydC8iPgoJPGxpbmsgcmVsPSJwcm9maWxlIiBocmVmPSJodHRwczovL2dtcGcub3JnL3hmbi8xMSIgLz4KCTxsaW5rIHJlbD0icGluZ2JhY2siIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AveG1scnBjLnBocCIgLz4KCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvZmF2aWNvbi5pY28iIHNpemVzPSIzMngzMiI+Cgk8bGluayByZWw9Imljb24iIGhyZWY9Imh0dHBzOi8vY2RuLmxpYnJhcmllcy5taXQuZWR1L2ZpbGVzL2JyYW5kaW5nL2Zhdmljb25zL2Zhdmljb24uc3ZnIiB0eXBlPSJpbWFnZS9zdmcreG1sIj4KCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvZmF2aWNvbnMvYXBwbGUtdG91Y2gtaWNvbi5wbmciPjwhLS0gMTgww5cxODAgLS0+Cgk8bGluayByZWw9Im1hbmlmZXN0IiBocmVmPSJodHRwczovL2Nkbi5saWJyYXJpZXMubWl0LmVkdS9maWxlcy9icmFuZGluZy9mYXZpY29ucy9tYW5pZmVzdC5qc29uIj4KCTxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UnIC8+Cgk8c3R5bGU+aW1nOmlzKFtzaXplcz0iYXV0byIgaV0sIFtzaXplc149ImF1dG8sIiBpXSkgeyBjb250YWluLWludHJpbnNpYy1zaXplOiAzMDAwcHggMTUwMHB4IH08L3N0eWxlPgoJPGxpbmsgcmVsPSdkbnMtcHJlZmV0Y2gnIGhyZWY9Jy8vbGlicmFyaWVzLm1pdC5lZHUnIC8+CjxsaW5rIHJlbD0nZG5zLXByZWZldGNoJyBocmVmPScvL21heGNkbi5ib290c3RyYXBjZG4uY29tJyAvPgo8bGluayByZWw9J2Rucy1wcmVmZXRjaCcgaHJlZj0nLy91c2UudHlwZWtpdC5uZXQnIC8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLyogPCFbQ0RBVEFbICovCndpbmRvdy5fd3BlbW9qaVNldHRpbmdzID0geyJiYXNlVXJsIjoiaHR0cHM6XC9cL3Mudy5vcmdcL2ltYWdlc1wvY29yZVwvZW1vamlcLzE2LjAuMVwvNzJ4NzJcLyIsImV4dCI6Ii5wbmciLCJzdmdVcmwiOiJodHRwczpcL1wvcy53Lm9yZ1wvaW1hZ2VzXC9jb3JlXC9lbW9qaVwvMTYuMC4xXC9zdmdcLyIsInN2Z0V4dCI6Ii5zdmciLCJzb3VyY2UiOnsiY29uY2F0ZW1vamkiOiJodHRwczpcL1wvbGlicmFyaWVzLm1pdC5lZHVcL3dwXC93cC1pbmNsdWRlc1wvanNcL3dwLWVtb2ppLXJlbGVhc2UubWluLmpzP3Zlcj02LjguMiJ9fTsKLyohIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCAqLwohZnVuY3Rpb24ocyxuKXt2YXIgbyxpLGU7ZnVuY3Rpb24gYyhlKXt0cnl7dmFyIHQ9e3N1cHBvcnRUZXN0czplLHRpbWVzdGFtcDoobmV3IERhdGUpLnZhbHVlT2YoKX07c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShvLEpTT04uc3RyaW5naWZ5KHQpKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSx0LG4pe2UuY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUuZmlsbFRleHQodCwwLDApO3ZhciB0PW5ldyBVaW50MzJBcnJheShlLmdldEltYWdlRGF0YSgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KS5kYXRhKSxhPShlLmNsZWFyUmVjdCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxlLmZpbGxUZXh0KG4sMCwwKSxuZXcgVWludDMyQXJyYXkoZS5nZXRJbWFnZURhdGEoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCkuZGF0YSkpO3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1hW3RdfSl9ZnVuY3Rpb24gdShlLHQpe2UuY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUuZmlsbFRleHQodCwwLDApO2Zvcih2YXIgbj1lLmdldEltYWdlRGF0YSgxNiwxNiwxLDEpLGE9MDthPG4uZGF0YS5sZW5ndGg7YSsrKWlmKDAhPT1uLmRhdGFbYV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZihlLHQsbixhKXtzd2l0Y2godCl7Y2FzZSJmbGFnIjpyZXR1cm4gbihlLCJcdWQ4M2NcdWRmZjNcdWZlMGZcdTIwMGRcdTI2YTdcdWZlMGYiLCJcdWQ4M2NcdWRmZjNcdWZlMGZcdTIwMGJcdTI2YTdcdWZlMGYiKT8hMTohbihlLCJcdWQ4M2NcdWRkZThcdWQ4M2NcdWRkZjYiLCJcdWQ4M2NcdWRkZThcdTIwMGJcdWQ4M2NcdWRkZjYiKSYmIW4oZSwiXHVkODNjXHVkZmY0XHVkYjQwXHVkYzY3XHVkYjQwXHVkYzYyXHVkYjQwXHVkYzY1XHVkYjQwXHVkYzZlXHVkYjQwXHVkYzY3XHVkYjQwXHVkYzdmIiwiXHVkODNjXHVkZmY0XHUyMDBiXHVkYjQwXHVkYzY3XHUyMDBiXHVkYjQwXHVkYzYyXHUyMDBiXHVkYjQwXHVkYzY1XHUyMDBiXHVkYjQwXHVkYzZlXHUyMDBiXHVkYjQwXHVkYzY3XHUyMDBiXHVkYjQwXHVkYzdmIik7Y2FzZSJlbW9qaSI6cmV0dXJuIWEoZSwiXHVkODNlXHVkZWRmIil9cmV0dXJuITF9ZnVuY3Rpb24gZyhlLHQsbixhKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU/bmV3IE9mZnNjcmVlbkNhbnZhcygzMDAsMTUwKTpzLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG89ci5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pLGk9KG8udGV4dEJhc2VsaW5lPSJ0b3AiLG8uZm9udD0iNjAwIDMycHggQXJpYWwiLHt9KTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lbZV09dChvLGUsbixhKX0pLGl9ZnVuY3Rpb24gdChlKXt2YXIgdD1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Quc3JjPWUsdC5kZWZlcj0hMCxzLmhlYWQuYXBwZW5kQ2hpbGQodCl9InVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiYobz0id3BFbW9qaVNldHRpbmdzU3VwcG9ydHMiLGk9WyJmbGFnIiwiZW1vamkiXSxuLnN1cHBvcnRzPXtldmVyeXRoaW5nOiEwLGV2ZXJ5dGhpbmdFeGNlcHRGbGFnOiEwfSxlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZSx7b25jZTohMH0pfSksbmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oKXt0cnl7dmFyIGU9SlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKG8pKTtpZigib2JqZWN0Ij09dHlwZW9mIGUmJiJudW1iZXIiPT10eXBlb2YgZS50aW1lc3RhbXAmJihuZXcgRGF0ZSkudmFsdWVPZigpPGUudGltZXN0YW1wKzYwNDgwMCYmIm9iamVjdCI9PXR5cGVvZiBlLnN1cHBvcnRUZXN0cylyZXR1cm4gZS5zdXBwb3J0VGVzdHN9Y2F0Y2goZSl7fXJldHVybiBudWxsfSgpO2lmKCFuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMmJiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMJiZVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2IpdHJ5e3ZhciBlPSJwb3N0TWVzc2FnZSgiK2cudG9TdHJpbmcoKSsiKCIrW0pTT04uc3RyaW5naWZ5KGkpLGYudG9TdHJpbmcoKSxwLnRvU3RyaW5nKCksdS50b1N0cmluZygpXS5qb2luKCIsIikrIikpOyIsYT1uZXcgQmxvYihbZV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxyPW5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChhKSx7bmFtZToid3BUZXN0RW1vamlTdXBwb3J0cyJ9KTtyZXR1cm4gdm9pZChyLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtjKG49ZS5kYXRhKSxyLnRlcm1pbmF0ZSgpLHQobil9KX1jYXRjaChlKXt9YyhuPWcoaSxmLHAsdSkpfXQobil9KS50aGVuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKW4uc3VwcG9ydHNbdF09ZVt0XSxuLnN1cHBvcnRzLmV2ZXJ5dGhpbmc9bi5zdXBwb3J0cy5ldmVyeXRoaW5nJiZuLnN1cHBvcnRzW3RdLCJmbGFnIiE9PXQmJihuLnN1cHBvcnRzLmV2ZXJ5dGhpbmdFeGNlcHRGbGFnPW4uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWcmJm4uc3VwcG9ydHNbdF0pO24uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWc9bi5zdXBwb3J0cy5ldmVyeXRoaW5nRXhjZXB0RmxhZyYmIW4uc3VwcG9ydHMuZmxhZyxuLkRPTVJlYWR5PSExLG4ucmVhZHlDYWxsYmFjaz1mdW5jdGlvbigpe24uRE9NUmVhZHk9ITB9fSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSkudGhlbihmdW5jdGlvbigpe3ZhciBlO24uc3VwcG9ydHMuZXZlcnl0aGluZ3x8KG4ucmVhZHlDYWxsYmFjaygpLChlPW4uc291cmNlfHx7fSkuY29uY2F0ZW1vamk/dChlLmNvbmNhdGVtb2ppKTplLndwZW1vamkmJmUudHdlbW9qaSYmKHQoZS50d2Vtb2ppKSx0KGUud3BlbW9qaSkpKX0pKX0oKHdpbmRvdyxkb2N1bWVudCksd2luZG93Ll93cGVtb2ppU2V0dGluZ3MpOwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzdHlsZSBpZD0nd3AtZW1vamktc3R5bGVzLWlubGluZS1jc3MnIHR5cGU9J3RleHQvY3NzJz4KCglpbWcud3Atc21pbGV5LCBpbWcuZW1vamkgewoJCWRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwoJCWJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwoJCWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKCQloZWlnaHQ6IDFlbSAhaW1wb3J0YW50OwoJCXdpZHRoOiAxZW0gIWltcG9ydGFudDsKCQltYXJnaW46IDAgMC4wN2VtICFpbXBvcnRhbnQ7CgkJdmVydGljYWwtYWxpZ246IC0wLjFlbSAhaW1wb3J0YW50OwoJCWJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKCQlwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Cgl9Cjwvc3R5bGU+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3dwLWJsb2NrLWxpYnJhcnktY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwL3dwLWluY2x1ZGVzL2Nzcy9kaXN0L2Jsb2NrLWxpYnJhcnkvc3R5bGUubWluLmNzcz92ZXI9Ni44LjInIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8c3R5bGUgaWQ9J2NsYXNzaWMtdGhlbWUtc3R5bGVzLWlubGluZS1jc3MnIHR5cGU9J3RleHQvY3NzJz4KLyohIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCAqLwoud3AtYmxvY2stYnV0dG9uX19saW5re2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzIzNzNjO2JvcmRlci1yYWRpdXM6OTk5OXB4O2JveC1zaGFkb3c6bm9uZTt0ZXh0LWRlY29yYXRpb246bm9uZTtwYWRkaW5nOmNhbGMoLjY2N2VtICsgMnB4KSBjYWxjKDEuMzMzZW0gKyAycHgpO2ZvbnQtc2l6ZToxLjEyNWVtfS53cC1ibG9jay1maWxlX19idXR0b257YmFja2dyb3VuZDojMzIzNzNjO2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Cjwvc3R5bGU+CjxzdHlsZSBpZD0nZ2xvYmFsLXN0eWxlcy1pbmxpbmUtY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+Cjpyb290ey0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS1zcXVhcmU6IDE7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTQtMzogNC8zOy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS0zLTQ6IDMvNDstLXdwLS1wcmVzZXQtLWFzcGVjdC1yYXRpby0tMy0yOiAzLzI7LS13cC0tcHJlc2V0LS1hc3BlY3QtcmF0aW8tLTItMzogMi8zOy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS0xNi05OiAxNi85Oy0td3AtLXByZXNldC0tYXNwZWN0LXJhdGlvLS05LTE2OiA5LzE2Oy0td3AtLXByZXNldC0tY29sb3ItLWJsYWNrOiAjMDAwMDAwOy0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXk6ICNhYmI4YzM7LS13cC0tcHJlc2V0LS1jb2xvci0td2hpdGU6ICNmZmZmZmY7LS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1waW5rOiAjZjc4ZGE3Oy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXJlZDogI2NmMmUyZTstLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1vcmFuZ2U6ICNmZjY5MDA7LS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtYW1iZXI6ICNmY2I5MDA7LS13cC0tcHJlc2V0LS1jb2xvci0tbGlnaHQtZ3JlZW4tY3lhbjogIzdiZGNiNTstLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1ncmVlbi1jeWFuOiAjMDBkMDg0Oy0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtY3lhbi1ibHVlOiAjOGVkMWZjOy0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWN5YW4tYmx1ZTogIzA2OTNlMzstLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1wdXJwbGU6ICM5YjUxZTA7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdml2aWQtY3lhbi1ibHVlLXRvLXZpdmlkLXB1cnBsZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDYsMTQ3LDIyNywxKSAwJSxyZ2IoMTU1LDgxLDIyNCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbGlnaHQtZ3JlZW4tY3lhbi10by12aXZpZC1ncmVlbi1jeWFuOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigxMjIsMjIwLDE4MCkgMCUscmdiKDAsMjA4LDEzMCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbHVtaW5vdXMtdml2aWQtYW1iZXItdG8tbHVtaW5vdXMtdml2aWQtb3JhbmdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYmEoMjUyLDE4NSwwLDEpIDAlLHJnYmEoMjU1LDEwNSwwLDEpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLXZpdmlkLW9yYW5nZS10by12aXZpZC1yZWQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgyNTUsMTA1LDAsMSkgMCUscmdiKDIwNyw0Niw0NikgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdmVyeS1saWdodC1ncmF5LXRvLWN5YW4tYmx1aXNoLWdyYXk6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDIzOCwyMzgsMjM4KSAwJSxyZ2IoMTY5LDE4NCwxOTUpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWNvb2wtdG8td2FybS1zcGVjdHJ1bTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoNzQsMjM0LDIyMCkgMCUscmdiKDE1MSwxMjAsMjA5KSAyMCUscmdiKDIwNyw0MiwxODYpIDQwJSxyZ2IoMjM4LDQ0LDEzMCkgNjAlLHJnYigyNTEsMTA1LDk4KSA4MCUscmdiKDI1NCwyNDgsNzYpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWJsdXNoLWxpZ2h0LXB1cnBsZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjU1LDIwNiwyMzYpIDAlLHJnYigxNTIsMTUwLDI0MCkgMTAwJSk7LS13cC0tcHJlc2V0LS1ncmFkaWVudC0tYmx1c2gtYm9yZGVhdXg6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDI1NCwyMDUsMTY1KSAwJSxyZ2IoMjU0LDQ1LDQ1KSA1MCUscmdiKDEwNywwLDYyKSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy1kdXNrOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTUsMjAzLDExMikgMCUscmdiKDE5OSw4MSwxOTIpIDUwJSxyZ2IoNjUsODgsMjA4KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1wYWxlLW9jZWFuOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTUsMjQ1LDIwMykgMCUscmdiKDE4MiwyMjcsMjEyKSA1MCUscmdiKDUxLDE2NywxODEpIDEwMCUpOy0td3AtLXByZXNldC0tZ3JhZGllbnQtLWVsZWN0cmljLWdyYXNzOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyMDIsMjQ4LDEyOCkgMCUscmdiKDExMywyMDYsMTI2KSAxMDAlKTstLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1taWRuaWdodDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMiwzLDEyOSkgMCUscmdiKDQwLDExNiwyNTIpIDEwMCUpOy0td3AtLXByZXNldC0tZm9udC1zaXplLS1zbWFsbDogMTNweDstLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbWVkaXVtOiAyMHB4Oy0td3AtLXByZXNldC0tZm9udC1zaXplLS1sYXJnZTogMzZweDstLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0teC1sYXJnZTogNDJweDstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTIwOiAwLjQ0cmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tMzA6IDAuNjdyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS00MDogMXJlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTUwOiAxLjVyZW07LS13cC0tcHJlc2V0LS1zcGFjaW5nLS02MDogMi4yNXJlbTstLXdwLS1wcmVzZXQtLXNwYWNpbmctLTcwOiAzLjM4cmVtOy0td3AtLXByZXNldC0tc3BhY2luZy0tODA6IDUuMDZyZW07LS13cC0tcHJlc2V0LS1zaGFkb3ctLW5hdHVyYWw6IDZweCA2cHggOXB4IHJnYmEoMCwgMCwgMCwgMC4yKTstLXdwLS1wcmVzZXQtLXNoYWRvdy0tZGVlcDogMTJweCAxMnB4IDUwcHggcmdiYSgwLCAwLCAwLCAwLjQpOy0td3AtLXByZXNldC0tc2hhZG93LS1zaGFycDogNnB4IDZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpOy0td3AtLXByZXNldC0tc2hhZG93LS1vdXRsaW5lZDogNnB4IDZweCAwcHggLTNweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpLCA2cHggNnB4IHJnYmEoMCwgMCwgMCwgMSk7LS13cC0tcHJlc2V0LS1zaGFkb3ctLWNyaXNwOiA2cHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDEpO306d2hlcmUoLmlzLWxheW91dC1mbGV4KXtnYXA6IDAuNWVtO306d2hlcmUoLmlzLWxheW91dC1ncmlkKXtnYXA6IDAuNWVtO31ib2R5IC5pcy1sYXlvdXQtZmxleHtkaXNwbGF5OiBmbGV4O30uaXMtbGF5b3V0LWZsZXh7ZmxleC13cmFwOiB3cmFwO2FsaWduLWl0ZW1zOiBjZW50ZXI7fS5pcy1sYXlvdXQtZmxleCA+IDppcygqLCBkaXYpe21hcmdpbjogMDt9Ym9keSAuaXMtbGF5b3V0LWdyaWR7ZGlzcGxheTogZ3JpZDt9LmlzLWxheW91dC1ncmlkID4gOmlzKCosIGRpdil7bWFyZ2luOiAwO306d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWZsZXgpe2dhcDogMmVtO306d2hlcmUoLndwLWJsb2NrLWNvbHVtbnMuaXMtbGF5b3V0LWdyaWQpe2dhcDogMmVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWZsZXgpe2dhcDogMS4yNWVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWdyaWQpe2dhcDogMS4yNWVtO30uaGFzLWJsYWNrLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tYmxhY2spICFpbXBvcnRhbnQ7fS5oYXMtY3lhbi1ibHVpc2gtZ3JheS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS13aGl0ZSkgIWltcG9ydGFudDt9Lmhhcy1wYWxlLXBpbmstY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLXBpbmspICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtcmVkLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLW9yYW5nZSkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy12aXZpZC1hbWJlci1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWx1bWlub3VzLXZpdmlkLWFtYmVyKSAhaW1wb3J0YW50O30uaGFzLWxpZ2h0LWdyZWVuLWN5YW4tY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tY29sb3J7Y29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtY3lhbi1ibHVlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1jeWFuLWJsdWUpICFpbXBvcnRhbnQ7fS5oYXMtdml2aWQtY3lhbi1ibHVlLWNvbG9ye2NvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1jb2xvcntjb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1ibGFjay1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1ibGFjaykgIWltcG9ydGFudDt9Lmhhcy1jeWFuLWJsdWlzaC1ncmF5LWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0td2hpdGUpICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1waW5rLWJhY2tncm91bmQtY29sb3J7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtcGluaykgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1yZWQtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1vcmFuZ2UpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtYW1iZXItYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtYW1iZXIpICFpbXBvcnRhbnQ7fS5oYXMtbGlnaHQtZ3JlZW4tY3lhbi1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtZ3JlZW4tY3lhbikgIWltcG9ydGFudDt9Lmhhcy1wYWxlLWN5YW4tYmx1ZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1wYWxlLWN5YW4tYmx1ZSkgIWltcG9ydGFudDt9Lmhhcy12aXZpZC1jeWFuLWJsdWUtYmFja2dyb3VuZC1jb2xvcntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1iYWNrZ3JvdW5kLWNvbG9ye2JhY2tncm91bmQtY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS12aXZpZC1wdXJwbGUpICFpbXBvcnRhbnQ7fS5oYXMtYmxhY2stYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWJsYWNrKSAhaW1wb3J0YW50O30uaGFzLWN5YW4tYmx1aXNoLWdyYXktYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLWN5YW4tYmx1aXNoLWdyYXkpICFpbXBvcnRhbnQ7fS5oYXMtd2hpdGUtYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXdoaXRlKSAhaW1wb3J0YW50O30uaGFzLXBhbGUtcGluay1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tcGFsZS1waW5rKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXJlZC1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tbHVtaW5vdXMtdml2aWQtb3JhbmdlKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLWFtYmVyLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1sdW1pbm91cy12aXZpZC1hbWJlcikgIWltcG9ydGFudDt9Lmhhcy1saWdodC1ncmVlbi1jeWFuLWJvcmRlci1jb2xvcntib3JkZXItY29sb3I6IHZhcigtLXdwLS1wcmVzZXQtLWNvbG9yLS1saWdodC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWdyZWVuLWN5YW4tYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXZpdmlkLWdyZWVuLWN5YW4pICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1jeWFuLWJsdWUtYm9yZGVyLWNvbG9ye2JvcmRlci1jb2xvcjogdmFyKC0td3AtLXByZXNldC0tY29sb3ItLXBhbGUtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWN5YW4tYmx1ZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtY3lhbi1ibHVlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLXB1cnBsZS1ib3JkZXItY29sb3J7Ym9yZGVyLWNvbG9yOiB2YXIoLS13cC0tcHJlc2V0LS1jb2xvci0tdml2aWQtcHVycGxlKSAhaW1wb3J0YW50O30uaGFzLXZpdmlkLWN5YW4tYmx1ZS10by12aXZpZC1wdXJwbGUtZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tdml2aWQtY3lhbi1ibHVlLXRvLXZpdmlkLXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1saWdodC1ncmVlbi1jeWFuLXRvLXZpdmlkLWdyZWVuLWN5YW4tZ3JhZGllbnQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS13cC0tcHJlc2V0LS1ncmFkaWVudC0tbGlnaHQtZ3JlZW4tY3lhbi10by12aXZpZC1ncmVlbi1jeWFuKSAhaW1wb3J0YW50O30uaGFzLWx1bWlub3VzLXZpdmlkLWFtYmVyLXRvLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy12aXZpZC1hbWJlci10by1sdW1pbm91cy12aXZpZC1vcmFuZ2UpICFpbXBvcnRhbnQ7fS5oYXMtbHVtaW5vdXMtdml2aWQtb3JhbmdlLXRvLXZpdmlkLXJlZC1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1sdW1pbm91cy12aXZpZC1vcmFuZ2UtdG8tdml2aWQtcmVkKSAhaW1wb3J0YW50O30uaGFzLXZlcnktbGlnaHQtZ3JheS10by1jeWFuLWJsdWlzaC1ncmF5LWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLXZlcnktbGlnaHQtZ3JheS10by1jeWFuLWJsdWlzaC1ncmF5KSAhaW1wb3J0YW50O30uaGFzLWNvb2wtdG8td2FybS1zcGVjdHJ1bS1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1jb29sLXRvLXdhcm0tc3BlY3RydW0pICFpbXBvcnRhbnQ7fS5oYXMtYmx1c2gtbGlnaHQtcHVycGxlLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWJsdXNoLWxpZ2h0LXB1cnBsZSkgIWltcG9ydGFudDt9Lmhhcy1ibHVzaC1ib3JkZWF1eC1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1ibHVzaC1ib3JkZWF1eCkgIWltcG9ydGFudDt9Lmhhcy1sdW1pbm91cy1kdXNrLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWx1bWlub3VzLWR1c2spICFpbXBvcnRhbnQ7fS5oYXMtcGFsZS1vY2Vhbi1ncmFkaWVudC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLXdwLS1wcmVzZXQtLWdyYWRpZW50LS1wYWxlLW9jZWFuKSAhaW1wb3J0YW50O30uaGFzLWVsZWN0cmljLWdyYXNzLWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLWVsZWN0cmljLWdyYXNzKSAhaW1wb3J0YW50O30uaGFzLW1pZG5pZ2h0LWdyYWRpZW50LWJhY2tncm91bmR7YmFja2dyb3VuZDogdmFyKC0td3AtLXByZXNldC0tZ3JhZGllbnQtLW1pZG5pZ2h0KSAhaW1wb3J0YW50O30uaGFzLXNtYWxsLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tc21hbGwpICFpbXBvcnRhbnQ7fS5oYXMtbWVkaXVtLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbWVkaXVtKSAhaW1wb3J0YW50O30uaGFzLWxhcmdlLWZvbnQtc2l6ZXtmb250LXNpemU6IHZhcigtLXdwLS1wcmVzZXQtLWZvbnQtc2l6ZS0tbGFyZ2UpICFpbXBvcnRhbnQ7fS5oYXMteC1sYXJnZS1mb250LXNpemV7Zm9udC1zaXplOiB2YXIoLS13cC0tcHJlc2V0LS1mb250LXNpemUtLXgtbGFyZ2UpICFpbXBvcnRhbnQ7fQo6d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWZsZXgpe2dhcDogMS4yNWVtO306d2hlcmUoLndwLWJsb2NrLXBvc3QtdGVtcGxhdGUuaXMtbGF5b3V0LWdyaWQpe2dhcDogMS4yNWVtO30KOndoZXJlKC53cC1ibG9jay1jb2x1bW5zLmlzLWxheW91dC1mbGV4KXtnYXA6IDJlbTt9OndoZXJlKC53cC1ibG9jay1jb2x1bW5zLmlzLWxheW91dC1ncmlkKXtnYXA6IDJlbTt9Cjpyb290IDp3aGVyZSgud3AtYmxvY2stcHVsbHF1b3RlKXtmb250LXNpemU6IDEuNWVtO2xpbmUtaGVpZ2h0OiAxLjY7fQo8L3N0eWxlPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdjb250YWN0LWZvcm0tNy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5jbHVkZXMvY3NzL3N0eWxlcy5jc3M/dmVyPTYuMScgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxzdHlsZSBpZD0nY29udGFjdC1mb3JtLTctaW5saW5lLWNzcycgdHlwZT0ndGV4dC9jc3MnPgoud3BjZjcgLndwY2Y3LXJlY2FwdGNoYSBpZnJhbWUge21hcmdpbi1ib3R0b206IDA7fS53cGNmNyAud3BjZjctcmVjYXB0Y2hhW2RhdGEtYWxpZ249ImNlbnRlciJdID4gZGl2IHttYXJnaW46IDAgYXV0bzt9LndwY2Y3IC53cGNmNy1yZWNhcHRjaGFbZGF0YS1hbGlnbj0icmlnaHQiXSA+IGRpdiB7bWFyZ2luOiAwIDAgMCBhdXRvO30KPC9zdHlsZT4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nc24tZm9udEF3ZXNvbWUtY3NzLWNzcycgaHJlZj0nLy9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC4yLjAvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzP3Zlcj0xLjEnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdzbi1hbmltYXRlLWNzcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvZHluYW1pYy1tZW51LW1hbmFnZXIvZHVvZ2Vlay9pbmMvYW5pbWF0ZS5jc3M/dmVyPTEuMScgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2RnLWdyaWQtY3NzLWNzcycgaHJlZj0naHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvcGx1Z2lucy9keW5hbWljLW1lbnUtbWFuYWdlci9kdW9nZWVrL2luYy9kZy1ncmlkLmNzcz92ZXI9MS4xJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncGFyZW50LXN0eWxlcy1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L3N0eWxlLmNzcz92ZXI9MC44JyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncGFyZW50LWdsb2JhbC1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2Nzcy9idWlsZC9nbG9iYWwuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8IS0tW2lmIGx0IElFIDldPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtaWUtY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9jc3MvaWUuY3NzP3Zlcj0yMDEyMTAxMCcgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdhbGwnIC8+CjwhW2VuZGlmXS0tPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdhZG9iZS1mb250cy1jc3MnIGhyZWY9Jy8vdXNlLnR5cGVraXQubmV0L2l4ZDJ2Z3EuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwYXJlbnQtZm9ybXMtY3NzJyBocmVmPSdodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9jc3MvYnVpbGQvZm9ybXMuY3NzP3Zlcj0wLjgnIHR5cGU9J3RleHQvY3NzJyBtZWRpYT0nYWxsJyAvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdjZjdjZi1zdHlsZS1jc3MnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY2Y3LWNvbmRpdGlvbmFsLWZpZWxkcy9zdHlsZS5jc3M/dmVyPTIuMi4zJyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvbGlicy9tb2Rlcm5penIubWluLmpzP3Zlcj0yLjguMyIgaWQ9Im1vZGVybml6ci1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2pxdWVyeS5taW4uanM/dmVyPTEuMTEuMS1sb2NhbCIgaWQ9ImpxdWVyeS1qcyI+PC9zY3JpcHQ+CjxsaW5rIHJlbD0iaHR0cHM6Ly9hcGkudy5vcmcvIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwLWpzb24vIiAvPjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSlNPTiIgdHlwZT0iYXBwbGljYXRpb24vanNvbiIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC1qc29uL3dwL3YyL3BhZ2VzLzE2MCIgLz48bGluayByZWw9IkVkaXRVUkkiIHR5cGU9ImFwcGxpY2F0aW9uL3JzZCt4bWwiIHRpdGxlPSJSU0QiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AveG1scnBjLnBocD9yc2QiIC8+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iV29yZFByZXNzIDYuOC4yIiAvPgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9yZXNlYXJjaC1zdXBwb3J0LyIgLz4KPGxpbmsgcmVsPSdzaG9ydGxpbmsnIGhyZWY9J2h0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvP3A9MTYwJyAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9Im9FbWJlZCAoSlNPTikiIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24rb2VtYmVkIiBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3dwLWpzb24vb2VtYmVkLzEuMC9lbWJlZD91cmw9aHR0cHMlM0ElMkYlMkZsaWJyYXJpZXMubWl0LmVkdSUyRnJlc2VhcmNoLXN1cHBvcnQlMkYiIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0ib0VtYmVkIChYTUwpIiB0eXBlPSJ0ZXh0L3htbCtvZW1iZWQiIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3AtanNvbi9vZW1iZWQvMS4wL2VtYmVkP3VybD1odHRwcyUzQSUyRiUyRmxpYnJhcmllcy5taXQuZWR1JTJGcmVzZWFyY2gtc3VwcG9ydCUyRiYjMDM4O2Zvcm1hdD14bWwiIC8+CgoJPCEtLSBNYXRvbW8gVGFnIE1hbmFnZXIgLS0+CjxzY3JpcHQ+CiAgdmFyIF9tdG0gPSB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOwogIF9tdG0ucHVzaCh7J210bS5zdGFydFRpbWUnOiAobmV3IERhdGUoKS5nZXRUaW1lKCkpLCAnZXZlbnQnOiAnbXRtLlN0YXJ0J30pOwogIChmdW5jdGlvbigpIHsKICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07CiAgICBnLmFzeW5jPXRydWU7IGcuc3JjPSdodHRwczovL21hdG9tby5saWJyYXJpZXMubWl0LmVkdS9qcy9jb250YWluZXJfb0ZXTVNiM2cuanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7CiAgfSkoKTsKPC9zY3JpcHQ+CjwhLS0gRW5kIE1hdG9tbyBUYWcgTWFuYWdlciAtLT4JCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9IndwLWN1c3RvbS1jc3MiPgoJCQkvKiBzcGVjaWFsIHRlbXBvcmFyeSBzdHlsaW5nIGZvciBicmFuZGVkIGFib3V0IHBhZ2UgKi8KYm9keS5wYWdlLWlkLTE0MCB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBjb2xvcjogIzAwMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY29udGVudCB7CiAgbWFyZ2luOiAwOwogIGZvbnQtZmFtaWx5OiAnTkhhYXNHcm90ZXNrVHh0JywgJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsKICBsaW5lLWhlaWdodDogMS4yOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5icmVhZGNydW1icy0tYmV0dGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1OyAKICBjb2xvcjogI2VlZTsKfQpib2R5LnBhZ2UtaWQtMTQwIC5icmVhZGNydW1icy0tYmV0dGVyIGEgewogICAgY29sb3I6ICNlZWU7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCB7IAogIGJhY2tncm91bmQ6ICNmZmYgdXJsKCcvaW1hZ2VzL25ldHdvcmstZ3JhcGhpYy9sb2dvMTAucG5nJykgbm8tcmVwZWF0IHJpZ2h0IHRvcDsKICBjb2xvcjogIzAwMDsKICBwYWRkaW5nLWxlZnQ6IDA7IAogIHBhZGRpbmctcmlnaHQ6IDA7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGF5b3V0LWJhbmQgewogIHBhZGRpbmc6IDIlIDE1cHggMSUgMTVweDsKfQoKYm9keS5wYWdlLWlkLTE0MCAudHRsIHsKICBmb250LWZhbWlseTogJ05IYWFzR3JvdGVza0Rpc3AnLCAnSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50OyAKCWZvbnQtd2VpZ2h0OiA2MDA7Cn0KYm9keS5wYWdlLWlkLTE0MCAubWFpbi1jb250ZW50IHAgewogIGxpbmUtaGVpZ2h0OiAxLjE7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLm1haW4tY29udGVudCAubGlzdC11bmJ1bGxldGVkIGxpIHsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5tYWluLWNvbnRlbnQgLmN0YS1saW5rIHsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGVhc2UtaW4tb3V0IC4zczsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcGFkZGluZzogMTBweDsgIAogIGNvbG9yOiAjMDAwOwogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LXdlaWdodDogNjAwOwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5tYWluLWNvbnRlbnQgLmN0YS1saW5rOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMwMGNjOwogIGNvbG9yOiAjZmZmOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWludHJvIHsKICBwYWRkaW5nOiA0JSAxNXB4OwogIGNvbG9yOiAjMDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWludHJvIC50dGwgewogIGZvbnQtc2l6ZTogMzZweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAuOTI7CiAgbWFyZ2luLWJvdHRvbTogLjNlbTsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1pbnRybyAucHVsbCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtd2UtYXJlIHsKICBtYXJnaW4tdG9wOiAxcmVtOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkIHsgCiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBlYXNlLWluLW91dCAuM3M7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBjb2xvcjogIzAwMDsKICBtYXJnaW46IDE1cHg7CiAgcGFkZGluZy10b3A6IDVweDsKICBsaW5lLWhlaWdodDogMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAuY2FyZDpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBGRjsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIGNvbG9yOiAjZmZmOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkOmhvdmVyIGEgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtaW1hZ2UgewogIHdpZHRoOiAxMDAlOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmNhcmQgLmMtY29udGVudCB7CiAgcGFkZGluZzogMTBweCAzJTsKICBmb250LXNpemU6IDE0cHg7Cn0gCgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkIC5jLXR0bDEgewogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAuOTI7CiAgbWFyZ2luOiAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5jYXJkIC5jLXR0bDIgewogIG1hcmdpbi10b3A6IC4yZW07CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjI7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoKYm9keS5wYWdlLWlkLTE0MCAud3JhcC1mb2wgewogIHBhZGRpbmc6IDIlIDE1cHggMyUgMTVweDsKICBjb2xvcjogIzAwMDsKICBmb250LXNpemU6IDE0cHg7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtZm9sIC50dGwgewogIGZvbnQtc2l6ZTogMzZweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAuOTI7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLndyYXAtZm9sIC52aXNpb24taXRlbSBzdHJvbmcgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMWVtIDAgLjJlbSAwOwogIGZvbnQtc2l6ZTogMjBweDsKICBsaW5lLWhlaWdodDogLjkyOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWZvbCAuY3RhLWxpbmsgewogIG1hcmdpbi10b3A6IC41ZW07Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3Qtc29jaWFsIHsKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKYm9keS5wYWdlLWlkLTE0MCAubGlzdC1zb2NpYWwgYSB7CiAgZmxleDogMSAxIGF1dG87CiAgcGFkZGluZzogMjBweDsgIAogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAyOHB4OwogIGNvbG9yOiAjMjM0OyAgCiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5saXN0LXNvY2lhbCBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBDODAwOwogIGNvbG9yOiAjMDAwOwp9Cgpib2R5LnBhZ2UtaWQtMTQwIC5saXN0LXBpcGUgewogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpib2R5LnBhZ2UtaWQtMTQwIC5saXN0LXBpcGUgbGkgewogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICAKICBtYXJnaW46IDA7ICAKICBwYWRkaW5nLXJpZ2h0OiAxMHB4Owp9CmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSBsaTphZnRlciAgewogIGNvbnRlbnQ6ICJ8IjsKICBwYWRkaW5nLWxlZnQ6IDEwcHg7Cn0KCmJvZHkucGFnZS1pZC0xNDAgLmxpc3QtcGlwZSBsaTpsYXN0LWNoaWxkOmFmdGVyICB7CmNvbnRlbnQ6ICIiOwp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7Cgp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MHB4KSB7CgogIGJvZHkucGFnZS1pZC0xNDAgLndyYXAtY2FzZS1zdHVkaWVzLCAKICBib2R5LnBhZ2UtaWQtMTQwIC53cmFwLWxpbmtibG9ja3MgewogICAgZGlzcGxheTogZmxleDsKICB9IAogICAgCiAgYm9keS5wYWdlLWlkLTE0MCAuY2FyZCB7CiAgICBmbGV4OiAxIDEgYXV0bzsgCiAgICB3aWR0aDogMzAlOyAKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgbWFyZ2luOiAxNXB4IDAgMTVweCAxNXB4OyAgICAKICB9CgogIGJvZHkucGFnZS1pZC0xNDAgLmNhcmQ6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgfQp9CgoKLyogQ1JFT1MgcGFnZSBzdHlsZXMgKi8KYm9keS5wYWdlLWlkLTI3OTQ1IC50aXRsZS1wYWdlLCAKYm9keS5wYWdlLWlkLTI3OTQ1IGgyLnN1YnRpdGxlIHsKCSAgZm9udC1mYW1pbHk6ICdOSGFhc0dyb3Rlc2tUeHQnLCAnSGVsdmV0aWNhIE5ldWUnLCAnS2h1bGEnLCAnSGVsdmV0aWNhJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50OwoKfQpib2R5LnBhZ2UtaWQtMjc5NDUgLnRpdGxlLXBhZ2UgaDEgewoJZm9udC1zaXplOiAxMTBweDsKCWZvbnQtd2VpZ2h0OiA2MDA7CglsaW5lLWhlaWdodDogLjg7CgltYXJnaW4tdG9wOiAuMmVtOwp9Cgpib2R5LnBhZ2UtaWQtMjc5NDUgaDIuc3VidGl0bGUgewoJZm9udC1zaXplOiAyNHB4OwoJZm9udC13ZWlnaHQ6IDYwMDsKCW1hcmdpbi1ib3R0b206IC44ZW07Cn0KLyogd2lkZ2V0IHV0aWxpdHkgY2xhc3NlcyAqLwouc2lkZWJhciAubm8tdG9wLWJvcmRlciB7Cglib3JkZXItdG9wOiBub25lOwp9Cgouc2lkZWJhciAuaGlkZS10aXRsZSAud2lkZ2V0LXRpdGxlIHsgCglkaXNwbGF5OiBub25lOwp9Cgouc2lkZWJhciAuY2FsbG91dC53aWRnZXQgewoJYmFja2dyb3VuZDogI2U0ZTRlNCA7Cglib3JkZXItdG9wOiAycHggc29saWQgI2M2MyA7CglwYWRkaW5nLWxlZnQ6IDIwcHggOwoJcGFkZGluZy1yaWdodDogMjBweCA7CgkJcGFkZGluZy10b3A6IDE1cHggOwoJCXBhZGRpbmctYm90dG9tOiAxNXB4IDsKCQltYXJnaW4tYm90dG9tOiAyMHB4Owp9CQk8L3N0eWxlPgoJCQk8c2NyaXB0PgoJCXRvZGF5RGF0ZT0iIjsKCTwvc2NyaXB0Pgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0id3Atc2luZ3VsYXIgcGFnZS10ZW1wbGF0ZSBwYWdlLXRlbXBsYXRlLXRlbXBsYXRlcyBwYWdlLXRlbXBsYXRlLXBhZ2UgcGFnZS10ZW1wbGF0ZS10ZW1wbGF0ZXNwYWdlLXBocCBwYWdlIHBhZ2UtaWQtMTYwIHBhZ2UtcGFyZW50IHdwLXRoZW1lLW1pdGxpYi1wYXJlbnQgcGFnZS1yZXNlYXJjaC1zdXBwb3J0IHNpbmdsZS1hdXRob3IiPgoJPGRpdiBpZD0ic2tpcCI+PGEgaHJlZj0iI2NvbnRlbnQiPlNraXAgdG8gTWFpbiBDb250ZW50PC9hPjwvZGl2PgoJPGRpdiBjbGFzcz0id3JhcC1wYWdlIj4KCQk8aGVhZGVyIGNsYXNzPSJoZWFkZXItbWFpbiBmbGV4LWNvbnRhaW5lciBmbGV4LWVuZCI+CgkJCQkJCQk8bmF2PgoJPGJ1dHRvbiBjbGFzcz0ibWVudS0tdG9nZ2xlIj48IS0tIE1vYmlsZSBIYW1idXJnZXIgaWNvbiAtLT4KCQk8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxOC45MDlweCIgaGVpZ2h0PSIxMy4wOTFweCIgdmlld0JveD0iMi4xODIgNi41NDUgMTguOTA5IDEzLjA5MSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAyLjE4MiA2LjU0NSAxOC45MDkgMTMuMDkxIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMi45MDksNi41NDVoMTcuNDU0YzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTZjMC4xNDUsMC4xNDQsMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFzLTAuMDcxLDAuMzY3LTAuMjE2LDAuNTExCgkJYy0wLjE0NSwwLjE0NC0wLjMxNCwwLjIxNi0wLjUxMiwwLjIxNkgyLjkwOWMtMC4xOTcsMC0wLjM2Ny0wLjA3Mi0wLjUxMS0wLjIxNkMyLjI1NCw3LjYzOSwyLjE4Miw3LjQ2OSwyLjE4Miw3LjI3MgoJCXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMUMyLjU0Miw2LjYxNywyLjcxMiw2LjU0NSwyLjkwOSw2LjU0NXogTTIwLjM2MywxMy44MThIMi45MDljLTAuMTk3LDAtMC4zNjctMC4wNzItMC41MTEtMC4yMTYKCQlzLTAuMjE2LTAuMzE0LTAuMjE2LTAuNTExYzAtMC4xOTYsMC4wNzItMC4zNjcsMC4yMTYtMC41MTFzMC4zMTQtMC4yMTYsMC41MTEtMC4yMTZoMTcuNDU0YzAuMTk3LDAsMC4zNjcsMC4wNzIsMC41MTIsMC4yMTYKCQlzMC4yMTYsMC4zMTQsMC4yMTYsMC41MTFjMCwwLjE5Ny0wLjA3MSwwLjM2Ny0wLjIxNiwwLjUxMVMyMC41NjEsMTMuODE4LDIwLjM2MywxMy44MTh6IE0yMC4zNjMsMTkuNjM2SDIuOTA5CgkJYy0wLjE5NywwLTAuMzY3LTAuMDcxLTAuNTExLTAuMjE2cy0wLjIxNi0wLjMxNC0wLjIxNi0wLjUxMXMwLjA3Mi0wLjM2NywwLjIxNi0wLjUxMWMwLjE0NC0wLjE0NSwwLjMxNC0wLjIxNywwLjUxMS0wLjIxN2gxNy40NTQKCQljMC4xOTcsMCwwLjM2NywwLjA3MiwwLjUxMiwwLjIxN2MwLjE0NSwwLjE0NCwwLjIxNiwwLjMxNCwwLjIxNiwwLjUxMXMtMC4wNzEsMC4zNjYtMC4yMTYsMC41MTFTMjAuNTYxLDE5LjYzNiwyMC4zNjMsMTkuNjM2eiIvPgoJCTwvc3ZnPgoJPC9idXR0b24+PCEtLSBlbmQgaGFtYnVyZ2VyIGljb24gLS0+CjwvbmF2PgoKPCEtLSBNZW51IHNob3duIG9uIG1vYmlsZSBzY3JlZW5zLCB3aGVuIHRoZSBoYW1idXJnZXIgaWNvbiBpcyB0YXBwZWQuIC0tPgo8bmF2IGlkPSJuYXYtbW9iaWxlIiBjbGFzcz0ibmF2LW1haW4gaGlkZGVuLW5vbi1tb2JpbGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iL3NlYXJjaCIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPlNlYXJjaDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvaG91cnMiIGNsYXNzPSJuby11bmRlcmxpbmUgbW9iaWxlLW5hdi1saW5rIGhpZGUtbW9iaWxlLW5hdi1saW5rIj5Ib3VycyAmIGxvY2F0aW9uczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvYm9ycm93IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1vYmlsZS1uYXYtbGluayBoaWRlLW1vYmlsZS1uYXYtbGluayI+Qm9ycm93ICYgcmVxdWVzdDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIvcmVzZWFyY2gtc3VwcG9ydCIgY2xhc3M9Im5vLXVuZGVybGluZSBtb2JpbGUtbmF2LWxpbmsgaGlkZS1tb2JpbGUtbmF2LWxpbmsiPlJlc2VhcmNoIHN1cHBvcnQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iL2Fib3V0IiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1vYmlsZS1uYXYtbGluayBoaWRlLW1vYmlsZS1uYXYtbGluayI+QWJvdXQ8L2E+PC9saT4KCTwvdWw+CjwvbmF2PgoJCQkJCQkKPGgxIGNsYXNzPSJuYW1lLXNpdGUgZ3JvdXAgbmF2LWxvZ28iPgoJPGEgaHJlZj0iLyIgY2xhc3M9ImxvZ28tbWl0LWxpYiI+CgkJPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjUgLTMgMjEwIDk1Ij48dGl0bGU+TUlUIExpYnJhcmllcyBsb2dvPC90aXRsZT48cGF0aCBkPSJNOC4xMiw5SDIwbDQuMzUsMTUuNjVjLjE3LjU3LjM2LDEuMzEuNTgsMi4yMnMuNDQsMS44MS42NywyLjY4LjUzLDIuMTIuOCwzLjI1aC4xYy4yMy0xLjEzLjQ4LTIuMjIuNzUtMy4yNS4yLS44Ny40Mi0xLjc2LjY1LTIuNjdzLjQzLTEuNjUuNi0yLjIyTDMyLjkyLDloMTJWNDQuNzVoLTguMVYyMi42NmMwLS45MywwLTEuOTUuMS0zLjA1aC0uMWMtLjI3LDEtLjUsMi0uNywyLjg1cy0uMzgsMS42MS0uNTMsMi4yMmwtLjQyLDEuNTgtNS4xLDE4LjQ5aC03LjNMMTcuNjcsMjYuM2MtLjEtLjMzLS4yNS0uODctLjQ1LTEuNnMtLjM4LTEuNDgtLjU1LTIuMjUtLjQyLTEuODItLjY3LTIuODVoLS4xdjNjMCwuOCwwLDEuNi4wOCwyLjRhOC41Myw4LjUzLDAsMCwxLDAsMS43NXYxOEg4VjlabTQwLDBINTdWNDQuNzVINDguMTJabTIyLjEsNy40NUg1OS44MlY5SDg5LjU3djcuNDVINzkuMDd2MjguM0g3MC4yMlpNOC4xMiw1MEgxN1Y3OC4yNUgzMy42NHY3LjVIOC4xMlptMjguNywwSDQ1djYuNkgzNi44MlptMCwxMC4xNUg0NXYyNS42SDM2LjgyWm0yNywyNi40YTkuODIsOS44MiwwLDAsMS00LjU1LTEsNy45LDcuOSwwLDAsMS0zLjItM0g1NnYzLjJINDguMlY1MGg4LjE1VjYzaC4xNWE5LjQ1LDkuNDUsMCwwLDEsMi45LTIuNTUsOC42Miw4LjYyLDAsMCwxLDQuMzctMSw5Ljg2LDkuODYsMCwwLDEsNC41MywxLDEwLDEwLDAsMCwxLDMuNDUsMi44NUExMy41MSwxMy41MSwwLDAsMSw3NCw2Ny42YTE3Ljg5LDE3Ljg5LDAsMCwxLC43LDUuNCwxOS40NSwxOS40NSwwLDAsMS0uNzgsNS43MkExMi41MywxMi41MywwLDAsMSw3MS43Miw4M2E5LjQ4LDkuNDgsMCwwLDEtMy40NSwyLjY3QTEwLjYzLDEwLjYzLDAsMCwxLDYzLjgyLDg2LjU1Wm0tMi4zLTYuNDVhNC4xNCw0LjE0LDAsMCwwLDMuNjctMS45Miw5LjQ1LDkuNDUsMCwwLDAsMS4yOC01LjI3LDkuNzQsOS43NCwwLDAsMC0xLjI4LTUuMyw0LjIsNC4yLDAsMCwwLTMuNzctMiw0LjQzLDQuNDMsMCwwLDAtNCwyLjFBOS43LDkuNywwLDAsMCw1Ni4xMiw3M2E4LjQ5LDguNDksMCwwLDAsMS40NSw1LjE3LDQuNjksNC42OSwwLDAsMCw0LDJabTE1LjExLTIwaDcuOHY0aC4xNWE5LjU2LDkuNTYsMCwwLDEsMy0zLjM1LDcuMjksNy4yOSwwLDAsMSw0LTEsNC41Nyw0LjU3LDAsMCwxLDEuNi4ydjdIOTNhNy4zNCw3LjM0LDAsMCwwLTYsMS4yN3EtMi4xNiwxLjc4LTIuMTYsNnYxMS41SDc2LjYzWm0yNiwyNi4zYTEyLjEsMTIuMSwwLDAsMS0zLjUzLS41LDcuNTUsNy41NSwwLDAsMS0yLjc3LTEuNUE3LDcsMCwwLDEsOTQuNDgsODJhOC4wOSw4LjA5LDAsMCwxLS42Ni0zLjQsNy4yOSw3LjI5LDAsMCwxLC43OC0zLjUyLDYuNzQsNi43NCwwLDAsMSwyLjEyLTIuMzUsMTAuNzksMTAuNzksMCwwLDEsMy4xLTEuNDMsMjcsMjcsMCwwLDEsMy43Ny0uNzUsMjQuMzUsMjQuMzUsMCwwLDAsNS0xQTEuOTMsMS45MywwLDAsMCwxMTAsNjcuN2EyLjU2LDIuNTYsMCwwLDAtLjgzLTIsMy45MSwzLjkxLDAsMCwwLTIuNjctLjcsNC40MSw0LjQxLDAsMCwwLTMsLjg1LDMuNjYsMy42NiwwLDAsMC0xLjIsMi40NUg5NC44YTguNTIsOC41MiwwLDAsMSwuOC0zLjQsOC4xNCw4LjE0LDAsMCwxLDIuMTctMi44LDEwLjY1LDEwLjY1LDAsMCwxLDMuNTgtMS45LDE2LjI5LDE2LjI5LDAsMCwxLDUtLjcsMTkuNzIsMTkuNzIsMCwwLDEsNC45LjUyLDkuNyw5LjcsMCwwLDEsMy40LDEuNTgsNy4zMSw3LjMxLDAsMCwxLDIuNDUsMywxMC41LDEwLjUsMCwwLDEsLjgsNC4yNXYxMi45YTEzLjA4LDEzLjA4LDAsMCwwLC4xNywyLjQyLDEuOCwxLjgsMCwwLDAsLjczLDEuMjN2LjM1aC03LjlhMy41MywzLjUzLDAsMCwxLS41LTEuMTIsMTQuNTYsMTQuNTYsMCwwLDEtLjM1LTEuNzJoMGE4LjQsOC40LDAsMCwxLTIuNzMsMi41NCwxMCwxMCwwLDAsMS00LjY4LDFabTIuNi01LjJhNS40Niw1LjQ2LDAsMCwwLDMuNjgtMS4yLDQuMjcsNC4yNywwLDAsMCwxLjQyLTMuMzV2LTNhMTEuNSwxMS41LDAsMCwxLTEuODcuNzNjLS43Mi4yMi0xLjUuNDMtMi4zNC42MmExMC4zNiwxMC4zNiwwLDAsMC0zLjQsMS4yNywyLjQ4LDIuNDgsMCwwLDAtMSwyLjE3LDIuNDMsMi40MywwLDAsMCwxLDIuMiw0LjUzLDQuNTMsMCwwLDAsMi41LjU1aDBabTE1Ljg3LTIxaDcuNzd2NEgxMjlhOS41Niw5LjU2LDAsMCwxLDMtMy4zNSw3LjI5LDcuMjksMCwwLDEsNC0xLDQuNTcsNC41NywwLDAsMSwxLjYuMnY3aC0uMmE3LjM0LDcuMzQsMCwwLDAtNiwxLjI3Yy0xLjQ5LDEuMjItMi4yNCwzLjIyLTIuMjMsNlY4NS43NUgxMjFWNjAuMTVaTTE0MCw1MC4xaDguMTN2Ni42SDE0MFptMCwxMC4xNWg4LjEzdjI1LjVIMTQwWk0xNjQsODYuNmExNSwxNSwwLDAsMS01LjctMSwxMi4wNywxMi4wNywwLDAsMS00LjMtMi44NSwxMi44NCwxMi44NCwwLDAsMS0yLjctNC4zMywxNS4wNywxNS4wNywwLDAsMS0xLTUuNCwxNC43NCwxNC43NCwwLDAsMSwxLTUuMzMsMTIuNzIsMTIuNzIsMCwwLDEsMi43LTQuMywxMi41OCwxMi41OCwwLDAsMSw0LjEzLTIuOTQsMTQuNjIsMTQuNjIsMCwwLDEsMTAuMjgtLjE3LDEyLjI5LDEyLjI5LDAsMCwxLDMuODMsMi4zNUExMi43LDEyLjcsMCwwLDEsMTc1LjY1LDY4YTIwLjgzLDIwLjgzLDAsMCwxLDEuMDgsNy4xM0gxNTguMzJhNy41Myw3LjUzLDAsMCwwLDEuOCw0LjEsNS4xNCw1LjE0LDAsMCwwLDQsMS41LDQuODQsNC44NCwwLDAsMCwyLjY1LS42OCw0LjI4LDQuMjgsMCwwLDAsMS42LTEuODdoOGE5LjQ3LDkuNDcsMCwwLDEtMS41LDMuMzMsMTAuODUsMTAuODUsMCwwLDEtMi44LDIuNzNBMTIuMDYsMTIuMDYsMCwwLDEsMTY4LjQ5LDg2YTE1LjMxLDE1LjMxLDAsMCwxLTQuNTIuNVptNC41LTE2LjNhNiw2LDAsMCwwLTEuNS0zLjY1LDQuMzcsNC4zNywwLDAsMC0zLjMtMS4zNSw0LjY0LDQuNjQsMCwwLDAtMy42LDEuMzUsNyw3LDAsMCwwLTEuNjUsMy42NVptMjEuOSwxNi4zNXEtNS42NiwwLTktMi40MmE4LjM0LDguMzQsMCwwLDEtMy41Mi02Ljc4aDcuN0E0LjE1LDQuMTUsMCwwLDAsMTg3LDgwLjNhNS4wNiw1LjA2LDAsMCwwLDMuMjUsMSw1LjYxLDUuNjEsMCwwLDAsMi45Mi0uNjUsMi4wOCwyLjA4LDAsMCwwLDEuMDgtMS45LDEuODIsMS44MiwwLDAsMC0uNTUtMS4zNyw0LjA4LDQuMDgsMCwwLDAtMS40NS0uODUsMTEuNDYsMTEuNDYsMCwwLDAtMi4wOC0uNWMtLjc4LS4xMS0xLjU5LS4yNS0yLjQyLS40MnEtMS42NS0uMy0zLjMtLjcyYTEwLDEwLDAsMCwxLTMtMS4yOCw2LjQxLDYuNDEsMCwwLDEtMi4xMi0yLjI3LDcuNDcsNy40NywwLDAsMS0uOC0zLjY4LDcuMjEsNy4yMSwwLDAsMSwuODctMy41NSw3LjYxLDcuNjEsMCwwLDEsMi4zNS0yLjY2LDExLjE1LDExLjE1LDAsMCwxLDMuNTMtMS41NSwxNy4xOCwxNy4xOCwwLDAsMSw0LjI4LS41MmMzLjYzLDAsNi40Mi43Myw4LjM1LDIuMmE4LDgsMCwwLDEsMy4yLDZoLTcuNWEzLDMsMCwwLDAtMS4zMy0yLjM3LDUuNDgsNS40OCwwLDAsMC0yLjc4LS42Miw1LDUsMCwwLDAtMi41Mi41OEExLjksMS45LDAsMCwwLDE4Niw2N2ExLjM0LDEuMzQsMCwwLDAsLjUsMS4xLDQuMjcsNC4yNywwLDAsMCwxLjM1LjY3LDEzLjU1LDEzLjU1LDAsMCwwLDIsLjQ4bDIuMzMuNGMxLjEzLjIsMi4yNy40NCwzLjQyLjczYTEwLjUsMTAuNSwwLDAsMSwzLjE3LDEuMzIsNyw3LDAsMCwxLDIuMywyLjQyLDcuODQsNy44NCwwLDAsMSwuOSw0LDcuMzUsNy4zNSwwLDAsMS0zLjMyLDYuMzgsMTEuODQsMTEuODQsMCwwLDEtMy43LDEuNiwxOC43NSwxOC43NSwwLDAsMS00LjY2LjVaIiBzdHlsZT0iZmlsbDojZmZmOyIgLz48L3N2Zz4KCQk8c3BhbiBjbGFzcz0ic3IiPk1JVCBMaWJyYXJpZXM8L3NwYW4+Cgk8L2E+PCEtLSBFbmQgTUlUIExpYnJhcmllcyBMb2dvIC0tPgo8L2gxPjwhLS0gRW5kIEgxLm5hbWUtc2l0ZSAtLT4KCQkJCQkJCQo8IS0tIE1lbnUgc2hvd24gb24gbm9uLW1vYmlsZSBzY3JlZW5zIC0tPgo8bmF2IGNsYXNzPSJuYXYtbWFpbiBoaWRkZW4tbW9iaWxlIiBhcmlhLWxhYmVsPSJQcmltYXJ5Ij4KCTx1bCBjbGFzcz0ibmF2LW1haW4tbGlzdCBmbGV4LWNvbnRhaW5lciI+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBzZWFyY2gtbGluayBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+U2VhcmNoPC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtc2VhcmNobWVudS10aXRsZSIgaWQ9Im1haW4tbmF2LXNlYXJjaG1lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5TdGFydCBoZXJlPC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvc2VhcmNoIj5TZWFyY2ggdG9vbHMgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3NlYXJjaC1jb2xsZWN0aW9ucyI+U2VhcmNoIE91ciBDb2xsZWN0aW9ucyA8c3BhbiBjbGFzcz0iYWJvdXQiPkJvb2tzLCBhcnRpY2xlcywgYW5kIG1vcmU8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvd29ybGRjYXQiPldvcmxkQ2F0PHNwYW4gY2xhc3M9ImFib3V0Ij5Cb29rcyAmYW1wOyBtb3JlIHdvcmxkd2lkZTwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGliZ3VpZGVzLm1pdC5lZHUvYXoucGhwIj5EYXRhYmFzZXMgQS1aPHNwYW4gY2xhc3M9ImFib3V0Ij5KU1RPUiwgUHViTWVkLCBXZWIgb2YgU2NpZW5jZSwgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9zZWFyY2gtcmVzZXJ2ZXMiPkNvdXJzZSByZXNlcnZlczwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+QWxzbyB0cnk8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9nb29nbGUtc2Nob2xhci10aXBzIj5Hb29nbGUgU2Nob2xhciBmb3IgTUlUIDxzcGFuIGNsYXNzPSJhYm91dCI+Q2hhbmdlIHNldHRpbmdzIHRvIGdldCBiZXR0ZXIgYWNjZXNzPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2RzcGFjZSI+RFNwYWNlQE1JVCA8c3BhbiBjbGFzcz0iYWJvdXQiPk1JVCByZXNlYXJjaDwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kb21lIj5Eb21lIDxzcGFuIGNsYXNzPSJhYm91dCI+TUlULWRpZ2l0aXplZCBpbWFnZXMsIG1hcHMsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2l0ZS1zZWFyY2giPlNpdGUgc2VhcmNoPC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtaG91cnNtZW51LXRpdGxlIiBocmVmPSIjIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgbWVudS1jb250cm9sIj5Ib3VycyAmYW1wOyBsb2NhdGlvbnM8L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ob3Vyc21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1ob3Vyc21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgZmxleC1jb250YWluZXIgZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5Mb2NhdGlvbnM8L2gzPgoJCQkJCTx1bCBjbGFzcz0ibGlzdC11bmJ1bGxldGVkIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9ob3VycyI+SG91cnMgYW5kIGxvY2F0aW9ucyBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvYmFya2VyIj5CYXJrZXIgTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2Rld2V5Ij5EZXdleSBMaWJyYXJ5PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvaGF5ZGVuIj5IYXlkZW4gTGlicmFyeTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3JvdGNoIj5Sb3RjaCBMaWJyYXJ5PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZGlzdGluY3RpdmUtY29sbGVjdGlvbnMiPkRpc3RpbmN0aXZlIENvbGxlY3Rpb25zPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvbXVzaWMiPkxld2lzIE11c2ljIExpYnJhcnk8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9sc2EiPkxpYnJhcnkgU3RvcmFnZSBBbm5leDwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+VXNpbmcgdGhlIExpYnJhcmllczwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2xvY2F0aW9ucyI+TWFwIG9mIGxvY2F0aW9uczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3N0dWR5Ij5TdHVkeSBzcGFjZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kaXNhYmlsaXRpZXMiPlBlcnNvbnMgd2l0aCBkaXNhYmlsaXRpZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9jb3B5aW5nIj5TY2FuICZhbXA7IHByaW50PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZXhoaWJpdHMiPkV4aGliaXRzICZhbXA7IGdhbGxlcmllczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Zpc2l0b3JzIj5WaXNpdG9yczwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3VzZS1wb2xpY2llcyI+TGlicmFyeSB1c2UgcG9saWN5PC9hPjwvbGk+CgkJCQkJPC91bD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtYm9ycm93bWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1ib3Jyb3dtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYm9ycm93bWVudSIgY2xhc3M9ImxpbmtzLXN1YiBmbGV4LWNvbnRhaW5lciBncm91cCI+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMSBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlJlbmV3LCByZXF1ZXN0LCBzdWdnZXN0PC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvYm9ycm93Ij5Cb3Jyb3cgJmFtcDsgcmVxdWVzdCBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvYWNjb3VudHMiPkFjY291bnRzIG92ZXJ2aWV3IDxzcGFuIGNsYXNzPSJhYm91dCI+WW91ciBBY2NvdW50LCBJTExpYWQsIEFlb24sIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2VhcmNoLWNvbGxlY3Rpb25zIj5TZWFyY2ggT3VyIENvbGxlY3Rpb25zIDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBvd25lZCBieSBNSVQ8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvd29ybGRjYXQiPldvcmxkQ2F0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBub3Qgb3duZWQgYnkgTUlUPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2lsbGlhZCI+SUxMaWFkIDxzcGFuIGNsYXNzPSJhYm91dCI+VHJhY2sgeW91ciBJbnRlcmxpYnJhcnkgQm9ycm93aW5nIHJlcXVlc3RzPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3N1Z2dlc3QtcHVyY2hhc2UiPlN1Z2dlc3QgYSBwdXJjaGFzZTwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TW9yZSBpbmZvcm1hdGlvbjwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Jlc2VydmVzIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9ib3Jyb3ctZGlyZWN0Ij5Cb3Jyb3cgRGlyZWN0IDxzcGFuIGNsYXNzPSJhYm91dCI+UmVxdWVzdCBpdGVtcyBmcm9tIEhhcnZhcmQsIFlhbGUsIGV0Yy48L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvb3RoZXJsaWJyYXJpZXMiPlZpc2l0IG5vbi1NSVQgbGlicmFyaWVzIDxzcGFuIGNsYXNzPSJhYm91dCI+SGFydmFyZCwgQm9ycm93IERpcmVjdCwgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvbGk+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBocmVmPSIjIiBjbGFzcz0ibm8tdW5kZXJsaW5lIG1haW4tbmF2LWxpbmsgbWVudS1jb250cm9sIj5SZXNlYXJjaCBzdXBwb3J0PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtcmVzZWFyY2htZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtcmVzZWFyY2htZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5IZWxwICZhbXA7IHVzZWZ1bCB0b29sczwvaDM+CgkJCQkJPHVsIGNsYXNzPSJsaXN0LXVuYnVsbGV0ZWQiPgoJCQkJCQk8bGk+PGEgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQiPlJlc2VhcmNoIHN1cHBvcnQgaG9tZTwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2FzayI+QXNrIHVzIDxzcGFuIGNsYXNzPSJhYm91dCI+RW1haWwsIGNoYXQsIGNhbGwsIGRyb3AgYnk8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvZXhwZXJ0cyI+UmVzZWFyY2ggZ3VpZGVzICZhbXA7IGV4cGVydCBsaWJyYXJpYW5zIDxzcGFuIGNsYXNzPSJhYm91dCI+Rm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0PC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2F1dGhlbnRpY2F0ZSI+QXV0aGVudGljYXRlIHRvIG9ubGluZSByZXNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5UaXBzICZhbXA7IHRyaWNrczwvc3Bhbj48L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJjb2wtMiBmbGV4LWl0ZW0iPgoJCQkJCTxoMyBjbGFzcz0iaGVhZGluZy1jb2wiPlB1Ymxpc2hpbmcgJmFtcDsgY29udGVudCBtYW5hZ2VtZW50PC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvcmVmZXJlbmNlcyI+Q2l0YXRpb24gJmFtcDsgd3JpdGluZyB0b29scyA8c3BhbiBjbGFzcz0iYWJvdXQiPk1lbmRlbGV5LCBab3Rlcm8sICZhbXA7IE92ZXJsZWFmPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2NpdGluZyI+Q2l0aW5nIHNvdXJjZXMgPHNwYW4gY2xhc3M9ImFib3V0Ij5Bdm9pZCBwbGFnaWFyaXNtLCBmb3JtYXQgcmVmZXJlbmNlcywgZXRjLjwvc3Bhbj48L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kYXRhLXNlcnZpY2VzIj5EYXRhIHNlcnZpY2VzIDxzcGFuIGNsYXNzPSJhYm91dCI+R0lTLCBkYXRhIG1hbmFnZW1lbnQsIHN0YXRpc3RpY2FsIHN1cHBvcnQ8L3NwYW4+PC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvc2Nob2xhcmx5Ij5TY2hvbGFybHkgY29tbXVuaWNhdGlvbnMgPHNwYW4gY2xhc3M9ImFib3V0Ij5PcGVuIGFjY2VzcywgY29weXJpZ2h0LCAmYW1wOyBwdWJsaXNoaW5nPC9zcGFuPjwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2FwaXMiPkFQSXMgZm9yIHNjaG9sYXJseSByZXNvdXJjZXM8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC9kaXY+CgkJCTwvZGl2PjwhLS0gZW5kIGRpdi5saW5rcy1zdWIgLS0+CgkJPC9saT48IS0tIGVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KCQk8bGkgY2xhc3M9ImxpbmstcHJpbWFyeSBmbGV4LWVuZCI+CgkJCTxoMiBjbGFzcz0ibWFpbi1uYXYtaGVhZGVyIj4KCQkJCTxhIGlkPSJtYWluLW5hdi1hYm91dG1lbnUtdGl0bGUiIGhyZWY9IiMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBtZW51LWNvbnRyb2wiPkFib3V0PC9hPgoJCQk8L2gyPgoJCQk8ZGl2IGFyaWEtbGFiZWxsZWRieT0ibWFpbi1uYXYtYWJvdXRtZW51LXRpdGxlIiBpZD0ibWFpbi1uYXYtYWJvdXRtZW51IiBjbGFzcz0ibGlua3Mtc3ViIGZsZXgtY29udGFpbmVyIHB1c2ggZ3JvdXAiPgoJCQkJPGRpdiBjbGFzcz0iY29sLTEgZmxleC1pdGVtIj4KCQkJCQk8aDMgY2xhc3M9ImhlYWRpbmctY29sIj5BYm91dCB0aGUgTGlicmFyaWVzPC9oMz4KCQkJCQk8dWwgY2xhc3M9Imxpc3QtdW5idWxsZXRlZCI+CgkJCQkJCTxsaT48YSBocmVmPSIvYWJvdXQvIj5BYm91dCB1cyBob21lPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvY29udGFjdCI+Q29udGFjdCB1czwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iL2pvYnMiPkpvYnM8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9naXZpbmciPkdpdmluZyB0byB0aGUgTUlUIExpYnJhcmllczwvYT48L2xpPgoJCQkJCTwvdWw+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNvbC0yIGZsZXgtaXRlbSI+CgkJCQkJPGgzIGNsYXNzPSJoZWFkaW5nLWNvbCI+TmV3cywgZXZlbnRzLCAmYW1wOyBleGhpYml0czwvaDM+CgkJCQkJPGEgaHJlZj0iL2V2ZW50cyI+Q2xhc3NlcyAmYW1wOyBldmVudHM8L2E+CgkJCQkJPGEgaHJlZj0iL25ld3MiPk5ld3M8L2E+CgkJCQkJPGEgaHJlZj0iL2V4aGliaXRzIj5FeGhpYml0cyAmYW1wOyBnYWxsZXJpZXM8L2E+CgkJCQkJPGEgaHJlZj0iL25ld3MvaW4tdGhlLW1lZGlhIj5JbiB0aGUgbWVkaWE8L2E+CgkJCQkJPGEgaHJlZj0iL21pdC1yZWFkcy8iPk1JVCBSZWFkczwvYT4KCQkJCTwvZGl2PgoJCQk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3Mtc3ViIC0tPgoJCTwvbGk+PCEtLSBlbmQgZGl2LmxpbmtzLXByaW1hcnkgLS0+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwgY2hhdCBwdXNoIj4KCQkJPGgyIGNsYXNzPSJtYWluLW5hdi1oZWFkZXIiPgoJCQkJPGEgaWQ9Im1haW4tbmF2LWFza3VzbWVudS10aXRsZSIgaHJlZj0iIyIgY2xhc3M9Im5vLXVuZGVybGluZSBtYWluLW5hdi1saW5rIG1lbnUtY29udHJvbCI+PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNi41OTNweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYuNTkzIDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNi41OTMgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xNi41OTMgNi4yNzhjMCAxLjA3NC0wLjA3NCAyLjE0OC0wLjI0MSAzLjE4NSAtMC4yMDQgMS4zNTMtMS43MjIgMi41NzQtMy4wNTUgMi43MjIgLTEuMzUzIDAuMTMxLTIuNjg2IDAuMjA0LTQuMDIgMC4yMjNMNS43NCAxNS44MzNDNS42MyAxNS45NDQgNS40ODEgMTYgNS4zMzQgMTZjLTAuMDk0IDAtMC4xNjctMC4wMTktMC4yNDEtMC4wMzdDNC44NzEgMTUuODcgNC43NCAxNS42NDcgNC43NCAxNS40MDdWMTIuMzdjLTAuNDgxLTAuMDM2LTAuOTYzLTAuMDU1LTEuNDQzLTAuMTExIC0xLjMzNC0wLjE0OC0yLjg1My0xLjQ0My0zLjA3NC0yLjc5NkMwLjA3NCA4LjQyNiAwIDcuMzUyIDAgNi4yOTZjMC0xLjA5MiAwLjA3NC0yLjE4NSAwLjIyMy0zLjI0IDAuMjIyLTEuMzUyIDEuNzQtMi42NDggMy4wNzQtMi43OTdDNC45NjMgMC4wOTMgNi42MyAwIDguMjk3IDBzMy4zMzMgMC4wOTMgNSAwLjI1OWMxLjMzMyAwLjE0OSAyLjg1MSAxLjQ0NSAzLjA1NSAyLjc5N0MxNi41MTkgNC4xMTEgMTYuNTkzIDUuMjA0IDE2LjU5MyA2LjI3OCIvPjwvc3ZnPjxzcGFuPkFzayBVczwvc3Bhbj48L2E+CgkJCTwvaDI+CgkJCTxkaXYgYXJpYS1sYWJlbGxlZGJ5PSJtYWluLW5hdi1hc2t1c21lbnUtdGl0bGUiIGlkPSJtYWluLW5hdi1hc2t1c21lbnUiIGNsYXNzPSJsaW5rcy1zdWIgcHVzaCI+CgkJCQk8ZGl2IGNsYXNzPSJ3cmFwLWJ1dHRvbi1jaGF0Ij4KCQkJCQk8ZGl2IGlkPSdsaWJjaGF0X2JlMmM2NTRiNjNkZDQzZjMxYzU2Mjk1ZWU1ZDc4ZDg4Jz48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGEgY2xhc3M9Im1vcmUiIGhyZWY9Ii9hc2siPk1vcmUgd2F5cyB0byBhc2sgdXM8L2E+CgkJCTwvZGl2PgoJCTwvbGk+CgkJPGxpIGNsYXNzPSJsaW5rLXByaW1hcnkgZmxleC1lbmQgc21hbGwiPgoJCQk8aDIgY2xhc3M9Im1haW4tbmF2LWhlYWRlciI+CgkJCQk8YSBocmVmPSIvYWNjb3VudHMiIGNsYXNzPSJuby11bmRlcmxpbmUgbWFpbi1uYXYtbGluayBhY2NvdW50LWxpbmsiPgoJCQkJCTxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNS40IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTUuNCAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTUuNDQ1IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMTMuNCAxNS43QzEyLjIgMTUuOSAxMC40IDE2IDcuNyAxNmMtNS40IDAtNy4zLTAuNi03LjMtMC42IC0wLjMtMC4xLTAuNC0wLjQtMC40LTAuNyAwLjMtMS42IDEuMi0yLjUgMi41LTMuMyAwLjMtMC4yIDAuOC0wLjQgMS4yLTAuNiAwLjgtMC4zIDEuOC0wLjcgMi0xLjNDNS44IDkuMiA1LjcgOC42IDUuMiA3LjljLTEuNC0yLjMtMS43LTQuMy0wLjgtNS45QzUuMSAwLjcgNi40IDAgNy43IDBjMS40IDAgMi42IDAuNyAzLjMgMiAwLjkgMS42IDAuNyAzLjYtMC44IDUuOUM5LjggOC42IDkuNiA5LjIgOS44IDkuNmMwLjIgMC42IDEuMiAxIDIgMS4zIDAuNCAwLjIgMC45IDAuNCAxLjIgMC42IDEuMiAwLjggMi4xIDEuNiAyLjUgMy4zIDAuMSAwLjMtMC4xIDAuNi0wLjQgMC43QzE1IDE1LjQgMTQuNSAxNS42IDEzLjQgMTUuNyIvPjwvc3ZnPjxzcGFuPkFjY291bnQ8L3NwYW4+CgkJCQk8L2E+CgkJCTwvaDI+CgkJPC9saT4KCTwvdWw+CjwvbmF2PgoJCQkJCQk8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cDovL3d3dy5taXQuZWR1Ij48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0X2xvZ29fc3RkX3JnYl93aGl0ZS5zdmciIGhlaWdodD0iMzIiIGFsdD0iTUlUIGxvZ28iID4KCQkJPC9hPjwhLS0gRW5kIE1JVCBMb2dvIC0tPgoJCQkJCQkJCjxhIGhyZWY9Ii9zZWFyY2giIGNsYXNzPSJsaW5rLXNpdGUtc2VhcmNoIGhpZGRlbi1ub24tbW9iaWxlIj4KCTxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTIiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxMiAxMiIgY2xhc3M9Imljb24tc2VhcmNoIj48cGF0aCBkPSJNNy4yNzMgMC43MjdxMS4xODcgMCAyLjE5IDAuNTg1dDEuNTg4IDEuNTg4IDAuNTg1IDIuMTktMC41ODUgMi4xOS0xLjU4OCAxLjU4OC0yLjE5IDAuNTg1cS0xLjI3OCAwLTIuMzMtMC42NzZsLTMuMjg0IDMuMzAxcS0wLjI5NSAwLjI4NC0wLjY4OCAwLjI4NC0wLjQwMyAwLTAuNjg4LTAuMjg0dC0wLjI4NC0wLjY4OCAwLjI4NC0wLjY4OGwzLjMwMS0zLjI4NHEtMC42NzYtMS4wNTEtMC42NzYtMi4zMyAwLTEuMTg4IDAuNTg1LTIuMTl0MS41ODgtMS41ODggMi4xOS0wLjU4NXpNNy4yNzMgOHEwLjU5MSAwIDEuMTI4LTAuMjN0MC45MjktMC42MjIgMC42MjItMC45MjkgMC4yMy0xLjEyOC0wLjIzLTEuMTI4LTAuNjIyLTAuOTI5LTAuOTI5LTAuNjIyLTEuMTI4LTAuMjMtMS4xMjggMC4yMy0wLjkyOSAwLjYyMi0wLjYyMiAwLjkyOS0wLjIzIDEuMTI4IDAuMjMgMS4xMjggMC42MjIgMC45MjkgMC45MjkgMC42MjIgMS4xMjggMC4yM3oiPjwvcGF0aD48L3N2Zz4KCTxzcGFuIGNsYXNzPSJib3R0b20iPlNlYXJjaDwvc3Bhbj4KPC9hPjwhLS0gRW5kIC9zZWFyY2ggLS0+Cgo8YSBocmVmPSIvYWNjb3VudHMiIGNsYXNzPSJsaW5rLWFjY291bnQgaGlkZGVuLW5vbi1tb2JpbGUiPgoJPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1LjQiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNS40IDE2IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS40NDUgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJpY29uLWFjY291bnQiPjxwYXRoIGQ9Ik0xMy40IDE1LjdDMTIuMiAxNS45IDEwLjQgMTYgNy43IDE2Yy01LjQgMC03LjMtMC42LTcuMy0wLjYgLTAuMy0wLjEtMC40LTAuNC0wLjQtMC43IDAuMy0xLjYgMS4yLTIuNSAyLjUtMy4zIDAuMy0wLjIgMC44LTAuNCAxLjItMC42IDAuOC0wLjMgMS44LTAuNyAyLTEuM0M1LjggOS4yIDUuNyA4LjYgNS4yIDcuOWMtMS40LTIuMy0xLjctNC4zLTAuOC01LjlDNS4xIDAuNyA2LjQgMCA3LjcgMGMxLjQgMCAyLjYgMC43IDMuMyAyIDAuOSAxLjYgMC43IDMuNi0wLjggNS45QzkuOCA4LjYgOS42IDkuMiA5LjggOS42YzAuMiAwLjYgMS4yIDEgMiAxLjMgMC40IDAuMiAwLjkgMC40IDEuMiAwLjYgMS4yIDAuOCAyLjEgMS42IDIuNSAzLjMgMC4xIDAuMy0wLjEgMC42LTAuNCAwLjdDMTUgMTUuNCAxNC41IDE1LjYgMTMuNCAxNS43Ii8+PC9zdmc+Cgk8c3BhbiBjbGFzcz0iYm90dG9tIj5BY2NvdW50PC9zcGFuPgo8L2E+PCEtLSBFbmQgL2JhcnRvbi1hY2NvdW50IC0tPgoKPGEgaHJlZj0iL2NvbnRhY3QiIGNsYXNzPSJsaW5rLWNvbnRhY3QgaGlkZGVuLW5vbi1tb2JpbGUiPgoJPGkgY2xhc3M9ImZhIGZhLWJvb2siIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+Cgk8c3BhbiBjbGFzcz0iYm90dG9tIj5Db250YWN0PC9zcGFuPgo8L2E+PCEtLSBFbmQgL2NvbnRhY3QgLS0+CgkJCQkJPC9oZWFkZXI+CgoKCTxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzLS1iZXR0ZXIgaGlkZGVuLXBob25lIGdyb3VwIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJicmVhZGNydW1icyI+Cgk8c3Bhbj48YSBocmVmPSIvIj5MaWJyYXJpZXMgaG9tZTwvYT48L3NwYW4+CglSZXNlYXJjaCBzdXBwb3J0PHNwYW4+PC9zcGFuPjwvZGl2PgoKCgk8ZGl2IGlkPSJzdGFnZSIgY2xhc3M9ImlubmVyIiByb2xlPSJtYWluIj4KCgkJCQkJCjxkaXYgY2xhc3M9InRpdGxlLXBhZ2UiPgoJCQk8aDE+UmVzZWFyY2ggc3VwcG9ydDwvaDE+Cgk8L2Rpdj4KCQkKCQk8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0iY29udGVudCBoYXMtc2lkZWJhciI+CgoJCQkJCQkJCgo8ZGl2IGNsYXNzPSJtYWluLWNvbnRlbnQgY29udGVudC1tYWluIj4KCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQiPgoJCTxkaXYgY2xhc3M9ImVudHJ5LXBhZ2UtdGl0bGUiPgoJCQkJPC9kaXY+CgkJPHA+RmluZCBvdXQgd2hlcmUgYW5kIGhvdyB0byBnZXQgaGVscCBmb3IgeW91ciByZXNlYXJjaCBvciBjb3Vyc2V3b3JrLjwvcD4KPGgyPkV4cGVydCBoZWxwPC9oMj4KPHVsPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9jb25zdWx0YXRpb25zIj5NYWtlIGFuIGFwcG9pbnRtZW50PC9hPiBmb3IgYSBjb25zdWx0IHdpdGggYW4gPGEgaHJlZj0iL2V4cGVydHMiPmV4cGVydCBsaWJyYXJpYW48L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9leHBlcnRzIj5SZXNlYXJjaCBndWlkZXM8L2E+OiBzcGVjaWFsaXplZCBndWlkZXMgZm9yIGV2ZXJ5IHJlc2VhcmNoIGludGVyZXN0PC9saT4KPGxpPk5vdCBzdXJlIHdoZXJlIHRvIGJlZ2luIG9yIHdobyB0byBjb250YWN0PyBDb21wbGV0ZSBvdXIgPGEgaHJlZj0iL2Fzay1lbWFpbCI+QXNrIHVzIGVtYWlsIGZvcm08L2E+LjwvbGk+CjwvdWw+CjxoMj5RdWljayBoZWxwPC9oMj4KPHVsPgo8bGk+PGEgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjVlbTsiIGhyZWY9Ii9vZmZjYW1wdXMiPkNvbm5lY3QgZnJvbSBvbiAmYW1wOyBvZmYtY2FtcHVzPC9hPjwvbGk+CjxsaT48YSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNWVtOyIgaHJlZj0iL3Jlc2VhcmNoLXN1cHBvcnQvdHJvdWJsZXNob290aW5nIj5FLXJlc291cmNlIHRyb3VibGVzaG9vdGluZzwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2NsYXNzZ3VpZGVzIj5HdWlkZXMgZm9yIHNwZWNpZmljIGNsYXNzZXMgJmFtcDsgcHJvZ3JhbXM8L2E+PC9saT4KPC91bD4KPGgyPldyaXRpbmcgJmFtcDsgcHVibGlzaGluZyBoZWxwPC9oMj4KPHVsPgo8bGk+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2NpdGluZyI+Q2l0aW5nIHNvdXJjZXMgJmFtcDsgYXZvaWRpbmcgcGxhZ2lhcmlzbTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL3RoZXNlcyI+RGlzc2VydGF0aW9ucy90aGVzZXM6IHByZXBhcmUgJmFtcDsgc3VibWl0IHlvdXIgTUlUIHRoZXNpcywgb3IgYm9ycm93IG90aGVycyYjODIxNzvCoDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2FyY2hpdmVzL3RoZXNpcy1zcGVjcy9pbmRleC5odG1sIj5NSVQgdGhlc2lzIHNwZWNpZmljYXRpb25zPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vZHNwYWNlLm1pdC5lZHUiPkRTcGFjZUBNSVQ6IGRlcG9zaXQgeW91ciB3b3JrIHRvIE1JVCYjODIxNztzIHJlcG9zaXRvcnk8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9zY2hvbGFybHkiPlNjaG9sYXJseSBDb21tdW5pY2F0aW9uPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vbGliZ3VpZGVzLm1pdC5lZHUvYXV0aG9yaWRzIj5BdXRob3IgaWRlbnRpZmllcnM6IGNvbm5lY3QgeW91ciBuYW1lIHdpdGggeW91ciB3b3JrPC9hPjwvbGk+CjwvdWw+CjxoMj5IZWxwIGZvciBnZXR0aW5nIG9yZ2FuaXplZDogY2l0YXRpb24gJmFtcDsgY29udGVudCBtYW5hZ2VtZW50IHRvb2xzPC9oMj4KPGgzPk9yZ2FuaXplIHlvdXIgcmVmZXJlbmNlcyAmYW1wOyBQREZzOjwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii9yZWZlcmVuY2VzIj5PdmVydmlldyBvZiBjaXRhdGlvbiBtYW5hZ2VtZW50PC9hPjwvbGk+CjxsaT48YSBocmVmPSIvem90ZXJvIj5ab3Rlcm88L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9tZW5kZWxleSI+TWVuZGVsZXk8L2E+PC9saT4KPC91bD4KPGgzPk9yZ2FuaXplIHlvdXIgZmlsZXMgJmFtcDsgaW5mb3JtYXRpb246PC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iaHR0cDovL2xpYmd1aWRlcy5taXQuZWR1L2NpdGUtd3JpdGUiPkNpdGF0aW9uIE1hbmFnZW1lbnQgYW5kIFdyaXRpbmcgVG9vbHM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9kYXRhLW1hbmFnZW1lbnQvc3RvcmUvb3JnYW5pemUvIj5EYXRhIG1hbmFnZW1lbnQgJiM4MjExOyBPcmdhbml6ZSB5b3VyIGZpbGVzPC9hPjwvbGk+CjwvdWw+Cgk8L2Rpdj4KPC9kaXY+CgkJCQoJCQkJCQkJCQoJPGRpdiBpZD0ic2lkZWJhckNvbnRlbnQiIGNsYXNzPSJzaWRlYmFyIHNwYW4zIj4KCQk8ZGl2IGNsYXNzPSJzaWRlYmFyV2lkZ2V0cyI+CgkJCTxhc2lkZSBpZD0iYmxhY2stc3R1ZGlvLXRpbnltY2UtNSIgY2xhc3M9IndpZGdldC1vZGQgd2lkZ2V0LWZpcnN0IHdpZGdldC0xIG5vLXRvcC1ib3JkZXIgd2lkZ2V0IHdpZGdldF9ibGFja19zdHVkaW9fdGlueW1jZSIgcm9sZT0iY29tcGxlbWVudGFyeSI+PGgyIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPlNlZSBhbHNvOjwvaDI+PGRpdiBjbGFzcz0idGV4dHdpZGdldCI+PHVsIGNsYXNzPSJhcnJvd3MiPgo8bGk+PGEgdGl0bGU9IkJvcnJvdyAmYW1wOyByZXF1ZXN0IiBocmVmPSIvY2lyYyI+Qm9ycm93ICZhbXA7IHJlcXVlc3Q8L2E+PC9saT4KPC91bD4KPC9kaXY+PC9hc2lkZT48YXNpZGUgaWQ9ImJsYWNrLXN0dWRpby10aW55bWNlLTM5IiBjbGFzcz0id2lkZ2V0LWV2ZW4gd2lkZ2V0LWxhc3Qgd2lkZ2V0LTIgd2lkZ2V0IHdpZGdldF9ibGFja19zdHVkaW9fdGlueW1jZSIgcm9sZT0iY29tcGxlbWVudGFyeSI+PGgyIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPkluZm9ybWF0aW9uIGZvcjo8L2gyPjxkaXYgY2xhc3M9InRleHR3aWRnZXQiPjx1bD4KPGxpPjxhIGhyZWY9Ii9mYWN1bHR5Ij5GYWN1bHR5PC9hPjwvbGk+CjxsaT48YSBocmVmPSIvYWx1bW5pIj5BbHVtbmk8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii92aXNpdG9ycyI+VmlzaXRvcnM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9kaXNhYmlsaXRpZXMiPlBlcnNvbnMgd2l0aCBkaXNhYmlsaXRpZXM8L2E+PC9saT4KPC91bD4KPC9kaXY+PC9hc2lkZT4JCTwvZGl2PgoJPC9kaXY+ICAgICAgCgkJCQoJCTwvZGl2PjwhLS0gZW5kIGRpdiNjb250ZW50IC0tPgoKCTwvZGl2PjwhLS0gZW5kIGRpdiNzdGFnZSAtLT4KCgoJPGZvb3Rlcj4KCgkJPGRpdiBjbGFzcz0iZm9vdGVyLW1haW4gZmxleC1jb250YWluZXIiPgoJPGRpdiBjbGFzcz0ibGlua3MtYWxsIGZsZXgtY29udGFpbmVyIj4KCQk8ZGl2IGNsYXNzPSJmbGV4LWl0ZW0iPgoJCQk8aDQ+PGEgaHJlZj0iL3NlYXJjaCI+U2VhcmNoPC9hPjwvaDQ+CgkJCTxhIGhyZWY9Ii9zZWFyY2gtY29sbGVjdGlvbnMiIGNsYXNzPSJsaW5rLXN1YiI+U2VhcmNoIE91ciBDb2xsZWN0aW9uczwvYT4KCQkJPGEgaHJlZj0iL3dvcmxkY2F0IiBjbGFzcz0ibGluay1zdWIiPldvcmxkQ2F0PC9hPgoJCQk8YSBocmVmPSJodHRwczovL2xpYmd1aWRlcy5taXQuZWR1L2F6LnBocCIgY2xhc3M9Imxpbmstc3ViIj5EYXRhYmFzZXMgQS1aPC9hPgoJCQk8YSBocmVmPSIvc2VhcmNoLXJlc2VydmVzIiBjbGFzcz0ibGluay1zdWIiPkNvdXJzZSByZXNlcnZlczwvYT4KCQkJPGEgaHJlZj0iL3NpdGUtc2VhcmNoIiBjbGFzcz0ibGluay1zdWIiPlNpdGUgc2VhcmNoPC9hPgoJCQk8YSBocmVmPSIvc2VhcmNoIiBjbGFzcz0ibGluay1zdWIiPk1vcmUgc2VhcmNoIG9wdGlvbnM8L2E+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9ob3VycyI+SG91cnMgJmFtcDsgbG9jYXRpb25zPC9hPjwvaDQ+CgkJCTxhIGhyZWY9Ii9ob3VycyIgY2xhc3M9Imxpbmstc3ViIj5Ib3VyczwvYT4KCQkJPGEgaHJlZj0iL2xvY2F0aW9ucyIgY2xhc3M9Imxpbmstc3ViIj5NYXAgb2YgbG9jYXRpb25zPC9hPgoJCQk8YSBocmVmPSIvc3R1ZHkiIGNsYXNzPSJsaW5rLXN1YiI+U3R1ZHkgc3BhY2VzPC9hPgoJCQk8YSBocmVmPSIvZXhoaWJpdHMiIGNsYXNzPSJsaW5rLXN1YiI+RXhoaWJpdHMgJmFtcDsgZ2FsbGVyaWVzPC9hPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImZsZXgtaXRlbSI+CgkJCTxoND48YSBocmVmPSIvYm9ycm93Ij5Cb3Jyb3cgJmFtcDsgcmVxdWVzdDwvYT48L2g0PgoJCQk8YSBocmVmPSIvYWNjb3VudHMiIGNsYXNzPSJsaW5rLXN1YiI+QWNjb3VudHMgb3ZlcnZpZXc8L2E+CgkJCTxhIGhyZWY9Ii9yZXNlcnZlcyIgY2xhc3M9Imxpbmstc3ViIj5Db3Vyc2UgcmVzZXJ2ZXM8L2E+CgkJCTxhIGhyZWY9Ii9vdGhlcmxpYnJhcmllcyIgY2xhc3M9Imxpbmstc3ViIj5WaXNpdCBub24tTUlUIGxpYnJhcmllczwvYT4KCQkJPGEgaHJlZj0iL2JvcnJvdyIgY2xhc3M9Imxpbmstc3ViIj5Nb3JlIGJvcnJvdyAmYW1wOyByZXF1ZXN0IG9wdGlvbnM8L2E+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0iZmxleC1pdGVtIj4KCQkJPGg0PjxhIGhyZWY9Ii9yZXNlYXJjaC1zdXBwb3J0Ij5SZXNlYXJjaCBzdXBwb3J0PC9hPjwvaDQ+CgkJCTxhIGhyZWY9Ii9hc2siIGNsYXNzPSJsaW5rLXN1YiI+QXNrIHVzPC9hPgoJCQk8YSBocmVmPSIvZXhwZXJ0cyIgY2xhc3M9Imxpbmstc3ViIj5SZXNlYXJjaCBndWlkZXMgJmFtcDsgZXhwZXJ0IGxpYnJhcmlhbnM8L2E+CgkJCTxhIGhyZWY9Ii9zY2hvbGFybHkiIGNsYXNzPSJsaW5rLXN1YiI+U2Nob2xhcmx5IGNvbW11bmljYXRpb25zPC9hPgoJCQk8YSBocmVmPSIvcmVmZXJlbmNlcyIgY2xhc3M9Imxpbmstc3ViIj5DaXRhdGlvbiAmYW1wOyB3cml0aW5nIHNvZnR3YXJlPC9hPgoJCQk8YSBocmVmPSIvcmVzZWFyY2gtc3VwcG9ydCIgY2xhc3M9Imxpbmstc3ViIj5Nb3JlIHJlc2VhcmNoIHN1cHBvcnQgb3B0aW9uczwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJmbGV4LWl0ZW0iPgoJCQk8aDQ+PGEgaHJlZj0iL2Fib3V0Ij5BYm91dCB1czwvYT48L2g0PgoJCQk8c3BhbiBjbGFzcz0ibGluay1zdWIiPjxhIGhyZWY9Ii9jb250YWN0Ij5Db250YWN0IHVzPC9hPiB8IDxhIGhyZWY9Ii9mb2xsb3ciPkZvbGxvdyB1czwvYT48L3NwYW4+CgkJCTxzcGFuIGNsYXNzPSJsaW5rLXN1YiI+PGEgaHJlZj0iL25ld3MiPk5ld3M8L2E+PC9zcGFuPgoJCQk8c3BhbiBjbGFzcz0ibGluay1zdWIiPjxhIGhyZWY9Ii9ldmVudHMiPkNsYXNzZXMgJmFtcDsgZXZlbnRzPC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvdXNlLXBvbGljaWVzIj5Vc2UgcG9saWN5PC9hPjwvc3Bhbj4KCQkJPHNwYW4gY2xhc3M9Imxpbmstc3ViIj48YSBocmVmPSIvZ2l2aW5nIj5HaXZpbmc8L2E+PC9zcGFuPgoJCQk8c3BhbiBjbGFzcz0ibGluay1zdWIiPjxhIGhyZWY9Ii9hYm91dCI+TW9yZSBhYm91dCB1czwvYT48L3NwYW4+CgkJPC9kaXY+Cgk8L2Rpdj48IS0tIGVuZCBkaXYubGlua3MtYWxsIC0tPgoKCTxkaXYgY2xhc3M9ImlkZW50aXR5IGZsZXgtY29udGFpbmVyIj4KCQk8YSBocmVmPSIvIiBjbGFzcz0ibG9nby1taXQtbGliIj48aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0bGliLXdvcmRtYXJrLnN2ZyIgYWx0PSJNSVQgTGlicmFyaWVzIGxvZ28iPjwvYT48IS0tIEVuZCBNSVQgTGlicmFyaWVzIExvZ28gLS0+CgoJCTxkaXYgY2xhc3M9ImxpbmtzLXByaW1hcnkgZmxleC1jb250YWluZXIiPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3ByaXZhY3kiIGNsYXNzPSJsaW5rLXN1YiI+UHJpdmFjeTwvYT48L3NwYW4+CgkJCTxzcGFuPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvcGVybWlzc2lvbnMiIGNsYXNzPSJsaW5rLXN1YiI+UGVybWlzc2lvbnM8L2E+PC9zcGFuPgoJCQk8c3Bhbj48YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FjY2Vzc2liaWxpdHkiIGNsYXNzPSJsaW5rLXN1YiI+QWNjZXNzaWJpbGl0eTwvYT48L3NwYW4+CgkJCTxzcGFuPjxhIGhyZWY9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvY29udGFjdCIgY2xhc3M9Imxpbmstc3ViIj5Db250YWN0IHVzPC9hPjwvc3Bhbj4KCQk8L2Rpdj48IS0tIEVuZCBkaXYubGlua3MtcHJpbWFyeSAtLT4KCgk8L2Rpdj48IS0tIEVuZCBkaXYuaWRlbnRpdHkgLS0+CjwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJmb290ZXItaW5mby1pbnN0aXR1dGUiPgoJCQk8YSBjbGFzcz0ibGluay1sb2dvLW1pdCIgaHJlZj0iaHR0cHM6Ly93d3cubWl0LmVkdSI+CgkJCQk8aW1nIHNyYz0iaHR0cHM6Ly9jZG4ubGlicmFyaWVzLm1pdC5lZHUvZmlsZXMvYnJhbmRpbmcvbG9jYWwvbWl0X2xvY2t1cF9zdGQtdGhyZWUtbGluZV9yZ2Jfd2hpdGUuc3ZnIiBhbHQ9Ik1JVCIgd2lkdGg9IjE1MiI+CgkJCTwvYT4KCgkJCTxkaXYgY2xhc3M9ImxpY2Vuc2UiPkNvbnRlbnQgY3JlYXRlZCBieSB0aGUgTUlUIExpYnJhcmllcywgPGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLzQuMC8iPkNDIEJZLU5DPC9hPiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLiA8YSBocmVmPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L3Jlc2VhcmNoLXN1cHBvcnQvbm90aWNlcy9jb3B5cmlnaHQtbm90aWZ5LyI+Tm90aWZ5IHVzIGFib3V0IGNvcHlyaWdodCBjb25jZXJuczwvYT4uPC9kaXY+CgkJPC9kaXY+PCEtLSBFbmQgZGl2LmZvb3Rlci1pbmZvLWluc3RpdHVyZSAtLT4KCTwvZm9vdGVyPgoKPC9kaXY+PCEtLSBFbmQgZGl2LndyYXAtcGFnZSAtLT4KCjxzY3JpcHQgdHlwZT0ic3BlY3VsYXRpb25ydWxlcyI+CnsicHJlZmV0Y2giOlt7InNvdXJjZSI6ImRvY3VtZW50Iiwid2hlcmUiOnsiYW5kIjpbeyJocmVmX21hdGNoZXMiOiJcLyoifSx7Im5vdCI6eyJocmVmX21hdGNoZXMiOlsiXC93cFwvd3AtKi5waHAiLCJcL3dwXC93cC1hZG1pblwvKiIsIlwvYXBwXC91cGxvYWRzXC8qIiwiXC9hcHBcLyoiLCJcL2FwcFwvcGx1Z2luc1wvKiIsIlwvYXBwXC90aGVtZXNcL21pdGxpYi1wYXJlbnRcLyoiLCJcLypcXD8oLispIl19fSx7Im5vdCI6eyJzZWxlY3Rvcl9tYXRjaGVzIjoiYVtyZWx+PVwibm9mb2xsb3dcIl0ifX0seyJub3QiOnsic2VsZWN0b3JfbWF0Y2hlcyI6Ii5uby1wcmVmZXRjaCwgLm5vLXByZWZldGNoIGEifX1dfSwiZWFnZXJuZXNzIjoiY29uc2VydmF0aXZlIn1dfQo8L3NjcmlwdD4KICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgalF1ZXJ5KGZ1bmN0aW9uKCQpIHsKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlcXVhbEhlaWdodChncm91cCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWxsZXN0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNIZWlnaHQgPSAkKHRoaXMpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpc0hlaWdodCA+IHRhbGxlc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxsZXN0ID0gdGhpc0hlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmhlaWdodCh0YWxsZXN0KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGVxdWFsSGVpZ2h0KCQoIi5kZy1ncmlkLXNob3J0Y29kZSAuZGdfZ3JpZC1zaG9ydGNvZGUtY29sIikpOwoKICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBlcXVhbEhlaWdodCgkKCIuZGctZ3JpZC1zaG9ydGNvZGUgLmRnX2dyaWQtc2hvcnRjb2RlLWNvbCIpKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS93cC93cC1pbmNsdWRlcy9qcy9kaXN0L2hvb2tzLm1pbi5qcz92ZXI9NGQ2M2EzZDQ5MWQxMWZmZDhhYzYiIGlkPSJ3cC1ob29rcy1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvd3Avd3AtaW5jbHVkZXMvanMvZGlzdC9pMThuLm1pbi5qcz92ZXI9NWU1ODBlYjQ2YTkwYzJiOTk3ZTYiIGlkPSJ3cC1pMThuLWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ3cC1pMThuLWpzLWFmdGVyIj4KLyogPCFbQ0RBVEFbICovCndwLmkxOG4uc2V0TG9jYWxlRGF0YSggeyAndGV4dCBkaXJlY3Rpb25cdTAwMDRsdHInOiBbICdsdHInIF0gfSApOwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5jbHVkZXMvc3d2L2pzL2luZGV4LmpzP3Zlcj02LjEiIGlkPSJzd3YtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImNvbnRhY3QtZm9ybS03LWpzLWJlZm9yZSI+Ci8qIDwhW0NEQVRBWyAqLwp2YXIgd3BjZjcgPSB7CiAgICAiYXBpIjogewogICAgICAgICJyb290IjogImh0dHBzOlwvXC9saWJyYXJpZXMubWl0LmVkdVwvd3AtanNvblwvIiwKICAgICAgICAibmFtZXNwYWNlIjogImNvbnRhY3QtZm9ybS03XC92MSIKICAgIH0KfTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL2NvbnRhY3QtZm9ybS03L2luY2x1ZGVzL2pzL2luZGV4LmpzP3Zlcj02LjEiIGlkPSJjb250YWN0LWZvcm0tNy1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2Rldi5qcz92ZXI9MC44IiBpZD0iZGV2LWpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQvanMvbGliY2hhdC5qcz92ZXI9MC44IiBpZD0ibGliY2hhdC1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL21lbnUudG9nZ2xlLmpzP3Zlcj0wLjgiIGlkPSJtZW51LXRvZ2dsZS1qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0icGFyZW50LXByb2R1Y3Rpb24tanMtYmVmb3JlIj4KLyogPCFbQ0RBVEFbICovCmNvbnN0IFRIRU1FX1JPT1QgPSAiaHR0cHM6Ly9saWJyYXJpZXMubWl0LmVkdS9hcHAvdGhlbWVzL21pdGxpYi1wYXJlbnQiOwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vbGlicmFyaWVzLm1pdC5lZHUvYXBwL3RoZW1lcy9taXRsaWItcGFyZW50L2pzL2FsZXJ0cy5qcz92ZXI9MC44IiBpZD0icGFyZW50LXByb2R1Y3Rpb24tanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC90aGVtZXMvbWl0bGliLXBhcmVudC9qcy9jb3JlLmpzP3Zlcj0wLjgiIGlkPSJwYXJlbnQtaW50ZXJpb3ItanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL3BhZ2UtbGlua3MtdG8vZGlzdC9uZXctdGFiLmpzP3Zlcj0zLjMuNyIgaWQ9InBhZ2UtbGlua3MtdG8tanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9IndwY2Y3Y2Ytc2NyaXB0cy1qcy1leHRyYSI+Ci8qIDwhW0NEQVRBWyAqLwp2YXIgd3BjZjdjZl9nbG9iYWxfc2V0dGluZ3MgPSB7ImFqYXh1cmwiOiJodHRwczpcL1wvbGlicmFyaWVzLm1pdC5lZHVcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAifTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2xpYnJhcmllcy5taXQuZWR1L2FwcC9wbHVnaW5zL2NmNy1jb25kaXRpb25hbC1maWVsZHMvanMvc2NyaXB0cy5qcz92ZXI9Mi4yLjMiIGlkPSJ3cGNmN2NmLXNjcmlwdHMtanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+d2luZG93Lk5SRVVNfHwoTlJFVU09e30pO05SRVVNLmluZm89eyJiZWFjb24iOiJiYW0ubnItZGF0YS5uZXQiLCJsaWNlbnNlS2V5IjoiTlJKUy0wMzY4MmNjNjljMWM1YTM5NTgzIiwiYXBwbGljYXRpb25JRCI6IjU3ODM0MzMxOSIsInRyYW5zYWN0aW9uTmFtZSI6Ik5RZFZNa29DV1VCWVVSRU5XQXhOZGdWTUNsaGRGa0lFQTFJPSIsInF1ZXVlVGltZSI6MCwiYXBwbGljYXRpb25UaW1lIjoyNDIsImF0dHMiOiJHVUJXUkFJWVNrND0iLCJlcnJvckJlYWNvbiI6ImJhbS5uci1kYXRhLm5ldCIsImFnZW50IjoiIn08L3NjcmlwdD48L2JvZHk+CjwvaHRtbD4K", "response_headers": {"accept-ranges": ["bytes"], "age": ["421990"], "cache-control": ["public, max-age=604800"], "content-length": ["117657"], "content-type": ["text/html; charset=UTF-8"], "date": ["Tue, 09 Dec 2025 14:30:06 GMT"], "link": ["; rel=\"https://api.w.org/\", ; rel=\"alternate\"; title=\"JSON\"; type=\"application/json\", ; rel=shortlink"], "permissions-policy": ["geolocation=(), microphone=(), camera=()"], "referrer-policy": ["no-referrer-when-downgrade"], "server": ["nginx"], "strict-transport-security": ["max-age=300"], "vary": ["Accept-Encoding, Cookie"], "via": ["1.1 varnish"], "x-cache": ["HIT"], "x-cache-hits": ["1"], "x-content-type-options": ["nosniff"], "x-frame-options": ["SAMEORIGIN"], "x-pantheon-styx-hostname": ["styx-fe3-b-5df8569779-pqmgb"], "x-served-by": ["cache-chi-kigq8000105-CHI"], "x-styx-req-id": ["08be92e8-d135-11f0-a108-12562a46f4ee"], "x-timer": ["S1765290606.393752,VS0,VE3"], "x-orig-content-encoding": ["gzip"]}} diff --git a/tests/fixtures/mitlibwebsite/website.html b/tests/fixtures/mitlibwebsite/website.html new file mode 100644 index 0000000..23e7d61 --- /dev/null +++ b/tests/fixtures/mitlibwebsite/website.html @@ -0,0 +1,18 @@ + + + + + + +
+

Not Helpful

+
+ +

Hello World!

+
+
+

Also Not Helpful

+
+ + \ No newline at end of file diff --git a/tests/fixtures/mitlibwebsite/website_missing_og_description.html b/tests/fixtures/mitlibwebsite/website_missing_og_description.html new file mode 100644 index 0000000..047cee4 --- /dev/null +++ b/tests/fixtures/mitlibwebsite/website_missing_og_description.html @@ -0,0 +1,16 @@ + + + + + +
+

Not Helpful

+
+ +

Hello World!

+
+
+

Also Not Helpful

+
+ + \ No newline at end of file diff --git a/tests/sources/json/test_mitlibwebsite.py b/tests/sources/json/test_mitlibwebsite.py index 752dca2..033fe2f 100644 --- a/tests/sources/json/test_mitlibwebsite.py +++ b/tests/sources/json/test_mitlibwebsite.py @@ -1,15 +1,22 @@ # ruff: noqa: RUF001 +import base64 from unittest.mock import MagicMock, patch import transmogrifier.models as timdex from transmogrifier.sources.json.mitlibwebsite import MITLibWebsite -def create_mitlibwebsite_source_record_stub() -> dict: +def create_mitlibwebsite_source_record_stub( + html_filepath="tests/fixtures/mitlibwebsite/website.html", +) -> dict: + with open(html_filepath) as f: + html_content = f.read() + return { "url": "https://libraries.mit.edu/search/", "cdx_title": "Search | MIT Libraries", - "og_description": "Use this page to learn about different ways you can search the MIT Libraries' offerings.", # noqa: E501 + "html_base64": base64.b64encode(html_content.encode()).decode(), + "response_headers": {}, } @@ -45,6 +52,7 @@ def test_mitlibwebsite_transform_returns_timdex_record(mitlibwebsite_records): summary=[ "Use this page to learn about different ways you can search the MIT Libraries’ offerings. Use the Default Quick Search Our Quick Search is the default search on the Libraries’ homepage. This collects results from different library search tools and sorts the results into 4 categories: Books and media Articles and book chapters Archives and manuscript collections Our library website and guides The tool will search the 4 categories and present the top results from each category. It is useful to see the full breadth of what MIT Libraries has on a particular topic or author. Go straight to our […]" # noqa: E501 ], + fulltext=timdex_record.fulltext, ) @@ -119,13 +127,14 @@ def test_mitlibwebsite_get_links_success(): def test_mitlibwebsite_get_summary_success(): source_record = create_mitlibwebsite_source_record_stub() assert MITLibWebsite.get_summary(source_record) == [ - "Use this page to learn about different ways you can search the MIT Libraries' offerings." # noqa: E501 + "Use this page to learn about different ways you can search the MIT Libraries’ offerings. Use the Default Quick Search Our Quick Search is the default search on the Libraries’ homepage. This collects results from different library search tools and sorts the results into 4 categories: Books and media Articles and book chapters Archives and manuscript collections Our library website and guides The tool will search the 4 categories and present the top results from each category. It is useful to see the full breadth of what MIT Libraries has on a particular topic or author. Go straight to our […]" # noqa: E501 ] def test_mitlibwebsite_get_summary_returns_none_if_og_description_is_none(): - source_record = create_mitlibwebsite_source_record_stub() - source_record["og_description"] = None + source_record = create_mitlibwebsite_source_record_stub( + html_filepath="tests/fixtures/mitlibwebsite/website_missing_og_description.html" + ) assert MITLibWebsite.get_summary(source_record) is None diff --git a/transmogrifier/sources/json/mitlibwebsite.py b/transmogrifier/sources/json/mitlibwebsite.py index c933e56..442fcd9 100644 --- a/transmogrifier/sources/json/mitlibwebsite.py +++ b/transmogrifier/sources/json/mitlibwebsite.py @@ -1,5 +1,9 @@ +import base64 import hashlib import logging +from functools import lru_cache + +from bs4 import BeautifulSoup, Tag import transmogrifier.models as timdex from transmogrifier.sources.jsontransformer import JSONTransformer @@ -10,6 +14,30 @@ class MITLibWebsite(JSONTransformer): + @classmethod + @lru_cache(maxsize=8) + def parse_html(cls, html_base64: str) -> Tag: + """Parse HTML from base64 encoded ASCII string. + + For this mitlibwebsite source, also remove the
and